@undefineds.co/xpod 0.3.48 → 0.3.49

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.
Files changed (105) hide show
  1. package/bin/xpod.js +0 -0
  2. package/dist/api/chatkit/pod-store.d.ts +16 -17
  3. package/dist/api/chatkit/pod-store.js +299 -231
  4. package/dist/api/chatkit/pod-store.js.map +1 -1
  5. package/dist/api/chatkit/schema.d.ts +1 -1
  6. package/dist/api/chatkit/service.js +13 -11
  7. package/dist/api/chatkit/service.js.map +1 -1
  8. package/dist/api/chatkit/store.d.ts +1 -0
  9. package/dist/api/chatkit/store.js +23 -11
  10. package/dist/api/chatkit/store.js.map +1 -1
  11. package/dist/api/chatkit/types.d.ts +17 -10
  12. package/dist/api/chatkit/types.js +97 -14
  13. package/dist/api/chatkit/types.js.map +1 -1
  14. package/dist/api/container/common.js +16 -2
  15. package/dist/api/container/common.js.map +1 -1
  16. package/dist/api/container/routes.js +3 -0
  17. package/dist/api/container/routes.js.map +1 -1
  18. package/dist/api/container/types.d.ts +3 -0
  19. package/dist/api/container/types.js.map +1 -1
  20. package/dist/api/handlers/ChatKitV1Handler.js +1 -2
  21. package/dist/api/handlers/ChatKitV1Handler.js.map +1 -1
  22. package/dist/api/handlers/CoordinationHandler.d.ts +6 -0
  23. package/dist/api/handlers/CoordinationHandler.js +115 -0
  24. package/dist/api/handlers/CoordinationHandler.js.map +1 -0
  25. package/dist/api/handlers/MatrixHandler.d.ts +11 -0
  26. package/dist/api/handlers/MatrixHandler.js +120 -2
  27. package/dist/api/handlers/MatrixHandler.js.map +1 -1
  28. package/dist/api/handlers/RunHandler.js +33 -15
  29. package/dist/api/handlers/RunHandler.js.map +1 -1
  30. package/dist/api/handlers/index.d.ts +1 -0
  31. package/dist/api/handlers/index.js +1 -0
  32. package/dist/api/handlers/index.js.map +1 -1
  33. package/dist/api/index.d.ts +1 -0
  34. package/dist/api/index.js +1 -0
  35. package/dist/api/index.js.map +1 -1
  36. package/dist/api/matrix/PodMatrixStore.d.ts +25 -1
  37. package/dist/api/matrix/PodMatrixStore.js +243 -38
  38. package/dist/api/matrix/PodMatrixStore.js.map +1 -1
  39. package/dist/api/matrix/index.d.ts +1 -1
  40. package/dist/api/matrix/index.js.map +1 -1
  41. package/dist/api/matrix/types.d.ts +23 -2
  42. package/dist/api/matrix/types.js.map +1 -1
  43. package/dist/api/protocol-metadata.d.ts +4 -0
  44. package/dist/api/protocol-metadata.js +54 -0
  45. package/dist/api/protocol-metadata.js.map +1 -0
  46. package/dist/api/reconciler/ClientReconcilerCoordinator.d.ts +42 -0
  47. package/dist/api/reconciler/ClientReconcilerCoordinator.js +250 -0
  48. package/dist/api/reconciler/ClientReconcilerCoordinator.js.map +1 -0
  49. package/dist/api/reconciler/ClientReconcilerCoordinator.jsonld +186 -0
  50. package/dist/api/reconciler/ServerGroupReconcilerService.d.ts +39 -0
  51. package/dist/api/reconciler/ServerGroupReconcilerService.js +91 -0
  52. package/dist/api/reconciler/ServerGroupReconcilerService.js.map +1 -0
  53. package/dist/api/reconciler/ServerGroupReconcilerService.jsonld +146 -0
  54. package/dist/api/reconciler/WakeAgentQueue.d.ts +23 -0
  55. package/dist/api/reconciler/WakeAgentQueue.js +123 -0
  56. package/dist/api/reconciler/WakeAgentQueue.js.map +1 -0
  57. package/dist/api/reconciler/WakeAgentQueue.jsonld +91 -0
  58. package/dist/api/reconciler/coordination.d.ts +61 -0
  59. package/dist/api/reconciler/coordination.js +109 -0
  60. package/dist/api/reconciler/coordination.js.map +1 -0
  61. package/dist/api/reconciler/coordination.jsonld +186 -0
  62. package/dist/api/reconciler/index.d.ts +4 -0
  63. package/dist/api/reconciler/index.js +21 -0
  64. package/dist/api/reconciler/index.js.map +1 -0
  65. package/dist/api/runs/ManagedRunWorker.js +0 -5
  66. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  67. package/dist/api/runs/RunStateCenter.d.ts +1 -1
  68. package/dist/api/runs/RunStateCenter.js +12 -28
  69. package/dist/api/runs/RunStateCenter.js.map +1 -1
  70. package/dist/api/runs/store.d.ts +12 -15
  71. package/dist/api/runs/store.js +24 -15
  72. package/dist/api/runs/store.js.map +1 -1
  73. package/dist/api/tasks/TaskMaterializer.d.ts +1 -0
  74. package/dist/api/tasks/TaskMaterializer.js +10 -13
  75. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  76. package/dist/api/tasks/TaskService.d.ts +0 -2
  77. package/dist/api/tasks/TaskService.js +6 -16
  78. package/dist/api/tasks/TaskService.js.map +1 -1
  79. package/dist/api/tasks/store.d.ts +0 -2
  80. package/dist/api/tasks/store.js.map +1 -1
  81. package/dist/cli/commands/auth.d.ts +1 -1
  82. package/dist/cli/commands/auth.js +4 -5
  83. package/dist/cli/commands/auth.js.map +1 -1
  84. package/dist/cli/commands/backup.js +1 -1
  85. package/dist/cli/commands/backup.js.map +1 -1
  86. package/dist/cli/commands/login.js +1 -1
  87. package/dist/cli/commands/login.js.map +1 -1
  88. package/dist/cli/commands/pod.js +1 -1
  89. package/dist/cli/commands/pod.js.map +1 -1
  90. package/dist/cli/lib/auth-helper.d.ts +5 -3
  91. package/dist/cli/lib/auth-helper.js +5 -3
  92. package/dist/cli/lib/auth-helper.js.map +1 -1
  93. package/dist/cli/lib/credentials-store.d.ts +22 -4
  94. package/dist/cli/lib/credentials-store.js +68 -51
  95. package/dist/cli/lib/credentials-store.js.map +1 -1
  96. package/dist/components/components.jsonld +5 -1
  97. package/dist/components/context.jsonld +103 -0
  98. package/dist/index.d.ts +1 -0
  99. package/dist/index.js +15 -0
  100. package/dist/index.js.map +1 -1
  101. package/dist/provision/LocalPodProvisioningService.d.ts +1 -0
  102. package/dist/provision/LocalPodProvisioningService.js +9 -0
  103. package/dist/provision/LocalPodProvisioningService.js.map +1 -1
  104. package/dist/provision/LocalPodProvisioningService.jsonld +4 -0
  105. package/package.json +2 -2
@@ -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"]}
@@ -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
- commandKind: 'chat' | 'task';
81
- surfaceId: string;
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
- commandKind: 'chat' | 'task';
88
- surfaceId: string;
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;
@@ -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.commandKind}/${input.surfaceId}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;
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.commandKind}/${input.surfaceId}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;
97
+ return `${input.parentKind}/${input.parentKey}/${yyyy}/${MM}/${dd}/runs.ttl#${input.key}`;
84
98
  }
85
99
  function buildRunResourceId(input) {
86
- void input.commandKind;
87
- void input.surfaceId;
88
- void input.createdAt;
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 input.id;
104
+ return id;
93
105
  }
94
106
  function buildRunStepResourceId(input) {
95
- void input.runId;
96
- void input.commandKind;
97
- void input.surfaceId;
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 input.id;
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
- commandKind: 'task',
173
- surfaceId: task.surfaceId,
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;