@undefineds.co/xpod 0.3.48 → 0.3.50
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/bin/xpod.js +0 -0
- package/dist/api/auth/MultiAuthenticator.js +2 -2
- package/dist/api/auth/MultiAuthenticator.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +16 -17
- package/dist/api/chatkit/pod-store.js +299 -231
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/schema.d.ts +1 -1
- package/dist/api/chatkit/service.js +13 -11
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/store.d.ts +1 -0
- package/dist/api/chatkit/store.js +23 -11
- package/dist/api/chatkit/store.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +17 -10
- package/dist/api/chatkit/types.js +97 -14
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/common.js +16 -2
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/routes.js +3 -0
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +3 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/ChatKitV1Handler.js +1 -2
- package/dist/api/handlers/ChatKitV1Handler.js.map +1 -1
- package/dist/api/handlers/CoordinationHandler.d.ts +6 -0
- package/dist/api/handlers/CoordinationHandler.js +115 -0
- package/dist/api/handlers/CoordinationHandler.js.map +1 -0
- package/dist/api/handlers/MatrixHandler.d.ts +11 -0
- package/dist/api/handlers/MatrixHandler.js +144 -2
- package/dist/api/handlers/MatrixHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +33 -15
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/handlers/index.d.ts +1 -0
- package/dist/api/handlers/index.js +1 -0
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.js +1 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/matrix/PodMatrixStore.d.ts +25 -1
- package/dist/api/matrix/PodMatrixStore.js +253 -41
- package/dist/api/matrix/PodMatrixStore.js.map +1 -1
- package/dist/api/matrix/index.d.ts +1 -1
- package/dist/api/matrix/index.js.map +1 -1
- package/dist/api/matrix/types.d.ts +25 -2
- package/dist/api/matrix/types.js.map +1 -1
- package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
- package/dist/api/middleware/AuthMiddleware.js +13 -1
- package/dist/api/middleware/AuthMiddleware.js.map +1 -1
- package/dist/api/protocol-metadata.d.ts +4 -0
- package/dist/api/protocol-metadata.js +64 -0
- package/dist/api/protocol-metadata.js.map +1 -0
- package/dist/api/reconciler/ClientReconcilerCoordinator.d.ts +42 -0
- package/dist/api/reconciler/ClientReconcilerCoordinator.js +250 -0
- package/dist/api/reconciler/ClientReconcilerCoordinator.js.map +1 -0
- package/dist/api/reconciler/ClientReconcilerCoordinator.jsonld +186 -0
- package/dist/api/reconciler/ServerGroupReconcilerService.d.ts +39 -0
- package/dist/api/reconciler/ServerGroupReconcilerService.js +91 -0
- package/dist/api/reconciler/ServerGroupReconcilerService.js.map +1 -0
- package/dist/api/reconciler/ServerGroupReconcilerService.jsonld +146 -0
- package/dist/api/reconciler/WakeAgentQueue.d.ts +23 -0
- package/dist/api/reconciler/WakeAgentQueue.js +123 -0
- package/dist/api/reconciler/WakeAgentQueue.js.map +1 -0
- package/dist/api/reconciler/WakeAgentQueue.jsonld +91 -0
- package/dist/api/reconciler/coordination.d.ts +61 -0
- package/dist/api/reconciler/coordination.js +109 -0
- package/dist/api/reconciler/coordination.js.map +1 -0
- package/dist/api/reconciler/coordination.jsonld +186 -0
- package/dist/api/reconciler/index.d.ts +4 -0
- package/dist/api/reconciler/index.js +21 -0
- package/dist/api/reconciler/index.js.map +1 -0
- package/dist/api/runs/ManagedRunWorker.js +0 -5
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +1 -1
- package/dist/api/runs/RunStateCenter.js +12 -28
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +12 -15
- package/dist/api/runs/store.js +24 -15
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/tasks/TaskMaterializer.d.ts +1 -0
- package/dist/api/tasks/TaskMaterializer.js +10 -13
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +0 -2
- package/dist/api/tasks/TaskService.js +6 -16
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +0 -2
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +1 -1
- package/dist/cli/commands/auth.js +4 -5
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/backup.js +1 -1
- package/dist/cli/commands/backup.js.map +1 -1
- package/dist/cli/commands/login.js +1 -1
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/pod.js +1 -1
- package/dist/cli/commands/pod.js.map +1 -1
- package/dist/cli/lib/auth-context.js +10 -7
- package/dist/cli/lib/auth-context.js.map +1 -1
- package/dist/cli/lib/auth-helper.d.ts +10 -6
- package/dist/cli/lib/auth-helper.js +10 -6
- package/dist/cli/lib/auth-helper.js.map +1 -1
- package/dist/cli/lib/credentials-store.d.ts +22 -4
- package/dist/cli/lib/credentials-store.js +68 -51
- package/dist/cli/lib/credentials-store.js.map +1 -1
- package/dist/cli/lib/oidc-auth.d.ts +4 -0
- package/dist/cli/lib/oidc-auth.js +90 -0
- package/dist/cli/lib/oidc-auth.js.map +1 -0
- package/dist/cli/lib/oidc-session-storage.d.ts +3 -0
- package/dist/cli/lib/oidc-session-storage.js +41 -0
- package/dist/cli/lib/oidc-session-storage.js.map +1 -0
- package/dist/components/components.jsonld +5 -1
- package/dist/components/context.jsonld +103 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.d.ts +1 -0
- package/dist/provision/LocalPodProvisioningService.js +9 -0
- package/dist/provision/LocalPodProvisioningService.js.map +1 -1
- package/dist/provision/LocalPodProvisioningService.jsonld +4 -0
- package/dist/runtime/Proxy.d.ts +1 -0
- package/dist/runtime/Proxy.js +8 -1
- package/dist/runtime/Proxy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +19 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +19 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/package.json +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunStateCenter.js","sourceRoot":"","sources":["../../../src/api/runs/RunStateCenter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatKitStore, StoreContext } from '../chatkit/store';\nimport type {\n AssistantMessageItem,\n ClientEffect,\n ClientToolCallItem,\n ThreadItem,\n ThreadMetadata,\n ThreadRef,\n UserMessageItem,\n} from '../chatkit/types';\nimport {\n DEFAULT_THREAD_CHAT_ID,\n extractAssistantMessageText,\n extractUserMessageText,\n generateId,\n toThreadRef,\n nowTimestamp,\n} from '../chatkit/types';\nimport type { AgentRuntimeConfig, RunnerProtocol, RunnerType } from './AgentRuntimeTypes';\nimport type { AgentRuntimeEvent } from './AgentRuntimeTypes';\nimport { InngestRunExecutionBackend } from './InngestRunExecutionBackend';\nimport type { RunExecutionBackend } from './RunExecutionBackend';\nimport { isWorkspaceRef } from '../workspace/types';\nimport { XpodRunStepType as RunStepType, RunStatus } from './schema';\nimport {\n generateRunResourceId,\n generateRunStepResourceId,\n resolveDataResource,\n resolveRunUrn,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from './store';\n\nexport type RunStateEvent =\n | { type: 'item_added'; item: ThreadItem }\n | { type: 'item_updated'; itemId: string; delta: string }\n | { type: 'item_done'; item: ThreadItem }\n | { type: 'client_effect'; effect: ClientEffect }\n | { type: 'error'; code: string; message: string };\n\nconst RUN_WAITING_STATUSES = new Set<string>([\n RunStatus.WAITING_INPUT,\n RunStatus.WAITING_RUNNER,\n]);\n\ntype ActiveAssistant = {\n item: AssistantMessageItem;\n fullText: string;\n};\n\ntype RuntimeProjectionResult =\n | { action: 'continue' }\n | { action: 'return' }\n | { action: 'error'; message: string };\n\nexport interface RunStateCenterOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext>;\n enableAgentRuntime?: boolean;\n executionBackend?: RunExecutionBackend;\n}\n\n/**\n * Run is the xpod-side state center for Agent execution.\n *\n * ChatKit and Task APIs are command surfaces. They hand execution to this\n * center, which persists first-class Run/RunStep facts through the configured\n * RunStore while projecting visible output back to Thread/Message.\n */\nexport class RunStateCenter<TContext = StoreContext> {\n private readonly store: ChatKitStore<TContext>;\n private readonly runStore?: RunStore<TContext>;\n private readonly enableAgentRuntime: boolean;\n private readonly executionBackend: RunExecutionBackend;\n\n public constructor(options: RunStateCenterOptions<TContext>) {\n this.store = options.store;\n this.runStore = this.resolveRunStore(options.store);\n this.enableAgentRuntime = options.enableAgentRuntime ?? false;\n this.executionBackend = options.executionBackend ?? new InngestRunExecutionBackend();\n }\n\n public getAgentRuntimeConfig(thread: ThreadMetadata, context?: TContext): AgentRuntimeConfig | null {\n if (!this.enableAgentRuntime) {\n return null;\n }\n const runtime = (thread.metadata as any)?.runtime;\n if (!runtime) {\n return null;\n }\n if (!runtime.runner) {\n throw new Error('Invalid thread.metadata.runtime: runner is required');\n }\n const runnerType = runtime.runner.type as RunnerType;\n if (!runnerType) {\n throw new Error('Invalid thread.metadata.runtime.runner.type');\n }\n\n const protocol = this.resolveRunnerProtocol(runtime.runner.protocol);\n const allowCustomArgv = runtime.runner.allowCustomArgv === true;\n const argv = allowCustomArgv ? runtime.runner.argv : undefined;\n const workspace = this.resolveWorkspaceRef(thread.workspace);\n if (!workspace) {\n throw new Error('Invalid thread runtime: workspace reference is required');\n }\n\n return {\n ...runtime,\n workspace,\n runner: {\n ...runtime.runner,\n argv,\n protocol,\n },\n agentConfig: runtime.agentConfig,\n } as AgentRuntimeConfig;\n }\n\n public getDefaultAgentRuntimeConfig(context: TContext): AgentRuntimeConfig | null {\n if (!this.enableAgentRuntime) {\n return null;\n }\n return null;\n }\n\n private resolveRunnerProtocol(protocol: unknown): RunnerProtocol {\n if (protocol === 'acp' || protocol === 'pi') {\n return protocol;\n }\n return 'pi';\n }\n\n private resolveWorkspaceRef(threadWorkspace: AgentRuntimeConfig['workspace'] | undefined): AgentRuntimeConfig['workspace'] | undefined {\n return isWorkspaceRef(threadWorkspace) ? threadWorkspace : undefined;\n }\n\n public async *startAgentRun(input: {\n thread: ThreadMetadata;\n userMessage: UserMessageItem;\n context: TContext;\n runtimeConfig: AgentRuntimeConfig;\n }): AsyncIterable<RunStateEvent> {\n const { thread, userMessage, context, runtimeConfig } = input;\n const prompt = extractUserMessageText(userMessage.content);\n if (!prompt.trim()) {\n return;\n }\n\n const threadRef = this.threadRefFromThread(thread);\n const assistantItem = await this.createAssistantMessage(thread, context);\n const run = await this.createRun({\n thread,\n userMessage,\n prompt,\n runtimeConfig,\n context,\n });\n\n await this.store.addThreadItem(threadRef, assistantItem, context);\n yield { type: 'item_added', item: assistantItem };\n await this.markRunStarted(run, context);\n\n const assistantState: ActiveAssistant = { item: assistantItem, fullText: '' };\n let runtimeError: string | undefined;\n\n for await (\n const event of this.executionBackend.start({\n runId: run.id,\n threadId: thread.id,\n prompt,\n conversation: await this.loadConversation(threadRef, userMessage.id, context),\n config: runtimeConfig,\n context: context as StoreContext,\n })\n ) {\n const cancellation = await this.checkCancellation(run, threadRef, assistantState, context);\n if (cancellation) {\n yield { type: 'item_done', item: cancellation };\n yield { type: 'error', code: 'runtime_cancelled', message: 'Run cancellation requested' };\n return;\n }\n\n const result = yield* this.projectRuntimeEvent(event, {\n run,\n thread,\n threadRef,\n assistant: assistantState,\n context,\n });\n if (result.action === 'continue') {\n continue;\n }\n if (result.action === 'return') {\n return;\n }\n\n runtimeError = result.message;\n break;\n }\n\n const finalStatus = runtimeError ? 'incomplete' : 'completed';\n const finalItem = this.finalizeAssistantMessage(assistantState.item, assistantState.fullText, finalStatus);\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(\n run,\n runtimeError ? RunStatus.FAILED : RunStatus.COMPLETED,\n context,\n runtimeError,\n );\n yield { type: 'item_done', item: finalItem };\n }\n\n public async *completeClientToolOutput(input: {\n threadRef: ThreadRef;\n itemId: string;\n output: string;\n context: TContext;\n }): AsyncIterable<RunStateEvent> {\n const { threadRef, itemId, output, context } = input;\n const item = await this.store.loadItem(threadRef, itemId, context);\n if (item.type !== 'client_tool_call') {\n return;\n }\n\n const updatedItem: ClientToolCallItem = {\n ...item,\n output,\n status: 'completed',\n };\n await this.store.saveItem(threadRef, updatedItem, context);\n yield { type: 'item_done', item: updatedItem };\n\n const run = await this.resolveWaitingRunForToolOutput(updatedItem, threadRef, context);\n if (!run) {\n return;\n }\n\n const now = nowTimestamp();\n await this.appendRunStep(run, RunStepType.CLIENT_TOOL_OUTPUT, context, {\n message: updatedItem.name,\n data: {\n itemId: updatedItem.id,\n callId: updatedItem.call_id,\n output,\n },\n });\n await this.appendRunStep(run, RunStepType.CONTINUE_REQUESTED, context, {\n message: 'Run continuation requested',\n data: {\n kind: 'client_tool_output',\n itemId: updatedItem.id,\n },\n });\n run.status = RunStatus.QUEUED;\n run.leaseOwner = undefined;\n run.leaseExpiresAt = undefined;\n run.completedAt = undefined;\n run.error = undefined;\n run.updatedAt = now;\n run.metadata = {\n ...(run.metadata ?? {}),\n continuation: {\n kind: 'client_tool_output',\n itemId: updatedItem.id,\n output,\n queuedAt: now,\n },\n };\n await this.saveRun(run, context);\n\n const thread = await this.store.loadThread(threadRef, context);\n const assistantItemId = typeof run.metadata?.assistantItemId === 'string' ? run.metadata.assistantItemId : undefined;\n const assistantItem = assistantItemId\n ? await this.store.loadItem(threadRef, assistantItemId, context) as AssistantMessageItem\n : await this.createAssistantMessage(thread, context);\n if (!assistantItemId) {\n await this.store.addThreadItem(threadRef, assistantItem, context);\n yield { type: 'item_added', item: assistantItem };\n }\n const assistantState: ActiveAssistant = {\n item: assistantItem,\n fullText: extractAssistantMessageText(assistantItem.content),\n };\n await this.markRunStarted(run, context);\n\n for await (\n const event of this.executionBackend.start({\n runId: run.id,\n threadId: this.extractThreadIdFromRef(threadRef),\n prompt: this.buildContinuationPrompt(updatedItem),\n conversation: await this.loadConversation(threadRef, String(run.metadata?.userMessageId ?? updatedItem.id), context),\n config: this.resolveRuntimeConfigForContinuation(run),\n continuation: {\n kind: 'client_tool_output',\n itemId: updatedItem.id,\n },\n context: context as StoreContext,\n })\n ) {\n const cancellation = await this.checkCancellation(run, threadRef, assistantState, context);\n if (cancellation) {\n yield { type: 'item_done', item: cancellation };\n yield { type: 'error', code: 'runtime_cancelled', message: 'Run cancellation requested' };\n return;\n }\n\n const result = yield* this.projectRuntimeEvent(event, {\n run,\n thread,\n threadRef,\n assistant: assistantState,\n context,\n });\n if (result.action === 'continue') {\n continue;\n }\n if (result.action === 'return') {\n return;\n }\n const finalItem = this.finalizeAssistantMessage(assistantState.item, assistantState.fullText, 'incomplete');\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(run, RunStatus.FAILED, context, result.message);\n yield { type: 'item_done', item: finalItem };\n return;\n }\n\n const finalItem = this.finalizeAssistantMessage(assistantState.item, assistantState.fullText, 'completed');\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(run, RunStatus.COMPLETED, context);\n yield { type: 'item_done', item: finalItem };\n }\n\n private resolveRunStore(store: ChatKitStore<TContext>): RunStore<TContext> | undefined {\n if (\n typeof store.saveRun === 'function'\n && typeof store.loadRun === 'function'\n && typeof store.listRuns === 'function'\n && typeof store.appendRunStep === 'function'\n && typeof store.loadRunSteps === 'function'\n ) {\n return store as RunStore<TContext>;\n }\n return undefined;\n }\n\n private async createRun(input: {\n thread: ThreadMetadata;\n userMessage: UserMessageItem;\n prompt: string;\n runtimeConfig: AgentRuntimeConfig;\n context: TContext;\n }): Promise<RunRecordData> {\n const { thread, userMessage, prompt, runtimeConfig, context } = input;\n const now = nowTimestamp();\n const commandKind = thread.metadata?.commandKind === 'task' ? 'task' : 'chat';\n const surfaceId = this.resolveSurfaceId(thread);\n const run: RunRecordData = {\n id: generateRunResourceId({\n key: generateId('run'),\n commandKind,\n surfaceId,\n createdAt: now,\n }),\n thread: this.resolveThreadResource(thread, context),\n workspace: runtimeConfig.workspace,\n commandKind,\n surfaceId,\n status: RunStatus.QUEUED,\n runner: `${runtimeConfig.runner.protocol ?? 'pi'}:${runtimeConfig.runner.type}`,\n prompt,\n metadata: {\n threadId: thread.id,\n userMessageId: userMessage.id,\n runtimeConfig,\n surfaceId,\n },\n createdAt: now,\n updatedAt: now,\n };\n await this.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.CREATED, context, {\n message: 'Run created',\n data: {\n commandKind: run.commandKind,\n thread: run.thread,\n workspace: run.workspace,\n runner: run.runner,\n },\n });\n return run;\n }\n\n private async markRunStarted(run: RunRecordData, context: TContext): Promise<void> {\n const now = nowTimestamp();\n run.status = RunStatus.RUNNING;\n run.startedAt = now;\n run.updatedAt = now;\n await this.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.STARTED, context, {\n message: 'Run started',\n });\n }\n\n private async finishRun(\n run: RunRecordData,\n status: RunRecordData['status'],\n context: TContext,\n error?: string,\n ): Promise<void> {\n const now = nowTimestamp();\n run.status = status;\n run.completedAt = now;\n run.updatedAt = now;\n run.error = error;\n await this.saveRun(run, context);\n await this.appendRunStep(\n run,\n this.stepTypeForTerminalStatus(status),\n context,\n {\n message: error ?? `Run ${status}`,\n data: { status },\n },\n );\n }\n\n private async pauseRun(\n run: RunRecordData,\n status: RunRecordData['status'],\n context: TContext,\n message: string,\n ): Promise<void> {\n const now = nowTimestamp();\n run.status = status;\n run.completedAt = undefined;\n run.heartbeatAt = now;\n run.leaseOwner = undefined;\n run.leaseExpiresAt = undefined;\n run.updatedAt = now;\n run.error = message;\n await this.saveRun(run, context);\n }\n\n private async *projectRuntimeEvent(\n event: AgentRuntimeEvent,\n input: {\n run: RunRecordData;\n thread: ThreadMetadata;\n threadRef: ThreadRef;\n assistant: ActiveAssistant;\n context: TContext;\n },\n ): AsyncGenerator<RunStateEvent, RuntimeProjectionResult> {\n const { run, thread, threadRef, assistant, context } = input;\n\n if (event.type === 'text') {\n assistant.fullText += event.text;\n await this.appendRunStep(run, RunStepType.TEXT_DELTA, context, {\n message: event.text,\n data: { delta: event.text },\n });\n yield { type: 'item_updated', itemId: assistant.item.id, delta: event.text };\n return { action: 'continue' };\n }\n\n if (event.type === 'auth_required') {\n await this.appendRunStep(run, RunStepType.AUTH_REQUIRED, context, {\n message: event.message,\n data: {\n method: event.method,\n url: event.url,\n options: event.options,\n },\n });\n yield {\n type: 'client_effect',\n effect: {\n effect_type: 'runtime.auth_required',\n data: {\n method: event.method,\n url: event.url,\n message: event.message,\n options: event.options,\n },\n },\n };\n return { action: 'continue' };\n }\n\n if (event.type === 'tool_call') {\n await this.appendRunStep(run, RunStepType.TOOL_CALL, context, {\n message: event.name,\n data: {\n requestId: event.requestId,\n name: event.name,\n arguments: event.arguments,\n },\n });\n const toolItem: ClientToolCallItem = {\n id: this.store.generateItemId('client_tool_call', thread, context),\n thread_id: thread.id,\n type: 'client_tool_call',\n name: event.name,\n arguments: event.arguments,\n call_id: event.requestId,\n status: 'pending',\n metadata: {\n runId: run.id,\n assistantItemId: assistant.item.id,\n },\n created_at: nowTimestamp(),\n };\n await this.store.addThreadItem(threadRef, toolItem, context);\n yield { type: 'item_added', item: toolItem };\n\n const incomplete = this.finalizeAssistantMessage(assistant.item, assistant.fullText, 'incomplete');\n assistant.item = incomplete;\n await this.store.saveItem(threadRef, incomplete, context);\n yield { type: 'item_done', item: incomplete };\n run.metadata = {\n ...(run.metadata ?? {}),\n assistantItemId: assistant.item.id,\n waitingTool: {\n itemId: toolItem.id,\n requestId: event.requestId,\n name: event.name,\n },\n };\n await this.pauseRun(run, RunStatus.WAITING_INPUT, context, `Waiting for client tool output: ${event.name}`);\n yield {\n type: 'error',\n code: 'runtime_waiting_input',\n message: `Run is waiting for client tool output: ${event.name}`,\n };\n return { action: 'return' };\n }\n\n if (event.type === 'waiting_runner') {\n await this.appendRunStep(run, RunStepType.WAITING_RUNNER, context, {\n message: event.message,\n data: {\n workspace: event.workspace,\n },\n });\n yield { type: 'error', code: 'waiting_runner', message: event.message };\n await this.finishRun(run, RunStatus.WAITING_RUNNER, context, event.message);\n return { action: 'return' };\n }\n\n await this.appendRunStep(run, RunStepType.ERROR, context, {\n message: event.message,\n });\n yield { type: 'error', code: 'runtime_error', message: event.message };\n return { action: 'error', message: event.message };\n }\n\n private async checkCancellation(\n run: RunRecordData,\n threadRef: ThreadRef,\n assistant: ActiveAssistant,\n context: TContext,\n ): Promise<AssistantMessageItem | undefined> {\n if (!this.runStore?.loadRun) {\n return undefined;\n }\n const latest = await this.runStore.loadRun(run.id, context);\n if (!latest.cancelRequestedAt) {\n return undefined;\n }\n run.cancelRequestedAt = latest.cancelRequestedAt;\n const finalItem = this.finalizeAssistantMessage(assistant.item, assistant.fullText, 'incomplete');\n assistant.item = finalItem;\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(run, RunStatus.CANCELLED, context, 'Run cancellation requested');\n return finalItem;\n }\n\n private stepTypeForTerminalStatus(status: RunRecordData['status']): RunStepRecordData['type'] {\n if (status === RunStatus.COMPLETED) {\n return RunStepType.COMPLETED;\n }\n if (status === RunStatus.CANCELLED) {\n return RunStepType.CANCELLED;\n }\n if (RUN_WAITING_STATUSES.has(status)) {\n return status === RunStatus.WAITING_RUNNER ? RunStepType.WAITING_RUNNER : RunStepType.WAITING_INPUT;\n }\n return RunStepType.FAILED;\n }\n\n private async saveRun(run: RunRecordData, context: TContext): Promise<void> {\n await this.runStore?.saveRun(run, context);\n }\n\n private async appendRunStep(\n run: RunRecordData,\n type: RunStepRecordData['type'],\n context: TContext,\n options: {\n message?: string;\n data?: Record<string, unknown>;\n } = {},\n ): Promise<void> {\n const createdAt = nowTimestamp();\n await this.runStore?.appendRunStep({\n id: generateRunStepResourceId({\n key: generateId('run-step'),\n runId: run.id,\n commandKind: run.commandKind,\n surfaceId: run.surfaceId,\n createdAt,\n }),\n commandKind: run.commandKind,\n surfaceId: run.surfaceId,\n runId: run.id,\n run: this.resolveRunResource(run, context),\n type,\n message: options.message,\n data: options.data,\n createdAt,\n }, context);\n }\n\n private resolveThreadResource(thread: ThreadMetadata, context: TContext): string {\n const threadId = thread.id;\n if (/^https?:\\/\\//.test(threadId)) {\n return threadId;\n }\n\n const commandKind = thread.metadata?.commandKind === 'task' ? 'task' : 'chat';\n const surfaceId = this.resolveSurfaceId(thread);\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n if (threadId.includes('#') && !threadId.startsWith('#')) {\n return resolveDataResource(podBaseUrl, threadId);\n }\n return `${podBaseUrl}/.data/${commandKind}/${surfaceId}/index.ttl#${threadId}`;\n }\n return `urn:xpod:thread:${commandKind}:${encodeURIComponent(surfaceId)}:${encodeURIComponent(threadId)}`;\n }\n\n private resolveRunResource(run: RunRecordData, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n return resolveDataResource(podBaseUrl, run.id);\n }\n return resolveRunUrn(run.id);\n }\n\n private async resolveWaitingRunForToolOutput(\n item: ClientToolCallItem,\n threadRef: ThreadRef,\n context: TContext,\n ): Promise<RunRecordData | undefined> {\n const metadataRunId = item.metadata?.runId;\n if (typeof metadataRunId === 'string' && this.runStore?.loadRun) {\n const run = await this.runStore.loadRun(metadataRunId, context);\n if (run.status === RunStatus.WAITING_INPUT) {\n return run;\n }\n }\n\n if (!this.runStore?.listRuns) {\n return undefined;\n }\n\n const threadCandidates = this.threadCandidatesForRunLookup(threadRef, context);\n for (const thread of threadCandidates) {\n const candidates = await this.runStore.listRuns({\n thread,\n status: RunStatus.WAITING_INPUT,\n limit: 10,\n }, context);\n const match = candidates.find((run) => {\n const tool = run.metadata?.waitingTool;\n return !tool || typeof tool !== 'object' || (tool as any).itemId === item.id;\n }) ?? candidates[0];\n if (match) {\n return match;\n }\n }\n return undefined;\n }\n\n private extractThreadIdFromRef(threadRef: ThreadRef): string {\n if ('chat_id' in threadRef) {\n return threadRef.thread_id;\n }\n return threadRef.thread_id;\n }\n\n private threadCandidatesForRunLookup(threadRef: ThreadRef, context: TContext): string[] {\n const candidates: string[] = [];\n const add = (value: string | undefined): void => {\n if (value && !candidates.includes(value)) {\n candidates.push(value);\n }\n };\n\n const threadId = this.extractThreadIdFromRef(threadRef);\n add(threadId);\n const relative = this.extractBaseRelativeThreadId(threadId);\n add(relative);\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl && relative) {\n add(resolveDataResource(podBaseUrl, relative));\n }\n return candidates;\n }\n\n private extractBaseRelativeThreadId(threadId: string): string | undefined {\n if (/^(chat|task)\\/[^/]+\\/index\\.ttl#[^#]+$/.test(threadId)) {\n return threadId;\n }\n if (!/^https?:\\/\\//.test(threadId)) {\n return undefined;\n }\n try {\n const url = new URL(threadId);\n const marker = '/.data/';\n const index = url.pathname.indexOf(marker);\n if (index >= 0 && url.hash) {\n return `${url.pathname.slice(index + marker.length)}${url.hash}`;\n }\n } catch {\n return undefined;\n }\n return undefined;\n }\n\n private buildContinuationPrompt(item: ClientToolCallItem): string {\n return `Continue the previous run after client tool output.\\n\\nTool: ${item.name}\\nOutput:\\n${item.output ?? ''}`;\n }\n\n private resolveRuntimeConfigForContinuation(run: RunRecordData): AgentRuntimeConfig {\n const runtimeConfig = run.metadata?.runtimeConfig;\n if (runtimeConfig && typeof runtimeConfig === 'object') {\n return runtimeConfig as AgentRuntimeConfig;\n }\n if (!isWorkspaceRef(run.workspace)) {\n throw new Error('Run workspace reference is required');\n }\n const [protocol, type] = run.runner.split(':');\n return {\n workspace: run.workspace,\n runner: {\n protocol: protocol === 'acp' ? 'acp' : 'pi',\n type: this.isRunnerType(type) ? type : 'pi',\n },\n };\n }\n\n private isRunnerType(value: unknown): value is RunnerType {\n return value === 'pi' || value === 'codex' || value === 'claude' || value === 'codebuddy';\n }\n\n private resolveSurfaceId(thread: ThreadMetadata): string {\n if (typeof thread.metadata?.surface_id === 'string') {\n return thread.metadata.surface_id;\n }\n if (typeof thread.metadata?.chat_id === 'string') {\n return thread.metadata.chat_id;\n }\n return DEFAULT_THREAD_CHAT_ID;\n }\n\n private resolvePodBaseUrl(context: TContext): string | undefined {\n const auth = (context as Record<string, unknown>).auth as { webId?: unknown } | undefined;\n const webId = typeof auth?.webId === 'string' ? auth.webId : undefined;\n if (!webId) {\n return undefined;\n }\n try {\n const url = new URL(webId);\n url.hash = '';\n url.search = '';\n const normalizedPath = url.pathname.replace(/\\/+$/, '');\n if (!normalizedPath.endsWith('/profile/card')) {\n return undefined;\n }\n const podPath = normalizedPath.slice(0, -'/profile/card'.length) || '/';\n url.pathname = podPath;\n return url.toString().replace(/\\/$/, '');\n } catch {\n return undefined;\n }\n }\n\n private async createAssistantMessage(\n thread: ThreadMetadata,\n context: TContext,\n ): Promise<AssistantMessageItem> {\n return {\n id: this.store.generateItemId('assistant_message', thread, context),\n thread_id: thread.id,\n type: 'assistant_message',\n content: [{ type: 'output_text', text: '' }],\n status: 'in_progress',\n created_at: nowTimestamp(),\n };\n }\n\n private finalizeAssistantMessage(\n item: AssistantMessageItem,\n text: string,\n status: 'completed' | 'incomplete',\n ): AssistantMessageItem {\n return {\n ...item,\n content: [{ type: 'output_text', text }],\n status,\n };\n }\n\n private threadRefFromThread(thread: ThreadMetadata): ThreadRef {\n return toThreadRef({\n thread_id: thread.id,\n chat_id: typeof thread.metadata?.chat_id === 'string' ? thread.metadata.chat_id : DEFAULT_THREAD_CHAT_ID,\n });\n }\n\n private async loadConversation(\n threadRef: ThreadRef,\n currentUserMessageId: string,\n context: TContext,\n ): Promise<Array<{ role: 'user' | 'assistant'; text: string; createdAt: number }>> {\n const items = await this.store.loadThreadItems(threadRef, undefined, 1000, 'asc', context);\n const conversation: Array<{ role: 'user' | 'assistant'; text: string; createdAt: number }> = [];\n\n for (const item of items.data) {\n if (item.id === currentUserMessageId) {\n break;\n }\n if (item.type === 'user_message') {\n const text = extractUserMessageText(item.content).trim();\n if (text) {\n conversation.push({ role: 'user', text, createdAt: item.created_at });\n }\n continue;\n }\n if (item.type === 'assistant_message' && item.status !== 'in_progress') {\n const text = extractAssistantMessageText(item.content).trim();\n if (text) {\n conversation.push({ role: 'assistant', text, createdAt: item.created_at });\n }\n }\n }\n\n return conversation;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RunStateCenter.js","sourceRoot":"","sources":["../../../src/api/runs/RunStateCenter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatKitStore, StoreContext } from '../chatkit/store';\nimport type {\n AssistantMessageItem,\n ClientEffect,\n ClientToolCallItem,\n ThreadItem,\n ThreadMetadata,\n ThreadRef,\n UserMessageItem,\n} from '../chatkit/types';\nimport {\n extractAssistantMessageText,\n extractUserMessageText,\n generateId,\n getThreadParent,\n toThreadRef,\n nowTimestamp,\n} from '../chatkit/types';\nimport type { AgentRuntimeConfig, RunnerProtocol, RunnerType } from './AgentRuntimeTypes';\nimport type { AgentRuntimeEvent } from './AgentRuntimeTypes';\nimport { InngestRunExecutionBackend } from './InngestRunExecutionBackend';\nimport type { RunExecutionBackend } from './RunExecutionBackend';\nimport { isWorkspaceRef } from '../workspace/types';\nimport { XpodRunStepType as RunStepType, RunStatus } from './schema';\nimport {\n generateRunResourceId,\n generateRunStepResourceId,\n resolveDataResource,\n resolveRunUrn,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from './store';\n\nexport type RunStateEvent =\n | { type: 'item_added'; item: ThreadItem }\n | { type: 'item_updated'; itemId: string; delta: string }\n | { type: 'item_done'; item: ThreadItem }\n | { type: 'client_effect'; effect: ClientEffect }\n | { type: 'error'; code: string; message: string };\n\nconst RUN_WAITING_STATUSES = new Set<string>([\n RunStatus.WAITING_INPUT,\n RunStatus.WAITING_RUNNER,\n]);\n\ntype ActiveAssistant = {\n item: AssistantMessageItem;\n fullText: string;\n};\n\ntype RuntimeProjectionResult =\n | { action: 'continue' }\n | { action: 'return' }\n | { action: 'error'; message: string };\n\nexport interface RunStateCenterOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext>;\n enableAgentRuntime?: boolean;\n executionBackend?: RunExecutionBackend;\n}\n\n/**\n * Run is the xpod-side state center for Agent execution.\n *\n * ChatKit and Task APIs are command surfaces. They hand execution to this\n * center, which persists first-class Run/RunStep facts through the configured\n * RunStore while projecting visible output back to Thread/Message.\n */\nexport class RunStateCenter<TContext = StoreContext> {\n private readonly store: ChatKitStore<TContext>;\n private readonly runStore?: RunStore<TContext>;\n private readonly enableAgentRuntime: boolean;\n private readonly executionBackend: RunExecutionBackend;\n\n public constructor(options: RunStateCenterOptions<TContext>) {\n this.store = options.store;\n this.runStore = this.resolveRunStore(options.store);\n this.enableAgentRuntime = options.enableAgentRuntime ?? false;\n this.executionBackend = options.executionBackend ?? new InngestRunExecutionBackend();\n }\n\n public getAgentRuntimeConfig(thread: ThreadMetadata, context?: TContext): AgentRuntimeConfig | null {\n if (!this.enableAgentRuntime) {\n return null;\n }\n const runtime = (thread.metadata as any)?.runtime;\n if (!runtime) {\n return null;\n }\n if (!runtime.runner) {\n throw new Error('Invalid thread.metadata.runtime: runner is required');\n }\n const runnerType = runtime.runner.type as RunnerType;\n if (!runnerType) {\n throw new Error('Invalid thread.metadata.runtime.runner.type');\n }\n\n const protocol = this.resolveRunnerProtocol(runtime.runner.protocol);\n const allowCustomArgv = runtime.runner.allowCustomArgv === true;\n const argv = allowCustomArgv ? runtime.runner.argv : undefined;\n const workspace = this.resolveWorkspaceRef(thread.workspace);\n if (!workspace) {\n throw new Error('Invalid thread runtime: workspace reference is required');\n }\n\n return {\n ...runtime,\n workspace,\n runner: {\n ...runtime.runner,\n argv,\n protocol,\n },\n agentConfig: runtime.agentConfig,\n } as AgentRuntimeConfig;\n }\n\n public getDefaultAgentRuntimeConfig(context: TContext): AgentRuntimeConfig | null {\n if (!this.enableAgentRuntime) {\n return null;\n }\n return null;\n }\n\n private resolveRunnerProtocol(protocol: unknown): RunnerProtocol {\n if (protocol === 'acp' || protocol === 'pi') {\n return protocol;\n }\n return 'pi';\n }\n\n private resolveWorkspaceRef(threadWorkspace: AgentRuntimeConfig['workspace'] | undefined): AgentRuntimeConfig['workspace'] | undefined {\n return isWorkspaceRef(threadWorkspace) ? threadWorkspace : undefined;\n }\n\n public async *startAgentRun(input: {\n thread: ThreadMetadata;\n userMessage: UserMessageItem;\n context: TContext;\n runtimeConfig: AgentRuntimeConfig;\n }): AsyncIterable<RunStateEvent> {\n const { thread, userMessage, context, runtimeConfig } = input;\n const prompt = extractUserMessageText(userMessage.content);\n if (!prompt.trim()) {\n return;\n }\n\n const threadRef = this.threadRefFromThread(thread);\n const assistantItem = await this.createAssistantMessage(thread, context);\n const run = await this.createRun({\n thread,\n userMessage,\n prompt,\n runtimeConfig,\n context,\n });\n\n await this.store.addThreadItem(threadRef, assistantItem, context);\n yield { type: 'item_added', item: assistantItem };\n await this.markRunStarted(run, context);\n\n const assistantState: ActiveAssistant = { item: assistantItem, fullText: '' };\n let runtimeError: string | undefined;\n\n for await (\n const event of this.executionBackend.start({\n runId: run.id,\n threadId: thread.id,\n prompt,\n conversation: await this.loadConversation(threadRef, userMessage.id, context),\n config: runtimeConfig,\n context: context as StoreContext,\n })\n ) {\n const cancellation = await this.checkCancellation(run, threadRef, assistantState, context);\n if (cancellation) {\n yield { type: 'item_done', item: cancellation };\n yield { type: 'error', code: 'runtime_cancelled', message: 'Run cancellation requested' };\n return;\n }\n\n const result = yield* this.projectRuntimeEvent(event, {\n run,\n thread,\n threadRef,\n assistant: assistantState,\n context,\n });\n if (result.action === 'continue') {\n continue;\n }\n if (result.action === 'return') {\n return;\n }\n\n runtimeError = result.message;\n break;\n }\n\n const finalStatus = runtimeError ? 'incomplete' : 'completed';\n const finalItem = this.finalizeAssistantMessage(assistantState.item, assistantState.fullText, finalStatus);\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(\n run,\n runtimeError ? RunStatus.FAILED : RunStatus.COMPLETED,\n context,\n runtimeError,\n );\n yield { type: 'item_done', item: finalItem };\n }\n\n public async *completeClientToolOutput(input: {\n threadRef: ThreadRef;\n itemId: string;\n output: string;\n context: TContext;\n }): AsyncIterable<RunStateEvent> {\n const { threadRef, itemId, output, context } = input;\n const item = await this.store.loadItem(threadRef, itemId, context);\n if (item.type !== 'client_tool_call') {\n return;\n }\n\n const updatedItem: ClientToolCallItem = {\n ...item,\n output,\n status: 'completed',\n };\n await this.store.saveItem(threadRef, updatedItem, context);\n yield { type: 'item_done', item: updatedItem };\n\n const run = await this.resolveWaitingRunForToolOutput(updatedItem, threadRef, context);\n if (!run) {\n return;\n }\n\n const now = nowTimestamp();\n await this.appendRunStep(run, RunStepType.CLIENT_TOOL_OUTPUT, context, {\n message: updatedItem.name,\n data: {\n itemId: updatedItem.id,\n callId: updatedItem.call_id,\n output,\n },\n });\n await this.appendRunStep(run, RunStepType.CONTINUE_REQUESTED, context, {\n message: 'Run continuation requested',\n data: {\n kind: 'client_tool_output',\n itemId: updatedItem.id,\n },\n });\n run.status = RunStatus.QUEUED;\n run.leaseOwner = undefined;\n run.leaseExpiresAt = undefined;\n run.completedAt = undefined;\n run.error = undefined;\n run.updatedAt = now;\n run.metadata = {\n ...(run.metadata ?? {}),\n continuation: {\n kind: 'client_tool_output',\n itemId: updatedItem.id,\n output,\n queuedAt: now,\n },\n };\n await this.saveRun(run, context);\n\n const thread = await this.store.loadThread(threadRef, context);\n const assistantItemId = typeof run.metadata?.assistantItemId === 'string' ? run.metadata.assistantItemId : undefined;\n const assistantItem = assistantItemId\n ? await this.store.loadItem(threadRef, assistantItemId, context) as AssistantMessageItem\n : await this.createAssistantMessage(thread, context);\n if (!assistantItemId) {\n await this.store.addThreadItem(threadRef, assistantItem, context);\n yield { type: 'item_added', item: assistantItem };\n }\n const assistantState: ActiveAssistant = {\n item: assistantItem,\n fullText: extractAssistantMessageText(assistantItem.content),\n };\n await this.markRunStarted(run, context);\n\n for await (\n const event of this.executionBackend.start({\n runId: run.id,\n threadId: this.extractThreadIdFromRef(threadRef),\n prompt: this.buildContinuationPrompt(updatedItem),\n conversation: await this.loadConversation(threadRef, String(run.metadata?.userMessageId ?? updatedItem.id), context),\n config: this.resolveRuntimeConfigForContinuation(run),\n continuation: {\n kind: 'client_tool_output',\n itemId: updatedItem.id,\n },\n context: context as StoreContext,\n })\n ) {\n const cancellation = await this.checkCancellation(run, threadRef, assistantState, context);\n if (cancellation) {\n yield { type: 'item_done', item: cancellation };\n yield { type: 'error', code: 'runtime_cancelled', message: 'Run cancellation requested' };\n return;\n }\n\n const result = yield* this.projectRuntimeEvent(event, {\n run,\n thread,\n threadRef,\n assistant: assistantState,\n context,\n });\n if (result.action === 'continue') {\n continue;\n }\n if (result.action === 'return') {\n return;\n }\n const finalItem = this.finalizeAssistantMessage(assistantState.item, assistantState.fullText, 'incomplete');\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(run, RunStatus.FAILED, context, result.message);\n yield { type: 'item_done', item: finalItem };\n return;\n }\n\n const finalItem = this.finalizeAssistantMessage(assistantState.item, assistantState.fullText, 'completed');\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(run, RunStatus.COMPLETED, context);\n yield { type: 'item_done', item: finalItem };\n }\n\n private resolveRunStore(store: ChatKitStore<TContext>): RunStore<TContext> | undefined {\n if (\n typeof store.saveRun === 'function'\n && typeof store.loadRun === 'function'\n && typeof store.listRuns === 'function'\n && typeof store.appendRunStep === 'function'\n && typeof store.loadRunSteps === 'function'\n ) {\n return store as RunStore<TContext>;\n }\n return undefined;\n }\n\n private async createRun(input: {\n thread: ThreadMetadata;\n userMessage: UserMessageItem;\n prompt: string;\n runtimeConfig: AgentRuntimeConfig;\n context: TContext;\n }): Promise<RunRecordData> {\n const { thread, userMessage, prompt, runtimeConfig, context } = input;\n const now = nowTimestamp();\n const parent = this.resolveThreadStorageParent(thread);\n const run: RunRecordData = {\n id: generateRunResourceId({\n key: generateId('run'),\n parentKind: parent.parentKind,\n parentKey: parent.parentKey,\n createdAt: now,\n }),\n thread: this.resolveThreadResource(thread, context),\n workspace: runtimeConfig.workspace,\n status: RunStatus.QUEUED,\n runner: `${runtimeConfig.runner.protocol ?? 'pi'}:${runtimeConfig.runner.type}`,\n prompt,\n metadata: {\n threadId: thread.id,\n userMessageId: userMessage.id,\n runtimeConfig,\n },\n createdAt: now,\n updatedAt: now,\n };\n await this.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.CREATED, context, {\n message: 'Run created',\n data: {\n thread: run.thread,\n workspace: run.workspace,\n runner: run.runner,\n },\n });\n return run;\n }\n\n private async markRunStarted(run: RunRecordData, context: TContext): Promise<void> {\n const now = nowTimestamp();\n run.status = RunStatus.RUNNING;\n run.startedAt = now;\n run.updatedAt = now;\n await this.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.STARTED, context, {\n message: 'Run started',\n });\n }\n\n private async finishRun(\n run: RunRecordData,\n status: RunRecordData['status'],\n context: TContext,\n error?: string,\n ): Promise<void> {\n const now = nowTimestamp();\n run.status = status;\n run.completedAt = now;\n run.updatedAt = now;\n run.error = error;\n await this.saveRun(run, context);\n await this.appendRunStep(\n run,\n this.stepTypeForTerminalStatus(status),\n context,\n {\n message: error ?? `Run ${status}`,\n data: { status },\n },\n );\n }\n\n private async pauseRun(\n run: RunRecordData,\n status: RunRecordData['status'],\n context: TContext,\n message: string,\n ): Promise<void> {\n const now = nowTimestamp();\n run.status = status;\n run.completedAt = undefined;\n run.heartbeatAt = now;\n run.leaseOwner = undefined;\n run.leaseExpiresAt = undefined;\n run.updatedAt = now;\n run.error = message;\n await this.saveRun(run, context);\n }\n\n private async *projectRuntimeEvent(\n event: AgentRuntimeEvent,\n input: {\n run: RunRecordData;\n thread: ThreadMetadata;\n threadRef: ThreadRef;\n assistant: ActiveAssistant;\n context: TContext;\n },\n ): AsyncGenerator<RunStateEvent, RuntimeProjectionResult> {\n const { run, thread, threadRef, assistant, context } = input;\n\n if (event.type === 'text') {\n assistant.fullText += event.text;\n await this.appendRunStep(run, RunStepType.TEXT_DELTA, context, {\n message: event.text,\n data: { delta: event.text },\n });\n yield { type: 'item_updated', itemId: assistant.item.id, delta: event.text };\n return { action: 'continue' };\n }\n\n if (event.type === 'auth_required') {\n await this.appendRunStep(run, RunStepType.AUTH_REQUIRED, context, {\n message: event.message,\n data: {\n method: event.method,\n url: event.url,\n options: event.options,\n },\n });\n yield {\n type: 'client_effect',\n effect: {\n effect_type: 'runtime.auth_required',\n data: {\n method: event.method,\n url: event.url,\n message: event.message,\n options: event.options,\n },\n },\n };\n return { action: 'continue' };\n }\n\n if (event.type === 'tool_call') {\n await this.appendRunStep(run, RunStepType.TOOL_CALL, context, {\n message: event.name,\n data: {\n requestId: event.requestId,\n name: event.name,\n arguments: event.arguments,\n },\n });\n const toolItem: ClientToolCallItem = {\n id: this.store.generateItemId('client_tool_call', thread, context),\n thread_id: thread.id,\n type: 'client_tool_call',\n name: event.name,\n arguments: event.arguments,\n call_id: event.requestId,\n status: 'pending',\n metadata: {\n runId: run.id,\n assistantItemId: assistant.item.id,\n },\n created_at: nowTimestamp(),\n };\n await this.store.addThreadItem(threadRef, toolItem, context);\n yield { type: 'item_added', item: toolItem };\n\n const incomplete = this.finalizeAssistantMessage(assistant.item, assistant.fullText, 'incomplete');\n assistant.item = incomplete;\n await this.store.saveItem(threadRef, incomplete, context);\n yield { type: 'item_done', item: incomplete };\n run.metadata = {\n ...(run.metadata ?? {}),\n assistantItemId: assistant.item.id,\n waitingTool: {\n itemId: toolItem.id,\n requestId: event.requestId,\n name: event.name,\n },\n };\n await this.pauseRun(run, RunStatus.WAITING_INPUT, context, `Waiting for client tool output: ${event.name}`);\n yield {\n type: 'error',\n code: 'runtime_waiting_input',\n message: `Run is waiting for client tool output: ${event.name}`,\n };\n return { action: 'return' };\n }\n\n if (event.type === 'waiting_runner') {\n await this.appendRunStep(run, RunStepType.WAITING_RUNNER, context, {\n message: event.message,\n data: {\n workspace: event.workspace,\n },\n });\n yield { type: 'error', code: 'waiting_runner', message: event.message };\n await this.finishRun(run, RunStatus.WAITING_RUNNER, context, event.message);\n return { action: 'return' };\n }\n\n await this.appendRunStep(run, RunStepType.ERROR, context, {\n message: event.message,\n });\n yield { type: 'error', code: 'runtime_error', message: event.message };\n return { action: 'error', message: event.message };\n }\n\n private async checkCancellation(\n run: RunRecordData,\n threadRef: ThreadRef,\n assistant: ActiveAssistant,\n context: TContext,\n ): Promise<AssistantMessageItem | undefined> {\n if (!this.runStore?.loadRun) {\n return undefined;\n }\n const latest = await this.runStore.loadRun(run.id, context);\n if (!latest.cancelRequestedAt) {\n return undefined;\n }\n run.cancelRequestedAt = latest.cancelRequestedAt;\n const finalItem = this.finalizeAssistantMessage(assistant.item, assistant.fullText, 'incomplete');\n assistant.item = finalItem;\n await this.store.saveItem(threadRef, finalItem, context);\n await this.finishRun(run, RunStatus.CANCELLED, context, 'Run cancellation requested');\n return finalItem;\n }\n\n private stepTypeForTerminalStatus(status: RunRecordData['status']): RunStepRecordData['type'] {\n if (status === RunStatus.COMPLETED) {\n return RunStepType.COMPLETED;\n }\n if (status === RunStatus.CANCELLED) {\n return RunStepType.CANCELLED;\n }\n if (RUN_WAITING_STATUSES.has(status)) {\n return status === RunStatus.WAITING_RUNNER ? RunStepType.WAITING_RUNNER : RunStepType.WAITING_INPUT;\n }\n return RunStepType.FAILED;\n }\n\n private async saveRun(run: RunRecordData, context: TContext): Promise<void> {\n await this.runStore?.saveRun(run, context);\n }\n\n private async appendRunStep(\n run: RunRecordData,\n type: RunStepRecordData['type'],\n context: TContext,\n options: {\n message?: string;\n data?: Record<string, unknown>;\n } = {},\n ): Promise<void> {\n const createdAt = nowTimestamp();\n await this.runStore?.appendRunStep({\n id: generateRunStepResourceId({\n key: generateId('run-step'),\n runId: run.id,\n createdAt,\n }),\n runId: run.id,\n run: this.resolveRunResource(run, context),\n type,\n message: options.message,\n data: options.data,\n createdAt,\n }, context);\n }\n\n private resolveThreadResource(thread: ThreadMetadata, context: TContext): string {\n const threadId = thread.id;\n if (/^https?:\\/\\//.test(threadId)) {\n return threadId;\n }\n\n const parent = this.resolveThreadStorageParent(thread);\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n if (threadId.includes('#') && !threadId.startsWith('#')) {\n return resolveDataResource(podBaseUrl, threadId);\n }\n return `${podBaseUrl}/.data/${parent.parentKind}/${parent.parentKey}/index.ttl#${threadId}`;\n }\n return `urn:xpod:thread:${parent.parentKind}:${encodeURIComponent(parent.parentKey)}:${encodeURIComponent(threadId)}`;\n }\n\n private resolveRunResource(run: RunRecordData, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n return resolveDataResource(podBaseUrl, run.id);\n }\n return resolveRunUrn(run.id);\n }\n\n private async resolveWaitingRunForToolOutput(\n item: ClientToolCallItem,\n threadRef: ThreadRef,\n context: TContext,\n ): Promise<RunRecordData | undefined> {\n const metadataRunId = item.metadata?.runId;\n if (typeof metadataRunId === 'string' && this.runStore?.loadRun) {\n const run = await this.runStore.loadRun(metadataRunId, context);\n if (run.status === RunStatus.WAITING_INPUT) {\n return run;\n }\n }\n\n if (!this.runStore?.listRuns) {\n return undefined;\n }\n\n const threadCandidates = this.threadCandidatesForRunLookup(threadRef, context);\n for (const thread of threadCandidates) {\n const candidates = await this.runStore.listRuns({\n thread,\n status: RunStatus.WAITING_INPUT,\n limit: 10,\n }, context);\n const match = candidates.find((run) => {\n const tool = run.metadata?.waitingTool;\n return !tool || typeof tool !== 'object' || (tool as any).itemId === item.id;\n }) ?? candidates[0];\n if (match) {\n return match;\n }\n }\n return undefined;\n }\n\n private extractThreadIdFromRef(threadRef: ThreadRef): string {\n return threadRef.thread_id;\n }\n\n private threadCandidatesForRunLookup(threadRef: ThreadRef, context: TContext): string[] {\n const candidates: string[] = [];\n const add = (value: string | undefined): void => {\n if (value && !candidates.includes(value)) {\n candidates.push(value);\n }\n };\n\n const threadId = this.extractThreadIdFromRef(threadRef);\n add(threadId);\n const relative = this.extractBaseRelativeThreadId(threadId);\n add(relative);\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl && relative) {\n add(resolveDataResource(podBaseUrl, relative));\n }\n return candidates;\n }\n\n private extractBaseRelativeThreadId(threadId: string): string | undefined {\n if (/^(chat|task)\\/[^/]+\\/index\\.ttl#[^#]+$/.test(threadId)) {\n return threadId;\n }\n if (!/^https?:\\/\\//.test(threadId)) {\n return undefined;\n }\n try {\n const url = new URL(threadId);\n const marker = '/.data/';\n const index = url.pathname.indexOf(marker);\n if (index >= 0 && url.hash) {\n return `${url.pathname.slice(index + marker.length)}${url.hash}`;\n }\n } catch {\n return undefined;\n }\n return undefined;\n }\n\n private buildContinuationPrompt(item: ClientToolCallItem): string {\n return `Continue the previous run after client tool output.\\n\\nTool: ${item.name}\\nOutput:\\n${item.output ?? ''}`;\n }\n\n private resolveRuntimeConfigForContinuation(run: RunRecordData): AgentRuntimeConfig {\n const runtimeConfig = run.metadata?.runtimeConfig;\n if (runtimeConfig && typeof runtimeConfig === 'object') {\n return runtimeConfig as AgentRuntimeConfig;\n }\n if (!isWorkspaceRef(run.workspace)) {\n throw new Error('Run workspace reference is required');\n }\n const [protocol, type] = run.runner.split(':');\n return {\n workspace: run.workspace,\n runner: {\n protocol: protocol === 'acp' ? 'acp' : 'pi',\n type: this.isRunnerType(type) ? type : 'pi',\n },\n };\n }\n\n private isRunnerType(value: unknown): value is RunnerType {\n return value === 'pi' || value === 'codex' || value === 'claude' || value === 'codebuddy';\n }\n\n private resolveThreadStorageParent(thread: ThreadMetadata): { parentKind: 'chat' | 'task'; parentKey: string } {\n const parent = getThreadParent(thread);\n return {\n parentKind: parent?.kind ?? 'chat',\n parentKey: parent?.key ?? 'default',\n };\n }\n\n private resolvePodBaseUrl(context: TContext): string | undefined {\n const auth = (context as Record<string, unknown>).auth as { webId?: unknown } | undefined;\n const webId = typeof auth?.webId === 'string' ? auth.webId : undefined;\n if (!webId) {\n return undefined;\n }\n try {\n const url = new URL(webId);\n url.hash = '';\n url.search = '';\n const normalizedPath = url.pathname.replace(/\\/+$/, '');\n if (!normalizedPath.endsWith('/profile/card')) {\n return undefined;\n }\n const podPath = normalizedPath.slice(0, -'/profile/card'.length) || '/';\n url.pathname = podPath;\n return url.toString().replace(/\\/$/, '');\n } catch {\n return undefined;\n }\n }\n\n private async createAssistantMessage(\n thread: ThreadMetadata,\n context: TContext,\n ): Promise<AssistantMessageItem> {\n return {\n id: this.store.generateItemId('assistant_message', thread, context),\n thread_id: thread.id,\n type: 'assistant_message',\n content: [{ type: 'output_text', text: '' }],\n status: 'in_progress',\n created_at: nowTimestamp(),\n };\n }\n\n private finalizeAssistantMessage(\n item: AssistantMessageItem,\n text: string,\n status: 'completed' | 'incomplete',\n ): AssistantMessageItem {\n return {\n ...item,\n content: [{ type: 'output_text', text }],\n status,\n };\n }\n\n private threadRefFromThread(thread: ThreadMetadata): ThreadRef {\n return toThreadRef({\n thread_id: thread.id,\n });\n }\n\n private async loadConversation(\n threadRef: ThreadRef,\n currentUserMessageId: string,\n context: TContext,\n ): Promise<Array<{ role: 'user' | 'assistant'; text: string; createdAt: number }>> {\n const items = await this.store.loadThreadItems(threadRef, undefined, 1000, 'asc', context);\n const conversation: Array<{ role: 'user' | 'assistant'; text: string; createdAt: number }> = [];\n\n for (const item of items.data) {\n if (item.id === currentUserMessageId) {\n break;\n }\n if (item.type === 'user_message') {\n const text = extractUserMessageText(item.content).trim();\n if (text) {\n conversation.push({ role: 'user', text, createdAt: item.created_at });\n }\n continue;\n }\n if (item.type === 'assistant_message' && item.status !== 'in_progress') {\n const text = extractAssistantMessageText(item.content).trim();\n if (text) {\n conversation.push({ role: 'assistant', text, createdAt: item.created_at });\n }\n }\n }\n\n return conversation;\n }\n}\n"]}
|
package/dist/api/runs/store.d.ts
CHANGED
|
@@ -3,8 +3,6 @@ import type { RunStatusType, RunStepTypeValue } from './schema';
|
|
|
3
3
|
export interface RunRecordData {
|
|
4
4
|
/** Base-relative Solid resource id, e.g. `chat/default/2026/05/18/runs.ttl#run_x`. */
|
|
5
5
|
id: string;
|
|
6
|
-
commandKind: 'chat' | 'task';
|
|
7
|
-
surfaceId: string;
|
|
8
6
|
task?: string;
|
|
9
7
|
thread: string;
|
|
10
8
|
workspace: WorkspaceRef;
|
|
@@ -26,8 +24,6 @@ export interface RunRecordData {
|
|
|
26
24
|
export interface RunStepRecordData {
|
|
27
25
|
/** Base-relative Solid resource id, e.g. `chat/default/2026/05/18/runs.ttl#step_x`. */
|
|
28
26
|
id: string;
|
|
29
|
-
commandKind: 'chat' | 'task';
|
|
30
|
-
surfaceId: string;
|
|
31
27
|
/** Denormalized Run resource id for lookup; semantic relation is `run`. */
|
|
32
28
|
runId: string;
|
|
33
29
|
run: string;
|
|
@@ -40,10 +36,14 @@ export interface RunListOptions {
|
|
|
40
36
|
task?: string;
|
|
41
37
|
thread?: string;
|
|
42
38
|
workspace?: WorkspaceRef;
|
|
43
|
-
commandKind?: 'chat' | 'task';
|
|
44
39
|
status?: RunStatusType;
|
|
45
40
|
limit?: number;
|
|
46
41
|
}
|
|
42
|
+
export type RunCommandKind = 'chat' | 'task';
|
|
43
|
+
export interface RunCommandProjection {
|
|
44
|
+
commandKind: RunCommandKind;
|
|
45
|
+
surfaceId: string;
|
|
46
|
+
}
|
|
47
47
|
export interface RunStore<TContext> {
|
|
48
48
|
saveRun(run: RunRecordData, context: TContext): Promise<void>;
|
|
49
49
|
loadRun(id: string, context: TContext): Promise<RunRecordData>;
|
|
@@ -65,6 +65,7 @@ export declare function canClaimRun(run: Pick<RunRecordData, 'status' | 'leaseOw
|
|
|
65
65
|
}): boolean;
|
|
66
66
|
export declare function isBaseRelativeResourceId(value: string | null | undefined): value is string;
|
|
67
67
|
export declare function isRunResourceId(value: string | null | undefined): value is string;
|
|
68
|
+
export declare function deriveRunCommandProjection(runId: string | null | undefined): RunCommandProjection | undefined;
|
|
68
69
|
/**
|
|
69
70
|
* Extracts the local template fragment for display or protocol compatibility.
|
|
70
71
|
* Do not use this to turn a canonical resource id back into the durable `id`.
|
|
@@ -77,28 +78,24 @@ export declare function datePathFromTimestamp(timestamp: number | undefined): {
|
|
|
77
78
|
};
|
|
78
79
|
export declare function generateRunResourceId(input: {
|
|
79
80
|
key: string;
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
parentKind: RunCommandKind;
|
|
82
|
+
parentKey: string;
|
|
82
83
|
createdAt?: number;
|
|
83
84
|
}): string;
|
|
84
85
|
export declare function generateRunStepResourceId(input: {
|
|
85
86
|
key: string;
|
|
86
87
|
runId?: string;
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
parentKind?: RunCommandKind;
|
|
89
|
+
parentKey?: string;
|
|
89
90
|
createdAt?: number;
|
|
90
91
|
}): string;
|
|
91
|
-
export declare function buildRunResourceId(input: {
|
|
92
|
+
export declare function buildRunResourceId(input: string | {
|
|
92
93
|
id: string;
|
|
93
|
-
commandKind: 'chat' | 'task';
|
|
94
|
-
surfaceId: string;
|
|
95
94
|
createdAt?: number;
|
|
96
95
|
}): string;
|
|
97
|
-
export declare function buildRunStepResourceId(input: {
|
|
96
|
+
export declare function buildRunStepResourceId(input: string | {
|
|
98
97
|
id: string;
|
|
99
98
|
runId?: string;
|
|
100
|
-
commandKind: 'chat' | 'task';
|
|
101
|
-
surfaceId: string;
|
|
102
99
|
createdAt?: number;
|
|
103
100
|
}): string;
|
|
104
101
|
export declare function resolveRunUrn(runId: string): string;
|
package/dist/api/runs/store.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.hasActiveRunLease = hasActiveRunLease;
|
|
|
5
5
|
exports.canClaimRun = canClaimRun;
|
|
6
6
|
exports.isBaseRelativeResourceId = isBaseRelativeResourceId;
|
|
7
7
|
exports.isRunResourceId = isRunResourceId;
|
|
8
|
+
exports.deriveRunCommandProjection = deriveRunCommandProjection;
|
|
8
9
|
exports.extractResourceLocalId = extractResourceLocalId;
|
|
9
10
|
exports.datePathFromTimestamp = datePathFromTimestamp;
|
|
10
11
|
exports.generateRunResourceId = generateRunResourceId;
|
|
@@ -35,6 +36,16 @@ function isRunResourceId(value) {
|
|
|
35
36
|
return isBaseRelativeResourceId(value)
|
|
36
37
|
&& /^(chat|task)\/[^/]+\/\d{4}\/\d{2}\/\d{2}\/runs\.ttl#[^#/]+$/.test(value);
|
|
37
38
|
}
|
|
39
|
+
function deriveRunCommandProjection(runId) {
|
|
40
|
+
const match = runId?.match(/^(chat|task)\/([^/]+)\/\d{4}\/\d{2}\/\d{2}\/runs\.ttl#[^#/]+$/);
|
|
41
|
+
if (!match) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
commandKind: match[1],
|
|
46
|
+
surfaceId: decodeURIComponent(match[2]),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
38
49
|
function assertLocalKey(value, label) {
|
|
39
50
|
if (value.includes('/') || value.includes('#') || /\.(ttl|jsonld|json)(?:#|$)/i.test(value)) {
|
|
40
51
|
throw new Error(`${label} requires a local key: ${value}`);
|
|
@@ -68,7 +79,7 @@ function generateRunResourceId(input) {
|
|
|
68
79
|
}
|
|
69
80
|
assertLocalKey(input.key, 'Run id generator');
|
|
70
81
|
const { yyyy, MM, dd } = datePathFromTimestamp(input.createdAt);
|
|
71
|
-
return `${input.
|
|
82
|
+
return `${input.parentKind}/${input.parentKey}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;
|
|
72
83
|
}
|
|
73
84
|
function generateRunStepResourceId(input) {
|
|
74
85
|
if (isBaseRelativeResourceId(input.key)) {
|
|
@@ -79,27 +90,25 @@ function generateRunStepResourceId(input) {
|
|
|
79
90
|
const runDoc = input.runId.slice(0, input.runId.lastIndexOf('#'));
|
|
80
91
|
return `${runDoc}#${input.key}`;
|
|
81
92
|
}
|
|
93
|
+
if (!input.parentKind || !input.parentKey) {
|
|
94
|
+
throw new Error('RunStep id generator requires runId or parentKind/parentKey');
|
|
95
|
+
}
|
|
82
96
|
const { yyyy, MM, dd } = datePathFromTimestamp(input.createdAt);
|
|
83
|
-
return `${input.
|
|
97
|
+
return `${input.parentKind}/${input.parentKey}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;
|
|
84
98
|
}
|
|
85
99
|
function buildRunResourceId(input) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (!isRunResourceId(input.id)) {
|
|
90
|
-
throw new Error(`Run id must be a complete Run resource id: ${input.id}`);
|
|
100
|
+
const id = typeof input === 'string' ? input : input.id;
|
|
101
|
+
if (!isRunResourceId(id)) {
|
|
102
|
+
throw new Error(`Run id must be a complete Run resource id: ${id}`);
|
|
91
103
|
}
|
|
92
|
-
return
|
|
104
|
+
return id;
|
|
93
105
|
}
|
|
94
106
|
function buildRunStepResourceId(input) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
void input.createdAt;
|
|
99
|
-
if (!isRunResourceId(input.id)) {
|
|
100
|
-
throw new Error(`RunStep id must be a complete RunStep resource id: ${input.id}`);
|
|
107
|
+
const id = typeof input === 'string' ? input : input.id;
|
|
108
|
+
if (!isRunResourceId(id)) {
|
|
109
|
+
throw new Error(`RunStep id must be a complete RunStep resource id: ${id}`);
|
|
101
110
|
}
|
|
102
|
-
return
|
|
111
|
+
return id;
|
|
103
112
|
}
|
|
104
113
|
function resolveRunUrn(runId) {
|
|
105
114
|
return `urn:xpod:run:${encodeURIComponent(runId)}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/runs/store.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WorkspaceRef } from '../workspace/types';\nimport type { RunStatusType, RunStepTypeValue } from './schema';\n\nexport interface RunRecordData {\n /** Base-relative Solid resource id, e.g. `chat/default/2026/05/18/runs.ttl#run_x`. */\n id: string;\n commandKind: 'chat' | 'task';\n surfaceId: string;\n task?: string;\n thread: string;\n workspace: WorkspaceRef;\n status: RunStatusType;\n runner: string;\n prompt?: string;\n externalRunId?: string;\n leaseOwner?: string;\n leaseExpiresAt?: number;\n heartbeatAt?: number;\n cancelRequestedAt?: number;\n error?: string;\n metadata?: Record<string, unknown>;\n createdAt: number;\n startedAt?: number;\n completedAt?: number;\n updatedAt: number;\n}\n\nexport interface RunStepRecordData {\n /** Base-relative Solid resource id, e.g. `chat/default/2026/05/18/runs.ttl#step_x`. */\n id: string;\n commandKind: 'chat' | 'task';\n surfaceId: string;\n /** Denormalized Run resource id for lookup; semantic relation is `run`. */\n runId: string;\n run: string;\n type: RunStepTypeValue | string;\n message?: string;\n data?: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface RunListOptions {\n task?: string;\n thread?: string;\n workspace?: WorkspaceRef;\n commandKind?: 'chat' | 'task';\n status?: RunStatusType;\n limit?: number;\n}\n\nexport interface RunStore<TContext> {\n saveRun(run: RunRecordData, context: TContext): Promise<void>;\n loadRun(id: string, context: TContext): Promise<RunRecordData>;\n listRuns(options: RunListOptions, context: TContext): Promise<RunRecordData[]>;\n appendRunStep(event: RunStepRecordData, context: TContext): Promise<void>;\n loadRunSteps(runId: string, context: TContext): Promise<RunStepRecordData[]>;\n claimRun?(input: {\n runId: string;\n leaseOwner: string;\n leaseExpiresAt: number;\n now: number;\n }, context: TContext): Promise<RunRecordData | undefined>;\n}\n\nexport function isClaimableRunStatus(status: RunRecordData['status']): boolean {\n return status === 'queued' || status === 'running';\n}\n\nexport function hasActiveRunLease(\n run: Pick<RunRecordData, 'leaseOwner' | 'leaseExpiresAt'>,\n now: number,\n): boolean {\n return Boolean(run.leaseOwner && run.leaseExpiresAt && run.leaseExpiresAt > now);\n}\n\nexport function canClaimRun(\n run: Pick<RunRecordData, 'status' | 'leaseOwner' | 'leaseExpiresAt'>,\n input: {\n leaseOwner: string;\n now: number;\n },\n): boolean {\n if (!isClaimableRunStatus(run.status)) {\n return false;\n }\n return !hasActiveRunLease(run, input.now) || run.leaseOwner === input.leaseOwner;\n}\n\nexport function isBaseRelativeResourceId(value: string | null | undefined): value is string {\n if (!value || /^https?:\\/\\//.test(value) || value.startsWith('/') || value.startsWith('#')) {\n return false;\n }\n return /\\.(ttl|jsonld|json)(?:#[^#]+)?$/i.test(value);\n}\n\nexport function isRunResourceId(value: string | null | undefined): value is string {\n return isBaseRelativeResourceId(value)\n && /^(chat|task)\\/[^/]+\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/runs\\.ttl#[^#/]+$/.test(value);\n}\n\nfunction assertLocalKey(value: string, label: string): void {\n if (value.includes('/') || value.includes('#') || /\\.(ttl|jsonld|json)(?:#|$)/i.test(value)) {\n throw new Error(`${label} requires a local key: ${value}`);\n }\n}\n\n/**\n * Extracts the local template fragment for display or protocol compatibility.\n * Do not use this to turn a canonical resource id back into the durable `id`.\n */\nexport function extractResourceLocalId(resourceId: string): string {\n const hashIndex = resourceId.lastIndexOf('#');\n if (hashIndex >= 0 && hashIndex < resourceId.length - 1) {\n return resourceId.slice(hashIndex + 1);\n }\n const slashIndex = resourceId.lastIndexOf('/');\n return slashIndex >= 0 && slashIndex < resourceId.length - 1\n ? resourceId.slice(slashIndex + 1)\n : resourceId;\n}\n\nexport function datePathFromTimestamp(timestamp: number | undefined): { yyyy: string; MM: string; dd: string } {\n const date = typeof timestamp === 'number' ? new Date(timestamp * 1000) : new Date();\n return {\n yyyy: String(date.getUTCFullYear()),\n MM: String(date.getUTCMonth() + 1).padStart(2, '0'),\n dd: String(date.getUTCDate()).padStart(2, '0'),\n };\n}\n\nexport function generateRunResourceId(input: {\n key: string;\n commandKind: 'chat' | 'task';\n surfaceId: string;\n createdAt?: number;\n}): string {\n if (isBaseRelativeResourceId(input.key)) {\n throw new Error(`Run id generator requires a local key, got resource id: ${input.key}`);\n }\n assertLocalKey(input.key, 'Run id generator');\n const { yyyy, MM, dd } = datePathFromTimestamp(input.createdAt);\n return `${input.commandKind}/${input.surfaceId}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;\n}\n\nexport function generateRunStepResourceId(input: {\n key: string;\n runId?: string;\n commandKind: 'chat' | 'task';\n surfaceId: string;\n createdAt?: number;\n}): string {\n if (isBaseRelativeResourceId(input.key)) {\n throw new Error(`RunStep id generator requires a local key, got resource id: ${input.key}`);\n }\n assertLocalKey(input.key, 'RunStep id generator');\n\n if (input.runId && isRunResourceId(input.runId)) {\n const runDoc = input.runId.slice(0, input.runId.lastIndexOf('#'));\n return `${runDoc}#${input.key}`;\n }\n\n const { yyyy, MM, dd } = datePathFromTimestamp(input.createdAt);\n return `${input.commandKind}/${input.surfaceId}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;\n}\n\nexport function buildRunResourceId(input: {\n id: string;\n commandKind: 'chat' | 'task';\n surfaceId: string;\n createdAt?: number;\n}): string {\n void input.commandKind;\n void input.surfaceId;\n void input.createdAt;\n if (!isRunResourceId(input.id)) {\n throw new Error(`Run id must be a complete Run resource id: ${input.id}`);\n }\n return input.id;\n}\n\nexport function buildRunStepResourceId(input: {\n id: string;\n runId?: string;\n commandKind: 'chat' | 'task';\n surfaceId: string;\n createdAt?: number;\n}): string {\n void input.runId;\n void input.commandKind;\n void input.surfaceId;\n void input.createdAt;\n if (!isRunResourceId(input.id)) {\n throw new Error(`RunStep id must be a complete RunStep resource id: ${input.id}`);\n }\n return input.id;\n}\n\nexport function resolveRunUrn(runId: string): string {\n return `urn:xpod:run:${encodeURIComponent(runId)}`;\n}\n\nexport function resolveDataResource(podBaseUrl: string, resourceId: string): string {\n if (/^https?:\\/\\//.test(resourceId)) {\n return resourceId;\n }\n const base = podBaseUrl.replace(/\\/$/, '');\n const relative = resourceId.replace(/^\\/+/, '');\n if (relative.startsWith('.data/')) {\n return `${base}/${relative}`;\n }\n return `${base}/.data/${relative}`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/runs/store.ts"],"names":[],"mappings":"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","sourcesContent":["import type { WorkspaceRef } from '../workspace/types';\nimport type { RunStatusType, RunStepTypeValue } from './schema';\n\nexport interface RunRecordData {\n /** Base-relative Solid resource id, e.g. `chat/default/2026/05/18/runs.ttl#run_x`. */\n id: string;\n task?: string;\n thread: string;\n workspace: WorkspaceRef;\n status: RunStatusType;\n runner: string;\n prompt?: string;\n externalRunId?: string;\n leaseOwner?: string;\n leaseExpiresAt?: number;\n heartbeatAt?: number;\n cancelRequestedAt?: number;\n error?: string;\n metadata?: Record<string, unknown>;\n createdAt: number;\n startedAt?: number;\n completedAt?: number;\n updatedAt: number;\n}\n\nexport interface RunStepRecordData {\n /** Base-relative Solid resource id, e.g. `chat/default/2026/05/18/runs.ttl#step_x`. */\n id: string;\n /** Denormalized Run resource id for lookup; semantic relation is `run`. */\n runId: string;\n run: string;\n type: RunStepTypeValue | string;\n message?: string;\n data?: Record<string, unknown>;\n createdAt: number;\n}\n\nexport interface RunListOptions {\n task?: string;\n thread?: string;\n workspace?: WorkspaceRef;\n status?: RunStatusType;\n limit?: number;\n}\n\nexport type RunCommandKind = 'chat' | 'task';\n\nexport interface RunCommandProjection {\n commandKind: RunCommandKind;\n surfaceId: string;\n}\n\nexport interface RunStore<TContext> {\n saveRun(run: RunRecordData, context: TContext): Promise<void>;\n loadRun(id: string, context: TContext): Promise<RunRecordData>;\n listRuns(options: RunListOptions, context: TContext): Promise<RunRecordData[]>;\n appendRunStep(event: RunStepRecordData, context: TContext): Promise<void>;\n loadRunSteps(runId: string, context: TContext): Promise<RunStepRecordData[]>;\n claimRun?(input: {\n runId: string;\n leaseOwner: string;\n leaseExpiresAt: number;\n now: number;\n }, context: TContext): Promise<RunRecordData | undefined>;\n}\n\nexport function isClaimableRunStatus(status: RunRecordData['status']): boolean {\n return status === 'queued' || status === 'running';\n}\n\nexport function hasActiveRunLease(\n run: Pick<RunRecordData, 'leaseOwner' | 'leaseExpiresAt'>,\n now: number,\n): boolean {\n return Boolean(run.leaseOwner && run.leaseExpiresAt && run.leaseExpiresAt > now);\n}\n\nexport function canClaimRun(\n run: Pick<RunRecordData, 'status' | 'leaseOwner' | 'leaseExpiresAt'>,\n input: {\n leaseOwner: string;\n now: number;\n },\n): boolean {\n if (!isClaimableRunStatus(run.status)) {\n return false;\n }\n return !hasActiveRunLease(run, input.now) || run.leaseOwner === input.leaseOwner;\n}\n\nexport function isBaseRelativeResourceId(value: string | null | undefined): value is string {\n if (!value || /^https?:\\/\\//.test(value) || value.startsWith('/') || value.startsWith('#')) {\n return false;\n }\n return /\\.(ttl|jsonld|json)(?:#[^#]+)?$/i.test(value);\n}\n\nexport function isRunResourceId(value: string | null | undefined): value is string {\n return isBaseRelativeResourceId(value)\n && /^(chat|task)\\/[^/]+\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/runs\\.ttl#[^#/]+$/.test(value);\n}\n\nexport function deriveRunCommandProjection(runId: string | null | undefined): RunCommandProjection | undefined {\n const match = runId?.match(/^(chat|task)\\/([^/]+)\\/\\d{4}\\/\\d{2}\\/\\d{2}\\/runs\\.ttl#[^#/]+$/);\n if (!match) {\n return undefined;\n }\n return {\n commandKind: match[1] as RunCommandKind,\n surfaceId: decodeURIComponent(match[2]),\n };\n}\n\nfunction assertLocalKey(value: string, label: string): void {\n if (value.includes('/') || value.includes('#') || /\\.(ttl|jsonld|json)(?:#|$)/i.test(value)) {\n throw new Error(`${label} requires a local key: ${value}`);\n }\n}\n\n/**\n * Extracts the local template fragment for display or protocol compatibility.\n * Do not use this to turn a canonical resource id back into the durable `id`.\n */\nexport function extractResourceLocalId(resourceId: string): string {\n const hashIndex = resourceId.lastIndexOf('#');\n if (hashIndex >= 0 && hashIndex < resourceId.length - 1) {\n return resourceId.slice(hashIndex + 1);\n }\n const slashIndex = resourceId.lastIndexOf('/');\n return slashIndex >= 0 && slashIndex < resourceId.length - 1\n ? resourceId.slice(slashIndex + 1)\n : resourceId;\n}\n\nexport function datePathFromTimestamp(timestamp: number | undefined): { yyyy: string; MM: string; dd: string } {\n const date = typeof timestamp === 'number' ? new Date(timestamp * 1000) : new Date();\n return {\n yyyy: String(date.getUTCFullYear()),\n MM: String(date.getUTCMonth() + 1).padStart(2, '0'),\n dd: String(date.getUTCDate()).padStart(2, '0'),\n };\n}\n\nexport function generateRunResourceId(input: {\n key: string;\n parentKind: RunCommandKind;\n parentKey: string;\n createdAt?: number;\n}): string {\n if (isBaseRelativeResourceId(input.key)) {\n throw new Error(`Run id generator requires a local key, got resource id: ${input.key}`);\n }\n assertLocalKey(input.key, 'Run id generator');\n const { yyyy, MM, dd } = datePathFromTimestamp(input.createdAt);\n return `${input.parentKind}/${input.parentKey}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;\n}\n\nexport function generateRunStepResourceId(input: {\n key: string;\n runId?: string;\n parentKind?: RunCommandKind;\n parentKey?: string;\n createdAt?: number;\n}): string {\n if (isBaseRelativeResourceId(input.key)) {\n throw new Error(`RunStep id generator requires a local key, got resource id: ${input.key}`);\n }\n assertLocalKey(input.key, 'RunStep id generator');\n\n if (input.runId && isRunResourceId(input.runId)) {\n const runDoc = input.runId.slice(0, input.runId.lastIndexOf('#'));\n return `${runDoc}#${input.key}`;\n }\n\n if (!input.parentKind || !input.parentKey) {\n throw new Error('RunStep id generator requires runId or parentKind/parentKey');\n }\n\n const { yyyy, MM, dd } = datePathFromTimestamp(input.createdAt);\n return `${input.parentKind}/${input.parentKey}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;\n}\n\nexport function buildRunResourceId(input: string | {\n id: string;\n createdAt?: number;\n}): string {\n const id = typeof input === 'string' ? input : input.id;\n if (!isRunResourceId(id)) {\n throw new Error(`Run id must be a complete Run resource id: ${id}`);\n }\n return id;\n}\n\nexport function buildRunStepResourceId(input: string | {\n id: string;\n runId?: string;\n createdAt?: number;\n}): string {\n const id = typeof input === 'string' ? input : input.id;\n if (!isRunResourceId(id)) {\n throw new Error(`RunStep id must be a complete RunStep resource id: ${id}`);\n }\n return id;\n}\n\nexport function resolveRunUrn(runId: string): string {\n return `urn:xpod:run:${encodeURIComponent(runId)}`;\n}\n\nexport function resolveDataResource(podBaseUrl: string, resourceId: string): string {\n if (/^https?:\\/\\//.test(resourceId)) {\n return resourceId;\n }\n const base = podBaseUrl.replace(/\\/$/, '');\n const relative = resourceId.replace(/^\\/+/, '');\n if (relative.startsWith('.data/')) {\n return `${base}/${relative}`;\n }\n return `${base}/.data/${relative}`;\n}\n"]}
|
|
@@ -46,6 +46,7 @@ export declare class TaskMaterializer<TContext = StoreContext> {
|
|
|
46
46
|
private computeNextIntervalRunAt;
|
|
47
47
|
private computeNextCronRunAt;
|
|
48
48
|
private threadRefFromTask;
|
|
49
|
+
private resolveTaskThreadParentKey;
|
|
49
50
|
private parseThreadResource;
|
|
50
51
|
private extractThreadId;
|
|
51
52
|
private resolveTaskResource;
|
|
@@ -142,17 +142,16 @@ class TaskMaterializer {
|
|
|
142
142
|
}
|
|
143
143
|
catch {
|
|
144
144
|
const now = (0, types_1.nowTimestamp)();
|
|
145
|
+
const taskParentKey = this.resolveTaskThreadParentKey(task);
|
|
145
146
|
const metadata = {
|
|
146
147
|
id: this.extractThreadId(task.thread),
|
|
148
|
+
parent: `task/index.ttl#${taskParentKey}`,
|
|
147
149
|
title: task.title,
|
|
148
150
|
status: { type: 'active' },
|
|
149
151
|
workspace: task.workspace,
|
|
150
152
|
created_at: now,
|
|
151
153
|
updated_at: now,
|
|
152
154
|
metadata: {
|
|
153
|
-
commandKind: 'task',
|
|
154
|
-
surface_id: task.surfaceId,
|
|
155
|
-
chat_id: task.surfaceId,
|
|
156
155
|
task: this.resolveTaskResource(task, context),
|
|
157
156
|
runtime: {
|
|
158
157
|
workspace: task.workspace,
|
|
@@ -166,18 +165,17 @@ class TaskMaterializer {
|
|
|
166
165
|
}
|
|
167
166
|
async createRun(task, prompt, userMessage, context, trigger) {
|
|
168
167
|
const now = (0, types_1.nowTimestamp)();
|
|
168
|
+
const taskParentKey = this.resolveTaskThreadParentKey(task);
|
|
169
169
|
const run = {
|
|
170
170
|
id: (0, store_1.generateRunResourceId)({
|
|
171
171
|
key: (0, types_1.generateId)('run'),
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
parentKind: 'task',
|
|
173
|
+
parentKey: taskParentKey,
|
|
174
174
|
createdAt: now,
|
|
175
175
|
}),
|
|
176
176
|
task: this.resolveTaskResource(task, context),
|
|
177
177
|
thread: task.thread,
|
|
178
178
|
workspace: task.workspace,
|
|
179
|
-
commandKind: 'task',
|
|
180
|
-
surfaceId: task.surfaceId,
|
|
181
179
|
status: schema_1.RunStatus.QUEUED,
|
|
182
180
|
runner: task.runner,
|
|
183
181
|
prompt,
|
|
@@ -197,7 +195,6 @@ class TaskMaterializer {
|
|
|
197
195
|
await this.appendRunStep(run, schema_1.XpodRunStepType.CREATED, context, {
|
|
198
196
|
message: 'Task run created',
|
|
199
197
|
data: {
|
|
200
|
-
commandKind: run.commandKind,
|
|
201
198
|
task: run.task,
|
|
202
199
|
thread: run.thread,
|
|
203
200
|
workspace: run.workspace,
|
|
@@ -254,12 +251,8 @@ class TaskMaterializer {
|
|
|
254
251
|
id: (0, store_1.generateRunStepResourceId)({
|
|
255
252
|
key: (0, types_1.generateId)('run-step'),
|
|
256
253
|
runId: run.id,
|
|
257
|
-
commandKind: run.commandKind,
|
|
258
|
-
surfaceId: run.surfaceId,
|
|
259
254
|
createdAt,
|
|
260
255
|
}),
|
|
261
|
-
commandKind: run.commandKind,
|
|
262
|
-
surfaceId: run.surfaceId,
|
|
263
256
|
runId: run.id,
|
|
264
257
|
run: this.resolveRunResource(run, context),
|
|
265
258
|
type,
|
|
@@ -365,9 +358,13 @@ class TaskMaterializer {
|
|
|
365
358
|
}
|
|
366
359
|
return (0, types_1.toThreadRef)({
|
|
367
360
|
thread_id: this.extractThreadId(task.thread),
|
|
368
|
-
chat_id: task.surfaceId,
|
|
369
361
|
});
|
|
370
362
|
}
|
|
363
|
+
resolveTaskThreadParentKey(task) {
|
|
364
|
+
const threadId = this.extractThreadId(task.thread);
|
|
365
|
+
const match = threadId.match(/^task\/([^/]+)\//);
|
|
366
|
+
return match ? decodeURIComponent(match[1]) : (0, store_1.extractResourceLocalId)(task.id);
|
|
367
|
+
}
|
|
371
368
|
parseThreadResource(thread) {
|
|
372
369
|
if (!/^https?:\/\//.test(thread)) {
|
|
373
370
|
return undefined;
|