kanban 0.1.39 → 0.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cline-sdk/cline-mcp-runtime-service.d.ts.map +1 -1
- package/dist/cline-sdk/cline-mcp-runtime-service.js +35 -10
- package/dist/cline-sdk/cline-mcp-runtime-service.js.map +1 -1
- package/dist/cline-sdk/cline-session-runtime.d.ts +20 -2
- package/dist/cline-sdk/cline-session-runtime.d.ts.map +1 -1
- package/dist/cline-sdk/cline-session-runtime.js +68 -10
- package/dist/cline-sdk/cline-session-runtime.js.map +1 -1
- package/dist/cline-sdk/cline-session-state.d.ts +1 -0
- package/dist/cline-sdk/cline-session-state.d.ts.map +1 -1
- package/dist/cline-sdk/cline-session-state.js +12 -3
- package/dist/cline-sdk/cline-session-state.js.map +1 -1
- package/dist/cline-sdk/cline-task-session-service.d.ts +1 -0
- package/dist/cline-sdk/cline-task-session-service.d.ts.map +1 -1
- package/dist/cline-sdk/cline-task-session-service.js +76 -23
- package/dist/cline-sdk/cline-task-session-service.js.map +1 -1
- package/dist/cline-sdk/sdk-provider-boundary.d.ts.map +1 -1
- package/dist/cline-sdk/sdk-provider-boundary.js +5 -8
- package/dist/cline-sdk/sdk-provider-boundary.js.map +1 -1
- package/dist/core/api-contract.d.ts +72 -0
- package/dist/core/api-contract.d.ts.map +1 -1
- package/dist/core/api-contract.js +3 -2
- package/dist/core/api-contract.js.map +1 -1
- package/dist/prompts/append-system-prompt.d.ts.map +1 -1
- package/dist/prompts/append-system-prompt.js +4 -2
- package/dist/prompts/append-system-prompt.js.map +1 -1
- package/dist/server/browser.d.ts +1 -4
- package/dist/server/browser.d.ts.map +1 -1
- package/dist/server/browser.js +13 -53
- package/dist/server/browser.js.map +1 -1
- package/dist/trpc/app-router.d.ts +10 -0
- package/dist/trpc/app-router.d.ts.map +1 -1
- package/dist/trpc/runtime-api.js +3 -3
- package/dist/trpc/runtime-api.js.map +1 -1
- package/dist/web-ui/assets/{index-WG8Dagzd.css → index-CuBw4lTr.css} +30 -0
- package/dist/web-ui/assets/{index-DG-IZT6_.js → index-OpsLqYwc.js} +8622 -8617
- package/dist/web-ui/assets/{index-DG-IZT6_.js.map → index-OpsLqYwc.js.map} +1 -1
- package/dist/web-ui/index.html +2 -2
- package/dist/workspace/git-utils.d.ts.map +1 -1
- package/dist/workspace/git-utils.js +17 -4
- package/dist/workspace/git-utils.js.map +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-session-runtime.js","sources":["../../src/cline-sdk/cline-session-runtime.ts"],"sourceRoot":"","sourcesContent":["// Owns the live SDK session host plus taskId to sessionId bindings.\n// This is the runtime-facing layer for starting, looking up, resuming, and\n// stopping native Cline sessions without exposing SDK details upstream.\nimport type { RuntimeTaskImage, RuntimeTaskSessionMode } from \"../core/api-contract.js\";\nimport {\n\tcreateClineMcpRuntimeService,\n\ttype ClineMcpRuntimeService,\n\ttype ClineMcpToolBundle,\n} from \"./cline-mcp-runtime-service.js\";\nimport { extractClineSessionId } from \"./cline-event-adapter.js\";\nimport { createSessionId } from \"./cline-session-state.js\";\nimport {\n\ttype ClineSdkPersistedMessage,\n\ttype ClineSdkSessionHost,\n\ttype ClineSdkSessionRecord,\n\ttype ClineSdkUserInstructionWatcher,\n\tcreateClineSdkSessionHost,\n} from \"./sdk-runtime-boundary.js\";\n\nconst DEFAULT_CLINE_MAX_CONSECUTIVE_MISTAKES = 3;\n\nfunction toSdkUserImages(images?: RuntimeTaskImage[]): string[] | undefined {\n\tif (!images || images.length === 0) {\n\t\treturn undefined;\n\t}\n\tconst userImages = images\n\t\t.map((image) => {\n\t\t\tconst mimeType = image.mimeType.trim();\n\t\t\tconst data = image.data.trim();\n\t\t\tif (!mimeType || !data) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn `data:${mimeType};base64,${data}`;\n\t\t})\n\t\t.filter((image): image is string => image !== null);\n\treturn userImages.length > 0 ? userImages : undefined;\n}\n\nexport interface StartClineSessionRuntimeRequest {\n\ttaskId: string;\n\tcwd: string;\n\tprompt: string;\n\timages?: RuntimeTaskImage[];\n\tproviderId: string;\n\tmodelId: string;\n\tmode?: RuntimeTaskSessionMode;\n\tapiKey?: string | null;\n\tbaseUrl?: string | null;\n\tsystemPrompt: string;\n\tuserInstructionWatcher?: ClineSdkUserInstructionWatcher;\n\trequestToolApproval?: (request: unknown) => Promise<unknown>;\n}\n\nexport interface StartClineSessionRuntimeResult {\n\tsessionId: string;\n\tresult: unknown;\n\twarnings?: string[];\n}\n\nexport interface ClinePersistedTaskSessionSnapshot {\n\trecord: ClineSdkSessionRecord;\n\tmessages: ClineSdkPersistedMessage[];\n}\n\nexport interface ClineSessionRuntime {\n\tstartTaskSession(request: StartClineSessionRuntimeRequest): Promise<StartClineSessionRuntimeResult>;\n\tsendTaskSessionInput(taskId: string, prompt: string, mode?: RuntimeTaskSessionMode, images?: RuntimeTaskImage[]): Promise<unknown>;\n\tresumeTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null>;\n\tstopTaskSession(taskId: string): Promise<void>;\n\tabortTaskSession(taskId: string): Promise<void>;\n\tgetTaskSessionId(taskId: string): string | null;\n\treadPersistedTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null>;\n\tdispose(): Promise<void>;\n}\n\nexport interface CreateInMemoryClineSessionRuntimeOptions {\n\tonTaskEvent?: (taskId: string, event: unknown) => void;\n\tcreateSessionHost?: () => Promise<ClineSdkSessionHost>;\n\tcreateMcpRuntimeService?: () => ClineMcpRuntimeService;\n}\n\n// Own the SDK session host plus the taskId <-> sessionId bindings so higher layers can stay task-oriented.\nexport class InMemoryClineSessionRuntime implements ClineSessionRuntime {\n\tprivate readonly onTaskEvent: ((taskId: string, event: unknown) => void) | null;\n\tprivate readonly createSessionHost: () => Promise<ClineSdkSessionHost>;\n\tprivate readonly clineMcpRuntimeService: ClineMcpRuntimeService;\n\tprivate readonly sessionIdByTaskId = new Map<string, string>();\n\tprivate readonly taskIdBySessionId = new Map<string, string>();\n\tprivate readonly mcpToolBundleByTaskId = new Map<string, ClineMcpToolBundle>();\n\tprivate sessionHostPromise: Promise<ClineSdkSessionHost> | null = null;\n\n\tconstructor(options: CreateInMemoryClineSessionRuntimeOptions = {}) {\n\t\tthis.onTaskEvent = options.onTaskEvent ?? null;\n\t\tthis.createSessionHost = options.createSessionHost ?? createClineSdkSessionHost;\n\t\tconst createMcpRuntimeService = options.createMcpRuntimeService ?? createClineMcpRuntimeService;\n\t\tthis.clineMcpRuntimeService = createMcpRuntimeService();\n\t}\n\n\tasync startTaskSession(request: StartClineSessionRuntimeRequest): Promise<StartClineSessionRuntimeResult> {\n\t\tconst requestedSessionId = createSessionId(request.taskId);\n\t\tthis.bindTaskSession(request.taskId, requestedSessionId);\n\n\t\tlet mcpToolBundle: ClineMcpToolBundle | null = null;\n\t\tlet startWarnings: string[] = [];\n\t\ttry {\n\t\t\tmcpToolBundle = await this.clineMcpRuntimeService.createToolBundle();\n\t\t\tstartWarnings = mcpToolBundle.warnings;\n\t\t} catch (error) {\n\t\t\tmcpToolBundle = null;\n\t\t\tconst message = error instanceof Error ? error.message.trim() : String(error);\n\t\t\tif (message.length > 0) {\n\t\t\t\tstartWarnings = [`Failed to load MCP tools: ${message}`];\n\t\t\t}\n\t\t}\n\t\tthis.replaceTaskMcpToolBundle(request.taskId, mcpToolBundle);\n\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tlet startResult: StartClineSessionRuntimeResult;\n\t\ttry {\n\t\t\tstartResult = await sessionHost.start({\n\t\t\t\tconfig: {\n\t\t\t\t\tsessionId: requestedSessionId,\n\t\t\t\t\tproviderId: request.providerId,\n\t\t\t\t\tmodelId: request.modelId,\n\t\t\t\t\tapiKey: request.apiKey?.trim() || undefined,\n\t\t\t\t\tbaseUrl: request.baseUrl?.trim() || undefined,\n\t\t\t\t\tcwd: request.cwd,\n\t\t\t\t\tmode: request.mode ?? \"act\",\n\t\t\t\t\tenableTools: true,\n\t\t\t\t\tenableSpawnAgent: false,\n\t\t\t\t\tenableAgentTeams: false,\n\t\t\t\t\tmaxConsecutiveMistakes: DEFAULT_CLINE_MAX_CONSECUTIVE_MISTAKES,\n\t\t\t\t\tsystemPrompt: request.systemPrompt,\n\t\t\t\t\t...(mcpToolBundle && mcpToolBundle.tools.length > 0 ? { extraTools: mcpToolBundle.tools } : {}),\n\t\t\t\t},\n\t\t\t\tprompt: request.prompt,\n\t\t\t\tinteractive: true,\n\t\t\t\tuserImages: toSdkUserImages(request.images),\n\t\t\t\tuserInstructionWatcher: request.userInstructionWatcher,\n\t\t\t\trequestToolApproval: request.requestToolApproval,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tawait this.releaseTaskMcpToolBundle(request.taskId);\n\t\t\tthrow error;\n\t\t}\n\n\t\tthis.bindTaskSession(request.taskId, startResult.sessionId);\n\t\tif (startResult.sessionId !== requestedSessionId) {\n\t\t\tthis.taskIdBySessionId.delete(requestedSessionId);\n\t\t}\n\n\t\treturn {\n\t\t\t...startResult,\n\t\t\t...(startWarnings.length > 0 ? { warnings: startWarnings } : {}),\n\t\t};\n\t}\n\n\tasync sendTaskSessionInput(\n\t\ttaskId: string,\n\t\tprompt: string,\n\t\tmode?: RuntimeTaskSessionMode,\n\t\timages?: RuntimeTaskImage[],\n\t): Promise<unknown> {\n\t\tconst sessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!sessionId) {\n\t\t\tthrow new Error(`No active Cline session for task ${taskId}.`);\n\t\t}\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tif (mode) {\n\t\t\tthis.updateActiveSessionMode(sessionHost, sessionId, mode);\n\t\t}\n\t\treturn await sessionHost.send({\n\t\t\tsessionId,\n\t\t\tprompt,\n\t\t\tuserImages: toSdkUserImages(images),\n\t\t});\n\t}\n\n\tasync resumeTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null> {\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tconst record = await this.findPersistedTaskSessionRecord(taskId, sessionHost);\n\t\tif (!record) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.bindTaskSession(taskId, record.sessionId);\n\t\tconst messages = await sessionHost.readMessages(record.sessionId);\n\t\treturn {\n\t\t\trecord,\n\t\t\tmessages,\n\t\t};\n\t}\n\n\tasync stopTaskSession(taskId: string): Promise<void> {\n\t\tconst sessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!sessionId) {\n\t\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t\t\treturn;\n\t\t}\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tawait sessionHost.stop(sessionId);\n\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t}\n\n\tasync abortTaskSession(taskId: string): Promise<void> {\n\t\tconst sessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!sessionId) {\n\t\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t\t\treturn;\n\t\t}\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tawait sessionHost.abort(sessionId);\n\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t}\n\n\tgetTaskSessionId(taskId: string): string | null {\n\t\treturn this.sessionIdByTaskId.get(taskId) ?? null;\n\t}\n\n\tasync readPersistedTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null> {\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tconst record = await this.findPersistedTaskSessionRecord(taskId, sessionHost);\n\t\tif (!record) {\n\t\t\treturn null;\n\t\t}\n\t\tconst messages = await sessionHost.readMessages(record.sessionId);\n\t\treturn {\n\t\t\trecord,\n\t\t\tmessages,\n\t\t};\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tconst hostPromise = this.sessionHostPromise;\n\t\tthis.sessionHostPromise = null;\n\t\tif (hostPromise) {\n\t\t\ttry {\n\t\t\t\tconst host = await hostPromise;\n\t\t\t\tawait host.dispose(\"kanban-runtime-dispose\");\n\t\t\t} catch {\n\t\t\t\t// Ignore host disposal errors.\n\t\t\t}\n\t\t}\n\t\tthis.sessionIdByTaskId.clear();\n\t\tthis.taskIdBySessionId.clear();\n\n\t\tconst mcpBundles = [...this.mcpToolBundleByTaskId.values()];\n\t\tthis.mcpToolBundleByTaskId.clear();\n\t\tawait Promise.all(\n\t\t\tmcpBundles.map(async (bundle) => {\n\t\t\t\tawait bundle.dispose().catch(() => undefined);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate replaceTaskMcpToolBundle(taskId: string, bundle: ClineMcpToolBundle | null): void {\n\t\tconst current = this.mcpToolBundleByTaskId.get(taskId);\n\t\tif (current) {\n\t\t\tvoid current.dispose().catch(() => undefined);\n\t\t\tthis.mcpToolBundleByTaskId.delete(taskId);\n\t\t}\n\t\tif (bundle) {\n\t\t\tthis.mcpToolBundleByTaskId.set(taskId, bundle);\n\t\t}\n\t}\n\n\tprivate async releaseTaskMcpToolBundle(taskId: string): Promise<void> {\n\t\tconst current = this.mcpToolBundleByTaskId.get(taskId);\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\t\tthis.mcpToolBundleByTaskId.delete(taskId);\n\t\tawait current.dispose().catch(() => undefined);\n\t}\n\n\tprivate bindTaskSession(taskId: string, sessionId: string): void {\n\t\tconst previousSessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (previousSessionId) {\n\t\t\tthis.taskIdBySessionId.delete(previousSessionId);\n\t\t}\n\t\tthis.sessionIdByTaskId.set(taskId, sessionId);\n\t\tthis.taskIdBySessionId.set(sessionId, taskId);\n\t}\n\n\tprivate async findPersistedTaskSessionRecord(\n\t\ttaskId: string,\n\t\tsessionHost: ClineSdkSessionHost,\n\t): Promise<ClineSdkSessionRecord | null> {\n\t\tconst activeSessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (activeSessionId) {\n\t\t\tconst activeRecord = (await sessionHost.get(activeSessionId)) ?? null;\n\t\t\tif (activeRecord) {\n\t\t\t\treturn activeRecord;\n\t\t\t}\n\t\t}\n\n\t\tconst sessionIdPrefix = `${taskId}-`;\n\t\tconst records: ClineSdkSessionRecord[] = await sessionHost.list();\n\t\tconst matchingRecord = records\n\t\t\t.filter((record: ClineSdkSessionRecord) => record.sessionId.startsWith(sessionIdPrefix))\n\t\t\t.sort((left: ClineSdkSessionRecord, right: ClineSdkSessionRecord) => {\n\t\t\t\tconst leftTimestamp = Date.parse(left.updatedAt || left.startedAt);\n\t\t\t\tconst rightTimestamp = Date.parse(right.updatedAt || right.startedAt);\n\t\t\t\treturn rightTimestamp - leftTimestamp;\n\t\t\t})[0];\n\t\treturn matchingRecord ?? null;\n\t}\n\n\tprivate async ensureSessionHost(): Promise<ClineSdkSessionHost> {\n\t\tif (!this.sessionHostPromise) {\n\t\t\tthis.sessionHostPromise = this.createSessionHost().then((sessionHost: ClineSdkSessionHost) => {\n\t\t\t\tsessionHost.subscribe((event: unknown) => {\n\t\t\t\t\tthis.handleSessionEvent(event);\n\t\t\t\t});\n\t\t\t\treturn sessionHost;\n\t\t\t});\n\t\t}\n\t\treturn await this.sessionHostPromise;\n\t}\n\n\tprivate updateActiveSessionMode(\n\t\tsessionHost: ClineSdkSessionHost,\n\t\tsessionId: string,\n\t\tmode: RuntimeTaskSessionMode,\n\t): void {\n\t\tconst hostWithSessions = sessionHost as unknown as {\n\t\t\tsessions?: Map<string, { config?: { mode?: RuntimeTaskSessionMode } }>;\n\t\t};\n\t\tconst activeSession = hostWithSessions.sessions?.get(sessionId);\n\t\tif (activeSession?.config) {\n\t\t\tactiveSession.config.mode = mode;\n\t\t}\n\t}\n\n\tprivate handleSessionEvent(event: unknown): void {\n\t\tif (!this.onTaskEvent) {\n\t\t\treturn;\n\t\t}\n\t\tconst sessionId = extractClineSessionId(event);\n\t\tif (!sessionId) {\n\t\t\treturn;\n\t\t}\n\t\tconst taskId = this.taskIdBySessionId.get(sessionId);\n\t\tif (!taskId) {\n\t\t\treturn;\n\t\t}\n\t\tthis.onTaskEvent(taskId, event);\n\t}\n}\n\nexport function createInMemoryClineSessionRuntime(\n\toptions: CreateInMemoryClineSessionRuntimeOptions = {},\n): ClineSessionRuntime {\n\treturn new InMemoryClineSessionRuntime(options);\n}\n"],"names":[],"mappings":"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","debugId":"273a8d56-0caf-5898-a5fe-60e95ff9dfbc"}
|
|
1
|
+
{"version":3,"file":"cline-session-runtime.js","sources":["../../src/cline-sdk/cline-session-runtime.ts"],"sourceRoot":"","sourcesContent":["// Owns the live SDK session host plus taskId to sessionId bindings.\n// This is the runtime-facing layer for starting, looking up, resuming, and\n// stopping native Cline sessions without exposing SDK details upstream.\nimport type { RuntimeTaskImage, RuntimeTaskSessionMode } from \"../core/api-contract.js\";\nimport {\n\tcreateClineMcpRuntimeService,\n\ttype ClineMcpRuntimeService,\n\ttype ClineMcpToolBundle,\n} from \"./cline-mcp-runtime-service.js\";\nimport { extractClineSessionId } from \"./cline-event-adapter.js\";\nimport { buildSessionIdPrefix, createSessionId } from \"./cline-session-state.js\";\nimport {\n\ttype ClineSdkPersistedMessage,\n\ttype ClineSdkSessionHost,\n\ttype ClineSdkSessionRecord,\n\ttype ClineSdkUserInstructionWatcher,\n\tcreateClineSdkSessionHost,\n} from \"./sdk-runtime-boundary.js\";\n\nconst DEFAULT_CLINE_MAX_CONSECUTIVE_MISTAKES = 6;\n\nfunction toSdkUserImages(images?: RuntimeTaskImage[]): string[] | undefined {\n\tif (!images || images.length === 0) {\n\t\treturn undefined;\n\t}\n\tconst userImages = images\n\t\t.map((image) => {\n\t\t\tconst mimeType = image.mimeType.trim();\n\t\t\tconst data = image.data.trim();\n\t\t\tif (!mimeType || !data) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn `data:${mimeType};base64,${data}`;\n\t\t})\n\t\t.filter((image): image is string => image !== null);\n\treturn userImages.length > 0 ? userImages : undefined;\n}\n\nexport interface StartClineSessionRuntimeRequest {\n\ttaskId: string;\n\tcwd: string;\n\tprompt: string;\n\tinitialMessages?: ClineSdkPersistedMessage[];\n\timages?: RuntimeTaskImage[];\n\tproviderId: string;\n\tmodelId: string;\n\tmode?: RuntimeTaskSessionMode;\n\tapiKey?: string | null;\n\tbaseUrl?: string | null;\n\tsystemPrompt: string;\n\tuserInstructionWatcher?: ClineSdkUserInstructionWatcher;\n\trequestToolApproval?: (request: unknown) => Promise<unknown>;\n}\n\nexport interface StartClineSessionRuntimeResult {\n\tsessionId: string;\n\tresult: unknown;\n\twarnings?: string[];\n}\n\nexport interface ClinePersistedTaskSessionSnapshot {\n\trecord: ClineSdkSessionRecord;\n\tmessages: ClineSdkPersistedMessage[];\n}\n\nexport interface ClineSessionRuntime {\n\tstartTaskSession(request: StartClineSessionRuntimeRequest): Promise<StartClineSessionRuntimeResult>;\n\trestartTaskSession(input: {\n\t\ttaskId: string;\n\t\tprompt: string;\n\t\tinitialMessages?: ClineSdkPersistedMessage[];\n\t\timages?: RuntimeTaskImage[];\n\t\tmode?: RuntimeTaskSessionMode;\n\t}): Promise<StartClineSessionRuntimeResult>;\n\tsendTaskSessionInput(\n\t\ttaskId: string,\n\t\tprompt: string,\n\t\tmode?: RuntimeTaskSessionMode,\n\t\timages?: RuntimeTaskImage[],\n\t\tdelivery?: \"queue\" | \"steer\",\n\t): Promise<unknown>;\n\tresumeTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null>;\n\tstopTaskSession(taskId: string): Promise<void>;\n\tabortTaskSession(taskId: string): Promise<void>;\n\tgetTaskSessionId(taskId: string): string | null;\n\treadPersistedTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null>;\n\tdispose(): Promise<void>;\n}\n\nexport interface CreateInMemoryClineSessionRuntimeOptions {\n\tonTaskEvent?: (taskId: string, event: unknown) => void;\n\tcreateSessionHost?: () => Promise<ClineSdkSessionHost>;\n\tcreateMcpRuntimeService?: () => ClineMcpRuntimeService;\n}\n\n// Own the SDK session host plus the taskId <-> sessionId bindings so higher layers can stay task-oriented.\nexport class InMemoryClineSessionRuntime implements ClineSessionRuntime {\n\tprivate readonly onTaskEvent: ((taskId: string, event: unknown) => void) | null;\n\tprivate readonly createSessionHost: () => Promise<ClineSdkSessionHost>;\n\tprivate readonly clineMcpRuntimeService: ClineMcpRuntimeService;\n\tprivate readonly sessionIdByTaskId = new Map<string, string>();\n\tprivate readonly taskIdBySessionId = new Map<string, string>();\n\tprivate readonly lastStartRequestByTaskId = new Map<\n\t\tstring,\n\t\tOmit<StartClineSessionRuntimeRequest, \"prompt\" | \"images\" | \"initialMessages\">\n\t>();\n\tprivate readonly mcpToolBundleByTaskId = new Map<string, ClineMcpToolBundle>();\n\tprivate sessionHostPromise: Promise<ClineSdkSessionHost> | null = null;\n\n\tconstructor(options: CreateInMemoryClineSessionRuntimeOptions = {}) {\n\t\tthis.onTaskEvent = options.onTaskEvent ?? null;\n\t\tthis.createSessionHost = options.createSessionHost ?? createClineSdkSessionHost;\n\t\tconst createMcpRuntimeService = options.createMcpRuntimeService ?? createClineMcpRuntimeService;\n\t\tthis.clineMcpRuntimeService = createMcpRuntimeService();\n\t}\n\n\tasync startTaskSession(request: StartClineSessionRuntimeRequest): Promise<StartClineSessionRuntimeResult> {\n\t\tconst requestedSessionId = createSessionId(request.taskId);\n\t\tconst resolvedMode: RuntimeTaskSessionMode = request.mode ?? \"act\";\n\t\tthis.lastStartRequestByTaskId.set(request.taskId, {\n\t\t\ttaskId: request.taskId,\n\t\t\tcwd: request.cwd,\n\t\t\tproviderId: request.providerId,\n\t\t\tmodelId: request.modelId,\n\t\t\tmode: resolvedMode,\n\t\t\tapiKey: request.apiKey,\n\t\t\tbaseUrl: request.baseUrl,\n\t\t\tsystemPrompt: request.systemPrompt,\n\t\t\tuserInstructionWatcher: request.userInstructionWatcher,\n\t\t\trequestToolApproval: request.requestToolApproval,\n\t\t});\n\t\tthis.bindTaskSession(request.taskId, requestedSessionId);\n\n\t\tlet mcpToolBundle: ClineMcpToolBundle | null = null;\n\t\tlet startWarnings: string[] = [];\n\t\ttry {\n\t\t\tmcpToolBundle = await this.clineMcpRuntimeService.createToolBundle();\n\t\t\tstartWarnings = mcpToolBundle.warnings;\n\t\t} catch (error) {\n\t\t\tmcpToolBundle = null;\n\t\t\tconst message = error instanceof Error ? error.message.trim() : String(error);\n\t\t\tif (message.length > 0) {\n\t\t\t\tstartWarnings = [`Failed to load MCP tools: ${message}`];\n\t\t\t}\n\t\t}\n\t\tthis.replaceTaskMcpToolBundle(request.taskId, mcpToolBundle);\n\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tlet startResult: StartClineSessionRuntimeResult;\n\t\ttry {\n\t\t\tstartResult = await sessionHost.start({\n\t\t\t\tconfig: {\n\t\t\t\t\tsessionId: requestedSessionId,\n\t\t\t\t\tproviderId: request.providerId,\n\t\t\t\t\tmodelId: request.modelId,\n\t\t\t\t\tapiKey: request.apiKey?.trim() || undefined,\n\t\t\t\t\tbaseUrl: request.baseUrl?.trim() || undefined,\n\t\t\t\t\tcwd: request.cwd,\n\t\t\t\t\tmode: resolvedMode,\n\t\t\t\t\tenableTools: true,\n\t\t\t\t\tenableSpawnAgent: false,\n\t\t\t\t\tenableAgentTeams: false,\n\t\t\t\t\tmaxConsecutiveMistakes: DEFAULT_CLINE_MAX_CONSECUTIVE_MISTAKES,\n\t\t\t\t\tsystemPrompt: request.systemPrompt,\n\t\t\t\t\t...(mcpToolBundle && mcpToolBundle.tools.length > 0 ? { extraTools: mcpToolBundle.tools } : {}),\n\t\t\t\t\t},\n\t\t\t\t\tprompt: request.prompt,\n\t\t\t\t\tinitialMessages: request.initialMessages,\n\t\t\t\t\tinteractive: true,\n\t\t\t\t\tuserImages: toSdkUserImages(request.images),\n\t\t\t\t\tuserInstructionWatcher: request.userInstructionWatcher,\n\t\t\t\t\trequestToolApproval: request.requestToolApproval,\n\t\t\t\t});\n\t\t} catch (error) {\n\t\t\tthis.clearTaskSessionBinding(request.taskId, requestedSessionId);\n\t\t\tawait this.releaseTaskMcpToolBundle(request.taskId);\n\t\t\tthrow error;\n\t\t}\n\n\t\tthis.bindTaskSession(request.taskId, startResult.sessionId);\n\t\tif (startResult.sessionId !== requestedSessionId) {\n\t\t\tthis.taskIdBySessionId.delete(requestedSessionId);\n\t\t}\n\n\t\treturn {\n\t\t\t...startResult,\n\t\t\t...(startWarnings.length > 0 ? { warnings: startWarnings } : {}),\n\t\t};\n\t}\n\n\tasync restartTaskSession(input: {\n\t\ttaskId: string;\n\t\tprompt: string;\n\t\tinitialMessages?: ClineSdkPersistedMessage[];\n\t\timages?: RuntimeTaskImage[];\n\t\tmode?: RuntimeTaskSessionMode;\n\t}): Promise<StartClineSessionRuntimeResult> {\n\t\tconst lastStartRequest = this.lastStartRequestByTaskId.get(input.taskId);\n\t\tif (!lastStartRequest) {\n\t\t\tthrow new Error(`No previous Cline session config is available for task ${input.taskId}.`);\n\t\t}\n\n\t\treturn await this.startTaskSession({\n\t\t\t...lastStartRequest,\n\t\t\tprompt: input.prompt,\n\t\t\tinitialMessages: input.initialMessages,\n\t\t\timages: input.images,\n\t\t\tmode: input.mode ?? lastStartRequest.mode,\n\t\t});\n\t}\n\n\tasync sendTaskSessionInput(\n\t\ttaskId: string,\n\t\tprompt: string,\n\t\tmode?: RuntimeTaskSessionMode,\n\t\timages?: RuntimeTaskImage[],\n\t\tdelivery?: \"queue\" | \"steer\",\n\t): Promise<unknown> {\n\t\tconst sessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!sessionId) {\n\t\t\tthrow new Error(`No active Cline session for task ${taskId}.`);\n\t\t}\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tif (mode) {\n\t\t\tthis.updateActiveSessionMode(sessionHost, sessionId, mode);\n\t\t\tthis.updateLastStartRequestMode(taskId, mode);\n\t\t}\n\t\treturn await sessionHost.send({\n\t\t\tsessionId,\n\t\t\tprompt,\n\t\t\tuserImages: toSdkUserImages(images),\n\t\t\t...(delivery ? { delivery } : {}),\n\t\t});\n\t}\n\n\tasync resumeTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null> {\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tconst record = await this.findPersistedTaskSessionRecord(taskId, sessionHost);\n\t\tif (!record) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.bindTaskSession(taskId, record.sessionId);\n\t\tconst messages = await sessionHost.readMessages(record.sessionId);\n\t\treturn {\n\t\t\trecord,\n\t\t\tmessages,\n\t\t};\n\t}\n\n\tasync stopTaskSession(taskId: string): Promise<void> {\n\t\tconst sessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!sessionId) {\n\t\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t\t\treturn;\n\t\t}\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tawait sessionHost.stop(sessionId);\n\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t}\n\n\tasync abortTaskSession(taskId: string): Promise<void> {\n\t\tconst sessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!sessionId) {\n\t\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t\t\treturn;\n\t\t}\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tawait sessionHost.abort(sessionId);\n\t\tawait this.releaseTaskMcpToolBundle(taskId);\n\t}\n\n\tgetTaskSessionId(taskId: string): string | null {\n\t\treturn this.sessionIdByTaskId.get(taskId) ?? null;\n\t}\n\n\tasync readPersistedTaskSession(taskId: string): Promise<ClinePersistedTaskSessionSnapshot | null> {\n\t\tconst sessionHost = await this.ensureSessionHost();\n\t\tconst record = await this.findPersistedTaskSessionRecord(taskId, sessionHost);\n\t\tif (!record) {\n\t\t\treturn null;\n\t\t}\n\t\tconst messages = await sessionHost.readMessages(record.sessionId);\n\t\treturn {\n\t\t\trecord,\n\t\t\tmessages,\n\t\t};\n\t}\n\n\tasync dispose(): Promise<void> {\n\t\tconst hostPromise = this.sessionHostPromise;\n\t\tthis.sessionHostPromise = null;\n\t\tif (hostPromise) {\n\t\t\ttry {\n\t\t\t\tconst host = await hostPromise;\n\t\t\t\tawait host.dispose(\"kanban-runtime-dispose\");\n\t\t\t} catch {\n\t\t\t\t// Ignore host disposal errors.\n\t\t\t}\n\t\t}\n\t\tthis.sessionIdByTaskId.clear();\n\t\tthis.taskIdBySessionId.clear();\n\t\tthis.lastStartRequestByTaskId.clear();\n\n\t\tconst mcpBundles = [...this.mcpToolBundleByTaskId.values()];\n\t\tthis.mcpToolBundleByTaskId.clear();\n\t\tawait Promise.all(\n\t\t\tmcpBundles.map(async (bundle) => {\n\t\t\t\tawait bundle.dispose().catch(() => undefined);\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate replaceTaskMcpToolBundle(taskId: string, bundle: ClineMcpToolBundle | null): void {\n\t\tconst current = this.mcpToolBundleByTaskId.get(taskId);\n\t\tif (current) {\n\t\t\tvoid current.dispose().catch(() => undefined);\n\t\t\tthis.mcpToolBundleByTaskId.delete(taskId);\n\t\t}\n\t\tif (bundle) {\n\t\t\tthis.mcpToolBundleByTaskId.set(taskId, bundle);\n\t\t}\n\t}\n\n\tprivate async releaseTaskMcpToolBundle(taskId: string): Promise<void> {\n\t\tconst current = this.mcpToolBundleByTaskId.get(taskId);\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\t\tthis.mcpToolBundleByTaskId.delete(taskId);\n\t\tawait current.dispose().catch(() => undefined);\n\t}\n\n\tprivate bindTaskSession(taskId: string, sessionId: string): void {\n\t\tconst previousSessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (previousSessionId) {\n\t\t\tthis.taskIdBySessionId.delete(previousSessionId);\n\t\t}\n\t\tthis.sessionIdByTaskId.set(taskId, sessionId);\n\t\tthis.taskIdBySessionId.set(sessionId, taskId);\n\t}\n\n\tprivate clearTaskSessionBinding(taskId: string, sessionId?: string): void {\n\t\tconst activeSessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (!activeSessionId) {\n\t\t\treturn;\n\t\t}\n\t\tif (sessionId && activeSessionId !== sessionId) {\n\t\t\treturn;\n\t\t}\n\t\tthis.sessionIdByTaskId.delete(taskId);\n\t\tthis.taskIdBySessionId.delete(activeSessionId);\n\t}\n\n\tprivate async findPersistedTaskSessionRecord(\n\t\ttaskId: string,\n\t\tsessionHost: ClineSdkSessionHost,\n\t): Promise<ClineSdkSessionRecord | null> {\n\t\tconst activeSessionId = this.sessionIdByTaskId.get(taskId);\n\t\tif (activeSessionId) {\n\t\t\tconst activeRecord = (await sessionHost.get(activeSessionId)) ?? null;\n\t\t\tif (activeRecord) {\n\t\t\t\treturn activeRecord;\n\t\t\t}\n\t\t}\n\n\t\tconst sessionIdPrefix = buildSessionIdPrefix(taskId);\n\t\tconst records: ClineSdkSessionRecord[] = await sessionHost.list();\n\t\tconst matchingRecord = records\n\t\t\t.filter((record: ClineSdkSessionRecord) => record.sessionId.startsWith(sessionIdPrefix))\n\t\t\t.sort((left: ClineSdkSessionRecord, right: ClineSdkSessionRecord) => {\n\t\t\t\tconst leftTimestamp = Date.parse(left.updatedAt || left.startedAt);\n\t\t\t\tconst rightTimestamp = Date.parse(right.updatedAt || right.startedAt);\n\t\t\t\treturn rightTimestamp - leftTimestamp;\n\t\t\t})[0];\n\t\treturn matchingRecord ?? null;\n\t}\n\n\tprivate async ensureSessionHost(): Promise<ClineSdkSessionHost> {\n\t\tif (!this.sessionHostPromise) {\n\t\t\tthis.sessionHostPromise = this.createSessionHost().then((sessionHost: ClineSdkSessionHost) => {\n\t\t\t\tsessionHost.subscribe((event: unknown) => {\n\t\t\t\t\tthis.handleSessionEvent(event);\n\t\t\t\t});\n\t\t\t\treturn sessionHost;\n\t\t\t});\n\t\t}\n\t\treturn await this.sessionHostPromise;\n\t}\n\n\tprivate updateActiveSessionMode(\n\t\tsessionHost: ClineSdkSessionHost,\n\t\tsessionId: string,\n\t\tmode: RuntimeTaskSessionMode,\n\t): void {\n\t\tconst hostWithSessions = sessionHost as unknown as {\n\t\t\tsessions?: Map<string, { config?: { mode?: RuntimeTaskSessionMode } }>;\n\t\t};\n\t\tconst activeSession = hostWithSessions.sessions?.get(sessionId);\n\t\tif (activeSession?.config) {\n\t\t\tactiveSession.config.mode = mode;\n\t\t}\n\t}\n\n\tprivate updateLastStartRequestMode(taskId: string, mode: RuntimeTaskSessionMode): void {\n\t\tconst lastStartRequest = this.lastStartRequestByTaskId.get(taskId);\n\t\tif (!lastStartRequest) {\n\t\t\treturn;\n\t\t}\n\t\tthis.lastStartRequestByTaskId.set(taskId, {\n\t\t\t...lastStartRequest,\n\t\t\tmode,\n\t\t});\n\t}\n\n\tprivate handleSessionEvent(event: unknown): void {\n\t\tconst sessionId = extractClineSessionId(event);\n\t\tif (!sessionId) {\n\t\t\treturn;\n\t\t}\n\t\tconst taskId = this.taskIdBySessionId.get(sessionId);\n\t\tif (!taskId) {\n\t\t\treturn;\n\t\t}\n\t\tconst eventRecord =\n\t\t\tevent && typeof event === \"object\" ? (event as { type?: unknown }) : null;\n\t\tconst ended = eventRecord?.type === \"ended\";\n\t\tif (this.onTaskEvent) {\n\t\t\tthis.onTaskEvent(taskId, event);\n\t\t}\n\t\tif (ended) {\n\t\t\tthis.clearTaskSessionBinding(taskId, sessionId);\n\t\t\tvoid this.releaseTaskMcpToolBundle(taskId);\n\t\t}\n\t}\n}\n\nexport function createInMemoryClineSessionRuntime(\n\toptions: CreateInMemoryClineSessionRuntimeOptions = {},\n): ClineSessionRuntime {\n\treturn new InMemoryClineSessionRuntime(options);\n}\n"],"names":[],"mappings":"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","debugId":"61b3decb-d642-570f-84d6-088fcd51b7a2"}
|
|
@@ -31,6 +31,7 @@ export declare function updateSummary(entry: ClineTaskSessionEntry, patch: Parti
|
|
|
31
31
|
export declare function createMessage(taskId: string, role: ClineTaskMessage["role"], content: string, images?: RuntimeTaskImage[]): ClineTaskMessage;
|
|
32
32
|
export declare function createMessageWithMeta(taskId: string, role: ClineTaskMessage["role"], content: string, meta: ClineTaskMessage["meta"], images?: RuntimeTaskImage[]): ClineTaskMessage;
|
|
33
33
|
export declare function createSessionId(taskId: string): string;
|
|
34
|
+
export declare function buildSessionIdPrefix(taskId: string): string;
|
|
34
35
|
export declare function isClineUserAttentionTool(toolName: string | null): boolean;
|
|
35
36
|
export declare function canReturnToRunning(reviewReason: RuntimeTaskSessionSummary["reviewReason"]): boolean;
|
|
36
37
|
export declare function latestAssistantMessageMatches(entry: ClineTaskSessionEntry, content: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-session-state.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-session-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"cline-session-state.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-session-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="fac69471-392b-5cbd-95c2-178d6ca436c2")}catch(e){}}();
|
|
3
3
|
const CLINE_USER_ATTENTION_TOOL_NAMES = new Set(["ask_followup_question", "plan_mode_respond"]);
|
|
4
|
+
const WINDOWS_INVALID_SESSION_ID_CHARS = /[<>:"/\\|?*]/g;
|
|
4
5
|
export function now() {
|
|
5
6
|
return Date.now();
|
|
6
7
|
}
|
|
@@ -23,6 +24,7 @@ export function createDefaultSummary(taskId) {
|
|
|
23
24
|
return {
|
|
24
25
|
taskId,
|
|
25
26
|
state: "idle",
|
|
27
|
+
mode: null,
|
|
26
28
|
agentId: "cline",
|
|
27
29
|
workspacePath: null,
|
|
28
30
|
pid: null,
|
|
@@ -62,7 +64,14 @@ export function createMessageWithMeta(taskId, role, content, meta, images) {
|
|
|
62
64
|
};
|
|
63
65
|
}
|
|
64
66
|
export function createSessionId(taskId) {
|
|
65
|
-
return `${taskId}-${now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
67
|
+
return `${toSessionIdTaskPrefix(taskId)}-${now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
68
|
+
}
|
|
69
|
+
export function buildSessionIdPrefix(taskId) {
|
|
70
|
+
return `${toSessionIdTaskPrefix(taskId)}-`;
|
|
71
|
+
}
|
|
72
|
+
function toSessionIdTaskPrefix(taskId) {
|
|
73
|
+
const normalized = taskId.replace(WINDOWS_INVALID_SESSION_ID_CHARS, "_").trim();
|
|
74
|
+
return normalized.length > 0 ? normalized : "session";
|
|
66
75
|
}
|
|
67
76
|
export function isClineUserAttentionTool(toolName) {
|
|
68
77
|
if (!toolName) {
|
|
@@ -276,4 +285,4 @@ function getLatestAssistantMessage(entry) {
|
|
|
276
285
|
return null;
|
|
277
286
|
}
|
|
278
287
|
//# sourceMappingURL=cline-session-state.js.map
|
|
279
|
-
//# debugId=
|
|
288
|
+
//# debugId=fac69471-392b-5cbd-95c2-178d6ca436c2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-session-state.js","sources":["../../src/cline-sdk/cline-session-state.ts"],"sourceRoot":"","sourcesContent":["// Pure state helpers for native Cline sessions.\n// This module owns the in-memory summary and message shape plus the low-level\n// mutations shared by the event adapter and the message repository.\nimport type { RuntimeTaskImage, RuntimeTaskSessionSummary } from \"../core/api-contract.js\";\n\nconst CLINE_USER_ATTENTION_TOOL_NAMES = new Set([\"ask_followup_question\", \"plan_mode_respond\"]);\n\nexport interface ClineTaskSessionEntry {\n\tsummary: RuntimeTaskSessionSummary;\n\tmessages: ClineTaskMessage[];\n\tactiveAssistantMessageId: string | null;\n\tactiveReasoningMessageId: string | null;\n\ttoolMessageIdByToolCallId: Map<string, string>;\n\ttoolInputByToolCallId: Map<string, unknown>;\n}\n\nexport interface ClineTaskMessage {\n\tid: string;\n\trole: \"user\" | \"assistant\" | \"system\" | \"tool\" | \"reasoning\" | \"status\";\n\tcontent: string;\n\timages?: RuntimeTaskImage[];\n\tcreatedAt: number;\n\tmeta?: {\n\t\ttoolName?: string | null;\n\t\thookEventName?: string | null;\n\t\ttoolCallId?: string | null;\n\t\tstreamType?: string | null;\n\t\tmessageKind?: string | null;\n\t\tdisplayRole?: string | null;\n\t\treason?: string | null;\n\t} | null;\n}\n\nexport function now(): number {\n\treturn Date.now();\n}\n\nexport function cloneSummary(summary: RuntimeTaskSessionSummary): RuntimeTaskSessionSummary {\n\treturn {\n\t\t...summary,\n\t\tlatestHookActivity: summary.latestHookActivity ? { ...summary.latestHookActivity } : null,\n\t\tlatestTurnCheckpoint: summary.latestTurnCheckpoint ? { ...summary.latestTurnCheckpoint } : null,\n\t\tpreviousTurnCheckpoint: summary.previousTurnCheckpoint ? { ...summary.previousTurnCheckpoint } : null,\n\t};\n}\n\nexport function cloneMessage(message: ClineTaskMessage): ClineTaskMessage {\n\treturn {\n\t\t...message,\n\t\timages: message.images ? message.images.map((image) => ({ ...image })) : message.images,\n\t\tmeta: message.meta ? { ...message.meta } : message.meta,\n\t};\n}\n\nexport function createDefaultSummary(taskId: string): RuntimeTaskSessionSummary {\n\treturn {\n\t\ttaskId,\n\t\tstate: \"idle\",\n\t\tagentId: \"cline\",\n\t\tworkspacePath: null,\n\t\tpid: null,\n\t\tstartedAt: null,\n\t\tupdatedAt: now(),\n\t\tlastOutputAt: null,\n\t\treviewReason: null,\n\t\texitCode: null,\n\t\tlastHookAt: null,\n\t\tlatestHookActivity: null,\n\t\twarningMessage: null,\n\t\tlatestTurnCheckpoint: null,\n\t\tpreviousTurnCheckpoint: null,\n\t};\n}\n\nexport function updateSummary(\n\tentry: ClineTaskSessionEntry,\n\tpatch: Partial<RuntimeTaskSessionSummary>,\n): RuntimeTaskSessionSummary {\n\tentry.summary = {\n\t\t...entry.summary,\n\t\t...patch,\n\t\tupdatedAt: now(),\n\t};\n\treturn cloneSummary(entry.summary);\n}\n\nexport function createMessage(taskId: string, role: ClineTaskMessage[\"role\"], content: string, images?: RuntimeTaskImage[]): ClineTaskMessage {\n\treturn {\n\t\tid: `${taskId}-${now()}-${Math.random().toString(36).slice(2, 8)}`,\n\t\trole,\n\t\tcontent,\n\t\timages: images && images.length > 0 ? images.map((image) => ({ ...image })) : undefined,\n\t\tcreatedAt: now(),\n\t};\n}\n\nexport function createMessageWithMeta(\n\ttaskId: string,\n\trole: ClineTaskMessage[\"role\"],\n\tcontent: string,\n\tmeta: ClineTaskMessage[\"meta\"],\n\timages?: RuntimeTaskImage[],\n): ClineTaskMessage {\n\treturn {\n\t\t...createMessage(taskId, role, content, images),\n\t\tmeta,\n\t};\n}\n\nexport function createSessionId(taskId: string): string {\n\treturn `${taskId}-${now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function isClineUserAttentionTool(toolName: string | null): boolean {\n\tif (!toolName) {\n\t\treturn false;\n\t}\n\treturn CLINE_USER_ATTENTION_TOOL_NAMES.has(toolName.trim().toLowerCase());\n}\n\nexport function canReturnToRunning(reviewReason: RuntimeTaskSessionSummary[\"reviewReason\"]): boolean {\n\treturn reviewReason === \"attention\" || reviewReason === \"hook\" || reviewReason === \"error\";\n}\n\nexport function latestAssistantMessageMatches(entry: ClineTaskSessionEntry, content: string): boolean {\n\tconst latestAssistant = getLatestAssistantMessage(entry);\n\tif (!latestAssistant) {\n\t\treturn false;\n\t}\n\treturn latestAssistant.content.trim() === content.trim();\n}\n\nexport function clearActiveTurnState(entry: ClineTaskSessionEntry): void {\n\tentry.activeAssistantMessageId = null;\n\tentry.activeReasoningMessageId = null;\n\tentry.toolMessageIdByToolCallId.clear();\n\tentry.toolInputByToolCallId.clear();\n}\n\nexport function appendAssistantChunk(entry: ClineTaskSessionEntry, taskId: string, chunk: string): ClineTaskMessage {\n\tconst existingMessageId = entry.activeAssistantMessageId;\n\tif (existingMessageId) {\n\t\tconst updatedMessage = updateMessageInEntry(entry, existingMessageId, (currentMessage) => ({\n\t\t\t...currentMessage,\n\t\t\tcontent: `${currentMessage.content}${chunk}`,\n\t\t}));\n\t\tif (updatedMessage) {\n\t\t\treturn updatedMessage;\n\t\t}\n\t}\n\treturn createAssistantMessage(entry, taskId, chunk);\n}\n\nexport function setOrCreateAssistantMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage | null {\n\tif (!entry.activeAssistantMessageId) {\n\t\treturn null;\n\t}\n\tconst updatedMessage = updateMessageInEntry(entry, entry.activeAssistantMessageId, (currentMessage) => ({\n\t\t...currentMessage,\n\t\tcontent,\n\t}));\n\tif (updatedMessage) {\n\t\treturn updatedMessage;\n\t}\n\treturn createAssistantMessage(entry, taskId, content);\n}\n\nexport function appendReasoningChunk(entry: ClineTaskSessionEntry, taskId: string, chunk: string): ClineTaskMessage {\n\tconst existingMessageId = entry.activeReasoningMessageId;\n\tif (existingMessageId) {\n\t\tconst updatedMessage = updateMessageInEntry(entry, existingMessageId, (currentMessage) => ({\n\t\t\t...currentMessage,\n\t\t\tcontent: `${currentMessage.content}${chunk}`,\n\t\t}));\n\t\tif (updatedMessage) {\n\t\t\treturn updatedMessage;\n\t\t}\n\t}\n\treturn createReasoningMessage(entry, taskId, chunk);\n}\n\nexport function setOrCreateReasoningMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage | null {\n\tif (!entry.activeReasoningMessageId) {\n\t\treturn null;\n\t}\n\tconst updatedMessage = updateMessageInEntry(entry, entry.activeReasoningMessageId, (currentMessage) => ({\n\t\t...currentMessage,\n\t\tcontent,\n\t}));\n\tif (updatedMessage) {\n\t\treturn updatedMessage;\n\t}\n\treturn createReasoningMessage(entry, taskId, content);\n}\n\nexport function createAssistantMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage {\n\tconst message = createMessage(taskId, \"assistant\", content);\n\tentry.messages.push(message);\n\tentry.activeAssistantMessageId = message.id;\n\treturn message;\n}\n\nexport function createReasoningMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage {\n\tconst message = createMessageWithMeta(taskId, \"reasoning\", content, {\n\t\tstreamType: \"reasoning\",\n\t});\n\tentry.messages.push(message);\n\tentry.activeReasoningMessageId = message.id;\n\treturn message;\n}\n\nexport function startToolCallMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tinput: {\n\t\ttoolName: string | null;\n\t\ttoolCallId: string | null;\n\t\tinput: unknown;\n\t},\n): ClineTaskMessage {\n\tconst toolContent = buildToolCallContent({\n\t\ttoolName: input.toolName,\n\t\tinput: input.input,\n\t});\n\tconst message = createMessageWithMeta(taskId, \"tool\", toolContent, {\n\t\ttoolName: input.toolName,\n\t\thookEventName: \"tool_call_start\",\n\t\ttoolCallId: input.toolCallId,\n\t\tstreamType: \"tool\",\n\t});\n\tentry.messages.push(message);\n\tif (input.toolCallId) {\n\t\tentry.toolMessageIdByToolCallId.set(input.toolCallId, message.id);\n\t\tentry.toolInputByToolCallId.set(input.toolCallId, input.input);\n\t}\n\treturn message;\n}\n\nexport function finishToolCallMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tinput: {\n\t\ttoolName: string | null;\n\t\ttoolCallId: string | null;\n\t\toutput: unknown;\n\t\terror: string | null;\n\t\tdurationMs: number | null;\n\t},\n): ClineTaskMessage {\n\tconst existingMessageId = input.toolCallId\n\t\t? entry.toolMessageIdByToolCallId.get(input.toolCallId) ?? null\n\t\t: null;\n\tconst toolInput = input.toolCallId ? entry.toolInputByToolCallId.get(input.toolCallId) : undefined;\n\tconst content = buildToolCallContent({\n\t\ttoolName: input.toolName,\n\t\tinput: toolInput,\n\t\toutput: input.output,\n\t\terror: input.error,\n\t\tdurationMs: input.durationMs,\n\t});\n\tif (existingMessageId) {\n\t\tconst updatedMessage = updateMessageInEntry(entry, existingMessageId, (currentMessage) => ({\n\t\t\t...currentMessage,\n\t\t\tcontent,\n\t\t\tmeta: {\n\t\t\t\t...(currentMessage.meta ?? {}),\n\t\t\t\ttoolName: input.toolName,\n\t\t\t\thookEventName: \"tool_call_end\",\n\t\t\t\ttoolCallId: input.toolCallId,\n\t\t\t\tstreamType: \"tool\",\n\t\t\t},\n\t\t}));\n\t\tif (updatedMessage) {\n\t\t\tif (input.toolCallId) {\n\t\t\t\tentry.toolMessageIdByToolCallId.delete(input.toolCallId);\n\t\t\t\tentry.toolInputByToolCallId.delete(input.toolCallId);\n\t\t\t}\n\t\t\treturn updatedMessage;\n\t\t}\n\t}\n\tconst message = createMessageWithMeta(taskId, \"tool\", content, {\n\t\ttoolName: input.toolName,\n\t\thookEventName: \"tool_call_end\",\n\t\ttoolCallId: input.toolCallId,\n\t\tstreamType: \"tool\",\n\t});\n\tif (input.toolCallId) {\n\t\tentry.toolMessageIdByToolCallId.delete(input.toolCallId);\n\t\tentry.toolInputByToolCallId.delete(input.toolCallId);\n\t}\n\tentry.messages.push(message);\n\treturn message;\n}\n\nfunction stringifyPayload(payload: unknown): string {\n\tif (payload === undefined || payload === null) {\n\t\treturn \"\";\n\t}\n\tif (typeof payload === \"string\") {\n\t\treturn payload;\n\t}\n\ttry {\n\t\treturn JSON.stringify(payload, null, 2);\n\t} catch {\n\t\treturn String(payload);\n\t}\n}\n\nfunction buildToolCallContent(input: {\n\ttoolName: string | null;\n\tinput: unknown;\n\toutput?: unknown;\n\terror?: string | null;\n\tdurationMs?: number | null;\n}): string {\n\tconst lines: string[] = [];\n\tlines.push(`Tool: ${input.toolName ?? \"unknown\"}`);\n\tconst inputText = stringifyPayload(input.input);\n\tif (inputText) {\n\t\tlines.push(\"Input:\");\n\t\tlines.push(inputText);\n\t}\n\tif (input.error) {\n\t\tlines.push(\"Error:\");\n\t\tlines.push(input.error);\n\t} else if (input.output !== undefined) {\n\t\tconst outputText = stringifyPayload(input.output);\n\t\tif (outputText) {\n\t\t\tlines.push(\"Output:\");\n\t\t\tlines.push(outputText);\n\t\t}\n\t}\n\tif (typeof input.durationMs === \"number\" && Number.isFinite(input.durationMs)) {\n\t\tlines.push(`Duration: ${Math.max(0, Math.round(input.durationMs))}ms`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction updateMessageInEntry(\n\tentry: ClineTaskSessionEntry,\n\tmessageId: string,\n\tupdater: (currentMessage: ClineTaskMessage) => ClineTaskMessage,\n): ClineTaskMessage | null {\n\tconst messageIndex = entry.messages.findIndex((message) => message.id === messageId);\n\tif (messageIndex < 0) {\n\t\treturn null;\n\t}\n\tconst currentMessage = entry.messages[messageIndex];\n\tif (!currentMessage) {\n\t\treturn null;\n\t}\n\tconst nextMessage = updater(currentMessage);\n\tentry.messages[messageIndex] = nextMessage;\n\treturn nextMessage;\n}\n\nfunction getLatestAssistantMessage(entry: ClineTaskSessionEntry): ClineTaskMessage | null {\n\tfor (let index = entry.messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = entry.messages[index];\n\t\tif (message?.role === \"assistant\") {\n\t\t\treturn message;\n\t\t}\n\t}\n\treturn null;\n}\n"],"names":[],"mappings":"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","debugId":"2cdbe557-46dd-5725-b456-847fd3aeef6b"}
|
|
1
|
+
{"version":3,"file":"cline-session-state.js","sources":["../../src/cline-sdk/cline-session-state.ts"],"sourceRoot":"","sourcesContent":["// Pure state helpers for native Cline sessions.\n// This module owns the in-memory summary and message shape plus the low-level\n// mutations shared by the event adapter and the message repository.\nimport type { RuntimeTaskImage, RuntimeTaskSessionSummary } from \"../core/api-contract.js\";\n\nconst CLINE_USER_ATTENTION_TOOL_NAMES = new Set([\"ask_followup_question\", \"plan_mode_respond\"]);\nconst WINDOWS_INVALID_SESSION_ID_CHARS = /[<>:\"/\\\\|?*]/g;\n\nexport interface ClineTaskSessionEntry {\n\tsummary: RuntimeTaskSessionSummary;\n\tmessages: ClineTaskMessage[];\n\tactiveAssistantMessageId: string | null;\n\tactiveReasoningMessageId: string | null;\n\ttoolMessageIdByToolCallId: Map<string, string>;\n\ttoolInputByToolCallId: Map<string, unknown>;\n}\n\nexport interface ClineTaskMessage {\n\tid: string;\n\trole: \"user\" | \"assistant\" | \"system\" | \"tool\" | \"reasoning\" | \"status\";\n\tcontent: string;\n\timages?: RuntimeTaskImage[];\n\tcreatedAt: number;\n\tmeta?: {\n\t\ttoolName?: string | null;\n\t\thookEventName?: string | null;\n\t\ttoolCallId?: string | null;\n\t\tstreamType?: string | null;\n\t\tmessageKind?: string | null;\n\t\tdisplayRole?: string | null;\n\t\treason?: string | null;\n\t} | null;\n}\n\nexport function now(): number {\n\treturn Date.now();\n}\n\nexport function cloneSummary(summary: RuntimeTaskSessionSummary): RuntimeTaskSessionSummary {\n\treturn {\n\t\t...summary,\n\t\tlatestHookActivity: summary.latestHookActivity ? { ...summary.latestHookActivity } : null,\n\t\tlatestTurnCheckpoint: summary.latestTurnCheckpoint ? { ...summary.latestTurnCheckpoint } : null,\n\t\tpreviousTurnCheckpoint: summary.previousTurnCheckpoint ? { ...summary.previousTurnCheckpoint } : null,\n\t};\n}\n\nexport function cloneMessage(message: ClineTaskMessage): ClineTaskMessage {\n\treturn {\n\t\t...message,\n\t\timages: message.images ? message.images.map((image) => ({ ...image })) : message.images,\n\t\tmeta: message.meta ? { ...message.meta } : message.meta,\n\t};\n}\n\nexport function createDefaultSummary(taskId: string): RuntimeTaskSessionSummary {\n\treturn {\n\t\ttaskId,\n\t\tstate: \"idle\",\n\t\tmode: null,\n\t\tagentId: \"cline\",\n\t\tworkspacePath: null,\n\t\tpid: null,\n\t\tstartedAt: null,\n\t\tupdatedAt: now(),\n\t\tlastOutputAt: null,\n\t\treviewReason: null,\n\t\texitCode: null,\n\t\tlastHookAt: null,\n\t\tlatestHookActivity: null,\n\t\twarningMessage: null,\n\t\tlatestTurnCheckpoint: null,\n\t\tpreviousTurnCheckpoint: null,\n\t};\n}\n\nexport function updateSummary(\n\tentry: ClineTaskSessionEntry,\n\tpatch: Partial<RuntimeTaskSessionSummary>,\n): RuntimeTaskSessionSummary {\n\tentry.summary = {\n\t\t...entry.summary,\n\t\t...patch,\n\t\tupdatedAt: now(),\n\t};\n\treturn cloneSummary(entry.summary);\n}\n\nexport function createMessage(taskId: string, role: ClineTaskMessage[\"role\"], content: string, images?: RuntimeTaskImage[]): ClineTaskMessage {\n\treturn {\n\t\tid: `${taskId}-${now()}-${Math.random().toString(36).slice(2, 8)}`,\n\t\trole,\n\t\tcontent,\n\t\timages: images && images.length > 0 ? images.map((image) => ({ ...image })) : undefined,\n\t\tcreatedAt: now(),\n\t};\n}\n\nexport function createMessageWithMeta(\n\ttaskId: string,\n\trole: ClineTaskMessage[\"role\"],\n\tcontent: string,\n\tmeta: ClineTaskMessage[\"meta\"],\n\timages?: RuntimeTaskImage[],\n): ClineTaskMessage {\n\treturn {\n\t\t...createMessage(taskId, role, content, images),\n\t\tmeta,\n\t};\n}\n\nexport function createSessionId(taskId: string): string {\n\treturn `${toSessionIdTaskPrefix(taskId)}-${now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function buildSessionIdPrefix(taskId: string): string {\n\treturn `${toSessionIdTaskPrefix(taskId)}-`;\n}\n\nfunction toSessionIdTaskPrefix(taskId: string): string {\n\tconst normalized = taskId.replace(WINDOWS_INVALID_SESSION_ID_CHARS, \"_\").trim();\n\treturn normalized.length > 0 ? normalized : \"session\";\n}\n\nexport function isClineUserAttentionTool(toolName: string | null): boolean {\n\tif (!toolName) {\n\t\treturn false;\n\t}\n\treturn CLINE_USER_ATTENTION_TOOL_NAMES.has(toolName.trim().toLowerCase());\n}\n\nexport function canReturnToRunning(reviewReason: RuntimeTaskSessionSummary[\"reviewReason\"]): boolean {\n\treturn reviewReason === \"attention\" || reviewReason === \"hook\" || reviewReason === \"error\";\n}\n\nexport function latestAssistantMessageMatches(entry: ClineTaskSessionEntry, content: string): boolean {\n\tconst latestAssistant = getLatestAssistantMessage(entry);\n\tif (!latestAssistant) {\n\t\treturn false;\n\t}\n\treturn latestAssistant.content.trim() === content.trim();\n}\n\nexport function clearActiveTurnState(entry: ClineTaskSessionEntry): void {\n\tentry.activeAssistantMessageId = null;\n\tentry.activeReasoningMessageId = null;\n\tentry.toolMessageIdByToolCallId.clear();\n\tentry.toolInputByToolCallId.clear();\n}\n\nexport function appendAssistantChunk(entry: ClineTaskSessionEntry, taskId: string, chunk: string): ClineTaskMessage {\n\tconst existingMessageId = entry.activeAssistantMessageId;\n\tif (existingMessageId) {\n\t\tconst updatedMessage = updateMessageInEntry(entry, existingMessageId, (currentMessage) => ({\n\t\t\t...currentMessage,\n\t\t\tcontent: `${currentMessage.content}${chunk}`,\n\t\t}));\n\t\tif (updatedMessage) {\n\t\t\treturn updatedMessage;\n\t\t}\n\t}\n\treturn createAssistantMessage(entry, taskId, chunk);\n}\n\nexport function setOrCreateAssistantMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage | null {\n\tif (!entry.activeAssistantMessageId) {\n\t\treturn null;\n\t}\n\tconst updatedMessage = updateMessageInEntry(entry, entry.activeAssistantMessageId, (currentMessage) => ({\n\t\t...currentMessage,\n\t\tcontent,\n\t}));\n\tif (updatedMessage) {\n\t\treturn updatedMessage;\n\t}\n\treturn createAssistantMessage(entry, taskId, content);\n}\n\nexport function appendReasoningChunk(entry: ClineTaskSessionEntry, taskId: string, chunk: string): ClineTaskMessage {\n\tconst existingMessageId = entry.activeReasoningMessageId;\n\tif (existingMessageId) {\n\t\tconst updatedMessage = updateMessageInEntry(entry, existingMessageId, (currentMessage) => ({\n\t\t\t...currentMessage,\n\t\t\tcontent: `${currentMessage.content}${chunk}`,\n\t\t}));\n\t\tif (updatedMessage) {\n\t\t\treturn updatedMessage;\n\t\t}\n\t}\n\treturn createReasoningMessage(entry, taskId, chunk);\n}\n\nexport function setOrCreateReasoningMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage | null {\n\tif (!entry.activeReasoningMessageId) {\n\t\treturn null;\n\t}\n\tconst updatedMessage = updateMessageInEntry(entry, entry.activeReasoningMessageId, (currentMessage) => ({\n\t\t...currentMessage,\n\t\tcontent,\n\t}));\n\tif (updatedMessage) {\n\t\treturn updatedMessage;\n\t}\n\treturn createReasoningMessage(entry, taskId, content);\n}\n\nexport function createAssistantMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage {\n\tconst message = createMessage(taskId, \"assistant\", content);\n\tentry.messages.push(message);\n\tentry.activeAssistantMessageId = message.id;\n\treturn message;\n}\n\nexport function createReasoningMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tcontent: string,\n): ClineTaskMessage {\n\tconst message = createMessageWithMeta(taskId, \"reasoning\", content, {\n\t\tstreamType: \"reasoning\",\n\t});\n\tentry.messages.push(message);\n\tentry.activeReasoningMessageId = message.id;\n\treturn message;\n}\n\nexport function startToolCallMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tinput: {\n\t\ttoolName: string | null;\n\t\ttoolCallId: string | null;\n\t\tinput: unknown;\n\t},\n): ClineTaskMessage {\n\tconst toolContent = buildToolCallContent({\n\t\ttoolName: input.toolName,\n\t\tinput: input.input,\n\t});\n\tconst message = createMessageWithMeta(taskId, \"tool\", toolContent, {\n\t\ttoolName: input.toolName,\n\t\thookEventName: \"tool_call_start\",\n\t\ttoolCallId: input.toolCallId,\n\t\tstreamType: \"tool\",\n\t});\n\tentry.messages.push(message);\n\tif (input.toolCallId) {\n\t\tentry.toolMessageIdByToolCallId.set(input.toolCallId, message.id);\n\t\tentry.toolInputByToolCallId.set(input.toolCallId, input.input);\n\t}\n\treturn message;\n}\n\nexport function finishToolCallMessage(\n\tentry: ClineTaskSessionEntry,\n\ttaskId: string,\n\tinput: {\n\t\ttoolName: string | null;\n\t\ttoolCallId: string | null;\n\t\toutput: unknown;\n\t\terror: string | null;\n\t\tdurationMs: number | null;\n\t},\n): ClineTaskMessage {\n\tconst existingMessageId = input.toolCallId\n\t\t? entry.toolMessageIdByToolCallId.get(input.toolCallId) ?? null\n\t\t: null;\n\tconst toolInput = input.toolCallId ? entry.toolInputByToolCallId.get(input.toolCallId) : undefined;\n\tconst content = buildToolCallContent({\n\t\ttoolName: input.toolName,\n\t\tinput: toolInput,\n\t\toutput: input.output,\n\t\terror: input.error,\n\t\tdurationMs: input.durationMs,\n\t});\n\tif (existingMessageId) {\n\t\tconst updatedMessage = updateMessageInEntry(entry, existingMessageId, (currentMessage) => ({\n\t\t\t...currentMessage,\n\t\t\tcontent,\n\t\t\tmeta: {\n\t\t\t\t...(currentMessage.meta ?? {}),\n\t\t\t\ttoolName: input.toolName,\n\t\t\t\thookEventName: \"tool_call_end\",\n\t\t\t\ttoolCallId: input.toolCallId,\n\t\t\t\tstreamType: \"tool\",\n\t\t\t},\n\t\t}));\n\t\tif (updatedMessage) {\n\t\t\tif (input.toolCallId) {\n\t\t\t\tentry.toolMessageIdByToolCallId.delete(input.toolCallId);\n\t\t\t\tentry.toolInputByToolCallId.delete(input.toolCallId);\n\t\t\t}\n\t\t\treturn updatedMessage;\n\t\t}\n\t}\n\tconst message = createMessageWithMeta(taskId, \"tool\", content, {\n\t\ttoolName: input.toolName,\n\t\thookEventName: \"tool_call_end\",\n\t\ttoolCallId: input.toolCallId,\n\t\tstreamType: \"tool\",\n\t});\n\tif (input.toolCallId) {\n\t\tentry.toolMessageIdByToolCallId.delete(input.toolCallId);\n\t\tentry.toolInputByToolCallId.delete(input.toolCallId);\n\t}\n\tentry.messages.push(message);\n\treturn message;\n}\n\nfunction stringifyPayload(payload: unknown): string {\n\tif (payload === undefined || payload === null) {\n\t\treturn \"\";\n\t}\n\tif (typeof payload === \"string\") {\n\t\treturn payload;\n\t}\n\ttry {\n\t\treturn JSON.stringify(payload, null, 2);\n\t} catch {\n\t\treturn String(payload);\n\t}\n}\n\nfunction buildToolCallContent(input: {\n\ttoolName: string | null;\n\tinput: unknown;\n\toutput?: unknown;\n\terror?: string | null;\n\tdurationMs?: number | null;\n}): string {\n\tconst lines: string[] = [];\n\tlines.push(`Tool: ${input.toolName ?? \"unknown\"}`);\n\tconst inputText = stringifyPayload(input.input);\n\tif (inputText) {\n\t\tlines.push(\"Input:\");\n\t\tlines.push(inputText);\n\t}\n\tif (input.error) {\n\t\tlines.push(\"Error:\");\n\t\tlines.push(input.error);\n\t} else if (input.output !== undefined) {\n\t\tconst outputText = stringifyPayload(input.output);\n\t\tif (outputText) {\n\t\t\tlines.push(\"Output:\");\n\t\t\tlines.push(outputText);\n\t\t}\n\t}\n\tif (typeof input.durationMs === \"number\" && Number.isFinite(input.durationMs)) {\n\t\tlines.push(`Duration: ${Math.max(0, Math.round(input.durationMs))}ms`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction updateMessageInEntry(\n\tentry: ClineTaskSessionEntry,\n\tmessageId: string,\n\tupdater: (currentMessage: ClineTaskMessage) => ClineTaskMessage,\n): ClineTaskMessage | null {\n\tconst messageIndex = entry.messages.findIndex((message) => message.id === messageId);\n\tif (messageIndex < 0) {\n\t\treturn null;\n\t}\n\tconst currentMessage = entry.messages[messageIndex];\n\tif (!currentMessage) {\n\t\treturn null;\n\t}\n\tconst nextMessage = updater(currentMessage);\n\tentry.messages[messageIndex] = nextMessage;\n\treturn nextMessage;\n}\n\nfunction getLatestAssistantMessage(entry: ClineTaskSessionEntry): ClineTaskMessage | null {\n\tfor (let index = entry.messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = entry.messages[index];\n\t\tif (message?.role === \"assistant\") {\n\t\t\treturn message;\n\t\t}\n\t}\n\treturn null;\n}\n"],"names":[],"mappings":"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","debugId":"fac69471-392b-5cbd-95c2-178d6ca436c2"}
|
|
@@ -47,6 +47,7 @@ export declare class InMemoryClineTaskSessionService implements ClineTaskSession
|
|
|
47
47
|
onSummary(listener: (summary: RuntimeTaskSessionSummary) => void): () => void;
|
|
48
48
|
onMessage(listener: (taskId: string, message: ClineTaskMessage) => void): () => void;
|
|
49
49
|
private emitTaskFailure;
|
|
50
|
+
private dispatchResolvedTaskInput;
|
|
50
51
|
startTaskSession(request: StartClineTaskSessionRequest): Promise<RuntimeTaskSessionSummary>;
|
|
51
52
|
stopTaskSession(taskId: string): Promise<RuntimeTaskSessionSummary | null>;
|
|
52
53
|
abortTaskSession(taskId: string): Promise<RuntimeTaskSessionSummary | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-task-session-service.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-task-session-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cline-task-session-service.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-task-session-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="4e409993-3fea-5c84-979b-3a831de5c01f")}catch(e){}}();
|
|
3
3
|
import { isHomeAgentSessionId } from "../core/home-agent-session.js";
|
|
4
4
|
import { resolveHomeAgentAppendSystemPrompt } from "../prompts/append-system-prompt.js";
|
|
5
5
|
import { captureTaskTurnCheckpoint, deleteTaskTurnCheckpointRef } from "../workspace/turn-checkpoints.js";
|
|
@@ -92,6 +92,25 @@ export class InMemoryClineTaskSessionService {
|
|
|
92
92
|
});
|
|
93
93
|
this.emitSummary(errorSummary);
|
|
94
94
|
}
|
|
95
|
+
async dispatchResolvedTaskInput(input) {
|
|
96
|
+
if (this.sessionRuntime.getTaskSessionId(input.taskId)) {
|
|
97
|
+
return {
|
|
98
|
+
result: await this.sessionRuntime.sendTaskSessionInput(input.taskId, input.prompt, input.mode, input.images, input.delivery),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const persistedSnapshot = await this.sessionRuntime.readPersistedTaskSession(input.taskId);
|
|
102
|
+
const restartedSession = await this.sessionRuntime.restartTaskSession({
|
|
103
|
+
taskId: input.taskId,
|
|
104
|
+
prompt: input.prompt,
|
|
105
|
+
mode: input.mode,
|
|
106
|
+
images: input.images,
|
|
107
|
+
initialMessages: persistedSnapshot?.messages,
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
result: restartedSession.result,
|
|
111
|
+
warnings: restartedSession.warnings,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
95
114
|
async startTaskSession(request) {
|
|
96
115
|
const existing = this.messageRepository.getTaskEntry(request.taskId);
|
|
97
116
|
if (existing && (existing.summary.state === "running" || existing.summary.state === "awaiting_review")) {
|
|
@@ -99,22 +118,35 @@ export class InMemoryClineTaskSessionService {
|
|
|
99
118
|
}
|
|
100
119
|
const providerId = request.providerId?.trim() || "anthropic";
|
|
101
120
|
const modelId = request.modelId?.trim() || "claude-sonnet-4-6";
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
121
|
+
const resolvedMode = request.mode ?? "act";
|
|
122
|
+
const persistedResumeSnapshot = request.resumeFromTrash
|
|
123
|
+
? await this.sessionRuntime.readPersistedTaskSession(request.taskId).catch(() => null)
|
|
124
|
+
: null;
|
|
125
|
+
const entry = request.resumeFromTrash && persistedResumeSnapshot
|
|
126
|
+
? createTaskEntryFromPersistedSession(request.taskId, persistedResumeSnapshot.messages, {
|
|
127
|
+
state: "awaiting_review",
|
|
128
|
+
mode: resolvedMode,
|
|
129
|
+
workspacePath: request.cwd,
|
|
130
|
+
startedAt: now(),
|
|
131
|
+
lastOutputAt: now(),
|
|
132
|
+
reviewReason: "attention",
|
|
133
|
+
})
|
|
134
|
+
: {
|
|
135
|
+
summary: {
|
|
136
|
+
...createDefaultSummary(request.taskId),
|
|
137
|
+
state: request.resumeFromTrash ? "awaiting_review" : "running",
|
|
138
|
+
mode: resolvedMode,
|
|
139
|
+
workspacePath: request.cwd,
|
|
140
|
+
startedAt: now(),
|
|
141
|
+
lastOutputAt: now(),
|
|
142
|
+
reviewReason: request.resumeFromTrash ? "attention" : null,
|
|
143
|
+
},
|
|
144
|
+
messages: [],
|
|
145
|
+
activeAssistantMessageId: null,
|
|
146
|
+
activeReasoningMessageId: null,
|
|
147
|
+
toolMessageIdByToolCallId: new Map(),
|
|
148
|
+
toolInputByToolCallId: new Map(),
|
|
149
|
+
};
|
|
118
150
|
this.messageRepository.setTaskEntry(request.taskId, entry);
|
|
119
151
|
this.pendingTurnCancelTaskIds.delete(request.taskId);
|
|
120
152
|
const normalizedPrompt = request.prompt.trim();
|
|
@@ -140,7 +172,7 @@ export class InMemoryClineTaskSessionService {
|
|
|
140
172
|
});
|
|
141
173
|
this.emitSummary(runningSummary);
|
|
142
174
|
}
|
|
143
|
-
this.emitSummary(summary);
|
|
175
|
+
this.emitSummary(entry.summary);
|
|
144
176
|
void (async () => {
|
|
145
177
|
const assistantCountBeforeStart = entry.messages.filter((message) => message.role === "assistant").length;
|
|
146
178
|
try {
|
|
@@ -159,10 +191,11 @@ export class InMemoryClineTaskSessionService {
|
|
|
159
191
|
taskId: request.taskId,
|
|
160
192
|
cwd: request.cwd,
|
|
161
193
|
prompt: runtimePrompt,
|
|
194
|
+
initialMessages: request.resumeFromTrash ? persistedResumeSnapshot?.messages : undefined,
|
|
162
195
|
images: request.images,
|
|
163
196
|
providerId,
|
|
164
197
|
modelId,
|
|
165
|
-
mode:
|
|
198
|
+
mode: resolvedMode,
|
|
166
199
|
apiKey: request.apiKey,
|
|
167
200
|
baseUrl: request.baseUrl,
|
|
168
201
|
systemPrompt,
|
|
@@ -190,7 +223,7 @@ export class InMemoryClineTaskSessionService {
|
|
|
190
223
|
this.emitTaskFailure(request.taskId, entry, "start", error);
|
|
191
224
|
}
|
|
192
225
|
})();
|
|
193
|
-
return cloneSummary(summary);
|
|
226
|
+
return cloneSummary(entry.summary);
|
|
194
227
|
}
|
|
195
228
|
async stopTaskSession(taskId) {
|
|
196
229
|
let entry = this.messageRepository.getTaskEntry(taskId);
|
|
@@ -280,6 +313,7 @@ export class InMemoryClineTaskSessionService {
|
|
|
280
313
|
this.pendingTurnCancelTaskIds.delete(taskId);
|
|
281
314
|
const normalized = text.trim();
|
|
282
315
|
const hasImages = Boolean(images && images.length > 0);
|
|
316
|
+
const effectiveMode = mode ?? entry.summary.mode ?? "act";
|
|
283
317
|
if (normalized.length === 0 && !hasImages) {
|
|
284
318
|
return null;
|
|
285
319
|
}
|
|
@@ -288,9 +322,12 @@ export class InMemoryClineTaskSessionService {
|
|
|
288
322
|
entry.messages.push(message);
|
|
289
323
|
this.emitMessage(taskId, message);
|
|
290
324
|
clearActiveTurnState(entry);
|
|
325
|
+
const queueDelivery = entry.summary.state === "running";
|
|
291
326
|
const waitingSummary = updateSummary(entry, {
|
|
292
327
|
state: "running",
|
|
328
|
+
mode: effectiveMode,
|
|
293
329
|
reviewReason: null,
|
|
330
|
+
warningMessage: null,
|
|
294
331
|
lastOutputAt: now(),
|
|
295
332
|
lastHookAt: now(),
|
|
296
333
|
latestHookActivity: {
|
|
@@ -306,8 +343,22 @@ export class InMemoryClineTaskSessionService {
|
|
|
306
343
|
this.emitSummary(waitingSummary);
|
|
307
344
|
const assistantCountBeforeSend = entry.messages.filter((message) => message.role === "assistant").length;
|
|
308
345
|
void this.ensureRuntimeSetup(entry.summary.workspacePath ?? "")
|
|
309
|
-
.then((runtimeSetup) =>
|
|
310
|
-
.
|
|
346
|
+
.then(async (runtimeSetup) => {
|
|
347
|
+
return await this.dispatchResolvedTaskInput({
|
|
348
|
+
taskId,
|
|
349
|
+
prompt: runtimeSetup.resolvePrompt(normalized),
|
|
350
|
+
mode: effectiveMode,
|
|
351
|
+
images,
|
|
352
|
+
delivery: queueDelivery ? "queue" : undefined,
|
|
353
|
+
});
|
|
354
|
+
})
|
|
355
|
+
.then(({ result, warnings }) => {
|
|
356
|
+
const warningMessage = formatStartWarnings(warnings);
|
|
357
|
+
if (warningMessage) {
|
|
358
|
+
this.emitSummary(updateSummary(entry, {
|
|
359
|
+
warningMessage,
|
|
360
|
+
}));
|
|
361
|
+
}
|
|
311
362
|
const agentText = readAgentResultText(result);
|
|
312
363
|
if (agentText) {
|
|
313
364
|
const assistantCountAfterSend = entry.messages.filter((message) => message.role === "assistant").length;
|
|
@@ -325,6 +376,7 @@ export class InMemoryClineTaskSessionService {
|
|
|
325
376
|
}
|
|
326
377
|
const summary = updateSummary(entry, {
|
|
327
378
|
state: "running",
|
|
379
|
+
mode: effectiveMode,
|
|
328
380
|
reviewReason: null,
|
|
329
381
|
lastOutputAt: now(),
|
|
330
382
|
});
|
|
@@ -349,6 +401,7 @@ export class InMemoryClineTaskSessionService {
|
|
|
349
401
|
const entry = createTaskEntryFromPersistedSession(taskId, snapshot.messages, {
|
|
350
402
|
agentId: "cline",
|
|
351
403
|
state: reboundState,
|
|
404
|
+
mode: existingEntry?.summary.mode ?? null,
|
|
352
405
|
reviewReason: reboundReviewReason,
|
|
353
406
|
workspacePath: persistedCwd || persistedWorkspaceRoot || null,
|
|
354
407
|
startedAt: Number.isFinite(startedAt) ? startedAt : null,
|
|
@@ -475,4 +528,4 @@ export function createInMemoryClineTaskSessionService(options = {}) {
|
|
|
475
528
|
return new InMemoryClineTaskSessionService(options);
|
|
476
529
|
}
|
|
477
530
|
//# sourceMappingURL=cline-task-session-service.js.map
|
|
478
|
-
//# debugId=
|
|
531
|
+
//# debugId=4e409993-3fea-5c84-979b-3a831de5c01f
|