kanban 0.1.36 → 0.1.37

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.
Files changed (56) hide show
  1. package/dist/cline-sdk/cline-event-adapter.d.ts.map +1 -1
  2. package/dist/cline-sdk/cline-event-adapter.js +4 -3
  3. package/dist/cline-sdk/cline-event-adapter.js.map +1 -1
  4. package/dist/cline-sdk/cline-mcp-runtime-service.d.ts +14 -1
  5. package/dist/cline-sdk/cline-mcp-runtime-service.d.ts.map +1 -1
  6. package/dist/cline-sdk/cline-mcp-runtime-service.js +135 -106
  7. package/dist/cline-sdk/cline-mcp-runtime-service.js.map +1 -1
  8. package/dist/cline-sdk/cline-mcp-settings-service.d.ts.map +1 -1
  9. package/dist/cline-sdk/cline-mcp-settings-service.js +56 -137
  10. package/dist/cline-sdk/cline-mcp-settings-service.js.map +1 -1
  11. package/dist/cline-sdk/cline-provider-service.d.ts +2 -1
  12. package/dist/cline-sdk/cline-provider-service.d.ts.map +1 -1
  13. package/dist/cline-sdk/cline-provider-service.js +67 -3
  14. package/dist/cline-sdk/cline-provider-service.js.map +1 -1
  15. package/dist/cline-sdk/cline-task-session-service.d.ts.map +1 -1
  16. package/dist/cline-sdk/cline-task-session-service.js +19 -11
  17. package/dist/cline-sdk/cline-task-session-service.js.map +1 -1
  18. package/dist/cline-sdk/cline-tool-call-display.d.ts.map +1 -1
  19. package/dist/cline-sdk/cline-tool-call-display.js +75 -15
  20. package/dist/cline-sdk/cline-tool-call-display.js.map +1 -1
  21. package/dist/cline-sdk/sdk-provider-boundary.d.ts +9 -0
  22. package/dist/cline-sdk/sdk-provider-boundary.d.ts.map +1 -1
  23. package/dist/cline-sdk/sdk-provider-boundary.js +19 -2
  24. package/dist/cline-sdk/sdk-provider-boundary.js.map +1 -1
  25. package/dist/cline-sdk/sdk-runtime-boundary.d.ts +6 -0
  26. package/dist/cline-sdk/sdk-runtime-boundary.d.ts.map +1 -1
  27. package/dist/cline-sdk/sdk-runtime-boundary.js +18 -6
  28. package/dist/cline-sdk/sdk-runtime-boundary.js.map +1 -1
  29. package/dist/core/api-contract.d.ts +123 -92
  30. package/dist/core/api-contract.d.ts.map +1 -1
  31. package/dist/core/api-contract.js +57 -33
  32. package/dist/core/api-contract.js.map +1 -1
  33. package/dist/core/api-validation.d.ts.map +1 -1
  34. package/dist/core/api-validation.js +19 -23
  35. package/dist/core/api-validation.js.map +1 -1
  36. package/dist/server/runtime-server.d.ts.map +1 -1
  37. package/dist/server/runtime-server.js +15 -4
  38. package/dist/server/runtime-server.js.map +1 -1
  39. package/dist/server/runtime-state-hub.d.ts +3 -0
  40. package/dist/server/runtime-state-hub.d.ts.map +1 -1
  41. package/dist/server/runtime-state-hub.js +31 -2
  42. package/dist/server/runtime-state-hub.js.map +1 -1
  43. package/dist/trpc/app-router.d.ts +84 -55
  44. package/dist/trpc/app-router.d.ts.map +1 -1
  45. package/dist/trpc/app-router.js +12 -6
  46. package/dist/trpc/app-router.js.map +1 -1
  47. package/dist/trpc/runtime-api.d.ts +3 -1
  48. package/dist/trpc/runtime-api.d.ts.map +1 -1
  49. package/dist/trpc/runtime-api.js +44 -33
  50. package/dist/trpc/runtime-api.js.map +1 -1
  51. package/dist/web-ui/assets/{index-BhOl2p-a.css → index-CbAn8M8U.css} +37 -4
  52. package/dist/web-ui/assets/{index-Bh3xX6hL.js → index-pqlJfr56.js} +16232 -15939
  53. package/dist/web-ui/assets/index-pqlJfr56.js.map +1 -0
  54. package/dist/web-ui/index.html +2 -2
  55. package/package.json +4 -4
  56. package/dist/web-ui/assets/index-Bh3xX6hL.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cline-event-adapter.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,OAAO,EAGN,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAc1B,MAAM,0BAA0B,CAAC;AAalC,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,qBAAqB,CAAC;IAC7B,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACjE;AAgHD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOnE;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CA+U/E"}
1
+ {"version":3,"file":"cline-event-adapter.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGzE,OAAO,EAGN,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAc1B,MAAM,0BAA0B,CAAC;AAalC,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,qBAAqB,CAAC;IAC7B,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACjE;AAgHD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOnE;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CAgV/E"}
@@ -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]="74fdaf85-7e0f-5c3f-9d99-342cfdd743cb")}catch(e){}}();
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]="68d3eee9-3187-5f22-bbd4-c289d298af8f")}catch(e){}}();
3
3
  import { formatClineToolCallLabel, getClineToolCallDisplay } from "./cline-tool-call-display.js";
4
4
  import { appendAssistantChunk, appendReasoningChunk, canReturnToRunning, clearActiveTurnState, createAssistantMessage, createMessage, createReasoningMessage, finishToolCallMessage, isClineUserAttentionTool, latestAssistantMessageMatches, now, setOrCreateAssistantMessage, setOrCreateReasoningMessage, startToolCallMessage, updateSummary, } from "./cline-session-state.js";
