@undefineds.co/xpod 0.3.5 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MinioDataAccessor.d.ts +2 -0
- package/dist/storage/accessors/MinioDataAccessor.js +13 -7
- package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MinioDataAccessor.jsonld +8 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
|
@@ -234,7 +234,7 @@ class AcpAgentRuntime {
|
|
|
234
234
|
}
|
|
235
235
|
const repoRoot = decodeURIComponent(url.pathname);
|
|
236
236
|
if (!fs.existsSync(repoRoot)) {
|
|
237
|
-
throw new Error(`workspace
|
|
237
|
+
throw new Error(`workspace reference does not exist on this runner: ${workspace}`);
|
|
238
238
|
}
|
|
239
239
|
const worktree = config.worktree;
|
|
240
240
|
if (!worktree) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcpAgentRuntime.js","sourceRoot":"","sources":["../../../../src/api/chatkit/runtime/AcpAgentRuntime.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { WorkspaceUri } from '../../workspace/types';\nimport { getPlatformApiBaseUrl } from '../../service/platform-ai-config';\nimport { PACKAGE_ROOT } from '../../../runtime';\nimport { GitWorktreeService } from './GitWorktreeService';\nimport { AcpRunner } from './AcpRunner';\nimport { CodexRuntimeProjector } from './CodexRuntimeProjector';\nimport type { ResolvedAgentConfig } from '../../../agents/config/types';\nimport type { McpServerConfig } from '../../../agents/types';\nimport { codexWireApi, getDefaultBaseUrl } from '../../service/provider-registry';\nimport type {\n AcpRunnerType,\n AgentRuntimeConfig,\n AgentRuntimeEvent,\n} from '../../runs/AgentRuntimeTypes';\n\ninterface AgentRuntimeRunInput {\n threadId: string;\n prompt: string;\n config: AgentRuntimeConfig;\n}\n\n/**\n * Request-scoped ACP Agent Runtime.\n *\n * This class intentionally keeps no per-thread runner/session map. Durable\n * conversation state belongs in the Pod; each invocation starts an ACP runner,\n * creates one ACP session, streams events, then stops the runner.\n */\nexport class AcpAgentRuntime {\n private readonly logger = getLoggerFor(this);\n private readonly git = new GitWorktreeService();\n private readonly codexProjector = new CodexRuntimeProjector();\n\n public constructor(\n private readonly options: {\n worktreeRootDirName?: string;\n } = {},\n ) {}\n\n public async *run(input: AgentRuntimeRunInput): AsyncIterable<AgentRuntimeEvent> {\n const { threadId, prompt, config } = input;\n const workdir = await this.resolveWorkdir(threadId, config.workspace, config);\n\n if (config.runner.protocol && config.runner.protocol !== 'acp') {\n throw new Error(`Unsupported runner protocol: ${config.runner.protocol}. Only 'acp' is supported.`);\n }\n\n const runnerType = this.resolveAcpRunnerType(config.runner.type);\n const argv = this.resolveRunnerArgv(runnerType, config.runner.argv);\n const command = argv[0];\n const args = argv.slice(1);\n const env = this.buildRunnerEnv(runnerType, threadId, workdir, config.agentConfig);\n const runner = new AcpRunner();\n const queue = new AsyncPushQueue<AgentRuntimeEvent>();\n\n try {\n runner.start({ command, args, cwd: workdir, env });\n\n const sessionId = await this.createSession(runner, workdir, config.agentConfig);\n const runPromise = this.runPrompt(runner, sessionId, prompt, {\n idleMs: config.idleMs ?? 500,\n authWaitMs: Math.max(config.authWaitMs ?? 300_000, config.idleMs ?? 500),\n queue,\n }).catch((error) => {\n queue.push({ type: 'error', message: this.formatError(error) });\n queue.close();\n });\n\n for await (const event of queue.iterate()) {\n yield event;\n }\n await runPromise;\n } catch (error: any) {\n const message = this.formatError(error);\n this.logger.warn(`ACP agent runtime failed: ${message}`);\n yield { type: 'error', message };\n } finally {\n runner.stop('SIGINT');\n }\n }\n\n private async createSession(\n runner: AcpRunner,\n workdir: string,\n agentConfig?: ResolvedAgentConfig,\n ): Promise<string> {\n await runner.request('initialize', {\n protocolVersion: 1,\n clientCapabilities: {},\n clientInfo: { name: 'xpod', version: 'dev' },\n });\n\n const sessionParams: Record<string, unknown> = { cwd: workdir };\n if (agentConfig) {\n sessionParams.mcpServers = Object.keys(agentConfig.mcpServers).length > 0\n ? this.convertMcpServersForAcp(agentConfig.mcpServers)\n : [];\n if (agentConfig.systemPrompt) sessionParams.systemPrompt = agentConfig.systemPrompt;\n if (agentConfig.skillsContent) sessionParams.appendSystemPrompt = agentConfig.skillsContent;\n if (agentConfig.maxTurns) sessionParams.maxTurns = agentConfig.maxTurns;\n if (agentConfig.allowedTools) sessionParams.allowedTools = agentConfig.allowedTools;\n if (agentConfig.disallowedTools) sessionParams.disallowedTools = agentConfig.disallowedTools;\n if (agentConfig.permissionMode) sessionParams.permissionMode = agentConfig.permissionMode;\n } else {\n sessionParams.mcpServers = [];\n }\n\n const newSession = await runner.request<{ sessionId: string }>('session/new', sessionParams);\n if (!newSession?.sessionId) {\n throw new Error('ACP session/new did not return sessionId');\n }\n return newSession.sessionId;\n }\n\n private async runPrompt(\n runner: AcpRunner,\n sessionId: string,\n prompt: string,\n options: {\n idleMs: number;\n authWaitMs: number;\n queue: AsyncPushQueue<AgentRuntimeEvent>;\n },\n ): Promise<void> {\n const { idleMs, authWaitMs, queue } = options;\n let idleTimer: NodeJS.Timeout | undefined;\n let done = false;\n\n const finish = (): void => {\n if (done) return;\n done = true;\n if (idleTimer) {\n clearTimeout(idleTimer);\n idleTimer = undefined;\n }\n runner.off('notification', onNotification);\n runner.off('request', onRequest);\n queue.close();\n };\n\n const bumpIdle = (ms: number = idleMs): void => {\n if (done) return;\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => finish(), ms);\n };\n\n const onRequest = (req: any): void => {\n if (!req || typeof req.method !== 'string') return;\n\n if (this.isRuntimeHandledRequest(req.method)) {\n const hint = req.params?.message || req.params?.reason || req.method;\n const url = this.extractAuthUrl(req.params);\n const authOptions =\n this.extractAuthOptions(req.params) ??\n (url ? [{ label: 'Continue in browser', url, method: req.method }] : undefined);\n queue.push({\n type: 'auth_required',\n method: req.method,\n url,\n message: typeof hint === 'string' ? hint : undefined,\n options: authOptions,\n });\n bumpIdle(authWaitMs);\n if (req.method === 'session/request_permission') {\n req.respond({ granted: true });\n } else {\n req.respond({ handled: true });\n }\n return;\n }\n\n const requestId = `acp:${String(req.id)}`;\n queue.push({\n type: 'tool_call',\n requestId,\n name: req.method,\n arguments: JSON.stringify(req.params ?? {}),\n });\n req.fail(-32601, `Unsupported ACP client request in stateless runtime: ${req.method}`);\n finish();\n };\n\n const onNotification = (method: string, params: any): void => {\n if (method !== 'session/update') return;\n if (!params || params.sessionId !== sessionId) return;\n\n const update = params.update;\n if (!update || typeof update !== 'object') return;\n\n const text = this.extractTextDeltaFromSessionUpdate(update);\n if (typeof text === 'string' && text.length > 0) {\n queue.push({ type: 'text', text });\n bumpIdle();\n }\n };\n\n runner.on('request', onRequest);\n runner.on('notification', onNotification);\n\n try {\n void runner.request('session/prompt', {\n sessionId,\n prompt: [ { type: 'text', text: prompt } ],\n }).then((result) => {\n const text = this.extractTextFromPromptResult(result);\n if (typeof text === 'string' && text.length > 0) {\n queue.push({ type: 'text', text });\n bumpIdle();\n } else {\n bumpIdle();\n }\n }).catch((error) => {\n if (!done) {\n queue.push({ type: 'error', message: this.formatError(error) });\n finish();\n }\n });\n bumpIdle();\n await queue.waitClosed();\n } finally {\n finish();\n }\n }\n\n private isRuntimeHandledRequest(method: string): boolean {\n return method === 'session/request_permission' ||\n method === 'auth/request' ||\n method === 'auth/authorize';\n }\n\n private async resolveWorkdir(threadId: string, workspace: WorkspaceUri, config: AgentRuntimeConfig): Promise<string> {\n const url = new URL(workspace);\n if (url.protocol !== 'file:') {\n throw new Error('ACP runtime only supports file:// workspaces; use pi Agent Runtime for Pod-backed runs');\n }\n if (!this.canResolveFileWorkspace(url)) {\n throw new Error(`Workspace is not resolvable by this ACP runner: ${workspace}`);\n }\n\n const repoRoot = decodeURIComponent(url.pathname);\n if (!fs.existsSync(repoRoot)) {\n throw new Error(`workspace URI does not exist on this runner: ${workspace}`);\n }\n\n const worktree = config.worktree;\n if (!worktree) {\n return repoRoot;\n }\n\n if (worktree.mode === 'existing') {\n if (!fs.existsSync(worktree.path)) {\n throw new Error(`worktree.path not found: ${worktree.path}`);\n }\n return worktree.path;\n }\n\n await this.git.assertGitRepo(repoRoot);\n\n const rootDirName = this.options.worktreeRootDirName ?? '.xpod-worktrees';\n const root = path.join(repoRoot, rootDirName);\n const worktreePath = path.join(root, threadId);\n\n if (fs.existsSync(worktreePath)) {\n return worktreePath;\n }\n\n const baseRef = worktree.baseRef ?? 'main';\n await this.git.createWorktree({\n repoPath: repoRoot,\n worktreePath,\n baseRef,\n branch: worktree.branch,\n });\n\n return worktreePath;\n }\n\n private canResolveFileWorkspace(url: URL): boolean {\n const authority = url.hostname;\n if (!authority || authority === 'localhost') {\n return true;\n }\n const configured = process.env.XPOD_RUNNER_AUTHORITY?.trim();\n return authority === configured || authority === os.hostname();\n }\n\n private resolveAcpRunnerType(type: string): AcpRunnerType {\n if (type === 'codebuddy' || type === 'claude' || type === 'codex') {\n return type;\n }\n throw new Error(`Unsupported ACP runner type: ${type}`);\n }\n\n private resolveRunnerArgv(type: AcpRunnerType, argv?: string[]): string[] {\n if (argv && argv.length > 0) {\n return argv;\n }\n switch (type) {\n case 'codebuddy':\n return [ this.resolveLocalBin('codebuddy'), '--acp' ];\n case 'claude':\n return [ this.resolveLocalBin('claude-code-acp') ];\n case 'codex':\n return [ this.resolveLocalBin('codex-acp') ];\n default:\n return [ type ];\n }\n }\n\n private resolveLocalBin(binName: string): string {\n const localBin = path.join(PACKAGE_ROOT, 'node_modules', '.bin', binName);\n if (fs.existsSync(localBin)) {\n return localBin;\n }\n return binName;\n }\n\n private buildRunnerEnv(\n type: AcpRunnerType,\n threadId: string,\n workdir: string,\n agentConfig?: ResolvedAgentConfig,\n ): Record<string, string | undefined> | undefined {\n const defaultApiKey = agentConfig?.apiKey || process.env.DEFAULT_API_KEY?.trim();\n const rawApiBase = agentConfig?.baseUrl || getPlatformApiBaseUrl();\n const defaultModel = agentConfig?.model || process.env.DEFAULT_MODEL?.trim();\n\n if (type === 'codebuddy') {\n return undefined;\n }\n\n const home = this.getIsolatedHomeDir(type, threadId, workdir);\n\n if (type === 'codex') {\n const defaultApiBase = rawApiBase || getDefaultBaseUrl();\n const codexHome = path.join(home, '.codex');\n this.codexProjector.project({\n codexHome,\n baseUrl: defaultApiBase,\n apiKey: defaultApiKey,\n wireApi: codexWireApi(defaultApiBase),\n model: defaultModel,\n agentConfig,\n });\n const env: Record<string, string | undefined> = {\n HOME: home,\n XDG_CONFIG_HOME: path.join(home, '.config'),\n XDG_STATE_HOME: path.join(home, '.local', 'state'),\n XDG_DATA_HOME: path.join(home, '.local', 'share'),\n XDG_CACHE_HOME: path.join(home, '.cache'),\n CODEX_HOME: codexHome,\n };\n if (defaultApiKey) {\n env.CODEX_API_KEY = defaultApiKey;\n env.OPENAI_API_KEY = defaultApiKey;\n }\n env.OPENAI_BASE_URL = defaultApiBase;\n env.OPENAI_API_BASE = defaultApiBase;\n if (defaultModel) {\n env.OPENAI_MODEL = defaultModel;\n env.CODEX_MODEL = defaultModel;\n }\n return env;\n }\n\n const defaultApiBase = rawApiBase || getDefaultBaseUrl();\n const env: Record<string, string | undefined> = {\n HOME: home,\n XDG_CONFIG_HOME: path.join(home, '.config'),\n XDG_STATE_HOME: path.join(home, '.local', 'state'),\n XDG_DATA_HOME: path.join(home, '.local', 'share'),\n XDG_CACHE_HOME: path.join(home, '.cache'),\n };\n const normalizedBase = defaultApiBase ? this.normalizeClaudeBaseUrl(defaultApiBase) : undefined;\n const isOpenRouterLike =\n (typeof normalizedBase === 'string' && normalizedBase.includes('openrouter.ai'));\n\n if (defaultApiKey) {\n if (isOpenRouterLike) {\n env.ANTHROPIC_AUTH_TOKEN = defaultApiKey;\n delete env.ANTHROPIC_API_KEY;\n } else {\n env.ANTHROPIC_API_KEY = defaultApiKey;\n delete env.ANTHROPIC_AUTH_TOKEN;\n }\n }\n if (normalizedBase) {\n env.ANTHROPIC_BASE_URL = normalizedBase;\n }\n if (defaultModel) {\n env.ANTHROPIC_DEFAULT_SONNET_MODEL = defaultModel;\n env.ANTHROPIC_DEFAULT_HAIKU_MODEL = defaultModel;\n env.ANTHROPIC_DEFAULT_OPUS_MODEL = defaultModel;\n }\n return env;\n }\n\n private getIsolatedHomeDir(type: Exclude<AcpRunnerType, 'codebuddy'>, threadId: string, workdir: string): string {\n const hash = crypto.createHash('sha256').update(`${type}:${threadId}:${workdir}`).digest('hex').slice(0, 16);\n const root = path.join(os.tmpdir(), 'xpod-acp-home', type, hash);\n fs.mkdirSync(root, { recursive: true });\n return root;\n }\n\n private normalizeClaudeBaseUrl(baseUrl: string): string {\n if (baseUrl.endsWith('/v1')) {\n return baseUrl.slice(0, -3);\n }\n if (baseUrl.endsWith('/v1/')) {\n return baseUrl.slice(0, -4);\n }\n return baseUrl;\n }\n\n private convertMcpServersForAcp(\n servers: Record<string, McpServerConfig>,\n ): Array<Record<string, unknown>> {\n return Object.entries(servers).map(([name, config]) => ({\n name,\n ...config,\n }));\n }\n\n private extractTextDeltaFromSessionUpdate(update: any): string | undefined {\n if (!update) return undefined;\n\n if (typeof update === 'string') return update;\n if (typeof update.delta === 'string') return update.delta;\n if (typeof update.text === 'string') return update.text;\n\n const content = update.content?.content ?? update.content;\n if (typeof content === 'string') return content;\n if (content && typeof content === 'object') {\n if (typeof content.text === 'string') return content.text;\n if (Array.isArray(content)) {\n const parts = content\n .map((part: any) => (part && typeof part === 'object' ? part.text : undefined))\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n }\n\n const message = update.message ?? update.item ?? update.assistant_message;\n if (message && typeof message === 'object') {\n const msgContent = message.content?.content ?? message.content;\n if (typeof msgContent === 'string') return msgContent;\n if (Array.isArray(msgContent)) {\n const parts = msgContent\n .map((part: any) => {\n if (!part || typeof part !== 'object') return undefined;\n if (typeof part.text === 'string') return part.text;\n if (typeof part.delta === 'string') return part.delta;\n return undefined;\n })\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n }\n\n return undefined;\n }\n\n private extractTextFromPromptResult(result: any): string | undefined {\n if (!result) return undefined;\n if (typeof result === 'string') return result;\n\n if (typeof result.text === 'string') return result.text;\n if (typeof result.output_text === 'string') return result.output_text;\n\n const message = result.message ?? result.item ?? result.assistant_message;\n if (message && typeof message === 'object') {\n const msgContent = message.content?.content ?? message.content;\n if (typeof msgContent === 'string') return msgContent;\n if (Array.isArray(msgContent)) {\n const parts = msgContent\n .map((part: any) => (part && typeof part === 'object' ? (typeof part.text === 'string' ? part.text : undefined) : undefined))\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n }\n\n const content = result.content?.content ?? result.content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n const parts = content\n .map((part: any) => (part && typeof part === 'object' ? (typeof part.text === 'string' ? part.text : undefined) : undefined))\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n\n return undefined;\n }\n\n private extractAuthUrl(params: any): string | undefined {\n if (!params || typeof params !== 'object') return undefined;\n const candidates = [\n params.url,\n params.authorizationUrl,\n params.authorization_url,\n params.authUrl,\n params.auth_url,\n params.browserUrl,\n params.browser_url,\n params.verification_uri,\n params.verificationUri,\n params.verificationUrl,\n ];\n return candidates.find((value) => typeof value === 'string' && value.startsWith('http'));\n }\n\n private extractAuthOptions(params: any): Array<{ label?: string; url?: string; method?: string }> | undefined {\n if (!params || typeof params !== 'object') return undefined;\n\n const raw =\n Array.isArray((params as any).methods) ? (params as any).methods\n : Array.isArray((params as any).options) ? (params as any).options\n : Array.isArray((params as any).authMethods) ? (params as any).authMethods\n : Array.isArray((params as any).auth_methods) ? (params as any).auth_methods\n : undefined;\n\n if (!raw) return undefined;\n\n const options = raw\n .map((method: any) => {\n if (!method || typeof method !== 'object') return undefined;\n const url = this.extractAuthUrl(method);\n const label =\n typeof method.label === 'string' ? method.label :\n typeof method.name === 'string' ? method.name :\n typeof method.type === 'string' ? method.type :\n undefined;\n const optionMethod =\n typeof method.method === 'string' ? method.method :\n typeof method.type === 'string' ? method.type :\n undefined;\n return { label, url, method: optionMethod };\n })\n .filter(Boolean) as Array<{ label?: string; url?: string; method?: string }>;\n\n return options.length > 0 ? options : undefined;\n }\n\n private formatError(error: unknown): string {\n const anyError = error as any;\n const dataMessage =\n anyError?.data && typeof anyError.data === 'object' && typeof anyError.data.message === 'string'\n ? anyError.data.message\n : undefined;\n const message = String(anyError?.message ?? error);\n return dataMessage ? `${message} | data.message=${dataMessage.slice(0, 800)}` : message;\n }\n}\n\nclass AsyncPushQueue<T> {\n private readonly items: T[] = [];\n private resolvers: Array<() => void> = [];\n private closed = false;\n private closeResolvers: Array<() => void> = [];\n\n public push(item: T): void {\n if (this.closed) {\n return;\n }\n this.items.push(item);\n const resolver = this.resolvers.shift();\n resolver?.();\n }\n\n public close(): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n for (const resolver of this.resolvers) {\n resolver();\n }\n this.resolvers = [];\n for (const resolver of this.closeResolvers) {\n resolver();\n }\n this.closeResolvers = [];\n }\n\n public async waitClosed(): Promise<void> {\n if (this.closed) {\n return;\n }\n await new Promise<void>((resolve) => this.closeResolvers.push(resolve));\n }\n\n public async *iterate(): AsyncIterable<T> {\n while (true) {\n if (this.items.length > 0) {\n yield this.items.shift()!;\n continue;\n }\n if (this.closed) {\n return;\n }\n await new Promise<void>((resolve) => this.resolvers.push(resolve));\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"AcpAgentRuntime.js","sourceRoot":"","sources":["../../../../src/api/chatkit/runtime/AcpAgentRuntime.ts"],"names":[],"mappings":"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","sourcesContent":["import * as path from 'node:path';\nimport * as crypto from 'node:crypto';\nimport * as fs from 'node:fs';\nimport * as os from 'node:os';\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { WorkspaceRef } from '../../workspace/types';\nimport { getPlatformApiBaseUrl } from '../../service/platform-ai-config';\nimport { PACKAGE_ROOT } from '../../../runtime';\nimport { GitWorktreeService } from './GitWorktreeService';\nimport { AcpRunner } from './AcpRunner';\nimport { CodexRuntimeProjector } from './CodexRuntimeProjector';\nimport type { ResolvedAgentConfig } from '../../../agents/config/types';\nimport type { McpServerConfig } from '../../../agents/types';\nimport { codexWireApi, getDefaultBaseUrl } from '../../service/provider-registry';\nimport type {\n AcpRunnerType,\n AgentRuntimeConfig,\n AgentRuntimeEvent,\n} from '../../runs/AgentRuntimeTypes';\n\ninterface AgentRuntimeRunInput {\n threadId: string;\n prompt: string;\n config: AgentRuntimeConfig;\n}\n\n/**\n * Request-scoped ACP Agent Runtime.\n *\n * This class intentionally keeps no per-thread runner/session map. Durable\n * conversation state belongs in the Pod; each invocation starts an ACP runner,\n * creates one ACP session, streams events, then stops the runner.\n */\nexport class AcpAgentRuntime {\n private readonly logger = getLoggerFor(this);\n private readonly git = new GitWorktreeService();\n private readonly codexProjector = new CodexRuntimeProjector();\n\n public constructor(\n private readonly options: {\n worktreeRootDirName?: string;\n } = {},\n ) {}\n\n public async *run(input: AgentRuntimeRunInput): AsyncIterable<AgentRuntimeEvent> {\n const { threadId, prompt, config } = input;\n const workdir = await this.resolveWorkdir(threadId, config.workspace, config);\n\n if (config.runner.protocol && config.runner.protocol !== 'acp') {\n throw new Error(`Unsupported runner protocol: ${config.runner.protocol}. Only 'acp' is supported.`);\n }\n\n const runnerType = this.resolveAcpRunnerType(config.runner.type);\n const argv = this.resolveRunnerArgv(runnerType, config.runner.argv);\n const command = argv[0];\n const args = argv.slice(1);\n const env = this.buildRunnerEnv(runnerType, threadId, workdir, config.agentConfig);\n const runner = new AcpRunner();\n const queue = new AsyncPushQueue<AgentRuntimeEvent>();\n\n try {\n runner.start({ command, args, cwd: workdir, env });\n\n const sessionId = await this.createSession(runner, workdir, config.agentConfig);\n const runPromise = this.runPrompt(runner, sessionId, prompt, {\n idleMs: config.idleMs ?? 500,\n authWaitMs: Math.max(config.authWaitMs ?? 300_000, config.idleMs ?? 500),\n queue,\n }).catch((error) => {\n queue.push({ type: 'error', message: this.formatError(error) });\n queue.close();\n });\n\n for await (const event of queue.iterate()) {\n yield event;\n }\n await runPromise;\n } catch (error: any) {\n const message = this.formatError(error);\n this.logger.warn(`ACP agent runtime failed: ${message}`);\n yield { type: 'error', message };\n } finally {\n runner.stop('SIGINT');\n }\n }\n\n private async createSession(\n runner: AcpRunner,\n workdir: string,\n agentConfig?: ResolvedAgentConfig,\n ): Promise<string> {\n await runner.request('initialize', {\n protocolVersion: 1,\n clientCapabilities: {},\n clientInfo: { name: 'xpod', version: 'dev' },\n });\n\n const sessionParams: Record<string, unknown> = { cwd: workdir };\n if (agentConfig) {\n sessionParams.mcpServers = Object.keys(agentConfig.mcpServers).length > 0\n ? this.convertMcpServersForAcp(agentConfig.mcpServers)\n : [];\n if (agentConfig.systemPrompt) sessionParams.systemPrompt = agentConfig.systemPrompt;\n if (agentConfig.skillsContent) sessionParams.appendSystemPrompt = agentConfig.skillsContent;\n if (agentConfig.maxTurns) sessionParams.maxTurns = agentConfig.maxTurns;\n if (agentConfig.allowedTools) sessionParams.allowedTools = agentConfig.allowedTools;\n if (agentConfig.disallowedTools) sessionParams.disallowedTools = agentConfig.disallowedTools;\n if (agentConfig.permissionMode) sessionParams.permissionMode = agentConfig.permissionMode;\n } else {\n sessionParams.mcpServers = [];\n }\n\n const newSession = await runner.request<{ sessionId: string }>('session/new', sessionParams);\n if (!newSession?.sessionId) {\n throw new Error('ACP session/new did not return sessionId');\n }\n return newSession.sessionId;\n }\n\n private async runPrompt(\n runner: AcpRunner,\n sessionId: string,\n prompt: string,\n options: {\n idleMs: number;\n authWaitMs: number;\n queue: AsyncPushQueue<AgentRuntimeEvent>;\n },\n ): Promise<void> {\n const { idleMs, authWaitMs, queue } = options;\n let idleTimer: NodeJS.Timeout | undefined;\n let done = false;\n\n const finish = (): void => {\n if (done) return;\n done = true;\n if (idleTimer) {\n clearTimeout(idleTimer);\n idleTimer = undefined;\n }\n runner.off('notification', onNotification);\n runner.off('request', onRequest);\n queue.close();\n };\n\n const bumpIdle = (ms: number = idleMs): void => {\n if (done) return;\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => finish(), ms);\n };\n\n const onRequest = (req: any): void => {\n if (!req || typeof req.method !== 'string') return;\n\n if (this.isRuntimeHandledRequest(req.method)) {\n const hint = req.params?.message || req.params?.reason || req.method;\n const url = this.extractAuthUrl(req.params);\n const authOptions =\n this.extractAuthOptions(req.params) ??\n (url ? [{ label: 'Continue in browser', url, method: req.method }] : undefined);\n queue.push({\n type: 'auth_required',\n method: req.method,\n url,\n message: typeof hint === 'string' ? hint : undefined,\n options: authOptions,\n });\n bumpIdle(authWaitMs);\n if (req.method === 'session/request_permission') {\n req.respond({ granted: true });\n } else {\n req.respond({ handled: true });\n }\n return;\n }\n\n const requestId = `acp:${String(req.id)}`;\n queue.push({\n type: 'tool_call',\n requestId,\n name: req.method,\n arguments: JSON.stringify(req.params ?? {}),\n });\n req.fail(-32601, `Unsupported ACP client request in stateless runtime: ${req.method}`);\n finish();\n };\n\n const onNotification = (method: string, params: any): void => {\n if (method !== 'session/update') return;\n if (!params || params.sessionId !== sessionId) return;\n\n const update = params.update;\n if (!update || typeof update !== 'object') return;\n\n const text = this.extractTextDeltaFromSessionUpdate(update);\n if (typeof text === 'string' && text.length > 0) {\n queue.push({ type: 'text', text });\n bumpIdle();\n }\n };\n\n runner.on('request', onRequest);\n runner.on('notification', onNotification);\n\n try {\n void runner.request('session/prompt', {\n sessionId,\n prompt: [ { type: 'text', text: prompt } ],\n }).then((result) => {\n const text = this.extractTextFromPromptResult(result);\n if (typeof text === 'string' && text.length > 0) {\n queue.push({ type: 'text', text });\n bumpIdle();\n } else {\n bumpIdle();\n }\n }).catch((error) => {\n if (!done) {\n queue.push({ type: 'error', message: this.formatError(error) });\n finish();\n }\n });\n bumpIdle();\n await queue.waitClosed();\n } finally {\n finish();\n }\n }\n\n private isRuntimeHandledRequest(method: string): boolean {\n return method === 'session/request_permission' ||\n method === 'auth/request' ||\n method === 'auth/authorize';\n }\n\n private async resolveWorkdir(threadId: string, workspace: WorkspaceRef, config: AgentRuntimeConfig): Promise<string> {\n const url = new URL(workspace);\n if (url.protocol !== 'file:') {\n throw new Error('ACP runtime only supports file:// workspaces; use pi Agent Runtime for Pod-backed runs');\n }\n if (!this.canResolveFileWorkspace(url)) {\n throw new Error(`Workspace is not resolvable by this ACP runner: ${workspace}`);\n }\n\n const repoRoot = decodeURIComponent(url.pathname);\n if (!fs.existsSync(repoRoot)) {\n throw new Error(`workspace reference does not exist on this runner: ${workspace}`);\n }\n\n const worktree = config.worktree;\n if (!worktree) {\n return repoRoot;\n }\n\n if (worktree.mode === 'existing') {\n if (!fs.existsSync(worktree.path)) {\n throw new Error(`worktree.path not found: ${worktree.path}`);\n }\n return worktree.path;\n }\n\n await this.git.assertGitRepo(repoRoot);\n\n const rootDirName = this.options.worktreeRootDirName ?? '.xpod-worktrees';\n const root = path.join(repoRoot, rootDirName);\n const worktreePath = path.join(root, threadId);\n\n if (fs.existsSync(worktreePath)) {\n return worktreePath;\n }\n\n const baseRef = worktree.baseRef ?? 'main';\n await this.git.createWorktree({\n repoPath: repoRoot,\n worktreePath,\n baseRef,\n branch: worktree.branch,\n });\n\n return worktreePath;\n }\n\n private canResolveFileWorkspace(url: URL): boolean {\n const authority = url.hostname;\n if (!authority || authority === 'localhost') {\n return true;\n }\n const configured = process.env.XPOD_RUNNER_AUTHORITY?.trim();\n return authority === configured || authority === os.hostname();\n }\n\n private resolveAcpRunnerType(type: string): AcpRunnerType {\n if (type === 'codebuddy' || type === 'claude' || type === 'codex') {\n return type;\n }\n throw new Error(`Unsupported ACP runner type: ${type}`);\n }\n\n private resolveRunnerArgv(type: AcpRunnerType, argv?: string[]): string[] {\n if (argv && argv.length > 0) {\n return argv;\n }\n switch (type) {\n case 'codebuddy':\n return [ this.resolveLocalBin('codebuddy'), '--acp' ];\n case 'claude':\n return [ this.resolveLocalBin('claude-code-acp') ];\n case 'codex':\n return [ this.resolveLocalBin('codex-acp') ];\n default:\n return [ type ];\n }\n }\n\n private resolveLocalBin(binName: string): string {\n const localBin = path.join(PACKAGE_ROOT, 'node_modules', '.bin', binName);\n if (fs.existsSync(localBin)) {\n return localBin;\n }\n return binName;\n }\n\n private buildRunnerEnv(\n type: AcpRunnerType,\n threadId: string,\n workdir: string,\n agentConfig?: ResolvedAgentConfig,\n ): Record<string, string | undefined> | undefined {\n const defaultApiKey = agentConfig?.apiKey || process.env.DEFAULT_API_KEY?.trim();\n const rawApiBase = agentConfig?.baseUrl || getPlatformApiBaseUrl();\n const defaultModel = agentConfig?.model || process.env.DEFAULT_MODEL?.trim();\n\n if (type === 'codebuddy') {\n return undefined;\n }\n\n const home = this.getIsolatedHomeDir(type, threadId, workdir);\n\n if (type === 'codex') {\n const defaultApiBase = rawApiBase || getDefaultBaseUrl();\n const codexHome = path.join(home, '.codex');\n this.codexProjector.project({\n codexHome,\n baseUrl: defaultApiBase,\n apiKey: defaultApiKey,\n wireApi: codexWireApi(defaultApiBase),\n model: defaultModel,\n agentConfig,\n });\n const env: Record<string, string | undefined> = {\n HOME: home,\n XDG_CONFIG_HOME: path.join(home, '.config'),\n XDG_STATE_HOME: path.join(home, '.local', 'state'),\n XDG_DATA_HOME: path.join(home, '.local', 'share'),\n XDG_CACHE_HOME: path.join(home, '.cache'),\n CODEX_HOME: codexHome,\n };\n if (defaultApiKey) {\n env.CODEX_API_KEY = defaultApiKey;\n env.OPENAI_API_KEY = defaultApiKey;\n }\n env.OPENAI_BASE_URL = defaultApiBase;\n env.OPENAI_API_BASE = defaultApiBase;\n if (defaultModel) {\n env.OPENAI_MODEL = defaultModel;\n env.CODEX_MODEL = defaultModel;\n }\n return env;\n }\n\n const defaultApiBase = rawApiBase || getDefaultBaseUrl();\n const env: Record<string, string | undefined> = {\n HOME: home,\n XDG_CONFIG_HOME: path.join(home, '.config'),\n XDG_STATE_HOME: path.join(home, '.local', 'state'),\n XDG_DATA_HOME: path.join(home, '.local', 'share'),\n XDG_CACHE_HOME: path.join(home, '.cache'),\n };\n const normalizedBase = defaultApiBase ? this.normalizeClaudeBaseUrl(defaultApiBase) : undefined;\n const isOpenRouterLike =\n (typeof normalizedBase === 'string' && normalizedBase.includes('openrouter.ai'));\n\n if (defaultApiKey) {\n if (isOpenRouterLike) {\n env.ANTHROPIC_AUTH_TOKEN = defaultApiKey;\n delete env.ANTHROPIC_API_KEY;\n } else {\n env.ANTHROPIC_API_KEY = defaultApiKey;\n delete env.ANTHROPIC_AUTH_TOKEN;\n }\n }\n if (normalizedBase) {\n env.ANTHROPIC_BASE_URL = normalizedBase;\n }\n if (defaultModel) {\n env.ANTHROPIC_DEFAULT_SONNET_MODEL = defaultModel;\n env.ANTHROPIC_DEFAULT_HAIKU_MODEL = defaultModel;\n env.ANTHROPIC_DEFAULT_OPUS_MODEL = defaultModel;\n }\n return env;\n }\n\n private getIsolatedHomeDir(type: Exclude<AcpRunnerType, 'codebuddy'>, threadId: string, workdir: string): string {\n const hash = crypto.createHash('sha256').update(`${type}:${threadId}:${workdir}`).digest('hex').slice(0, 16);\n const root = path.join(os.tmpdir(), 'xpod-acp-home', type, hash);\n fs.mkdirSync(root, { recursive: true });\n return root;\n }\n\n private normalizeClaudeBaseUrl(baseUrl: string): string {\n if (baseUrl.endsWith('/v1')) {\n return baseUrl.slice(0, -3);\n }\n if (baseUrl.endsWith('/v1/')) {\n return baseUrl.slice(0, -4);\n }\n return baseUrl;\n }\n\n private convertMcpServersForAcp(\n servers: Record<string, McpServerConfig>,\n ): Array<Record<string, unknown>> {\n return Object.entries(servers).map(([name, config]) => ({\n name,\n ...config,\n }));\n }\n\n private extractTextDeltaFromSessionUpdate(update: any): string | undefined {\n if (!update) return undefined;\n\n if (typeof update === 'string') return update;\n if (typeof update.delta === 'string') return update.delta;\n if (typeof update.text === 'string') return update.text;\n\n const content = update.content?.content ?? update.content;\n if (typeof content === 'string') return content;\n if (content && typeof content === 'object') {\n if (typeof content.text === 'string') return content.text;\n if (Array.isArray(content)) {\n const parts = content\n .map((part: any) => (part && typeof part === 'object' ? part.text : undefined))\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n }\n\n const message = update.message ?? update.item ?? update.assistant_message;\n if (message && typeof message === 'object') {\n const msgContent = message.content?.content ?? message.content;\n if (typeof msgContent === 'string') return msgContent;\n if (Array.isArray(msgContent)) {\n const parts = msgContent\n .map((part: any) => {\n if (!part || typeof part !== 'object') return undefined;\n if (typeof part.text === 'string') return part.text;\n if (typeof part.delta === 'string') return part.delta;\n return undefined;\n })\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n }\n\n return undefined;\n }\n\n private extractTextFromPromptResult(result: any): string | undefined {\n if (!result) return undefined;\n if (typeof result === 'string') return result;\n\n if (typeof result.text === 'string') return result.text;\n if (typeof result.output_text === 'string') return result.output_text;\n\n const message = result.message ?? result.item ?? result.assistant_message;\n if (message && typeof message === 'object') {\n const msgContent = message.content?.content ?? message.content;\n if (typeof msgContent === 'string') return msgContent;\n if (Array.isArray(msgContent)) {\n const parts = msgContent\n .map((part: any) => (part && typeof part === 'object' ? (typeof part.text === 'string' ? part.text : undefined) : undefined))\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n }\n\n const content = result.content?.content ?? result.content;\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n const parts = content\n .map((part: any) => (part && typeof part === 'object' ? (typeof part.text === 'string' ? part.text : undefined) : undefined))\n .filter((text: any) => typeof text === 'string');\n if (parts.length) return parts.join('');\n }\n\n return undefined;\n }\n\n private extractAuthUrl(params: any): string | undefined {\n if (!params || typeof params !== 'object') return undefined;\n const candidates = [\n params.url,\n params.authorizationUrl,\n params.authorization_url,\n params.authUrl,\n params.auth_url,\n params.browserUrl,\n params.browser_url,\n params.verification_uri,\n params.verificationUri,\n params.verificationUrl,\n ];\n return candidates.find((value) => typeof value === 'string' && value.startsWith('http'));\n }\n\n private extractAuthOptions(params: any): Array<{ label?: string; url?: string; method?: string }> | undefined {\n if (!params || typeof params !== 'object') return undefined;\n\n const raw =\n Array.isArray((params as any).methods) ? (params as any).methods\n : Array.isArray((params as any).options) ? (params as any).options\n : Array.isArray((params as any).authMethods) ? (params as any).authMethods\n : Array.isArray((params as any).auth_methods) ? (params as any).auth_methods\n : undefined;\n\n if (!raw) return undefined;\n\n const options = raw\n .map((method: any) => {\n if (!method || typeof method !== 'object') return undefined;\n const url = this.extractAuthUrl(method);\n const label =\n typeof method.label === 'string' ? method.label :\n typeof method.name === 'string' ? method.name :\n typeof method.type === 'string' ? method.type :\n undefined;\n const optionMethod =\n typeof method.method === 'string' ? method.method :\n typeof method.type === 'string' ? method.type :\n undefined;\n return { label, url, method: optionMethod };\n })\n .filter(Boolean) as Array<{ label?: string; url?: string; method?: string }>;\n\n return options.length > 0 ? options : undefined;\n }\n\n private formatError(error: unknown): string {\n const anyError = error as any;\n const dataMessage =\n anyError?.data && typeof anyError.data === 'object' && typeof anyError.data.message === 'string'\n ? anyError.data.message\n : undefined;\n const message = String(anyError?.message ?? error);\n return dataMessage ? `${message} | data.message=${dataMessage.slice(0, 800)}` : message;\n }\n}\n\nclass AsyncPushQueue<T> {\n private readonly items: T[] = [];\n private resolvers: Array<() => void> = [];\n private closed = false;\n private closeResolvers: Array<() => void> = [];\n\n public push(item: T): void {\n if (this.closed) {\n return;\n }\n this.items.push(item);\n const resolver = this.resolvers.shift();\n resolver?.();\n }\n\n public close(): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n for (const resolver of this.resolvers) {\n resolver();\n }\n this.resolvers = [];\n for (const resolver of this.closeResolvers) {\n resolver();\n }\n this.closeResolvers = [];\n }\n\n public async waitClosed(): Promise<void> {\n if (this.closed) {\n return;\n }\n await new Promise<void>((resolve) => this.closeResolvers.push(resolve));\n }\n\n public async *iterate(): AsyncIterable<T> {\n while (true) {\n if (this.items.length > 0) {\n yield this.items.shift()!;\n continue;\n }\n if (this.closed) {\n return;\n }\n await new Promise<void>((resolve) => this.resolvers.push(resolve));\n }\n }\n}\n"]}
|
|
@@ -516,7 +516,7 @@ class ChatKitService {
|
|
|
516
516
|
return Object.keys(normalized).length > 0 ? normalized : undefined;
|
|
517
517
|
}
|
|
518
518
|
resolveThreadWorkspace(workspace) {
|
|
519
|
-
return (0, types_2.
|
|
519
|
+
return (0, types_2.isWorkspaceRef)(workspace) ? workspace : undefined;
|
|
520
520
|
}
|
|
521
521
|
threadRefFromParams(params) {
|
|
522
522
|
return (0, types_1.toThreadRef)(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/api/chatkit/service.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iEAAqD;AA8BrD,mCASiB;AACjB,2DAA4E;AAE5E,8CAAoD;AA2DpD;;GAEG;AACH,MAAa,cAAc;IAQzB,YAAmB,OAAwC;QAP1C,WAAM,GAAG,IAAA,oCAAY,EAAC,IAAI,CAAC,CAAC;QAQ3C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,8BAA8B,CAAC;QAC3E,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,IAAI,+BAAc,CAAC;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;YACtD,gBAAgB,EAAE,OAAO,CAAC,mBAAmB;SAC9C,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,WAA4B,EAAE,OAAiB;QAClE,MAAM,UAAU,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEjG,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAe,CAAC;QACjD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjE,IAAI,IAAA,sBAAc,EAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO;gBACL,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC;aAC7D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;aAC7B,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,uBAAuB,CAAC,OAAqB,EAAE,OAAiB;QAC7E,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,IAAI,MAAM,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;YAClG,MAAM,UAAU,GAAsB;gBACpC,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;iBAC9C;aACF,CAAC;YACF,MAAM,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,gBAAgB,CAAC,OAAqB,EAAE,OAAiB;QACtE,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,gBAAgB;gBACnB,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC3E,MAAM;YACR,KAAK,0BAA0B;gBAC7B,KAAK,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACjE,MAAM;YACR,KAAK,gCAAgC;gBACnC,KAAK,CAAC,CAAC,IAAI,CAAC,gCAAgC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACtE,MAAM;YACR,KAAK,0BAA0B;gBAC7B,KAAK,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACjE,MAAM;YACR,KAAK,uBAAuB;gBAC1B,KAAK,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC/D,MAAM;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,OAAwB,EAAE,OAAiB;QAC3E,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC5D,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,KAAK,YAAY;gBACf,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACvD,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3D,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/D,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/D,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3D,KAAK,gBAAgB;gBACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,6BAA6B;IAC7B,4EAA4E;IAE5E;;OAEG;IACK,KAAK,CAAC,CAAC,mBAAmB,CAChC,MAA0B,EAC1B,OAAiB,EACjB,QAAkC;QAElC,oBAAoB;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,IAAA,oBAAY,GAAE,CAAC;QAE3B,MAAM,MAAM,GAAmB;YAC7B,EAAE,EAAE,QAAQ;YACZ,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC;YACxD,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC;SACjE,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7C,4BAA4B;QAC5B,MAAM;YACJ,IAAI,EAAE,gBAAgB;YACtB,MAAM;SACe,CAAC;QAExB,kDAAkD;QAClD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACnG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAEhE,MAAM;gBACJ,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,WAAW;aACM,CAAC;YAE1B,MAAM;gBACJ,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,WAAW;aACK,CAAC;YAEzB,mDAAmD;YACnD,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,2BAA2B,CACxC,MAAkC,EAClC,OAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/D,+BAA+B;QAC/B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEhE,MAAM;YACJ,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,WAAW;SACM,CAAC;QAE1B,MAAM;YACJ,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,WAAW;SACK,CAAC;QAEzB,mDAAmD;QACnD,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC/F,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,gCAAgC,CAC7C,MAAuC,EACvC,OAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,KAAK,EACP,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC;YAC1D,SAAS;YACT,MAAM,EAAE,MAAM,CAAC,OAAO;YACtB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO;SACR,CAAC,EACF,CAAC;YACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,2BAA2B,CACxC,MAAkC,EAClC,OAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/D,uEAAuE;QACvE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAE3F,IAAI,eAA4C,CAAC;QACjD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,MAAM;YACR,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACjC,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;QACH,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,yBAAyB,CACtC,MAAgC,EAChC,OAAiB;QAEjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,4DAA4D;IAC9D,CAAC;IAED,4EAA4E;IAC5E,iCAAiC;IACjC,4EAA4E;IAE5E;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAChC,MAA2B,EAC3B,OAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEzF,OAAO;YACL,GAAG,MAAM;YACT,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,MAAsE,EACtE,OAAiB;QAEjB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAC3B,MAAM,EAAE,KAAK,IAAI,EAAE,EACnB,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,KAAK,IAAI,MAAM,EACvB,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAC3B,MAAuB,EACvB,OAAiB;QAEjB,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,CAC/B,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAChC,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,KAAK,IAAI,EAAE,EAClB,MAAM,CAAC,KAAK,IAAI,KAAK,EACrB,OAAO,CACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,MAA0B,EAC1B,OAAiB;QAEjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClG,yDAAyD;QACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CACnC,MAAyD,EACzD,OAAiB;QAEjB,MAAM,YAAY,GAAG,IAAA,kBAAU,EAAC,QAAQ,CAAC,CAAC;QAC1C,yFAAyF;QACzF,OAAO;YACL,aAAa,EAAE,YAAY;YAC3B,sDAAsD;SACvD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB,CACnC,MAAiC,EACjC,OAAiB;QAEjB,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,MAA0B,EAC1B,OAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAE/D,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC9B,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,UAAU,GAAG,IAAA,oBAAY,GAAE,CAAC;QAEnC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,MAA0B,EAC1B,OAAiB;QAEjB,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,4EAA4E;IAC5E,2BAA2B;IAC3B,4EAA4E;IAE5E;;;OAGG;IACK,KAAK,CAAC,CAAC,OAAO,CACpB,MAAsB,EACtB,WAA4B,EAC5B,OAAiB,EACjB,gBAAsB,EACtB,YAAuB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAEvD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,MAAM,EAAE,OAAO,CAAC;eAC3E,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;QAC/D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,KAAK,EACP,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;gBAC/C,MAAM;gBACN,WAAW;gBACX,OAAO;gBACP,aAAa;aACd,CAAC,EACF,CAAC;gBACD,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACpD,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,6DAA6D;iBACvE;aACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEzE,gCAAgC;QAChC,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxF,MAAM,aAAa,GAAyB;YAC1C,EAAE,EAAE,eAAe;YACnB,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YAC5C,MAAM,EAAE,aAAa;YACrB,UAAU,EAAE,IAAA,oBAAY,GAAE;SAC3B,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QAElE,wBAAwB;QACxB,MAAM;YACJ,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,aAAa;SACI,CAAC;QAE1B,qBAAqB;QACrB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE;gBACjE,KAAK,EAAE,gBAAgB,EAAE,KAAK;gBAC9B,WAAW,EAAE,gBAAgB,EAAE,WAAW;gBAC1C,SAAS,EAAE,gBAAgB,EAAE,UAAU;gBACvC,OAAO,EAAE,wBAAwB;aAClC,CAAC,EAAE,CAAC;gBACH,QAAQ,IAAI,KAAK,CAAC;gBAElB,yBAAyB;gBACzB,MAAM;oBACJ,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,eAAe;oBACxB,MAAM,EAAE;wBACN,IAAI,EAAE,2CAA2C;wBACjD,UAAU,EAAE,SAAS;wBACrB,KAAK,EAAE,KAAK;qBACb;iBACwB,CAAC;YAC9B,CAAC;YAED,gCAAgC;YAChC,aAAa,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClE,aAAa,CAAC,MAAM,GAAG,WAAW,CAAC;YACnC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAE7D,uBAAuB;YACvB,MAAM;gBACJ,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,aAAa;aACG,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,KAAK,EAAE,CAAC,CAAC;YAE7D,aAAa,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAC,CAAC;YACnH,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC;YACpC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;YAE7D,MAAM;gBACJ,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,aAAa;aACG,CAAC;YAEzB,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,6BAA6B;iBACxD;aACF,CAAC;QACJ,CAAC;QAED,qGAAqG;QACrG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;gBAC9D,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gBACrB,MAAM,CAAC,UAAU,GAAG,IAAA,oBAAY,GAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE7C,MAAM;oBACJ,IAAI,EAAE,gBAAgB;oBACtB,MAAM;iBACP,CAAC;YACJ,CAAC;YAAC,OAAO,UAAe,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChF,uEAAuE;YACzE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CACpC,MAAiB,EACjB,OAAiB;QAEjB,MAAM,QAAQ,GAAsE,EAAE,CAAC;QAEvF,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAE9D,oBAAoB;QACpB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEvF,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAA,8BAAsB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,IAAI,EAAE,CAAC;oBACT,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;qBACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;qBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;qBAClB,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,IAAI,IAAI,EAAE,CAAC;oBACT,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,SAAoB,EACpB,OAA6B,EAC7B,OAAiB,EACjB,MAAuB;QAEvB,iCAAiC;QACjC,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAA,0BAAkB,EAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAE9E,OAAO;YACL,EAAE,EAAE,MAAM;YACV,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,cAAc;YACpB,OAAO;YACP,UAAU,EAAE,IAAA,oBAAY,GAAE;SAC3B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,WAA4B,EAAE,iBAAyB;QACjF,MAAM,QAAQ,GAAG,IAAA,8BAAsB,EAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7D,kDAAkD;QAClD,IAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,KAAK,IAAI,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,IAAI,UAAU,CAAC;IAC7B,CAAC;IAEO,oBAAoB,CAAC,KAAoB;QAC/C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,YAAY;gBACf,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAA0B,CAAC;YACjF,KAAK,cAAc;gBACjB,OAAO;oBACL,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EAAE,KAAK,CAAC,MAAM;oBACrB,MAAM,EAAE;wBACN,IAAI,EAAE,2CAA2C;wBACjD,UAAU,EAAE,CAAC;wBACb,KAAK,EAAE,KAAK,CAAC,KAAK;qBACnB;iBACwB,CAAC;YAC9B,KAAK,WAAW;gBACd,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAyB,CAAC;YAC/E,KAAK,eAAe;gBAClB,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACzD,KAAK,OAAO;gBACV,OAAO;oBACL,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,IAAI,EAAE,KAAK,CAAC,IAAI;wBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;qBACvB;iBACF,CAAC;QACN,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,QAA6C,EAC7C,MAAe;QAEf,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3C,UAAU,CAAC,OAAO,GAAG,MAAM;eACtB,CAAC,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACzE,CAAC,CAAC,UAAU,CAAC,OAAO;gBACpB,CAAC,CAAC,8BAAsB,CAAC,CAAC;QAC9B,UAAU,CAAC,UAAU,GAAG,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YACnG,CAAC,CAAC,UAAU,CAAC,UAAU;YACvB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC;QACvB,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IAEO,sBAAsB,CAAC,SAAmC;QAChE,OAAO,IAAA,sBAAc,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,CAAC;IAEO,mBAAmB,CAAC,MAA+C;QACzE,OAAO,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAEO,mBAAmB,CAAC,MAAsB;QAChD,OAAO;YACL,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,OAAO,EAAE,IAAA,mCAA2B,EAAC,MAAM,CAAC;SAC7C,CAAC;IACJ,CAAC;CACF;AA9oBD,wCA8oBC","sourcesContent":["/**\n * ChatKit Service\n * \n * Core service for handling ChatKit protocol requests.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/server.py\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { ChatKitStore, StoreContext } from './store';\nimport type {\n ChatKitReq,\n StreamingReq,\n NonStreamingReq,\n ThreadCreateParams,\n ThreadAddUserMessageParams,\n ThreadAddClientToolOutputParams,\n ThreadRetryAfterItemParams,\n ThreadCustomActionParams,\n ThreadGetByIdParams,\n ItemsListParams,\n ItemFeedbackParams,\n ThreadUpdateParams,\n ThreadDeleteParams,\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n UserMessageItem,\n AssistantMessageItem,\n ThreadStreamEvent,\n ThreadCreatedEvent,\n ThreadItemAddedEvent,\n ThreadItemDoneEvent,\n ThreadItemUpdatedEvent,\n Page,\n Thread,\n UserMessageContent,\n} from './types';\nimport {\n DEFAULT_THREAD_CHAT_ID,\n getChatIdFromThreadMetadata,\n getThreadIdFromRef,\n isStreamingReq,\n generateId,\n nowTimestamp,\n toThreadRef,\n extractUserMessageText,\n} from './types';\nimport { RunStateCenter, type RunStateEvent } from '../runs/RunStateCenter';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { isWorkspaceUri } from '../workspace/types';\nimport type { WorkspaceUri } from '../workspace/types';\n\n/**\n * AI Provider interface for direct text generation in tests/dev harnesses.\n *\n * Product Chat requests go through RunStateCenter / Agent Runtime. This\n * provider is not a deployment compatibility path.\n */\nexport interface AiProvider {\n /**\n * Stream a response for the given messages\n * Returns an async iterator of text chunks\n */\n streamResponse(\n messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }>,\n options?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n context?: unknown; // Allow passing context for auth\n },\n ): AsyncIterable<string>;\n}\n\n/**\n * ChatKit Service Options\n */\nexport interface ChatKitServiceOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext>;\n aiProvider?: AiProvider;\n systemPrompt?: string;\n /**\n * Enable xpod Agent Runtime invocation (local-only feature).\n * When enabled, thread.metadata.runtime controls the runner/worktree.\n */\n enableAgentRuntime?: boolean;\n allowDirectAiFallback?: boolean;\n runExecutionBackend?: RunExecutionBackend;\n}\n\n/**\n * Streaming result wrapper\n */\nexport interface StreamingResult {\n type: 'streaming';\n stream(): AsyncIterable<Uint8Array>;\n}\n\n/**\n * Non-streaming result wrapper\n */\nexport interface NonStreamingResult {\n type: 'non_streaming';\n json: string;\n}\n\nexport type ChatKitResult = StreamingResult | NonStreamingResult;\n\n/**\n * ChatKit Service\n */\nexport class ChatKitService<TContext = StoreContext> {\n private readonly logger = getLoggerFor(this);\n private readonly store: ChatKitStore<TContext>;\n private readonly aiProvider?: AiProvider;\n private readonly systemPrompt: string;\n private readonly allowDirectAiFallback: boolean;\n private readonly runStateCenter: RunStateCenter<TContext>;\n\n public constructor(options: ChatKitServiceOptions<TContext>) {\n this.store = options.store;\n this.aiProvider = options.aiProvider;\n this.systemPrompt = options.systemPrompt ?? 'You are a helpful assistant.';\n this.allowDirectAiFallback = options.allowDirectAiFallback ?? false;\n this.runStateCenter = new RunStateCenter({\n store: this.store,\n enableAgentRuntime: options.enableAgentRuntime ?? true,\n executionBackend: options.runExecutionBackend,\n });\n }\n\n /**\n * Process a ChatKit request\n */\n public async process(requestBody: string | Buffer, context: TContext): Promise<ChatKitResult> {\n const requestStr = typeof requestBody === 'string' ? requestBody : requestBody.toString('utf-8');\n \n let request: ChatKitReq;\n try {\n request = JSON.parse(requestStr) as ChatKitReq;\n } catch (e) {\n throw new Error('Invalid JSON request body');\n }\n\n this.logger.debug(`Processing ChatKit request: ${request.type}`);\n\n if (isStreamingReq(request)) {\n return {\n type: 'streaming',\n stream: () => this.processStreamingAsBytes(request, context),\n };\n } else {\n const result = await this.processNonStreaming(request, context);\n return {\n type: 'non_streaming',\n json: JSON.stringify(result),\n };\n }\n }\n\n /**\n * Convert streaming events to SSE bytes\n */\n private async *processStreamingAsBytes(request: StreamingReq, context: TContext): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n try {\n for await (const event of this.processStreaming(request, context)) {\n this.logger.info(`ChatKit streaming event (${request.type}): ${event.type}`);\n const data = JSON.stringify(event);\n yield encoder.encode(`data: ${data}\\n\\n`);\n }\n } catch (error: any) {\n this.logger.error(`ChatKit streaming request failed (${request.type}): ${error?.stack || error}`);\n const errorEvent: ThreadStreamEvent = {\n type: 'error',\n error: {\n code: 'internal_error',\n message: error.message || 'An error occurred',\n },\n };\n yield encoder.encode(`data: ${JSON.stringify(errorEvent)}\\n\\n`);\n }\n }\n\n /**\n * Process streaming requests\n */\n private async *processStreaming(request: StreamingReq, context: TContext): AsyncIterable<ThreadStreamEvent> {\n switch (request.type) {\n case 'threads.create':\n yield* this.handleThreadsCreate(request.params, context, request.metadata);\n break;\n case 'threads.add_user_message':\n yield* this.handleThreadsAddUserMessage(request.params, context);\n break;\n case 'threads.add_client_tool_output':\n yield* this.handleThreadsAddClientToolOutput(request.params, context);\n break;\n case 'threads.retry_after_item':\n yield* this.handleThreadsRetryAfterItem(request.params, context);\n break;\n case 'threads.custom_action':\n yield* this.handleThreadsCustomAction(request.params, context);\n break;\n }\n }\n\n /**\n * Process non-streaming requests\n */\n private async processNonStreaming(request: NonStreamingReq, context: TContext): Promise<unknown> {\n switch (request.type) {\n case 'threads.get_by_id':\n return this.handleThreadsGetById(request.params, context);\n case 'threads.list':\n return this.handleThreadsList(request.params, context);\n case 'items.list':\n return this.handleItemsList(request.params, context);\n case 'items.feedback':\n return this.handleItemsFeedback(request.params, context);\n case 'attachments.create':\n return this.handleAttachmentsCreate(request.params, context);\n case 'attachments.delete':\n return this.handleAttachmentsDelete(request.params, context);\n case 'threads.update':\n return this.handleThreadsUpdate(request.params, context);\n case 'threads.delete':\n return this.handleThreadsDelete(request.params, context);\n }\n }\n\n // =========================================================================\n // Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.create - Create a new thread and optionally respond to initial message\n */\n private async *handleThreadsCreate(\n params: ThreadCreateParams,\n context: TContext,\n metadata?: Record<string, unknown>,\n ): AsyncIterable<ThreadStreamEvent> {\n // Create new thread\n const threadId = this.store.generateThreadId(context);\n const now = nowTimestamp();\n \n const thread: ThreadMetadata = {\n id: threadId,\n status: { type: 'active' },\n workspace: this.resolveThreadWorkspace(params.workspace),\n created_at: now,\n updated_at: now,\n metadata: this.normalizeThreadMetadata(metadata, params.chat_id),\n };\n\n await this.store.saveThread(thread, context);\n\n // Emit thread created event\n yield {\n type: 'thread.created',\n thread,\n } as ThreadCreatedEvent;\n\n // If input provided, add user message and respond\n if (params.input) {\n const threadRef = this.threadRefFromThread(thread);\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context, thread);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options);\n }\n }\n\n /**\n * Handle threads.add_user_message - Add a user message and respond\n */\n private async *handleThreadsAddUserMessage(\n params: ThreadAddUserMessageParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n\n // Create and save user message\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options, threadRef);\n }\n\n /**\n * Handle threads.add_client_tool_output - Handle tool output (not fully implemented)\n */\n private async *handleThreadsAddClientToolOutput(\n params: ThreadAddClientToolOutputParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n for await (\n const event of this.runStateCenter.completeClientToolOutput({\n threadRef,\n itemId: params.item_id,\n output: params.output,\n context,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n }\n\n /**\n * Handle threads.retry_after_item - Retry generation after a specific item\n */\n private async *handleThreadsRetryAfterItem(\n params: ThreadRetryAfterItemParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n // Load all items and find the last user message before the retry point\n const items = await this.store.loadThreadItems(threadRef, undefined, 1000, 'asc', context);\n \n let lastUserMessage: UserMessageItem | undefined;\n for (const item of items.data) {\n if (item.id === params.item_id) {\n break;\n }\n if (item.type === 'user_message') {\n lastUserMessage = item;\n }\n }\n\n if (lastUserMessage) {\n yield* this.respond(thread, lastUserMessage, context, undefined, threadRef);\n }\n }\n\n /**\n * Handle threads.custom_action - Handle custom widget actions (not fully implemented)\n */\n private async *handleThreadsCustomAction(\n params: ThreadCustomActionParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n this.logger.info(`Custom action: ${params.action} on item ${params.item_id}`);\n // Custom actions can be implemented based on specific needs\n }\n\n // =========================================================================\n // Non-Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.get_by_id\n */\n private async handleThreadsGetById(\n params: ThreadGetByIdParams,\n context: TContext,\n ): Promise<Thread> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n const items = await this.store.loadThreadItems(threadRef, undefined, 50, 'asc', context);\n \n return {\n ...thread,\n items,\n };\n }\n\n /**\n * Handle threads.list\n */\n private async handleThreadsList(\n params: { limit?: number; order?: string; after?: string } | undefined,\n context: TContext,\n ): Promise<Page<ThreadMetadata>> {\n return this.store.loadThreads(\n params?.limit ?? 20,\n params?.after,\n params?.order ?? 'desc',\n context,\n );\n }\n\n /**\n * Handle items.list\n */\n private async handleItemsList(\n params: ItemsListParams,\n context: TContext,\n ): Promise<Page<ThreadItem>> {\n return this.store.loadThreadItems(\n this.threadRefFromParams(params),\n params.after,\n params.limit ?? 50,\n params.order ?? 'asc',\n context,\n );\n }\n\n /**\n * Handle items.feedback (acknowledge only for now)\n */\n private async handleItemsFeedback(\n params: ItemFeedbackParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n this.logger.info(`Feedback received: ${params.feedback} for items ${params.item_ids.join(', ')}`);\n // Store feedback in metadata or separate table if needed\n return { success: true };\n }\n\n /**\n * Handle attachments.create\n */\n private async handleAttachmentsCreate(\n params: { name: string; size: number; mime_type: string },\n context: TContext,\n ): Promise<{ attachment_id: string; upload_url?: string }> {\n const attachmentId = generateId('attach');\n // For now, return a placeholder - actual upload handling would need S3/MinIO integration\n return {\n attachment_id: attachmentId,\n // upload_url would be provided for actual file upload\n };\n }\n\n /**\n * Handle attachments.delete\n */\n private async handleAttachmentsDelete(\n params: { attachment_id: string },\n context: TContext,\n ): Promise<{ success: boolean }> {\n if (this.store.deleteAttachment) {\n await this.store.deleteAttachment(params.attachment_id, context);\n }\n return { success: true };\n }\n\n /**\n * Handle threads.update\n */\n private async handleThreadsUpdate(\n params: ThreadUpdateParams,\n context: TContext,\n ): Promise<ThreadMetadata> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n if (params.title !== undefined) {\n thread.title = params.title;\n }\n if (params.workspace !== undefined) {\n thread.workspace = params.workspace || undefined;\n }\n thread.updated_at = nowTimestamp();\n\n await this.store.saveThread(thread, context);\n return thread;\n }\n\n /**\n * Handle threads.delete\n */\n private async handleThreadsDelete(\n params: ThreadDeleteParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n await this.store.deleteThread(this.threadRefFromParams(params), context);\n return { success: true };\n }\n\n // =========================================================================\n // Core Response Generation\n // =========================================================================\n\n /**\n * Generate AI response for a user message\n * This is the main response generation logic\n */\n private async *respond(\n thread: ThreadMetadata,\n userMessage: UserMessageItem,\n context: TContext,\n inferenceOptions?: any,\n threadRef: ThreadRef = this.threadRefFromThread(thread),\n ): AsyncIterable<ThreadStreamEvent> {\n const runtimeConfig = this.runStateCenter.getAgentRuntimeConfig(thread, context)\n ?? this.runStateCenter.getDefaultAgentRuntimeConfig(context);\n if (runtimeConfig) {\n for await (\n const event of this.runStateCenter.startAgentRun({\n thread,\n userMessage,\n context,\n runtimeConfig,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n return;\n }\n\n if (!this.allowDirectAiFallback || !this.aiProvider) {\n yield {\n type: 'error',\n error: {\n code: 'runtime_required',\n message: 'Chat requires Agent Runtime; direct AI fallback is disabled',\n },\n };\n return;\n }\n\n // Build conversation history\n const messages = await this.buildConversationHistory(threadRef, context);\n \n // Create assistant message item\n const assistantItemId = this.store.generateItemId('assistant_message', thread, context);\n const assistantItem: AssistantMessageItem = {\n id: assistantItemId,\n thread_id: thread.id,\n type: 'assistant_message',\n content: [{ type: 'output_text', text: '' }],\n status: 'in_progress',\n created_at: nowTimestamp(),\n };\n\n await this.store.addThreadItem(threadRef, assistantItem, context);\n\n // Emit item added event\n yield {\n type: 'thread.item.added',\n item: assistantItem,\n } as ThreadItemAddedEvent;\n\n // Stream AI response\n let fullText = '';\n let partIndex = 0;\n\n try {\n for await (const chunk of this.aiProvider.streamResponse(messages, {\n model: inferenceOptions?.model,\n temperature: inferenceOptions?.temperature,\n maxTokens: inferenceOptions?.max_tokens,\n context, // Pass context for auth\n })) {\n fullText += chunk;\n\n // Emit text delta update\n yield {\n type: 'thread.item.updated',\n item_id: assistantItemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: partIndex,\n delta: chunk,\n },\n } as ThreadItemUpdatedEvent;\n }\n\n // Update item with full content\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n assistantItem.status = 'completed';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n // Emit item done event\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n } catch (error: any) {\n this.logger.error(`AI response generation failed: ${error}`);\n\n assistantItem.content = [{ type: 'output_text', text: 'Sorry, an error occurred while generating the response.' }];\n assistantItem.status = 'incomplete';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n\n yield {\n type: 'error',\n error: {\n code: 'generation_error',\n message: error.message || 'Failed to generate response',\n },\n };\n }\n\n // Auto-generate title if this is the first exchange (outside try/catch to not affect message saving)\n if (!thread.title) {\n try {\n const title = this.generateThreadTitle(userMessage, fullText);\n thread.title = title;\n thread.updated_at = nowTimestamp();\n await this.store.saveThread(thread, context);\n\n yield {\n type: 'thread.updated',\n thread,\n };\n } catch (titleError: any) {\n this.logger.warn(`Failed to auto-generate thread title: ${titleError.message}`);\n // Don't throw - title generation failure shouldn't affect the response\n }\n }\n }\n\n /**\n * Build conversation history from thread items\n */\n private async buildConversationHistory(\n thread: ThreadRef,\n context: TContext,\n ): Promise<Array<{ role: 'system' | 'user' | 'assistant'; content: string }>> {\n const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\n // Add system prompt\n messages.push({ role: 'system', content: this.systemPrompt });\n\n // Load thread items\n const items = await this.store.loadThreadItems(thread, undefined, 100, 'asc', context);\n\n for (const item of items.data) {\n if (item.type === 'user_message') {\n const text = extractUserMessageText(item.content);\n if (text) {\n messages.push({ role: 'user', content: text });\n }\n } else if (item.type === 'assistant_message') {\n const text = item.content\n .filter((c) => c.type === 'output_text')\n .map((c) => c.text)\n .join('\\n');\n if (text) {\n messages.push({ role: 'assistant', content: text });\n }\n }\n }\n\n return messages;\n }\n\n /**\n * Create a user message item\n */\n private async createUserMessage(\n threadRef: ThreadRef,\n content: UserMessageContent[],\n context: TContext,\n thread?: ThreadMetadata,\n ): Promise<UserMessageItem> {\n // Use provided thread or load it\n const threadMeta = thread || await this.store.loadThread(threadRef, context);\n const threadId = getThreadIdFromRef(threadRef);\n const itemId = this.store.generateItemId('user_message', threadMeta, context);\n\n return {\n id: itemId,\n thread_id: threadId,\n type: 'user_message',\n content,\n created_at: nowTimestamp(),\n };\n }\n\n /**\n * Generate a title for the thread based on the first exchange\n */\n private generateThreadTitle(userMessage: UserMessageItem, assistantResponse: string): string {\n const userText = extractUserMessageText(userMessage.content);\n // Use the first 50 chars of user message as title\n let title = userText.slice(0, 50);\n if (userText.length > 50) {\n title += '...';\n }\n return title || 'New Chat';\n }\n\n private projectRunStateEvent(event: RunStateEvent): ThreadStreamEvent {\n switch (event.type) {\n case 'item_added':\n return { type: 'thread.item.added', item: event.item } as ThreadItemAddedEvent;\n case 'item_updated':\n return {\n type: 'thread.item.updated',\n item_id: event.itemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: 0,\n delta: event.delta,\n },\n } as ThreadItemUpdatedEvent;\n case 'item_done':\n return { type: 'thread.item.done', item: event.item } as ThreadItemDoneEvent;\n case 'client_effect':\n return { type: 'client_effect', effect: event.effect };\n case 'error':\n return {\n type: 'error',\n error: {\n code: event.code,\n message: event.message,\n },\n };\n }\n }\n\n private normalizeThreadMetadata(\n metadata: Record<string, unknown> | undefined,\n chatId?: string,\n ): Record<string, unknown> | undefined {\n const normalized = { ...(metadata ?? {}) };\n normalized.chat_id = chatId\n ?? (typeof normalized.chat_id === 'string' && normalized.chat_id.length > 0\n ? normalized.chat_id\n : DEFAULT_THREAD_CHAT_ID);\n normalized.surface_id = typeof normalized.surface_id === 'string' && normalized.surface_id.length > 0\n ? normalized.surface_id\n : normalized.chat_id;\n return Object.keys(normalized).length > 0 ? normalized : undefined;\n }\n\n private resolveThreadWorkspace(workspace: WorkspaceUri | undefined): WorkspaceUri | undefined {\n return isWorkspaceUri(workspace) ? workspace : undefined;\n }\n\n private threadRefFromParams(params: { thread_id: string; chat_id?: string }): ThreadRef {\n return toThreadRef(params);\n }\n\n private threadRefFromThread(thread: ThreadMetadata): ThreadRef {\n return {\n thread_id: thread.id,\n chat_id: getChatIdFromThreadMetadata(thread),\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/api/chatkit/service.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * ChatKit Service\n * \n * Core service for handling ChatKit protocol requests.\n * Based on https://github.com/openai/chatkit-python/blob/main/chatkit/server.py\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport type { ChatKitStore, StoreContext } from './store';\nimport type {\n ChatKitReq,\n StreamingReq,\n NonStreamingReq,\n ThreadCreateParams,\n ThreadAddUserMessageParams,\n ThreadAddClientToolOutputParams,\n ThreadRetryAfterItemParams,\n ThreadCustomActionParams,\n ThreadGetByIdParams,\n ItemsListParams,\n ItemFeedbackParams,\n ThreadUpdateParams,\n ThreadDeleteParams,\n ThreadMetadata,\n ThreadRef,\n ThreadItem,\n UserMessageItem,\n AssistantMessageItem,\n ThreadStreamEvent,\n ThreadCreatedEvent,\n ThreadItemAddedEvent,\n ThreadItemDoneEvent,\n ThreadItemUpdatedEvent,\n Page,\n Thread,\n UserMessageContent,\n} from './types';\nimport {\n DEFAULT_THREAD_CHAT_ID,\n getChatIdFromThreadMetadata,\n getThreadIdFromRef,\n isStreamingReq,\n generateId,\n nowTimestamp,\n toThreadRef,\n extractUserMessageText,\n} from './types';\nimport { RunStateCenter, type RunStateEvent } from '../runs/RunStateCenter';\nimport type { RunExecutionBackend } from '../runs/RunExecutionBackend';\nimport { isWorkspaceRef } from '../workspace/types';\nimport type { WorkspaceRef } from '../workspace/types';\n\n/**\n * AI Provider interface for direct text generation in tests/dev harnesses.\n *\n * Product Chat requests go through RunStateCenter / Agent Runtime. This\n * provider is not a deployment compatibility path.\n */\nexport interface AiProvider {\n /**\n * Stream a response for the given messages\n * Returns an async iterator of text chunks\n */\n streamResponse(\n messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }>,\n options?: {\n model?: string;\n temperature?: number;\n maxTokens?: number;\n context?: unknown; // Allow passing context for auth\n },\n ): AsyncIterable<string>;\n}\n\n/**\n * ChatKit Service Options\n */\nexport interface ChatKitServiceOptions<TContext = StoreContext> {\n store: ChatKitStore<TContext>;\n aiProvider?: AiProvider;\n systemPrompt?: string;\n /**\n * Enable xpod Agent Runtime invocation (local-only feature).\n * When enabled, thread.metadata.runtime controls the runner/worktree.\n */\n enableAgentRuntime?: boolean;\n allowDirectAiFallback?: boolean;\n runExecutionBackend?: RunExecutionBackend;\n}\n\n/**\n * Streaming result wrapper\n */\nexport interface StreamingResult {\n type: 'streaming';\n stream(): AsyncIterable<Uint8Array>;\n}\n\n/**\n * Non-streaming result wrapper\n */\nexport interface NonStreamingResult {\n type: 'non_streaming';\n json: string;\n}\n\nexport type ChatKitResult = StreamingResult | NonStreamingResult;\n\n/**\n * ChatKit Service\n */\nexport class ChatKitService<TContext = StoreContext> {\n private readonly logger = getLoggerFor(this);\n private readonly store: ChatKitStore<TContext>;\n private readonly aiProvider?: AiProvider;\n private readonly systemPrompt: string;\n private readonly allowDirectAiFallback: boolean;\n private readonly runStateCenter: RunStateCenter<TContext>;\n\n public constructor(options: ChatKitServiceOptions<TContext>) {\n this.store = options.store;\n this.aiProvider = options.aiProvider;\n this.systemPrompt = options.systemPrompt ?? 'You are a helpful assistant.';\n this.allowDirectAiFallback = options.allowDirectAiFallback ?? false;\n this.runStateCenter = new RunStateCenter({\n store: this.store,\n enableAgentRuntime: options.enableAgentRuntime ?? true,\n executionBackend: options.runExecutionBackend,\n });\n }\n\n /**\n * Process a ChatKit request\n */\n public async process(requestBody: string | Buffer, context: TContext): Promise<ChatKitResult> {\n const requestStr = typeof requestBody === 'string' ? requestBody : requestBody.toString('utf-8');\n \n let request: ChatKitReq;\n try {\n request = JSON.parse(requestStr) as ChatKitReq;\n } catch (e) {\n throw new Error('Invalid JSON request body');\n }\n\n this.logger.debug(`Processing ChatKit request: ${request.type}`);\n\n if (isStreamingReq(request)) {\n return {\n type: 'streaming',\n stream: () => this.processStreamingAsBytes(request, context),\n };\n } else {\n const result = await this.processNonStreaming(request, context);\n return {\n type: 'non_streaming',\n json: JSON.stringify(result),\n };\n }\n }\n\n /**\n * Convert streaming events to SSE bytes\n */\n private async *processStreamingAsBytes(request: StreamingReq, context: TContext): AsyncIterable<Uint8Array> {\n const encoder = new TextEncoder();\n try {\n for await (const event of this.processStreaming(request, context)) {\n this.logger.info(`ChatKit streaming event (${request.type}): ${event.type}`);\n const data = JSON.stringify(event);\n yield encoder.encode(`data: ${data}\\n\\n`);\n }\n } catch (error: any) {\n this.logger.error(`ChatKit streaming request failed (${request.type}): ${error?.stack || error}`);\n const errorEvent: ThreadStreamEvent = {\n type: 'error',\n error: {\n code: 'internal_error',\n message: error.message || 'An error occurred',\n },\n };\n yield encoder.encode(`data: ${JSON.stringify(errorEvent)}\\n\\n`);\n }\n }\n\n /**\n * Process streaming requests\n */\n private async *processStreaming(request: StreamingReq, context: TContext): AsyncIterable<ThreadStreamEvent> {\n switch (request.type) {\n case 'threads.create':\n yield* this.handleThreadsCreate(request.params, context, request.metadata);\n break;\n case 'threads.add_user_message':\n yield* this.handleThreadsAddUserMessage(request.params, context);\n break;\n case 'threads.add_client_tool_output':\n yield* this.handleThreadsAddClientToolOutput(request.params, context);\n break;\n case 'threads.retry_after_item':\n yield* this.handleThreadsRetryAfterItem(request.params, context);\n break;\n case 'threads.custom_action':\n yield* this.handleThreadsCustomAction(request.params, context);\n break;\n }\n }\n\n /**\n * Process non-streaming requests\n */\n private async processNonStreaming(request: NonStreamingReq, context: TContext): Promise<unknown> {\n switch (request.type) {\n case 'threads.get_by_id':\n return this.handleThreadsGetById(request.params, context);\n case 'threads.list':\n return this.handleThreadsList(request.params, context);\n case 'items.list':\n return this.handleItemsList(request.params, context);\n case 'items.feedback':\n return this.handleItemsFeedback(request.params, context);\n case 'attachments.create':\n return this.handleAttachmentsCreate(request.params, context);\n case 'attachments.delete':\n return this.handleAttachmentsDelete(request.params, context);\n case 'threads.update':\n return this.handleThreadsUpdate(request.params, context);\n case 'threads.delete':\n return this.handleThreadsDelete(request.params, context);\n }\n }\n\n // =========================================================================\n // Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.create - Create a new thread and optionally respond to initial message\n */\n private async *handleThreadsCreate(\n params: ThreadCreateParams,\n context: TContext,\n metadata?: Record<string, unknown>,\n ): AsyncIterable<ThreadStreamEvent> {\n // Create new thread\n const threadId = this.store.generateThreadId(context);\n const now = nowTimestamp();\n \n const thread: ThreadMetadata = {\n id: threadId,\n status: { type: 'active' },\n workspace: this.resolveThreadWorkspace(params.workspace),\n created_at: now,\n updated_at: now,\n metadata: this.normalizeThreadMetadata(metadata, params.chat_id),\n };\n\n await this.store.saveThread(thread, context);\n\n // Emit thread created event\n yield {\n type: 'thread.created',\n thread,\n } as ThreadCreatedEvent;\n\n // If input provided, add user message and respond\n if (params.input) {\n const threadRef = this.threadRefFromThread(thread);\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context, thread);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options);\n }\n }\n\n /**\n * Handle threads.add_user_message - Add a user message and respond\n */\n private async *handleThreadsAddUserMessage(\n params: ThreadAddUserMessageParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n\n // Create and save user message\n const userMessage = await this.createUserMessage(threadRef, params.input.content, context);\n await this.store.addThreadItem(threadRef, userMessage, context);\n\n yield {\n type: 'thread.item.added',\n item: userMessage,\n } as ThreadItemAddedEvent;\n\n yield {\n type: 'thread.item.done',\n item: userMessage,\n } as ThreadItemDoneEvent;\n\n // Generate response (AI provider or Agent Runtime)\n yield* this.respond(thread, userMessage, context, params.input.inference_options, threadRef);\n }\n\n /**\n * Handle threads.add_client_tool_output - Handle tool output (not fully implemented)\n */\n private async *handleThreadsAddClientToolOutput(\n params: ThreadAddClientToolOutputParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n for await (\n const event of this.runStateCenter.completeClientToolOutput({\n threadRef,\n itemId: params.item_id,\n output: params.output,\n context,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n }\n\n /**\n * Handle threads.retry_after_item - Retry generation after a specific item\n */\n private async *handleThreadsRetryAfterItem(\n params: ThreadRetryAfterItemParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n // Load all items and find the last user message before the retry point\n const items = await this.store.loadThreadItems(threadRef, undefined, 1000, 'asc', context);\n \n let lastUserMessage: UserMessageItem | undefined;\n for (const item of items.data) {\n if (item.id === params.item_id) {\n break;\n }\n if (item.type === 'user_message') {\n lastUserMessage = item;\n }\n }\n\n if (lastUserMessage) {\n yield* this.respond(thread, lastUserMessage, context, undefined, threadRef);\n }\n }\n\n /**\n * Handle threads.custom_action - Handle custom widget actions (not fully implemented)\n */\n private async *handleThreadsCustomAction(\n params: ThreadCustomActionParams,\n context: TContext,\n ): AsyncIterable<ThreadStreamEvent> {\n this.logger.info(`Custom action: ${params.action} on item ${params.item_id}`);\n // Custom actions can be implemented based on specific needs\n }\n\n // =========================================================================\n // Non-Streaming Request Handlers\n // =========================================================================\n\n /**\n * Handle threads.get_by_id\n */\n private async handleThreadsGetById(\n params: ThreadGetByIdParams,\n context: TContext,\n ): Promise<Thread> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n const items = await this.store.loadThreadItems(threadRef, undefined, 50, 'asc', context);\n \n return {\n ...thread,\n items,\n };\n }\n\n /**\n * Handle threads.list\n */\n private async handleThreadsList(\n params: { limit?: number; order?: string; after?: string } | undefined,\n context: TContext,\n ): Promise<Page<ThreadMetadata>> {\n return this.store.loadThreads(\n params?.limit ?? 20,\n params?.after,\n params?.order ?? 'desc',\n context,\n );\n }\n\n /**\n * Handle items.list\n */\n private async handleItemsList(\n params: ItemsListParams,\n context: TContext,\n ): Promise<Page<ThreadItem>> {\n return this.store.loadThreadItems(\n this.threadRefFromParams(params),\n params.after,\n params.limit ?? 50,\n params.order ?? 'asc',\n context,\n );\n }\n\n /**\n * Handle items.feedback (acknowledge only for now)\n */\n private async handleItemsFeedback(\n params: ItemFeedbackParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n this.logger.info(`Feedback received: ${params.feedback} for items ${params.item_ids.join(', ')}`);\n // Store feedback in metadata or separate table if needed\n return { success: true };\n }\n\n /**\n * Handle attachments.create\n */\n private async handleAttachmentsCreate(\n params: { name: string; size: number; mime_type: string },\n context: TContext,\n ): Promise<{ attachment_id: string; upload_url?: string }> {\n const attachmentId = generateId('attach');\n // For now, return a placeholder - actual upload handling would need S3/MinIO integration\n return {\n attachment_id: attachmentId,\n // upload_url would be provided for actual file upload\n };\n }\n\n /**\n * Handle attachments.delete\n */\n private async handleAttachmentsDelete(\n params: { attachment_id: string },\n context: TContext,\n ): Promise<{ success: boolean }> {\n if (this.store.deleteAttachment) {\n await this.store.deleteAttachment(params.attachment_id, context);\n }\n return { success: true };\n }\n\n /**\n * Handle threads.update\n */\n private async handleThreadsUpdate(\n params: ThreadUpdateParams,\n context: TContext,\n ): Promise<ThreadMetadata> {\n const threadRef = this.threadRefFromParams(params);\n const thread = await this.store.loadThread(threadRef, context);\n \n if (params.title !== undefined) {\n thread.title = params.title;\n }\n if (params.workspace !== undefined) {\n thread.workspace = params.workspace || undefined;\n }\n thread.updated_at = nowTimestamp();\n\n await this.store.saveThread(thread, context);\n return thread;\n }\n\n /**\n * Handle threads.delete\n */\n private async handleThreadsDelete(\n params: ThreadDeleteParams,\n context: TContext,\n ): Promise<{ success: boolean }> {\n await this.store.deleteThread(this.threadRefFromParams(params), context);\n return { success: true };\n }\n\n // =========================================================================\n // Core Response Generation\n // =========================================================================\n\n /**\n * Generate AI response for a user message\n * This is the main response generation logic\n */\n private async *respond(\n thread: ThreadMetadata,\n userMessage: UserMessageItem,\n context: TContext,\n inferenceOptions?: any,\n threadRef: ThreadRef = this.threadRefFromThread(thread),\n ): AsyncIterable<ThreadStreamEvent> {\n const runtimeConfig = this.runStateCenter.getAgentRuntimeConfig(thread, context)\n ?? this.runStateCenter.getDefaultAgentRuntimeConfig(context);\n if (runtimeConfig) {\n for await (\n const event of this.runStateCenter.startAgentRun({\n thread,\n userMessage,\n context,\n runtimeConfig,\n })\n ) {\n yield this.projectRunStateEvent(event);\n }\n return;\n }\n\n if (!this.allowDirectAiFallback || !this.aiProvider) {\n yield {\n type: 'error',\n error: {\n code: 'runtime_required',\n message: 'Chat requires Agent Runtime; direct AI fallback is disabled',\n },\n };\n return;\n }\n\n // Build conversation history\n const messages = await this.buildConversationHistory(threadRef, context);\n \n // Create assistant message item\n const assistantItemId = this.store.generateItemId('assistant_message', thread, context);\n const assistantItem: AssistantMessageItem = {\n id: assistantItemId,\n thread_id: thread.id,\n type: 'assistant_message',\n content: [{ type: 'output_text', text: '' }],\n status: 'in_progress',\n created_at: nowTimestamp(),\n };\n\n await this.store.addThreadItem(threadRef, assistantItem, context);\n\n // Emit item added event\n yield {\n type: 'thread.item.added',\n item: assistantItem,\n } as ThreadItemAddedEvent;\n\n // Stream AI response\n let fullText = '';\n let partIndex = 0;\n\n try {\n for await (const chunk of this.aiProvider.streamResponse(messages, {\n model: inferenceOptions?.model,\n temperature: inferenceOptions?.temperature,\n maxTokens: inferenceOptions?.max_tokens,\n context, // Pass context for auth\n })) {\n fullText += chunk;\n\n // Emit text delta update\n yield {\n type: 'thread.item.updated',\n item_id: assistantItemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: partIndex,\n delta: chunk,\n },\n } as ThreadItemUpdatedEvent;\n }\n\n // Update item with full content\n assistantItem.content = [{ type: 'output_text', text: fullText }];\n assistantItem.status = 'completed';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n // Emit item done event\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n } catch (error: any) {\n this.logger.error(`AI response generation failed: ${error}`);\n\n assistantItem.content = [{ type: 'output_text', text: 'Sorry, an error occurred while generating the response.' }];\n assistantItem.status = 'incomplete';\n await this.store.saveItem(threadRef, assistantItem, context);\n\n yield {\n type: 'thread.item.done',\n item: assistantItem,\n } as ThreadItemDoneEvent;\n\n yield {\n type: 'error',\n error: {\n code: 'generation_error',\n message: error.message || 'Failed to generate response',\n },\n };\n }\n\n // Auto-generate title if this is the first exchange (outside try/catch to not affect message saving)\n if (!thread.title) {\n try {\n const title = this.generateThreadTitle(userMessage, fullText);\n thread.title = title;\n thread.updated_at = nowTimestamp();\n await this.store.saveThread(thread, context);\n\n yield {\n type: 'thread.updated',\n thread,\n };\n } catch (titleError: any) {\n this.logger.warn(`Failed to auto-generate thread title: ${titleError.message}`);\n // Don't throw - title generation failure shouldn't affect the response\n }\n }\n }\n\n /**\n * Build conversation history from thread items\n */\n private async buildConversationHistory(\n thread: ThreadRef,\n context: TContext,\n ): Promise<Array<{ role: 'system' | 'user' | 'assistant'; content: string }>> {\n const messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\n // Add system prompt\n messages.push({ role: 'system', content: this.systemPrompt });\n\n // Load thread items\n const items = await this.store.loadThreadItems(thread, undefined, 100, 'asc', context);\n\n for (const item of items.data) {\n if (item.type === 'user_message') {\n const text = extractUserMessageText(item.content);\n if (text) {\n messages.push({ role: 'user', content: text });\n }\n } else if (item.type === 'assistant_message') {\n const text = item.content\n .filter((c) => c.type === 'output_text')\n .map((c) => c.text)\n .join('\\n');\n if (text) {\n messages.push({ role: 'assistant', content: text });\n }\n }\n }\n\n return messages;\n }\n\n /**\n * Create a user message item\n */\n private async createUserMessage(\n threadRef: ThreadRef,\n content: UserMessageContent[],\n context: TContext,\n thread?: ThreadMetadata,\n ): Promise<UserMessageItem> {\n // Use provided thread or load it\n const threadMeta = thread || await this.store.loadThread(threadRef, context);\n const threadId = getThreadIdFromRef(threadRef);\n const itemId = this.store.generateItemId('user_message', threadMeta, context);\n\n return {\n id: itemId,\n thread_id: threadId,\n type: 'user_message',\n content,\n created_at: nowTimestamp(),\n };\n }\n\n /**\n * Generate a title for the thread based on the first exchange\n */\n private generateThreadTitle(userMessage: UserMessageItem, assistantResponse: string): string {\n const userText = extractUserMessageText(userMessage.content);\n // Use the first 50 chars of user message as title\n let title = userText.slice(0, 50);\n if (userText.length > 50) {\n title += '...';\n }\n return title || 'New Chat';\n }\n\n private projectRunStateEvent(event: RunStateEvent): ThreadStreamEvent {\n switch (event.type) {\n case 'item_added':\n return { type: 'thread.item.added', item: event.item } as ThreadItemAddedEvent;\n case 'item_updated':\n return {\n type: 'thread.item.updated',\n item_id: event.itemId,\n update: {\n type: 'assistant_message.content_part.text_delta',\n part_index: 0,\n delta: event.delta,\n },\n } as ThreadItemUpdatedEvent;\n case 'item_done':\n return { type: 'thread.item.done', item: event.item } as ThreadItemDoneEvent;\n case 'client_effect':\n return { type: 'client_effect', effect: event.effect };\n case 'error':\n return {\n type: 'error',\n error: {\n code: event.code,\n message: event.message,\n },\n };\n }\n }\n\n private normalizeThreadMetadata(\n metadata: Record<string, unknown> | undefined,\n chatId?: string,\n ): Record<string, unknown> | undefined {\n const normalized = { ...(metadata ?? {}) };\n normalized.chat_id = chatId\n ?? (typeof normalized.chat_id === 'string' && normalized.chat_id.length > 0\n ? normalized.chat_id\n : DEFAULT_THREAD_CHAT_ID);\n normalized.surface_id = typeof normalized.surface_id === 'string' && normalized.surface_id.length > 0\n ? normalized.surface_id\n : normalized.chat_id;\n return Object.keys(normalized).length > 0 ? normalized : undefined;\n }\n\n private resolveThreadWorkspace(workspace: WorkspaceRef | undefined): WorkspaceRef | undefined {\n return isWorkspaceRef(workspace) ? workspace : undefined;\n }\n\n private threadRefFromParams(params: { thread_id: string; chat_id?: string }): ThreadRef {\n return toThreadRef(params);\n }\n\n private threadRefFromThread(thread: ThreadMetadata): ThreadRef {\n return {\n thread_id: thread.id,\n chat_id: getChatIdFromThreadMetadata(thread),\n };\n }\n}\n"]}
|
|
@@ -4,7 +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 {
|
|
7
|
+
import type { WorkspaceRef } from '../workspace/types';
|
|
8
8
|
export interface Page<T> {
|
|
9
9
|
data: T[];
|
|
10
10
|
has_more: boolean;
|
|
@@ -27,10 +27,10 @@ export interface ThreadMetadata {
|
|
|
27
27
|
title?: string;
|
|
28
28
|
status: ThreadStatus;
|
|
29
29
|
/**
|
|
30
|
-
* Workspace Container
|
|
31
|
-
* The Solid schema stores this as
|
|
30
|
+
* Workspace Container selected for this thread.
|
|
31
|
+
* The Solid schema stores this as the `workspace` RDF relation.
|
|
32
32
|
*/
|
|
33
|
-
workspace?:
|
|
33
|
+
workspace?: WorkspaceRef;
|
|
34
34
|
created_at: number;
|
|
35
35
|
updated_at: number;
|
|
36
36
|
metadata?: Record<string, unknown>;
|
|
@@ -39,17 +39,17 @@ export interface Thread extends ThreadMetadata {
|
|
|
39
39
|
items: Page<ThreadItem>;
|
|
40
40
|
}
|
|
41
41
|
export declare const DEFAULT_THREAD_CHAT_ID = "default";
|
|
42
|
-
export type
|
|
42
|
+
export type HttpResource = `http://${string}` | `https://${string}`;
|
|
43
43
|
export interface ThreadSurfaceRef {
|
|
44
44
|
thread_id: string;
|
|
45
45
|
chat_id: string;
|
|
46
46
|
}
|
|
47
|
-
export interface
|
|
48
|
-
thread_id:
|
|
47
|
+
export interface ThreadResourceRef {
|
|
48
|
+
thread_id: HttpResource;
|
|
49
49
|
chat_id?: never;
|
|
50
50
|
}
|
|
51
|
-
export type ThreadRef = ThreadSurfaceRef |
|
|
52
|
-
export declare function
|
|
51
|
+
export type ThreadRef = ThreadSurfaceRef | ThreadResourceRef;
|
|
52
|
+
export declare function isHttpResource(value: string): value is HttpResource;
|
|
53
53
|
export declare function isBaseRelativeThreadResourceId(value: string): boolean;
|
|
54
54
|
export declare function toThreadRef(params: {
|
|
55
55
|
thread_id: string;
|
|
@@ -237,7 +237,7 @@ export interface ThreadsGetByIdReq extends BaseReq {
|
|
|
237
237
|
}
|
|
238
238
|
export interface ThreadCreateParams {
|
|
239
239
|
chat_id?: string;
|
|
240
|
-
workspace?:
|
|
240
|
+
workspace?: WorkspaceRef;
|
|
241
241
|
input?: UserMessageInput;
|
|
242
242
|
}
|
|
243
243
|
export interface UserMessageInput {
|
|
@@ -291,7 +291,7 @@ export interface ThreadsRetryAfterItemReq extends BaseReq {
|
|
|
291
291
|
}
|
|
292
292
|
export type ThreadUpdateParams = ThreadRef & {
|
|
293
293
|
title?: string;
|
|
294
|
-
workspace?:
|
|
294
|
+
workspace?: WorkspaceRef;
|
|
295
295
|
};
|
|
296
296
|
export interface ThreadsUpdateReq extends BaseReq {
|
|
297
297
|
type: 'threads.update';
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.DEFAULT_THREAD_CHAT_ID = void 0;
|
|
10
|
-
exports.
|
|
10
|
+
exports.isHttpResource = isHttpResource;
|
|
11
11
|
exports.isBaseRelativeThreadResourceId = isBaseRelativeThreadResourceId;
|
|
12
12
|
exports.toThreadRef = toThreadRef;
|
|
13
13
|
exports.getThreadIdFromRef = getThreadIdFromRef;
|
|
@@ -19,14 +19,14 @@ exports.nowTimestamp = nowTimestamp;
|
|
|
19
19
|
exports.extractUserMessageText = extractUserMessageText;
|
|
20
20
|
exports.extractAssistantMessageText = extractAssistantMessageText;
|
|
21
21
|
exports.DEFAULT_THREAD_CHAT_ID = 'default';
|
|
22
|
-
function
|
|
22
|
+
function isHttpResource(value) {
|
|
23
23
|
return value.startsWith('http://') || value.startsWith('https://');
|
|
24
24
|
}
|
|
25
25
|
function isBaseRelativeThreadResourceId(value) {
|
|
26
26
|
return /^(chat|task)\/[^/]+\/index\.ttl#[^#]+$/.test(value);
|
|
27
27
|
}
|
|
28
28
|
function toThreadRef(params) {
|
|
29
|
-
if (
|
|
29
|
+
if (isHttpResource(params.thread_id)) {
|
|
30
30
|
return { thread_id: params.thread_id };
|
|
31
31
|
}
|
|
32
32
|
if (isBaseRelativeThreadResourceId(params.thread_id)) {
|