@blade-hq/agent-kit 0.5.6 → 0.5.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{SkillStatusBar-CvNCQRtt.d.ts → SkillStatusBar-Dlf-_G5d.d.ts} +2 -2
- package/dist/{blade-client-B6xMtRwr.d.ts → blade-client-7VANnJfr.d.ts} +5 -1
- package/dist/{chunk-CBO2A567.js → chunk-ETHPRRT2.js} +9 -1
- package/dist/chunk-ETHPRRT2.js.map +1 -0
- package/dist/{chunk-VPWN6VS4.js → chunk-G2LJZTPX.js} +178 -93
- package/dist/chunk-G2LJZTPX.js.map +1 -0
- package/dist/{chunk-PX53WJ2C.js → chunk-GIE2Q2MB.js} +28 -16
- package/dist/chunk-GIE2Q2MB.js.map +1 -0
- package/dist/{chunk-T3G4VHAM.js → chunk-STCTXRMJ.js} +2 -2
- package/dist/{chunk-D7IT5PRL.js → chunk-UM7G65GH.js} +116 -20
- package/dist/chunk-UM7G65GH.js.map +1 -0
- package/dist/{chunk-NOUG4L43.js → chunk-X3S36RR2.js} +2 -2
- package/dist/client/index.d.ts +1051 -17
- package/dist/client/index.js +1 -1
- package/dist/react/api/vibe-coding.d.ts +3 -3
- package/dist/react/api/vibe-coding.js +2 -2
- package/dist/react/components/chat/index.d.ts +6 -5
- package/dist/react/components/chat/index.js +5 -5
- package/dist/react/components/plan/index.js +3 -3
- package/dist/react/components/session/index.d.ts +1 -1
- package/dist/react/components/session/index.js +3 -3
- package/dist/react/components/workspace/index.js +3 -3
- package/dist/react/index.d.ts +177 -8
- package/dist/react/index.js +469 -6
- package/dist/react/index.js.map +1 -1
- package/dist/{session-ADRevzHD.d.ts → session-BuaeCsMC.d.ts} +62 -2
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/chunk-CBO2A567.js.map +0 -1
- package/dist/chunk-D7IT5PRL.js.map +0 -1
- package/dist/chunk-PX53WJ2C.js.map +0 -1
- package/dist/chunk-VPWN6VS4.js.map +0 -1
- /package/dist/{chunk-T3G4VHAM.js.map → chunk-STCTXRMJ.js.map} +0 -0
- /package/dist/{chunk-NOUG4L43.js.map → chunk-X3S36RR2.js.map} +0 -0
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/react/context.ts","../../src/react/provider.tsx","../../src/react/api/api-keys.ts","../../src/react/api/env-buckets.ts","../../src/react/api/memories.ts","../../src/react/api/gis-api.ts","../../src/react/api/published-apps.ts","../../src/react/api/prod-solution.ts","../../src/react/api/solutions.ts","../../src/react/api/scenarios.ts","../../src/react/api/scheduled-tasks.ts","../../src/react/api/software-factory.ts","../../src/react/api/registry.ts","../../src/react/hooks/use-gis.ts","../../src/react/hooks/use-check-skill-file.ts","../../src/react/hooks/use-global-skill-stats.ts","../../src/react/hooks/use-skills.ts","../../src/react/hooks/use-registry.ts","../../src/react/lib/step-ranges.ts","../../src/react/schemas/session.ts","../../src/react/types/solution.ts","../../src/react/schemas/studio/resource-base.ts","../../src/react/schemas/studio/database.ts","../../src/react/schemas/studio/tool.ts","../../src/react/schemas/studio/knowledge.ts","../../src/react/schemas/studio/agent.ts","../../src/react/schemas/studio/scene.ts","../../src/react/schemas/studio/env.ts","../../src/react/schemas/scheduled-task.ts","../../src/react/schemas/task.ts"],"sourcesContent":["import { createContext } from \"react\"\nimport type { BladeClient } from \"../client\"\n\nexport const BladeContext = createContext<BladeClient | null>(null)\n","import type { ReactNode } from \"react\"\nimport { useContext } from \"react\"\nimport type { BladeClient } from \"../client\"\nimport { getBootstrappedClient } from \"./bootstrap\"\nimport { BladeContext } from \"./context\"\n\nexport interface BladeClientProviderProps {\n client?: BladeClient\n children: ReactNode\n}\n\nexport function BladeClientProvider({ client, children }: BladeClientProviderProps) {\n const instance = client ?? getBootstrappedClient()\n return <BladeContext.Provider value={instance}>{children}</BladeContext.Provider>\n}\n\nexport function useBladeClient(): BladeClient {\n return useContext(BladeContext) ?? getBootstrappedClient()\n}\n","import type { ApiKeysResource } from \"../../client/resources/api-keys\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/api-keys\"\nconst r = (): ApiKeysResource => getClient().apiKeys\nexport const listApiKeys = (...args: Parameters<ApiKeysResource[\"listApiKeys\"]>) => r().listApiKeys(...args)\nexport const createApiKey = (...args: Parameters<ApiKeysResource[\"createApiKey\"]>) => r().createApiKey(...args)\nexport const renameApiKey = (...args: Parameters<ApiKeysResource[\"renameApiKey\"]>) => r().renameApiKey(...args)\nexport const deleteApiKey = (...args: Parameters<ApiKeysResource[\"deleteApiKey\"]>) => r().deleteApiKey(...args)\n","import type { EnvBucketsResource } from \"../../client/resources/env-buckets\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/env-buckets\"\nconst r = (): EnvBucketsResource => getClient().envBuckets\nexport const listEnvBuckets = (...args: Parameters<EnvBucketsResource[\"listEnvBuckets\"]>) =>\n r().listEnvBuckets(...args)\nexport const getEnvBucket = (...args: Parameters<EnvBucketsResource[\"getEnvBucket\"]>) =>\n r().getEnvBucket(...args)\nexport const setEnvBucket = (...args: Parameters<EnvBucketsResource[\"setEnvBucket\"]>) =>\n r().setEnvBucket(...args)\nexport const deleteEnvBucket = (...args: Parameters<EnvBucketsResource[\"deleteEnvBucket\"]>) =>\n r().deleteEnvBucket(...args)\nexport const getPlatformEnv = (...args: Parameters<EnvBucketsResource[\"getPlatformEnv\"]>) =>\n r().getPlatformEnv(...args)\nexport const getPlatformEnvReadonly = (\n ...args: Parameters<EnvBucketsResource[\"getPlatformEnvReadonly\"]>\n) => r().getPlatformEnvReadonly(...args)\nexport const setPlatformEnv = (...args: Parameters<EnvBucketsResource[\"setPlatformEnv\"]>) =>\n r().setPlatformEnv(...args)\nexport const deletePlatformEnv = (...args: Parameters<EnvBucketsResource[\"deletePlatformEnv\"]>) =>\n r().deletePlatformEnv(...args)\n","import type { MemoriesResource } from \"../../client/resources/memories\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/memories\"\nconst r = (): MemoriesResource => getClient().memories\nexport const createMemory = (...args: Parameters<MemoriesResource[\"createMemory\"]>) => r().createMemory(...args)\nexport const listMemories = (...args: Parameters<MemoriesResource[\"listMemories\"]>) => r().listMemories(...args)\nexport const getMemory = (...args: Parameters<MemoriesResource[\"getMemory\"]>) => r().getMemory(...args)\nexport const updateMemory = (...args: Parameters<MemoriesResource[\"updateMemory\"]>) => r().updateMemory(...args)\nexport const patchMemory = (...args: Parameters<MemoriesResource[\"patchMemory\"]>) => r().patchMemory(...args)\nexport const deleteMemory = (...args: Parameters<MemoriesResource[\"deleteMemory\"]>) => r().deleteMemory(...args)\nexport const batchMemories = (...args: Parameters<MemoriesResource[\"batchMemories\"]>) => r().batchMemories(...args)\n","import type { GisResource } from \"../../client/resources/gis\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/gis\"\nconst r = (): GisResource => getClient().gis\nexport const fetchGisState = (...args: Parameters<GisResource[\"fetchGisState\"]>) => r().fetchGisState(...args)\nexport const fetchRuntimeConfig = (...args: Parameters<GisResource[\"fetchRuntimeConfig\"]>) => r().fetchRuntimeConfig(...args)\n","import type { PublishedAppsResource } from \"../../client/resources/published-apps\"\nimport { getClient } from \"./client\"\n\nexport type * from \"../../client/resources/published-apps\"\nexport type * from \"../schemas/published-apps\"\n\nconst r = (): PublishedAppsResource => getClient().publishedApps\n\nexport const listPublishedApps = (\n ...args: Parameters<PublishedAppsResource[\"listPublishedApps\"]>\n) => r().listPublishedApps(...args)\n\nexport const unpublishApp = (...args: Parameters<PublishedAppsResource[\"unpublishApp\"]>) =>\n r().unpublishApp(...args)\n","import { apiFetch, getClient } from \"./client\"\n\nexport interface ProdSolution {\n id: string\n name: string\n description?: string | null\n status: string\n current_dag_version: number\n current_architecture_version?: number\n created_by: string\n created_at: string\n updated_at: string\n session_id?: string | null\n ai_assist?: boolean\n flow_session_id?: string | null\n flow_ai_assist?: boolean\n architecture_session_id?: string | null\n architecture_ai_assist?: boolean\n}\n\nexport interface DslStep {\n id: string\n type: string\n name: string\n next?: string[]\n branches?: string[]\n condition?: string\n true?: string[]\n false?: string[]\n body?: string[]\n}\n\nexport interface DagPayload {\n steps: DslStep[]\n viewport?: Record<string, unknown> | null\n}\n\nexport interface DagVersion {\n solution_id: string\n version: number\n steps: DslStep[]\n viewport?: Record<string, unknown> | null\n created_at: string\n created_by: string\n message?: string | null\n change_type: string\n rollback_from_version?: number | null\n is_published: boolean\n}\n\nexport interface DagVersionListItem {\n version: number\n created_at: string\n created_by: string\n message?: string | null\n change_type: string\n rollback_from_version?: number | null\n is_published: boolean\n}\n\nexport interface ArchitectureNode {\n id: string\n name: string\n parent_id?: string | null\n dashed_parent_ids?: string[]\n title?: string\n description?: string\n}\n\nexport interface ArchitecturePayload {\n nodes: ArchitectureNode[]\n viewport?: Record<string, unknown> | null\n}\n\nexport interface ArchitectureVersion extends ArchitecturePayload {\n solution_id: string\n version: number\n created_at: string\n created_by: string\n message?: string | null\n change_type: string\n rollback_from_version?: number | null\n is_published: boolean\n}\n\nexport type ArchitectureVersionListItem = DagVersionListItem\n\nexport interface MulticaRuntime {\n id: string\n name?: string\n [key: string]: unknown\n}\n\nexport interface MulticaAgent {\n id: string\n name?: string\n runtime_id?: string\n visibility?: string\n instructions?: string\n [key: string]: unknown\n}\n\nexport interface ProdAgentPreviewUrl {\n name: string\n url: string\n}\n\nexport interface ProdAgentCatalogRole {\n id: string\n name: string\n description?: string\n}\n\nexport interface ProdAgentCatalogSolution {\n id: string\n name: string\n layout_type: string\n initial_mode?: string | null\n roles: ProdAgentCatalogRole[]\n}\n\nexport interface ProdAgentRecord {\n id: string\n user_id: string\n name: string\n icon: string\n agent_id: string\n solution_id: string\n biz_role_id: string\n agent_template: string\n initial_mode?: string | null\n skills: string[]\n skills_data: Record<string, unknown>\n skills_data_raw: Record<string, string>\n init_script: string\n layout_type: string\n preview_urls: ProdAgentPreviewUrl[]\n runtime_provider: string\n visibility: string\n instructions: string\n instantiated: boolean\n instantiated_agent_id?: string | null\n instantiated_at?: string | null\n instantiate_error?: string | null\n instantiated_agent?: Record<string, unknown>\n create_warning?: string\n created_at: string\n updated_at: string\n}\n\nexport interface ProdUser {\n sub: string\n email?: string\n name?: string\n preferred_username?: string\n picture?: string | null\n}\n\nexport interface ProdUserTokenStatus {\n sub: string\n email: string\n ok: boolean\n changed: boolean\n message: string\n token_prefix?: string\n}\n\nexport interface UserWorkspace {\n id: string\n name?: string\n slug?: string\n role?: string\n [key: string]: unknown\n}\n\nexport interface CreateUserWorkspaceRequest {\n name: string\n description?: string\n member_user_ids?: string[]\n agent_ids?: string[]\n}\n\nexport interface WorkspaceIssueCreateRequest {\n title: string\n description?: string\n priority?: \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\"\n status?: \"backlog\" | \"todo\" | \"in_progress\" | \"in_review\" | \"done\" | \"blocked\" | \"cancelled\"\n assignee?: string\n assignee_type?: IssueAssigneeType\n assignee_id?: string\n project?: string\n}\n\nexport interface WorkspaceIssue {\n id?: string\n workspace_id?: string\n number?: number\n identifier?: string\n title?: string\n issue_url?: string\n description?: string | null\n status?: IssueStatus\n priority?: IssuePriority\n assignee?: string\n assignee_type?: IssueAssigneeType | null\n assignee_id?: string | null\n creator_type?: IssueAssigneeType\n creator_id?: string\n parent_issue_id?: string | null\n project_id?: string | null\n start_date?: string | null\n due_date?: string | null\n metadata?: Record<string, unknown>\n labels?: Array<{ id: string; name: string; color?: string | null }>\n created_at?: string\n updated_at?: string\n [key: string]: unknown\n}\n\nexport type IssueStatus =\n | \"backlog\"\n | \"todo\"\n | \"in_progress\"\n | \"in_review\"\n | \"done\"\n | \"blocked\"\n | \"cancelled\"\n\nexport type IssuePriority = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\"\nexport type IssueAssigneeType = \"member\" | \"agent\" | \"squad\"\n\nexport interface WorkspaceIssueListResponse {\n issues: WorkspaceIssue[]\n total: number\n}\n\nexport interface WorkspaceIssueGroup {\n id: string\n assignee_type: IssueAssigneeType | null\n assignee_id: string | null\n issues: WorkspaceIssue[]\n total: number\n}\n\nexport interface WorkspaceIssueGroupedResponse {\n groups: WorkspaceIssueGroup[]\n}\n\nexport interface WorkspaceIssueTimelineEntry {\n type: \"activity\" | \"comment\"\n id: string\n actor_type: string\n actor_id: string\n created_at: string\n action?: string\n details?: Record<string, unknown>\n content?: string\n parent_id?: string | null\n updated_at?: string\n comment_type?: string\n}\n\nexport interface WorkspaceIssueTaskRun {\n id: string\n status?: string\n title?: string\n name?: string\n goal?: string\n created_at?: string\n updated_at?: string\n started_at?: string | null\n completed_at?: string | null\n [key: string]: unknown\n}\n\nexport interface WorkspaceIssueUsageSummary {\n total_tokens?: number\n total_cost_usd?: number\n input_tokens?: number\n output_tokens?: number\n [key: string]: unknown\n}\n\nexport interface WorkspaceMember {\n id?: string\n workspace_id?: string\n user_id?: string\n role?: string\n name?: string\n email?: string\n avatar_url?: string | null\n created_at?: string\n [key: string]: unknown\n}\n\nexport interface WorkspaceAssistantSession {\n user_id?: string\n workspace_id: string\n biz_role_id: string\n session_id?: string | null\n created_at?: string | null\n updated_at?: string | null\n}\n\nexport async function listProdSolutions(): Promise<ProdSolution[]> {\n const payload = await apiFetch<{ items?: ProdSolution[] }>(\"/api/prod_solution\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function listProdUsers(): Promise<ProdUser[]> {\n const payload = await apiFetch<{ items?: ProdUser[] }>(\"/api/prod_users\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function checkProdUserTokenStatus(users: ProdUser[]): Promise<ProdUserTokenStatus[]> {\n const payload = await apiFetch<{ items?: ProdUserTokenStatus[] }>(\"/api/prod_users/token-status\", {\n method: \"POST\",\n body: JSON.stringify({ users }),\n })\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function refreshProdUserToken(user: ProdUser): Promise<ProdUserTokenStatus> {\n return apiFetch<ProdUserTokenStatus>(\"/api/prod_users/token-refresh\", {\n method: \"POST\",\n body: JSON.stringify({ user }),\n })\n}\n\nexport async function listUserWorkspaces(): Promise<UserWorkspace[]> {\n const payload = await apiFetch<{ items?: UserWorkspace[] }>(\"/api/prod_workspaces\")\n return Array.isArray(payload.items) ? [...payload.items].reverse() : []\n}\n\nexport async function createUserWorkspace(\n request: CreateUserWorkspaceRequest,\n): Promise<UserWorkspace> {\n return apiFetch<UserWorkspace>(\"/api/prod_workspaces\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function getUserWorkspace(workspaceId: string): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}`,\n )\n}\n\nexport async function updateUserWorkspace(\n workspaceId: string,\n request: { name?: string; description?: string },\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function listWorkspaceAgents(workspaceId: string): Promise<Array<Record<string, unknown>>> {\n const payload = await apiFetch<{ items?: Array<Record<string, unknown>> }>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/agents`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function connectWorkspaceAgent(\n workspaceId: string,\n request: { agent_id: string },\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/agents`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function removeWorkspaceAgent(\n workspaceId: string,\n agentId: string,\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/agents/${encodeURIComponent(agentId)}`,\n {\n method: \"DELETE\",\n },\n )\n}\n\nexport async function listWorkspaceMembers(workspaceId: string): Promise<WorkspaceMember[]> {\n const payload = await apiFetch<{ items?: WorkspaceMember[] }>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/members`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function addWorkspaceMember(\n workspaceId: string,\n request: { user_id: string; role?: \"owner\" | \"admin\" | \"member\" },\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/members`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function removeWorkspaceMember(\n workspaceId: string,\n userId: string,\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/members/${encodeURIComponent(userId)}`,\n {\n method: \"DELETE\",\n },\n )\n}\n\nexport async function getWorkspaceAssistantSession(\n workspaceId: string,\n bizRoleId: string,\n): Promise<WorkspaceAssistantSession> {\n const search = new URLSearchParams({ biz_role_id: bizRoleId })\n return apiFetch<WorkspaceAssistantSession>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/assistant-session?${search}`,\n )\n}\n\nexport async function upsertWorkspaceAssistantSession(\n workspaceId: string,\n request: { biz_role_id: string; session_id: string },\n): Promise<WorkspaceAssistantSession> {\n return apiFetch<WorkspaceAssistantSession>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/assistant-session`,\n {\n method: \"PUT\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function createWorkspaceIssue(\n workspaceId: string,\n request: WorkspaceIssueCreateRequest,\n): Promise<Record<string, unknown>> {\n const response = await getClient().fetch(\n \"POST\",\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues`,\n {\n expectOk: false,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(request),\n },\n )\n if (!response.ok) {\n throw new Error(await readApiErrorMessage(response))\n }\n return response.json() as Promise<Record<string, unknown>>\n}\n\nexport async function listWorkspaceIssues(workspaceId: string): Promise<WorkspaceIssue[]> {\n const payload = await apiFetch<{ items?: WorkspaceIssue[] }>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nfunction issueSearch(params: Record<string, string | number | boolean | undefined>) {\n const search = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === \"\") continue\n search.set(key, String(value))\n }\n return search.toString()\n}\n\nasync function readApiErrorMessage(response: Response): Promise<string> {\n try {\n const payload = (await response.json()) as { detail?: unknown }\n const detail = payload.detail\n if (typeof detail === \"string\" && detail.trim()) return detail\n } catch {\n // Fall through to status text.\n }\n return `请求失败:${response.status} ${response.statusText}`\n}\n\nexport async function queryWorkspaceIssues(\n workspaceId: string,\n params: {\n status?: IssueStatus\n priority?: IssuePriority\n limit?: number\n offset?: number\n open_only?: boolean\n } = {},\n): Promise<WorkspaceIssueListResponse> {\n const search = issueSearch(params)\n const payload = await apiFetch<WorkspaceIssueListResponse>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/query?${search}`,\n )\n return {\n issues: Array.isArray(payload.issues) ? payload.issues : [],\n total: Number(payload.total ?? 0),\n }\n}\n\nexport async function queryWorkspaceGroupedIssues(\n workspaceId: string,\n params: {\n group_by: \"assignee\"\n statuses?: string\n limit?: number\n offset?: number\n },\n): Promise<WorkspaceIssueGroupedResponse> {\n const search = issueSearch(params)\n const payload = await apiFetch<WorkspaceIssueGroupedResponse>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/grouped?${search}`,\n )\n return { groups: Array.isArray(payload.groups) ? payload.groups : [] }\n}\n\nexport async function getWorkspaceIssue(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssue> {\n return apiFetch<WorkspaceIssue>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}`,\n )\n}\n\nexport async function updateWorkspaceIssue(\n workspaceId: string,\n issueId: string,\n updates: Partial<WorkspaceIssue>,\n): Promise<WorkspaceIssue> {\n return apiFetch<WorkspaceIssue>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}`,\n {\n method: \"PUT\",\n body: JSON.stringify(updates),\n },\n )\n}\n\nexport async function getWorkspaceIssueTimeline(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssueTimelineEntry[]> {\n const payload = await apiFetch<WorkspaceIssueTimelineEntry[]>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}/timeline`,\n )\n return Array.isArray(payload) ? payload : []\n}\n\nexport async function getWorkspaceIssueTaskRuns(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssueTaskRun[]> {\n const payload = await apiFetch<WorkspaceIssueTaskRun[]>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}/task-runs`,\n )\n return Array.isArray(payload) ? payload : []\n}\n\nexport async function getWorkspaceIssueUsage(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssueUsageSummary> {\n return apiFetch<WorkspaceIssueUsageSummary>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}/usage`,\n )\n}\n\nexport async function createProdSolution(request: {\n name: string\n description?: string | null\n session_id?: string | null\n ai_assist?: boolean\n flow_session_id?: string | null\n flow_ai_assist?: boolean\n architecture_session_id?: string | null\n architecture_ai_assist?: boolean\n}): Promise<ProdSolution> {\n return apiFetch<ProdSolution>(\"/api/prod_solution\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function updateProdSolution(\n solutionId: string,\n request: {\n name?: string\n description?: string | null\n status?: string\n },\n): Promise<ProdSolution> {\n return apiFetch<ProdSolution>(`/api/prod_solution/${encodeURIComponent(solutionId)}`, {\n method: \"PATCH\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function deleteProdSolution(solutionId: string): Promise<{ ok: boolean }> {\n return apiFetch<{ ok: boolean }>(`/api/prod_solution/${encodeURIComponent(solutionId)}`, {\n method: \"DELETE\",\n })\n}\n\nexport async function updateSessionId(solutionId: string, sessionId: string): Promise<{ ok: boolean }> {\n return apiFetch(`/api/prod_solution/${encodeURIComponent(solutionId)}/session`, {\n method: \"PUT\",\n body: JSON.stringify({ session_id: sessionId }),\n })\n}\n\nexport async function getCurrentDag(solutionId: string): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}`)\n}\n\nexport async function saveDag(\n solutionId: string,\n request: {\n base_version: number\n dag: DagPayload\n message?: string | null\n },\n): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}`, {\n method: \"PUT\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function validateDag(solutionId: string, dag: DagPayload): Promise<{\n ok: boolean\n errors: Array<{ code: string; message: string }>\n}> {\n return apiFetch(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/validate`, {\n method: \"POST\",\n body: JSON.stringify({ dag }),\n })\n}\n\nexport async function publishDag(\n solutionId: string,\n request: { dag?: DagPayload; version?: number; message?: string | null } = {},\n): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/publish`, {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function listDagVersions(solutionId: string): Promise<DagVersionListItem[]> {\n const payload = await apiFetch<{ items?: DagVersionListItem[] }>(\n `/api/prod_solution/dag/${encodeURIComponent(solutionId)}/versions`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getDagVersion(solutionId: string, version: number): Promise<DagVersion> {\n return apiFetch<DagVersion>(\n `/api/prod_solution/dag/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`,\n )\n}\n\nexport async function rollbackDag(\n solutionId: string,\n request: { from_version: number; message?: string | null },\n): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/rollback`, {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function deleteVersion(solutionId: string, version: number): Promise<{ ok: boolean }> {\n return apiFetch(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`, {\n method: \"DELETE\",\n })\n}\n\nexport async function getCurrentArchitecture(solutionId: string): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(`/api/prod_solution/architecture/${encodeURIComponent(solutionId)}`)\n}\n\nexport async function saveArchitecture(\n solutionId: string,\n request: {\n base_version: number\n architecture: ArchitecturePayload\n message?: string | null\n },\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(`/api/prod_solution/architecture/${encodeURIComponent(solutionId)}`, {\n method: \"PUT\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function validateArchitecture(solutionId: string, architecture: ArchitecturePayload): Promise<{\n ok: boolean\n errors: Array<{ code: string; message: string }>\n}> {\n return apiFetch(`/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/validate`, {\n method: \"POST\",\n body: JSON.stringify({ architecture }),\n })\n}\n\nexport async function publishArchitecture(\n solutionId: string,\n request: { architecture?: ArchitecturePayload; version?: number; message?: string | null } = {},\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/publish`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function listArchitectureVersions(\n solutionId: string,\n): Promise<ArchitectureVersionListItem[]> {\n const payload = await apiFetch<{ items?: ArchitectureVersionListItem[] }>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/versions`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getArchitectureVersion(\n solutionId: string,\n version: number,\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`,\n )\n}\n\nexport async function rollbackArchitecture(\n solutionId: string,\n request: { from_version: number; message?: string | null },\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/rollback`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function deleteArchitectureVersion(\n solutionId: string,\n version: number,\n): Promise<{ ok: boolean }> {\n return apiFetch(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`,\n {\n method: \"DELETE\",\n },\n )\n}\n\nexport async function listAgentRuntimes(): Promise<MulticaRuntime[]> {\n const payload = await apiFetch<{ items?: MulticaRuntime[] }>(\"/api/prod_solution/agents/runtimes\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function listAgents(includeArchived = false): Promise<MulticaAgent[]> {\n const suffix = includeArchived ? \"?include_archived=true\" : \"\"\n const payload = await apiFetch<{ items?: MulticaAgent[] }>(`/api/prod_solution/agents${suffix}`)\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getAgent(agentId: string): Promise<MulticaAgent> {\n return apiFetch<MulticaAgent>(`/api/prod_solution/agents/${encodeURIComponent(agentId)}`)\n}\n\nexport async function createAgent(request: {\n name: string\n runtime_id: string\n instructions?: string\n visibility?: string\n}): Promise<MulticaAgent> {\n return apiFetch<MulticaAgent>(\"/api/prod_solution/agents\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function listProdAgents(): Promise<ProdAgentRecord[]> {\n const payload = await apiFetch<{ items?: ProdAgentRecord[] }>(\"/api/prod_agents\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getProdAgent(providerKey: string): Promise<ProdAgentRecord> {\n return apiFetch<ProdAgentRecord>(`/api/prod_agents/${encodeURIComponent(providerKey)}`)\n}\n\nexport interface ProdAgentWorkspaceReference {\n id: string\n name: string\n slug?: string | null\n}\n\nexport async function getProdAgentWorkspaceReferences(\n recordId: string,\n options: { refresh?: boolean } = {},\n): Promise<{ items: ProdAgentWorkspaceReference[]; count: number; cached?: boolean }> {\n const search = options.refresh ? \"?refresh=true\" : \"\"\n return apiFetch<{ items: ProdAgentWorkspaceReference[]; count: number; cached?: boolean }>(\n `/api/prod_agents/${encodeURIComponent(recordId)}/workspace-references${search}`,\n )\n}\n\nexport async function listProdAgentCatalogSolutions(): Promise<ProdAgentCatalogSolution[]> {\n const payload = await apiFetch<{ items?: ProdAgentCatalogSolution[] }>(\"/api/prod_agents/catalog/solutions\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function createProdAgent(request: {\n name: string\n icon?: string\n agent_id?: string | null\n solution_id: string\n biz_role_id: string\n agent_template: string\n initial_mode?: string | null\n skills: string[]\n skills_data: Record<string, string>\n init_script: string\n layout_type: string\n preview_urls: ProdAgentPreviewUrl[]\n runtime_provider: string\n visibility: string\n instructions: string\n}): Promise<ProdAgentRecord> {\n return apiFetch<ProdAgentRecord>(\"/api/prod_agents\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function instantiateProdAgent(recordId: string): Promise<ProdAgentRecord & { ok?: boolean; message?: string }> {\n return apiFetch<ProdAgentRecord & { ok?: boolean; message?: string }>(\n `/api/prod_agents/${encodeURIComponent(recordId)}/instantiate`,\n {\n method: \"POST\",\n },\n )\n}\n\nexport async function deleteProdAgent(recordId: string): Promise<{ ok: boolean }> {\n return apiFetch<{ ok: boolean }>(`/api/prod_agents/${encodeURIComponent(recordId)}`, {\n method: \"DELETE\",\n })\n}\n\nexport async function startProdAgentSession(\n recordId: string,\n): Promise<{ session_id: string; route_solution_id: string }> {\n return apiFetch<{ session_id: string; route_solution_id: string }>(\n `/api/prod_agents/${encodeURIComponent(recordId)}/start-session`,\n {\n method: \"POST\",\n },\n )\n}\n\nexport async function updateProdAgent(\n recordId: string,\n request: {\n name: string\n icon?: string\n solution_id: string\n biz_role_id: string\n agent_template: string\n initial_mode?: string | null\n skills: string[]\n skills_data: Record<string, string>\n init_script: string\n layout_type: string\n preview_urls: ProdAgentPreviewUrl[]\n runtime_provider: string\n },\n): Promise<ProdAgentRecord> {\n return apiFetch<ProdAgentRecord>(`/api/prod_agents/${encodeURIComponent(recordId)}`, {\n method: \"PATCH\",\n body: JSON.stringify(request),\n })\n}\n","import type { SolutionsResource } from \"../../client/resources/solutions\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/solutions\"\nconst r = (): SolutionsResource => getClient().solutions\nexport const fetchSolutions = (...args: Parameters<SolutionsResource[\"fetchSolutions\"]>) => r().fetchSolutions(...args)\nexport const fetchSolutionFile = (...args: Parameters<SolutionsResource[\"fetchSolutionFile\"]>) => r().fetchSolutionFile(...args)\nexport const fetchSolutionBizRoles = (...args: Parameters<SolutionsResource[\"fetchSolutionBizRoles\"]>) => r().fetchSolutionBizRoles(...args)\n","import type { ScenariosResource } from \"../../client/resources/scenarios\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/scenarios\"\nconst r = (): ScenariosResource => getClient().scenarios\nexport const listQuickScenarios = (...args: Parameters<ScenariosResource[\"listQuickScenarios\"]>) => r().listQuickScenarios(...args)\nexport const createQuickScenario = (...args: Parameters<ScenariosResource[\"createQuickScenario\"]>) => r().createQuickScenario(...args)\nexport const deleteQuickScenario = (...args: Parameters<ScenariosResource[\"deleteQuickScenario\"]>) => r().deleteQuickScenario(...args)\nexport const updateQuickScenario = (...args: Parameters<ScenariosResource[\"updateQuickScenario\"]>) => r().updateQuickScenario(...args)\nexport const listBladeHubScenarioResources = (...args: Parameters<ScenariosResource[\"listBladeHubScenarioResources\"]>) => r().listBladeHubScenarioResources(...args)\n","import type {\n ScheduledTask,\n ScheduledTaskCalendarItem,\n ScheduledTaskRun,\n} from \"../schemas/scheduled-task\"\nimport { apiFetch } from \"./client\"\n\nexport interface ScheduledTaskCreatePayload {\n title: string\n prompt: string\n cron: string\n timezone?: string\n enabled?: boolean\n expires_at?: string | null\n skip_confirmations?: boolean\n model?: string | null\n}\n\nexport type ScheduledTaskUpdatePayload = Partial<ScheduledTaskCreatePayload>\n\nfunction taskPath(id: string): string {\n return `/api/scheduled-tasks/${encodeURIComponent(id)}`\n}\n\nexport async function listScheduledTasks(): Promise<ScheduledTask[]> {\n return apiFetch<ScheduledTask[]>(\"/api/scheduled-tasks\")\n}\n\nexport async function createScheduledTask(\n payload: ScheduledTaskCreatePayload,\n): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(\"/api/scheduled-tasks\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n}\n\nexport async function getScheduledTask(id: string): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(taskPath(id))\n}\n\nexport async function updateScheduledTask(\n id: string,\n payload: ScheduledTaskUpdatePayload,\n): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(taskPath(id), {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n })\n}\n\nexport async function deleteScheduledTask(id: string): Promise<void> {\n await apiFetch(taskPath(id), { method: \"DELETE\" })\n}\n\nexport async function startScheduledTask(id: string): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(`${taskPath(id)}/start`, { method: \"POST\" })\n}\n\nexport async function stopScheduledTask(id: string): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(`${taskPath(id)}/stop`, { method: \"POST\" })\n}\n\nexport async function listScheduledTaskRuns(id: string): Promise<ScheduledTaskRun[]> {\n return apiFetch<ScheduledTaskRun[]>(`${taskPath(id)}/runs`)\n}\n\nexport async function getScheduledTaskCalendar(params: {\n from: string\n to: string\n}): Promise<ScheduledTaskCalendarItem[]> {\n const search = new URLSearchParams({ from: params.from, to: params.to })\n return apiFetch<ScheduledTaskCalendarItem[]>(\n `/api/scheduled-tasks/calendar?${search.toString()}`,\n )\n}\n","import type { SoftwareFactoryResource } from \"../../client/resources/software-factory\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/software-factory\"\nconst r = (): SoftwareFactoryResource => getClient().softwareFactory\nexport const listSoftware = (...args: Parameters<SoftwareFactoryResource[\"listSoftware\"]>) => r().listSoftware(...args)\nexport const getSoftware = (...args: Parameters<SoftwareFactoryResource[\"getSoftware\"]>) => r().getSoftware(...args)\nexport const deleteSoftware = (...args: Parameters<SoftwareFactoryResource[\"deleteSoftware\"]>) => r().deleteSoftware(...args)\nexport const createSoftware = (...args: Parameters<SoftwareFactoryResource[\"createSoftware\"]>) => r().createSoftware(...args)\nexport const updateSoftware = (...args: Parameters<SoftwareFactoryResource[\"updateSoftware\"]>) => r().updateSoftware(...args)\nexport const bindTopicModuleSession = (...args: Parameters<SoftwareFactoryResource[\"bindTopicModuleSession\"]>) => r().bindTopicModuleSession(...args)\nexport const submitModuleForReview = (...args: Parameters<SoftwareFactoryResource[\"submitModuleForReview\"]>) => r().submitModuleForReview(...args)\nexport const completeModule = (...args: Parameters<SoftwareFactoryResource[\"completeModule\"]>) => r().completeModule(...args)\nexport const reopenModule = (...args: Parameters<SoftwareFactoryResource[\"reopenModule\"]>) => r().reopenModule(...args)\nexport const listSharedFiles = (...args: Parameters<SoftwareFactoryResource[\"listSharedFiles\"]>) => r().listSharedFiles(...args)\nexport const createSharedFile = (...args: Parameters<SoftwareFactoryResource[\"createSharedFile\"]>) => r().createSharedFile(...args)\nexport const uploadSoftwareDocuments = (...args: Parameters<SoftwareFactoryResource[\"uploadSoftwareDocuments\"]>) => r().uploadSoftwareDocuments(...args)\nexport const ensureIssueSession = (...args: Parameters<SoftwareFactoryResource[\"ensureIssueSession\"]>) => r().ensureIssueSession(...args)\nexport const listCodingTasks = (...args: Parameters<SoftwareFactoryResource[\"listCodingTasks\"]>) => r().listCodingTasks(...args)\nexport const startCoding = (...args: Parameters<SoftwareFactoryResource[\"startCoding\"]>) => r().startCoding(...args)\nexport const readShareFileContent = (...args: Parameters<SoftwareFactoryResource[\"readShareFileContent\"]>) => r().readShareFileContent(...args)\nexport const syncShare = (...args: Parameters<SoftwareFactoryResource[\"syncShare\"]>) => r().syncShare(...args)\nexport const listTopics = (...args: Parameters<SoftwareFactoryResource[\"listTopics\"]>) => r().listTopics(...args)\nexport const replaceTopics = (...args: Parameters<SoftwareFactoryResource[\"replaceTopics\"]>) => r().replaceTopics(...args)\nexport const getFactoryExportUrl = (...args: Parameters<SoftwareFactoryResource[\"getFactoryExportUrl\"]>) => r().getFactoryExportUrl(...args)\nexport const importFactory = (...args: Parameters<SoftwareFactoryResource[\"importFactory\"]>) => r().importFactory(...args)\n","import type { RegistryResource } from \"../../client/resources/registry\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/registry\"\nexport { normalizeResource, REGISTRY_PREFIX } from \"../../client/resources/registry\"\n\nconst r = (): RegistryResource => getClient().registry\nexport const createResourceApi = <T extends Record<string, unknown>>(apiType: string) =>\n r().createResourceApi<T>(apiType)\nexport const listSkillOrgs = (...args: Parameters<RegistryResource[\"listSkillOrgs\"]>) => r().listSkillOrgs(...args)\nexport const publishSkill = (...args: Parameters<RegistryResource[\"publishSkill\"]>) => r().publishSkill(...args)\nexport const databaseApi = new Proxy({} as RegistryResource[\"databaseApi\"], {\n get: (_target, prop) => Reflect.get(r().databaseApi, prop),\n})\nexport const toolApi = new Proxy({} as RegistryResource[\"toolApi\"], {\n get: (_target, prop) => Reflect.get(r().toolApi, prop),\n})\nexport const knowledgeApi = new Proxy({} as RegistryResource[\"knowledgeApi\"], {\n get: (_target, prop) => Reflect.get(r().knowledgeApi, prop),\n})\nexport const agentApi = new Proxy({} as RegistryResource[\"agentApi\"], {\n get: (_target, prop) => Reflect.get(r().agentApi, prop),\n})\n","import { useQuery } from \"@tanstack/react-query\"\nimport { fetchGisState, fetchRuntimeConfig } from \"../api/gis-api\"\nimport type { GisGoal, GisResource, GisTarget, RuntimeConfig } from \"../schemas/gis\"\nimport { useGisStore } from \"../stores/gis-store\"\n\nconst EMPTY_GOALS: GisGoal[] = []\nconst EMPTY_RESOURCES: GisResource[] = []\nconst EMPTY_TARGETS: GisTarget[] = []\nconst EMPTY_RUNTIME_CONFIG: RuntimeConfig = {\n sentryDsn: \"\",\n gisMapUrl: \"\",\n bladeOsPath: \"\",\n}\n\nexport function useGisState(sessionId: string | null | undefined) {\n const setGoals = useGisStore((state) => state.setGoals)\n const setResources = useGisStore((state) => state.setResources)\n const setTargets = useGisStore((state) => state.setTargets)\n const goals = useGisStore((state) =>\n sessionId ? (state.goalsBySession[sessionId] ?? EMPTY_GOALS) : EMPTY_GOALS,\n )\n const resources = useGisStore((state) =>\n sessionId ? (state.resourcesBySession[sessionId] ?? EMPTY_RESOURCES) : EMPTY_RESOURCES,\n )\n const targets = useGisStore((state) =>\n sessionId ? (state.targetsBySession[sessionId] ?? EMPTY_TARGETS) : EMPTY_TARGETS,\n )\n\n const query = useQuery({\n queryKey: [\"gis-state\", sessionId],\n queryFn: ({ signal }) =>\n fetchGisState(sessionId!, { signal }).then((state) => {\n setGoals(sessionId!, state.goals)\n setResources(sessionId!, state.resources)\n setTargets(sessionId!, state.targets)\n return state\n }),\n enabled: Boolean(sessionId),\n })\n\n return {\n data: {\n goals,\n resources,\n targets,\n },\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n }\n}\n\nexport function useRuntimeConfig() {\n const query = useQuery({\n queryKey: [\"runtime-config\"],\n queryFn: ({ signal }) => fetchRuntimeConfig({ signal }),\n })\n\n return {\n data: query.data ?? EMPTY_RUNTIME_CONFIG,\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n }\n}\n","import { useCallback } from \"react\"\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport { apiFetch } from \"../api/client\"\n\nexport function useCheckSkillFile(sessionId: string | null) {\n const queryClient = useQueryClient()\n\n const { data } = useQuery({\n queryKey: [\"sessions\", sessionId, \"skill-file\"],\n queryFn: async () => {\n if (!sessionId) return false\n const response = await apiFetch(`/api/sessions/${encodeURIComponent(sessionId)}/check-skill-file`)\n return (response as { exists: boolean }).exists\n },\n enabled: !!sessionId,\n staleTime: 5000,\n gcTime: 10000,\n })\n\n const refetch = useCallback(() => {\n return queryClient.invalidateQueries({ queryKey: [\"sessions\", sessionId, \"skill-file\"] })\n }, [queryClient, sessionId])\n\n return {\n exists: data ?? false,\n refetch,\n }\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { getGlobalSkillStats, type GlobalSkillStats } from \"../api/skills\"\n\nconst EMPTY: GlobalSkillStats = {\n remote_configured: false,\n remote_connected: false,\n installed_skill_count: 0,\n}\n\nexport function useGlobalSkillStats() {\n const query = useQuery({\n queryKey: [\"global-skill-stats\"],\n queryFn: ({ signal }) => getGlobalSkillStats({ signal }),\n refetchInterval: 300_000,\n })\n\n return {\n data: query.data ?? EMPTY,\n loading: query.isLoading,\n error: query.error,\n }\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { listSkills } from \"../api/skills\"\nimport type { SkillSummary } from \"../schemas/skill\"\n\nconst EMPTY_SKILLS: SkillSummary[] = []\n\nexport function useSkills() {\n const {\n data = EMPTY_SKILLS,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"skills\"],\n queryFn: ({ signal }) => listSkills({ signal }),\n })\n return { data, loading, error }\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { agentApi, databaseApi, knowledgeApi, toolApi } from \"../api/registry\"\nimport type { AgentResource } from \"../schemas/studio/agent\"\nimport type { DatabaseResource } from \"../schemas/studio/database\"\nimport type { KnowledgeResource } from \"../schemas/studio/knowledge\"\nimport type { ToolResource } from \"../schemas/studio/tool\"\n\nconst EMPTY_TOOL_PROVIDERS: ToolResource[] = []\nconst EMPTY_DATA_SOURCES: DatabaseResource[] = []\nconst EMPTY_KNOWLEDGE_BASES: KnowledgeResource[] = []\nconst EMPTY_AGENTS: AgentResource[] = []\n\nexport function useToolProviders() {\n const {\n data = EMPTY_TOOL_PROVIDERS,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"tool-providers\"],\n queryFn: ({ signal }) => toolApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n\nexport function useDataSources() {\n const {\n data = EMPTY_DATA_SOURCES,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"data-sources\"],\n queryFn: ({ signal }) => databaseApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n\nexport function useKnowledgeBases() {\n const {\n data = EMPTY_KNOWLEDGE_BASES,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"knowledge-bases\"],\n queryFn: ({ signal }) => knowledgeApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n\nexport function useAgents() {\n const {\n data = EMPTY_AGENTS,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"agents\"],\n queryFn: ({ signal }) => agentApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n","import type { ChatMessage } from \"../schemas/message\"\n\n/**\n * 每个 step 在消息流中的一段连续范围(R5 whatif 重跑的边界单位)。\n *\n * `[startIndex, endIndex)` 包含所有属于这个 step 的消息。\n * - 中间段:endIndex == 下一段的 startIndex(把本段 assistant 总结纳入本段)\n * - 末段:endIndex 停在最后一条显式 tag 该 step 的消息之后,避免把跑完 skill\n * 后的闲聊尾段误当成 step 的一部分\n *\n * 同一 stepNumber 可以在 stepRanges 里出现多次(每次 what-if 重跑后 step3/4\n * 会产生新一段),每次出现都是独立 range。\n */\nexport interface StepMessageRange {\n stepNumber: number\n startIndex: number\n endIndex: number\n}\n\n// Strategy 1: file-path pattern — matches step1_xxx/, step2/ etc.\nconst STEP_PATH_PATTERN = /step(\\d+)[_/]/g\n\n/** Extract a unique step number from text; null if 0 or multiple distinct matches. */\nfunction extractStepNumber(text: string): number | null {\n const nums = new Set<number>()\n for (const m of text.matchAll(STEP_PATH_PATTERN)) {\n nums.add(Number.parseInt(m[1], 10))\n }\n return nums.size === 1 ? nums.values().next().value! : null\n}\n\nfunction isRunSkillToolResult(text: string): boolean {\n return text.includes('\"tool_name\"') && text.includes('\"skill_id\"')\n}\n\nfunction collectFragments(msg: ChatMessage): string[] {\n const fragments: string[] = []\n if (msg.tool_calls) {\n for (const tc of msg.tool_calls) {\n if (tc.arguments) fragments.push(tc.arguments)\n if (typeof tc.result === \"string\") fragments.push(tc.result)\n }\n }\n const content = msg.content\n if (typeof content === \"string\") {\n fragments.push(content)\n } else if (Array.isArray(content)) {\n for (const part of content) {\n if (part.type === \"text\") fragments.push(part.text)\n }\n }\n return fragments\n}\n\n/**\n * 把\"tool_name → step_number\"的映射建立起来。两条来源:\n * 1. ListSkillTools 结果里 `tools[].description` 含 \"步骤N\"\n * 2. RunSkillTool 结果按出现顺序填补剩余未映射 step\n */\nfunction buildToolStepMap(\n messages: ChatMessage[],\n sortedStepNumbers: number[],\n): Map<string, number> {\n const map = new Map<string, number>()\n const stepPattern = /步骤\\s*(\\d+)/\n\n for (const msg of messages) {\n for (const frag of collectFragments(msg)) {\n if (!frag.includes('\"tools\"')) continue\n try {\n const parsed = JSON.parse(frag)\n if (!Array.isArray(parsed.tools)) continue\n for (const tool of parsed.tools) {\n const m = tool.description?.match(stepPattern)\n if (m && tool.name) map.set(tool.name, Number.parseInt(m[1], 10))\n }\n } catch {\n // not valid JSON, skip\n }\n }\n }\n const assignedSteps = new Set(map.values())\n const remainingSteps = sortedStepNumbers.filter((n) => !assignedSteps.has(n))\n let seqIndex = 0\n for (const msg of messages) {\n for (const frag of collectFragments(msg)) {\n if (!isRunSkillToolResult(frag)) continue\n const m = frag.match(/\"tool_name\":\\s*\"([^\"]+)\"/)\n if (!m || map.has(m[1])) continue\n if (seqIndex < remainingSteps.length) {\n map.set(m[1], remainingSteps[seqIndex])\n seqIndex++\n }\n }\n }\n return map\n}\n\n// what-if 重跑的用户消息 prompt 头,backend 在 _compose_whatif_prompt 里拼的固定串。\n// snapshot 会顺带含 stepN_xxx/ 路径,会被 STEP_PATH_PATTERN 扫中误 tag;而它本身\n// 是\"从 step N 开始重跑\"的新段起点,应该落在卡片之间的 gap section,不归属任何 step。\nconst WHATIF_HEADER_MARK = \"deprecated_by_rerun,请基于最新用户假设从 step\"\n\nfunction isWhatIfUserMessage(msg: ChatMessage): boolean {\n if (msg.role !== \"user\") return false\n const content = msg.content\n if (typeof content === \"string\") return content.includes(WHATIF_HEADER_MARK)\n if (Array.isArray(content)) {\n for (const part of content) {\n if (part.type === \"text\" && part.text.includes(WHATIF_HEADER_MARK)) return true\n }\n }\n return false\n}\n\nfunction findStepInMessage(\n msg: ChatMessage,\n toolStepMap: Map<string, number>,\n): number | null {\n if (isWhatIfUserMessage(msg)) return null\n const fragments = collectFragments(msg)\n for (const frag of fragments) {\n const n = extractStepNumber(frag)\n if (n != null) return n\n }\n for (const frag of fragments) {\n if (!isRunSkillToolResult(frag)) continue\n const m = frag.match(/\"tool_name\":\\s*\"([^\"]+)\"/)\n if (m) {\n const step = toolStepMap.get(m[1])\n if (step != null) return step\n }\n }\n return null\n}\n\n/**\n * 把消息流切成 step-aligned 的 ranges 数组(纯函数)。\n *\n * 传 `steps` 只是为了拿 stepNumber 白名单,所以参数接受任何带 `stepNumber` 字段\n * 的对象,避免引入 apps/web 的 StepInfo 依赖。\n *\n * 算法概述:\n * 1. 每条消息过 `findStepInMessage`,得到 perMessageStep[]\n * 2. 顺序扫,遇到 step transition 时开新段;往前吃紧邻的 Q&A(user/assistant),\n * 遇到 what-if 重跑 user 消息立即停(它是边界)\n * 3. 末段 endIndex 停在最后一条 tag 该 step 的消息之后(避免吞下尾部闲聊)\n */\nexport function buildStepRanges(\n messages: ChatMessage[],\n steps: ReadonlyArray<{ stepNumber: number }>,\n): StepMessageRange[] {\n if (steps.length === 0) return []\n\n const sortedStepNumbers = steps.map((s) => s.stepNumber).sort((a, b) => a - b)\n const stepNumbers = new Set(sortedStepNumbers)\n\n const toolStepMap = buildToolStepMap(messages, sortedStepNumbers)\n const perMessageStep: (number | null)[] = messages.map((m) =>\n findStepInMessage(m, toolStepMap),\n )\n\n const ranges: Omit<StepMessageRange, \"endIndex\">[] = []\n let prevStep: number | null = null\n\n for (let i = 0; i < messages.length; i++) {\n const stepNum = perMessageStep[i]\n // what-if user 气泡清空 prevStep:它是\"从 step N 开始重跑\"的边界,之后\n // 即便 stepNum === 之前的 step 也必须开新段(rerun 的同步新 step1 不能\n // 和 rerun 前的旧 step1 合并成一段)。\n if (stepNum == null) {\n if (isWhatIfUserMessage(messages[i])) prevStep = null\n continue\n }\n if (!stepNumbers.has(stepNum)) continue\n if (stepNum === prevStep) continue\n prevStep = stepNum\n\n const prevBound = ranges.length > 0 ? ranges[ranges.length - 1].startIndex + 1 : 0\n let start = i\n let foundUser = false\n for (let j = i - 1; j >= prevBound; j--) {\n const msg = messages[j]\n const msgStep = perMessageStep[j]\n if (msgStep != null && msgStep !== stepNum) break\n if (msg.role === \"user\" && isWhatIfUserMessage(msg)) break\n if (msg.role === \"user\") {\n start = j\n foundUser = true\n continue\n }\n if (msg.role === \"assistant\" && foundUser) {\n start = j\n break\n }\n break\n }\n ranges.push({ stepNumber: stepNum, startIndex: start })\n }\n\n ranges.sort((a, b) => a.startIndex - b.startIndex)\n\n const result: StepMessageRange[] = []\n for (let i = 0; i < ranges.length; i++) {\n const r = ranges[i]\n // 上界:中间段是下一段 startIndex,末段是 messages.length。\n const upper = i + 1 < ranges.length ? ranges[i + 1].startIndex : messages.length\n // 从上界往回找最后一条 tag 该 step 的消息;把 [r.startIndex, lastTagged+1)\n // 作为本段。这样中间段的尾巴(例如紧邻下一段的 what-if user boundary 消息\n // 或非本 step 的闲聊)就不会被吞进来。\n let lastTagged = r.startIndex\n for (let j = upper - 1; j >= r.startIndex; j--) {\n if (perMessageStep[j] === r.stepNumber) {\n lastTagged = j\n break\n }\n }\n result.push({ stepNumber: r.stepNumber, startIndex: r.startIndex, endIndex: lastTagged + 1 })\n }\n return result\n}\n\n/**\n * 从 stepRanges 里按 step 归属筛选出需作废(whatif)的消息 id。\n *\n * 输入 `fromStep = min(quotes.map(q => q.step_number))`,返回 stepNumber >=\n * fromStep 的每段 range 内所有 message.entry_id,按 range.startIndex 升序。\n * 重复 id 自动去重。\n *\n * 纯函数,便于放在 core 供 apps/web 的 hook 共用并独立单测。\n */\nexport function deriveDeprecateEntryIds(\n stepRanges: StepMessageRange[],\n messages: ChatMessage[],\n fromStep: number,\n): string[] {\n if (stepRanges.length === 0) return []\n const ids: string[] = []\n const seen = new Set<string>()\n for (const range of stepRanges) {\n if (range.stepNumber < fromStep) continue\n const end = Math.min(range.endIndex, messages.length)\n for (let j = range.startIndex; j < end; j++) {\n const msg = messages[j]\n if (!msg?.entry_id) continue\n if (seen.has(msg.entry_id)) continue\n seen.add(msg.entry_id)\n ids.push(msg.entry_id)\n }\n }\n return ids\n}\n","import { type } from \"arktype\"\nimport type { Solution } from \"../types/solution\"\n\nexport const SessionStatus = type(\n \"'created' | 'running' | 'completed' | 'failed' | 'interrupted' | 'waiting_for_input'\",\n)\nexport type SessionStatus = typeof SessionStatus.infer\n\nexport type TemplateId =\n | \"default\"\n | \"skill_editor\"\n | \"vibe_coding\"\n // ship-attack v2:用户从 ship-attack 页面点\"新建 session\"创建的会话。\n // 后端 _maybe_bind_first_skill 只对此模板触发首次绑定。\n | \"ship_attack\"\n\nexport type SkillEditorTemplateId = \"skill_editor\"\n\nexport type ModeId = \"planning\" | \"executing\"\n\nexport interface ReplayState {\n source_session_id?: string\n status?: \"replay\" | \"autonomous\"\n speed?: 1 | 2 | 5\n next_source_entry_id?: string | null\n ended_at?: string | null\n autonomous_reason?: string | null\n}\n\nexport interface SessionPortMapping {\n container_port: number\n host_port: number\n}\n\n/**\n * 列表搜索时单条会话的命中信息。\n * - field='title':关键词出现在 intent 里,snippet 为 null(标题本身就在 UI 上)\n * - field='content':关键词出现在历史消息里,snippet 含截窗预览与角色\n */\nexport interface SessionSearchMatch {\n field: \"title\" | \"content\"\n snippet: { role: string; text: string } | null\n}\n\nexport const SessionInfo = type({\n id: \"string\",\n intent: \"string\",\n status: SessionStatus,\n created_at: \"string\",\n updated_at: \"string\",\n \"shared?\": \"boolean\",\n \"memory_enabled?\": \"boolean\",\n \"is_persistent?\": \"boolean\",\n \"viewer_role?\": \"'owner' | 'viewer'\",\n \"template_id?\": \"string | null\",\n \"model?\": \"string | null\",\n \"solution_id?\": \"string | null\",\n \"biz_role_id?\": \"string | null\",\n \"solution?\": \"unknown\",\n \"plan_summary?\": \"string | null\",\n \"primary_skill_id?\": \"string | null\",\n // ship-attack v2:后端 engine.set_bound_skill 写入的\"绑定 skill id\"。\n // 未绑定 / 非 ship-attack session 为 null。\n \"bound_skill_id?\": \"string | null\",\n \"replay_state?\": \"unknown\",\n \"is_pinned?\": \"boolean\",\n \"pinned_at?\": \"string | null\",\n \"is_example?\": \"boolean\",\n \"ports?\": \"unknown\",\n \"disable_tools?\": \"string[]\",\n \"match?\": \"unknown\",\n})\nexport type SessionInfo = Omit<\n typeof SessionInfo.infer,\n \"template_id\" | \"solution\" | \"ports\" | \"match\"\n> & {\n shared?: boolean\n memory_enabled?: boolean\n is_persistent?: boolean\n viewer_role?: \"owner\" | \"viewer\"\n template_id?: TemplateId | null\n model?: string | null\n solution_id?: string | null\n biz_role_id?: string | null\n solution?: Solution | null\n primary_skill_id?: string | null\n bound_skill_id?: string | null\n replay_state?: ReplayState | null\n is_pinned?: boolean\n pinned_at?: string | null\n is_example?: boolean\n ports?: SessionPortMapping[]\n disable_tools?: string[]\n /** 仅在带 q 搜索的列表响应中出现;普通列表里此字段缺省。 */\n match?: SessionSearchMatch | null\n}\n\n/**\n * 主 skill 配置快照(v2)。创建 session 时从 SKILL.md frontmatter 抽出并\n * 固化到 session_root/.blade/primary-skill.json;ship-attack 页面骨架的唯\n * 一数据源。\n */\nexport interface PrimarySkillStepSpec {\n n: number\n label: string\n}\n\nexport interface PrimarySkillStageSpec {\n id: string\n name: string\n steps: PrimarySkillStepSpec[]\n}\n\nexport interface PrimarySkillParallelMode {\n id: string\n name: string\n prompt_hint: string\n}\n\nexport interface PrimarySkillSnapshot {\n version: number\n skill_id: string\n title: string\n description: string\n stages: PrimarySkillStageSpec[]\n parallel_modes: PrimarySkillParallelMode[]\n captured_at: string\n}\n\n/**\n * 单 session detail(GET /api/sessions/:id)。列表接口返回 SessionInfo,\n * detail 在此基础上附加 primary_skill_snapshot。\n */\nexport interface SessionDetail extends SessionInfo {\n primary_skill_snapshot?: PrimarySkillSnapshot | null\n /**\n * 会话级环境变量(owner-only)。后端仅在 GET detail 和 PUT /env 响应中返回,\n * 列表/搜索响应不带此字段。调用 setSessionEnv 后可类型安全地读回。\n */\n env?: Record<string, string>\n}\n","export enum LayoutType {\n Default = \"default\",\n SkillEditor = \"skill-editor\",\n BladeCoa = \"blade-coa\",\n ChatPreview = \"chat-preview\",\n ChatOnly = \"chat-only\",\n}\n\nexport interface Solution {\n id: string\n name: string\n version: string\n description?: string | null\n layout_type: LayoutType | string\n initial_mode?: \"planning\" | \"executing\" | string | null\n initial_message?: string | null\n preview?: { url: string; title?: string | null } | null\n roles?: BizRole[] | null\n data?: Record<string, unknown> | null\n}\n\nexport interface BizRole {\n id: string\n name: string\n description?: string | null\n preview?: { url: string; title?: string | null } | null\n}\n","import { type } from \"arktype\"\n\nexport const ResourceBase = type({\n id: \"string\",\n name: \"string\",\n description: \"string\",\n tags: \"string[]\",\n})\nexport type ResourceBase = typeof ResourceBase.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const MysqlConfig = type({\n host: \"string\",\n port: \"number\",\n user: \"string\",\n password: \"string\",\n database: \"string\",\n \"charset?\": \"string\",\n \"tables?\": \"string[]\",\n \"ssl?\": \"boolean\",\n \"connection_pool_size?\": \"number\",\n \"query_timeout?\": \"number\",\n})\nexport type MysqlConfig = typeof MysqlConfig.infer\n\nexport const PostgresqlConfig = type({\n host: \"string\",\n port: \"number\",\n user: \"string\",\n password: \"string\",\n database: \"string\",\n \"schema?\": \"string\",\n \"tables?\": \"string[]\",\n \"ssl_mode?\": \"string\",\n \"connection_pool_size?\": \"number\",\n \"query_timeout?\": \"number\",\n})\nexport type PostgresqlConfig = typeof PostgresqlConfig.infer\n\nexport const DatabaseDriver = type(\"'mysql' | 'postgresql'\")\nexport type DatabaseDriver = typeof DatabaseDriver.infer\n\nexport const DatabaseResource = type({\n \"...\": ResourceBase,\n type: \"'data'\",\n subtype: \"'db'\",\n driver: DatabaseDriver,\n config: \"Record<string, unknown>\",\n})\nexport type DatabaseResource = typeof DatabaseResource.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const McpToolConfig = type({\n \"server_url?\": \"string\",\n \"command?\": \"string\",\n \"args?\": \"string[]\",\n \"env?\": \"Record<string, string>\",\n})\nexport type McpToolConfig = typeof McpToolConfig.infer\n\nexport const HttpToolConfig = type({\n openapi_json_path: \"string\",\n \"base_url?\": \"string\",\n \"auth_header?\": \"string\",\n})\nexport type HttpToolConfig = typeof HttpToolConfig.infer\n\nexport const ToolDriver = type(\"'mcp' | 'http'\")\nexport type ToolDriver = typeof ToolDriver.infer\n\nexport const ToolResource = type({\n \"...\": ResourceBase,\n type: \"'tools'\",\n subtype: ToolDriver,\n config: \"Record<string, unknown>\",\n})\nexport type ToolResource = typeof ToolResource.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const DifyKnowledgeConfig = type({\n base_url: \"string\",\n api_key: \"string\",\n kg_name: \"string\",\n})\nexport type DifyKnowledgeConfig = typeof DifyKnowledgeConfig.infer\n\nexport const KnowledgeDriver = type(\"'dify'\")\nexport type KnowledgeDriver = typeof KnowledgeDriver.infer\n\nexport const KnowledgeResource = type({\n \"...\": ResourceBase,\n type: \"'knowledge'\",\n subtype: KnowledgeDriver,\n config: \"Record<string, unknown>\",\n})\nexport type KnowledgeResource = typeof KnowledgeResource.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const AgentDriver = type(\"'dify'\")\nexport type AgentDriver = typeof AgentDriver.infer\n\nexport const AgentResource = type({\n \"...\": ResourceBase,\n type: \"'agent'\",\n subtype: AgentDriver,\n config: \"Record<string, unknown>\",\n})\nexport type AgentResource = typeof AgentResource.infer\n","import { type } from \"arktype\"\n\nexport const SceneStatus = type(\"'draft' | 'published'\")\nexport type SceneStatus = typeof SceneStatus.infer\n\nexport const Scene = type({\n id: \"string\",\n name: \"string\",\n description: \"string\",\n status: SceneStatus,\n skills: \"string[]\",\n \"created_at?\": \"string\",\n \"updated_at?\": \"string\",\n})\nexport type Scene = typeof Scene.infer\n","import { type } from \"arktype\"\n\nexport const EnvVariable = type({\n key: \"string\",\n value: \"string\",\n \"description?\": \"string\",\n \"is_secret?\": \"boolean\",\n})\nexport type EnvVariable = typeof EnvVariable.infer\n","import { type } from \"arktype\"\n\nexport const ScheduledTask = type({\n id: \"string\",\n title: \"string\",\n prompt: \"string\",\n cron: \"string\",\n timezone: \"string\",\n enabled: \"boolean\",\n expires_at: \"string | null\",\n skip_confirmations: \"boolean\",\n model: \"string | null\",\n next_run_at: \"string | null\",\n last_run_at: \"string | null\",\n created_at: \"string\",\n updated_at: \"string\",\n})\nexport type ScheduledTask = typeof ScheduledTask.infer\n\nexport const ScheduledTaskRun = type({\n id: \"string\",\n task_id: \"string\",\n session_id: \"string | null\",\n status: \"string\",\n error: \"string | null\",\n triggered_at: \"string\",\n finished_at: \"string | null\",\n})\nexport type ScheduledTaskRun = typeof ScheduledTaskRun.infer\n\nexport const ScheduledTaskCalendarItem = type({\n task_id: \"string\",\n title: \"string\",\n occurrences: \"string[]\",\n})\nexport type ScheduledTaskCalendarItem = typeof ScheduledTaskCalendarItem.infer\n","import { type } from \"arktype\"\n\nexport const TaskStatus = type(\"'pending' | 'in_progress' | 'done' | 'failed' | 'skipped'\")\nexport type TaskStatus = typeof TaskStatus.infer\n\nexport const Task = type({\n id: \"string\",\n goal: \"string\",\n skills: \"string[]\",\n depends_on: \"string[]\",\n status: TaskStatus,\n result_summary: \"string\",\n number: \"string\",\n})\nexport type Task = typeof Task.infer\n"],"mappings":"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","names":["r","r","r","r","r","r","r","r","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","r","LayoutType","type","type","type","type","type","type","type","type","type","type","type","type","type"]}
|
|
1
|
+
{"version":3,"sources":["../../src/react/context.ts","../../src/react/provider.tsx","../../src/react/api/api-keys.ts","../../src/react/api/env-buckets.ts","../../src/react/api/memories.ts","../../src/react/api/gis-api.ts","../../src/react/api/published-apps.ts","../../src/react/api/prod-solution.ts","../../src/react/api/solutions.ts","../../src/react/api/scenarios.ts","../../src/react/api/scheduled-tasks.ts","../../src/react/api/software-factory.ts","../../src/react/api/registry.ts","../../src/react/hooks/use-gis.ts","../../src/react/hooks/use-check-skill-file.ts","../../src/react/hooks/use-global-skill-stats.ts","../../src/react/hooks/use-skills.ts","../../src/react/hooks/use-registry.ts","../../src/react/lib/step-ranges.ts","../../src/react/lib/html-source-locator.ts","../../src/react/lib/html-element-selection.ts","../../src/react/schemas/session.ts","../../src/react/types/solution.ts","../../src/react/schemas/studio/resource-base.ts","../../src/react/schemas/studio/database.ts","../../src/react/schemas/studio/tool.ts","../../src/react/schemas/studio/knowledge.ts","../../src/react/schemas/studio/agent.ts","../../src/react/schemas/studio/scene.ts","../../src/react/schemas/studio/env.ts","../../src/react/schemas/scheduled-task.ts","../../src/react/schemas/task.ts"],"sourcesContent":["import { createContext } from \"react\"\nimport type { BladeClient } from \"../client\"\n\nexport const BladeContext = createContext<BladeClient | null>(null)\n","import type { ReactNode } from \"react\"\nimport { useContext } from \"react\"\nimport type { BladeClient } from \"../client\"\nimport { getBootstrappedClient } from \"./bootstrap\"\nimport { BladeContext } from \"./context\"\n\nexport interface BladeClientProviderProps {\n client?: BladeClient\n children: ReactNode\n}\n\nexport function BladeClientProvider({ client, children }: BladeClientProviderProps) {\n const instance = client ?? getBootstrappedClient()\n return <BladeContext.Provider value={instance}>{children}</BladeContext.Provider>\n}\n\nexport function useBladeClient(): BladeClient {\n return useContext(BladeContext) ?? getBootstrappedClient()\n}\n","import type { ApiKeysResource } from \"../../client/resources/api-keys\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/api-keys\"\nconst r = (): ApiKeysResource => getClient().apiKeys\nexport const listApiKeys = (...args: Parameters<ApiKeysResource[\"listApiKeys\"]>) => r().listApiKeys(...args)\nexport const createApiKey = (...args: Parameters<ApiKeysResource[\"createApiKey\"]>) => r().createApiKey(...args)\nexport const renameApiKey = (...args: Parameters<ApiKeysResource[\"renameApiKey\"]>) => r().renameApiKey(...args)\nexport const deleteApiKey = (...args: Parameters<ApiKeysResource[\"deleteApiKey\"]>) => r().deleteApiKey(...args)\n","import type { EnvBucketsResource } from \"../../client/resources/env-buckets\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/env-buckets\"\nconst r = (): EnvBucketsResource => getClient().envBuckets\nexport const listEnvBuckets = (...args: Parameters<EnvBucketsResource[\"listEnvBuckets\"]>) =>\n r().listEnvBuckets(...args)\nexport const getEnvBucket = (...args: Parameters<EnvBucketsResource[\"getEnvBucket\"]>) =>\n r().getEnvBucket(...args)\nexport const setEnvBucket = (...args: Parameters<EnvBucketsResource[\"setEnvBucket\"]>) =>\n r().setEnvBucket(...args)\nexport const deleteEnvBucket = (...args: Parameters<EnvBucketsResource[\"deleteEnvBucket\"]>) =>\n r().deleteEnvBucket(...args)\nexport const getPlatformEnv = (...args: Parameters<EnvBucketsResource[\"getPlatformEnv\"]>) =>\n r().getPlatformEnv(...args)\nexport const getPlatformEnvReadonly = (\n ...args: Parameters<EnvBucketsResource[\"getPlatformEnvReadonly\"]>\n) => r().getPlatformEnvReadonly(...args)\nexport const setPlatformEnv = (...args: Parameters<EnvBucketsResource[\"setPlatformEnv\"]>) =>\n r().setPlatformEnv(...args)\nexport const deletePlatformEnv = (...args: Parameters<EnvBucketsResource[\"deletePlatformEnv\"]>) =>\n r().deletePlatformEnv(...args)\n","import type { MemoriesResource } from \"../../client/resources/memories\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/memories\"\nconst r = (): MemoriesResource => getClient().memories\nexport const createMemory = (...args: Parameters<MemoriesResource[\"createMemory\"]>) => r().createMemory(...args)\nexport const listMemories = (...args: Parameters<MemoriesResource[\"listMemories\"]>) => r().listMemories(...args)\nexport const getMemory = (...args: Parameters<MemoriesResource[\"getMemory\"]>) => r().getMemory(...args)\nexport const updateMemory = (...args: Parameters<MemoriesResource[\"updateMemory\"]>) => r().updateMemory(...args)\nexport const patchMemory = (...args: Parameters<MemoriesResource[\"patchMemory\"]>) => r().patchMemory(...args)\nexport const deleteMemory = (...args: Parameters<MemoriesResource[\"deleteMemory\"]>) => r().deleteMemory(...args)\nexport const batchMemories = (...args: Parameters<MemoriesResource[\"batchMemories\"]>) => r().batchMemories(...args)\n","import type { GisResource } from \"../../client/resources/gis\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/gis\"\nconst r = (): GisResource => getClient().gis\nexport const fetchGisState = (...args: Parameters<GisResource[\"fetchGisState\"]>) => r().fetchGisState(...args)\nexport const fetchRuntimeConfig = (...args: Parameters<GisResource[\"fetchRuntimeConfig\"]>) => r().fetchRuntimeConfig(...args)\n","import type { PublishedAppsResource } from \"../../client/resources/published-apps\"\nimport { getClient } from \"./client\"\n\nexport type * from \"../../client/resources/published-apps\"\nexport type * from \"../schemas/published-apps\"\n\nconst r = (): PublishedAppsResource => getClient().publishedApps\n\nexport const listPublishedApps = (\n ...args: Parameters<PublishedAppsResource[\"listPublishedApps\"]>\n) => r().listPublishedApps(...args)\n\nexport const unpublishApp = (...args: Parameters<PublishedAppsResource[\"unpublishApp\"]>) =>\n r().unpublishApp(...args)\n","import { apiFetch, getClient } from \"./client\"\n\nexport interface ProdSolution {\n id: string\n name: string\n description?: string | null\n status: string\n current_dag_version: number\n current_architecture_version?: number\n created_by: string\n created_at: string\n updated_at: string\n session_id?: string | null\n ai_assist?: boolean\n flow_session_id?: string | null\n flow_ai_assist?: boolean\n architecture_session_id?: string | null\n architecture_ai_assist?: boolean\n}\n\nexport interface DslStep {\n id: string\n type: string\n name: string\n next?: string[]\n branches?: string[]\n condition?: string\n true?: string[]\n false?: string[]\n body?: string[]\n}\n\nexport interface DagPayload {\n steps: DslStep[]\n viewport?: Record<string, unknown> | null\n}\n\nexport interface DagVersion {\n solution_id: string\n version: number\n steps: DslStep[]\n viewport?: Record<string, unknown> | null\n created_at: string\n created_by: string\n message?: string | null\n change_type: string\n rollback_from_version?: number | null\n is_published: boolean\n}\n\nexport interface DagVersionListItem {\n version: number\n created_at: string\n created_by: string\n message?: string | null\n change_type: string\n rollback_from_version?: number | null\n is_published: boolean\n}\n\nexport interface ArchitectureNode {\n id: string\n name: string\n parent_id?: string | null\n dashed_parent_ids?: string[]\n title?: string\n description?: string\n}\n\nexport interface ArchitecturePayload {\n nodes: ArchitectureNode[]\n viewport?: Record<string, unknown> | null\n}\n\nexport interface ArchitectureVersion extends ArchitecturePayload {\n solution_id: string\n version: number\n created_at: string\n created_by: string\n message?: string | null\n change_type: string\n rollback_from_version?: number | null\n is_published: boolean\n}\n\nexport type ArchitectureVersionListItem = DagVersionListItem\n\nexport interface MulticaRuntime {\n id: string\n name?: string\n [key: string]: unknown\n}\n\nexport interface MulticaAgent {\n id: string\n name?: string\n runtime_id?: string\n visibility?: string\n instructions?: string\n [key: string]: unknown\n}\n\nexport interface ProdAgentPreviewUrl {\n name: string\n url: string\n}\n\nexport interface ProdAgentCatalogRole {\n id: string\n name: string\n description?: string\n}\n\nexport interface ProdAgentCatalogSolution {\n id: string\n name: string\n layout_type: string\n initial_mode?: string | null\n roles: ProdAgentCatalogRole[]\n}\n\nexport interface ProdAgentRecord {\n id: string\n user_id: string\n name: string\n icon: string\n agent_id: string\n solution_id: string\n biz_role_id: string\n agent_template: string\n initial_mode?: string | null\n skills: string[]\n skills_data: Record<string, unknown>\n skills_data_raw: Record<string, string>\n init_script: string\n layout_type: string\n preview_urls: ProdAgentPreviewUrl[]\n runtime_provider: string\n visibility: string\n instructions: string\n instantiated: boolean\n instantiated_agent_id?: string | null\n instantiated_at?: string | null\n instantiate_error?: string | null\n instantiated_agent?: Record<string, unknown>\n create_warning?: string\n created_at: string\n updated_at: string\n}\n\nexport interface ProdUser {\n sub: string\n email?: string\n name?: string\n preferred_username?: string\n picture?: string | null\n}\n\nexport interface ProdUserTokenStatus {\n sub: string\n email: string\n ok: boolean\n changed: boolean\n message: string\n token_prefix?: string\n}\n\nexport interface UserWorkspace {\n id: string\n name?: string\n slug?: string\n role?: string\n [key: string]: unknown\n}\n\nexport interface CreateUserWorkspaceRequest {\n name: string\n description?: string\n member_user_ids?: string[]\n agent_ids?: string[]\n}\n\nexport interface WorkspaceIssueCreateRequest {\n title: string\n description?: string\n priority?: \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\"\n status?: \"backlog\" | \"todo\" | \"in_progress\" | \"in_review\" | \"done\" | \"blocked\" | \"cancelled\"\n assignee?: string\n assignee_type?: IssueAssigneeType\n assignee_id?: string\n project?: string\n}\n\nexport interface WorkspaceIssue {\n id?: string\n workspace_id?: string\n number?: number\n identifier?: string\n title?: string\n issue_url?: string\n description?: string | null\n status?: IssueStatus\n priority?: IssuePriority\n assignee?: string\n assignee_type?: IssueAssigneeType | null\n assignee_id?: string | null\n creator_type?: IssueAssigneeType\n creator_id?: string\n parent_issue_id?: string | null\n project_id?: string | null\n start_date?: string | null\n due_date?: string | null\n metadata?: Record<string, unknown>\n labels?: Array<{ id: string; name: string; color?: string | null }>\n created_at?: string\n updated_at?: string\n [key: string]: unknown\n}\n\nexport type IssueStatus =\n | \"backlog\"\n | \"todo\"\n | \"in_progress\"\n | \"in_review\"\n | \"done\"\n | \"blocked\"\n | \"cancelled\"\n\nexport type IssuePriority = \"urgent\" | \"high\" | \"medium\" | \"low\" | \"none\"\nexport type IssueAssigneeType = \"member\" | \"agent\" | \"squad\"\n\nexport interface WorkspaceIssueListResponse {\n issues: WorkspaceIssue[]\n total: number\n}\n\nexport interface WorkspaceIssueGroup {\n id: string\n assignee_type: IssueAssigneeType | null\n assignee_id: string | null\n issues: WorkspaceIssue[]\n total: number\n}\n\nexport interface WorkspaceIssueGroupedResponse {\n groups: WorkspaceIssueGroup[]\n}\n\nexport interface WorkspaceIssueTimelineEntry {\n type: \"activity\" | \"comment\"\n id: string\n actor_type: string\n actor_id: string\n created_at: string\n action?: string\n details?: Record<string, unknown>\n content?: string\n parent_id?: string | null\n updated_at?: string\n comment_type?: string\n}\n\nexport interface WorkspaceIssueTaskRun {\n id: string\n status?: string\n title?: string\n name?: string\n goal?: string\n created_at?: string\n updated_at?: string\n started_at?: string | null\n completed_at?: string | null\n [key: string]: unknown\n}\n\nexport interface WorkspaceIssueUsageSummary {\n total_tokens?: number\n total_cost_usd?: number\n input_tokens?: number\n output_tokens?: number\n [key: string]: unknown\n}\n\nexport interface WorkspaceMember {\n id?: string\n workspace_id?: string\n user_id?: string\n role?: string\n name?: string\n email?: string\n avatar_url?: string | null\n created_at?: string\n [key: string]: unknown\n}\n\nexport interface WorkspaceAssistantSession {\n user_id?: string\n workspace_id: string\n biz_role_id: string\n session_id?: string | null\n created_at?: string | null\n updated_at?: string | null\n}\n\nexport async function listProdSolutions(): Promise<ProdSolution[]> {\n const payload = await apiFetch<{ items?: ProdSolution[] }>(\"/api/prod_solution\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function listProdUsers(): Promise<ProdUser[]> {\n const payload = await apiFetch<{ items?: ProdUser[] }>(\"/api/prod_users\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function checkProdUserTokenStatus(users: ProdUser[]): Promise<ProdUserTokenStatus[]> {\n const payload = await apiFetch<{ items?: ProdUserTokenStatus[] }>(\"/api/prod_users/token-status\", {\n method: \"POST\",\n body: JSON.stringify({ users }),\n })\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function refreshProdUserToken(user: ProdUser): Promise<ProdUserTokenStatus> {\n return apiFetch<ProdUserTokenStatus>(\"/api/prod_users/token-refresh\", {\n method: \"POST\",\n body: JSON.stringify({ user }),\n })\n}\n\nexport async function listUserWorkspaces(): Promise<UserWorkspace[]> {\n const payload = await apiFetch<{ items?: UserWorkspace[] }>(\"/api/prod_workspaces\")\n return Array.isArray(payload.items) ? [...payload.items].reverse() : []\n}\n\nexport async function createUserWorkspace(\n request: CreateUserWorkspaceRequest,\n): Promise<UserWorkspace> {\n return apiFetch<UserWorkspace>(\"/api/prod_workspaces\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function getUserWorkspace(workspaceId: string): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}`,\n )\n}\n\nexport async function updateUserWorkspace(\n workspaceId: string,\n request: { name?: string; description?: string },\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}`,\n {\n method: \"PATCH\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function listWorkspaceAgents(workspaceId: string): Promise<Array<Record<string, unknown>>> {\n const payload = await apiFetch<{ items?: Array<Record<string, unknown>> }>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/agents`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function connectWorkspaceAgent(\n workspaceId: string,\n request: { agent_id: string },\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/agents`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function removeWorkspaceAgent(\n workspaceId: string,\n agentId: string,\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/agents/${encodeURIComponent(agentId)}`,\n {\n method: \"DELETE\",\n },\n )\n}\n\nexport async function listWorkspaceMembers(workspaceId: string): Promise<WorkspaceMember[]> {\n const payload = await apiFetch<{ items?: WorkspaceMember[] }>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/members`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function addWorkspaceMember(\n workspaceId: string,\n request: { user_id: string; role?: \"owner\" | \"admin\" | \"member\" },\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/members`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function removeWorkspaceMember(\n workspaceId: string,\n userId: string,\n): Promise<Record<string, unknown>> {\n return apiFetch<Record<string, unknown>>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/members/${encodeURIComponent(userId)}`,\n {\n method: \"DELETE\",\n },\n )\n}\n\nexport async function getWorkspaceAssistantSession(\n workspaceId: string,\n bizRoleId: string,\n): Promise<WorkspaceAssistantSession> {\n const search = new URLSearchParams({ biz_role_id: bizRoleId })\n return apiFetch<WorkspaceAssistantSession>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/assistant-session?${search}`,\n )\n}\n\nexport async function upsertWorkspaceAssistantSession(\n workspaceId: string,\n request: { biz_role_id: string; session_id: string },\n): Promise<WorkspaceAssistantSession> {\n return apiFetch<WorkspaceAssistantSession>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/assistant-session`,\n {\n method: \"PUT\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function createWorkspaceIssue(\n workspaceId: string,\n request: WorkspaceIssueCreateRequest,\n): Promise<Record<string, unknown>> {\n const response = await getClient().fetch(\n \"POST\",\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues`,\n {\n expectOk: false,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(request),\n },\n )\n if (!response.ok) {\n throw new Error(await readApiErrorMessage(response))\n }\n return response.json() as Promise<Record<string, unknown>>\n}\n\nexport async function listWorkspaceIssues(workspaceId: string): Promise<WorkspaceIssue[]> {\n const payload = await apiFetch<{ items?: WorkspaceIssue[] }>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nfunction issueSearch(params: Record<string, string | number | boolean | undefined>) {\n const search = new URLSearchParams()\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === \"\") continue\n search.set(key, String(value))\n }\n return search.toString()\n}\n\nasync function readApiErrorMessage(response: Response): Promise<string> {\n try {\n const payload = (await response.json()) as { detail?: unknown }\n const detail = payload.detail\n if (typeof detail === \"string\" && detail.trim()) return detail\n } catch {\n // Fall through to status text.\n }\n return `请求失败:${response.status} ${response.statusText}`\n}\n\nexport async function queryWorkspaceIssues(\n workspaceId: string,\n params: {\n status?: IssueStatus\n priority?: IssuePriority\n limit?: number\n offset?: number\n open_only?: boolean\n } = {},\n): Promise<WorkspaceIssueListResponse> {\n const search = issueSearch(params)\n const payload = await apiFetch<WorkspaceIssueListResponse>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/query?${search}`,\n )\n return {\n issues: Array.isArray(payload.issues) ? payload.issues : [],\n total: Number(payload.total ?? 0),\n }\n}\n\nexport async function queryWorkspaceGroupedIssues(\n workspaceId: string,\n params: {\n group_by: \"assignee\"\n statuses?: string\n limit?: number\n offset?: number\n },\n): Promise<WorkspaceIssueGroupedResponse> {\n const search = issueSearch(params)\n const payload = await apiFetch<WorkspaceIssueGroupedResponse>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/grouped?${search}`,\n )\n return { groups: Array.isArray(payload.groups) ? payload.groups : [] }\n}\n\nexport async function getWorkspaceIssue(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssue> {\n return apiFetch<WorkspaceIssue>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}`,\n )\n}\n\nexport async function updateWorkspaceIssue(\n workspaceId: string,\n issueId: string,\n updates: Partial<WorkspaceIssue>,\n): Promise<WorkspaceIssue> {\n return apiFetch<WorkspaceIssue>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}`,\n {\n method: \"PUT\",\n body: JSON.stringify(updates),\n },\n )\n}\n\nexport async function getWorkspaceIssueTimeline(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssueTimelineEntry[]> {\n const payload = await apiFetch<WorkspaceIssueTimelineEntry[]>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}/timeline`,\n )\n return Array.isArray(payload) ? payload : []\n}\n\nexport async function getWorkspaceIssueTaskRuns(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssueTaskRun[]> {\n const payload = await apiFetch<WorkspaceIssueTaskRun[]>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}/task-runs`,\n )\n return Array.isArray(payload) ? payload : []\n}\n\nexport async function getWorkspaceIssueUsage(\n workspaceId: string,\n issueId: string,\n): Promise<WorkspaceIssueUsageSummary> {\n return apiFetch<WorkspaceIssueUsageSummary>(\n `/api/prod_workspaces/${encodeURIComponent(workspaceId)}/issues/${encodeURIComponent(issueId)}/usage`,\n )\n}\n\nexport async function createProdSolution(request: {\n name: string\n description?: string | null\n session_id?: string | null\n ai_assist?: boolean\n flow_session_id?: string | null\n flow_ai_assist?: boolean\n architecture_session_id?: string | null\n architecture_ai_assist?: boolean\n}): Promise<ProdSolution> {\n return apiFetch<ProdSolution>(\"/api/prod_solution\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function updateProdSolution(\n solutionId: string,\n request: {\n name?: string\n description?: string | null\n status?: string\n },\n): Promise<ProdSolution> {\n return apiFetch<ProdSolution>(`/api/prod_solution/${encodeURIComponent(solutionId)}`, {\n method: \"PATCH\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function deleteProdSolution(solutionId: string): Promise<{ ok: boolean }> {\n return apiFetch<{ ok: boolean }>(`/api/prod_solution/${encodeURIComponent(solutionId)}`, {\n method: \"DELETE\",\n })\n}\n\nexport async function updateSessionId(solutionId: string, sessionId: string): Promise<{ ok: boolean }> {\n return apiFetch(`/api/prod_solution/${encodeURIComponent(solutionId)}/session`, {\n method: \"PUT\",\n body: JSON.stringify({ session_id: sessionId }),\n })\n}\n\nexport async function getCurrentDag(solutionId: string): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}`)\n}\n\nexport async function saveDag(\n solutionId: string,\n request: {\n base_version: number\n dag: DagPayload\n message?: string | null\n },\n): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}`, {\n method: \"PUT\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function validateDag(solutionId: string, dag: DagPayload): Promise<{\n ok: boolean\n errors: Array<{ code: string; message: string }>\n}> {\n return apiFetch(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/validate`, {\n method: \"POST\",\n body: JSON.stringify({ dag }),\n })\n}\n\nexport async function publishDag(\n solutionId: string,\n request: { dag?: DagPayload; version?: number; message?: string | null } = {},\n): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/publish`, {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function listDagVersions(solutionId: string): Promise<DagVersionListItem[]> {\n const payload = await apiFetch<{ items?: DagVersionListItem[] }>(\n `/api/prod_solution/dag/${encodeURIComponent(solutionId)}/versions`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getDagVersion(solutionId: string, version: number): Promise<DagVersion> {\n return apiFetch<DagVersion>(\n `/api/prod_solution/dag/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`,\n )\n}\n\nexport async function rollbackDag(\n solutionId: string,\n request: { from_version: number; message?: string | null },\n): Promise<DagVersion> {\n return apiFetch<DagVersion>(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/rollback`, {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function deleteVersion(solutionId: string, version: number): Promise<{ ok: boolean }> {\n return apiFetch(`/api/prod_solution/dag/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`, {\n method: \"DELETE\",\n })\n}\n\nexport async function getCurrentArchitecture(solutionId: string): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(`/api/prod_solution/architecture/${encodeURIComponent(solutionId)}`)\n}\n\nexport async function saveArchitecture(\n solutionId: string,\n request: {\n base_version: number\n architecture: ArchitecturePayload\n message?: string | null\n },\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(`/api/prod_solution/architecture/${encodeURIComponent(solutionId)}`, {\n method: \"PUT\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function validateArchitecture(solutionId: string, architecture: ArchitecturePayload): Promise<{\n ok: boolean\n errors: Array<{ code: string; message: string }>\n}> {\n return apiFetch(`/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/validate`, {\n method: \"POST\",\n body: JSON.stringify({ architecture }),\n })\n}\n\nexport async function publishArchitecture(\n solutionId: string,\n request: { architecture?: ArchitecturePayload; version?: number; message?: string | null } = {},\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/publish`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function listArchitectureVersions(\n solutionId: string,\n): Promise<ArchitectureVersionListItem[]> {\n const payload = await apiFetch<{ items?: ArchitectureVersionListItem[] }>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/versions`,\n )\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getArchitectureVersion(\n solutionId: string,\n version: number,\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`,\n )\n}\n\nexport async function rollbackArchitecture(\n solutionId: string,\n request: { from_version: number; message?: string | null },\n): Promise<ArchitectureVersion> {\n return apiFetch<ArchitectureVersion>(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/rollback`,\n {\n method: \"POST\",\n body: JSON.stringify(request),\n },\n )\n}\n\nexport async function deleteArchitectureVersion(\n solutionId: string,\n version: number,\n): Promise<{ ok: boolean }> {\n return apiFetch(\n `/api/prod_solution/architecture/${encodeURIComponent(solutionId)}/versions/${encodeURIComponent(String(version))}`,\n {\n method: \"DELETE\",\n },\n )\n}\n\nexport async function listAgentRuntimes(): Promise<MulticaRuntime[]> {\n const payload = await apiFetch<{ items?: MulticaRuntime[] }>(\"/api/prod_solution/agents/runtimes\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function listAgents(includeArchived = false): Promise<MulticaAgent[]> {\n const suffix = includeArchived ? \"?include_archived=true\" : \"\"\n const payload = await apiFetch<{ items?: MulticaAgent[] }>(`/api/prod_solution/agents${suffix}`)\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getAgent(agentId: string): Promise<MulticaAgent> {\n return apiFetch<MulticaAgent>(`/api/prod_solution/agents/${encodeURIComponent(agentId)}`)\n}\n\nexport async function createAgent(request: {\n name: string\n runtime_id: string\n instructions?: string\n visibility?: string\n}): Promise<MulticaAgent> {\n return apiFetch<MulticaAgent>(\"/api/prod_solution/agents\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function listProdAgents(): Promise<ProdAgentRecord[]> {\n const payload = await apiFetch<{ items?: ProdAgentRecord[] }>(\"/api/prod_agents\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function getProdAgent(providerKey: string): Promise<ProdAgentRecord> {\n return apiFetch<ProdAgentRecord>(`/api/prod_agents/${encodeURIComponent(providerKey)}`)\n}\n\nexport interface ProdAgentWorkspaceReference {\n id: string\n name: string\n slug?: string | null\n}\n\nexport async function getProdAgentWorkspaceReferences(\n recordId: string,\n options: { refresh?: boolean } = {},\n): Promise<{ items: ProdAgentWorkspaceReference[]; count: number; cached?: boolean }> {\n const search = options.refresh ? \"?refresh=true\" : \"\"\n return apiFetch<{ items: ProdAgentWorkspaceReference[]; count: number; cached?: boolean }>(\n `/api/prod_agents/${encodeURIComponent(recordId)}/workspace-references${search}`,\n )\n}\n\nexport async function listProdAgentCatalogSolutions(): Promise<ProdAgentCatalogSolution[]> {\n const payload = await apiFetch<{ items?: ProdAgentCatalogSolution[] }>(\"/api/prod_agents/catalog/solutions\")\n return Array.isArray(payload.items) ? payload.items : []\n}\n\nexport async function createProdAgent(request: {\n name: string\n icon?: string\n agent_id?: string | null\n solution_id: string\n biz_role_id: string\n agent_template: string\n initial_mode?: string | null\n skills: string[]\n skills_data: Record<string, string>\n init_script: string\n layout_type: string\n preview_urls: ProdAgentPreviewUrl[]\n runtime_provider: string\n visibility: string\n instructions: string\n}): Promise<ProdAgentRecord> {\n return apiFetch<ProdAgentRecord>(\"/api/prod_agents\", {\n method: \"POST\",\n body: JSON.stringify(request),\n })\n}\n\nexport async function instantiateProdAgent(recordId: string): Promise<ProdAgentRecord & { ok?: boolean; message?: string }> {\n return apiFetch<ProdAgentRecord & { ok?: boolean; message?: string }>(\n `/api/prod_agents/${encodeURIComponent(recordId)}/instantiate`,\n {\n method: \"POST\",\n },\n )\n}\n\nexport async function deleteProdAgent(recordId: string): Promise<{ ok: boolean }> {\n return apiFetch<{ ok: boolean }>(`/api/prod_agents/${encodeURIComponent(recordId)}`, {\n method: \"DELETE\",\n })\n}\n\nexport async function startProdAgentSession(\n recordId: string,\n): Promise<{ session_id: string; route_solution_id: string }> {\n return apiFetch<{ session_id: string; route_solution_id: string }>(\n `/api/prod_agents/${encodeURIComponent(recordId)}/start-session`,\n {\n method: \"POST\",\n },\n )\n}\n\nexport async function updateProdAgent(\n recordId: string,\n request: {\n name: string\n icon?: string\n solution_id: string\n biz_role_id: string\n agent_template: string\n initial_mode?: string | null\n skills: string[]\n skills_data: Record<string, string>\n init_script: string\n layout_type: string\n preview_urls: ProdAgentPreviewUrl[]\n runtime_provider: string\n },\n): Promise<ProdAgentRecord> {\n return apiFetch<ProdAgentRecord>(`/api/prod_agents/${encodeURIComponent(recordId)}`, {\n method: \"PATCH\",\n body: JSON.stringify(request),\n })\n}\n","import type { SolutionsResource } from \"../../client/resources/solutions\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/solutions\"\nconst r = (): SolutionsResource => getClient().solutions\nexport const fetchSolutions = (...args: Parameters<SolutionsResource[\"fetchSolutions\"]>) => r().fetchSolutions(...args)\nexport const fetchSolutionFile = (...args: Parameters<SolutionsResource[\"fetchSolutionFile\"]>) => r().fetchSolutionFile(...args)\nexport const fetchSolutionBizRoles = (...args: Parameters<SolutionsResource[\"fetchSolutionBizRoles\"]>) => r().fetchSolutionBizRoles(...args)\n","import type { ScenariosResource } from \"../../client/resources/scenarios\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/scenarios\"\nconst r = (): ScenariosResource => getClient().scenarios\nexport const listQuickScenarios = (...args: Parameters<ScenariosResource[\"listQuickScenarios\"]>) => r().listQuickScenarios(...args)\nexport const createQuickScenario = (...args: Parameters<ScenariosResource[\"createQuickScenario\"]>) => r().createQuickScenario(...args)\nexport const deleteQuickScenario = (...args: Parameters<ScenariosResource[\"deleteQuickScenario\"]>) => r().deleteQuickScenario(...args)\nexport const updateQuickScenario = (...args: Parameters<ScenariosResource[\"updateQuickScenario\"]>) => r().updateQuickScenario(...args)\nexport const listBladeHubScenarioResources = (...args: Parameters<ScenariosResource[\"listBladeHubScenarioResources\"]>) => r().listBladeHubScenarioResources(...args)\n","import type {\n ScheduledTask,\n ScheduledTaskCalendarItem,\n ScheduledTaskRun,\n} from \"../schemas/scheduled-task\"\nimport { apiFetch } from \"./client\"\n\nexport interface ScheduledTaskCreatePayload {\n title: string\n prompt: string\n cron: string\n timezone?: string\n enabled?: boolean\n expires_at?: string | null\n skip_confirmations?: boolean\n model?: string | null\n}\n\nexport type ScheduledTaskUpdatePayload = Partial<ScheduledTaskCreatePayload>\n\nfunction taskPath(id: string): string {\n return `/api/scheduled-tasks/${encodeURIComponent(id)}`\n}\n\nexport async function listScheduledTasks(): Promise<ScheduledTask[]> {\n return apiFetch<ScheduledTask[]>(\"/api/scheduled-tasks\")\n}\n\nexport async function createScheduledTask(\n payload: ScheduledTaskCreatePayload,\n): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(\"/api/scheduled-tasks\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })\n}\n\nexport async function getScheduledTask(id: string): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(taskPath(id))\n}\n\nexport async function updateScheduledTask(\n id: string,\n payload: ScheduledTaskUpdatePayload,\n): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(taskPath(id), {\n method: \"PATCH\",\n body: JSON.stringify(payload),\n })\n}\n\nexport async function deleteScheduledTask(id: string): Promise<void> {\n await apiFetch(taskPath(id), { method: \"DELETE\" })\n}\n\nexport async function startScheduledTask(id: string): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(`${taskPath(id)}/start`, { method: \"POST\" })\n}\n\nexport async function stopScheduledTask(id: string): Promise<ScheduledTask> {\n return apiFetch<ScheduledTask>(`${taskPath(id)}/stop`, { method: \"POST\" })\n}\n\nexport async function listScheduledTaskRuns(id: string): Promise<ScheduledTaskRun[]> {\n return apiFetch<ScheduledTaskRun[]>(`${taskPath(id)}/runs`)\n}\n\nexport async function getScheduledTaskCalendar(params: {\n from: string\n to: string\n}): Promise<ScheduledTaskCalendarItem[]> {\n const search = new URLSearchParams({ from: params.from, to: params.to })\n return apiFetch<ScheduledTaskCalendarItem[]>(\n `/api/scheduled-tasks/calendar?${search.toString()}`,\n )\n}\n","import type { SoftwareFactoryResource } from \"../../client/resources/software-factory\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/software-factory\"\nconst r = (): SoftwareFactoryResource => getClient().softwareFactory\nexport const listSoftware = (...args: Parameters<SoftwareFactoryResource[\"listSoftware\"]>) => r().listSoftware(...args)\nexport const getSoftware = (...args: Parameters<SoftwareFactoryResource[\"getSoftware\"]>) => r().getSoftware(...args)\nexport const deleteSoftware = (...args: Parameters<SoftwareFactoryResource[\"deleteSoftware\"]>) => r().deleteSoftware(...args)\nexport const createSoftware = (...args: Parameters<SoftwareFactoryResource[\"createSoftware\"]>) => r().createSoftware(...args)\nexport const updateSoftware = (...args: Parameters<SoftwareFactoryResource[\"updateSoftware\"]>) => r().updateSoftware(...args)\nexport const bindTopicModuleSession = (...args: Parameters<SoftwareFactoryResource[\"bindTopicModuleSession\"]>) => r().bindTopicModuleSession(...args)\nexport const submitModuleForReview = (...args: Parameters<SoftwareFactoryResource[\"submitModuleForReview\"]>) => r().submitModuleForReview(...args)\nexport const completeModule = (...args: Parameters<SoftwareFactoryResource[\"completeModule\"]>) => r().completeModule(...args)\nexport const reopenModule = (...args: Parameters<SoftwareFactoryResource[\"reopenModule\"]>) => r().reopenModule(...args)\nexport const listSharedFiles = (...args: Parameters<SoftwareFactoryResource[\"listSharedFiles\"]>) => r().listSharedFiles(...args)\nexport const createSharedFile = (...args: Parameters<SoftwareFactoryResource[\"createSharedFile\"]>) => r().createSharedFile(...args)\nexport const uploadSoftwareDocuments = (...args: Parameters<SoftwareFactoryResource[\"uploadSoftwareDocuments\"]>) => r().uploadSoftwareDocuments(...args)\nexport const ensureIssueSession = (...args: Parameters<SoftwareFactoryResource[\"ensureIssueSession\"]>) => r().ensureIssueSession(...args)\nexport const listCodingTasks = (...args: Parameters<SoftwareFactoryResource[\"listCodingTasks\"]>) => r().listCodingTasks(...args)\nexport const startCoding = (...args: Parameters<SoftwareFactoryResource[\"startCoding\"]>) => r().startCoding(...args)\nexport const readShareFileContent = (...args: Parameters<SoftwareFactoryResource[\"readShareFileContent\"]>) => r().readShareFileContent(...args)\nexport const syncShare = (...args: Parameters<SoftwareFactoryResource[\"syncShare\"]>) => r().syncShare(...args)\nexport const listTopics = (...args: Parameters<SoftwareFactoryResource[\"listTopics\"]>) => r().listTopics(...args)\nexport const replaceTopics = (...args: Parameters<SoftwareFactoryResource[\"replaceTopics\"]>) => r().replaceTopics(...args)\nexport const getFactoryExportUrl = (...args: Parameters<SoftwareFactoryResource[\"getFactoryExportUrl\"]>) => r().getFactoryExportUrl(...args)\nexport const importFactory = (...args: Parameters<SoftwareFactoryResource[\"importFactory\"]>) => r().importFactory(...args)\n","import type { RegistryResource } from \"../../client/resources/registry\"\nimport { getClient } from \"./client\"\nexport type * from \"../../client/resources/registry\"\nexport { normalizeResource, REGISTRY_PREFIX } from \"../../client/resources/registry\"\n\nconst r = (): RegistryResource => getClient().registry\nexport const createResourceApi = <T extends Record<string, unknown>>(apiType: string) =>\n r().createResourceApi<T>(apiType)\nexport const listSkillOrgs = (...args: Parameters<RegistryResource[\"listSkillOrgs\"]>) => r().listSkillOrgs(...args)\nexport const publishSkill = (...args: Parameters<RegistryResource[\"publishSkill\"]>) => r().publishSkill(...args)\nexport const databaseApi = new Proxy({} as RegistryResource[\"databaseApi\"], {\n get: (_target, prop) => Reflect.get(r().databaseApi, prop),\n})\nexport const toolApi = new Proxy({} as RegistryResource[\"toolApi\"], {\n get: (_target, prop) => Reflect.get(r().toolApi, prop),\n})\nexport const knowledgeApi = new Proxy({} as RegistryResource[\"knowledgeApi\"], {\n get: (_target, prop) => Reflect.get(r().knowledgeApi, prop),\n})\nexport const agentApi = new Proxy({} as RegistryResource[\"agentApi\"], {\n get: (_target, prop) => Reflect.get(r().agentApi, prop),\n})\n","import { useQuery } from \"@tanstack/react-query\"\nimport { fetchGisState, fetchRuntimeConfig } from \"../api/gis-api\"\nimport type { GisGoal, GisResource, GisTarget, RuntimeConfig } from \"../schemas/gis\"\nimport { useGisStore } from \"../stores/gis-store\"\n\nconst EMPTY_GOALS: GisGoal[] = []\nconst EMPTY_RESOURCES: GisResource[] = []\nconst EMPTY_TARGETS: GisTarget[] = []\nconst EMPTY_RUNTIME_CONFIG: RuntimeConfig = {\n sentryDsn: \"\",\n gisMapUrl: \"\",\n bladeOsPath: \"\",\n}\n\nexport function useGisState(sessionId: string | null | undefined) {\n const setGoals = useGisStore((state) => state.setGoals)\n const setResources = useGisStore((state) => state.setResources)\n const setTargets = useGisStore((state) => state.setTargets)\n const goals = useGisStore((state) =>\n sessionId ? (state.goalsBySession[sessionId] ?? EMPTY_GOALS) : EMPTY_GOALS,\n )\n const resources = useGisStore((state) =>\n sessionId ? (state.resourcesBySession[sessionId] ?? EMPTY_RESOURCES) : EMPTY_RESOURCES,\n )\n const targets = useGisStore((state) =>\n sessionId ? (state.targetsBySession[sessionId] ?? EMPTY_TARGETS) : EMPTY_TARGETS,\n )\n\n const query = useQuery({\n queryKey: [\"gis-state\", sessionId],\n queryFn: ({ signal }) =>\n fetchGisState(sessionId!, { signal }).then((state) => {\n setGoals(sessionId!, state.goals)\n setResources(sessionId!, state.resources)\n setTargets(sessionId!, state.targets)\n return state\n }),\n enabled: Boolean(sessionId),\n })\n\n return {\n data: {\n goals,\n resources,\n targets,\n },\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n }\n}\n\nexport function useRuntimeConfig() {\n const query = useQuery({\n queryKey: [\"runtime-config\"],\n queryFn: ({ signal }) => fetchRuntimeConfig({ signal }),\n })\n\n return {\n data: query.data ?? EMPTY_RUNTIME_CONFIG,\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n }\n}\n","import { useCallback } from \"react\"\nimport { useQuery, useQueryClient } from \"@tanstack/react-query\"\nimport { apiFetch } from \"../api/client\"\n\nexport function useCheckSkillFile(sessionId: string | null) {\n const queryClient = useQueryClient()\n\n const { data } = useQuery({\n queryKey: [\"sessions\", sessionId, \"skill-file\"],\n queryFn: async () => {\n if (!sessionId) return false\n const response = await apiFetch(`/api/sessions/${encodeURIComponent(sessionId)}/check-skill-file`)\n return (response as { exists: boolean }).exists\n },\n enabled: !!sessionId,\n staleTime: 5000,\n gcTime: 10000,\n })\n\n const refetch = useCallback(() => {\n return queryClient.invalidateQueries({ queryKey: [\"sessions\", sessionId, \"skill-file\"] })\n }, [queryClient, sessionId])\n\n return {\n exists: data ?? false,\n refetch,\n }\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { getGlobalSkillStats, type GlobalSkillStats } from \"../api/skills\"\n\nconst EMPTY: GlobalSkillStats = {\n remote_configured: false,\n remote_connected: false,\n installed_skill_count: 0,\n}\n\nexport function useGlobalSkillStats() {\n const query = useQuery({\n queryKey: [\"global-skill-stats\"],\n queryFn: ({ signal }) => getGlobalSkillStats({ signal }),\n refetchInterval: 300_000,\n })\n\n return {\n data: query.data ?? EMPTY,\n loading: query.isLoading,\n error: query.error,\n }\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { listSkills } from \"../api/skills\"\nimport type { SkillSummary } from \"../schemas/skill\"\n\nconst EMPTY_SKILLS: SkillSummary[] = []\n\nexport function useSkills() {\n const {\n data = EMPTY_SKILLS,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"skills\"],\n queryFn: ({ signal }) => listSkills({ signal }),\n })\n return { data, loading, error }\n}\n","import { useQuery } from \"@tanstack/react-query\"\nimport { agentApi, databaseApi, knowledgeApi, toolApi } from \"../api/registry\"\nimport type { AgentResource } from \"../schemas/studio/agent\"\nimport type { DatabaseResource } from \"../schemas/studio/database\"\nimport type { KnowledgeResource } from \"../schemas/studio/knowledge\"\nimport type { ToolResource } from \"../schemas/studio/tool\"\n\nconst EMPTY_TOOL_PROVIDERS: ToolResource[] = []\nconst EMPTY_DATA_SOURCES: DatabaseResource[] = []\nconst EMPTY_KNOWLEDGE_BASES: KnowledgeResource[] = []\nconst EMPTY_AGENTS: AgentResource[] = []\n\nexport function useToolProviders() {\n const {\n data = EMPTY_TOOL_PROVIDERS,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"tool-providers\"],\n queryFn: ({ signal }) => toolApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n\nexport function useDataSources() {\n const {\n data = EMPTY_DATA_SOURCES,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"data-sources\"],\n queryFn: ({ signal }) => databaseApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n\nexport function useKnowledgeBases() {\n const {\n data = EMPTY_KNOWLEDGE_BASES,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"knowledge-bases\"],\n queryFn: ({ signal }) => knowledgeApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n\nexport function useAgents() {\n const {\n data = EMPTY_AGENTS,\n isLoading: loading,\n error,\n } = useQuery({\n queryKey: [\"registry\", \"agents\"],\n queryFn: ({ signal }) => agentApi.list({ signal }),\n })\n\n return { data, loading, error }\n}\n","import type { ChatMessage } from \"../schemas/message\"\n\n/**\n * 每个 step 在消息流中的一段连续范围(R5 whatif 重跑的边界单位)。\n *\n * `[startIndex, endIndex)` 包含所有属于这个 step 的消息。\n * - 中间段:endIndex == 下一段的 startIndex(把本段 assistant 总结纳入本段)\n * - 末段:endIndex 停在最后一条显式 tag 该 step 的消息之后,避免把跑完 skill\n * 后的闲聊尾段误当成 step 的一部分\n *\n * 同一 stepNumber 可以在 stepRanges 里出现多次(每次 what-if 重跑后 step3/4\n * 会产生新一段),每次出现都是独立 range。\n */\nexport interface StepMessageRange {\n stepNumber: number\n startIndex: number\n endIndex: number\n}\n\n// Strategy 1: file-path pattern — matches step1_xxx/, step2/ etc.\nconst STEP_PATH_PATTERN = /step(\\d+)[_/]/g\n\n/** Extract a unique step number from text; null if 0 or multiple distinct matches. */\nfunction extractStepNumber(text: string): number | null {\n const nums = new Set<number>()\n for (const m of text.matchAll(STEP_PATH_PATTERN)) {\n nums.add(Number.parseInt(m[1], 10))\n }\n return nums.size === 1 ? nums.values().next().value! : null\n}\n\nfunction isRunSkillToolResult(text: string): boolean {\n return text.includes('\"tool_name\"') && text.includes('\"skill_id\"')\n}\n\nfunction collectFragments(msg: ChatMessage): string[] {\n const fragments: string[] = []\n if (msg.tool_calls) {\n for (const tc of msg.tool_calls) {\n if (tc.arguments) fragments.push(tc.arguments)\n if (typeof tc.result === \"string\") fragments.push(tc.result)\n }\n }\n const content = msg.content\n if (typeof content === \"string\") {\n fragments.push(content)\n } else if (Array.isArray(content)) {\n for (const part of content) {\n if (part.type === \"text\") fragments.push(part.text)\n }\n }\n return fragments\n}\n\n/**\n * 把\"tool_name → step_number\"的映射建立起来。两条来源:\n * 1. ListSkillTools 结果里 `tools[].description` 含 \"步骤N\"\n * 2. RunSkillTool 结果按出现顺序填补剩余未映射 step\n */\nfunction buildToolStepMap(\n messages: ChatMessage[],\n sortedStepNumbers: number[],\n): Map<string, number> {\n const map = new Map<string, number>()\n const stepPattern = /步骤\\s*(\\d+)/\n\n for (const msg of messages) {\n for (const frag of collectFragments(msg)) {\n if (!frag.includes('\"tools\"')) continue\n try {\n const parsed = JSON.parse(frag)\n if (!Array.isArray(parsed.tools)) continue\n for (const tool of parsed.tools) {\n const m = tool.description?.match(stepPattern)\n if (m && tool.name) map.set(tool.name, Number.parseInt(m[1], 10))\n }\n } catch {\n // not valid JSON, skip\n }\n }\n }\n const assignedSteps = new Set(map.values())\n const remainingSteps = sortedStepNumbers.filter((n) => !assignedSteps.has(n))\n let seqIndex = 0\n for (const msg of messages) {\n for (const frag of collectFragments(msg)) {\n if (!isRunSkillToolResult(frag)) continue\n const m = frag.match(/\"tool_name\":\\s*\"([^\"]+)\"/)\n if (!m || map.has(m[1])) continue\n if (seqIndex < remainingSteps.length) {\n map.set(m[1], remainingSteps[seqIndex])\n seqIndex++\n }\n }\n }\n return map\n}\n\n// what-if 重跑的用户消息 prompt 头,backend 在 _compose_whatif_prompt 里拼的固定串。\n// snapshot 会顺带含 stepN_xxx/ 路径,会被 STEP_PATH_PATTERN 扫中误 tag;而它本身\n// 是\"从 step N 开始重跑\"的新段起点,应该落在卡片之间的 gap section,不归属任何 step。\nconst WHATIF_HEADER_MARK = \"deprecated_by_rerun,请基于最新用户假设从 step\"\n\nfunction isWhatIfUserMessage(msg: ChatMessage): boolean {\n if (msg.role !== \"user\") return false\n const content = msg.content\n if (typeof content === \"string\") return content.includes(WHATIF_HEADER_MARK)\n if (Array.isArray(content)) {\n for (const part of content) {\n if (part.type === \"text\" && part.text.includes(WHATIF_HEADER_MARK)) return true\n }\n }\n return false\n}\n\nfunction findStepInMessage(\n msg: ChatMessage,\n toolStepMap: Map<string, number>,\n): number | null {\n if (isWhatIfUserMessage(msg)) return null\n const fragments = collectFragments(msg)\n for (const frag of fragments) {\n const n = extractStepNumber(frag)\n if (n != null) return n\n }\n for (const frag of fragments) {\n if (!isRunSkillToolResult(frag)) continue\n const m = frag.match(/\"tool_name\":\\s*\"([^\"]+)\"/)\n if (m) {\n const step = toolStepMap.get(m[1])\n if (step != null) return step\n }\n }\n return null\n}\n\n/**\n * 把消息流切成 step-aligned 的 ranges 数组(纯函数)。\n *\n * 传 `steps` 只是为了拿 stepNumber 白名单,所以参数接受任何带 `stepNumber` 字段\n * 的对象,避免引入 apps/web 的 StepInfo 依赖。\n *\n * 算法概述:\n * 1. 每条消息过 `findStepInMessage`,得到 perMessageStep[]\n * 2. 顺序扫,遇到 step transition 时开新段;往前吃紧邻的 Q&A(user/assistant),\n * 遇到 what-if 重跑 user 消息立即停(它是边界)\n * 3. 末段 endIndex 停在最后一条 tag 该 step 的消息之后(避免吞下尾部闲聊)\n */\nexport function buildStepRanges(\n messages: ChatMessage[],\n steps: ReadonlyArray<{ stepNumber: number }>,\n): StepMessageRange[] {\n if (steps.length === 0) return []\n\n const sortedStepNumbers = steps.map((s) => s.stepNumber).sort((a, b) => a - b)\n const stepNumbers = new Set(sortedStepNumbers)\n\n const toolStepMap = buildToolStepMap(messages, sortedStepNumbers)\n const perMessageStep: (number | null)[] = messages.map((m) =>\n findStepInMessage(m, toolStepMap),\n )\n\n const ranges: Omit<StepMessageRange, \"endIndex\">[] = []\n let prevStep: number | null = null\n\n for (let i = 0; i < messages.length; i++) {\n const stepNum = perMessageStep[i]\n // what-if user 气泡清空 prevStep:它是\"从 step N 开始重跑\"的边界,之后\n // 即便 stepNum === 之前的 step 也必须开新段(rerun 的同步新 step1 不能\n // 和 rerun 前的旧 step1 合并成一段)。\n if (stepNum == null) {\n if (isWhatIfUserMessage(messages[i])) prevStep = null\n continue\n }\n if (!stepNumbers.has(stepNum)) continue\n if (stepNum === prevStep) continue\n prevStep = stepNum\n\n const prevBound = ranges.length > 0 ? ranges[ranges.length - 1].startIndex + 1 : 0\n let start = i\n let foundUser = false\n for (let j = i - 1; j >= prevBound; j--) {\n const msg = messages[j]\n const msgStep = perMessageStep[j]\n if (msgStep != null && msgStep !== stepNum) break\n if (msg.role === \"user\" && isWhatIfUserMessage(msg)) break\n if (msg.role === \"user\") {\n start = j\n foundUser = true\n continue\n }\n if (msg.role === \"assistant\" && foundUser) {\n start = j\n break\n }\n break\n }\n ranges.push({ stepNumber: stepNum, startIndex: start })\n }\n\n ranges.sort((a, b) => a.startIndex - b.startIndex)\n\n const result: StepMessageRange[] = []\n for (let i = 0; i < ranges.length; i++) {\n const r = ranges[i]\n // 上界:中间段是下一段 startIndex,末段是 messages.length。\n const upper = i + 1 < ranges.length ? ranges[i + 1].startIndex : messages.length\n // 从上界往回找最后一条 tag 该 step 的消息;把 [r.startIndex, lastTagged+1)\n // 作为本段。这样中间段的尾巴(例如紧邻下一段的 what-if user boundary 消息\n // 或非本 step 的闲聊)就不会被吞进来。\n let lastTagged = r.startIndex\n for (let j = upper - 1; j >= r.startIndex; j--) {\n if (perMessageStep[j] === r.stepNumber) {\n lastTagged = j\n break\n }\n }\n result.push({ stepNumber: r.stepNumber, startIndex: r.startIndex, endIndex: lastTagged + 1 })\n }\n return result\n}\n\n/**\n * 从 stepRanges 里按 step 归属筛选出需作废(whatif)的消息 id。\n *\n * 输入 `fromStep = min(quotes.map(q => q.step_number))`,返回 stepNumber >=\n * fromStep 的每段 range 内所有 message.entry_id,按 range.startIndex 升序。\n * 重复 id 自动去重。\n *\n * 纯函数,便于放在 core 供 apps/web 的 hook 共用并独立单测。\n */\nexport function deriveDeprecateEntryIds(\n stepRanges: StepMessageRange[],\n messages: ChatMessage[],\n fromStep: number,\n): string[] {\n if (stepRanges.length === 0) return []\n const ids: string[] = []\n const seen = new Set<string>()\n for (const range of stepRanges) {\n if (range.stepNumber < fromStep) continue\n const end = Math.min(range.endIndex, messages.length)\n for (let j = range.startIndex; j < end; j++) {\n const msg = messages[j]\n if (!msg?.entry_id) continue\n if (seen.has(msg.entry_id)) continue\n seen.add(msg.entry_id)\n ids.push(msg.entry_id)\n }\n }\n return ids\n}\n","export interface HtmlSourceLocatorElement {\n tag: string\n attributes?: Record<string, string>\n visibleText?: string\n}\n\nexport interface HtmlSourceLocation {\n snippet?: string\n startLine?: number\n endLine?: number\n startColumn?: number\n endColumn?: number\n searchAnchors: string[]\n locatorConfidence: \"high\" | \"medium\" | \"low\"\n reason: string\n}\n\nconst SNIPPET_LIMIT = 2000\nconst TEXT_ANCHOR_LIMIT = 120\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n])\n\nconst STABLE_ATTRS = [\"data-blade-id\", \"data-testid\", \"data-cy\", \"id\"]\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\nfunction normalizeTag(tag: string): string {\n return tag.trim().toLowerCase().replace(/[^a-z0-9:-]/g, \"\") || \"*\"\n}\n\nfunction normalizeText(text: string): string {\n return text.replace(/\\s+/g, \" \").trim()\n}\n\nfunction truncate(value: string, limit: number): string {\n if (value.length <= limit) return value\n return `${value.slice(0, Math.max(0, limit - 1))}…`\n}\n\nfunction lineColumnAt(content: string, index: number): { line: number; column: number } {\n const before = content.slice(0, Math.max(0, index))\n const lines = before.split(\"\\n\")\n return { line: lines.length, column: lines[lines.length - 1].length + 1 }\n}\n\nfunction buildTagPattern(tag: string, innerPattern: string): RegExp {\n const tagPart = tag === \"*\" ? \"[a-zA-Z][\\\\w:-]*\" : escapeRegExp(tag)\n return new RegExp(`<${tagPart}\\\\b(?=[^>]*${innerPattern})[^>]*>`, \"gi\")\n}\n\nfunction attrPattern(attr: string, value: string): string {\n const escapedAttr = escapeRegExp(attr)\n const escapedValue = escapeRegExp(value)\n return `\\\\b${escapedAttr}\\\\s*=\\\\s*(?:\"${escapedValue}\"|'${escapedValue}'|${escapedValue}(?=\\\\s|>|/))`\n}\n\nfunction collectMatches(pattern: RegExp, content: string): RegExpExecArray[] {\n const matches: RegExpExecArray[] = []\n pattern.lastIndex = 0\n let match = pattern.exec(content)\n while (match != null) {\n matches.push(match)\n if (match[0].length === 0) pattern.lastIndex += 1\n match = pattern.exec(content)\n }\n return matches\n}\n\nfunction findOpeningTagByAttr(\n content: string,\n tag: string,\n attr: string,\n value: string,\n): { index: number; text: string } | null {\n if (!value.trim()) return null\n const matches = collectMatches(buildTagPattern(tag, attrPattern(attr, value)), content)\n if (matches.length !== 1) return null\n return { index: matches[0].index, text: matches[0][0] }\n}\n\nfunction findOpeningTagNearText(content: string, tag: string, visibleText: string) {\n const text = normalizeText(visibleText)\n if (!text || text.length > TEXT_ANCHOR_LIMIT) return null\n const textMatches = collectMatches(new RegExp(escapeRegExp(text), \"g\"), normalizeText(content))\n if (textMatches.length !== 1) return null\n\n // Use the original content index when possible. This intentionally handles the common\n // generated/static HTML case; whitespace-normalized misses simply fall back to anchors.\n const originalIndex = content.indexOf(text)\n if (originalIndex < 0) return null\n const normalizedTag = normalizeTag(tag)\n const tagPart = normalizedTag === \"*\" ? \"[a-zA-Z][\\\\w:-]*\" : escapeRegExp(normalizedTag)\n const openPattern = new RegExp(`<${tagPart}\\\\b[^>]*>`, \"gi\")\n let candidate: RegExpExecArray | null = null\n let match = openPattern.exec(content)\n while (match != null) {\n if (match.index > originalIndex) break\n candidate = match\n match = openPattern.exec(content)\n }\n if (!candidate) return null\n return { index: candidate.index, text: candidate[0] }\n}\n\nfunction findSnippetEnd(content: string, start: number, tag: string, openingText: string): number {\n const openingEnd = start + openingText.length\n const normalizedTag = normalizeTag(tag)\n if (VOID_TAGS.has(normalizedTag) || openingText.endsWith(\"/>\")) return openingEnd\n const closePattern = new RegExp(`</${escapeRegExp(normalizedTag)}>`, \"i\")\n const closeMatch = closePattern.exec(content.slice(openingEnd))\n if (!closeMatch) return openingEnd\n return openingEnd + closeMatch.index + closeMatch[0].length\n}\n\nfunction buildSnippet(content: string, start: number, tag: string, openingText: string) {\n const rawEnd = findSnippetEnd(content, start, tag, openingText)\n const boundedEnd = Math.min(rawEnd, start + SNIPPET_LIMIT)\n const snippet = content.slice(start, boundedEnd)\n const startPos = lineColumnAt(content, start)\n const endPos = lineColumnAt(content, boundedEnd)\n return {\n snippet: rawEnd > boundedEnd ? `${snippet}…` : snippet,\n startLine: startPos.line,\n endLine: endPos.line,\n startColumn: startPos.column,\n endColumn: endPos.column,\n }\n}\n\nexport function locateHtmlElementSource(\n html: string,\n element: HtmlSourceLocatorElement,\n): HtmlSourceLocation {\n const tag = normalizeTag(element.tag)\n const attributes = element.attributes ?? {}\n const visibleText = normalizeText(element.visibleText ?? \"\")\n const searchAnchors: string[] = []\n\n for (const attr of STABLE_ATTRS) {\n const value = attributes[attr]\n if (!value) continue\n searchAnchors.push(`${attr}=\"${truncate(value, TEXT_ANCHOR_LIMIT)}\"`)\n const found = findOpeningTagByAttr(html, tag, attr, value)\n if (found) {\n return {\n ...buildSnippet(html, found.index, tag, found.text),\n searchAnchors,\n locatorConfidence: \"high\",\n reason: `${attr} 可唯一定位`,\n }\n }\n }\n\n const ariaLabel = attributes[\"aria-label\"]\n if (ariaLabel) {\n searchAnchors.push(`aria-label=\"${truncate(ariaLabel, TEXT_ANCHOR_LIMIT)}\"`)\n const found = findOpeningTagByAttr(html, tag, \"aria-label\", ariaLabel)\n if (found) {\n return {\n ...buildSnippet(html, found.index, tag, found.text),\n searchAnchors,\n locatorConfidence: \"medium\",\n reason: \"aria-label 可唯一定位\",\n }\n }\n }\n\n if (visibleText) {\n searchAnchors.push(`text=\"${truncate(visibleText, TEXT_ANCHOR_LIMIT)}\"`)\n const found = findOpeningTagNearText(html, tag, visibleText)\n if (found) {\n return {\n ...buildSnippet(html, found.index, tag, found.text),\n searchAnchors,\n locatorConfidence: \"medium\",\n reason: \"可见文字可唯一定位\",\n }\n }\n }\n\n return {\n searchAnchors,\n locatorConfidence: \"low\",\n reason: \"未能在源 HTML 中唯一定位,需结合文件内容人工核对\",\n }\n}\n","import { locateHtmlElementSource, type HtmlSourceLocation } from \"./html-source-locator\"\n\nexport interface HtmlElementSelectionRaw {\n tag: string\n selectionMode?: \"single\" | \"group\"\n groupLabel?: string\n groupCount?: number\n groupItems?: HtmlElementSelectionGroupItem[]\n visibleText?: string\n accessibleName?: string\n role?: string\n attributes?: Record<string, string>\n selectors?: HtmlElementSelector[]\n domPath?: string\n rect?: HtmlElementRect\n style?: Record<string, string>\n surroundings?: HtmlElementSurroundings\n viewport?: { width: number; height: number; devicePixelRatio: number }\n screenshotDataUrl?: string\n screenshotStatus?: \"included\" | \"failed\"\n screenshotError?: string\n}\n\nexport interface HtmlElementSelectionGroupItem {\n label?: string\n tag: string\n role?: string\n visibleText?: string\n accessibleName?: string\n selectors?: HtmlElementSelector[]\n domPath?: string\n rect?: HtmlElementRect\n}\n\nexport interface HtmlElementSelector {\n kind: string\n value: string\n confidence: \"high\" | \"medium\" | \"low\"\n}\n\nexport interface HtmlElementRect {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport interface HtmlElementSurroundings {\n parentSummary?: string\n childrenSummary?: string[]\n previousSiblings?: string[]\n nextSiblings?: string[]\n}\n\nexport interface HtmlElementSelectionContext {\n schema: \"blade.html_element_selection.v1\"\n selected_at: string\n source_kind: \"html_file\" | \"running_page\"\n file: {\n path: string\n name: string\n language: \"html\"\n content_hash: string\n }\n preview: {\n mode: \"render\" | \"running_page\"\n title?: string\n url?: string\n viewport: { width: number; height: number; device_pixel_ratio: number }\n }\n element: {\n label: string\n tag: string\n role?: string\n accessible_name?: string\n visible_text?: string\n attributes: Record<string, string>\n selectors: HtmlElementSelector[]\n dom_path?: string\n rect?: HtmlElementRect\n style: Record<string, string>\n }\n group?: {\n label: string\n count: number\n items: Array<{\n label?: string\n tag: string\n role?: string\n accessible_name?: string\n visible_text?: string\n selectors: HtmlElementSelector[]\n dom_path?: string\n rect?: HtmlElementRect\n }>\n }\n source: {\n snippet?: string\n start_line?: number\n end_line?: number\n start_column?: number\n end_column?: number\n search_anchors: string[]\n locator_confidence: \"high\" | \"medium\" | \"low\"\n reason: string\n }\n surroundings: {\n parent_summary?: string\n children_summary?: string[]\n previous_siblings?: string[]\n next_siblings?: string[]\n }\n screenshot?: {\n included: boolean\n note: string\n reason?: string\n }\n limits: {\n truncated: boolean\n omitted_sensitive_fields: string[]\n }\n}\n\nexport interface BuildHtmlElementSelectionInput {\n filePath: string\n fileName?: string\n title?: string\n html?: string\n sourceKind?: \"html_file\" | \"running_page\"\n pageUrl?: string\n selection: HtmlElementSelectionRaw\n selectedAt?: string\n}\n\nexport interface PendingHtmlElementContext {\n label: string\n content: string\n context: HtmlElementSelectionContext\n imageUrl?: string\n}\n\nconst VALUE_LIMIT = 240\nconst TEXT_LIMIT = 500\nconst STYLE_KEYS = new Set([\n \"display\",\n \"position\",\n \"color\",\n \"backgroundColor\",\n \"fontSize\",\n \"fontWeight\",\n \"margin\",\n \"padding\",\n])\nconst SENSITIVE_NAME_RE = /(password|passwd|token|secret|authorization|api[-_]?key|cookie)/i\nconst URL_ATTRS = new Set([\"href\", \"src\", \"action\"])\nconst USER_VALUE_ATTRS = new Set([\"value\"])\n\nfunction truncate(value: string, limit: number, limits: { truncated: boolean }): string {\n if (value.length <= limit) return value\n limits.truncated = true\n return `${value.slice(0, Math.max(0, limit - 1))}…`\n}\n\nfunction stripQueryAndHash(value: string) {\n try {\n const url = new URL(value, \"http://blade.local\")\n if (url.protocol === \"http:\" && url.host === \"blade.local\" && value.startsWith(\"/\")) {\n return url.pathname\n }\n url.search = \"\"\n url.hash = \"\"\n return url.toString()\n } catch {\n return value.split(/[?#]/, 1)[0]\n }\n}\n\nfunction sanitizeAttributes(\n attributes: Record<string, string>,\n limits: { truncated: boolean; omittedSensitiveFields: string[] },\n): Record<string, string> {\n const result: Record<string, string> = {}\n for (const [key, rawValue] of Object.entries(attributes)) {\n const normalizedKey = key.trim()\n if (!normalizedKey) continue\n if (SENSITIVE_NAME_RE.test(normalizedKey) || USER_VALUE_ATTRS.has(normalizedKey.toLowerCase())) {\n result[normalizedKey] = \"[已脱敏]\"\n limits.omittedSensitiveFields.push(normalizedKey)\n continue\n }\n const normalizedValue = URL_ATTRS.has(normalizedKey.toLowerCase())\n ? stripQueryAndHash(rawValue)\n : rawValue\n result[normalizedKey] = truncate(normalizedValue, VALUE_LIMIT, limits)\n }\n return result\n}\n\nfunction sanitizeStyle(style: Record<string, string>, limits: { truncated: boolean }) {\n const result: Record<string, string> = {}\n for (const [key, value] of Object.entries(style)) {\n if (!STYLE_KEYS.has(key)) continue\n const normalizedKey = key.replace(/[A-Z]/g, (match) => `_${match.toLowerCase()}`)\n result[normalizedKey] = truncate(String(value), 80, limits)\n }\n return result\n}\n\nfunction limitList(values: string[] | undefined, limits: { truncated: boolean }) {\n if (!values?.length) return undefined\n if (values.length > 5) limits.truncated = true\n return values.slice(0, 5).map((item) => truncate(item, 160, limits))\n}\n\nfunction fileNameFromPath(filePath: string, fallback?: string) {\n return fallback?.trim() || filePath.split(\"/\").pop() || filePath || \"未命名 HTML\"\n}\n\nfunction elementKindLabel(selection: HtmlElementSelectionRaw) {\n const tag = selection.tag.toLowerCase()\n const role = selection.role?.toLowerCase()\n if (role === \"button\" || tag === \"button\") return \"按钮\"\n if (role === \"link\" || tag === \"a\") return \"链接\"\n if (role === \"textbox\" || tag === \"input\" || tag === \"textarea\") return \"输入框\"\n if (tag === \"img\") return \"图片\"\n if (tag === \"table\") return \"表格\"\n if (tag === \"tr\") return \"表格行\"\n if (tag === \"td\" || tag === \"th\") return \"单元格\"\n if (/^h[1-6]$/.test(tag)) return \"标题\"\n if (tag === \"section\" || tag === \"article\" || tag === \"div\") return \"区域\"\n return \"内容\"\n}\n\nfunction humanElementLabel(selection: HtmlElementSelectionRaw) {\n const kind = elementKindLabel(selection)\n const text = (selection.accessibleName || selection.visibleText || \"\").replace(/\\s+/g, \" \").trim()\n return text ? `${kind}「${text.slice(0, 24)}${text.length > 24 ? \"…\" : \"\"}」` : `${kind}<${selection.tag}>`\n}\n\nfunction stableSelectorsFromAttributes(attributes: Record<string, string>): HtmlElementSelector[] {\n const selectors: HtmlElementSelector[] = []\n const add = (kind: string, value: string, confidence: \"high\" | \"medium\" | \"low\") => {\n if (value && !selectors.some((item) => item.kind === kind && item.value === value)) {\n selectors.push({ kind, value, confidence })\n }\n }\n add(\"data-blade-id\", attributes[\"data-blade-id\"], \"high\")\n add(\"data-testid\", attributes[\"data-testid\"] || attributes[\"data-cy\"], \"high\")\n add(\"id\", attributes.id, \"high\")\n add(\"aria\", attributes[\"aria-label\"], \"medium\")\n return selectors\n}\n\nfunction mergeSelectors(selection: HtmlElementSelectionRaw, attributes: Record<string, string>) {\n const selectors = [...stableSelectorsFromAttributes(attributes), ...(selection.selectors ?? [])]\n const seen = new Set<string>()\n return selectors.filter((selector) => {\n if (!selector.value) return false\n const key = `${selector.kind}:${selector.value}`\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n}\n\nfunction sanitizeGroupItems(\n selection: HtmlElementSelectionRaw,\n limits: { truncated: boolean },\n) {\n const items = selection.groupItems ?? []\n if (!items.length) return undefined\n if (items.length > 12) limits.truncated = true\n return items.slice(0, 12).map((item) => {\n const label = item.label ? truncate(item.label.replace(/\\s+/g, \" \").trim(), 120, limits) : undefined\n const visibleText = item.visibleText\n ? truncate(item.visibleText.replace(/\\s+/g, \" \").trim(), 240, limits)\n : undefined\n const accessibleName = item.accessibleName\n ? truncate(item.accessibleName.replace(/\\s+/g, \" \").trim(), 160, limits)\n : undefined\n return {\n label,\n tag: item.tag.toLowerCase(),\n role: item.role,\n accessible_name: accessibleName,\n visible_text: visibleText,\n selectors: item.selectors ?? [],\n dom_path: item.domPath,\n rect: item.rect,\n }\n })\n}\n\nfunction simpleContentHash(content: string): string {\n let hash = 2166136261\n for (let index = 0; index < content.length; index += 1) {\n hash ^= content.charCodeAt(index)\n hash = Math.imul(hash, 16777619)\n }\n return (hash >>> 0).toString(16).padStart(8, \"0\")\n}\n\nfunction sourceToContext(source: HtmlSourceLocation) {\n return {\n snippet: source.snippet,\n start_line: source.startLine,\n end_line: source.endLine,\n start_column: source.startColumn,\n end_column: source.endColumn,\n search_anchors: source.searchAnchors,\n locator_confidence: source.locatorConfidence,\n reason: source.reason,\n }\n}\n\nfunction contextMarkdown(context: HtmlElementSelectionContext) {\n const source = context.source\n const rect = context.element.rect\n const rectText = rect\n ? `x=${Math.round(rect.x)}, y=${Math.round(rect.y)}, w=${Math.round(rect.width)}, h=${Math.round(rect.height)}`\n : \"未知\"\n const isRunningPage = context.source_kind === \"running_page\"\n const selectors = context.element.selectors.length\n ? context.element.selectors\n .map((selector, index) => `${index + 1}. ${selector.kind}=\"${selector.value}\"(${selector.confidence})`)\n .join(\"\\n\")\n : \"无稳定选择器;请结合源片段和搜索锚点定位。\"\n const anchors = source.search_anchors.length\n ? source.search_anchors.map((anchor) => `- ${anchor}`).join(\"\\n\")\n : \"- 无\"\n const sourceSnippet = source.snippet?.trim()\n ? `\\n\\n## 源 HTML 片段\\n\\`\\`\\`html\\n${source.snippet.trim()}\\n\\`\\`\\``\n : \"\"\n const groupText = context.group\n ? `\\n\\n## 组合选区\\n用户框选的是一组界面内容,不是单个孤立元素。请把这些内容作为同一个调整范围处理。\\n${context.group.items\n .map((item, index) => {\n const name = item.visible_text || item.accessible_name || item.label || item.tag\n const rect = item.rect\n ? ` x=${Math.round(item.rect.x)}, y=${Math.round(item.rect.y)}, w=${Math.round(item.rect.width)}, h=${Math.round(item.rect.height)}`\n : \"\"\n return `${index + 1}. ${item.tag}${item.role ? ` role=${item.role}` : \"\"}:${name}${rect}`\n })\n .join(\"\\n\")}`\n : \"\"\n const targetLine = isRunningPage\n ? `- 页面:\\`${context.preview.url || context.file.path}\\``\n : `- 文件:\\`${context.file.path}\\``\n const sourceHint = isRunningPage\n ? \"这是用户在右侧预览中选中的运行页面内容。请优先根据页面 URL、可见文字、稳定标记和周边元素,在前端源码中定位对应组件或页面;不要要求用户提供 data 属性。\"\n : \"这是用户在右侧 HTML 预览中选中的界面内容。请优先编辑指定文件,并用源 HTML 片段、稳定标记和可见文字定位,不要依赖截图猜测。\"\n const screenshotNote = context.screenshot\n ? context.screenshot.included\n ? \"\\n\\n## 选中区域截图\\n已随本条消息附加为图片。若当前模型不支持图片输入,请直接忽略截图并使用上面的文本上下文。\"\n : `\\n\\n## 选中区域截图\\n截图生成失败${context.screenshot.reason ? `(${context.screenshot.reason})` : \"\"},本条消息仅包含文本上下文。`\n : \"\"\n const surroundings = [\n context.surroundings.parent_summary ? `- 父级:${context.surroundings.parent_summary}` : null,\n ...(context.surroundings.previous_siblings ?? []).map((item) => `- 前一个元素:${item}`),\n ...(context.surroundings.next_siblings ?? []).map((item) => `- 后一个元素:${item}`),\n ].filter(Boolean)\n\n return `${sourceHint}\n\n## 用户选中\n${targetLine}\n- 元素:${context.element.label}\n- 位置:${rectText}\n- 源定位:${source.locator_confidence}(${source.reason})\n\n## 稳定定位候选\n${selectors}\n\n## 搜索锚点\n${anchors}${sourceSnippet}${groupText}${screenshotNote}\n\n## 周边内容\n${surroundings.length ? surroundings.join(\"\\n\") : \"- 无可用周边摘要\"}\n\n## 原始结构化数据\n\\`\\`\\`json\n${JSON.stringify(context, null, 2)}\n\\`\\`\\``\n}\n\nexport function buildHtmlElementSelectionContext(\n input: BuildHtmlElementSelectionInput,\n): PendingHtmlElementContext {\n const limits = { truncated: false, omittedSensitiveFields: [] as string[] }\n const rawAttributes = input.selection.attributes ?? {}\n const attributes = sanitizeAttributes(rawAttributes, {\n get truncated() {\n return limits.truncated\n },\n set truncated(value: boolean) {\n limits.truncated = value\n },\n omittedSensitiveFields: limits.omittedSensitiveFields,\n })\n const visibleText = input.selection.visibleText\n ? truncate(input.selection.visibleText.replace(/\\s+/g, \" \").trim(), TEXT_LIMIT, limits)\n : undefined\n const accessibleName = input.selection.accessibleName\n ? truncate(input.selection.accessibleName.replace(/\\s+/g, \" \").trim(), TEXT_LIMIT, limits)\n : undefined\n const html = input.html ?? \"\"\n const sourceKind = input.sourceKind ?? \"html_file\"\n const source = html\n ? locateHtmlElementSource(html, {\n tag: input.selection.tag,\n attributes,\n visibleText: visibleText || accessibleName,\n })\n : {\n searchAnchors: visibleText ? [`text=\"${visibleText}\"`] : [],\n locatorConfidence: \"low\" as const,\n reason: sourceKind === \"running_page\"\n ? \"运行页面未提供源 HTML,需结合前端源码和路由人工核对\"\n : \"未提供源 HTML,需结合文件内容人工核对\",\n }\n const viewport = input.selection.viewport ?? {\n width: 0,\n height: 0,\n devicePixelRatio: 1,\n }\n const groupItems = sanitizeGroupItems(input.selection, limits)\n const groupLabel =\n input.selection.selectionMode === \"group\"\n ? input.selection.groupLabel ||\n `组合选区(${input.selection.groupCount || groupItems?.length || 0} 个内容)`\n : undefined\n const elementLabel = groupLabel\n ? `组合区域「${groupLabel}」`\n : humanElementLabel({ ...input.selection, visibleText, accessibleName })\n const context: HtmlElementSelectionContext = {\n schema: \"blade.html_element_selection.v1\",\n selected_at: input.selectedAt ?? new Date().toISOString(),\n source_kind: sourceKind,\n file: {\n path: input.filePath,\n name: fileNameFromPath(input.filePath, input.fileName),\n language: \"html\",\n content_hash: simpleContentHash(html || input.pageUrl || input.filePath),\n },\n preview: {\n mode: sourceKind === \"running_page\" ? \"running_page\" : \"render\",\n title: input.title,\n url: input.pageUrl,\n viewport: {\n width: viewport.width,\n height: viewport.height,\n device_pixel_ratio: viewport.devicePixelRatio,\n },\n },\n element: {\n label: elementLabel,\n tag: input.selection.tag.toLowerCase(),\n role: input.selection.role,\n accessible_name: accessibleName,\n visible_text: visibleText,\n attributes,\n selectors: mergeSelectors(input.selection, attributes),\n dom_path: input.selection.domPath,\n rect: input.selection.rect,\n style: sanitizeStyle(input.selection.style ?? {}, limits),\n },\n group: groupItems?.length\n ? {\n label: groupLabel || `组合选区(${groupItems.length} 个内容)`,\n count: input.selection.groupCount || groupItems.length,\n items: groupItems,\n }\n : undefined,\n source: sourceToContext(source),\n screenshot: input.selection.screenshotDataUrl\n ? {\n included: true,\n note: \"已附加选中元素截图;非多模态模型会自动忽略图片,请优先使用文本上下文。\",\n }\n : input.selection.screenshotStatus === \"failed\"\n ? {\n included: false,\n note: \"截图生成失败;已保留文本上下文供模型定位。\",\n reason: input.selection.screenshotError,\n }\n : undefined,\n surroundings: {\n parent_summary: input.selection.surroundings?.parentSummary,\n children_summary: limitList(input.selection.surroundings?.childrenSummary, limits),\n previous_siblings: limitList(input.selection.surroundings?.previousSiblings, limits),\n next_siblings: limitList(input.selection.surroundings?.nextSiblings, limits),\n },\n limits: {\n truncated: limits.truncated || Boolean(source.snippet?.endsWith(\"…\")),\n omitted_sensitive_fields: limits.omittedSensitiveFields,\n },\n }\n\n return {\n label: `HTML 选中项:${context.element.label}`,\n content: contextMarkdown(context),\n context,\n imageUrl: input.selection.screenshotDataUrl,\n }\n}\n","import { type } from \"arktype\"\nimport type { Solution } from \"../types/solution\"\n\nexport const SessionStatus = type(\n \"'created' | 'running' | 'completed' | 'failed' | 'interrupted' | 'waiting_for_input'\",\n)\nexport type SessionStatus = typeof SessionStatus.infer\n\nexport type TemplateId =\n | \"default\"\n | \"skill_editor\"\n | \"vibe_coding\"\n // ship-attack v2:用户从 ship-attack 页面点\"新建 session\"创建的会话。\n // 后端 _maybe_bind_first_skill 只对此模板触发首次绑定。\n | \"ship_attack\"\n\nexport type SkillEditorTemplateId = \"skill_editor\"\n\nexport type ModeId = \"planning\" | \"executing\"\n\nexport interface ReplayState {\n source_session_id?: string\n status?: \"replay\" | \"autonomous\"\n speed?: 1 | 2 | 5\n next_source_entry_id?: string | null\n ended_at?: string | null\n autonomous_reason?: string | null\n}\n\nexport interface SessionPortMapping {\n container_port: number\n host_port: number\n}\n\n/**\n * 列表搜索时单条会话的命中信息。\n * - field='title':关键词出现在 intent 里,snippet 为 null(标题本身就在 UI 上)\n * - field='content':关键词出现在历史消息里,snippet 含截窗预览与角色\n */\nexport interface SessionSearchMatch {\n field: \"title\" | \"content\"\n snippet: { role: string; text: string } | null\n}\n\nexport const SessionInfo = type({\n id: \"string\",\n intent: \"string\",\n status: SessionStatus,\n created_at: \"string\",\n updated_at: \"string\",\n \"shared?\": \"boolean\",\n \"memory_enabled?\": \"boolean\",\n \"is_persistent?\": \"boolean\",\n \"viewer_role?\": \"'owner' | 'viewer'\",\n \"template_id?\": \"string | null\",\n \"model?\": \"string | null\",\n \"solution_id?\": \"string | null\",\n \"biz_role_id?\": \"string | null\",\n \"solution?\": \"unknown\",\n \"plan_summary?\": \"string | null\",\n \"primary_skill_id?\": \"string | null\",\n // ship-attack v2:后端 engine.set_bound_skill 写入的\"绑定 skill id\"。\n // 未绑定 / 非 ship-attack session 为 null。\n \"bound_skill_id?\": \"string | null\",\n \"replay_state?\": \"unknown\",\n \"is_pinned?\": \"boolean\",\n \"pinned_at?\": \"string | null\",\n \"is_example?\": \"boolean\",\n \"ports?\": \"unknown\",\n \"disable_tools?\": \"string[]\",\n \"match?\": \"unknown\",\n})\nexport type SessionInfo = Omit<\n typeof SessionInfo.infer,\n \"template_id\" | \"solution\" | \"ports\" | \"match\"\n> & {\n shared?: boolean\n memory_enabled?: boolean\n is_persistent?: boolean\n viewer_role?: \"owner\" | \"viewer\"\n template_id?: TemplateId | null\n model?: string | null\n solution_id?: string | null\n biz_role_id?: string | null\n solution?: Solution | null\n primary_skill_id?: string | null\n bound_skill_id?: string | null\n replay_state?: ReplayState | null\n is_pinned?: boolean\n pinned_at?: string | null\n is_example?: boolean\n ports?: SessionPortMapping[]\n disable_tools?: string[]\n /** 仅在带 q 搜索的列表响应中出现;普通列表里此字段缺省。 */\n match?: SessionSearchMatch | null\n}\n\n/**\n * 主 skill 配置快照(v2)。创建 session 时从 SKILL.md frontmatter 抽出并\n * 固化到 session_root/.blade/primary-skill.json;ship-attack 页面骨架的唯\n * 一数据源。\n */\nexport interface PrimarySkillStepSpec {\n n: number\n label: string\n}\n\nexport interface PrimarySkillStageSpec {\n id: string\n name: string\n steps: PrimarySkillStepSpec[]\n}\n\nexport interface PrimarySkillParallelMode {\n id: string\n name: string\n prompt_hint: string\n}\n\nexport interface PrimarySkillSnapshot {\n version: number\n skill_id: string\n title: string\n description: string\n stages: PrimarySkillStageSpec[]\n parallel_modes: PrimarySkillParallelMode[]\n captured_at: string\n}\n\n/**\n * 单 session detail(GET /api/sessions/:id)。列表接口返回 SessionInfo,\n * detail 在此基础上附加 primary_skill_snapshot。\n */\nexport interface SessionDetail extends SessionInfo {\n primary_skill_snapshot?: PrimarySkillSnapshot | null\n /**\n * 会话级环境变量(owner-only)。后端仅在 GET detail 和 PUT /env 响应中返回,\n * 列表/搜索响应不带此字段。调用 setSessionEnv 后可类型安全地读回。\n */\n env?: Record<string, string>\n}\n","export enum LayoutType {\n Default = \"default\",\n SkillEditor = \"skill-editor\",\n BladeCoa = \"blade-coa\",\n ChatPreview = \"chat-preview\",\n ChatOnly = \"chat-only\",\n SolutionApp = \"solution-app\",\n}\n\nexport interface Solution {\n id: string\n name: string\n version: string\n description?: string | null\n layout_type: LayoutType | string\n initial_mode?: \"planning\" | \"executing\" | string | null\n initial_message?: string | null\n preview?: { url: string; title?: string | null } | null\n roles?: BizRole[] | null\n data?: Record<string, unknown> | null\n ui_config?: SolutionAppUiConfig | null\n}\n\nexport interface SolutionAppUiConfig {\n branding: {\n name: string\n subtitle?: string\n icon_text: string\n icon_gradient?: string\n }\n list: {\n title: string\n create_button: string\n card?: {\n subtitle?: string\n stats?: Array<{\n label: string\n value: string\n color?: string\n }>\n }\n }\n create: {\n title: string\n description?: string\n submit_button: string\n sections: Array<{\n id: string\n title: string\n description?: string\n fields: Array<SolutionAppField>\n }>\n }\n}\n\nexport type SolutionAppField =\n | {\n id: string\n kind: \"textarea\"\n label: string\n placeholder?: string\n }\n | {\n id: string\n kind: \"file-upload\"\n accept?: string[]\n categories?: Array<{\n label: string\n description: string\n color: string\n }>\n }\n\nexport interface SolutionAppState {\n pipeline: Array<{\n id: string\n label: string\n status: \"done\" | \"active\" | \"pending\" | \"error\"\n }>\n meta: Record<\n string,\n {\n label: string\n value: string\n color?: string\n }\n >\n}\n\nexport interface BizRole {\n id: string\n name: string\n description?: string | null\n preview?: { url: string; title?: string | null } | null\n}\n","import { type } from \"arktype\"\n\nexport const ResourceBase = type({\n id: \"string\",\n name: \"string\",\n description: \"string\",\n tags: \"string[]\",\n})\nexport type ResourceBase = typeof ResourceBase.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const MysqlConfig = type({\n host: \"string\",\n port: \"number\",\n user: \"string\",\n password: \"string\",\n database: \"string\",\n \"charset?\": \"string\",\n \"tables?\": \"string[]\",\n \"ssl?\": \"boolean\",\n \"connection_pool_size?\": \"number\",\n \"query_timeout?\": \"number\",\n})\nexport type MysqlConfig = typeof MysqlConfig.infer\n\nexport const PostgresqlConfig = type({\n host: \"string\",\n port: \"number\",\n user: \"string\",\n password: \"string\",\n database: \"string\",\n \"schema?\": \"string\",\n \"tables?\": \"string[]\",\n \"ssl_mode?\": \"string\",\n \"connection_pool_size?\": \"number\",\n \"query_timeout?\": \"number\",\n})\nexport type PostgresqlConfig = typeof PostgresqlConfig.infer\n\nexport const DatabaseDriver = type(\"'mysql' | 'postgresql'\")\nexport type DatabaseDriver = typeof DatabaseDriver.infer\n\nexport const DatabaseResource = type({\n \"...\": ResourceBase,\n type: \"'data'\",\n subtype: \"'db'\",\n driver: DatabaseDriver,\n config: \"Record<string, unknown>\",\n})\nexport type DatabaseResource = typeof DatabaseResource.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const McpToolConfig = type({\n \"server_url?\": \"string\",\n \"command?\": \"string\",\n \"args?\": \"string[]\",\n \"env?\": \"Record<string, string>\",\n})\nexport type McpToolConfig = typeof McpToolConfig.infer\n\nexport const HttpToolConfig = type({\n openapi_json_path: \"string\",\n \"base_url?\": \"string\",\n \"auth_header?\": \"string\",\n})\nexport type HttpToolConfig = typeof HttpToolConfig.infer\n\nexport const ToolDriver = type(\"'mcp' | 'http'\")\nexport type ToolDriver = typeof ToolDriver.infer\n\nexport const ToolResource = type({\n \"...\": ResourceBase,\n type: \"'tools'\",\n subtype: ToolDriver,\n config: \"Record<string, unknown>\",\n})\nexport type ToolResource = typeof ToolResource.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const DifyKnowledgeConfig = type({\n base_url: \"string\",\n api_key: \"string\",\n kg_name: \"string\",\n})\nexport type DifyKnowledgeConfig = typeof DifyKnowledgeConfig.infer\n\nexport const KnowledgeDriver = type(\"'dify'\")\nexport type KnowledgeDriver = typeof KnowledgeDriver.infer\n\nexport const KnowledgeResource = type({\n \"...\": ResourceBase,\n type: \"'knowledge'\",\n subtype: KnowledgeDriver,\n config: \"Record<string, unknown>\",\n})\nexport type KnowledgeResource = typeof KnowledgeResource.infer\n","import { type } from \"arktype\"\n\nimport { ResourceBase } from \"./resource-base\"\n\nexport const AgentDriver = type(\"'dify'\")\nexport type AgentDriver = typeof AgentDriver.infer\n\nexport const AgentResource = type({\n \"...\": ResourceBase,\n type: \"'agent'\",\n subtype: AgentDriver,\n config: \"Record<string, unknown>\",\n})\nexport type AgentResource = typeof AgentResource.infer\n","import { type } from \"arktype\"\n\nexport const SceneStatus = type(\"'draft' | 'published'\")\nexport type SceneStatus = typeof SceneStatus.infer\n\nexport const Scene = type({\n id: \"string\",\n name: \"string\",\n description: \"string\",\n status: SceneStatus,\n skills: \"string[]\",\n \"created_at?\": \"string\",\n \"updated_at?\": \"string\",\n})\nexport type Scene = typeof Scene.infer\n","import { type } from \"arktype\"\n\nexport const EnvVariable = type({\n key: \"string\",\n value: \"string\",\n \"description?\": \"string\",\n \"is_secret?\": \"boolean\",\n})\nexport type EnvVariable = typeof EnvVariable.infer\n","import { type } from \"arktype\"\n\nexport const ScheduledTask = type({\n id: \"string\",\n title: \"string\",\n prompt: \"string\",\n cron: \"string\",\n timezone: \"string\",\n enabled: \"boolean\",\n expires_at: \"string | null\",\n skip_confirmations: \"boolean\",\n model: \"string | null\",\n next_run_at: \"string | null\",\n last_run_at: \"string | null\",\n created_at: \"string\",\n updated_at: \"string\",\n})\nexport type ScheduledTask = typeof ScheduledTask.infer\n\nexport const ScheduledTaskRun = type({\n id: \"string\",\n task_id: \"string\",\n session_id: \"string | null\",\n status: \"string\",\n error: \"string | null\",\n triggered_at: \"string\",\n finished_at: \"string | null\",\n})\nexport type ScheduledTaskRun = typeof ScheduledTaskRun.infer\n\nexport const ScheduledTaskCalendarItem = type({\n task_id: \"string\",\n title: \"string\",\n occurrences: \"string[]\",\n})\nexport type ScheduledTaskCalendarItem = typeof ScheduledTaskCalendarItem.infer\n","import { type } from \"arktype\"\n\nexport const TaskStatus = type(\"'pending' | 'in_progress' | 'done' | 'failed' | 'skipped'\")\nexport type TaskStatus = typeof TaskStatus.infer\n\nexport const Task = type({\n id: \"string\",\n goal: \"string\",\n skills: \"string[]\",\n depends_on: \"string[]\",\n status: TaskStatus,\n result_summary: \"string\",\n number: \"string\",\n})\nexport type Task = typeof Task.infer\n"],"mappings":"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","names":["r","r","r","r","r","r","r","r","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","r","truncate","rect","LayoutType","type","type","type","type","type","type","type","type","type","type","type","type","type"]}
|