@undefineds.co/xpod 0.3.5 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MinioDataAccessor.d.ts +2 -0
- package/dist/storage/accessors/MinioDataAccessor.js +13 -7
- package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.jsonld +8 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
|
@@ -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 resolveDataResourceIri,\n resolveRunUrn,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nimport type { AgentRuntimeConfig, RunnerProtocol, RunnerType } from '../runs/AgentRuntimeTypes';\nimport { isWorkspaceUri } from '../workspace/types';\nimport { TaskStatus, TaskTriggerKind } from './schema';\nimport { resolveTaskResourceIri, 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.resolveTaskUri(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.resolveTaskUri(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.resolveRunUri(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 (!isWorkspaceUri(task.workspace)) {\n throw new Error('Task workspace URI 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.parseThreadUri(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 parseThreadUri(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 resolveTaskUri(task: TaskRecordData, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n return resolveTaskResourceIri(podBaseUrl, task.id);\n }\n return resolveTaskUrn(task.id);\n }\n\n private resolveRunUri(run: RunRecordData, context: TContext): string {\n const podBaseUrl = this.resolvePodBaseUrl(context);\n if (podBaseUrl) {\n return resolveDataResourceIri(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":";;;AAQA,4CAI0B;AAC1B,mFAAgF;AAEhF,2CAA2E;AAC3E,yCAQuB;AAEvB,8CAAoD;AACpD,qCAAuD;AACvD,mCAAyG;AAczG,MAAa,gBAAgB;IAK3B,YAAmB,OAA0C;QAC3D,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,uDAA0B,EAAE,CAAC;QACrF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,KASxB;QACC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,KAAK,mBAAU,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9E,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY,IAAI,IAAA,oBAAY,GAAE,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,IAAA,oBAAY,GAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,QAAQ,EAAE,CAAC;YACzD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;aAAM,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;gBAC9C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,kBAAS,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAU,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAU,CAAC,MAAM,CAAC;gBAC5F,IAAI,CAAC,SAAS,GAAG,IAAA,oBAAY,GAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,wBAAe,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,GAAG,mBAAU,CAAC,SAAS,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,IAAA,oBAAY,GAAE,CAAC;YAChC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAMxB;QACC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAExC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,YAAgC,CAAC;QAErC,IAAI,KAAK,EACP,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACzC,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,QAAQ,EAAE,MAAM,CAAC,EAAE;YACnB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YACjC,YAAY,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC;YAC7E,MAAM,EAAE,aAAa;YACrB,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;YACnC,OAAO,EAAE,OAAuB;SACjC,CAAC,EACF,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC;gBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,UAAU,EAAE,OAAO,EAAE;oBAC7D,OAAO,EAAE,KAAK,CAAC,IAAI;oBACnB,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE;iBAC5B,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,aAAa,EAAE,OAAO,EAAE;oBAChE,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE;wBACJ,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;wBACd,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB;iBACF,CAAC,CAAC;gBACH,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,SAAS,EAAE,OAAO,EAAE;oBAC5D,OAAO,EAAE,KAAK,CAAC,IAAI;oBACnB,IAAI,EAAE;wBACJ,SAAS,EAAE,KAAK,CAAC,SAAS;wBAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;qBAC3B;iBACF,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,kBAAS,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,KAAK,CAAC,IAAI,oBAAoB,CAAC,CAAC;gBACzG,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC;gBACpC,aAAa,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC7D,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBACpC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,cAAc,EAAE,OAAO,EAAE;oBACjE,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;iBACrC,CAAC,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,kBAAS,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC5E,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC;gBACpC,aAAa,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAClE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;gBAC7D,OAAO,aAAa,CAAC;YACvB,CAAC;YAED,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;YAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,KAAK,EAAE,OAAO,EAAE;gBACxD,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAED,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;QACjE,aAAa,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,SAAS,CAClB,GAAG,EACH,YAAY,CAAC,CAAC,CAAC,kBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAS,CAAC,SAAS,EACrD,OAAO,EACP,YAAY,CACb,CAAC;QACF,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,IAAoB,EAAE,OAAiB;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;YAC3B,MAAM,QAAQ,GAAmB;gBAC/B,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,GAAG;gBACf,QAAQ,EAAE;oBACR,WAAW,EAAE,MAAM;oBACnB,UAAU,EAAE,IAAI,CAAC,SAAS;oBAC1B,OAAO,EAAE,IAAI,CAAC,SAAS;oBACvB,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC;oBAC7C,OAAO,EAAE;wBACP,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;qBACtC;iBACF;aACF,CAAC;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,IAAoB,EACpB,MAAc,EACd,WAA4B,EAC5B,OAAiB,EACjB,OAKC;QAED,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;QAC3B,MAAM,GAAG,GAAkB;YACzB,EAAE,EAAE,IAAA,6BAAqB,EAAC;gBACxB,GAAG,EAAE,IAAA,kBAAU,EAAC,KAAK,CAAC;gBACtB,WAAW,EAAE,MAAM;gBACnB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,GAAG;aACf,CAAC;YACF,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC;YAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,kBAAS,CAAC,MAAM;YACxB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM;YACN,QAAQ,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3C,aAAa,EAAE,WAAW,CAAC,EAAE;gBAC7B,aAAa,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC5C,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;gBACnC,OAAO;aACR;YACD,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,OAAO,EAAE,OAAO,EAAE;YAC1D,OAAO,EAAE,kBAAkB;YAC3B,IAAI,EAAE;gBACJ,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO;gBACP,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B;SACF,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,GAAkB,EAAE,OAAiB;QAChE,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,GAAG,kBAAS,CAAC,OAAO,CAAC;QAC/B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACpB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACpB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,wBAAW,CAAC,OAAO,EAAE,OAAO,EAAE;YAC1D,OAAO,EAAE,kBAAkB;SAC5B,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,GAAkB,EAClB,MAA+B,EAC/B,OAAiB,EACjB,KAAc;QAEd,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;QAC3B,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;QACjE,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC;QACpB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,aAAa,CACtB,GAAG,EACH,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAC9B,OAAO,EACP;YACE,OAAO,EAAE,KAAK,IAAI,OAAO,MAAM,EAAE;YACjC,IAAI,EAAE,EAAE,MAAM,EAAE;SACjB,CACF,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,MAA+B;QACrD,OAAO,MAAM,KAAK,kBAAS,CAAC,aAAa,IAAI,MAAM,KAAK,kBAAS,CAAC,cAAc,CAAC;IACnF,CAAC;IAEO,iBAAiB,CAAC,MAA+B;QACvD,IAAI,MAAM,KAAK,kBAAS,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,wBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;QACD,IAAI,MAAM,KAAK,kBAAS,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,wBAAW,CAAC,SAAS,CAAC;QAC/B,CAAC;QACD,IAAI,MAAM,KAAK,kBAAS,CAAC,aAAa,EAAE,CAAC;YACvC,OAAO,wBAAW,CAAC,aAAa,CAAC;QACnC,CAAC;QACD,IAAI,MAAM,KAAK,kBAAS,CAAC,cAAc,EAAE,CAAC;YACxC,OAAO,wBAAW,CAAC,cAAc,CAAC;QACpC,CAAC;QACD,OAAO,wBAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,GAAkB,EAClB,IAA+B,EAC/B,OAAiB,EACjB,UAGI,EAAE;QAEN,MAAM,SAAS,GAAG,IAAA,oBAAY,GAAE,CAAC;QACjC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YAC7B,EAAE,EAAE,IAAA,iCAAyB,EAAC;gBAC5B,GAAG,EAAE,IAAA,kBAAU,EAAC,UAAU,CAAC;gBAC3B,KAAK,EAAE,GAAG,CAAC,EAAE;gBACb,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,SAAS;aACV,CAAC;YACF,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,EAAE;YACb,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC;YAC1C,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS;SACV,EAAE,OAAO,CAAC,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,SAAoB,EACpB,IAAoB,EACpB,OAAiB,EACjB,MAAc;QAEd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC;YAC9D,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC/C,UAAU,EAAE,IAAA,oBAAY,GAAE;SAC3B,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,IAAoB,EACpB,OAKC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,MAAM,uBAAuB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAChF,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,MAAsB,EACtB,OAAiB;QAEjB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC;YACnE,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,aAAa;YACrB,UAAU,EAAE,IAAA,oBAAY,GAAE;SAC3B,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,SAAoB,EACpB,oBAA4B,EAC5B,OAAiB;QAEjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3F,MAAM,YAAY,GAA2E,EAAE,CAAC;QAEhG,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,EAAE,KAAK,oBAAoB,EAAE,CAAC;gBACrC,MAAM;YACR,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;qBACtB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC;qBAClD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;qBAC9B,IAAI,CAAC,IAAI,CAAC;qBACV,IAAI,EAAE,CAAC;gBACV,IAAI,IAAI,EAAE,CAAC;oBACT,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxE,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACvE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;qBACtB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC;qBACnD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;qBAC9B,IAAI,CAAC,IAAI,CAAC;qBACV,IAAI,EAAE,CAAC;gBACV,IAAI,IAAI,EAAE,CAAC;oBACT,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC7E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,kBAAkB,CAAC,IAAoB;QAC7C,IAAI,CAAC,IAAA,sBAAc,EAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;SACtC,CAAC;IACJ,CAAC;IAEO,WAAW,CAAC,MAAc;QAChC,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,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SAC5C,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,KAAc;QACjC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,WAAW,CAAC;IAC5F,CAAC;IAEO,wBAAwB,CAAC,IAAoB,EAAE,IAAY;QACjE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC;IACrC,CAAC;IAEO,oBAAoB,CAAC,IAAoB,EAAE,IAAY;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,gBAAgB,GAAG,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAEO,iBAAiB,CAAC,IAAoB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,IAAA,mBAAW,EAAC;YACjB,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5C,OAAO,EAAE,IAAI,CAAC,SAAS;SACxB,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CAAC,MAAc;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAClF,OAAO,KAAK;gBACV,CAAC,CAAC,EAAE,SAAS,EAAE,MAAkD,EAAE;gBACnE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAkD,EAAE,CAAC;QACxE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,MAAc;QACpC,MAAM,UAAU,GAAG,SAAS,CAAC;QAC7B,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,WAAW,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBACjC,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC7E,CAAC;gBACD,OAAO,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACnF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACrC,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAC,IAAoB,EAAE,OAAiB;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAA,2BAAkB,EAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAA,sBAAc,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEO,kBAAkB,CAAC,GAAkB,EAAE,OAAiB;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,IAAA,2BAAmB,EAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAA,qBAAa,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAEO,iBAAiB,CAAC,OAAiB;QACzC,MAAM,IAAI,GAAI,OAAmC,CAAC,IAAuC,CAAC;QAC1F,MAAM,KAAK,GAAG,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,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,WAAW,CAAC,KAAc;QAChC,OAAO,OAAQ,KAAgC,CAAC,QAAQ,KAAK,UAAU,CAAC;IAC1E,CAAC;CACF;AAriBD,4CAqiBC","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,7 +1,7 @@
|
|
|
1
1
|
import type { ChatKitStore, StoreContext } from '../chatkit/store';
|
|
2
2
|
import type { RunExecutionBackend } from '../runs/RunExecutionBackend';
|
|
3
3
|
import { type RunStore } from '../runs/store';
|
|
4
|
-
import { type
|
|
4
|
+
import { type WorkspaceRef } from '../workspace/types';
|
|
5
5
|
import { type MaterializedTaskRun } from './TaskMaterializer';
|
|
6
6
|
import { type TaskTriggerKindType } from './schema';
|
|
7
7
|
import type { TaskAuthBindingSnapshot } from './TaskAuthBinding';
|
|
@@ -10,7 +10,7 @@ export interface CreateTaskInput {
|
|
|
10
10
|
surfaceId?: string;
|
|
11
11
|
title?: string;
|
|
12
12
|
prompt: string;
|
|
13
|
-
workspace:
|
|
13
|
+
workspace: WorkspaceRef;
|
|
14
14
|
runner?: string;
|
|
15
15
|
triggerKind?: TaskTriggerKindType;
|
|
16
16
|
cron?: string;
|
|
@@ -51,7 +51,7 @@ export declare class TaskService<TContext = StoreContext> {
|
|
|
51
51
|
private initialNextRunAt;
|
|
52
52
|
private parseRunnerMetadata;
|
|
53
53
|
private normalizeSurfaceId;
|
|
54
|
-
private
|
|
54
|
+
private resolveThreadResource;
|
|
55
55
|
private resolvePodBaseUrl;
|
|
56
56
|
private resolveWebId;
|
|
57
57
|
}
|
|
@@ -20,15 +20,19 @@ class TaskService {
|
|
|
20
20
|
if (!input.prompt.trim()) {
|
|
21
21
|
throw new Error('Task prompt is required');
|
|
22
22
|
}
|
|
23
|
-
if (!(0, types_2.
|
|
24
|
-
throw new Error('Task workspace
|
|
23
|
+
if (!(0, types_2.isWorkspaceRef)(input.workspace)) {
|
|
24
|
+
throw new Error('Task workspace reference is required');
|
|
25
25
|
}
|
|
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 now = (0, types_1.nowTimestamp)();
|
|
30
|
-
const taskId = (0, store_2.generateTaskResourceId)((0, types_1.generateId)('task'));
|
|
31
29
|
const surfaceId = this.normalizeSurfaceId(input.surfaceId ?? 'default');
|
|
30
|
+
const now = (0, types_1.nowTimestamp)();
|
|
31
|
+
const taskId = (0, store_2.generateTaskResourceId)({
|
|
32
|
+
key: (0, types_1.generateId)('task'),
|
|
33
|
+
surfaceId,
|
|
34
|
+
createdAt: now,
|
|
35
|
+
});
|
|
32
36
|
const thread = await this.createTaskThread({
|
|
33
37
|
taskId,
|
|
34
38
|
surfaceId,
|
|
@@ -43,7 +47,7 @@ class TaskService {
|
|
|
43
47
|
surfaceId,
|
|
44
48
|
title: input.title,
|
|
45
49
|
prompt: input.prompt,
|
|
46
|
-
thread: this.
|
|
50
|
+
thread: this.resolveThreadResource(thread, context),
|
|
47
51
|
workspace: input.workspace,
|
|
48
52
|
runner: input.runner ?? 'pi:pi',
|
|
49
53
|
status: schema_1.TaskStatus.ACTIVE,
|
|
@@ -192,14 +196,14 @@ class TaskService {
|
|
|
192
196
|
normalizeSurfaceId(value) {
|
|
193
197
|
return value.trim().replace(/[^A-Za-z0-9._~-]+/g, '-').replace(/^-+|-+$/g, '') || 'default';
|
|
194
198
|
}
|
|
195
|
-
|
|
199
|
+
resolveThreadResource(thread, context) {
|
|
196
200
|
const podBaseUrl = this.resolvePodBaseUrl(context);
|
|
197
201
|
const surfaceId = typeof thread.metadata?.surface_id === 'string'
|
|
198
202
|
? thread.metadata.surface_id
|
|
199
203
|
: (typeof thread.metadata?.chat_id === 'string' ? thread.metadata.chat_id : types_1.DEFAULT_THREAD_CHAT_ID);
|
|
200
204
|
if (podBaseUrl) {
|
|
201
205
|
if (thread.id.includes('#') && !thread.id.startsWith('#')) {
|
|
202
|
-
return (0, store_1.
|
|
206
|
+
return (0, store_1.resolveDataResource)(podBaseUrl, thread.id);
|
|
203
207
|
}
|
|
204
208
|
return `${podBaseUrl}/.data/task/${surfaceId}/index.ttl#${thread.id}`;
|
|
205
209
|
}
|
|
@@ -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 { resolveDataResourceIri, type RunStore } from '../runs/store';\nimport { isWorkspaceUri, type WorkspaceUri } 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: WorkspaceUri;\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 (!isWorkspaceUri(input.workspace)) {\n throw new Error('Task workspace URI 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(generateId('task'));\n const surfaceId = this.normalizeSurfaceId(input.surfaceId ?? 'default');\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.resolveThreadUri(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: WorkspaceUri;\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 resolveThreadUri(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 resolveDataResourceIri(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":"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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,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { WorkspaceRef } from '../workspace/types';
|
|
2
2
|
import type { TaskAuthBindingSnapshot } from './TaskAuthBinding';
|
|
3
3
|
import type { TaskStatusType, TaskTriggerKindType } from './schema';
|
|
4
4
|
export interface TaskRecordData {
|
|
@@ -8,7 +8,7 @@ export interface TaskRecordData {
|
|
|
8
8
|
title?: string;
|
|
9
9
|
prompt: string;
|
|
10
10
|
thread: string;
|
|
11
|
-
workspace:
|
|
11
|
+
workspace: WorkspaceRef;
|
|
12
12
|
runner: string;
|
|
13
13
|
status: TaskStatusType;
|
|
14
14
|
triggerKind: TaskTriggerKindType;
|
|
@@ -34,7 +34,13 @@ export interface TaskStore<TContext> {
|
|
|
34
34
|
loadTask(taskId: string, context: TContext): Promise<TaskRecordData>;
|
|
35
35
|
listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]>;
|
|
36
36
|
}
|
|
37
|
+
export declare function isTaskResourceId(value: string | null | undefined): value is string;
|
|
37
38
|
export declare function buildTaskResourceId(id: string): string;
|
|
38
|
-
export declare function generateTaskResourceId(
|
|
39
|
-
|
|
39
|
+
export declare function generateTaskResourceId(input: string | {
|
|
40
|
+
key: string;
|
|
41
|
+
surfaceId: string;
|
|
42
|
+
createdAt?: number;
|
|
43
|
+
}): string;
|
|
44
|
+
export declare function generateDefaultTaskResourceId(key: string): string;
|
|
45
|
+
export declare function resolveTaskResource(podBaseUrl: string, taskId: string): string;
|
|
40
46
|
export declare function resolveTaskUrn(taskId: string): string;
|
package/dist/api/tasks/store.js
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTaskResourceId = isTaskResourceId;
|
|
3
4
|
exports.buildTaskResourceId = buildTaskResourceId;
|
|
4
5
|
exports.generateTaskResourceId = generateTaskResourceId;
|
|
5
|
-
exports.
|
|
6
|
+
exports.generateDefaultTaskResourceId = generateDefaultTaskResourceId;
|
|
7
|
+
exports.resolveTaskResource = resolveTaskResource;
|
|
6
8
|
exports.resolveTaskUrn = resolveTaskUrn;
|
|
7
9
|
const models_1 = require("@undefineds.co/models");
|
|
10
|
+
function isTaskResourceId(value) {
|
|
11
|
+
return typeof value === 'string'
|
|
12
|
+
&& /^index\.ttl#[^#/]+$/.test(value);
|
|
13
|
+
}
|
|
8
14
|
function buildTaskResourceId(id) {
|
|
9
|
-
if (
|
|
15
|
+
if (!isTaskResourceId(id)) {
|
|
10
16
|
throw new Error(`Task id must be a complete Task resource id under index.ttl: ${id}`);
|
|
11
17
|
}
|
|
12
18
|
return id;
|
|
13
19
|
}
|
|
14
|
-
function generateTaskResourceId(
|
|
20
|
+
function generateTaskResourceId(input) {
|
|
21
|
+
const key = typeof input === 'string' ? input : input.key;
|
|
15
22
|
if (/^index\.ttl#[^#/]+$/.test(key)) {
|
|
16
23
|
throw new Error(`Task id generator requires a local key, got resource id: ${key}`);
|
|
17
24
|
}
|
|
@@ -20,7 +27,10 @@ function generateTaskResourceId(key) {
|
|
|
20
27
|
}
|
|
21
28
|
return (0, models_1.taskResourceId)(key);
|
|
22
29
|
}
|
|
23
|
-
function
|
|
30
|
+
function generateDefaultTaskResourceId(key) {
|
|
31
|
+
return generateTaskResourceId(key);
|
|
32
|
+
}
|
|
33
|
+
function resolveTaskResource(podBaseUrl, taskId) {
|
|
24
34
|
if (/^https?:\/\//.test(taskId)) {
|
|
25
35
|
return taskId;
|
|
26
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/tasks/store.ts"],"names":[],"mappings":";;AAyCA,kDAKC;AAED,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/tasks/store.ts"],"names":[],"mappings":";;AAyCA,4CAGC;AAED,kDAKC;AAED,wDAaC;AAED,sEAEC;AAED,kDAOC;AAED,wCAEC;AAlFD,kDAAuD;AAwCvD,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,IAAA,uBAAc,EAAC,GAAG,CAAC,CAAC;AAC7B,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 { taskResourceId } from '@undefineds.co/models';\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 taskResourceId(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,3 +1,3 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
1
|
+
export type WorkspaceRef = string;
|
|
2
|
+
export declare function isWorkspaceRef(value: unknown): value is WorkspaceRef;
|
|
3
|
+
export declare function assertWorkspaceRef(value: unknown, label?: string): WorkspaceRef;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
5
|
-
function
|
|
3
|
+
exports.isWorkspaceRef = isWorkspaceRef;
|
|
4
|
+
exports.assertWorkspaceRef = assertWorkspaceRef;
|
|
5
|
+
function isWorkspaceRef(value) {
|
|
6
6
|
if (typeof value !== 'string' || value.length === 0) {
|
|
7
7
|
return false;
|
|
8
8
|
}
|
|
@@ -14,10 +14,10 @@ function isWorkspaceUri(value) {
|
|
|
14
14
|
return false;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
function
|
|
18
|
-
if (
|
|
17
|
+
function assertWorkspaceRef(value, label = 'workspace') {
|
|
18
|
+
if (isWorkspaceRef(value)) {
|
|
19
19
|
return value;
|
|
20
20
|
}
|
|
21
|
-
throw new Error(`${label} must be an http(s):// or file://
|
|
21
|
+
throw new Error(`${label} must be an http(s):// or file:// workspace reference`);
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/workspace/types.ts"],"names":[],"mappings":";;AAEA,wCAWC;AAED,gDAKC;AAlBD,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc,EAAE,KAAK,GAAG,WAAW;IACpE,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/workspace/types.ts"],"names":[],"mappings":";;AAEA,wCAWC;AAED,gDAKC;AAlBD,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc,EAAE,KAAK,GAAG,WAAW;IACpE,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uDAAuD,CAAC,CAAC;AACnF,CAAC","sourcesContent":["export type WorkspaceRef = string;\n\nexport function isWorkspaceRef(value: unknown): value is WorkspaceRef {\n if (typeof value !== 'string' || value.length === 0) {\n return false;\n }\n\n try {\n const url = new URL(value);\n return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'file:';\n } catch {\n return false;\n }\n}\n\nexport function assertWorkspaceRef(value: unknown, label = 'workspace'): WorkspaceRef {\n if (isWorkspaceRef(value)) {\n return value;\n }\n throw new Error(`${label} must be an http(s):// or file:// workspace reference`);\n}\n"]}
|
|
@@ -117,13 +117,13 @@ WHERE { ${optionals.join(' ')} }`;
|
|
|
117
117
|
function buildCredentialSparql(resourceUrl, podUrl, provider, fields) {
|
|
118
118
|
const credId = credentialId(provider);
|
|
119
119
|
const subject = `<${resourceUrl}#${credId}>`;
|
|
120
|
-
const
|
|
120
|
+
const providerResource = `<${podUrl.replace(/\/$/, '')}${(0, models_1.aiConfigProviderRef)(provider)}>`;
|
|
121
121
|
const deletes = [];
|
|
122
122
|
const inserts = [
|
|
123
123
|
`${subject} a cred:Credential`,
|
|
124
124
|
`cred:service "ai"`,
|
|
125
125
|
`cred:status "active"`,
|
|
126
|
-
`cred:provider ${
|
|
126
|
+
`cred:provider ${providerResource}`,
|
|
127
127
|
];
|
|
128
128
|
const optionals = [];
|
|
129
129
|
// Always delete+reinsert provider link
|