@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.
Files changed (128) hide show
  1. package/bin/xpod.js +0 -0
  2. package/dist/api/auth/MultiAuthenticator.js +2 -2
  3. package/dist/api/auth/MultiAuthenticator.js.map +1 -1
  4. package/dist/api/chatkit/pod-store.d.ts +16 -17
  5. package/dist/api/chatkit/pod-store.js +299 -231
  6. package/dist/api/chatkit/pod-store.js.map +1 -1
  7. package/dist/api/chatkit/schema.d.ts +1 -1
  8. package/dist/api/chatkit/service.js +13 -11
  9. package/dist/api/chatkit/service.js.map +1 -1
  10. package/dist/api/chatkit/store.d.ts +1 -0
  11. package/dist/api/chatkit/store.js +23 -11
  12. package/dist/api/chatkit/store.js.map +1 -1
  13. package/dist/api/chatkit/types.d.ts +17 -10
  14. package/dist/api/chatkit/types.js +97 -14
  15. package/dist/api/chatkit/types.js.map +1 -1
  16. package/dist/api/container/common.js +16 -2
  17. package/dist/api/container/common.js.map +1 -1
  18. package/dist/api/container/routes.js +3 -0
  19. package/dist/api/container/routes.js.map +1 -1
  20. package/dist/api/container/types.d.ts +3 -0
  21. package/dist/api/container/types.js.map +1 -1
  22. package/dist/api/handlers/ChatKitV1Handler.js +1 -2
  23. package/dist/api/handlers/ChatKitV1Handler.js.map +1 -1
  24. package/dist/api/handlers/CoordinationHandler.d.ts +6 -0
  25. package/dist/api/handlers/CoordinationHandler.js +115 -0
  26. package/dist/api/handlers/CoordinationHandler.js.map +1 -0
  27. package/dist/api/handlers/MatrixHandler.d.ts +11 -0
  28. package/dist/api/handlers/MatrixHandler.js +144 -2
  29. package/dist/api/handlers/MatrixHandler.js.map +1 -1
  30. package/dist/api/handlers/RunHandler.js +33 -15
  31. package/dist/api/handlers/RunHandler.js.map +1 -1
  32. package/dist/api/handlers/index.d.ts +1 -0
  33. package/dist/api/handlers/index.js +1 -0
  34. package/dist/api/handlers/index.js.map +1 -1
  35. package/dist/api/index.d.ts +1 -0
  36. package/dist/api/index.js +1 -0
  37. package/dist/api/index.js.map +1 -1
  38. package/dist/api/matrix/PodMatrixStore.d.ts +25 -1
  39. package/dist/api/matrix/PodMatrixStore.js +253 -41
  40. package/dist/api/matrix/PodMatrixStore.js.map +1 -1
  41. package/dist/api/matrix/index.d.ts +1 -1
  42. package/dist/api/matrix/index.js.map +1 -1
  43. package/dist/api/matrix/types.d.ts +25 -2
  44. package/dist/api/matrix/types.js.map +1 -1
  45. package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
  46. package/dist/api/middleware/AuthMiddleware.js +13 -1
  47. package/dist/api/middleware/AuthMiddleware.js.map +1 -1
  48. package/dist/api/protocol-metadata.d.ts +4 -0
  49. package/dist/api/protocol-metadata.js +64 -0
  50. package/dist/api/protocol-metadata.js.map +1 -0
  51. package/dist/api/reconciler/ClientReconcilerCoordinator.d.ts +42 -0
  52. package/dist/api/reconciler/ClientReconcilerCoordinator.js +250 -0
  53. package/dist/api/reconciler/ClientReconcilerCoordinator.js.map +1 -0
  54. package/dist/api/reconciler/ClientReconcilerCoordinator.jsonld +186 -0
  55. package/dist/api/reconciler/ServerGroupReconcilerService.d.ts +39 -0
  56. package/dist/api/reconciler/ServerGroupReconcilerService.js +91 -0
  57. package/dist/api/reconciler/ServerGroupReconcilerService.js.map +1 -0
  58. package/dist/api/reconciler/ServerGroupReconcilerService.jsonld +146 -0
  59. package/dist/api/reconciler/WakeAgentQueue.d.ts +23 -0
  60. package/dist/api/reconciler/WakeAgentQueue.js +123 -0
  61. package/dist/api/reconciler/WakeAgentQueue.js.map +1 -0
  62. package/dist/api/reconciler/WakeAgentQueue.jsonld +91 -0
  63. package/dist/api/reconciler/coordination.d.ts +61 -0
  64. package/dist/api/reconciler/coordination.js +109 -0
  65. package/dist/api/reconciler/coordination.js.map +1 -0
  66. package/dist/api/reconciler/coordination.jsonld +186 -0
  67. package/dist/api/reconciler/index.d.ts +4 -0
  68. package/dist/api/reconciler/index.js +21 -0
  69. package/dist/api/reconciler/index.js.map +1 -0
  70. package/dist/api/runs/ManagedRunWorker.js +0 -5
  71. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  72. package/dist/api/runs/RunStateCenter.d.ts +1 -1
  73. package/dist/api/runs/RunStateCenter.js +12 -28
  74. package/dist/api/runs/RunStateCenter.js.map +1 -1
  75. package/dist/api/runs/store.d.ts +12 -15
  76. package/dist/api/runs/store.js +24 -15
  77. package/dist/api/runs/store.js.map +1 -1
  78. package/dist/api/tasks/TaskMaterializer.d.ts +1 -0
  79. package/dist/api/tasks/TaskMaterializer.js +10 -13
  80. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  81. package/dist/api/tasks/TaskService.d.ts +0 -2
  82. package/dist/api/tasks/TaskService.js +6 -16
  83. package/dist/api/tasks/TaskService.js.map +1 -1
  84. package/dist/api/tasks/store.d.ts +0 -2
  85. package/dist/api/tasks/store.js.map +1 -1
  86. package/dist/cli/commands/auth.d.ts +1 -1
  87. package/dist/cli/commands/auth.js +4 -5
  88. package/dist/cli/commands/auth.js.map +1 -1
  89. package/dist/cli/commands/backup.js +1 -1
  90. package/dist/cli/commands/backup.js.map +1 -1
  91. package/dist/cli/commands/login.js +1 -1
  92. package/dist/cli/commands/login.js.map +1 -1
  93. package/dist/cli/commands/pod.js +1 -1
  94. package/dist/cli/commands/pod.js.map +1 -1
  95. package/dist/cli/lib/auth-context.js +10 -7
  96. package/dist/cli/lib/auth-context.js.map +1 -1
  97. package/dist/cli/lib/auth-helper.d.ts +10 -6
  98. package/dist/cli/lib/auth-helper.js +10 -6
  99. package/dist/cli/lib/auth-helper.js.map +1 -1
  100. package/dist/cli/lib/credentials-store.d.ts +22 -4
  101. package/dist/cli/lib/credentials-store.js +68 -51
  102. package/dist/cli/lib/credentials-store.js.map +1 -1
  103. package/dist/cli/lib/oidc-auth.d.ts +4 -0
  104. package/dist/cli/lib/oidc-auth.js +90 -0
  105. package/dist/cli/lib/oidc-auth.js.map +1 -0
  106. package/dist/cli/lib/oidc-session-storage.d.ts +3 -0
  107. package/dist/cli/lib/oidc-session-storage.js +41 -0
  108. package/dist/cli/lib/oidc-session-storage.js.map +1 -0
  109. package/dist/components/components.jsonld +5 -1
  110. package/dist/components/context.jsonld +103 -0
  111. package/dist/index.d.ts +1 -0
  112. package/dist/index.js +15 -0
  113. package/dist/index.js.map +1 -1
  114. package/dist/provision/LocalPodProvisioningService.d.ts +1 -0
  115. package/dist/provision/LocalPodProvisioningService.js +9 -0
  116. package/dist/provision/LocalPodProvisioningService.js.map +1 -1
  117. package/dist/provision/LocalPodProvisioningService.jsonld +4 -0
  118. package/dist/runtime/Proxy.d.ts +1 -0
  119. package/dist/runtime/Proxy.js +8 -1
  120. package/dist/runtime/Proxy.js.map +1 -1
  121. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
  122. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +19 -9
  123. package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
  124. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
  125. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +19 -9
  126. package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
  127. package/node_modules/@undefineds.co/drizzle-solid/package.json +1 -1
  128. package/package.json +5 -4
