@blade-hq/agent-kit 0.4.7 → 0.4.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-DQyipdzn.d.ts → SkillStatusBar-BnDtYUf9.d.ts} +2 -2
- package/dist/{blade-client-nOsdVlb1.d.ts → blade-client-n7fiBaFk.d.ts} +60 -2
- package/dist/{chunk-I3FFV63W.js → chunk-5ZFK62RQ.js} +2 -2
- package/dist/{chunk-OKQWPNE3.js → chunk-C3KSHIRA.js} +86 -5
- package/dist/chunk-C3KSHIRA.js.map +1 -0
- package/dist/{chunk-X6MEYCU7.js → chunk-CK7JMN5S.js} +228 -82
- package/dist/chunk-CK7JMN5S.js.map +1 -0
- package/dist/{chunk-4VWLTG5L.js → chunk-EDMS2G5P.js} +88 -17
- package/dist/chunk-EDMS2G5P.js.map +1 -0
- package/dist/{chunk-TC5BBLWO.js → chunk-EFNGK46B.js} +2 -2
- package/dist/{chunk-VD4CKRMT.js → chunk-FYPS4SFF.js} +2 -2
- package/dist/{chunk-CGOQI7ZL.js → chunk-TYCA6WYX.js} +98 -81
- package/dist/chunk-TYCA6WYX.js.map +1 -0
- package/dist/client/index.d.ts +395 -29
- package/dist/client/index.js +1 -1
- package/dist/{licenses-Cxl1xGVy.d.ts → licenses-BZpFl0qG.d.ts} +1 -1
- package/dist/react/api/licenses.d.ts +3 -3
- package/dist/react/api/licenses.js +3 -3
- 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 +4 -4
- 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 +64 -12
- package/dist/react/index.js +100 -63
- package/dist/react/index.js.map +1 -1
- package/dist/{session-CDeiO81j.d.ts → session-BKOc2lsz.d.ts} +9 -1
- package/dist/style.css +1 -1
- package/package.json +2 -1
- package/dist/chunk-4VWLTG5L.js.map +0 -1
- package/dist/chunk-CGOQI7ZL.js.map +0 -1
- package/dist/chunk-OKQWPNE3.js.map +0 -1
- package/dist/chunk-X6MEYCU7.js.map +0 -1
- /package/dist/{chunk-I3FFV63W.js.map → chunk-5ZFK62RQ.js.map} +0 -0
- /package/dist/{chunk-TC5BBLWO.js.map → chunk-EFNGK46B.js.map} +0 -0
- /package/dist/{chunk-VD4CKRMT.js.map → chunk-FYPS4SFF.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/memories.ts","../../src/react/api/gis-api.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 { 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 { 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\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 \"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 \"match?\": \"unknown\",\n})\nexport type SessionInfo = Omit<typeof SessionInfo.infer, \"template_id\" | \"solution\" | \"match\"> & {\n shared?: boolean\n memory_enabled?: 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 /** 仅在带 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","export enum LayoutType {\n Default = \"default\",\n SkillEditor = \"skill-editor\",\n BladeCoa = \"blade-coa\",\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 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}\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","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/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 { 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 \"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 /** 仅在带 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","export enum LayoutType {\n Default = \"default\",\n SkillEditor = \"skill-editor\",\n BladeCoa = \"blade-coa\",\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 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}\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","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","useQuery","r","LayoutType","type","type","type","type","type","type","type","type","type","type","type","type","type"]}
|
|
@@ -36,6 +36,10 @@ interface ReplayState {
|
|
|
36
36
|
ended_at?: string | null;
|
|
37
37
|
autonomous_reason?: string | null;
|
|
38
38
|
}
|
|
39
|
+
interface SessionPortMapping {
|
|
40
|
+
container_port: number;
|
|
41
|
+
host_port: number;
|
|
42
|
+
}
|
|
39
43
|
/**
|
|
40
44
|
* 列表搜索时单条会话的命中信息。
|
|
41
45
|
* - field='title':关键词出现在 intent 里,snippet 为 null(标题本身就在 UI 上)
|
|
@@ -56,6 +60,7 @@ declare const SessionInfo: arktype_internal_variants_object_ts.ObjectType<{
|
|
|
56
60
|
updated_at: string;
|
|
57
61
|
shared?: boolean | undefined;
|
|
58
62
|
memory_enabled?: boolean | undefined;
|
|
63
|
+
is_persistent?: boolean | undefined;
|
|
59
64
|
viewer_role?: "owner" | "viewer" | undefined;
|
|
60
65
|
template_id?: string | null | undefined;
|
|
61
66
|
model?: string | null | undefined;
|
|
@@ -69,11 +74,13 @@ declare const SessionInfo: arktype_internal_variants_object_ts.ObjectType<{
|
|
|
69
74
|
is_pinned?: boolean | undefined;
|
|
70
75
|
pinned_at?: string | null | undefined;
|
|
71
76
|
is_example?: boolean | undefined;
|
|
77
|
+
ports?: unknown;
|
|
72
78
|
match?: unknown;
|
|
73
79
|
}, {}>;
|
|
74
|
-
type SessionInfo = Omit<typeof SessionInfo.infer, "template_id" | "solution" | "match"> & {
|
|
80
|
+
type SessionInfo = Omit<typeof SessionInfo.infer, "template_id" | "solution" | "ports" | "match"> & {
|
|
75
81
|
shared?: boolean;
|
|
76
82
|
memory_enabled?: boolean;
|
|
83
|
+
is_persistent?: boolean;
|
|
77
84
|
viewer_role?: "owner" | "viewer";
|
|
78
85
|
template_id?: TemplateId | null;
|
|
79
86
|
model?: string | null;
|
|
@@ -86,6 +93,7 @@ type SessionInfo = Omit<typeof SessionInfo.infer, "template_id" | "solution" | "
|
|
|
86
93
|
is_pinned?: boolean;
|
|
87
94
|
pinned_at?: string | null;
|
|
88
95
|
is_example?: boolean;
|
|
96
|
+
ports?: SessionPortMapping[];
|
|
89
97
|
/** 仅在带 q 搜索的列表响应中出现;普通列表里此字段缺省。 */
|
|
90
98
|
match?: SessionSearchMatch | null;
|
|
91
99
|
};
|