5
5
  function toPreviewText(value, maxLength = 160) {
@@ -137,8 +137,9 @@ export function applyClineSessionEvent(input) {
137
137
  ...(recoverable
138
138
  ? {}
139
139
  : {
140
- state: "failed",
140
+ state: "awaiting_review",
141
141
  reviewReason: "error",
142
+ warningMessage: errorMessage ?? "Unknown agent error",
142
143
  }),
143
144
  lastOutputAt: now(),
144
145
  lastHookAt: now(),
@@ -465,4 +466,4 @@ function isLikelySerializedAgentEventChunk(chunk) {
465
466
  }
466
467
  }
467
468
  //# sourceMappingURL=cline-event-adapter.js.map
468
- //# debugId=74fdaf85-7e0f-5c3f-9d99-342cfdd743cb
469
+ //# debugId=68d3eee9-3187-5f22-bbd4-c289d298af8f
@@ -1 +1 @@
1
- {"version":3,"file":"cline-event-adapter.js","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"sourceRoot":"","sourcesContent":["// Translates raw SDK session events into Kanban summary and message mutations.\n// Keep protocol-specific parsing here so the runtime and repository can stay\n// focused on lifecycle, storage, and task-facing orchestration.\nimport type { RuntimeTaskSessionSummary } from \"../core/api-contract.js\";\nimport { formatClineToolCallLabel, getClineToolCallDisplay } from \"./cline-tool-call-display.js\";\nimport type { ClineSdkAgentEvent, ClineSdkSessionEvent } from \"./sdk-runtime-boundary.js\";\nimport {\n\tappendAssistantChunk,\n\tappendReasoningChunk,\n\ttype ClineTaskMessage,\n\ttype ClineTaskSessionEntry,\n\tcanReturnToRunning,\n\tclearActiveTurnState,\n\tcreateAssistantMessage,\n\tcreateMessage,\n\tcreateReasoningMessage,\n\tfinishToolCallMessage,\n\tisClineUserAttentionTool,\n\tlatestAssistantMessageMatches,\n\tnow,\n\tsetOrCreateAssistantMessage,\n\tsetOrCreateReasoningMessage,\n\tstartToolCallMessage,\n\tupdateSummary,\n} from \"./cline-session-state.js\";\n\nfunction toPreviewText(value: string | null | undefined, maxLength = 160): string | null {\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\tconst normalized = value.replace(/\\s+/g, \" \").trim();\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\treturn normalized.length > maxLength ? `${normalized.slice(0, maxLength - 1).trimEnd()}…` : normalized;\n}\n\nexport interface ApplyClineSessionEventInput {\n\tevent: unknown;\n\ttaskId: string;\n\tentry: ClineTaskSessionEntry;\n\tpendingTurnCancelTaskIds: Set<string>;\n\temitSummary: (summary: RuntimeTaskSessionSummary) => void;\n\temitMessage: (taskId: string, message: ClineTaskMessage) => void;\n}\n\ntype ClineSdkChunkEvent = Extract<ClineSdkSessionEvent, { type: \"chunk\" }>;\ntype ClineSdkHookEvent = Extract<ClineSdkSessionEvent, { type: \"hook\" }>;\ntype ClineSdkEndedEvent = Extract<ClineSdkSessionEvent, { type: \"ended\" }>;\ntype ClineSdkStatusEvent = Extract<ClineSdkSessionEvent, { type: \"status\" }>;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction readAgentEvent(event: unknown): ClineSdkAgentEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"agent_event\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload) {\n\t\treturn null;\n\t}\n\tconst agentEvent = asRecord(payload.event);\n\tif (!agentEvent || typeof agentEvent.type !== \"string\") {\n\t\treturn null;\n\t}\n\treturn agentEvent as unknown as ClineSdkAgentEvent;\n}\n\nfunction readChunkEvent(event: unknown): ClineSdkChunkEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"chunk\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\" || typeof payload.chunk !== \"string\") {\n\t\treturn null;\n\t}\n\tif (payload.stream !== \"stdout\" && payload.stream !== \"stderr\" && payload.stream !== \"agent\") {\n\t\treturn null;\n\t}\n\treturn { type: \"chunk\", payload: payload as ClineSdkChunkEvent[\"payload\"] };\n}\n\nfunction readHookEvent(event: unknown): ClineSdkHookEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"hook\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\") {\n\t\treturn null;\n\t}\n\treturn { type: \"hook\", payload: payload as ClineSdkHookEvent[\"payload\"] };\n}\n\nfunction readEndedEvent(event: unknown): ClineSdkEndedEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"ended\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\" || typeof payload.reason !== \"string\") {\n\t\treturn null;\n\t}\n\treturn { type: \"ended\", payload: payload as ClineSdkEndedEvent[\"payload\"] };\n}\n\nfunction readStatusEvent(event: unknown): ClineSdkStatusEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"status\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\" || typeof payload.status !== \"string\") {\n\t\treturn null;\n\t}\n\treturn { type: \"status\", payload: payload as ClineSdkStatusEvent[\"payload\"] };\n}\n\nfunction getRetainedClineToolActivity(entry: ClineTaskSessionEntry): {\n\ttoolName: string | null;\n\ttoolInputSummary: string | null;\n} {\n\tconst latestHookActivity = entry.summary.latestHookActivity;\n\tif (!latestHookActivity || latestHookActivity.source !== \"cline-sdk\" || !latestHookActivity.toolName) {\n\t\treturn {\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t};\n\t}\n\n\treturn {\n\t\ttoolName: latestHookActivity.toolName,\n\t\ttoolInputSummary: latestHookActivity.toolInputSummary ?? null,\n\t};\n}\n\nfunction extractAgentErrorMessage(error: unknown): string | null {\n\tif (typeof error === \"string\") {\n\t\tconst normalized = error.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\tif (error instanceof Error) {\n\t\tconst normalized = error.message.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\tif (error && typeof error === \"object\" && \"message\" in error && typeof error.message === \"string\") {\n\t\tconst normalized = error.message.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\treturn null;\n}\n\nexport function extractClineSessionId(event: unknown): string | null {\n\tconst record = asRecord(event);\n\tif (!record) {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\treturn payload && typeof payload.sessionId === \"string\" ? payload.sessionId : null;\n}\n\n// Translate raw SDK events into Kanban summary and chat mutations so the session service can stay focused on host ownership.\nexport function applyClineSessionEvent(input: ApplyClineSessionEventInput): void {\n\tconst { entry, event, taskId } = input;\n\tconst agentEvent = readAgentEvent(event);\n\tconst chunkEvent = readChunkEvent(event);\n\tconst hookEvent = readHookEvent(event);\n\tconst endedEvent = readEndedEvent(event);\n\tconst statusEvent = readStatusEvent(event);\n\n\tif (agentEvent?.type === \"error\") {\n\t\tconst errorMessage =\n\t\t\t\"error\" in agentEvent ? extractAgentErrorMessage(agentEvent.error) : null;\n\t\tconst recoverable = typeof agentEvent.recoverable === \"boolean\" ? agentEvent.recoverable : false;\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\tif (!recoverable) {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\tif (recoverable && errorMessage) {\n\t\t\tconst retryMsg = createMessage(taskId, \"system\", `Retrying: ${errorMessage}`);\n\t\t\tentry.messages.push(retryMsg);\n\t\t\tinput.emitMessage(taskId, retryMsg);\n\t\t}\n\t\temitSummary(input, {\n\t\t\t...(recoverable\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tstate: \"failed\",\n\t\t\t\t\t\treviewReason: \"error\",\n\t\t\t\t\t}),\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: recoverable\n\t\t\t\t\t? `Retrying after error: ${errorMessage ?? \"Unknown agent error\"}`\n\t\t\t\t\t: `Agent error: ${errorMessage ?? \"Unknown agent error\"}`,\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: recoverable ? null : (errorMessage ?? \"Unknown agent error\"),\n\t\t\t\thookEventName: \"agent_error\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_start\" && agentEvent.contentType === \"text\") {\n\t\tconst accumulated = typeof agentEvent.accumulated === \"string\" ? agentEvent.accumulated : null;\n\t\tconst text = typeof agentEvent.text === \"string\" ? agentEvent.text : null;\n\t\tif (typeof accumulated === \"string\") {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, accumulated) ??\n\t\t\t\tcreateAssistantMessage(entry, taskId, accumulated);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t} else if (typeof text === \"string\" && text.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, text));\n\t\t}\n\t\tconst previewText = toPreviewText(accumulated ?? text);\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: previewText ?? \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: previewText,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"notice\") {\n\t\tconst message = typeof agentEvent.message === \"string\" ? agentEvent.message.trim() : \"\";\n\t\tif (message) {\n\t\t\tconst displayRole = typeof agentEvent.displayRole === \"string\" ? agentEvent.displayRole : \"system\";\n\t\t\tconst reason = typeof agentEvent.reason === \"string\" ? agentEvent.reason : null;\n\t\t\tconst noticeType = typeof agentEvent.noticeType === \"string\" ? agentEvent.noticeType : null;\n\t\t\tconst normalizedRole = displayRole === \"status\" ? \"status\" : \"system\";\n\t\t\tconst noticeMessage = createMessage(taskId, normalizedRole, message);\n\t\t\tnoticeMessage.meta = {\n\t\t\t\thookEventName: \"agent_notice\",\n\t\t\t\tmessageKind: noticeType,\n\t\t\t\tdisplayRole,\n\t\t\t\treason,\n\t\t\t};\n\t\t\tentry.messages.push(noticeMessage);\n\t\t\tinput.emitMessage(taskId, noticeMessage);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"done\") {\n\t\tconst finalText = typeof agentEvent.text === \"string\" ? agentEvent.text.trim() : \"\";\n\t\tif (finalText) {\n\t\t\tconst message = setOrCreateAssistantMessage(entry, taskId, finalText);\n\t\t\tif (message) {\n\t\t\t\tinput.emitMessage(taskId, message);\n\t\t\t} else if (!latestAssistantMessageMatches(entry, finalText)) {\n\t\t\t\tconst assistantMessage = createMessage(taskId, \"assistant\", finalText);\n\t\t\t\tentry.messages.push(assistantMessage);\n\t\t\t\tinput.emitMessage(taskId, assistantMessage);\n\t\t\t}\n\t\t}\n\n\t\tconst doneReason = typeof agentEvent.reason === \"string\" ? agentEvent.reason : \"completed\";\n\t\tif (doneReason === \"aborted\" && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: finalText ? `Final: ${finalText}` : \"Waiting for review\",\n\t\t\t\ttoolName: null,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: finalText || null,\n\t\t\t\thookEventName: \"agent_end\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (doneReason === \"aborted\") {\n\t\t\tsummaryPatch.state = \"interrupted\";\n\t\t\tsummaryPatch.reviewReason = \"interrupted\";\n\t\t} else if (doneReason === \"error\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"error\";\n\t\t} else {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t}\n\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_start\" && agentEvent.contentType === \"reasoning\") {\n\t\tconst reasoning = typeof agentEvent.reasoning === \"string\" ? agentEvent.reasoning : null;\n\t\tif (reasoning && reasoning.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendReasoningChunk(entry, taskId, reasoning));\n\t\t\temitSummary(input, {\n\t\t\t\tstate: \"running\",\n\t\t\t\tlastOutputAt: now(),\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_end\" && agentEvent.contentType === \"reasoning\") {\n\t\tconst reasoning = typeof agentEvent.reasoning === \"string\" ? agentEvent.reasoning : null;\n\t\tif (reasoning) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateReasoningMessage(entry, taskId, reasoning) ?? createReasoningMessage(entry, taskId, reasoning);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeReasoningMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_start\" && agentEvent.contentType === \"tool\") {\n\t\tconst toolName = typeof agentEvent.toolName === \"string\" ? agentEvent.toolName : null;\n\t\tconst toolCallId = typeof agentEvent.toolCallId === \"string\" ? agentEvent.toolCallId : null;\n\t\tconst toolInput = agentEvent.input;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tstartToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\tinput: toolInput,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `Using ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_call\",\n\t\t\t\tnotificationType: isUserAttentionTool ? \"user_attention\" : null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && entry.summary.state === \"running\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t} else if (!isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_end\" && agentEvent.contentType === \"tool\") {\n\t\tconst toolName = typeof agentEvent.toolName === \"string\" ? agentEvent.toolName : null;\n\t\tconst toolCallId = typeof agentEvent.toolCallId === \"string\" ? agentEvent.toolCallId : null;\n\t\tconst toolOutput = agentEvent.output;\n\t\tconst toolError = typeof agentEvent.error === \"string\" ? agentEvent.error : null;\n\t\tconst durationMs = typeof agentEvent.durationMs === \"number\" ? agentEvent.durationMs : null;\n\t\tconst toolInput = toolCallId ? entry.toolInputByToolCallId.get(toolCallId) : undefined;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tfinishToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\toutput: toolOutput,\n\t\t\t\terror: toolError,\n\t\t\t\tdurationMs,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `${toolError ? \"Failed\" : \"Completed\"} ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_result\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_end\" && agentEvent.contentType === \"text\") {\n\t\tconst text = typeof agentEvent.text === \"string\" ? agentEvent.text : null;\n\t\tif (text) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, text) ?? createAssistantMessage(entry, taskId, text);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeAssistantMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (chunkEvent?.payload.stream === \"agent\") {\n\t\tconst chunk = chunkEvent.payload.chunk;\n\t\tif (chunk.length === 0 || isLikelySerializedAgentEventChunk(chunk)) {\n\t\t\treturn;\n\t\t}\n\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, chunk));\n\t\tconst previewText = toPreviewText(chunk);\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: previewText ?? \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: previewText,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (hookEvent) {\n\t\tconst hookEventName =\n\t\t\ttypeof hookEvent.payload.hookEventName === \"string\" ? hookEvent.payload.hookEventName : null;\n\t\tconst toolName = typeof hookEvent.payload.toolName === \"string\" ? hookEvent.payload.toolName : null;\n\t\tconst activityText = hookEventName && toolName ? `${hookEventName}: ${toolName}` : hookEventName;\n\t\temitSummary(input, {\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText,\n\t\t\t\ttoolName,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName,\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (endedEvent) {\n\t\tconst interrupted =\n\t\t\tendedEvent.payload.reason.includes(\"abort\") || endedEvent.payload.reason.includes(\"interrupt\");\n\t\tif (interrupted && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, {\n\t\t\tstate: interrupted ? \"interrupted\" : \"awaiting_review\",\n\t\t\treviewReason: interrupted ? \"interrupted\" : \"exit\",\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (statusEvent) {\n\t\tif (statusEvent.payload.status !== \"running\") {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\temitSummary(input, {\n\t\t\tstate:\n\t\t\t\tstatusEvent.payload.status === \"running\" &&\n\t\t\t\t!(entry.summary.state === \"awaiting_review\" && canReturnToRunning(entry.summary.reviewReason))\n\t\t\t\t\t? \"running\"\n\t\t\t\t\t: entry.summary.state,\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t}\n}\n\nfunction emitSummary(input: ApplyClineSessionEventInput, patch: Partial<RuntimeTaskSessionSummary>): void {\n\tinput.emitSummary(updateSummary(input.entry, patch));\n}\n\nfunction emitTurnCanceled(input: ApplyClineSessionEventInput): void {\n\tinput.pendingTurnCancelTaskIds.delete(input.taskId);\n\tclearActiveTurnState(input.entry);\n\temitSummary(input, {\n\t\tstate: \"idle\",\n\t\treviewReason: null,\n\t\tlastOutputAt: now(),\n\t\tlastHookAt: now(),\n\t\tlatestHookActivity: {\n\t\t\tactivityText: \"Turn canceled\",\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t\tfinalMessage: null,\n\t\t\thookEventName: \"turn_canceled\",\n\t\t\tnotificationType: null,\n\t\t\tsource: \"cline-sdk\",\n\t\t},\n\t});\n}\n\nfunction isLikelySerializedAgentEventChunk(chunk: string): boolean {\n\tconst trimmed = chunk.trim();\n\tif (!trimmed) {\n\t\treturn false;\n\t}\n\tif (!(trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\"))) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\treturn Boolean(parsed && typeof parsed === \"object\" && \"type\" in parsed);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"],"names":[],"mappings":"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","debugId":"74fdaf85-7e0f-5c3f-9d99-342cfdd743cb"}
1
+ {"version":3,"file":"cline-event-adapter.js","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"sourceRoot":"","sourcesContent":["// Translates raw SDK session events into Kanban summary and message mutations.\n// Keep protocol-specific parsing here so the runtime and repository can stay\n// focused on lifecycle, storage, and task-facing orchestration.\nimport type { RuntimeTaskSessionSummary } from \"../core/api-contract.js\";\nimport { formatClineToolCallLabel, getClineToolCallDisplay } from \"./cline-tool-call-display.js\";\nimport type { ClineSdkAgentEvent, ClineSdkSessionEvent } from \"./sdk-runtime-boundary.js\";\nimport {\n\tappendAssistantChunk,\n\tappendReasoningChunk,\n\ttype ClineTaskMessage,\n\ttype ClineTaskSessionEntry,\n\tcanReturnToRunning,\n\tclearActiveTurnState,\n\tcreateAssistantMessage,\n\tcreateMessage,\n\tcreateReasoningMessage,\n\tfinishToolCallMessage,\n\tisClineUserAttentionTool,\n\tlatestAssistantMessageMatches,\n\tnow,\n\tsetOrCreateAssistantMessage,\n\tsetOrCreateReasoningMessage,\n\tstartToolCallMessage,\n\tupdateSummary,\n} from \"./cline-session-state.js\";\n\nfunction toPreviewText(value: string | null | undefined, maxLength = 160): string | null {\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\tconst normalized = value.replace(/\\s+/g, \" \").trim();\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\treturn normalized.length > maxLength ? `${normalized.slice(0, maxLength - 1).trimEnd()}…` : normalized;\n}\n\nexport interface ApplyClineSessionEventInput {\n\tevent: unknown;\n\ttaskId: string;\n\tentry: ClineTaskSessionEntry;\n\tpendingTurnCancelTaskIds: Set<string>;\n\temitSummary: (summary: RuntimeTaskSessionSummary) => void;\n\temitMessage: (taskId: string, message: ClineTaskMessage) => void;\n}\n\ntype ClineSdkChunkEvent = Extract<ClineSdkSessionEvent, { type: \"chunk\" }>;\ntype ClineSdkHookEvent = Extract<ClineSdkSessionEvent, { type: \"hook\" }>;\ntype ClineSdkEndedEvent = Extract<ClineSdkSessionEvent, { type: \"ended\" }>;\ntype ClineSdkStatusEvent = Extract<ClineSdkSessionEvent, { type: \"status\" }>;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction readAgentEvent(event: unknown): ClineSdkAgentEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"agent_event\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload) {\n\t\treturn null;\n\t}\n\tconst agentEvent = asRecord(payload.event);\n\tif (!agentEvent || typeof agentEvent.type !== \"string\") {\n\t\treturn null;\n\t}\n\treturn agentEvent as unknown as ClineSdkAgentEvent;\n}\n\nfunction readChunkEvent(event: unknown): ClineSdkChunkEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"chunk\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\" || typeof payload.chunk !== \"string\") {\n\t\treturn null;\n\t}\n\tif (payload.stream !== \"stdout\" && payload.stream !== \"stderr\" && payload.stream !== \"agent\") {\n\t\treturn null;\n\t}\n\treturn { type: \"chunk\", payload: payload as ClineSdkChunkEvent[\"payload\"] };\n}\n\nfunction readHookEvent(event: unknown): ClineSdkHookEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"hook\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\") {\n\t\treturn null;\n\t}\n\treturn { type: \"hook\", payload: payload as ClineSdkHookEvent[\"payload\"] };\n}\n\nfunction readEndedEvent(event: unknown): ClineSdkEndedEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"ended\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\" || typeof payload.reason !== \"string\") {\n\t\treturn null;\n\t}\n\treturn { type: \"ended\", payload: payload as ClineSdkEndedEvent[\"payload\"] };\n}\n\nfunction readStatusEvent(event: unknown): ClineSdkStatusEvent | null {\n\tconst record = asRecord(event);\n\tif (!record || record.type !== \"status\") {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\tif (!payload || typeof payload.sessionId !== \"string\" || typeof payload.status !== \"string\") {\n\t\treturn null;\n\t}\n\treturn { type: \"status\", payload: payload as ClineSdkStatusEvent[\"payload\"] };\n}\n\nfunction getRetainedClineToolActivity(entry: ClineTaskSessionEntry): {\n\ttoolName: string | null;\n\ttoolInputSummary: string | null;\n} {\n\tconst latestHookActivity = entry.summary.latestHookActivity;\n\tif (!latestHookActivity || latestHookActivity.source !== \"cline-sdk\" || !latestHookActivity.toolName) {\n\t\treturn {\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t};\n\t}\n\n\treturn {\n\t\ttoolName: latestHookActivity.toolName,\n\t\ttoolInputSummary: latestHookActivity.toolInputSummary ?? null,\n\t};\n}\n\nfunction extractAgentErrorMessage(error: unknown): string | null {\n\tif (typeof error === \"string\") {\n\t\tconst normalized = error.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\tif (error instanceof Error) {\n\t\tconst normalized = error.message.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\tif (error && typeof error === \"object\" && \"message\" in error && typeof error.message === \"string\") {\n\t\tconst normalized = error.message.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\treturn null;\n}\n\nexport function extractClineSessionId(event: unknown): string | null {\n\tconst record = asRecord(event);\n\tif (!record) {\n\t\treturn null;\n\t}\n\tconst payload = asRecord(record.payload);\n\treturn payload && typeof payload.sessionId === \"string\" ? payload.sessionId : null;\n}\n\n// Translate raw SDK events into Kanban summary and chat mutations so the session service can stay focused on host ownership.\nexport function applyClineSessionEvent(input: ApplyClineSessionEventInput): void {\n\tconst { entry, event, taskId } = input;\n\tconst agentEvent = readAgentEvent(event);\n\tconst chunkEvent = readChunkEvent(event);\n\tconst hookEvent = readHookEvent(event);\n\tconst endedEvent = readEndedEvent(event);\n\tconst statusEvent = readStatusEvent(event);\n\n\tif (agentEvent?.type === \"error\") {\n\t\tconst errorMessage =\n\t\t\t\"error\" in agentEvent ? extractAgentErrorMessage(agentEvent.error) : null;\n\t\tconst recoverable = typeof agentEvent.recoverable === \"boolean\" ? agentEvent.recoverable : false;\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\tif (!recoverable) {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\tif (recoverable && errorMessage) {\n\t\t\tconst retryMsg = createMessage(taskId, \"system\", `Retrying: ${errorMessage}`);\n\t\t\tentry.messages.push(retryMsg);\n\t\t\tinput.emitMessage(taskId, retryMsg);\n\t\t}\n\t\temitSummary(input, {\n\t\t\t...(recoverable\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tstate: \"awaiting_review\",\n\t\t\t\t\t\treviewReason: \"error\",\n\t\t\t\t\t\twarningMessage: errorMessage ?? \"Unknown agent error\",\n\t\t\t\t\t}),\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: recoverable\n\t\t\t\t\t? `Retrying after error: ${errorMessage ?? \"Unknown agent error\"}`\n\t\t\t\t\t: `Agent error: ${errorMessage ?? \"Unknown agent error\"}`,\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: recoverable ? null : (errorMessage ?? \"Unknown agent error\"),\n\t\t\t\thookEventName: \"agent_error\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_start\" && agentEvent.contentType === \"text\") {\n\t\tconst accumulated = typeof agentEvent.accumulated === \"string\" ? agentEvent.accumulated : null;\n\t\tconst text = typeof agentEvent.text === \"string\" ? agentEvent.text : null;\n\t\tif (typeof accumulated === \"string\") {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, accumulated) ??\n\t\t\t\tcreateAssistantMessage(entry, taskId, accumulated);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t} else if (typeof text === \"string\" && text.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, text));\n\t\t}\n\t\tconst previewText = toPreviewText(accumulated ?? text);\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: previewText ?? \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: previewText,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"notice\") {\n\t\tconst message = typeof agentEvent.message === \"string\" ? agentEvent.message.trim() : \"\";\n\t\tif (message) {\n\t\t\tconst displayRole = typeof agentEvent.displayRole === \"string\" ? agentEvent.displayRole : \"system\";\n\t\t\tconst reason = typeof agentEvent.reason === \"string\" ? agentEvent.reason : null;\n\t\t\tconst noticeType = typeof agentEvent.noticeType === \"string\" ? agentEvent.noticeType : null;\n\t\t\tconst normalizedRole = displayRole === \"status\" ? \"status\" : \"system\";\n\t\t\tconst noticeMessage = createMessage(taskId, normalizedRole, message);\n\t\t\tnoticeMessage.meta = {\n\t\t\t\thookEventName: \"agent_notice\",\n\t\t\t\tmessageKind: noticeType,\n\t\t\t\tdisplayRole,\n\t\t\t\treason,\n\t\t\t};\n\t\t\tentry.messages.push(noticeMessage);\n\t\t\tinput.emitMessage(taskId, noticeMessage);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"done\") {\n\t\tconst finalText = typeof agentEvent.text === \"string\" ? agentEvent.text.trim() : \"\";\n\t\tif (finalText) {\n\t\t\tconst message = setOrCreateAssistantMessage(entry, taskId, finalText);\n\t\t\tif (message) {\n\t\t\t\tinput.emitMessage(taskId, message);\n\t\t\t} else if (!latestAssistantMessageMatches(entry, finalText)) {\n\t\t\t\tconst assistantMessage = createMessage(taskId, \"assistant\", finalText);\n\t\t\t\tentry.messages.push(assistantMessage);\n\t\t\t\tinput.emitMessage(taskId, assistantMessage);\n\t\t\t}\n\t\t}\n\n\t\tconst doneReason = typeof agentEvent.reason === \"string\" ? agentEvent.reason : \"completed\";\n\t\tif (doneReason === \"aborted\" && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: finalText ? `Final: ${finalText}` : \"Waiting for review\",\n\t\t\t\ttoolName: null,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: finalText || null,\n\t\t\t\thookEventName: \"agent_end\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (doneReason === \"aborted\") {\n\t\t\tsummaryPatch.state = \"interrupted\";\n\t\t\tsummaryPatch.reviewReason = \"interrupted\";\n\t\t} else if (doneReason === \"error\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"error\";\n\t\t} else {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t}\n\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_start\" && agentEvent.contentType === \"reasoning\") {\n\t\tconst reasoning = typeof agentEvent.reasoning === \"string\" ? agentEvent.reasoning : null;\n\t\tif (reasoning && reasoning.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendReasoningChunk(entry, taskId, reasoning));\n\t\t\temitSummary(input, {\n\t\t\t\tstate: \"running\",\n\t\t\t\tlastOutputAt: now(),\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_end\" && agentEvent.contentType === \"reasoning\") {\n\t\tconst reasoning = typeof agentEvent.reasoning === \"string\" ? agentEvent.reasoning : null;\n\t\tif (reasoning) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateReasoningMessage(entry, taskId, reasoning) ?? createReasoningMessage(entry, taskId, reasoning);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeReasoningMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_start\" && agentEvent.contentType === \"tool\") {\n\t\tconst toolName = typeof agentEvent.toolName === \"string\" ? agentEvent.toolName : null;\n\t\tconst toolCallId = typeof agentEvent.toolCallId === \"string\" ? agentEvent.toolCallId : null;\n\t\tconst toolInput = agentEvent.input;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tstartToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\tinput: toolInput,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `Using ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_call\",\n\t\t\t\tnotificationType: isUserAttentionTool ? \"user_attention\" : null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && entry.summary.state === \"running\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t} else if (!isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_end\" && agentEvent.contentType === \"tool\") {\n\t\tconst toolName = typeof agentEvent.toolName === \"string\" ? agentEvent.toolName : null;\n\t\tconst toolCallId = typeof agentEvent.toolCallId === \"string\" ? agentEvent.toolCallId : null;\n\t\tconst toolOutput = agentEvent.output;\n\t\tconst toolError = typeof agentEvent.error === \"string\" ? agentEvent.error : null;\n\t\tconst durationMs = typeof agentEvent.durationMs === \"number\" ? agentEvent.durationMs : null;\n\t\tconst toolInput = toolCallId ? entry.toolInputByToolCallId.get(toolCallId) : undefined;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tfinishToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\toutput: toolOutput,\n\t\t\t\terror: toolError,\n\t\t\t\tdurationMs,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `${toolError ? \"Failed\" : \"Completed\"} ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_result\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (agentEvent?.type === \"content_end\" && agentEvent.contentType === \"text\") {\n\t\tconst text = typeof agentEvent.text === \"string\" ? agentEvent.text : null;\n\t\tif (text) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, text) ?? createAssistantMessage(entry, taskId, text);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeAssistantMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (chunkEvent?.payload.stream === \"agent\") {\n\t\tconst chunk = chunkEvent.payload.chunk;\n\t\tif (chunk.length === 0 || isLikelySerializedAgentEventChunk(chunk)) {\n\t\t\treturn;\n\t\t}\n\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, chunk));\n\t\tconst previewText = toPreviewText(chunk);\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: previewText ?? \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: previewText,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (hookEvent) {\n\t\tconst hookEventName =\n\t\t\ttypeof hookEvent.payload.hookEventName === \"string\" ? hookEvent.payload.hookEventName : null;\n\t\tconst toolName = typeof hookEvent.payload.toolName === \"string\" ? hookEvent.payload.toolName : null;\n\t\tconst activityText = hookEventName && toolName ? `${hookEventName}: ${toolName}` : hookEventName;\n\t\temitSummary(input, {\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText,\n\t\t\t\ttoolName,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName,\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (endedEvent) {\n\t\tconst interrupted =\n\t\t\tendedEvent.payload.reason.includes(\"abort\") || endedEvent.payload.reason.includes(\"interrupt\");\n\t\tif (interrupted && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, {\n\t\t\tstate: interrupted ? \"interrupted\" : \"awaiting_review\",\n\t\t\treviewReason: interrupted ? \"interrupted\" : \"exit\",\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (statusEvent) {\n\t\tif (statusEvent.payload.status !== \"running\") {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\temitSummary(input, {\n\t\t\tstate:\n\t\t\t\tstatusEvent.payload.status === \"running\" &&\n\t\t\t\t!(entry.summary.state === \"awaiting_review\" && canReturnToRunning(entry.summary.reviewReason))\n\t\t\t\t\t? \"running\"\n\t\t\t\t\t: entry.summary.state,\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t}\n}\n\nfunction emitSummary(input: ApplyClineSessionEventInput, patch: Partial<RuntimeTaskSessionSummary>): void {\n\tinput.emitSummary(updateSummary(input.entry, patch));\n}\n\nfunction emitTurnCanceled(input: ApplyClineSessionEventInput): void {\n\tinput.pendingTurnCancelTaskIds.delete(input.taskId);\n\tclearActiveTurnState(input.entry);\n\temitSummary(input, {\n\t\tstate: \"idle\",\n\t\treviewReason: null,\n\t\tlastOutputAt: now(),\n\t\tlastHookAt: now(),\n\t\tlatestHookActivity: {\n\t\t\tactivityText: \"Turn canceled\",\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t\tfinalMessage: null,\n\t\t\thookEventName: \"turn_canceled\",\n\t\t\tnotificationType: null,\n\t\t\tsource: \"cline-sdk\",\n\t\t},\n\t});\n}\n\nfunction isLikelySerializedAgentEventChunk(chunk: string): boolean {\n\tconst trimmed = chunk.trim();\n\tif (!trimmed) {\n\t\treturn false;\n\t}\n\tif (!(trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\"))) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\treturn Boolean(parsed && typeof parsed === \"object\" && \"type\" in parsed);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"],"names":[],"mappings":";;AAIA,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEjG,OAAO,EACN,oBAAoB,EACpB,oBAAoB,EAGpB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,6BAA6B,EAC7B,GAAG,EACH,2BAA2B,EAC3B,2BAA2B,EAC3B,oBAAoB,EACpB,aAAa,GACb,MAAM,0BAA0B,CAAC;AAElC,SAAS,aAAa,CAAC,KAAgC,EAAE,SAAS,GAAG,GAAG;IACvE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;AACxG,CAAC;AAgBD,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvF,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,UAA2C,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAwC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAuC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAwC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC7F,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAyC,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,4BAA4B,CAAC,KAA4B;IAIjE,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC;IAC5D,IAAI,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;QACtG,OAAO;YACN,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACtB,CAAC;IACH,CAAC;IAED,OAAO;QACN,QAAQ,EAAE,kBAAkB,CAAC,QAAQ;QACrC,gBAAgB,EAAE,kBAAkB,CAAC,gBAAgB,IAAI,IAAI;KAC7D,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnG,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,6HAA6H;AAC7H,MAAM,UAAU,sBAAsB,CAAC,KAAkC;IACxE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACvC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE3C,IAAI,UAAU,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,YAAY,GACjB,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;QACjG,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,aAAa,YAAY,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,WAAW,CAAC,KAAK,EAAE;YAClB,GAAG,CAAC,WAAW;gBACd,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACA,KAAK,EAAE,iBAAiB;oBACxB,YAAY,EAAE,OAAO;oBACrB,cAAc,EAAE,YAAY,IAAI,qBAAqB;iBACrD,CAAC;YACJ,YAAY,EAAE,GAAG,EAAE;YACnB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY,EAAE,WAAW;oBACxB,CAAC,CAAC,yBAAyB,YAAY,IAAI,qBAAqB,EAAE;oBAClE,CAAC,CAAC,gBAAgB,YAAY,IAAI,qBAAqB,EAAE;gBAC1D,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;gBACvC,gBAAgB,EAAE,oBAAoB,CAAC,gBAAgB;gBACvD,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,qBAAqB,CAAC;gBAC1E,aAAa,EAAE,aAAa;gBAC5B,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,WAAW;aACnB;SACD,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,eAAe,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/F,MAAM,IAAI,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,OAAO,GACZ,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;gBACvD,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACpD,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;aAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QACvD,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACjE,WAAW,CAAC,KAAK,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,GAAG,EAAE;YACnB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY,EAAE,WAAW,IAAI,cAAc;gBAC3C,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;gBACvC,gBAAgB,EAAE,oBAAoB,CAAC,gBAAgB;gBACvD,YAAY,EAAE,WAAW;gBACzB,aAAa,EAAE,iBAAiB;gBAChC,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,WAAW;aACnB;SACD,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;YACnG,MAAM,MAAM,GAAG,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAChF,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5F,MAAM,cAAc,GAAG,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YACtE,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;YACrE,aAAa,CAAC,IAAI,GAAG;gBACpB,aAAa,EAAE,cAAc;gBAC7B,WAAW,EAAE,UAAU;gBACvB,WAAW;gBACX,MAAM;aACN,CAAC;YACF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACtE,IAAI,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,CAAC,6BAA6B,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC7D,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;gBACvE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBACtC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;YAC7C,CAAC;QACF,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;QAC3F,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO;QACR,CAAC;QAED,MAAM,YAAY,GAAuC;YACxD,YAAY,EAAE,GAAG,EAAE;YACnB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC,CAAC,oBAAoB;gBACtE,QAAQ,EAAE,IAAI;gBACd,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,SAAS,IAAI,IAAI;gBAC/B,aAAa,EAAE,WAAW;gBAC1B,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,WAAW;aACnB;SACD,CAAC;QACF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,KAAK,GAAG,aAAa,CAAC;YACnC,YAAY,CAAC,YAAY,GAAG,aAAa,CAAC;QAC3C,CAAC;aAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YACnC,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC;YACvC,YAAY,CAAC,YAAY,GAAG,OAAO,CAAC;QACrC,CAAC;aAAM,CAAC;YACP,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC;YACvC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC;QACpC,CAAC;QAED,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjC,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,eAAe,IAAI,UAAU,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QACpF,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;YAC1E,WAAW,CAAC,KAAK,EAAE;gBAClB,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,GAAG,EAAE;aACnB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,aAAa,IAAI,UAAU,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QAClF,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,IAAI,SAAS,EAAE,CAAC;YACf,MAAM,OAAO,GACZ,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YAC3G,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACtC,WAAW,CAAC,KAAK,EAAE;YAClB,YAAY,EAAE,GAAG,EAAE;SACnB,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,eAAe,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC/E,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;QACnC,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC/D,KAAK,CAAC,WAAW,CAChB,MAAM,EACN,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE;YACnC,QAAQ;YACR,UAAU;YACV,KAAK,EAAE,SAAS;SAChB,CAAC,CACF,CAAC;QACF,MAAM,YAAY,GAAuC;YACxD,YAAY,EAAE,GAAG,EAAE;YACnB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY,EAAE,SAAS,wBAAwB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE;gBACjG,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,gBAAgB,EAAE,WAAW,CAAC,YAAY;gBAC1C,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,WAAW;gBAC1B,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI;gBAC/D,MAAM,EAAE,WAAW;aACnB;SACD,CAAC;QACF,IAAI,mBAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9D,YAAY,CAAC,KAAK,GAAG,iBAAiB,CAAC;YACvC,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC;QACpC,CAAC;aAAM,IAAI,CAAC,mBAAmB,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACnF,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;YAC/B,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;QAClC,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjC,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,aAAa,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;QACrC,MAAM,SAAS,GAAG,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5F,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,WAAW,GAAG,uBAAuB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC/D,KAAK,CAAC,WAAW,CAChB,MAAM,EACN,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE;YACpC,QAAQ;YACR,UAAU;YACV,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,SAAS;YAChB,UAAU;SACV,CAAC,CACF,CAAC;QACF,MAAM,YAAY,GAAuC;YACxD,YAAY,EAAE,GAAG,EAAE;YACnB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,IAAI,wBAAwB,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,CAAC,YAAY,CAAC,EAAE;gBACjI,QAAQ,EAAE,WAAW,CAAC,QAAQ;gBAC9B,gBAAgB,EAAE,WAAW,CAAC,YAAY;gBAC1C,YAAY,EAAE,IAAI;gBAClB,aAAa,EAAE,aAAa;gBAC5B,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,WAAW;aACnB;SACD,CAAC;QACF,IAAI,mBAAmB,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3E,YAAY,CAAC,KAAK,GAAG,SAAS,CAAC;YAC/B,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC;QAClC,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACjC,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,IAAI,KAAK,aAAa,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,OAAO,GACZ,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACjG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;QACtC,WAAW,CAAC,KAAK,EAAE;YAClB,YAAY,EAAE,GAAG,EAAE;SACnB,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,iCAAiC,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO;QACR,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACjE,WAAW,CAAC,KAAK,EAAE;YAClB,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,GAAG,EAAE;YACnB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY,EAAE,WAAW,IAAI,cAAc;gBAC3C,QAAQ,EAAE,oBAAoB,CAAC,QAAQ;gBACvC,gBAAgB,EAAE,oBAAoB,CAAC,gBAAgB;gBACvD,YAAY,EAAE,WAAW;gBACzB,aAAa,EAAE,iBAAiB;gBAChC,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,WAAW;aACnB;SACD,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,aAAa,GAClB,OAAO,SAAS,CAAC,OAAO,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,MAAM,QAAQ,GAAG,OAAO,SAAS,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACpG,MAAM,YAAY,GAAG,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QACjG,WAAW,CAAC,KAAK,EAAE;YAClB,UAAU,EAAE,GAAG,EAAE;YACjB,kBAAkB,EAAE;gBACnB,YAAY;gBACZ,QAAQ;gBACR,gBAAgB,EAAE,IAAI;gBACtB,YAAY,EAAE,IAAI;gBAClB,aAAa;gBACb,gBAAgB,EAAE,IAAI;gBACtB,MAAM,EAAE,WAAW;aACnB;SACD,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QAChB,MAAM,WAAW,GAChB,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChG,IAAI,WAAW,IAAI,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,OAAO;QACR,CAAC;QACD,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,WAAW,CAAC,KAAK,EAAE;YAClB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB;YACtD,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM;YAClD,YAAY,EAAE,GAAG,EAAE;SACnB,CAAC,CAAC;QACH,OAAO;IACR,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACjB,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9C,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,WAAW,CAAC,KAAK,EAAE;YAClB,KAAK,EACJ,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;gBACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,iBAAiB,IAAI,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAC7F,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK;YACvB,YAAY,EAAE,GAAG,EAAE;SACnB,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAS,WAAW,CAAC,KAAkC,EAAE,KAAyC;IACjG,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkC;IAC3D,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,WAAW,CAAC,KAAK,EAAE;QAClB,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,GAAG,EAAE;QACnB,UAAU,EAAE,GAAG,EAAE;QACjB,kBAAkB,EAAE;YACnB,YAAY,EAAE,eAAe;YAC7B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,eAAe;YAC9B,gBAAgB,EAAE,IAAI;YACtB,MAAM,EAAE,WAAW;SACnB;KACD,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,KAAa;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC","debugId":"68d3eee9-3187-5f22-bbd4-c289d298af8f"}
@@ -25,5 +25,18 @@ export interface ClineMcpRuntimeService {
25
25
  onAuthorizationUrl?: (url: string) => void;
26
26
  }): Promise<ClineMcpServerAuthResult>;
27
27
  }
28
- export declare function createClineMcpRuntimeService(): ClineMcpRuntimeService;
28
+ export interface ClineMcpOauthCallbackResponse {
29
+ statusCode: number;
30
+ body: string;
31
+ }
32
+ export interface CreateClineMcpRuntimeServiceOptions {
33
+ onAuthStatusesChanged?: (statuses: ClineMcpServerAuthStatus[]) => void | Promise<void>;
34
+ }
35
+ export declare function handleClineMcpOauthCallback(requestUrl: URL): Promise<ClineMcpOauthCallbackResponse | null>;
36
+ export declare function startOauthCallbackListener(timeoutMs: number): Promise<{
37
+ redirectUrl: string;
38
+ awaitAuthorizationCode: () => Promise<string>;
39
+ close: () => Promise<void>;
40
+ }>;
41
+ export declare function createClineMcpRuntimeService(options?: CreateClineMcpRuntimeServiceOptions): ClineMcpRuntimeService;
29
42
  //# sourceMappingURL=cline-mcp-runtime-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cline-mcp-runtime-service.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-mcp-runtime-service.ts"],"names":[],"mappings":"AAiBA,OAAO,EAMN,KAAK,UAAU,EACf,MAAM,4BAA4B,CAAC;AA0BpC,MAAM,WAAW,wBAAwB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,wBAAwB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACtC,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChD,eAAe,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACvD,eAAe,CAAC,KAAK,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACtC;AA0hBD,wBAAgB,4BAA4B,IAAI,sBAAsB,CAgLrE"}
1
+ {"version":3,"file":"cline-mcp-runtime-service.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-mcp-runtime-service.ts"],"names":[],"mappings":"AAoBA,OAAO,EAMN,KAAK,UAAU,EACf,MAAM,4BAA4B,CAAC;AA8CpC,MAAM,WAAW,wBAAwB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,wBAAwB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACtC,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChD,eAAe,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACvD,eAAe,CAAC,KAAK,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,6BAA6B;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mCAAmC;IACnD,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,wBAAwB,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvF;AAsbD,wBAAsB,2BAA2B,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,CAuDhH;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5E,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B,CAAC,CA+CD;AAED,wBAAgB,4BAA4B,CAC3C,OAAO,GAAE,mCAAwC,GAC/C,sBAAsB,CA0LxB"}
@@ -1,21 +1,29 @@
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]="cff64350-0cea-540b-bc64-1e95f7767bd9")}catch(e){}}();
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]="aa9ef6d7-5e15-520c-a7d1-fd18b80f07e0")}catch(e){}}();
3
3
  import { randomUUID } from "node:crypto";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
