@undefineds.co/xpod 0.2.45 → 0.3.1
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 +9 -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
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py
|
|
6
6
|
*/
|
|
7
7
|
import type { ThreadMetadata, ThreadRef, ThreadItem, Attachment, Page, StoreItemType } from './types';
|
|
8
|
+
import { type RunListOptions, type RunRecordData, type RunStepRecordData, type RunStore } from '../runs/store';
|
|
9
|
+
import { type TaskListOptions, type TaskRecordData, type TaskStore } from '../tasks/store';
|
|
10
|
+
import { type TaskAuthBindingRepository, type TaskAuthCredentialRecord } from '../tasks/TaskAuthBinding';
|
|
8
11
|
/**
|
|
9
12
|
* Context type for store operations (generic)
|
|
10
13
|
*/
|
|
@@ -12,7 +15,7 @@ export type StoreContext = Record<string, unknown>;
|
|
|
12
15
|
/**
|
|
13
16
|
* Abstract Store interface
|
|
14
17
|
*/
|
|
15
|
-
export interface ChatKitStore<TContext = StoreContext> {
|
|
18
|
+
export interface ChatKitStore<TContext = StoreContext> extends Partial<RunStore<TContext>> {
|
|
16
19
|
generateThreadId(context: TContext): string;
|
|
17
20
|
generateItemId(itemType: StoreItemType, thread: ThreadMetadata, context: TContext): string;
|
|
18
21
|
loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata>;
|
|
@@ -34,15 +37,19 @@ export interface ChatKitStore<TContext = StoreContext> {
|
|
|
34
37
|
* Simple in-memory store for development and testing.
|
|
35
38
|
* Data is lost when the server restarts.
|
|
36
39
|
*/
|
|
37
|
-
export declare class InMemoryStore<TContext = StoreContext> implements ChatKitStore<TContext> {
|
|
40
|
+
export declare class InMemoryStore<TContext = StoreContext> implements ChatKitStore<TContext>, TaskStore<TContext>, TaskAuthBindingRepository<TContext & StoreContext> {
|
|
38
41
|
private threads;
|
|
39
42
|
private items;
|
|
40
43
|
private attachments;
|
|
44
|
+
private runs;
|
|
45
|
+
private runSteps;
|
|
46
|
+
private tasks;
|
|
47
|
+
private taskAuthCredentials;
|
|
41
48
|
private getUserKey;
|
|
42
49
|
private getThreadKey;
|
|
43
50
|
private normalizeThreadId;
|
|
44
51
|
generateThreadId(_context: TContext): string;
|
|
45
|
-
generateItemId(itemType: StoreItemType,
|
|
52
|
+
generateItemId(itemType: StoreItemType, thread: ThreadMetadata, _context: TContext): string;
|
|
46
53
|
loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata>;
|
|
47
54
|
saveThread(thread: ThreadMetadata, context: TContext): Promise<void>;
|
|
48
55
|
loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>>;
|
|
@@ -55,10 +62,35 @@ export declare class InMemoryStore<TContext = StoreContext> implements ChatKitSt
|
|
|
55
62
|
saveAttachment(attachment: Attachment, _context: TContext): Promise<void>;
|
|
56
63
|
loadAttachment(attachmentId: string, _context: TContext): Promise<Attachment>;
|
|
57
64
|
deleteAttachment(attachmentId: string, _context: TContext): Promise<void>;
|
|
65
|
+
saveRun(run: RunRecordData, context: TContext): Promise<void>;
|
|
66
|
+
loadRun(runId: string, context: TContext): Promise<RunRecordData>;
|
|
67
|
+
listRuns(options: RunListOptions, context: TContext): Promise<RunRecordData[]>;
|
|
68
|
+
appendRunStep(event: RunStepRecordData, context: TContext): Promise<void>;
|
|
69
|
+
loadRunSteps(runId: string, context: TContext): Promise<RunStepRecordData[]>;
|
|
70
|
+
claimRun(input: {
|
|
71
|
+
runId: string;
|
|
72
|
+
leaseOwner: string;
|
|
73
|
+
leaseExpiresAt: number;
|
|
74
|
+
now: number;
|
|
75
|
+
}, context: TContext): Promise<RunRecordData | undefined>;
|
|
76
|
+
saveTask(task: TaskRecordData, context: TContext): Promise<void>;
|
|
77
|
+
loadTask(taskId: string, context: TContext): Promise<TaskRecordData>;
|
|
78
|
+
listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]>;
|
|
79
|
+
saveTaskAuthCredential(input: {
|
|
80
|
+
id: string;
|
|
81
|
+
apiKey: string;
|
|
82
|
+
displayName?: string;
|
|
83
|
+
expiresAt?: number;
|
|
84
|
+
}, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord>;
|
|
85
|
+
loadTaskAuthCredential(id: string, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord | undefined>;
|
|
86
|
+
private withAuthBindingMetadata;
|
|
58
87
|
getStats(): {
|
|
59
88
|
threads: number;
|
|
60
89
|
items: number;
|
|
61
90
|
attachments: number;
|
|
62
91
|
};
|
|
63
92
|
clear(): void;
|
|
93
|
+
private getRunKey;
|
|
94
|
+
private getTaskKey;
|
|
95
|
+
private getTaskAuthCredentialKey;
|
|
64
96
|
}
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.InMemoryStore = void 0;
|
|
10
10
|
const types_1 = require("./types");
|
|
11
|
+
const store_1 = require("../runs/store");
|
|
12
|
+
const store_2 = require("../tasks/store");
|
|
13
|
+
const TaskAuthBinding_1 = require("../tasks/TaskAuthBinding");
|
|
11
14
|
/**
|
|
12
15
|
* In-Memory Store Implementation
|
|
13
16
|
*
|
|
@@ -19,6 +22,10 @@ class InMemoryStore {
|
|
|
19
22
|
this.threads = new Map();
|
|
20
23
|
this.items = new Map(); // threadId -> (itemId -> item)
|
|
21
24
|
this.attachments = new Map();
|
|
25
|
+
this.runs = new Map();
|
|
26
|
+
this.runSteps = new Map();
|
|
27
|
+
this.tasks = new Map();
|
|
28
|
+
this.taskAuthCredentials = new Map();
|
|
22
29
|
}
|
|
23
30
|
// Store per-user data using a key from context
|
|
24
31
|
getUserKey(context) {
|
|
@@ -33,10 +40,18 @@ class InMemoryStore {
|
|
|
33
40
|
}
|
|
34
41
|
// ID Generation
|
|
35
42
|
generateThreadId(_context) {
|
|
36
|
-
return (0, types_1.generateId)('thread')
|
|
43
|
+
return `chat/default/index.ttl#${(0, types_1.generateId)('thread')}`;
|
|
37
44
|
}
|
|
38
|
-
generateItemId(itemType,
|
|
39
|
-
|
|
45
|
+
generateItemId(itemType, thread, _context) {
|
|
46
|
+
const commandKind = thread.metadata?.commandKind === 'task' ? 'task' : 'chat';
|
|
47
|
+
const surfaceId = typeof thread.metadata?.surface_id === 'string'
|
|
48
|
+
? thread.metadata.surface_id
|
|
49
|
+
: (typeof thread.metadata?.chat_id === 'string' ? thread.metadata.chat_id : 'default');
|
|
50
|
+
const date = new Date();
|
|
51
|
+
const yyyy = String(date.getUTCFullYear());
|
|
52
|
+
const MM = String(date.getUTCMonth() + 1).padStart(2, '0');
|
|
53
|
+
const dd = String(date.getUTCDate()).padStart(2, '0');
|
|
54
|
+
return `${commandKind}/${surfaceId}/${yyyy}/${MM}/${dd}/messages.ttl#${(0, types_1.generateId)(itemType)}`;
|
|
40
55
|
}
|
|
41
56
|
// Thread operations
|
|
42
57
|
async loadThread(thread, context) {
|
|
@@ -165,6 +180,132 @@ class InMemoryStore {
|
|
|
165
180
|
async deleteAttachment(attachmentId, _context) {
|
|
166
181
|
this.attachments.delete(attachmentId);
|
|
167
182
|
}
|
|
183
|
+
async saveRun(run, context) {
|
|
184
|
+
run.id = (0, store_1.buildRunResourceId)(run);
|
|
185
|
+
this.runs.set(this.getRunKey(run.id, context), { ...run });
|
|
186
|
+
}
|
|
187
|
+
async loadRun(runId, context) {
|
|
188
|
+
const run = this.runs.get(this.getRunKey(runId, context));
|
|
189
|
+
if (!run) {
|
|
190
|
+
throw new Error(`Run not found: ${runId}`);
|
|
191
|
+
}
|
|
192
|
+
return { ...run };
|
|
193
|
+
}
|
|
194
|
+
async listRuns(options, context) {
|
|
195
|
+
const userKey = this.getUserKey(context);
|
|
196
|
+
const prefix = `${userKey}:`;
|
|
197
|
+
let runs = Array.from(this.runs.entries())
|
|
198
|
+
.filter(([key]) => key.startsWith(prefix))
|
|
199
|
+
.map(([, run]) => ({ ...run }));
|
|
200
|
+
if (options.task) {
|
|
201
|
+
runs = runs.filter((run) => run.task === options.task);
|
|
202
|
+
}
|
|
203
|
+
if (options.thread) {
|
|
204
|
+
runs = runs.filter((run) => run.thread === options.thread);
|
|
205
|
+
}
|
|
206
|
+
if (options.workspace) {
|
|
207
|
+
runs = runs.filter((run) => run.workspace === options.workspace);
|
|
208
|
+
}
|
|
209
|
+
if (options.commandKind) {
|
|
210
|
+
runs = runs.filter((run) => run.commandKind === options.commandKind);
|
|
211
|
+
}
|
|
212
|
+
if (options.status) {
|
|
213
|
+
runs = runs.filter((run) => run.status === options.status);
|
|
214
|
+
}
|
|
215
|
+
runs.sort((a, b) => b.createdAt - a.createdAt || b.id.localeCompare(a.id));
|
|
216
|
+
return runs.slice(0, options.limit ?? runs.length);
|
|
217
|
+
}
|
|
218
|
+
async appendRunStep(event, context) {
|
|
219
|
+
if (!(0, store_1.isRunResourceId)(event.runId)) {
|
|
220
|
+
throw new Error(`RunStep runId must be a complete Run resource id: ${event.runId}`);
|
|
221
|
+
}
|
|
222
|
+
event.id = (0, store_1.buildRunStepResourceId)(event);
|
|
223
|
+
const key = this.getRunKey(event.runId, context);
|
|
224
|
+
const events = this.runSteps.get(key) ?? [];
|
|
225
|
+
events.push({ ...event });
|
|
226
|
+
this.runSteps.set(key, events);
|
|
227
|
+
}
|
|
228
|
+
async loadRunSteps(runId, context) {
|
|
229
|
+
return [...(this.runSteps.get(this.getRunKey(runId, context)) ?? [])];
|
|
230
|
+
}
|
|
231
|
+
async claimRun(input, context) {
|
|
232
|
+
const key = this.getRunKey(input.runId, context);
|
|
233
|
+
const run = this.runs.get(key);
|
|
234
|
+
if (!run || !(0, store_1.canClaimRun)(run, input)) {
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
const claimed = {
|
|
238
|
+
...run,
|
|
239
|
+
leaseOwner: input.leaseOwner,
|
|
240
|
+
leaseExpiresAt: input.leaseExpiresAt,
|
|
241
|
+
heartbeatAt: input.now,
|
|
242
|
+
updatedAt: input.now,
|
|
243
|
+
};
|
|
244
|
+
this.runs.set(key, claimed);
|
|
245
|
+
return { ...claimed };
|
|
246
|
+
}
|
|
247
|
+
async saveTask(task, context) {
|
|
248
|
+
task.id = (0, store_2.buildTaskResourceId)(task.id);
|
|
249
|
+
this.tasks.set(this.getTaskKey(task.id, context), {
|
|
250
|
+
...task,
|
|
251
|
+
metadata: this.withAuthBindingMetadata(task.metadata, task.authBinding),
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
async loadTask(taskId, context) {
|
|
255
|
+
const task = this.tasks.get(this.getTaskKey(taskId, context));
|
|
256
|
+
if (!task) {
|
|
257
|
+
throw new Error(`Task not found: ${taskId}`);
|
|
258
|
+
}
|
|
259
|
+
return { ...task };
|
|
260
|
+
}
|
|
261
|
+
async listTasks(options, context) {
|
|
262
|
+
const userKey = this.getUserKey(context);
|
|
263
|
+
const prefix = `${userKey}:`;
|
|
264
|
+
const dueAt = options.dueAt ?? (0, types_1.nowTimestamp)();
|
|
265
|
+
let tasks = Array.from(this.tasks.entries())
|
|
266
|
+
.filter(([key]) => key.startsWith(prefix))
|
|
267
|
+
.map(([, task]) => ({ ...task }));
|
|
268
|
+
if (options.status) {
|
|
269
|
+
tasks = tasks.filter((task) => task.status === options.status);
|
|
270
|
+
}
|
|
271
|
+
if (options.triggerKind) {
|
|
272
|
+
tasks = tasks.filter((task) => task.triggerKind === options.triggerKind);
|
|
273
|
+
}
|
|
274
|
+
if (options.eventName) {
|
|
275
|
+
tasks = tasks.filter((task) => task.eventName === options.eventName);
|
|
276
|
+
}
|
|
277
|
+
if (typeof options.dueAt === 'number') {
|
|
278
|
+
tasks = tasks.filter((task) => typeof task.nextRunAt === 'number' && task.nextRunAt <= dueAt);
|
|
279
|
+
}
|
|
280
|
+
tasks.sort((a, b) => (a.nextRunAt ?? a.createdAt) - (b.nextRunAt ?? b.createdAt) || a.id.localeCompare(b.id));
|
|
281
|
+
return tasks.slice(0, options.limit ?? tasks.length);
|
|
282
|
+
}
|
|
283
|
+
async saveTaskAuthCredential(input, context) {
|
|
284
|
+
const record = {
|
|
285
|
+
id: input.id,
|
|
286
|
+
service: TaskAuthBinding_1.TASK_AUTH_CREDENTIAL_SERVICE,
|
|
287
|
+
status: 'active',
|
|
288
|
+
apiKey: input.apiKey,
|
|
289
|
+
label: input.displayName,
|
|
290
|
+
oauthExpiresAt: input.expiresAt ? new Date(input.expiresAt * 1000).toISOString() : undefined,
|
|
291
|
+
createdAt: new Date().toISOString(),
|
|
292
|
+
};
|
|
293
|
+
this.taskAuthCredentials.set(this.getTaskAuthCredentialKey(input.id, context), record);
|
|
294
|
+
return { ...record };
|
|
295
|
+
}
|
|
296
|
+
async loadTaskAuthCredential(id, context) {
|
|
297
|
+
const record = this.taskAuthCredentials.get(this.getTaskAuthCredentialKey(id, context));
|
|
298
|
+
return record ? { ...record } : undefined;
|
|
299
|
+
}
|
|
300
|
+
withAuthBindingMetadata(metadata, authBinding) {
|
|
301
|
+
if (!authBinding) {
|
|
302
|
+
return metadata;
|
|
303
|
+
}
|
|
304
|
+
return {
|
|
305
|
+
...(metadata ?? {}),
|
|
306
|
+
authBinding,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
168
309
|
// Utility methods for debugging
|
|
169
310
|
getStats() {
|
|
170
311
|
let totalItems = 0;
|
|
@@ -181,6 +322,19 @@ class InMemoryStore {
|
|
|
181
322
|
this.threads.clear();
|
|
182
323
|
this.items.clear();
|
|
183
324
|
this.attachments.clear();
|
|
325
|
+
this.runs.clear();
|
|
326
|
+
this.runSteps.clear();
|
|
327
|
+
this.tasks.clear();
|
|
328
|
+
this.taskAuthCredentials.clear();
|
|
329
|
+
}
|
|
330
|
+
getRunKey(runId, context) {
|
|
331
|
+
return `${this.getUserKey(context)}:${runId}`;
|
|
332
|
+
}
|
|
333
|
+
getTaskKey(taskId, context) {
|
|
334
|
+
return `${this.getUserKey(context)}:${taskId}`;
|
|
335
|
+
}
|
|
336
|
+
getTaskAuthCredentialKey(id, context) {
|
|
337
|
+
return `${this.getUserKey(context)}:${id}`;
|
|
184
338
|
}
|
|
185
339
|
}
|
|
186
340
|
exports.InMemoryStore = InMemoryStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/chatkit/store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Store Interface\n * \n * Abstract interface for persisting threads and items.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py\n */\n\nimport type {\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n Attachment,\n Page,\n StoreItemType,\n} from './types';\nimport { generateId, getThreadIdFromRef, nowTimestamp } from './types';\n\n/**\n * Context type for store operations (generic)\n */\nexport type StoreContext = Record<string, unknown>;\n\n/**\n * Abstract Store interface\n */\nexport interface ChatKitStore<TContext = StoreContext> {\n // ID Generation\n generateThreadId(context: TContext): string;\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, context: TContext): string;\n\n // Thread operations\n loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata>;\n saveThread(thread: ThreadMetadata, context: TContext): Promise<void>;\n loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>>;\n deleteThread(thread: ThreadRef, context: TContext): Promise<void>;\n\n // Thread Item operations\n loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>>;\n addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem>;\n deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void>;\n\n // Attachment operations (optional)\n saveAttachment?(attachment: Attachment, context: TContext): Promise<void>;\n loadAttachment?(attachmentId: string, context: TContext): Promise<Attachment>;\n deleteAttachment?(attachmentId: string, context: TContext): Promise<void>;\n}\n\n/**\n * In-Memory Store Implementation\n * \n * Simple in-memory store for development and testing.\n * Data is lost when the server restarts.\n */\nexport class InMemoryStore<TContext = StoreContext> implements ChatKitStore<TContext> {\n private threads: Map<string, ThreadMetadata> = new Map();\n private items: Map<string, Map<string, ThreadItem>> = new Map(); // threadId -> (itemId -> item)\n private attachments: Map<string, Attachment> = new Map();\n\n // Store per-user data using a key from context\n private getUserKey(context: TContext): string {\n const userId = (context as Record<string, unknown>).userId;\n return typeof userId === 'string' ? userId : 'default';\n }\n\n private getThreadKey(threadId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${threadId}`;\n }\n\n private normalizeThreadId(thread: ThreadRef): string {\n return getThreadIdFromRef(thread);\n }\n\n // ID Generation\n generateThreadId(_context: TContext): string {\n return generateId('thread');\n }\n\n generateItemId(itemType: StoreItemType, _thread: ThreadMetadata, _context: TContext): string {\n return generateId(itemType);\n }\n\n // Thread operations\n async loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadData = this.threads.get(key);\n if (!threadData) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n return threadData;\n }\n\n async saveThread(thread: ThreadMetadata, context: TContext): Promise<void> {\n const key = this.getThreadKey(thread.id, context);\n this.threads.set(key, { ...thread, updated_at: nowTimestamp() });\n }\n\n async loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n \n // Get all threads for this user\n const userThreads: ThreadMetadata[] = [];\n for (const [key, thread] of this.threads) {\n if (key.startsWith(prefix)) {\n userThreads.push(thread);\n }\n }\n\n // Sort by created_at\n userThreads.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = userThreads.findIndex((t) => t.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = userThreads.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < userThreads.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async deleteThread(thread: ThreadRef, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n this.threads.delete(key);\n this.items.delete(key);\n }\n\n // Thread Item operations\n async loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n \n if (!threadItems) {\n return { data: [], has_more: false };\n }\n\n const itemList = Array.from(threadItems.values());\n \n // Sort by created_at\n itemList.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = itemList.findIndex((item) => item.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = itemList.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < itemList.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n let threadItems = this.items.get(key);\n if (!threadItems) {\n threadItems = new Map();\n this.items.set(key, threadItems);\n }\n threadItems.set(item.id, item);\n }\n\n async saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n await this.addThreadItem(thread, item, context);\n }\n\n async loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (!threadItems) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n const item = threadItems.get(itemId);\n if (!item) {\n throw new Error(`Item not found: ${itemId}`);\n }\n return item;\n }\n\n async deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (threadItems) {\n threadItems.delete(itemId);\n }\n }\n\n // Attachment operations\n async saveAttachment(attachment: Attachment, _context: TContext): Promise<void> {\n this.attachments.set(attachment.id, attachment);\n }\n\n async loadAttachment(attachmentId: string, _context: TContext): Promise<Attachment> {\n const attachment = this.attachments.get(attachmentId);\n if (!attachment) {\n throw new Error(`Attachment not found: ${attachmentId}`);\n }\n return attachment;\n }\n\n async deleteAttachment(attachmentId: string, _context: TContext): Promise<void> {\n this.attachments.delete(attachmentId);\n }\n\n // Utility methods for debugging\n getStats(): { threads: number; items: number; attachments: number } {\n let totalItems = 0;\n for (const threadItems of this.items.values()) {\n totalItems += threadItems.size;\n }\n return {\n threads: this.threads.size,\n items: totalItems,\n attachments: this.attachments.size,\n };\n }\n\n clear(): void {\n this.threads.clear();\n this.items.clear();\n this.attachments.clear();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/api/chatkit/store.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Store Interface\n * \n * Abstract interface for persisting threads and items.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/store.py\n */\n\nimport type {\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n Attachment,\n Page,\n StoreItemType,\n} from './types';\nimport { generateId, getThreadIdFromRef, nowTimestamp } from './types';\nimport {\n buildRunResourceId,\n buildRunStepResourceId,\n canClaimRun,\n isRunResourceId,\n type RunListOptions,\n type RunRecordData,\n type RunStepRecordData,\n type RunStore,\n} from '../runs/store';\nimport { buildTaskResourceId, type TaskListOptions, type TaskRecordData, type TaskStore } from '../tasks/store';\nimport {\n TASK_AUTH_CREDENTIAL_SERVICE,\n type TaskAuthBindingRepository,\n type TaskAuthCredentialRecord,\n} from '../tasks/TaskAuthBinding';\n\n/**\n * Context type for store operations (generic)\n */\nexport type StoreContext = Record<string, unknown>;\n\n/**\n * Abstract Store interface\n */\nexport interface ChatKitStore<TContext = StoreContext> extends Partial<RunStore<TContext>> {\n // ID Generation\n generateThreadId(context: TContext): string;\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, context: TContext): string;\n\n // Thread operations\n loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata>;\n saveThread(thread: ThreadMetadata, context: TContext): Promise<void>;\n loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>>;\n deleteThread(thread: ThreadRef, context: TContext): Promise<void>;\n\n // Thread Item operations\n loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>>;\n addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void>;\n loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem>;\n deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void>;\n\n // Attachment operations (optional)\n saveAttachment?(attachment: Attachment, context: TContext): Promise<void>;\n loadAttachment?(attachmentId: string, context: TContext): Promise<Attachment>;\n deleteAttachment?(attachmentId: string, context: TContext): Promise<void>;\n}\n\n/**\n * In-Memory Store Implementation\n * \n * Simple in-memory store for development and testing.\n * Data is lost when the server restarts.\n */\nexport class InMemoryStore<TContext = StoreContext> implements ChatKitStore<TContext>, TaskStore<TContext>, TaskAuthBindingRepository<TContext & StoreContext> {\n private threads: Map<string, ThreadMetadata> = new Map();\n private items: Map<string, Map<string, ThreadItem>> = new Map(); // threadId -> (itemId -> item)\n private attachments: Map<string, Attachment> = new Map();\n private runs: Map<string, RunRecordData> = new Map();\n private runSteps: Map<string, RunStepRecordData[]> = new Map();\n private tasks: Map<string, TaskRecordData> = new Map();\n private taskAuthCredentials: Map<string, TaskAuthCredentialRecord> = new Map();\n\n // Store per-user data using a key from context\n private getUserKey(context: TContext): string {\n const userId = (context as Record<string, unknown>).userId;\n return typeof userId === 'string' ? userId : 'default';\n }\n\n private getThreadKey(threadId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${threadId}`;\n }\n\n private normalizeThreadId(thread: ThreadRef): string {\n return getThreadIdFromRef(thread);\n }\n\n // ID Generation\n generateThreadId(_context: TContext): string {\n return `chat/default/index.ttl#${generateId('thread')}`;\n }\n\n generateItemId(itemType: StoreItemType, thread: ThreadMetadata, _context: TContext): string {\n const commandKind = thread.metadata?.commandKind === 'task' ? 'task' : 'chat';\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');\n const date = new Date();\n const yyyy = String(date.getUTCFullYear());\n const MM = String(date.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(date.getUTCDate()).padStart(2, '0');\n return `${commandKind}/${surfaceId}/${yyyy}/${MM}/${dd}/messages.ttl#${generateId(itemType)}`;\n }\n\n // Thread operations\n async loadThread(thread: ThreadRef, context: TContext): Promise<ThreadMetadata> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadData = this.threads.get(key);\n if (!threadData) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n return threadData;\n }\n\n async saveThread(thread: ThreadMetadata, context: TContext): Promise<void> {\n const key = this.getThreadKey(thread.id, context);\n this.threads.set(key, { ...thread, updated_at: nowTimestamp() });\n }\n\n async loadThreads(limit: number, after: string | undefined, order: string, context: TContext): Promise<Page<ThreadMetadata>> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n \n // Get all threads for this user\n const userThreads: ThreadMetadata[] = [];\n for (const [key, thread] of this.threads) {\n if (key.startsWith(prefix)) {\n userThreads.push(thread);\n }\n }\n\n // Sort by created_at\n userThreads.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = userThreads.findIndex((t) => t.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = userThreads.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < userThreads.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async deleteThread(thread: ThreadRef, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n this.threads.delete(key);\n this.items.delete(key);\n }\n\n // Thread Item operations\n async loadThreadItems(thread: ThreadRef, after: string | undefined, limit: number, order: string, context: TContext): Promise<Page<ThreadItem>> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n \n if (!threadItems) {\n return { data: [], has_more: false };\n }\n\n const itemList = Array.from(threadItems.values());\n \n // Sort by created_at\n itemList.sort((a, b) => {\n return order === 'desc' ? b.created_at - a.created_at : a.created_at - b.created_at;\n });\n\n // Apply pagination\n let startIndex = 0;\n if (after) {\n const afterIndex = itemList.findIndex((item) => item.id === after);\n if (afterIndex !== -1) {\n startIndex = afterIndex + 1;\n }\n }\n\n const slice = itemList.slice(startIndex, startIndex + limit);\n const hasMore = startIndex + limit < itemList.length;\n\n return {\n data: slice,\n has_more: hasMore,\n after: slice.length > 0 ? slice[slice.length - 1].id : undefined,\n };\n }\n\n async addThreadItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n let threadItems = this.items.get(key);\n if (!threadItems) {\n threadItems = new Map();\n this.items.set(key, threadItems);\n }\n threadItems.set(item.id, item);\n }\n\n async saveItem(thread: ThreadRef, item: ThreadItem, context: TContext): Promise<void> {\n await this.addThreadItem(thread, item, context);\n }\n\n async loadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<ThreadItem> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (!threadItems) {\n throw new Error(`Thread not found: ${threadId}`);\n }\n const item = threadItems.get(itemId);\n if (!item) {\n throw new Error(`Item not found: ${itemId}`);\n }\n return item;\n }\n\n async deleteThreadItem(thread: ThreadRef, itemId: string, context: TContext): Promise<void> {\n const threadId = this.normalizeThreadId(thread);\n const key = this.getThreadKey(threadId, context);\n const threadItems = this.items.get(key);\n if (threadItems) {\n threadItems.delete(itemId);\n }\n }\n\n // Attachment operations\n async saveAttachment(attachment: Attachment, _context: TContext): Promise<void> {\n this.attachments.set(attachment.id, attachment);\n }\n\n async loadAttachment(attachmentId: string, _context: TContext): Promise<Attachment> {\n const attachment = this.attachments.get(attachmentId);\n if (!attachment) {\n throw new Error(`Attachment not found: ${attachmentId}`);\n }\n return attachment;\n }\n\n async deleteAttachment(attachmentId: string, _context: TContext): Promise<void> {\n this.attachments.delete(attachmentId);\n }\n\n async saveRun(run: RunRecordData, context: TContext): Promise<void> {\n run.id = buildRunResourceId(run);\n this.runs.set(this.getRunKey(run.id, context), { ...run });\n }\n\n async loadRun(runId: string, context: TContext): Promise<RunRecordData> {\n const run = this.runs.get(this.getRunKey(runId, context));\n if (!run) {\n throw new Error(`Run not found: ${runId}`);\n }\n return { ...run };\n }\n\n async listRuns(options: RunListOptions, context: TContext): Promise<RunRecordData[]> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n let runs = Array.from(this.runs.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, run]) => ({ ...run }));\n\n if (options.task) {\n runs = runs.filter((run) => run.task === options.task);\n }\n if (options.thread) {\n runs = runs.filter((run) => run.thread === options.thread);\n }\n if (options.workspace) {\n runs = runs.filter((run) => run.workspace === options.workspace);\n }\n if (options.commandKind) {\n runs = runs.filter((run) => run.commandKind === options.commandKind);\n }\n if (options.status) {\n runs = runs.filter((run) => run.status === options.status);\n }\n\n runs.sort((a, b) => b.createdAt - a.createdAt || b.id.localeCompare(a.id));\n return runs.slice(0, options.limit ?? runs.length);\n }\n\n async appendRunStep(event: RunStepRecordData, context: TContext): Promise<void> {\n if (!isRunResourceId(event.runId)) {\n throw new Error(`RunStep runId must be a complete Run resource id: ${event.runId}`);\n }\n event.id = buildRunStepResourceId(event);\n const key = this.getRunKey(event.runId, context);\n const events = this.runSteps.get(key) ?? [];\n events.push({ ...event });\n this.runSteps.set(key, events);\n }\n\n async loadRunSteps(runId: string, context: TContext): Promise<RunStepRecordData[]> {\n return [...(this.runSteps.get(this.getRunKey(runId, context)) ?? [])];\n }\n\n async claimRun(input: {\n runId: string;\n leaseOwner: string;\n leaseExpiresAt: number;\n now: number;\n }, context: TContext): Promise<RunRecordData | undefined> {\n const key = this.getRunKey(input.runId, context);\n const run = this.runs.get(key);\n if (!run || !canClaimRun(run, input)) {\n return undefined;\n }\n const claimed = {\n ...run,\n leaseOwner: input.leaseOwner,\n leaseExpiresAt: input.leaseExpiresAt,\n heartbeatAt: input.now,\n updatedAt: input.now,\n };\n this.runs.set(key, claimed);\n return { ...claimed };\n }\n\n async saveTask(task: TaskRecordData, context: TContext): Promise<void> {\n task.id = buildTaskResourceId(task.id);\n this.tasks.set(this.getTaskKey(task.id, context), {\n ...task,\n metadata: this.withAuthBindingMetadata(task.metadata, task.authBinding),\n });\n }\n\n async loadTask(taskId: string, context: TContext): Promise<TaskRecordData> {\n const task = this.tasks.get(this.getTaskKey(taskId, context));\n if (!task) {\n throw new Error(`Task not found: ${taskId}`);\n }\n return { ...task };\n }\n\n async listTasks(options: TaskListOptions, context: TContext): Promise<TaskRecordData[]> {\n const userKey = this.getUserKey(context);\n const prefix = `${userKey}:`;\n const dueAt = options.dueAt ?? nowTimestamp();\n let tasks = Array.from(this.tasks.entries())\n .filter(([key]) => key.startsWith(prefix))\n .map(([, task]) => ({ ...task }));\n\n if (options.status) {\n tasks = tasks.filter((task) => task.status === options.status);\n }\n if (options.triggerKind) {\n tasks = tasks.filter((task) => task.triggerKind === options.triggerKind);\n }\n if (options.eventName) {\n tasks = tasks.filter((task) => task.eventName === options.eventName);\n }\n if (typeof options.dueAt === 'number') {\n tasks = tasks.filter((task) => typeof task.nextRunAt === 'number' && task.nextRunAt <= dueAt);\n }\n\n tasks.sort((a, b) => (a.nextRunAt ?? a.createdAt) - (b.nextRunAt ?? b.createdAt) || a.id.localeCompare(b.id));\n return tasks.slice(0, options.limit ?? tasks.length);\n }\n\n async saveTaskAuthCredential(input: {\n id: string;\n apiKey: string;\n displayName?: string;\n expiresAt?: number;\n }, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord> {\n const record: TaskAuthCredentialRecord = {\n id: input.id,\n service: TASK_AUTH_CREDENTIAL_SERVICE,\n status: 'active',\n apiKey: input.apiKey,\n label: input.displayName,\n oauthExpiresAt: input.expiresAt ? new Date(input.expiresAt * 1000).toISOString() : undefined,\n createdAt: new Date().toISOString(),\n };\n this.taskAuthCredentials.set(this.getTaskAuthCredentialKey(input.id, context), record);\n return { ...record };\n }\n\n async loadTaskAuthCredential(id: string, context: TContext & StoreContext): Promise<TaskAuthCredentialRecord | undefined> {\n const record = this.taskAuthCredentials.get(this.getTaskAuthCredentialKey(id, context));\n return record ? { ...record } : undefined;\n }\n\n private withAuthBindingMetadata(\n metadata: Record<string, unknown> | undefined,\n authBinding: TaskRecordData['authBinding'],\n ): Record<string, unknown> | undefined {\n if (!authBinding) {\n return metadata;\n }\n return {\n ...(metadata ?? {}),\n authBinding,\n };\n }\n\n // Utility methods for debugging\n getStats(): { threads: number; items: number; attachments: number } {\n let totalItems = 0;\n for (const threadItems of this.items.values()) {\n totalItems += threadItems.size;\n }\n return {\n threads: this.threads.size,\n items: totalItems,\n attachments: this.attachments.size,\n };\n }\n\n clear(): void {\n this.threads.clear();\n this.items.clear();\n this.attachments.clear();\n this.runs.clear();\n this.runSteps.clear();\n this.tasks.clear();\n this.taskAuthCredentials.clear();\n }\n\n private getRunKey(runId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${runId}`;\n }\n\n private getTaskKey(taskId: string, context: TContext): string {\n return `${this.getUserKey(context)}:${taskId}`;\n }\n\n private getTaskAuthCredentialKey(id: string, context: TContext): string {\n return `${this.getUserKey(context)}:${id}`;\n }\n}\n"]}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Type definitions for OpenAI ChatKit protocol.
|
|
5
5
|
* Based on https://github.com/openai/chatkit-python
|
|
6
6
|
*/
|
|
7
|
+
import type { WorkspaceUri } from '../workspace/types';
|
|
7
8
|
export interface Page<T> {
|
|
8
9
|
data: T[];
|
|
9
10
|
has_more: boolean;
|
|
@@ -25,6 +26,11 @@ export interface ThreadMetadata {
|
|
|
25
26
|
id: string;
|
|
26
27
|
title?: string;
|
|
27
28
|
status: ThreadStatus;
|
|
29
|
+
/**
|
|
30
|
+
* Workspace Container URI selected for this thread.
|
|
31
|
+
* The Solid schema stores this as an RDF URI relation.
|
|
32
|
+
*/
|
|
33
|
+
workspace?: WorkspaceUri;
|
|
28
34
|
created_at: number;
|
|
29
35
|
updated_at: number;
|
|
30
36
|
metadata?: Record<string, unknown>;
|
|
@@ -34,7 +40,7 @@ export interface Thread extends ThreadMetadata {
|
|
|
34
40
|
}
|
|
35
41
|
export declare const DEFAULT_THREAD_CHAT_ID = "default";
|
|
36
42
|
export type HttpIri = `http://${string}` | `https://${string}`;
|
|
37
|
-
export interface
|
|
43
|
+
export interface ThreadSurfaceRef {
|
|
38
44
|
thread_id: string;
|
|
39
45
|
chat_id: string;
|
|
40
46
|
}
|
|
@@ -42,8 +48,9 @@ export interface ThreadIriRef {
|
|
|
42
48
|
thread_id: HttpIri;
|
|
43
49
|
chat_id?: never;
|
|
44
50
|
}
|
|
45
|
-
export type ThreadRef =
|
|
51
|
+
export type ThreadRef = ThreadSurfaceRef | ThreadIriRef;
|
|
46
52
|
export declare function isHttpIri(value: string): value is HttpIri;
|
|
53
|
+
export declare function isBaseRelativeThreadResourceId(value: string): boolean;
|
|
47
54
|
export declare function toThreadRef(params: {
|
|
48
55
|
thread_id: string;
|
|
49
56
|
chat_id?: string;
|
|
@@ -117,6 +124,7 @@ export interface ClientToolCallItem extends ThreadItemBase {
|
|
|
117
124
|
call_id: string;
|
|
118
125
|
status?: 'pending' | 'completed';
|
|
119
126
|
output?: string;
|
|
127
|
+
metadata?: Record<string, unknown>;
|
|
120
128
|
}
|
|
121
129
|
export interface WidgetItem extends ThreadItemBase {
|
|
122
130
|
type: 'widget';
|
|
@@ -229,6 +237,7 @@ export interface ThreadsGetByIdReq extends BaseReq {
|
|
|
229
237
|
}
|
|
230
238
|
export interface ThreadCreateParams {
|
|
231
239
|
chat_id?: string;
|
|
240
|
+
workspace?: WorkspaceUri;
|
|
232
241
|
input?: UserMessageInput;
|
|
233
242
|
}
|
|
234
243
|
export interface UserMessageInput {
|
|
@@ -282,6 +291,7 @@ export interface ThreadsRetryAfterItemReq extends BaseReq {
|
|
|
282
291
|
}
|
|
283
292
|
export type ThreadUpdateParams = ThreadRef & {
|
|
284
293
|
title?: string;
|
|
294
|
+
workspace?: WorkspaceUri;
|
|
285
295
|
};
|
|
286
296
|
export interface ThreadsUpdateReq extends BaseReq {
|
|
287
297
|
type: 'threads.update';
|
|
@@ -467,3 +477,7 @@ export declare function nowTimestamp(): number;
|
|
|
467
477
|
* Extract text content from user message
|
|
468
478
|
*/
|
|
469
479
|
export declare function extractUserMessageText(content: UserMessageContent[]): string;
|
|
480
|
+
/**
|
|
481
|
+
* Extract text content from assistant message
|
|
482
|
+
*/
|
|
483
|
+
export declare function extractAssistantMessageText(content: AssistantMessageContent[]): string;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.DEFAULT_THREAD_CHAT_ID = void 0;
|
|
10
10
|
exports.isHttpIri = isHttpIri;
|
|
11
|
+
exports.isBaseRelativeThreadResourceId = isBaseRelativeThreadResourceId;
|
|
11
12
|
exports.toThreadRef = toThreadRef;
|
|
12
13
|
exports.getThreadIdFromRef = getThreadIdFromRef;
|
|
13
14
|
exports.getChatIdFromThreadMetadata = getChatIdFromThreadMetadata;
|
|
@@ -16,28 +17,37 @@ exports.isNonStreamingReq = isNonStreamingReq;
|
|
|
16
17
|
exports.generateId = generateId;
|
|
17
18
|
exports.nowTimestamp = nowTimestamp;
|
|
18
19
|
exports.extractUserMessageText = extractUserMessageText;
|
|
20
|
+
exports.extractAssistantMessageText = extractAssistantMessageText;
|
|
19
21
|
exports.DEFAULT_THREAD_CHAT_ID = 'default';
|
|
20
22
|
function isHttpIri(value) {
|
|
21
23
|
return value.startsWith('http://') || value.startsWith('https://');
|
|
22
24
|
}
|
|
25
|
+
function isBaseRelativeThreadResourceId(value) {
|
|
26
|
+
return /^(chat|task)\/[^/]+\/index\.ttl#[^#]+$/.test(value);
|
|
27
|
+
}
|
|
23
28
|
function toThreadRef(params) {
|
|
24
29
|
if (isHttpIri(params.thread_id)) {
|
|
25
30
|
return { thread_id: params.thread_id };
|
|
26
31
|
}
|
|
32
|
+
if (isBaseRelativeThreadResourceId(params.thread_id)) {
|
|
33
|
+
return { thread_id: params.thread_id, chat_id: params.chat_id ?? exports.DEFAULT_THREAD_CHAT_ID };
|
|
34
|
+
}
|
|
27
35
|
if (params.chat_id) {
|
|
28
36
|
return { thread_id: params.thread_id, chat_id: params.chat_id };
|
|
29
37
|
}
|
|
30
|
-
throw new Error(`chat_id is required when thread_id "${params.thread_id}" is not a full thread
|
|
38
|
+
throw new Error(`chat_id is required when thread_id "${params.thread_id}" is not a full thread resource id`);
|
|
31
39
|
}
|
|
32
40
|
function getThreadIdFromRef(thread) {
|
|
33
|
-
if ('chat_id' in thread) {
|
|
41
|
+
if ('chat_id' in thread || isBaseRelativeThreadResourceId(thread.thread_id)) {
|
|
34
42
|
return thread.thread_id;
|
|
35
43
|
}
|
|
36
44
|
try {
|
|
37
45
|
const url = new URL(thread.thread_id);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
const dataIndex = url.pathname.indexOf('/.data/');
|
|
47
|
+
if (dataIndex >= 0 && url.hash) {
|
|
48
|
+
return `${url.pathname.slice(dataIndex + '/.data/'.length)}${url.hash}`;
|
|
49
|
+
}
|
|
50
|
+
return url.hash.startsWith('#') ? decodeURIComponent(url.hash.slice(1)) : thread.thread_id;
|
|
41
51
|
}
|
|
42
52
|
catch {
|
|
43
53
|
return thread.thread_id;
|
|
@@ -85,4 +95,13 @@ function extractUserMessageText(content) {
|
|
|
85
95
|
.map((c) => c.text)
|
|
86
96
|
.join('\n');
|
|
87
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Extract text content from assistant message
|
|
100
|
+
*/
|
|
101
|
+
function extractAssistantMessageText(content) {
|
|
102
|
+
return content
|
|
103
|
+
.filter((c) => c.type === 'output_text')
|
|
104
|
+
.map((c) => c.text)
|
|
105
|
+
.join('\n');
|
|
106
|
+
}
|
|
88
107
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/chatkit/types.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Types\n * \n * Type definitions for OpenAI ChatKit protocol.\n * Based on https://github.com/openai/chatkit-python\n */\n\n// ============================================================================\n// Generic Types\n// ============================================================================\n\nexport interface Page<T> {\n data: T[];\n has_more: boolean;\n after?: string;\n}\n\n// ============================================================================\n// Thread Types\n// ============================================================================\n\nexport type ThreadStatusType = 'active' | 'locked' | 'closed';\n\nexport interface ActiveStatus {\n type: 'active';\n}\n\nexport interface LockedStatus {\n type: 'locked';\n reason?: string;\n}\n\nexport interface ClosedStatus {\n type: 'closed';\n}\n\nexport type ThreadStatus = ActiveStatus | LockedStatus | ClosedStatus;\n\nexport interface ThreadMetadata {\n id: string;\n title?: string;\n status: ThreadStatus;\n created_at: number;\n updated_at: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface Thread extends ThreadMetadata {\n items: Page<ThreadItem>;\n}\n\nexport const DEFAULT_THREAD_CHAT_ID = 'default';\n\nexport type HttpIri = `http://${string}` | `https://${string}`;\n\nexport interface ThreadLocatorRef {\n thread_id: string;\n chat_id: string;\n}\n\nexport interface ThreadIriRef {\n thread_id: HttpIri;\n chat_id?: never;\n}\n\nexport type ThreadRef = ThreadLocatorRef | ThreadIriRef;\n\nexport function isHttpIri(value: string): value is HttpIri {\n return value.startsWith('http://') || value.startsWith('https://');\n}\n\nexport function toThreadRef(params: { thread_id: string; chat_id?: string }): ThreadRef {\n if (isHttpIri(params.thread_id)) {\n return { thread_id: params.thread_id };\n }\n if (params.chat_id) {\n return { thread_id: params.thread_id, chat_id: params.chat_id };\n }\n throw new Error(`chat_id is required when thread_id \"${params.thread_id}\" is not a full thread IRI`);\n}\n\nexport function getThreadIdFromRef(thread: ThreadRef): string {\n if ('chat_id' in thread) {\n return thread.thread_id;\n }\n try {\n const url = new URL(thread.thread_id);\n return url.hash.startsWith('#')\n ? decodeURIComponent(url.hash.slice(1))\n : thread.thread_id;\n } catch {\n return thread.thread_id;\n }\n}\n\nexport function getChatIdFromThreadMetadata(thread: ThreadMetadata): string {\n const chatId = thread.metadata?.chat_id;\n return typeof chatId === 'string' && chatId.length > 0\n ? chatId\n : DEFAULT_THREAD_CHAT_ID;\n}\n\n// ============================================================================\n// Thread Item Types\n// ============================================================================\n\nexport interface ThreadItemBase {\n id: string;\n thread_id: string;\n created_at: number;\n}\n\n// User Message\nexport interface UserMessageTextContent {\n type: 'input_text';\n text: string;\n}\n\nexport interface UserMessageTagContent {\n type: 'input_tag';\n tag: string;\n label?: string;\n}\n\nexport type UserMessageContent = UserMessageTextContent | UserMessageTagContent;\n\nexport interface InferenceOptions {\n model?: string;\n temperature?: number;\n max_tokens?: number;\n tools?: unknown[];\n tool_choice?: ToolChoice;\n}\n\nexport interface ToolChoice {\n type: 'function';\n function: {\n name: string;\n };\n}\n\nexport interface UserMessageItem extends ThreadItemBase {\n type: 'user_message';\n content: UserMessageContent[];\n inference_options?: InferenceOptions;\n}\n\n// Assistant Message\nexport interface Annotation {\n type: string;\n text: string;\n start_index?: number;\n end_index?: number;\n file_citation?: {\n file_id: string;\n quote?: string;\n };\n file_path?: {\n file_id: string;\n };\n url_citation?: {\n url: string;\n title?: string;\n };\n}\n\nexport interface AssistantMessageContent {\n type: 'output_text';\n text: string;\n annotations?: Annotation[];\n}\n\nexport interface AssistantMessageItem extends ThreadItemBase {\n type: 'assistant_message';\n content: AssistantMessageContent[];\n status?: 'in_progress' | 'completed' | 'incomplete';\n}\n\n// Client Tool Call\nexport interface ClientToolCallItem extends ThreadItemBase {\n type: 'client_tool_call';\n name: string;\n arguments: string;\n call_id: string;\n status?: 'pending' | 'completed';\n output?: string;\n}\n\n// Widget\nexport interface WidgetItem extends ThreadItemBase {\n type: 'widget';\n widget_type: string;\n data: unknown;\n}\n\n// Generated Image\nexport interface GeneratedImage {\n id: string;\n url?: string;\n b64_json?: string;\n}\n\nexport interface GeneratedImageItem extends ThreadItemBase {\n type: 'generated_image';\n image: GeneratedImage;\n prompt?: string;\n status?: 'in_progress' | 'completed' | 'failed';\n}\n\n// Task\nexport interface BaseTask {\n id: string;\n status: 'pending' | 'in_progress' | 'completed' | 'failed';\n}\n\nexport interface CustomTask extends BaseTask {\n type: 'custom';\n title: string;\n description?: string;\n}\n\nexport interface SearchTask extends BaseTask {\n type: 'web_search';\n query: string;\n}\n\nexport interface ThoughtTask extends BaseTask {\n type: 'thought';\n content: string;\n}\n\nexport interface FileTask extends BaseTask {\n type: 'file';\n file_id: string;\n filename?: string;\n}\n\nexport interface ImageTask extends BaseTask {\n type: 'image';\n image_id: string;\n}\n\nexport type Task = CustomTask | SearchTask | ThoughtTask | FileTask | ImageTask;\n\nexport interface TaskItem extends ThreadItemBase {\n type: 'task';\n task: Task;\n}\n\n// Workflow\nexport interface CustomSummary {\n type: 'custom';\n title: string;\n icon?: string;\n}\n\nexport interface DurationSummary {\n type: 'duration';\n duration_ms: number;\n}\n\nexport type WorkflowSummary = CustomSummary | DurationSummary;\n\nexport interface Workflow {\n tasks: Task[];\n summary?: WorkflowSummary;\n}\n\nexport interface WorkflowItem extends ThreadItemBase {\n type: 'workflow';\n workflow: Workflow;\n}\n\n// End of Turn\nexport interface EndOfTurnItem extends ThreadItemBase {\n type: 'end_of_turn';\n}\n\n// Hidden Context\nexport interface HiddenContextItem extends ThreadItemBase {\n type: 'hidden_context_item';\n context: unknown;\n}\n\nexport interface SDKHiddenContextItem extends ThreadItemBase {\n type: 'sdk_hidden_context';\n data: unknown;\n}\n\n// Union of all thread items\nexport type ThreadItem =\n | UserMessageItem\n | AssistantMessageItem\n | ClientToolCallItem\n | WidgetItem\n | GeneratedImageItem\n | TaskItem\n | WorkflowItem\n | EndOfTurnItem\n | HiddenContextItem\n | SDKHiddenContextItem;\n\nexport type StoreItemType = ThreadItem['type'];\n\n// ============================================================================\n// Attachment Types\n// ============================================================================\n\nexport interface AttachmentBase {\n id: string;\n name: string;\n size: number;\n mime_type: string;\n created_at: number;\n}\n\nexport interface FileAttachment extends AttachmentBase {\n type: 'file';\n url?: string;\n}\n\nexport interface ImageAttachment extends AttachmentBase {\n type: 'image';\n url?: string;\n width?: number;\n height?: number;\n}\n\nexport type Attachment = FileAttachment | ImageAttachment;\n\nexport interface AttachmentUploadDescriptor {\n attachment_id: string;\n upload_url: string;\n upload_headers?: Record<string, string>;\n}\n\n// ============================================================================\n// Request Types\n// ============================================================================\n\nexport interface BaseReq {\n metadata?: Record<string, unknown>;\n}\n\n// Thread Requests\nexport type ThreadGetByIdParams = ThreadRef;\n\nexport interface ThreadsGetByIdReq extends BaseReq {\n type: 'threads.get_by_id';\n params: ThreadGetByIdParams;\n}\n\nexport interface ThreadCreateParams {\n chat_id?: string;\n input?: UserMessageInput;\n}\n\nexport interface UserMessageInput {\n content: UserMessageContent[];\n inference_options?: InferenceOptions;\n attachments?: string[];\n}\n\nexport interface ThreadsCreateReq extends BaseReq {\n type: 'threads.create';\n params: ThreadCreateParams;\n}\n\nexport interface ThreadListParams {\n limit?: number;\n order?: 'asc' | 'desc';\n after?: string;\n}\n\nexport interface ThreadsListReq extends BaseReq {\n type: 'threads.list';\n params: ThreadListParams;\n}\n\nexport type ThreadAddUserMessageParams = ThreadRef & {\n input: UserMessageInput;\n};\n\nexport interface ThreadsAddUserMessageReq extends BaseReq {\n type: 'threads.add_user_message';\n params: ThreadAddUserMessageParams;\n}\n\nexport type ThreadAddClientToolOutputParams = ThreadRef & {\n item_id: string;\n output: string;\n};\n\nexport interface ThreadsAddClientToolOutputReq extends BaseReq {\n type: 'threads.add_client_tool_output';\n params: ThreadAddClientToolOutputParams;\n}\n\nexport type ThreadCustomActionParams = ThreadRef & {\n item_id: string;\n action: string;\n data?: unknown;\n};\n\nexport interface ThreadsCustomActionReq extends BaseReq {\n type: 'threads.custom_action';\n params: ThreadCustomActionParams;\n}\n\nexport type ThreadRetryAfterItemParams = ThreadRef & {\n item_id: string;\n};\n\nexport interface ThreadsRetryAfterItemReq extends BaseReq {\n type: 'threads.retry_after_item';\n params: ThreadRetryAfterItemParams;\n}\n\nexport type ThreadUpdateParams = ThreadRef & {\n title?: string;\n};\n\nexport interface ThreadsUpdateReq extends BaseReq {\n type: 'threads.update';\n params: ThreadUpdateParams;\n}\n\nexport type ThreadDeleteParams = ThreadRef;\n\nexport interface ThreadsDeleteReq extends BaseReq {\n type: 'threads.delete';\n params: ThreadDeleteParams;\n}\n\n// Items Requests\nexport type ItemsListParams = ThreadRef & {\n limit?: number;\n order?: 'asc' | 'desc';\n after?: string;\n};\n\nexport interface ItemsListReq extends BaseReq {\n type: 'items.list';\n params: ItemsListParams;\n}\n\nexport type ItemFeedbackParams = ThreadRef & {\n item_ids: string[];\n feedback: FeedbackKind;\n};\n\nexport type FeedbackKind = 'positive' | 'negative';\n\nexport interface ItemsFeedbackReq extends BaseReq {\n type: 'items.feedback';\n params: ItemFeedbackParams;\n}\n\n// Attachment Requests\nexport interface AttachmentCreateParams {\n name: string;\n size: number;\n mime_type: string;\n}\n\nexport interface AttachmentsCreateReq extends BaseReq {\n type: 'attachments.create';\n params: AttachmentCreateParams;\n}\n\nexport interface AttachmentDeleteParams {\n attachment_id: string;\n}\n\nexport interface AttachmentsDeleteReq extends BaseReq {\n type: 'attachments.delete';\n params: AttachmentDeleteParams;\n}\n\n// Request Union Types\nexport type StreamingReq =\n | ThreadsCreateReq\n | ThreadsAddUserMessageReq\n | ThreadsAddClientToolOutputReq\n | ThreadsRetryAfterItemReq\n | ThreadsCustomActionReq;\n\nexport type NonStreamingReq =\n | ThreadsGetByIdReq\n | ThreadsListReq\n | ItemsListReq\n | ItemsFeedbackReq\n | AttachmentsCreateReq\n | AttachmentsDeleteReq\n | ThreadsUpdateReq\n | ThreadsDeleteReq;\n\nexport type ChatKitReq = StreamingReq | NonStreamingReq;\n\n// ============================================================================\n// Stream Event Types\n// ============================================================================\n\nexport interface ThreadCreatedEvent {\n type: 'thread.created';\n thread: ThreadMetadata;\n}\n\nexport interface ThreadUpdatedEvent {\n type: 'thread.updated';\n thread: ThreadMetadata;\n}\n\nexport interface ThreadItemAddedEvent {\n type: 'thread.item.added';\n item: ThreadItem;\n}\n\nexport interface ThreadItemUpdatedEvent {\n type: 'thread.item.updated';\n item_id: string;\n update: ThreadItemUpdate;\n}\n\nexport interface ThreadItemDoneEvent {\n type: 'thread.item.done';\n item: ThreadItem;\n}\n\nexport interface ThreadItemRemovedEvent {\n type: 'thread.item.removed';\n item_id: string;\n}\n\nexport interface ThreadItemReplacedEvent {\n type: 'thread.item.replaced';\n item: ThreadItem;\n}\n\nexport interface StreamOptions {\n allow_cancel?: boolean;\n}\n\nexport interface StreamOptionsEvent {\n type: 'stream_options';\n options: StreamOptions;\n}\n\nexport interface ProgressUpdate {\n progress: number;\n message?: string;\n}\n\nexport interface ProgressUpdateEvent {\n type: 'progress_update';\n update: ProgressUpdate;\n}\n\nexport interface ClientEffect {\n effect_type: string;\n data?: unknown;\n}\n\nexport interface ClientEffectEvent {\n type: 'client_effect';\n effect: ClientEffect;\n}\n\nexport interface ErrorEvent {\n type: 'error';\n error: {\n code: string;\n message: string;\n details?: unknown;\n };\n}\n\nexport interface NoticeEvent {\n type: 'notice';\n notice: {\n level: 'info' | 'warning' | 'error';\n message: string;\n };\n}\n\nexport type ThreadStreamEvent =\n | ThreadCreatedEvent\n | ThreadUpdatedEvent\n | ThreadItemAddedEvent\n | ThreadItemUpdatedEvent\n | ThreadItemDoneEvent\n | ThreadItemRemovedEvent\n | ThreadItemReplacedEvent\n | StreamOptionsEvent\n | ProgressUpdateEvent\n | ClientEffectEvent\n | ErrorEvent\n | NoticeEvent;\n\n// ============================================================================\n// Thread Item Update Types (for streaming)\n// ============================================================================\n\nexport interface AssistantMessageContentPartAdded {\n type: 'assistant_message.content_part.added';\n part_index: number;\n part: AssistantMessageContent;\n}\n\nexport interface AssistantMessageContentPartTextDelta {\n type: 'assistant_message.content_part.text_delta';\n part_index: number;\n delta: string;\n}\n\nexport interface AssistantMessageContentPartAnnotationAdded {\n type: 'assistant_message.content_part.annotation_added';\n part_index: number;\n annotation: Annotation;\n}\n\nexport interface AssistantMessageContentPartDone {\n type: 'assistant_message.content_part.done';\n part_index: number;\n}\n\nexport interface WidgetStreamingTextValueDelta {\n type: 'widget.streaming_text.value_delta';\n path: string;\n delta: string;\n}\n\nexport interface WidgetRootUpdated {\n type: 'widget.root.updated';\n data: unknown;\n}\n\nexport interface WidgetComponentUpdated {\n type: 'widget.component.updated';\n component_id: string;\n data: unknown;\n}\n\nexport interface WorkflowTaskAdded {\n type: 'workflow.task.added';\n task: Task;\n}\n\nexport interface WorkflowTaskUpdated {\n type: 'workflow.task.updated';\n task_id: string;\n task: Partial<Task>;\n}\n\nexport interface GeneratedImageUpdated {\n type: 'generated_image.updated';\n image: GeneratedImage;\n}\n\nexport type ThreadItemUpdate =\n | AssistantMessageContentPartAdded\n | AssistantMessageContentPartTextDelta\n | AssistantMessageContentPartAnnotationAdded\n | AssistantMessageContentPartDone\n | WidgetStreamingTextValueDelta\n | WidgetRootUpdated\n | WidgetComponentUpdated\n | WorkflowTaskAdded\n | WorkflowTaskUpdated\n | GeneratedImageUpdated;\n\n// ============================================================================\n// Response Types\n// ============================================================================\n\nexport interface StreamingResult {\n type: 'streaming';\n stream: AsyncIterable<ThreadStreamEvent>;\n}\n\nexport interface NonStreamingResult {\n type: 'non_streaming';\n data: unknown;\n}\n\nexport type ChatKitResult = StreamingResult | NonStreamingResult;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function isStreamingReq(req: ChatKitReq): req is StreamingReq {\n return (\n req.type === 'threads.create' ||\n req.type === 'threads.add_user_message' ||\n req.type === 'threads.add_client_tool_output' ||\n req.type === 'threads.retry_after_item' ||\n req.type === 'threads.custom_action'\n );\n}\n\nexport function isNonStreamingReq(req: ChatKitReq): req is NonStreamingReq {\n return !isStreamingReq(req);\n}\n\n/**\n * Generate a unique ID with prefix\n */\nexport function generateId(prefix: string): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `${prefix}_${timestamp}${random}`;\n}\n\n/**\n * Get current timestamp in seconds\n */\nexport function nowTimestamp(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * Extract text content from user message\n */\nexport function extractUserMessageText(content: UserMessageContent[]): string {\n return content\n .filter((c): c is UserMessageTextContent => c.type === 'input_text')\n .map((c) => c.text)\n .join('\\n');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/api/chatkit/types.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Types\n * \n * Type definitions for OpenAI ChatKit protocol.\n * Based on https://github.com/openai/chatkit-python\n */\n\nimport type { WorkspaceUri } from '../workspace/types';\n\n// ============================================================================\n// Generic Types\n// ============================================================================\n\nexport interface Page<T> {\n data: T[];\n has_more: boolean;\n after?: string;\n}\n\n// ============================================================================\n// Thread Types\n// ============================================================================\n\nexport type ThreadStatusType = 'active' | 'locked' | 'closed';\n\nexport interface ActiveStatus {\n type: 'active';\n}\n\nexport interface LockedStatus {\n type: 'locked';\n reason?: string;\n}\n\nexport interface ClosedStatus {\n type: 'closed';\n}\n\nexport type ThreadStatus = ActiveStatus | LockedStatus | ClosedStatus;\n\nexport interface ThreadMetadata {\n id: string;\n title?: string;\n status: ThreadStatus;\n /**\n * Workspace Container URI selected for this thread.\n * The Solid schema stores this as an RDF URI relation.\n */\n workspace?: WorkspaceUri;\n created_at: number;\n updated_at: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface Thread extends ThreadMetadata {\n items: Page<ThreadItem>;\n}\n\nexport const DEFAULT_THREAD_CHAT_ID = 'default';\n\nexport type HttpIri = `http://${string}` | `https://${string}`;\n\nexport interface ThreadSurfaceRef {\n thread_id: string;\n chat_id: string;\n}\n\nexport interface ThreadIriRef {\n thread_id: HttpIri;\n chat_id?: never;\n}\n\nexport type ThreadRef = ThreadSurfaceRef | ThreadIriRef;\n\nexport function isHttpIri(value: string): value is HttpIri {\n return value.startsWith('http://') || value.startsWith('https://');\n}\n\nexport function isBaseRelativeThreadResourceId(value: string): boolean {\n return /^(chat|task)\\/[^/]+\\/index\\.ttl#[^#]+$/.test(value);\n}\n\nexport function toThreadRef(params: { thread_id: string; chat_id?: string }): ThreadRef {\n if (isHttpIri(params.thread_id)) {\n return { thread_id: params.thread_id };\n }\n if (isBaseRelativeThreadResourceId(params.thread_id)) {\n return { thread_id: params.thread_id, chat_id: params.chat_id ?? DEFAULT_THREAD_CHAT_ID };\n }\n if (params.chat_id) {\n return { thread_id: params.thread_id, chat_id: params.chat_id };\n }\n throw new Error(`chat_id is required when thread_id \"${params.thread_id}\" is not a full thread resource id`);\n}\n\nexport function getThreadIdFromRef(thread: ThreadRef): string {\n if ('chat_id' in thread || isBaseRelativeThreadResourceId(thread.thread_id)) {\n return thread.thread_id;\n }\n try {\n const url = new URL(thread.thread_id);\n const dataIndex = url.pathname.indexOf('/.data/');\n if (dataIndex >= 0 && url.hash) {\n return `${url.pathname.slice(dataIndex + '/.data/'.length)}${url.hash}`;\n }\n return url.hash.startsWith('#') ? decodeURIComponent(url.hash.slice(1)) : thread.thread_id;\n } catch {\n return thread.thread_id;\n }\n}\n\nexport function getChatIdFromThreadMetadata(thread: ThreadMetadata): string {\n const chatId = thread.metadata?.chat_id;\n return typeof chatId === 'string' && chatId.length > 0\n ? chatId\n : DEFAULT_THREAD_CHAT_ID;\n}\n\n// ============================================================================\n// Thread Item Types\n// ============================================================================\n\nexport interface ThreadItemBase {\n id: string;\n thread_id: string;\n created_at: number;\n}\n\n// User Message\nexport interface UserMessageTextContent {\n type: 'input_text';\n text: string;\n}\n\nexport interface UserMessageTagContent {\n type: 'input_tag';\n tag: string;\n label?: string;\n}\n\nexport type UserMessageContent = UserMessageTextContent | UserMessageTagContent;\n\nexport interface InferenceOptions {\n model?: string;\n temperature?: number;\n max_tokens?: number;\n tools?: unknown[];\n tool_choice?: ToolChoice;\n}\n\nexport interface ToolChoice {\n type: 'function';\n function: {\n name: string;\n };\n}\n\nexport interface UserMessageItem extends ThreadItemBase {\n type: 'user_message';\n content: UserMessageContent[];\n inference_options?: InferenceOptions;\n}\n\n// Assistant Message\nexport interface Annotation {\n type: string;\n text: string;\n start_index?: number;\n end_index?: number;\n file_citation?: {\n file_id: string;\n quote?: string;\n };\n file_path?: {\n file_id: string;\n };\n url_citation?: {\n url: string;\n title?: string;\n };\n}\n\nexport interface AssistantMessageContent {\n type: 'output_text';\n text: string;\n annotations?: Annotation[];\n}\n\nexport interface AssistantMessageItem extends ThreadItemBase {\n type: 'assistant_message';\n content: AssistantMessageContent[];\n status?: 'in_progress' | 'completed' | 'incomplete';\n}\n\n// Client Tool Call\nexport interface ClientToolCallItem extends ThreadItemBase {\n type: 'client_tool_call';\n name: string;\n arguments: string;\n call_id: string;\n status?: 'pending' | 'completed';\n output?: string;\n metadata?: Record<string, unknown>;\n}\n\n// Widget\nexport interface WidgetItem extends ThreadItemBase {\n type: 'widget';\n widget_type: string;\n data: unknown;\n}\n\n// Generated Image\nexport interface GeneratedImage {\n id: string;\n url?: string;\n b64_json?: string;\n}\n\nexport interface GeneratedImageItem extends ThreadItemBase {\n type: 'generated_image';\n image: GeneratedImage;\n prompt?: string;\n status?: 'in_progress' | 'completed' | 'failed';\n}\n\n// Task\nexport interface BaseTask {\n id: string;\n status: 'pending' | 'in_progress' | 'completed' | 'failed';\n}\n\nexport interface CustomTask extends BaseTask {\n type: 'custom';\n title: string;\n description?: string;\n}\n\nexport interface SearchTask extends BaseTask {\n type: 'web_search';\n query: string;\n}\n\nexport interface ThoughtTask extends BaseTask {\n type: 'thought';\n content: string;\n}\n\nexport interface FileTask extends BaseTask {\n type: 'file';\n file_id: string;\n filename?: string;\n}\n\nexport interface ImageTask extends BaseTask {\n type: 'image';\n image_id: string;\n}\n\nexport type Task = CustomTask | SearchTask | ThoughtTask | FileTask | ImageTask;\n\nexport interface TaskItem extends ThreadItemBase {\n type: 'task';\n task: Task;\n}\n\n// Workflow\nexport interface CustomSummary {\n type: 'custom';\n title: string;\n icon?: string;\n}\n\nexport interface DurationSummary {\n type: 'duration';\n duration_ms: number;\n}\n\nexport type WorkflowSummary = CustomSummary | DurationSummary;\n\nexport interface Workflow {\n tasks: Task[];\n summary?: WorkflowSummary;\n}\n\nexport interface WorkflowItem extends ThreadItemBase {\n type: 'workflow';\n workflow: Workflow;\n}\n\n// End of Turn\nexport interface EndOfTurnItem extends ThreadItemBase {\n type: 'end_of_turn';\n}\n\n// Hidden Context\nexport interface HiddenContextItem extends ThreadItemBase {\n type: 'hidden_context_item';\n context: unknown;\n}\n\nexport interface SDKHiddenContextItem extends ThreadItemBase {\n type: 'sdk_hidden_context';\n data: unknown;\n}\n\n// Union of all thread items\nexport type ThreadItem =\n | UserMessageItem\n | AssistantMessageItem\n | ClientToolCallItem\n | WidgetItem\n | GeneratedImageItem\n | TaskItem\n | WorkflowItem\n | EndOfTurnItem\n | HiddenContextItem\n | SDKHiddenContextItem;\n\nexport type StoreItemType = ThreadItem['type'];\n\n// ============================================================================\n// Attachment Types\n// ============================================================================\n\nexport interface AttachmentBase {\n id: string;\n name: string;\n size: number;\n mime_type: string;\n created_at: number;\n}\n\nexport interface FileAttachment extends AttachmentBase {\n type: 'file';\n url?: string;\n}\n\nexport interface ImageAttachment extends AttachmentBase {\n type: 'image';\n url?: string;\n width?: number;\n height?: number;\n}\n\nexport type Attachment = FileAttachment | ImageAttachment;\n\nexport interface AttachmentUploadDescriptor {\n attachment_id: string;\n upload_url: string;\n upload_headers?: Record<string, string>;\n}\n\n// ============================================================================\n// Request Types\n// ============================================================================\n\nexport interface BaseReq {\n metadata?: Record<string, unknown>;\n}\n\n// Thread Requests\nexport type ThreadGetByIdParams = ThreadRef;\n\nexport interface ThreadsGetByIdReq extends BaseReq {\n type: 'threads.get_by_id';\n params: ThreadGetByIdParams;\n}\n\nexport interface ThreadCreateParams {\n chat_id?: string;\n workspace?: WorkspaceUri;\n input?: UserMessageInput;\n}\n\nexport interface UserMessageInput {\n content: UserMessageContent[];\n inference_options?: InferenceOptions;\n attachments?: string[];\n}\n\nexport interface ThreadsCreateReq extends BaseReq {\n type: 'threads.create';\n params: ThreadCreateParams;\n}\n\nexport interface ThreadListParams {\n limit?: number;\n order?: 'asc' | 'desc';\n after?: string;\n}\n\nexport interface ThreadsListReq extends BaseReq {\n type: 'threads.list';\n params: ThreadListParams;\n}\n\nexport type ThreadAddUserMessageParams = ThreadRef & {\n input: UserMessageInput;\n};\n\nexport interface ThreadsAddUserMessageReq extends BaseReq {\n type: 'threads.add_user_message';\n params: ThreadAddUserMessageParams;\n}\n\nexport type ThreadAddClientToolOutputParams = ThreadRef & {\n item_id: string;\n output: string;\n};\n\nexport interface ThreadsAddClientToolOutputReq extends BaseReq {\n type: 'threads.add_client_tool_output';\n params: ThreadAddClientToolOutputParams;\n}\n\nexport type ThreadCustomActionParams = ThreadRef & {\n item_id: string;\n action: string;\n data?: unknown;\n};\n\nexport interface ThreadsCustomActionReq extends BaseReq {\n type: 'threads.custom_action';\n params: ThreadCustomActionParams;\n}\n\nexport type ThreadRetryAfterItemParams = ThreadRef & {\n item_id: string;\n};\n\nexport interface ThreadsRetryAfterItemReq extends BaseReq {\n type: 'threads.retry_after_item';\n params: ThreadRetryAfterItemParams;\n}\n\nexport type ThreadUpdateParams = ThreadRef & {\n title?: string;\n workspace?: WorkspaceUri;\n};\n\nexport interface ThreadsUpdateReq extends BaseReq {\n type: 'threads.update';\n params: ThreadUpdateParams;\n}\n\nexport type ThreadDeleteParams = ThreadRef;\n\nexport interface ThreadsDeleteReq extends BaseReq {\n type: 'threads.delete';\n params: ThreadDeleteParams;\n}\n\n// Items Requests\nexport type ItemsListParams = ThreadRef & {\n limit?: number;\n order?: 'asc' | 'desc';\n after?: string;\n};\n\nexport interface ItemsListReq extends BaseReq {\n type: 'items.list';\n params: ItemsListParams;\n}\n\nexport type ItemFeedbackParams = ThreadRef & {\n item_ids: string[];\n feedback: FeedbackKind;\n};\n\nexport type FeedbackKind = 'positive' | 'negative';\n\nexport interface ItemsFeedbackReq extends BaseReq {\n type: 'items.feedback';\n params: ItemFeedbackParams;\n}\n\n// Attachment Requests\nexport interface AttachmentCreateParams {\n name: string;\n size: number;\n mime_type: string;\n}\n\nexport interface AttachmentsCreateReq extends BaseReq {\n type: 'attachments.create';\n params: AttachmentCreateParams;\n}\n\nexport interface AttachmentDeleteParams {\n attachment_id: string;\n}\n\nexport interface AttachmentsDeleteReq extends BaseReq {\n type: 'attachments.delete';\n params: AttachmentDeleteParams;\n}\n\n// Request Union Types\nexport type StreamingReq =\n | ThreadsCreateReq\n | ThreadsAddUserMessageReq\n | ThreadsAddClientToolOutputReq\n | ThreadsRetryAfterItemReq\n | ThreadsCustomActionReq;\n\nexport type NonStreamingReq =\n | ThreadsGetByIdReq\n | ThreadsListReq\n | ItemsListReq\n | ItemsFeedbackReq\n | AttachmentsCreateReq\n | AttachmentsDeleteReq\n | ThreadsUpdateReq\n | ThreadsDeleteReq;\n\nexport type ChatKitReq = StreamingReq | NonStreamingReq;\n\n// ============================================================================\n// Stream Event Types\n// ============================================================================\n\nexport interface ThreadCreatedEvent {\n type: 'thread.created';\n thread: ThreadMetadata;\n}\n\nexport interface ThreadUpdatedEvent {\n type: 'thread.updated';\n thread: ThreadMetadata;\n}\n\nexport interface ThreadItemAddedEvent {\n type: 'thread.item.added';\n item: ThreadItem;\n}\n\nexport interface ThreadItemUpdatedEvent {\n type: 'thread.item.updated';\n item_id: string;\n update: ThreadItemUpdate;\n}\n\nexport interface ThreadItemDoneEvent {\n type: 'thread.item.done';\n item: ThreadItem;\n}\n\nexport interface ThreadItemRemovedEvent {\n type: 'thread.item.removed';\n item_id: string;\n}\n\nexport interface ThreadItemReplacedEvent {\n type: 'thread.item.replaced';\n item: ThreadItem;\n}\n\nexport interface StreamOptions {\n allow_cancel?: boolean;\n}\n\nexport interface StreamOptionsEvent {\n type: 'stream_options';\n options: StreamOptions;\n}\n\nexport interface ProgressUpdate {\n progress: number;\n message?: string;\n}\n\nexport interface ProgressUpdateEvent {\n type: 'progress_update';\n update: ProgressUpdate;\n}\n\nexport interface ClientEffect {\n effect_type: string;\n data?: unknown;\n}\n\nexport interface ClientEffectEvent {\n type: 'client_effect';\n effect: ClientEffect;\n}\n\nexport interface ErrorEvent {\n type: 'error';\n error: {\n code: string;\n message: string;\n details?: unknown;\n };\n}\n\nexport interface NoticeEvent {\n type: 'notice';\n notice: {\n level: 'info' | 'warning' | 'error';\n message: string;\n };\n}\n\nexport type ThreadStreamEvent =\n | ThreadCreatedEvent\n | ThreadUpdatedEvent\n | ThreadItemAddedEvent\n | ThreadItemUpdatedEvent\n | ThreadItemDoneEvent\n | ThreadItemRemovedEvent\n | ThreadItemReplacedEvent\n | StreamOptionsEvent\n | ProgressUpdateEvent\n | ClientEffectEvent\n | ErrorEvent\n | NoticeEvent;\n\n// ============================================================================\n// Thread Item Update Types (for streaming)\n// ============================================================================\n\nexport interface AssistantMessageContentPartAdded {\n type: 'assistant_message.content_part.added';\n part_index: number;\n part: AssistantMessageContent;\n}\n\nexport interface AssistantMessageContentPartTextDelta {\n type: 'assistant_message.content_part.text_delta';\n part_index: number;\n delta: string;\n}\n\nexport interface AssistantMessageContentPartAnnotationAdded {\n type: 'assistant_message.content_part.annotation_added';\n part_index: number;\n annotation: Annotation;\n}\n\nexport interface AssistantMessageContentPartDone {\n type: 'assistant_message.content_part.done';\n part_index: number;\n}\n\nexport interface WidgetStreamingTextValueDelta {\n type: 'widget.streaming_text.value_delta';\n path: string;\n delta: string;\n}\n\nexport interface WidgetRootUpdated {\n type: 'widget.root.updated';\n data: unknown;\n}\n\nexport interface WidgetComponentUpdated {\n type: 'widget.component.updated';\n component_id: string;\n data: unknown;\n}\n\nexport interface WorkflowTaskAdded {\n type: 'workflow.task.added';\n task: Task;\n}\n\nexport interface WorkflowTaskUpdated {\n type: 'workflow.task.updated';\n task_id: string;\n task: Partial<Task>;\n}\n\nexport interface GeneratedImageUpdated {\n type: 'generated_image.updated';\n image: GeneratedImage;\n}\n\nexport type ThreadItemUpdate =\n | AssistantMessageContentPartAdded\n | AssistantMessageContentPartTextDelta\n | AssistantMessageContentPartAnnotationAdded\n | AssistantMessageContentPartDone\n | WidgetStreamingTextValueDelta\n | WidgetRootUpdated\n | WidgetComponentUpdated\n | WorkflowTaskAdded\n | WorkflowTaskUpdated\n | GeneratedImageUpdated;\n\n// ============================================================================\n// Response Types\n// ============================================================================\n\nexport interface StreamingResult {\n type: 'streaming';\n stream: AsyncIterable<ThreadStreamEvent>;\n}\n\nexport interface NonStreamingResult {\n type: 'non_streaming';\n data: unknown;\n}\n\nexport type ChatKitResult = StreamingResult | NonStreamingResult;\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nexport function isStreamingReq(req: ChatKitReq): req is StreamingReq {\n return (\n req.type === 'threads.create' ||\n req.type === 'threads.add_user_message' ||\n req.type === 'threads.add_client_tool_output' ||\n req.type === 'threads.retry_after_item' ||\n req.type === 'threads.custom_action'\n );\n}\n\nexport function isNonStreamingReq(req: ChatKitReq): req is NonStreamingReq {\n return !isStreamingReq(req);\n}\n\n/**\n * Generate a unique ID with prefix\n */\nexport function generateId(prefix: string): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `${prefix}_${timestamp}${random}`;\n}\n\n/**\n * Get current timestamp in seconds\n */\nexport function nowTimestamp(): number {\n return Math.floor(Date.now() / 1000);\n}\n\n/**\n * Extract text content from user message\n */\nexport function extractUserMessageText(content: UserMessageContent[]): string {\n return content\n .filter((c): c is UserMessageTextContent => c.type === 'input_text')\n .map((c) => c.text)\n .join('\\n');\n}\n\n/**\n * Extract text content from assistant message\n */\nexport function extractAssistantMessageText(content: AssistantMessageContent[]): string {\n return content\n .filter((c): c is AssistantMessageContent => c.type === 'output_text')\n .map((c) => c.text)\n .join('\\n');\n}\n"]}
|