@@ -1 +1 @@
1
- {"version":3,"file":"TaskMaterializer.js","sourceRoot":"","sources":["../../../src/api/tasks/TaskMaterializer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatKitStore, StoreContext } from '../chatkit/store';\nimport type {\n ThreadItem,\n ThreadMetadata,\n ThreadRef,\n AssistantMessageItem,\n UserMessageItem,\n} from '../chatkit/types';\nimport {\n generateId,\n nowTimestamp,\n toThreadRef,\n} from '../chatkit/types';\nimport { InngestRunExecutionBackend } from '../runs/InngestRunExecutionBackend';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { RunStatus, XpodRunStepType as RunStepType } from '../runs/schema';\nimport {\n generateRunResourceId,\n generateRunStepResourceId,\n resolveDataResource,\n resolveRunUrn,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nimport type { AgentRuntimeConfig, RunnerProtocol, RunnerType } from '../runs/AgentRuntimeTypes';\nimport { isWorkspaceRef } from '../workspace/types';\nimport { TaskStatus, TaskTriggerKind } from './schema';\nimport { resolveTaskResource as expandTaskResource, resolveTaskUrn, type TaskRecordData } from './store';\n\nexport interface MaterializedTaskRun {\n task: TaskRecordData;\n run: RunRecordData;\n assistant?: ThreadItem;\n}\n\nexport interface TaskMaterializerOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext> & RunStore<TContext>;\n executionBackend?: RunExecutionBackend;\n executeRuns?: boolean;\n}\n\nexport class TaskMaterializer<TContext = StoreContext> {\n private readonly store: ChatKitStore<TContext> & RunStore<TContext>;\n private readonly executionBackend: RunExecutionBackend;\n private readonly executeRuns: boolean;\n\n public constructor(options: TaskMaterializerOptions<TContext>) {\n this.store = options.store;\n this.executionBackend = options.executionBackend ?? new InngestRunExecutionBackend();\n this.executeRuns = options.executeRuns ?? true;\n }\n\n public async materialize(input: {\n task: TaskRecordData;\n context: TContext;\n trigger: {\n kind: 'once' | 'interval' | 'cron' | 'event' | 'manual';\n scheduledFor?: number;\n eventName?: string;\n payload?: Record<string, unknown>;\n };\n }): Promise<MaterializedTaskRun> {\n const { task, context, trigger } = input;\n if (task.status !== TaskStatus.ACTIVE) {\n throw new Error(`Task ${task.id} is not active`);\n }\n\n const threadRef = this.threadRefFromTask(task);\n const thread = await this.ensureThread(task, context);\n const prompt = this.buildPrompt(task, trigger);\n const userMessage = await this.createUserMessage(threadRef, task, context, prompt);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n const run = await this.createRun(task, prompt, userMessage, context, trigger);\n task.lastRunAt = trigger.scheduledFor ?? nowTimestamp();\n task.updatedAt = nowTimestamp();\n\n if (task.triggerKind === TaskTriggerKind.ONCE) {\n task.nextRunAt = undefined;\n } else if (task.triggerKind === TaskTriggerKind.INTERVAL) {\n task.nextRunAt = this.computeNextIntervalRunAt(task, task.lastRunAt);\n } else if (task.triggerKind === TaskTriggerKind.CRON) {\n task.nextRunAt = this.computeNextCronRunAt(task, task.lastRunAt);\n }\n\n if (this.hasSaveTask(this.store)) {\n await this.store.saveTask(task, context);\n }\n\n if (this.executeRuns) {\n const assistant = await this.executeRun({ task, thread, run, userMessage, context });\n if (task.triggerKind === TaskTriggerKind.ONCE) {\n task.status = run.status === RunStatus.COMPLETED ? TaskStatus.COMPLETED : TaskStatus.FAILED;\n task.updatedAt = nowTimestamp();\n if (this.hasSaveTask(this.store)) {\n await this.store.saveTask(task, context);\n }\n }\n return { task, run, assistant };\n }\n\n if (task.triggerKind === TaskTriggerKind.ONCE) {\n task.status = TaskStatus.COMPLETED;\n task.updatedAt = nowTimestamp();\n if (this.hasSaveTask(this.store)) {\n await this.store.saveTask(task, context);\n }\n }\n\n return { task, run };\n }\n\n private async executeRun(input: {\n task: TaskRecordData;\n thread: ThreadMetadata;\n run: RunRecordData;\n userMessage: UserMessageItem;\n context: TContext;\n }): Promise<ThreadItem | undefined> {\n const { task, thread, run, userMessage, context } = input;\n const runtimeConfig = this.buildRuntimeConfig(task);\n const threadRef = this.threadRefFromTask(task);\n const assistantItem = await this.createAssistantMessage(thread, context);\n await this.store.addThreadItem(threadRef, assistantItem, context);\n await this.markRunStarted(run, context);\n\n let 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: run.prompt ?? task.prompt,\n conversation: await this.loadConversation(threadRef, userMessage.id, context),\n config: runtimeConfig,\n authBindingId: task.authBinding?.id,\n context: context as StoreContext,\n })\n ) {\n if (event.type === 'text') {\n fullText += event.text;\n await this.appendRunStep(run, RunStepType.TEXT_DELTA, context, {\n message: event.text,\n data: { delta: event.text },\n });\n 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 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 await this.finishRun(run, RunStatus.WAITING_INPUT, context, `Tool call ${event.name} requires steering`);\n assistantItem.status = 'incomplete';\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n await this.store.saveItem(threadRef, assistantItem, context);\n return assistantItem;\n }\n\n if (event.type === 'waiting_runner') {\n runtimeError = event.message;\n await this.appendRunStep(run, RunStepType.WAITING_RUNNER, context, {\n message: event.message,\n data: { workspace: event.workspace },\n });\n await this.finishRun(run, RunStatus.WAITING_RUNNER, context, event.message);\n assistantItem.status = 'incomplete';\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n await this.store.saveItem(threadRef, assistantItem, context);\n return assistantItem;\n }\n\n runtimeError = event.message;\n await this.appendRunStep(run, RunStepType.ERROR, context, {\n message: event.message,\n });\n break;\n }\n\n assistantItem.status = runtimeError ? 'incomplete' : 'completed';\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n await this.store.saveItem(threadRef, assistantItem, context);\n await this.finishRun(\n run,\n runtimeError ? RunStatus.FAILED : RunStatus.COMPLETED,\n context,\n runtimeError,\n );\n return assistantItem;\n }\n\n private async ensureThread(task: TaskRecordData, context: TContext): Promise<ThreadMetadata> {\n const threadRef = this.threadRefFromTask(task);\n try {\n return await this.store.loadThread(threadRef, context);\n } catch {\n const now = nowTimestamp();\n const metadata: ThreadMetadata = {\n id: this.extractThreadId(task.thread),\n title: task.title,\n status: { type: 'active' },\n workspace: task.workspace,\n created_at: now,\n updated_at: now,\n metadata: {\n commandKind: 'task',\n surface_id: task.surfaceId,\n chat_id: task.surfaceId,\n task: this.resolveTaskResource(task, context),\n runtime: {\n workspace: task.workspace,\n runner: this.parseRunner(task.runner),\n },\n },\n };\n await this.store.saveThread(metadata, context);\n return metadata;\n }\n }\n\n private async createRun(\n task: TaskRecordData,\n prompt: string,\n userMessage: UserMessageItem,\n context: TContext,\n trigger: {\n kind: string;\n scheduledFor?: number;\n eventName?: string;\n payload?: Record<string, unknown>;\n },\n ): Promise<RunRecordData> {\n const now = nowTimestamp();\n const run: RunRecordData = {\n id: generateRunResourceId({\n key: generateId('run'),\n commandKind: 'task',\n surfaceId: task.surfaceId,\n createdAt: now,\n }),\n task: this.resolveTaskResource(task, context),\n thread: task.thread,\n workspace: task.workspace,\n commandKind: 'task',\n surfaceId: task.surfaceId,\n status: RunStatus.QUEUED,\n runner: task.runner,\n prompt,\n metadata: {\n taskId: task.id,\n threadId: this.extractThreadId(task.thread),\n userMessageId: userMessage.id,\n runtimeConfig: this.buildRuntimeConfig(task),\n authBinding: task.authBinding,\n authBindingId: task.authBinding?.id,\n trigger,\n },\n createdAt: now,\n updatedAt: now,\n };\n await this.store.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.CREATED, context, {\n message: 'Task run created',\n data: {\n commandKind: run.commandKind,\n task: run.task,\n thread: run.thread,\n workspace: run.workspace,\n runner: run.runner,\n trigger,\n authBinding: task.authBinding,\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.store.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.STARTED, context, {\n message: 'Task 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 = this.isWaitingStatus(status) ? undefined : now;\n run.updatedAt = now;\n run.error = error;\n await this.store.saveRun(run, context);\n await this.appendRunStep(\n run,\n this.stepTypeForStatus(status),\n context,\n {\n message: error ?? `Run ${status}`,\n data: { status },\n },\n );\n }\n\n private isWaitingStatus(status: RunRecordData['status']): boolean {\n return status === RunStatus.WAITING_INPUT || status === RunStatus.WAITING_RUNNER;\n }\n\n private stepTypeForStatus(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 (status === RunStatus.WAITING_INPUT) {\n return RunStepType.WAITING_INPUT;\n }\n if (status === RunStatus.WAITING_RUNNER) {\n return RunStepType.WAITING_RUNNER;\n }\n return RunStepType.FAILED;\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.store.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 async createUserMessage(\n threadRef: ThreadRef,\n task: TaskRecordData,\n context: TContext,\n prompt: string,\n ): Promise<UserMessageItem> {\n const thread = await this.store.loadThread(threadRef, context);\n return {\n id: this.store.generateItemId('user_message', thread, context),\n thread_id: thread.id,\n type: 'user_message',\n content: [{ type: 'input_text', text: prompt }],\n created_at: nowTimestamp(),\n };\n }\n\n private buildPrompt(\n task: TaskRecordData,\n trigger: {\n kind: string;\n scheduledFor?: number;\n eventName?: string;\n payload?: Record<string, unknown>;\n },\n ): string {\n if (trigger.kind !== 'event' || !trigger.payload) {\n return task.prompt;\n }\n return `${task.prompt}\\n\\nEvent payload:\\n${JSON.stringify(trigger.payload)}`;\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 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 = item.content\n .filter((content) => content.type === 'input_text')\n .map((content) => content.text)\n .join('\\n')\n .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 = item.content\n .filter((content) => content.type === 'output_text')\n .map((content) => content.text)\n .join('\\n')\n .trim();\n if (text) {\n conversation.push({ role: 'assistant', text, createdAt: item.created_at });\n }\n }\n }\n\n return conversation;\n }\n\n private buildRuntimeConfig(task: TaskRecordData): AgentRuntimeConfig {\n if (!isWorkspaceRef(task.workspace)) {\n throw new Error('Task workspace reference is required');\n }\n return {\n workspace: task.workspace,\n runner: this.parseRunner(task.runner),\n };\n }\n\n private parseRunner(runner: string): { protocol: RunnerProtocol; type: RunnerType } {\n const [protocol, type] = runner.split(':');\n return {\n protocol: protocol === 'acp' ? 'acp' : 'pi',\n type: this.isRunnerType(type) ? type : 'pi',\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 computeNextIntervalRunAt(task: TaskRecordData, from: number): number | undefined {\n if (!task.intervalSeconds || task.intervalSeconds <= 0) {\n return undefined;\n }\n return from + task.intervalSeconds;\n }\n\n private computeNextCronRunAt(task: TaskRecordData, from: number): number {\n const firstField = task.cron?.trim().split(/\\s+/)[0];\n const everyMinuteMatch = firstField?.match(/^\\*\\/(\\d+)$/);\n if (everyMinuteMatch) {\n return from + Math.max(1, Number(everyMinuteMatch[1])) * 60;\n }\n return from + 60;\n }\n\n private threadRefFromTask(task: TaskRecordData): ThreadRef {\n const parsed = this.parseThreadResource(task.thread);\n if (parsed) {\n return parsed;\n }\n return toThreadRef({\n thread_id: this.extractThreadId(task.thread),\n chat_id: task.surfaceId,\n });\n }\n\n private parseThreadResource(thread: string): ThreadRef | undefined {\n if (!/^https?:\\/\\//.test(thread)) {\n return undefined;\n }\n try {\n const url = new URL(thread);\n const match = url.pathname.match(/\\/\\.data\\/(?:chat|task)\\/([^/]+)\\/index\\.ttl$/);\n return match\n ? { thread_id: thread as `http://${string}` | `https://${string}` }\n : { thread_id: thread as `http://${string}` | `https://${string}` };\n } catch {\n return undefined;\n }\n }\n\n private extractThreadId(thread: string): string {\n const dataMarker = '/.data/';\n if (/^https?:\\/\\//.test(thread)) {\n try {\n const url = new URL(thread);\n const markerIndex = url.pathname.indexOf(dataMarker);\n if (markerIndex >= 0 && url.hash) {\n return `${url.pathname.slice(markerIndex + dataMarker.length)}${url.hash}`;\n }\n return url.hash.startsWith('#') ? decodeURIComponent(url.hash.slice(1)) : thread;\n } catch {\n return thread;\n }\n }\n if (thread.includes(dataMarker)) {\n return thread.slice(thread.indexOf(dataMarker) + dataMarker.length);\n }\n const urnMarker = 'urn:xpod:thread:';\n if (thread.startsWith(urnMarker)) {\n const parts = thread.slice(urnMarker.length).split(':');\n return parts.length > 1 ? decodeURIComponent(parts[1]) : decodeURIComponent(parts[0]);\n }\n return thread;\n }\n\n private resolveTaskResource(task: TaskRecordData, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n return expandTaskResource(podBaseUrl, task.id);\n }\n return resolveTaskUrn(task.id);\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 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 hasSaveTask(value: unknown): value is { saveTask(task: TaskRecordData, context: TContext): Promise<void> } {\n return typeof (value as { saveTask?: unknown }).saveTask === 'function';\n }\n}\n"]}
1
+ {"version":3,"file":"TaskMaterializer.js","sourceRoot":"","sources":["../../../src/api/tasks/TaskMaterializer.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatKitStore, StoreContext } from '../chatkit/store';\nimport type {\n ThreadItem,\n ThreadMetadata,\n ThreadRef,\n AssistantMessageItem,\n UserMessageItem,\n} from '../chatkit/types';\nimport {\n generateId,\n nowTimestamp,\n toThreadRef,\n} from '../chatkit/types';\nimport { InngestRunExecutionBackend } from '../runs/InngestRunExecutionBackend';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { RunStatus, XpodRunStepType as RunStepType } from '../runs/schema';\nimport {\n extractResourceLocalId,\n generateRunResourceId,\n generateRunStepResourceId,\n resolveDataResource,\n resolveRunUrn,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nimport type { AgentRuntimeConfig, RunnerProtocol, RunnerType } from '../runs/AgentRuntimeTypes';\nimport { isWorkspaceRef } from '../workspace/types';\nimport { TaskStatus, TaskTriggerKind } from './schema';\nimport { resolveTaskResource as expandTaskResource, resolveTaskUrn, type TaskRecordData } from './store';\n\nexport interface MaterializedTaskRun {\n task: TaskRecordData;\n run: RunRecordData;\n assistant?: ThreadItem;\n}\n\nexport interface TaskMaterializerOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext> & RunStore<TContext>;\n executionBackend?: RunExecutionBackend;\n executeRuns?: boolean;\n}\n\nexport class TaskMaterializer<TContext = StoreContext> {\n private readonly store: ChatKitStore<TContext> & RunStore<TContext>;\n private readonly executionBackend: RunExecutionBackend;\n private readonly executeRuns: boolean;\n\n public constructor(options: TaskMaterializerOptions<TContext>) {\n this.store = options.store;\n this.executionBackend = options.executionBackend ?? new InngestRunExecutionBackend();\n this.executeRuns = options.executeRuns ?? true;\n }\n\n public async materialize(input: {\n task: TaskRecordData;\n context: TContext;\n trigger: {\n kind: 'once' | 'interval' | 'cron' | 'event' | 'manual';\n scheduledFor?: number;\n eventName?: string;\n payload?: Record<string, unknown>;\n };\n }): Promise<MaterializedTaskRun> {\n const { task, context, trigger } = input;\n if (task.status !== TaskStatus.ACTIVE) {\n throw new Error(`Task ${task.id} is not active`);\n }\n\n const threadRef = this.threadRefFromTask(task);\n const thread = await this.ensureThread(task, context);\n const prompt = this.buildPrompt(task, trigger);\n const userMessage = await this.createUserMessage(threadRef, task, context, prompt);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n const run = await this.createRun(task, prompt, userMessage, context, trigger);\n task.lastRunAt = trigger.scheduledFor ?? nowTimestamp();\n task.updatedAt = nowTimestamp();\n\n if (task.triggerKind === TaskTriggerKind.ONCE) {\n task.nextRunAt = undefined;\n } else if (task.triggerKind === TaskTriggerKind.INTERVAL) {\n task.nextRunAt = this.computeNextIntervalRunAt(task, task.lastRunAt);\n } else if (task.triggerKind === TaskTriggerKind.CRON) {\n task.nextRunAt = this.computeNextCronRunAt(task, task.lastRunAt);\n }\n\n if (this.hasSaveTask(this.store)) {\n await this.store.saveTask(task, context);\n }\n\n if (this.executeRuns) {\n const assistant = await this.executeRun({ task, thread, run, userMessage, context });\n if (task.triggerKind === TaskTriggerKind.ONCE) {\n task.status = run.status === RunStatus.COMPLETED ? TaskStatus.COMPLETED : TaskStatus.FAILED;\n task.updatedAt = nowTimestamp();\n if (this.hasSaveTask(this.store)) {\n await this.store.saveTask(task, context);\n }\n }\n return { task, run, assistant };\n }\n\n if (task.triggerKind === TaskTriggerKind.ONCE) {\n task.status = TaskStatus.COMPLETED;\n task.updatedAt = nowTimestamp();\n if (this.hasSaveTask(this.store)) {\n await this.store.saveTask(task, context);\n }\n }\n\n return { task, run };\n }\n\n private async executeRun(input: {\n task: TaskRecordData;\n thread: ThreadMetadata;\n run: RunRecordData;\n userMessage: UserMessageItem;\n context: TContext;\n }): Promise<ThreadItem | undefined> {\n const { task, thread, run, userMessage, context } = input;\n const runtimeConfig = this.buildRuntimeConfig(task);\n const threadRef = this.threadRefFromTask(task);\n const assistantItem = await this.createAssistantMessage(thread, context);\n await this.store.addThreadItem(threadRef, assistantItem, context);\n await this.markRunStarted(run, context);\n\n let 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: run.prompt ?? task.prompt,\n conversation: await this.loadConversation(threadRef, userMessage.id, context),\n config: runtimeConfig,\n authBindingId: task.authBinding?.id,\n context: context as StoreContext,\n })\n ) {\n if (event.type === 'text') {\n fullText += event.text;\n await this.appendRunStep(run, RunStepType.TEXT_DELTA, context, {\n message: event.text,\n data: { delta: event.text },\n });\n 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 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 await this.finishRun(run, RunStatus.WAITING_INPUT, context, `Tool call ${event.name} requires steering`);\n assistantItem.status = 'incomplete';\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n await this.store.saveItem(threadRef, assistantItem, context);\n return assistantItem;\n }\n\n if (event.type === 'waiting_runner') {\n runtimeError = event.message;\n await this.appendRunStep(run, RunStepType.WAITING_RUNNER, context, {\n message: event.message,\n data: { workspace: event.workspace },\n });\n await this.finishRun(run, RunStatus.WAITING_RUNNER, context, event.message);\n assistantItem.status = 'incomplete';\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n await this.store.saveItem(threadRef, assistantItem, context);\n return assistantItem;\n }\n\n runtimeError = event.message;\n await this.appendRunStep(run, RunStepType.ERROR, context, {\n message: event.message,\n });\n break;\n }\n\n assistantItem.status = runtimeError ? 'incomplete' : 'completed';\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n await this.store.saveItem(threadRef, assistantItem, context);\n await this.finishRun(\n run,\n runtimeError ? RunStatus.FAILED : RunStatus.COMPLETED,\n context,\n runtimeError,\n );\n return assistantItem;\n }\n\n private async ensureThread(task: TaskRecordData, context: TContext): Promise<ThreadMetadata> {\n const threadRef = this.threadRefFromTask(task);\n try {\n return await this.store.loadThread(threadRef, context);\n } catch {\n const now = nowTimestamp();\n const taskParentKey = this.resolveTaskThreadParentKey(task);\n const metadata: ThreadMetadata = {\n id: this.extractThreadId(task.thread),\n parent: `task/index.ttl#${taskParentKey}`,\n title: task.title,\n status: { type: 'active' },\n workspace: task.workspace,\n created_at: now,\n updated_at: now,\n metadata: {\n task: this.resolveTaskResource(task, context),\n runtime: {\n workspace: task.workspace,\n runner: this.parseRunner(task.runner),\n },\n },\n };\n await this.store.saveThread(metadata, context);\n return metadata;\n }\n }\n\n private async createRun(\n task: TaskRecordData,\n prompt: string,\n userMessage: UserMessageItem,\n context: TContext,\n trigger: {\n kind: string;\n scheduledFor?: number;\n eventName?: string;\n payload?: Record<string, unknown>;\n },\n ): Promise<RunRecordData> {\n const now = nowTimestamp();\n const taskParentKey = this.resolveTaskThreadParentKey(task);\n const run: RunRecordData = {\n id: generateRunResourceId({\n key: generateId('run'),\n parentKind: 'task',\n parentKey: taskParentKey,\n createdAt: now,\n }),\n task: this.resolveTaskResource(task, context),\n thread: task.thread,\n workspace: task.workspace,\n status: RunStatus.QUEUED,\n runner: task.runner,\n prompt,\n metadata: {\n taskId: task.id,\n threadId: this.extractThreadId(task.thread),\n userMessageId: userMessage.id,\n runtimeConfig: this.buildRuntimeConfig(task),\n authBinding: task.authBinding,\n authBindingId: task.authBinding?.id,\n trigger,\n },\n createdAt: now,\n updatedAt: now,\n };\n await this.store.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.CREATED, context, {\n message: 'Task run created',\n data: {\n task: run.task,\n thread: run.thread,\n workspace: run.workspace,\n runner: run.runner,\n trigger,\n authBinding: task.authBinding,\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.store.saveRun(run, context);\n await this.appendRunStep(run, RunStepType.STARTED, context, {\n message: 'Task 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 = this.isWaitingStatus(status) ? undefined : now;\n run.updatedAt = now;\n run.error = error;\n await this.store.saveRun(run, context);\n await this.appendRunStep(\n run,\n this.stepTypeForStatus(status),\n context,\n {\n message: error ?? `Run ${status}`,\n data: { status },\n },\n );\n }\n\n private isWaitingStatus(status: RunRecordData['status']): boolean {\n return status === RunStatus.WAITING_INPUT || status === RunStatus.WAITING_RUNNER;\n }\n\n private stepTypeForStatus(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 (status === RunStatus.WAITING_INPUT) {\n return RunStepType.WAITING_INPUT;\n }\n if (status === RunStatus.WAITING_RUNNER) {\n return RunStepType.WAITING_RUNNER;\n }\n return RunStepType.FAILED;\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.store.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 async createUserMessage(\n threadRef: ThreadRef,\n task: TaskRecordData,\n context: TContext,\n prompt: string,\n ): Promise<UserMessageItem> {\n const thread = await this.store.loadThread(threadRef, context);\n return {\n id: this.store.generateItemId('user_message', thread, context),\n thread_id: thread.id,\n type: 'user_message',\n content: [{ type: 'input_text', text: prompt }],\n created_at: nowTimestamp(),\n };\n }\n\n private buildPrompt(\n task: TaskRecordData,\n trigger: {\n kind: string;\n scheduledFor?: number;\n eventName?: string;\n payload?: Record<string, unknown>;\n },\n ): string {\n if (trigger.kind !== 'event' || !trigger.payload) {\n return task.prompt;\n }\n return `${task.prompt}\\n\\nEvent payload:\\n${JSON.stringify(trigger.payload)}`;\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 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 = item.content\n .filter((content) => content.type === 'input_text')\n .map((content) => content.text)\n .join('\\n')\n .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 = item.content\n .filter((content) => content.type === 'output_text')\n .map((content) => content.text)\n .join('\\n')\n .trim();\n if (text) {\n conversation.push({ role: 'assistant', text, createdAt: item.created_at });\n }\n }\n }\n\n return conversation;\n }\n\n private buildRuntimeConfig(task: TaskRecordData): AgentRuntimeConfig {\n if (!isWorkspaceRef(task.workspace)) {\n throw new Error('Task workspace reference is required');\n }\n return {\n workspace: task.workspace,\n runner: this.parseRunner(task.runner),\n };\n }\n\n private parseRunner(runner: string): { protocol: RunnerProtocol; type: RunnerType } {\n const [protocol, type] = runner.split(':');\n return {\n protocol: protocol === 'acp' ? 'acp' : 'pi',\n type: this.isRunnerType(type) ? type : 'pi',\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 computeNextIntervalRunAt(task: TaskRecordData, from: number): number | undefined {\n if (!task.intervalSeconds || task.intervalSeconds <= 0) {\n return undefined;\n }\n return from + task.intervalSeconds;\n }\n\n private computeNextCronRunAt(task: TaskRecordData, from: number): number {\n const firstField = task.cron?.trim().split(/\\s+/)[0];\n const everyMinuteMatch = firstField?.match(/^\\*\\/(\\d+)$/);\n if (everyMinuteMatch) {\n return from + Math.max(1, Number(everyMinuteMatch[1])) * 60;\n }\n return from + 60;\n }\n\n private threadRefFromTask(task: TaskRecordData): ThreadRef {\n const parsed = this.parseThreadResource(task.thread);\n if (parsed) {\n return parsed;\n }\n return toThreadRef({\n thread_id: this.extractThreadId(task.thread),\n });\n }\n\n private resolveTaskThreadParentKey(task: TaskRecordData): string {\n const threadId = this.extractThreadId(task.thread);\n const match = threadId.match(/^task\\/([^/]+)\\//);\n return match ? decodeURIComponent(match[1]) : extractResourceLocalId(task.id);\n }\n\n private parseThreadResource(thread: string): ThreadRef | undefined {\n if (!/^https?:\\/\\//.test(thread)) {\n return undefined;\n }\n try {\n const url = new URL(thread);\n const match = url.pathname.match(/\\/\\.data\\/(?:chat|task)\\/([^/]+)\\/index\\.ttl$/);\n return match\n ? { thread_id: thread as `http://${string}` | `https://${string}` }\n : { thread_id: thread as `http://${string}` | `https://${string}` };\n } catch {\n return undefined;\n }\n }\n\n private extractThreadId(thread: string): string {\n const dataMarker = '/.data/';\n if (/^https?:\\/\\//.test(thread)) {\n try {\n const url = new URL(thread);\n const markerIndex = url.pathname.indexOf(dataMarker);\n if (markerIndex >= 0 && url.hash) {\n return `${url.pathname.slice(markerIndex + dataMarker.length)}${url.hash}`;\n }\n return url.hash.startsWith('#') ? decodeURIComponent(url.hash.slice(1)) : thread;\n } catch {\n return thread;\n }\n }\n if (thread.includes(dataMarker)) {\n return thread.slice(thread.indexOf(dataMarker) + dataMarker.length);\n }\n const urnMarker = 'urn:xpod:thread:';\n if (thread.startsWith(urnMarker)) {\n const parts = thread.slice(urnMarker.length).split(':');\n return parts.length > 1 ? decodeURIComponent(parts[1]) : decodeURIComponent(parts[0]);\n }\n return thread;\n }\n\n private resolveTaskResource(task: TaskRecordData, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n return expandTaskResource(podBaseUrl, task.id);\n }\n return resolveTaskUrn(task.id);\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 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 hasSaveTask(value: unknown): value is { saveTask(task: TaskRecordData, context: TContext): Promise<void> } {\n return typeof (value as { saveTask?: unknown }).saveTask === 'function';\n }\n}\n"]}
@@ -7,7 +7,6 @@ import { type TaskTriggerKindType } from './schema';
7
7
  import type { TaskAuthBindingSnapshot } from './TaskAuthBinding';
