Files
zeekayandHanzo Dev 841ea1c0da no hogs: products and insights
716 files rewritten, 30 renamed, same family mapping as the frontend pass.

Held back, and each for a reason rather than by oversight:

  db_table values          insights_hogfunction, insights_hogflow,
                           insights_hogfunctiontemplate, hogflow_templates.
                           Renaming a table is ALTER TABLE, so it ships as a
                           migration with the raw SQL in nodejs that names it.
  hog_invocation_results   a Datastore table with Kafka engine tables on it
  products/review_hog      the module path is the Django app path; moving it
                           moves app_label and every migration is recorded under
                           (app_label, name). That is the same history break as
                           renaming a migration file, one level up.
  */migrations/*           five files, untouched
  whogho                   an integration vendor

Checked: 395 of 397 changed Python files compile. The two that do not —
insightsql/database/database.py and temporal/schedule.py — fail identically at
origin/main under the same interpreter, because they use `type X = ...` and
`except*`, which need the 3.13 this repo pins and not the 3.9 doing the check.
Running the check against the original is what told those apart from a real
break.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-09 09:16:43 -07:00

68 lines
2.7 KiB
TypeScript

import { combineUrl } from 'kea-router'
import { urls } from 'scenes/urls'
import { FileSystemIconType, ProductItemCategory, ProductKey } from '~/queries/schema/schema-general'
import { FileSystemIconColor, ProductManifest } from '../../frontend/src/types'
export const manifest: ProductManifest = {
name: 'Skills',
scenes: {
Skills: {
import: () => import('./frontend/LLMSkillsScene'),
projectBased: true,
name: 'Skills',
description: 'Manage versioned agent skills that any MCP-connected agent can discover and use.',
layout: 'app-container',
iconType: 'llm_prompts',
},
Skill: {
import: () => import('./frontend/LLMSkillScene'),
projectBased: true,
name: 'Skill',
layout: 'app-container',
iconType: 'llm_prompts',
},
},
routes: {
'/skills': ['Skills', 'skills'],
// Category tabs (e.g. /skills/scouts) must precede the `/skills/:name` wildcard so they
// aren't captured as a skill named after the tab. Route order = match precedence.
'/skills/scouts': ['Skills', 'skillsScouts'],
'/skills/review-script': ['Skills', 'skillsReview'],
'/skills/:name': ['Skill', 'skill'],
},
redirects: {
'/prompt-management/skills': (_params, searchParams, hashParams) =>
combineUrl(urls.skills(), searchParams, hashParams).url,
'/prompt-management/skills/:name': (params, searchParams, hashParams) =>
combineUrl(urls.skill(params.name), searchParams, hashParams).url,
'/llm-analytics/skills': (_params, searchParams, hashParams) =>
combineUrl(urls.skills(), searchParams, hashParams).url,
'/llm-analytics/skills/:name': (params, searchParams, hashParams) =>
combineUrl(urls.skill(params.name), searchParams, hashParams).url,
},
urls: {
skills: (): string => '/skills',
// A category tab under /skills (e.g. /skills/scouts). The tab key is the URL segment.
skillsCategoryTab: (categoryTab: string): string => `/skills/${categoryTab}`,
skill: (name: string, params?: { file?: string; version?: number }): string =>
combineUrl(`/skills/${name}`, params).url,
},
fileSystemTypes: {},
treeItemsNew: [],
treeItemsProducts: [
{
path: 'Skills',
intents: [ProductKey.SKILLS],
category: ProductItemCategory.TOOLS,
type: 'llm_skills',
iconType: 'llm_prompts' as FileSystemIconType,
iconColor: ['var(--color-product-llm-analytics-light)'] as FileSystemIconColor,
href: urls.skills(),
sceneKey: 'Skills',
},
],
}