@undefineds.co/xpod 0.2.45 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/AgentExecutorFactory.js +12 -13
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/config/agent-meta-schema.d.ts +31 -3
- package/dist/agents/config/agent-meta-schema.js +37 -3
- package/dist/agents/config/agent-meta-schema.js.map +1 -1
- package/dist/agents/config/index.d.ts +5 -5
- package/dist/agents/config/index.js +7 -6
- package/dist/agents/config/index.js.map +1 -1
- package/dist/agents/config/parse-agent-instructions.d.ts +12 -0
- package/dist/agents/config/parse-agent-instructions.js +23 -0
- package/dist/agents/config/parse-agent-instructions.js.map +1 -0
- package/dist/agents/config/resolve.d.ts +7 -12
- package/dist/agents/config/resolve.js +272 -156
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/config/types.d.ts +33 -36
- package/dist/agents/config/types.js +4 -4
- package/dist/agents/config/types.js.map +1 -1
- package/dist/agents/index.d.ts +2 -7
- package/dist/agents/index.js +4 -14
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/types.d.ts +2 -2
- package/dist/agents/types.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.js +9 -14
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/api/ApiServer.d.ts +7 -0
- package/dist/api/ApiServer.js +5 -1
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/chatkit/default-agent.js +1 -1
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +8 -0
- package/dist/api/chatkit/index.js +15 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +80 -17
- package/dist/api/chatkit/pod-store.js +816 -162
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +41 -0
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +573 -0
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -0
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +27 -0
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +157 -0
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -0
- package/dist/api/chatkit/schema.d.ts +53 -133
- package/dist/api/chatkit/schema.js +11 -175
- package/dist/api/chatkit/schema.js.map +1 -1
- package/dist/api/chatkit/service.d.ts +15 -9
- package/dist/api/chatkit/service.js +82 -234
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/store.d.ts +35 -3
- package/dist/api/chatkit/store.js +157 -3
- package/dist/api/chatkit/store.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +16 -2
- package/dist/api/chatkit/types.js +24 -5
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/common.js +59 -2
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +15 -0
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/routes.js +11 -0
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +26 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/InngestHandler.d.ts +11 -0
- package/dist/api/handlers/InngestHandler.js +19 -0
- package/dist/api/handlers/InngestHandler.js.map +1 -0
- package/dist/api/handlers/RunHandler.d.ts +7 -0
- package/dist/api/handlers/RunHandler.js +169 -0
- package/dist/api/handlers/RunHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +1 -0
- package/dist/api/handlers/index.js +1 -0
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/models/namespaces.d.ts +2 -2
- package/dist/api/models/namespaces.js +1 -4
- package/dist/api/models/namespaces.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +83 -0
- package/dist/api/runs/AgentRuntimeTypes.js +3 -0
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -0
- package/dist/api/runs/EmbeddedInngestService.d.ts +47 -0
- package/dist/api/runs/EmbeddedInngestService.js +203 -0
- package/dist/api/runs/EmbeddedInngestService.js.map +1 -0
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +416 -0
- package/dist/api/runs/InngestRunExecutionBackend.js +225 -0
- package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -0
- package/dist/api/runs/ManagedRunWorker.d.ts +52 -0
- package/dist/api/runs/ManagedRunWorker.js +452 -0
- package/dist/api/runs/ManagedRunWorker.js.map +1 -0
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +66 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js +614 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -0
- package/dist/api/runs/PiAgentRuntimeWorker.d.ts +1 -0
- package/dist/api/runs/PiAgentRuntimeWorker.js +33 -0
- package/dist/api/runs/PiAgentRuntimeWorker.js.map +1 -0
- package/dist/api/runs/RunAuthContextRegistry.d.ts +19 -0
- package/dist/api/runs/RunAuthContextRegistry.js +59 -0
- package/dist/api/runs/RunAuthContextRegistry.js.map +1 -0
- package/dist/api/runs/RunExecutionBackend.d.ts +57 -0
- package/dist/api/runs/RunExecutionBackend.js +3 -0
- package/dist/api/runs/RunExecutionBackend.js.map +1 -0
- package/dist/api/runs/RunStateCenter.d.ts +82 -0
- package/dist/api/runs/RunStateCenter.js +665 -0
- package/dist/api/runs/RunStateCenter.js.map +1 -0
- package/dist/api/runs/schema.d.ts +55 -0
- package/dist/api/runs/schema.js +14 -0
- package/dist/api/runs/schema.js.map +1 -0
- package/dist/api/runs/store.d.ts +105 -0
- package/dist/api/runs/store.js +116 -0
- package/dist/api/runs/store.js.map +1 -0
- package/dist/api/runtime.d.ts +2 -0
- package/dist/api/runtime.js +40 -1
- package/dist/api/runtime.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -0
- package/dist/api/service/VectorStoreService.js +27 -34
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/provider-registry.d.ts +1 -1
- package/dist/api/service/provider-registry.js +1 -1
- package/dist/api/service/provider-registry.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +751 -0
- package/dist/api/tasks/InngestTaskScheduler.js +209 -0
- package/dist/api/tasks/InngestTaskScheduler.js.map +1 -0
- package/dist/api/tasks/TaskAuthBinding.d.ts +68 -0
- package/dist/api/tasks/TaskAuthBinding.js +162 -0
- package/dist/api/tasks/TaskAuthBinding.js.map +1 -0
- package/dist/api/tasks/TaskMaterializer.d.ts +55 -0
- package/dist/api/tasks/TaskMaterializer.js +452 -0
- package/dist/api/tasks/TaskMaterializer.js.map +1 -0
- package/dist/api/tasks/TaskService.d.ts +57 -0
- package/dist/api/tasks/TaskService.js +235 -0
- package/dist/api/tasks/TaskService.js.map +1 -0
- package/dist/api/tasks/index.d.ts +6 -0
- package/dist/api/tasks/index.js +25 -0
- package/dist/api/tasks/index.js.map +1 -0
- package/dist/api/tasks/schema.d.ts +23 -0
- package/dist/api/tasks/schema.js +8 -0
- package/dist/api/tasks/schema.js.map +1 -0
- package/dist/api/tasks/store.d.ts +40 -0
- package/dist/api/tasks/store.js +34 -0
- package/dist/api/tasks/store.js.map +1 -0
- package/dist/api/workspace/types.d.ts +3 -0
- package/dist/api/workspace/types.js +23 -0
- package/dist/api/workspace/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +8 -7
- package/dist/cli/commands/config.js +72 -48
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/login.d.ts +10 -8
- package/dist/cli/commands/login.js +84 -84
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/index.js +3 -124
- package/dist/cli/index.js.map +1 -1
- package/dist/http/search/SearchHttpHandler.js +13 -18
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/storage/vector/VectorIndexingListener.js +13 -18
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/dist/vocab/index.d.ts +2 -6
- package/dist/vocab/index.js +2 -6
- package/dist/vocab/index.js.map +1 -1
- package/dist/vocab/udfs.d.ts +12 -0
- package/dist/vocab/udfs.js +12 -0
- package/dist/vocab/udfs.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/README.md +52 -24
- package/node_modules/@undefineds.co/drizzle-solid/README.zh-CN.md +30 -24
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/discovery/types.d.ts +6 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/discovery/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +43 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.js +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.d.ts +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.js +44 -13
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +21 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/expressions.d.ts +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/expressions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.d.ts +76 -41
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +443 -114
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.d.ts +28 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.js +142 -31
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.js +84 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js +29 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +2 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +19 -51
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-conditions.d.ts +2 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-conditions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js +56 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.d.ts +14 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.js +55 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.js +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.js +33 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/defs.d.ts +11 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/defs.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts +13 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js +24 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.d.ts +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.js +28 -14
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.d.ts +9 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.js +56 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.d.ts +9 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.js +2 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/discovery/types.d.ts +6 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/discovery/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +43 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.js +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.d.ts +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.js +44 -13
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +21 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/expressions.d.ts +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/expressions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.d.ts +76 -41
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +443 -114
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.d.ts +28 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.js +142 -31
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.js +84 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js +29 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +2 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +19 -51
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-conditions.d.ts +2 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-conditions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js +56 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.d.ts +14 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.js +55 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.js +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.js +33 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/defs.d.ts +11 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/defs.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts +13 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js +24 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.d.ts +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.js +28 -14
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.d.ts +9 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.js +56 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.d.ts +9 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.js +2 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/pod.d.ts +16 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/pod.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/utils/find-by-iri.js +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/utils/find-by-iri.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/pod.d.ts +16 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/pod.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/utils/find-by-iri.js +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/utils/find-by-iri.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/package.json +1 -1
- package/package.json +5 -3
- package/dist/agents/AgentManager.d.ts +0 -116
- package/dist/agents/AgentManager.js +0 -290
- package/dist/agents/AgentManager.js.map +0 -1
- package/dist/agents/IndexAgent.d.ts +0 -70
- package/dist/agents/IndexAgent.js +0 -417
- package/dist/agents/IndexAgent.js.map +0 -1
- package/dist/agents/config/parse-agent-md.d.ts +0 -33
- package/dist/agents/config/parse-agent-md.js +0 -75
- package/dist/agents/config/parse-agent-md.js.map +0 -1
- package/dist/agents/schema/agent-config.d.ts +0 -2
- package/dist/agents/schema/agent-config.js +0 -32
- package/dist/agents/schema/agent-config.js.map +0 -1
- package/dist/agents/schema/create-agent-schema.d.ts +0 -25
- package/dist/agents/schema/create-agent-schema.js +0 -35
- package/dist/agents/schema/create-agent-schema.js.map +0 -1
- package/dist/api/chatkit/runtime/PtyThreadRuntime.d.ts +0 -127
- package/dist/api/chatkit/runtime/PtyThreadRuntime.js +0 -791
- package/dist/api/chatkit/runtime/PtyThreadRuntime.js.map +0 -1
- package/dist/cli/lib/agent-session.d.ts +0 -37
- package/dist/cli/lib/agent-session.js +0 -211
- package/dist/cli/lib/agent-session.js.map +0 -1
- package/dist/cli/lib/ensure-ai-credentials.d.ts +0 -13
- package/dist/cli/lib/ensure-ai-credentials.js +0 -40
- package/dist/cli/lib/ensure-ai-credentials.js.map +0 -1
- package/dist/cli/lib/model-manager.d.ts +0 -37
- package/dist/cli/lib/model-manager.js +0 -251
- package/dist/cli/lib/model-manager.js.map +0 -1
- package/dist/cli/lib/oauth-credential-manager.d.ts +0 -37
- package/dist/cli/lib/oauth-credential-manager.js +0 -129
- package/dist/cli/lib/oauth-credential-manager.js.map +0 -1
- package/dist/cli/lib/oauth-providers/codebuddy.d.ts +0 -25
- package/dist/cli/lib/oauth-providers/codebuddy.js +0 -69
- package/dist/cli/lib/oauth-providers/codebuddy.js.map +0 -1
- package/dist/cli/lib/oauth-providers/index.d.ts +0 -12
- package/dist/cli/lib/oauth-providers/index.js +0 -23
- package/dist/cli/lib/oauth-providers/index.js.map +0 -1
- package/dist/cli/lib/pi-optional.d.ts +0 -84
- package/dist/cli/lib/pi-optional.js +0 -35
- package/dist/cli/lib/pi-optional.js.map +0 -1
- package/dist/cli/lib/pod-ai-config.d.ts +0 -26
- package/dist/cli/lib/pod-ai-config.js +0 -99
- package/dist/cli/lib/pod-ai-config.js.map +0 -1
- package/dist/cli/lib/pod-thread-store.d.ts +0 -57
- package/dist/cli/lib/pod-thread-store.js +0 -312
- package/dist/cli/lib/pod-thread-store.js.map +0 -1
- package/dist/cli/lib/secretary-prompt.d.ts +0 -6
- package/dist/cli/lib/secretary-prompt.js +0 -85
- package/dist/cli/lib/secretary-prompt.js.map +0 -1
- package/dist/task/DrizzleTaskQueue.d.ts +0 -56
- package/dist/task/DrizzleTaskQueue.js +0 -171
- package/dist/task/DrizzleTaskQueue.js.map +0 -1
- package/dist/task/TaskExecutor.d.ts +0 -82
- package/dist/task/TaskExecutor.js +0 -198
- package/dist/task/TaskExecutor.js.map +0 -1
- package/dist/task/index.d.ts +0 -10
- package/dist/task/index.js +0 -20
- package/dist/task/index.js.map +0 -1
- package/dist/task/schema.d.ts +0 -53
- package/dist/task/schema.js +0 -71
- package/dist/task/schema.js.map +0 -1
- package/dist/task/types.d.ts +0 -186
- package/dist/task/types.js +0 -12
- package/dist/task/types.js.map +0 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InngestTaskScheduler = exports.XPOD_TASK_EVENT_FUNCTION_ID = exports.XPOD_TASK_MATERIALIZE_DUE_FUNCTION_ID = exports.XPOD_TASK_EVENT = exports.XPOD_TASK_MATERIALIZE_DUE_EVENT = void 0;
|
|
4
|
+
const types_1 = require("../chatkit/types");
|
|
5
|
+
exports.XPOD_TASK_MATERIALIZE_DUE_EVENT = 'xpod/task.materialize_due';
|
|
6
|
+
exports.XPOD_TASK_EVENT = 'xpod/task.event';
|
|
7
|
+
exports.XPOD_TASK_MATERIALIZE_DUE_FUNCTION_ID = 'xpod-task-materialize-due-runs';
|
|
8
|
+
exports.XPOD_TASK_EVENT_FUNCTION_ID = 'xpod-task-event';
|
|
9
|
+
class InngestTaskScheduler {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.pendingDueTasks = new Map();
|
|
12
|
+
this.pendingTaskEvents = new Map();
|
|
13
|
+
this.taskService = options.taskService;
|
|
14
|
+
this.getContext = options.getContext ?? (() => undefined);
|
|
15
|
+
this.getContexts = options.getContexts;
|
|
16
|
+
this.resolveContext = options.resolveContext;
|
|
17
|
+
this.recordContext = options.recordContext;
|
|
18
|
+
this.durableDelivery = options.durableDelivery ?? true;
|
|
19
|
+
this.executeInline = options.executeInline ?? true;
|
|
20
|
+
this.client = options.backend.getClient();
|
|
21
|
+
this.materializeDueRunsFunction = this.client.createFunction({
|
|
22
|
+
id: exports.XPOD_TASK_MATERIALIZE_DUE_FUNCTION_ID,
|
|
23
|
+
name: 'Xpod Task Materialize Due Runs',
|
|
24
|
+
triggers: [
|
|
25
|
+
{ cron: '*/1 * * * *' },
|
|
26
|
+
{ event: exports.XPOD_TASK_MATERIALIZE_DUE_EVENT },
|
|
27
|
+
],
|
|
28
|
+
}, (ctx) => this.handleDueTasks(ctx));
|
|
29
|
+
this.eventTaskFunction = this.client.createFunction({
|
|
30
|
+
id: exports.XPOD_TASK_EVENT_FUNCTION_ID,
|
|
31
|
+
name: 'Xpod Task Event',
|
|
32
|
+
triggers: [{ event: exports.XPOD_TASK_EVENT }],
|
|
33
|
+
}, (ctx) => this.handleTaskEvent(ctx));
|
|
34
|
+
}
|
|
35
|
+
getFunctions() {
|
|
36
|
+
return [this.materializeDueRunsFunction, this.eventTaskFunction];
|
|
37
|
+
}
|
|
38
|
+
async materializeDueTasks(context, options = {}) {
|
|
39
|
+
const requestId = (0, types_1.generateId)('task-due');
|
|
40
|
+
this.recordContext?.(context);
|
|
41
|
+
this.pendingDueTasks.set(requestId, { context, ...options });
|
|
42
|
+
try {
|
|
43
|
+
if (this.durableDelivery) {
|
|
44
|
+
await this.client.send({
|
|
45
|
+
id: requestId,
|
|
46
|
+
name: exports.XPOD_TASK_MATERIALIZE_DUE_EVENT,
|
|
47
|
+
data: {
|
|
48
|
+
requestId,
|
|
49
|
+
now: options.now,
|
|
50
|
+
limit: options.limit,
|
|
51
|
+
...this.contextEventData(context),
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if (!this.executeInline) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
return this.handleDueTasks(this.createInlineDueContext(requestId, options));
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
this.pendingDueTasks.delete(requestId);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async materializeEventTasks(input) {
|
|
66
|
+
const requestId = (0, types_1.generateId)('task-event');
|
|
67
|
+
this.recordContext?.(input.context);
|
|
68
|
+
this.pendingTaskEvents.set(requestId, input);
|
|
69
|
+
try {
|
|
70
|
+
if (this.durableDelivery) {
|
|
71
|
+
await this.client.send({
|
|
72
|
+
id: requestId,
|
|
73
|
+
name: exports.XPOD_TASK_EVENT,
|
|
74
|
+
data: {
|
|
75
|
+
requestId,
|
|
76
|
+
...this.contextEventData(input.context),
|
|
77
|
+
eventName: input.eventName,
|
|
78
|
+
payload: input.payload,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
if (!this.executeInline) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
return this.handleTaskEvent(this.createInlineEventContext(requestId, input));
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.pendingTaskEvents.delete(requestId);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async handleDueTasks(ctx) {
|
|
93
|
+
const requestId = ctx.event?.data?.requestId;
|
|
94
|
+
const pending = requestId ? this.pendingDueTasks.get(requestId) : undefined;
|
|
95
|
+
const contexts = await this.resolveDueContexts(pending?.context, ctx.event?.data);
|
|
96
|
+
if (contexts.length === 0) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
return await ctx.step.run('materialize-due-tasks', async () => {
|
|
101
|
+
const runs = [];
|
|
102
|
+
for (const context of contexts) {
|
|
103
|
+
runs.push(...await this.taskService.materializeDueTasks(context, {
|
|
104
|
+
now: pending?.now ?? ctx.event?.data?.now,
|
|
105
|
+
limit: pending?.limit ?? ctx.event?.data?.limit,
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
return runs;
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
if (requestId) {
|
|
113
|
+
this.pendingDueTasks.delete(requestId);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async handleTaskEvent(ctx) {
|
|
118
|
+
const requestId = ctx.event.data?.requestId;
|
|
119
|
+
const pending = requestId ? this.pendingTaskEvents.get(requestId) : undefined;
|
|
120
|
+
const eventName = pending?.eventName ?? ctx.event.data?.eventName;
|
|
121
|
+
if (!eventName) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const context = pending?.context ?? await this.resolveSingleContext(ctx.event.data);
|
|
125
|
+
if (!context) {
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
return await ctx.step.run('materialize-event-tasks', async () => this.taskService.materializeEventTasks({
|
|
130
|
+
eventName,
|
|
131
|
+
payload: pending?.payload ?? ctx.event.data?.payload,
|
|
132
|
+
context,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
if (requestId) {
|
|
137
|
+
this.pendingTaskEvents.delete(requestId);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
createInlineDueContext(requestId, options) {
|
|
142
|
+
const pending = this.pendingDueTasks.get(requestId);
|
|
143
|
+
return {
|
|
144
|
+
event: {
|
|
145
|
+
id: requestId,
|
|
146
|
+
name: exports.XPOD_TASK_MATERIALIZE_DUE_EVENT,
|
|
147
|
+
data: {
|
|
148
|
+
requestId,
|
|
149
|
+
now: options.now,
|
|
150
|
+
limit: options.limit,
|
|
151
|
+
...(pending ? this.contextEventData(pending.context) : {}),
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
step: {
|
|
155
|
+
run: async (_id, fn) => fn(),
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
createInlineEventContext(requestId, input) {
|
|
160
|
+
const pending = this.pendingTaskEvents.get(requestId);
|
|
161
|
+
return {
|
|
162
|
+
event: {
|
|
163
|
+
id: requestId,
|
|
164
|
+
name: exports.XPOD_TASK_EVENT,
|
|
165
|
+
data: {
|
|
166
|
+
requestId,
|
|
167
|
+
...(pending ? this.contextEventData(pending.context) : {}),
|
|
168
|
+
eventName: input.eventName,
|
|
169
|
+
payload: input.payload,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
step: {
|
|
173
|
+
run: async (_id, fn) => fn(),
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
async resolveDueContexts(pendingContext, eventData) {
|
|
178
|
+
if (pendingContext) {
|
|
179
|
+
return [pendingContext];
|
|
180
|
+
}
|
|
181
|
+
const eventContext = await this.resolveSingleContext(eventData);
|
|
182
|
+
if (eventContext) {
|
|
183
|
+
return [eventContext];
|
|
184
|
+
}
|
|
185
|
+
if (this.getContexts) {
|
|
186
|
+
return Array.from(await this.getContexts());
|
|
187
|
+
}
|
|
188
|
+
const fallback = this.getContext();
|
|
189
|
+
return fallback ? [fallback] : [];
|
|
190
|
+
}
|
|
191
|
+
async resolveSingleContext(eventData) {
|
|
192
|
+
const resolved = eventData ? await this.resolveContext?.(eventData) : undefined;
|
|
193
|
+
return resolved ?? this.getContext();
|
|
194
|
+
}
|
|
195
|
+
contextEventData(context) {
|
|
196
|
+
const auth = context.auth;
|
|
197
|
+
const data = {};
|
|
198
|
+
const authBindingId = context.authBindingId;
|
|
199
|
+
if (typeof authBindingId === 'string' && authBindingId.length > 0) {
|
|
200
|
+
data.authBindingId = authBindingId;
|
|
201
|
+
}
|
|
202
|
+
if (auth?.type === 'solid' && typeof auth.webId === 'string') {
|
|
203
|
+
data.webId = auth.webId;
|
|
204
|
+
}
|
|
205
|
+
return data;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
exports.InngestTaskScheduler = InngestTaskScheduler;
|
|
209
|
+
//# sourceMappingURL=InngestTaskScheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InngestTaskScheduler.js","sourceRoot":"","sources":["../../../src/api/tasks/InngestTaskScheduler.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EventPayload } from 'inngest/types';\nimport type { InngestRunExecutionBackend } from '../runs/InngestRunExecutionBackend';\nimport type { StoreContext } from '../chatkit/store';\nimport { generateId } from '../chatkit/types';\nimport type { TaskService } from './TaskService';\nimport type { MaterializedTaskRun } from './TaskMaterializer';\n\nexport const XPOD_TASK_MATERIALIZE_DUE_EVENT = 'xpod/task.materialize_due';\nexport const XPOD_TASK_EVENT = 'xpod/task.event';\nexport const XPOD_TASK_MATERIALIZE_DUE_FUNCTION_ID = 'xpod-task-materialize-due-runs';\nexport const XPOD_TASK_EVENT_FUNCTION_ID = 'xpod-task-event';\n\nexport interface XpodTaskMaterializeDueEventData {\n requestId?: string;\n now?: number;\n limit?: number;\n authBindingId?: string;\n webId?: string;\n}\n\nexport type XpodTaskMaterializeDueEvent = EventPayload<XpodTaskMaterializeDueEventData> & {\n name: typeof XPOD_TASK_MATERIALIZE_DUE_EVENT;\n};\n\nexport interface XpodTaskEventData {\n requestId?: string;\n authBindingId?: string;\n webId?: string;\n eventName: string;\n payload?: Record<string, unknown>;\n}\n\nexport type XpodTaskEvent = EventPayload<XpodTaskEventData> & {\n name: typeof XPOD_TASK_EVENT;\n};\n\nexport interface InngestTaskSchedulerOptions<TContext = StoreContext> {\n backend: InngestRunExecutionBackend;\n taskService: TaskService<TContext>;\n getContext?: () => TContext | undefined;\n getContexts?: () => Iterable<TContext> | Promise<Iterable<TContext>>;\n resolveContext?: (\n data: Partial<XpodTaskMaterializeDueEventData & XpodTaskEventData>,\n ) => TContext | Promise<TContext | undefined> | undefined;\n recordContext?: (context: TContext | undefined) => void;\n durableDelivery?: boolean;\n executeInline?: boolean;\n}\n\ntype InngestTaskEventContext = {\n event: XpodTaskEvent;\n step: {\n run<T>(id: string, fn: () => Promise<T> | T): Promise<T>;\n };\n};\n\ntype InngestCronContext = {\n event?: XpodTaskMaterializeDueEvent;\n step: {\n run<T>(id: string, fn: () => Promise<T> | T): Promise<T>;\n };\n};\n\nexport class InngestTaskScheduler<TContext = StoreContext> {\n public readonly materializeDueRunsFunction;\n public readonly eventTaskFunction;\n\n private readonly taskService: TaskService<TContext>;\n private readonly getContext: () => TContext | undefined;\n private readonly getContexts?: () => Iterable<TContext> | Promise<Iterable<TContext>>;\n private readonly resolveContext?: InngestTaskSchedulerOptions<TContext>['resolveContext'];\n private readonly recordContext?: InngestTaskSchedulerOptions<TContext>['recordContext'];\n private readonly durableDelivery: boolean;\n private readonly executeInline: boolean;\n private readonly pendingDueTasks = new Map<string, { context: TContext; now?: number; limit?: number }>();\n private readonly pendingTaskEvents = new Map<string, { context: TContext; eventName: string; payload?: Record<string, unknown> }>();\n private readonly client: ReturnType<InngestRunExecutionBackend['getClient']>;\n\n public constructor(options: InngestTaskSchedulerOptions<TContext>) {\n this.taskService = options.taskService;\n this.getContext = options.getContext ?? (() => undefined);\n this.getContexts = options.getContexts;\n this.resolveContext = options.resolveContext;\n this.recordContext = options.recordContext;\n this.durableDelivery = options.durableDelivery ?? true;\n this.executeInline = options.executeInline ?? true;\n this.client = options.backend.getClient();\n\n this.materializeDueRunsFunction = this.client.createFunction(\n {\n id: XPOD_TASK_MATERIALIZE_DUE_FUNCTION_ID,\n name: 'Xpod Task Materialize Due Runs',\n triggers: [\n { cron: '*/1 * * * *' },\n { event: XPOD_TASK_MATERIALIZE_DUE_EVENT },\n ],\n },\n (ctx: any) => this.handleDueTasks(ctx as InngestCronContext),\n );\n\n this.eventTaskFunction = this.client.createFunction(\n {\n id: XPOD_TASK_EVENT_FUNCTION_ID,\n name: 'Xpod Task Event',\n triggers: [{ event: XPOD_TASK_EVENT }],\n },\n (ctx: any) => this.handleTaskEvent(ctx as InngestTaskEventContext),\n );\n }\n\n public getFunctions(): unknown[] {\n return [this.materializeDueRunsFunction, this.eventTaskFunction];\n }\n\n public async materializeDueTasks(\n context: TContext,\n options: { now?: number; limit?: number } = {},\n ): Promise<MaterializedTaskRun[]> {\n const requestId = generateId('task-due');\n this.recordContext?.(context);\n this.pendingDueTasks.set(requestId, { context, ...options });\n try {\n if (this.durableDelivery) {\n await this.client.send({\n id: requestId,\n name: XPOD_TASK_MATERIALIZE_DUE_EVENT,\n data: {\n requestId,\n now: options.now,\n limit: options.limit,\n ...this.contextEventData(context),\n },\n });\n }\n if (!this.executeInline) {\n return [];\n }\n return this.handleDueTasks(this.createInlineDueContext(requestId, options));\n } catch (error) {\n this.pendingDueTasks.delete(requestId);\n throw error;\n }\n }\n\n public async materializeEventTasks(input: {\n eventName: string;\n payload?: Record<string, unknown>;\n context: TContext;\n }): Promise<MaterializedTaskRun[]> {\n const requestId = generateId('task-event');\n this.recordContext?.(input.context);\n this.pendingTaskEvents.set(requestId, input);\n try {\n if (this.durableDelivery) {\n await this.client.send({\n id: requestId,\n name: XPOD_TASK_EVENT,\n data: {\n requestId,\n ...this.contextEventData(input.context),\n eventName: input.eventName,\n payload: input.payload,\n },\n });\n }\n if (!this.executeInline) {\n return [];\n }\n return this.handleTaskEvent(this.createInlineEventContext(requestId, input));\n } catch (error) {\n this.pendingTaskEvents.delete(requestId);\n throw error;\n }\n }\n\n private async handleDueTasks(ctx: InngestCronContext): Promise<MaterializedTaskRun[]> {\n const requestId = ctx.event?.data?.requestId;\n const pending = requestId ? this.pendingDueTasks.get(requestId) : undefined;\n const contexts = await this.resolveDueContexts(pending?.context, ctx.event?.data);\n if (contexts.length === 0) {\n return [];\n }\n try {\n return await ctx.step.run('materialize-due-tasks', async () => {\n const runs: MaterializedTaskRun[] = [];\n for (const context of contexts) {\n runs.push(...await this.taskService.materializeDueTasks(context, {\n now: pending?.now ?? ctx.event?.data?.now,\n limit: pending?.limit ?? ctx.event?.data?.limit,\n }));\n }\n return runs;\n });\n } finally {\n if (requestId) {\n this.pendingDueTasks.delete(requestId);\n }\n }\n }\n\n private async handleTaskEvent(ctx: InngestTaskEventContext): Promise<MaterializedTaskRun[]> {\n const requestId = ctx.event.data?.requestId;\n const pending = requestId ? this.pendingTaskEvents.get(requestId) : undefined;\n const eventName = pending?.eventName ?? ctx.event.data?.eventName;\n if (!eventName) {\n return [];\n }\n const context = pending?.context ?? await this.resolveSingleContext(ctx.event.data);\n if (!context) {\n return [];\n }\n try {\n return await ctx.step.run('materialize-event-tasks', async () => this.taskService.materializeEventTasks({\n eventName,\n payload: pending?.payload ?? ctx.event.data?.payload,\n context,\n }));\n } finally {\n if (requestId) {\n this.pendingTaskEvents.delete(requestId);\n }\n }\n }\n\n private createInlineDueContext(requestId: string, options: { now?: number; limit?: number }): InngestCronContext {\n const pending = this.pendingDueTasks.get(requestId);\n return {\n event: {\n id: requestId,\n name: XPOD_TASK_MATERIALIZE_DUE_EVENT,\n data: {\n requestId,\n now: options.now,\n limit: options.limit,\n ...(pending ? this.contextEventData(pending.context) : {}),\n },\n },\n step: {\n run: async <T>(_id: string, fn: () => Promise<T> | T): Promise<T> => fn(),\n },\n };\n }\n\n private createInlineEventContext(\n requestId: string,\n input: {\n eventName: string;\n payload?: Record<string, unknown>;\n },\n ): InngestTaskEventContext {\n const pending = this.pendingTaskEvents.get(requestId);\n return {\n event: {\n id: requestId,\n name: XPOD_TASK_EVENT,\n data: {\n requestId,\n ...(pending ? this.contextEventData(pending.context) : {}),\n eventName: input.eventName,\n payload: input.payload,\n },\n },\n step: {\n run: async <T>(_id: string, fn: () => Promise<T> | T): Promise<T> => fn(),\n },\n };\n }\n\n private async resolveDueContexts(\n pendingContext: TContext | undefined,\n eventData: XpodTaskMaterializeDueEventData | undefined,\n ): Promise<TContext[]> {\n if (pendingContext) {\n return [pendingContext];\n }\n const eventContext = await this.resolveSingleContext(eventData);\n if (eventContext) {\n return [eventContext];\n }\n if (this.getContexts) {\n return Array.from(await this.getContexts());\n }\n const fallback = this.getContext();\n return fallback ? [fallback] : [];\n }\n\n private async resolveSingleContext(\n eventData: Partial<XpodTaskMaterializeDueEventData & XpodTaskEventData> | undefined,\n ): Promise<TContext | undefined> {\n const resolved = eventData ? await this.resolveContext?.(eventData) : undefined;\n return resolved ?? this.getContext();\n }\n\n private contextEventData(context: TContext): Partial<XpodTaskMaterializeDueEventData & XpodTaskEventData> {\n const auth = (context as Record<string, unknown>).auth as { type?: unknown; webId?: unknown } | undefined;\n const data: Partial<XpodTaskMaterializeDueEventData & XpodTaskEventData> = {};\n const authBindingId = (context as Record<string, unknown>).authBindingId;\n if (typeof authBindingId === 'string' && authBindingId.length > 0) {\n data.authBindingId = authBindingId;\n }\n if (auth?.type === 'solid' && typeof auth.webId === 'string') {\n data.webId = auth.webId;\n }\n return data;\n }\n}\n"]}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { StoreContext } from '../chatkit/store';
|
|
2
|
+
export declare const TaskAuthBindingKind: {
|
|
3
|
+
readonly SOLID_CLIENT_CREDENTIALS: "solid-client-credentials";
|
|
4
|
+
};
|
|
5
|
+
export declare const TaskAuthBindingStatus: {
|
|
6
|
+
readonly ACTIVE: "active";
|
|
7
|
+
readonly REVOKED: "revoked";
|
|
8
|
+
};
|
|
9
|
+
export declare const TASK_AUTH_CREDENTIAL_SERVICE = "task-auth";
|
|
10
|
+
export type TaskAuthBindingKindType = (typeof TaskAuthBindingKind)[keyof typeof TaskAuthBindingKind];
|
|
11
|
+
export type TaskAuthBindingStatusType = (typeof TaskAuthBindingStatus)[keyof typeof TaskAuthBindingStatus];
|
|
12
|
+
export interface TaskAuthBindingSnapshot {
|
|
13
|
+
/** Credential resource id understood by the shared Credential model. */
|
|
14
|
+
id: string;
|
|
15
|
+
kind: TaskAuthBindingKindType;
|
|
16
|
+
webId: string;
|
|
17
|
+
clientId: string;
|
|
18
|
+
displayName?: string;
|
|
19
|
+
status: TaskAuthBindingStatusType;
|
|
20
|
+
createdAt: number;
|
|
21
|
+
expiresAt?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateTaskAuthBindingInput {
|
|
24
|
+
id?: string;
|
|
25
|
+
webId?: string;
|
|
26
|
+
clientId?: string;
|
|
27
|
+
clientSecret?: string;
|
|
28
|
+
displayName?: string;
|
|
29
|
+
expiresAt?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface TaskAuthCredentialRecord {
|
|
32
|
+
id: string;
|
|
33
|
+
service: string;
|
|
34
|
+
status: string;
|
|
35
|
+
apiKey?: string | null;
|
|
36
|
+
label?: string | null;
|
|
37
|
+
oauthExpiresAt?: string | Date | null;
|
|
38
|
+
createdAt?: string | Date | null;
|
|
39
|
+
}
|
|
40
|
+
export interface TaskAuthBindingRepository<TContext extends StoreContext = StoreContext> {
|
|
41
|
+
saveTaskAuthCredential(input: {
|
|
42
|
+
id: string;
|
|
43
|
+
apiKey: string;
|
|
44
|
+
displayName?: string;
|
|
45
|
+
expiresAt?: number;
|
|
46
|
+
}, context: TContext): Promise<TaskAuthCredentialRecord>;
|
|
47
|
+
loadTaskAuthCredential(id: string, context: TContext): Promise<TaskAuthCredentialRecord | undefined>;
|
|
48
|
+
}
|
|
49
|
+
export interface TaskAuthBindingServiceOptions<TContext extends StoreContext = StoreContext> {
|
|
50
|
+
repository: TaskAuthBindingRepository<TContext>;
|
|
51
|
+
buildContext?: (binding: TaskAuthBindingSnapshot, clientSecret: string, context: TContext) => TContext;
|
|
52
|
+
}
|
|
53
|
+
export declare class TaskAuthBindingService<TContext extends StoreContext = StoreContext> {
|
|
54
|
+
private readonly repository;
|
|
55
|
+
private readonly buildContext;
|
|
56
|
+
constructor(options: TaskAuthBindingServiceOptions<TContext>);
|
|
57
|
+
createBinding(input: CreateTaskAuthBindingInput, context: TContext): Promise<TaskAuthBindingSnapshot>;
|
|
58
|
+
loadBinding(id: string, context: TContext): Promise<TaskAuthBindingSnapshot>;
|
|
59
|
+
resolveRunContext(bindingId: string, context: TContext): Promise<TContext | undefined>;
|
|
60
|
+
private snapshotFromCredential;
|
|
61
|
+
private solidAuthFromContext;
|
|
62
|
+
private defaultBuildContext;
|
|
63
|
+
}
|
|
64
|
+
export declare function encodeClientCredentialsApiKey(clientId: string, clientSecret: string): string;
|
|
65
|
+
export declare function parseClientCredentialsApiKey(value: unknown): {
|
|
66
|
+
clientId: string;
|
|
67
|
+
clientSecret: string;
|
|
68
|
+
} | undefined;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskAuthBindingService = exports.TASK_AUTH_CREDENTIAL_SERVICE = exports.TaskAuthBindingStatus = exports.TaskAuthBindingKind = void 0;
|
|
4
|
+
exports.encodeClientCredentialsApiKey = encodeClientCredentialsApiKey;
|
|
5
|
+
exports.parseClientCredentialsApiKey = parseClientCredentialsApiKey;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
const AuthContext_1 = require("../auth/AuthContext");
|
|
8
|
+
exports.TaskAuthBindingKind = {
|
|
9
|
+
SOLID_CLIENT_CREDENTIALS: 'solid-client-credentials',
|
|
10
|
+
};
|
|
11
|
+
exports.TaskAuthBindingStatus = {
|
|
12
|
+
ACTIVE: 'active',
|
|
13
|
+
REVOKED: 'revoked',
|
|
14
|
+
};
|
|
15
|
+
exports.TASK_AUTH_CREDENTIAL_SERVICE = 'task-auth';
|
|
16
|
+
class TaskAuthBindingService {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.repository = options.repository;
|
|
19
|
+
this.buildContext = options.buildContext ?? this.defaultBuildContext;
|
|
20
|
+
}
|
|
21
|
+
async createBinding(input, context) {
|
|
22
|
+
const auth = this.solidAuthFromContext(context);
|
|
23
|
+
const webId = input.webId ?? auth?.webId;
|
|
24
|
+
const clientId = input.clientId ?? auth?.clientId;
|
|
25
|
+
const clientSecret = input.clientSecret ?? auth?.clientSecret;
|
|
26
|
+
if (!webId) {
|
|
27
|
+
throw new Error('Task auth credential requires a Solid webId');
|
|
28
|
+
}
|
|
29
|
+
if (auth?.webId && webId !== auth.webId) {
|
|
30
|
+
throw new Error('Task auth credential webId must match the authenticated caller');
|
|
31
|
+
}
|
|
32
|
+
if (!clientId || !clientSecret) {
|
|
33
|
+
throw new Error('Task auth credential creation requires Solid client credentials');
|
|
34
|
+
}
|
|
35
|
+
const credential = await this.repository.saveTaskAuthCredential({
|
|
36
|
+
id: normalizeCredentialId(input.id) ?? `task-auth_${(0, node_crypto_1.randomUUID)()}`,
|
|
37
|
+
apiKey: encodeClientCredentialsApiKey(clientId, clientSecret),
|
|
38
|
+
displayName: input.displayName,
|
|
39
|
+
expiresAt: input.expiresAt,
|
|
40
|
+
}, context);
|
|
41
|
+
return this.snapshotFromCredential(credential, context);
|
|
42
|
+
}
|
|
43
|
+
async loadBinding(id, context) {
|
|
44
|
+
const credential = await this.repository.loadTaskAuthCredential(id, context);
|
|
45
|
+
if (!credential) {
|
|
46
|
+
throw new Error(`Task auth credential not found: ${id}`);
|
|
47
|
+
}
|
|
48
|
+
return this.snapshotFromCredential(credential, context);
|
|
49
|
+
}
|
|
50
|
+
async resolveRunContext(bindingId, context) {
|
|
51
|
+
const credential = await this.repository.loadTaskAuthCredential(bindingId, context);
|
|
52
|
+
if (!credential) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const snapshot = this.snapshotFromCredential(credential, context);
|
|
56
|
+
if (snapshot.status !== exports.TaskAuthBindingStatus.ACTIVE) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
if (snapshot.expiresAt && snapshot.expiresAt <= nowTimestamp()) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const parsed = parseClientCredentialsApiKey(credential.apiKey);
|
|
63
|
+
if (!parsed) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
return this.buildContext(snapshot, parsed.clientSecret, context);
|
|
67
|
+
}
|
|
68
|
+
snapshotFromCredential(credential, context) {
|
|
69
|
+
if (credential.service !== exports.TASK_AUTH_CREDENTIAL_SERVICE) {
|
|
70
|
+
throw new Error(`Credential is not a task auth credential: ${credential.id}`);
|
|
71
|
+
}
|
|
72
|
+
const parsed = parseClientCredentialsApiKey(credential.apiKey);
|
|
73
|
+
if (!parsed) {
|
|
74
|
+
throw new Error(`Task auth credential is missing client credentials: ${credential.id}`);
|
|
75
|
+
}
|
|
76
|
+
const auth = this.solidAuthFromContext(context);
|
|
77
|
+
const webId = auth?.webId;
|
|
78
|
+
if (!webId) {
|
|
79
|
+
throw new Error('Task auth credential resolution requires a Solid webId');
|
|
80
|
+
}
|
|
81
|
+
const status = credential.status === 'active'
|
|
82
|
+
? exports.TaskAuthBindingStatus.ACTIVE
|
|
83
|
+
: exports.TaskAuthBindingStatus.REVOKED;
|
|
84
|
+
const expiresAt = isoToTimestamp(credential.oauthExpiresAt);
|
|
85
|
+
if (expiresAt && expiresAt <= nowTimestamp()) {
|
|
86
|
+
return {
|
|
87
|
+
id: credential.id,
|
|
88
|
+
kind: exports.TaskAuthBindingKind.SOLID_CLIENT_CREDENTIALS,
|
|
89
|
+
webId,
|
|
90
|
+
clientId: parsed.clientId,
|
|
91
|
+
displayName: credential.label ?? undefined,
|
|
92
|
+
status: exports.TaskAuthBindingStatus.REVOKED,
|
|
93
|
+
createdAt: isoToTimestamp(credential.createdAt) ?? nowTimestamp(),
|
|
94
|
+
expiresAt,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
id: credential.id,
|
|
99
|
+
kind: exports.TaskAuthBindingKind.SOLID_CLIENT_CREDENTIALS,
|
|
100
|
+
webId,
|
|
101
|
+
clientId: parsed.clientId,
|
|
102
|
+
displayName: credential.label ?? undefined,
|
|
103
|
+
status,
|
|
104
|
+
createdAt: isoToTimestamp(credential.createdAt) ?? nowTimestamp(),
|
|
105
|
+
expiresAt,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
solidAuthFromContext(context) {
|
|
109
|
+
const auth = context.auth;
|
|
110
|
+
return auth && (0, AuthContext_1.isSolidAuth)(auth) ? auth : undefined;
|
|
111
|
+
}
|
|
112
|
+
defaultBuildContext(binding, clientSecret, context) {
|
|
113
|
+
return {
|
|
114
|
+
...context,
|
|
115
|
+
userId: typeof context.userId === 'string' ? context.userId : binding.webId,
|
|
116
|
+
auth: {
|
|
117
|
+
type: 'solid',
|
|
118
|
+
webId: binding.webId,
|
|
119
|
+
accountId: binding.webId,
|
|
120
|
+
clientId: binding.clientId,
|
|
121
|
+
clientSecret,
|
|
122
|
+
viaApiKey: true,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.TaskAuthBindingService = TaskAuthBindingService;
|
|
128
|
+
function encodeClientCredentialsApiKey(clientId, clientSecret) {
|
|
129
|
+
return `sk-${Buffer.from(`${clientId}:${clientSecret}`, 'utf8').toString('base64')}`;
|
|
130
|
+
}
|
|
131
|
+
function parseClientCredentialsApiKey(value) {
|
|
132
|
+
if (typeof value !== 'string' || !value.startsWith('sk-')) {
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
const decoded = Buffer.from(value.slice(3), 'base64').toString('utf8');
|
|
136
|
+
const separator = decoded.indexOf(':');
|
|
137
|
+
if (separator <= 0) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
const clientId = decoded.slice(0, separator);
|
|
141
|
+
const clientSecret = decoded.slice(separator + 1);
|
|
142
|
+
return clientId && clientSecret ? { clientId, clientSecret } : undefined;
|
|
143
|
+
}
|
|
144
|
+
function normalizeCredentialId(value) {
|
|
145
|
+
const trimmed = value?.trim();
|
|
146
|
+
if (!trimmed) {
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
return trimmed.startsWith('#') ? trimmed.slice(1) : trimmed;
|
|
150
|
+
}
|
|
151
|
+
function isoToTimestamp(value) {
|
|
152
|
+
if (!value) {
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
156
|
+
const time = date.getTime();
|
|
157
|
+
return Number.isNaN(time) ? undefined : Math.floor(time / 1000);
|
|
158
|
+
}
|
|
159
|
+
function nowTimestamp() {
|
|
160
|
+
return Math.floor(Date.now() / 1000);
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=TaskAuthBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskAuthBinding.js","sourceRoot":"","sources":["../../../src/api/tasks/TaskAuthBinding.ts"],"names":[],"mappings":";;;AAoMA,sEAEC;AAED,oEAYC;AApND,6CAAyC;AAGzC,qDAAkD;AAErC,QAAA,mBAAmB,GAAG;IACjC,wBAAwB,EAAE,0BAA0B;CAC5C,CAAC;AAEE,QAAA,qBAAqB,GAAG;IACnC,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;CACV,CAAC;AAEE,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAmDxD,MAAa,sBAAsB;IAIjC,YAAmB,OAAgD;QACjE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,mBAAmB,CAAC;IACvE,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,KAAiC,EAAE,OAAiB;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,KAAK,CAAC;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,QAAQ,CAAC;QAClD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE,YAAY,CAAC;QAE9D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,IAAI,EAAE,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;YAC9D,EAAE,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,aAAa,IAAA,wBAAU,GAAE,EAAE;YAClE,MAAM,EAAE,6BAA6B,CAAC,QAAQ,EAAE,YAAY,CAAC;YAC7D,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,EAAE,OAAO,CAAC,CAAC;QAEZ,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,EAAU,EAAE,OAAiB;QACpD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,OAAiB;QACjE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,6BAAqB,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,IAAI,YAAY,EAAE,EAAE,CAAC;YAC/D,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAG,4BAA4B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAEO,sBAAsB,CAC5B,UAAoC,EACpC,OAAiB;QAEjB,IAAI,UAAU,CAAC,OAAO,KAAK,oCAA4B,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,6CAA6C,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,MAAM,GAAG,4BAA4B,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uDAAuD,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,QAAQ;YAC3C,CAAC,CAAC,6BAAqB,CAAC,MAAM;YAC9B,CAAC,CAAC,6BAAqB,CAAC,OAAO,CAAC;QAClC,MAAM,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,SAAS,IAAI,SAAS,IAAI,YAAY,EAAE,EAAE,CAAC;YAC7C,OAAO;gBACL,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,IAAI,EAAE,2BAAmB,CAAC,wBAAwB;gBAClD,KAAK;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,SAAS;gBAC1C,MAAM,EAAE,6BAAqB,CAAC,OAAO;gBACrC,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE;gBACjE,SAAS;aACV,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,2BAAmB,CAAC,wBAAwB;YAClD,KAAK;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,UAAU,CAAC,KAAK,IAAI,SAAS;YAC1C,MAAM;YACN,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,YAAY,EAAE;YACjE,SAAS;SACV,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAAC,OAAiB;QAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAoC,CAAC;QAC1D,OAAO,IAAI,IAAI,IAAA,yBAAW,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC;IAEO,mBAAmB,CAAC,OAAgC,EAAE,YAAoB,EAAE,OAAiB;QACnG,OAAO;YACL,GAAG,OAAO;YACV,MAAM,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK;YAC3E,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,KAAK;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,YAAY;gBACZ,SAAS,EAAE,IAAI;aAChB;SACqB,CAAC;IAC3B,CAAC;CACF;AAjID,wDAiIC;AAED,SAAgB,6BAA6B,CAAC,QAAgB,EAAE,YAAoB;IAClF,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,SAAgB,4BAA4B,CAAC,KAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAClD,OAAO,QAAQ,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAyB;IACtD,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED,SAAS,cAAc,CAAC,KAAuC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { StoreContext } from '../chatkit/store';\nimport type { SolidAuthContext } from '../auth/AuthContext';\nimport { isSolidAuth } from '../auth/AuthContext';\n\nexport const TaskAuthBindingKind = {\n SOLID_CLIENT_CREDENTIALS: 'solid-client-credentials',\n} as const;\n\nexport const TaskAuthBindingStatus = {\n ACTIVE: 'active',\n REVOKED: 'revoked',\n} as const;\n\nexport const TASK_AUTH_CREDENTIAL_SERVICE = 'task-auth';\n\nexport type TaskAuthBindingKindType = (typeof TaskAuthBindingKind)[keyof typeof TaskAuthBindingKind];\nexport type TaskAuthBindingStatusType = (typeof TaskAuthBindingStatus)[keyof typeof TaskAuthBindingStatus];\n\nexport interface TaskAuthBindingSnapshot {\n /** Credential resource id understood by the shared Credential model. */\n id: string;\n kind: TaskAuthBindingKindType;\n webId: string;\n clientId: string;\n displayName?: string;\n status: TaskAuthBindingStatusType;\n createdAt: number;\n expiresAt?: number;\n}\n\nexport interface CreateTaskAuthBindingInput {\n id?: string;\n webId?: string;\n clientId?: string;\n clientSecret?: string;\n displayName?: string;\n expiresAt?: number;\n}\n\nexport interface TaskAuthCredentialRecord {\n id: string;\n service: string;\n status: string;\n apiKey?: string | null;\n label?: string | null;\n oauthExpiresAt?: string | Date | null;\n createdAt?: string | Date | null;\n}\n\nexport interface TaskAuthBindingRepository<TContext extends StoreContext = StoreContext> {\n saveTaskAuthCredential(input: {\n id: string;\n apiKey: string;\n displayName?: string;\n expiresAt?: number;\n }, context: TContext): Promise<TaskAuthCredentialRecord>;\n loadTaskAuthCredential(id: string, context: TContext): Promise<TaskAuthCredentialRecord | undefined>;\n}\n\nexport interface TaskAuthBindingServiceOptions<TContext extends StoreContext = StoreContext> {\n repository: TaskAuthBindingRepository<TContext>;\n buildContext?: (binding: TaskAuthBindingSnapshot, clientSecret: string, context: TContext) => TContext;\n}\n\nexport class TaskAuthBindingService<TContext extends StoreContext = StoreContext> {\n private readonly repository: TaskAuthBindingRepository<TContext>;\n private readonly buildContext: (binding: TaskAuthBindingSnapshot, clientSecret: string, context: TContext) => TContext;\n\n public constructor(options: TaskAuthBindingServiceOptions<TContext>) {\n this.repository = options.repository;\n this.buildContext = options.buildContext ?? this.defaultBuildContext;\n }\n\n public async createBinding(input: CreateTaskAuthBindingInput, context: TContext): Promise<TaskAuthBindingSnapshot> {\n const auth = this.solidAuthFromContext(context);\n const webId = input.webId ?? auth?.webId;\n const clientId = input.clientId ?? auth?.clientId;\n const clientSecret = input.clientSecret ?? auth?.clientSecret;\n\n if (!webId) {\n throw new Error('Task auth credential requires a Solid webId');\n }\n if (auth?.webId && webId !== auth.webId) {\n throw new Error('Task auth credential webId must match the authenticated caller');\n }\n if (!clientId || !clientSecret) {\n throw new Error('Task auth credential creation requires Solid client credentials');\n }\n\n const credential = await this.repository.saveTaskAuthCredential({\n id: normalizeCredentialId(input.id) ?? `task-auth_${randomUUID()}`,\n apiKey: encodeClientCredentialsApiKey(clientId, clientSecret),\n displayName: input.displayName,\n expiresAt: input.expiresAt,\n }, context);\n\n return this.snapshotFromCredential(credential, context);\n }\n\n public async loadBinding(id: string, context: TContext): Promise<TaskAuthBindingSnapshot> {\n const credential = await this.repository.loadTaskAuthCredential(id, context);\n if (!credential) {\n throw new Error(`Task auth credential not found: ${id}`);\n }\n return this.snapshotFromCredential(credential, context);\n }\n\n public async resolveRunContext(bindingId: string, context: TContext): Promise<TContext | undefined> {\n const credential = await this.repository.loadTaskAuthCredential(bindingId, context);\n if (!credential) {\n return undefined;\n }\n const snapshot = this.snapshotFromCredential(credential, context);\n if (snapshot.status !== TaskAuthBindingStatus.ACTIVE) {\n return undefined;\n }\n if (snapshot.expiresAt && snapshot.expiresAt <= nowTimestamp()) {\n return undefined;\n }\n const parsed = parseClientCredentialsApiKey(credential.apiKey);\n if (!parsed) {\n return undefined;\n }\n return this.buildContext(snapshot, parsed.clientSecret, context);\n }\n\n private snapshotFromCredential(\n credential: TaskAuthCredentialRecord,\n context: TContext,\n ): TaskAuthBindingSnapshot {\n if (credential.service !== TASK_AUTH_CREDENTIAL_SERVICE) {\n throw new Error(`Credential is not a task auth credential: ${credential.id}`);\n }\n\n const parsed = parseClientCredentialsApiKey(credential.apiKey);\n if (!parsed) {\n throw new Error(`Task auth credential is missing client credentials: ${credential.id}`);\n }\n\n const auth = this.solidAuthFromContext(context);\n const webId = auth?.webId;\n if (!webId) {\n throw new Error('Task auth credential resolution requires a Solid webId');\n }\n\n const status = credential.status === 'active'\n ? TaskAuthBindingStatus.ACTIVE\n : TaskAuthBindingStatus.REVOKED;\n const expiresAt = isoToTimestamp(credential.oauthExpiresAt);\n if (expiresAt && expiresAt <= nowTimestamp()) {\n return {\n id: credential.id,\n kind: TaskAuthBindingKind.SOLID_CLIENT_CREDENTIALS,\n webId,\n clientId: parsed.clientId,\n displayName: credential.label ?? undefined,\n status: TaskAuthBindingStatus.REVOKED,\n createdAt: isoToTimestamp(credential.createdAt) ?? nowTimestamp(),\n expiresAt,\n };\n }\n\n return {\n id: credential.id,\n kind: TaskAuthBindingKind.SOLID_CLIENT_CREDENTIALS,\n webId,\n clientId: parsed.clientId,\n displayName: credential.label ?? undefined,\n status,\n createdAt: isoToTimestamp(credential.createdAt) ?? nowTimestamp(),\n expiresAt,\n };\n }\n\n private solidAuthFromContext(context: TContext): SolidAuthContext | undefined {\n const auth = context.auth as SolidAuthContext | undefined;\n return auth && isSolidAuth(auth) ? auth : undefined;\n }\n\n private defaultBuildContext(binding: TaskAuthBindingSnapshot, clientSecret: string, context: TContext): TContext {\n return {\n ...context,\n userId: typeof context.userId === 'string' ? context.userId : binding.webId,\n auth: {\n type: 'solid',\n webId: binding.webId,\n accountId: binding.webId,\n clientId: binding.clientId,\n clientSecret,\n viaApiKey: true,\n },\n } as unknown as TContext;\n }\n}\n\nexport function encodeClientCredentialsApiKey(clientId: string, clientSecret: string): string {\n return `sk-${Buffer.from(`${clientId}:${clientSecret}`, 'utf8').toString('base64')}`;\n}\n\nexport function parseClientCredentialsApiKey(value: unknown): { clientId: string; clientSecret: string } | undefined {\n if (typeof value !== 'string' || !value.startsWith('sk-')) {\n return undefined;\n }\n const decoded = Buffer.from(value.slice(3), 'base64').toString('utf8');\n const separator = decoded.indexOf(':');\n if (separator <= 0) {\n return undefined;\n }\n const clientId = decoded.slice(0, separator);\n const clientSecret = decoded.slice(separator + 1);\n return clientId && clientSecret ? { clientId, clientSecret } : undefined;\n}\n\nfunction normalizeCredentialId(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) {\n return undefined;\n }\n return trimmed.startsWith('#') ? trimmed.slice(1) : trimmed;\n}\n\nfunction isoToTimestamp(value: string | Date | null | undefined): number | undefined {\n if (!value) {\n return undefined;\n }\n const date = value instanceof Date ? value : new Date(value);\n const time = date.getTime();\n return Number.isNaN(time) ? undefined : Math.floor(time / 1000);\n}\n\nfunction nowTimestamp(): number {\n return Math.floor(Date.now() / 1000);\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { ChatKitStore, StoreContext } from '../chatkit/store';
|
|
2
|
+
import type { ThreadItem } from '../chatkit/types';
|
|
3
|
+
import type { RunExecutionBackend } from '../runs/RunExecutionBackend';
|
|
4
|
+
import { type RunRecordData, type RunStore } from '../runs/store';
|
|
5
|
+
import { type TaskRecordData } from './store';
|
|
6
|
+
export interface MaterializedTaskRun {
|
|
7
|
+
task: TaskRecordData;
|
|
8
|
+
run: RunRecordData;
|
|
9
|
+
assistant?: ThreadItem;
|
|
10
|
+
}
|
|
11
|
+
export interface TaskMaterializerOptions<TContext = StoreContext> {
|
|
12
|
+
store: ChatKitStore<TContext> & RunStore<TContext>;
|
|
13
|
+
executionBackend?: RunExecutionBackend;
|
|
14
|
+
executeRuns?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare class TaskMaterializer<TContext = StoreContext> {
|
|
17
|
+
private readonly store;
|
|
18
|
+
private readonly executionBackend;
|
|
19
|
+
private readonly executeRuns;
|
|
20
|
+
constructor(options: TaskMaterializerOptions<TContext>);
|
|
21
|
+
materialize(input: {
|
|
22
|
+
task: TaskRecordData;
|
|
23
|
+
context: TContext;
|
|
24
|
+
trigger: {
|
|
25
|
+
kind: 'once' | 'interval' | 'cron' | 'event' | 'manual';
|
|
26
|
+
scheduledFor?: number;
|
|
27
|
+
eventName?: string;
|
|
28
|
+
payload?: Record<string, unknown>;
|
|
29
|
+
};
|
|
30
|
+
}): Promise<MaterializedTaskRun>;
|
|
31
|
+
private executeRun;
|
|
32
|
+
private ensureThread;
|
|
33
|
+
private createRun;
|
|
34
|
+
private markRunStarted;
|
|
35
|
+
private finishRun;
|
|
36
|
+
private isWaitingStatus;
|
|
37
|
+
private stepTypeForStatus;
|
|
38
|
+
private appendRunStep;
|
|
39
|
+
private createUserMessage;
|
|
40
|
+
private buildPrompt;
|
|
41
|
+
private createAssistantMessage;
|
|
42
|
+
private loadConversation;
|
|
43
|
+
private buildRuntimeConfig;
|
|
44
|
+
private parseRunner;
|
|
45
|
+
private isRunnerType;
|
|
46
|
+
private computeNextIntervalRunAt;
|
|
47
|
+
private computeNextCronRunAt;
|
|
48
|
+
private threadRefFromTask;
|
|
49
|
+
private parseThreadUri;
|
|
50
|
+
private extractThreadId;
|
|
51
|
+
private resolveTaskUri;
|
|
52
|
+
private resolveRunUri;
|
|
53
|
+
private resolvePodBaseUrl;
|
|
54
|
+
private hasSaveTask;
|
|
55
|
+
}
|