- import { createServer } from "node:http";
6
5
  import { dirname, join, resolve } from "node:path";
7
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
8
6
  import { UnauthorizedError } from "@modelcontextprotocol/sdk/client/auth.js";
7
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
9
8
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
10
9
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
11
10
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
12
11
  import { z } from "zod";
12
+ import { buildKanbanRuntimeUrl } from "../core/runtime-endpoint.js";
13
13
  import { lockedFileSystem } from "../fs/locked-file-system.js";
14
14
  import { createClineMcpSettingsService, resolveMcpSettingsPath } from "./cline-mcp-settings-service.js";
15
15
  import { createSdkInMemoryMcpManager, createSdkMcpTools, } from "./sdk-provider-boundary.js";
16
16
  const DEFAULT_AUTH_TIMEOUT_MS = 3 * 60 * 1000;
17
- const OAUTH_CALLBACK_HOST = "127.0.0.1";
18
17
  const OAUTH_CALLBACK_PATH = "/kanban-mcp/mcp-oauth-callback";
18
+ const OAUTH_CALLBACK_REQUEST_ID_PARAM = "requestId";
19
+ const CALLBACK_RESPONSE_HTML = {
20
+ success: "<html><body><h1>Authorization complete</h1><p>You can close this tab and return to Cline.</p></body></html>",
21
+ failure: "<html><body><h1>OAuth failed</h1><p>You can close this tab.</p></body></html>",
22
+ missingCode: "<html><body><h1>Missing authorization code</h1><p>You can close this tab.</p></body></html>",
23
+ expired: "<html><body><h1>Authorization session expired</h1><p>Return to Cline and run Connect OAuth again.</p></body></html>",
24
+ missingRequestId: "<html><body><h1>Invalid authorization callback</h1><p>Return to Cline and run Connect OAuth again.</p></body></html>",
25
+ };
26
+ const pendingOauthCallbacksByRequestId = new Map();
19
27
  const oauthServerStateSchema = z.object({
20
28
  clientInformation: z.record(z.string(), z.unknown()).optional(),
21
29
  tokens: z.record(z.string(), z.unknown()).optional(),
@@ -114,37 +122,54 @@ function hasAccessToken(tokens) {
114
122
  return typeof accessToken === "string" && accessToken.trim().length > 0;
115
123
  }
116
124
  function toMcpRegistration(server) {
125
+ if (server.type === "stdio") {
126
+ return {
127
+ name: server.name,
128
+ disabled: server.disabled,
129
+ transport: {
130
+ type: "stdio",
131
+ command: server.command,
132
+ args: server.args,
133
+ cwd: server.cwd,
134
+ env: server.env,
135
+ },
136
+ };
137
+ }
117
138
  return {
118
139
  name: server.name,
119
140
  disabled: server.disabled,
120
- transport: server.transport,
141
+ transport: {
142
+ type: server.type,
143
+ url: server.url,
144
+ headers: server.headers,
145
+ },
121
146
  };
122
147
  }
123
148
  function createTransport(input) {
124
- if (input.server.transport.type === "stdio") {
149
+ if (input.server.type === "stdio") {
125
150
  return new StdioClientTransport({
126
- command: input.server.transport.command,
127
- ...(input.server.transport.args ? { args: input.server.transport.args } : {}),
128
- ...(input.server.transport.cwd ? { cwd: input.server.transport.cwd } : {}),
129
- ...(input.server.transport.env ? { env: input.server.transport.env } : {}),
151
+ command: input.server.command,
152
+ ...(input.server.args ? { args: input.server.args } : {}),
153
+ ...(input.server.cwd ? { cwd: input.server.cwd } : {}),
154
+ ...(input.server.env ? { env: input.server.env } : {}),
130
155
  stderr: "ignore",
131
156
  });
132
157
  }
133
- if (input.server.transport.type === "sse") {
134
- return new SSEClientTransport(new URL(input.server.transport.url), {
158
+ if (input.server.type === "sse") {
159
+ return new SSEClientTransport(new URL(input.server.url), {
135
160
  authProvider: input.oauthProvider,
136
- requestInit: input.server.transport.headers
161
+ requestInit: input.server.headers
137
162
  ? {
138
- headers: input.server.transport.headers,
163
+ headers: input.server.headers,
139
164
  }
140
165
  : undefined,
141
166
  });
142
167
  }
143
- return new StreamableHTTPClientTransport(new URL(input.server.transport.url), {
168
+ return new StreamableHTTPClientTransport(new URL(input.server.url), {
144
169
  authProvider: input.oauthProvider,
145
- requestInit: input.server.transport.headers
170
+ requestInit: input.server.headers
146
171
  ? {
147
- headers: input.server.transport.headers,
172
+ headers: input.server.headers,
148
173
  }
149
174
  : undefined,
150
175
  });
@@ -154,7 +179,7 @@ function isAuthCapableTransport(transport) {
154
179
  }
155
180
  function createOauthClientMetadata(redirectUrl) {
156
181
  return {
157
- client_name: "Kanban MCP Client",
182
+ client_name: "Cline",
158
183
  redirect_uris: [redirectUrl],
159
184
  grant_types: ["authorization_code", "refresh_token"],
160
185
  response_types: ["code"],
@@ -291,14 +316,14 @@ class RuntimeMcpServerClient {
291
316
  this.oauthSettingsPath = oauthSettingsPath;
292
317
  }
293
318
  async createAuthProviderContext() {
294
- if (this.server.transport.type === "stdio") {
319
+ if (this.server.type === "stdio") {
295
320
  return null;
296
321
  }
297
322
  return await createOauthProviderContext({
298
323
  settingsPath: this.oauthSettingsPath,
299
324
  serverName: this.server.name,
300
325
  redirectUrl: parseOauthSettings(this.oauthSettingsPath).servers[this.server.name]?.redirectUrl ??
301
- `http://${OAUTH_CALLBACK_HOST}${OAUTH_CALLBACK_PATH}`,
326
+ buildKanbanRuntimeUrl(OAUTH_CALLBACK_PATH),
302
327
  });
303
328
  }
304
329
  formatUnauthorizedMessage(authUrl) {
@@ -385,82 +410,82 @@ class RuntimeMcpServerClient {
385
410
  }));
386
411
  }
387
412
  }
388
- async function startOauthCallbackListener(timeoutMs) {
413
+ function buildMcpOauthCallbackUrl(requestId) {
414
+ const callbackUrl = new URL(buildKanbanRuntimeUrl(OAUTH_CALLBACK_PATH));
415
+ callbackUrl.searchParams.set(OAUTH_CALLBACK_REQUEST_ID_PARAM, requestId);
416
+ return callbackUrl.toString();
417
+ }
418
+ export async function handleClineMcpOauthCallback(requestUrl) {
419
+ if (requestUrl.pathname !== OAUTH_CALLBACK_PATH) {
420
+ return null;
421
+ }
422
+ const requestId = requestUrl.searchParams.get(OAUTH_CALLBACK_REQUEST_ID_PARAM)?.trim();
423
+ if (!requestId) {
424
+ return {
425
+ statusCode: 400,
426
+ body: CALLBACK_RESPONSE_HTML.missingRequestId,
427
+ };
428
+ }
429
+ const pending = pendingOauthCallbacksByRequestId.get(requestId);
430
+ if (!pending) {
431
+ return {
432
+ statusCode: 410,
433
+ body: CALLBACK_RESPONSE_HTML.expired,
434
+ };
435
+ }
436
+ pendingOauthCallbacksByRequestId.delete(requestId);
437
+ clearTimeout(pending.timeoutHandle);
438
+ const errorValue = requestUrl.searchParams.get("error")?.trim();
439
+ const errorDescription = requestUrl.searchParams.get("error_description")?.trim();
440
+ const code = requestUrl.searchParams.get("code")?.trim();
441
+ if (errorValue) {
442
+ pending.rejectCode(new Error(errorDescription
443
+ ? `OAuth authorization failed: ${errorValue} (${errorDescription})`
444
+ : `OAuth authorization failed: ${errorValue}`));
445
+ return {
446
+ statusCode: 400,
447
+ body: CALLBACK_RESPONSE_HTML.failure,
448
+ };
449
+ }
450
+ if (!code) {
451
+ pending.rejectCode(new Error("OAuth callback did not include an authorization code."));
452
+ return {
453
+ statusCode: 400,
454
+ body: CALLBACK_RESPONSE_HTML.missingCode,
455
+ };
456
+ }
457
+ pending.resolveCode(code);
458
+ return {
459
+ statusCode: 200,
460
+ body: CALLBACK_RESPONSE_HTML.success,
461
+ };
462
+ }
463
+ export async function startOauthCallbackListener(timeoutMs) {
389
464
  let resolveCode = null;
390
465
  let rejectCode = null;
391
- let settled = false;
392
466
  let timeoutHandle = null;
467
+ const requestId = randomUUID();
393
468
  const codePromise = new Promise((resolve, reject) => {
394
469
  resolveCode = resolve;
395
470
  rejectCode = (error) => {
396
471
  reject(error);
397
472
  };
398
473
  });
399
- const server = createServer((request, response) => {
400
- const requestUrl = new URL(request.url ?? "/", `http://${OAUTH_CALLBACK_HOST}`);
401
- if (requestUrl.pathname !== OAUTH_CALLBACK_PATH) {
402
- response.statusCode = 404;
403
- response.setHeader("Content-Type", "text/plain; charset=utf-8");
404
- response.end("Not Found");
405
- return;
406
- }
407
- const errorValue = requestUrl.searchParams.get("error")?.trim();
408
- const errorDescription = requestUrl.searchParams.get("error_description")?.trim();
409
- const code = requestUrl.searchParams.get("code")?.trim();
410
- if (errorValue) {
411
- response.statusCode = 400;
412
- response.setHeader("Content-Type", "text/html; charset=utf-8");
413
- response.end("<html><body><h1>OAuth failed</h1><p>You can close this tab.</p></body></html>");
414
- if (!settled) {
415
- settled = true;
416
- rejectCode?.(new Error(errorDescription
417
- ? `OAuth authorization failed: ${errorValue} (${errorDescription})`
418
- : `OAuth authorization failed: ${errorValue}`));
419
- }
420
- return;
421
- }
422
- if (!code) {
423
- response.statusCode = 400;
424
- response.setHeader("Content-Type", "text/html; charset=utf-8");
425
- response.end("<html><body><h1>Missing authorization code</h1><p>You can close this tab.</p></body></html>");
426
- if (!settled) {
427
- settled = true;
428
- rejectCode?.(new Error("OAuth callback did not include an authorization code."));
429
- }
430
- return;
431
- }
432
- response.statusCode = 200;
433
- response.setHeader("Content-Type", "text/html; charset=utf-8");
434
- response.end("<html><body><h1>Authorization complete</h1><p>You can close this tab and return to Kanban.</p></body></html>");
435
- if (!settled) {
436
- settled = true;
437
- resolveCode?.(code);
438
- }
439
- });
440
- await new Promise((resolveListen, rejectListen) => {
441
- server.once("error", (error) => {
442
- rejectListen(error);
443
- });
444
- server.listen(0, OAUTH_CALLBACK_HOST, () => {
445
- resolveListen();
446
- });
447
- });
448
474
  timeoutHandle = setTimeout(() => {
449
- if (settled) {
475
+ if (!pendingOauthCallbacksByRequestId.delete(requestId)) {
450
476
  return;
451
477
  }
452
- settled = true;
453
478
  rejectCode?.(new Error("Timed out waiting for MCP OAuth authorization callback."));
454
479
  }, timeoutMs);
455
- const address = server.address();
456
- if (!address || typeof address === "string") {
457
- await new Promise((resolveClose) => {
458
- server.close(() => {
459
- resolveClose();
460
- });
461
- });
462
- throw new Error("Failed to determine MCP OAuth callback server address.");
463
- }
480
+ pendingOauthCallbacksByRequestId.set(requestId, {
481
+ resolveCode: (code) => {
482
+ resolveCode?.(code);
483
+ },
484
+ rejectCode: (error) => {
485
+ rejectCode?.(error);
486
+ },
487
+ timeoutHandle,
488
+ });
464
489
  let closed = false;
465
490
  const close = async () => {
466
491
  if (closed) {
@@ -471,19 +496,15 @@ async function startOauthCallbackListener(timeoutMs) {
471
496
  clearTimeout(timeoutHandle);
472
497
  timeoutHandle = null;
473
498
  }
474
- await new Promise((resolveClose) => {
475
- server.close(() => {
476
- resolveClose();
477
- });
478
- });
499
+ pendingOauthCallbacksByRequestId.delete(requestId);
479
500
  };
480
501
  return {
481
- redirectUrl: `http://${OAUTH_CALLBACK_HOST}:${address.port}${OAUTH_CALLBACK_PATH}`,
502
+ redirectUrl: buildMcpOauthCallbackUrl(requestId),
482
503
  awaitAuthorizationCode: async () => await codePromise,
483
504
  close,
484
505
  };
485
506
  }
486
- export function createClineMcpRuntimeService() {
507
+ export function createClineMcpRuntimeService(options = {}) {
487
508
  const settingsService = createClineMcpSettingsService();
488
509
  const oauthSettingsPath = resolveMcpOauthSettingsPath();
489
510
  const createMcpClient = (registration) => {
@@ -493,6 +514,26 @@ export function createClineMcpRuntimeService() {
493
514
  }
494
515
  return new RuntimeMcpServerClient(loaded, oauthSettingsPath);
495
516
  };
517
+ const collectAuthStatuses = () => {
518
+ const loadedSettings = settingsService.loadSettings();
519
+ const oauthSettings = parseOauthSettings(oauthSettingsPath);
520
+ return loadedSettings.servers
521
+ .map((server) => {
522
+ const authState = oauthSettings.servers[server.name];
523
+ const oauthSupported = server.type !== "stdio";
524
+ return {
525
+ serverName: server.name,
526
+ oauthSupported,
527
+ oauthConfigured: oauthSupported ? hasAccessToken(authState?.tokens) : false,
528
+ lastError: authState?.lastError ?? null,
529
+ lastAuthenticatedAt: authState?.lastAuthenticatedAt ?? null,
530
+ };
531
+ })
532
+ .sort((left, right) => left.serverName.localeCompare(right.serverName));
533
+ };
534
+ const broadcastAuthStatuses = async () => {
535
+ await options.onAuthStatusesChanged?.(collectAuthStatuses());
536
+ };
496
537
  return {
497
538
  async createToolBundle() {
498
539
  const loadedSettings = settingsService.loadSettings();
@@ -535,21 +576,7 @@ export function createClineMcpRuntimeService() {
535
576
  };
536
577
  },
537
578
  async getAuthStatuses() {
538
- const loadedSettings = settingsService.loadSettings();
539
- const oauthSettings = parseOauthSettings(oauthSettingsPath);
540
- return loadedSettings.servers
541
- .map((server) => {
542
- const authState = oauthSettings.servers[server.name];
543
- const oauthSupported = server.transport.type !== "stdio";
544
- return {
545
- serverName: server.name,
546
- oauthSupported,
547
- oauthConfigured: oauthSupported ? hasAccessToken(authState?.tokens) : false,
548
- lastError: authState?.lastError ?? null,
549
- lastAuthenticatedAt: authState?.lastAuthenticatedAt ?? null,
550
- };
551
- })
552
- .sort((left, right) => left.serverName.localeCompare(right.serverName));
579
+ return collectAuthStatuses();
553
580
  },
554
581
  async authorizeServer(input) {
555
582
  const serverName = input.serverName.trim();
@@ -564,7 +591,7 @@ export function createClineMcpRuntimeService() {
564
591
  if (server.disabled) {
565
592
  throw new Error(`MCP server "${serverName}" is disabled. Enable it before running OAuth.`);
566
593
  }
567
- if (server.transport.type === "stdio") {
594
+ if (server.type === "stdio") {
568
595
  throw new Error(`MCP server "${serverName}" uses stdio transport and does not support OAuth browser flow.`);
569
596
  }
570
597
  const callbackListener = await startOauthCallbackListener(input.timeoutMs ?? DEFAULT_AUTH_TIMEOUT_MS);
@@ -611,6 +638,7 @@ export function createClineMcpRuntimeService() {
611
638
  }
612
639
  const authorizationCode = await callbackListener.awaitAuthorizationCode();
613
640
  await transport.finishAuth(authorizationCode);
641
+ await broadcastAuthStatuses();
614
642
  retryClient = new Client({
615
643
  name: "kanban-mcp-oauth-client",
616
644
  version: "1.0.0",
@@ -635,6 +663,7 @@ export function createClineMcpRuntimeService() {
635
663
  catch (error) {
636
664
  const message = toErrorMessage(error);
637
665
  await oauthContext.markError(message);
666
+ await broadcastAuthStatuses().catch(() => undefined);
638
667
  throw new Error(message);
639
668
  }
640
669
  finally {
@@ -646,4 +675,4 @@ export function createClineMcpRuntimeService() {
646
675
  };
647
676
  }
648
677
  //# sourceMappingURL=cline-mcp-runtime-service.js.map
649
- //# debugId=cff64350-0cea-540b-bc64-1e95f7767bd9
678
+ //# debugId=aa9ef6d7-5e15-520c-a7d1-fd18b80f07e0