8
8
  import { type TaskRecordData, type TaskStore } from './store';
9
9
  export interface CreateTaskInput {
10
- surfaceId?: string;
11
10
  title?: string;
12
11
  prompt: string;
13
12
  workspace: WorkspaceRef;
@@ -50,7 +49,6 @@ export declare class TaskService<TContext = StoreContext> {
50
49
  private normalizeAuthBinding;
51
50
  private initialNextRunAt;
52
51
  private parseRunnerMetadata;
53
- private normalizeSurfaceId;
54
52
  private resolveThreadResource;
55
53
  private resolvePodBaseUrl;
56
54
  private resolveWebId;
@@ -26,16 +26,13 @@ class TaskService {
26
26
  const triggerKind = input.triggerKind ?? schema_1.TaskTriggerKind.ONCE;
27
27
  this.validateTrigger(input, triggerKind);
28
28
  const authBinding = this.normalizeAuthBinding(input.authBinding);
29
- const surfaceId = this.normalizeSurfaceId(input.surfaceId ?? 'default');
30
29
  const now = (0, types_1.nowTimestamp)();
31
30
  const taskId = (0, store_2.generateTaskResourceId)({
32
31
  key: (0, types_1.generateId)('task'),
33
- surfaceId,
34
32
  createdAt: now,
35
33
  });
36
34
  const thread = await this.createTaskThread({
37
35
  taskId,
38
- surfaceId,
39
36
  title: input.title,
40
37
  workspace: input.workspace,
41
38
  runner: input.runner ?? 'pi:pi',
@@ -44,7 +41,6 @@ class TaskService {
44
41
  });
45
42
  const task = {
46
43
  id: taskId,
47
- surfaceId,
48
44
  title: input.title,
49
45
  prompt: input.prompt,
50
46
  thread: this.resolveThreadResource(thread, context),
@@ -129,8 +125,10 @@ class TaskService {
129
125
  }
130
126
  async createTaskThread(input) {
131
127
  const now = (0, types_1.nowTimestamp)();
128
+ const taskParentKey = (0, store_1.extractResourceLocalId)(input.taskId);
132
129
  const thread = {
133
- id: `task/${input.surfaceId}/index.ttl#${(0, types_1.generateId)('thread')}`,
130
+ id: `task/${taskParentKey}/index.ttl#${(0, types_1.generateId)('thread')}`,
131
+ parent: `task/index.ttl#${taskParentKey}`,
134
132
  title: input.title,
135
133
  status: { type: 'active' },
136
134
  workspace: input.workspace,
@@ -138,9 +136,6 @@ class TaskService {
138
136
  updated_at: now,
139
137
  metadata: {
140
138
  ...(input.metadata ?? {}),
141
- commandKind: 'task',
142
- surface_id: input.surfaceId,
143
- chat_id: input.surfaceId,
144
139
  taskId: input.taskId,
145
140
  runtime: {
146
141
  workspace: input.workspace,
@@ -193,21 +188,16 @@ class TaskService {
193
188
  type: type || 'pi',
194
189
  };
195
190
  }
196
- normalizeSurfaceId(value) {
197
- return value.trim().replace(/[^A-Za-z0-9._~-]+/g, '-').replace(/^-+|-+$/g, '') || 'default';
198
- }
199
191
  resolveThreadResource(thread, context) {
200
192
  const podBaseUrl = this.resolvePodBaseUrl(context);
201
- const surfaceId = typeof thread.metadata?.surface_id === 'string'
202
- ? thread.metadata.surface_id
203
- : (typeof thread.metadata?.chat_id === 'string' ? thread.metadata.chat_id : types_1.DEFAULT_THREAD_CHAT_ID);
204
193
  if (podBaseUrl) {
205
194
  if (thread.id.includes('#') && !thread.id.startsWith('#')) {
206
195
  return (0, store_1.resolveDataResource)(podBaseUrl, thread.id);
207
196
  }
208
- return `${podBaseUrl}/.data/task/${surfaceId}/index.ttl#${thread.id}`;
197
+ return (0, store_1.resolveDataResource)(podBaseUrl, `task/${(0, store_1.extractResourceLocalId)(thread.parent ?? thread.id)}/index.ttl#${thread.id}`);
209
198
  }
210
- return `urn:xpod:thread:task:${encodeURIComponent(surfaceId)}:${encodeURIComponent(thread.id)}`;
199
+ const parentKey = (0, store_1.extractResourceLocalId)(thread.parent ?? thread.id);
200
+ return `urn:xpod:thread:task:${encodeURIComponent(parentKey)}:${encodeURIComponent(thread.id)}`;
211
201
  }
212
202
  resolvePodBaseUrl(context) {
213
203
  const webId = this.resolveWebId(context);
@@ -1 +1 @@
1
- {"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../../src/api/tasks/TaskService.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatKitStore, StoreContext } from '../chatkit/store';\nimport type { ThreadMetadata } from '../chatkit/types';\nimport {\n DEFAULT_THREAD_CHAT_ID,\n generateId,\n nowTimestamp,\n} from '../chatkit/types';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { resolveDataResource, type RunStore } from '../runs/store';\nimport { isWorkspaceRef, type WorkspaceRef } from '../workspace/types';\nimport { TaskMaterializer, type MaterializedTaskRun } from './TaskMaterializer';\nimport { TaskStatus, TaskTriggerKind, type TaskTriggerKindType } from './schema';\nimport type { TaskAuthBindingSnapshot } from './TaskAuthBinding';\nimport { generateTaskResourceId, type TaskRecordData, type TaskStore } from './store';\n\nexport interface CreateTaskInput {\n surfaceId?: string;\n title?: string;\n prompt: string;\n workspace: WorkspaceRef;\n runner?: string;\n triggerKind?: TaskTriggerKindType;\n cron?: string;\n intervalSeconds?: number;\n eventName?: string;\n startAt?: number;\n authBinding: TaskAuthBindingSnapshot;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateTaskResult {\n task: TaskRecordData;\n run?: MaterializedTaskRun['run'];\n}\n\nexport interface TaskServiceOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext> & RunStore<TContext> & TaskStore<TContext>;\n executionBackend?: RunExecutionBackend;\n executeRuns?: boolean;\n}\n\nexport class TaskService<TContext = StoreContext> {\n private readonly store: ChatKitStore<TContext> & RunStore<TContext> & TaskStore<TContext>;\n private readonly materializer: TaskMaterializer<TContext>;\n\n public constructor(options: TaskServiceOptions<TContext>) {\n this.store = options.store;\n this.materializer = new TaskMaterializer({\n store: options.store,\n executionBackend: options.executionBackend,\n executeRuns: options.executeRuns,\n });\n }\n\n public async createTask(input: CreateTaskInput, context: TContext): Promise<CreateTaskResult> {\n if (!input.prompt.trim()) {\n throw new Error('Task prompt is required');\n }\n if (!isWorkspaceRef(input.workspace)) {\n throw new Error('Task workspace reference is required');\n }\n\n const triggerKind = input.triggerKind ?? TaskTriggerKind.ONCE;\n this.validateTrigger(input, triggerKind);\n const authBinding = this.normalizeAuthBinding(input.authBinding);\n\n const surfaceId = this.normalizeSurfaceId(input.surfaceId ?? 'default');\n const now = nowTimestamp();\n const taskId = generateTaskResourceId({\n key: generateId('task'),\n surfaceId,\n createdAt: now,\n });\n const thread = await this.createTaskThread({\n taskId,\n surfaceId,\n title: input.title,\n workspace: input.workspace,\n runner: input.runner ?? 'pi:pi',\n metadata: input.metadata,\n context,\n });\n\n const task: TaskRecordData = {\n id: taskId,\n surfaceId,\n title: input.title,\n prompt: input.prompt,\n thread: this.resolveThreadResource(thread, context),\n workspace: input.workspace,\n runner: input.runner ?? 'pi:pi',\n status: TaskStatus.ACTIVE,\n triggerKind,\n cron: input.cron,\n intervalSeconds: input.intervalSeconds,\n eventName: input.eventName,\n nextRunAt: this.initialNextRunAt(input, triggerKind, now),\n authBinding,\n metadata: {\n ...(input.metadata ?? {}),\n authBinding,\n },\n createdAt: now,\n updatedAt: now,\n };\n\n await this.store.saveTask(task, context);\n\n if (triggerKind === TaskTriggerKind.ONCE) {\n const materialized = await this.materializer.materialize({\n task,\n context,\n trigger: {\n kind: 'once',\n scheduledFor: now,\n },\n });\n return { task: materialized.task, run: materialized.run };\n }\n\n return { task };\n }\n\n public async loadTask(taskId: string, context: TContext): Promise<TaskRecordData> {\n return this.store.loadTask(taskId, context);\n }\n\n public async listTasks(context: TContext): Promise<TaskRecordData[]> {\n return this.store.listTasks({}, context);\n }\n\n public async materializeDueTasks(\n context: TContext,\n options: { now?: number; limit?: number } = {},\n ): Promise<MaterializedTaskRun[]> {\n const now = options.now ?? nowTimestamp();\n const dueTasks = await this.store.listTasks({\n status: TaskStatus.ACTIVE,\n dueAt: now,\n limit: options.limit,\n }, context);\n\n const materialized: MaterializedTaskRun[] = [];\n for (const task of dueTasks) {\n if (task.triggerKind !== TaskTriggerKind.INTERVAL && task.triggerKind !== TaskTriggerKind.CRON) {\n continue;\n }\n materialized.push(await this.materializer.materialize({\n task,\n context,\n trigger: {\n kind: task.triggerKind,\n scheduledFor: task.nextRunAt ?? now,\n },\n }));\n }\n return materialized;\n }\n\n public async materializeEventTasks(input: {\n eventName: string;\n payload?: Record<string, unknown>;\n context: TContext;\n }): Promise<MaterializedTaskRun[]> {\n const tasks = await this.store.listTasks({\n status: TaskStatus.ACTIVE,\n triggerKind: TaskTriggerKind.EVENT,\n eventName: input.eventName,\n }, input.context);\n\n const materialized: MaterializedTaskRun[] = [];\n for (const task of tasks) {\n materialized.push(await this.materializer.materialize({\n task,\n context: input.context,\n trigger: {\n kind: 'event',\n eventName: input.eventName,\n payload: input.payload,\n },\n }));\n }\n return materialized;\n }\n\n private async createTaskThread(input: {\n taskId: string;\n surfaceId: string;\n title?: string;\n workspace: WorkspaceRef;\n runner: string;\n metadata?: Record<string, unknown>;\n context: TContext;\n }): Promise<ThreadMetadata> {\n const now = nowTimestamp();\n const thread: ThreadMetadata = {\n id: `task/${input.surfaceId}/index.ttl#${generateId('thread')}`,\n title: input.title,\n status: { type: 'active' },\n workspace: input.workspace,\n created_at: now,\n updated_at: now,\n metadata: {\n ...(input.metadata ?? {}),\n commandKind: 'task',\n surface_id: input.surfaceId,\n chat_id: input.surfaceId,\n taskId: input.taskId,\n runtime: {\n workspace: input.workspace,\n runner: this.parseRunnerMetadata(input.runner),\n },\n },\n };\n await this.store.saveThread(thread, input.context);\n return thread;\n }\n\n private validateTrigger(input: CreateTaskInput, triggerKind: TaskTriggerKindType): void {\n if (!input.authBinding) {\n throw new Error('Task auth binding is required');\n }\n if (triggerKind === TaskTriggerKind.INTERVAL && (!input.intervalSeconds || input.intervalSeconds <= 0)) {\n throw new Error('intervalSeconds must be a positive number for interval tasks');\n }\n if (triggerKind === TaskTriggerKind.CRON && !input.cron?.trim()) {\n throw new Error('cron is required for cron tasks');\n }\n if (triggerKind === TaskTriggerKind.EVENT && !input.eventName?.trim()) {\n throw new Error('eventName is required for event tasks');\n }\n }\n\n private normalizeAuthBinding(input: TaskAuthBindingSnapshot): TaskAuthBindingSnapshot {\n if (!input.id.trim()) {\n throw new Error('Task auth binding id is required');\n }\n if (!input.webId.trim()) {\n throw new Error('Task auth binding webId is required');\n }\n if (!input.clientId.trim()) {\n throw new Error('Task auth binding clientId is required');\n }\n return { ...input };\n }\n\n private initialNextRunAt(input: CreateTaskInput, triggerKind: TaskTriggerKindType, now: number): number | undefined {\n if (triggerKind === TaskTriggerKind.INTERVAL) {\n return input.startAt ?? now;\n }\n if (triggerKind === TaskTriggerKind.CRON) {\n return input.startAt ?? now;\n }\n return undefined;\n }\n\n private parseRunnerMetadata(runner: string): { protocol: string; type: string } {\n const [protocol, type] = runner.split(':');\n return {\n protocol: protocol === 'acp' ? 'acp' : 'pi',\n type: type || 'pi',\n };\n }\n\n private normalizeSurfaceId(value: string): string {\n return value.trim().replace(/[^A-Za-z0-9._~-]+/g, '-').replace(/^-+|-+$/g, '') || 'default';\n }\n\n private resolveThreadResource(thread: ThreadMetadata, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n const surfaceId = typeof thread.metadata?.surface_id === 'string'\n ? thread.metadata.surface_id\n : (typeof thread.metadata?.chat_id === 'string' ? thread.metadata.chat_id : DEFAULT_THREAD_CHAT_ID);\n if (podBaseUrl) {\n if (thread.id.includes('#') && !thread.id.startsWith('#')) {\n return resolveDataResource(podBaseUrl, thread.id);\n }\n return `${podBaseUrl}/.data/task/${surfaceId}/index.ttl#${thread.id}`;\n }\n return `urn:xpod:thread:task:${encodeURIComponent(surfaceId)}:${encodeURIComponent(thread.id)}`;\n }\n\n private resolvePodBaseUrl(context: TContext): string | undefined {\n const webId = this.resolveWebId(context);\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 resolveWebId(context: TContext): string | undefined {\n const auth = (context as Record<string, unknown>).auth as { webId?: unknown } | undefined;\n return typeof auth?.webId === 'string' ? auth.webId : undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../../src/api/tasks/TaskService.ts"],"names":[],"mappings":";;;AAEA,4CAG0B;AAE1B,yCAA2F;AAC3F,8CAAuE;AACvE,yDAAgF;AAChF,qCAAiF;AAEjF,mCAAsF;AA2BtF,MAAa,WAAW;IAItB,YAAmB,OAAqC;QACtD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,mCAAgB,CAAC;YACvC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,KAAsB,EAAE,OAAiB;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,IAAA,sBAAc,EAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,wBAAe,CAAC,IAAI,CAAC;QAC9D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAA,8BAAsB,EAAC;YACpC,GAAG,EAAE,IAAA,kBAAU,EAAC,MAAM,CAAC;YACvB,SAAS,EAAE,GAAG;SACf,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC;YACzC,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,OAAO;YAC/B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,IAAI,GAAmB;YAC3B,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;YACnD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,OAAO;YAC/B,MAAM,EAAE,mBAAU,CAAC,MAAM;YACzB,WAAW;YACX,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC;YACzD,WAAW;YACX,QAAQ,EAAE;gBACR,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACzB,WAAW;aACZ;YACD,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEzC,IAAI,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;gBACvD,IAAI;gBACJ,OAAO;gBACP,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,GAAG;iBAClB;aACF,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC;QAC5D,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAiB;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAAiB;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAC9B,OAAiB,EACjB,UAA4C,EAAE;QAE9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAA,oBAAY,GAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YAC1C,MAAM,EAAE,mBAAU,CAAC,MAAM;YACzB,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,EAAE,OAAO,CAAC,CAAC;QAEZ,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;gBAC/F,SAAS;YACX,CAAC;YACD,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;gBACpD,IAAI;gBACJ,OAAO;gBACP,OAAO,EAAE;oBACP,IAAI,EAAE,IAAI,CAAC,WAAW;oBACtB,YAAY,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;iBACpC;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,KAIlC;QACC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACvC,MAAM,EAAE,mBAAU,CAAC,MAAM;YACzB,WAAW,EAAE,wBAAe,CAAC,KAAK;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAElB,MAAM,YAAY,GAA0B,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;gBACpD,IAAI;gBACJ,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAO9B;QACC,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAA,8BAAsB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAmB;YAC7B,EAAE,EAAE,QAAQ,aAAa,cAAc,IAAA,kBAAU,EAAC,QAAQ,CAAC,EAAE;YAC7D,MAAM,EAAE,kBAAkB,aAAa,EAAE;YACzC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE;gBACR,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;gBACzB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,OAAO,EAAE;oBACP,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;iBAC/C;aACF;SACF,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,eAAe,CAAC,KAAsB,EAAE,WAAgC;QAC9E,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,WAAW,KAAK,wBAAe,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC,EAAE,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,WAAW,KAAK,wBAAe,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,WAAW,KAAK,wBAAe,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,KAA8B;QACzD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;IACtB,CAAC;IAEO,gBAAgB,CAAC,KAAsB,EAAE,WAAgC,EAAE,GAAW;QAC5F,IAAI,WAAW,KAAK,wBAAe,CAAC,QAAQ,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;QAC9B,CAAC;QACD,IAAI,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;QAC9B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,mBAAmB,CAAC,MAAc;QACxC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO;YACL,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YAC3C,IAAI,EAAE,IAAI,IAAI,IAAI;SACnB,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,MAAsB,EAAE,OAAiB;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1D,OAAO,IAAA,2BAAmB,EAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAA,2BAAmB,EAAC,UAAU,EAAE,QAAQ,IAAA,8BAAsB,EAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,cAAc,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9H,CAAC;QACD,MAAM,SAAS,GAAG,IAAA,8BAAsB,EAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,wBAAwB,kBAAkB,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAClG,CAAC;IAEO,iBAAiB,CAAC,OAAiB;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3B,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC9C,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YACxE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;YACvB,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,OAAiB;QACpC,MAAM,IAAI,GAAI,OAAmC,CAAC,IAAuC,CAAC;QAC1F,OAAO,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;CACF;AA9PD,kCA8PC","sourcesContent":["import type { ChatKitStore, StoreContext } from '../chatkit/store';\nimport type { ThreadMetadata } from '../chatkit/types';\nimport {\n generateId,\n nowTimestamp,\n} from '../chatkit/types';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { extractResourceLocalId, resolveDataResource, type RunStore } from '../runs/store';\nimport { isWorkspaceRef, type WorkspaceRef } from '../workspace/types';\nimport { TaskMaterializer, type MaterializedTaskRun } from './TaskMaterializer';\nimport { TaskStatus, TaskTriggerKind, type TaskTriggerKindType } from './schema';\nimport type { TaskAuthBindingSnapshot } from './TaskAuthBinding';\nimport { generateTaskResourceId, type TaskRecordData, type TaskStore } from './store';\n\nexport interface CreateTaskInput {\n title?: string;\n prompt: string;\n workspace: WorkspaceRef;\n runner?: string;\n triggerKind?: TaskTriggerKindType;\n cron?: string;\n intervalSeconds?: number;\n eventName?: string;\n startAt?: number;\n authBinding: TaskAuthBindingSnapshot;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateTaskResult {\n task: TaskRecordData;\n run?: MaterializedTaskRun['run'];\n}\n\nexport interface TaskServiceOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext> & RunStore<TContext> & TaskStore<TContext>;\n executionBackend?: RunExecutionBackend;\n executeRuns?: boolean;\n}\n\nexport class TaskService<TContext = StoreContext> {\n private readonly store: ChatKitStore<TContext> & RunStore<TContext> & TaskStore<TContext>;\n private readonly materializer: TaskMaterializer<TContext>;\n\n public constructor(options: TaskServiceOptions<TContext>) {\n this.store = options.store;\n this.materializer = new TaskMaterializer({\n store: options.store,\n executionBackend: options.executionBackend,\n executeRuns: options.executeRuns,\n });\n }\n\n public async createTask(input: CreateTaskInput, context: TContext): Promise<CreateTaskResult> {\n if (!input.prompt.trim()) {\n throw new Error('Task prompt is required');\n }\n if (!isWorkspaceRef(input.workspace)) {\n throw new Error('Task workspace reference is required');\n }\n\n const triggerKind = input.triggerKind ?? TaskTriggerKind.ONCE;\n this.validateTrigger(input, triggerKind);\n const authBinding = this.normalizeAuthBinding(input.authBinding);\n\n const now = nowTimestamp();\n const taskId = generateTaskResourceId({\n key: generateId('task'),\n createdAt: now,\n });\n const thread = await this.createTaskThread({\n taskId,\n title: input.title,\n workspace: input.workspace,\n runner: input.runner ?? 'pi:pi',\n metadata: input.metadata,\n context,\n });\n\n const task: TaskRecordData = {\n id: taskId,\n title: input.title,\n prompt: input.prompt,\n thread: this.resolveThreadResource(thread, context),\n workspace: input.workspace,\n runner: input.runner ?? 'pi:pi',\n status: TaskStatus.ACTIVE,\n triggerKind,\n cron: input.cron,\n intervalSeconds: input.intervalSeconds,\n eventName: input.eventName,\n nextRunAt: this.initialNextRunAt(input, triggerKind, now),\n authBinding,\n metadata: {\n ...(input.metadata ?? {}),\n authBinding,\n },\n createdAt: now,\n updatedAt: now,\n };\n\n await this.store.saveTask(task, context);\n\n if (triggerKind === TaskTriggerKind.ONCE) {\n const materialized = await this.materializer.materialize({\n task,\n context,\n trigger: {\n kind: 'once',\n scheduledFor: now,\n },\n });\n return { task: materialized.task, run: materialized.run };\n }\n\n return { task };\n }\n\n public async loadTask(taskId: string, context: TContext): Promise<TaskRecordData> {\n return this.store.loadTask(taskId, context);\n }\n\n public async listTasks(context: TContext): Promise<TaskRecordData[]> {\n return this.store.listTasks({}, context);\n }\n\n public async materializeDueTasks(\n context: TContext,\n options: { now?: number; limit?: number } = {},\n ): Promise<MaterializedTaskRun[]> {\n const now = options.now ?? nowTimestamp();\n const dueTasks = await this.store.listTasks({\n status: TaskStatus.ACTIVE,\n dueAt: now,\n limit: options.limit,\n }, context);\n\n const materialized: MaterializedTaskRun[] = [];\n for (const task of dueTasks) {\n if (task.triggerKind !== TaskTriggerKind.INTERVAL && task.triggerKind !== TaskTriggerKind.CRON) {\n continue;\n }\n materialized.push(await this.materializer.materialize({\n task,\n context,\n trigger: {\n kind: task.triggerKind,\n scheduledFor: task.nextRunAt ?? now,\n },\n }));\n }\n return materialized;\n }\n\n public async materializeEventTasks(input: {\n eventName: string;\n payload?: Record<string, unknown>;\n context: TContext;\n }): Promise<MaterializedTaskRun[]> {\n const tasks = await this.store.listTasks({\n status: TaskStatus.ACTIVE,\n triggerKind: TaskTriggerKind.EVENT,\n eventName: input.eventName,\n }, input.context);\n\n const materialized: MaterializedTaskRun[] = [];\n for (const task of tasks) {\n materialized.push(await this.materializer.materialize({\n task,\n context: input.context,\n trigger: {\n kind: 'event',\n eventName: input.eventName,\n payload: input.payload,\n },\n }));\n }\n return materialized;\n }\n\n private async createTaskThread(input: {\n taskId: string;\n title?: string;\n workspace: WorkspaceRef;\n runner: string;\n metadata?: Record<string, unknown>;\n context: TContext;\n }): Promise<ThreadMetadata> {\n const now = nowTimestamp();\n const taskParentKey = extractResourceLocalId(input.taskId);\n const thread: ThreadMetadata = {\n id: `task/${taskParentKey}/index.ttl#${generateId('thread')}`,\n parent: `task/index.ttl#${taskParentKey}`,\n title: input.title,\n status: { type: 'active' },\n workspace: input.workspace,\n created_at: now,\n updated_at: now,\n metadata: {\n ...(input.metadata ?? {}),\n taskId: input.taskId,\n runtime: {\n workspace: input.workspace,\n runner: this.parseRunnerMetadata(input.runner),\n },\n },\n };\n await this.store.saveThread(thread, input.context);\n return thread;\n }\n\n private validateTrigger(input: CreateTaskInput, triggerKind: TaskTriggerKindType): void {\n if (!input.authBinding) {\n throw new Error('Task auth binding is required');\n }\n if (triggerKind === TaskTriggerKind.INTERVAL && (!input.intervalSeconds || input.intervalSeconds <= 0)) {\n throw new Error('intervalSeconds must be a positive number for interval tasks');\n }\n if (triggerKind === TaskTriggerKind.CRON && !input.cron?.trim()) {\n throw new Error('cron is required for cron tasks');\n }\n if (triggerKind === TaskTriggerKind.EVENT && !input.eventName?.trim()) {\n throw new Error('eventName is required for event tasks');\n }\n }\n\n private normalizeAuthBinding(input: TaskAuthBindingSnapshot): TaskAuthBindingSnapshot {\n if (!input.id.trim()) {\n throw new Error('Task auth binding id is required');\n }\n if (!input.webId.trim()) {\n throw new Error('Task auth binding webId is required');\n }\n if (!input.clientId.trim()) {\n throw new Error('Task auth binding clientId is required');\n }\n return { ...input };\n }\n\n private initialNextRunAt(input: CreateTaskInput, triggerKind: TaskTriggerKindType, now: number): number | undefined {\n if (triggerKind === TaskTriggerKind.INTERVAL) {\n return input.startAt ?? now;\n }\n if (triggerKind === TaskTriggerKind.CRON) {\n return input.startAt ?? now;\n }\n return undefined;\n }\n\n private parseRunnerMetadata(runner: string): { protocol: string; type: string } {\n const [protocol, type] = runner.split(':');\n return {\n protocol: protocol === 'acp' ? 'acp' : 'pi',\n type: type || 'pi',\n };\n }\n\n private resolveThreadResource(thread: ThreadMetadata, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n if (thread.id.includes('#') && !thread.id.startsWith('#')) {\n return resolveDataResource(podBaseUrl, thread.id);\n }\n return resolveDataResource(podBaseUrl, `task/${extractResourceLocalId(thread.parent ?? thread.id)}/index.ttl#${thread.id}`);\n }\n const parentKey = extractResourceLocalId(thread.parent ?? thread.id);\n return `urn:xpod:thread:task:${encodeURIComponent(parentKey)}:${encodeURIComponent(thread.id)}`;\n }\n\n private resolvePodBaseUrl(context: TContext): string | undefined {\n const webId = this.resolveWebId(context);\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 resolveWebId(context: TContext): string | undefined {\n const auth = (context as Record<string, unknown>).auth as { webId?: unknown } | undefined;\n return typeof auth?.webId === 'string' ? auth.webId : undefined;\n }\n}\n"]}
@@ -4,7 +4,6 @@ import type { TaskStatusType, TaskTriggerKindType } from './schema';
4
4
  export interface TaskRecordData {
5
5
  /** Base-relative Solid resource id, e.g. `index.ttl#task_x`. */
6
6
  id: string;
7
- surfaceId: string;
8
7
  title?: string;
9
8
  prompt: string;
10
9
  thread: string;
@@ -38,7 +37,6 @@ export declare function isTaskResourceId(value: string | null | undefined): valu
38
37
  export declare function buildTaskResourceId(id: string): string;
39
38
  export declare function generateTaskResourceId(input: string | {
40
39
  key: string;
41
- surfaceId: string;
42
40
  createdAt?: number;
43
41
  }): string;
44
42
  export declare function generateDefaultTaskResourceId(key: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/tasks/store.ts"],"names":[],"mappings":";;AAwCA,4CAGC;AAED,kDAKC;AAED,wDAaC;AAED,sEAEC;AAED,kDAOC;AAED,wCAEC;AA1CD,SAAgB,gBAAgB,CAAC,KAAgC;IAC/D,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,mBAAmB,CAAC,EAAU;IAC5C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gEAAgE,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAItC;IACC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1D,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4DAA4D,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,aAAa,GAAG,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,6BAA6B,CAAC,GAAW;IACvD,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,mBAAmB,CAAC,UAAkB,EAAE,MAAc;IACpE,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,OAAO,GAAG,IAAI,eAAe,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc;IAC3C,OAAO,iBAAiB,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC","sourcesContent":["import type { WorkspaceRef } from '../workspace/types';\nimport type { TaskAuthBindingSnapshot } from './TaskAuthBinding';\nimport type { TaskStatusType, TaskTriggerKindType } from './schema';\n\nexport interface TaskRecordData {\n /** Base-relative Solid resource id, e.g. `index.ttl#task_x`. */\n id: string;\n surfaceId: string;\n title?: string;\n prompt: string;\n thread: string;\n workspace: WorkspaceRef;\n runner: string;\n status: TaskStatusType;\n triggerKind: TaskTriggerKindType;\n cron?: string;\n intervalSeconds?: number;\n eventName?: string;\n nextRunAt?: number;\n lastRunAt?: number;\n authBinding?: TaskAuthBindingSnapshot;\n metadata?: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface TaskListOptions {\n status?: TaskStatusType;\n triggerKind?: TaskTriggerKindType;\n eventName?: string;\n dueAt?: number;\n limit?: number;\n}\n\nexport interface TaskStore<TContext> {\n saveTask(task: TaskRecordData, context: TContext): Promise<void>;\n loadTask(taskId: string, context: TContext): Promise<TaskRecordData>;\n listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]>;\n}\n\nexport function isTaskResourceId(value: string | null | undefined): value is string {\n return typeof value === 'string'\n && /^index\\.ttl#[^#/]+$/.test(value);\n}\n\nexport function buildTaskResourceId(id: string): string {\n if (!isTaskResourceId(id)) {\n throw new Error(`Task id must be a complete Task resource id under index.ttl: ${id}`);\n }\n return id;\n}\n\nexport function generateTaskResourceId(input: string | {\n key: string;\n surfaceId: string;\n createdAt?: number;\n}): string {\n const key = typeof input === 'string' ? input : input.key;\n if (/^index\\.ttl#[^#/]+$/.test(key)) {\n throw new Error(`Task id generator requires a local key, got resource id: ${key}`);\n }\n if (/\\.ttl(?:#|$)/i.test(key) || key.includes('/') || key.includes('#')) {\n throw new Error(`Task id generator requires a local key: ${key}`);\n }\n return `index.ttl#${key}`;\n}\n\nexport function generateDefaultTaskResourceId(key: string): string {\n return generateTaskResourceId(key);\n}\n\nexport function resolveTaskResource(podBaseUrl: string, taskId: string): string {\n if (/^https?:\\/\\//.test(taskId)) {\n return taskId;\n }\n const base = podBaseUrl.replace(/\\/$/, '');\n const relative = buildTaskResourceId(taskId).replace(/^\\/+/, '');\n return `${base}/.data/task/${relative}`;\n}\n\nexport function resolveTaskUrn(taskId: string): string {\n return `urn:xpod:task:${encodeURIComponent(buildTaskResourceId(taskId))}`;\n}\n"]}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/tasks/store.ts"],"names":[],"mappings":";;AAuCA,4CAGC;AAED,kDAKC;AAED,wDAYC;AAED,sEAEC;AAED,kDAOC;AAED,wCAEC;AAzCD,SAAgB,gBAAgB,CAAC,KAAgC;IAC/D,OAAO,OAAO,KAAK,KAAK,QAAQ;WAC3B,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,mBAAmB,CAAC,EAAU;IAC5C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,gEAAgE,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,sBAAsB,CAAC,KAGtC;IACC,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1D,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4DAA4D,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,aAAa,GAAG,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,6BAA6B,CAAC,GAAW;IACvD,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,SAAgB,mBAAmB,CAAC,UAAkB,EAAE,MAAc;IACpE,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjE,OAAO,GAAG,IAAI,eAAe,QAAQ,EAAE,CAAC;AAC1C,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc;IAC3C,OAAO,iBAAiB,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AAC5E,CAAC","sourcesContent":["import type { WorkspaceRef } from '../workspace/types';\nimport type { TaskAuthBindingSnapshot } from './TaskAuthBinding';\nimport type { TaskStatusType, TaskTriggerKindType } from './schema';\n\nexport interface TaskRecordData {\n /** Base-relative Solid resource id, e.g. `index.ttl#task_x`. */\n id: string;\n title?: string;\n prompt: string;\n thread: string;\n workspace: WorkspaceRef;\n runner: string;\n status: TaskStatusType;\n triggerKind: TaskTriggerKindType;\n cron?: string;\n intervalSeconds?: number;\n eventName?: string;\n nextRunAt?: number;\n lastRunAt?: number;\n authBinding?: TaskAuthBindingSnapshot;\n metadata?: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface TaskListOptions {\n status?: TaskStatusType;\n triggerKind?: TaskTriggerKindType;\n eventName?: string;\n dueAt?: number;\n limit?: number;\n}\n\nexport interface TaskStore<TContext> {\n saveTask(task: TaskRecordData, context: TContext): Promise<void>;\n loadTask(taskId: string, context: TContext): Promise<TaskRecordData>;\n listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]>;\n}\n\nexport function isTaskResourceId(value: string | null | undefined): value is string {\n return typeof value === 'string'\n && /^index\\.ttl#[^#/]+$/.test(value);\n}\n\nexport function buildTaskResourceId(id: string): string {\n if (!isTaskResourceId(id)) {\n throw new Error(`Task id must be a complete Task resource id under index.ttl: ${id}`);\n }\n return id;\n}\n\nexport function generateTaskResourceId(input: string | {\n key: string;\n createdAt?: number;\n}): string {\n const key = typeof input === 'string' ? input : input.key;\n if (/^index\\.ttl#[^#/]+$/.test(key)) {\n throw new Error(`Task id generator requires a local key, got resource id: ${key}`);\n }\n if (/\\.ttl(?:#|$)/i.test(key) || key.includes('/') || key.includes('#')) {\n throw new Error(`Task id generator requires a local key: ${key}`);\n }\n return `index.ttl#${key}`;\n}\n\nexport function generateDefaultTaskResourceId(key: string): string {\n return generateTaskResourceId(key);\n}\n\nexport function resolveTaskResource(podBaseUrl: string, taskId: string): string {\n if (/^https?:\\/\\//.test(taskId)) {\n return taskId;\n }\n const base = podBaseUrl.replace(/\\/$/, '');\n const relative = buildTaskResourceId(taskId).replace(/^\\/+/, '');\n return `${base}/.data/task/${relative}`;\n}\n\nexport function resolveTaskUrn(taskId: string): string {\n return `urn:xpod:task:${encodeURIComponent(buildTaskResourceId(taskId))}`;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { CommandModule } from 'yargs';
2
2
  interface AuthArgs {
3
- url: string;
3
+ url?: string;
4
4
  json?: boolean;
5
5
  }
6
6
  export declare const authCommand: CommandModule<object, AuthArgs>;
@@ -83,14 +83,14 @@ const loginCommand = {
83
83
  clientSecret: cred.secret ?? '',
84
84
  },
85
85
  });
86
- const data = { baseUrl, webId, configPath: (0, credentials_store_1.getConfigPath)() };
86
+ const data = { baseUrl, webId, credentialsPath: (0, credentials_store_1.getSolidCredentialsPath)() };
87
87
  if (argv.json) {
88
88
  (0, output_1.writeJsonResult)(data);
89
89
  return;
90
90
  }
91
91
  console.log('Login successful. Credentials saved.');
92
92
  console.log(` webId: ${webId}`);
93
- console.log(` config: ${(0, credentials_store_1.getConfigPath)().replace('/config.json', '/')}`);
93
+ console.log(` credentials: ${(0, credentials_store_1.getSolidCredentialsPath)()}`);
94
94
  },
95
95
  };
96
96
  const createCredentialsCommand = {
@@ -162,7 +162,7 @@ const createCredentialsCommand = {
162
162
  clientSecret: cred.secret ?? '',
163
163
  },
164
164
  });
165
- console.log(`\nSaved to ${(0, credentials_store_1.getConfigPath)().replace('/config.json', '/')}`);
165
+ console.log(`\nSaved to ${(0, credentials_store_1.getSolidCredentialsPath)()}`);
166
166
  console.log('\n✓ Setup complete! You can now use xpod commands without entering password.');
167
167
  console.log(' Example: xpod backup export');
168
168
  }
@@ -269,7 +269,7 @@ const revokeCommand = {
269
269
  };
270
270
  const logoutCommand = {
271
271
  command: 'logout',
272
- describe: 'Remove stored credentials from ~/.xpod/',
272
+ describe: 'Remove stored credentials from the shared Solid auth store',
273
273
  builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),
274
274
  handler: async (argv) => {
275
275
  (0, credentials_store_1.clearCredentials)();
@@ -328,7 +328,6 @@ exports.authCommand = {
328
328
  alias: 'u',
329
329
  type: 'string',
330
330
  description: 'Server base URL',
331
- default: process.env.CSS_BASE_URL || 'http://localhost:3000',
332
331
  })
333
332
  .command(statusCommand)
334
333
  .command(loginCommand)
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CommandModule } from 'yargs';\nimport {\n checkServer,\n login,\n getAccountControls,\n getAccountData,\n createClientCredentials,\n listClientCredentials,\n revokeClientCredential,\n} from '../lib/css-account';\nimport { saveCredentials, clearCredentials, getConfigPath } from '../lib/credentials-store';\nimport { promptPassword, promptText } from '../lib/prompt';\nimport { getStoredAuthStatus } from '../lib/auth-context';\nimport { CliCommandError, handleCliError, writeJsonResult } from '../lib/output';\n\ninterface AuthArgs {\n url: string;\n json?: boolean;\n}\n\ninterface LoginArgs extends AuthArgs {\n email?: string;\n password?: string;\n issuer?: string;\n 'web-id'?: string;\n}\n\ninterface CreateCredentialsArgs extends AuthArgs {\n email?: string;\n password?: string;\n 'web-id'?: string;\n name?: string;\n output?: boolean;\n}\n\ninterface ListArgs extends AuthArgs {\n email?: string;\n password?: string;\n}\n\ninterface RevokeArgs extends AuthArgs {\n email?: string;\n password?: string;\n 'client-id': string;\n}\n\nfunction resolveUrl(url: string): string {\n const raw = url || process.env.CSS_BASE_URL || 'http://localhost:3000';\n return raw.endsWith('/') ? raw : `${raw}/`;\n}\n\nasync function resolveExplicitWebId(input: {\n token: string;\n baseUrl: string;\n explicitWebId?: string;\n}): Promise<string> {\n if (input.explicitWebId) {\n return input.explicitWebId;\n }\n\n const accountData = await getAccountData(input.token, input.baseUrl);\n const webIds = accountData ? Object.keys(accountData.webIds) : [];\n if (webIds.length === 1 && webIds[0]) {\n return webIds[0];\n }\n if (webIds.length > 1) {\n throw new CliCommandError(\n 'webid_ambiguous',\n 'Multiple WebIDs are configured. Re-run with --web-id to select the acting identity.',\n 2,\n { webIds },\n );\n }\n throw new CliCommandError('webid_missing', 'No WebID found. Specify --web-id explicitly.', 2);\n}\n\nconst loginCommand: CommandModule<AuthArgs, LoginArgs> = {\n command: 'login',\n describe: 'Login and store CLI client credentials',\n builder: (yargs) =>\n yargs\n .option('issuer', { type: 'string', description: 'Issuer/base URL alias for --url' })\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' })\n .option('web-id', { type: 'string', description: 'WebID to bind credentials to when multiple identities exist' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.issuer ?? argv.url);\n\n if (!(await checkServer(baseUrl))) {\n const error = new Error(`Cannot reach server at ${baseUrl}`);\n handleCliError(error, argv.json === true, 'server_unreachable');\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n handleCliError(new Error('Login failed. Check email/password.'), argv.json === true, 'auth_failed');\n }\n\n const controls = await getAccountControls(token, baseUrl);\n if (!controls?.clientCredentials) {\n handleCliError(new Error('Cannot find client credentials endpoint.'), argv.json === true, 'credentials_endpoint_missing');\n }\n\n const webId = await resolveExplicitWebId({\n token,\n baseUrl,\n explicitWebId: argv['web-id'],\n }).catch((error) => handleCliError(error, argv.json === true));\n\n const cred = await createClientCredentials(token, controls.clientCredentials, webId, 'xpod-cli');\n if (!cred) {\n handleCliError(new Error('Failed to create credentials.'), argv.json === true, 'credentials_create_failed');\n }\n\n saveCredentials({\n url: baseUrl,\n webId,\n authType: 'client_credentials',\n secrets: {\n clientId: cred.id,\n clientSecret: cred.secret ?? '',\n },\n });\n\n const data = { baseUrl, webId, configPath: getConfigPath() };\n if (argv.json) {\n writeJsonResult(data);\n return;\n }\n console.log('Login successful. Credentials saved.');\n console.log(` webId: ${webId}`);\n console.log(` config: ${getConfigPath().replace('/config.json', '/')}`);\n },\n};\n\nconst createCredentialsCommand: CommandModule<AuthArgs, CreateCredentialsArgs> = {\n command: 'create-credentials',\n describe: 'Create client credentials (client_id/secret)',\n builder: (yargs) =>\n yargs\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' })\n .option('web-id', { type: 'string', description: 'WebID to bind credentials to' })\n .option('name', { type: 'string', description: 'Credential label' })\n .option('output', { type: 'boolean', default: false, description: 'Do not save credentials; print non-secret metadata only' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.url);\n\n if (!(await checkServer(baseUrl))) {\n console.error(`Cannot reach server at ${baseUrl}`);\n process.exit(1);\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n console.error('Login failed.');\n process.exit(1);\n }\n\n const controls = await getAccountControls(token, baseUrl);\n if (!controls?.clientCredentials) {\n console.error('Cannot find client credentials endpoint.');\n process.exit(1);\n }\n\n let webId: string;\n try {\n webId = await resolveExplicitWebId({\n token,\n baseUrl,\n explicitWebId: argv['web-id'],\n });\n } catch (error) {\n handleCliError(error, false);\n }\n\n const cred = await createClientCredentials(token, controls.clientCredentials, webId, argv.name);\n if (!cred) {\n console.error('Failed to create credentials.');\n process.exit(1);\n }\n\n if (!argv.output) {\n saveCredentials({\n url: baseUrl,\n webId,\n authType: 'client_credentials',\n secrets: {\n clientId: cred.id,\n clientSecret: cred.secret ?? '',\n },\n });\n console.log(`\\nSaved to ${getConfigPath().replace('/config.json', '/')}`);\n console.log('\\n✓ Setup complete! You can now use xpod commands without entering password.');\n console.log(' Example: xpod backup export');\n } else {\n console.log('Credentials created.');\n }\n console.log(` client_id: ${cred.id}`);\n console.log(` webId: ${webId}`);\n },\n};\n\nconst listCommand: CommandModule<AuthArgs, ListArgs> = {\n command: 'list',\n describe: 'List client credentials',\n builder: (yargs) =>\n yargs\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.url);\n\n if (!(await checkServer(baseUrl))) {\n console.error(`Cannot reach server at ${baseUrl}`);\n process.exit(1);\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n console.error('Login failed.');\n process.exit(1);\n }\n\n const creds = await listClientCredentials(token, baseUrl);\n if (creds.length === 0) {\n console.log('No client credentials found.');\n return;\n }\n\n console.log(`Found ${creds.length} credential(s):\\n`);\n for (const c of creds) {\n console.log(` ${c.id}`);\n if (c.webId) console.log(` webId: ${c.webId}`);\n }\n },\n};\n\nconst revokeCommand: CommandModule<AuthArgs, RevokeArgs> = {\n command: 'revoke',\n describe: 'Revoke a client credential',\n builder: (yargs) =>\n yargs\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' })\n .option('client-id', { type: 'string', demandOption: true, description: 'Client ID to revoke' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.url);\n\n if (!(await checkServer(baseUrl))) {\n console.error(`Cannot reach server at ${baseUrl}`);\n process.exit(1);\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n console.error('Login failed.');\n process.exit(1);\n }\n\n const ok = await revokeClientCredential(token, argv['client-id'], baseUrl);\n if (ok) {\n console.log(`Credential ${argv['client-id']} revoked.`);\n } else {\n console.error(`Failed to revoke credential ${argv['client-id']}.`);\n process.exit(1);\n }\n },\n};\n\nconst logoutCommand: CommandModule<AuthArgs, AuthArgs> = {\n command: 'logout',\n describe: 'Remove stored credentials from ~/.xpod/',\n builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n clearCredentials();\n if (argv.json) {\n writeJsonResult({ authenticated: false });\n return;\n }\n console.log('Credentials removed.');\n },\n};\n\nconst statusCommand: CommandModule<AuthArgs, AuthArgs> = {\n command: 'status',\n describe: 'Show stored authentication status',\n builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n const status = getStoredAuthStatus(argv.url);\n if (argv.json) {\n writeJsonResult(status);\n return;\n }\n if (!status.authenticated) {\n console.log('Not authenticated. Run `xpod auth login`.');\n return;\n }\n console.log('Authenticated.');\n console.log(` webId: ${status.webId}`);\n console.log(` podRoot: ${status.podRoot}`);\n console.log(` server: ${status.baseUrl}`);\n },\n};\n\nconst whoamiCommand: CommandModule<AuthArgs, AuthArgs> = {\n command: 'whoami',\n describe: 'Show acting WebID and Pod root',\n builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n const status = getStoredAuthStatus(argv.url);\n if (!status.authenticated) {\n if (argv.json) {\n handleCliError(new CliCommandError('auth_required', 'No credentials found. Run `xpod auth login` first.', 2), true);\n }\n console.log('Not authenticated. Run `xpod auth login`.');\n return;\n }\n if (argv.json) {\n writeJsonResult(status);\n return;\n }\n console.log(status.webId);\n },\n};\n\nexport const authCommand: CommandModule<object, AuthArgs> = {\n command: 'auth',\n describe: 'Authentication and credential management',\n builder: (yargs) =>\n yargs\n .option('url', {\n alias: 'u',\n type: 'string',\n description: 'Server base URL',\n default: process.env.CSS_BASE_URL || 'http://localhost:3000',\n })\n .command(statusCommand)\n .command(loginCommand)\n .command(createCredentialsCommand)\n .command(logoutCommand)\n .command(whoamiCommand)\n .command(listCommand)\n .command(revokeCommand)\n .demandCommand(1, 'Please specify an auth subcommand'),\n handler: () => {\n // parent command, no-op\n },\n};\n"]}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CommandModule } from 'yargs';\nimport {\n checkServer,\n login,\n getAccountControls,\n getAccountData,\n createClientCredentials,\n listClientCredentials,\n revokeClientCredential,\n} from '../lib/css-account';\nimport { saveCredentials, clearCredentials, getSolidCredentialsPath } from '../lib/credentials-store';\nimport { promptPassword, promptText } from '../lib/prompt';\nimport { getStoredAuthStatus } from '../lib/auth-context';\nimport { CliCommandError, handleCliError, writeJsonResult } from '../lib/output';\n\ninterface AuthArgs {\n url?: string;\n json?: boolean;\n}\n\ninterface LoginArgs extends AuthArgs {\n email?: string;\n password?: string;\n issuer?: string;\n 'web-id'?: string;\n}\n\ninterface CreateCredentialsArgs extends AuthArgs {\n email?: string;\n password?: string;\n 'web-id'?: string;\n name?: string;\n output?: boolean;\n}\n\ninterface ListArgs extends AuthArgs {\n email?: string;\n password?: string;\n}\n\ninterface RevokeArgs extends AuthArgs {\n email?: string;\n password?: string;\n 'client-id': string;\n}\n\nfunction resolveUrl(url?: string): string {\n const raw = url || process.env.CSS_BASE_URL || 'http://localhost:3000';\n return raw.endsWith('/') ? raw : `${raw}/`;\n}\n\nasync function resolveExplicitWebId(input: {\n token: string;\n baseUrl: string;\n explicitWebId?: string;\n}): Promise<string> {\n if (input.explicitWebId) {\n return input.explicitWebId;\n }\n\n const accountData = await getAccountData(input.token, input.baseUrl);\n const webIds = accountData ? Object.keys(accountData.webIds) : [];\n if (webIds.length === 1 && webIds[0]) {\n return webIds[0];\n }\n if (webIds.length > 1) {\n throw new CliCommandError(\n 'webid_ambiguous',\n 'Multiple WebIDs are configured. Re-run with --web-id to select the acting identity.',\n 2,\n { webIds },\n );\n }\n throw new CliCommandError('webid_missing', 'No WebID found. Specify --web-id explicitly.', 2);\n}\n\nconst loginCommand: CommandModule<AuthArgs, LoginArgs> = {\n command: 'login',\n describe: 'Login and store CLI client credentials',\n builder: (yargs) =>\n yargs\n .option('issuer', { type: 'string', description: 'Issuer/base URL alias for --url' })\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' })\n .option('web-id', { type: 'string', description: 'WebID to bind credentials to when multiple identities exist' })\n .option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.issuer ?? argv.url);\n\n if (!(await checkServer(baseUrl))) {\n const error = new Error(`Cannot reach server at ${baseUrl}`);\n handleCliError(error, argv.json === true, 'server_unreachable');\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n handleCliError(new Error('Login failed. Check email/password.'), argv.json === true, 'auth_failed');\n }\n\n const controls = await getAccountControls(token, baseUrl);\n if (!controls?.clientCredentials) {\n handleCliError(new Error('Cannot find client credentials endpoint.'), argv.json === true, 'credentials_endpoint_missing');\n }\n\n const webId = await resolveExplicitWebId({\n token,\n baseUrl,\n explicitWebId: argv['web-id'],\n }).catch((error) => handleCliError(error, argv.json === true));\n\n const cred = await createClientCredentials(token, controls.clientCredentials, webId, 'xpod-cli');\n if (!cred) {\n handleCliError(new Error('Failed to create credentials.'), argv.json === true, 'credentials_create_failed');\n }\n\n saveCredentials({\n url: baseUrl,\n webId,\n authType: 'client_credentials',\n secrets: {\n clientId: cred.id,\n clientSecret: cred.secret ?? '',\n },\n });\n\n const data = { baseUrl, webId, credentialsPath: getSolidCredentialsPath() };\n if (argv.json) {\n writeJsonResult(data);\n return;\n }\n console.log('Login successful. Credentials saved.');\n console.log(` webId: ${webId}`);\n console.log(` credentials: ${getSolidCredentialsPath()}`);\n },\n};\n\nconst createCredentialsCommand: CommandModule<AuthArgs, CreateCredentialsArgs> = {\n command: 'create-credentials',\n describe: 'Create client credentials (client_id/secret)',\n builder: (yargs) =>\n yargs\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' })\n .option('web-id', { type: 'string', description: 'WebID to bind credentials to' })\n .option('name', { type: 'string', description: 'Credential label' })\n .option('output', { type: 'boolean', default: false, description: 'Do not save credentials; print non-secret metadata only' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.url);\n\n if (!(await checkServer(baseUrl))) {\n console.error(`Cannot reach server at ${baseUrl}`);\n process.exit(1);\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n console.error('Login failed.');\n process.exit(1);\n }\n\n const controls = await getAccountControls(token, baseUrl);\n if (!controls?.clientCredentials) {\n console.error('Cannot find client credentials endpoint.');\n process.exit(1);\n }\n\n let webId: string;\n try {\n webId = await resolveExplicitWebId({\n token,\n baseUrl,\n explicitWebId: argv['web-id'],\n });\n } catch (error) {\n handleCliError(error, false);\n }\n\n const cred = await createClientCredentials(token, controls.clientCredentials, webId, argv.name);\n if (!cred) {\n console.error('Failed to create credentials.');\n process.exit(1);\n }\n\n if (!argv.output) {\n saveCredentials({\n url: baseUrl,\n webId,\n authType: 'client_credentials',\n secrets: {\n clientId: cred.id,\n clientSecret: cred.secret ?? '',\n },\n });\n console.log(`\\nSaved to ${getSolidCredentialsPath()}`);\n console.log('\\n✓ Setup complete! You can now use xpod commands without entering password.');\n console.log(' Example: xpod backup export');\n } else {\n console.log('Credentials created.');\n }\n console.log(` client_id: ${cred.id}`);\n console.log(` webId: ${webId}`);\n },\n};\n\nconst listCommand: CommandModule<AuthArgs, ListArgs> = {\n command: 'list',\n describe: 'List client credentials',\n builder: (yargs) =>\n yargs\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.url);\n\n if (!(await checkServer(baseUrl))) {\n console.error(`Cannot reach server at ${baseUrl}`);\n process.exit(1);\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n console.error('Login failed.');\n process.exit(1);\n }\n\n const creds = await listClientCredentials(token, baseUrl);\n if (creds.length === 0) {\n console.log('No client credentials found.');\n return;\n }\n\n console.log(`Found ${creds.length} credential(s):\\n`);\n for (const c of creds) {\n console.log(` ${c.id}`);\n if (c.webId) console.log(` webId: ${c.webId}`);\n }\n },\n};\n\nconst revokeCommand: CommandModule<AuthArgs, RevokeArgs> = {\n command: 'revoke',\n describe: 'Revoke a client credential',\n builder: (yargs) =>\n yargs\n .option('email', { type: 'string', description: 'Account email (will prompt if not provided)' })\n .option('password', { type: 'string', description: 'Account password (will prompt securely if not provided)' })\n .option('client-id', { type: 'string', demandOption: true, description: 'Client ID to revoke' }),\n handler: async (argv) => {\n const baseUrl = resolveUrl(argv.url);\n\n if (!(await checkServer(baseUrl))) {\n console.error(`Cannot reach server at ${baseUrl}`);\n process.exit(1);\n }\n\n // Prompt for email if not provided\n let email = argv.email;\n if (!email) {\n email = await promptText('Email: ');\n if (!email) {\n console.error('Email is required');\n process.exit(1);\n }\n }\n\n // Prompt for password if not provided (secure input)\n let password = argv.password;\n if (!password) {\n password = await promptPassword('Password: ');\n if (!password) {\n console.error('Password is required');\n process.exit(1);\n }\n }\n\n const token = await login(email, password, baseUrl);\n if (!token) {\n console.error('Login failed.');\n process.exit(1);\n }\n\n const ok = await revokeClientCredential(token, argv['client-id'], baseUrl);\n if (ok) {\n console.log(`Credential ${argv['client-id']} revoked.`);\n } else {\n console.error(`Failed to revoke credential ${argv['client-id']}.`);\n process.exit(1);\n }\n },\n};\n\nconst logoutCommand: CommandModule<AuthArgs, AuthArgs> = {\n command: 'logout',\n describe: 'Remove stored credentials from the shared Solid auth store',\n builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n clearCredentials();\n if (argv.json) {\n writeJsonResult({ authenticated: false });\n return;\n }\n console.log('Credentials removed.');\n },\n};\n\nconst statusCommand: CommandModule<AuthArgs, AuthArgs> = {\n command: 'status',\n describe: 'Show stored authentication status',\n builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n const status = getStoredAuthStatus(argv.url);\n if (argv.json) {\n writeJsonResult(status);\n return;\n }\n if (!status.authenticated) {\n console.log('Not authenticated. Run `xpod auth login`.');\n return;\n }\n console.log('Authenticated.');\n console.log(` webId: ${status.webId}`);\n console.log(` podRoot: ${status.podRoot}`);\n console.log(` server: ${status.baseUrl}`);\n },\n};\n\nconst whoamiCommand: CommandModule<AuthArgs, AuthArgs> = {\n command: 'whoami',\n describe: 'Show acting WebID and Pod root',\n builder: (yargs) => yargs.option('json', { type: 'boolean', default: false, description: 'Output JSON envelope' }),\n handler: async (argv) => {\n const status = getStoredAuthStatus(argv.url);\n if (!status.authenticated) {\n if (argv.json) {\n handleCliError(new CliCommandError('auth_required', 'No credentials found. Run `xpod auth login` first.', 2), true);\n }\n console.log('Not authenticated. Run `xpod auth login`.');\n return;\n }\n if (argv.json) {\n writeJsonResult(status);\n return;\n }\n console.log(status.webId);\n },\n};\n\nexport const authCommand: CommandModule<object, AuthArgs> = {\n command: 'auth',\n describe: 'Authentication and credential management',\n builder: (yargs) =>\n yargs\n .option('url', {\n alias: 'u',\n type: 'string',\n description: 'Server base URL',\n })\n .command(statusCommand)\n .command(loginCommand)\n .command(createCredentialsCommand)\n .command(logoutCommand)\n .command(whoamiCommand)\n .command(listCommand)\n .command(revokeCommand)\n .demandCommand(1, 'Please specify an auth subcommand'),\n handler: () => {\n // parent command, no-op\n },\n};\n"]}
@@ -11,7 +11,7 @@ function resolveUrl(url, credUrl) {
11
11
  return raw.endsWith('/') ? raw : `${raw}/`;
12
12
  }
13
13
  /**
14
- * Resolve auth: prefer client credentials from ~/.xpod/, fall back to email/password.
14
+ * Resolve auth: prefer client credentials from $SOLID_HOME/auth/, fall back to email/password.
15
15
  * Returns { authHeader, podUrl }.
16
16
  */
17
17
  async function resolveBackupAuth(argv) {