@cline/core 0.0.38-nightly.1778113663

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 (227) hide show
  1. package/README.md +108 -0
  2. package/dist/ClineCore.d.ts +282 -0
  3. package/dist/account/cline-account-service.d.ts +37 -0
  4. package/dist/account/index.d.ts +3 -0
  5. package/dist/account/rpc.d.ts +40 -0
  6. package/dist/account/types.d.ts +98 -0
  7. package/dist/auth/bounded-ttl-cache.d.ts +13 -0
  8. package/dist/auth/client.d.ts +30 -0
  9. package/dist/auth/cline.d.ts +64 -0
  10. package/dist/auth/codex.d.ts +43 -0
  11. package/dist/auth/oca.d.ts +28 -0
  12. package/dist/auth/server.d.ts +54 -0
  13. package/dist/auth/types.d.ts +103 -0
  14. package/dist/auth/utils.d.ts +32 -0
  15. package/dist/cline-core/automation.d.ts +34 -0
  16. package/dist/cline-core/runtime-services.d.ts +5 -0
  17. package/dist/cline-core/start-input.d.ts +10 -0
  18. package/dist/cline-core/telemetry.d.ts +10 -0
  19. package/dist/cline-core/types.d.ts +221 -0
  20. package/dist/cron/events/cron-event-ingress.d.ts +37 -0
  21. package/dist/cron/reports/cron-report-writer.d.ts +40 -0
  22. package/dist/cron/runner/cron-materializer.d.ts +35 -0
  23. package/dist/cron/runner/cron-runner.d.ts +45 -0
  24. package/dist/cron/runner/resource-limiter.d.ts +8 -0
  25. package/dist/cron/schedule/scheduler.d.ts +12 -0
  26. package/dist/cron/service/cron-service.d.ts +56 -0
  27. package/dist/cron/service/schedule-command-service.d.ts +9 -0
  28. package/dist/cron/service/schedule-service.d.ts +98 -0
  29. package/dist/cron/specs/cron-reconciler.d.ts +61 -0
  30. package/dist/cron/specs/cron-spec-parser.d.ts +26 -0
  31. package/dist/cron/specs/cron-watcher.d.ts +22 -0
  32. package/dist/cron/store/cron-schema.d.ts +2 -0
  33. package/dist/cron/store/sqlite-cron-store.d.ts +240 -0
  34. package/dist/extensions/config/index.d.ts +7 -0
  35. package/dist/extensions/config/runtime-commands.d.ts +11 -0
  36. package/dist/extensions/config/skill-frontmatter-toggle.d.ts +11 -0
  37. package/dist/extensions/config/unified-config-file-watcher.d.ts +77 -0
  38. package/dist/extensions/config/user-instruction-config-loader.d.ts +64 -0
  39. package/dist/extensions/config/user-instruction-plugin.d.ts +25 -0
  40. package/dist/extensions/config/user-instruction-service.d.ts +23 -0
  41. package/dist/extensions/context/agentic-compaction.d.ts +12 -0
  42. package/dist/extensions/context/basic-compaction.d.ts +8 -0
  43. package/dist/extensions/context/compaction-shared.d.ts +60 -0
  44. package/dist/extensions/context/compaction.d.ts +24 -0
  45. package/dist/extensions/index.d.ts +5 -0
  46. package/dist/extensions/mcp/client.d.ts +2 -0
  47. package/dist/extensions/mcp/config-loader.d.ts +15 -0
  48. package/dist/extensions/mcp/index.d.ts +8 -0
  49. package/dist/extensions/mcp/manager.d.ts +23 -0
  50. package/dist/extensions/mcp/name-transform.d.ts +2 -0
  51. package/dist/extensions/mcp/policies.d.ts +14 -0
  52. package/dist/extensions/mcp/tools.d.ts +3 -0
  53. package/dist/extensions/mcp/types.d.ts +94 -0
  54. package/dist/extensions/plugin/plugin-config-loader.d.ts +40 -0
  55. package/dist/extensions/plugin/plugin-load-report.d.ts +18 -0
  56. package/dist/extensions/plugin/plugin-loader.d.ts +22 -0
  57. package/dist/extensions/plugin/plugin-module-import.d.ts +4 -0
  58. package/dist/extensions/plugin/plugin-sandbox.d.ts +36 -0
  59. package/dist/extensions/plugin/plugin-targeting.d.ts +6 -0
  60. package/dist/extensions/plugin-sandbox-bootstrap.js +1 -0
  61. package/dist/extensions/tools/constants.d.ts +24 -0
  62. package/dist/extensions/tools/definitions.d.ts +102 -0
  63. package/dist/extensions/tools/executors/apply-patch-parser.d.ts +68 -0
  64. package/dist/extensions/tools/executors/apply-patch.d.ts +28 -0
  65. package/dist/extensions/tools/executors/bash.d.ts +49 -0
  66. package/dist/extensions/tools/executors/editor.d.ts +31 -0
  67. package/dist/extensions/tools/executors/file-read.d.ts +40 -0
  68. package/dist/extensions/tools/executors/index.d.ts +50 -0
  69. package/dist/extensions/tools/executors/search.d.ts +50 -0
  70. package/dist/extensions/tools/executors/web-fetch.d.ts +58 -0
  71. package/dist/extensions/tools/helpers.d.ts +15 -0
  72. package/dist/extensions/tools/index.d.ts +59 -0
  73. package/dist/extensions/tools/model-tool-routing.d.ts +33 -0
  74. package/dist/extensions/tools/presets.d.ts +132 -0
  75. package/dist/extensions/tools/runtime.d.ts +24 -0
  76. package/dist/extensions/tools/schemas.d.ts +241 -0
  77. package/dist/extensions/tools/team/delegated-agent.d.ts +43 -0
  78. package/dist/extensions/tools/team/index.d.ts +2 -0
  79. package/dist/extensions/tools/team/multi-agent.d.ts +230 -0
  80. package/dist/extensions/tools/team/projections.d.ts +8 -0
  81. package/dist/extensions/tools/team/runtime.d.ts +4 -0
  82. package/dist/extensions/tools/team/spawn-agent-tool.d.ts +83 -0
  83. package/dist/extensions/tools/team/subagent-prompts.d.ts +3 -0
  84. package/dist/extensions/tools/team/team-tools.d.ts +35 -0
  85. package/dist/extensions/tools/types.d.ts +254 -0
  86. package/dist/hooks/checkpoint-hooks.d.ts +45 -0
  87. package/dist/hooks/hook-extension.d.ts +2 -0
  88. package/dist/hooks/hook-file-config.d.ts +24 -0
  89. package/dist/hooks/hook-file-hooks.d.ts +21 -0
  90. package/dist/hooks/index.d.ts +5 -0
  91. package/dist/hooks/subprocess-runner.d.ts +21 -0
  92. package/dist/hooks/subprocess.d.ts +68 -0
  93. package/dist/hub/client/connect.d.ts +14 -0
  94. package/dist/hub/client/index.d.ts +88 -0
  95. package/dist/hub/client/session-client.d.ts +118 -0
  96. package/dist/hub/client/ui-client.d.ts +45 -0
  97. package/dist/hub/daemon/entry.d.ts +1 -0
  98. package/dist/hub/daemon/entry.js +720 -0
  99. package/dist/hub/daemon/index.d.ts +8 -0
  100. package/dist/hub/daemon/runtime-handlers.d.ts +12 -0
  101. package/dist/hub/daemon/start-shared-server.d.ts +18 -0
  102. package/dist/hub/discovery/defaults.d.ts +16 -0
  103. package/dist/hub/discovery/index.d.ts +30 -0
  104. package/dist/hub/discovery/workspace.d.ts +3 -0
  105. package/dist/hub/index.d.ts +32 -0
  106. package/dist/hub/index.js +717 -0
  107. package/dist/hub/runtime-host/hub-runtime-host.d.ts +73 -0
  108. package/dist/hub/runtime-host/remote-runtime-host.d.ts +9 -0
  109. package/dist/hub/server/browser-websocket.d.ts +17 -0
  110. package/dist/hub/server/command-transport.d.ts +7 -0
  111. package/dist/hub/server/handlers/approval-handlers.d.ts +17 -0
  112. package/dist/hub/server/handlers/capability-handlers.d.ts +12 -0
  113. package/dist/hub/server/handlers/client-handlers.d.ts +6 -0
  114. package/dist/hub/server/handlers/context.d.ts +56 -0
  115. package/dist/hub/server/handlers/run-handlers.d.ts +5 -0
  116. package/dist/hub/server/handlers/session-event-projector.d.ts +7 -0
  117. package/dist/hub/server/handlers/session-handlers.d.ts +20 -0
  118. package/dist/hub/server/hub-client-contributions.d.ts +19 -0
  119. package/dist/hub/server/hub-notifications.d.ts +7 -0
  120. package/dist/hub/server/hub-schedule-events.d.ts +2 -0
  121. package/dist/hub/server/hub-server-logging.d.ts +2 -0
  122. package/dist/hub/server/hub-server-options.d.ts +55 -0
  123. package/dist/hub/server/hub-server-transport.d.ts +34 -0
  124. package/dist/hub/server/hub-session-records.d.ts +8 -0
  125. package/dist/hub/server/hub-websocket-server.d.ts +6 -0
  126. package/dist/hub/server/index.d.ts +4 -0
  127. package/dist/hub/server/native-transport.d.ts +16 -0
  128. package/dist/index.d.ts +102 -0
  129. package/dist/index.js +715 -0
  130. package/dist/runtime/capabilities/index.d.ts +2 -0
  131. package/dist/runtime/capabilities/normalize-runtime-capabilities.d.ts +2 -0
  132. package/dist/runtime/capabilities/runtime-capabilities.d.ts +6 -0
  133. package/dist/runtime/config/agent-message-codec.d.ts +6 -0
  134. package/dist/runtime/config/agent-runtime-config-builder.d.ts +87 -0
  135. package/dist/runtime/host/history.d.ts +18 -0
  136. package/dist/runtime/host/host.d.ts +7 -0
  137. package/dist/runtime/host/local/agent-event-bridge.d.ts +29 -0
  138. package/dist/runtime/host/local/session-record.d.ts +6 -0
  139. package/dist/runtime/host/local/session-service-invoker.d.ts +4 -0
  140. package/dist/runtime/host/local/spawn-tool.d.ts +15 -0
  141. package/dist/runtime/host/local/user-files.d.ts +1 -0
  142. package/dist/runtime/host/local-runtime-host.d.ts +119 -0
  143. package/dist/runtime/host/runtime-host-support.d.ts +20 -0
  144. package/dist/runtime/host/runtime-host.d.ts +163 -0
  145. package/dist/runtime/orchestration/runtime-builder.d.ts +6 -0
  146. package/dist/runtime/orchestration/runtime-event-adapter.d.ts +101 -0
  147. package/dist/runtime/orchestration/runtime-oauth-token-manager.d.ts +30 -0
  148. package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +218 -0
  149. package/dist/runtime/orchestration/session-runtime.d.ts +58 -0
  150. package/dist/runtime/orchestration/user-input-builder.d.ts +15 -0
  151. package/dist/runtime/safety/loop-detection.d.ts +58 -0
  152. package/dist/runtime/safety/mistake-tracker.d.ts +68 -0
  153. package/dist/runtime/safety/rules.d.ts +6 -0
  154. package/dist/runtime/tools/subprocess-sandbox.d.ts +43 -0
  155. package/dist/runtime/tools/tool-approval.d.ts +9 -0
  156. package/dist/runtime/turn-queue/pending-prompt-service.d.ts +64 -0
  157. package/dist/services/agent-events.d.ts +33 -0
  158. package/dist/services/config.d.ts +2 -0
  159. package/dist/services/global-settings.d.ts +34 -0
  160. package/dist/services/llms/cline-recommended-models.d.ts +19 -0
  161. package/dist/services/llms/configured-provider-registry.d.ts +27 -0
  162. package/dist/services/llms/handler-factory.d.ts +3 -0
  163. package/dist/services/llms/provider-defaults.d.ts +28 -0
  164. package/dist/services/llms/provider-settings.d.ts +247 -0
  165. package/dist/services/llms/runtime-config.d.ts +3 -0
  166. package/dist/services/llms/runtime-registry.d.ts +19 -0
  167. package/dist/services/llms/runtime-types.d.ts +84 -0
  168. package/dist/services/local-runtime-bootstrap.d.ts +45 -0
  169. package/dist/services/plugin-tools.d.ts +15 -0
  170. package/dist/services/providers/local-provider-registry.d.ts +218 -0
  171. package/dist/services/providers/local-provider-service.d.ts +99 -0
  172. package/dist/services/providers/model-source.d.ts +3 -0
  173. package/dist/services/session-artifacts.d.ts +17 -0
  174. package/dist/services/session-data.d.ts +51 -0
  175. package/dist/services/session-telemetry.d.ts +15 -0
  176. package/dist/services/storage/file-team-store.d.ts +28 -0
  177. package/dist/services/storage/provider-settings-legacy-migration.d.ts +38 -0
  178. package/dist/services/storage/provider-settings-manager.d.ts +23 -0
  179. package/dist/services/storage/sqlite-session-store.d.ts +30 -0
  180. package/dist/services/storage/sqlite-team-store.d.ts +34 -0
  181. package/dist/services/storage/team-store.d.ts +15 -0
  182. package/dist/services/telemetry/ITelemetryAdapter.d.ts +54 -0
  183. package/dist/services/telemetry/OpenTelemetryAdapter.d.ts +43 -0
  184. package/dist/services/telemetry/OpenTelemetryProvider.d.ts +83 -0
  185. package/dist/services/telemetry/TelemetryLoggerSink.d.ts +27 -0
  186. package/dist/services/telemetry/TelemetryService.d.ts +34 -0
  187. package/dist/services/telemetry/core-events.d.ts +198 -0
  188. package/dist/services/telemetry/distinct-id.d.ts +1 -0
  189. package/dist/services/telemetry/index.d.ts +3 -0
  190. package/dist/services/telemetry/index.js +1 -0
  191. package/dist/services/usage.d.ts +18 -0
  192. package/dist/services/workspace/file-indexer.d.ts +5 -0
  193. package/dist/services/workspace/index.d.ts +4 -0
  194. package/dist/services/workspace/mention-enricher.d.ts +13 -0
  195. package/dist/services/workspace/workspace-manager.d.ts +27 -0
  196. package/dist/services/workspace/workspace-manifest.d.ts +31 -0
  197. package/dist/services/workspace/workspace-telemetry.d.ts +18 -0
  198. package/dist/session/checkpoint-restore.d.ts +20 -0
  199. package/dist/session/models/session-graph.d.ts +15 -0
  200. package/dist/session/models/session-manifest.d.ts +29 -0
  201. package/dist/session/models/session-row.d.ts +92 -0
  202. package/dist/session/services/file-session-service.d.ts +8 -0
  203. package/dist/session/services/message-builder.d.ts +66 -0
  204. package/dist/session/services/persistence-service.d.ts +58 -0
  205. package/dist/session/services/session-service.d.ts +13 -0
  206. package/dist/session/session-snapshot.d.ts +57 -0
  207. package/dist/session/session-versioning-service.d.ts +48 -0
  208. package/dist/session/stores/conversation-store.d.ts +29 -0
  209. package/dist/session/stores/session-manifest-store.d.ts +21 -0
  210. package/dist/session/stores/team-persistence-store.d.ts +23 -0
  211. package/dist/session/team/index.d.ts +2 -0
  212. package/dist/session/team/team-child-session-manager.d.ts +35 -0
  213. package/dist/session/team/team-session-coordinator.d.ts +13 -0
  214. package/dist/settings/index.d.ts +2 -0
  215. package/dist/settings/settings-service.d.ts +6 -0
  216. package/dist/settings/types.d.ts +42 -0
  217. package/dist/types/chat-schema.d.ts +161 -0
  218. package/dist/types/common.d.ts +19 -0
  219. package/dist/types/config.d.ts +167 -0
  220. package/dist/types/events.d.ts +89 -0
  221. package/dist/types/provider-settings.d.ts +19 -0
  222. package/dist/types/session.d.ts +116 -0
  223. package/dist/types/sessions.d.ts +28 -0
  224. package/dist/types/storage.d.ts +36 -0
  225. package/dist/types.d.ts +32 -0
  226. package/dist/version.d.ts +1 -0
  227. package/package.json +83 -0
package/dist/index.js ADDED
@@ -0,0 +1,715 @@
1
+ import{createRequire as lP}from"node:module";var cP=Object.defineProperty;var dP=(f)=>f;function rP(f,$){this[f]=dP.bind(null,$)}var dW=(f,$)=>{for(var J in $)cP(f,J,{get:$[J],enumerable:!0,configurable:!0,set:rP.bind($,J)})};var G$=(f,$)=>()=>(f&&($=f(f=0)),$);var rW=lP(import.meta.url);function c(f,$,J){f?.capture({event:$,properties:J})}function P2(f){if(!f)return;return f.substring(0,500)}function iP(f){if(typeof f==="string")return"Error";return f.name?.trim()||f.constructor?.name||"Error"}function nP(f){return typeof f==="string"?f:f.message}function nW(f,$){return f.some((J)=>$.has(J.trim().toLowerCase()))}function aP(f){c(f,I.CLIENT.EXTENSION_ACTIVATED)}function b4(f,$){let J=[...$.vcs_types],H={root_count:$.root_count,vcs_types:J,is_multi_root:$.root_count>1,has_git:nW(J,new Set(["git"])),has_mercurial:nW(J,new Set(["mercurial","hg"]))};if($.init_duration_ms!==void 0)H.init_duration_ms=$.init_duration_ms;if($.feature_flag_enabled!==void 0)H.feature_flag_enabled=$.feature_flag_enabled;if($.is_remote_workspace!==void 0)H.is_remote_workspace=$.is_remote_workspace;c(f,I.WORKSPACE.INITIALIZED,H)}function w4(f,$,J){c(f,I.WORKSPACE.INIT_ERROR,{error_type:iP($),error_message:P2(nP($)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function tP(f,$){c(f,I.WORKSPACE.PATH_RESOLVED,{...$})}function P0(f,$){c(f,I.USER.AUTH_STARTED,{provider:$})}function X0(f,$){c(f,I.USER.AUTH_SUCCEEDED,{provider:$})}function V0(f,$,J){c(f,I.USER.AUTH_FAILED,{provider:$,errorMessage:P2(J)})}function I0(f,$,J){c(f,I.USER.AUTH_LOGGED_OUT,{provider:$,reason:J})}function aW(f,$){f?.captureRequired(I.USER.TELEMETRY_OPT_OUT,$)}function Y0(f,$){let J=$.id?.trim();if(J)f?.setDistinctId(J);f?.updateCommonProperties({account_id:$.id,account_email:$.email,provider:$.provider,organization_id:$.organizationId,organization_name:$.organizationName,member_id:$.memberId})}function C4(f,$){c(f,I.TASK.CREATED,$)}function E4(f,$){c(f,I.TASK.RESTARTED,$)}function X2(f,$){c(f,I.TASK.COMPLETED,$)}function $1(f,$){c(f,I.TASK.CONVERSATION_TURN,{...$,timestamp:new Date().toISOString()})}function S4(f,$){c(f,I.TASK.TOKEN_USAGE,$)}function k4(f,$,J){c(f,I.TASK.MODE_SWITCH,{ulid:$,mode:J})}function m4(f,$){c(f,I.TASK.TOOL_USED,$)}function I4(f,$){c(f,I.TASK.SKILL_USED,$)}function x4(f,$){c(f,I.TASK.DIFF_EDIT_FAILED,$)}function V2(f,$){c(f,I.TASK.PROVIDER_API_ERROR,{...$,errorMessage:P2($.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function g4(f,$,J){c(f,I.TASK.MENTION_USED,{mentionType:$,contentLength:J,timestamp:new Date().toISOString()})}function v4(f,$,J,H){c(f,I.TASK.MENTION_FAILED,{mentionType:$,errorType:J,errorMessage:P2(H),timestamp:new Date().toISOString()})}function u4(f,$,J,H,W){c(f,I.TASK.MENTION_SEARCH_RESULTS,{queryLength:$.length,resultCount:J,searchType:H,isEmpty:W,timestamp:new Date().toISOString()})}function x0(f,$){c(f,I.TASK.AGENT_CREATED,{...$,timestamp:new Date().toISOString()})}function c4(f,$){c(f,I.TASK.AGENT_TEAM_CREATED,{...$,timestamp:new Date().toISOString()})}function Y2(f,$){c(f,$.event==="ended"?I.TASK.SUBAGENT_COMPLETED:I.TASK.SUBAGENT_STARTED,{...$,timestamp:new Date().toISOString()})}function d4(f,$,J,H){c(f,I.HOOKS.DISCOVERY_COMPLETED,{hookName:$,globalCount:J,workspaceCount:H,totalCount:J+H,timestamp:new Date().toISOString()})}var I;var Af=G$(()=>{I={CLIENT:{EXTENSION_ACTIVATED:"user.extension_activated"},SESSION:{STARTED:"session.started",ENDED:"session.ended"},USER:{AUTH_STARTED:"user.auth_started",AUTH_SUCCEEDED:"user.auth_succeeded",AUTH_FAILED:"user.auth_failed",AUTH_LOGGED_OUT:"user.auth_logged_out",TELEMETRY_OPT_OUT:"user.opt_out"},TASK:{CREATED:"task.created",RESTARTED:"task.restarted",COMPLETED:"task.completed",CONVERSATION_TURN:"task.conversation_turn",TOKEN_USAGE:"task.tokens",MODE_SWITCH:"task.mode",TOOL_USED:"task.tool_used",SKILL_USED:"task.skill_used",DIFF_EDIT_FAILED:"task.diff_edit_failed",PROVIDER_API_ERROR:"task.provider_api_error",MENTION_USED:"task.mention_used",MENTION_FAILED:"task.mention_failed",MENTION_SEARCH_RESULTS:"task.mention_search_results",AGENT_CREATED:"task.agent_created",AGENT_TEAM_CREATED:"task.agent_team_created",SUBAGENT_STARTED:"task.subagent_started",SUBAGENT_COMPLETED:"task.subagent_completed"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"}}});var t9={};dW(t9,{normalizeUserMessage:()=>XB,buildInitialUserContent:()=>PB});async function PB(f,$,J,H){let W=VB($),Q=await BB(J,H);if(W.length===0&&!Q)return f;let Z=[{type:"text",text:f},...W];if(Q)Z.push(...Q);return Z}function XB(f){if(f==null)return"";if(typeof f==="string")return f;let $=f.content;if(typeof $==="string")return $;if(!Array.isArray($))return"";let J=[];for(let H of $)if(H&&typeof H==="object"&&H.type==="text"){let W=H.text;if(typeof W==="string")J.push(W)}return J.join(`
2
+ `)}function VB(f){if(!f||f.length===0)return[];let $=[];for(let J of f){let H=YB(J);if(H)$.push(H)}return $}function YB(f){let $=f.trim();if(!$)return;let J=$.match(/^data:([^;,]+);base64,(.+)$/);if(J){let H=J[1],W=J[2];if(!H||!W)return;return{type:"image",mediaType:H,data:W}}return{type:"image",mediaType:"image/png",data:$}}async function BB(f,$){if(!f||f.length===0)return;let J=$??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),H=await Promise.all(f.map(async(W)=>{let Q=W.replace(/\\/g,"/");try{let Z=await J(W);return{type:"file",path:Q,content:Z}}catch(Z){let j=Z instanceof Error?Z.message:String(Z);return{type:"file",path:Q,content:`Error fetching content: ${j}`}}}));if(H.length===0)return;return H}import{mkdirSync as fA,readFileSync as $A,writeFileSync as JA}from"node:fs";import{dirname as HA}from"node:path";import{resolveGlobalSettingsPath as I3}from"@cline/shared/storage";import{z as U1}from"zod";function m3(){return P8.parse({})}function of(){let f=I3(),$;try{$=JSON.parse($A(f,"utf8"))}catch{return m3()}let J=P8.safeParse($);return J.success?J.data:m3()}function E$(f,$={}){let J=I3(),H=of();fA(HA(J),{recursive:!0});let W=P8.parse(f);if(!H.telemetryOptOut&&W.telemetryOptOut)aW($.telemetry);JA(J,`${JSON.stringify(W,null,2)}
3
+ `,"utf8")}function fJ(){return of().telemetryOptOut}function WA(f,$={}){E$({...of(),telemetryOptOut:f},$)}function cf(f){return new Set(f??of().disabledTools??[])}function X8(f){return new Set(f??of().disabledPlugins??[])}function QA(f){return cf().has(f)}function $J(f){let $=cf(),J=of();if($.has(f))return $.delete(f),E$({...J,disabledTools:[...$]}),!1;return $.add(f),E$({...J,disabledTools:[...$]}),!0}function x3(f,$){let J=[...new Set(f.map((Q)=>Q.trim()).filter(Boolean))];if(J.length===0)return;let H=of(),W=cf(H.disabledTools);for(let Q of J)if($)W.add(Q);else W.delete(Q);E$({...H,disabledTools:[...W]})}function g3(f,$){return x3([f],$),$}function ZA(f){return X8().has(f)}function jA(f,$){let J=f.trim();if(!J)return;let H=of(),W=X8(H.disabledPlugins);if($)W.add(J);else W.delete(J);E$({...H,disabledPlugins:[...W]})}function JJ(f,$){let J=X8($);if(J.size===0)return[...f];return f.filter((H)=>!J.has(H))}function S$(f,$){let J=cf($);if(J.size===0)return[...f];return f.filter((H)=>!J.has(H.name))}function HJ(f,$){if(!f||f.length===0)return f;let J=cf($);if(J.size===0)return f;return f.map((H)=>{if(!H.setup)return H;return{...H,setup:(W,Q)=>H.setup?.({...W,registerTool:(Z)=>{if(!J.has(Z.name))W.registerTool(Z)}},Q)}})}var k3,P8;var ef=G$(()=>{Af();k3=U1.preprocess((f)=>Array.isArray(f)?f.filter(($)=>typeof $==="string").map(($)=>$.trim()).filter(Boolean):void 0,U1.array(U1.string()).optional()).transform((f)=>{if(!f)return;let $=[...new Set(f)].sort((J,H)=>J.localeCompare(H));return $.length>0?$:void 0}),P8=U1.object({telemetryOptOut:U1.boolean().default(!1).catch(!1),disabledTools:k3.optional(),disabledPlugins:k3.optional()}).strip().transform((f)=>{let $={telemetryOptOut:f.telemetryOptOut};if(f.disabledTools?.length)$.disabledTools=f.disabledTools;if(f.disabledPlugins?.length)$.disabledPlugins=f.disabledPlugins;return $})});import{existsSync as DK,mkdirSync as MK,readFileSync as _K,writeFileSync as LK}from"node:fs";import{resolve as zK}from"node:path";import{resolveSessionDataDir as OK}from"@cline/shared/storage";import{nanoid as NK}from"nanoid";import*as qK from"node-machine-id";function j$(f){let $=f?.trim();if($)return $;let J=CK();if(J)return J;return EK()}function wK(){let f=qK;return f.machineIdSync??f.default?.machineIdSync}function CK(){try{let f=wK();if(!f)return;return f().trim()||void 0}catch{return}}function EK(){let f=OK(),$=zK(f,bK);try{if(DK($)){let H=_K($,"utf8").trim();if(H.length>0)return H}}catch{}let J=`cl-${NK()}`;try{MK(f,{recursive:!0}),LK($,J,"utf8")}catch{}return J}var bK="machine-id";var C8=()=>{};class $2{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(f){this.name=f.name??"OpenTelemetryAdapter",this.metadata={...f.metadata},this.meterProvider=f.meterProvider,this.loggerProvider=f.loggerProvider,this.meter=f.meterProvider?.getMeter("cline")??null,this.logger=f.loggerProvider?.getLogger("cline")??null,this.enabled=f.enabled??!0,this.distinctId=f.distinctId,this.commonProperties=f.commonProperties?{...f.commonProperties}:{}}emit(f,$){if(!this.isEnabled())return;this.emitLog(f,$,!1)}emitRequired(f,$){this.emitLog(f,$,!0)}recordCounter(f,$,J,H,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let Q=this.counters.get(f);if(!Q)Q=this.meter.createCounter(f,H?{description:H}:void 0),this.counters.set(f,Q);Q.add($,this.flattenProperties(this.buildAttributes(J)))}recordHistogram(f,$,J,H,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let Q=this.histograms.get(f);if(!Q)Q=this.meter.createHistogram(f,H?{description:H}:void 0),this.histograms.set(f,Q);Q.record($,this.flattenProperties(this.buildAttributes(J)))}recordGauge(f,$,J,H,W=!1){if(!this.meter||!W&&!this.isEnabled())return;let Q=this.buildAttributes(J),Z=JSON.stringify(Q),j=this.gaugeValues.get(f);if($===null){if(j){if(j.delete(Z),j.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let P=j;if(!P)P=new Map,this.gaugeValues.set(f,P);if(!this.gauges.has(f)){let X=this.meter.createObservableGauge(f,H?{description:H}:void 0);X.addCallback((V)=>{for(let Y of this.snapshotGaugeSeries(f))V.observe(Y.value,this.flattenProperties(Y.attributes))}),this.gauges.set(f,X)}P.set(Z,{value:$,attributes:Q})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(f){this.distinctId=f}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(f,$,J){if(!this.logger)return;let H=this.flattenProperties(this.buildAttributes($,J));this.logger.emit({severityText:"INFO",body:f,attributes:H})}buildAttributes(f,$=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...$?{_required:!0}:{}}}snapshotGaugeSeries(f){let $=this.gaugeValues.get(f);if(!$)return[];return Array.from($.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties(f,$="",J=new WeakSet,H=0){if(!f)return{};let W={},Q=100,Z=10;for(let[j,P]of Object.entries(f)){if(j==="__proto__"||j==="constructor"||j==="prototype")continue;let X=$?`${$}.${j}`:j;if(P===null||P===void 0){W[X]=String(P);continue}if(Array.isArray(P)){let V=P.length>Q?P.slice(0,Q):P;try{W[X]=JSON.stringify(V)}catch{W[X]="[UnserializableArray]"}if(P.length>Q)W[`${X}_truncated`]=!0,W[`${X}_original_length`]=P.length;continue}if(typeof P==="object"){if(P instanceof Date){W[X]=P.toISOString();continue}if(P instanceof Error){W[X]=P.message;continue}if(J.has(P)){W[X]="[Circular]";continue}if(H>=Z){W[X]="[MaxDepthExceeded]";continue}J.add(P),Object.assign(W,this.flattenProperties(P,X,J,H+1));continue}if(iT(P)){W[X]=P;continue}try{W[X]=JSON.stringify(P)}catch{W[X]=String(P)}}return W}}function iT(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}class y4{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,$){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:$})}emitRequired(f,$){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:$})}recordCounter(f,$,J,H,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:$,attributes:J,description:H,required:W===!0})}recordHistogram(f,$,J,H,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:$,attributes:J,description:H,required:W===!0})}recordGauge(f,$,J,H,W){if(!W&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:$,attributes:J,description:H,required:W===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class J2{adapters;metadata;distinctId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new y4({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.commonProperties={...f.commonProperties??{}}}addAdapter(f){this.adapters.push(f)}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return this.adapters.some((f)=>f.isEnabled())}capture(f){let $=this.buildAttributes(f.properties);for(let J of this.adapters)J.emit(f.event,$)}captureRequired(f,$){let J=this.buildAttributes($);for(let H of this.adapters)H.emitRequired(f,J)}recordCounter(f,$,J,H,W=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordCounter(f,$,Q,H,W)}recordHistogram(f,$,J,H,W=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordHistogram(f,$,Q,H,W)}recordGauge(f,$,J,H,W=!1){let Q=this.buildAttributes(J);for(let Z of this.adapters)Z.recordGauge(f,$,Q,H,W)}async flush(){await Promise.all(this.adapters.map((f)=>f.flush()))}async dispose(){await Promise.all(this.adapters.map((f)=>f.dispose()))}buildAttributes(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var KW=()=>{};import{metrics as nT,trace as aT}from"@opentelemetry/api";import{logs as tT}from"@opentelemetry/api-logs";import{OTLPLogExporter as sT}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as oT}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as eT}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as fD}from"@opentelemetry/resources";import{BatchLogRecordProcessor as $D,ConsoleLogRecordExporter as JD,LoggerProvider as HD}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as WD,MeterProvider as QD,PeriodicExportingMetricReader as _j}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as ZD,ConsoleSpanExporter as jD,SimpleSpanProcessor as PD}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as XD}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as VD,ATTR_SERVICE_VERSION as YD}from"@opentelemetry/semantic-conventions";class Lj{distinctId;metadata;commonProperties;constructor(f={}){this.distinctId=f.distinctId,this.metadata={...f.metadata??{}},this.commonProperties={...f.commonProperties??{}}}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return!1}capture(f){this.resolveProperties(f.properties)}captureRequired(f,$){this.resolveProperties($)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class H2{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let $=fD({[VD]:f.serviceName??"cline",...f.serviceVersion?{[YD]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider($),this.loggerProvider=this.createLoggerProvider($),this.tracerProvider=this.createTracerProvider($),this.meterProvider)nT.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)tT.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",$){return aT.getTracer(f,$??this.options.serviceVersion)}createAdapter(f){return new $2({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let $=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new J2({...f,adapters:[$],distinctId:j$(f.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(f){let $=UW(this.options.metricsExporter);if($.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),H=Math.min(30000,Math.floor(J*0.8)),W=$.map((Q)=>RD(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:H})).filter((Q)=>Q!==null);if(W.length===0)return null;return new QD({resource:f,readers:W})}createTracerProvider(f){let $=UW(this.options.tracesExporter);if($.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,H=this.options.otlpTracesHeaders??this.options.otlpHeaders,W=[];for(let Q of $){let Z=AD(Q,{endpoint:J,headers:H,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(Z)W.push(Z)}if(W.length===0)return null;return new XD({resource:f,spanProcessors:W})}createLoggerProvider(f){let $=UW(this.options.logsExporter);if($.length===0)return null;let J=$.map((H)=>{let W=BD(H,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new $D(W,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((H)=>H!==null);if(J.length===0)return null;return new HD({resource:f,processors:J})}}function K4(f){let $=new H2(f),J=$.createTelemetryService(f);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:f.enabled??!0,logsExporter:Array.isArray(f.logsExporter)?f.logsExporter.join(","):f.logsExporter,metricsExporter:Array.isArray(f.metricsExporter)?f.metricsExporter.join(","):f.metricsExporter,tracesExporter:Array.isArray(f.tracesExporter)?f.tracesExporter.join(","):f.tracesExporter,otlpProtocol:f.otlpProtocol,hasOtlpEndpoint:Boolean(f.otlpEndpoint),serviceName:f.serviceName,serviceVersion:f.serviceVersion}),{provider:$,telemetry:J}}function W2(f){if(fJ())return{telemetry:new Lj(f)};if(f.enabled!==!0)return{telemetry:new J2({...f,distinctId:j$(f.distinctId)})};return K4(f)}function U4(f){let{telemetry:$,provider:J}=W2(f);return{telemetry:$,provider:J,flush:async()=>{let Q=J;if(Q&&typeof Q.forceFlush==="function")try{await Q.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([$.dispose(),J?.dispose()])}}}function UW(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function BD(f,$){if(f==="console")return new JD;if(!$.endpoint)return null;let J=GW($.endpoint,"/v1/logs");return new sT({url:J,headers:$.headers})}function AD(f,$){if(f==="console")return new PD(new jD);if(!$.endpoint)return null;let J=GW($.endpoint,"/v1/traces");return new ZD(new eT({url:J,headers:$.headers}))}function RD(f,$){if(f==="console")return new _j({exporter:new WD,exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout});if(!$.endpoint)return null;let J=GW($.endpoint,"/v1/metrics");return new _j({exporter:new oT({url:J,headers:$.headers}),exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout})}function GW(f,$){let J=new URL(f),H=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=H.endsWith($)?H:`${H}${$}`,J.toString()}var G4=G$(()=>{ef();C8();KW()});var gP={};dW(gP,{createOpenTelemetryTelemetryService:()=>K4,createConfiguredTelemetryService:()=>W2,createConfiguredTelemetryHandle:()=>U4,OpenTelemetryProvider:()=>H2,OpenTelemetryAdapter:()=>$2});var vP=G$(()=>{G4()});import*as Xv from"@cline/llms";import{buildClineSystemPrompt as Yv,ContributionRegistry as Bv,createClineTelemetryServiceConfig as Av,createClineTelemetryServiceMetadata as Rv,createContributionRegistry as Fv,createTool as yv,emptyWorkspaceManifest as Kv,formatDisplayUserInput as Uv,noopBasicLogger as Gv,normalizeUserInput as hv,parseUserCommandEnvelope as Tv,registerDisposable as Dv}from"@cline/shared";export*from"@cline/shared/storage";function pP(f){if(typeof f!=="object"||f===null||!("error"in f))return;let $=f.error;return typeof $==="string"&&$.trim()?$:void 0}function lW(f,$,J){let H=pP(J);if(H)return H;let W=$.trim();if(W){let Q=W.length>200?`${W.slice(0,200)}...`:W;return`Cline account request failed with status ${f}: ${Q}`}return`Cline account request failed with status ${f}`}class O4{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor(f){let $=f.apiBaseUrl.trim();if(!$)throw Error("apiBaseUrl is required");this.apiBaseUrl=$,this.getAuthTokenFn=f.getAuthToken,this.getCurrentUserIdFn=f.getCurrentUserId,this.getOrganizationMemberIdFn=f.getOrganizationMemberId,this.getHeadersFn=f.getHeaders,this.requestTimeoutMs=f.requestTimeoutMs??30000,this.fetchImpl=f.fetchImpl??fetch}async fetchMe(){return this.request("/api/v1/users/me")}async fetchRemoteConfig(){return this.request("/api/v1/users/me/remote-config")}async fetchFeaturebaseToken(){try{return await this.request("/api/v1/users/me/featurebase-token")}catch{return}}async fetchBalance(f){let $=await this.resolveUserId(f);return this.request(`/api/v1/users/${encodeURIComponent($)}/balance`)}async fetchUsageTransactions(f){let $=await this.resolveUserId(f);return(await this.request(`/api/v1/users/${encodeURIComponent($)}/usages`)).items??[]}async fetchPaymentTransactions(f){let $=await this.resolveUserId(f);return(await this.request(`/api/v1/users/${encodeURIComponent($)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent($)}`)}async fetchOrganizationBalance(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent($)}/balance`)}async fetchOrganizationUsageTransactions(f){let $=f.organizationId.trim();if(!$)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId($,f.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent($)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount(f){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:f?.trim()||null},expectNoContent:!0})}async resolveUserId(f){let $=f?.trim();if($)return $;let H=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(H)return H;let W=await this.fetchMe();if(!W.id?.trim())throw Error("Unable to resolve current user id");return W.id}async resolveOrganizationMemberId(f,$){let J=$?.trim();if(J)return J;let W=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn(f):void 0)?.trim();if(W)return W;let Z=(await this.fetchUserOrganizations()).find((j)=>j.organizationId===f)?.memberId;if(!Z?.trim())throw Error(`Unable to resolve memberId for organization ${f}`);return Z}async request(f,$){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let H=this.getHeadersFn?await this.getHeadersFn():{},W=new AbortController,Q=setTimeout(()=>W.abort(),this.requestTimeoutMs);try{let Z=await this.fetchImpl(new URL(f,this.apiBaseUrl),{method:$?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...H??{}},body:$?.body!==void 0?JSON.stringify($.body):void 0,signal:W.signal});if(Z.status===204||$?.expectNoContent){if(!Z.ok)throw Error(`Cline account request failed with status ${Z.status}`);return}let j=await Z.text(),P;if(j.trim())try{P=JSON.parse(j)}catch{if(!Z.ok)throw Error(lW(Z.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Z.ok)throw Error(lW(Z.status,j,P));if(typeof P==="object"&&P!==null){let X=P;if(typeof X.success==="boolean"){if(!X.success)throw Error(X.error||"Cline account request failed");if(X.data!==void 0)return X.data}}if(P===void 0||P===null)throw Error("Cline account response payload was empty");return P}finally{clearTimeout(Q)}}}function pW(f){return f.action==="clineAccount"}async function iW(f,$){switch(f.operation){case"fetchMe":return $.fetchMe();case"fetchBalance":return $.fetchBalance(f.userId);case"fetchUsageTransactions":return $.fetchUsageTransactions(f.userId);case"fetchPaymentTransactions":return $.fetchPaymentTransactions(f.userId);case"fetchUserOrganizations":return $.fetchUserOrganizations();case"fetchOrganizationBalance":return $.fetchOrganizationBalance(f.organizationId);case"fetchOrganizationUsageTransactions":return $.fetchOrganizationUsageTransactions({organizationId:f.organizationId,memberId:f.memberId});case"switchAccount":return await $.switchAccount(f.organizationId),{updated:!0};case"fetchFeaturebaseToken":return $.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String(f)}`)}}class N4{executor;constructor(f){this.executor=f}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance(f){return this.request({action:"clineAccount",operation:"fetchBalance",...f?.trim()?{userId:f.trim()}:{}})}async fetchUsageTransactions(f){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...f?.trim()?{userId:f.trim()}:{}})}async fetchPaymentTransactions(f){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...f?.trim()?{userId:f.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance(f){let $=f.trim();if(!$)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:$})}async fetchOrganizationUsageTransactions(f){let $=f.organizationId.trim();if(!$)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:$,...f.memberId?.trim()?{memberId:f.memberId.trim()}:{}})}async switchAccount(f){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:f?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request(f){return(await this.executor.runProviderAction(f)).result}}function q4(f){return{onAuth:({url:$,instructions:J})=>{if(f.onOutput?.(J??"Complete sign-in in your browser."),f.openUrl)try{Promise.resolve(f.openUrl($)).catch((H)=>{f.onOpenUrlError?.({url:$,error:H})})}catch(H){f.onOpenUrlError?.({url:$,error:H})}f.onOutput?.($)},onPrompt:f.onPrompt,onServerListening:f.onServerListening,onServerClose:f.onServerClose}}Af();function sP(){let f;return{promise:new Promise((J)=>{f=J}),resolve:f}}async function g0(f){let $=await import("node:http"),J=f.host??"127.0.0.1",H=f.timeoutMs??300000,W=f.successHtml??oP,Q=sP(),Z=!1,j=null,P=null,X=null,V=(A)=>{if(Z)return;Z=!0,Q.resolve(A)},Y=()=>{if(j)clearTimeout(j),j=null;let A=X;if(X=null,P)P.close(),P=null;if(A!==null&&f.onClose)Promise.resolve(f.onClose({host:J,port:A})).catch(()=>{})},B=async()=>{return j=setTimeout(()=>{Y(),V(null)},H),Q.promise};for(let A of f.ports){let R=$.createServer((y,F)=>{try{let K=new URL(y.url||"",`http://${J}:${A}`);if(K.pathname!==f.callbackPath){F.statusCode=404,F.end("Not found");return}let M={url:K,code:K.searchParams.get("code")??void 0,state:K.searchParams.get("state")??void 0,provider:K.searchParams.get("provider")??void 0,error:K.searchParams.get("error")??void 0};if(M.error){F.statusCode=400,F.end(`Authentication failed: ${M.error}`),Y(),V(M);return}if(!M.code){F.statusCode=400,F.end("Missing authorization code");return}if(f.expectedState&&M.state!==f.expectedState){F.statusCode=400,F.end("State mismatch");return}F.statusCode=200,F.setHeader("Content-Type","text/html; charset=utf-8"),F.end(W),Y(),V(M)}catch{F.statusCode=500,F.end("Internal error")}}),U=await new Promise((y)=>{let F=(K)=>{R.off("error",F),y({bound:!1,error:K})};R.once("error",F),R.listen(A,J,()=>{R.off("error",F),P=R,y({bound:!0})})});if(U.error){if(U.error.code==="EADDRINUSE")continue;throw Y(),U.error}if(U.bound){X=A;let y=`http://${J}:${A}${f.callbackPath}`;if(f.onListening)await Promise.resolve(f.onListening({host:J,port:A,callbackUrl:y})).catch(()=>{});return{callbackUrl:y,waitForCallback:B,cancelWait:()=>{Y(),V(null)},close:()=>{Y(),V(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var oP=`<!DOCTYPE html>
4
+ <html lang="en">
5
+ <head>
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <title>Authentication Successful</title>
9
+ <style>
10
+ * { margin: 0; padding: 0; box-sizing: border-box; }
11
+ body {
12
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
13
+ min-height: 100vh;
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
18
+ color: #fff;
19
+ }
20
+ .container { text-align: center; padding: 48px; max-width: 420px; }
21
+ .icon {
22
+ width: 72px; height: 72px; margin: 0 auto 24px;
23
+ background: linear-gradient(135deg, #10a37f 0%, #1a7f64 100%);
24
+ border-radius: 50%;
25
+ display: flex; align-items: center; justify-content: center;
26
+ }
27
+ .icon svg { width: 36px; height: 36px; stroke: #fff; stroke-width: 3; fill: none; }
28
+ h1 { font-size: 24px; font-weight: 600; margin-bottom: 12px; }
29
+ p { font-size: 15px; color: rgba(255,255,255,0.7); line-height: 1.5; }
30
+ .closing { margin-top: 32px; font-size: 13px; color: rgba(255,255,255,0.5); }
31
+ </style>
32
+ </head>
33
+ <body>
34
+ <div class="container">
35
+ <div class="icon">
36
+ <svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"></polyline></svg>
37
+ </div>
38
+ <h1>Authentication Successful</h1>
39
+ <p>You're now signed in. You can close this window.</p>
40
+ <p class="closing">This window will close automatically...</p>
41
+ </div>
42
+ <script>setTimeout(() => window.close(), 3000);</script>
43
+ </body>
44
+ </html>`;function tW(f){let $="";for(let J=0;J<f.length;J+=1)$+=String.fromCharCode(f[J]??0);return btoa($).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function eP(f){let J=new TextEncoder().encode(f),H=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(H)}function fX(f=32){let $=new Uint8Array(f);return crypto.getRandomValues($),tW($)}async function B2(){let f=fX(),$=tW(await eP(f));return{verifier:f,challenge:$}}function A2(f){return f.endsWith("/")?f.slice(0,-1):f}function v0(f,$){return new URL($,`${A2(f)}/`).toString()}function h$(f,$={}){let J=f.trim();if(!J)return{};try{let H=new URL(J);return{code:H.searchParams.get("code")??void 0,state:H.searchParams.get("state")??void 0,provider:$.includeProvider?H.searchParams.get("provider")??void 0:void 0}}catch{}if($.allowHashCodeState&&J.includes("#")){let[H,W]=J.split("#",2);return{code:H||void 0,state:W||void 0}}if(J.includes("code=")){let H=new URLSearchParams(J);return{code:H.get("code")??void 0,state:H.get("state")??void 0,provider:$.includeProvider?H.get("provider")??void 0:void 0}}return{code:J}}function $X(f){if(typeof atob==="function")try{return atob(f)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from(f,"base64").toString("utf8")}catch{return null}return null}function jf(f){if(!f)return null;try{let $=f.split(".");if($.length!==3)return null;let J=$[1];if(!J)return null;let H=J.replace(/-/g,"+").replace(/_/g,"/"),W=H.padEnd(H.length+(4-H.length%4)%4,"="),Q=$X(W);if(!Q)return null;return JSON.parse(Q)}catch{return null}}function T$(f){try{let $=JSON.parse(f),J=$.error,H=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,W=typeof $.error_description==="string"?$.error_description:typeof $.message==="string"?$.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:H,message:W}}catch{return{}}}function u0(f,$){return Date.now()>=f.expires-$}async function D$(f){if(!f.onManualCodeInput){let Q=await f.waitForCallback();return{code:Q?.code,state:Q?.state,provider:Q?.provider,error:Q?.error}}let $,J,H=f.onManualCodeInput().then((Q)=>{$=Q,f.cancelWait()}).catch((Q)=>{J=Q instanceof Error?Q:Error(String(Q)),f.cancelWait()}),W=await f.waitForCallback();if(J)throw J;if(W?.code||W?.error)return{code:W.code,state:W.state,provider:W.provider,error:W.error};if($)return h$($,f.parseOptions);if(await H,J)throw J;if($)return h$($,f.parseOptions);return{}}var R2={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},f5={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},r4="https://api.workos.com",l4="client_01K3A541FN8TA3EPPHTD2325AR",JX="/auth",sW=Array.from({length:11},(f,$)=>48801+$),HX=300000,WX=30000,M$=30000,QX=300,ZX=5;class B0 extends Error{status;errorCode;constructor(f,$){super(f);this.name="ClineOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid|expired|revoked|unauthorized/i.test(this.message);return!1}}function jX(f){let $=Date.parse(f);if(Number.isNaN($))throw Error(`Invalid expiresAt value: ${f}`);return $}function p4(f,$,J={}){let H=f.userInfo.clineUserId??J.accountId,W=f.refreshToken??J.refresh;if(!W)throw Error("Token response did not include a refresh token");return{access:f.accessToken,refresh:W,expires:jX(f.expiresAt),accountId:H??void 0,email:f.userInfo.email||J.email,metadata:{provider:$,tokenType:f.tokenType,userInfo:f.userInfo}}}async function i4(f){if(!f)return{};return typeof f==="function"?await f():f}function oW(f,$){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return $;return Math.floor(f)}async function eW(f){await new Promise(($)=>setTimeout($,f))}function n4(f,$){if(!f.success||!f.data?.accessToken)throw Error($);return f.data}async function $5(f,$){let J=await fetch(v0(r4,f5.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:f}),signal:AbortSignal.timeout($?.requestTimeoutMs??M$)}),H=await J.json().catch(()=>({}));if(!J.ok)throw new B0(`Device authorization failed: ${J.status}${H.error_description?` - ${H.error_description}`:""}`,{status:J.status,errorCode:H.error});if(!H.device_code||!H.user_code||!H.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:H.device_code,userCode:H.user_code,verificationUri:H.verification_uri,verificationUriComplete:H.verification_uri_complete,expiresInSeconds:oW(H.expires_in,QX),pollIntervalSeconds:oW(H.interval,ZX)}}async function J5(f){let $=Date.now()+f.expiresInSeconds*1000,J=Math.max(1,f.initialPollIntervalSeconds);while(Date.now()<=$){let H=await fetch(v0(f.workosApiBaseUrl,f5.authenticate),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",device_code:f.deviceCode,client_id:f.clientId}),signal:AbortSignal.timeout(f.requestTimeoutMs)}),W=await H.json().catch(()=>({}));if(H.ok){if(!W.access_token||!W.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:W.access_token,refreshToken:W.refresh_token,tokenType:W.token_type??"Bearer"}}switch(W.error){case"authorization_pending":{await eW(J*1000);break}case"slow_down":{J+=1,await eW(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new B0(W.error_description||"WorkOS authorization failed",{status:H.status,errorCode:W.error});default:throw new B0(`WorkOS token polling failed: ${H.status}${W.error_description?` - ${W.error_description}`:""}`,{status:H.status,errorCode:W.error})}f.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function H5(f,$,J){let H={accessToken:f.accessToken,refreshToken:f.refreshToken},W=await fetch(v0($.apiBaseUrl,R2.register),{method:"POST",headers:{"Content-Type":"application/json",...await i4($.headers)},body:JSON.stringify(H),signal:AbortSignal.timeout($.requestTimeoutMs??M$)});if(!W.ok){let Z=await W.text().catch(()=>""),j=T$(Z);throw new B0(`Token registration failed: ${W.status}${j.message?` - ${j.message}`:""}`,{status:W.status,errorCode:j.code})}let Q=await W.json();return p4(n4(Q,"Invalid token exchange response"),J??$.provider)}async function PX(f,$,J,H){let W={grant_type:"authorization_code",code:f,client_type:"extension",redirect_uri:$,provider:H??J.provider},Q=await fetch(v0(J.apiBaseUrl,R2.token),{method:"POST",headers:{"Content-Type":"application/json",...await i4(J.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(J.requestTimeoutMs??M$)});if(!Q.ok){let j=await Q.text().catch(()=>""),P=T$(j);throw new B0(`Token exchange failed: ${Q.status}${P.message?` - ${P.message}`:""}`,{status:Q.status,errorCode:P.code})}let Z=await Q.json();return p4(n4(Z,"Invalid token exchange response"),H??J.provider)}async function F2(f){P0(f.telemetry,f.provider??"cline");let $=f.useWorkOSDeviceAuth??!0,J=f.callbackPorts?.length?f.callbackPorts:sW,H=f.callbackPath??JX,W=$?null:await g0({ports:J,callbackPath:H,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),Q=W?.callbackUrl||`http://127.0.0.1:${J[0]??sW[0]}${H}`;try{let Z;if($){let j=l4,P=await $5(j,f);f.callbacks.onAuth({url:P.verificationUriComplete??P.verificationUri,instructions:`Enter this code in your browser: ${P.userCode}`});let X=await J5({clientId:j,deviceCode:P.deviceCode,expiresInSeconds:P.expiresInSeconds,initialPollIntervalSeconds:P.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??M$,workosApiBaseUrl:r4,onProgress:f.callbacks.onProgress});Z=await H5(X,f,f.provider)}else{let j=new URL(v0(f.apiBaseUrl,R2.authorize));j.searchParams.set("client_type","extension"),j.searchParams.set("callback_url",Q),j.searchParams.set("redirect_uri",Q),f.callbacks.onAuth({url:j.toString(),instructions:"Continue the authentication process in your browser."});let P,X=f.provider,V=await D$({waitForCallback:W?.waitForCallback??(async()=>null),cancelWait:W?.cancelWait??(()=>{}),onManualCodeInput:f.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(V.error)throw Error(`OAuth error: ${V.error}`);if(P=V.code,X=V.provider??X,!P){let Y=await f.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=h$(Y,{includeProvider:!0});P=B.code,X=B.provider??X}if(!P)throw Error("Missing authorization code");Z=await PX(P,Q,f,X)}return X0(f.telemetry,f.provider??"cline"),Y0(f.telemetry,{id:Z.accountId,email:Z.email,provider:f.provider??"cline"}),Z}catch(Z){throw V0(f.telemetry,f.provider??"cline",Z instanceof Error?Z.message:String(Z)),Z}finally{W?.close()}}async function XX(f){return await $5(l4,f)}async function VX(f){let $=f.provider??"cline";P0(f.telemetry,$);try{let J=await J5({clientId:l4,deviceCode:f.deviceCode,expiresInSeconds:f.expiresInSeconds,initialPollIntervalSeconds:f.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??M$,workosApiBaseUrl:r4}),H=await H5(J,{apiBaseUrl:f.apiBaseUrl,headers:f.headers,requestTimeoutMs:f.requestTimeoutMs,provider:f.provider},f.provider);return X0(f.telemetry,$),Y0(f.telemetry,{id:H.accountId,email:H.email,provider:$}),H}catch(J){throw V0(f.telemetry,$,J instanceof Error?J.message:String(J)),J}}async function a4(f,$){let J=await fetch(v0($.apiBaseUrl,R2.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await i4($.headers)},body:JSON.stringify({refreshToken:f.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout($.requestTimeoutMs??M$)});if(!J.ok){let Q=await J.text().catch(()=>""),Z=T$(Q);throw new B0(`Token refresh failed: ${J.status}${Z.message?` - ${Z.message}`:""}`,{status:J.status,errorCode:Z.code})}let H=await J.json(),W=f.metadata?.provider??$.provider;return p4(n4(H,"Invalid token refresh response"),W,f)}async function t4(f,$,J){if(!f)return null;let H=J?.refreshBufferMs??HX,W=J?.retryableTokenGraceMs??WX;if(J?.forceRefresh!==!0&&!u0(f,H))return f;try{return await a4(f,$)}catch(Z){if(Z instanceof B0&&Z.isLikelyInvalidGrant())return I0($.telemetry,$.provider??"cline","invalid_grant"),null;if(f.expires-Date.now()>W)return f;return null}}function YX(f){return{id:"cline",name:"Cline Account",usesCallbackServer:!(f.useWorkOSDeviceAuth??!0),async login($){return F2({...f,callbacks:$})},async refreshToken($){return a4($,f)},getApiKey($){return`workos:${$.access}`}}}Af();import{nanoid as BX}from"nanoid";var a={authorizationEndpoint:"https://auth.openai.com/oauth/authorize",tokenEndpoint:"https://auth.openai.com/oauth/token",clientId:"app_EMoamEEZ73f0CkXaXp7hrann",redirectUri:"http://localhost:1455/auth/callback",scopes:"openid profile email offline_access",callbackPort:1455,jwtClaimPath:"https://api.openai.com/auth",refreshBufferMs:300000,retryableTokenGraceMs:30000,httpTimeoutMs:30000};class y2 extends Error{status;errorCode;constructor(f,$){super(f);this.name="OpenAICodexOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant/i.test(this.errorCode))return!0;if(this.status===400||this.status===401||this.status===403)return/invalid_grant|revoked|expired|invalid refresh/i.test(this.message);return!1}}async function AX(f,$,J=a.redirectUri){let H=await fetch(a.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:a.clientId,code:f,code_verifier:$,redirect_uri:J}),signal:AbortSignal.timeout(a.httpTimeoutMs)});if(!H.ok)return{type:"failed"};let W=await H.json();if(!W.access_token||!W.refresh_token||typeof W.expires_in!=="number")return{type:"failed"};return{type:"success",access:W.access_token,refresh:W.refresh_token,expires:Date.now()+W.expires_in*1000,email:W.email,idToken:W.id_token}}async function RX(f){try{let $=await fetch(a.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:f,client_id:a.clientId}),signal:AbortSignal.timeout(a.httpTimeoutMs)});if(!$.ok){let H=await $.text().catch(()=>""),W=T$(H);throw new y2(`Token refresh failed: ${$.status}${W.message?` - ${W.message}`:""}`,{status:$.status,errorCode:W.code})}let J=await $.json();if(!J.access_token||!J.refresh_token||typeof J.expires_in!=="number")return{type:"failed"};return{type:"success",access:J.access_token,refresh:J.refresh_token,expires:Date.now()+J.expires_in*1000,email:J.email,idToken:J.id_token}}catch($){if($ instanceof y2)throw $;return{type:"failed"}}}async function FX(f="pi"){let{verifier:$,challenge:J}=await B2(),H=BX(32),W=new URL(a.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",a.clientId),W.searchParams.set("redirect_uri",a.redirectUri),W.searchParams.set("scope",a.scopes),W.searchParams.set("code_challenge",J),W.searchParams.set("code_challenge_method","S256"),W.searchParams.set("state",H),W.searchParams.set("id_token_add_organizations","true"),W.searchParams.set("codex_cli_simplified_flow","true"),W.searchParams.set("originator",f),{verifier:$,state:H,url:W.toString()}}function yX(){try{let f=new URL(a.redirectUri),$=f.port.length>0?Number.parseInt(f.port,10):a.callbackPort;return{host:f.hostname||"localhost",port:Number.isFinite($)?$:a.callbackPort,callbackPath:f.pathname||"/auth/callback",redirectUri:f.toString()}}catch{return{host:"localhost",port:a.callbackPort,callbackPath:"/auth/callback",redirectUri:a.redirectUri}}}function W5(f,$){let J=$?jf($):jf(f),H=J?J:jf(f),Q=H?.[a.jwtClaimPath]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=H?.organizations;if(Array.isArray(Z)&&Z.length>0){let P=Z[0];if(typeof P?.id==="string"&&P.id.length>0)return P.id}let j=H?.chatgpt_account_id;if(typeof j==="string"&&j.length>0)return j;return null}function Q5(f,$){let J=W5(f.access,f.idToken)??$?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:f.access,refresh:f.refresh||$?.refresh||"",expires:f.expires,accountId:J,email:f.email??$?.email,metadata:{...$?.metadata??{},provider:"openai-codex"}}}async function K2(f){P0(f.telemetry,"openai-codex");let $=yX(),{verifier:J,state:H,url:W}=await FX(f.originator),Q=await g0({host:$.host,ports:[$.port],callbackPath:$.callbackPath,expectedState:H});f.onAuth({url:W,instructions:"Continue the authentication process in your browser."});let Z;try{let j=await D$({waitForCallback:Q.waitForCallback,cancelWait:Q.cancelWait,onManualCodeInput:f.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(j.state&&j.state!==H)throw Error("State mismatch");if(Z=j.code,!Z){let V=await f.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),Y=h$(V,{allowHashCodeState:!0});if(Y.state&&Y.state!==H)throw Error("State mismatch");Z=Y.code}if(!Z)throw Error("Missing authorization code");let P=await AX(Z,J,$.redirectUri);if(P.type!=="success")throw Error("Token exchange failed");let X=Q5(P);return X0(f.telemetry,"openai-codex"),Y0(f.telemetry,{id:X.accountId,email:X.email,provider:"openai-codex"}),X}catch(j){throw V0(f.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{Q.close()}}async function s4(f,$){let J=await RX(f);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let H=Q5(J,$);if(!H.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return H}async function o4(f,$){if(!f)return null;let J=$?.refreshBufferMs??a.refreshBufferMs,H=$?.retryableTokenGraceMs??a.retryableTokenGraceMs;if($?.forceRefresh!==!0&&!u0(f,J))return f;try{return await s4(f.refresh,f)}catch(Q){if(Q instanceof y2&&Q.isLikelyInvalidGrant())return I0($?.telemetry,"openai-codex","invalid_grant"),null;if(f.expires-Date.now()>H)return f;return null}}function KX(f,$=a.refreshBufferMs){return u0(f,$)}function UX(f){let $=f.accountId??W5(f.access);if(!$)throw Error("Failed to extract accountId from token");return{...f,accountId:$,metadata:{...f.metadata??{},provider:"openai-codex"}}}var GX={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login(f){return K2({onAuth:f.onAuth,onPrompt:f.onPrompt,onProgress:f.onProgress,onManualCodeInput:f.onManualCodeInput})},async refreshToken(f){return s4(f.refresh,f)},getApiKey(f){return f.access}};Af();import{nanoid as Z5}from"nanoid";class e4{ttlMs;maxEntries;entries=new Map;constructor(f,$){this.ttlMs=f;this.maxEntries=$}get(f,$=Date.now()){this.pruneExpired($);let J=this.entries.get(f);if(!J)return;return this.entries.delete(f),this.entries.set(f,J),J.value}set(f,$,J=Date.now(),H=this.ttlMs){this.pruneExpired(J),this.entries.delete(f);while(this.entries.size>=this.maxEntries){let W=this.entries.keys().next().value;if(W===void 0)break;this.entries.delete(W)}this.entries.set(f,{value:$,expiresAt:J+H})}pruneExpired(f){for(let[$,J]of this.entries)if(J.expiresAt<=f)this.entries.delete($)}}var j5="a8331954c0cf48ba99b5dd223a14c6ea",P5="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",X5="openid offline_access",U2="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",V5="c1aba3deed5740659981a752714eba33",Y5="https://login-ext.identity.oraclecloud.com",B5="openid offline_access",G2="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",A5="opc-request-id",hX="/auth/oca",TX=Array.from({length:11},(f,$)=>48801+$),DX=300000,MX=30000,R5=30000,_X=600000;class h2 extends Error{status;errorCode;constructor(f,$){super(f);this.name="OcaOAuthTokenError",this.status=$?.status,this.errorCode=$?.errorCode}isLikelyInvalidGrant(){if(this.errorCode&&/invalid_grant|invalid_token|unauthorized/i.test(this.errorCode))return!0;return this.status===400||this.status===401||this.status===403}}var A0={internal:{clientId:j5,idcsUrl:P5,scopes:X5,baseUrl:U2},external:{clientId:V5,idcsUrl:Y5,scopes:B5,baseUrl:G2}},J1=new Map,LX=86400000,zX=300000,OX=32,f6=new e4(LX,OX);function F5(f){if(typeof f==="function")return f();return f??"internal"}function y5(f){return{internal:{clientId:f?.internal?.clientId??A0.internal.clientId,idcsUrl:f?.internal?.idcsUrl??A0.internal.idcsUrl,scopes:f?.internal?.scopes??A0.internal.scopes,baseUrl:f?.internal?.baseUrl??A0.internal.baseUrl},external:{clientId:f?.external?.clientId??A0.external.clientId,idcsUrl:f?.external?.idcsUrl??A0.external.idcsUrl,scopes:f?.external?.scopes??A0.external.scopes,baseUrl:f?.external?.baseUrl??A0.external.baseUrl}}}function NX(f=Date.now()){let $=f-_X;for(let[J,H]of J1.entries())if(H.createdAt<$)J1.delete(J)}function qX(f,$,J){if(typeof f.expires_in==="number"&&f.expires_in>0)return Date.now()+f.expires_in*1000;let W=jf($)?.exp;if(typeof W==="number"&&W>0)return W*1000;let Z=jf(J)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return Date.now()+3600000}function K5(f,$,J){let H=f.access_token;if(!H)throw Error("Token response did not include an access token");let W=f.refresh_token??J?.refresh;if(!W)throw Error("Token response did not include a refresh token");let Q=jf(f.id_token),Z=jf(H),j=Q?.sub??Z?.sub,P=Q?.email??Z?.email;return{access:H,refresh:W,expires:qX(f,H,f.id_token),accountId:j??J?.accountId,email:P??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:$,subject:j,idToken:f.id_token}}}async function U5(f,$){let J=A2(f),H=f6.get(J);if(H)return H;let W=`${J}/.well-known/openid-configuration`,Q=await fetch(W,{method:"GET",signal:AbortSignal.timeout($)});if(!Q.ok){let P=`${J}/oauth2/v1/token`;return f6.set(J,P,Date.now(),zX),P}let j=(await Q.json()).token_endpoint||`${J}/oauth2/v1/token`;return f6.set(J,j),j}function G5(f){return{code:f.error,message:f.error_description}}async function bX(f){let $=J1.get(f.state);if(!$)throw Error("No PKCE verifier found for this state");J1.delete(f.state);let J=f.mode==="external"?f.config.external:f.config.internal,H=await U5(J.idcsUrl,f.requestTimeoutMs),W=new URLSearchParams({grant_type:"authorization_code",code:f.code,redirect_uri:$.redirectUri,client_id:J.clientId,code_verifier:$.verifier}),Q=await fetch(H,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:W,signal:AbortSignal.timeout(f.requestTimeoutMs)}),Z=await Q.json();if(!Q.ok){let P=G5(Z);throw new h2(`Token exchange failed: ${Q.status}${P.message?` - ${P.message}`:""}`,{status:Q.status,errorCode:P.code})}let j=jf(Z.id_token);if(!Z.id_token||!j)throw Error("No ID token received from OCA");if(j.nonce!==$.nonce)throw Error("OIDC nonce verification failed");return K5(Z,f.mode)}function wX(f){let $=f.mode==="external"?f.config.external:f.config.internal,J=new URL(`${A2($.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",$.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",$.scopes),J.searchParams.set("code_challenge",f.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",f.callbackUrl),J.searchParams.set("state",f.state),J.searchParams.set("nonce",f.nonce),J.toString()}async function T2(f){P0(f.telemetry,"oca");let $=y5(f.config),J=F5(f.mode),H=f.callbackPorts?.length?f.callbackPorts:TX,W=f.callbackPath??hX,Q=f.requestTimeoutMs??R5,Z=await g0({ports:H,callbackPath:W,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),j=Z.callbackUrl;if(!j)throw Error("Unable to bind local OAuth callback server");let P=Z5(16),X=Z5(16),{verifier:V,challenge:Y}=await B2();NX(),J1.set(P,{verifier:V,nonce:X,mode:J,redirectUri:j,createdAt:Date.now()});let B=wX({callbackUrl:j,mode:J,state:P,nonce:X,challenge:Y,config:$});f.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let A=await D$({waitForCallback:Z.waitForCallback,cancelWait:Z.cancelWait,onManualCodeInput:f.callbacks.onManualCodeInput}),R=A.code,U=A.state;if(A.error)throw Error(`OAuth error: ${A.error}`);if(!R){if(!f.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!U||U!==P)throw Error("State mismatch");let y=await bX({code:R,state:U,mode:J,config:$,requestTimeoutMs:Q});return X0(f.telemetry,"oca"),Y0(f.telemetry,{id:y.accountId,email:y.email,provider:"oca"}),y}catch(A){throw V0(f.telemetry,"oca",A instanceof Error?A.message:String(A)),A}finally{Z.close()}}async function $6(f,$={}){let J=y5($.config),H=$.requestTimeoutMs??R5,W=f.metadata?.mode,Q=W==="internal"||W==="external"?W:F5($.mode),Z=Q==="external"?J.external:J.internal,j=await U5(Z.idcsUrl,H),P=new URLSearchParams({grant_type:"refresh_token",refresh_token:f.refresh,client_id:Z.clientId}),X=await fetch(j,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:P,signal:AbortSignal.timeout(H)}),V=await X.json();if(!X.ok){let Y=G5(V);throw new h2(`Token refresh failed: ${X.status}${Y.message?` - ${Y.message}`:""}`,{status:X.status,errorCode:Y.code})}return K5(V,Q,f)}async function J6(f,$,J){if(!f)return null;let H=$?.refreshBufferMs??J?.refreshBufferMs??DX,W=$?.retryableTokenGraceMs??J?.retryableTokenGraceMs??MX;if($?.forceRefresh!==!0&&!u0(f,H))return f;try{return await $6(f,J)}catch(Z){if(Z instanceof h2&&Z.isLikelyInvalidGrant())return I0(J?.telemetry,"oca","invalid_grant"),null;if(f.expires-Date.now()>W)return f;return null}}function CX(f={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login($){return T2({...f,callbacks:$})},async refreshToken($){return $6($,f)},getApiKey($){return $.access}}}async function h5(f,$){let J=new TextEncoder,H=async(X)=>{let V=await crypto.subtle.digest("SHA-256",J.encode(X));return Array.from(new Uint8Array(V).slice(0,4),(Y)=>Y.toString(16).padStart(2,"0")).join("")},[W,Q]=await Promise.all([H($),H(f)]),Z=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),j=new Uint32Array(1);crypto.getRandomValues(j);let P=(j[0]??0).toString(16).padStart(8,"0");return W+Q+Z+P}async function EX(f){let $=await h5(f.taskId,f.accessToken);return{Authorization:`Bearer ${f.accessToken}`,"Content-Type":"application/json",client:f.metadata?.client??"Cline","client-version":f.metadata?.clientVersion??"unknown","client-ide":f.metadata?.clientIde??"unknown","client-ide-version":f.metadata?.clientIdeVersion??"unknown",[A5]:$}}import*as hf from"@cline/llms";import{z as _}from"zod";import*as Qf from"@cline/llms";function H6(f){if(!Array.isArray(f))return[];return f.map(($)=>{if(typeof $==="string")return $.trim();if($&&typeof $==="object"){let J=$;for(let H of[J.id,J.name,J.model])if(typeof H==="string"&&H.trim())return H.trim()}return""}).filter(($)=>$.length>0)}function SX(f,$){let J=H6(f);if(J.length>0)return J;if(!f||typeof f!=="object")return[];let H=f,W=H6(H.data??H.models);if(W.length>0)return W;if(H.models&&typeof H.models==="object"&&!Array.isArray(H.models)){let Z=Object.keys(H.models).filter((j)=>j.trim().length>0);if(Z.length>0)return Z}let Q=H.providers?.[$];if(Q&&typeof Q==="object"){let j=H6(Q.models??Q);if(j.length>0)return j}return[]}async function D2(f,$){let J=await fetch(f,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${f}: HTTP ${J.status}`);return SX(await J.json(),$)}function T5(f){return f.replace(/\/+$/,"")}function M2(f,$,J){let H=J?.trim();if(!H)return;let W=f?.trim();if(!W||!$?.trim())return H;try{let Q=new URL(H),Z=new URL($),j=new URL(W);if(Q.origin!==Z.origin)return H;let P=T5(Z.pathname),X=T5(j.pathname);if(P&&Q.pathname.startsWith(`${P}/`)){let V=Q.pathname.slice(P.length);j.pathname=`${X}${V}`}else j.pathname=Q.pathname;return j.search=Q.search,j.hash=Q.hash,j.toString()}catch{return H}}function kX(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{...J}]))}function mX(f){if(f.baseUrl.length===0)return!1;switch(f.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return f.protocol==="openai-chat"}}var IX=Object.values(Qf.MODEL_COLLECTIONS_BY_PROVIDER_ID).map((f)=>({id:f.provider.id,baseUrl:f.provider.baseUrl??"",modelsSourceUrl:f.provider.modelsSourceUrl,modelId:f.provider.defaultModelId,knownModels:kX(f.models),capabilities:f.provider.capabilities?[...f.provider.capabilities]:void 0,env:f.provider.env?[...f.provider.env]:void 0,client:f.provider.client,protocol:f.provider.protocol})),M5=Object.fromEntries(IX.map((f)=>[f.id,f]));function xX(f){return M5[f]}function gX(){return Object.fromEntries(Object.entries(M5).filter(([,f])=>mX(f)))}function _5(f=[]){let $=f.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return $.length>0?$:void 0}var L5="https://models.dev/api.json",vX=600000,z5=300000,uX=5000,L2=new Map,H1=new Map,Z6=new Map,_2=new Map;async function cX(){return Qf.getGeneratedProviderModels()}async function dX(f,$={},J={},H={},W={},Q={}){let Z=await cX(),j=Qf.resolveProviderModelCatalogKeys(f),P=Object.assign({},...j.map((Y)=>Z[Y]??{})),X=Boolean(Qf.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl),V=Object.keys(W).length>0;if(X&&V)return Qf.sortModelsByReleaseDate({...W,...Q});return Qf.sortModelsByReleaseDate({...P,...$,...J,...H,...W,...Q})}function rX(f,$){let J=Qf.resolveProviderModelCatalogKeys(f);return Object.assign({},...J.map((H)=>$[H]??{}))}function j6(f){let $=f?.trim();return $&&$.length>0?$:""}function P6(f){let $=f.apiKey?.trim()||f.accessToken?.trim();return $&&$.length>0?$:void 0}function lX(f){let $=2166136261;for(let J=0;J<f.length;J+=1)$^=f.charCodeAt(J),$+=($<<1)+($<<4)+($<<7)+($<<8)+($<<24);return($>>>0).toString(16)}function pX(f,$){return`${f}:${j6($.baseUrl)}:${lX(P6($)??"")}`}async function X6(f,$,J=uX){let H=new AbortController,W=setTimeout(()=>H.abort(),J);try{return await fetch(f,{...$,signal:H.signal})}finally{clearTimeout(W)}}function W6(f,$,J){if(J&&!f.includes($))f.push($)}function z2(f,$){let J=["streaming","tools"];return W6(J,"images",Boolean($.supportsImages)),W6(J,"prompt-cache",Boolean($.supportsPromptCache)),W6(J,"reasoning",Boolean($.supportsReasoning)),{id:f,name:$.name??f,contextWindow:$.contextWindow,maxTokens:$.maxTokens,capabilities:J,releaseDate:$.releaseDate,status:"active"}}async function iX(f,$){let J=await X6("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${$}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let W=(await J.json())?.data??[],Q={};for(let Z of W){let j=Z.id?.trim();if(!j)continue;if(j.includes("whisper")||j.includes("tts")||j.includes("embedding"))continue;let P=Z.supported_features??[];Q[j]=z2(j,{name:j,contextWindow:Z.context_length,maxTokens:Z.max_completion_tokens,supportsReasoning:P.includes("reasoning")||P.includes("reasoning_effort"),supportsImages:!1})}return Q}async function nX(f,$){let J=await X6("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":$}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let W=(await J.json())?.data??[],Q={};for(let Z of W){let j=Z.id?.trim();if(!j)continue;Q[j]=z2(j,{name:j,contextWindow:128000,supportsImages:!0,supportsPromptCache:!0})}return Q}function aX(f){let $=j6(f);if(!$)return"http://localhost:4000";return $.endsWith("/v1")?$.slice(0,-3):$}async function tX(f,$){let H=`${aX(f.baseUrl)}/v1/model/info`,W=async(X)=>X6(H,{method:"GET",headers:{accept:"application/json",...X}}),Q=await W({"x-litellm-api-key":$});if(!Q.ok)Q=await W({Authorization:`Bearer ${$}`});if(!Q.ok)throw Error(`LiteLLM model refresh failed: HTTP ${Q.status}`);let j=(await Q.json())?.data??[],P={};for(let X of j){let V=X.model_name?.trim(),B=X.litellm_params?.model?.trim()||V;if(!B)continue;let A=X.model_info,R=z2(B,{name:V??B,maxTokens:A?.max_output_tokens??A?.max_tokens,contextWindow:A?.max_input_tokens??A?.max_tokens,supportsImages:A?.supports_vision,supportsPromptCache:A?.supports_prompt_caching,supportsReasoning:A?.supports_reasoning});if(P[B]=R,V)P[V]={...R,id:V,name:V}}return P}var O5={baseten:iX,hicap:nX,litellm:tX},D5=new Map,Q6=new Map;function sX(f,$){return`${f}:${j6($.baseUrl)}`}async function oX(f,$,J){let H=Qf.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],W=M2(J.baseUrl,H?.provider.baseUrl,H?.provider.modelsSourceUrl);if(!W)return{};let Q=$?.cacheTtlMs??z5,Z=sX(f,J),j=Date.now(),P=D5.get(Z);if(P&&P.expiresAt>j)return P.data;let X=Q6.get(Z);if(X)return X;let V=D2(W,f).then((Y)=>{let B=Object.fromEntries(Y.map((A)=>[A,z2(A,{name:A})]));return D5.set(Z,{data:B,expiresAt:j+Q}),B}).finally(()=>{Q6.delete(Z)});return Q6.set(Z,V),V}async function eX(f,$){let J=P6($);if(!J)return{};let H=O5[f];if(!H)return{};return H($,J)}function fV(f,$,J){if(!J)return!1;if(!O5[f])return!1;if($?.loadPrivateOnAuth===!1)return!1;return Boolean(P6(J))}async function $V(f,$,J){let H=$?.cacheTtlMs??z5,W=pX(f,J),Q=Date.now(),Z=Z6.get(W);if(Z&&Z.expiresAt>Q)return Z.data;let j=_2.get(W);if(j)return j;let P=eX(f,J).then((X)=>{return Z6.set(W,{data:X,expiresAt:Q+H}),X}).finally(()=>{_2.delete(W)});return _2.set(W,P),P}async function JV(f){return Qf.fetchModelsDevProviderModels(f)}async function O2(f={}){let $=f.url??L5,J=f.cacheTtlMs??vX,H=Date.now(),W=L2.get($);if(W&&W.expiresAt>H)return W.data;let Q=H1.get($);if(Q)return Q;let Z=JV($).then((j)=>{return L2.set($,{data:j,expiresAt:H+J}),j}).finally(()=>{H1.delete($)});return H1.set($,Z),Z}function HV(f){if(f){L2.delete(f),H1.delete(f);return}L2.clear(),H1.clear()}function WV(){Z6.clear(),_2.clear()}function QV(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:_5(J.capabilities)}]))}var V6=QV(gX());function N5(f){let $=xX(f);if(!$||!$.baseUrl)return;return{baseUrl:$.baseUrl,modelId:$.modelId,knownModels:$.knownModels,capabilities:_5($.capabilities)}}async function Y6(f,$,J){let H=N5(f);if(!H)return;try{let W=$?.loadLatestOnInit?await O2($):void 0,Q=W?rX(f,W):{},Z=J&&fV(f,$,J)?await $V(f,$,J):{},P=Boolean(Qf.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl)?J??{providerId:f,modelId:H.modelId,baseUrl:H.baseUrl}:J,X=P?await oX(f,$,P).catch(()=>({})):{},V=await dX(f,H.knownModels,Q,Z,X,J?.knownModels);return{...H,knownModels:V}}catch(W){if($?.failOnError)throw W;return H}}var B6=hf.BUILT_IN_PROVIDER,ZV=hf.BUILT_IN_PROVIDER_IDS,jV=hf.isBuiltInProviderId,N2=hf.normalizeProviderId,A6=_.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),q5=_.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),b5=_.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),w5=_.object({apiKey:_.string().optional(),accessToken:_.string().optional(),refreshToken:_.string().optional(),expiresAt:_.number().int().positive().optional(),accountId:_.string().optional()}),PV=_.enum(["none","low","medium","high","xhigh"]),C5=_.object({enabled:_.boolean().optional(),effort:PV.optional(),budgetTokens:_.number().int().positive().optional()}),E5=_.object({accessKey:_.string().optional(),secretKey:_.string().optional(),sessionToken:_.string().optional(),region:_.string().optional(),profile:_.string().optional(),authentication:_.enum(["iam","api-key","profile"]).optional(),usePromptCache:_.boolean().optional(),useCrossRegionInference:_.boolean().optional(),useGlobalInference:_.boolean().optional(),endpoint:_.string().url().optional(),customModelBaseId:_.string().optional()}),S5=_.object({projectId:_.string().optional(),region:_.string().optional()}),k5=_.object({apiVersion:_.string().optional(),useIdentity:_.boolean().optional()}),m5=_.object({clientId:_.string().optional(),clientSecret:_.string().optional(),tokenUrl:_.string().url().optional(),resourceGroup:_.string().optional(),deploymentId:_.string().optional(),useOrchestrationMode:_.boolean().optional(),api:_.enum(["orchestration","foundation-models"]).optional(),defaultSettings:_.record(_.string(),_.unknown()).optional()}),I5=_.object({mode:_.enum(["internal","external"]).optional(),usePromptCache:_.boolean().optional()}),x5=_.object({loadLatestOnInit:_.boolean().optional(),loadPrivateOnAuth:_.boolean().optional(),url:_.string().url().optional(),cacheTtlMs:_.number().int().positive().optional(),failOnError:_.boolean().optional()}),_$=_.object({provider:A6,apiKey:_.string().optional(),auth:w5.optional(),model:_.string().optional(),protocol:q5.optional(),client:b5.optional(),routingProviderId:A6.optional(),maxTokens:_.number().int().positive().optional(),contextWindow:_.number().int().positive().optional(),baseUrl:_.string().url().optional(),headers:_.record(_.string(),_.string()).optional(),timeout:_.number().int().positive().optional(),reasoning:C5.optional(),aws:E5.optional(),gcp:S5.optional(),azure:k5.optional(),sap:m5.optional(),oca:I5.optional(),region:_.string().optional(),apiLine:_.enum(["china","international"]).optional(),capabilities:_.array(_.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth"])).optional(),modelCatalog:x5.optional()});function g5(f){return _$.parse(f)}function v5(f){return _$.safeParse(f)}function XV(f){return f.protocol==="openai-responses"||f.client==="openai"}function tf(f,$={}){let J=f.provider,H=N2(J),W=$.includeKnownModels!==!1,Q=f.reasoning?.effort||"none",Z=Q==="none"?void 0:Q,j=V6[H],P=Object.assign({},...hf.resolveProviderModelCatalogKeys(H).map((U)=>hf.getGeneratedModelsForProvider(U))),X=Object.keys(P)[0],V=f.auth?.accessToken??f.apiKey??f.auth?.apiKey,Y=f.baseUrl??(H==="oca"?f.oca?.mode==="internal"?U2:G2:j?.baseUrl),B=f.routingProviderId??(XV(f)&&H!==B6.OPENAI_NATIVE?B6.OPENAI_NATIVE:void 0),A=W?j?.knownModels??(Object.keys(P).length>0?P:void 0):void 0,R={providerId:J,clientType:f.client,routingProviderId:B,modelId:f.model??j?.modelId??X??"default",...W?{knownModels:A}:{},apiKey:V,accessToken:f.auth?.accessToken,refreshToken:f.auth?.refreshToken,accountId:f.auth?.accountId,baseUrl:Y,headers:f.headers,timeoutMs:f.timeout,maxOutputTokens:f.maxTokens,maxContextTokens:f.contextWindow,thinking:f.reasoning?.enabled,reasoningEffort:Z,thinkingBudgetTokens:f.reasoning?.budgetTokens,region:f.region??f.aws?.region??f.gcp?.region,apiLine:f.apiLine,useCrossRegionInference:f.aws?.useCrossRegionInference,useGlobalInference:f.aws?.useGlobalInference,aws:f.aws?{accessKey:f.aws.accessKey,secretKey:f.aws.secretKey,sessionToken:f.aws.sessionToken,authentication:f.aws.authentication,profile:f.aws.profile,usePromptCache:f.aws.usePromptCache,endpoint:f.aws.endpoint,customModelBaseId:f.aws.customModelBaseId}:void 0,gcp:f.gcp?{projectId:f.gcp.projectId,region:f.gcp.region}:void 0,azure:f.azure,sap:f.sap,oca:f.oca,capabilities:f.capabilities??j?.capabilities,modelCatalog:f.modelCatalog?{loadLatestOnInit:f.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:f.modelCatalog.loadPrivateOnAuth,url:f.modelCatalog.url,cacheTtlMs:f.modelCatalog.cacheTtlMs,failOnError:f.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(R).filter(([U,y])=>y!==void 0))}function VV(f){let $=g5(f);return tf($)}function YV(f){let $=v5(f);if($.success)return{success:!0,config:tf($.data)};return{success:!1,error:$.error}}import{SESSION_STATUS_VALUES as BV}from"@cline/shared";var R6=BV,Pf={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function u5(f){if(f===!0)return{};if(!f)return;return f}function c5(f){if(f==="user")return"global";return f}class F6{getService;constructor(f){this.getService=f}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent(f){let $=this.getService().ingestEvent(f);return{event:$.event,duplicate:$.duplicate,matchedSpecIds:$.matchedSpecs.map((J)=>J.specId),queuedRuns:$.queuedRuns,suppressions:$.suppressions}}listEvents(f){return this.getService().listEventLogs(f)}getEvent(f){return this.getService().getEventLog(f)}listSpecs(f){return this.getService().listSpecs(f)}listRuns(f){return this.getService().listRuns(f)}}function d5(f){let{host:$}=f;return{async startSession(J){let H=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await $.startSession({source:J.source?.trim()||Pf.CLI,interactive:!1,config:{providerId:N2(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:H,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:FV(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{extensionContext:f.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(J,H){let W=await $.runTurn({sessionId:J,prompt:H.prompt,userImages:H.attachments?.userImages,userFiles:H.attachments?.userFiles?.map((Q)=>Q.content),delivery:H.delivery});if(!W)throw Error("ClineCore automation runtime returned no result");return{result:RV(W)}},async abortSession(J){return await $.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function q2(f){let $=AV(f.automationService,f.automation),J=f.context?.client??(f.clientName?{name:f.clientName}:void 0),H=f.context?.user??(f.distinctId?{distinctId:f.distinctId}:void 0),W=f.context?.logger??f.logger,Q=f.context?.telemetry??f.telemetry;if(!$&&!J&&!H&&!W&&!Q)return f.context;return{...f.context??{},...J?{client:J}:{},...H?{user:H}:{},...W?{logger:W}:{},...Q?{telemetry:Q}:{},...$?{automation:$}:{}}}function AV(f,$){if(!f)return;return{ingestEvent:(J)=>{$.ingestEvent(J)}}}function RV(f){return{text:f.text,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost},inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,iterations:f.iterations,finishReason:f.finishReason,toolCalls:f.toolCalls.map(($)=>({name:$.name,input:$.input,output:$.output,error:$.error,durationMs:$.durationMs}))}}function FV(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}import{existsSync as FJ}from"node:fs";import{basename as H7,isAbsolute as pA,relative as iA}from"node:path";import{createHash as yV}from"node:crypto";import{watch as KV}from"node:fs";import{readdir as UV,readFile as GV}from"node:fs/promises";import{join as hV}from"node:path";function TV(f){return yV("sha1").update(f).digest("hex")}function p5(f){return Boolean(f&&typeof f==="object"&&"code"in f)}function r5(f){return p5(f)&&f.code==="ENOENT"}function l5(f){return p5(f)&&(f.code==="EACCES"||f.code==="EPERM")}class W1{definitions;debounceMs;emitParseErrors;listeners=new Set;recordsByType=new Map;watchersByDirectory=new Map;baseTypesByDirectory=new Map;watchedTypesByDirectory=new Map;discoveredDirectoriesByType=new Map;definitionsByType=new Map;pendingTypes=new Set;flushTimer;refreshQueue=Promise.resolve();started=!1;constructor(f,$){if(f.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=f,this.debounceMs=$?.debounceMs??75,this.emitParseErrors=$?.emitParseErrors??!1;for(let J of f){if(this.definitionsByType.has(J.type))throw Error(`Duplicate unified config definition type '${J.type}'.`);this.definitionsByType.set(J.type,J),this.recordsByType.set(J.type,new Map),this.discoveredDirectoriesByType.set(J.type,new Set);for(let H of J.directories){let W=this.baseTypesByDirectory.get(H);if(W)W.add(J.type);else this.baseTypesByDirectory.set(H,new Set([J.type]))}}}subscribe(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}async start(){if(this.started)return;this.started=!0,await this.refreshAll(),this.startDirectoryWatchers()}stop(){if(this.started=!1,this.flushTimer)clearTimeout(this.flushTimer),this.flushTimer=void 0;this.pendingTypes.clear();for(let f of this.watchersByDirectory.values())f.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let f of this.definitions)await this.refreshTypeInternal(f)})}async refreshType(f){let $=this.definitionsByType.get(f);if(!$)throw Error(`Unknown unified config type '${f}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal($)})}getSnapshot(f){let $=this.recordsByType.get(f);return new Map([...$?.entries()??[]].map(([J,H])=>[J,{...H}]))}getAllSnapshots(){let f=new Map;for(let[$,J]of this.recordsByType.entries())f.set($,new Map([...J.entries()].map(([H,W])=>[H,{...W}])));return f}emit(f){for(let $ of this.listeners)$(f)}enqueueRefresh(f){return this.refreshQueue=this.refreshQueue.then(f,f),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let f=this.buildDesiredTypesByDirectory();for(let[$,J]of this.watchersByDirectory.entries()){if(f.has($))continue;J.close(),this.watchersByDirectory.delete($)}this.watchedTypesByDirectory=f;for(let $ of f.keys()){if(this.watchersByDirectory.has($))continue;try{let J=KV($,()=>{let H=this.watchedTypesByDirectory.get($);if(!H)return;for(let W of H)this.pendingTypes.add(W);this.scheduleFlush()});this.watchersByDirectory.set($,J),J.on("error",(H)=>{let W=this.watchedTypesByDirectory.get($);if(!W)return;for(let Q of W)this.emit({kind:"error",type:Q,error:H,filePath:$})})}catch(J){if(!r5(J)&&!l5(J)){let H=f.get($);if(!H)continue;for(let W of H)this.emit({kind:"error",type:W,error:J,filePath:$})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let f=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let $ of f){let J=this.definitionsByType.get($);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal(f){let{records:$,discoveredDirectories:J}=await this.loadDefinition(f),H=this.recordsByType.get(f.type)??new Map;for(let[W,Q]of H.entries()){if($.has(W))continue;this.emit({kind:"remove",type:f.type,id:W,filePath:Q.filePath})}for(let[W,Q]of $.entries()){let Z=H.get(W);if(Z&&Z.filePath===Q.filePath&&Z.fingerprint===Q.fingerprint)continue;this.emit({kind:"upsert",record:{type:Q.type,id:W,item:Q.item,filePath:Q.filePath}})}if(this.recordsByType.set(f.type,$),this.discoveredDirectoriesByType.set(f.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition(f){let $=new Map,J=new Set;for(let H of f.directories){J.add(H);let W=f.discoverFiles?await f.discoverFiles(H):await this.readDirectoryFileCandidates(H);for(let Q of W){let{fileName:Z,filePath:j}=Q;if(J.add(Q.directoryPath),f.includeFile&&!f.includeFile(Z,j))continue;try{let P=await GV(j,"utf8"),X={type:f.type,directoryPath:Q.directoryPath,fileName:Z,filePath:j,content:P},V=f.parseFile(X),Y=f.resolveId(V,X).trim();if(!Y)continue;$.set(Y,{type:f.type,id:Y,item:V,filePath:j,fingerprint:TV(P)})}catch(P){if(this.emitParseErrors)this.emit({kind:"error",type:f.type,error:P,filePath:j})}}}return{records:$,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let f=new Map;for(let[$,J]of this.baseTypesByDirectory.entries())f.set($,new Set(J));for(let[$,J]of this.discoveredDirectoriesByType.entries())for(let H of J){let W=f.get(H);if(W)W.add($);else f.set(H,new Set([$]))}return f}async readDirectoryFileCandidates(f){try{return(await UV(f,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:f,fileName:J.name,filePath:hV(f,J.name)})).sort((J,H)=>J.fileName.localeCompare(H.fileName))}catch($){if(r5($)||l5($))return[];throw $}}}import{readdir as y6,readFile as DV,stat as i5}from"node:fs/promises";import{basename as c0,dirname as MV,extname as K6,join as Rf}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as n5,resolveRulesConfigSearchPaths as _V,resolveSkillsConfigSearchPaths as LV,resolveWorkflowsConfigSearchPaths as zV,SKILLS_CONFIG_DIRECTORY_NAME as U6,WORKFLOWS_CONFIG_DIRECTORY_NAME as G6}from"@cline/shared/storage";import OV from"yaml";var b2="SKILL.md",NV="managed.json",qV=new Set([".md",".markdown",".txt"]);function h6(f){return f.trim().toLowerCase()}function Q1(f){let $=f;return $?.code==="ENOENT"||$?.code==="EACCES"||$?.code==="EPERM"}function w2(f){return qV.has(K6(f).toLowerCase())}async function T6(f){try{let $=await y6(f,{withFileTypes:!0}),J=[];for(let H of $){if(!H.isDirectory())continue;let W=Rf(f,H.name),Q=Rf(W,NV);try{let Z=await DV(Q,"utf8"),j=JSON.parse(Z);if(j&&typeof j==="object")J.push(W)}catch(Z){if(Q1(Z))continue;if(Z?.name==="SyntaxError")continue;throw Z}}return J.sort((H,W)=>H.localeCompare(W))}catch($){if(Q1($))return[];throw $}}function D6(f){let $=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=f.match($);if(!J)return{data:{},body:f,hadFrontmatter:!1};let[,H,W]=J;try{let Q=OV.parse(H);return{data:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},body:W,hadFrontmatter:!0}}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);return{data:{},body:f,hadFrontmatter:!0,parseError:Z}}}function C2(f,$,J){if(f===void 0||f===null){if(J)throw Error(`Missing required frontmatter field '${$}'.`);return}if(typeof f!=="string")throw Error(`Frontmatter field '${$}' must be a string.`);let H=f.trim();if(!H&&J)throw Error(`Frontmatter field '${$}' cannot be empty.`);return H||void 0}function L$(f,$){if(f===void 0||f===null)return;if(typeof f!=="boolean")throw Error(`Frontmatter field '${$}' must be a boolean.`);return f}function M6(f,$){let{data:J,body:H,parseError:W}=D6(f);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let Q=H.trim();if(!Q)throw Error("Missing instructions body in skill file.");let j=C2(J.name,"name",!1)??$.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:C2(J.description,"description",!1),disabled:L$(J.disabled,"disabled")??(L$(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function _6(f,$){let{data:J,body:H,parseError:W}=D6(f);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let Q=H.trim();if(!Q)throw Error("Missing instructions body in rule file.");let Z=C2(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing rule name.");return{name:Z,disabled:L$(J.disabled,"disabled")??(L$(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function L6(f,$){let{data:J,body:H,parseError:W}=D6(f);if(W)throw Error(`Failed to parse YAML frontmatter: ${W}`);let Q=H.trim();if(!Q)throw Error("Missing instructions body in workflow file.");let Z=C2(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing workflow name.");return{name:Z,disabled:L$(J.disabled,"disabled")??(L$(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function z6(f){return LV(f)}function O6(f){return _V(f)}function N6(f){return zV(f)}async function a5(f){if(c0(f)===".cline"){let $=await T6(f);return(await Promise.all($.map((H)=>a5(Rf(H,U6))))).flat()}try{let $=await y6(f,{withFileTypes:!0}),J=[];for(let H of $){if(H.isFile()&&H.name===b2){J.push({directoryPath:f,fileName:H.name,filePath:Rf(f,H.name)});continue}if(H.isDirectory())J.push({directoryPath:Rf(f,H.name),fileName:b2,filePath:Rf(f,H.name,b2)})}return J}catch($){if(Q1($))return[];throw $}}async function E2(f){if(c0(f)===".cline"){let $=await T6(f);return(await Promise.all($.map((H)=>E2(Rf(H,"rules.md"))))).flat()}try{if((await i5(f)).isFile())return[{directoryPath:MV(f),fileName:c0(f),filePath:f}]}catch($){if(!Q1($))throw $}try{let J=(await y6(f,{withFileTypes:!0})).filter((W)=>W.isFile()&&w2(W.name)).map((W)=>({directoryPath:f,fileName:W.name,filePath:Rf(f,W.name)})),H=Rf(f,"AGENTS.md");try{if((await i5(H)).isFile()){if(!J.some((Z)=>Z.fileName==="AGENTS.md"))J.push({directoryPath:f,fileName:"AGENTS.md",filePath:H})}}catch{}return J}catch($){if(Q1($))return[];throw $}}async function bV(f){if(c0(f)===".cline"){let $=await T6(f);return(await Promise.all($.map((H)=>E2(Rf(H,G6))))).flat()}return E2(f)}function q6(f){let $=f?.directories??z6(f?.workspacePath),J=f?.workspacePath?Rf(f.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...$,J]:$,discoverFiles:a5,includeFile:(H)=>H===b2,parseFile:(H)=>M6(H.content,c0(H.directoryPath)),resolveId:(H)=>h6(H.name)}}function b6(f){let $=f?.directories??O6(f?.workspacePath),J=f?.workspacePath?Rf(f.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...$,J]:$,discoverFiles:E2,includeFile:(H,W)=>H===".clinerules"||w2(H)||w2(W),parseFile:(H)=>_6(H.content,c0(H.filePath,K6(H.filePath))),resolveId:(H)=>h6(H.name)}}function w6(f){let $=f?.directories??N6(f?.workspacePath),J=f?.workspacePath?Rf(f.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...$,J]:$,discoverFiles:bV,includeFile:(H)=>w2(H),parseFile:(H)=>L6(H.content,c0(H.filePath,K6(H.filePath))),resolveId:(H)=>h6(H.name)}}function t5(f){let $=[q6(f?.skills),b6(f?.rules),w6(f?.workflows)];return new W1($,{debounceMs:f?.debounceMs,emitParseErrors:f?.emitParseErrors})}import{truncateSplit as s5}from"@cline/shared";function wV(f,$){if(f.description?.trim())return s5(f.description,".");if($==="workflow")return;return s5(f.instructions,".")}function CV(f){return f.disabled!==!0}function o5(f,$){return[...f.getSnapshot($).entries()].map(([J,H])=>({id:J,record:H})).filter(({record:J})=>CV(J.item)).map(({id:J,record:H})=>({id:J,name:H.item.name,instructions:H.item.instructions,description:wV(H.item,$),kind:$})).sort((J,H)=>J.name.localeCompare(H.name))}function Z1(f){let $=new Map;for(let J of[...o5(f,"workflow"),...o5(f,"skill")])if(!$.has(J.name))$.set(J.name,J);return[...$.values()].sort((J,H)=>J.name.localeCompare(H.name))}function e5(f,$){if(!f.startsWith("/")||f.length<2)return f;let J=f.match(/^\/(\S+)/);if(!J)return f;let H=J[1];if(!H)return f;let W=H.length+1,Q=f.slice(W),Z=Z1($).find((j)=>j.name===H);return Z?`${Z.instructions}${Q}`:f}function f9(f){return f.disabled!==!0}function S2(f){if(f.length===0)return"";return`
45
+
46
+ # Rules
47
+ ${f.map((J)=>`## ${J.name}
48
+ ${J.instructions}`).join(`
49
+
50
+ `)}`}function k2(f,$){let J=f?.trim(),H=$?.trim();if(J&&H)return`${J}
51
+
52
+ ${H}`;return J||H||void 0}function EV(f){return[...f.getSnapshot("rule").values()].map((J)=>J.item).filter(f9).sort((J,H)=>J.name.localeCompare(H.name))}function $9(f){return S2(EV(f))}import{validateWithZod as VO,zodToJsonSchema as YO}from"@cline/shared";var $f={READ_FILES:"read_files",SEARCH_CODEBASE:"search_codebase",RUN_COMMANDS:"run_commands",FETCH_WEB_CONTENT:"fetch_web_content",APPLY_PATCH:"apply_patch",EDITOR:"editor",SKILLS:"skills",ASK:"ask_question",SUBMIT_AND_EXIT:"submit_and_exit"},z$=[$f.READ_FILES,$f.SEARCH_CODEBASE,$f.RUN_COMMANDS,$f.FETCH_WEB_CONTENT,$f.APPLY_PATCH,$f.EDITOR,$f.SKILLS,$f.ASK,$f.SUBMIT_AND_EXIT];import{createTool as sf,validateWithZod as y0,zodToJsonSchema as vf}from"@cline/shared";import{validateWithZod as V9}from"@cline/shared";import{z as D}from"zod";var R0=6000,C6=D.string().describe("The absolute file path of a text file to read content from"),J9=D.object({start_line:D.number().int().positive().nullable().optional().describe("Optional one-based starting line number to read from; use null or omit for the start of the file"),end_line:D.number().int().positive().nullable().optional().describe("Optional one-based ending line number to read through; use null or omit for the end of the file")}).describe("Optional inclusive one-based file line range"),d0=D.object({path:C6,start_line:J9.shape.start_line,end_line:J9.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),m2=D.object({files:D.array(d0).describe("Array of file read requests. Omit start_line/end_line or set them to null to return the full file content boundaries; provide integers to return only that inclusive one-based line range. Prefer this tool over running terminal command to get file content for better performance and reliability.")}),H9=D.union([m2,d0,D.array(d0),D.array(D.string()),D.string(),D.object({files:d0}),D.object({file_paths:D.array(C6)}),D.object({file_paths:D.string()}),D.object({paths:D.array(D.union([C6,d0]))}),D.object({paths:d0}),D.object({paths:D.string()})]),I2=D.object({queries:D.array(D.string()).describe("Array of regex search queries to execute")}),W9=D.union([I2,D.array(D.string()),D.string(),D.object({queries:D.string()})]),r0=D.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${R0*2} characters) to avoid timeouts.`),j1=D.object({commands:D.array(r0).describe("Array of shell commands to execute")}),Q9=D.union([j1,D.object({commands:r0}),D.object({command:r0}),D.object({cmd:r0}),D.array(D.string()),D.string()]),E6=D.object({command:D.string().min(1).describe("The executable to run directly without shell parsing."),args:D.array(D.string()).optional().describe("Optional argv list passed directly to the executable.")}),Z9=D.union([r0,E6]),S6=D.object({commands:D.array(Z9).describe("Array of commands to execute. Prefer structured { command, args } entries for portability; plain strings are still supported and are interpreted by the active shell.")}),j9=D.union([j1,S6,D.object({commands:Z9}),D.array(E6),E6,D.object({command:r0}),D.object({cmd:r0}),D.array(D.string()),D.string()]),P9=D.object({url:D.string().describe("The URL to fetch"),prompt:D.string().min(2).describe("Analysis prompt for the fetched content")}),x2=D.object({requests:D.array(P9).describe("Array of the URLs for the web fetch requests")}),g2=D.object({path:D.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:D.string().nullable().optional().describe(`Exact text to replace (must match exactly once). Omit this when creating a missing file or inserting via insert_line. Keep this at or below ${R0} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:D.string().describe(`The new content to write when creating a missing file, the replacement text for edits, or the inserted text when insert_line is provided. Keep this at or below ${R0} characters when possible; for large edits, use multiple calls with small chunks of old_text and new_text to iteratively edit the file.`),insert_line:D.number().int().nullable().optional().describe("Optional positive one-based boundary line. When provided, the tool inserts new_text before that line instead of performing a replacement edit; use line_count + 1 to append at EOF.")}).describe("Edit a text file by replacing old_text with new_text, create the file with new_text if it does not exist, or insert new_text at insert_line when insert_line is provided. Prefer using this tool for file edits over shell commands. IMPORTANT: large edits can time out, so use small chunks and multiple calls when possible."),v2=D.object({input:D.string().min(1).describe("The freeform apply_patch payload in the canonical patch grammar (e.g *** Begin Patch, *** Update File:, @@, and *** End Patch).")}).describe("Modify or create a text file by applying patches using the canonical apply_patch diff grammar. Prefer sending the patch body directly rather than wrapping it in shell syntax. IMPORTANT: large patches can time out, so use small chunks and multiple calls when possible."),X9=D.union([v2,D.string()]),u2=D.object({skill:D.string().min(1).describe("Name of the skill to execute."),args:D.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),c2=D.object({question:D.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:D.array(D.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),d2=D.object({summary:D.string().min(10).describe("Summarization of the investigation, steps taken, and resolution status to submit at the end of the session. Before submitting, read the problem again along with any provided test's assertions carefully and confirm your fix produces the expected output."),verified:D.boolean().describe(`Have you verified that the issue is resolved to the best of your knowledge, including updating and creating all the requested files and items? 'True' if you have completed the investigation and taken all necessary steps to resolve the issue.
53
+ 'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
54
+ IMPORTANT: You must run the specific failing test(s) mentioned in the issue or test patch and include the test output in your reasoning. If the test still fails after your fix, you must revise. Do NOT submit with 'true' unless the test output shows the test passing.`)});function F0(f){if(f instanceof Error)return f.message;return String(f)}function Y9(f){if(typeof f.old_text==="string"&&f.old_text.length>R0)return`Editor input too large: old_text was ${f.old_text.length} characters, exceeding the recommended limit of ${R0}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if(f.new_text.length>R0)return`Editor input too large: new_text was ${f.new_text.length} characters, exceeding the recommended limit of ${R0}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function gf(f,$,J){return Promise.race([f,new Promise((H,W)=>{setTimeout(()=>W(Error(J)),$)})])}function B9(f){let $=V9(H9,f);if(typeof $==="string")return[{path:$}];if(Array.isArray($))return $.map((J)=>typeof J==="string"?{path:J}:J);if("files"in $)return Array.isArray($.files)?$.files:[$.files];if("file_paths"in $)return(Array.isArray($.file_paths)?$.file_paths:[$.file_paths]).map((H)=>({path:H}));if("paths"in $)return(Array.isArray($.paths)?$.paths:[$.paths]).map((H)=>typeof H==="string"?{path:H}:H);return[$]}function r2(f){let{path:$,start_line:J,end_line:H}=f;if(J==null&&H==null)return $;return`${$}:${J??1}-${H??"EOF"}`}function A9(f){let{start_line:$,end_line:J}=f;if($==null||J==null||$<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${$}, end_line: ${J})`}function R9(f){let $=V9(j9,f);if(typeof $==="string")return[$];if(Array.isArray($))return $;if("commands"in $)return Array.isArray($.commands)?$.commands:[$.commands];if("command"in $)return"args"in $?[$]:[$.command];if("cmd"in $)return[$.cmd];return[$]}function k6(f){if(typeof f==="string")return f;let $=f.args??[];if($.length===0)return f.command;let J=$.map((H)=>/[\s"]/u.test(H)?JSON.stringify(H):H);return`${f.command} ${J.join(" ")}`}function F9(f,$={}){let J=$.fileReadTimeoutMs??1e4;return sf({name:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided. Returns file contents or error messages for each path.",inputSchema:vf(m2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(H,W)=>{let Q=B9(H);return Promise.all(Q.map(async(Z)=>{let j=A9(Z);if(j)return{query:r2(Z),result:"",error:`Invalid file range: ${j}`,success:!1};try{let P=await gf(f(Z,W),J,`File read timed out after ${J}ms`);return{query:r2(Z),result:P,success:!0}}catch(P){let X=F0(P);return{query:r2(Z),result:"",error:`Error reading file: ${X}`,success:!1}}}))}})}function y9(f,$={}){let J=$.searchTimeoutMs??30000,H=$.cwd??process.cwd();return sf({name:"search_codebase",description:"Perform regex pattern searches across the codebase. Supports multiple parallel searches. Use for finding code patterns, function definitions, class names, imports, etc.",inputSchema:vf(I2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(W,Q)=>{let Z=y0(W9,W),j=Array.isArray(Z)?Z:typeof Z==="object"?Array.isArray(Z.queries)?Z.queries:[Z.queries]:[Z];return Promise.all(j.map(async(P)=>{try{let X=await gf(f(P,H,Q),J,`Search timed out after ${J}ms`),V=X.length>0&&!X.includes("No results found");return{query:P,result:X,success:V}}catch(X){let V=F0(X);return{query:P,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function K9(f,$={}){let J=$.bashTimeoutMs??30000,H=$.cwd??process.cwd();return sf({name:"run_commands",description:"Run shell commands from the root of the workspace. Use for listing files, checking git status, running builds, executing tests, etc. Commands should be properly shell-escaped.",inputSchema:vf(j1),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=y0(Q9,W),j;if(typeof Z==="string")j=[Z];else if(Array.isArray(Z))j=Z;else if("commands"in Z)j=Array.isArray(Z.commands)?Z.commands:[Z.commands];else if("command"in Z)j=[Z.command];else j=[Z.cmd];return Promise.all(j.map(async(P)=>{try{let X=await gf(f(P,H,Q),J,`Command timed out after ${J}ms`);return{query:P,result:X,success:!0}}catch(X){let V=F0(X);return{query:P,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function U9(f,$={}){let J=$.bashTimeoutMs??30000,H=$.cwd??process.cwd();return sf({name:"run_commands",description:"Run shell commands from the root of the workspacein Windows environment. Use for listing files, checking git status, running builds, executing tests, etc. Prefer structured { command, args } entries for portability; plain string commands should be properly shell-escaped.",inputSchema:vf(S6),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=R9(W);return Promise.all(Z.map(async(j)=>{try{let P=await gf(f(j,H,Q),J,`Command timed out after ${J}ms`);return{query:k6(j),result:P,success:!0}}catch(P){let X=F0(P);return{query:k6(j),result:"",error:`Command failed: ${X}`,success:!1}}}))}})}function G9(f,$={}){let J=$.webFetchTimeoutMs??30000;return sf({name:"fetch_web_content",description:"Fetch content from URLs and analyze them using the provided prompts. Use for retrieving documentation, API references, or any web content. Each request includes a URL and a prompt describing what information to extract.",inputSchema:vf(x2),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(H,W)=>{let Q=y0(x2,H);return Promise.all(Q.requests.map(async(Z)=>{try{let j=await gf(f(Z.url,Z.prompt,W),J,`Web fetch timed out after ${J}ms`);return{query:Z.url,result:j,success:!0}}catch(j){let P=F0(j);return{query:Z.url,result:"",error:`Error fetching web content: ${P}`,success:!1}}}))}})}var SV=`Use \`apply_patch\` to edit files with the canonical freeform patch grammar. Pass the patch text directly as the \`input\` string. Prefer the exact format below:
55
+
56
+ *** Begin Patch
57
+ *** Update File: path/to/file.ts
58
+ @@ optional section marker
59
+ [context before]
60
+ -[old line]
61
+ +[new line]
62
+ [context after]
63
+ *** End Patch
64
+
65
+ Supported actions:
66
+ - \`*** Add File: <path>\`
67
+ - \`*** Update File: <path>\`
68
+ - \`*** Delete File: <path>\`
69
+ - optional \`*** Move to: <new path>\` immediately after an Update File header
70
+
71
+ Rules:
72
+ - In an Add File section, every file-content line must start with \`+\`.
73
+ - In an Update section, use context lines plus \`-\` and \`+\` lines to describe the change.
74
+ - Use \`@@\` markers when extra context is needed to disambiguate repeated code blocks.
75
+ - Do not use line numbers; this format is context-based.
76
+ - Prefer sending the patch body directly. Legacy shell wrappers such as \`%%bash\` and \`apply_patch <<"EOF"\` are accepted for compatibility but are not preferred.
77
+
78
+ Example:
79
+
80
+ *** Begin Patch
81
+ *** Update File: src/page.tsx
82
+ @@
83
+ return (
84
+ <div>
85
+ <button onClick={() => console.log("clicked")}>Click me</button>
86
+ + <button onClick={() => console.log("cancel clicked")}>Cancel</button>
87
+ </div>
88
+ );
89
+ }
90
+ *** End Patch`;function h9(f,$={}){let J=$.applyPatchTimeoutMs??30000,H=$.cwd??process.cwd();return sf({name:"apply_patch",description:SV,inputSchema:vf(v2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=y0(X9,W),j=typeof Z==="string"?Z:Z.input;try{return{query:"apply_patch",result:await gf(f({input:j},H,Q),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(P){return{query:"apply_patch",result:"",error:`apply_patch failed: ${F0(P)}`,success:!1}}}})}function T9(f,$={}){let J=$.editorTimeoutMs??30000,H=$.cwd??process.cwd();return sf({name:"editor",description:"An editor for controlled filesystem edits on the text file at the provided path. Provide `insert_line` to insert `new_text` at a specific line number. Otherwise, the tool replaces `old_text` with `new_text`, or creates the file with `new_text` if file does not exist. Use this tools for making small, precise edits to existing files or creating new files over shell commands.",inputSchema:vf(g2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=y0(g2,W),j=Z.insert_line==null?"edit":"insert",P=Y9(Z);if(P)return{query:`${j}:${Z.path}`,result:"",error:P,success:!1};try{let X=await gf(f(Z,H,Q),J,`Editor operation timed out after ${J}ms`);return{query:`${j}:${Z.path}`,result:X,success:!0}}catch(X){let V=F0(X);return{query:`${j}:${Z.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function O$(f,$={}){let J=$.skillsTimeoutMs??15000,H='Execute a skill within the main conversation. When users ask you to perform tasks, check if any available skills match. When users reference a slash command, invoke it with this tool. Input: `skill` (required) and optional `args`. Example: `skill: "pdf"`, `skill: "commit", args: "-m \\"Fix bug\\""`, `skill: "review-pr", args: "123"`, `skill: "ms-office-suite:pdf"`. When a skill matches the user\'s request, invoking this tool is a blocking requirement before any other response. Never mention a skill without invoking this tool.',W=sf({name:"skills",description:H,inputSchema:vf(u2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let j=y0(u2,Q);return gf(f(j.skill,j.args||void 0,Z),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(W,"description",{get(){let Q=f.configuredSkills?.filter((Z)=>!Z.disabled).map((Z)=>Z.name);if(Q&&Q.length>0)return`${H} Available skills: ${Q.join(", ")}.`;return H},enumerable:!0,configurable:!0}),W}function D9(f){return{name:"ask_question",description:"Ask user a question for clarifying or gathering information needed to complete the task. For example, ask the user clarifying questions about a key implementation decision. You should only ask one question. Provide an array of 2-5 options for the user to choose from. Never include an option to toggle to Act mode.",inputSchema:vf(c2),retryable:!1,maxRetries:0,execute:async($,J)=>{let H=y0(c2,$);return f(H.question,H.options,J)}}}function M9(f,$={}){let J=$.submitTimeoutMs??15000;return sf({name:"submit_and_exit",description:"Submit the final answer and exit the conversation. For example, submit a summary of the investigation and confirm the issue is resolved. You should only submit once all necessary steps are completed. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:vf(d2),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(H,W)=>{let Q=y0(d2,H);return gf(f(Q.summary,Q.verified,W),J,`submit_and_exit timed out after ${J}ms`)}})}function N$(f){let{executors:$,enableReadFiles:J=!0,enableSearch:H=!0,enableBash:W=!0,enableWebFetch:Q=!0,enableApplyPatch:Z=!1,enableEditor:j=!0,enableSkills:P=!0,enableAskQuestion:X=!0,enableSubmitAndExit:V=!1,...Y}=f,B=[];if(J&&$.readFile)B.push(F9($.readFile,Y));if(H&&$.search)B.push(y9($.search,Y));if(W&&$.bash)if(process.platform==="win32")B.push(U9($.bash,Y));else B.push(K9($.bash,Y));if(Q&&$.webFetch)B.push(G9($.webFetch,Y));if(j&&$.editor)B.push(T9($.editor,Y));else if(Z&&$.applyPatch)B.push(h9($.applyPatch,Y));if(P&&$.skills)B.push(O$($.skills,Y));let A=V?$.submit:void 0;if(X&&$.askQuestion&&!A)B.push(D9($.askQuestion));if(A)B.push(M9(A,Y));return B}import*as Df from"node:fs/promises";import*as Mf from"node:path";var S={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},L9=["%%bash","apply_patch","EOF","```"];class o extends Error{constructor(f){super(f);this.name="DiffError"}}function Tf(f){let $={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return f.normalize("NFC").replace(/./gu,(J)=>$[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class m6{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor(f,$){this.lines=f;this.currentFiles=$}parse(){this.skipBeginSentinel();while(this.hasMoreLines()&&!this.isEndMarker())this.parseNextAction();if(this.patch.warnings?.length===0)delete this.patch.warnings;return{patch:this.patch,fuzz:this.fuzz}}addWarning(f){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push(f)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(S.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(S.END)??!1}parseNextAction(){let f=this.lines[this.index];if(f?.startsWith(S.UPDATE)){this.parseUpdate(f.substring(S.UPDATE.length).trim());return}if(f?.startsWith(S.DELETE)){this.parseDelete(f.substring(S.DELETE.length).trim());return}if(f?.startsWith(S.ADD)){this.parseAdd(f.substring(S.ADD.length).trim());return}throw new o(`Unknown line while parsing: ${f}`)}checkDuplicate(f,$){if(f in this.patch.actions)throw new o(`Duplicate ${$} for file: ${f}`)}parseUpdate(f){this.checkDuplicate(f,"update"),this.currentPath=f,this.index++;let $=this.lines[this.index]?.startsWith(S.MOVE)?(this.lines[this.index++]??"").substring(S.MOVE.length).trim():void 0;if(!(f in this.currentFiles))throw new o(`Update File Error: Missing File: ${f}`);let J=this.currentFiles[f]??"",H=this.parseUpdateFile(J,f);H.movePath=$,this.patch.actions[f]=H,this.currentPath=void 0}parseUpdateFile(f,$){let J={type:"update",chunks:[]},H=f.split(`
91
+ `),W=0,Q=[S.END,S.UPDATE,S.DELETE,S.ADD,S.END_FILE];while(!Q.some((Z)=>this.lines[this.index]?.startsWith(Z.trim()))){let Z=this.lines[this.index],j=Z?.startsWith("@@ ")?Z.substring(3):void 0;if(j!==void 0||(Z==="@@"?Z:void 0)!==void 0)this.index++;else if(W!==0)throw new o(`Invalid Line:
92
+ ${this.lines[this.index]}`);if(j?.trim()){let y=Tf(j.trim());for(let F=W;F<H.length;F++){let K=H[F];if(K&&(Tf(K)===y||Tf(K.trim())===y)){if(W=F+1,Tf(K.trim())===y&&Tf(K)!==y)this.fuzz++;break}}}let[X,V,Y,B]=IV(this.lines,this.index),[A,R,U]=mV(H,X,W,B);if(A===-1){let y=X.join(`
93
+ `);this.addWarning({path:this.currentPath||$,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${U.toFixed(2)}). Chunk skipped.`,context:y.length>200?`${y.substring(0,200)}...`:y}),this.index=Y}else{this.fuzz+=R;for(let y of V)y.origIndex+=A,J.chunks.push(y);W=A+X.length,this.index=Y}}return J}parseDelete(f){if(this.checkDuplicate(f,"delete"),!(f in this.currentFiles))throw new o(`Delete File Error: Missing File: ${f}`);this.patch.actions[f]={type:"delete",chunks:[]},this.index++}parseAdd(f){if(this.checkDuplicate(f,"add"),f in this.currentFiles)throw new o(`Add File Error: File already exists: ${f}`);this.index++;let $=[],J=[S.END,S.UPDATE,S.DELETE,S.ADD];while(this.hasMoreLines()&&!J.some((H)=>this.lines[this.index]?.startsWith(H.trim()))){let H=this.lines[this.index++];if(H===void 0)break;if(!H.startsWith("+"))throw new o(`Invalid Add File line (missing '+'): ${H}`);$.push(H.substring(1))}this.patch.actions[f]={type:"add",newFile:$.join(`
94
+ `),chunks:[]}}}function _9(f,$){let J=f.length>$.length?f:$,H=f.length>$.length?$:f;if(J.length===0)return 1;let W=kV(H,J);return(J.length-W)/J.length}function kV(f,$){let J=$.length+1,H=f.length+1,W=Array(J*H).fill(0),Q=(j,P)=>W[j*H+P]??0,Z=(j,P,X)=>{W[j*H+P]=X};for(let j=0;j<=$.length;j++)Z(j,0,j);for(let j=0;j<=f.length;j++)Z(0,j,j);for(let j=1;j<=$.length;j++)for(let P=1;P<=f.length;P++)if($[j-1]===f[P-1])Z(j,P,Q(j-1,P-1));else Z(j,P,1+Math.min(Q(j-1,P-1),Q(j,P-1),Q(j-1,P)));return Q($.length,f.length)}function mV(f,$,J,H){if($.length===0)return[J,0,1];let W=0,Q=(Z)=>{let j=Tf($.join(`
95
+ `));for(let X=Z;X<f.length;X++){let V=Tf(f.slice(X,X+$.length).join(`
96
+ `));if(V===j)return[X,0,1];let Y=_9(V,j);if(Y>W)W=Y}for(let X=Z;X<f.length;X++){let V=Tf(f.slice(X,X+$.length).map((B)=>B.trimEnd()).join(`
97
+ `)),Y=Tf($.map((B)=>B.trimEnd()).join(`
98
+ `));if(V===Y)return[X,1,1]}for(let X=Z;X<f.length;X++){let V=Tf(f.slice(X,X+$.length).map((B)=>B.trim()).join(`
99
+ `)),Y=Tf($.map((B)=>B.trim()).join(`
100
+ `));if(V===Y)return[X,100,1]}let P=0.66;for(let X=Z;X<f.length;X++){let V=Tf(f.slice(X,X+$.length).join(`
101
+ `)),Y=_9(V,j);if(Y>=P)return[X,1000,Y];if(Y>W)W=Y}return[-1,0,W]};if(H){let[Z,j,P]=Q(f.length-$.length);if(Z!==-1)return[Z,j,P];return[Z,j,P]=Q(J),[Z,j+1e4,P]}return Q(J)}function IV(f,$){let J=$,H=[],W=[],Q=[],Z=[],j="keep",P=["@@",S.END,S.UPDATE,S.DELETE,S.ADD,S.END_FILE];while(J<f.length){let X=f[J];if(!X||P.some((B)=>X.startsWith(B.trim())))break;if(X==="***")break;if(X.startsWith("***"))throw new o(`Invalid line: ${X}`);J++;let V=j,Y=X;if(Y[0]==="+")j="add";else if(Y[0]==="-")j="delete";else if(Y[0]===" ")j="keep";else j="keep",Y=` ${Y}`;if(Y=Y.slice(1),j==="keep"&&V!==j){if(Q.length||W.length)Z.push({origIndex:H.length-W.length,delLines:W,insLines:Q});W=[],Q=[]}if(j==="delete")W.push(Y),H.push(Y);else if(j==="add")Q.push(Y);else H.push(Y)}if(Q.length||W.length)Z.push({origIndex:H.length-W.length,delLines:W,insLines:Q});if(J<f.length&&f[J]===S.END_FILE)return J++,[H,Z,J,!0];return[H,Z,J,!1]}function I6(f,$,J){let H=Mf.isAbsolute($),W=H?Mf.normalize($):Mf.resolve(f,$);if(!J||H)return W;let Q=Mf.relative(f,W);if(Q.startsWith("..")||Mf.isAbsolute(Q))throw new o(`Path must stay within cwd: ${$}`);return W}function xV(f){return f.split(`
102
+ `).map(($)=>$.replace(/\r$/,""))}function z9(f){if(f.trim()==="")return!1;return L9.some(($)=>f.startsWith($))}function gV(f){let $=0,J=f.length;while($<J&&z9(f[$]??""))$++;while(J>$&&z9(f[J-1]??""))J--;return f.slice($,J)}function vV(f){let $=xV(f),J=$.findIndex((Z)=>Z.startsWith(S.BEGIN)),H=-1;for(let Z=$.length-1;Z>=0;Z--)if($[Z]?.startsWith(S.END)){H=Z;break}if(J!==-1||H!==-1){if(J===-1||H===-1||H<J)throw new o("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:$.slice(J,H+1)}}let W=gV($);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[S.BEGIN,...W,S.END]}}function uV(f,$){let J=new Set;for(let H of f)for(let W of $)if(H.startsWith(W)){J.add(H.substring(W.length).trim());break}return[...J]}function cV(f,$,J){if($.length===0)return f;let H=f.split(`
103
+ `),W=[],Q=0;for(let Z of $){if(Z.origIndex>H.length)throw new o(`${J}: chunk.origIndex ${Z.origIndex} > lines.length ${H.length}`);if(Q>Z.origIndex)throw new o(`${J}: currentIndex ${Q} > chunk.origIndex ${Z.origIndex}`);W.push(...H.slice(Q,Z.origIndex)),W.push(...Z.insLines),Q=Z.origIndex+Z.delLines.length}return W.push(...H.slice(Q)),W.join(`
104
+ `)}async function dV(f,$,J,H){let W=uV(f,[S.UPDATE,S.DELETE]),Q={};for(let Z of W){let j=I6($,Z,H),P;try{P=await Df.readFile(j,J)}catch{throw new o(`File not found: ${Z}`)}Q[Z]=P.replace(/\r\n/g,`
105
+ `)}return Q}function rV(f,$){let J={};for(let[H,W]of Object.entries(f.actions))switch(W.type){case"delete":J[H]={type:"delete",oldContent:$[H]};break;case"add":if(W.newFile===void 0)throw new o("ADD action without file content");J[H]={type:"add",newContent:W.newFile};break;case"update":J[H]={type:"update",oldContent:$[H],newContent:cV($[H]??"",W.chunks,H),movePath:W.movePath};break}return J}async function lV(f,$,J,H){let W=[];for(let[Q,Z]of Object.entries(f)){let j=I6($,Q,H);switch(Z.type){case"delete":await Df.rm(j,{force:!0}),W.push(`${Q}: [deleted]`);break;case"add":if(Z.newContent===void 0)throw new o(`Cannot create ${Q} with no content`);await Df.mkdir(Mf.dirname(j),{recursive:!0}),await Df.writeFile(j,Z.newContent,{encoding:J}),W.push(Q);break;case"update":{if(Z.newContent===void 0)throw new o(`UPDATE change for ${Q} has no new content`);if(Z.movePath){let P=I6($,Z.movePath,H);await Df.mkdir(Mf.dirname(P),{recursive:!0}),await Df.writeFile(P,Z.newContent,{encoding:J}),await Df.rm(j,{force:!0}),W.push(`${Q} -> ${Z.movePath}`)}else await Df.writeFile(j,Z.newContent,{encoding:J}),W.push(Q);break}}}return W}function l2(f={}){let{encoding:$="utf-8",restrictToCwd:J=!0}=f;return async(H,W,Q)=>{let Z=vV(H.input),j=await dV(Z.lines,W,$,J),P=new m6(Z.lines,j),{patch:X,fuzz:V}=P.parse(),Y=rV(X,j),B=await lV(Y,W,$,J),A=["Successfully applied patch to the following files:"];for(let R of B)A.push(R);if(V>0)A.push(`Note: Patch applied with fuzz factor ${V}`);if(X.warnings&&X.warnings.length>0)for(let R of X.warnings)A.push(`Warning (${R.path}): ${R.message}`);return A.join(`
106
+ `)}}import{spawn as O9}from"node:child_process";import{getDefaultShell as pV,getShellArgs as iV}from"@cline/shared";function nV(f,$,J,H,W){return new Promise((Q,Z)=>{let j=process.platform==="win32",P=O9(f.executable,f.args,{cwd:f.cwd,env:{...process.env,...f.env},stdio:["pipe","pipe","pipe"],detached:!j}),X=P.pid,V="",Y="",B=0,A=!1,R=!1,U=(G)=>{if(R)return;R=!0,G()},y=()=>{if(!X)return;if(j){O9("taskkill",["/pid",String(X),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-X,"SIGKILL")}catch{P.kill("SIGKILL")}},F=(G)=>{A=!0,y(),U(()=>Z(G))},K=setTimeout(()=>F(Error(`Command timed out after ${J}ms`)),J),M=()=>F(Error("Command was aborted"));if($.signal)$.signal.addEventListener("abort",M);let T=()=>{clearTimeout(K),$.signal?.removeEventListener("abort",M)};P.stdout?.on("data",(G)=>{if(B+=G.length,B<=H)V+=G.toString()}),P.stderr?.on("data",(G)=>{if(B+=G.length,B<=H)Y+=G.toString()}),P.on("close",(G)=>{if(T(),A)return;let h=W?V+(Y?`
107
+ [stderr]
108
+ ${Y}`:""):V;if(B>H)h+=`
109
+
110
+ [Output truncated: ${B} bytes total, showing first ${H} bytes]`;if(G!==0)U(()=>Z(Error(Y||`Command exited with code ${G}`)));else U(()=>Q(h))}),P.on("error",(G)=>{T(),U(()=>Z(Error(`Failed to execute command: ${G.message}`)))})})}function p2(f={}){let{shell:$=pV(process.platform),timeoutMs:J=30000,maxOutputBytes:H=1e6,env:W={},combineOutput:Q=!0}=f;return(Z,j,P)=>{let X=typeof Z!=="string";return nV({executable:X?Z.command:$,args:X?Z.args??[]:iV($,Z),cwd:j,env:W},P,J,H,Q)}}import*as kf from"node:fs/promises";import*as Sf from"node:path";function aV(f,$,J){let H=Sf.isAbsolute($),W=H?Sf.normalize($):Sf.resolve(f,$);if(!J)return W;if(H)return W;let Q=Sf.relative(f,W);if(Q.startsWith("..")||Sf.isAbsolute(Q))throw Error(`Path must stay within cwd: ${$}`);return W}function tV(f,$){if($.length===0)return 0;return f.split($).length-1}function sV(f,$,J){let H=f.split(`
111
+ `),W=$.split(`
112
+ `),Q=Math.max(H.length,W.length),Z=["```diff"],j=0;for(let P=0;P<Q;P++){if(j>=J){Z.push("... diff truncated ...");break}let X=H[P],V=W[P];if(X===V)continue;let Y=P+1;if(X!==void 0)Z.push(`-${Y}: ${X}`),j++;if(V!==void 0&&j<J)Z.push(`+${Y}: ${V}`),j++}return Z.push("```"),Z.join(`
113
+ `)}async function oV(f,$,J){return await kf.mkdir(Sf.dirname(f),{recursive:!0}),await kf.writeFile(f,$,{encoding:J}),`File created successfully at: ${f}`}async function eV(f){try{return await kf.access(f),!0}catch{return!1}}async function fY(f,$,J,H,W){let Q=await kf.readFile(f,H),Z=tV(Q,$);if(Z===0)throw Error(`No replacement performed: text not found in ${f}.`);if(Z>1)throw Error(`No replacement performed: multiple occurrences of text found in ${f}.`);let j=Q.replace($,J??"");await kf.writeFile(f,j,{encoding:H});let P=sV(Q,j,W);return`Edited ${f}
114
+ ${P}`}async function $Y(f,$,J,H){let Q=(await kf.readFile(f,H)).split(`
115
+ `),Z=Q.length+1;if($<1||$>Z)throw Error(`Invalid insert_line: ${$}. insert_line must be a positive one-based boundary line in the range 1-${Z}. Use ${Z} to append at EOF.`);let j=$-1;return Q.splice(j,0,...J.split(`
116
+ `)),await kf.writeFile(f,Q.join(`
117
+ `),{encoding:H}),`Inserted content at line ${$} in ${f}.`}function i2(f={}){let{encoding:$="utf-8",restrictToCwd:J=!0,maxDiffLines:H=200}=f;return async(W,Q,Z)=>{let j=aV(Q,W.path,J);if(W.insert_line!=null)return $Y(j,W.insert_line,W.new_text,$);if(!await eV(j))return oV(j,W.new_text,$);if(W.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return fY(j,W.old_text,W.new_text,$,H)}}import*as P1 from"node:fs/promises";import*as K0 from"node:path";var JY=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),HY={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function n2(f={}){let{maxFileSizeBytes:$,encoding:J,includeLineNumbers:H}={...HY,...f};return async(W,Q)=>{let{path:Z,start_line:j,end_line:P}=W,X=K0.isAbsolute(Z)?K0.normalize(Z):K0.resolve(process.cwd(),Z),V=K0.extname(X).toLowerCase(),Y=JY.get(V),B=await P1.stat(X);if(!B.isFile())throw Error(`Path is not a file: ${X}`);if(B.size>$)throw Error(`File too large: ${B.size} bytes (max: ${$} bytes). Consider reading specific sections or using a different approach.`);if(Y){if(Q.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let K=await P1.readFile(X);return[{type:"text",text:"Successfully read image"},{type:"image",data:K.toString("base64"),mediaType:Y}]}let R=(await P1.readFile(X,J)).split(`
118
+ `),U=Math.max((j??1)-1,0),y=Math.min(P??R.length,R.length),F=R.slice(U,y);if(H){let K=String(R.length).length;return F.map((M,T)=>`${String(U+T+1).padStart(K," ")} | ${M}`).join(`
119
+ `)}return F.join(`
120
+ `)}}import{spawn as S9}from"node:child_process";import*as k9 from"node:fs/promises";import*as s2 from"node:path";import{spawn as WY}from"node:child_process";import{readdir as QY}from"node:fs/promises";import g6 from"node:path";import{isMainThread as b9,parentPort as N9,Worker as ZY}from"node:worker_threads";var jY=15000,PY=600000,XY=1000,VY=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function q9(f){let $=f&&typeof f==="object"&&"code"in f?String(f.code??""):"";return $==="EACCES"||$==="EPERM"||$==="ENOENT"}var q$=new Map;function YY(f){if(q$.size<=1)return;for(let[$,J]of q$.entries()){if(J.pending)continue;if(f-J.lastAccessedAt>PY)q$.delete($)}}function BY(f,$){return g6.relative(f,$).split(g6.sep).join("/")}async function AY(f){let J=(await new Promise((H,W)=>{let Q=WY("rg",["--files","--hidden","-g","!.git"],{cwd:f,stdio:["ignore","pipe","pipe"]}),Z="",j="";Q.stdout.on("data",(P)=>{Z+=P.toString()}),Q.stderr.on("data",(P)=>{j+=P.toString()}),Q.on("error",W),Q.on("close",(P)=>{if(P===0){H(Z);return}W(Error(j||`rg exited with code ${P}`))})})).split(/\r?\n/).map((H)=>H.trim()).filter((H)=>H.length>0).map((H)=>H.replace(/\\/g,"/"));return new Set(J)}async function w9(f,$,J){let H;try{H=await QY($,{withFileTypes:!0})}catch(W){if(q9(W))return;throw W}for(let W of H){let Q=g6.join($,W.name);if(W.isDirectory()){if(VY.has(W.name))continue;try{await w9(f,Q,J)}catch(Z){if(q9(Z))continue;throw Z}continue}if(W.isFile())J.add(BY(f,Q))}}async function RY(f){let $=new Set;return await w9(f,f,$),$}async function a2(f){try{return await AY(f)}catch{return RY(f)}}function FY(){if(b9||!N9)return;let f=N9;f.on("message",($)=>{if($.type!=="index")return;a2($.cwd).then((J)=>{let H={type:"indexResult",requestId:$.requestId,files:Array.from(J)};f.postMessage(H)}).catch((J)=>{let H={type:"indexResult",requestId:$.requestId,error:J instanceof Error?J.message:"Failed to build file index"};f.postMessage(H)})})}class C9{worker=new ZY(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",(f)=>{if(f.type!=="indexResult")return;let $=this.pending.get(f.requestId);if(!$)return;if(this.pending.delete(f.requestId),f.error){$.reject(Error(f.error));return}$.resolve(f.files??[])}),this.worker.on("error",(f)=>{this.flushPending(f)}),this.worker.on("exit",(f)=>{if(f!==0)this.flushPending(Error(`File index worker exited with code ${f}`))})}requestIndex(f){let $=++this.nextRequestId,J=new Promise((W,Q)=>{let Z=setTimeout(()=>{this.pending.delete($),W(null)},XY);Z.unref(),this.pending.set($,{resolve:(j)=>{clearTimeout(Z),W(j)},reject:(j)=>{clearTimeout(Z),Q(j)}})}),H={type:"index",requestId:$,cwd:f};return this.worker.postMessage(H),J}flushPending(f){for(let[$,J]of this.pending.entries())J.reject(f),this.pending.delete($)}}FY();var x6;function yY(){if(!b9)return null;if(x6===void 0)x6=new C9;return x6}async function KY(f){let $=yY();if(!$)return a2(f);try{let J=await $.requestIndex(f);if(J===null)return a2(f);return new Set(J)}catch{return a2(f)}}async function l0(f,$={}){let J=$.ttlMs??jY,H=Date.now();YY(H);let W=q$.get(f);if(W&&J>0&&H-W.lastBuiltAt<=J&&W.files.size>0)return W.lastAccessedAt=H,W.files;if(W?.pending)return W.lastAccessedAt=H,W.pending;let Q=KY(f).then((Z)=>{return q$.set(f,{files:Z,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Z});return q$.set(f,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:H,pending:Q}),Q}async function E9(f,$={}){await l0(f,{...$,ttlMs:0})}import{stat as UY}from"node:fs/promises";import p0 from"node:path";var GY=/[),.:;!?`'"]+$/,hY=/^[(`'"]+/;function TY(f){let $=f.matchAll(/(^|[\s])@([^\s]+)/g),J=[];for(let H of $){let W=(H[2]??"").trim();if(W.length===0)continue;let Q=W.replace(hY,"").replace(GY,"");if(Q.length===0||Q.includes("@"))continue;J.push(Q)}return Array.from(new Set(J))}function DY(f,$){let J=f.replace(/\\/g,"/"),H=p0.isAbsolute(J)?p0.resolve(J):p0.resolve($,J),W=p0.relative($,H);if(W.startsWith("..")||p0.isAbsolute(W))return;return W.split(p0.sep).join("/")}async function t2(f,$,J={}){let H=TY(f);if(H.length===0)return{prompt:f,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:Q,maxTotalBytes:Z}=J,j=await l0($,{ttlMs:J.ttlMs}),P=[],X=[],V=[],Y=0;for(let B of H){if(W&&V.length>=W){X.push(B);continue}let A=DY(B,$);if(!A||!j.has(A)){X.push(B);continue}if(!Q||!Z){P.push(A);continue}let R=p0.join($,A);try{if(!(await UY(R)).isFile()){X.push(B);continue}let y=Y+Q;if(y>Z){X.push(B);continue}Y=y,P.push(A)}catch{X.push(B)}}return{prompt:f,mentions:H,matchedFiles:P,ignoredMentions:X}}var MY=["ts","tsx","js","jsx","mjs","cjs","json","md","mdx","txt","yaml","yml","toml","py","rb","go","rs","java","kt","swift","c","cpp","h","hpp","css","scss","less","html","vue","svelte","sql","sh","bash","zsh","fish","ps1","env","gitignore","dockerignore","editorconfig"],_Y=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],i0=null;function LY(){if(i0!==null)return Promise.resolve(i0);return new Promise((f)=>{let $=S9("rg",["--version"],{stdio:["ignore","pipe","pipe"]});$.on("close",(J)=>{i0=J===0,f(i0)}),$.on("error",()=>{i0=!1,f(!1)}),setTimeout(()=>{if(!$.killed)$.kill("SIGTERM");if(i0===null)i0=!1,f(!1)},1000)})}function zY(f,$,J,H,W=5000,Q){return new Promise((Z)=>{let j=S9("rg",["--json",`--context=${H}`,"--max-count=1","-i",f],{cwd:$,stdio:["ignore","pipe","pipe"]}),P="",X=!1,V=()=>{if(!j.killed)j.kill("SIGTERM")},Y=setTimeout(()=>{if(!X)X=!0,V(),Z(null)},W),B=(A)=>{if(!X)X=!0,clearTimeout(Y),V(),Z(A)};if(Q?.aborted){V(),Z(null);return}Q?.addEventListener("abort",()=>{B(null)}),j.stdout.on("data",(A)=>{P+=A.toString()}),j.stderr.on("data",()=>{}),j.on("close",(A)=>{if(A===0||A===1){try{let R=[],U=P.split(`
121
+ `).filter((y)=>y.trim());for(let y of U){if(R.length>=J)break;let F=JSON.parse(y);if(F.type==="match"){let K=F.data,M=[];if(F.data.submatches&&F.data.submatches.length>0){let T=F.data.submatches[0];R.push({file:K.path.text,line:K.line_number,column:(T?.start??0)+1,match:T?.match?.text??"",context:M})}}else if(F.type==="context"&&R.length>0){let K=R[R.length-1],M=F.data.line_number===K.line?">":" ";K.context.push(`${M} ${F.data.line_number}: ${F.data.lines?.text??F.data.line?.text??""}`)}}B(R.length>0?R:null)}catch{B(null)}return}B(null)}),j.on("error",()=>{B(null)})})}function OY(f,$,J,H){let W=f.split("/"),Q=W[W.length-1]??"";if(W.length-1>H)return!1;for(let P=0;P<W.length-1;P++)if($.has(W[P]??""))return!1;let j=s2.posix.extname(Q).slice(1).toLowerCase();return J.has(j)||!j&&!Q.startsWith(".")}function o2(f={}){let{includeExtensions:$=MY,excludeDirs:J=_Y,maxResults:H=100,contextLines:W=2,maxDepth:Q=20}=f,Z=new Set(J),j=new Set($.map((P)=>P.toLowerCase()));return async(P,X,V)=>{if(V.signal?.aborted)throw Error("Search operation aborted");let Y=await LY(),B=null;if(Y)B=await zY(P,X,H,W,5000,V.signal);if(B){let K=[`Found ${B.length} result${B.length===1?"":"s"} for pattern: ${P}`,""];for(let M of B)K.push(`${M.file}:${M.line}:${M.column}`),K.push(...M.context),K.push("");if(B.length>=H)K.push(`(Showing first ${H} results. Refine your search for more specific results.)`);return K.join(`
122
+ `)}let A;try{A=new RegExp(P,"gim")}catch(K){throw Error(`Invalid regex pattern: ${P}. ${K instanceof Error?K.message:""}`)}let R=[],U=0,y=await l0(X);for(let K of y){if(V.signal?.aborted)throw Error("Search operation aborted");if(!OY(K,Z,j,Q))continue;if(R.length>=H)break;U++;let M=s2.join(X,K);try{let G=(await k9.readFile(M,"utf-8")).split(`
123
+ `);for(let h=0;h<G.length;h++){let L=G[h];A.lastIndex=0;let x=A.exec(L);while(x!==null){if(R.length>=H)break;let Cf=Math.max(0,h-W),p=Math.min(G.length-1,h+W),g=[];for(let v=Cf;v<=p;v++){let i=v===h?">":" ";g.push(`${i} ${v+1}: ${G[v]}`)}if(R.push({file:K,line:h+1,column:x.index+1,match:x[0],context:g}),x.index===A.lastIndex)A.lastIndex++;x=A.exec(L)}}}catch{}}if(R.length===0)return`No results found for pattern: ${P}
124
+ Searched ${U} files.`;let F=[`Found ${R.length} result${R.length===1?"":"s"} for pattern: ${P}`,`Searched ${U} files.`,""];for(let K of R)F.push(`${K.file}:${K.line}:${K.column}`),F.push(...K.context),F.push("");if(R.length>=H)F.push(`(Showing first ${H} results. Refine your search for more specific results.)`);return F.join(`
125
+ `)}}function NY(f){return f.replace(/<script[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style[^>]*>[\s\S]*?<\/style>/gi,"").replace(/<!--[\s\S]*?-->/g,"").replace(/<(p|div|br|hr|h[1-6]|li|tr)[^>]*>/gi,`
126
+ `).replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#(\d+);/g,($,J)=>String.fromCharCode(parseInt(J,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
127
+ `).replace(/\n{3,}/g,`
128
+
129
+ `).trim()}function e2(f={}){let{timeoutMs:$=30000,maxResponseBytes:J=5000000,userAgent:H="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:W={},followRedirects:Q=!0}=f;return async(Z,j,P)=>{let X;try{X=new URL(Z)}catch{throw Error(`Invalid URL: ${Z}`)}if(!["http:","https:"].includes(X.protocol))throw Error(`Invalid protocol: ${X.protocol}. Only http and https are supported.`);let V=new AbortController,Y=setTimeout(()=>V.abort(),$),B;if(P.signal)B=()=>V.abort(),P.signal.addEventListener("abort",B);try{let A=await fetch(Z,{method:"GET",headers:{"User-Agent":H,Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,text/plain;q=0.8,*/*;q=0.7","Accept-Language":"en-US,en;q=0.9",...W},redirect:Q?"follow":"manual",signal:V.signal});if(clearTimeout(Y),!Q&&A.status>=300&&A.status<400)return`Redirect to: ${A.headers.get("location")}`;if(!A.ok)throw Error(`HTTP ${A.status}: ${A.statusText}`);let R=A.headers.get("content-type")||"",U=A.body?.getReader();if(!U)throw Error("Failed to read response body");let y=[],F=0;while(!0){let{done:L,value:x}=await U.read();if(L)break;if(F+=x.length,F>J)throw U.cancel(),Error(`Response too large: exceeded ${J} bytes`);y.push(x)}let K=new Uint8Array(F),M=0;for(let L of y)K.set(L,M),M+=L.length;let T=new TextDecoder("utf-8").decode(K),G;if(R.includes("text/html")||R.includes("application/xhtml"))G=NY(T);else if(R.includes("application/json"))try{let L=JSON.parse(T);G=JSON.stringify(L,null,2)}catch{G=T}else G=T;let h=[`URL: ${Z}`,`Content-Type: ${R}`,`Size: ${F} bytes`,"","--- Content ---",G.slice(0,50000)];if(G.length>50000)h.push(`
130
+ [Content truncated: showing first 50000 of ${G.length} characters]`);return h.push("","--- Analysis Request ---",`Prompt: ${j}`),h.join(`
131
+ `)}catch(A){if(clearTimeout(Y),A instanceof Error){if(A.name==="AbortError")throw Error(`Request timed out after ${$}ms`);throw A}throw Error(`Fetch failed: ${String(A)}`)}finally{if(P.signal&&B)P.signal.removeEventListener("abort",B)}}}function f8(f={}){return{readFile:n2(f.fileRead),search:o2(f.search),bash:p2(f.bash),webFetch:e2(f.webFetch),applyPatch:l2(f.applyPatch),editor:i2(f.editor)}}var qY={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion",submit_and_exit:"enableSubmitAndExit"},X1=[{name:"openai-native-use-apply-patch",mode:"act",providerIdIncludes:["openai-native"],enableTools:["apply_patch"],disableTools:["editor"]},{name:"codex-and-gpt-use-apply-patch",mode:"act",modelIdIncludes:["codex","gpt"],enableTools:["apply_patch"],disableTools:["editor"]}];function m9(f,$){if(!$||$.length===0)return!0;let J=f.toLowerCase();return $.some((H)=>J.includes(H.toLowerCase()))}function bY(f,$,J,H){if(f.mode&&f.mode!=="any"&&f.mode!==H)return!1;return m9($,f.providerIdIncludes)&&m9(J,f.modelIdIncludes)}function V1(f,$,J,H){if(!H||H.length===0)return{};let W=new Map;for(let Z of H){if(!bY(Z,f,$,J))continue;for(let j of Z.disableTools??[])W.set(j,!1);for(let j of Z.enableTools??[])W.set(j,!0)}let Q={};for(let[Z,j]of W.entries())Q[qY[Z]]=j;return Q}var uf={act:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!0,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},plan:{enableReadFiles:!0,enableSearch:!0,enableBash:!0,enableWebFetch:!0,enableApplyPatch:!1,enableEditor:!1,enableSkills:!0,enableAskQuestion:!0,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},search:{enableReadFiles:!0,enableSearch:!0,enableBash:!1,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!0},minimal:{enableReadFiles:!1,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!1,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!1,enableSpawnAgent:!0,enableAgentTeams:!1},yolo:{enableReadFiles:!0,enableSearch:!1,enableBash:!0,enableWebFetch:!1,enableApplyPatch:!1,enableEditor:!0,enableSkills:!1,enableAskQuestion:!1,enableSubmitAndExit:!0,enableSpawnAgent:!1,enableAgentTeams:!1}};function U0(f){if(f.mode==="plan")return"plan";if(f.mode==="yolo")return"yolo";return"act"}function I9(f){if(f!=="yolo")return{};let $={enabled:!0,autoApprove:!0},J={"*":$};for(let H of z$)J[H]=$;return J}function x9(f,$){let J=uf[f],{enableSpawnAgent:H,enableAgentTeams:W,...Q}=J;return N$({...Q,...$})}import{createTool as DB,zodToJsonSchema as MB}from"@cline/shared";import{z as a6}from"zod";import{createAgentRuntime as AB}from"@cline/agents";import{createContributionRegistry as RB}from"@cline/shared";import{createGateway as wY,MODEL_COLLECTIONS_BY_PROVIDER_ID as CY}from"@cline/llms";function v6(f){let $=f.providerConfig;if($?.knownModels)return $.knownModels;if(f.knownModels)return f.knownModels;return CY[f.providerId]?.models??void 0}function g9(f,$){let J=f.providerConfig,H=J?.providerId===f.providerId?J:void 0,W={...H??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??H?.apiKey,baseUrl:f.baseUrl??H?.baseUrl,headers:f.headers??H?.headers,knownModels:v6(f),maxOutputTokens:f.maxTokensPerTurn,reasoningEffort:f.reasoningEffort,thinkingBudgetTokens:f.thinkingBudgetTokens,thinking:f.thinking,logger:$,extensionContext:f.extensionContext};return wY({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,models:W.knownModels?Object.entries(W.knownModels).map(([Q,Z])=>({id:Q,name:Z.name??Q,description:Z.description,contextWindow:Z.contextWindow,maxOutputTokens:Z.maxTokens})):void 0}],logger:$}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as v9}from"@cline/shared";var EY=50000,SY=6000000,u9=8000,kY=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),mY=new Set(["read","read_files"]),n0="[outdated - see the latest file content]",c9="Tool execution was interrupted before a result was produced.",IY=(f)=>`
132
+
133
+ ...[truncated ${f} chars]...
134
+
135
+ `,xY=(f)=>`
136
+
137
+ ...[truncated ${f} chars to fit provider request budget]...
138
+
139
+ `;class c6{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor(f=EY,$=kY,J=SY){this.maxToolResultChars=f;this.targetToolNames=$;this.maxTotalTextBytes=J}buildForApi(f){this.reindex(f);let J=this.addMissingToolResults(f).map((H)=>{if(!Array.isArray(H.content)){if(H.role==="user"&&typeof H.content==="string"){let Z=v9(H.content);if(Z!==H.content)return{...H,content:Z}}return H}let W=!1,Q=H.content.map((Z)=>{let j=this.transformBlock(Z,H.role);if(j!==Z)W=!0;return j});return W?{...H,content:Q}:H});return this.truncateToTotalTextBudget(J)}transformBlock(f,$){if($==="user"&&f.type==="text"&&typeof f.text==="string"){let W=v9(f.text);if(W!==f.text)return{...f,text:W};return f}if(f.type==="file"){let W=this.truncateMiddle(f.content);return W===f.content?f:{...f,content:W}}if(f.type!=="tool_result")return f;let J=this.toolNameByIdCache.get(f.tool_use_id),H=f.content;if(this.isReadTool(J)&&f.is_error!==!0){let W=this.getReadLocators(f);if(W.length>0){let Q=W.filter((Z)=>this.isOutdatedReadLocator(Z,f.tool_use_id));if(Q.length>0)H=this.replaceOutdatedReadContent(H,Q)}}if(this.shouldTruncateTool(J))H=this.truncateToolResultContent(H);return H===f.content?f:{...f,content:H}}reindex(f){let $=this.indexedMessageCount===0||f.length>=this.indexedMessageCount&&f[this.indexedMessageCount-1]===this.indexedTailRef;if(f.length<this.indexedMessageCount||!$)this.resetIndexes();for(let J=this.indexedMessageCount;J<f.length;J++){let H=f[J];if(!Array.isArray(H.content))continue;for(let W=0;W<H.content.length;W++){let Q=H.content[W];if(Q.type==="file")this.latestFullContentOwnerByPathCache.set(Q.path,`file:${J}:${W}`);else if(Q.type==="tool_use"){let Z=Q.name.toLowerCase();if(this.toolNameByIdCache.set(Q.id,Z),this.isReadTool(Z)){let j=this.extractLocatorsFromReadToolInput(Q.input);if(j.length>0)this.readLocatorsByToolUseIdCache.set(Q.id,j)}}else if(Q.type==="tool_result"){let Z=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.isReadTool(Z)||Q.is_error===!0)continue;let j=this.getReadLocators(Q);for(let P of j)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(P),Q.tool_use_id),this.isFullFileRead(P))this.latestFullContentOwnerByPathCache.set(P.path,Q.tool_use_id)}}}this.indexedMessageCount=f.length,this.indexedTailRef=f.length>0?f[f.length-1]:void 0}addMissingToolResults(f){let $=this.collectToolResultIds(f),J=[],H=new Map,W=!1,Q=()=>{if(H.size===0)return;Z(this.createMissingToolResultMessage(H)),H.clear(),W=!0},Z=(j)=>{let P=J.at(-1);if(this.shouldMergeUserAfterToolResults(P,j)){J[J.length-1]={...P,content:[...P.content,...this.contentBlocksForUserMerge(j.content)]},W=!0;return}J.push(j)};for(let j of f){if(this.isToolResultOnlyMessage(j)){if(Z(this.appendMissingToolResults(j,H)),H.size>0)H.clear(),W=!0;continue}if(Array.isArray(j.content)){let P=j.content.filter((V)=>V.type==="tool_result"),X=j.content.filter((V)=>V.type!=="tool_result");if(P.length>0){let V=this.appendMissingToolResults({...j,role:"user",content:P},H);if(Z(V),H.size>0)H.clear();W=!0}if(X.length>0||P.length===0){if(P.length===0)Q();let V=P.length>0?{...j,content:X}:j;if(Z(V),V.role==="assistant")this.trackMissingToolCalls(V,$,H)}continue}Q(),Z(j)}return Q(),W?J:f}appendMissingToolResults(f,$){if($.size===0||!Array.isArray(f.content))return f;return{...f,role:"user",content:[...f.content,...this.createMissingToolResultBlocks($)]}}shouldMergeUserAfterToolResults(f,$){return f?.role==="user"&&$.role==="user"&&this.isToolResultOnlyMessage(f)&&this.contentBlocksForUserMerge($.content).length>0}contentBlocksForUserMerge(f){return typeof f==="string"?f.length>0?[{type:"text",text:f}]:[]:f}collectToolResultIds(f){let $=new Set;for(let J of f){if(!Array.isArray(J.content))continue;for(let H of J.content)if(H.type==="tool_result")$.add(H.tool_use_id)}return $}isToolResultOnlyMessage(f){return f.role==="user"&&Array.isArray(f.content)&&f.content.length>0&&f.content.every(($)=>$.type==="tool_result")}trackMissingToolCalls(f,$,J){if(!Array.isArray(f.content))return;for(let H of f.content){if(H.type!=="tool_use"||$.has(H.id))continue;J.set(H.id,H.name)}}createMissingToolResultMessage(f){return{role:"user",content:this.createMissingToolResultBlocks(f)}}createMissingToolResultBlocks(f){return Array.from(f,([$,J])=>({type:"tool_result",tool_use_id:$,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText(f){return f?`${c9} Tool: ${f}.`:c9}resetIndexes(){this.indexedMessageCount=0,this.indexedTailRef=void 0,this.toolNameByIdCache.clear(),this.readLocatorsByToolUseIdCache.clear(),this.latestReadToolUseByLocatorCache.clear(),this.latestFullContentOwnerByPathCache.clear(),this.readResultLocatorCache=new WeakMap}getReadLocators(f){let $=f,J=this.readResultLocatorCache.get($);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent(f.content),this.readResultLocatorCache.set($,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get(f.tool_use_id)??[]}extractLocatorsFromReadToolInput(f){if(!f||typeof f!=="object")return[];let $=f,J=[],H=this.extractLocatorFromReadRequest($);if(H)J.push(H);if(Array.isArray($.files))for(let W of $.files){let Q=this.extractLocatorFromReadRequest(W);if(Q)J.push(Q)}if(Array.isArray($.file_paths)){for(let W of $.file_paths)if(typeof W==="string"&&W.length>0)J.push({path:W,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent(f){if(typeof f==="string")return this.tryParseReadLocators(f);for(let $ of f){if($.type!=="text")continue;let J=this.tryParseReadLocators($.text);if(J.length>0)return J}return[]}tryParseReadLocators(f){try{return this.extractLocatorsFromParsedReadResult(JSON.parse(f))}catch{return[]}}extractLocatorsFromParsedReadResult(f){if(Array.isArray(f)){let J=[];for(let H of f){let W=this.extractLocatorFromResultEntry(H);if(W)J.push(W)}return this.dedupeReadLocators(J)}let $=this.extractLocatorFromResultEntry(f);return $?[$]:[]}extractLocatorFromReadRequest(f){if(!f||typeof f!=="object")return;let $=f,J=this.extractPath($);if(!J)return;return{path:J,startLine:this.extractLineNumber($.start_line),endLine:this.extractLineNumber($.end_line)}}extractLocatorFromResultEntry(f){if(!f||typeof f!=="object")return;let $=f,J=this.extractPath($);if(J)return{path:J,startLine:this.extractLineNumber($.start_line),endLine:this.extractLineNumber($.end_line)};if(typeof $.query==="string"&&$.query.length>0)return this.parseReadQuery($.query);return}extractPath(f){let $=[f.path,f.file_path,f.filePath];for(let J of $)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber(f){return typeof f==="number"&&Number.isInteger(f)?f:null}parseReadQuery(f){let $=/^(.*):(\d+)-(EOF|\d+)$/.exec(f);if(!$)return{path:f,startLine:null,endLine:null};return{path:$[1],startLine:Number($[2]),endLine:$[3]==="EOF"?null:Number($[3])}}dedupeReadLocators(f){let $=new Map;for(let J of f)$.set(this.toReadLocatorKey(J),J);return Array.from($.values())}toReadLocatorKey(f){if(this.isFullFileRead(f))return f.path;return`${f.path}:${f.startLine??1}-${f.endLine??"EOF"}`}isFullFileRead(f){return f.startLine==null&&f.endLine==null}isOutdatedReadLocator(f,$){let J=this.latestFullContentOwnerByPathCache.get(f.path);if(J&&J!==$)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey(f))!==$}replaceOutdatedReadContent(f,$){let J=new Set($.map((Q)=>this.toReadLocatorKey(Q))),H=new Set($.map((Q)=>Q.path));if(typeof f==="string")return this.replaceOutdatedInString(f,J)??n0;let W=0;for(let Q of f)if(Q.type==="text")W+=this.countOutdatedImageEntries(Q.text,J);return f.map((Q)=>{if(Q.type==="file"){if(!H.has(Q.path))return Q;return{...Q,content:n0}}if(Q.type==="image"){if(W===0)return Q;return W-=1,{type:"text",text:n0}}if(Q.type!=="text")return Q;let Z=this.replaceOutdatedInString(Q.text,J);if(Z===null)return{...Q,text:n0};return Z===Q.text?Q:{...Q,text:Z}})}countOutdatedImageEntries(f,$){let J;try{J=JSON.parse(f)}catch{return 0}let H=Array.isArray(J)?J:[J],W=0;for(let Q of H){if(!Q||typeof Q!=="object")continue;let Z=Q,j=this.extractLocatorFromResultEntry(Z);if(!j)continue;if(!$.has(this.toReadLocatorKey(j)))continue;if(Z.result==="Successfully read image"||Z.content==="Successfully read image")W+=1}return W}replaceOutdatedInString(f,$){let J;try{J=JSON.parse(f)}catch{return null}let H=Array.isArray(J)?J.map((W)=>this.replaceOutdatedReadEntry(W,$)):this.replaceOutdatedReadEntry(J,$);return JSON.stringify(H)}replaceOutdatedReadEntry(f,$){if(!f||typeof f!=="object")return f;let J=this.extractLocatorFromResultEntry(f);if(!J||!$.has(this.toReadLocatorKey(J)))return f;let H={...f};if(typeof H.result==="string")H.result=n0;else if(typeof H.content==="string")H.content=n0;else H.result=n0;return H}isReadTool(f){return!!f&&mY.has(f)}shouldTruncateTool(f){return!!f&&this.targetToolNames.has(f)}truncateToolResultContent(f){if(typeof f==="string")return this.truncateMiddle(f);return f.map(($)=>{if($.type==="file"){let H=this.truncateMiddle($.content);return H===$.content?$:{...$,content:H}}if($.type!=="text")return $;let J=this.truncateMiddle($.text);return J===$.text?$:{...$,text:J}})}truncateMiddle(f){return u6(f,this.maxToolResultChars,IY)}truncateToTotalTextBudget(f){if(this.maxTotalTextBytes<=0)return f;let $=this.countMessageTextBytes(f);if($<=this.maxTotalTextBytes)return f;let J=f.map((W)=>{if(!Array.isArray(W.content))return W;return{...W,content:W.content.map((Q)=>vY(Q))}}),H=this.collectTruncationCandidates(J);for(let W of H){if($<=this.maxTotalTextBytes)break;let Q=W.byteLength;if(Q<=u9)continue;let Z=$-this.maxTotalTextBytes,j=Math.max(u9,Q-Z),P=gY(W.get(),j,xY);W.set(P),$-=Q-Ff(P)}return J}countMessageTextBytes(f){let $=0;for(let J of f){if(typeof J.content==="string"){$+=Ff(J.content);continue}for(let H of J.content)if(H.type==="text")$+=Ff(H.text);else if(H.type==="thinking")$+=Ff(H.thinking);else if(H.type==="file")$+=Ff(H.content);else if(H.type==="tool_result"){if(typeof H.content==="string")$+=Ff(H.content);else for(let W of H.content)if(W.type==="text")$+=Ff(W.text);else if(W.type==="file")$+=Ff(W.content)}}return $}collectTruncationCandidates(f){let $=[];for(let J of f){if(!Array.isArray(J.content))continue;for(let H of J.content){if(H.type!=="tool_result")continue;let W=this.toolNameByIdCache.get(H.tool_use_id);if(!this.shouldTruncateTool(W))continue;if(typeof H.content==="string"){$.push({byteLength:Ff(H.content),get:()=>H.content,set:(Q)=>{H.content=Q}});continue}for(let Q of H.content)if(Q.type==="text")$.push({byteLength:Ff(Q.text),get:()=>Q.text,set:(Z)=>{Q.text=Z}});else if(Q.type==="file")$.push({byteLength:Ff(Q.content),get:()=>Q.content,set:(Z)=>{Q.content=Z}})}}return $.sort((J,H)=>H.byteLength-J.byteLength)}}function Ff(f){return Buffer.byteLength(f,"utf8")}function u6(f,$,J){if(f.length<=$)return f;let H=J(f.length-$),W=Math.max(0,Math.floor(($-H.length)/2)),Q=Math.max(0,f.length-W*2),Z=J(Q),j=Math.max(0,Math.floor(($-Z.length)/2)),P=f.slice(0,j),X=j>0?f.slice(-j):"";return`${P}${Z}${X}`}function gY(f,$,J){if(Ff(f)<=$)return f;let H=0,W=f.length,Q=u6(f,0,J);while(H<=W){let Z=H+W>>>1,j=u6(f,Z,J);if(Ff(j)<=$)Q=j,H=Z+1;else W=Z-1}return Q}function vY(f){if(f.type!=="tool_result"||typeof f.content==="string")return{...f};return{...f,content:f.content.map(($)=>({...$}))}}function d6(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class r6{messages=[];conversationId=d6();sessionStarted=!1;constructor(f){if((f?.length??0)>0)this.restore(f??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage(f){this.messages.push(f)}appendMessages(f){if(f.length===0)return;this.messages.push(...f)}replaceMessages(f){this.messages=[...f]}resetForRun(){this.messages=[],this.conversationId=d6(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=d6(),this.sessionStarted=!1}restore(f){this.messages=[...f],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function uY(f){let $=dY(f.content),J=[],H=f.id??pY(),W=0,Q=[],Z=()=>{if(Q.length===0)return;let j=W===0?H:`${H}_part_${W}`;W+=1,J.push({id:j,role:f.role,content:Q.map(rY),createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:d9(f.metrics)}),Q=[]};if($.length===0)return J.push({id:H,role:f.role,content:[],createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:d9(f.metrics)}),J;for(let j of $){if(j.type!=="tool_result"){Q.push(j);continue}Z(),J.push({id:`${H}_tool_${j.tool_use_id}`,role:"tool",content:[p9(j)],createdAt:f.ts??Date.now(),metadata:f.metadata})}return Z(),J}function $8(f){return f.flatMap(uY)}function cY(f){let $=f.content.map(i9).filter((J)=>J!==void 0);return{id:f.id,role:f.role==="tool"?"user":f.role,content:$,ts:f.createdAt,metadata:f.metadata,modelInfo:f.modelInfo,metrics:lY(f.metrics)}}function b$(f){return f.map(cY)}function l9(f){let $=[];for(let J of f){let H=J.content.map(i9).filter((Z)=>Z!==void 0),W=J.role==="tool"?"user":J.role,Q=$[$.length-1];if(W==="user"&&H.length>0&&H.every((Z)=>Z.type==="tool_result")&&Q?.role==="user"&&Array.isArray(Q.content)&&Q.content.every((Z)=>Z.type==="tool_result")){Q.content.push(...H);continue}$.push({role:W,content:H})}return $}function dY(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];return[...f]}function rY(f){switch(f.type){case"text":return{type:"text",text:f.text};case"thinking":return{type:"reasoning",text:f.thinking,metadata:f.signature?{signature:f.signature,details:f.details}:f.details?{details:f.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:f.data}};case"image":return{type:"image",image:f.data,mediaType:f.mediaType};case"file":return{type:"file",path:f.path,content:f.content};case"tool_use":return{type:"tool-call",toolCallId:f.id,toolName:f.name,input:f.input,metadata:f.signature?{signature:f.signature}:void 0};case"tool_result":return p9(f)}}function p9(f){return{type:"tool-result",toolCallId:f.tool_use_id,toolName:"",output:f.content,isError:f.is_error}}function i9(f){switch(f.type){case"text":return{type:"text",text:f.text};case"reasoning":{if(f.redacted===!0)return{type:"redacted_thinking",data:f.metadata?.data??""};let $=f.metadata;return{type:"thinking",thinking:f.text,signature:$?.signature,details:$?.details}}case"image":return typeof f.image==="string"?{type:"image",data:f.image,mediaType:f.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:f.path,content:f.content};case"tool-call":return{type:"tool_use",id:f.toolCallId,name:f.toolName,input:f.input??{},signature:f.metadata?.signature};case"tool-result":{let $=f.output,J=typeof $==="string"?$:Array.isArray($)?$:JSON.stringify($);return{type:"tool_result",tool_use_id:f.toolCallId,content:J,is_error:f.isError}}}}function d9(f){if(!f)return;return{inputTokens:f.inputTokens??0,outputTokens:f.outputTokens??0,cacheReadTokens:f.cacheReadTokens??0,cacheWriteTokens:f.cacheWriteTokens??0,cost:f.cost}}function lY(f){if(!f)return;return{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,cost:f.cost}}var r9=0;function pY(){return r9+=1,`msg_${Date.now().toString(36)}_${r9.toString(36)}`}function n9(f){let{agentConfig:$}=f,J=iY($),H=nY($),W=f.hooks,Q=aY($.maxParallelToolCalls);return{sessionId:f.sessionId??$.sessionId,agentId:f.agentId,conversationId:f.conversationId,parentAgentId:f.parentAgentId,agentRole:f.agentRole,systemPrompt:f.systemPrompt??$.systemPrompt,messageModelInfo:H,model:f.model,modelOptions:J,tools:f.tools,hooks:W,prepareTurn:f.prepareTurn,consumePendingUserMessage:$.consumePendingUserMessage,plugins:f.plugins,logger:f.logger??$.logger,telemetry:f.telemetry??tY($.telemetry),initialMessages:f.initialMessages,completionPolicy:$.completionPolicy,maxIterations:$.maxIterations,toolExecution:Q,toolPolicies:$.toolPolicies,toolContextMetadata:f.toolContextMetadata,requestToolApproval:$.requestToolApproval}}function iY(f){let $={};if(f.thinking!==void 0)$.thinking=f.thinking;if(f.reasoningEffort!==void 0)$.reasoningEffort=f.reasoningEffort;if(f.thinkingBudgetTokens!==void 0)$.thinkingBudgetTokens=f.thinkingBudgetTokens;if(f.maxTokensPerTurn!==void 0)$.maxTokensPerTurn=f.maxTokensPerTurn;if(f.apiTimeoutMs!==void 0)$.apiTimeoutMs=f.apiTimeoutMs;return Object.keys($).length>0?$:void 0}function nY(f){let $=f.providerConfig?.family;return{id:f.modelId,provider:f.providerId,family:$}}function aY(f){if(f===void 0)return;return f>=2?"parallel":"sequential"}function tY(f){if(!f)return;return{capture:($,J)=>{f.capture({event:$,properties:J})}}}function sY(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function oY(f){f.lastToolName="",f.lastToolSignature="",f.consecutiveIdenticalCount=0}function l6(f){if(f==null||typeof f!=="object")return f;if(Array.isArray(f))return f.map(l6);let $={};for(let J of Object.keys(f).sort())$[J]=l6(f[J]);return $}function eY(f){if(f==null)return"null";if(typeof f==="string")return f;if(typeof f!=="object")return String(f);try{return JSON.stringify(l6(f))}catch{return String(f)}}function fB(f,$,J,H){if($===f.lastToolName&&J===f.lastToolSignature)f.consecutiveIdenticalCount++;else f.consecutiveIdenticalCount=1;return f.lastToolName=$,f.lastToolSignature=J,{softWarning:f.consecutiveIdenticalCount===H.softThreshold,hardEscalation:f.consecutiveIdenticalCount>=H.hardThreshold}}var a9={softThreshold:3,hardThreshold:5};class p6{config;state=sY();constructor(f){this.config={softThreshold:f?.softThreshold??a9.softThreshold,hardThreshold:f?.hardThreshold??a9.hardThreshold}}inspect(f){let $=eY(f.input),J=fB(this.state,f.name,$,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${f.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${f.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){oY(this.state)}}class i6{consecutiveMistakes=0;options;constructor(f){this.options=f}async record(f){let $=this.options.maxConsecutiveMistakes,J=f.forceAtLimit&&$?$:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let H=f.details?.trim()||`consecutive mistake (${f.reason})`;if(this.options.emit({type:"error",error:Error(H),recoverable:!0,iteration:f.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:f.iteration,reason:f.reason,details:f.details,consecutiveMistakes:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!$||J<$)return{action:"continue"};let W=await JB({iteration:f.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:$,reason:f.reason,details:f.details},this.options.onLimitReached);if(W.action==="continue"){let Q=W.guidance?.trim();if(Q)this.options.appendRecoveryNotice(Q,f.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:Q}}return{action:"stop",reason:W.reason?.trim()||void 0,message:$B({iteration:f.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:$,reason:f.reason,details:f.details,stopReason:W.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function $B(f){let $=[`Stopped after ${f.consecutiveMistakes}/${f.maxConsecutiveMistakes} consecutive mistakes (${f.reason}) at iteration ${f.iteration}.`],J=f.details?.trim();if(J)$.push(`Error: ${J}`);let H=f.stopReason?.trim();if(H)$.push(`Decision: ${H}`);return $.push("Session state was preserved. Send a new prompt to resume from the latest state."),$.join(" ")}async function JB(f,$){if(!$)return{action:"stop",reason:`maximum consecutive mistakes reached (${f.maxConsecutiveMistakes})`};try{return await $(f)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${f.maxConsecutiveMistakes})`}}}function HB(f){let $=f.content.filter((J)=>J.type==="text");if($.length===0)return;return $.map((J)=>J.text).join("")}function WB(f){let $=f.content.filter((J)=>J.type==="reasoning");if($.length===0)return;return{reasoning:$.map((J)=>J.text).join(""),redacted:$.some((J)=>J.redacted===!0)}}function QB(f){return f.content.find(($)=>$.type==="tool-result")}function ZB(f){switch(f){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function jB(f){if(!f||f.isError!==!0)return;if(typeof f.output==="string")return f.output;if(f.output instanceof Error)return f.output.message;try{return JSON.stringify(f.output)}catch{return String(f.output)}}class n6{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate(f){switch(f.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:f.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:f.iteration,hadToolCalls:f.toolCallCount>0,toolCallCount:f.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:f.text,accumulated:f.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:f.text,redacted:f.redacted===!0}];case"assistant-message":return this.translateAssistantMessage(f.message);case"tool-started":return this.translateToolStarted(f);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,update:f.update}];case"tool-finished":return this.translateToolFinished(f);case"usage-updated":return this.translateUsage(f.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:f.message,reason:f.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:f.metadata}];case"run-finished":return this.translateRunFinished(f.result);case"run-failed":return[{type:"error",error:f.error,recoverable:!1,iteration:f.snapshot.iteration}];default:return f}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage(f){let $=[],J=HB(f);if(J!==void 0)$.push({type:"content_end",contentType:"text",text:J});let H=WB(f);if(H!==void 0)$.push({type:"content_end",contentType:"reasoning",reasoning:H.reasoning});return $}translateToolStarted(f){return this.toolStartedAt.set(f.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,input:f.toolCall.input}]}translateToolFinished(f){let $=this.toolStartedAt.get(f.toolCall.toolCallId),J=$===void 0?void 0:Date.now()-$;this.toolStartedAt.delete(f.toolCall.toolCallId);let H=QB(f.message),W=H?.output,Q=jB(H);return[{type:"content_end",contentType:"tool",toolName:f.toolCall.toolName,toolCallId:f.toolCall.toolCallId,output:W,error:Q,durationMs:J}]}translateUsage(f){let $=f.inputTokens-this.lastUsage.inputTokens,J=f.outputTokens-this.lastUsage.outputTokens,H=f.cacheReadTokens-this.lastUsage.cacheReadTokens,W=f.cacheWriteTokens-this.lastUsage.cacheWriteTokens,Q=this.lastUsage.totalCost??0,j=(f.totalCost??0)-Q;return this.lastUsage={inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,totalCost:f.totalCost},[{type:"usage",inputTokens:Math.max(0,$),outputTokens:Math.max(0,J),cacheReadTokens:H===0?void 0:Math.max(0,H),cacheWriteTokens:W===0?void 0:Math.max(0,W),cost:j===0?void 0:j,totalInputTokens:f.inputTokens,totalOutputTokens:f.outputTokens,totalCacheReadTokens:f.cacheReadTokens===0?void 0:f.cacheReadTokens,totalCacheWriteTokens:f.cacheWriteTokens===0?void 0:f.cacheWriteTokens,totalCost:f.totalCost}]}translateRunFinished(f){let $={inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens===0?void 0:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens===0?void 0:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost};return[{type:"done",reason:ZB(f.status),text:f.outputText,iterations:f.iterations,usage:$}]}}function FB(f){if(typeof f==="string")return f;if(f instanceof Error)return f.message;try{return JSON.stringify(f)}catch{return String(f)}}async function yB(f){let J=(typeof f.content==="function"?await f.content():f.content).trim();return J.length>0?J:void 0}function KB(f,$){let J=f.trim(),H=$.map((W)=>W.trim()).filter(Boolean).join(`
140
+
141
+ `);if(J&&H)return`${J}
142
+
143
+ ${H}`;return J||H}function UB(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return{};return{beforeRun:async(J)=>{for(let H of $){let W=await H.beforeRun?.(J);if(W?.stop)return W}return},afterRun:async(J)=>{for(let H of $)await H.afterRun?.(J)},beforeModel:async(J)=>{let H=J.request,W;for(let Q of $){let Z=await Q.beforeModel?.({...J,request:H});if(!Z)continue;if(Z.stop)return Z;W={...W,...Z,options:{...W?.options??{},...Z.options??{}}},H={...H,...Z.messages?{messages:Z.messages}:{},...Z.tools?{tools:Z.tools}:{},...Z.options?{options:{...H.options??{},...Z.options}}:{}}}return W},afterModel:async(J)=>{for(let H of $){let W=await H.afterModel?.(J);if(W?.stop)return W}return},beforeTool:async(J)=>{let H=J.input,W;for(let Q of $){let Z=await Q.beforeTool?.({...J,input:H});if(!Z)continue;if(Z.stop||Z.skip)return Z;if(W={...W,...Z},Object.hasOwn(Z,"input"))H=Z.input}return W},afterTool:async(J)=>{let H=J.result,W;for(let Q of $){let Z=await Q.afterTool?.({...J,result:H});if(!Z)continue;if(Z.stop)return Z;if(W={...W,...Z},Z.result)H=Z.result}return W},onEvent:async(J)=>{for(let H of $)await H.onEvent?.(J)}}}class G0{config;agentId;parentAgentId;logger;telemetry;conversation;mistakeTracker;loopTracker;loopDetectionDisabled;messageBuilder;contributionRegistry;extensionsInitialized=!1;listeners=new Set;createAgentRuntimeImpl;activeRunId=null;running=!1;abortRequested=!1;abortReason;activeRuntime=null;activeRunPromise=null;eventAdapter=new n6;shutdownCalled=!1;currentRunToolCalls=[];currentRunUsage={inputTokens:0,outputTokens:0};toolStartedAt=new Map;toolInputs=new Map;currentTurnSuccessfulTools=0;currentTurnFailedTools=0;currentTurnFailureDetails=[];activeTrackerWork=Promise.resolve();trackerAbortInFlight=!1;constructor(f,$={}){this.config=f,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=f.parentAgentId,this.logger=$.logger??f.logger,this.telemetry=$.telemetry??f.telemetry,this.createAgentRuntimeImpl=$.createAgentRuntimeImpl??AB,this.conversation=new r6(f.initialMessages),this.messageBuilder=new c6,this.contributionRegistry=RB({extensions:f.extensions?[...f.extensions]:[],setupContext:{session:f.extensionContext?.session,client:f.extensionContext?.client,user:f.extensionContext?.user,workspaceInfo:f.extensionContext?.workspace,automation:f.extensionContext?.automation,logger:f.extensionContext?.logger??this.logger,telemetry:f.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let J=f.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new i6({maxConsecutiveMistakes:J,onLimitReached:f.onConsecutiveMistakeLimitReached,emit:(Q)=>this.emitLegacyEvent(Q),log:(Q,Z,j)=>GB(this.logger,Q,Z,j),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(Q,Z)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q}]})}});let H=f.execution?.loopDetection;this.loopDetectionDisabled=H===!1;let W=H===!1||H===void 0?void 0:H;this.loopTracker=new p6(W)}getAgentId(){return this.agentId}getConversationId(){return this.conversation.getConversationId()}getMessages(){return this.conversation.getMessages()}canStartRun(){return!this.running&&!this.shutdownCalled}getExtensionRegistry(){return this.contributionRegistry.getRegistrySnapshot()}addTools(f){if(f.length===0)return;let $=new Set(this.config.tools.map((H)=>H.name)),J=[...this.config.tools];for(let H of f)if(!$.has(H.name))J.push(H),$.add(H.name);this.config={...this.config,tools:J}}updateConnection(f){let $={...this.config};if(f.providerId!==void 0)$.providerId=f.providerId;if(f.modelId!==void 0)$.modelId=f.modelId;if(f.apiKey!==void 0)$.apiKey=f.apiKey;if(f.baseUrl!==void 0)$.baseUrl=f.baseUrl;if(f.headers!==void 0)$.headers=f.headers;if(f.providerConfig!==void 0)$.providerConfig=f.providerConfig;if(f.reasoningEffort!==void 0)$.reasoningEffort=f.reasoningEffort;if(f.thinking!==void 0)$.thinking=f.thinking;if(f.thinkingBudgetTokens!==void 0)$.thinkingBudgetTokens=f.thinkingBudgetTokens;this.config=$}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore(f){this.conversation.restore(f),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}abort(f){let $=typeof f==="string"?f:f instanceof Error?f.message:f===void 0?void 0:String(f);if(this.abortRequested=!0,this.abortReason=$,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort($)}async shutdown(f,$){if(this.running){if(!this.abortRequested||!this.activeRunPromise)throw Error(`SessionRuntime.shutdown called while a run is in progress (agentId=${this.agentId})`);await this.activeRunPromise}if(this.shutdownCalled)return;this.shutdownCalled=!0}run(f,$,J){return this.conversation.resetForRun(),this.resetConversationBoundaryTrackers(),this.executeRun({userMessage:f,userImages:$,userFiles:J,isContinue:!1})}continue(f,$,J){return this.executeRun({userMessage:f,userImages:$,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let f=[];for(let $ of this.contributionRegistry.getRegisteredRules()){let J=await yB($);if(J)f.push(J)}return KB(this.config.systemPrompt,f)}executeRun(f){let $;return $=this.executeRunInternal(f).finally(()=>{if(this.activeRunPromise===$)this.activeRunPromise=null}),this.activeRunPromise=$,$}async executeRunInternal(f){if(this.shutdownCalled)throw Error(`SessionRuntime.run called after shutdown (agentId=${this.agentId})`);if(this.running)throw Error(`SessionRuntime state is "running"; call canStartRun() first (agentId=${this.agentId})`);this.running=!0,this.abortRequested=!1,this.abortReason=void 0,this.activeRunId=`run_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,await this.ensureExtensionsInitialized(),this.eventAdapter.reset(),this.currentRunToolCalls=[],this.currentRunUsage={inputTokens:0,outputTokens:0},this.toolStartedAt.clear(),this.toolInputs.clear(),this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[],this.activeTrackerWork=Promise.resolve(),this.trackerAbortInFlight=!1;let $=new Date,J=f.userMessage;if(J!==void 0){let F=await TB(J,f.userImages,f.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let H=await this.composeSystemPrompt(),W=g9(this.config,this.logger),Q=this.contributionRegistry.getRegisteredTools(),Z=new Map;for(let F of Q)Z.set(F.name,F);for(let F of this.config.tools)Z.set(F.name,F);let j=this.conversation.getConversationId(),P=s9(this.config),X=Array.from(Z.values()),V=$8(this.conversation.getMessages()),Y=n9({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:j,parentAgentId:this.parentAgentId,model:W,logger:this.logger,tools:X,toolContextMetadata:{modelSupportsImages:P?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(P,X),initialMessages:V,systemPrompt:H}),B=this.createAgentRuntimeImpl(Y);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let A=B.subscribe((F)=>{this.handleRuntimeEvent(F)}),R,U;try{if(f.isContinue)R=await B.continue(void 0);else R=await B.run("")}catch(F){U=F instanceof Error?F:Error(String(F))}finally{A();try{await this.activeTrackerWork}catch(F){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:F})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(R&&R.messages.length>0){let F=b$(R.messages);this.conversation.replaceMessages(F)}let y=new Date;try{return this.buildLegacyResult({runResult:R,thrownError:U,startedAt:$,endedAt:y})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch(f){if(this.config.hookErrorMode==="throw")throw f;this.emitLegacyEvent({type:"error",error:f instanceof Error?f:Error(String(f)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let f=UB([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map(($)=>$.hooks)]);return{...f,beforeModel:async($)=>{let J=await f.beforeModel?.($);if(J?.stop)return J;let H=J?.messages??$.request.messages,W=await this.prepareMessagesForModelRequest(H);return{...J,messages:W}}}}createRuntimePrepareTurn(f,$){let J=this.config.prepareTurn;if(!J)return;return async(H)=>{let W=b$(H.messages),Q=await this.prepareProviderMessagesForApi(W),Z=await J({agentId:H.agentId,conversationId:H.conversationId??this.conversation.getConversationId(),parentAgentId:H.parentAgentId??null,iteration:H.iteration,messages:W,apiMessages:Q,abortSignal:H.signal??new AbortController().signal,systemPrompt:H.systemPrompt??"",tools:$,model:{id:this.config.modelId,provider:this.config.providerId,info:f},emitStatusNotice:H.emitStatusNotice});if(!Z)return;return{...Z.messages?{messages:$8(Z.messages)}:{},...Z.systemPrompt!==void 0?{systemPrompt:Z.systemPrompt}:{}}}}async prepareMessagesForModelRequest(f){let $=await this.prepareProviderMessagesForApi(l9(f));return $8($)}async prepareProviderMessagesForApi(f){let $=f,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let H of J)$=await H.build($);return this.messageBuilder.buildForApi($)}handleRuntimeEvent(f){switch(f.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage(f.snapshot.messages,[f.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set(f.toolCall.toolCallId,new Date),this.toolInputs.set(f.toolCall.toolCallId,f.toolCall.input),this.inspectLoopForToolCall(f.toolCall.toolName,f.toolCall.input,f.iteration);break}case"tool-finished":{let $=this.toolStartedAt.get(f.toolCall.toolCallId),J=new Date,H=this.toolInputs.get(f.toolCall.toolCallId);this.toolStartedAt.delete(f.toolCall.toolCallId),this.toolInputs.delete(f.toolCall.toolCallId);let W=f.message.content.find((P)=>P.type==="tool-result"),Q=W?.type==="tool-result"&&W.isError===!0,Z=Q?FB(W?.type==="tool-result"?W.output:void 0):void 0,j={id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:H,output:W?.type==="tool-result"?W.output:void 0,error:Z,durationMs:$===void 0?0:J.getTime()-$.getTime(),startedAt:$??J,endedAt:J};if(this.currentRunToolCalls.push(j),Q){if(this.currentTurnFailedTools+=1,Z)this.currentTurnFailureDetails.push(`[${f.toolCall.toolName}] ${Z}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let $=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if($>0&&J===0){let H=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:f.iteration,reason:"tool_execution_failed",details:`${$} tool call(s) failed${H?`: ${H}`:""}`})}else if(J>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens>0?f.usage.cacheReadTokens:void 0,cacheWriteTokens:f.usage.cacheWriteTokens>0?f.usage.cacheWriteTokens:void 0,totalCost:f.usage.totalCost};break}default:break}for(let $ of this.eventAdapter.translate(f))this.emitLegacyEvent($)}syncConversationFromRuntimeMessage(f,$){if(f.length>0){this.conversation.replaceMessages(b$(f));return}if($.length===0)return;let J=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),H=b$($).filter((W)=>!W.id||!J.has(W.id));if(H.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...H])}emitLegacyEvent(f){for(let $ of this.listeners)try{$(f)}catch(J){this.logger?.error?.("SessionRuntime event listener threw",{agentId:this.agentId,error:J})}}inspectLoopForToolCall(f,$,J){if(this.trackerAbortInFlight||this.loopDetectionDisabled)return;let H=this.loopTracker.inspect({name:f,input:$});if(H.kind==="ok")return;if(H.kind==="soft"){if(H.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:H.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:H.message??`Detected repeated tool calls to \`${f}\`; stopping to avoid a loop.`})}enqueueMistakeRecord(f){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let $=await this.mistakeTracker.record(f);if($.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:$.message}]}),this.activeRuntime?.abort($.reason??$.message)})}buildLegacyResult(f){let{runResult:$,thrownError:J,startedAt:H,endedAt:W}=f,Q=W.getTime()-H.getTime(),Z=J?"error":hB($),j=$?.outputText||($?.status==="failed"?$.error?.message:void 0)||"",P=$?{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens>0?$.usage.cacheReadTokens:void 0,cacheWriteTokens:$.usage.cacheWriteTokens>0?$.usage.cacheWriteTokens:void 0,totalCost:$.usage.totalCost}:this.currentRunUsage,X=$?b$($.messages):this.conversation.getMessages(),V=s9(this.config);if(J)throw J;return{text:j,usage:P,messages:X,toolCalls:this.currentRunToolCalls,iterations:$?.iterations??0,finishReason:Z,model:{id:this.config.modelId,provider:this.config.providerId,info:V},startedAt:H,endedAt:W,durationMs:Q}}}function GB(f,$,J,H){if(!f)return;if($==="debug"){f.debug(J,H);return}if($==="error"&&f.error){f.error(J,H);return}let W=$==="warn"?"warn":$==="error"?"error":"info";f.log(J,{...H,severity:W})}function hB(f){if(!f)return"error";switch(f.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function TB(f,$,J,H){let{buildInitialUserContent:W}=await Promise.resolve().then(() => t9);return W(f,$,J,H)}function s9(f){if(f.knownModels?.[f.modelId])return f.knownModels[f.modelId];let $=v6(f);if($?.[f.modelId])return $[f.modelId];return}import{buildClineSystemPrompt as o9}from"@cline/shared";function e9(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return o9({ide:$.clineIdeName?.trim()||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,rules:`# Team Teammate Role
144
+ ${J}`,platform:$.clinePlatform,metadata:$.workspaceMetadata})}function f3(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return o9({ide:$.clineIdeName||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,overridePrompt:J,metadata:$.workspaceMetadata,platform:$.clinePlatform})}function J8(f){let $={...f};return{getRuntimeConfig:()=>$,getConnectionConfig:()=>({providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking}),updateConnectionDefaults:(J)=>{$={...$,...J}}}}function B1(f){let $=f.configProvider.getRuntimeConfig(),J=f.kind==="teammate"?e9(f.prompt,$):f3(f.prompt,$);return{...f.configProvider.getConnectionConfig(),systemPrompt:J,tools:f.tools,maxIterations:f.maxIterations??$.maxIterations,parentAgentId:f.parentAgentId,abortSignal:f.abortSignal,onEvent:f.onEvent,hooks:$.hooks,extensions:$.extensions,hookErrorMode:f.hookErrorMode,toolPolicies:f.toolPolicies,requestToolApproval:f.requestToolApproval,logger:$.logger,role:f.role}}function H8(f){let $=B1(f),J=new G0($);if($.onEvent)J.subscribeEvents($.onEvent);return J}var _B=a6.object({systemPrompt:a6.string().describe("System prompt defining the sub-agent's behavior"),task:a6.string().describe("Task for the sub-agent to complete")});function w$(f){return DB({name:"spawn_agent",description:"Spawn a sub-agent with a custom system prompt for specialized tasks. Use when delegating work that benefits from focused expertise.",inputSchema:MB(_B),execute:async($,J)=>{let H=f.createSubAgentTools?await f.createSubAgentTools($,J):f.subAgentTools??[],W=H8({kind:"subagent",prompt:$.systemPrompt,configProvider:f.configProvider,tools:H,maxIterations:f.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:f.onSubAgentEvent,hookErrorMode:f.hookErrorMode,toolPolicies:f.toolPolicies,requestToolApproval:f.requestToolApproval}),Q=W.getAgentId(),Z=W.getConversationId(),j=J.agentId;if(f.onSubAgentStart)try{await f.onSubAgentStart({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$})}catch{}try{let P=await W.run($.task),X={text:P.text,iterations:P.iterations,finishReason:P.finishReason,usage:{inputTokens:P.usage.inputTokens,outputTokens:P.usage.outputTokens}};if(f.onSubAgentEnd)try{await f.onSubAgentEnd({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$,result:X})}catch{}return X}catch(P){if(f.onSubAgentEnd)try{await f.onSubAgentEnd({subAgentId:Q,conversationId:Z,parentAgentId:j,input:$,error:P instanceof Error?P:Error(String(P))})}catch{}throw P}},timeoutMs:300000,retryable:!1})}import{createTool as e,TEAM_AWAIT_TIMEOUT_MS as LB,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as zB,TEAM_RUN_TEXT_PREVIEW_LIMIT as OB,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as NB,TeamAttachOutcomeFragmentInputSchema as $3,TeamAwaitRunsInputSchema as J3,TeamBroadcastInputSchema as H3,TeamBroadcastToolResultSchema as qB,TeamCancelRunInputSchema as W3,TeamCancelRunToolResultSchema as bB,TeamCleanupInputSchema as Q3,TeamCleanupToolResultSchema as wB,TeamCreateOutcomeInputSchema as Z3,TeamCreateOutcomeToolResultSchema as CB,TeamFinalizeOutcomeInputSchema as j3,TeamFinalizeOutcomeToolResultSchema as EB,TeamListOutcomesInputSchema as P3,TeamListRunsInputSchema as X3,TeamMailboxMessageToolResultSchema as SB,TeamMissionLogInputSchema as V3,TeamMissionLogToolResultSchema as kB,TeamOutcomeFragmentToolResultSchema as Y3,TeamOutcomeToolResultSchema as mB,TeamReadMailboxInputSchema as B3,TeamReviewOutcomeFragmentInputSchema as A3,TeamRunTaskInputSchema as R3,TeamRunTaskToolResultSchema as t6,TeamRunToolSummarySchema as s6,TeamSendMessageInputSchema as F3,TeamSendMessageToolResultSchema as IB,TeamShutdownTeammateInputSchema as y3,TeamSimpleAgentStatusToolResultSchema as K3,TeamSpawnTeammateInputSchema as U3,TeamStatusInputSchema as G3,TeamStatusToolResultSchema as xB,TeamTaskInputSchema as h3,TeamTaskToolResultSchema as A1,validateWithZod as O,zodToJsonSchema as ff}from"@cline/shared";function T3(f,$){let J=f.replace(/\s+/g," ").trim();if(J.length<=$)return J;return`${J.slice(0,Math.max(0,$-3)).trimEnd()}...`}function a0(f,$){if(f===void 0)throw Error(`Missing required field: ${$}`);return f}function gB(f){let $=f.result;if(!$)return;return{textPreview:T3($.text,OB),iterations:$.iterations,finishReason:$.finishReason,durationMs:$.durationMs,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost}}}function W8(f){return f?.toISOString()}function o6(f){return{id:f.id,agentId:f.agentId,taskId:f.taskId,status:f.status,messagePreview:T3(f.message,zB),priority:f.priority,retryCount:f.retryCount,maxRetries:f.maxRetries,nextAttemptAt:W8(f.nextAttemptAt),continueConversation:f.continueConversation,startedAt:f.startedAt.toISOString(),endedAt:W8(f.endedAt),leaseOwner:f.leaseOwner,heartbeatAt:W8(f.heartbeatAt),lastProgressAt:W8(f.lastProgressAt),lastProgressMessage:f.lastProgressMessage,currentActivity:f.currentActivity,error:f.error,resultSummary:gB(f)}}function vB(f){if(f.status==="failed")throw Error(`Run "${f.id}" failed${f.error?`: ${f.error}`:""}`);if(f.status==="cancelled")throw Error(`Run "${f.id}" was cancelled${f.error?`: ${f.error}`:""}`);if(f.status==="interrupted")throw Error(`Run "${f.id}" was interrupted${f.error?`: ${f.error}`:""}`)}var Q8=["team_spawn_teammate","team_shutdown_teammate","team_status","team_task","team_run_task","team_cancel_run","team_list_runs","team_await_runs","team_send_message","team_broadcast","team_read_mailbox","team_mission_log","team_cleanup","team_create_outcome","team_attach_outcome_fragment","team_review_outcome_fragment","team_finalize_outcome","team_list_outcomes"];function D3(f){let $=[];if(f.createBaseTools)$.push(...f.createBaseTools());$.push(...R1({runtime:f.runtime,requesterId:f.spec.agentId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!1})),f.runtime.spawnTeammate({agentId:f.spec.agentId,config:B1({kind:"teammate",prompt:f.spec.rolePrompt,role:f.spec.rolePrompt,configProvider:f.teammateConfigProvider,tools:$,maxIterations:f.spec.maxIterations,cwd:f.teammateConfigProvider.getRuntimeConfig().cwd})})}function Z8(f){let $=f.leadAgentId??"lead",J=f.restoredFromPersistence===!0,H=R1({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!0,includeSpawnTool:f.includeLeadSpawnTool,includeManagementTools:f.includeLeadManagementTools,onLeadToolsUnlocked:f.onLeadToolsUnlocked}),W=[];for(let Q of f.restoredTeammates??[]){if(f.runtime.isTeammateActive(Q.agentId))continue;D3({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:Q}),W.push(Q.agentId)}return{tools:H,restoredFromPersistence:J,restoredTeammates:W}}function R1(f){let $=f.allowSpawn??!0,J=f.includeSpawnTool??!0,H=f.includeManagementTools??!0,W=[];if(J)W.push(e({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:ff(U3),execute:async(Z)=>{let j=O(U3,Z);if(f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!$)throw Error("Spawning teammates is disabled in this context.");let P={agentId:j.agentId,rolePrompt:j.rolePrompt};if(D3({runtime:f.runtime,requesterId:f.requesterId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:P}),!H)f.onLeadToolsUnlocked?.(R1({...f,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return O(K3,{agentId:j.agentId,status:"spawned"})}}));if(!H)return W;W.push(e({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:ff(y3),execute:async(Z)=>{let j=O(y3,Z);if(f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return f.runtime.shutdownTeammate(j.agentId,j.reason),O(K3,{agentId:j.agentId,status:"stopped"})}})),W.push(e({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:ff(G3),execute:async(Z)=>{return O(G3,Z),O(xB,f.runtime.getSnapshot())}})),W.push(e({name:"team_task",description:"Manage shared team tasks with action-specific payloads. create requires title and description, with optional dependsOn and assignee. list accepts optional status, assignee. claim requires taskId. complete requires taskId and summary. block requires taskId and reason. Do not include fields from other actions.",inputSchema:ff(h3),execute:async(Z)=>{let j=O(h3,Z);switch(j.action){case"create":{let P=new Set(NB.create??[]),X=Object.entries(Z).filter(([Y,B])=>P.has(Y)&&B!=null).map(([Y])=>Y),V=f.runtime.createTask({title:a0(j.title,"title"),description:a0(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:f.requesterId});return O(A1,{action:"create",taskId:V.id,status:V.status,...X.length>0?{ignoredFields:X,note:`Ignored fields for action=create: ${X.join(", ")}`}:{}})}case"list":return O(A1,{action:"list",tasks:f.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let P=f.runtime.claimTask(a0(j.taskId,"taskId"),f.requesterId);return O(A1,{action:"claim",taskId:P.id,status:P.status,nextStep:"Task is now in_progress. Execute the work using team_run_task or your own tools, then call team_task with action=complete when done."})}case"complete":{let P=f.runtime.completeTask(a0(j.taskId,"taskId"),f.requesterId,a0(j.summary,"summary"));return O(A1,{action:"complete",taskId:P.id,status:P.status})}case"block":{let P=f.runtime.blockTask(a0(j.taskId,"taskId"),f.requesterId,a0(j.reason,"reason"));return O(A1,{action:"block",taskId:P.id,status:P.status})}}}}));let Q=new Map;return W.push(e({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:ff(R3),execute:async(Z)=>{let j=O(R3,Z);if(j.runMode==="async"){let V=f.runtime.startTeammateRun(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:f.requesterId,continueConversation:j.continueConversation||void 0});return O(t6,{agentId:j.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${j.agentId} and queued as ${V.id}.`,runId:V.id})}let P=Q.get(j.agentId);if(P){let V=await P;return O(t6,{...V,status:"joined",deduped:!0,message:`Task for ${j.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let X=f.runtime.routeToTeammate(j.agentId,j.task,{taskId:j.taskId||void 0,fromAgentId:f.requesterId,continueConversation:j.continueConversation||void 0}).then((V)=>O(t6,{agentId:j.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${j.agentId} and completed in sync mode.`,text:V.text,iterations:V.iterations})).finally(()=>{Q.delete(j.agentId)});return Q.set(j.agentId,X),await X}})),W.push(e({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:ff(W3),execute:async(Z)=>{let j=O(W3,Z),P=f.runtime.cancelRun(j.runId,j.reason);return O(bB,{runId:P.id,status:P.status})}})),W.push(e({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:ff(X3),execute:async(Z)=>O(s6.array(),f.runtime.listRuns(O(X3,Z)).map(o6))})),W.push(e({name:"team_await_runs",description:"Wait for async teammate runs. Provide runId to wait for one run, or omit it to wait for all active async runs. Uses a long timeout for legitimate teammate work.",inputSchema:ff(J3),timeoutMs:LB,execute:async(Z)=>{let j=O(J3,Z);if(j.runId){let V=await f.runtime.awaitRun(j.runId);return vB(V),O(s6,o6(V))}let P=await f.runtime.awaitAllRuns(),X=P.filter((V)=>["failed","cancelled","interrupted"].includes(V.status));if(X.length>0){let V=X.map((Y)=>`${Y.id}:${Y.status}${Y.error?`(${Y.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${V}`)}return O(s6.array(),P.map(o6))}})),W.push(e({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:ff(F3),execute:async(Z)=>{let j=O(F3,Z),P=f.runtime.sendMessage(f.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return O(IB,{id:P.id,toAgentId:P.toAgentId})}})),W.push(e({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:ff(H3),execute:async(Z)=>{let j=O(H3,Z),P=f.runtime.broadcast(f.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return O(qB,{delivered:P.length})}})),W.push(e({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:ff(B3),execute:async(Z)=>{let j=O(B3,Z);return O(SB.array(),f.runtime.listMailbox(f.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),W.push(e({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:ff(V3),execute:async(Z)=>{let j=O(V3,Z),P=f.runtime.appendMissionLog({agentId:f.requesterId,taskId:j.taskId||void 0,kind:j.kind,summary:j.summary,evidence:j.evidence?.length?j.evidence:void 0,nextAction:j.nextAction||void 0});return O(kB,{id:P.id})}})),W.push(e({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:ff(Q3),execute:async(Z)=>{if(O(Q3,Z),f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return f.runtime.cleanup(),O(wB,{status:"cleaned"})}})),W.push(e({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:ff(Z3),execute:async(Z)=>{let j=O(Z3,Z),P=f.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:f.requesterId});return O(CB,{outcomeId:P.id,status:P.status,requiredSections:P.requiredSections})}})),W.push(e({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:ff($3),execute:async(Z)=>{let j=O($3,Z),P=f.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:f.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return O(Y3,{fragmentId:P.id,status:P.status})}})),W.push(e({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:ff(A3),execute:async(Z)=>{let j=O(A3,Z),P=f.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:f.requesterId,approved:j.approved});return O(Y3,{fragmentId:P.id,status:P.status})}})),W.push(e({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:ff(j3),execute:async(Z)=>{let j=O(j3,Z),P=f.runtime.finalizeOutcome(j.outcomeId);return O(EB,{outcomeId:P.id,status:P.status})}})),W.push(e({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:ff(P3),execute:async(Z)=>{return O(P3,Z),O(mB.array(),f.runtime.listOutcomes())}})),W}function M3(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}function _3(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var uB=[{id:"read_files",description:"Read the full content of text or image files at the provided absolute paths, or return only an inclusive one-based line range when start_line/end_line are provided.",headlessToolNames:["read_files"]},{id:"search_codebase",description:"Perform regex pattern searches across the codebase for code patterns, definitions, imports, and other text matches.",headlessToolNames:["search_codebase"]},{id:"run_commands",description:"Run shell commands from the root of the workspace for listing files, checking git status, builds, tests, and similar tasks.",headlessToolNames:["run_commands"]},{id:"editor",description:"Make controlled filesystem edits on text files with create, replace, and insert operations.",headlessToolNames:["editor"]},{id:"fetch_web_content",description:"Fetch URL content and analyze it with a prompt describing what to extract.",headlessToolNames:["fetch_web_content"]},{id:"skills",description:"Execute a configured skill within the main conversation when a matching skill exists for the task.",headlessToolNames:["skills"]},{id:"ask_question",description:"Ask the user a single clarifying question with 2-5 selectable options.",headlessToolNames:["ask_question"]},{id:"spawn_agent",description:w$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...Q8]}],cB={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function dB(f){return f==="plan"||f==="yolo"?f:"act"}function z3(f){let $=dB(f.mode),J=uf[U0({mode:$})],H=V1(f.providerId??"",f.modelId??"",$,X1);return{mode:$,flags:{...J,...H,...typeof f.enableSpawnAgent==="boolean"?{enableSpawnAgent:f.enableSpawnAgent}:{},...typeof f.enableAgentTeams==="boolean"?{enableAgentTeams:f.enableAgentTeams}:{}}}}function L3(f,$){if($.disabledToolIds?.has(f))return!1;let{flags:J}=z3($);if(f==="spawn_agent")return J.enableSpawnAgent===!0;if(f==="teams")return J.enableAgentTeams===!0;if(f==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let H=cB[f];return H?J[H]===!0:!1}function rB(f,$){if(f.id==="editor"){let{flags:J}=z3($),H=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...f,defaultEnabled:L3(f.id,$),headlessToolNames:[H?"apply_patch":"editor"]}}return{...f,defaultEnabled:L3(f.id,$)}}function F1(f={}){return uB.map(($)=>rB($,f))}function O3(f={}){return F1(f).filter(($)=>$.defaultEnabled).map(($)=>$.id)}function N3(f){if(!f.enabled)return new Set;let $=F1(f.availabilityContext),J=new Set($.map((H)=>H.id));if(!f.allowlist||f.allowlist.length===0)return new Set($.filter((H)=>H.defaultEnabled).map((H)=>H.id));for(let H of f.allowlist)if(!J.has(H))throw Error(`Unknown tool "${H}". Available tools: ${$.map((W)=>W.id).join(", ")}`);return new Set(f.allowlist)}function e6(f,$={}){return F1($).filter((J)=>f.has(J.id)).flatMap((J)=>J.headlessToolNames)}function q3(f,$={}){return e6(f,$)}function y1(f={}){let{executorOptions:$={},executors:J,...H}=f,W={...f8($),...J??{}};return N$({...H,executors:W})}function j8(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function lB(f){if(!f||f.length===0)return;let $=f.map(j8).filter((J)=>J.length>0);return $.length>0?new Set($):void 0}function pB(f,$,J){if(!J)return!0;let H=j8(f),W=j8($),Q=H.includes(":")?H.split(":").at(-1)??H:H,Z=W.includes(":")?W.split(":").at(-1)??W:W;return J.has(H)||J.has(W)||J.has(Q)||J.has(Z)}function K1(f,$){let J=lB($);return[...f.getSnapshot("skill").entries()].map(([W,Q])=>{let Z=Q.item;return{id:W,name:Z.name.trim(),description:Z.description?.trim(),disabled:Z.disabled===!0,skill:Z}}).filter((W)=>pB(W.id,W.name,J))}function iB(f,$){return K1(f,$).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,H)=>J.localeCompare(H))}function nB(f,$,J){let H=j8($);if(!H)return{error:"Missing skill name."};let W=K1(f,J),Q=W.find((V)=>V.id===H);if(Q){let{skill:V}=Q;if(V.disabled===!0)return{error:`Skill "${V.name}" is configured but disabled.`};return{id:Q.id,skill:V}}let Z=H.includes(":")?H.split(":").at(-1)??H:H,j=W.filter(({id:V})=>{if(V===Z)return!0;return V.endsWith(`:${Z}`)}),P=j.filter(({skill:V})=>V.disabled!==!0);if(P.length===1){let{id:V,skill:Y}=P[0];return{id:V,skill:Y}}if(P.length>1)return{error:`Skill "${$}" is ambiguous. Use one of: ${P.map(({id:V})=>V).join(", ")}`};if(j.length===1){let{skill:V}=j[0];return{error:`Skill "${V.name}" is configured but disabled.`}}if(j.length>1)return{error:`Skill "${$}" is ambiguous, and all matches are disabled: ${j.map(({id:V})=>V).join(", ")}`};let X=iB(f,J);return{error:X.length>0?`Skill "${$}" not found. Available skills: ${X.join(", ")}`:"No skills are currently available."}}function aB(f,$=Promise.resolve(),J){let H=new Set,W=async(Q,Z)=>{await $;let j=nB(f,Q,J);if("error"in j)return j.error;let{id:P,skill:X}=j;if(H.has(P))return`Skill "${X.name}" is already running.`;H.add(P);try{let V=Z?.trim(),Y=V?`
145
+ <command-args>${V}</command-args>`:"",B=X.description?.trim()?`Description: ${X.description.trim()}
146
+
147
+ `:"";return`<command-name>${X.name}</command-name>${Y}
148
+ <command-instructions>
149
+ ${B}${X.instructions}
150
+ </command-instructions>`}finally{H.delete(P)}};return Object.defineProperty(W,"configuredSkills",{get:()=>K1(f,J).map(({skill:Q,...Z})=>Z),enumerable:!0,configurable:!1}),W}function b3(f){let $=f.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[f.includeRules?"rules":void 0,f.registerSkillsTool?"tools":void 0,f.includeSkills||f.includeWorkflows?"commands":void 0].filter((H)=>Boolean(H))},async setup(H){if(await $,f.includeRules)H.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>$9(f.watcher)});if(f.registerSkillsTool)H.registerTool(O$(aB(f.watcher,$,f.allowedSkillNames)));for(let W of Z1(f.watcher).filter((Q)=>Q.kind==="skill"&&f.includeSkills||Q.kind==="workflow"&&f.includeWorkflows))H.registerCommand({name:W.name,description:W.description,handler:(Q)=>{let Z=Q.trim();return Z?`${W.instructions}
151
+
152
+ ${Z}`:W.instructions}})}}}class w3{watcher;ready;stopped=!1;constructor(f){this.watcher=t5(f)}start(){if(!this.ready)this.stopped=!1,this.ready=this.watcher.start();return this.ready}stop(){if(this.stopped)return;this.stopped=!0,this.watcher.stop(),this.ready=void 0}async refreshType(f){await this.start(),await this.watcher.refreshType(f)}listRecords(f){return[...this.watcher.getSnapshot(f).entries()].map(([$,J])=>({type:f,id:$,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return Z1(this.watcher)}resolveRuntimeSlashCommand(f){return e5(f,this.watcher)}hasConfiguredSkills(f){return K1(this.watcher,f).length>0}createExtension(f){return b3({...f,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function C$(f){return new w3(f)}import{readFile as tB,writeFile as sB}from"node:fs/promises";import E3 from"yaml";function oB(f){let $=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=f.match($);if(!J)return{data:{},body:f,hadFrontmatter:!1};let[,H,W]=J,Q=E3.parse(H);return{data:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},body:W,hadFrontmatter:!0}}function C3(f,$){return`---
153
+ ${E3.stringify(f).trimEnd()}
154
+ ---
155
+ ${$}`}function eB(f,$){let{data:J,body:H,hadFrontmatter:W}=oB(f);if(!W&&$)return f;if($){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return H;return C3(J,H)}return J.disabled=!0,C3(J,H)}async function S3({filePath:f,enabled:$}){let J=await tB(f,"utf8"),H=eB(J,$);return await sB(f,H),{filePath:f,enabled:$,disabled:!$}}ef();ef();import{existsSync as uA}from"node:fs";import{discoverPluginModulePaths as cA,resolveConfiguredPluginModulePaths as dA,resolvePluginConfigSearchPaths as rA}from"@cline/shared/storage";import{resolve as GA}from"node:path";import{normalizePluginManifest as hA}from"@cline/shared";import{existsSync as h0,readFileSync as ZJ}from"node:fs";import{builtinModules as PA,createRequire as v3}from"node:module";import{dirname as Y8,extname as u3,isAbsolute as XA,resolve as Xf}from"node:path";import{fileURLToPath as c3}from"node:url";import{PLUGIN_FILE_EXTENSIONS as VA}from"@cline/shared";var YA=Y8(c3(import.meta.url)),d3=v3(import.meta.url),BA=Xf(YA,"..","..","..","..",".."),WJ=AA(BA),jJ=new Set(PA.flatMap((f)=>[f,f.replace(/^node:/,"")])),V8=new Set(VA);function AA(f){let $={},J={"@cline/agents":Xf(f,"packages/agents/src/index.ts"),"@cline/core":Xf(f,"packages/core/src/index.ts"),"@cline/llms":Xf(f,"packages/llms/src/index.ts"),"@cline/shared":Xf(f,"packages/shared/src/index.ts"),"@cline/shared/storage":Xf(f,"packages/shared/src/storage/index.ts"),"@cline/shared/db":Xf(f,"packages/shared/src/db/index.ts")};for(let[H,W]of Object.entries(J))if(h0(W))$[H]=W;return $}function r3(f){return!(f.startsWith(".")||f.startsWith("/")||f.startsWith("file:")||f.startsWith("data:")||f.startsWith("http:")||f.startsWith("https:"))}function QJ(f){if(f.startsWith("@")){let[$,J]=f.split("/",3);return J?`${$}/${J}`:f}return f.split("/",1)[0]??f}function l3(f,$){let J=QJ($),H=Y8(f);while(!0){let W=Xf(H,"node_modules",J);if(h0(W)||h0(Xf(W,"package.json")))return!0;let Q=Xf(H,"..");if(Q===H)return!1;H=Q}}function RA(f){try{return d3.resolve(f),!0}catch{return!1}}function FA(f){try{return d3.resolve(f)}catch{return null}}function yA(f){let J=Y8(f);for(let H=0;H<4;H++){let W=Xf(J,"package.json");if(h0(W))try{let Z=JSON.parse(ZJ(W,"utf8"));return Z!=null&&typeof Z==="object"&&"cline"in Z}catch{return!1}let Q=Xf(J,"..");if(Q===J)return!1;J=Q}return!1}function KA(f,$){let J=$.startsWith("file:")?c3($):XA($)?$:Xf(Y8(f),$);if(h0(J)&&V8.has(u3(J)))return J;for(let H of V8){let W=`${J}${H}`;if(h0(W))return W}for(let H of V8){let W=Xf(J,`index${H}`);if(h0(W))return W}return null}function p3(f){let $=new Set,J=[/\bimport\s+(?:type\s+)?[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\bfrom\s*["'`]([^"'`]+)["'`]/g,/\bimport\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\brequire\s*\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(let H of J)for(let W of f.matchAll(H)){let Q=W[1];if(Q)$.add(Q)}return[...$]}function i3(f,$,J=new Set){if(J.has(f)||!h0(f))return;if(J.add(f),!V8.has(u3(f)))return;let H=ZJ(f,"utf8");for(let W of p3(H)){if(W.startsWith("node:")||jJ.has(W))continue;if(r3(W)){if(Object.hasOwn(WJ,W)||Object.hasOwn(WJ,QJ(W))||l3(f,W)||$&&RA(W))continue;throw Error(`Cannot find module '${QJ(W)}'`)}let Q=KA(f,W);if(Q)i3(Q,$,J)}}function UA(f,$){let J=v3(f),H={};for(let[W,Q]of Object.entries(WJ)){try{J.resolve(W);continue}catch{}H[W]=Q}if($){let W=ZJ(f,"utf8");for(let Q of p3(W)){if(!r3(Q)||Q.startsWith("node:")||jJ.has(Q)||Object.hasOwn(H,Q)||l3(f,Q))continue;let Z=FA(Q);if(Z)H[Q]=Z}}return H}async function n3(f,$={}){let J=!yA(f);i3(f,J);let H=UA(f,J),W=await import("jiti"),Q=typeof W==="function"?W:typeof W.default==="function"?W.default:void 0;if(!Q)throw Error("Unable to load jiti");return await Q(f,{alias:H,cache:$.useCache,requireCache:$.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...jJ],transformModules:Object.keys(H)}).import(f,{})}function a3(f,$){if(!f)return!0;if(f.providerIds?.length){if(!$?.providerId||!f.providerIds.includes($.providerId))return!1}if(f.modelIds?.length){if(!$?.modelId||!f.modelIds.includes($.modelId))return!1}return!0}function t3(f){return typeof f==="object"&&f!==null}function PJ(f){return Array.isArray(f)&&f.every(($)=>typeof $==="string")}function TA(f,$){if(!t3(f.manifest))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);if(!PJ(f.manifest.capabilities))throw Error(`Invalid plugin module at ${$}: manifest.capabilities must be a string array`);if(f.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${$}: manifest.capabilities cannot be empty`);if(Object.hasOwn(f.manifest,"providerIds")&&!PJ(f.manifest.providerIds))throw Error(`Invalid plugin module at ${$}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(f.manifest,"modelIds")&&!PJ(f.manifest.modelIds))throw Error(`Invalid plugin module at ${$}: manifest.modelIds must be a string array when provided`)}function DA(f,$){if(!t3(f))throw Error(`Invalid plugin module at ${$}: expected object export`);if(typeof f.name!=="string"||f.name.length===0)throw Error(`Invalid plugin module at ${$}: expected non-empty "name"`);if(!Object.hasOwn(f,"manifest"))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);TA(f,$)}async function XJ(f,$={}){let J=GA($.cwd??process.cwd(),f),H=await n3(J,{useCache:$.useCache}),W=$.exportName??"plugin",Q=H.default??H[W];DA(Q,J);let Z=Q,j=Z.setup,P=j?(X,V)=>{let Y={...$.session,...V.session},B={...V,session:Object.keys(Y).length>0?Y:void 0,client:$.client??V.client,user:$.user??V.user,workspaceInfo:$.workspaceInfo??V.workspaceInfo,automation:$.automation??V.automation,logger:$.logger??V.logger,telemetry:$.telemetry??V.telemetry};return j(X,B)}:void 0;return{...Z,manifest:hA(Z.manifest),setup:P}}async function s3(f,$={}){return(await t0(f,$)).plugins}async function t0(f,$={}){let J=[],H=[],W=new Map,Q=0;for(let Z of f)try{let j=await XJ(Z,$);if(!a3(j.manifest,$))continue;let P=W.get(j.name);if(P)H.push({type:"duplicate_plugin_override",pluginName:j.name,pluginPath:Z,overriddenPluginPath:P.pluginPath,message:`Plugin "${j.name}" from ${Z} overrides ${P.pluginPath}`});W.set(j.name,{plugin:j,pluginPath:Z,order:Q++})}catch(j){let P=j instanceof Error?j.message:String(j);J.push({pluginPath:Z,phase:"load",message:P,stack:j instanceof Error?j.stack:void 0})}return{plugins:[...W.values()].sort((Z,j)=>Z.order-j.order).map((Z)=>Z.plugin),failures:J,warnings:H}}import{existsSync as qA}from"node:fs";import{createRequire as bA}from"node:module";import{dirname as wA,join as A8}from"node:path";import{fileURLToPath as CA}from"node:url";import{spawn as MA}from"node:child_process";import{basename as _A}from"node:path";import{augmentNodeCommandForDebug as LA,withResolvedClineBuildEnv as zA}from"@cline/shared";function o3(f){if(f instanceof Error)return f;return Error(String(f))}var OA="CLINE_JS_RUNTIME_PATH";function e3(f){let $=f?.trim();if(!$)return!1;let J=_A($).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function f7(f={}){let $=f.env??process.env,J=f.runtimeExecutable?.trim()||$[OA]?.trim();if(J)return J;let H=f.execPath?.trim()||process.execPath;if(e3(H))return H;for(let W of[$.BUN_EXEC_PATH,$.npm_node_execpath,$.NODE]){let Q=W?.trim();if(Q&&e3(Q))return Q}return"node"}function NA(f,$={}){let J=f7({env:$.env,execPath:$.execPath,runtimeExecutable:$.runtimeExecutable});return LA([J,...f],{env:$.env,execArgv:$.execArgv,debugRole:$.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class B8{options;process=null;requestCounter=0;pending=new Map;constructor(f){this.options=f}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest(f){let $=this.pending.get(f);if(!$)return;if(this.pending.delete(f),$.timeout)clearTimeout($.timeout);return $}start(){if(this.process&&this.process.exitCode===null)return;let f=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],$=NA(f,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=MA($[0]??f7(this.options),$.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:zA(process.env)});this.process=J;let H="",W=(Q)=>{let Z=H+Q;H=Z.length>4000?Z.slice(-4000):Z};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(Q)=>{W(Q)}),J.on("message",(Q)=>{this.onMessage(Q)}),J.on("error",(Q)=>{this.failPending(Error(`${this.processLabel} process error: ${o3(Q).message}`))}),J.on("exit",(Q,Z)=>{this.process=null;let j=H.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(Q)}, signal=${String(Z)})${j?`: ${j}`:""}`))})}async call(f,$,J={}){this.start();let H=this.process;if(!H||H.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let W=`req_${++this.requestCounter}`,Q={type:"call",id:W,method:f,args:$};return await new Promise((Z,j)=>{let P={resolve:(X)=>Z(X),reject:j};if((J.timeoutMs??0)>0)P.timeout=setTimeout(()=>{this.clearPendingRequest(W),this.shutdown().catch(()=>{}),j(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${f}`))},J.timeoutMs);this.pending.set(W,P),H.send(Q,(X)=>{if(!X)return;let V=this.clearPendingRequest(W);if(!V)return;V.reject(Error(`${this.processLabel} failed to send call "${f}": ${o3(X).message}`))})})}async shutdown(){let f=this.process;if(this.process=null,!f||f.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise(($)=>{let J=setTimeout(()=>{try{f.kill("SIGKILL")}catch{}$()},300);f.once("exit",()=>{clearTimeout(J),$()});try{f.kill("SIGTERM")}catch{clearTimeout(J),$()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage(f){if(!f)return;if(f.type==="event"){if(typeof f.name==="string"&&f.name.length>0)this.options.onEvent?.({name:f.name,payload:f.payload});return}if(f.type!=="response"||!f.id)return;let $=this.clearPendingRequest(f.id);if(!$)return;if(f.ok){$.resolve(f.result);return}$.reject(Error(f.error?.message||`${this.processLabel} call failed`))}failPending(f){for(let[$,J]of this.pending.entries()){if(this.pending.delete($),J.timeout)clearTimeout(J.timeout);J.reject(f)}}}function EA(f){return{...f,contributions:{tools:f.contributions?.tools??[],commands:f.contributions?.commands??[],messageBuilders:f.contributions?.messageBuilders??[],providers:f.contributions?.providers??[],automationEventTypes:f.contributions?.automationEventTypes??[],shortcuts:f.contributions?.shortcuts??[],flags:f.contributions?.flags??[]}}}function R8(f){return(f instanceof Error?f.message:String(f)).includes("Unknown sandbox plugin id:")}function SA(){let f=wA(CA(import.meta.url)),$=bA(import.meta.url),J=[A8(f,"plugin-sandbox-bootstrap.js"),A8(f,"extensions","plugin-sandbox-bootstrap.js"),A8(f,"agents","plugin-sandbox-bootstrap.js")];for(let Q of J)if(qA(Q))return{file:Q};let H=A8(f,"plugin-sandbox-bootstrap.ts"),W="jiti";try{W=$.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(W)});`,`const jiti = createJiti(${JSON.stringify(H)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(H)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
156
+ `)}}var VJ=SA();function YJ(f,$){return typeof f==="number"&&f>0?f:$}async function J7(f){let $=new B8({name:"plugin-sandbox",..."file"in VJ?{bootstrapFile:VJ.file}:{bootstrapScript:VJ.script},onEvent:f.onEvent}),J=YJ(f.importTimeoutMs,4000),H=YJ(f.hookTimeoutMs,3000),W=YJ(f.contributionTimeoutMs,60000),Q={pluginPaths:f.pluginPaths,exportName:f.exportName,providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,loggerEnabled:Boolean(f.logger)},Z,j=()=>{return Z??=$.call("initialize",Q,{timeoutMs:J}).finally(()=>{Z=void 0}),Z},P;try{P=await $.call("initialize",Q,{timeoutMs:J})}catch(Y){throw await $.shutdown().catch(()=>{}),Y}return{extensions:P.plugins.map(EA).map((Y)=>{let B={name:Y.name,manifest:Y.manifest,setup:(A)=>{kA(A,$,Y,W,j),mA(A,$,Y,W,j),xA(A,$,Y,W,j),IA(A,Y)}};return B.hooks=vA($,Y,H,j),B}),failures:P.failures,shutdown:async()=>{await $.shutdown()},warnings:P.warnings}}function kA(f,$,J,H,W){for(let Q of J.contributions?.tools??[]){let Z={name:Q.name,description:Q.description??"",inputSchema:Q.inputSchema??{type:"object",properties:{}},timeoutMs:Q.timeoutMs,retryable:Q.retryable,execute:async(j,P)=>{try{return await $.call("executeTool",{pluginId:J.pluginId,contributionId:Q.id,input:j,context:P},{timeoutMs:H})}catch(X){if(!R8(X))throw X;return await W(),await $.call("executeTool",{pluginId:J.pluginId,contributionId:Q.id,input:j,context:P},{timeoutMs:H})}}};f.registerTool(Z)}}function mA(f,$,J,H,W){for(let Q of J.contributions?.commands??[])f.registerCommand({name:Q.name,description:Q.description,handler:async(Z)=>{try{return await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:H})}catch(j){if(!R8(j))throw j;return await W(),await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:H})}}})}function IA(f,$){for(let J of $.contributions?.providers??[])f.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of $.contributions?.automationEventTypes??[])f.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function xA(f,$,J,H,W){for(let Q of J.contributions?.messageBuilders??[])f.registerMessageBuilder({name:Q.name,async build(Z){try{let j=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:H});return $7(j)?j:Z}catch(j){if(!R8(j))throw j;await W();let P=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:H});return $7(P)?P:Z}}})}function $7(f){return Array.isArray(f)&&f.every(($)=>typeof $==="object"&&$!==null&&("role"in $)&&("content"in $))}function gA(f,$,J,H,W){return async(Q)=>{try{return await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:H})}catch(Z){if(!R8(Z))throw Z;return await W(),await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:H})}}}function vA(f,$,J,H){let W={};for(let Q of $.hooks??[])W[Q]=gA(f,$.pluginId,Q,J,H);return Object.keys(W).length>0?W:void 0}function BJ(f){return rA(f)}function AJ(f){return cA(f)}function G1(f={}){let $=f.cwd??process.cwd(),J=BJ(f.workspacePath).flatMap((Z)=>AJ(Z)).filter((Z)=>uA(Z)),H=dA(f.pluginPaths??[],$),W=[],Q=new Set;for(let Z of[...H,...J]){if(Q.has(Z))continue;Q.add(Z),W.push(Z)}return JJ(W)}async function F8(f={}){let $=G1(f);if($.length===0)return{extensions:[],failures:[],warnings:[]};if(f.mode==="in_process"){let H=await t0($,{cwd:f.cwd,exportName:f.exportName,providerId:f.providerId,modelId:f.modelId,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,automation:f.automation,logger:f.logger,telemetry:f.telemetry});return{extensions:H.plugins,failures:H.failures,warnings:H.warnings}}let J=await J7({pluginPaths:$,exportName:f.exportName,importTimeoutMs:f.importTimeoutMs,hookTimeoutMs:f.hookTimeoutMs,contributionTimeoutMs:f.contributionTimeoutMs,onEvent:f.onEvent,providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,session:f.session,client:f.client,user:f.user,workspaceInfo:f.workspaceInfo,logger:f.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}ef();function lA(f,$){if(!f.setup)return[];let J=[],H={registerTool:(W)=>J.push(W),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return f.setup(H,{workspaceInfo:$}),J}async function RJ(f){let $=G1({workspacePath:f.workspacePath,cwd:f.cwd}),J=cf(f.disabledToolNames),H=[];for(let W of $){let Q=await t0([W],{cwd:f.cwd,providerId:f.providerId,modelId:f.modelId});for(let Z of Q.plugins)for(let j of lA(Z,{rootPath:f.workspacePath}))H.push({name:j.name,pluginName:Z.name,path:W,source:W.startsWith(f.workspacePath)?"workspace-plugin":"global-plugin",enabled:!J.has(j.name),description:j.description?.trim()||void 0})}return H.sort((W,Q)=>{let Z=W.name.localeCompare(Q.name);if(Z!==0)return Z;return W.path.localeCompare(Q.path)})}function yJ(f,$){if(!$)return"global";let J=iA($,f);return!J.startsWith("..")&&!pA(J)?"workspace":"global"}function y8(f){return[...f].sort(($,J)=>{let H=(W)=>{switch(W){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if($.source!==J.source)return H($.source)-H(J.source);return $.name.localeCompare(J.name)})}function Q7(f){return f.workspaceRoot?.trim()||f.cwd?.trim()||""}async function W7(f,$){if(f.userInstructionService)return await $(f.userInstructionService);let J=Q7(f);if(!J)return await $(void 0);let H=C$({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await H.start(),await $(H)}finally{H.stop()}}function nA(f,$){if(!f)return;let J=f.listRecords("skill");if($.id){let H=J.find((W)=>W.id===$.id);if(H)return H}for(let H of J)if(H.filePath===$.path||H.item.name===$.name||H.id===$.name)return H;return}class k${async list(f={}){return await W7(f,async($)=>{let J=Q7(f),H=[],W=[],Q=[],Z=[];if($){for(let j of $.listRecords("workflow")){let P=j.item;H.push({id:j.id,name:P.name,path:j.filePath,enabled:P.disabled!==!0,kind:"workflow",source:yJ(j.filePath,J),description:P.instructions,toggleable:!1})}for(let j of $.listRecords("rule")){let P=j.item;W.push({id:j.id,name:P.name,path:j.filePath,enabled:P.disabled!==!0,kind:"rule",source:yJ(j.filePath,J),description:P.instructions,toggleable:!1})}for(let j of $.listRecords("skill")){let P=j.item;Q.push({id:j.id,name:P.name,path:j.filePath,enabled:P.disabled!==!0,kind:"skill",source:yJ(j.filePath,J),description:P.description,toggleable:!0})}}if(J)try{for(let j of await RJ({workspacePath:J,cwd:f.cwd,providerId:f.availabilityContext?.providerId,modelId:f.availabilityContext?.modelId}))Z.push({id:`${j.pluginName}:${j.name}:${j.path}`,name:j.name,path:j.path,enabled:j.enabled,kind:"tool",source:j.source,description:j.description,toggleable:!0})}catch{}return{workflows:y8(H.filter((j)=>FJ(j.path))),rules:y8(W.filter((j)=>FJ(j.path))),skills:y8(Q.filter((j)=>FJ(j.path))),tools:y8(Z)}})}async toggle(f){if(f.type==="skills")return await W7(f,async($)=>{let J=nA($,f),H=J?.filePath;if(!H)throw Error(`Unable to resolve skill setting '${f.id??f.name??H7(f.path??"")}'.`);let W=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,Q=f.enabled??(W!==void 0?!W:void 0);if(Q===void 0)throw Error(`Cannot determine toggle state for skill '${f.id??f.name??H7(f.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await S3({filePath:H,enabled:Q}),await $?.refreshType("skill"),{snapshot:await this.list({...f,userInstructionService:$}),changedTypes:["skills"]}});if(f.type==="tools"){if(!f.name?.trim())throw Error("Tool settings toggle requires a tool name.");if(f.enabled===void 0)$J(f.name);else g3(f.name,!f.enabled);return{snapshot:await this.list(f),changedTypes:["tools"]}}throw Error(`Settings type '${f.type}' does not support toggles.`)}}function h1(){return new k$}function Z7(f){return{async list($){let J=f;if(J.listSettings)return await J.listSettings($);return await h1().list($)},async toggle($){let J=f;if(J.toggleSetting)return await J.toggleSetting($);return await h1().toggle($)}}}function j7(f){function $(){let J=f.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return $().list(J)},update(J){return $().update(J)},delete(J){return $().delete(J)}}}function Vf(...f){let $,J;for(let W of f){if(!W)continue;if(W.toolExecutors)$={...$??{},...W.toolExecutors};if(W.requestToolApproval)J=W.requestToolApproval}let H=$&&Object.keys($).length>0;if(!H&&!J)return;return{...H?{toolExecutors:$}:{},...J?{requestToolApproval:J}:{}}}function KJ(f){let{hooks:$,logger:J,telemetry:H,extensionContext:W,extraTools:Q,extensions:Z,onTeamEvent:j,onConsecutiveMistakeLimitReached:P,checkpoint:X,compaction:V,...Y}=f,B={};if($)B.hooks=$;if(J)B.logger=J;if(H)B.telemetry=H;if(W)B.extensionContext=W;if(Q)B.extraTools=Q;if(Z)B.extensions=Z;if(j)B.onTeamEvent=j;if(P)B.onConsecutiveMistakeLimitReached=P;if(X?.createCheckpoint)B.checkpoint=X;if(V?.compact)B.compaction=V;let A=Object.keys(B).length>0?B:void 0;return{config:{...Y,...X?{checkpoint:{enabled:X.enabled}}:{},...V?{compaction:{enabled:V.enabled,strategy:V.strategy,thresholdRatio:V.thresholdRatio,reserveTokens:V.reserveTokens,preserveRecentTokens:V.preserveRecentTokens,contextWindowTokens:V.contextWindowTokens,summarizer:V.summarizer}}:{}},...A?{localRuntime:A}:{}}}function P7(f){let $=f.config;return"providerId"in $?{...f,config:{...$,...aA(f.localRuntime)},localRuntime:f.localRuntime}:f}function UJ(f,$={}){let J=KJ(f.config),H=Vf($.defaultCapabilities,f.capabilities),W=tA(J.localRuntime,f.localRuntime),Q=$.withExtensionContext?.(W?.extensionContext);if(Q)W={...W??{},extensionContext:Q};return{...f,...J,...W?{localRuntime:W}:{},...H?{capabilities:H}:{}}}function aA(f){if(!f)return{};let{modelCatalogDefaults:$,userInstructionService:J,configExtensions:H,onTeamRestored:W,...Q}=f;return Q}function tA(...f){let $={};for(let J of f)if(J)Object.assign($,J);return Object.keys($).length>0?$:void 0}Af();function X7(f){let $=f.input.config.telemetry??f.telemetry;if(!$)return;$.capture({event:I.SESSION.STARTED,properties:{sessionId:f.sessionId,source:f.input.source??Pf.CORE,providerId:f.input.config.providerId,modelId:f.input.config.modelId,enableTools:f.input.config.enableTools,enableSpawnAgent:f.input.config.enableSpawnAgent,enableAgentTeams:f.input.config.enableAgentTeams,clientName:f.clientName,runtimeAddress:f.runtimeAddress}})}function T1(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function GJ(f){let $=f?.trim();return $?$:void 0}function sA(f,$){let J=f?.trim();if(!J)return $;let H=Date.parse(J);if(!Number.isFinite(H))return $;return new Date(H).toISOString()}function V7(f,$){return new Date(new Date(f).getTime()+Math.max(0,Math.floor($))*1000).toISOString()}function Y7(f,$){return new Date(new Date(f).getTime()-Math.max(0,Math.floor($))*1000).toISOString()}function oA(f,$){if(!f)return $;return new Date(f).getTime()>=new Date($).getTime()?f:$}function eA(f,$){let J=f.eventId.trim(),H=f.eventType.trim(),W=f.source.trim(),Q=GJ(f.subject),Z=GJ(f.dedupeKey)??`${H}:${W}:${Q??J}`;return{eventId:J,eventType:H,source:W,subject:Q,occurredAt:sA(f.occurredAt,$),workspaceRoot:GJ(f.workspaceRoot),payload:T1(f.payload)?f.payload:void 0,attributes:T1(f.attributes)?f.attributes:void 0,dedupeKey:Z}}function hJ(f,$){if(!$)return;let J=$.split("."),H=f;for(let W of J){if(!T1(H))return;H=H[W]}return H}function fR(f,$){if(f.attributes&&Object.hasOwn(f.attributes,$))return f.attributes[$];if(f.payload&&Object.hasOwn(f.payload,$))return f.payload[$];let J={eventId:f.eventId,eventType:f.eventType,source:f.source,subject:f.subject,occurredAt:f.occurredAt,workspaceRoot:f.workspaceRoot,dedupeKey:f.dedupeKey,attributes:f.attributes,payload:f.payload},H=hJ(J,$);if(H!==void 0)return H;if(f.attributes){let W=hJ(f.attributes,$);if(W!==void 0)return W}if(f.payload)return hJ(f.payload,$);return}function K8(f,$){if(Array.isArray($))return $.some((J)=>K8(f,J));if(Array.isArray(f))return f.some((J)=>K8(J,$));if(T1($)){if(!T1(f))return!1;return Object.entries($).every(([J,H])=>K8(f[J],H))}return Object.is(f,$)}function $R(f,$){if(!$||Object.keys($).length===0)return!0;return Object.entries($).every(([J,H])=>K8(fR(f,J),H))}class TJ{store;nowFn;logger;constructor(f){this.store=f.store,this.nowFn=f.now??(()=>Date.now()),this.logger=f.logger}ingestEvent(f){let $=new Date(this.nowFn()).toISOString(),J=eA(f,$),H=this.store.insertEventLog(J,{receivedAtIso:$});if(!H.created)return this.logger?.debug("cron.event.duplicate",{eventId:H.record.eventId,eventType:H.record.eventType,source:H.record.source}),{event:H.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:H.record.dedupeKey}]};try{let W=this.store.listEventSpecsForType(J.eventType),Q=[],Z=[],j=[];for(let V of W){if(!$R(J,V.filters)){Q.push({specId:V.specId,externalId:V.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}Z.push(V);let Y=this.materializeForSpec(V,J,H.record.receivedAt);if(Y.run)j.push(Y.run);else Q.push({specId:V.specId,externalId:V.externalId,reason:Y.reason,dedupeKey:J.dedupeKey})}let P=Z.length===0?"unmatched":j.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(H.record.eventId,{status:P,matchedSpecCount:Z.length,queuedRunCount:j.length,suppressedCount:Q.filter((V)=>V.reason!=="filter_mismatch").length});let X=this.store.getEventLog(H.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:H.record.eventId,eventType:H.record.eventType,status:P,matchedSpecCount:Z.length,queuedRunCount:j.length}),{event:X??H.record,duplicate:!1,matchedSpecs:Z,queuedRuns:j,suppressions:Q}}catch(W){if(this.store.updateEventLogProcessing(H.record.eventId,{status:"failed",error:W instanceof Error?W.message:String(W)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:H.record.eventId,eventType:H.record.eventType,error:W});throw W}}materializeForSpec(f,$,J){let H=$.dedupeKey??$.eventId,W=f.debounceSeconds??0;if(W>0){let P=this.store.findQueuedEventRunForDedupe({specId:f.specId,dedupeKey:H});if(P){let X=oA(P.scheduledFor,V7(J,W)),V=this.store.updateQueuedEventRunForDebounce({runId:P.runId,triggerEventId:$.eventId,scheduledFor:X});if(V)return{run:V,reason:"dedupe_window"}}}let Q=f.dedupeWindowSeconds??0;if(Q>0&&this.store.hasRecentEventRunForDedupe({specId:f.specId,dedupeKey:H,sinceIso:Y7(J,Q)}))return{reason:"dedupe_window"};let Z=f.cooldownSeconds??0;if(Z>0&&this.store.hasRecentEventRunForSpec({specId:f.specId,sinceIso:Y7(J,Z)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"event",triggerEventId:$.eventId,scheduledFor:W>0?V7(J,W):J}),reason:"dedupe_window"}}}class D1{store;nowFn;constructor(f){this.store=f.store,this.nowFn=f.now??(()=>Date.now())}materializeAll(){let f={oneOffQueued:0,scheduleQueued:0},$=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let H of $)if(this.materializeOneOff(H))f.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let H of J)try{if(this.materializeSchedule(H))f.scheduleQueued+=1}catch{}return f}materializeOneOff(f){if(f.triggerKind!=="one_off")return!1;if(!f.enabled||f.removed)return!1;if(this.store.hasOneOffRunForRevision(f.specId,f.revision))return!1;return this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule(f){if(f.triggerKind!=="schedule")return!1;if(!f.enabled||f.removed)return!1;if(!f.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:f.specId,nowMs:this.nowFn()}).queued}}import{basename as YR}from"node:path";import{buildClineSystemPrompt as BR}from"@cline/shared";import{nowIso as F7}from"@cline/shared/db";import{basename as JR,resolve as HR}from"node:path";import{performance as B7}from"node:perf_hooks";import{processWorkspaceInfo as A7}from"@cline/shared";import WR from"simple-git";function s0(f){return HR(f)}async function G8(f){return(await DJ(f)).info}function U8(f){if(f instanceof Error)return{errorType:f.name?.trim()||f.constructor.name||"Error",message:f.message};return{errorType:"Error",message:String(f)}}async function DJ(f){let $=s0(f),J={rootPath:$,hint:JR($)},H;try{let W=WR({baseDir:$});if(!await W.checkIsRepo())return{info:J,vcsType:"none"};try{let Z=await W.getRemotes(!0);if(Z.length>0){let j=Z.map((P)=>{let X=P.refs.fetch||P.refs.push;return`${P.name}: ${X}`});J.associatedRemoteUrls=j}}catch(Z){H??=U8(Z)}try{let Z=(await W.revparse(["HEAD"])).trim();if(Z.length>0)J.latestGitCommitHash=Z}catch(Z){H??=U8(Z)}try{let Z=(await W.branch()).current.trim();if(Z.length>0)J.latestGitBranchName=Z}catch(Z){H??=U8(Z)}return{info:J,vcsType:"git",error:H}}catch(W){return{info:J,vcsType:"none",error:U8(W)}}}async function MJ(f){let $=await G8(f);return A7($)}async function R7(f){let $=B7.now(),J=await DJ(f),H=B7.now()-$,W=J.info;return{workspaceInfo:W,workspaceMetadata:A7(W),durationMs:H,vcsType:J.vcsType,initError:J.error}}import{mkdirSync as QR,writeFileSync as ZR}from"node:fs";import{join as jR}from"node:path";import{resolveCronReportsDir as PR}from"@cline/shared/storage";function T0(f){if(/[:#\n]/.test(f)||f.includes('"'))return JSON.stringify(f);return f}function o0(f,$){if($===void 0||$===null)return;return`${f}: ${T0($)}`}function XR(f,$,J){let H=[`runId: ${T0(f.runId)}`,`specId: ${T0($.specId)}`,`externalId: ${T0($.externalId)}`,`title: ${T0($.title)}`,`triggerKind: ${T0(f.triggerKind)}`,`status: ${T0(f.status)}`,`sourcePath: ${T0($.sourcePath)}`],W=[o0("sessionId",f.sessionId),o0("startedAt",f.startedAt),o0("completedAt",f.completedAt),o0("triggerEventId",f.triggerEventId),o0("triggerEventType",J?.eventType),o0("triggerEventSource",J?.source),o0("triggerEventSubject",J?.subject)];for(let Q of W)if(Q)H.push(Q);return`---
157
+ ${H.join(`
158
+ `)}
159
+ ---
160
+ `}function VR(f){let $=[];if(f.triggerEvent){let J=f.triggerEvent,H=[`- eventId: ${J.eventId}`,`- eventType: ${J.eventType}`,`- source: ${J.source}`,J.subject?`- subject: ${J.subject}`:"",`- occurredAt: ${J.occurredAt}`,J.dedupeKey?`- dedupeKey: ${J.dedupeKey}`:"",J.attributes?`- attributes: ${JSON.stringify(J.attributes)}`:""].filter((W)=>W.length>0);$.push(`## Trigger Event
161
+
162
+ ${H.join(`
163
+ `)}
164
+ `)}if(f.error)$.push(`## Error
165
+
166
+ ${f.error}
167
+ `);if(f.finalText&&f.finalText.trim().length>0)$.push(`## Summary
168
+
169
+ ${f.finalText.trim()}
170
+ `);if(f.usage){let J=f.usage,H=[J.inputTokens!==void 0?`- inputTokens: ${J.inputTokens}`:"",J.outputTokens!==void 0?`- outputTokens: ${J.outputTokens}`:"",J.cacheReadTokens!==void 0?`- cacheReadTokens: ${J.cacheReadTokens}`:"",J.cacheWriteTokens!==void 0?`- cacheWriteTokens: ${J.cacheWriteTokens}`:"",J.totalCost!==void 0?`- totalCostUsd: ${J.totalCost}`:"",f.durationMs!==void 0?`- durationMs: ${f.durationMs}`:""].filter((W)=>W.length>0);if(H.length>0)$.push(`## Usage
171
+
172
+ ${H.join(`
173
+ `)}
174
+ `)}if(f.toolCalls&&f.toolCalls.length>0){let J=f.toolCalls.map((H)=>{let W=[`- ${H.name}`];if(H.durationMs!==void 0)W.push(`(${H.durationMs}ms)`);if(H.error)W.push(`error: ${H.error}`);return W.join(" ")});$.push(`## Tool Calls
175
+
176
+ ${J.join(`
177
+ `)}
178
+ `)}return $.join(`
179
+ `)}function _J(f){let $=PR(f.specs);QR($,{recursive:!0});let J=jR($,`${f.run.runId}.md`),H=`${XR(f.run,f.spec,f.data.triggerEvent)}
180
+ ${VR(f.data)}`;return ZR(J,H,"utf8"),J}class LJ{globalMaxConcurrency;activeExecutions=new Map;constructor(f){this.globalMaxConcurrency=Math.max(1,Math.floor(f))}acquire(f,$,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let H=Math.max(1,Math.floor(J)),W=this.activeExecutions.get(f)??new Set;if(W.size>=H)return!1;return W.add($),this.activeExecutions.set(f,W),!0}release(f,$){let J=this.activeExecutions.get(f);if(!J)return;if(J.delete($),J.size===0)this.activeExecutions.delete(f)}getGlobalActiveCount(){let f=0;for(let $ of this.activeExecutions.values())f+=$.size;return f}}var AR=15000,RR=90,y7=["rules","skills","plugins"];function FR(f,$){return new Set(f.extensions??y7).has($)}function yR(f,$){if(f.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let H of f.tools)J[H]={enabled:!0,autoApprove:!0};if($==="yolo")J[$f.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function KR(f){let $=f?.trim();if(!$)return;return["# Notes Directory",`Use ${$} for durable notes related to this automation.`,"Before starting, inspect relevant existing notes there when useful. During or after the run, write concise notes there when they would help future runs continue with context."].join(`
181
+ `)}class zJ extends Error{constructor(f){super(f);this.name="TimeoutError"}}async function UR(f,$){if($<=0)return f;let J,H=new Promise((W,Q)=>{J=setTimeout(()=>{Q(new zJ("cron run timed out"))},$)});try{return await Promise.race([f,H])}finally{if(J)clearTimeout(J)}}class M1{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor(f){this.store=f.store,this.materializer=f.materializer,this.options=f,this.limiter=new LJ(f.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,(f.claimLeaseSeconds??RR)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let f=Math.max(2000,this.options.pollIntervalMs??AR);await this.tick(),this.timer=setInterval(()=>void this.tick(),f)}async stop(){let f=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!f)return;let $=[...this.activeRuns.entries()];await Promise.all($.map(async([J,H])=>{if(H.sessionId)try{await this.options.runtimeHandlers.abortSession(H.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:H.claimToken,error:"runner stopped before completion"})}catch{}}))}async dispose(){if(this.disposed)return;this.disposed=!0,await this.stop()}async tick(){if(this.ticking)return;this.ticking=!0;try{this.materializer.materializeAll();let f=this.store.claimDueRuns({nowIso:F7(),leaseMs:this.claimLeaseMs});await Promise.allSettled(f.map(($)=>this.executeClaim($)))}catch(f){let $=this.options.logger;if($)if($.error)$.error("cron.runner.tick.failed",{error:f});else $.log("cron.runner.tick.failed",{error:f})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([f,$])=>{let J=this.store.getRun(f);return J?[{...J,...$}]:[]})}async executeClaim(f){let $=f.run,J=this.store.getSpec($.specId);if(!J){this.store.completeRun($.runId,{status:"failed",error:"spec not found",claimToken:f.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun($.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:f.claimToken});return}let H=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,$.runId,H)){this.store.requeueRun({runId:$.runId,claimToken:f.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,$.runId),this.store.requeueRun({runId:$.runId,claimToken:f.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set($.runId,{claimToken:f.claimToken});let Q=$.triggerEventId?this.store.getEventLog($.triggerEventId):void 0,Z,j,P=Date.now(),X;if(J.timeoutSeconds&&J.timeoutSeconds>0)X=P+J.timeoutSeconds*1000;try{j=this.startClaimLeaseHeartbeat(f);let V=await this.buildStartRequest(J);if(Z=(await this.options.runtimeHandlers.startSession(V)).sessionId.trim(),!Z)throw Error("runtime returned empty sessionId");this.activeRuns.set($.runId,{claimToken:f.claimToken,sessionId:Z}),this.store.attachSessionIdToRun($.runId,Z);let B={config:V,prompt:this.buildPrompt(J,Q)},A=this.options.runtimeHandlers.sendSession(Z,B),R=X?Math.max(1,X-Date.now()):0,y=(await UR(A,R)).result,F=Date.now(),K=_J({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...$,sessionId:Z,status:"done"},spec:J,data:{finalText:y.text,usage:y.usage,toolCalls:y.toolCalls,durationMs:F-P,triggerEvent:Q}});this.store.completeRun($.runId,{status:"done",sessionId:Z,reportPath:K,claimToken:f.claimToken}),this.store.updateSpecLastRunAt(J.specId,F7())}catch(V){let Y=V instanceof zJ;if(Z&&Y)try{await this.options.runtimeHandlers.abortSession(Z)}catch{}let B=V instanceof Error?V.message:String(V),A=Date.now(),R=_J({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...$,sessionId:Z,status:"failed"},spec:J,data:{error:B,durationMs:A-P,triggerEvent:Q}});this.store.completeRun($.runId,{status:"failed",sessionId:Z,reportPath:R,error:B,claimToken:f.claimToken})}finally{if(j?.(),Z)try{await this.options.runtimeHandlers.stopSession(Z)}catch{}this.activeRuns.delete($.runId),this.limiter.release(J.specId,$.runId)}}buildPrompt(f,$){let J=f.prompt??"";if(!$)return J;let H={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload};return`${J}
182
+
183
+ Trigger event:
184
+ ${JSON.stringify(H,null,2)}`}startClaimLeaseHeartbeat(f){let $=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let H=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim(f.run.runId,f.claimToken,H))clearInterval(J)},$);return()=>clearInterval(J)}async buildSystemPrompt(f,$,J,H){let W=KR(f.notesDirectory),Q=k2(void 0,W),Z=await MJ($),j=BR({ide:"Cline Cron",workspaceRoot:$,workspaceName:YR($),metadata:Z,rules:f.systemPrompt?void 0:Q,mode:J,providerId:H,overridePrompt:f.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return f.systemPrompt?k2(j,Q)??j:j}async buildStartRequest(f){let $=(f.workspaceRoot??"").trim(),J=(f.providerId??"").trim(),H=(f.modelId??"").trim(),W=f.metadata?.__hubRuntimeOptions&&typeof f.metadata.__hubRuntimeOptions==="object"&&!Array.isArray(f.metadata.__hubRuntimeOptions)?f.metadata.__hubRuntimeOptions:void 0,Q=typeof f.metadata?.__hubScheduleCwd==="string"&&f.metadata.__hubScheduleCwd.trim()?f.metadata.__hubScheduleCwd.trim():$;if(!$)throw Error("cron spec requires workspaceRoot");let Z=f.mode==="plan"?"plan":f.mode==="act"?"act":"yolo";return{workspaceRoot:$,cwd:Q,provider:J,model:H,mode:Z,source:f.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt(f,$,Z,J),maxIterations:f.maxIterations,enableTools:W?.enableTools??!0,enableSpawn:W?.enableSpawn??!0,enableTeams:W?.enableTeams??!0,autoApproveTools:W?.autoApproveTools??!0,toolPolicies:yR(f,Z),configExtensions:y7.filter((j)=>FR(f,j))}}}import{existsSync as uR,readdirSync as cR,readFileSync as dR,statSync as rR}from"node:fs";import{relative as lR}from"node:path";import{resolveCronSpecsDir as pR}from"@cline/shared/storage";function _1(f,$,J,H){let W=new Set;function Q(Z){let j=Z.toLowerCase();if(H){let X=H.indexOf(j);if(X!==-1)return X+$}let P=Number(Z);if(!Number.isInteger(P)||P<$||P>J)throw Error(`Invalid cron value "${Z}" for range [${$}-${J}]`);return P}for(let Z of f.split(",")){if(Z==="*"){for(let X=$;X<=J;X+=1)W.add(X);continue}let j=Z.indexOf("/");if(j!==-1){let X=Z.slice(0,j),V=Number(Z.slice(j+1));if(!Number.isInteger(V)||V<1)throw Error(`Invalid step "${Z.slice(j+1)}"`);let Y=$,B=J;if(X!=="*"){let A=X.indexOf("-");if(A!==-1)Y=Q(X.slice(0,A)),B=Q(X.slice(A+1));else Y=Q(X)}if(Y>B)throw Error(`Invalid cron range "${X}"`);for(let A=Y;A<=B;A+=V)W.add(A);continue}let P=Z.indexOf("-");if(P!==-1){let X=Q(Z.slice(0,P)),V=Q(Z.slice(P+1));if(X>V)throw Error(`Invalid cron range "${Z}"`);for(let Y=X;Y<=V;Y+=1)W.add(Y);continue}W.add(Q(Z))}return[...W].sort((Z,j)=>Z-j)}var GR=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],U7=["sun","mon","tue","wed","thu","fri","sat"];function L1(f,$,J){let H=f[$];if(typeof H!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${$+1}`);return H}function OJ(f,$){let J=f[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${$}`);return J}function NJ(f){let $=f.trim().split(/\s+/);if($.length!==5)throw Error(`Invalid cron pattern "${f}": expected 5 fields, got ${$.length}`);return{minutes:_1(L1($,0,f),0,59),hours:_1(L1($,1,f),0,23),daysOfMonth:_1(L1($,2,f),1,31),months:_1(L1($,3,f),1,12,GR),daysOfWeek:_1(L1($,4,f),0,6,U7)}}function qJ(f){NJ(f)}function G7(f,$,J=Date.now()){e0(f,J,$)}var K7=new Map,hR=new Map(U7.map((f,$)=>[f,$]));function h7(f){let $=f?.trim();return $?$:void 0}function T7(f){let $=K7.get(f);if($)return $;let J=new Intl.DateTimeFormat("en-US",{timeZone:f,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return K7.set(f,J),J}function TR(f){let $=h7(f);if(!$)return;T7($).format(new Date)}function DR(f,$){let J=T7($).formatToParts(new Date(f)),H=new Map(J.map((Z)=>[Z.type,Z.value])),W=H.get("weekday")?.toLowerCase().slice(0,3)??"",Q=hR.get(W);if(Q===void 0)throw Error(`Unable to resolve weekday for timezone "${$}"`);return{month:Number(H.get("month")),dayOfMonth:Number(H.get("day")),dayOfWeek:Q,hour:Number(H.get("hour")),minute:Number(H.get("minute"))}}function MR(f){let $=new Date(f);return{month:$.getMonth()+1,dayOfMonth:$.getDate(),dayOfWeek:$.getDay(),hour:$.getHours(),minute:$.getMinutes()}}function _R(f,$){return f.months.includes($.month)&&f.daysOfMonth.includes($.dayOfMonth)&&f.daysOfWeek.includes($.dayOfWeek)&&f.hours.includes($.hour)&&f.minutes.includes($.minute)}function LR(f,$,J){let H=NJ(f),W=new Date($);W.setSeconds(0,0);let Q=W.getTime()+60000,Z=new Date($);Z.setFullYear(Z.getFullYear()+4);let j=Z.getTime();while(Q<=j){if(_R(H,DR(Q,J)))return Q;Q+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${f}" in timezone "${J}"`)}function e0(f,$,J){let H=h7(J);if(H)return TR(H),LR(f,$,H);let W=NJ(f),Q=new Date($);Q.setSeconds(0,0),Q=new Date(Q.getTime()+60000);let Z=new Date($);Z.setFullYear(Z.getFullYear()+4);while(Q<=Z){let{month:j,dayOfMonth:P,dayOfWeek:X,hour:V,minute:Y}=MR(Q.getTime());if(!W.months.includes(j)){let B=W.months.find((R)=>R>j)??OJ(W.months,"months"),A=B<=j?1:0;Q=new Date(Q.getFullYear()+A,B-1,1,0,0,0,0);continue}if(!W.daysOfMonth.includes(P)||!W.daysOfWeek.includes(X)){Q=new Date(Q.getFullYear(),Q.getMonth(),P+1,0,0,0,0);continue}if(!W.hours.includes(V)){let B=W.hours.find((R)=>R>V)??OJ(W.hours,"hours"),A=B<=V?1:0;Q=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate()+A,B,0,0,0);continue}if(!W.minutes.includes(Y)){let B=W.minutes.find((R)=>R>Y)??OJ(W.minutes,"minutes"),A=B<=Y?1:0;Q=new Date(Q.getFullYear(),Q.getMonth(),Q.getDate(),Q.getHours()+A,B,0,0);continue}return Q.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${f}"`)}import{createHash as zR}from"node:crypto";import OR from"yaml";function NR(f){let $=f.replace(/\\/g,"/");if($.startsWith("events/")&&$.endsWith(".event.md"))return"event";if($.endsWith(".cron.md"))return"schedule";return"one_off"}function qR(f){let $=f.replace(/\r\n/g,`
185
+ `);if(!$.startsWith(`---
186
+ `))return{frontmatter:void 0,body:f};let J=$.slice(4),H=J.indexOf(`
187
+ ---`);if(H===-1)return{frontmatter:void 0,body:f};let W=J.slice(0,H),Q=J.slice(H+4);if(Q.startsWith(`
188
+ `))Q=Q.slice(1);return{frontmatter:W,body:Q}}function _f(f){if(typeof f!=="string")return;let $=f.trim();return $.length>0?$:void 0}function bR(f){if(!Array.isArray(f))return;let $=f.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);return $.length>0?$:void 0}function CJ(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function wR(f){let $=CJ(f);if(!$)return;let J=_f($.providerId),H=_f($.modelId);if(J===void 0&&H===void 0)return;return{providerId:J,modelId:H}}function CR(f){if(typeof f!=="string")return;let $=f.trim().toLowerCase();if($==="act"||$==="plan"||$==="yolo")return $;return}function M7(f,$={}){let J=Array.isArray(f)?f:typeof f==="string"?f.split(","):void 0;if(!J)return;let H=[...new Set(J.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0))];if(Array.isArray(f)&&$.preserveEmptyArray)return H;return H.length>0?H:void 0}var ER=new Set(z$);function SR(f){let $=M7(f,{preserveEmptyArray:!0});if(!$)return;let J=$.filter((H)=>!ER.has(H));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return $}var kR=new Set(["rules","skills","plugins"]);function mR(f){let $=M7(f,{preserveEmptyArray:!0});if(!$)return;let J=$.filter((H)=>!kR.has(H));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return $}function bJ(f){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return;return Math.floor(f)}function wJ(f){if(typeof f!=="number"||!Number.isFinite(f)||f<0)return;return Math.floor(f)}function EJ(f){if(f===null||typeof f!=="object")return JSON.stringify(f??null);if(Array.isArray(f))return`[${f.map((J)=>EJ(J)).join(",")}]`;let $=Object.entries(f).filter(([,J])=>J!==void 0);return $.sort(([J],[H])=>J<H?-1:J>H?1:0),`{${$.map(([J,H])=>`${JSON.stringify(J)}:${EJ(H)}`).join(",")}}`}function _7(f,$){let J=zR("sha256");return J.update(EJ(f)),J.update(`
189
+ `),J.update($),J.digest("hex")}function IR(f){return(f.split("/").pop()??f).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var xR=["schedule","timezone"],gR=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],vR=["cwd"];function D7(f,$,J,H,W){return{externalId:f,relativePath:f,triggerKind:$,body:J,contentHash:_7(H,J),error:W}}function df(f,$,J,H,W,Q){return{externalId:f,relativePath:$,triggerKind:J,body:H,contentHash:W,error:Q}}function L7(f){let $=f.relativePath.replace(/\\/g,"/"),J=NR($),{frontmatter:H,body:W}=qR(f.raw),Q={};if(H!==void 0&&H.trim().length>0)try{let K=OR.parse(H);if(K&&typeof K==="object"&&!Array.isArray(K))Q=K;else if(K!==null&&K!==void 0)return D7($,J,W,{},"frontmatter must be a YAML mapping")}catch(K){return D7($,J,W,{},K instanceof Error?`failed to parse frontmatter: ${K.message}`:"failed to parse frontmatter")}let Z=_7(Q,W),j=_f(Q.id),P=j??$;if(J!=="schedule"){for(let K of xR)if(Q[K]!==void 0)return df(P,$,J,W,Z,`field "${K}" is only allowed on *.cron.md specs`)}for(let K of vR)if(Q[K]!==void 0)return df(P,$,J,W,Z,`field "${K}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let K of gR)if(Q[K]!==void 0)return df(P,$,J,W,Z,`field "${K}" is only allowed on .event.md specs`)}let X=_f(Q.prompt),V=W.trim(),Y=X??(V.length>0?V:void 0);if(!Y)return df(P,$,J,W,Z,"prompt is required (frontmatter `prompt` or markdown body)");let B=_f(Q.workspaceRoot);if(!B)return df(P,$,J,W,Z,"workspaceRoot is required");let A,R;try{A=SR(Q.tools),R=mR(Q.extensions)}catch(K){return df(P,$,J,W,Z,K instanceof Error?K.message:String(K))}let U=CR(Q.mode);if(Q.mode!==void 0&&U===void 0)return df(P,$,J,W,Z,"mode must be one of: act, plan, yolo");let y={id:j,title:_f(Q.title)??j??IR($),prompt:Y,workspaceRoot:B,mode:U??"yolo",systemPrompt:_f(Q.systemPrompt),modelSelection:wR(Q.modelSelection),maxIterations:bJ(Q.maxIterations),timeoutSeconds:bJ(Q.timeoutSeconds),tools:A,notesDirectory:_f(Q.notesDirectory),extensions:R,source:_f(Q.source)??"user",tags:bR(Q.tags),enabled:typeof Q.enabled==="boolean"?Q.enabled:!0,metadata:CJ(Q.metadata)},F;if(J==="schedule"){let K=_f(Q.schedule);if(!K)return df(P,$,J,W,Z,"schedule is required for *.cron.md specs");let M=_f(Q.timezone);try{G7(K,M)}catch(G){return df(P,$,J,W,Z,G instanceof Error?G.message:String(G))}F={...y,triggerKind:"schedule",schedule:K,timezone:M}}else if(J==="event"){let K=_f(Q.event);if(!K)return df(P,$,J,W,Z,"event is required for .event.md specs");F={...y,triggerKind:"event",event:K,filters:CJ(Q.filters),debounceSeconds:wJ(Q.debounceSeconds),dedupeWindowSeconds:wJ(Q.dedupeWindowSeconds),cooldownSeconds:wJ(Q.cooldownSeconds),maxParallel:bJ(Q.maxParallel)}}else F={...y,triggerKind:"one_off"};return{externalId:P,relativePath:$,triggerKind:J,body:W,contentHash:Z,spec:F}}function iR(f,$){return lR(f,$).replace(/\\/g,"/")}function nR(f){if(!uR(f))return[];let $=[],J=[f];while(J.length>0){let H=J.pop();if(!H)continue;let W;try{W=cR(H,{withFileTypes:!0})}catch{continue}for(let Q of W){let Z=`${H}/${Q.name}`;if(Q.isDirectory()){if(Q.name==="reports")continue;J.push(Z);continue}if(!Q.isFile())continue;if(!Q.name.endsWith(".md"))continue;$.push(Z)}}return $}class SJ{store;cronDir;constructor(f){this.store=f.store,this.cronDir=pR(f.specs??(f.workspaceRoot?{scope:"workspace",workspaceRoot:f.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let f={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},$=nR(this.cronDir),J=new Set;for(let W of $){let Q=iR(this.cronDir,W);J.add(Q),f.scanned+=1;let Z=await this.reconcileFile(Q,W);if(Z){if(f.changes.push(Z),f.upserted+=1,Z.parse.error)f.invalidParses+=1}}let H=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let W of H)if(!J.has(W.sourcePath))this.handleFileDeleted(W),f.removed+=1;return this.refreshScheduleNextRunAt(),f}async reconcileFile(f,$){let J=this.store.getSpecBySourcePath(f),H,W;try{H=dR($,"utf8"),W=rR($).mtimeMs}catch{return}let Z=L7({relativePath:f,raw:H}),j=this.store.upsertSpec({externalId:Z.externalId,sourcePath:f,triggerKind:Z.triggerKind,sourceMtimeMs:W,sourceHash:Z.contentHash,parseStatus:Z.error?"invalid":"valid",parseError:Z.error,spec:Z.spec});if(!Z.error&&Z.triggerKind==="schedule"&&j.record.enabled)this.applyScheduleNextRunAt(j.record,{forceReset:!J||J.removed||!J.enabled||J.scheduleExpr!==j.record.scheduleExpr||J.timezone!==j.record.timezone});return{relativePath:f,result:j,parse:Z}}handleFileDeleted(f){this.store.markSpecRemoved(f.specId),this.store.cancelQueuedRunsForSpec(f.specId)}refreshScheduleNextRunAt(){let f=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let $ of f)this.applyScheduleNextRunAt($,{forceReset:!1})}applyScheduleNextRunAt(f,$){if(!f.scheduleExpr)return;if(!$.forceReset&&f.nextRunAt)return;try{let J=Date.now(),H=f.lastRunAt?Math.max(J,new Date(f.lastRunAt).getTime()):J,W=e0(f.scheduleExpr,H,f.timezone),Q=new Date(W).toISOString();if(f.nextRunAt!==Q)this.store.updateSpecNextRunAt(f.specId,Q)}catch{}}}import{existsSync as aR,mkdirSync as tR,watch as sR}from"node:fs";import{relative as oR,resolve as eR}from"node:path";var fF=250;class kJ{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor(f){this.reconciler=f.reconciler,this.debounceMs=Math.max(0,f.debounceMs??fF),this.onError=f.onError??(()=>{}),this.onReconciled=f.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let f=this.reconciler.getCronDir();try{tR(f,{recursive:!0}),this.watcher=sR(f,{recursive:!0},($,J)=>{if(!J)return;let H=String(J).replace(/\\/g,"/");if(!H.endsWith(".md"))return;if(H.startsWith("reports/"))return;this.scheduleReconcile(H)}),this.watcher.on("error",this.onError)}catch($){this.onError($)}}stop(){for(let f of this.pending.values())clearTimeout(f);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile(f){let $=this.pending.get(f);if($)clearTimeout($);let J=setTimeout(()=>{this.pending.delete(f),this.reconcileNow(f)},this.debounceMs);this.pending.set(f,J)}async reconcileNow(f){try{let $=eR(this.reconciler.getCronDir(),f);if(!aR($)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=oR(this.reconciler.getCronDir(),$).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,$),await this.onReconciled()}catch($){this.onError($)}}}import{randomUUID as z1}from"node:crypto";import{asOptionalString as w,asString as r,loadSqliteDb as JF,nowIso as Hf}from"@cline/shared/db";import{resolveCronDbPath as HF}from"@cline/shared/storage";var $F=[`CREATE TABLE IF NOT EXISTS cron_specs (
190
+ spec_id TEXT PRIMARY KEY,
191
+ external_id TEXT NOT NULL,
192
+ source_path TEXT NOT NULL UNIQUE,
193
+ trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event')),
194
+ source_mtime_ms INTEGER,
195
+ source_hash TEXT,
196
+ parse_status TEXT NOT NULL CHECK (parse_status IN ('valid', 'invalid')),
197
+ parse_error TEXT,
198
+ enabled INTEGER NOT NULL DEFAULT 1,
199
+ removed INTEGER NOT NULL DEFAULT 0,
200
+ title TEXT NOT NULL,
201
+ prompt TEXT,
202
+ workspace_root TEXT,
203
+ schedule_expr TEXT,
204
+ timezone TEXT,
205
+ event_type TEXT,
206
+ filters_json TEXT,
207
+ debounce_seconds INTEGER,
208
+ dedupe_window_seconds INTEGER,
209
+ cooldown_seconds INTEGER,
210
+ mode TEXT,
211
+ system_prompt TEXT,
212
+ provider_id TEXT,
213
+ model_id TEXT,
214
+ max_iterations INTEGER,
215
+ timeout_seconds INTEGER,
216
+ max_parallel INTEGER,
217
+ tools_json TEXT,
218
+ notes_directory TEXT,
219
+ extensions_json TEXT,
220
+ source TEXT,
221
+ tags_json TEXT,
222
+ metadata_json TEXT,
223
+ revision INTEGER NOT NULL DEFAULT 1,
224
+ last_materialized_run_id TEXT,
225
+ last_run_at TEXT,
226
+ next_run_at TEXT,
227
+ created_at TEXT NOT NULL,
228
+ updated_at TEXT NOT NULL
229
+ );`,`CREATE TABLE IF NOT EXISTS cron_runs (
230
+ run_id TEXT PRIMARY KEY,
231
+ spec_id TEXT NOT NULL REFERENCES cron_specs(spec_id) ON DELETE CASCADE,
232
+ spec_revision INTEGER NOT NULL,
233
+ trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event', 'manual', 'retry')),
234
+ status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'done', 'failed', 'cancelled')),
235
+ claim_token TEXT,
236
+ claim_started_at TEXT,
237
+ claim_until_at TEXT,
238
+ scheduled_for TEXT,
239
+ trigger_event_id TEXT,
240
+ started_at TEXT,
241
+ completed_at TEXT,
242
+ session_id TEXT,
243
+ report_path TEXT,
244
+ error TEXT,
245
+ attempt_count INTEGER NOT NULL DEFAULT 0,
246
+ created_at TEXT NOT NULL,
247
+ updated_at TEXT NOT NULL
248
+ );`,`CREATE TABLE IF NOT EXISTS cron_event_log (
249
+ event_id TEXT PRIMARY KEY,
250
+ event_type TEXT NOT NULL,
251
+ source TEXT NOT NULL,
252
+ subject TEXT,
253
+ occurred_at TEXT NOT NULL,
254
+ received_at TEXT NOT NULL,
255
+ workspace_root TEXT,
256
+ dedupe_key TEXT,
257
+ payload_json TEXT,
258
+ attributes_json TEXT,
259
+ processing_status TEXT NOT NULL DEFAULT 'received'
260
+ CHECK (processing_status IN ('received', 'unmatched', 'queued', 'suppressed', 'failed')),
261
+ matched_spec_count INTEGER NOT NULL DEFAULT 0,
262
+ queued_run_count INTEGER NOT NULL DEFAULT 0,
263
+ suppressed_count INTEGER NOT NULL DEFAULT 0,
264
+ error TEXT,
265
+ created_at TEXT NOT NULL,
266
+ updated_at TEXT NOT NULL
267
+ );`,"DROP INDEX IF EXISTS cron_runs_one_off_active_idx;",`CREATE UNIQUE INDEX IF NOT EXISTS cron_runs_one_off_active_idx
268
+ ON cron_runs(spec_id, spec_revision)
269
+ WHERE trigger_kind = 'one_off';`,`CREATE INDEX IF NOT EXISTS cron_runs_claimable_idx
270
+ ON cron_runs(status, scheduled_for, claim_until_at);`,`CREATE INDEX IF NOT EXISTS cron_runs_spec_idx
271
+ ON cron_runs(spec_id, created_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_runs_trigger_event_idx
272
+ ON cron_runs(trigger_event_id);`,`CREATE INDEX IF NOT EXISTS cron_runs_event_spec_status_idx
273
+ ON cron_runs(spec_id, trigger_kind, status, scheduled_for);`,`CREATE INDEX IF NOT EXISTS cron_event_log_type_idx
274
+ ON cron_event_log(event_type, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_received_idx
275
+ ON cron_event_log(received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_dedupe_idx
276
+ ON cron_event_log(event_type, source, dedupe_key, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_next_run_idx
277
+ ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
278
+ ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
279
+ ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
280
+ ON cron_specs(source_path);`];function z7(f){f.exec("PRAGMA journal_mode = WAL;"),f.exec("PRAGMA busy_timeout = 5000;"),f.exec("PRAGMA foreign_keys = ON;");for(let $ of $F)f.exec($)}function h8(f){if(!f)return;try{let $=JSON.parse(f);if($&&typeof $==="object"&&!Array.isArray($))return $}catch{}return}function mJ(f,$={}){if(!f)return;try{let J=JSON.parse(f);if(!Array.isArray(J))return;let H=J.map((W)=>typeof W==="string"?W.trim():"").filter((W)=>W.length>0);if($.preserveEmpty)return H;return H.length>0?H:void 0}catch{return}}function f$(f){if(typeof f==="number"&&Number.isFinite(f))return f;if(typeof f==="bigint")return Number(f);return}function D0(f){return{specId:r(f.spec_id),externalId:r(f.external_id),sourcePath:r(f.source_path),triggerKind:r(f.trigger_kind),sourceMtimeMs:f$(f.source_mtime_ms),sourceHash:w(f.source_hash),parseStatus:r(f.parse_status)==="invalid"?"invalid":"valid",parseError:w(f.parse_error),enabled:Number(f.enabled??0)===1,removed:Number(f.removed??0)===1,title:r(f.title),prompt:w(f.prompt),workspaceRoot:w(f.workspace_root),scheduleExpr:w(f.schedule_expr),timezone:w(f.timezone),eventType:w(f.event_type),filters:h8(w(f.filters_json)),debounceSeconds:f$(f.debounce_seconds),dedupeWindowSeconds:f$(f.dedupe_window_seconds),cooldownSeconds:f$(f.cooldown_seconds),mode:w(f.mode),systemPrompt:w(f.system_prompt),providerId:w(f.provider_id),modelId:w(f.model_id),maxIterations:f$(f.max_iterations),timeoutSeconds:f$(f.timeout_seconds),maxParallel:f$(f.max_parallel),tools:mJ(w(f.tools_json),{preserveEmpty:!0}),notesDirectory:w(f.notes_directory),extensions:mJ(w(f.extensions_json),{preserveEmpty:!0}),source:w(f.source),tags:mJ(w(f.tags_json)),metadata:h8(w(f.metadata_json)),revision:Number(f.revision??1),lastMaterializedRunId:w(f.last_materialized_run_id),lastRunAt:w(f.last_run_at),nextRunAt:w(f.next_run_at),createdAt:r(f.created_at),updatedAt:r(f.updated_at)}}function IJ(f){return{runId:r(f.run_id),specId:r(f.spec_id),specRevision:Number(f.spec_revision??1),triggerKind:r(f.trigger_kind),status:r(f.status),claimToken:w(f.claim_token),claimStartedAt:w(f.claim_started_at),claimUntilAt:w(f.claim_until_at),scheduledFor:w(f.scheduled_for),triggerEventId:w(f.trigger_event_id),startedAt:w(f.started_at),completedAt:w(f.completed_at),sessionId:w(f.session_id),reportPath:w(f.report_path),error:w(f.error),attemptCount:Number(f.attempt_count??0),createdAt:r(f.created_at),updatedAt:r(f.updated_at)}}function O7(f){return{eventId:r(f.event_id),eventType:r(f.event_type),source:r(f.source),subject:w(f.subject),occurredAt:r(f.occurred_at),receivedAt:r(f.received_at),workspaceRoot:w(f.workspace_root),dedupeKey:w(f.dedupe_key),payload:h8(w(f.payload_json)),attributes:h8(w(f.attributes_json)),processingStatus:r(f.processing_status),matchedSpecCount:Number(f.matched_spec_count??0),queuedRunCount:Number(f.queued_run_count??0),suppressedCount:Number(f.suppressed_count??0),error:w(f.error),createdAt:r(f.created_at),updatedAt:r(f.updated_at)}}function N7(f){return f?JSON.stringify(f):null}var WF=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function q7(f){if(f===void 0)return null;if(f&&typeof f==="object")return JSON.stringify(f);return f}function QF(f,$,J,H){for(let W of WF){let Q=f[W],Z=$[W];if(q7(Q)!==q7(Z))return!0}if(J===!1&&H===!0)return!0;return!1}function ZF(f){return(f.split("/").pop()??f).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function jF(f){return`hub/schedules/${f}.cron.md`}function PF(f){let $={...f.metadata??{},...f.createdBy?{__hubScheduleCreatedBy:f.createdBy}:{},...f.cwd?{__hubScheduleCwd:f.cwd}:{},...f.runtimeOptions?{__hubRuntimeOptions:f.runtimeOptions}:{}};return Object.keys($).length>0?$:void 0}function xJ(f){return{triggerKind:"schedule",title:f.name.trim(),prompt:f.prompt,workspaceRoot:f.workspaceRoot.trim(),schedule:f.cronPattern.trim(),mode:f.mode??"act",systemPrompt:f.systemPrompt,modelSelection:f.modelSelection?JSON.parse(JSON.stringify(f.modelSelection)):void 0,maxIterations:typeof f.maxIterations==="number"?Math.floor(f.maxIterations):void 0,timeoutSeconds:typeof f.timeoutSeconds==="number"?Math.floor(f.timeoutSeconds):void 0,maxParallel:typeof f.maxParallel==="number"?Math.max(1,Math.floor(f.maxParallel)):1,source:"hub-schedule",tags:f.tags?.filter(($)=>$.trim().length>0),enabled:f.enabled!==!1,metadata:PF(f)}}function b7(f){return JSON.stringify(xJ(f))}function XF(f,$){let J=f.metadata?{...f.metadata}:{},H=$.createdBy===null?void 0:$.createdBy!==void 0?$.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,W=$.cwd!==void 0?$.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,Q=$.runtimeOptions!==void 0?$.runtimeOptions:J.__hubRuntimeOptions&&typeof J.__hubRuntimeOptions==="object"&&!Array.isArray(J.__hubRuntimeOptions)?J.__hubRuntimeOptions:void 0;return delete J.__hubScheduleCreatedBy,delete J.__hubScheduleCwd,delete J.__hubRuntimeOptions,{name:$.name??f.title,cronPattern:$.cronPattern??f.scheduleExpr??"",prompt:$.prompt??f.prompt??"",workspaceRoot:$.workspaceRoot??f.workspaceRoot??"",cwd:W,modelSelection:$.modelSelection!==void 0?$.modelSelection:f.providerId||f.modelId?{providerId:f.providerId??"",modelId:f.modelId??""}:void 0,enabled:$.enabled??f.enabled,mode:$.mode??(f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"),systemPrompt:$.systemPrompt===null?void 0:$.systemPrompt!==void 0?$.systemPrompt:f.systemPrompt,maxIterations:$.maxIterations===null?void 0:$.maxIterations!==void 0?$.maxIterations:f.maxIterations,timeoutSeconds:$.timeoutSeconds===null?void 0:$.timeoutSeconds!==void 0?$.timeoutSeconds:f.timeoutSeconds,maxParallel:$.maxParallel??f.maxParallel??1,createdBy:H,tags:$.tags??f.tags,runtimeOptions:Q,metadata:$.metadata!==void 0?$.metadata:Object.keys(J).length>0?J:void 0}}class O1{db;constructor(f={}){let $=f.dbPath??HF();this.db=JF($),z7(this.db)}close(){this.db.close?.()}getSpecBySourcePath(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get(f);return $?D0($):void 0}getSpec(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(f);return $?D0($):void 0}getSpecByExternalId(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get(f);return $?D0($):void 0}listSpecs(f={}){let $=[],J=[];if(f.triggerKind)$.push("trigger_kind = ?"),J.push(f.triggerKind);if(typeof f.enabled==="boolean")$.push("enabled = ?"),J.push(f.enabled?1:0);if(f.parseStatus)$.push("parse_status = ?"),J.push(f.parseStatus);if(!f.includeRemoved)$.push("removed = 0");let H=$.length>0?`WHERE ${$.join(" AND ")}`:"",W=Math.max(1,Math.floor(f.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${H} ORDER BY created_at DESC LIMIT ?`).all(...J,W).map((Z)=>D0(Z))}createHubSchedule(f){let $=`sched_${z1()}`,J=this.upsertSpec({externalId:$,sourcePath:jF($),triggerKind:"schedule",sourceHash:b7(f),parseStatus:"valid",spec:xJ(f)});this.initializeScheduleNextRun(J.record.specId);let H=this.getSpec(J.record.specId);if(!H)throw Error("failed to create hub schedule");return H}getHubSchedule(f){let $=this.db.prepare(`SELECT * FROM cron_specs
281
+ WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
282
+ ORDER BY created_at ASC LIMIT 1`).get(f);return $?D0($):void 0}listHubSchedules(f={}){let $=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof f.enabled==="boolean")$.push("enabled = ?"),J.push(f.enabled?1:0);if(f.tags&&f.tags.length>0)for(let Q of f.tags)$.push("tags_json LIKE ?"),J.push(`%"${Q.trim()}"%`);let H=Math.max(1,Math.floor(f.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
283
+ WHERE ${$.join(" AND ")}
284
+ ORDER BY created_at DESC LIMIT ?`).all(...J,H).map((Q)=>D0(Q))}updateHubSchedule(f,$){let J=this.getHubSchedule(f);if(!J)return;let H=XF(J,$),W=this.upsertSpec({externalId:f,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:b7(H),parseStatus:"valid",spec:xJ(H)});if($.cronPattern!==void 0||$.enabled!==void 0)this.initializeScheduleNextRun(W.record.specId);return this.getSpec(W.record.specId)}deleteHubSchedule(f){let $=this.getHubSchedule(f);if(!$)return!1;return this.markSpecRemoved($.specId),this.cancelQueuedRunsForSpec($.specId),!0}enqueueHubScheduleRun(f,$="manual"){let J=this.getHubSchedule(f);if(!J||!J.enabled||J.removed||J.parseStatus!=="valid")return;return this.enqueueRun({specId:J.specId,specRevision:J.revision,triggerKind:$,scheduledFor:Hf()})}listEventSpecsForType(f){return this.db.prepare(`SELECT * FROM cron_specs
285
+ WHERE trigger_kind = 'event'
286
+ AND event_type = ?
287
+ AND enabled = 1
288
+ AND removed = 0
289
+ AND parse_status = 'valid'
290
+ ORDER BY created_at ASC`).all(f).map((J)=>D0(J))}upsertSpec(f){let $=Hf(),J=this.getSpecBySourcePath(f.sourcePath),H=f.spec,W={title:H?.title??J?.title??ZF(f.sourcePath),prompt:H?.prompt,workspaceRoot:H?.workspaceRoot,scheduleExpr:H?.triggerKind==="schedule"?H.schedule:void 0,timezone:H?.triggerKind==="schedule"?H.timezone:void 0,eventType:H?.triggerKind==="event"?H.event:void 0,filters:H?.triggerKind==="event"?H.filters:void 0,debounceSeconds:H?.triggerKind==="event"?H.debounceSeconds:void 0,dedupeWindowSeconds:H?.triggerKind==="event"?H.dedupeWindowSeconds:void 0,cooldownSeconds:H?.triggerKind==="event"?H.cooldownSeconds:void 0,mode:H?.mode,systemPrompt:H?.systemPrompt,providerId:H?.modelSelection?.providerId,modelId:H?.modelSelection?.modelId,maxIterations:H?.maxIterations,timeoutSeconds:H?.timeoutSeconds,maxParallel:H&&"maxParallel"in H?H.maxParallel:void 0,tools:H?.tools,notesDirectory:H?.notesDirectory,extensions:H?.extensions,source:H?.source},Q=f.parseStatus==="valid"&&(H?.enabled??!0);if(!J){let V=`cspec_${z1()}`;this.insertSpecRow(V,f,W,Q,$);let Y=this.getSpec(V);if(!Y)throw Error("failed to insert cron_spec row");return{record:Y,created:!0,revisionChanged:!0}}let j=J.sourceHash!==f.sourceHash&&QF(J,W,J.enabled,Q),P=j?J.revision+1:J.revision;this.updateSpecRow(J.specId,f,W,Q,P,$);let X=this.getSpec(J.specId);if(!X)throw Error("failed to reload cron_spec after update");return{record:X,created:!1,revisionChanged:j}}insertSpecRow(f,$,J,H,W){let Q=$.spec;this.db.prepare(`INSERT INTO cron_specs (
291
+ spec_id, external_id, source_path, trigger_kind,
292
+ source_mtime_ms, source_hash, parse_status, parse_error,
293
+ enabled, removed, title, prompt, workspace_root,
294
+ schedule_expr, timezone, event_type, filters_json,
295
+ debounce_seconds, dedupe_window_seconds, cooldown_seconds,
296
+ mode, system_prompt, provider_id, model_id,
297
+ max_iterations, timeout_seconds, max_parallel,
298
+ tools_json, notes_directory, extensions_json, source,
299
+ tags_json, metadata_json, revision,
300
+ created_at, updated_at
301
+ ) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run(f,$.externalId,$.sourcePath,$.triggerKind,$.sourceMtimeMs??null,$.sourceHash,$.parseStatus,$.parseError??null,H?1:0,0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,Q?.tags?JSON.stringify(Q.tags):null,Q?.metadata?JSON.stringify(Q.metadata):null,1,W,W)}updateSpecRow(f,$,J,H,W,Q){let Z=$.spec;this.db.prepare(`UPDATE cron_specs SET
302
+ external_id = ?, trigger_kind = ?,
303
+ source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
304
+ enabled = ?, removed = 0, title = ?, prompt = ?,
305
+ workspace_root = ?, schedule_expr = ?, timezone = ?,
306
+ event_type = ?, filters_json = ?,
307
+ debounce_seconds = ?, dedupe_window_seconds = ?, cooldown_seconds = ?,
308
+ mode = ?, system_prompt = ?, provider_id = ?, model_id = ?,
309
+ max_iterations = ?, timeout_seconds = ?, max_parallel = ?,
310
+ tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
311
+ tags_json = ?, metadata_json = ?,
312
+ revision = ?, updated_at = ?
313
+ WHERE spec_id = ?`).run($.externalId,$.triggerKind,$.sourceMtimeMs??null,$.sourceHash,$.parseStatus,$.parseError??null,H?1:0,J.title??"",J.prompt??null,J.workspaceRoot??null,J.scheduleExpr??null,J.timezone??null,J.eventType??null,J.filters?JSON.stringify(J.filters):null,J.debounceSeconds??null,J.dedupeWindowSeconds??null,J.cooldownSeconds??null,J.mode??null,J.systemPrompt??null,J.providerId??null,J.modelId??null,J.maxIterations??null,J.timeoutSeconds??null,J.maxParallel??null,J.tools?JSON.stringify(J.tools):null,J.notesDirectory??null,J.extensions?JSON.stringify(J.extensions):null,J.source??null,Z?.tags?JSON.stringify(Z.tags):null,Z?.metadata?JSON.stringify(Z.metadata):null,W,Q,f)}markSpecRemoved(f){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(Hf(),f)}updateSpecNextRunAt(f,$){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run($??null,Hf(),f)}updateSpecLastRunAt(f,$){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run($,Hf(),f)}updateLastMaterializedRunId(f,$){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run($,Hf(),f)}initializeScheduleNextRun(f){let $=this.getSpec(f);if(!$||$.triggerKind!=="schedule"||!$.enabled||!$.scheduleExpr){this.updateSpecNextRunAt(f,void 0);return}let J=new Date(e0($.scheduleExpr,Date.now(),$.timezone)).toISOString();this.updateSpecNextRunAt(f,J)}materializeDueScheduleRun(f){let $=f.nowMs,J=new Date($).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let H=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(f.specId);if(!H)return this.db.exec("COMMIT;"),{queued:!1};let W=D0(H);if(W.triggerKind!=="schedule"||!W.enabled||W.removed||W.parseStatus!=="valid"||!W.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let Q=W.nextRunAt;if(!Q){let P=new Date(e0(W.scheduleExpr,$,W.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(P,J,W.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:P}}if(new Date(Q).getTime()>$)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:Q};let Z=`crun_${z1()}`,j;try{j=new Date(e0(W.scheduleExpr,$,W.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
314
+ run_id, spec_id, spec_revision, trigger_kind, status,
315
+ scheduled_for, trigger_event_id, attempt_count,
316
+ created_at, updated_at
317
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,W.specId,W.revision,"schedule","queued",Q,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
318
+ last_materialized_run_id = ?,
319
+ last_run_at = ?,
320
+ next_run_at = ?,
321
+ updated_at = ?
322
+ WHERE spec_id = ?`).run(Z,J,j??null,J,W.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(Z),nextRunAt:j}}catch(H){throw this.db.exec("ROLLBACK;"),H}}getRun(f){let $=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get(f);return $?IJ($):void 0}insertEventLog(f,$={}){let J=Hf(),H=$.receivedAtIso??J,W=f.eventId.trim();if(!W)throw Error("automation event requires eventId");let Q=f.eventType.trim();if(!Q)throw Error("automation event requires eventType");let Z=f.source.trim();if(!Z)throw Error("automation event requires source");let j=f.occurredAt.trim()||H,P=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
323
+ event_id, event_type, source, subject,
324
+ occurred_at, received_at, workspace_root, dedupe_key,
325
+ payload_json, attributes_json, processing_status,
326
+ matched_spec_count, queued_run_count, suppressed_count,
327
+ error, created_at, updated_at
328
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,Q,Z,f.subject?.trim()||null,j,H,f.workspaceRoot?.trim()||null,f.dedupeKey?.trim()||null,N7(f.payload),N7(f.attributes),"received",0,0,0,null,J,J).changes??0,X=this.getEventLog(W);if(!X)throw Error("failed to insert cron_event_log row");return{record:X,created:P===1}}getEventLog(f){let $=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get(f);return $?O7($):void 0}listEventLogs(f={}){let $=[],J=[];if(f.eventType)$.push("event_type = ?"),J.push(f.eventType);if(f.source)$.push("source = ?"),J.push(f.source);if(f.processingStatus)$.push("processing_status = ?"),J.push(f.processingStatus);let H=$.length>0?`WHERE ${$.join(" AND ")}`:"",W=Math.max(1,Math.floor(f.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${H}
329
+ ORDER BY received_at DESC, created_at DESC
330
+ LIMIT ?`).all(...J,W).map((Z)=>O7(Z))}updateEventLogProcessing(f,$){return(this.db.prepare(`UPDATE cron_event_log SET
331
+ processing_status = ?,
332
+ matched_spec_count = COALESCE(?, matched_spec_count),
333
+ queued_run_count = COALESCE(?, queued_run_count),
334
+ suppressed_count = COALESCE(?, suppressed_count),
335
+ error = ?,
336
+ updated_at = ?
337
+ WHERE event_id = ?`).run($.status,$.matchedSpecCount??null,$.queuedRunCount??null,$.suppressedCount??null,$.error??null,Hf(),f).changes??0)===1}listRuns(f={}){let $=[],J=[];if(f.specId)$.push("spec_id = ?"),J.push(f.specId);if(f.status){let Z=Array.isArray(f.status)?f.status:[f.status];if(Z.length>0){let j=Z.map(()=>"?").join(",");$.push(`status IN (${j})`);for(let P of Z)J.push(P)}}let H=$.length>0?`WHERE ${$.join(" AND ")}`:"",W=Math.max(1,Math.floor(f.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${H} ORDER BY created_at DESC LIMIT ?`).all(...J,W).map((Z)=>IJ(Z))}hasRecentEventRunForDedupe(f){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
338
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
339
+ WHERE r.spec_id = ?
340
+ AND r.trigger_kind = 'event'
341
+ AND e.dedupe_key = ?
342
+ AND e.received_at >= ?
343
+ LIMIT 1`).get(f.specId,f.dedupeKey,f.sinceIso)}hasRecentEventRunForSpec(f){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
344
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
345
+ WHERE r.spec_id = ?
346
+ AND r.trigger_kind = 'event'
347
+ AND e.received_at >= ?
348
+ LIMIT 1`).get(f.specId,f.sinceIso)}findQueuedEventRunForDedupe(f){let $=this.db.prepare(`SELECT r.* FROM cron_runs r
349
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
350
+ WHERE r.spec_id = ?
351
+ AND r.trigger_kind = 'event'
352
+ AND r.status = 'queued'
353
+ AND e.dedupe_key = ?
354
+ ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
355
+ LIMIT 1`).get(f.specId,f.dedupeKey);return $?IJ($):void 0}updateQueuedEventRunForDebounce(f){let $=Hf();if((this.db.prepare(`UPDATE cron_runs SET
356
+ trigger_event_id = ?,
357
+ scheduled_for = ?,
358
+ updated_at = ?
359
+ WHERE run_id = ?
360
+ AND trigger_kind = 'event'
361
+ AND status = 'queued'`).run(f.triggerEventId,f.scheduledFor,$,f.runId).changes??0)!==1)return;return this.getRun(f.runId)}hasOneOffRunForRevision(f,$){return!!this.db.prepare(`SELECT run_id FROM cron_runs
362
+ WHERE spec_id = ? AND spec_revision = ?
363
+ AND trigger_kind = 'one_off'
364
+ LIMIT 1`).get(f,$)}enqueueRun(f){let $=`crun_${z1()}`,J=Hf();this.db.prepare(`INSERT INTO cron_runs (
365
+ run_id, spec_id, spec_revision, trigger_kind, status,
366
+ scheduled_for, trigger_event_id, attempt_count,
367
+ created_at, updated_at
368
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run($,f.specId,f.specRevision,f.triggerKind,"queued",f.scheduledFor??null,f.triggerEventId??null,0,J,J),this.updateLastMaterializedRunId(f.specId,$);let H=this.getRun($);if(!H)throw Error("failed to insert cron_run row");return H}cancelQueuedRunsForSpec(f){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
369
+ WHERE spec_id = ? AND status = 'queued'`).run(Hf(),f).changes??0}claimDueRuns(f){let $=f.nowIso,J=Math.max(1000,Math.floor(f.leaseMs)),H=new Date(new Date($).getTime()+J).toISOString(),W=Math.max(1,Math.floor(f.limit??25)),Q=[];this.db.exec("BEGIN IMMEDIATE;");try{let Z=this.db.prepare(`SELECT * FROM cron_runs
370
+ WHERE (
371
+ status = 'queued'
372
+ OR (
373
+ status = 'running'
374
+ AND claim_until_at IS NOT NULL
375
+ AND claim_until_at <= ?
376
+ AND completed_at IS NULL
377
+ )
378
+ )
379
+ AND (scheduled_for IS NULL OR scheduled_for <= ?)
380
+ ORDER BY COALESCE(scheduled_for, created_at) ASC
381
+ LIMIT ?`).all($,$,W);for(let j of Z){let P=r(j.run_id);if(!P)continue;let X=`cclaim_${z1()}`;if((this.db.prepare(`UPDATE cron_runs SET
382
+ status = 'running',
383
+ claim_token = ?,
384
+ claim_started_at = ?,
385
+ claim_until_at = ?,
386
+ started_at = ?,
387
+ completed_at = NULL,
388
+ session_id = NULL,
389
+ report_path = NULL,
390
+ error = NULL,
391
+ attempt_count = attempt_count + 1,
392
+ updated_at = ?
393
+ WHERE run_id = ?
394
+ AND (
395
+ status = 'queued'
396
+ OR (
397
+ status = 'running'
398
+ AND claim_until_at IS NOT NULL
399
+ AND claim_until_at <= ?
400
+ AND completed_at IS NULL
401
+ )
402
+ )`).run(X,$,H,$,$,P,$).changes??0)!==1)continue;let Y=this.getRun(P);if(!Y)continue;Q.push({run:Y,claimToken:X,claimUntilAt:H})}this.db.exec("COMMIT;")}catch(Z){throw this.db.exec("ROLLBACK;"),Z}return Q}renewClaim(f,$,J){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
403
+ WHERE run_id = ? AND claim_token = ?`).run(J,Hf(),f,$).changes??0)===1}completeRun(f,$){let J=$.completedAtIso??Hf(),H=$.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
404
+ status = ?,
405
+ session_id = COALESCE(?, session_id),
406
+ report_path = COALESCE(?, report_path),
407
+ error = ?,
408
+ completed_at = ?,
409
+ claim_started_at = NULL,
410
+ claim_token = NULL,
411
+ claim_until_at = NULL,
412
+ updated_at = ?
413
+ ${H}`).run($.status,$.sessionId??null,$.reportPath??null,$.error??null,J,J,f,...$.claimToken?[$.claimToken]:[]).changes??0)>0}requeueRun(f){let $=Hf();return(this.db.prepare(`UPDATE cron_runs SET
414
+ status = 'queued',
415
+ claim_started_at = NULL,
416
+ claim_token = NULL,
417
+ claim_until_at = NULL,
418
+ started_at = NULL,
419
+ completed_at = NULL,
420
+ session_id = NULL,
421
+ report_path = NULL,
422
+ error = ?,
423
+ scheduled_for = COALESCE(?, scheduled_for),
424
+ updated_at = ?
425
+ WHERE run_id = ? AND claim_token = ?`).run(f.error??null,f.scheduledFor??null,$,f.runId,f.claimToken).changes??0)>0}attachSessionIdToRun(f,$){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run($,Hf(),f)}attachReportPathToRun(f,$){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run($,Hf(),f)}}class N1{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new O1({dbPath:f.dbPath});let $=f.specs;this.reconciler=new SJ({store:this.store,specs:$}),this.materializer=new D1({store:this.store}),this.eventIngress=new TJ({store:this.store,logger:f.logger}),this.runner=new M1({store:this.store,materializer:this.materializer,runtimeHandlers:f.runtimeHandlers,workspaceRoot:f.workspaceRoot,specs:$,logger:f.logger,pollIntervalMs:f.pollIntervalMs,claimLeaseSeconds:f.claimLeaseSeconds,globalMaxConcurrency:f.globalMaxConcurrency}),this.watcher=new kJ({reconciler:this.reconciler,debounceMs:f.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let H=f.logger;if(H)if(H.error)H.error("cron.watcher.failed",{error:J});else H.log("cron.watcher.failed",{error:J})}})}async start(){if(this.disposed)throw Error("CronService disposed");if(this.started)return;this.started=!0,await this.reconciler.reconcileAll(),this.materializer.materializeAll(),this.watcher.start(),await this.runner.start()}async stop(){this.watcher.stop(),await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,this.watcher.dispose(),await this.runner.dispose(),this.store.close()}listSpecs(f){return this.store.listSpecs(f)}getSpec(f){return this.store.getSpec(f)}listRuns(f){return this.store.listRuns(f)}getRun(f){return this.store.getRun(f)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns(f=20){return this.store.listRuns({status:"queued",limit:f})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent(f){return this.eventIngress.ingestEvent(f)}listEventLogs(f){return this.store.listEventLogs(f)}getEventLog(f){return this.store.getEventLog(f)}}import{readdir as TF,readFile as u7}from"node:fs/promises";import{join as c7}from"node:path";import{formatDisplayUserInput as DF,normalizeUserInput as MF}from"@cline/shared";import{resolveSessionDataDir as d7}from"@cline/shared/storage";import{mkdirSync as BF,writeFileSync as AF}from"node:fs";import{dirname as RF}from"node:path";import{normalizeUserInput as FF}from"@cline/shared";import{nanoid as yF}from"nanoid";import{nanoid as VF}from"nanoid";function q1(f){return f.replace(/[^a-zA-Z0-9._-]+/g,"_")}function T8(f,$){let J=q1(f),H=q1($),W=`${J}__${H}`;return W.length>180?W.slice(0,180):W}function gJ(f,$){let J=q1(f),H=q1($);return`${J}__teamtask__${H}__${VF(6)}`}function b1(f){let J=f.indexOf("__teamtask__");if(J<=0)return null;let H=f.slice(0,J),W=f.slice(J+12),Q=W.lastIndexOf("__");if(Q<=0)return null;let Z=W.slice(0,Q),j=W.slice(Q+2);if(!H||!Z||!j)return null;return{rootSessionId:H,agentId:Z,teamTaskId:j}}function D8(f){if(b1(f))return null;let $="__",J=f.indexOf($);if(J<=0)return null;let H=f.slice(0,J),W=f.slice(J+$.length);if(!H||!W)return null;return{rootSessionId:H,agentId:W}}function vJ(f){switch(f.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let $=String(f.reason??"").toLowerCase();if($.includes("cancel")||$.includes("abort")||$.includes("interrupt"))return"cancelled";if($.includes("fail")||$.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as l}from"zod";var YF=l.enum(R6),yf=l.object({version:l.literal(1),session_id:l.string().min(1),source:l.string().min(1),pid:l.number().int(),started_at:l.string().min(1),ended_at:l.string().min(1).optional(),exit_code:l.number().int().nullable().optional(),status:YF,interactive:l.boolean(),provider:l.string().min(1),model:l.string().min(1),cwd:l.string().min(1),workspace_root:l.string().min(1),team_name:l.string().min(1).optional(),enable_tools:l.boolean(),enable_spawn:l.boolean(),enable_teams:l.boolean(),prompt:l.string().optional(),metadata:l.record(l.string(),l.unknown()).optional(),messages_path:l.string().min(1).optional()});function w7(f){if(!f)return!1;return Object.values(f).some(($)=>typeof $==="function")}function cJ(f,$){let J=[...f??[],...$??[]];if(J.length===0)return;let H=[],W=new Set;for(let Q of J){if(W.has(Q.name))continue;W.add(Q.name),H.push(Q)}return H}function C7(f){return JSON.stringify(f,($,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function f0(f){return typeof f==="string"&&f.trim()?f.trim():void 0}function uJ(f,$){let J={...f};J.id=f0(J.id)??yF();let H=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,W={id:f0(H?.id)??f0(J.modelId)??f0($?.id),provider:f0(H?.provider)??f0(J.providerId)??f0($?.provider),family:f0(H?.family)??f0($?.family)};if(delete J.providerId,delete J.modelId,W.id&&W.provider)J.modelInfo={id:W.id,provider:W.provider,...W.family?{family:W.family}:{}};else delete J.modelInfo;return J}function M8(f){return f.map(($)=>uJ($))}function _8(f,$,J=[]){let H=f.map((j,P)=>{let X=J[P],Y=X?.role===j.role&&JSON.stringify(X.content)===JSON.stringify(j.content)?{...X,...j}:{...j};return uJ(Y)}),W=J.length,Q=[];for(let j=W;j<H.length;j+=1)if(H[j]?.role==="assistant")Q.push(j);if(Q.length===0){let j=[...H].reverse().findIndex((P)=>P.role==="assistant");if(j===-1)return H;Q.push(H.length-1-j)}let Z=Q[Q.length-1];for(let j of Q){let P=H[j],X=P.metrics;if(!X&&j===Z){let V=$.usage;X={inputTokens:V.inputTokens,outputTokens:V.outputTokens,cacheReadTokens:V.cacheReadTokens??0,cacheWriteTokens:V.cacheWriteTokens??0,cost:V.totalCost}}H[j]={...uJ(P,{id:$.model.id,provider:$.model.provider,family:$.model.info?.family}),...X?{metrics:X}:{},ts:P.ts??$.endedAt.getTime()}}return H}function w1(f){return{sessionId:f.sessionId,source:f.source,pid:f.pid,startedAt:f.startedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,status:f.status,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspaceRoot,teamName:f.teamName??void 0,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,parentSessionId:f.parentSessionId??void 0,parentAgentId:f.parentAgentId??void 0,agentId:f.agentId??void 0,conversationId:f.conversationId??void 0,isSubagent:f.isSubagent,prompt:f.prompt??void 0,metadata:f.metadata??void 0,messagesPath:f.messagesPath??void 0,updatedAt:f.updatedAt}}var KF=120;function $$(f){let $=f?.trim();return $?$.slice(0,KF):void 0}function dJ(f){let $=FF(f??"").trim();if(!$)return;return $$($.split(`
426
+ `)[0]?.trim())}function M0(f){if(!f)return;let $={...f},J=$$(typeof $.title==="string"?$.title:void 0);if(J)$.title=J;else delete $.title;return Object.keys($).length>0?$:void 0}function C1(f){let $=M0(f.metadata)??{},J=f.title!==void 0?$$(f.title):dJ(f.prompt);if(J)$.title=J;return Object.keys($).length>0?$:void 0}function rJ(f){let $=b1(f);if($)return{agent:"teammate",sessionId:$.rootSessionId,taskType:"team"};let J=D8(f);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:f}}function lJ(f){return{version:1,updated_at:f.updatedAt,agent:f.context.agent,sessionId:f.context.sessionId,...f.context.taskType?{taskType:f.context.taskType}:{},messages:M8(f.messages),...f.systemPrompt?{system_prompt:f.systemPrompt}:{}}}function E7(f,$,J){BF(RF(f),{recursive:!0}),AF(f,`${JSON.stringify(lJ({updatedAt:$,context:J,messages:[]}),null,2)}
427
+ `,"utf8")}function S7(f,$){return yf.parse({version:1,session_id:f.sessionId,source:f.source,pid:f.pid,started_at:f.startedAt,ended_at:$?.endedAt??f.endedAt??void 0,exit_code:$?.exitCode??f.exitCode??void 0,status:$?.status??f.status,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspace_root:f.workspaceRoot,team_name:f.teamName??void 0,enable_tools:f.enableTools,enable_spawn:f.enableSpawn,enable_teams:f.enableTeams,prompt:f.prompt??void 0,metadata:$?.metadata??f.metadata??void 0,messages_path:f.messagesPath??void 0})}async function k7(f,$,J){let H=0;while(!0){let W=await f();if(W===void 0)return{updated:!1};let Q=await $(W);if(typeof Q==="object"&&Q!==null&&"updated"in Q&&Q.updated===!1){if(H+=1,H>=J)return Q;continue}return Q}}import{existsSync as UF}from"node:fs";import{readFile as GF}from"node:fs/promises";import{formatDisplayUserInput as m7}from"@cline/shared";class E1{listeners=new Set;subscribe(f,$){let J={listener:f,sessionId:$?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit(f){let $=f.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==$)continue;J.listener(f)}}get size(){return this.listeners.size}}async function J$(f){let $=f?.trim();if(!$||!UF($))return[];try{let J=(await GF($,"utf8")).trim();if(!J)return[];let H=JSON.parse(J);if(Array.isArray(H))return I7(H);if(H&&typeof H==="object"&&!Array.isArray(H)){let W=H.messages;if(Array.isArray(W))return I7(W)}return[]}catch{return[]}}function hF(f){if(f.role!=="user")return f;if(typeof f.content==="string")return{...f,content:m7(f.content)};return{...f,content:f.content.map(($)=>{if($.type!=="text"||typeof $.text!=="string")return $;return{...$,text:m7($.text)}})}}function I7(f){return f.map(hF)}function x7(f){return f?{...f}:void 0}async function g7(f,$){if(!(f.hookName==="tool_call"||!!f.parent_agent_id))return;await $.queueSpawnRequest(f);let H=await $.upsertSubagentSessionFromHook(f);if(!H)return;await $.appendSubagentHookAudit(H,f),await $.applySubagentStatus(H,f)}function L8(f){if(typeof f!=="string")return;let $=f.trim();return $.length>0?$:void 0}function Lf(f){let $=L8(f);if(!$)return;return $.toLowerCase()==="unknown"?void 0:$}function z8(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function _F(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return{...f}}function iJ(f){let $=f??200;return Number.isFinite($)?Math.max(0,Math.floor($)):200}function LF(f){let $=f.match(/\d{13,}/g);if(!$||$.length===0)return 0;let J=0;for(let H of $){let W=Number.parseInt(H,10);if(Number.isFinite(W)&&W>J)J=W}return J}function nJ(f){return{sessionId:f.session_id,source:f.source,pid:f.pid,startedAt:f.started_at,endedAt:f.ended_at??null,exitCode:f.exit_code??null,status:f.status,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspace_root,teamName:f.team_name,enableTools:f.enable_tools,enableSpawn:f.enable_spawn,enableTeams:f.enable_teams,isSubagent:!1,prompt:f.prompt,metadata:f.metadata,messagesPath:f.messages_path,updatedAt:f.ended_at??f.started_at}}async function zF(f){let $=iJ(f);if($===0)return[];let J=d7(),W=(await TF(J,{withFileTypes:!0}).catch(()=>[])).filter((Z)=>Z.isDirectory()).map((Z)=>({entry:Z,recency:LF(Z.name.trim())})).sort((Z,j)=>j.recency-Z.recency||j.entry.name.localeCompare(Z.entry.name));return(await Promise.all(W.map(async({entry:Z})=>{let j=Z.name.trim();if(!j)return;let P=c7(J,j,`${j}.json`),X=await u7(P,"utf8").catch(()=>{return});if(!X)return;let V;try{V=JSON.parse(X)}catch{return}let Y=yf.safeParse(V);if(!Y.success)return;return nJ(Y.data)}))).filter((Z)=>Boolean(Z)).sort((Z,j)=>j.startedAt.localeCompare(Z.startedAt)).slice(0,$)}async function OF(f,$){let J=iJ($);if(J===0)return await f.listSessions(0),[];return(await f.listSessions(J)).slice(0,J)}function NF(f){if(typeof f==="string")return f.trim();let $=[];for(let J of f){if(!J||typeof J!=="object")continue;let H=J;if(H.type!=="text")continue;let W=H.text?.trim();if(W)$.push(W)}return $.join(`
428
+ `).trim()}function v7(f){return f.replace(/\s+/g," ").trim()}function qF(f,$){if(f.length<=$)return f;return`${f.slice(0,Math.max(0,$-3)).trimEnd()}...`}function bF(f){for(let $ of["user","assistant"])for(let J of f){if(J.role!==$)continue;let H=v7(NF(J.content));if(!H)continue;let W=$==="user"?v7(DF(H)):H,Q=MF(W.split(`
429
+ `)[0]??W);return qF(Q,50)}return}function wF(f){let $=0;for(let J of f)$+=z8(J.metrics?.cost)??0;return $}function CF(f){let $,J;for(let H=f.length-1;H>=0;H-=1){let W=f[H];if(!$)$=Lf(W.modelInfo?.provider);if(!J)J=Lf(W.modelInfo?.id);if($&&J)break}return{provider:$,model:J}}function EF(f){return Lf(f?.provider)??Lf(f?.provider&&typeof f.provider==="object"&&!Array.isArray(f.provider)?f.provider.id:void 0)}function SF(f){return Lf(f?.model)??Lf(f?.model&&typeof f.model==="object"&&!Array.isArray(f.model)?f.model.id:void 0)}function pJ(f,$){let J=_F(f.metadata),H=L8($?.title)??L8(J?.title),W=z8($?.totalCost)??z8(J?.totalCost),Q=J||H!==void 0||W!==void 0?{...J??{},...H!==void 0?{title:H}:{},...W!==void 0?{totalCost:W}:{}}:void 0;return{...f,provider:Lf($?.provider)??Lf(f.provider)??EF(J)??"",model:Lf($?.model)??Lf(f.model)??SF(J)??"",metadata:Q}}async function kF(f,$){return await Promise.all($.map(async(J)=>{let H=pJ(J),W=Boolean(L8(H.metadata?.title)),Q=Boolean(Lf(H.provider)),Z=Boolean(Lf(H.model)),j=z8(H.metadata?.totalCost),P=j!==void 0&&j>0;if(W&&Q&&Z&&P)return H;let X=await f.readSessionMessages(J.sessionId);if(X.length===0)return H;let V=CF(X),Y=wF(X);return pJ(J,{title:W?void 0:bF(X),provider:Q?void 0:V.provider,model:Z?void 0:V.model,totalCost:P||Y<=0?void 0:Y})}))}async function aJ(f,$={}){let J=iJ($.limit),H=await OF(f,J),W=$.includeManifestFallback===!0&&H.length<J?await zF(Math.min(Math.max(J*2,100),500)):[],Q=new Map;for(let j of[...H,...W]){if(Q.has(j.sessionId))continue;Q.set(j.sessionId,j)}let Z=W.length===0?H:Array.from(Q.values()).sort((j,P)=>P.startedAt.localeCompare(j.startedAt)).slice(0,J);if($.hydrate===!1)return Z.map((j)=>pJ(j));return await kF(f,Z)}async function mF(f){let $=f.trim();if(!$)return;let J=c7(d7(),$,`${$}.json`),H=await u7(J,"utf8").catch(()=>{return});if(!H)return;try{let W=yf.safeParse(JSON.parse(H));return W.success?W.data.messages_path:void 0}catch{return}}async function IF(f,$={}){let J=new Map;return await aJ({listSessions:async(W)=>{let Q=await f.listSessions(W);J.clear();for(let Z of Q)J.set(Z.sessionId,Z);return Q.map(w1)},readSessionMessages:async(W)=>{let Q=J.get(W)?.messagesPath??await mF(W);return await J$(Q)}},$)}import{createSessionId as wy,resolveHubCommandTimeoutMs as Cy}from"@cline/shared";import{spawn as Yy}from"node:child_process";import{closeSync as By,mkdirSync as Ay,openSync as Ry}from"node:fs";import{basename as Fy,dirname as yy,join as Ky}from"node:path";import{fileURLToPath as Uy}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as Gy,isHubDaemonProcess as JQ,withResolvedClineBuildEnv as hy}from"@cline/shared";import{createHash as xF,randomBytes as gF}from"node:crypto";import{existsSync as vF}from"node:fs";import{chmod as uF,mkdir as tJ,readFile as a7,rm as sJ,writeFile as t7}from"node:fs/promises";import{dirname as s7,join as oJ}from"node:path";import{resolveClineDataDir as eJ,resolveClineDir as Bb}from"@cline/shared/storage";var l7="0.0.38-nightly.1778113663";var p7={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:l7,repository:{type:"git",url:"https://github.com/cline/sdk",directory:"packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{development:"./src/index.ts",types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{development:"./src/hub/index.ts",types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{development:"./src/hub/daemon/entry.ts",types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{development:"./src/services/telemetry/index.ts",types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"rm -rf dist && bun run ./bun.mts && bun tsc -p tsconfig.build.json",clean:"rm -rf dist node_modules",typecheck:"bun tsc -p tsconfig.dev.json --noEmit && bun run typecheck:smoke","typecheck:smoke":"bun tsc -p tsconfig.smoke.json --noEmit",test:"bun run test:unit && bun run test:e2e","test:unit":"vitest run --config vitest.config.ts","test:e2e":"vitest run --config vitest.e2e.config.ts","verify:routines":"zsh -lc 'bunx vitest run src/cron/schedule-service.test.ts --config vitest.config.ts'","test:watch":"vitest --config vitest.config.ts"},dependencies:{"@cline/agents":"workspace:*","@cline/shared":"workspace:*","@cline/llms":"workspace:*","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.214.0","@opentelemetry/exporter-logs-otlp-http":"^0.214.0","@opentelemetry/exporter-metrics-otlp-http":"^0.214.0","@opentelemetry/exporter-trace-otlp-http":"^0.214.0","@opentelemetry/resources":"^2.6.1","@opentelemetry/sdk-logs":"^0.214.0","@opentelemetry/sdk-metrics":"^2.6.1","@opentelemetry/sdk-trace-base":"^2.6.1","@opentelemetry/sdk-trace-node":"^2.6.1","@opentelemetry/semantic-conventions":"^1.40.0",jiti:"^1.21.7","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"^3.32.3",ws:"^8.20.0",yaml:"^2.8.2",zod:"^4.3.6"},devDependencies:{"@types/ws":"^8.18.1"},engines:{node:">=22"},files:["dist","!dist/**/*.d.ts.map"]};var cF="CLINE_HUB_DISCOVERY_PATH",dF="CLINE_HUB_BUILD_ID",i7=30000,rF=15000,lF=100;function pF(f){return f.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function iF(f){return xF("sha256").update(f).digest("hex").slice(0,12)}function nF(f){if(!Number.isInteger(f)||!f||f<=0)return!1;try{return process.kill(f,0),!0}catch($){return $ instanceof Error&&"code"in $?String($.code)==="EPERM":!1}}function o7(){return gF(32).toString("hex")}function aF(f){return new Promise(($)=>setTimeout($,f))}function tF(f){return`${f}.lock`}async function sF(f){try{let $=JSON.parse(await a7(oJ(f,"owner.json"),"utf8"));if(typeof $.pid!=="number"||typeof $.acquiredAt!=="string")return;return{pid:$.pid,acquiredAt:$.acquiredAt}}catch{return}}async function n7(f){await sJ(f,{recursive:!0,force:!0}).catch(()=>{return})}function m$(){return process.env[dF]?.trim()||String(p7.version)}function H$(f=process.argv[1]?.trim()||process.cwd()){let $=`hub-${iF(f)}`,J=process.env[cF]?.trim()||oJ(eJ(),"locks","hub","owners",`${pF($)}.json`);return{ownerId:$,discoveryPath:J}}function Rb(f=`hub-${Date.now().toString(36)}`){return H$(f)}async function Zf(f){try{let $=JSON.parse(await a7(f,"utf8"));if(typeof $.hubId!=="string"||typeof $.protocolVersion!=="string"||typeof $.authToken!=="string"||typeof $.host!=="string"||typeof $.port!=="number"||typeof $.url!=="string"||typeof $.startedAt!=="string"||typeof $.updatedAt!=="string")return;return{hubId:$.hubId,protocolVersion:$.protocolVersion,buildId:typeof $.buildId==="string"?$.buildId:void 0,authToken:$.authToken,host:$.host,port:$.port,url:$.url,pid:typeof $.pid==="number"?$.pid:void 0,startedAt:$.startedAt,updatedAt:$.updatedAt}}catch{return}}async function e7(f,$){await tJ(s7(f),{recursive:!0}),await sJ(f,{force:!0}).catch(()=>{return}),await t7(f,`${JSON.stringify($,null,2)}
430
+ `,{encoding:"utf8",mode:384}),await uF(f,384)}async function rf(f){await sJ(f,{force:!0}).catch(()=>{return})}async function fQ(f,$){let J=tF(f);await tJ(s7(J),{recursive:!0});let H=Date.now()+rF;while(!0)try{await tJ(J,{recursive:!1}),await t7(oJ(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
431
+ `,"utf8");try{return await $()}finally{await n7(J)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let Z=await sF(J),j=Z?Date.now()-Date.parse(Z.acquiredAt):i7+1;if(!Z||!nF(Z.pid)||j>i7){await n7(J);continue}if(Date.now()>=H)throw Error(`Timed out waiting for hub startup lock ${J}`);await aF(lF)}}async function Yf(f){try{let $=await fetch(oF(f));if(!$.ok)return;return await $.json()}catch{return}}function $0(f,$,J="/hub"){return new URL(`ws://${f}:${$}${J}`).toString()}function oF(f){let $=new URL(f);return $.protocol=$.protocol==="wss:"?"https:":"http:",$.pathname="/health",$.search="",$.toString()}function Fb(f){return vF(f)}import{CLINE_HUB_DEV_PORT as eF,CLINE_HUB_PORT as fy,resolveClineBuildEnv as $y}from"@cline/shared";var Jy="CLINE_HUB_HOST",Hy="CLINE_HUB_PORT",Wy="CLINE_HUB_PATHNAME",Qy="127.0.0.1",Zy=fy,jy="/hub";function $Q(f){return $y(f)==="development"?eF:Zy}function Py(f={}){return(f.env??process.env)[Jy]?.trim()||Qy}function O8(f={}){let J=(f.env??process.env)[Hy]?.trim();if(!J)return $Q(f);let H=Number.parseInt(J,10);if(!Number.isInteger(H)||H<1||H>65535)return $Q(f);return H}function Xy(f={}){return(f.env??process.env)[Wy]?.trim()||jy}function _0(f={},$={}){return{host:f.host??Py($),port:f.port??O8($),pathname:f.pathname??Xy($)}}var Vy="shared:cline";function Tb(f){let $=s0(f.trim());return H$(`workspace:${$||f.trim()}`)}function Bf(f=Vy){return H$(f)}var Ty=8000,Dy=200,My=3000,_y=100,Ly="--cline-hub-daemon";function zy(f){return[...f.host?["--host",f.host]:[],...typeof f.port==="number"?["--port",String(f.port)]:[],...f.pathname?["--pathname",f.pathname]:[]]}function Oy(){try{let f=Ky(eJ(),"logs","hub-daemon.log");return Ay(yy(f),{recursive:!0}),{fd:Ry(f,"a"),logPath:f}}catch{return}}function S1(f){let $=f.buildId?.trim();return!!$&&$===m$()}async function Ny(f,$){let J=Date.now()+$;while(Date.now()<J){if(!(await Yf(f).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,_y))}return!1}async function k1(f,$){if(S1(f))return;if(await fH(f.url,f.authToken).catch(()=>!1),f.pid)try{process.kill(f.pid,"SIGTERM")}catch{}await Ny(f.url,My),await rf($).catch(()=>{return})}function qy(){let f=import.meta.url.endsWith(".ts")?"ts":"js";return Uy(new URL(`./entry.${f}`,import.meta.url))}function by(f,$){let J=qy(),H=process.execPath?.trim();if(!H)throw Error("unable to resolve runtime executable for hub daemon");let W=Fy(H).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),Z=W&&J.toLowerCase().endsWith(".ts"),j=Q?[Ly]:[...Z?["--conditions=development"]:[],J];return{launcher:H,args:[...j,"--cwd",f,...zy($)],cwd:f,env:{...hy(process.env),CLINE_NO_INTERACTIVE:"1",[Gy]:"1"}}}function N8(f,$={}){if(JQ())return;let J=by(f,$),H=Oy();try{Yy(J.launcher,J.args,{detached:!0,stdio:H?["ignore",H.fd,H.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(H)By(H.fd)}}function HQ(f,$={}){if(JQ())return;let J=Bf(),H=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=_0($),Q=$0(W.host,W.port,W.pathname);Zf(J.discoveryPath).then(async(Z)=>{if(Z?.url){let V=await Yf(Z.url);if(V?.url&&S1(V)&&await L0(V.url,{authToken:Z.authToken}))return;if(V?.url)await k1({...V,authToken:Z.authToken},J.discoveryPath);else await rf(J.discoveryPath).catch(()=>{return})}let j=await Yf(Q);if(j?.url)await k1(j,J.discoveryPath);let X=!H&&W.port!==0?{...W,port:0}:W;N8(f,X)}).catch(()=>{})}async function Cb(f,$={}){let J=Bf(),H=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=_0($),Z=$0(Q.host,Q.port,Q.pathname),j=(A)=>{if(!H)I$(A.url,A.authToken);return A},P=await Zf(J.discoveryPath);if(P?.url){let A=await Yf(P.url);if(A?.url&&S1(A)&&await L0(A.url,{authToken:P.authToken}))return j({url:A.url,authToken:P.authToken});if(A?.url)await k1({...A,authToken:P.authToken},J.discoveryPath);else await rf(J.discoveryPath).catch(()=>{return})}let X=await Yf(Z);if(X?.url)await k1(X,J.discoveryPath);let Y=!W&&Q.port!==0?{...Q,port:0}:Q;N8(f,Y);let B=Date.now()+Ty;while(Date.now()<B){let A=await Zf(J.discoveryPath);if(A?.url){let U=await Yf(A.url);if(U?.url&&S1(U)&&await L0(U.url,{authToken:A.authToken}))return j({url:U.url,authToken:A.authToken})}let R=await Yf(Z);if(R?.url&&!S1(R))await k1(R,J.discoveryPath);await new Promise((U)=>setTimeout(U,Dy))}throw Error("Timed out waiting for detached hub startup.")}function Ey(){let f=globalThis.WebSocket;if(!f)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return f}function PQ(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString();if(f instanceof ArrayBuffer)return Buffer.from(f).toString();if(Array.isArray(f))return Buffer.concat(f.map(($)=>Buffer.from($))).toString();if(f&&typeof f==="object"&&"data"in f&&typeof f.data<"u")return PQ(f.data);return String(f)}function Sy(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString("utf8");if(f instanceof ArrayBuffer)return Buffer.from(f).toString("utf8");return""}function WQ(f){let $=f,J=Sy($.reason);return new zf("hub_connection_closed",$.code||J?`Hub connection closed (code=${$.code??0}${J?`, reason=${J}`:""})`:$H,{closeCode:$.code,closeReason:J||void 0})}function ky(f,$){if(f instanceof zf)return f;if(f instanceof Error)return new zf("hub_connect_failed",f.message);if(f&&typeof f==="object"&&"error"in f&&f.error instanceof Error)return new zf("hub_connect_failed",f.error.message);let J=f&&typeof f==="object"&&"message"in f&&typeof f.message==="string"?f.message.trim():"";if(J)return new zf("hub_connect_failed",J);let H=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return new zf("hub_connect_failed",H?`Failed to connect to hub at ${$.toString()} (${H} event before socket open).`:`Failed to connect to hub at ${$.toString()}.`)}var my=8000,Iy=200,QQ="*",ZQ=8000,xy="cline-hub-auth.",XQ=new Map,VQ=new Set,gy=3000,vy=3000,uy=100,$H="Hub connection closed",cy=250,dy=5000,jQ=0.5;class zf extends Error{code;details;constructor(f,$,J){super($);this.code=f;this.details=J;this.name="HubTransportError"}}function ry(f){return f instanceof zf}class q8 extends Error{command;code;constructor(f,$,J){super(J);this.command=f;this.code=$;this.name="HubCommandError"}}function YQ(f,$){return f instanceof q8&&f.code==="hub_command_timeout"&&($===void 0||f.command===$)}function BQ(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=WH(f.toString());return J?XQ.get(J):void 0}function ly(f){try{let J=new URL(f).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function WH(f){if(!ly(f))return;let $=new URL(x$(f));return $.search="",$.hash="",$.toString()}function JH(f){let $=WH(f);return!!$&&VQ.has($)}function I$(f,$){let J=WH(f);if(J){if(VQ.add(J),$?.trim())XQ.set(J,$)}return f}class J0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new zf("hub_connection_closed",$H);sawSocketClose=!1;registered=!1;constructor(f){this.options=f;this.clientId=f.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=f.url}getClientId(){return this.clientId}getUrl(){return this.currentUrl}async connect(){if(this.socket&&(this.socket.readyState===1||this.socket.readyState===0))return this.connectPromise??Promise.resolve();this.closedByClient=!1,this.clearReconnectTimer();let f=new URL(this.currentUrl),$=this.options.authToken?.trim()||BQ(f);f.hash="";let H=new(Ey())(f.toString(),$?[`${xy}${$}`]:void 0);this.socket=H;let W=!1;this.connectPromise=new Promise((Q,Z)=>{let j=!1,P=setTimeout(()=>{if(j)return;j=!0,W=!0,this.lastCloseError=new zf("hub_connect_timeout",`Timed out connecting to hub after ${ZQ}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{H.close()}catch{}Z(this.lastCloseError)},ZQ);H.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(P),Q()}),H.addEventListener("error",(X)=>{if(j)return;j=!0,clearTimeout(P),this.lastCloseError=ky(X,f),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)}),H.addEventListener("close",(X)=>{if(j)return;if(j=!0,clearTimeout(P),!W)this.lastCloseError=WQ(X),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)})}),H.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(PQ(Q)))}),H.addEventListener("close",(Q)=>{if(this.socket!==H)return;if(!W)this.lastCloseError=WQ(Q),this.sawSocketClose=!0;this.registered=!1;for(let Z of this.pendingReplies.values())Z.reject(this.lastCloseError);if(this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0,!this.closedByClient&&this.hasActiveSubscriptions())this.scheduleReconnect()}),await this.connectPromise,await this.command("client.register",{clientId:this.clientId,clientType:this.options.clientType??"core",displayName:this.options.displayName??"core",transport:"native",actorKind:"client",workspaceContext:{workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}}),this.registered=!0;for(let Q of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(Q));this.reconnectAttempt=0}subscribe(f,$){let J=$?.sessionId?.trim()||void 0,H={listener:f,sessionId:J};return this.listeners.add(H),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(H))return;this.adjustSubscriptionCount(J,-1)}}async command(f,$,J,H){let W=0,Q=f!=="client.register"&&f!=="client.unregister";while(!0)try{return await this.commandOnce(f,$,J,H)}catch(Z){if(!Q||W>=1||!await this.recoverLocalHubTransport(Z))throw Z;W+=1}}async commandOnce(f,$,J,H){await this.connect();let W=wy("hubreq_"),Q=Cy(f,H?.timeoutMs),Z=new Promise((P,X)=>{let V=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;X(new q8(f,"hub_command_timeout",`Hub command ${f} timed out after ${Q}ms (hub=${this.currentUrl}, requestId=${W}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},Q);this.pendingReplies.set(W,{resolve:(Y)=>{if(V)clearTimeout(V);P(Y)},reject:(Y)=>{if(V)clearTimeout(V);X(Y)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:f,requestId:W,clientId:this.clientId,sessionId:J,timeoutMs:Q,payload:$}})}catch(P){throw this.pendingReplies.delete(W),P}let j=await Z;if(!j.ok)throw new q8(f,j.error?.code,j.error?.message??`Hub command ${f} failed`);return j}async recoverLocalHubTransport(f){if(!JH(this.currentUrl)||!ry(f))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let $=await m1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!$)return!1;return this.currentUrl=$,this.close(),!0})().finally(()=>{this.recoveryPromise=void 0}),await this.recoveryPromise}hasActiveSubscriptions(){return this.subscriptionCounts.size>0}clearReconnectTimer(){if(!this.reconnectTimer)return;clearTimeout(this.reconnectTimer),this.reconnectTimer=void 0}scheduleReconnect(){if(this.reconnectTimer||this.closedByClient||!this.hasActiveSubscriptions())return;let f=Math.min(cy*2**this.reconnectAttempt,dy),$=Math.round(f*(1-jQ)+Math.random()*f*jQ);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},$)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!JH(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let f=await m1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if(f){this.currentUrl=f,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let f=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!f)return;this.lastCloseError=new zf("hub_connection_closed",$H),this.sawSocketClose=!1;for(let $ of this.pendingReplies.values())$.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{f.close()}catch{}}async dispose(){if(this.socket?.readyState===1&&this.registered)try{await this.command("client.unregister",void 0,void 0,{timeoutMs:2000})}catch{}this.close()}sendFrame(f){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new zf("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify(f))}sendSubscriptionFrame(f,$){this.sendFrame({kind:f,clientId:this.clientId,...$?{sessionId:$}:{}})}adjustSubscriptionCount(f,$){let J=this.subscriptionKeyForSessionId(f),H=(this.subscriptionCounts.get(J)??0)+$;if(H<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if($<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",f);return}if(this.subscriptionCounts.set(J,H),$>0&&H===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",f)}subscriptionKeyForSessionId(f){return f??QQ}subscriptionSessionIdFromKey(f){return f===QQ?void 0:f}handleFrame(f){switch(f.kind){case"reply":{let $=f.envelope.requestId;if(!$)return;let J=this.pendingReplies.get($);if(!J)return;this.pendingReplies.delete($),J.resolve(f.envelope);return}case"event":for(let $ of this.listeners){if($.sessionId&&$.sessionId!==f.envelope.sessionId?.trim())continue;$.listener(f.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function x$(f){let $=new URL(f);if($.protocol==="http:")$.protocol="ws:";else if($.protocol==="https:")$.protocol="wss:";return $.toString()}async function L0(f,$){let J=new J0({url:f,authToken:$?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:$?.workspaceRoot,cwd:$?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function HH(f,$){let J=x$(f),H=await Yf(J);if(!H)return{status:"unreachable",url:J};let W=m$(),Q=H.buildId?.trim();if(!Q||Q!==W)return{status:"build_mismatch",url:J};if($?.verifyConnection===!0&&!await L0(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd,authToken:$.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function py(f){let $=Date.now()+my;while(Date.now()<$){let J=await Zf(f.discoveryPath);if(J?.url){let H=await HH(J.url,{verifyConnection:!0,authToken:J.authToken});if(H.status==="compatible")return I$(H.url,J.authToken)}await new Promise((H)=>setTimeout(H,Iy))}return}async function iy(f){let $=Date.now()+vy;while(Date.now()<$){if(!(await Yf(f).catch(()=>{return}))?.url)return!0;await new Promise((H)=>setTimeout(H,uy))}return!1}function ny(f,$){try{return x$(f)===x$($)}catch{return!1}}function ay(f){return(f&&typeof f==="object"&&Array.isArray(f.sessions)?f.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let H=J;if(H.status==="running"||H.status==="idle")return!0;return Array.isArray(H.participants)&&H.participants.length>0})}async function ty(f,$,J){let H=new J0({url:f,authToken:$,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let W=await H.command("session.list",{limit:500},void 0,{timeoutMs:gy});return!ay(W.payload)}catch{return!1}finally{await H.dispose().catch(()=>{return})}}async function QH(f={}){if(f.endpoint?.trim()){let W=await HH(f.endpoint);return W.status==="compatible"?W.url:void 0}let $=Bf(),J=await Zf($.discoveryPath);if(!J?.url)return;let H=await HH(J.url);if(H.status==="compatible")return I$(H.url,J.authToken);if(H.status==="build_mismatch")await rf($.discoveryPath).catch(()=>{return});return}async function m1(f={}){let $=await QH(f);if($&&await L0($,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return $;if(f.endpoint?.trim())return;let J=Bf();return N8(f.workspaceRoot??process.cwd()),await py(J)}async function fH(f,$){let J=new URL(f),H=$?.trim()||BQ(J);if(J.protocol==="ws:")J.protocol="http:";else if(J.protocol==="wss:")J.protocol="https:";return J.pathname="/shutdown",J.hash="",(await fetch(J,{method:"POST",headers:H?{authorization:`Bearer ${H}`}:void 0})).ok}async function sy(){let f=Bf(),$=await Zf(f.discoveryPath);if(!$?.url)return!1;try{if(await fH($.url,$.authToken))return!0}catch{}return!1}async function AQ(f){if(!JH(f.url))return;let $=Bf(),J=await Zf($.discoveryPath);if(!J?.url||!ny(J.url,f.url))return;if(!await ty(J.url,J.authToken,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return;if(!await sy())return;if(!await iy(J.url))return;return await rf($.discoveryPath).catch(()=>{return}),await m1({workspaceRoot:f.workspaceRoot,cwd:f.cwd})}import{createSessionId as RQ,HUB_CHECKPOINT_CAPABILITY as $K,HUB_COMPACTION_CAPABILITY as JK,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as HK,HUB_HOOK_CAPABILITY_PREFIX as WK,HUB_MISTAKE_LIMIT_CAPABILITY as QK,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as ZK,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as jK,isHubToolExecutorName as PK}from"@cline/shared";function oy(f){return f?JSON.parse(JSON.stringify(f)):void 0}function ey(f){return f?JSON.parse(JSON.stringify(f)):void 0}function fK(f){let $=f?.checkpoint&&typeof f.checkpoint==="object"&&!Array.isArray(f.checkpoint)?f.checkpoint:void 0,H=(Array.isArray($?.history)?$.history:[]).filter((Z)=>!!Z&&typeof Z==="object"&&!Array.isArray(Z)).flatMap((Z)=>{let j=typeof Z.ref==="string"?Z.ref.trim():"",P=Number(Z.createdAt),X=Number(Z.runCount);if(!j||!Number.isFinite(P)||!Number.isInteger(X))return[];return[{ref:j,createdAt:P,runCount:X,...Z.kind==="stash"||Z.kind==="commit"?{kind:Z.kind}:{}}]}),W=H.at(-1),Q=f?.checkpointEnabled===!0?!0:void 0;if(!Q&&H.length===0)return;return{...Q?{enabled:Q}:{},...W?{latest:W}:{},history:H}}function z0(f){let{session:$}=f,J=oy($.metadata);return{version:1,sessionId:$.sessionId,source:$.source,status:$.status,createdAt:$.startedAt,updatedAt:$.updatedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,interactive:$.interactive,workspace:{cwd:$.cwd,root:$.workspaceRoot},model:{providerId:$.provider,modelId:$.model},capabilities:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams},lineage:{...$.parentSessionId?{parentSessionId:$.parentSessionId}:{},...$.parentAgentId?{parentAgentId:$.parentAgentId}:{},...$.agentId?{agentId:$.agentId}:{},...$.conversationId?{conversationId:$.conversationId}:{},isSubagent:$.isSubagent},...$.teamName?{team:{name:$.teamName}}:{},...$.prompt?{prompt:$.prompt}:{},...J?{metadata:J}:{},...$.messagesPath?{artifacts:{messagesPath:$.messagesPath}}:{},...f.messages?{messages:ey(f.messages)}:{},...f.usage?{usage:{...f.usage}}:{},...(()=>{let H=fK(J);return H?{checkpoint:H}:{}})()}}function ZH(f){return{sessionId:f.sessionId,parentSessionId:f.lineage.parentSessionId,agentId:f.lineage.agentId,parentAgentId:f.lineage.parentAgentId,conversationId:f.lineage.conversationId,isSubagent:f.lineage.isSubagent,source:f.source,startedAt:f.createdAt,endedAt:f.endedAt??void 0,exitCode:f.exitCode??void 0,status:f.status,interactive:f.interactive,provider:f.model.providerId,model:f.model.modelId,cwd:f.workspace.cwd,workspaceRoot:f.workspace.root,teamName:f.team?.name,enableTools:f.capabilities.enableTools,enableSpawn:f.capabilities.enableSpawn,enableTeams:f.capabilities.enableTeams,prompt:f.prompt,metadata:f.metadata,updatedAt:f.updatedAt,messagesPath:f.artifacts?.messagesPath}}function g$(f){if(!f)return;return JSON.parse(JSON.stringify(f))}var XK=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function FQ(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return JSON.parse(JSON.stringify(f))}function yQ(f){if(!f)return;let{userInstructionService:$,...J}=f;return JSON.parse(JSON.stringify(J))}function KQ(f){let $=f&&typeof f==="object"&&!Array.isArray(f)?f:{};return{agentId:typeof $.agentId==="string"?$.agentId:"",conversationId:typeof $.conversationId==="string"?$.conversationId:"",iteration:typeof $.iteration==="number"?$.iteration:0,metadata:$.metadata&&typeof $.metadata==="object"&&!Array.isArray($.metadata)?$.metadata:void 0}}function W$(f,$,J){f.manifest.push($),f.handlers.set($.capabilityName,J)}function UQ(f,$){let J={manifest:[],handlers:new Map};for(let W of Object.keys($.toolExecutors??{}).filter(PK)){let Q=$.toolExecutors?.[W];if(typeof Q!=="function")continue;W$(J,{kind:"toolExecutor",executor:W,capabilityName:`${ZK}${W}`},async({payload:Z,abortSignal:j})=>{let P=Array.isArray(Z.args)?[...Z.args]:[],X={...KQ(Z.context),signal:j};return{result:await Q(...P,X)}})}for(let W of f?.extraTools??[])W$(J,{kind:"tool",name:W.name,description:W.description,inputSchema:g$(W.inputSchema)??{},...W.lifecycle?{lifecycle:g$(W.lifecycle)}:{},capabilityName:`${HK}${W.name}`},async({payload:Q,abortSignal:Z,progress:j})=>{let P={...KQ(Q.context),signal:Z};return{result:await W.execute(Q.input,{...P,emitUpdate:(V)=>{j({update:V})}})}});let H=f?.hooks;if(H)for(let W of XK){let Q=H[W];if(typeof Q!=="function")continue;W$(J,{kind:"hook",name:W,capabilityName:`${WK}${W}`},async({payload:Z})=>({control:await Q(Z.context)}))}if(f?.compaction?.compact){let W=f.compaction.compact;W$(J,{kind:"compaction",capabilityName:JK,config:FQ(f.compaction)},async({payload:Q})=>({result:await W(Q.context)}))}if(f?.checkpoint?.createCheckpoint){let W=f.checkpoint.createCheckpoint;W$(J,{kind:"checkpoint",capabilityName:$K,config:FQ(f.checkpoint)},async({payload:Q})=>({result:await W(Q.context)}))}if(f?.onConsecutiveMistakeLimitReached){let W=f.onConsecutiveMistakeLimitReached;W$(J,{kind:"mistakeLimit",capabilityName:QK},async({payload:Q})=>({result:await W(Q.context)}))}if(f?.userInstructionService){let W=f.userInstructionService;W$(J,{kind:"userInstructionService",capabilityName:jK},async()=>{return await W.start().catch(()=>{}),{snapshot:{records:{skill:W.listRecords("skill"),rule:W.listRecords("rule"),workflow:W.listRecords("workflow")},runtimeCommands:W.listRuntimeCommands()}}})}return J}function VK(f){if(typeof f==="string"&&f.trim())return f.trim();if(f instanceof Error)return f.message;if(f&&typeof f==="object"&&"message"in f){let $=f.message;if(typeof $==="string"&&$.trim())return $.trim()}return"Capability request was cancelled."}function YK(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function BK(f){return f==="completed"||f==="max_iterations"||f==="aborted"||f==="mistake_limit"||f==="error"}function AK(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f,J=typeof $.inputTokens==="number"?$.inputTokens:void 0,H=typeof $.outputTokens==="number"?$.outputTokens:void 0;if(J===void 0||H===void 0)return;return{inputTokens:J,outputTokens:H,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function RK(f){let $=f?.result&&typeof f.result==="object"&&!Array.isArray(f.result)?f.result:void 0,J=f?.reason??$?.finishReason,H=BK(J)?J:J==="failed"?"error":"completed",W=AK(f?.usage??$?.usage);return{type:"done",reason:H,text:typeof f?.text==="string"?f.text:typeof $?.text==="string"?$.text:"",iterations:typeof f?.iterations==="number"?f.iterations:typeof $?.iterations==="number"?$.iterations:0,usage:W}}function jH(f,$){return f.error?.message??`hub command failed: ${$}`}function I1(f){switch(f){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function TQ(f){let $=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):void 0;return{sessionId:f.sessionId,parentSessionId:typeof $?.parentSessionId==="string"?$.parentSessionId:void 0,agentId:f.runtimeSession?.agentId||(typeof $?.agentId==="string"?$.agentId:void 0),parentAgentId:typeof $?.parentAgentId==="string"?$.parentAgentId:void 0,conversationId:typeof $?.conversationId==="string"?$.conversationId:void 0,isSubagent:typeof $?.isSubagent==="boolean"?$.isSubagent:!1,source:typeof $?.source==="string"?$.source:Pf.CORE,pid:typeof $?.pid==="number"?$.pid:void 0,startedAt:new Date(f.createdAt).toISOString(),endedAt:I1(f.status)==="running"?void 0:new Date(f.updatedAt).toISOString(),exitCode:I1(f.status)==="completed"?0:I1(f.status)==="failed"?1:void 0,status:I1(f.status),interactive:$?.interactive===!0,provider:typeof $?.provider==="string"?$.provider:"hub",model:typeof $?.model==="string"?$.model:"hub",cwd:f.cwd?.trim()||f.workspaceRoot,workspaceRoot:f.workspaceRoot,teamName:typeof $?.teamName==="string"?$.teamName:void 0,enableTools:f.runtimeOptions?.enableTools??$?.enableTools===!0,enableSpawn:f.runtimeOptions?.enableSpawn??$?.enableSpawn===!0,enableTeams:f.runtimeOptions?.enableTeams??$?.enableTeams===!0,prompt:typeof $?.prompt==="string"?$.prompt:void 0,metadata:$,updatedAt:new Date(f.updatedAt).toISOString(),messagesPath:typeof $?.messagesPath==="string"?$.messagesPath:void 0,hookPath:typeof $?.hookPath==="string"?$.hookPath:void 0}}function Q$(f){if(!f||typeof f!=="object"||Array.isArray(f))return;let $=f;return $.version===1&&typeof $.sessionId==="string"?JSON.parse(JSON.stringify($)):void 0}function FK(f){let $=Q$(f?.snapshot);if($)return ZH($);let J=f?.session;return J?TQ(J):void 0}function GQ(f,$,J){let H=J?.workspaceRoot?.trim()||$.config.workspaceRoot||$.config.cwd;return yf.parse({version:1,session_id:f,source:$.source??Pf.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:I1(J?.status),interactive:$.interactive===!0,provider:$.config.providerId,model:$.config.modelId,cwd:J?.cwd?.trim()||$.config.cwd,workspace_root:H,team_name:$.config.teamName,enable_tools:$.config.enableTools,enable_spawn:$.config.enableSpawnAgent,enable_teams:$.config.enableAgentTeams,prompt:$.prompt?.trim()||void 0,metadata:$.sessionMetadata&&Object.keys($.sessionMetadata).length>0?$.sessionMetadata:void 0})}function hQ(f,$){return yf.parse({version:1,session_id:f.sessionId,source:f.source,pid:process.pid,started_at:f.createdAt,status:f.status,interactive:f.interactive,provider:f.model.providerId,model:f.model.modelId,cwd:f.workspace.cwd,workspace_root:f.workspace.root,team_name:f.team?.name,enable_tools:f.capabilities.enableTools,enable_spawn:f.capabilities.enableSpawn,enable_teams:f.capabilities.enableTeams,prompt:(f.prompt??$.prompt?.trim())||void 0,metadata:f.metadata,messages_path:f.artifacts?.messagesPath})}class Z${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new E1;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;constructor(f,$){this.clientContext=$,this.clientOptions={authToken:f.authToken,clientType:f.clientType??"core-hub-runtime",displayName:f.displayName??"core hub runtime",workspaceRoot:$?.workspaceRoot,cwd:$?.cwd},this.defaultCapabilities=Vf(f.capabilities)??{},this.runtimeAddress=f.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient(f.url)}createClient(f){return new J0({...this.clientOptions,url:f})}async replaceClient(f){let $=this.client;this.client=this.createClient(f),this.runtimeAddress=f,await Promise.resolve($.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock(f){if(!YQ(f,"session.create"))return!1;let $=await AQ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!$)return!1;return await this.replaceClient($),!0}registerPlannedSession(f,$,J){if(this.sessionCapabilities.set(f,$),J.size>0)this.sessionClientContributionHandlers.set(f,J);this.ensureSessionSubscription(f)}cleanupPlannedSession(f){this.sessionCapabilities.delete(f),this.sessionClientContributionHandlers.delete(f),this.disposeSessionSubscription(f)}async connect(){await this.client.connect()}async startSession(f){let $=this.resolveCapabilities(f),J=UQ(f.localRuntime,$),H=f.config.sessionId?.trim()||RQ(),W=()=>this.client.command("session.create",{workspaceRoot:f.config.workspaceRoot?.trim()||f.config.cwd,cwd:f.config.cwd,sessionConfig:g$({...f.config,sessionId:H}),metadata:{...f.sessionMetadata??{},source:f.source??Pf.CORE,provider:f.config.providerId,model:f.config.modelId,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,teamName:f.config.teamName,prompt:f.prompt,interactive:f.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...f.localRuntime?.configExtensions?{configExtensions:f.localRuntime.configExtensions}:{}},toolPolicies:g$(f.toolPolicies),initialMessages:f.initialMessages});this.registerPlannedSession(H,$,J.handlers);let Q;try{Q=await W()}catch(X){if(this.cleanupPlannedSession(H),await this.recoverLocalHubStartupDeadlock(X)){this.registerPlannedSession(H,$,J.handlers);try{Q=await W()}catch(V){throw this.cleanupPlannedSession(H),V}}else throw X}let Z=Q$(Q.payload?.snapshot),j=Q.payload?.session,P=(Z?.sessionId??j?.sessionId)?.trim();if(!P)throw this.cleanupPlannedSession(H),Error("Hub runtime did not return a session id.");if(P!==H)this.cleanupPlannedSession(H),this.registerPlannedSession(P,$,J.handlers);return{sessionId:P,manifest:Z?hQ(Z,f):GQ(P,f,j),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession(f){let $=f.sessionId.trim();if(!$)throw Error("sessionId is required");let J=f.restore?.messages!==!1;if(J&&!f.start)throw Error("start is required when restore.messages is true");let H=f.start,W=H?this.resolveCapabilities(H):void 0,Q=H?UQ(H.localRuntime,W??{}):{manifest:[],handlers:new Map},Z=H?H.config.sessionId?.trim()||RQ():void 0;if(Z&&W)this.sessionCapabilities.set(Z,W);if(Z&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(Z,Q.handlers),this.ensureSessionSubscription(Z);let j;try{j=await this.client.command("session.restore",{sessionId:$,checkpointRunCount:f.checkpointRunCount,restore:f.restore,...H?{workspaceRoot:H.config.workspaceRoot?.trim()||H.config.cwd,cwd:H.config.cwd??f.cwd,sessionConfig:g$({...H.config,sessionId:Z}),metadata:{...H.sessionMetadata??{},source:H.source??Pf.CORE,provider:H.config.providerId,model:H.config.modelId,enableTools:H.config.enableTools,enableSpawn:H.config.enableSpawnAgent,enableTeams:H.config.enableAgentTeams,teamName:H.config.teamName,prompt:H.prompt,interactive:H.interactive===!0},runtimeOptions:{...Q.manifest.length>0?{clientContributions:Q.manifest}:{},...H.localRuntime?.configExtensions?{configExtensions:H.localRuntime.configExtensions}:{}},toolPolicies:g$(H.toolPolicies)}:{}},$)}catch(A){if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw A}if(!j.ok){let A=typeof j.payload?.error==="string"?j.payload.error:"session.restore failed";if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw Error(A)}let P=Q$(j.payload?.snapshot),X=j.payload?.session,V=(P?.sessionId??X?.sessionId)?.trim();if(J&&!V){if(Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);throw Error("Hub checkpoint restore returned no session id")}if(V&&Z&&V!==Z)this.sessionCapabilities.delete(Z),this.sessionClientContributionHandlers.delete(Z),this.disposeSessionSubscription(Z);if(V&&W)this.sessionCapabilities.set(V,W);if(V&&Q.handlers.size>0)this.sessionClientContributionHandlers.set(V,Q.handlers);if(V)this.ensureSessionSubscription(V);let Y=Array.isArray(j.payload?.messages)?j.payload.messages:void 0,B=j.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:V,startResult:V?{sessionId:V,manifest:P?hQ(P,H??{}):GQ(V,H??{},X),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:Y,checkpoint:B}}async runTurn(f){return this.ensureSessionSubscription(f.sessionId),(await this.client.command("run.start",{sessionId:f.sessionId,input:f.prompt,attachments:(f.userImages?.length??0)>0||(f.userFiles?.length??0)>0?{...f.userImages?.length?{userImages:f.userImages}:{},...f.userFiles?.length?{userFiles:f.userFiles}:{}}:void 0,delivery:f.delivery,timeoutMs:f.timeoutMs},f.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.pending_prompts",{sessionId:f.sessionId},f.sessionId);return Array.isArray($.payload?.prompts)?$.payload.prompts:[]}async requestPendingPromptUpdate(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.update_pending_prompt",{...f},f.sessionId);return{sessionId:f.sessionId,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[],prompt:$.payload?.prompt,updated:$.payload?.updated===!0}}async requestPendingPromptDelete(f){this.ensureSessionSubscription(f.sessionId);let $=await this.client.command("session.remove_pending_prompt",{...f},f.sessionId);return{sessionId:f.sessionId,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[],prompt:$.payload?.prompt,removed:$.payload?.removed===!0}}async getAccumulatedUsage(f){let $=await this.client.command("session.get",{includeSnapshot:!0},f),J=Q$($.payload?.snapshot);if(J?.usage)return{...J.usage};let H=$.payload?.session;return H?.usage?{...H.usage}:void 0}async abort(f,$){await this.client.command("run.abort",{sessionId:f,reason:typeof $==="string"?$:void 0},f)}async stopSession(f){this.sessionCapabilities.delete(f),this.disposeSessionSubscription(f),await this.client.command("session.detach",{sessionId:f},f)}async dispose(){for(let[f,$]of this.sessionSubscriptions){$();try{await this.client.command("session.detach",{sessionId:f},f)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let f of this.activeCapabilityAbortControllers.values())f.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession(f){let $=await this.client.command("session.get",void 0,f);return FK($.payload)}async listSessions(f=100){let $=await this.client.command("session.list",{limit:f}),J=Array.isArray($.payload?.snapshots)?$.payload.snapshots.flatMap((W)=>{let Q=Q$(W);return Q?[ZH(Q)]:[]}):[];if(J.length>0)return J;return($.payload?.sessions??[]).map(TQ)}async listSettings(f){let $=await this.client.command("settings.list",yQ(f));if(!$.ok)throw Error(jH($,"settings.list"));return $.payload?.snapshot}async toggleSetting(f){let $=await this.client.command("settings.toggle",yQ(f));if(!$.ok)throw Error(jH($,"settings.toggle"));return{snapshot:$.payload?.snapshot,changedTypes:Array.isArray($.payload?.changedTypes)?$.payload.changedTypes:[]}}async deleteSession(f){return this.sessionCapabilities.delete(f),this.disposeSessionSubscription(f),(await this.client.command("session.delete",{sessionId:f})).payload?.deleted===!0}async updateSession(f,$){let J={...$.metadata??{}};if(typeof $.prompt==="string")J.prompt=$.prompt;if(typeof $.title==="string")J.title=$.title;return{updated:(await this.client.command("session.update",{sessionId:f,metadata:J})).ok}}async readSessionMessages(f){let $=f.trim();if(!$)return[];let J=await this.client.command("session.messages",{sessionId:$},$);if(!J.ok)throw Error(jH(J,"session.messages"));let H=J.payload?.messages;return Array.isArray(H)?H:[]}async dispatchHookEvent(f){await this.client.command("session.hook",{payload:f})}subscribe(f,$){return this.events.subscribe(f,$)}ensureSessionSubscription(f){let $=f.trim();if(!$||this.sessionSubscriptions.has($))return;let J=this.client.subscribe((H)=>{this.handleHubEvent(H)},{sessionId:$});this.sessionSubscriptions.set($,typeof J==="function"?J:()=>{})}disposeSessionSubscription(f){let $=f.trim();if(!$)return;this.sessionSubscriptions.get($)?.(),this.sessionSubscriptions.delete($),this.agentDoneEmittedForCurrentRunBySession.delete($)}resolveCapabilities(f){return Vf(this.defaultCapabilities,f.capabilities)??{}}emitToolCallContentStart(f){this.events.emit({type:"agent_event",payload:{sessionId:f.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:f.toolCallId,toolName:f.toolName,input:f.toolInput}}})}emitAgentDoneIfNeeded(f){if(this.agentDoneEmittedForCurrentRunBySession.has(f.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add(f.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:f.sessionId,event:RK(f.payload)}})}handleHubEvent(f){let $=f.sessionId?.trim();if(f.event==="capability.requested"){this.handleCapabilityRequest(f);return}if(f.event==="capability.resolved"){this.handleCapabilityResolved(f);return}if(f.event==="approval.requested"){this.handleApprovalRequested(f);return}if(!$)return;switch(f.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete($);let J=Q$(f.payload?.snapshot),H=f.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:$,status:H?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"iteration_start",iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"iteration_end",iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0,hadToolCalls:f.payload?.hadToolCalls===!0,toolCallCount:typeof f.payload?.toolCallCount==="number"?f.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof f.payload?.text==="string"?f.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"text",text:typeof f.payload?.text==="string"?f.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof f.payload?.text==="string"?f.payload.text:"",H=f.payload?.redacted===!0;if(!J&&!H)return;this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:H}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"reasoning",reasoning:typeof f.payload?.reasoning==="string"?f.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:$,payload:f.payload});return}case"tool.started":{let J=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:$,toolCallId:J,toolName:typeof f.payload?.toolName==="string"?f.payload.toolName:void 0,toolInput:f.payload?.input});return}case"tool.finished":{let J=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:$,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof f.payload?.toolName==="string"?f.payload.toolName:void 0,output:f.payload?.output,error:typeof f.payload?.error==="string"?f.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=Q$(f.payload?.snapshot),H=f.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:$,status:H?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:$,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=f.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:$,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=typeof f.payload?.reason==="string"?f.payload.reason:f.event==="run.aborted"?"aborted":f.event==="run.failed"?"error":"completed";this.emitAgentDoneIfNeeded({sessionId:$,payload:{...f.payload,reason:J}}),this.events.emit({type:"ended",payload:{sessionId:$,reason:J,ts:f.timestamp??Date.now()}});return}default:return}}async handleCapabilityRequest(f){let $=f.sessionId?.trim();if(!$)return;let J=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let H=typeof f.payload?.requestId==="string"?f.payload.requestId:"",W=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName:"";if(!H)return;let Q=this.sessionClientContributionHandlers.get($)?.get(W);if(!Q){await this.client.command("capability.respond",{requestId:H,ok:!1,error:`No client contribution handler registered for capability ${W} in session ${$}.`},$).catch(()=>{});return}let Z=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=new AbortController;this.activeCapabilityAbortControllers.set(H,j);let P=(X)=>{this.client.command("capability.progress",{requestId:H,payload:X},$)};try{let X=await Q({payload:Z,abortSignal:j.signal,progress:P});if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:H,ok:!0,payload:X},$)}catch(X){if(j.signal.aborted)return;await this.client.command("capability.respond",{requestId:H,ok:!1,error:X instanceof Error?X.message:String(X)},$)}finally{this.activeCapabilityAbortControllers.delete(H)}}handleCapabilityResolved(f){if(f.payload?.cancelled!==!0)return;let $=typeof f.payload.requestId==="string"?f.payload.requestId.trim():"";if(!$)return;let J=this.activeCapabilityAbortControllers.get($);if(!J)return;J.abort(VK(f.payload.error))}async handleApprovalRequested(f){let $=f.sessionId?.trim();if(!$)return;let J=this.sessionCapabilities.get($)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let H=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"",W=typeof f.payload?.toolCallId==="string"?f.payload.toolCallId:"",Q=typeof f.payload?.toolName==="string"?f.payload.toolName:"";if(!H||!W||!Q)return;let Z=f.payload?.policy&&typeof f.payload.policy==="object"&&!Array.isArray(f.payload.policy)?f.payload.policy:{autoApprove:!1},j=YK(f.payload?.inputJson);this.pendingApprovalToolCallIds.add(W),this.emitToolCallContentStart({sessionId:$,toolCallId:W,toolName:Q,toolInput:j});let P=await Promise.resolve(J({sessionId:$,agentId:typeof f.payload?.agentId==="string"?f.payload.agentId:"",conversationId:typeof f.payload?.conversationId==="string"?f.payload.conversationId:$,iteration:typeof f.payload?.iteration==="number"?f.payload.iteration:0,toolCallId:W,toolName:Q,input:j,policy:Z})).catch((X)=>({approved:!1,reason:X instanceof Error?X.message:`Tool approval request failed: ${String(X)}`}));await this.client.command("approval.respond",{approvalId:H,approved:P.approved,reason:P.reason},$).catch(()=>{})}}class b8 extends Z${constructor(f){super({url:x$(f.endpoint),authToken:f.authToken,clientType:f.clientType??"core-remote-runtime",displayName:f.displayName??"core remote runtime",capabilities:f.capabilities},{workspaceRoot:f.workspaceRoot,cwd:f.cwd})}}import{existsSync as yK,mkdirSync as KK}from"node:fs";import{join as UK}from"node:path";import{asBool as x1,asOptionalString as lf,asString as H0,ensureSessionSchema as GK,loadSqliteDb as hK,nowIso as w8,toBoolInt as g1}from"@cline/shared/db";import{resolveDbDataDir as TK}from"@cline/shared/storage";class O0{sessionsDirPath;db;constructor(f={}){this.sessionsDirPath=f.sessionsDir??TK()}init(){this.getRawDb()}ensureSessionsDir(){if(!yK(this.sessionsDirPath))KK(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return UK(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let f=hK(this.sessionDbPath());return GK(f,{includeLegacyMigrations:!0}),this.db=f,f}close(){this.db?.close?.(),this.db=void 0}run(f,$=[]){return this.getRawDb().prepare(f).run(...$)}queryOne(f,$=[]){return this.getRawDb().prepare(f).get(...$)??void 0}queryAll(f,$=[]){return this.getRawDb().prepare(f).all(...$)}create(f){let $=w8();this.run(`INSERT OR REPLACE INTO sessions (
432
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
433
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
434
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
435
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
436
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,f.endedAt??null,f.exitCode??null,f.status,0,g1(f.interactive),f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,g1(f.enableTools),g1(f.enableSpawn),g1(f.enableTeams),f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,g1(f.isSubagent),f.prompt??null,f.metadata?JSON.stringify(f.metadata):null,"",f.hookPath??"",f.messagesPath??null,$])}update(f){let $=[],J=[];if(f.endedAt!==void 0)$.push("ended_at = ?"),J.push(f.endedAt);if(f.exitCode!==void 0)$.push("exit_code = ?"),J.push(f.exitCode);if(f.status!==void 0)$.push("status = ?"),J.push(f.status);if(f.prompt!==void 0)$.push("prompt = ?"),J.push(f.prompt);if(f.metadata!==void 0)$.push("metadata_json = ?"),J.push(f.metadata?JSON.stringify(f.metadata):null);if(f.parentSessionId!==void 0)$.push("parent_session_id = ?"),J.push(f.parentSessionId);if(f.parentAgentId!==void 0)$.push("parent_agent_id = ?"),J.push(f.parentAgentId);if(f.agentId!==void 0)$.push("agent_id = ?"),J.push(f.agentId);if(f.conversationId!==void 0)$.push("conversation_id = ?"),J.push(f.conversationId);if($.length===0)return;$.push("updated_at = ?"),J.push(w8()),J.push(f.sessionId),this.run(`UPDATE sessions SET ${$.join(", ")} WHERE session_id = ?`,J)}updateStatus(f,$,J){this.update({sessionId:f,status:$,endedAt:$==="running"?null:w8(),exitCode:$==="running"?null:J??($==="failed"?1:0)})}get(f){let $=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
437
+ provider, model, cwd, workspace_root, team_name,
438
+ enable_tools, enable_spawn, enable_teams,
439
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
440
+ prompt, metadata_json, hook_path, messages_path, updated_at
441
+ FROM sessions WHERE session_id = ?`,[f]);if(!$)return;return{sessionId:H0($.session_id),source:H0($.source),pid:Number($.pid??0),startedAt:H0($.started_at),endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:H0($.status),interactive:x1($.interactive),provider:H0($.provider),model:H0($.model),cwd:H0($.cwd),workspaceRoot:H0($.workspace_root),teamName:lf($.team_name),enableTools:x1($.enable_tools),enableSpawn:x1($.enable_spawn),enableTeams:x1($.enable_teams),parentSessionId:lf($.parent_session_id),parentAgentId:lf($.parent_agent_id),agentId:lf($.agent_id),conversationId:lf($.conversation_id),isSubagent:x1($.is_subagent),prompt:lf($.prompt),metadata:(()=>{let J=lf($.metadata_json);if(!J)return;try{let H=JSON.parse(J);if(H&&typeof H==="object"&&!Array.isArray(H))return H}catch{}return})(),hookPath:lf($.hook_path),messagesPath:lf($.messages_path),updatedAt:lf($.updated_at)??w8()}}list(f=200){let $=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[f]),J=[];for(let H of $){let W=this.get(H0(H.session_id));if(W)J.push(W)}return J}delete(f,$=!1){let J=this.run("DELETE FROM sessions WHERE session_id = ?",[f]).changes??0;if($)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[f]);return J>0}}C8();import{existsSync as DH,mkdirSync as XU,readFileSync as EQ,renameSync as VU,writeFileSync as YU}from"node:fs";import{join as SQ}from"node:path";import{resolveSessionDataDir as BU}from"@cline/shared/storage";import{dirname as jU}from"node:path";import{nanoid as PU}from"nanoid";import{execFile as SK}from"node:child_process";import{promisify as kK}from"node:util";var mK=kK(SK);function PH(f,$){f?.log($,{severity:"warn"})}function IK(f){let $=f?.checkpoint;if(!$||typeof $!=="object"||Array.isArray($))return;let J=$;if(!J.latest||!Array.isArray(J.history))return;let H=J.latest,W=J.history.filter((Q)=>!!Q&&typeof Q==="object"&&typeof Q.ref==="string"&&typeof Q.createdAt==="number"&&typeof Q.runCount==="number");if(typeof H.ref!=="string"||typeof H.createdAt!=="number"||typeof H.runCount!=="number")return;return{latest:H,history:W}}async function P$(f,$){let J=await mK("git",["-C",f,...$],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function XH(f,$){if(!f)return;let J=`refs/cline/checkpoints/${$}/`;try{let{stdout:H}=await P$(f,["for-each-ref","--format=%(refname)",J]),W=H.trim().split(`
442
+ `).filter(Boolean);await Promise.allSettled(W.map((Q)=>P$(f,["update-ref","-d",Q])))}catch{}}async function DQ(f,$,J){if(!f||J.length===0)return;await Promise.allSettled(J.map((H)=>P$(f,["update-ref",`refs/cline/checkpoints/${$}/${H.runCount}`,H.ref])))}function xK(f,$){let J=f.findIndex((H)=>H.runCount===$.runCount);if(J<0)return[...f,$];return f.map((H,W)=>W===J?$:H)}function MQ(f){let $=f.initialRunCount??0,J,H=async()=>{if(J!==void 0)return J;try{J=(await P$(f.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},W=async()=>{if(f.createCheckpoint)return await f.createCheckpoint({cwd:f.cwd,sessionId:f.sessionId,runCount:$});if(!await H())return;let Q=async(X)=>{try{let Y=(await P$(f.cwd,["rev-parse","HEAD"])).stdout.trim();if(!Y)return;return{ref:Y,createdAt:Date.now(),runCount:$,kind:"commit"}}catch(V){PH(f.logger,`${X}: ${V instanceof Error?V.message:String(V)}`);return}},Z=`cline checkpoint session=${f.sessionId} run=${$}`,j="";try{j=(await P$(f.cwd,["stash","create",Z])).stdout.trim()}catch(X){return PH(f.logger,`Checkpoint snapshot failed: ${X instanceof Error?X.message:String(X)}`),Q("Checkpoint HEAD fallback failed")}if(!j)return Q("Checkpoint HEAD fallback failed");let P=`refs/cline/checkpoints/${f.sessionId}/${$}`;try{await P$(f.cwd,["update-ref",P,j])}catch(X){PH(f.logger,`Checkpoint store failed: ${X instanceof Error?X.message:String(X)}`);return}return{ref:j,createdAt:Date.now(),runCount:$,kind:"stash"}};return{beforeRun:async({snapshot:Q})=>{if(Q.parentAgentId!=null)return;$+=1;return},beforeModel:async({snapshot:Q})=>{if(Q.parentAgentId!=null||Q.iteration!==1||$<1)return;let Z=await W();if(!Z)return;let j=await f.readSessionMetadata(),P=IK(j);if(P?.latest.ref===Z.ref)return;let X=xK(P?.history??[],Z);await f.writeSessionMetadata({...j??{},checkpoint:{latest:Z,history:X}});return}}}import{existsSync as S8,mkdirSync as gK,readdirSync as vK,rmdirSync as uK,rmSync as cK,unlinkSync as dK}from"node:fs";import{dirname as _Q,join as E8}from"node:path";function n(){return new Date().toISOString()}function v1(f){if(!f||!S8(f))return;try{dK(f)}catch{}}function rK(f){let $=b1(f);if($)return{rootSessionId:$.rootSessionId,fileStem:`${$.agentId}__${$.teamTaskId}`};let J=D8(f);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:f,fileStem:f}}class VH{ensureSessionsDir;constructor(f){this.ensureSessionsDir=f}sessionArtifactsDir(f){return E8(this.ensureSessionsDir(),f)}ensureSessionArtifactsDir(f){let $=this.sessionArtifactsDir(f);if(!S8($))gK($,{recursive:!0});return $}sessionMessagesPath(f){return E8(this.sessionArtifactsDir(f),`${f}.messages.json`)}sessionManifestPath(f,$=!1){let J=$?this.ensureSessionArtifactsDir(f):this.sessionArtifactsDir(f);return E8(J,`${f}.json`)}removeSessionDirIfEmpty(f){let $=this.sessionArtifactsDir(f),J=this.ensureSessionsDir();while($.startsWith(J)&&$!==J){if(!S8($)){$=_Q($);continue}try{if(vK($).length>0)break;uK($)}catch{break}$=_Q($)}}removeSessionDir(f){this.removeDir(this.sessionArtifactsDir(f))}removeDir(f){if(!S8(f))return;try{cK(f,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths(f,$,J){let{rootSessionId:H,fileStem:W}=rK(f),Q=this.sessionArtifactsDir(H);return{messagesPath:E8(Q,`${W}.messages.json`)}}}import{appendFileSync as lK,existsSync as pK,mkdirSync as LQ,readFileSync as iK,writeFileSync as zQ}from"node:fs";import{dirname as OQ,join as nK}from"node:path";import{ensureHookLogDir as aK}from"@cline/shared/storage";class YH{adapter;messagesArtifactUploader;artifacts;constructor(f,$){this.adapter=f;this.messagesArtifactUploader=$;this.artifacts=new VH(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile(f,$,J){E7($,J,rJ(f))}writeSessionManifest(f,$){LQ(OQ(f),{recursive:!0}),zQ(f,`${JSON.stringify(yf.parse($),null,2)}
443
+ `,"utf8")}readSessionManifest(f){return this.readManifestFile(f).manifest}readManifestFile(f){let $=this.artifacts.sessionManifestPath(f,!1);if(!pK($))return{path:$};try{return{path:$,manifest:yf.parse(JSON.parse(iK($,"utf8")))}}catch{return{path:$}}}async resolveArtifactPath(f,$,J){let W=(await this.adapter.getSession(f))?.[$];return typeof W==="string"&&W.trim().length>0?W:J(f)}async persistSessionMessages(f,$,J){let H=await this.resolveArtifactPath(f,"messagesPath",(Z)=>this.artifacts.sessionMessagesPath(Z)),W=lJ({updatedAt:n(),context:rJ(f),messages:$,systemPrompt:J}),Q=`${JSON.stringify(W,null,2)}
444
+ `;if(LQ(OQ(H),{recursive:!0}),zQ(H,Q,"utf8"),!this.messagesArtifactUploader)return;try{let Z=await this.adapter.getSession(f);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:f,path:H,contents:Q,row:Z})}catch(Z){console.warn(`Failed to upload persisted session messages for ${f}`,Z)}}appendStaleSessionHookLog(f,$,J,H,W){let Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??nK(aK(),"hooks.jsonl");lK(Z,`${JSON.stringify({ts:f,hookName:"session_shutdown",reason:H,sessionId:$,pid:J,source:W})}
445
+ `,"utf8")}}import{appendFileSync as tK}from"node:fs";import{join as sK}from"node:path";import{resolveRootSessionId as NQ}from"@cline/shared";import{ensureHookLogDir as oK}from"@cline/shared/storage";import{z as BH}from"zod";var eK="subagent",fU=BH.looseObject({task:BH.string().optional(),systemPrompt:BH.string().optional()});class k8{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor(f,$,J,H){this.adapter=f;this.manifestStore=$;this.toPersistedMessages=J;this.heartbeatLogIntervalMs=H}teamTaskQueueKey(f,$){return`${f}::${$}`}activeTeamTaskSessionId(f,$){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey(f,$))?.at(-1)}buildSubsessionRow(f,$){return{sessionId:$.sessionId,source:eK,pid:process.ppid,startedAt:$.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspaceRoot,teamName:f.teamName??null,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,parentSessionId:$.parentSessionId,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId??null,isSubagent:!0,prompt:$.prompt,metadata:C1({prompt:$.prompt}),hookPath:"",messagesPath:$.messagesPath,updatedAt:$.startedAt}}async queueSpawnRequest(f){if(f.hookName!=="tool_call"||f.parent_agent_id!==null)return;if(f.tool_call?.name!=="spawn_agent")return;let $=NQ(f.sessionContext);if(!$)return;let J=fU.safeParse(f.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:$,parentAgentId:f.agent_id,task:J.success?J.data.task:void 0,systemPrompt:J.success?J.data.systemPrompt:void 0})}async upsertSubagentSession(f){let $=f.rootSessionId;if(!$)return;let J=await this.adapter.getSession($);if(!J)return;let H=T8($,f.agentId),W=await this.adapter.getSession(H),Q=n(),Z=this.manifestStore.artifacts.subagentArtifactPaths(H,f.agentId,this.activeTeamTaskSessionId($,f.parentAgentId)),j=f.prompt??W?.prompt??void 0;if(!j)j=await this.adapter.claimSpawnRequest($,f.parentAgentId)??`Subagent run by ${f.parentAgentId}`;if(!W)return await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:H,parentSessionId:$,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId,prompt:j,startedAt:Q,...Z})),this.manifestStore.initializeMessagesFile(H,Z.messagesPath,Q),H;return await this.adapter.updateSession({sessionId:H,setRunning:!0,parentSessionId:$,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId,prompt:W.prompt??j??null,metadata:C1({metadata:W.metadata??void 0,prompt:W.prompt??j??null}),expectedStatusLock:W.statusLock}),H}async upsertSubagentSessionFromHook(f){if(!f.parent_agent_id)return;let $=NQ(f.sessionContext);if(!$)return;if(f.hookName==="session_shutdown"){let J=T8($,f.agent_id);return await this.adapter.getSession(J)?J:void 0}return await this.upsertSubagentSession({agentId:f.agent_id,parentAgentId:f.parent_agent_id,conversationId:f.taskId,rootSessionId:$})}async applySubagentStatus(f,$){await this.applySubagentStatusBySessionId(f,vJ($))}async applySubagentStatusBySessionId(f,$){let J=await this.adapter.getSession(f);if(!J)return;let H=$==="running"?null:n(),W=$==="running"?null:$==="failed"?1:0;await this.adapter.updateSession({sessionId:f,status:$,endedAt:H,exitCode:W,expectedStatusLock:J.statusLock})}async applyStatusToRunningChildSessions(f,$){if(!f)return;let J=await this.adapter.listSessions({limit:2000,parentSessionId:f,status:"running"});for(let H of J)await this.applySubagentStatusBySessionId(H.sessionId,$)}async onTeamTaskStart(f,$,J){let H=await this.adapter.getSession(f);if(!H)return;let W=gJ(f,$),Q=n(),{messagesPath:Z}=this.manifestStore.artifacts.subagentArtifactPaths(W,$);await this.adapter.upsertSession(this.buildSubsessionRow(H,{sessionId:W,parentSessionId:f,parentAgentId:"lead",agentId:$,prompt:J||`Team task for ${$}`,startedAt:Q,messagesPath:Z})),this.manifestStore.initializeMessagesFile(W,Z,Q);let j=this.teamTaskQueueKey(f,$),P=this.teamTaskSessionsByAgent.get(j)??[];P.push(W),this.teamTaskSessionsByAgent.set(j,P)}async onTeamTaskEnd(f,$,J,H,W,Q){let Z=this.teamTaskQueueKey(f,$),j=this.teamTaskSessionsByAgent.get(Z);if(!j||j.length===0)return;let P=j.shift();if(j.length===0)this.teamTaskSessionsByAgent.delete(Z);if(!P)return;let X=W?.messages??Q,V=this.toPersistedMessages(X,W,Q);if(V)await this.manifestStore.persistSessionMessages(P,V);await this.applySubagentStatusBySessionId(P,J),this.teamTaskLastHeartbeatBySession.delete(P),this.teamTaskLastProgressLineBySession.delete(P)}async onTeamTaskProgress(f,$,J,H){let W=this.teamTaskQueueKey(f,$),Q=this.teamTaskSessionsByAgent.get(W)?.[0];if(!Q)return;let Z=J.trim();if(!Z)return;let j=H?.kind??"progress";if(j==="heartbeat"){let X=Date.now(),V=this.teamTaskLastHeartbeatBySession.get(Q)??0;if(X-V<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(Q,X)}let P=j==="heartbeat"?"[progress] heartbeat":j==="text"?`[progress] text: ${Z}`:`[progress] ${Z}`;if(this.teamTaskLastProgressLineBySession.get(Q)===P)return;this.teamTaskLastProgressLineBySession.set(Q,P)}async handleSubAgentStart(f,$){let J=await this.upsertSubagentSession({agentId:$.subAgentId,parentAgentId:$.parentAgentId,conversationId:$.conversationId,prompt:$.input.task,rootSessionId:f});if(!J)return;await this.applySubagentStatusBySessionId(J,"running")}async handleSubAgentEnd(f,$){let J=await this.upsertSubagentSession({agentId:$.subAgentId,parentAgentId:$.parentAgentId,conversationId:$.conversationId,prompt:$.input.task,rootSessionId:f});if(!J)return;if($.error){await this.applySubagentStatusBySessionId(J,"failed");return}let H=$.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(J,H==="aborted"?"cancelled":"completed")}appendSubagentHookAudit(f){let J=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??sK(oK(),"hooks.jsonl");tK(J,`${JSON.stringify({ts:n(),...f})}
446
+ `,"utf8")}}import{formatUserInputBlock as ZU}from"@cline/shared";function pf(){return new Date().toISOString()}function qQ(f,$){if($<=0)return 0;return Math.round(f/$*100)}function $U(f,$){let J=new Set;for(let W of $)if(W.status==="reviewed")J.add(`${W.outcomeId}:${W.section}`);let H=new Set;for(let W of f){if(W.status==="finalized")continue;for(let Q of W.requiredSections)if(!J.has(`${W.id}:${Q}`))H.add(`${W.id}:${Q}`)}return[...H].sort((W,Q)=>W.localeCompare(Q))}function m8(f,$){let J={idle:0,running:0,stopped:0},H={pending:0,in_progress:0,blocked:0,completed:0},W={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},Q={draft:0,in_review:0,finalized:0},Z={draft:0,reviewed:0,rejected:0},j=0,P=0;for(let y of $.members)if(J[y.status]+=1,y.role==="lead")j+=1;else P+=1;let X=[],V=[],Y=$.tasks.filter((y)=>y.status==="completed").length,B=new Map($.tasks.map((y)=>[y.id,y]));for(let y of $.tasks){if(H[y.status]+=1,y.status==="blocked"){X.push(y.id);continue}if(y.status!=="pending")continue;if(y.dependsOn.every((K)=>{return B.get(K)?.status==="completed"}))V.push(y.id)}let A=[],R,U=0;for(let y of $.runs){if(W[y.status]+=1,y.status==="queued"||y.status==="running")A.push(y.id);let F=y.startedAt.getTime();if(F>=U)U=F,R=y.id}for(let y of $.outcomes)Q[y.status]+=1;for(let y of $.outcomeFragments)Z[y.status]+=1;return{teamName:f,updatedAt:pf(),members:{total:$.members.length,byStatus:J,leadCount:j,teammateCount:P},tasks:{total:$.tasks.length,byStatus:H,blockedTaskIds:X,readyTaskIds:V,completionPct:qQ(Y,$.tasks.length)},runs:{total:$.runs.length,byStatus:W,activeRunIds:A,latestRunId:R},outcomes:{total:$.outcomes.length,byStatus:Q,finalizedPct:qQ(Q.finalized,$.outcomes.length),missingRequiredSections:$U($.outcomes,$.outcomeFragments)},fragments:{total:$.outcomeFragments.length,byStatus:Z}}}function I8(f){let{event:$}=f;switch($.type){case"team_task_updated":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),taskId:$.task.id,agentId:$.task.assignee??$.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),runId:$.run.id,taskId:$.run.taskId,agentId:$.run.agentId,message:$.run.error};case"run_progress":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),runId:$.run.id,taskId:$.run.taskId,agentId:$.run.agentId,message:$.message};case"outcome_created":case"outcome_finalized":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),outcomeId:$.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),outcomeId:$.fragment.outcomeId,fragmentId:$.fragment.id,agentId:$.fragment.sourceAgentId};case"team_message":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),taskId:$.message.taskId,agentId:$.message.fromAgentId,message:$.message.subject};case"team_mission_log":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),taskId:$.entry.taskId,agentId:$.entry.agentId,message:$.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf(),agentId:$.agentId}}return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:pf()}}import{sanitizeFileName as JU,TeamMessageType as N}from"@cline/shared";import{nanoid as HU}from"nanoid";import{TeamMessageType as mw}from"@cline/shared";function AH(f){if(typeof DOMException<"u"&&f instanceof DOMException&&f.name==="AbortError")return!0;if(!(f instanceof Error))return!1;return f.name==="AbortError"||f.message.toLowerCase().includes("aborted")}function bQ(f,$){return f?.status==="stopped"&&AH($)}var WU=600000,wQ="recovered_queued";function QU(f){return`This is an automatic recovery of interrupted team run ${f.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
447
+
448
+ ${f.message}`}class RH{agents=new Map;configs=new Map;onTeamEvent;constructor(f,$){if(this.onTeamEvent=$,f)for(let[J,H]of Object.entries(f))this.addAgent(J,H)}addAgent(f,$){if(this.agents.has(f))throw Error(`Agent with id "${f}" already exists in the team`);let J={...$,onEvent:(W)=>{$.onEvent?.(W),this.emitEvent({type:N.AgentEvent,agentId:f,event:W})}},H=new G0(J);if(J.onEvent)H.subscribeEvents(J.onEvent);this.agents.set(f,H),this.configs.set(f,$)}removeAgent(f){return this.configs.delete(f),this.agents.delete(f)}getAgent(f){return this.agents.get(f)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo(f,$){let J=this.agents.get(f);if(!J)throw Error(`Agent "${f}" not found in team`);this.emitEvent({type:N.TaskStart,agentId:f,message:$});try{let H=await J.run($);return this.emitEvent({type:N.TaskEnd,agentId:f,result:H}),H}catch(H){let W=H instanceof Error?H:Error(String(H));throw this.emitEvent({type:N.TaskEnd,agentId:f,error:W,messages:J.getMessages()}),H}}async continueTo(f,$){let J=this.agents.get(f);if(!J)throw Error(`Agent "${f}" not found in team`);this.emitEvent({type:N.TaskStart,agentId:f,message:$});try{let H=await J.continue($);return this.emitEvent({type:N.TaskEnd,agentId:f,result:H}),H}catch(H){let W=H instanceof Error?H:Error(String(H));throw this.emitEvent({type:N.TaskEnd,agentId:f,error:W,messages:J.getMessages()}),H}}async runParallel(f){let $=f.map(async(J)=>{let H=this.agents.get(J.agentId);if(!H)return{agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata};this.emitEvent({type:N.TaskStart,agentId:J.agentId,message:J.message});try{let W=await H.run(J.message);return this.emitEvent({type:N.TaskEnd,agentId:J.agentId,result:W}),{agentId:J.agentId,result:W,metadata:J.metadata}}catch(W){let Q=W instanceof Error?W:Error(String(W));return this.emitEvent({type:N.TaskEnd,agentId:J.agentId,error:Q,messages:H.getMessages()}),{agentId:J.agentId,result:void 0,error:Q,metadata:J.metadata}}});return Promise.all($)}async runSequential(f){let $=[];for(let J of f){let H=this.agents.get(J.agentId);if(!H){$.push({agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata});continue}this.emitEvent({type:N.TaskStart,agentId:J.agentId,message:J.message});try{let W=await H.run(J.message);this.emitEvent({type:N.TaskEnd,agentId:J.agentId,result:W}),$.push({agentId:J.agentId,result:W,metadata:J.metadata})}catch(W){let Q=W instanceof Error?W:Error(String(W));this.emitEvent({type:N.TaskEnd,agentId:J.agentId,error:Q,messages:H.getMessages()}),$.push({agentId:J.agentId,result:void 0,error:Q,metadata:J.metadata})}}return $}async runPipeline(f,$,J){let H=[],W=$;for(let Q of f){let Z=this.agents.get(Q);if(!Z){H.push({agentId:Q,result:void 0,error:Error(`Agent "${Q}" not found in team`)});break}this.emitEvent({type:N.TaskStart,agentId:Q,message:W});try{let j=await Z.run(W);this.emitEvent({type:N.TaskEnd,agentId:Q,result:j}),H.push({agentId:Q,result:j});let P=f.indexOf(Q)+1;if(P<f.length){let X=f[P];W=J?J(j,X):`Previous agent output:
449
+ ${j.text}
450
+
451
+ Please continue from here.`}}catch(j){let P=j instanceof Error?j:Error(String(j));this.emitEvent({type:N.TaskEnd,agentId:Q,error:P,messages:Z.getMessages()}),H.push({agentId:Q,result:void 0,error:P});break}}return H}abortAll(){for(let f of this.agents.values())f.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent(f){try{this.onTeamEvent?.(f)}catch{}}}class u1{teamId;teamName;onTeamEvent;members=new Map;tasks=new Map;missionLog=[];mailbox=[];missionStepCounter=0;taskCounter=0;messageCounter=0;missionCounter=0;runCounter=0;outcomeCounter=0;outcomeFragmentCounter=0;runs=new Map;runQueue=[];queuedRunDispatchTimer;outcomes=new Map;outcomeFragments=new Map;missionLogIntervalSteps;missionLogIntervalMs;maxConcurrentRuns;constructor(f){this.teamName=f.teamName,this.teamId=`t_${JU(HU(10))}`,this.onTeamEvent=f.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,f.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,f.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,f.maxConcurrentRuns??2);let $=f.leadAgentId??"lead";this.members.set($,{agentId:$,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole(f){return this.members.get(f)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter((f)=>f.role==="teammate").map((f)=>f.agentId)}getTask(f){return this.tasks.get(f)}listTasks(){return Array.from(this.tasks.values())}listTaskItems(f){return Array.from(this.tasks.values()).map(($)=>{let J=this.getUnresolvedDependencies($);return{...$,blockedBy:J,isReady:$.status==="pending"&&!$.assignee&&J.length===0}}).filter(($)=>{if(f?.status&&$.status!==f.status)return!1;if(f?.assignee&&$.assignee!==f.assignee)return!1;return!0})}listMissionLog(f){if(!f||f<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-f))}listMailbox(f,$){let J=$?.unreadOnly??!0,H=$?.markRead??!0,W=$?.limit,Q=this.mailbox.filter((j)=>j.toAgentId===f&&(!J||!j.readAt)),Z=typeof W==="number"&&W>0?Q.slice(Math.max(0,Q.length-W)):Q;if(H){let j=new Date;for(let P of Z)if(!P.readAt)P.readAt=j}return Z.map((j)=>({...j}))}getSnapshot(){let f={pending:0,in_progress:0,blocked:0,completed:0};for(let J of this.tasks.values())f[J.status]++;let $={draft:0,in_review:0,finalized:0};for(let J of this.outcomes.values())$[J.status]++;return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((J)=>({agentId:J.agentId,role:J.role,description:J.description,status:J.status})),taskCounts:f,unreadMessages:this.mailbox.filter((J)=>!J.readAt).length,missionLogEntries:this.missionLog.length,activeRuns:Array.from(this.runs.values()).filter((J)=>J.status==="running").length,queuedRuns:Array.from(this.runs.values()).filter((J)=>J.status==="queued").length,outcomeCounts:$}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map((f)=>({agentId:f.agentId,role:f.role,description:f.description,status:f.status})),tasks:Array.from(this.tasks.values()).map((f)=>({...f})),mailbox:this.mailbox.map((f)=>({...f})),missionLog:this.missionLog.map((f)=>({...f})),runs:Array.from(this.runs.values()).map((f)=>({...f})),outcomes:Array.from(this.outcomes.values()).map((f)=>({...f})),outcomeFragments:Array.from(this.outcomeFragments.values()).map((f)=>({...f}))}}hydrateState(f){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let J of f.tasks)this.tasks.set(J.id,{...J});this.mailbox.length=0,this.mailbox.push(...f.mailbox.map((J)=>({...J}))),this.missionLog.length=0,this.missionLog.push(...f.missionLog.map((J)=>({...J}))),this.runs.clear();for(let J of f.runs??[])this.runs.set(J.id,{...J});this.runQueue.length=0,this.runQueue.push(...Array.from(this.runs.values()).filter((J)=>J.status==="queued").map((J)=>J.id)),this.outcomes.clear();for(let J of f.outcomes??[])this.outcomes.set(J.id,{...J});this.outcomeFragments.clear();for(let J of f.outcomeFragments??[])this.outcomeFragments.set(J.id,{...J});let $=Array.from(this.members.values()).filter((J)=>J.role==="lead");this.members.clear();for(let J of $)this.members.set(J.agentId,{...J,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let J of f.members){if(J.role!=="teammate")continue;this.members.set(J.agentId,{agentId:J.agentId,role:"teammate",description:J.description,status:"stopped",agent:void 0,runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()})}this.taskCounter=Math.max(this.taskCounter,v$(f.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,v$(f.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,v$(f.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,v$((f.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,v$((f.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,v$((f.outcomeFragments??[]).map((J)=>J.id),"frag_"))}isTeammateActive(f){let $=this.members.get(f);return!!$&&$.role==="teammate"&&!!$.agent}spawnTeammate({agentId:f,config:$}){let J=this.members.get(f);if(J&&J.role!=="teammate")throw Error(`Team member "${f}" already exists and is not a teammate`);if(J&&J.runningCount>0)throw Error(`Teammate "${f}" is currently running and cannot be respawned`);let H={...$,apiTimeoutMs:WU,consumePendingUserMessage:()=>{let Z=this.members.get(f);if(!Z||!Z.pendingSteerMessage)return;let j=Z.pendingSteerMessage;return Z.pendingSteerMessage=void 0,j},onEvent:(Z)=>{$.onEvent?.(Z),this.emitEvent({type:N.AgentEvent,agentId:f,event:Z}),this.trackMeaningfulEvent(f,Z)}},W=new G0(H);if(H.onEvent)W.subscribeEvents(H.onEvent);let Q={agentId:f,role:"teammate",description:$.role,status:"idle",agent:W,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set(f,Q),this.emitEvent({type:N.TeammateSpawned,agentId:f,role:$.role,teammate:{rolePrompt:$.systemPrompt,modelId:$.modelId,maxIterations:$.maxIterations,runtimeAgentId:W.getAgentId(),conversationId:W.getConversationId(),parentAgentId:null}}),{agentId:Q.agentId,role:Q.role,description:Q.description,status:Q.status}}shutdownTeammate(f,$){let J=this.members.get(f);if(!J||J.role!=="teammate")throw Error(`Teammate "${f}" was not found`);try{J.agent?.abort()}catch(H){if(!AH(H))throw H}J.status="stopped",this.emitEvent({type:N.TeammateShutdown,agentId:f,reason:$})}updateTeammateConnections(f){for(let $ of this.members.values()){if($.role!=="teammate"||!$.agent)continue;$.agent.updateConnection(f)}}createTask(f){let $=`task_${String(++this.taskCounter).padStart(4,"0")}`,J=new Date,H={id:$,title:f.title,description:f.description,status:f.assignee?"in_progress":"pending",createdAt:J,updatedAt:J,createdBy:f.createdBy,assignee:f.assignee,dependsOn:f.dependsOn??[]};return this.tasks.set($,H),this.emitEvent({type:N.TeamTaskUpdated,task:{...H}}),{...H}}claimTask(f,$){let J=this.requireTask(f);return this.assertDependenciesResolved(J),J.status="in_progress",J.assignee=$,J.updatedAt=new Date,this.emitEvent({type:N.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:$,taskId:f,kind:"progress",summary:`Claimed task "${J.title}"`}),{...J}}blockTask(f,$,J){let H=this.requireTask(f);return H.status="blocked",H.updatedAt=new Date,H.summary=J,this.emitEvent({type:N.TeamTaskUpdated,task:{...H}}),this.appendMissionLog({agentId:$,taskId:f,kind:"blocked",summary:J}),{...H}}completeTask(f,$,J){let H=this.requireTask(f);if(H.status="completed",H.updatedAt=new Date,H.summary=J,!H.assignee)H.assignee=$;return this.emitEvent({type:N.TeamTaskUpdated,task:{...H}}),this.appendMissionLog({agentId:$,taskId:f,kind:"done",summary:J}),{...H}}async routeToTeammate(f,$,J){let H=this.members.get(f);if(!H||H.role!=="teammate"||!H.agent)throw Error(`Teammate "${f}" was not found`);if(!H.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");H.runningCount++,H.status="running",this.emitEvent({type:N.TaskStart,agentId:f,message:$});try{let W=this.listMailbox(f,{unreadOnly:!0,markRead:!0}),Q=W.length>0?`${this.buildMailboxNotification(W)}
452
+
453
+ ${$}`:$,Z=J?.continueConversation?await H.agent.continue(Q):await H.agent.run(Q);return this.emitEvent({type:N.TaskEnd,agentId:f,result:Z}),this.recordProgressStep(f,`Completed a delegated run (${Z.iterations} iterations)`,J?.taskId,!0),Z}catch(W){let Q=W instanceof Error?W:Error(String(W));if(this.emitEvent({type:N.TaskEnd,agentId:f,error:Q,messages:H.agent.getMessages()}),!bQ(H,Q))this.appendMissionLog({agentId:f,taskId:J?.taskId,kind:"error",summary:Q.message});throw Q}finally{if(H.runningCount--,H.runningCount<=0&&this.members.get(f)?.status!=="stopped")H.status="idle"}}startTeammateRun(f,$,J){let H=`run_${String(++this.runCounter).padStart(5,"0")}`,W={id:H,agentId:f,taskId:J?.taskId,status:"queued",message:$,priority:J?.priority??0,retryCount:0,maxRetries:Math.max(0,J?.maxRetries??0),continueConversation:J?.continueConversation,startedAt:new Date(0),leaseOwner:J?.leaseOwner,heartbeatAt:void 0,lastProgressAt:new Date,lastProgressMessage:"queued",currentActivity:"queued"};return this.runs.set(H,W),this.runQueue.push(H),this.emitEvent({type:N.RunQueued,run:{...W}}),this.dispatchQueuedRuns(),{...W}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let f;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let $=this.selectNextDispatchableQueuedRun();f=$.nextDelayedAttemptAt;let J=$.index;if(J<0){this.scheduleQueuedRunDispatch(f);return}let[H]=this.runQueue.splice(J,1),W=H?this.runs.get(H):void 0;if(!W||W.status!=="queued")continue;this.executeQueuedRun(W)}this.scheduleQueuedRunDispatch(f)}selectNextDispatchableQueuedRun(){let f=-1,$=Number.NEGATIVE_INFINITY,J,H=Date.now();for(let W=0;W<this.runQueue.length;W++){let Q=this.runs.get(this.runQueue[W]);if(!Q||Q.status!=="queued")continue;if(Q.nextAttemptAt&&Q.nextAttemptAt.getTime()>H){if(!J||Q.nextAttemptAt<J)J=Q.nextAttemptAt;continue}if(Q.priority>$)$=Q.priority,f=W}return{index:f,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch(f){if(!f)return;let $=Math.max(0,f.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},$)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let f=0;for(let $ of this.runs.values())if($.status==="running")f++;return f}async executeQueuedRun(f){let $=f.currentActivity===wQ;f.nextAttemptAt=void 0,f.status="running",f.startedAt=new Date,f.heartbeatAt=new Date,f.currentActivity="run_started",this.emitEvent({type:N.RunStarted,run:{...f}});let J=setInterval(()=>{if(f.status!=="running")return;this.recordRunProgress(f,"heartbeat")},2000);try{let H=$?QU(f):f.message,W=await this.routeToTeammate(f.agentId,H,{taskId:f.taskId,continueConversation:f.continueConversation});f.status="completed",f.result=W,f.endedAt=new Date,f.currentActivity="completed",this.emitEvent({type:N.RunCompleted,run:{...f}})}catch(H){let W=H instanceof Error?H.message:String(H??"Unknown error");f.error=W,f.endedAt=new Date;let Q=this.members.get(f.agentId);if(bQ(Q,H))f.status="cancelled",f.currentActivity="cancelled",this.emitEvent({type:N.RunCancelled,run:{...f},reason:W});else if(f.retryCount<f.maxRetries)f.retryCount++,f.status="queued",f.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**f.retryCount)),this.runQueue.push(f.id),this.recordRunProgress(f,`retry_scheduled_${f.retryCount}`);else f.status="failed",f.currentActivity="failed",this.emitEvent({type:N.RunFailed,run:{...f}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns(f){let $=f?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!$&&!["running","queued"].includes(J.status))return!1;if(f?.status&&J.status!==f.status)return!1;if(f?.agentId&&J.agentId!==f.agentId)return!1;return!0}).map((J)=>({...J}))}getRun(f){let $=this.runs.get(f);return $?{...$}:void 0}async awaitRun(f,$=250){let J=this.runs.get(f);if(!J)throw Error(`Run "${f}" was not found`);while(J.status==="queued"||J.status==="running")await CQ($);return{...J}}async awaitAllRuns(f=250){while(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))await CQ(f);return this.listRuns()}cancelRun(f,$){let J=this.runs.get(f);if(!J)throw Error(`Run "${f}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=$,J.endedAt=new Date,J.currentActivity="cancelled";let H=this.runQueue.indexOf(f);if(H>=0)this.runQueue.splice(H,1);return this.emitEvent({type:N.RunCancelled,run:{...J},reason:$}),{...J}}recoverActiveRuns(f="runtime_recovered"){let $=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let H=this.members.get(J.agentId);if(!H||H.role!=="teammate"||!H.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:N.RunInterrupted,run:{...J},reason:J.error});continue}let W=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=W,J.lastProgressAt=W,J.lastProgressMessage=f,J.currentActivity=wQ,!this.runQueue.includes(J.id))this.runQueue.push(J.id);$.push({...J}),this.emitEvent({type:N.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),$}markStaleRunsInterrupted(f="runtime_recovered"){let $=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=f,J.endedAt=new Date,J.currentActivity="interrupted",$.push({...J}),this.emitEvent({type:N.RunInterrupted,run:{...J},reason:f})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),$}sendMessage(f,$,J,H,W){if(!this.members.has(f))throw Error(`Unknown sender "${f}"`);let Q=this.members.get($);if(!Q)throw Error(`Unknown recipient "${$}"`);let Z={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:f,toAgentId:$,subject:J,body:H,taskId:W,sentAt:new Date};if(this.mailbox.push(Z),this.emitEvent({type:N.TeamMessage,message:{...Z}}),Q.role==="teammate"&&Q.runningCount>0&&Q.agent)Q.pendingSteerMessage=`[MAILBOX] You got a message from ${f}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...Z}}broadcast(f,$,J,H){let W=[];for(let Q of this.members.values()){if(Q.agentId===f)continue;if(Q.role==="lead")continue;W.push(this.sendMessage(f,Q.agentId,$,J,H?.taskId))}return W}appendMissionLog(f){if(!this.members.has(f.agentId))throw Error(`Unknown team member "${f.agentId}"`);let $={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:f.agentId,taskId:f.taskId,kind:f.kind,summary:f.summary,evidence:f.evidence,nextAction:f.nextAction};this.missionLog.push($);let J=this.members.get(f.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:N.TeamMissionLog,entry:{...$}}),{...$}}createOutcome(f){let $={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:f.title,status:"draft",requiredSections:[...new Set(f.requiredSections)],createdBy:f.createdBy,createdAt:new Date};return this.outcomes.set($.id,$),this.emitEvent({type:N.OutcomeCreated,outcome:{...$}}),{...$}}listOutcomes(){return Array.from(this.outcomes.values()).map((f)=>({...f}))}attachOutcomeFragment(f){let $=this.outcomes.get(f.outcomeId);if(!$)throw Error(`Outcome "${f.outcomeId}" was not found`);if(!$.requiredSections.includes(f.section))throw Error(`Section "${f.section}" is not part of outcome "${f.outcomeId}"`);let J={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:f.outcomeId,section:f.section,sourceAgentId:f.sourceAgentId,sourceRunId:f.sourceRunId,content:f.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(J.id,J),$.status==="draft")$.status="in_review";return this.emitEvent({type:N.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment(f){let $=this.outcomeFragments.get(f.fragmentId);if(!$)throw Error(`Fragment "${f.fragmentId}" was not found`);return $.status=f.approved?"reviewed":"rejected",$.reviewedBy=f.reviewedBy,$.reviewedAt=new Date,this.emitEvent({type:N.OutcomeFragmentReviewed,fragment:{...$}}),{...$}}listOutcomeFragments(f){return Array.from(this.outcomeFragments.values()).filter(($)=>$.outcomeId===f).map(($)=>({...$}))}finalizeOutcome(f){let $=this.outcomes.get(f);if(!$)throw Error(`Outcome "${f}" was not found`);let J=this.listOutcomeFragments(f);for(let H of $.requiredSections)if(!J.some((Q)=>Q.section===H&&Q.status==="reviewed"))throw Error(`Outcome "${f}" cannot be finalized. Section "${H}" is missing a reviewed fragment.`);return $.status="finalized",$.finalizedAt=new Date,this.emitEvent({type:N.OutcomeFinalized,outcome:{...$}}),{...$}}cleanup(){for(let f of this.members.values())if(f.role==="teammate"&&f.runningCount>0)throw Error(`Cannot cleanup team while teammate "${f.agentId}" is still running`);if(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let f of this.members.values())if(f.role==="teammate")try{f.agent?.abort()}catch($){if(!AH($))throw $}this.tasks.clear(),this.mailbox.length=0,this.missionLog.length=0,this.runs.clear(),this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),this.outcomes.clear(),this.outcomeFragments.clear();for(let[f,$]of this.members.entries())if($.role==="teammate")this.members.delete(f)}requireTask(f){let $=this.tasks.get(f);if(!$)throw Error(`Task "${f}" was not found`);return $}assertDependenciesResolved(f){let $=this.getUnresolvedDependencies(f);if($.length>0)throw Error(`Task "${f.id}" is blocked by "${$[0]}"`)}getUnresolvedDependencies(f){return f.dependsOn.filter(($)=>{let J=this.tasks.get($);return!J||J.status!=="completed"})}trackMeaningfulEvent(f,$){if(this.recordRunActivityFromAgentEvent(f,$),$.type==="iteration_end"&&$.hadToolCalls){this.recordProgressStep(f,`Completed iteration ${$.iteration} with ${$.toolCallCount} tool call(s)`);return}if($.type==="content_end"&&$.contentType==="tool"&&!$.error){this.recordProgressStep(f,`Finished tool "${$.toolName??"unknown"}"`);return}if($.type==="done"){this.appendMissionLog({agentId:f,kind:"done",summary:`Completed a delegated run (${$.iterations} iterations)`});return}if($.type==="error")this.appendMissionLog({agentId:f,kind:"error",summary:$.error.message})}recordRunActivityFromAgentEvent(f,$){let J;switch($.type){case"iteration_start":J=`iteration_${$.iteration}_started`;break;case"content_start":if($.contentType==="tool")J=`running_tool_${$.toolName??"unknown"}`;break;case"content_end":if($.contentType==="tool")J=$.error?this.formatProgressErrorActivity(`tool_${$.toolName??"unknown"}_error`,$.error):`finished_tool_${$.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",$.error.message);break;default:break}if(!J)return;for(let H of this.runs.values()){if(H.agentId!==f||H.status!=="running")continue;this.recordRunProgress(H,J)}}recordRunProgress(f,$){let J=new Date;f.heartbeatAt=J,f.lastProgressAt=J,f.lastProgressMessage=$,f.currentActivity=$,this.emitEvent({type:N.RunProgress,run:{...f},message:$})}formatProgressErrorActivity(f,$){let J=$.replace(/\s+/g," ").trim();if(J.length===0)return f;let H=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${f}: ${H}`}recordProgressStep(f,$,J,H=!1){this.missionStepCounter++;let W=this.members.get(f);if(!W)return;let Q=this.missionStepCounter-W.lastMissionStep,Z=Date.now()-W.lastMissionAt;if(!H&&Q<this.missionLogIntervalSteps&&Z<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:f,taskId:J,kind:"progress",summary:$})}buildMailboxNotification(f){if(f.length===0)return"";let $=[`[MAILBOX] You have ${f.length} unread message(s):`];for(let J of f)$.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),$.push(J.body);return $.push("---"),$.join(`
454
+ `)}emitEvent(f){try{this.onTeamEvent?.(f)}catch{}}}function CQ(f){return new Promise(($)=>setTimeout($,f))}function v$(f,$){let J=0;for(let H of f){if(!H.startsWith($))continue;let W=Number.parseInt(H.slice($.length),10);if(Number.isFinite(W))J=Math.max(J,W)}return J}function FH(f,$){switch($.type){case"run_queued":case"run_started":f.activeTeamRunIds.add($.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let J;if($.type==="run_failed")J=$.run.error;else if($.type==="run_cancelled"||$.type==="run_interrupted")J=$.run.error??$.reason;f.activeTeamRunIds.delete($.run.id),f.pendingTeamRunUpdates.push({runId:$.run.id,agentId:$.run.agentId,taskId:$.run.taskId,status:$.type.replace("run_",""),error:J,iterations:$.run.result?.iterations}),x8(f);break}default:break}}async function yH(f,$,J){switch($.type){case"run_progress":await J("onTeamTaskProgress",f,$.run.agentId,$.message,{kind:$.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if($.event.type==="content_start"&&$.event.contentType==="text"&&typeof $.event.text==="string"){let H=$.event.text.replace(/\s+/g," ").trim().slice(0,120);if(H)await J("onTeamTaskProgress",f,$.agentId,H,{kind:"text"})}break;case"task_start":await J("onTeamTaskStart",f,$.agentId,$.message);break;case"task_end":{if($.error)await J("onTeamTaskEnd",f,$.agentId,"failed",`[error] ${$.error.message}`,void 0,$.messages);else if($.result?.finishReason==="aborted")await J("onTeamTaskEnd",f,$.agentId,"cancelled","[done] aborted",$.result,$.result.messages);else await J("onTeamTaskEnd",f,$.agentId,"completed",`[done] ${$.result?.finishReason??"completed"}`,$.result,$.result?.messages);break}default:break}}function KH(f,$,J,H){if(!f.runtime.teamRuntime)return;let W=f.runtime.teamRuntime.getTeamName();H({type:"team_progress",payload:{sessionId:$,teamName:W,lifecycle:I8({teamName:W,sessionId:$,event:J}),summary:m8(W,f.runtime.teamRuntime.exportState())}})}function c1(f){return f.activeTeamRunIds.size>0||f.pendingTeamRunUpdates.length>0}function UH(f,$){if(f.aborting)return!1;if(!($==="completed"||$==="max_iterations"))return!1;return f.config.enableAgentTeams===!0&&c1(f)}function x8(f){let $=f.teamRunWaiters.splice(0);for(let J of $)J()}async function GH(f){while(!0){if(f.aborting)return[];if(f.pendingTeamRunUpdates.length>0){let $=[...f.pendingTeamRunUpdates];return f.pendingTeamRunUpdates.length=0,$}if(f.activeTeamRunIds.size===0)return[];await new Promise(($)=>{f.teamRunWaiters.push($)})}}function hH(f,$){let J=$.map((Q)=>{let Z=[`- ${Q.runId} (${Q.agentId}) -> ${Q.status}`];if(Q.taskId)Z.push(` task=${Q.taskId}`);if(typeof Q.iterations==="number")Z.push(` iterations=${Q.iterations}`);if(Q.error)Z.push(` error=${Q.error}`);return Z.join("")}),H=f.activeTeamRunIds.size,W=H>0?`There are still ${H} teammate run(s) in progress. Continue coordination and decide whether to wait for more updates.`:"No teammate runs are currently in progress. Continue coordination using these updates.";return d1(`System-delivered teammate async run updates:
455
+ ${J.join(`
456
+ `)}
457
+
458
+ ${W}`,f.config.mode)}function d1(f,$){return ZU(f,$==="plan"?"plan":$==="yolo"?"yolo":"act")}var TH=4;class W0{adapter;manifestStore;teamChildren;static STALE_REASON="failed_external_process_exit";static STALE_SOURCE="stale_session_reconciler";static TEAM_HEARTBEAT_LOG_INTERVAL_MS=30000;constructor(f,$={}){this.adapter=f;this.manifestStore=new YH(f,$.messagesArtifactUploader),this.teamChildren=new k8(f,this.manifestStore,(J,H,W)=>this.toPersistedMessages(J,H,W),W0.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages(f,$,J){if(!f)return;return $?_8($.messages,$,J):M8(f)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest(f,$){this.manifestStore.writeSessionManifest(f,$)}readSessionManifest(f){return this.manifestStore.readSessionManifest(f)}async createRootSessionWithArtifacts(f){let $=f.startedAt??n(),J=f.sessionId.trim(),H=J.length>0?J:`${Date.now()}_${PU(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(H),Q=this.manifestStore.artifacts.sessionManifestPath(H),Z=C1({metadata:f.metadata,prompt:f.prompt}),j={version:1,session_id:H,source:f.source,pid:f.pid,started_at:$,status:"running",interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspace_root:f.workspaceRoot,team_name:f.teamName,enable_tools:f.enableTools,enable_spawn:f.enableSpawn,enable_teams:f.enableTeams,prompt:f.prompt?.trim()||void 0,metadata:Z,messages_path:W};return await this.adapter.upsertSession({sessionId:H,source:f.source,pid:f.pid,startedAt:$,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:f.interactive,provider:f.provider,model:f.model,cwd:f.cwd,workspaceRoot:f.workspaceRoot,teamName:f.teamName??null,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:j.prompt??null,metadata:M0(j.metadata),hookPath:"",messagesPath:W,updatedAt:n()}),this.manifestStore.initializeMessagesFile(H,W,$),this.manifestStore.writeSessionManifest(Q,j),{manifestPath:Q,messagesPath:W,manifest:j}}async updateSessionStatus(f,$,J){let H;if((await k7(()=>this.adapter.getSession(f),async(Q)=>{return H=$==="running"?void 0:n(),this.adapter.updateSession({sessionId:f,status:$,endedAt:H??null,exitCode:$==="running"?null:typeof J==="number"?J:null,expectedStatusLock:Q.statusLock})},TH)).updated){if($==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions(f,"cancelled");return{updated:!0,endedAt:H}}return{updated:!1}}async updateSession(f){for(let $=0;$<TH;$++){let J=await this.adapter.getSession(f.sessionId);if(!J)return{updated:!1};let H=J.metadata??void 0,W=f.metadata!==void 0?M0(f.metadata)??{}:M0(H)??{},Q=$$(typeof H?.title==="string"?H.title:void 0),Z=f.title!==void 0?$$(f.title):Q??dJ(f.prompt);if(Z)W.title=Z;else delete W.title;let j=f.metadata!==void 0||f.prompt!==void 0||f.title!==void 0;if(!(await this.adapter.updateSession({sessionId:f.sessionId,prompt:f.prompt,metadata:j?Object.keys(W).length>0?W:null:void 0,title:Z,expectedStatusLock:J.statusLock})).updated)continue;let{path:X,manifest:V}=this.manifestStore.readManifestFile(f.sessionId);if(V){if(f.prompt!==void 0)V.prompt=f.prompt??void 0;let Y=f.metadata!==void 0?M0(f.metadata)??{}:M0(V.metadata)??{};if(Z)Y.title=Z;V.metadata=Object.keys(Y).length>0?Y:void 0,this.manifestStore.writeSessionManifest(X,V)}return{updated:!0}}return{updated:!1}}queueSpawnRequest(f){return this.teamChildren.queueSpawnRequest(f)}upsertSubagentSession(f){return this.teamChildren.upsertSubagentSession(f)}upsertSubagentSessionFromHook(f){return this.teamChildren.upsertSubagentSessionFromHook(f)}appendSubagentHookAudit(f,$){return this.teamChildren.appendSubagentHookAudit($),Promise.resolve()}persistSessionMessages(f,$,J){let H=M8($);return this.manifestStore.persistSessionMessages(f,H,J)}applySubagentStatus(f,$){return this.teamChildren.applySubagentStatus(f,$)}applySubagentStatusBySessionId(f,$){return this.teamChildren.applySubagentStatusBySessionId(f,$)}applyStatusToRunningChildSessions(f,$){return this.teamChildren.applyStatusToRunningChildSessions(f,$)}onTeamTaskStart(f,$,J){return this.teamChildren.onTeamTaskStart(f,$,J)}onTeamTaskEnd(f,$,J,H,W,Q){return this.teamChildren.onTeamTaskEnd(f,$,J,H,W,Q)}onTeamTaskProgress(f,$,J,H){return this.teamChildren.onTeamTaskProgress(f,$,J,H)}handleSubAgentStart(f,$){return this.teamChildren.handleSubAgentStart(f,$)}handleSubAgentEnd(f,$){return this.teamChildren.handleSubAgentEnd(f,$)}isPidAlive(f){if(!Number.isFinite(f)||f<=0)return!1;try{return process.kill(Math.floor(f),0),!0}catch($){return typeof $==="object"&&$!==null&&"code"in $&&$.code==="EPERM"}}async reconcileDeadRunningSession(f){if(f.status!=="running"||this.isPidAlive(f.pid))return f;let $=n(),J=W0.STALE_REASON;for(let H=0;H<TH;H++){let W=await this.adapter.getSession(f.sessionId);if(!W)return;if(W.status!=="running")return W;let Q={...W.metadata??{},terminal_marker:J,terminal_marker_at:$,terminal_marker_pid:W.pid,terminal_marker_source:W0.STALE_SOURCE},Z=await this.adapter.updateSession({sessionId:W.sessionId,status:"failed",endedAt:$,exitCode:1,metadata:Q,expectedStatusLock:W.statusLock});if(!Z.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(W.sessionId,"failed");let j=S7(W,{status:"failed",endedAt:$,exitCode:1,metadata:Q}),{path:P}=this.manifestStore.readManifestFile(W.sessionId);return this.manifestStore.writeSessionManifest(P,j),this.manifestStore.appendStaleSessionHookLog($,W.sessionId,W.pid,J,W0.STALE_SOURCE),{...W,status:"failed",endedAt:$,exitCode:1,metadata:Q,statusLock:Z.statusLock,updatedAt:$}}return await this.adapter.getSession(f.sessionId)}async listSessions(f=200){let $=Math.max(1,Math.floor(f)),J=Math.min($*5,2000);return await this.reconcileDeadSessions(J),(await this.adapter.listSessions({limit:J})).slice(0,$).map((W)=>{let Q=M0(W.metadata??void 0),Z=this.manifestStore.readSessionManifest(W.sessionId),j=$$(typeof Z?.metadata?.title==="string"?Z.metadata.title:void 0),P=j?{...Q??{},title:j}:Q;return{...W,metadata:P}})}async reconcileDeadSessions(f=2000){let $=await this.adapter.listSessions({limit:Math.max(1,Math.floor(f)),status:"running"}),J=0;for(let H of $){let W=await this.reconcileDeadRunningSession(H);if(W&&W.status!==H.status)J++}return J}async deleteSession(f){let $=f.trim();if(!$)throw Error("session id is required");let J=await this.adapter.getSession($);if(!J)return{deleted:!1};if(await this.adapter.deleteSession($,!1),!J.isSubagent){let H=await this.adapter.listSessions({limit:2000,parentSessionId:$});await this.adapter.deleteSession($,!0),await Promise.allSettled(H.map(async(W)=>{await XH(W.cwd,W.sessionId),v1(W.messagesPath),v1(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await XH(J.cwd,$),v1(J.messagesPath),v1(this.manifestStore.artifacts.sessionManifestPath($,!1)),J.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty($);else{let H=new Set([this.manifestStore.artifacts.sessionArtifactsDir($)]);for(let W of[J.messagesPath])if(typeof W==="string"&&W.trim().length>0)H.add(jU(W));for(let W of H)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function MH(){return new Date().toISOString()}function kQ(f,$){let J=`${f}.tmp`;YU(J,`${JSON.stringify($,null,2)}
459
+ `,"utf8"),VU(J,f)}class mQ{sessionsDirPath;constructor(f=BU()){this.sessionsDirPath=f}ensureSessionsDir(){if(!DH(this.sessionsDirPath))XU(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return SQ(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return SQ(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let f=this.indexPath();if(!DH(f))return{version:1,sessions:{}};try{let $=JSON.parse(EQ(f,"utf8"));if($?.version===1&&$.sessions)return $}catch{}return{version:1,sessions:{}}}writeIndex(f){kQ(this.indexPath(),f)}readQueue(){let f=this.spawnQueuePath();if(!DH(f))return{version:1,nextId:1,requests:[]};try{let $=JSON.parse(EQ(f,"utf8"));if($?.version===1&&typeof $.nextId==="number"&&Array.isArray($.requests))return $}catch{}return{version:1,nextId:1,requests:[]}}writeQueue(f){kQ(this.spawnQueuePath(),f)}async upsertSession(f){let $=this.readIndex();$.sessions[f.sessionId]=f,this.writeIndex($)}async getSession(f){return this.readIndex().sessions[f]}async listSessions(f){return Object.values(this.readIndex().sessions).filter(($)=>f.parentSessionId!==void 0?$.parentSessionId===f.parentSessionId:!0).filter(($)=>f.status!==void 0?$.status===f.status:!0).sort(($,J)=>J.startedAt.localeCompare($.startedAt)).slice(0,f.limit)}async updateSession(f){let $=this.readIndex(),J=$.sessions[f.sessionId];if(!J)return{updated:!1,statusLock:0};if(f.expectedStatusLock!==void 0&&J.statusLock!==f.expectedStatusLock)return{updated:!1,statusLock:J.statusLock};let H=f.expectedStatusLock!==void 0?f.expectedStatusLock+1:J.statusLock,W={...J,status:f.status??J.status,endedAt:f.endedAt!==void 0?f.endedAt:J.endedAt??null,exitCode:f.exitCode!==void 0?f.exitCode:J.exitCode??null,prompt:f.prompt!==void 0?f.prompt:J.prompt??null,metadata:f.metadata!==void 0?f.metadata??null:J.metadata??null,parentSessionId:f.parentSessionId!==void 0?f.parentSessionId??null:J.parentSessionId??null,parentAgentId:f.parentAgentId!==void 0?f.parentAgentId??null:J.parentAgentId??null,agentId:f.agentId!==void 0?f.agentId??null:J.agentId??null,conversationId:f.conversationId!==void 0?f.conversationId??null:J.conversationId??null,statusLock:H,isSubagent:f.setRunning||f.parentSessionId!==void 0?!0:J.isSubagent,updatedAt:MH()};if(f.setRunning)W.status="running",W.endedAt=null,W.exitCode=null;return $.sessions[f.sessionId]=W,this.writeIndex($),{updated:!0,statusLock:W.statusLock}}async deleteSession(f,$){let J=this.readIndex();if(!J.sessions[f])return!1;if(delete J.sessions[f],$){for(let W of Object.values(J.sessions))if(W.parentSessionId===f)delete J.sessions[W.sessionId]}return this.writeIndex(J),!0}async enqueueSpawnRequest(f){let $=this.readQueue();$.requests.push({id:$.nextId,rootSessionId:f.rootSessionId,parentAgentId:f.parentAgentId,task:f.task,systemPrompt:f.systemPrompt,createdAt:MH()}),$.nextId+=1,this.writeQueue($)}async claimSpawnRequest(f,$){let J=this.readQueue(),H=J.requests.find((W)=>W.rootSessionId===f&&W.parentAgentId===$&&!W.consumedAt);if(!H)return;return H.consumedAt=MH(),this.writeQueue(J),H.task}}class _H extends W0{constructor(f,$={}){super(new mQ(f),$)}ensureSessionsDir(){return super.ensureSessionsDir()}}import{existsSync as AU,mkdirSync as RU}from"node:fs";import{resolveSessionDataDir as FU}from"@cline/shared/storage";var LH=`
460
+ session_id AS sessionId,
461
+ source,
462
+ pid,
463
+ started_at AS startedAt,
464
+ ended_at AS endedAt,
465
+ exit_code AS exitCode,
466
+ status,
467
+ status_lock AS statusLock,
468
+ interactive,
469
+ provider,
470
+ model,
471
+ cwd,
472
+ workspace_root AS workspaceRoot,
473
+ team_name AS teamName,
474
+ enable_tools AS enableTools,
475
+ enable_spawn AS enableSpawn,
476
+ enable_teams AS enableTeams,
477
+ parent_session_id AS parentSessionId,
478
+ parent_agent_id AS parentAgentId,
479
+ agent_id AS agentId,
480
+ conversation_id AS conversationId,
481
+ is_subagent AS isSubagent,
482
+ prompt,
483
+ metadata_json AS metadata,
484
+ hook_path AS hookPath,
485
+ messages_path AS messagesPath,
486
+ updated_at AS updatedAt`;function zH(f){f.interactive=f.interactive===1,f.enableTools=f.enableTools===1,f.enableSpawn=f.enableSpawn===1,f.enableTeams=f.enableTeams===1,f.isSubagent=f.isSubagent===1;let $=f.metadata;if(typeof $==="string"&&$.trim())try{let J=JSON.parse($);f.metadata=J&&typeof J==="object"&&!Array.isArray(J)?J:null}catch{f.metadata=null}else f.metadata=null;return f}function OH(f){if(!f||Object.keys(f).length===0)return null;return JSON.stringify(f)}function IQ(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class xQ{store;sessionsDirPath;constructor(f,$=FU()){this.store=f;this.sessionsDirPath=$}ensureSessionsDir(){if(!AU(this.sessionsDirPath))RU(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession(f){this.store.run(`INSERT OR REPLACE INTO sessions (
487
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
488
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
489
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
490
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
491
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,f.endedAt??null,f.exitCode??null,f.status,f.statusLock,f.interactive?1:0,f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,f.enableTools?1:0,f.enableSpawn?1:0,f.enableTeams?1:0,f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,f.isSubagent?1:0,f.prompt??null,OH(f.metadata),"",f.hookPath??"",f.messagesPath??null,f.updatedAt])}async getSession(f){let $=this.store.queryOne(`SELECT ${LH} FROM sessions WHERE session_id = ?`,[f]);return $?zH($):void 0}async listSessions(f){let $=[],J=[];if(f.parentSessionId)$.push("parent_session_id = ?"),J.push(f.parentSessionId);if(f.status)$.push("status = ?"),J.push(f.status);let H=$.length>0?`WHERE ${$.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${LH}
492
+ FROM sessions
493
+ ${H}
494
+ ORDER BY started_at DESC
495
+ LIMIT ?`,[...J,f.limit]).map(zH)}async updateSession(f){if(f.setRunning){if(f.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
496
+ SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
497
+ parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
498
+ prompt = COALESCE(prompt, ?)
499
+ WHERE session_id = ? AND status_lock = ?`,[n(),f.expectedStatusLock+1,f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,f.prompt??null,f.sessionId,f.expectedStatusLock]).changes??0)>0,statusLock:f.expectedStatusLock+1}}let $=[],J=[];if(f.status!==void 0)$.push("status = ?"),J.push(f.status);if(f.endedAt!==void 0)$.push("ended_at = ?"),J.push(f.endedAt);if(f.exitCode!==void 0)$.push("exit_code = ?"),J.push(f.exitCode);if(f.prompt!==void 0)$.push("prompt = ?"),J.push(f.prompt??null);if(f.metadata!==void 0)$.push("metadata_json = ?"),J.push(OH(f.metadata));if(f.parentSessionId!==void 0)$.push("parent_session_id = ?"),J.push(f.parentSessionId??null);if(f.parentAgentId!==void 0)$.push("parent_agent_id = ?"),J.push(f.parentAgentId??null);if(f.agentId!==void 0)$.push("agent_id = ?"),J.push(f.agentId??null);if(f.conversationId!==void 0)$.push("conversation_id = ?"),J.push(f.conversationId??null);if($.length===0){let Z=await this.getSession(f.sessionId);return{updated:!!Z,statusLock:Z?.statusLock??0}}let H=0;if(f.expectedStatusLock!==void 0)H=f.expectedStatusLock+1,$.push("status_lock = ?"),J.push(H);$.push("updated_at = ?"),J.push(n());let W=`UPDATE sessions SET ${$.join(", ")} WHERE session_id = ?`;if(J.push(f.sessionId),f.expectedStatusLock!==void 0)W+=" AND status_lock = ?",J.push(f.expectedStatusLock);if((this.store.run(W,J).changes??0)===0)return{updated:!1,statusLock:0};if(f.expectedStatusLock===void 0)H=(await this.getSession(f.sessionId))?.statusLock??0;return{updated:!0,statusLock:H}}async deleteSession(f,$){let J=this.store.run("DELETE FROM sessions WHERE session_id = ?",[f]).changes??0;if($)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[f]);return J>0}async enqueueSpawnRequest(f){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
500
+ VALUES (?, ?, ?, ?, ?, NULL)`,[f.rootSessionId,f.parentAgentId,f.task??null,f.systemPrompt??null,n()])}async claimSpawnRequest(f,$){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
501
+ WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
502
+ ORDER BY id ASC LIMIT 1`,[f,$]);if(!J||typeof J.id!=="number")return;return this.store.run("UPDATE subagent_spawn_queue SET consumed_at = ? WHERE id = ?",[n(),J.id]),J.task??void 0}}class N0 extends W0{store;constructor(f,$={}){super(new xQ(f,$.sessionArtifactsDir),$);this.store=f}createRootSession(f){this.store.run(`INSERT OR REPLACE INTO sessions (
503
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
504
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
505
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
506
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
507
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,null,null,"running",0,f.interactive?1:0,f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,f.enableTools?1:0,f.enableSpawn?1:0,f.enableTeams?1:0,null,null,null,null,0,f.prompt??null,f.metadata?JSON.stringify(f.metadata):null,"","",f.messagesPath,n()])}}import{homedir as KT}from"node:os";import{isAbsolute as UT,join as FW,resolve as GT}from"node:path";import{createSessionId as hT,isLikelyAuthError as TT,normalizeUserInput as DT}from"@cline/shared";import{setHomeDirIfUnset as MT}from"@cline/shared/storage";import{createHandler as TU}from"@cline/llms";var gQ=200000,vQ=0.95;var NH=20000;var uQ=8;function yU(f){return Math.max(1,Math.ceil(f.length/4))}function X$(f,$){if(f.length<=$)return f;return`${f.slice(0,$)}
508
+ ...[truncated ${f.length-$} chars]`}function KU(f){if(typeof f==="string")return X$(f,2000);return f.map(($)=>{switch($.type){case"text":return $.text;case"file":return`<file path="${$.path}">
509
+ ${X$($.content,2000)}
510
+ </file>`;case"image":return`[image:${$.mediaType}]`;default:return""}}).join(`
511
+ `)}function UU(f){return Object.entries(f).map(([$,J])=>`${$}=${JSON.stringify(J)}`).join(", ")}function cQ(f){if(typeof f.content==="string")return`[${f.role==="user"?"User":"Bot"}]: ${f.content}`;let $=[];for(let J of f.content)switch(J.type){case"text":$.push(`[${f.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":$.push(`[Bot thinking]: ${X$(J.thinking,2000)}`);break;case"redacted_thinking":$.push("[Bot thinking]: [redacted]");break;case"tool_use":$.push(`[Bot tool calls]: ${J.name}(${UU(J.input)})`);break;case"tool_result":$.push(`[Tool result]: ${KU(J.content)}`);break;case"file":$.push(`[${f.role==="user"?"User":"Bot"} file ${J.path}]: ${X$(J.content,2000)}`);break;case"image":$.push(`[${f.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return $.join(`
512
+ `)}function dQ(f){return f.map(cQ).join(`
513
+
514
+ `).trim()}function rQ(){let f=new WeakMap;return($)=>{let J=$,H=f.get(J);if(typeof H==="number")return H;let W=yU(cQ($));return f.set(J,W),W}}function p1(f){return f.metadata?.kind==="compaction_summary"}function qH(f){if(!p1(f))return;let $=f.metadata;if(!$)return;let J=$.details;return{kind:"compaction_summary",summary:String($.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((H)=>typeof H==="string").map((H)=>H.trim()).filter((H)=>H.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((H)=>typeof H==="string").map((H)=>H.trim()).filter((H)=>H.length>0):[]},tokensBefore:Number($.tokensBefore??0),generatedAt:Number($.generatedAt??0)}}function GU(f){if(f.role!=="user"||!Array.isArray(f.content))return!1;return f.content.length>0&&f.content.every(($)=>$.type==="tool_result")}function lQ(f){return f.role==="user"&&!GU(f)&&!p1(f)}function pQ(f){for(let $=0;$<f.length;$+=1)if(lQ(f[$]))return $;return-1}function bH(f){for(let $=f.length-1;$>=0;$-=1)if(lQ(f[$]))return $;return 0}function iQ(f){for(let $=f.length-1;$>=0;$-=1)if(f[$].role==="assistant")return $;return-1}function nQ(f){for(let $=f.length-1;$>=0;$-=1)if(p1(f[$]))return $;return-1}function aQ(f,$,J){let H=bH(f);if(H<=0)return 0;let W=0,Q=f.length;for(let Z=f.length-1;Z>=0;Z-=1)if(W+=J(f[Z]),Q=Z,W>=$)break;if(Q<=0)return 0;return Math.min(Q,H)}function l1(f){if(typeof f==="string"&&f.trim().length>0)return[f];if(Array.isArray(f))return f.flatMap(($)=>l1($));if(f&&typeof f==="object"){let $=f,J=[];for(let H of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...l1($[H]));if(Array.isArray($.files)){for(let H of $.files)if(H&&typeof H==="object")J.push(...l1(H.path))}if(Array.isArray($.file_paths))J.push(...l1($.file_paths));return J}return[]}function r1(f,$){let J=new Set(f);for(let H of $){let W=H.trim();if(!W)continue;J.add(W)}return[...J].sort((H,W)=>H.localeCompare(W))}function tQ(f){let $=[],J=[];for(let H of f){let W=qH(H);if(W){$=r1($,W.details.readFiles),J=r1(J,W.details.modifiedFiles);continue}if(!Array.isArray(H.content))continue;for(let Q of H.content){if(Q.type==="file"){$=r1($,[Q.path]);continue}if(Q.type!=="tool_use")continue;let Z=l1(Q.input);if(Q.name==="read_files"){$=r1($,Z);continue}if(Q.name==="editor"||Q.name==="apply_patch")J=r1(J,Z)}}return{readFiles:$,modifiedFiles:J}}function hU(f){let $=f.readFiles.length>0?f.readFiles.map((H)=>`- ${H}`).join(`
515
+ `):"- none",J=f.modifiedFiles.length>0?f.modifiedFiles.map((H)=>`- ${H}`).join(`
516
+ `):"- none";return`## Files
517
+ Read:
518
+ ${$}
519
+ Modified:
520
+ ${J}`}function sQ(f,$){if(/^## Files$/im.test(f))return f.trim();return`${f.trim()}
521
+
522
+ ${hU($)}`.trim()}function oQ(f){let $=[`Summarize this session for continuation. Be concise and factual.
523
+
524
+ ## Goal
525
+ One sentence: what is being built or fixed.
526
+
527
+ ## State
528
+ - Done: completed steps
529
+ - In Progress: current work
530
+ - Blocked: blockers or open questions
531
+
532
+ ## Highlights
533
+ Key technical choices or notable findings (omit if none).
534
+
535
+ ## Next
536
+ Immediate next steps.
537
+
538
+ ## Files
539
+ Read: ${f.fileOps.readFiles.join(", ")||"none"}
540
+ Edited: ${f.fileOps.modifiedFiles.join(", ")||"none"}`];if(f.previousSummary?.trim())$.push(`Previous summary:
541
+ ${f.previousSummary.trim()}`);return $.push(`Conversation:
542
+ ${f.conversationText||"(empty)"}`),$.join(`
543
+
544
+ `)}function eQ(f){let $=f.summarizer;if(!$)return{...f.activeProviderConfig,maxOutputTokens:1024,thinking:!1};let J=$.providerConfig?.providerId===$.providerId?$.providerConfig:void 0;return{...J??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??J?.apiKey,baseUrl:$.baseUrl??J?.baseUrl,headers:$.headers??J?.headers,knownModels:$.knownModels??J?.knownModels,maxOutputTokens:$.maxOutputTokens??1024,thinking:!1}}function fZ(f){return{role:"user",content:`Context summary:
545
+
546
+ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fileOps,tokensBefore:f.tokensBefore,generatedAt:Date.now()}}}async function DU(f){let $=TU(f.providerConfig),J="";for await(let H of $.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:f.request}])){if(H.type==="text"){J+=H.text;continue}if(H.type==="done"&&!H.success&&H.error)throw Error(H.error)}return f.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:f.providerConfig.modelId,providerId:f.providerConfig.providerId}),J.trim()}async function $Z(f){let $=f.context.messages;if($.length<2)return;let J=aQ($,f.preserveRecentTokens,f.estimateMessageTokens);if(J<=0||J>=$.length)return;let H=$.slice(0,J),W=nQ(H),Q=W>=0?qH(H[W])?.summary:void 0,Z=W>=0?H.slice(W+1):H;if(Z.length===0)return;let j=tQ(H),P=dQ(Z),X=await DU({providerConfig:eQ({activeProviderConfig:f.providerConfig,summarizer:f.summarizer}),request:oQ({previousSummary:Q,conversationText:P,fileOps:j}),logger:f.logger});if(!X.trim())return;let V=sQ(X,j),Y=$.reduce((R,U)=>R+f.estimateMessageTokens(U),0),B=[fZ({summary:V,fileOps:j,tokensBefore:Y}),...$.slice(J)],A=B.reduce((R,U)=>R+f.estimateMessageTokens(U),0);return f.logger?.debug("Performed agentic compaction",{messagesBefore:$.length,messagesAfter:B.length,messagesSummarized:J,messagesPreserved:$.length-J,tokensBefore:Y,tokensAfter:A,contextWindowTokens:f.context.contextWindowTokens}),{messages:B}}function WZ(f){if(p1(f))return;if(typeof f.content==="string"){let J=f.content.trim();return J?{...f,content:J}:void 0}let $=f.content.filter((J)=>J.type!=="text"||J.text.trim());if($.length===0)return;return{...f,content:$.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J)}}function i1(f,$){return f.reduce((J,H)=>J+$(H),0)}function JZ(f,$){let J=Math.max(1,$),H=Math.max(16,J*4);if(typeof f.content==="string"){let Z=X$(f.content,H).trim();return{...f,content:Z||"..."}}let W=H,Q=f.content.map((Z)=>{if(Z.type!=="text"||W<=0)return Z;let j=X$(Z.text,W).trim();return W-=j.length,{...Z,text:j||"..."}});return{...f,content:Q}}function MU(f,$){let J=pQ(f),H=bH(f),W=iQ(f),Q=[];for(let Z=0;Z<f.length;Z+=1){let j=WZ(f[Z]);if(!j)continue;Q.push({index:Z,message:j,estimatedTokens:$(j),isFirstUser:Z===J,isLastUser:Z===H,isLastAssistant:Z===W})}return Q}function HZ(f,$,J,H){let W=f[$];W.message=J,W.estimatedTokens=H(J)}function g8(f,$,J,H){let W=i1(f.map((Q)=>Q.message),H);for(let Q=0;Q<f.length&&W>J;){if(!$(f[Q])){Q+=1;continue}W-=f[Q].estimatedTokens,f.splice(Q,1)}}function _U(f,$,J){let H=i1(f.map((Q)=>Q.message),J);if(H<=$)return;for(let Q=f.length-1;Q>=0&&H>$;Q-=1){let Z=f[Q];if(Z.isFirstUser)continue;let j=Math.max(uQ,Z.estimatedTokens-(H-$));if(j>=Z.estimatedTokens)continue;HZ(f,Q,JZ(Z.message,j),J),H=i1(f.map((P)=>P.message),J)}if(H<=$)return;let W=f.findIndex((Q)=>Q.isFirstUser);if(W>=0){let Q=Math.max(1,f[W].estimatedTokens-(H-$));HZ(f,W,JZ(f[W].message,Q),J)}}function LU(f,$){return JSON.stringify(f)!==JSON.stringify($)}function QZ(f){let $=Math.max(1,Math.min(f.context.triggerTokens,f.context.contextWindowTokens)),J=MU(f.context.messages,f.estimateMessageTokens);if(J.length===0)return;g8(J,(Z)=>Z.message.role==="assistant"&&!Z.isLastAssistant,$,f.estimateMessageTokens),g8(J,(Z)=>Z.message.role==="user"&&!Z.isFirstUser&&!Z.isLastUser,$,f.estimateMessageTokens),g8(J,(Z)=>Z.message.role==="assistant"&&Z.isLastAssistant,$,f.estimateMessageTokens),g8(J,(Z)=>Z.message.role==="user"&&Z.isLastUser&&!Z.isFirstUser,$,f.estimateMessageTokens),_U(J,$,f.estimateMessageTokens);let H=J.map((Z)=>Z.message);if(!LU(f.context.messages,H))return;let W=i1(f.context.messages.map((Z)=>WZ(Z)??Z),f.estimateMessageTokens),Q=i1(H,f.estimateMessageTokens);return f.logger?.debug("Performed basic compaction",{messagesBefore:f.context.messages.length,messagesAfter:H.length,messagesRemoved:f.context.messages.length-H.length,tokensBefore:W,tokensAfter:Q,targetTokens:$,contextWindowTokens:f.context.contextWindowTokens}),{messages:H}}var zU={basic:({context:f,estimateMessageTokens:$,logger:J})=>QZ({context:f,estimateMessageTokens:$,logger:J}),agentic:({context:f,providerConfig:$,compaction:J,mode:H,estimateMessageTokens:W,logger:Q})=>$Z({context:f,providerConfig:$,summarizer:J?.summarizer,preserveRecentTokens:H==="manual"?Math.min(J?.preserveRecentTokens??NH,f.triggerTokens):J?.preserveRecentTokens??NH,estimateMessageTokens:W,logger:Q})};function OU(f){if(typeof f.config.reserveTokens==="number"){let H=Math.max(0,f.config.reserveTokens),W=Math.max(0,f.contextWindowTokens-H);return{shouldCompact:f.inputTokens>W,triggerTokens:W,thresholdRatio:f.contextWindowTokens>0?W/f.contextWindowTokens:0}}let $=f.config.thresholdRatio??vQ,J=f.contextWindowTokens*$;return{shouldCompact:f.inputTokens>J,triggerTokens:J,thresholdRatio:$}}function NU(f){let $=typeof f.manualTargetRatio==="number"&&Number.isFinite(f.manualTargetRatio)?f.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,$)),H=Math.max(1,Math.floor(Math.min(f.autoTriggerTokens,f.inputTokens*J)));return{triggerTokens:H,thresholdRatio:f.contextWindowTokens>0?H/f.contextWindowTokens:0}}function wH(f,$={}){let J=f.compaction;if(J?.enabled!==!0)return;let H=f.providerConfig??{providerId:f.providerId,modelId:f.modelId},W=rQ(),Q=J?.strategy??"basic",Z=zU[Q],j=$.mode??"auto";return async(P)=>{let X=P.apiMessages.reduce((F,K)=>F+W(K),0),V=J?.contextWindowTokens??P.model.info?.contextWindow??gQ;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let Y=OU({inputTokens:X,contextWindowTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if(j==="auto"&&!Y.shouldCompact)return;let B=j==="manual"?NU({inputTokens:X,contextWindowTokens:V,autoTriggerTokens:Y.triggerTokens,manualTargetRatio:$.manualTargetRatio}):Y,A={agentId:P.agentId,conversationId:P.conversationId,parentAgentId:P.parentAgentId,iteration:P.iteration,messages:P.messages,model:P.model,contextWindowTokens:V,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,utilizationRatio:V>0?X/V:0},R=j==="manual"?"manual_compaction":"auto_compaction";P.emitStatusNotice?.(j==="manual"?"compacting":"auto-compacting",{kind:R,reason:R,iteration:P.iteration,triggerTokens:B.triggerTokens,contextWindowTokens:V});let U=P.messages.length,y=J?.compact?await J.compact(A):await Z({context:A,providerConfig:{...H,abortSignal:P.abortSignal},compaction:J,mode:j,estimateMessageTokens:W,logger:f.logger});if(y?.messages){let F=y.messages.reduce((K,M)=>K+W(M),0);f.logger?.log("Context compaction completed",{severity:"info",strategy:Q,contextWindowTokens:V,inputTokens:X,afterTokens:F,tokensSaved:X-F,utilizationBefore:`${(X/V*100).toFixed(1)}%`,utilizationAfter:`${(F/V*100).toFixed(1)}%`,thresholdTrigger:`${(B.thresholdRatio*100).toFixed(1)}%`,messagesBefore:U,messagesAfter:y.messages.length,messagesRemoved:U-y.messages.length})}return y}}Af();function c$(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function d$(f,$){return{inputTokens:f.inputTokens+Math.max(0,$.inputTokens??0),outputTokens:f.outputTokens+Math.max(0,$.outputTokens??0),cacheReadTokens:f.cacheReadTokens+Math.max(0,$.cacheReadTokens??0),cacheWriteTokens:f.cacheWriteTokens+Math.max(0,$.cacheWriteTokens??0),totalCost:f.totalCost+Math.max(0,$.totalCost??0)}}function u$(f){return typeof f==="number"&&Number.isFinite(f)?f:0}function CH(f){let $=c$();for(let J of f){let H=J.metrics;if(!H)continue;$=d$($,{inputTokens:u$(H.inputTokens),outputTokens:u$(H.outputTokens),cacheReadTokens:u$(H.cacheReadTokens),cacheWriteTokens:u$(H.cacheWriteTokens),totalCost:u$(H.cost)})}return $}function qU(f){for(let $=f.length-1;$>=0;$-=1){let J=f[$];if(J?.role!=="assistant")continue;let H=u$(J.metrics?.inputTokens);return H>0?H:void 0}return}function bU(f){if(!f||typeof f!=="object")return;let $=f,J=$.skill??$.skill_name??$.skillName;if(typeof J!=="string")return;let H=J.trim();return H.length>0?H:void 0}function EH(f){if(!f||typeof f!=="object")return{};let $=f;return{agentId:typeof $.agentId==="string"?$.agentId:void 0,conversationId:typeof $.conversationId==="string"?$.conversationId:void 0,parentAgentId:typeof $.parentAgentId==="string"?$.parentAgentId:void 0}}function Q0(f){let $=f.agentId?.trim();if(!$)return;let J=f.parentAgentId?.trim()||void 0,H=f.teamRole,W="root";if(H==="teammate")W="team_teammate";else if(H==="lead")W="team_lead";else if(J)W="subagent";return{agentId:$,agentKind:W,conversationId:f.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:f.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:f.teamId?.trim()||void 0,teamName:f.teamName?.trim()||void 0,teamRole:H,teamAgentId:f.teamAgentId?.trim()||void 0}}function SH(f,$,J){let{sessionId:H,config:W,liveSession:Q,emit:Z}=f,j=W.telemetry,P=Q?.runtime.teamRuntime,X=J?.isPrimaryAgentEvent??!0,V=EH($),Y=Q0({agentId:J?.agentId??V.agentId,conversationId:J?.conversationId??V.conversationId,parentAgentId:J?.parentAgentId??V.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??P?.getTeamId(),teamName:J?.teamName??P?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if($.type==="content_start"&&$.contentType==="tool"&&$.toolName==="skills"){let B=bU($.input);if(B)I4(j,{ulid:H,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:W.providerId,modelId:W.modelId,...Y})}if($.type==="content_end"&&$.contentType==="tool"){let B=$.toolName??"unknown",A=!$.error;if(m4(j,{ulid:H,tool:B,autoApproved:void 0,success:A,modelId:W.modelId,provider:W.providerId,...Y}),!A&&(B==="editor"||B==="apply_patch"))x4(j,{ulid:H,modelId:W.modelId,provider:W.providerId,errorType:$.error,...Y})}if($.type==="notice"&&$.reason==="api_error")V2(j,{ulid:H,model:W.modelId,provider:W.providerId,errorMessage:$.message,...Y});if($.type==="error")V2(j,{ulid:H,model:W.modelId,provider:W.providerId,errorMessage:$.error?.message??"unknown error",...Y});if($.type==="usage"&&X&&Q?.turnUsageBaseline)f.usageBySession.set(H,d$(Q.turnUsageBaseline,{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost})),$1(j,{ulid:H,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...Y}),S4(j,{ulid:H,tokensIn:$.inputTokens,tokensOut:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost,model:W.modelId,...Y});if($.type==="iteration_end"&&X)f.persistMessages(H,Q?.agent.getMessages()??[],Q?.config.systemPrompt);Z({type:"agent_event",payload:{sessionId:H,event:$,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(X?"lead":void 0):void 0}}),Z({type:"chunk",payload:{sessionId:H,stream:"agent",chunk:C7($),ts:Date.now()}})}function q0(f){return f.workspaceRoot??f.cwd}import{hasRuntimeConfigExtension as WG}from"@cline/shared";import{spawn as gU}from"node:child_process";import{appendFileSync as vU,readFileSync as uU}from"node:fs";import{join as cU}from"node:path";import{augmentNodeCommandForDebug as XZ,withResolvedClineBuildEnv as vH}from"@cline/shared";import{ensureHookLogDir as jZ}from"@cline/shared/storage";function v8(f,$){if(!$)return;return{name:f,manifest:{capabilities:["hooks"]},hooks:$}}import{existsSync as wU,readdirSync as CU}from"node:fs";import{basename as EU,extname as SU,join as kU}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as ZZ,resolveHooksConfigSearchPaths as mU}from"@cline/shared/storage";function kH(f){return mU(f)}var u8;((V)=>{V.TaskStart="TaskStart";V.TaskResume="TaskResume";V.TaskCancel="TaskCancel";V.TaskComplete="TaskComplete";V.TaskError="TaskError";V.PreToolUse="PreToolUse";V.PostToolUse="PostToolUse";V.UserPromptSubmit="UserPromptSubmit";V.PreCompact="PreCompact";V.SessionShutdown="SessionShutdown"})(u8||={});var mH={["TaskStart"]:"agent_start",["TaskResume"]:"agent_resume",["TaskCancel"]:"agent_abort",["TaskComplete"]:"agent_end",["TaskError"]:"agent_error",["PreToolUse"]:"tool_call",["PostToolUse"]:"tool_result",["UserPromptSubmit"]:"prompt_submit",["PreCompact"]:void 0,["SessionShutdown"]:"session_shutdown"},IU=new Map(Object.values(u8).map((f)=>[f.toLowerCase(),f])),xU=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function IH(f){let $=SU(f).toLowerCase();if(!xU.has($))return;let J=EU(f,$).trim().toLowerCase();return IU.get(J)}function r$(f){let $=[],J=new Set,H=kH(f).filter((W)=>wU(W));for(let W of H)try{for(let Q of CU(W,{withFileTypes:!0})){if(!Q.isFile())continue;let Z=IH(Q.name);if(!Z)continue;let j=kU(W,Q.name);if(J.has(j))continue;J.add(j),$.push({fileName:Z,hookEventName:mH[Z],path:j})}}catch{}return $.sort((W,Q)=>W.path.localeCompare(Q.path))}function d8(f){if(!f||typeof f!=="object")return{};let $={};for(let[J,H]of Object.entries(f))$[J]=typeof H==="string"?H:JSON.stringify(H);return $}function c8(f,$,J){let H=J instanceof Error?`: ${J.message}`:"",W=`${$}${H}`;if(f){try{f.log(W,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(W)}function dU(f,$){if(!$)return f;if(!f)return{...$};let J=[f.context,$.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
547
+ `),H=[...f.appendMessages??[],...$.appendMessages??[]];return{cancel:f.cancel===!0||$.cancel===!0?!0:void 0,review:f.review===!0||$.review===!0?!0:void 0,context:J||void 0,overrideInput:$.overrideInput!==void 0?$.overrideInput:f.overrideInput,systemPrompt:$.systemPrompt!==void 0?$.systemPrompt:f.systemPrompt,appendMessages:H.length>0?H:void 0}}function rU(f){if(!f||typeof f!=="object")return;let $=f,J=typeof $.context==="string"?$.context:typeof $.contextModification==="string"?$.contextModification:typeof $.errorMessage==="string"?$.errorMessage:void 0;return{cancel:typeof $.cancel==="boolean"?$.cancel:void 0,review:typeof $.review==="boolean"?$.review:void 0,context:J,overrideInput:Object.hasOwn($,"overrideInput")?$.overrideInput:void 0}}function xH(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function Wf(f,$){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",H={rootSessionId:$.rootSessionId||f.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:H,workspaceRoots:$.workspacePath?[$.workspacePath]:[],workspaceInfo:$.workspaceInfo,userId:J,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function lU(f){let $=f.trim();if(!$)return{};let H=$.split(`
548
+ `).map((Q)=>Q.trim()).filter(Boolean).filter((Q)=>Q.startsWith("HOOK_CONTROL\t")).map((Q)=>Q.slice(13)),W=H.length>0?H[H.length-1]:$;try{return{parsedJson:JSON.parse(W)}}catch(Q){return{parseError:Q instanceof Error?Q.message:"Failed to parse hook stdout JSON"}}}async function pU(f,$){let J=f.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((H,W)=>{let Q=!1,Z=()=>{J.off("error",P),J.off("finish",X),f.off("close",V)},j=(Y)=>{if(Q)return;if(Q=!0,Z(),Y){let B=Y.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){H();return}W(Y);return}H()},P=(Y)=>j(Y),X=()=>j(),V=()=>j();J.on("error",P),J.once("finish",X),f.once("close",V);try{J.end($)}catch(Y){j(Y)}})}async function VZ(f,$){if($.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await PZ(f,$)}catch(J){let H=aU($.command,process.platform,J);if(!H)throw J;return await PZ(f,{...$,command:H})}}async function PZ(f,$){let J=XZ($.command,{env:$.env,debugRole:"hook"}),H=gU(J[0],J.slice(1),{cwd:$.cwd,env:vH($.env),stdio:$.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:$.detached}),W=new Promise((B)=>{H.once("spawn",()=>B())}),Q=new Promise((B,A)=>{H.once("error",(R)=>A(R))}),Z=JSON.stringify(f);if(await Promise.race([W,Q]),await pU(H,Z),$.detached){H.unref();return}if(!H.stdout||!H.stderr)throw Error("hook command failed to create stdout/stderr");let j="",P="",X=!1,V;H.stdout.on("data",(B)=>{j+=B.toString()}),H.stderr.on("data",(B)=>{P+=B.toString()});let Y=new Promise((B)=>{if(($.timeoutMs??0)>0)V=setTimeout(()=>{X=!0,H.kill("SIGKILL")},$.timeoutMs);H.once("close",(A)=>{if(V)clearTimeout(V);let{parsedJson:R,parseError:U}=lU(j);B({exitCode:A,stdout:j,stderr:P,parsedJson:R,parseError:U,timedOut:X})})});return await Promise.race([Y,Q])}function iU(f){try{let J=uU(f,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let H=J.slice(2).trim();if(!H)return;let W=H.split(/\s+/).filter(Boolean);return W.length>0?W:void 0}catch{return}}function nU(f){return!!(f&&typeof f==="object"&&("code"in f)&&f.code==="ENOENT")}function aU(f,$=process.platform,J){if($!=="win32"||!nU(J))return;if(f[0]!=="py"||f[1]!=="-3")return;return["python",...f.slice(2)]}function YZ(f){if(f.length===0)return;let[$,...J]=f,H=$.replace(/\\/g,"/").toLowerCase(),W=H.split("/").at(-1)??H;if(W==="env")return YZ(J);if(W==="bash"||W==="sh"||W==="zsh")return[W,...J];if(W==="python3"||W==="python")return process.platform==="win32"?["py","-3",...J]:[W,...J];return f}function tU(f){let $=iU(f);if($&&$.length>0)return[...YZ($)??$,f];let J=f.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",f];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return XZ(["node",f],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",f];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",f]:["python3",f];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",f];return["bash",f]}function sU(f){let $={};for(let J of r$(f)){if(!J.hookEventName)continue;let H=J.hookEventName,W=$[H]??[];W.push(tU(J.path)),$[H]=W}return $}async function oU(f){let $;for(let J of f.commands){let H=J.join(" ");try{let W=await VZ(f.payload,{command:J,cwd:f.cwd,env:vH(process.env),detached:!1,timeoutMs:f.timeoutMs});if(W?.timedOut){c8(f.logger,`hook command timed out: ${H}`);continue}if(W?.parseError){c8(f.logger,`hook command returned invalid JSON control output: ${H} (${W.parseError})`);continue}$=dU($,rU(W?.parsedJson))}catch(W){c8(f.logger,`hook command failed: ${H}`,W)}}return $}function V$(f){for(let $ of f.commands){let J=$.join(" ");VZ(f.payload,{command:$,cwd:f.cwd,env:vH(process.env),detached:!0}).catch((H)=>{c8(f.logger,`hook command failed: ${J}`,H)})}}function b0(f){return{agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null}}function gH(f,$){return{...b0(f.snapshot),userMessage:$}}function BZ(f){return{...b0(f.snapshot),iteration:f.snapshot.iteration,call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input}}}function AZ(f){return{...b0(f.snapshot),iteration:f.snapshot.iteration,record:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input,output:f.result.output,error:f.result.isError?String(f.result.output):void 0,durationMs:f.durationMs,startedAt:f.startedAt,endedAt:f.endedAt}}}function RZ(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function eU(f){if(!f)return;let $={};if(f.cancel===!0)$.stop=!0;if(f.overrideInput!==void 0)$.input=f.overrideInput;return Object.keys($).length>0?$:void 0}function r8(f){let $={cwd:f.workspacePath,workspacePath:f.workspacePath,rootSessionId:f.rootSessionId,workspaceInfo:f.workspaceInfo},J=(H)=>{let W=`${JSON.stringify({ts:new Date().toISOString(),...H})}
549
+ `,Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??cU(jZ(),"hooks.jsonl");jZ(Z),vU(Z,W,"utf8")};return{beforeRun:async(H)=>{let W=gH(H,"");J({...Wf(W,$),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(H)=>{let W=BZ(H);J({...Wf(W,$),hookName:"tool_call",iteration:W.iteration,tool_call:{id:W.call.id,name:W.call.name,input:W.call.input},preToolUse:{toolName:W.call.name,parameters:d8(W.call.input)}});return},afterTool:async(H)=>{let W=AZ(H);J({...Wf(W,$),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:d8(W.record.input),result:typeof W.record.output==="string"?W.record.output:JSON.stringify(W.record.output),success:!W.record.error,executionTimeMs:W.record.durationMs}});return},afterRun:async({snapshot:H,result:W})=>{let Q=b0(H);if(W.status==="completed"){J({...Wf(Q,$),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||xH(W.error?.message)){J({...Wf(Q,$),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)J({...Wf(Q,$),hookName:"agent_error",iteration:W.iterations,error:{name:W.error.name,message:W.error.message,stack:W.error.stack}})},onEvent:async(H)=>{if(H.type!=="message-added"||H.message.role!=="user")return;let W=gH({snapshot:H.snapshot},RZ(H.message.content));J({...Wf(W,$),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function uH(f){let $=sU(f.workspacePath);if(!Object.values($).some((Y)=>Y.length>0))return;let H=async(Y,B)=>{let A=$[B]??[];if(A.length===0)return;V$({commands:A,cwd:f.cwd,logger:f.logger,payload:B==="agent_resume"?{...Wf(Y,f),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...Wf(Y,f),hookName:B,taskStart:{taskMetadata:{}}}})},W=async(Y)=>{let B=$.prompt_submit??[];if(B.length>0)V$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Wf(Y,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Y.userMessage,attachments:[]}}})},Q=async(Y)=>{let B=$.tool_call??[];if(B.length===0)return;return oU({commands:B,cwd:f.cwd,logger:f.logger,timeoutMs:f.toolCallTimeoutMs??120000,payload:{...Wf(Y,f),hookName:"tool_call",iteration:Y.iteration,tool_call:{id:Y.call.id,name:Y.call.name,input:Y.call.input},preToolUse:{toolName:Y.call.name,parameters:d8(Y.call.input)}}})},Z=async(Y)=>{let B=$.tool_result??[];if(B.length===0)return;V$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Wf(Y,f),hookName:"tool_result",iteration:Y.iteration,tool_result:Y.record,postToolUse:{toolName:Y.record.name,parameters:d8(Y.record.input),result:typeof Y.record.output==="string"?Y.record.output:JSON.stringify(Y.record.output),success:!Y.record.error,executionTimeMs:Y.record.durationMs}}})},j=async(Y)=>{let B=$.agent_end??[];if(B.length===0)return;V$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Wf(Y,f),hookName:"agent_end",iteration:Y.iteration,turn:Y.turn,taskComplete:{taskMetadata:{}}}})},P=async(Y)=>{let B=$.agent_error??[];if(B.length===0)return;V$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Wf(Y,f),hookName:"agent_error",iteration:Y.iteration,error:{name:Y.error.name,message:Y.error.message,stack:Y.error.stack}}})},X=async(Y)=>{if(xH(Y.reason)){let A=$.agent_abort??[];if(A.length>0)V$({commands:A,cwd:f.cwd,logger:f.logger,payload:{...Wf(Y,f),hookName:"agent_abort",reason:Y.reason,taskCancel:{taskMetadata:{}}}})}let B=$.session_shutdown??[];if(B.length===0)return;V$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Wf(Y,f),hookName:"session_shutdown",reason:Y.reason}})},V={};if(($.agent_start?.length??0)>0||($.agent_resume?.length??0)>0||($.prompt_submit?.length??0)>0){if(($.agent_start?.length??0)>0||($.agent_resume?.length??0)>0)V.beforeRun=async(Y)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await H(b0(Y.snapshot),B);return};if(($.prompt_submit?.length??0)>0)V.onEvent=async(Y)=>{if(Y.type!=="message-added"||Y.message.role!=="user")return;await W(gH({snapshot:Y.snapshot},RZ(Y.message.content)))}}if(($.tool_call?.length??0)>0)V.beforeTool=async(Y)=>{let B=await Q(BZ(Y));return eU(B)};if(($.tool_result?.length??0)>0)V.afterTool=async(Y)=>{await Z(AZ(Y));return};if(($.agent_end?.length??0)>0)V.afterRun=async({snapshot:Y,result:B})=>{if(B.status!=="completed")return;await j({...b0(Y),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if(($.agent_error?.length??0)>0||($.agent_abort?.length??0)>0||($.session_shutdown?.length??0)>0){let Y=V.afterRun;V.afterRun=async(B)=>{await Y?.(B);let{snapshot:A,result:R}=B;if(R.status==="aborted"||xH(R.error?.message)){await X({...b0(A),reason:R.error?.message});return}if(R.error)await P({...b0(A),iteration:R.iterations,error:R.error})}}return V}function l8(f){return v8("core.hook_config_files",uH(f))}function Y$(f,$){let J=f.map((H)=>H[$]).filter((H)=>typeof H==="function");if(J.length===0)return;return async(H)=>{let W;for(let Q of J){let Z=await Q(H);if(!Z||typeof Z!=="object")continue;let j=Z;W={...W??{},...j,stop:W?.stop===!0||j.stop===!0?!0:j.stop,options:W?.options||j.options?{...W?.options??{},...j.options??{}}:void 0}}return W}}function n1(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return;return{beforeRun:Y$($,"beforeRun"),afterRun:Y$($,"afterRun"),beforeModel:Y$($,"beforeModel"),afterModel:Y$($,"afterModel"),beforeTool:Y$($,"beforeTool"),afterTool:Y$($,"afterTool"),onEvent:Y$($,"onEvent")}}import{z as w0}from"zod";var p8=_$;var FZ=w0.object({settings:_$,updatedAt:w0.string().datetime(),tokenSource:w0.enum(["manual","oauth","migration"]).default("manual")}),i8=w0.object({version:w0.literal(1),lastUsedProvider:w0.string().min(1).optional(),providers:w0.record(w0.string(),FZ)});function l$(){return{version:1,providers:{}}}ef();import{upsertWorkspaceInfo as fG,WorkspaceManifestSchema as cH}from"@cline/shared";class n8{manifest;listeners=new Set;constructor(f){this.manifest=cH.parse(f??{workspaces:{}})}async addWorkspacePath(f){let $=await G8(f);return this.manifest=fG(this.manifest,$),this.emit({type:"workspace_added",workspace:$}),$}async switchWorkspace(f){let $=s0(f),J=this.manifest.workspaces[$];if(J)return this.manifest=cH.parse({...this.manifest,currentWorkspacePath:$}),this.emit({type:"workspace_switched",workspace:J}),J;let H=await this.addWorkspacePath($);return this.manifest=cH.parse({...this.manifest,currentWorkspacePath:H.rootPath}),this.emit({type:"workspace_switched",workspace:H}),H}subscribe(f){return this.listeners.add(f),()=>{this.listeners.delete(f)}}getCurrentWorkspace(){let f=this.manifest.currentWorkspacePath;if(!f)return;return this.manifest.workspaces[f]}getWorkspace(f){let $=s0(f);return this.manifest.workspaces[$]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit(f){for(let $ of this.listeners)$(f)}}Af();import{createHash as $G}from"node:crypto";var yZ=new Set,KZ=new Set;function JG(f){return $G("sha256").update(f).digest("hex")}function HG(f){if(f.vcsTypes&&f.vcsTypes.length>0)return f.vcsTypes;return[f.vcsType==="git"?"git":"none"]}function UZ(f){if(!f.telemetry)return;let $=JG(f.rootPath),J=f.rootCount??1;if(!yZ.has($))yZ.add($),b4(f.telemetry,{root_count:J,vcs_types:HG(f),init_duration_ms:f.durationMs,feature_flag_enabled:f.featureFlagEnabled??!0,is_remote_workspace:f.isRemoteWorkspace});if(f.initError&&!KZ.has($)){KZ.add($);let H=Error(f.initError.message);H.name=f.initError.errorType||"Error",w4(f.telemetry,H,{fallback_to_single_root:!0,workspace_count:J})}}function QG(f){return`${f.pluginName??f.pluginPath}: ${f.message}`}function ZG(f,$,J){if($.length>0)for(let Q of $)J?.log(Q.message,{severity:"warn"});if(f.length===0)return;let H=f.slice(0,3).map(QG).join("; "),W=f.length>3?`; and ${f.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${H}${W}. Use --verbose for more details.`,{severity:"warn"});for(let Q of f)J?.log(`Plugin initialization failed (${Q.phase}) for ${Q.pluginPath}`,{severity:"warn",stack:Q.stack,pluginPath:Q.pluginPath,pluginName:Q.pluginName})}function jG(f,$){let J=typeof f.thinking==="boolean",H=typeof f.reasoningEffort==="string";if(!J&&!H)return $;return{...$??{},...J?{enabled:f.thinking}:{},...H?{effort:f.reasoningEffort}:{}}}function PG(f,$){return WG(f,$)}function XG(f){let $=0;for(let J of f??[]){if(J.role!=="user")continue;if(("metadata"in J&&J.metadata&&typeof J.metadata==="object"&&!Array.isArray(J.metadata)?J.metadata:void 0)?.kind==="recovery_notice")continue;$+=1}return $}function VG(f){let $={...f.storedHeaders??{},...f.configHeaders??{}},J=f.accountId?.trim()||YG(f.accessToken);if($.originator="cline",$.session_id=f.sessionId,$["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)$["ChatGPT-Account-Id"]=J;return $}function YG(f){let $=f?.trim();if(!$)return;let J=jf($),H=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof H==="string"&&H.length>0)return H;let W=J?.organizations?.[0]?.id;if(typeof W==="string"&&W.length>0)return W;let Q=J?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;return}function BG(f,$,J,H,W){let Q=J.getProviderSettings(f.providerId),Z=H||Q?.modelCatalog?{...H??{},...Q?.modelCatalog??{}}:void 0,j={...Q??{},provider:f.providerId,model:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.providerId==="openai-codex"?VG({sessionId:$,configHeaders:f.headers,storedHeaders:Q?.headers,accountId:Q?.auth?.accountId,accessToken:f.apiKey??Q?.auth?.accessToken??Q?.apiKey}):f.headers??Q?.headers,reasoning:jG(f,Q?.reasoning),modelCatalog:Z},P=tf(j);if(f.knownModels)P.knownModels=f.knownModels;if(f.extensionContext)P.extensionContext=f.extensionContext;let V=f.fetch??P.fetch??W;if(V)P.fetch=V;return P}async function GZ(f){let{input:$,sessionId:J,providerSettingsManager:H,defaultTelemetry:W,defaultCapabilities:Q,defaultToolPolicies:Z,defaultFetch:j,onPluginEvent:P,onTeamEvent:X,createSpawnTool:V,localRuntime:Y,readSessionMetadata:B,writeSessionMetadata:A}=f,R=q0($.config),{modelCatalogDefaults:U,userInstructionService:y,configExtensions:F,onTeamRestored:K,...M}=Y??{},T=Object.keys(M).length>0?M:void 0,{workspaceInfo:G,workspaceMetadata:h,durationMs:L,vcsType:x,initError:Cf}=await R7(R),p=T?.extensionContext,g={...p??{},workspace:{...G,...p?.workspace??{}},session:{...p?.session??{},sessionId:J},logger:p?.logger??T?.logger,telemetry:p?.telemetry??T?.telemetry??W};UZ({telemetry:g.telemetry,rootPath:G.rootPath,workspaceInfo:G,rootCount:1,vcsType:x,durationMs:L,initError:Cf,featureFlagEnabled:!0});let v=l8({cwd:$.config.cwd,workspacePath:R,rootSessionId:J,logger:T?.logger,workspaceInfo:G}),i=w7(T?.hooks)?void 0:r8({rootSessionId:J,workspacePath:R,workspaceInfo:G}),If=n1([T?.hooks,i]),q;if(PG(F,"plugins"))try{q=await F8({pluginPaths:T?.pluginPaths,workspacePath:R,cwd:$.config.cwd,onEvent:P,providerId:$.config.providerId,modelId:$.config.modelId,workspaceInfo:G,session:g.session,client:g.client,user:g.user,logger:g.logger,telemetry:g.telemetry,automation:g.automation}),ZG(q.failures,q.warnings,T?.logger)}catch(f1){let u=f1 instanceof Error?f1.message:String(f1);T?.logger?.log?.(`plugin loading failed; continuing without plugins (${u})`)}let Ef=cJ(v?[v]:void 0,cJ(T?.extensions,HJ(q?.extensions))),s={...$.config,...T??{},sessionId:J,hooks:If,extensions:Ef,extensionContext:g,telemetry:g.telemetry},o$=BG(s,J,H,U,j),k0=n1([s.hooks,s.checkpoint?.enabled===!0?MQ({cwd:s.cwd,sessionId:J,logger:s.logger,createCheckpoint:s.checkpoint?.createCheckpoint,initialRunCount:XG($.initialMessages),readSessionMetadata:B,writeSessionMetadata:A}):void 0]),m0={...s,providerConfig:o$,workspaceMetadata:h,hooks:k0},K$=$.toolPolicies??s.toolPolicies??Z,e$=Vf(Q,$.capabilities),j2=e$?.requestToolApproval,L4=e$?.toolExecutors,U$=new n8({currentWorkspacePath:G.rootPath,workspaces:{[G.rootPath]:G}});return{effectiveInput:$,config:m0,providerConfig:o$,workspaceMetadata:h,workspaceInfo:G,extensions:Ef,hooks:k0,toolPolicies:K$,requestToolApproval:j2,pluginSandboxShutdown:q?.shutdown,runtimeBuilderInput:{config:m0,hooks:k0,extensions:Ef,onTeamEvent:X,createSpawnTool:V,onTeamRestored:K,userInstructionService:y,configExtensions:F,toolExecutors:L4,workspaceManager:U$,logger:m0.logger,telemetry:m0.telemetry}}}import{resolveDocumentsExtensionPath as AG}from"@cline/shared/storage";Af();function hZ(f,$,J,H,W){if(J)E4(f.telemetry,{ulid:$,apiProvider:f.providerId,...W});else C4(f.telemetry,{ulid:$,apiProvider:f.providerId,...W});RG(f.telemetry,{workspacePath:H})}function RG(f,$){let J=AG("Hooks"),H=r$($.workspacePath),W=new Map;for(let Q of H){let Z=Q.hookEventName??"unknown",j=W.get(Z)??{global:0,workspace:0};if(Q.path===J||Q.path.startsWith(`${J}/`))j.global+=1;else j.workspace+=1;W.set(Z,j)}for(let[Q,Z]of W.entries())d4(f,Q,Z.global,Z.workspace)}function TZ(f,$){for(let J of $.mentions)u4(f,J,$.matchedFiles.includes(J)?1:0,"file",!$.matchedFiles.includes(J));for(let J of $.matchedFiles)g4(f,"file",J.length);for(let J of $.ignoredMentions)v4(f,"file","not_found",J)}import{chmodSync as IZ,existsSync as nH,mkdirSync as sG,readFileSync as oG,writeFileSync as eG}from"node:fs";import{basename as xZ,dirname as aH}from"node:path";import{resolveProviderSettingsPath as fh}from"@cline/shared/storage";import{existsSync as FG,mkdirSync as yG,readFileSync as KG,writeFileSync as UG}from"node:fs";import{mkdir as GG,readFile as hG,writeFile as TG}from"node:fs/promises";import{dirname as dH,join as DG}from"node:path";import*as Kf from"@cline/llms";import{ModelCapabilitySchema as MG,ProviderCapabilitySchema as _G,ProviderClientSchema as LG,ProviderProtocolSchema as zG}from"@cline/shared";import{z as d}from"zod";var OG=d.object({id:d.string().optional(),name:d.string().optional(),capabilities:d.array(MG).optional(),supportsVision:d.boolean().optional(),supportsAttachments:d.boolean().optional(),supportsReasoning:d.boolean().optional()}).passthrough(),NG=d.object({name:d.string(),baseUrl:d.string(),defaultModelId:d.string().optional(),protocol:zG.optional(),client:LG.optional(),capabilities:d.array(_G).optional(),modelsSourceUrl:d.string().optional()}).passthrough(),DZ=d.object({provider:NG.optional(),models:d.record(d.string(),OG).optional()}).passthrough(),MZ=d.object({version:d.literal(1),providers:d.record(d.string(),DZ)}),qG=d.object({version:d.literal(1),providers:d.record(d.string(),d.unknown())}),a8=new Set;function _Z(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function B$(f){return DG(dH(f.getFilePath()),"models.json")}function t8(){return{version:1,providers:{}}}function LZ(f){let $=qG.safeParse(f);if(!$.success)return t8();let J={};for(let[H,W]of Object.entries($.data.providers)){let Q=DZ.safeParse(W);if(Q.success)J[H]=Q.data}return{version:1,providers:J}}function rH(f){if(!FG(f))return t8();try{let $=KG(f,"utf8");return LZ(JSON.parse($))}catch{}return t8()}async function p$(f){try{let $=await hG(f,"utf8");return LZ(JSON.parse($))}catch{}return t8()}function zZ(f,$){yG(dH(f),{recursive:!0});let J=MZ.parse($);UG(f,`${JSON.stringify(J,null,2)}
550
+ `,"utf8")}async function s8(f,$){await GG(dH(f),{recursive:!0});let J=MZ.parse($);await TG(f,`${JSON.stringify(J,null,2)}
551
+ `,"utf8")}function OZ(f,$){return{id:f,name:$.name??f,supportsAttachments:$.capabilities?.includes("files"),supportsVision:$.capabilities?.includes("images"),supportsReasoning:$.capabilities?.includes("reasoning")||$.thinkingConfig!=null}}function NZ(f){if(!f||f.length===0)return;let $=new Set;if(f.includes("reasoning"))$.add("reasoning");if(f.includes("prompt-cache"))$.add("prompt-cache");if(f.includes("tools"))$.add("tools");return $.size>0?[...$]:void 0}function qZ(f){let $=new Set;if(!f||f.length===0)return[...$];if(f.includes("streaming"))$.add("streaming");if(f.includes("tools"))$.add("tools");if(f.includes("reasoning"))$.add("reasoning");if(f.includes("prompt-cache"))$.add("prompt-cache");if(f.includes("vision"))$.add("images"),$.add("files");return[...$]}function bG(f){return f!=null&&typeof f.name==="string"&&typeof f.baseUrl==="string"}function bZ(f,$){return f??$??"openai-chat"}function wZ(f,$,J){return f??J??($==="openai-responses"?"openai":"openai-compatible")}function wG(f,$){let J=new Set($?.capabilities??[]);if($?.supportsVision)J.add("images");if($?.supportsAttachments)J.add("files");if($?.supportsReasoning)J.add("reasoning");return{id:f,name:$?.name??f,capabilities:J.size>0?[...J]:void 0}}function CG(f,$){for(let[J,H]of Object.entries($??{})){let W=H.id?.trim()||J.trim();if(!W)continue;Kf.registerModel(f,W,wG(W,H))}}function EG(f,$,J){return{...$??{},id:f,name:$?.name??f,capabilities:$?.capabilities??J}}function SG(f){return Object.assign({},...Kf.resolveProviderModelCatalogKeys(f).map((J)=>Kf.getGeneratedModelsForProvider(J)))}function kG(f){let $=f.provider.trim();if(!$||Kf.isBuiltInProviderId($))return;let J=f.baseUrl?.trim();if(!J)return;let H=Kf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=SG($),Q=qZ(f.capabilities),Z=Q.length>0?Q:void 0,j=f.model?.trim(),P={...W,...H?.models??{}};if(j)P[j]=EG(j,P[j],Z);let X=Object.keys(P).filter(Boolean),V=j||X[0];if(!V)return;let Y=bZ(f.protocol,H?.provider.protocol),B=wZ(f.client,Y,H?.provider.client);Kf.registerProvider({provider:{id:$,name:H?.provider.name??_Z($),description:H?.provider.description,protocol:Y,client:B,baseUrl:J,modelsSourceUrl:H?.provider.modelsSourceUrl,defaultModelId:V,capabilities:NZ(f.capabilities)??H?.provider.capabilities,source:"file"},models:P})}function o8(f){for(let $ of Object.values(f.providers))kG($.settings)}function a1(f,$){let J=$.models??{};if(!bG($.provider)){CG(f,J);return}let H=qZ($.provider.capabilities),W=Object.entries(J).map(([X,V])=>({id:V.id?.trim()||X.trim(),model:V})).filter(({id:X})=>X.length>0),Q=$.provider.defaultModelId?.trim()||W[0]?.id||"default",Z=bZ($.provider.protocol,void 0),j=wZ($.provider.client,Z,void 0),P=Object.fromEntries(W.map(({id:X,model:V})=>[X,{id:X,name:V.name??X,capabilities:H.length>0?H:void 0,status:"active"}]));Kf.registerProvider({provider:{id:f,name:$.provider.name.trim()||_Z(f),protocol:Z,client:j,baseUrl:$.provider.baseUrl,modelsSourceUrl:$.provider.modelsSourceUrl,defaultModelId:Q,capabilities:NZ($.provider.capabilities),source:"file"},models:P})}function CZ(f){let $=B$(f);if(a8.has($))return;let J=rH($);for(let[H,W]of Object.entries(J.providers))a1(H,W);a8.add($)}async function EZ(f){let $=B$(f);if(a8.has($))return;let J=await p$($);for(let[H,W]of Object.entries(J.providers))a1(H,W);a8.add($)}import{existsSync as mG,readFileSync as IG}from"node:fs";import{dirname as xG,join as lH}from"node:path";import*as kZ from"@cline/llms";import{resolveClineDataDir as gG}from"@cline/shared/storage";var mZ="openai";function vG(f){let $=f?.trim();if(!$)return;try{let J=JSON.parse($);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function b(f){let $=f?.trim();return $?$:void 0}function SZ(f){if(!mG(f))return;try{let $=IG(f,"utf8"),J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function uG(f){let $=f.dataDir??gG(),J=f.globalStatePath??lH($,"globalState.json"),H=f.secretsPath??lH($,"secrets.json"),W=SZ(J),Q=SZ(H);if(!W&&!Q)return;return{globalState:W??{},secrets:Q??{}}}function cG(f){try{let J=new URL(f).hostname.toLowerCase();return J==="api.openai.com"||J.endsWith(".openai.azure.com")||J.endsWith(".services.ai.azure.com")}catch{return!1}}function dG(f){let $=b(f.openAiBaseUrl);if(!$)return!1;if(f.azureApiVersion||f.azureIdentity)return!1;return!cG($)}function pH(f,$){if(f==="openai"&&dG($))return mZ;return f}function rG(f,$,J,H){let W=J==="plan"?"planMode":"actMode",Q=$===H?b(J==="plan"?f.planModeApiModelId:f.actModeApiModelId):void 0,j={openrouter:`${W}OpenRouterModelId`,cline:`${W}ClineModelId`,openai:`${W}OpenAiModelId`,ollama:`${W}OllamaModelId`,lmstudio:`${W}LmStudioModelId`,litellm:`${W}LiteLlmModelId`,requesty:`${W}RequestyModelId`,together:`${W}TogetherModelId`,fireworks:`${W}FireworksModelId`,sapaicore:`${W}SapAiCoreModelId`,groq:`${W}GroqModelId`,baseten:`${W}BasetenModelId`,huggingface:`${W}HuggingFaceModelId`,"huawei-cloud-maas":`${W}HuaweiCloudMaasModelId`,oca:`${W}OcaModelId`,aihubmix:`${W}AihubmixModelId`,hicap:`${W}HicapModelId`,nousResearch:`${W}NousResearchModelId`,"vercel-ai-gateway":`${W}VercelAiGatewayModelId`}[$];return(j?b(typeof f[j]==="string"?f[j]:void 0):void 0)??Q}function lG(f,$,J){let H=J==="plan"?f.planModeReasoningEffort:f.actModeReasoningEffort,W=J==="plan"?f.geminiPlanModeThinkingLevel:f.geminiActModeThinkingLevel,Q=J==="plan"?f.planModeThinkingBudgetTokens:f.actModeThinkingBudgetTokens,Z=($==="gemini"?W:void 0)??H,j=Z==="none"||Z==="low"||Z==="medium"||Z==="high"?Z:void 0,P=typeof Q==="number"&&Number.isInteger(Q)&&Q>0?Q:void 0;if(!j&&P===void 0)return;return{...j?{effort:j}:{},...P!==void 0?{budgetTokens:P}:{}}}function pG(f){let $=f["openai-codex-oauth-credentials"];if(!$)return;try{let J=JSON.parse($),H=b(J.access_token),W=b(J.refresh_token),Q=b(J.accountId);if(!H&&!W&&!Q)return;return{...H?{apiKey:H}:{},auth:{...H?{accessToken:H}:{},...W?{refreshToken:W}:{},...Q?{accountId:Q}:{}}}}catch{return}}function iG(f){let $=kZ.getGeneratedModelsForProvider(f);return Object.keys($)[0]??void 0}function nG(f,$,J,H){let W=pH(f,$),Q=b(H==="plan"?$.planModeApiProvider:$.actModeApiProvider),Z=rG($,f,H,Q)??iG(W),j=lG($,W,H),P=typeof $.requestTimeoutMs==="number"&&Number.isInteger($.requestTimeoutMs)&&$.requestTimeoutMs>0?$.requestTimeoutMs:void 0,X={anthropic:J.apiKey,cline:J.clineApiKey,openai:J.openAiApiKey,"openai-native":J.openAiNativeApiKey,openrouter:J.openRouterApiKey,bedrock:J.awsBedrockApiKey,gemini:J.geminiApiKey,ollama:J.ollamaApiKey,deepseek:J.deepSeekApiKey,requesty:J.requestyApiKey,together:J.togetherApiKey,fireworks:J.fireworksApiKey,qwen:J.qwenApiKey,doubao:J.doubaoApiKey,mistral:J.mistralApiKey,litellm:J.liteLlmApiKey,asksage:J.asksageApiKey,xai:J.xaiApiKey,moonshot:J.moonshotApiKey,zai:J.zaiApiKey,huggingface:J.huggingFaceApiKey,nebius:J.nebiusApiKey,sambanova:J.sambanovaApiKey,cerebras:J.cerebrasApiKey,groq:J.groqApiKey,"huawei-cloud-maas":J.huaweiCloudMaasApiKey,baseten:J.basetenApiKey,"vercel-ai-gateway":J.vercelAiGatewayApiKey,dify:J.difyApiKey,minimax:J.minimaxApiKey,hicap:J.hicapApiKey,aihubmix:J.aihubmixApiKey,nousResearch:J.nousResearchApiKey,oca:J.ocaApiKey,sapaicore:J.sapAiCoreClientId},V={};if(f==="openai-codex")Object.assign(V,pG(J));if(f==="cline")try{let F=b(J["cline:clineAccountId"]);if(F)V.auth={...V.auth??{},...vG(F)}}catch{}if(f==="openai"&&$.openAiHeaders)V.headers=$.openAiHeaders;if(f==="bedrock")V.aws={accessKey:b(J.awsAccessKey),secretKey:b(J.awsSecretKey),sessionToken:b(J.awsSessionToken),region:b($.awsRegion),authentication:$.awsAuthentication,profile:$.awsUseProfile?b($.awsProfile):void 0,usePromptCache:$.awsBedrockUsePromptCache,useCrossRegionInference:$.awsUseCrossRegionInference,useGlobalInference:$.awsUseGlobalInference,endpoint:b($.awsBedrockEndpoint),customModelBaseId:b(H==="plan"?$.planModeAwsBedrockCustomModelBaseId:$.actModeAwsBedrockCustomModelBaseId)};if(f==="vertex")V.gcp={projectId:b($.vertexProjectId),region:b($.vertexRegion)};if(f==="openai"&&($.azureApiVersion||$.azureIdentity!==void 0))V.azure={apiVersion:b($.azureApiVersion),useIdentity:$.azureIdentity};if(f==="sapaicore")V.sap={clientId:b(J.sapAiCoreClientId),clientSecret:b(J.sapAiCoreClientSecret),tokenUrl:b($.sapAiCoreTokenUrl),resourceGroup:b($.sapAiResourceGroup),deploymentId:b(H==="plan"?$.planModeSapAiCoreDeploymentId:$.actModeSapAiCoreDeploymentId),useOrchestrationMode:$.sapAiCoreUseOrchestrationMode};if(f==="oca"){V.oca={mode:$.ocaMode};let F=b(J.ocaRefreshToken);if(F)V.auth={...V.auth??{},refreshToken:F}}if(f==="qwen")V.apiLine=$.qwenApiLine;if(f==="moonshot")V.apiLine=$.moonshotApiLine;if(f==="zai")V.apiLine=$.zaiApiLine;if(f==="minimax")V.apiLine=$.minimaxApiLine;let Y={anthropic:$.anthropicBaseUrl,openai:$.openAiBaseUrl,ollama:$.ollamaBaseUrl,lmstudio:$.lmStudioBaseUrl,litellm:$.liteLlmBaseUrl,gemini:$.geminiBaseUrl,requesty:$.requestyBaseUrl,asksage:$.asksageApiUrl,dify:$.difyBaseUrl,oca:$.ocaBaseUrl,aihubmix:$.aihubmixBaseUrl,sapaicore:$.sapAiCoreBaseUrl},B=b(X[f]),A=b(Y[f]),R={provider:W,...B?{apiKey:B}:{},...Z?{model:Z}:{},...A?{baseUrl:A}:{},...j?{reasoning:j}:{},...P?{timeout:P}:{},...V},U=p8.safeParse(R);if(!U.success)return;return Object.keys(R).filter((F)=>F!=="provider").length>0?U.data:void 0}function aG(f,$){if(f!==mZ)return;if(!$.baseUrl||!$.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:$.baseUrl,defaultModelId:$.model},models:{[$.model]:{id:$.model,name:$.model}}}}function tG(f,$){let J=new Set;for(let H of[f.actModeApiProvider,f.planModeApiProvider]){let W=b(H);if(W)J.add(W)}if(b($.apiKey))J.add("anthropic");if(b($.openRouterApiKey))J.add("openrouter");if(b($.openAiApiKey))J.add("openai");if(b($.openAiNativeApiKey))J.add("openai-native");if(b($["openai-codex-oauth-credentials"]))J.add("openai-codex");if(b($.geminiApiKey))J.add("gemini");if(b($.ollamaApiKey))J.add("ollama");if(b($.awsAccessKey)||b($.awsBedrockApiKey))J.add("bedrock");if(b(f.vertexProjectId)||b(f.vertexRegion))J.add("vertex");if(b($.clineApiKey))J.add("cline");if(b($.ocaApiKey))J.add("oca");return J}function iH(f){let $=f.providerSettingsManager.read(),J=uG(f);if(!J)return{migrated:!1,providerCount:Object.keys($.providers).length,lastUsedProvider:$.lastUsedProvider};let{globalState:H,secrets:W}=J,Q=H.mode==="plan"?"plan":"act",Z=tG(H,W),j=l$();j.providers={...$.providers},j.lastUsedProvider=$.lastUsedProvider;let P=new Date().toISOString(),X=0,V=lH(xG(f.providerSettingsManager.getFilePath()),"models.json"),Y=rH(V),B=0;for(let U of Z){let y=pH(U,H);if(j.providers[y])continue;let F=nG(U,H,W,Q);if(!F)continue;j.providers[y]={settings:F,updatedAt:P,tokenSource:"migration"},X+=1;let K=aG(y,F);if(K&&!Y.providers[y])Y.providers[y]=K,B+=1}if(X===0&&B===0)return{migrated:!1,providerCount:Object.keys($.providers).length,lastUsedProvider:$.lastUsedProvider};let A=b(Q==="plan"?H.planModeApiProvider:H.actModeApiProvider),R=A?pH(A,H):void 0;if(j.lastUsedProvider=$.lastUsedProvider??(R&&j.providers[R]?R:Object.keys(j.providers)[0]),f.providerSettingsManager.write(j),B>0)zZ(V,Y);return{migrated:X>0||B>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}function $h(){return new Date().toISOString()}function Jh(f){if(xZ(f)!=="providers.json")return;let $=aH(f);if(xZ($)!=="settings")return;return aH($)}class C0{filePath;dataDir;constructor(f={}){if(this.filePath=f.filePath??fh(),this.dataDir=f.dataDir??Jh(this.filePath),this.dataDir||!f.filePath)iH({providerSettingsManager:this,dataDir:this.dataDir});if(CZ(this),o8(this.read()),nH(this.filePath))try{IZ(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!nH(this.filePath))return l$();try{let f=oG(this.filePath,"utf8"),$=JSON.parse(f),J=i8.safeParse($);if(J.success)return o8(J.data),J.data}catch{}return l$()}write(f){let $=i8.parse(f),J=aH(this.filePath);if(!nH(J))sG(J,{recursive:!0,mode:448});eG(this.filePath,`${JSON.stringify($,null,2)}
552
+ `,"utf8");try{IZ(this.filePath,384)}catch{}o8($)}saveProviderSettings(f,$={}){let J=p8.parse(f),H=this.read(),W=J.provider,Q=$.setLastUsed!==!1,Z=H.providers[W],j=$.tokenSource??Z?.tokenSource??"manual",P={...H,providers:{...H.providers,[W]:{settings:J,updatedAt:$h(),tokenSource:j}},lastUsedProvider:Q?W:H.lastUsedProvider};return this.write(P),P}getProviderSettings(f){return this.read().providers[f]?.settings}getLastUsedProviderSettings(){let f=this.read(),$=f.lastUsedProvider;if(!$)return;return f.providers[$]?.settings}getProviderConfig(f,$){let J=this.getProviderSettings(f);if(!J)return;return tf(J,$)}getLastUsedProviderConfig(f){let $=this.getLastUsedProviderSettings();if(!$)return;return tf($,f)}async refreshCatalog(){try{await O2({})}catch{}}}Af();C8();import{execFile as Hh}from"node:child_process";import{promisify as Wh}from"node:util";var i$=Wh(Hh);function tH(f){let $=f?.metadata?.checkpoint&&typeof f.metadata.checkpoint==="object"&&!Array.isArray(f.metadata.checkpoint)?f.metadata.checkpoint:void 0;return(Array.isArray($?.history)?$.history:[]).filter((H)=>!!H&&typeof H==="object"&&!Array.isArray(H)).flatMap((H)=>{let W=String(H.ref??"").trim(),Q=Number(H.createdAt??0),Z=Number(H.runCount??0);if(W.length===0||!Number.isFinite(Q)||!Number.isInteger(Z)||Z<1)return[];let j=H.kind==="stash"||H.kind==="commit"?H.kind:void 0;return[{ref:W,createdAt:Q,runCount:Z,...j?{kind:j}:{}}]})}function gZ(f,$){let J=tH(f).filter((W)=>W.runCount<=$),H=J.at(-1);return H?{latest:H,history:J}:void 0}function Qh(f,$){return f.reduce((J,H)=>{if(H.runCount>$)return J;if(!J||H.runCount>J.runCount)return H;return J},void 0)}function vZ(f,$){let J=0;for(let H=0;H<f.length;H+=1){let W=f[H];if(W?.role!=="user")continue;if(("metadata"in W&&W.metadata&&typeof W.metadata==="object"?W.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===$)return H}throw Error(`Could not find user message for checkpoint run ${$}`)}function Zh(f,$){let J=vZ(f,$);return f.slice(0,J+1)}function uZ(f,$){let J=vZ(f,$);return f.slice(0,J)}function cZ(f){let $=f.checkpointRunCount;if(!Number.isInteger($)||$<1)throw Error("checkpointRunCount must be a positive integer");let J=Qh(tH(f.session),$);if(!J)throw Error(`No checkpoint found at or before run ${$} in session ${f.session.sessionId}`);let H=(f.cwd?.trim()||f.session.cwd||f.session.workspaceRoot).trim();if(!H)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:H,...f.restoreMessages!==!1?{messages:Zh(f.messages??[],$)}:{}}}async function dZ(f,$){if((await i$("git",["-C",f,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${f} is not a git repository`);if(await i$("git",["-C",f,"cat-file","-e",`${$.ref}^{commit}`],{windowsHide:!0}),await i$("git",["-C",f,"reset","--hard"],{windowsHide:!0}),await i$("git",["-C",f,"clean","-fd"],{windowsHide:!0}),$.kind==="commit"){await i$("git",["-C",f,"reset","--hard",$.ref],{windowsHide:!0});return}await i$("git",["-C",f,"stash","apply",$.ref],{windowsHide:!0})}class mf extends Error{code;constructor(f,$){super($);this.code=f;this.name="SessionVersioningError"}}function jh(f){let $=f.sessionId.trim();if(!$)throw new mf("invalid_restore","sessionId is required");if(!f.restoreMessages&&!f.restoreWorkspace)throw new mf("invalid_restore","restore.messages or restore.workspace must be true");if(f.restoreMessages&&f.requiresStart)throw new mf("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger(f.checkpointRunCount)||f.checkpointRunCount<1)throw new mf("invalid_restore","checkpointRunCount must be a positive integer");return $}class n${async restoreCheckpoint(f){let $=f.restore?.messages!==!1,J=f.restore?.workspace!==!1,H=jh({sessionId:f.sessionId,restoreMessages:$,restoreWorkspace:J,requiresStart:f.start===void 0,checkpointRunCount:f.checkpointRunCount}),W=await f.getSession(H);if(!W)throw new mf("session_not_found",`Session ${H} not found`);let Q=$?await f.readMessages(H):void 0;if($&&Q?.length===0)throw new mf("session_messages_not_found",`No messages found for session ${H}`);let Z=cZ({session:W,messages:Q,checkpointRunCount:f.checkpointRunCount,cwd:f.cwd,restoreMessages:$});if(J)await(f.applyWorkspaceCheckpoint??dZ)(Z.cwd,Z.checkpoint);let j=z0({session:W,messages:Q});if(!$)return{checkpoint:Z.checkpoint,sourceSnapshot:j};let P=gZ(W,f.checkpointRunCount),X=f.restore?.omitCheckpointMessageFromSession?uZ(Q??[],f.checkpointRunCount):Z.messages??[],V={sourceSession:W,sourceMessages:Q,sourceSnapshot:j,plan:Z,restoredCheckpointMetadata:P,initialMessages:X,restoreMessages:$,restoreWorkspace:J,checkpointRunCount:f.checkpointRunCount};if(!f.start||!f.startSession)throw new mf("invalid_restore","start is required when restore.messages is true");let Y=f.buildStartInput?await f.buildStartInput(V,f.start):f.start,B=await f.startSession(Y),A=f.getStartedSessionId?.(B);if(A)await(f.retainCheckpointRefs??DQ)(Z.cwd,A,P?.history??[]);let R=A&&f.readRestoredSession?await f.readRestoredSession(A):void 0;return{sessionId:A,startResult:B,messages:Z.messages,checkpoint:Z.checkpoint,sourceSnapshot:j,...R?{restoredSnapshot:z0({session:R,messages:X})}:{}}}}import{hasRuntimeConfigExtension as ih}from"@cline/shared";import{nanoid as nh}from"nanoid";import{spawn as Ph}from"node:child_process";import{StringDecoder as iZ}from"node:string_decoder";var Xh="2024-11-05",Vh=5000,Yh=1500;function rZ(f){return f instanceof Error?f.message:String(f)}function lZ(f){let $=Buffer.from(JSON.stringify(f),"utf8"),J=Buffer.from(`Content-Length: ${$.byteLength}\r
553
+ \r
554
+ `,"utf8");return Buffer.concat([J,$])}function pZ(f){return Buffer.from(`${JSON.stringify(f)}
555
+ `,"utf8")}class sH{buffer="";decoder=new iZ("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`\r
556
+ \r
557
+ `);if(J<0)break;let W=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!W)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let Q=Number.parseInt(W[1],10),Z=J+4,j=Z+Q;if(this.buffer.length<j)break;$.push(this.buffer.slice(Z,j)),this.buffer=this.buffer.slice(j)}return $}}class oH{buffer="";decoder=new iZ("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`
558
+ `);if(J<0)break;let H=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),H.length>0)$.push(H)}return $}}class nZ{registration;process;nextRequestId=1;pending=new Map;framedParser=new sH;newlineParser=new oH;stderrBuffer="";connected=!1;protocolMode="newline";constructor(f){this.registration=f}async connect(){if(this.connected)return;if(this.registration.transport.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let f=["newline","framed"],$;for(let J of f){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:Xh,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},Yh),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(H){$=H instanceof Error?H:Error(String(H))}}throw $??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let f=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!f)return;f.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter(($)=>typeof $?.name==="string"&&typeof $.inputSchema==="object"&&$.inputSchema!==null).map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}async callTool(f){return this.request("tools/call",{name:f.name,arguments:f.arguments??{}})}spawnProcess(f){let $=this.registration.transport;if($.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${$.type}`);this.framedParser=new sH,this.newlineParser=new oH,this.stderrBuffer="",this.protocolMode=f;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},H=Ph($.command,$.args??[],{cwd:$.cwd,env:{...process.env,...$.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=H,H.stdout.on("data",(W)=>this.handleStdout(W)),H.stderr.on("data",(W)=>{if(this.process!==H)return;if(this.stderrBuffer+=W.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),H.once("error",(W)=>{if(this.process!==H)return;this.failAllPending(Error(`MCP process error: ${rZ(W)}`))}),H.once("exit",(W,Q)=>{if(this.process!==H)return;this.connected=!1,this.process=void 0;let Z=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${W??"null"}, signal=${Q??"null"}).${Z}`))})}handleStdout(f){try{let $=this.protocolMode==="framed"?this.framedParser.push(f):this.newlineParser.push(f);for(let J of $){let H=JSON.parse(J);if(typeof H.id!=="number")continue;let W=this.pending.get(H.id);if(!W)continue;if(this.pending.delete(H.id),clearTimeout(W.timeout),H.error){let Q=H.error.message||`MCP request failed with code ${H.error.code??"unknown"}`;W.reject(Error(Q));continue}W.resolve(H.result)}}catch($){this.handleProtocolFailure($)}}handleProtocolFailure(f){let $=this.process;if(!$)return;this.connected=!1,this.process=void 0;let J=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`Invalid MCP response from "${this.registration.name}": ${rZ(f)}.${J}`)),$.kill()}async request(f,$,J=Vh){let H=this.process;if(!H?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let W=this.nextRequestId++,Q={jsonrpc:"2.0",id:W,method:f,...$?{params:$}:{}},Z=new Promise((j,P)=>{let X=setTimeout(()=>{this.pending.delete(W),P(Error(`MCP request timed out for "${this.registration.name}" (${f}).`))},J);this.pending.set(W,{resolve:j,reject:P,timeout:X})});try{H.stdin.write(this.protocolMode==="framed"?lZ(Q):pZ(Q))}catch(j){let P=this.pending.get(W);if(P)clearTimeout(P.timeout),this.pending.delete(W);throw j}return Z}notify(f,$){let J=this.process;if(!J?.stdin.writable)return;let H={jsonrpc:"2.0",method:f,...$?{params:$}:{}};J.stdin.write(this.protocolMode==="framed"?lZ(H):pZ(H))}failAllPending(f){for(let[$,J]of this.pending)clearTimeout(J.timeout),this.pending.delete($),J.reject(f)}}function e8(){return(f)=>new nZ(f)}import{existsSync as Bh,readFileSync as Ah}from"node:fs";import{resolveMcpSettingsPath as Rh}from"@cline/shared/storage";import{z as C}from"zod";var t1=C.record(C.string(),C.string()),aZ=C.record(C.string(),C.unknown()),Fh=C.object({type:C.literal("stdio"),command:C.string().min(1),args:C.array(C.string()).optional(),cwd:C.string().min(1).optional(),env:t1.optional()}),yh=C.object({type:C.literal("sse"),url:C.string().url(),headers:t1.optional()}),Kh=C.object({type:C.literal("streamableHttp"),url:C.string().url(),headers:t1.optional()}),Uh=C.discriminatedUnion("type",[Fh,yh,Kh]),Gh=C.object({transport:Uh,disabled:C.boolean().optional(),metadata:aZ.optional()}),hh=C.enum(["stdio","sse","http","streamableHttp"]).optional(),tZ=C.object({type:C.enum(["stdio","sse","streamableHttp"]).optional(),transportType:hh,disabled:C.boolean().optional(),metadata:aZ.optional()});function eH(f){if(!f)return;if(f==="http")return"streamableHttp";return f}var Th=tZ.extend({command:C.string().min(1),args:C.array(C.string()).optional(),cwd:C.string().min(1).optional(),env:t1.optional()}).superRefine((f,$)=>{let J=f.type??eH(f.transportType);if(J&&J!=="stdio")$.addIssue({code:C.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform((f)=>({transport:{type:"stdio",command:f.command,args:f.args,cwd:f.cwd,env:f.env},disabled:f.disabled,metadata:f.metadata})),Dh=tZ.extend({url:C.string().url(),headers:t1.optional()}).superRefine((f,$)=>{let J=f.type??eH(f.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")$.addIssue({code:C.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((f)=>{if((f.type??eH(f.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:f.url,headers:f.headers},disabled:f.disabled,metadata:f.metadata};return{transport:{type:"sse",url:f.url,headers:f.headers},disabled:f.disabled,metadata:f.metadata}}),Mh=C.union([Gh,Th,Dh]),_h=C.object({mcpServers:C.record(C.string(),Mh)}).strict();function a$(){return Rh()}function fW(f={}){let $=f.filePath??a$(),J=Ah($,"utf8"),H;try{H=JSON.parse(J)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}let W=_h.safeParse(H);if(!W.success){let Q=W.error.issues.map((Z)=>{let j=Z.path.join(".");return j?`${j}: ${Z.message}`:Z.message}).join("; ");throw Error(`Invalid MCP settings at "${$}": ${Q}`)}return W.data}function f4(f={}){let $=f.filePath??a$();return Bh($)}function $W(f={}){let $=fW(f);return Object.entries($.mcpServers).map(([J,H])=>({name:J,transport:H.transport,disabled:H.disabled,metadata:H.metadata}))}async function $4(f,$={}){let J=$W($);for(let H of J)await f.registerServer(H);return J}function Of(){return Date.now()}function Lh(f){return f.map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}class s1{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor(f){this.clientFactory=f.clientFactory,this.toolsCacheTtlMs=f.toolsCacheTtlMs??5000}async registerServer(f){await this.runExclusive(f.name,async()=>{let $=this.servers.get(f.name);if(!$){this.servers.set(f.name,{registration:{...f},status:"disconnected",updatedAt:Of()});return}let J=JSON.stringify($.registration.transport)!==JSON.stringify(f.transport);if($.registration={...f},$.updatedAt=Of(),J)await this.disconnectState($),$.client=void 0,$.toolCache=void 0,$.toolCacheUpdatedAt=void 0})}async unregisterServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.disconnectState($),this.servers.delete(f)})}async connectServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.connectState($)})}async disconnectServer(f){await this.runExclusive(f,async()=>{let $=this.requireServer(f);await this.disconnectState($)})}async setServerDisabled(f,$){await this.runExclusive(f,async()=>{let J=this.requireServer(f);if(J.registration={...J.registration,disabled:$},J.updatedAt=Of(),$)await this.disconnectState(J)})}listServers(){return[...this.servers.values()].map((f)=>({name:f.registration.name,status:f.status,disabled:f.registration.disabled===!0,lastError:f.lastError,toolCount:f.toolCache?.length??0,updatedAt:f.updatedAt,metadata:f.registration.metadata})).sort((f,$)=>f.name.localeCompare($.name))}async listTools(f){let $=this.requireServer(f),J=$.toolCacheUpdatedAt??0;if($.toolCache&&Of()-J<=this.toolsCacheTtlMs)return $.toolCache;return this.refreshTools(f)}async refreshTools(f){return this.runExclusive(f,async()=>{let $=this.requireServer(f),H=await(await this.ensureConnectedClient($)).listTools(),W=Lh(H);return $.toolCache=W,$.toolCacheUpdatedAt=Of(),$.updatedAt=Of(),W})}async callTool(f){return this.runExclusive(f.serverName,async()=>{let $=this.requireServer(f.serverName),J=await this.ensureConnectedClient($);return $.updatedAt=Of(),J.callTool({name:f.toolName,arguments:f.arguments,context:f.context})})}async dispose(){let f=[...this.servers.keys()];for(let $ of f)await this.unregisterServer($)}async ensureConnectedClient(f){if(await this.connectState(f),!f.client)throw Error(`MCP server "${f.registration.name}" does not have an initialized client.`);return f.client}async connectState(f){if(f.registration.disabled)throw Error(`MCP server "${f.registration.name}" is disabled and cannot be connected.`);if(f.status==="connected"&&f.client)return;f.status="connecting",f.updatedAt=Of();try{let $=f.client??await this.clientFactory(f.registration);await $.connect(),f.client=$,f.status="connected",f.lastError=void 0,f.updatedAt=Of()}catch($){throw f.status="disconnected",f.lastError=$ instanceof Error?$.message:String($),f.updatedAt=Of(),$}}async disconnectState(f){if(!f.client){f.status="disconnected",f.updatedAt=Of();return}try{await f.client.disconnect()}finally{f.status="disconnected",f.updatedAt=Of()}}requireServer(f){let $=this.servers.get(f);if(!$)throw Error(`Unknown MCP server: ${f}`);return $}async runExclusive(f,$){let J=this.operationLocks.get(f)??Promise.resolve(),H,W=new Promise((Z)=>{H=Z}),Q=J.catch(()=>{return}).then(()=>W);this.operationLocks.set(f,Q),await J.catch(()=>{return});try{return await $()}finally{if(H?.(),this.operationLocks.get(f)===Q)this.operationLocks.delete(f)}}}import{createHash as zh}from"node:crypto";var sZ=128,Oh=/[^a-zA-Z0-9_-]+/g,oZ=8,Nh=1,qh="mcp_tool";function bh(f){return zh("sha1").update(f).digest("hex").slice(0,oZ)}function wh(f){return f.replace(Oh,"_")}var J4=({serverName:f,toolName:$})=>{let J=`${f}__${$}`,H=wh(J);if(H===J&&J.length<=sZ)return J;let W=bh(J),Q=sZ-Nh-oZ;return`${H.slice(0,Q)||qh}_${W}`};function JW(f){return{[(f.nameTransform??J4)({serverName:f.serverName,toolName:f.toolName})]:{enabled:!1}}}function eZ(f){let $={};for(let J of f.toolNames)Object.assign($,JW({serverName:f.serverName,toolName:J,nameTransform:f.nameTransform}));return $}import{createTool as Ch}from"@cline/shared";function Eh(f,$){let J=$.description?.trim();if(J)return J;return`Execute MCP tool "${$.name}" from server "${f}".`}async function H4(f){let $=await f.provider.listTools(f.serverName),J=f.nameTransform??J4;return $.map((H)=>{let W=J({serverName:f.serverName,toolName:H.name});return Ch({name:W,description:Eh(f.serverName,H),inputSchema:H.inputSchema,timeoutMs:f.timeoutMs,retryable:f.retryable,maxRetries:f.maxRetries,execute:async(Q,Z)=>f.provider.callTool({serverName:f.serverName,toolName:H.name,arguments:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:void 0,context:Z})})})}ef();import{appendFileSync as Sh,existsSync as t$,mkdirSync as fj,readdirSync as kh,readFileSync as $j,renameSync as mh,writeFileSync as Ih}from"node:fs";import{join as HW}from"node:path";import{resolveTeamDataDir as xh}from"@cline/shared/storage";function Jj(){return new Date().toISOString()}function WW(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Hj(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class W4{teamDirPath;constructor(f={}){this.teamDirPath=f.teamDir??xh()}init(){this.ensureTeamDir()}listTeamNames(){if(!t$(this.teamDirPath))return[];return kh(this.teamDirPath,{withFileTypes:!0}).filter((f)=>f.isDirectory()).filter((f)=>t$(this.statePath(f.name))).map((f)=>f.name).sort()}readState(f){let $=this.readEnvelope(f);return $?.teamState?Hj($.teamState):void 0}readHistory(f,$=200){let J=this.historyPath(f);if(!t$(J))return[];return $j(J,"utf8").split(`
559
+ `).map((H)=>H.trim()).filter(Boolean).map((H)=>{try{return JSON.parse(H)}catch{return}}).filter((H)=>H!==void 0).reverse().slice(0,$)}loadRuntime(f){let $=this.readEnvelope(f);return{state:$?.teamState?Hj($.teamState):void 0,teammates:$?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(f,$){this.ensureTeamSubdir(f),Sh(this.historyPath(f),`${JSON.stringify({ts:Jj(),eventType:$.type,payload:$})}
560
+ `,"utf8")}persistRuntime(f,$,J){this.ensureTeamSubdir(f);let H={version:1,updatedAt:Jj(),teamState:$,teammates:J},W=this.statePath(f),Q=`${W}.tmp`;Ih(Q,`${JSON.stringify(H,null,2)}
561
+ `,"utf8"),mh(Q,W)}markInProgressRunsInterrupted(f,$){let J=this.readEnvelope(f);if(!J?.teamState?.runs?.length)return[];let H=J.teamState.runs.filter((Q)=>Q.status==="queued"||Q.status==="running").map((Q)=>Q.id);if(H.length===0)return[];let W=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((Q)=>Q.status==="queued"||Q.status==="running"?{...Q,status:"interrupted",error:$,endedAt:W}:Q)},this.persistRuntime(f,J.teamState,J.teammates),H}ensureTeamDir(){if(!t$(this.teamDirPath))fj(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(f){let $=HW(this.ensureTeamDir(),WW(f));if(!t$($))fj($,{recursive:!0});return $}statePath(f){return HW(this.ensureTeamDir(),WW(f),"state.json")}historyPath(f){return HW(this.ensureTeamDir(),WW(f),"task-history.jsonl")}readEnvelope(f){let $=this.statePath(f);if(!t$($))return;try{let J=JSON.parse($j($,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as gh,mkdirSync as vh}from"node:fs";import{join as uh}from"node:path";import{safeJsonParse as Wj}from"@cline/shared";import{loadSqliteDb as ch,nowIso as QW}from"@cline/shared/db";import{resolveDbDataDir as dh}from"@cline/shared/storage";function rh(){return dh()}function s$(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function lh(f){let $=Wj(f);if(!Array.isArray($))return[];let J=[];for(let H of $){if(!H||typeof H!=="object")continue;let W=H,Q=W.agentId,Z=W.rolePrompt;if(typeof Q!=="string"||!Q.trim())continue;if(typeof Z!=="string"||!Z.trim())continue;let j={agentId:Q.trim(),rolePrompt:Z};if(typeof W.modelId==="string"&&W.modelId.trim())j.modelId=W.modelId.trim();if(typeof W.maxIterations==="number"&&Number.isFinite(W.maxIterations))j.maxIterations=Math.max(1,Math.floor(W.maxIterations));J.push(j)}return J}function ph(f){return{...f,tasks:f.tasks.map(($)=>({...$,createdAt:new Date($.createdAt),updatedAt:new Date($.updatedAt)})),mailbox:f.mailbox.map(($)=>({...$,sentAt:new Date($.sentAt),readAt:$.readAt?new Date($.readAt):void 0})),missionLog:f.missionLog.map(($)=>({...$,ts:new Date($.ts)})),runs:(f.runs??[]).map(($)=>({...$,startedAt:new Date($.startedAt),endedAt:$.endedAt?new Date($.endedAt):void 0,nextAttemptAt:$.nextAttemptAt?new Date($.nextAttemptAt):void 0,heartbeatAt:$.heartbeatAt?new Date($.heartbeatAt):void 0})),outcomes:(f.outcomes??[]).map(($)=>({...$,createdAt:new Date($.createdAt),finalizedAt:$.finalizedAt?new Date($.finalizedAt):void 0})),outcomeFragments:(f.outcomeFragments??[]).map(($)=>({...$,createdAt:new Date($.createdAt),reviewedAt:$.reviewedAt?new Date($.reviewedAt):void 0}))}}class o1{teamDirPath;db;constructor(f={}){this.teamDirPath=f.teamDir??rh()}init(){this.getRawDb()}ensureTeamDir(){if(!gh(this.teamDirPath))vh(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return uh(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let f=ch(this.dbPath());return this.ensureSchema(f),this.db=f,f}ensureSchema(f){if(f.exec("PRAGMA journal_mode = WAL;"),f.exec("PRAGMA busy_timeout = 5000;"),f.exec(`
562
+ CREATE TABLE IF NOT EXISTS team_store_schema_version (
563
+ lock INTEGER PRIMARY KEY CHECK (lock = 1),
564
+ version INTEGER NOT NULL
565
+ );
566
+ `),!f.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get())f.prepare("INSERT INTO team_store_schema_version (lock, version) VALUES (1, 1)").run();f.exec(`
567
+ CREATE TABLE IF NOT EXISTS team_events (
568
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
569
+ team_name TEXT NOT NULL,
570
+ ts TEXT NOT NULL,
571
+ event_type TEXT NOT NULL,
572
+ payload_json TEXT NOT NULL,
573
+ causation_id TEXT,
574
+ correlation_id TEXT
575
+ );
576
+ `),f.exec(`
577
+ CREATE INDEX IF NOT EXISTS idx_team_events_name_ts
578
+ ON team_events(team_name, ts DESC);
579
+ `),f.exec(`
580
+ CREATE TABLE IF NOT EXISTS team_runtime_snapshot (
581
+ team_name TEXT PRIMARY KEY,
582
+ state_json TEXT NOT NULL,
583
+ teammates_json TEXT NOT NULL,
584
+ updated_at TEXT NOT NULL
585
+ );
586
+ `),f.exec(`
587
+ CREATE TABLE IF NOT EXISTS team_tasks (
588
+ team_name TEXT NOT NULL,
589
+ task_id TEXT NOT NULL,
590
+ title TEXT NOT NULL,
591
+ description TEXT NOT NULL,
592
+ status TEXT NOT NULL,
593
+ assignee TEXT,
594
+ depends_on_json TEXT NOT NULL,
595
+ summary TEXT,
596
+ version INTEGER NOT NULL DEFAULT 1,
597
+ updated_at TEXT NOT NULL,
598
+ PRIMARY KEY(team_name, task_id)
599
+ );
600
+ `),f.exec(`
601
+ CREATE TABLE IF NOT EXISTS team_runs (
602
+ team_name TEXT NOT NULL,
603
+ run_id TEXT NOT NULL,
604
+ agent_id TEXT NOT NULL,
605
+ task_id TEXT,
606
+ status TEXT NOT NULL,
607
+ message TEXT NOT NULL,
608
+ started_at TEXT,
609
+ ended_at TEXT,
610
+ error TEXT,
611
+ lease_owner TEXT,
612
+ heartbeat_at TEXT,
613
+ version INTEGER NOT NULL DEFAULT 1,
614
+ PRIMARY KEY(team_name, run_id)
615
+ );
616
+ `),f.exec(`
617
+ CREATE INDEX IF NOT EXISTS idx_team_runs_status
618
+ ON team_runs(team_name, status);
619
+ `),f.exec(`
620
+ CREATE TABLE IF NOT EXISTS team_outcomes (
621
+ team_name TEXT NOT NULL,
622
+ outcome_id TEXT NOT NULL,
623
+ title TEXT NOT NULL,
624
+ status TEXT NOT NULL,
625
+ schema_json TEXT NOT NULL,
626
+ finalized_at TEXT,
627
+ version INTEGER NOT NULL DEFAULT 1,
628
+ PRIMARY KEY(team_name, outcome_id)
629
+ );
630
+ `),f.exec(`
631
+ CREATE TABLE IF NOT EXISTS team_outcome_fragments (
632
+ team_name TEXT NOT NULL,
633
+ outcome_id TEXT NOT NULL,
634
+ fragment_id TEXT NOT NULL,
635
+ section TEXT NOT NULL,
636
+ source_agent_id TEXT NOT NULL,
637
+ source_run_id TEXT,
638
+ content TEXT NOT NULL,
639
+ status TEXT NOT NULL,
640
+ reviewed_by TEXT,
641
+ reviewed_at TEXT,
642
+ version INTEGER NOT NULL DEFAULT 1,
643
+ PRIMARY KEY(team_name, fragment_id)
644
+ );
645
+ `)}run(f,$=[]){return this.getRawDb().prepare(f).run(...$)}queryOne(f,$=[]){return this.getRawDb().prepare(f).get(...$)??void 0}queryAll(f,$=[]){return this.getRawDb().prepare(f).all(...$)}withTransaction(f){let $=this.getRawDb();$.exec("BEGIN IMMEDIATE;");try{f(),$.exec("COMMIT;")}catch(J){try{$.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map((f)=>f.team_name)}readState(f){let $=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[s$(f)]);if(!$)return;let J=Wj($.state_json);if(!J)return;try{return ph(J)}catch{return}}readHistory(f,$=200){return this.queryAll("SELECT event_type, payload_json, ts FROM team_events WHERE team_name = ? ORDER BY id DESC LIMIT ?",[s$(f),$]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime(f){let $=s$(f),J=this.readState($),H=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[$]),W=H?lh(H.teammates_json):[];return{state:J,teammates:W,interruptedRunIds:[]}}appendTeamEvent(f,$,J,H){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
646
+ VALUES (?, ?, ?, ?, NULL, ?)`,[s$(f),QW(),$,JSON.stringify(J),H??null])}persistRuntime(f,$,J){let H=s$(f),W=QW();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
647
+ VALUES (?, ?, ?, ?)
648
+ ON CONFLICT(team_name) DO UPDATE SET
649
+ state_json = excluded.state_json,
650
+ teammates_json = excluded.teammates_json,
651
+ updated_at = excluded.updated_at`,[H,JSON.stringify($),JSON.stringify(J),W]);for(let Q of $.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
652
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
653
+ ON CONFLICT(team_name, task_id) DO UPDATE SET
654
+ title = excluded.title,
655
+ description = excluded.description,
656
+ status = excluded.status,
657
+ assignee = excluded.assignee,
658
+ depends_on_json = excluded.depends_on_json,
659
+ summary = excluded.summary,
660
+ version = team_tasks.version + 1,
661
+ updated_at = excluded.updated_at`,[H,Q.id,Q.title,Q.description,Q.status,Q.assignee??null,JSON.stringify(Q.dependsOn??[]),Q.summary??null,Q.updatedAt.toISOString()]);for(let Q of $.runs??[])this.run(`INSERT INTO team_runs (team_name, run_id, agent_id, task_id, status, message, started_at, ended_at, error, lease_owner, heartbeat_at, version)
662
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
663
+ ON CONFLICT(team_name, run_id) DO UPDATE SET
664
+ agent_id = excluded.agent_id,
665
+ task_id = excluded.task_id,
666
+ status = excluded.status,
667
+ message = excluded.message,
668
+ started_at = excluded.started_at,
669
+ ended_at = excluded.ended_at,
670
+ error = excluded.error,
671
+ lease_owner = excluded.lease_owner,
672
+ heartbeat_at = excluded.heartbeat_at,
673
+ version = team_runs.version + 1`,[H,Q.id,Q.agentId,Q.taskId??null,Q.status,Q.message,Q.startedAt?Q.startedAt.toISOString():null,Q.endedAt?Q.endedAt.toISOString():null,Q.error??null,Q.leaseOwner??null,Q.heartbeatAt?Q.heartbeatAt.toISOString():null]);for(let Q of $.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
674
+ VALUES (?, ?, ?, ?, ?, ?, 1)
675
+ ON CONFLICT(team_name, outcome_id) DO UPDATE SET
676
+ title = excluded.title,
677
+ status = excluded.status,
678
+ schema_json = excluded.schema_json,
679
+ finalized_at = excluded.finalized_at,
680
+ version = team_outcomes.version + 1`,[H,Q.id,Q.title,Q.status,JSON.stringify({requiredSections:Q.requiredSections}),Q.finalizedAt?Q.finalizedAt.toISOString():null]);for(let Q of $.outcomeFragments??[])this.run(`INSERT INTO team_outcome_fragments (team_name, outcome_id, fragment_id, section, source_agent_id, source_run_id, content, status, reviewed_by, reviewed_at, version)
681
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
682
+ ON CONFLICT(team_name, fragment_id) DO UPDATE SET
683
+ outcome_id = excluded.outcome_id,
684
+ section = excluded.section,
685
+ source_agent_id = excluded.source_agent_id,
686
+ source_run_id = excluded.source_run_id,
687
+ content = excluded.content,
688
+ status = excluded.status,
689
+ reviewed_by = excluded.reviewed_by,
690
+ reviewed_at = excluded.reviewed_at,
691
+ version = team_outcome_fragments.version + 1`,[H,Q.outcomeId,Q.id,Q.section,Q.sourceAgentId,Q.sourceRunId??null,Q.content,Q.status,Q.reviewedBy??null,Q.reviewedAt?Q.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted(f,$){let J=s$(f),H=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(H.length===0)return[];let W=QW();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
692
+ WHERE team_name = ? AND status IN ('queued', 'running')`,[$,W,J]),H.map((Q)=>Q.run_id)}handleTeamEvent(f,$){this.appendTeamEvent(f,$.type,$)}}function Qj(f={}){try{let $=new o1(f);return $.init(),$}catch{let $=new W4({teamDir:f.teamDir});return $.init(),$}}function ZW(f,$){return ih(f,$)}function ah(f,$){let J=$?.["*"]??{},H=$?.[f]??{};return{...J,...H}.enabled!==!1}function th(f,$){return f.filter((J)=>ah(J.name,$))}function Zj(f,$){return S$(th(f,$))}function jj(){return`team-${nh(5)}`}function jW(f,$,J,H,W,Q,Z,j){let P=uf[U0({mode:J})],X=V1($,H,J,W??X1);return Zj(y1({cwd:f,...P,enableSkills:!!Z,...X,executors:{...Z?{skills:Z}:{},...j??{}}}),Q)}function sh(f){return jW(f.cwd,f.providerId,f.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,oh,f.toolExecutors).some(($)=>$.name==="skills")}var oh=async()=>"";async function eh(f){let $=a$();if(!f4({filePath:$}))return{tools:[]};let J=new s1({clientFactory:e8()}),H;try{H=await $4(J,{filePath:$})}catch(j){await J.dispose().catch(()=>{});let P=j instanceof Error?j.message:String(j);return f?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${P}`),{tools:[]}}let W=H.filter((j)=>j.disabled!==!0),Q=await Promise.allSettled(W.map((j)=>H4({serverName:j.name,provider:J}))),Z=[];for(let[j,P]of Q.entries())if(P.status==="fulfilled")Z.push(...P.value);else{let X=P.reason instanceof Error?P.reason.message:String(P.reason);f?.log(`[mcp] Failed to load tools from MCP server "${W[j].name}", skipping: ${X}`)}return{tools:Z,shutdown:async()=>{await J.dispose()}}}function fT(f,$){if(!f)return;for(let J of f.getTeammateIds())try{f.shutdownTeammate(J,$)}catch{}}function $T(f){if(f===void 0)return!0;switch(f){case"session_stop":case"session_complete":case"session_error":case"session_manager_dispose":case"cli_run_shutdown":case"cli_interactive_shutdown":case"cli_interactive_startup_cancelled":case"provider_change":case"acp_shutdown":case"hub_server_stop":case"vscode_webview_dispose":return!0;default:return!1}}function JT(f){let $=uf[U0({mode:f.mode})];return{sessionId:f.sessionId||"",mode:f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act",enableTools:f.enableTools!==!1,enableSpawnAgent:f.enableSpawnAgent??$.enableSpawnAgent??!0,enableAgentTeams:f.enableAgentTeams??$.enableAgentTeams??!0,disableMcpSettingsTools:f.disableMcpSettingsTools===!0,yolo:f.yolo===!0,missionLogIntervalSteps:typeof f.missionLogIntervalSteps==="number"&&Number.isFinite(f.missionLogIntervalSteps)?f.missionLogIntervalSteps:3,missionLogIntervalMs:typeof f.missionLogIntervalMs==="number"&&Number.isFinite(f.missionLogIntervalMs)?f.missionLogIntervalMs:120000}}class Q4{teamRuntimeEntries=new Map;async build(f){let{config:$,hooks:J,extensions:H,logger:W,telemetry:Q,createSpawnTool:Z,onTeamRestored:j,userInstructionService:P,configExtensions:X,toolExecutors:V}=f,Y=f.onTeamEvent??(()=>{}),B=JT($),A=cf(),R=[],U=$.teamName?.trim()||jj(),y=$.sessionId?.trim()||U,F=ZW(X,"rules"),K=ZW(X,"skills"),M=ZW(X,"workflows"),T=F||K||M,G=!1,h=Boolean(P),L=P,x;if(!L&&T)L=C$({skills:{workspacePath:$.cwd},rules:{workspacePath:$.cwd},workflows:{workspacePath:$.cwd}});if(L)await L.start().catch(()=>{});let Cf=B.enableTools&&K&&Boolean(L)&&(h||L?.hasConfiguredSkills($.skills)===!0)&&sh({cwd:$.cwd,providerId:$.providerId,mode:B.mode,modelId:$.modelId,toolRoutingRules:$.toolRoutingRules,toolPolicies:$.toolPolicies,toolExecutors:V}),p=L&&T?L.createExtension({includeRules:F,includeSkills:K,includeWorkflows:M,registerSkillsTool:Cf,allowedSkillNames:$.skills}):void 0,g=p?[...H??$.extensions??[],p]:H??$.extensions;if(B.enableTools){if(R.push(...jW($.cwd,$.providerId,B.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let u=await eh($.logger);R.push(...u.tools),x=u.shutdown}}let v,i=B.enableAgentTeams?Qj():void 0,If=i?.loadRuntime(y),q=If?.state,xf=If?.teammates??[],Ef=new Map(xf.map((u)=>[u.agentId,u])),s=$.sessionId||U,o$,k0=[],m0=!1,K$=J8({providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey??"",baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:J,extensions:g,logger:W??$.logger,telemetry:f.telemetry??$.telemetry,workspaceMetadata:$.workspaceMetadata});if(!this.teamRuntimeEntries.has(s))this.teamRuntimeEntries.set(s,{delegatedAgentConfigProvider:K$});let e$=()=>{if(!B.enableAgentTeams)return;let u=this.teamRuntimeEntries.get(s)??{delegatedAgentConfigProvider:K$};if(this.teamRuntimeEntries.set(s,u),v=u.runtime,!v){if(v=new u1({teamName:U,leadAgentId:$.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(t)=>{if(Y(t),v&&i){if(t.type==="teammate_spawned"&&t.teammate?.rolePrompt){let af={agentId:t.agentId,rolePrompt:t.teammate.rolePrompt,modelId:t.teammate.modelId,maxIterations:t.teammate.maxIterations};Ef.set(af.agentId,af)}if(t.type==="teammate_shutdown"&&!$T(t.reason))Ef.delete(t.agentId);i.handleTeamEvent(y,t),i.persistRuntime(y,v.exportState(),Array.from(Ef.values()))}}}),q)v.hydrateState(q),m0=!0;u.runtime=v}if(!G){if(!v)return;G=!0;let t=Z8({runtime:v,leadAgentId:$.sessionId||"lead",restoredFromPersistence:Boolean(q),restoredTeammates:xf,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(af)=>{k0=af,o$?.addTools(af)},createBaseTools:B.enableTools?()=>jW($.cwd,$.providerId,B.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,V):void 0,teammateConfigProvider:K$});if(m0)v.recoverActiveRuns("runtime_recovered");if(t.restoredFromPersistence)j?.();R.push(...t.tools)}return v};if(B.enableSpawnAgent&&Z){let u=Z();R.push({...u,execute:async(t,af)=>{return e$(),u.execute(t,af)}})}if(B.enableAgentTeams)e$();let j2=Zj(R,$.toolPolicies),L4=j2.some((u)=>u.name===$f.SUBMIT_AND_EXIT&&u.lifecycle?.completesRun===!0),U$=B.enableAgentTeams?()=>{let u=this.teamRuntimeEntries.get(s)?.runtime;if(!u)return;let t=u.listTasks(),af=t.some((j0)=>j0.status==="in_progress"||j0.status==="pending"),uW=u.listRuns({}),uP=uW.some((j0)=>j0.status==="running"||j0.status==="queued");if(af||uP){let j0=t.filter((Gf)=>Gf.status==="in_progress"||Gf.status==="pending").map((Gf)=>`${Gf.id} (${Gf.status}): ${Gf.title}`).join(", "),cW=uW.filter((Gf)=>Gf.status==="running"||Gf.status==="queued").map((Gf)=>`${Gf.id} (${Gf.status})`).join(", "),z4=[];if(j0)z4.push(`Unfinished tasks: ${j0}`);if(cW)z4.push(`Active runs: ${cW}`);return`[SYSTEM] You still have team obligations. ${z4.join(". ")}. Use team_run_task to delegate work, or team_task with action=complete to mark tasks done, or team_await_runs to wait for active runs. Do NOT stop until all tasks are completed.`}return}:void 0,f1=L4?{requireCompletionTool:!0,...U$?{completionGuard:U$}:{}}:U$?{completionGuard:U$}:void 0;return{tools:j2,logger:W??$.logger,telemetry:Q??$.telemetry,teamRuntime:v,teamRestoredFromPersistence:Boolean(q),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(s)?.delegatedAgentConfigProvider??K$,extensions:g,completionPolicy:f1,registerLeadAgent:(u)=>{if(o$=u,k0.length>0)u.addTools(S$(k0,[...A]))},shutdown:async(u)=>{if(fT(v,u),this.teamRuntimeEntries.delete(s),await x?.(),!h)L?.stop()}}}}import{isOAuthProviderId as HT}from"@cline/shared";var WT="https://api.cline.bot",PW="workos:";function QT(f,$){if(f==="cline")return`${PW}${$}`;return $}function ZT(f,$){if(f==="cline"&&$.toLowerCase().startsWith(PW))return $.slice(PW.length);return $}function jT(f){let J=jf(f)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function PT(f,$){let J=f.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let H=jT($);if(H)return H;return Date.now()-1}function XT(f,$){let J=$.auth?.accessToken?.trim(),H=$.auth?.refreshToken?.trim();if(!J||!H)return null;let W=ZT(f,J);if(!W)return null;return{access:W,refresh:H,expires:PT($,W),accountId:$.auth?.accountId}}function VT(f,$){let J=f?.expiresAt,H=$?.expiresAt;return f?.accessToken===$?.accessToken&&f?.refreshToken===$?.refreshToken&&f?.accountId===$?.accountId&&J===H}class Z4 extends Error{providerId;constructor(f){super(`OAuth credentials for provider "${f}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=f}}class XW{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor(f){this.providerSettingsManager=f?.providerSettingsManager??new C0,this.telemetry=f?.telemetry}async resolveProviderApiKey(f){if(!HT(f.providerId))return null;return this.resolveWithSingleFlight(f.providerId,f.forceRefresh)}async resolveWithSingleFlight(f,$=!1){let J=this.refreshInFlight.get(f);if(J)return J;let H=this.resolveProviderApiKeyInternal(f,$).catch((W)=>{throw W}).finally(()=>{this.refreshInFlight.delete(f)});return this.refreshInFlight.set(f,H),H}async resolveProviderApiKeyInternal(f,$){let J=this.providerSettingsManager.getProviderSettings(f);if(!J)return null;let H=XT(f,J);if(!H)return null;let W=await this.resolveCredentials(f,J,H,$);if(!W)throw new Z4(f);let Q=QT(f,W.access),Z={...J.auth??{},accessToken:Q,refreshToken:W.refresh,accountId:W.accountId};Z.expiresAt=W.expires;let j={...J,auth:Z},P=!VT(J.auth,j.auth);if(P)this.providerSettingsManager.saveProviderSettings(j,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:f,apiKey:Q,accountId:W.accountId,refreshed:P}}async resolveCredentials(f,$,J,H){if(f==="cline")return t4(J,{apiBaseUrl:$.baseUrl?.trim()||WT,telemetry:this.telemetry},{forceRefresh:H});if(f==="oca")return J6(J,{forceRefresh:H,telemetry:this.telemetry},{mode:$.oca?.mode,telemetry:this.telemetry});return o4(J,{forceRefresh:H,telemetry:this.telemetry})}}import{normalizeUserInput as YT}from"@cline/shared";import{nanoid as BT}from"nanoid";class Pj{list(f){return f?Nf(f):[]}update(f,$){if(!f)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=$.promptId.trim(),H=f.pendingPrompts.findIndex((P)=>P.id===J);if(H<0)return{sessionId:$.sessionId,prompts:Nf(f),updated:!1};let W=f.pendingPrompts[H];if(!W)return{sessionId:$.sessionId,prompts:Nf(f),updated:!1};let Q=$.prompt===void 0?W.prompt:YT($.prompt).trim();if(!Q)throw Error("prompt cannot be empty");let Z=$.delivery??W.delivery,j={...W,prompt:Q,delivery:Z};return f.pendingPrompts.splice(H,1),AT(f,j,H,W.delivery),{sessionId:$.sessionId,prompts:Nf(f),prompt:j4(j),updated:!0}}delete(f,$){if(!f)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=$.promptId.trim(),H=f.pendingPrompts.findIndex((Q)=>Q.id===J);if(H<0)return{sessionId:$.sessionId,prompts:Nf(f),removed:!1};let[W]=f.pendingPrompts.splice(H,1);return{sessionId:$.sessionId,prompts:Nf(f),prompt:W?j4(W):void 0,removed:!0}}enqueue(f,$){let{prompt:J,delivery:H,userImages:W,userFiles:Q}=$,Z=f.pendingPrompts.findIndex((j)=>j.prompt===J);if(Z>=0){let[j]=f.pendingPrompts.splice(Z,1),P={...j,prompt:J,userImages:W??j.userImages,userFiles:Q??j.userFiles};if(H==="steer"||j.delivery==="steer")f.pendingPrompts.unshift({...P,delivery:"steer"});else f.pendingPrompts.push(P)}else{let j={id:`pending_${Date.now()}_${BT(5)}`,prompt:J,delivery:H,userImages:W,userFiles:Q};if(H==="steer")f.pendingPrompts.unshift(j);else f.pendingPrompts.push(j)}return Nf(f)}consumeSteer(f){let $=f.pendingPrompts.findIndex((H)=>H.delivery==="steer");if($<0)return{prompts:Nf(f)};let[J]=f.pendingPrompts.splice($,1);return{entry:J,prompts:Nf(f)}}shiftNext(f){return{entry:f.pendingPrompts.shift(),prompts:Nf(f)}}requeueFront(f,$){return f.pendingPrompts.unshift($),Nf(f)}clear(f){return f.pendingPrompts.length=0,[]}}class VW{deps;service=new Pj;constructor(f){this.deps=f}list(f){return this.service.list(this.deps.getSession(f))}update(f){let $=this.deps.getSession(f.sessionId);if(!$||$.aborting)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=this.service.update($,f);return this.emitPrompts($),this.scheduleDrain(f.sessionId,$),J}delete(f){let $=this.deps.getSession(f.sessionId);if(!$||$.aborting)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=this.service.delete($,f);return this.emitPrompts($),this.scheduleDrain(f.sessionId,$),J}enqueue(f,$){let J=this.deps.getSession(f);if(!J||J.aborting)return;this.service.enqueue(J,$),this.emitPrompts(J),this.scheduleDrain(f,J)}consumeSteer(f){let $=this.deps.getSession(f);if(!$)return;let{entry:J}=this.service.consumeSteer($);if(!J)return;return this.emitPrompts($),this.emitSubmitted($,J),J.prompt}clearAborted(f){if(f.pendingPrompts.length===0)return;this.service.clear(f),this.emitPrompts(f)}emitPrompts(f){this.deps.emit({type:"pending_prompts",payload:{sessionId:f.sessionId,prompts:Nf(f)}})}scheduleDrain(f,$){if($.pendingPrompts.length===0||$.aborting||$.drainingPendingPrompts||!$.agent.canStartRun())return;queueMicrotask(()=>{this.drain(f)})}async drain(f){let $=this.deps.getSession(f);if(!$||$.aborting||$.drainingPendingPrompts)return;if(!$.agent.canStartRun())return;let{entry:J}=this.service.shiftNext($);if(!J)return;this.emitPrompts($),this.emitSubmitted($,J),$.drainingPendingPrompts=!0;try{await this.deps.send({sessionId:f,prompt:J.prompt,userImages:J.userImages,userFiles:J.userFiles})}catch(H){if((H instanceof Error?H.message:String(H)).includes("already in progress"))this.service.requeueFront($,J),this.emitPrompts($);else throw H}finally{if($.drainingPendingPrompts=!1,$.pendingPrompts.length>0&&$.status!=="failed"&&$.status!=="cancelled")queueMicrotask(()=>{this.drain(f)})}}emitSubmitted(f,$){let J=j4($);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:f.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function j4(f){return{id:f.id,prompt:f.prompt,delivery:f.delivery,attachmentCount:(f.userImages?.length??0)+(f.userFiles?.length??0)}}function Nf(f){return f.pendingPrompts.map(j4)}function AT(f,$,J,H){if($.delivery==="steer")f.pendingPrompts.unshift($);else if(H==="steer")f.pendingPrompts.push($);else f.pendingPrompts.splice(J,0,$)}Af();class YW{deps;constructor(f){this.deps=f}dispatchAgentEvent(f,$,J){let H=this.deps.getSession(f),W={sessionId:f,config:$,liveSession:H,usageBySession:this.deps.usageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},Q=EH(J),Z=H&&Q.agentId===Xj(H.agent);SH(W,J,Z?{isPrimaryAgentEvent:!0,...H?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent(f,$){let J=this.deps.getSession(f);if(J){if(FH(J,$),$.type==="agent_event"){let H={sessionId:f,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};SH(H,$.event,{teamRole:"teammate",teamAgentId:$.agentId,isPrimaryAgentEvent:!1})}if($.type==="teammate_spawned"){let H=Q0({agentId:$.teammate.runtimeAgentId??$.agentId,conversationId:$.teammate.conversationId,parentAgentId:$.teammate.parentAgentId,createdByAgentId:Xj(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:$.agentId});if(H)x0(J.config.telemetry,{ulid:f,modelId:$.teammate.modelId??J.config.modelId,provider:J.config.providerId,...H})}}if(await yH(f,$,this.deps.invokeBackendOptional),J)KH(J,f,$,this.deps.emit)}async handlePluginEvent(f,$,J){if($.name==="plugin_log"){this.handlePluginLog(f,$.payload);return}if($.name==="automation_event"){let P=this.deps.getSession(f)?.config.extensionContext?.automation??J;if(!P)return;let X=$.payload&&typeof $.payload==="object"?$.payload:void 0;if(!X)return;await P.ingestEvent(X);return}if($.name!=="steer_message"&&$.name!=="queue_message"&&$.name!=="pending_prompt")return;let H=$.payload&&typeof $.payload==="object"?$.payload:void 0,W=typeof H?.sessionId==="string"&&H.sessionId.trim().length>0?H.sessionId.trim():f,Q=typeof H?.prompt==="string"?H.prompt.trim():"";if(!Q)return;let Z=$.name==="steer_message"?"steer":$.name==="queue_message"?"queue":H?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(W,{prompt:Q,delivery:Z})}handlePluginLog(f,$,J){let H=this.deps.getSession(f),W=J??H?.config.extensionContext?.logger??H?.config.logger;if(!W||!$||typeof $!=="object")return;let Q=$,Z=typeof Q.message==="string"?Q.message:"";if(!Z)return;let j=Q.metadata&&typeof Q.metadata==="object"?{...Q.metadata}:{};if(j.sessionId??=f,typeof Q.pluginName==="string"&&Q.pluginName)j.pluginName=Q.pluginName;if(Q.level==="debug"){W.debug(Z,j);return}if(Q.level==="error"){if(W.error)W.error(Z,j);else W.log(Z,{...j,severity:"error"});return}W.log(Z,j)}}function Xj(f){return f.getAgentId()}function BW(f){return{sessionId:f.sessionId,source:f.source,pid:process.pid,startedAt:f.startedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,status:f.status,interactive:f.interactive,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspaceRoot:q0(f.config),teamName:f.config.teamName?.trim()||void 0,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,parentSessionId:typeof f.sessionMetadata?.parentSessionId==="string"?f.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof f.sessionMetadata?.parentAgentId==="string"?f.sessionMetadata.parentAgentId:void 0,agentId:typeof f.sessionMetadata?.agentId==="string"?f.sessionMetadata.agentId:void 0,conversationId:typeof f.sessionMetadata?.conversationId==="string"?f.sessionMetadata.conversationId:void 0,isSubagent:typeof f.sessionMetadata?.isSubagent==="boolean"?f.sessionMetadata.isSubagent:!1,prompt:f.pendingPrompt,metadata:f.sessionMetadata,messagesPath:f.artifacts?.messagesPath,updatedAt:f.updatedAt??f.endedAt??f.startedAt}}function AW(f,$){let J=f[$];return typeof J==="function"?J:null}async function Vj(f,$,...J){let H=AW(f,$);if(!H)throw Error(`session service method not available: ${$}`);return Promise.resolve(H.apply(f,J))}async function Yj(f,$,...J){let H=AW(f,$);if(!H)return;await Promise.resolve(H.apply(f,J))}async function Bj(f,$,...J){let H=AW(f,$);if(!H)return;return await Promise.resolve(H.apply(f,J))}ef();Af();function RW(f,$,J,H){return w$({configProvider:{getRuntimeConfig:()=>f.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:$.hooks,extensions:$.extensions,logger:$.logger,telemetry:$.telemetry},getConnectionConfig:()=>f.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey,baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let Q=$.enableTools?y1({cwd:$.cwd,...uf[U0({mode:$.mode})],executors:H}):[];if($.enableSpawnAgent)Q.push(RW(f,$,J,H));return S$(Q)},onSubAgentEvent:(Q)=>f.onAgentEvent(J,$,Q),onSubAgentStart:(Q)=>{let Z=f.getSession(J)?.runtime.teamRuntime;f.subAgentStarts.set(Q.subAgentId,{startedAt:Date.now(),rootSessionId:J});let j=Q0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)x0($.telemetry,{ulid:J,modelId:$.modelId,provider:$.providerId,...j});Y2($.telemetry,{event:"started",ulid:J,durationMs:0,parentId:Q.parentAgentId,agentId:Q.subAgentId,...j}),f.invokeBackendOptional("handleSubAgentStart",J,Q)},onSubAgentEnd:(Q)=>{let Z=f.getSession(J)?.runtime.teamRuntime,j=f.subAgentStarts.get(Q.subAgentId),P=j?Date.now()-j.startedAt:0,X=Q.result?.text?Q.result.text.split(`
693
+ `).length:0;Y2($.telemetry,{event:"ended",ulid:J,durationMs:P,outputLines:X,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...Q0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId})}),f.subAgentStarts.delete(Q.subAgentId),f.invokeBackendOptional("handleSubAgentEnd",J,Q)}})}import{readFile as RT,stat as FT}from"node:fs/promises";var yT=20480000;async function Aj(f){let $=await FT(f);if(!$.isFile())throw Error("Path is not a file");if($.size>yT)throw Error("File is too large to read into context.");let J=await RT(f,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var Rj=5000;class E0{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new E1;sessions=new Map;usageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new n$;constructor(f){let $=KT();if($)MT($);let J=j$(f.distinctId);this.sessionService=f.sessionService,this.runtimeBuilder=f.runtimeBuilder??new Q4,this.createAgentInstance=f.createAgent??((H)=>new G0(H)),this.defaultCapabilities=Vf(f.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=f.toolPolicies,this.providerSettingsManager=f.providerSettingsManager??new C0,this.oauthTokenManager=f.oauthTokenManager??new XW({providerSettingsManager:this.providerSettingsManager,telemetry:f.telemetry}),this.defaultTelemetry=f.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=f.fetch,this.pendingPromptsController=new VW({getSession:(H)=>this.sessions.get(H),emit:(H)=>this.emit(H),send:(H)=>this.runTurn(H)}),this.pendingPrompts={list:async(H)=>this.pendingPromptsController.list(H.sessionId),update:async(H)=>this.pendingPromptsController.update(H),delete:async(H)=>this.pendingPromptsController.delete(H)},this.eventBridge=new YW({getSession:(H)=>this.sessions.get(H),usageBySession:this.usageBySession,emit:(H)=>this.emit(H),persistMessages:(H,W,Q)=>{this.invoke("persistSessionMessages",H,W,Q)},enqueuePendingPrompt:(H,W)=>this.pendingPromptsController.enqueue(H,W),invokeBackendOptional:(H,...W)=>this.invokeOptional(H,...W)})}async startSession(f){let $=f.source??Pf.CLI,J=n(),H=f.config.sessionId?.trim()??"",W=H||hT(),Q=f,Z=Q.initialMessages??[];this.usageBySession.set(W,Z.length>0?CH(Z):c$());let j=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!j)throw Error("session service method not available: ensureSessionsDir");let P=FW(j,W),X=FW(P,`${W}.messages.json`),V=FW(P,`${W}.json`),Y=q0(f.config),B=yf.parse({version:1,session_id:W,source:$,pid:process.pid,started_at:J,status:"running",interactive:f.interactive===!0,provider:Q.config.providerId,model:Q.config.modelId,cwd:Q.config.cwd,workspace_root:Y,team_name:Q.config.teamName,enable_tools:Q.config.enableTools,enable_spawn:Q.config.enableSpawnAgent,enable_teams:Q.config.enableAgentTeams,prompt:Q.prompt?.trim()||void 0,messages_path:X}),A;if(H.length>0&&Z.length>0&&!Q.prompt?.trim()){let q=await this.invokeOptionalValue("readSessionManifest",W);if(q)B=q,A={manifestPath:V,messagesPath:q.messages_path||X,manifest:q}}let U=Vf(this.defaultCapabilities,f.capabilities),y=U?.toolExecutors??this.toolExecutors,F=f.localRuntime,K=F?.extensionContext?.logger??F?.logger,M=F?.extensionContext?.automation,T;T=await GZ({input:Q,localRuntime:f.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(q)=>{if(q.name==="plugin_log"){this.eventBridge.handlePluginLog(W,q.payload,K);return}this.eventBridge.handlePluginEvent(W,q,M)},onTeamEvent:(q)=>{this.eventBridge.handleTeamEvent(W,q),T.config.onTeamEvent?.(q)},createSpawnTool:()=>RW({getSession:(q)=>this.sessions.get(q),subAgentStarts:this.subAgentStarts,onAgentEvent:(q,xf,Ef)=>this.eventBridge.dispatchAgentEvent(q,xf,Ef),invokeBackendOptional:(q,...xf)=>this.invokeOptional(q,...xf)},T.config,W,y),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(q)=>{await this.persistSessionMetadata(W,()=>q)}});let G=await this.runtimeBuilder.build(T.runtimeBuilderInput),h=T.config,L=T.providerConfig;if(G.teamRuntime&&!h.teamName?.trim())h.teamName=G.teamRuntime.getTeamName();let x=[...G.tools,...h.extraTools??[]],Cf=G.extensions??T.extensions,p={sessionId:W,providerId:L.providerId,modelId:L.modelId,apiKey:L.apiKey,baseUrl:L.baseUrl,headers:L.headers,knownModels:L.knownModels,providerConfig:L,thinking:h.thinking,reasoningEffort:h.reasoningEffort??L.reasoningEffort,systemPrompt:h.systemPrompt,maxIterations:h.maxIterations,execution:h.execution,prepareTurn:wH(h),tools:x,hooks:T.hooks,extensions:Cf,hookErrorMode:h.hookErrorMode,initialMessages:T.effectiveInput.initialMessages,userFileContentLoader:Aj,toolPolicies:T.toolPolicies,requestToolApproval:T.requestToolApproval,onConsecutiveMistakeLimitReached:h.onConsecutiveMistakeLimitReached,completionPolicy:G.completionPolicy,consumePendingUserMessage:()=>{let q=this.pendingPromptsController.consumeSteer(W);return q?d1(q,h.mode):q},logger:G.logger??h.logger,extensionContext:h.extensionContext,onEvent:(q)=>this.eventBridge.dispatchAgentEvent(W,h,q)};p.hooks={...p.hooks,onEvent:async(q)=>{if(await T.hooks?.onEvent?.(q),q.type!=="assistant-message")return;let xf=this.sessions.get(W);if(!xf)return;let Ef=xf.agent.getMessages();try{await this.invoke("persistSessionMessages",W,Ef,h.systemPrompt)}catch(s){h.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:s})}}};let g=this.createAgentInstance(p);if(p.onEvent)g.subscribeEvents(p.onEvent);G.registerLeadAgent?.(g);let v=Q0({agentId:g.getAgentId(),conversationId:g.getConversationId(),teamId:G.teamRuntime?.getTeamId(),teamName:G.teamRuntime?.getTeamName(),teamRole:G.teamRuntime?"lead":void 0});if(hZ(h,W,H.length>0,Y,v),v)x0(h.telemetry,{ulid:W,modelId:h.modelId,provider:h.providerId,...v});if(G.teamRuntime)c4(h.telemetry,{ulid:W,teamId:G.teamRuntime.getTeamId(),teamName:G.teamRuntime.getTeamName(),leadAgentId:g.getAgentId(),restoredFromPersistence:G.teamRestoredFromPersistence===!0});let i={sessionId:W,config:h,sessionMetadata:Q.sessionMetadata,...A?{artifacts:A}:{},source:$,startedAt:A?.manifest.started_at??J,updatedAt:A?.manifest.ended_at??A?.manifest.started_at??J,pendingPrompt:B.prompt,runtime:G,agent:g,started:!1,status:A?.manifest.status??"running",aborting:!1,interactive:f.interactive===!0,persistedMessages:Z,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:T.pluginSandboxShutdown,submitAndExitObserved:!1};if(this.sessions.set(W,i),this.emitStatus(W,"running"),Z.length>0&&!A){if(await this.ensureSessionPersisted(i),await this.invoke("persistSessionMessages",i.sessionId,Z,i.config.systemPrompt),!Q.prompt?.trim())await this.updateStatus(i,"completed",0)}let If;try{if(Q.prompt?.trim())if(If=await this.executeTurn(i,{prompt:Q.prompt,userImages:Q.userImages,userFiles:Q.userFiles}),!i.interactive)await this.finalizeSingleRun(i,If.finishReason);else await this.completeInteractiveTurn(i,If.finishReason)}catch(q){if(i.interactive&&i.aborting)If=await this.completeAbortedInteractiveTurn(i);else throw await this.failSession(i),q}return{sessionId:W,manifest:B,manifestPath:V,messagesPath:X,result:If}}async restoreSession(f){return this.sessionVersioning.restoreCheckpoint({...f,getSession:($)=>this.getSession($),readMessages:($)=>this.readSessionMessages($),buildStartInput:($,J)=>{let H=$.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:$.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...H?{sessionMetadata:H}:{},initialMessages:$.initialMessages}},startSession:($)=>this.startSession($),getStartedSessionId:($)=>$.sessionId,readRestoredSession:($)=>this.getSession($)})}async runTurn(f){let $=this.getSessionOrThrow(f.sessionId),J=$.agent.canStartRun(),H=f.delivery??($.interactive&&!J?"queue":void 0);if($.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:f.sessionId,promptLength:f.prompt.length,userImageCount:f.userImages?.length??0,userFileCount:f.userFiles?.length??0,delivery:H??"immediate"}}),H==="queue"||H==="steer"){this.pendingPromptsController.enqueue(f.sessionId,{prompt:f.prompt,delivery:H,userImages:f.userImages,userFiles:f.userFiles});return}try{let W=await this.executeTurn($,{prompt:f.prompt,userImages:f.userImages,userFiles:f.userFiles});if(!$.interactive)await this.finalizeSingleRun($,W.finishReason);else await this.completeInteractiveTurn($,W.finishReason);if(W.finishReason==="error"||W.finishReason==="aborted")return W;return queueMicrotask(()=>{this.pendingPromptsController.drain(f.sessionId)}),W}catch(W){if($.interactive&&$.aborting)return await this.completeAbortedInteractiveTurn($);throw await this.failSession($),W}}async getAccumulatedUsage(f){return x7(this.usageBySession.get(f))}async abort(f,$){let J=this.sessions.get(f);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:f}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort($)}async stopSession(f){let $=this.sessions.get(f);if(!$)return;if($.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:f}}),$.interactive&&$.status!=="running"){await this.releaseSessionRuntime($,"session_stop");return}$.aborting=!0,$.agent.abort(Error("session_stop")),await this.shutdownSession($,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose(f="session_manager_dispose"){let $=[...this.sessions.values()];if($.length===0)return;await Promise.allSettled($.map((J)=>J.interactive&&J.status!=="running"?this.releaseSessionRuntime(J,f):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:f,endReason:"disposed"}))),this.usageBySession.clear()}async getSession(f){let $=this.sessions.get(f);if($)return BW($);let J=f.trim();if(!J)return;let H=await this.getRow(J);if(H)return w1(H);let W=await this.readManifest(J);return W?nJ(W):void 0}async listSessions(f=200){let J=(await this.listRows(f)).map(w1),H=new Set(J.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(H.has(W.sessionId))continue;J.unshift(BW(W))}return J.slice(0,f)}async deleteSession(f){if(this.sessions.has(f))await this.stopSession(f);let $=await this.invoke("deleteSession",f);if($.deleted)this.usageBySession.delete(f);return $.deleted}async updateSession(f,$){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:f,prompt:$.prompt,metadata:$.metadata,title:$.title}))?.updated===!0}}async readSessionMessages(f){let $=f.trim();if(!$)return[];let J=await this.getRow($);if(J?.messagesPath)return J$(J.messagesPath);let H=await this.readManifest($);return J$(H?.messages_path)}async dispatchHookEvent(f){await g7(f,{queueSpawnRequest:($)=>this.invokeOptional("queueSpawnRequest",$),upsertSubagentSessionFromHook:($)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",$),appendSubagentHookAudit:($,J)=>this.invokeOptional("appendSubagentHookAudit",$,J),applySubagentStatus:($,J)=>this.invokeOptional("applySubagentStatus",$,J)})}subscribe(f,$){return this.events.subscribe(f,$)}async updateSessionModel(f,$){let J=this.getSessionOrThrow(f);J.config.modelId=$,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:$}),J.agent.updateConnection({modelId:$})}handlePluginEvent(f,$,J){return this.eventBridge.handlePluginEvent(f,$,J)}async executeTurn(f,$){let J=await this.prepareTurnInput(f,$),H=J.prompt.trim();if(!H)throw Error("prompt cannot be empty");if(!f.artifacts&&!f.pendingPrompt)f.pendingPrompt=H;await this.ensureSessionPersisted(f),await this.syncOAuthCredentials(f),await this.markTurnRunning(f);let W=await this.executeAgentTurn(f,H,J.userImages,J.userFiles);while(UH(f,W.finishReason)){let Q=await GH(f);if(Q.length===0)break;let Z=hH(f,Q);W=await this.executeAgentTurn(f,Z)}return W}async completeInteractiveTurn(f,$){if(c1(f))return;let J=$==="aborted"||f.aborting,H=$==="error";await this.updateStatus(f,J?"cancelled":H?"failed":"completed",H?1:0),this.emit({type:"ended",payload:{sessionId:f.sessionId,reason:$,ts:Date.now()}}),f.aborting=!1}async completeAbortedInteractiveTurn(f){let $=new Date,J=f.agent.getMessages();return f.persistedMessages=J,f.started=f.started||J.length>0,await this.completeInteractiveTurn(f,"aborted"),{text:"",usage:c$(),messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:f.config.modelId,provider:f.config.providerId},startedAt:$,endedAt:$,durationMs:0}}async executeAgentTurn(f,$,J,H){let W=f.started||f.agent.getMessages().length>0,Q=f.persistedMessages??f.agent.getMessages(),Z=this.usageBySession.get(f.sessionId)??c$();f.turnUsageBaseline=Z,k4(f.config.telemetry,f.sessionId,f.config.mode),$1(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,model:f.config.modelId,source:"user",mode:f.config.mode,...this.getSessionAgentTelemetryIdentity(f)});try{let j=W?()=>f.agent.continue($,J,H):()=>f.agent.run($,J,H),P=await this.runWithAuthRetry(f,j,Q);f.started=!0;let X=_8(P.messages,P,Q);f.persistedMessages=X;let V=d$(Z,P.usage);return this.usageBySession.set(f.sessionId,V),await this.persistSessionMetadata(f.sessionId,(Y)=>({...Y??{},totalCost:V.totalCost})),await this.invoke("persistSessionMessages",f.sessionId,X,f.config.systemPrompt),this.observeTaskCompletionTool(f,P),P}catch(j){throw await this.invoke("persistSessionMessages",f.sessionId,f.agent.getMessages(),f.config.systemPrompt),j}finally{f.turnUsageBaseline=void 0}}observeTaskCompletionTool(f,$){if(f.submitAndExitObserved)return;if(!$.toolCalls.some((H)=>H.name===$f.SUBMIT_AND_EXIT&&H.error===void 0))return;f.submitAndExitObserved=!0,X2(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,modelId:f.config.modelId,mode:f.config.mode,durationMs:Date.now()-Date.parse(f.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity(f)})}async prepareTurnInput(f,$){let J=q0(f.config),H=DT($.prompt).trim();if(!H)return{prompt:"",userImages:$.userImages,userFiles:this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles)};let W=await t2(H,J);TZ(f.config.telemetry,W);let Q=d1(W.prompt,f.config.mode),Z=this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles),j=this.resolveAbsoluteFilePaths(J,W.matchedFiles),P=Array.from(new Set([...Z,...j]));return{prompt:Q,userImages:$.userImages,userFiles:P.length>0?P:void 0}}async ensureSessionPersisted(f){if(f.artifacts)return;let $=q0(f.config);f.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:f.sessionId,source:f.source,pid:process.pid,interactive:f.interactive,provider:f.config.providerId,model:f.config.modelId,cwd:f.config.cwd,workspaceRoot:$,teamName:f.config.teamName,enableTools:f.config.enableTools,enableSpawn:f.config.enableSpawnAgent,enableTeams:f.config.enableAgentTeams,prompt:f.pendingPrompt,metadata:f.sessionMetadata,startedAt:f.startedAt})}async markTurnRunning(f){if(f.status==="running")return;await this.updateStatus(f,"running",null)}async persistSessionMetadata(f,$){let J=this.sessions.get(f),H=await this.invokeOptionalValue("readSessionManifest",f)??J?.artifacts?.manifest,W=$(H?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:f,metadata:W}))?.updated===!1)return;J.sessionMetadata=W,J.artifacts.manifest.metadata=W}async finalizeSingleRun(f,$){if(c1(f))return;let J=$==="aborted"||f.aborting,H=$==="error";await this.shutdownSession(f,{status:J?"cancelled":H?"failed":"completed",exitCode:H?1:0,shutdownReason:H?"session_error":"session_complete",endReason:$})}async failSession(f){await this.shutdownSession(f,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession(f,$){if($.status==="completed"&&!f.submitAndExitObserved)X2(f.config.telemetry,{ulid:f.sessionId,provider:f.config.providerId,modelId:f.config.modelId,mode:f.config.mode,durationMs:Date.now()-Date.parse(f.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity(f)});x8(f);let J=[],H=(W,Q)=>{J.push(Q),f.config.logger?.log("Session shutdown cleanup failed",{sessionId:f.sessionId,stage:W,error:Q,severity:"warn"})};if(f.artifacts){try{await this.updateStatus(f,$.status,$.exitCode)}catch(W){H("update_status",W)}try{await f.agent.shutdown($.shutdownReason)}catch(W){H("agent_shutdown",W)}}try{await Promise.resolve(f.runtime.shutdown($.shutdownReason))}catch(W){H("runtime_shutdown",W)}try{await f.pluginSandboxShutdown?.()}catch(W){H("plugin_sandbox_shutdown",W)}if(this.sessions.delete(f.sessionId),this.emit({type:"ended",payload:{sessionId:f.sessionId,reason:$.endReason,ts:Date.now()}}),J.length>0&&$.status==="failed")throw J[0]}async releaseSessionRuntime(f,$){let J=[],H=(W,Q)=>{J.push(Q),f.config.logger?.log("Session runtime cleanup failed",{sessionId:f.sessionId,stage:W,error:Q,severity:"warn"})};try{await f.agent.shutdown($)}catch(W){H("agent_shutdown",W)}try{await Promise.resolve(f.runtime.shutdown($))}catch(W){H("runtime_shutdown",W)}try{await f.pluginSandboxShutdown?.()}catch(W){H("plugin_sandbox_shutdown",W)}if(this.sessions.delete(f.sessionId),J.length>0)throw J[0]}async updateStatus(f,$,J){if(!f.artifacts)return;let H=await this.invoke("updateSessionStatus",f.sessionId,$,J);if(!H.updated)return;let W=await this.invokeOptionalValue("readSessionManifest",f.sessionId)??f.artifacts.manifest;if(W.status=$,$==="running")delete W.ended_at,W.exit_code=null;else W.ended_at=H.endedAt??n(),W.exit_code=typeof J==="number"?J:null;f.artifacts.manifest=W,f.status=$,f.updatedAt=H.endedAt??n(),f.endedAt=$==="running"?null:W.ended_at,f.exitCode=W.exit_code,await this.invoke("writeSessionManifest",f.artifacts.manifestPath,W),this.emitStatus(f.sessionId,$)}async runWithAuthRetry(f,$,J){try{return await $()}catch(H){if(!TT(H,f.config.providerId))throw H;return await this.syncOAuthCredentials(f,{forceRefresh:!0}),f.agent.restore(J),$()}}async syncOAuthCredentials(f,$){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:f.config.providerId,forceRefresh:$?.forceRefresh})}catch(H){if(H instanceof Z4)throw Error(`${H.providerId} requires re-authentication.`);throw H}if(!J?.apiKey||f.config.apiKey===J.apiKey)return;f.config.apiKey=J.apiKey,f.agent.updateConnection({apiKey:J.apiKey}),f.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),f.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow(f){let $=this.sessions.get(f);if(!$)throw Error(`session not found: ${f}`);return $}resolveAbsoluteFilePaths(f,$){if(!$||$.length===0)return[];let J=$.map((H)=>H.trim()).filter((H)=>H.length>0).map((H)=>UT(H)?H:GT(f,H));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity(f){return Q0({agentId:f.agent.getAgentId(),conversationId:f.agent.getConversationId(),teamId:f.runtime.teamRuntime?.getTeamId(),teamName:f.runtime.teamRuntime?.getTeamName(),teamRole:f.runtime.teamRuntime?"lead":void 0})}emitStatus(f,$){this.emitSessionSnapshot(f),this.emit({type:"status",payload:{sessionId:f,status:$}})}async emitSessionSnapshot(f){let $=await this.getSession(f);if(!$)return;this.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:z0({session:$,messages:await this.readSessionMessages(f),usage:this.usageBySession.get(f)})}})}emit(f){this.events.emit(f)}async listRows(f){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor(f)),Rj))}async getRow(f){let $=f.trim();if(!$)return;return(await this.listRows(Rj)).find((H)=>H.sessionId===$)}async readManifest(f){let $=f.trim();if(!$)return;return await this.invokeOptionalValue("readSessionManifest",$)}invoke(f,...$){return Vj(this.sessionService,f,...$)}invokeOptional(f,...$){return Yj(this.sessionService,f,...$)}invokeOptionalValue(f,...$){return Bj(this.sessionService,f,...$)}}function _T(f){if(f.backendMode)return f.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let $=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if($==="local"||$==="hub"||$==="remote")return $;return"auto"}var e1,f2;function LT(f,$){if(f!=="auto"&&f!=="hub")return;if($.hub?.endpoint?.trim())return;HQ($.hub?.workspaceRoot?.trim()||$.hub?.cwd?.trim()||process.cwd())}async function zT(f){await f.reconcileDeadSessions?.().catch(()=>{})}function yj(f){try{let $=new O0;return $.init(),new N0($,{messagesArtifactUploader:f.messagesArtifactUploader})}catch{return f.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new _H(void 0,{messagesArtifactUploader:f.messagesArtifactUploader})}}function Fj(f,$,J){return new E0({sessionService:J??f.sessionService??yj(f),capabilities:f.capabilities,telemetry:f.telemetry,toolPolicies:f.toolPolicies,distinctId:$,fetch:f.fetch})}async function OT(f){if(e1)return e1;if(f2)return await f2;return f2=(async()=>{return e1=yj(f),await zT(e1),e1})().finally(()=>{f2=void 0}),await f2}async function P4(f){let $=j$(f.distinctId);f.telemetry?.setDistinctId($);let J=_T(f);if(LT(J,f),J==="remote"){let H=f.remote?.endpoint?.trim();if(!H)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return f.logger?.log("Using remote runtime host",{endpoint:H}),new b8({endpoint:H,authToken:f.remote?.authToken,clientType:f.remote?.clientType,displayName:f.remote?.displayName,workspaceRoot:f.remote?.workspaceRoot,cwd:f.remote?.cwd,capabilities:f.capabilities})}if(J==="hub"){let H=f.hub?.endpoint?.trim(),W=H||await m1({strategy:f.hub?.strategy??"require-hub",workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});if(!W)throw Error("No compatible hub runtime is available.");return f.logger?.log("Using hub runtime host",{url:W,explicitEndpoint:H||void 0}),new Z$({url:W,authToken:f.hub?.authToken,clientType:f.hub?.clientType,displayName:f.hub?.displayName,capabilities:f.capabilities},{workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd})}if(J==="auto"){let H=await QH({endpoint:f.hub?.endpoint,strategy:f.hub?.strategy??"prefer-hub",workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});if(H){f.logger?.log("Using discovered local hub runtime host",{url:H});let W=new Z$({url:H,authToken:f.hub?.authToken,clientType:f.hub?.clientType,displayName:f.hub?.displayName,capabilities:f.capabilities},{workspaceRoot:f.hub?.workspaceRoot,cwd:f.hub?.cwd});try{return await W.connect(),W}catch(Q){f.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:Q})}}return f.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),Fj(f,$)}return Fj(f,$)}class yW{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor(f,$,J,H,W,Q,Z,j,P){this.clientName=$,this.runtimeAddress=J,this.host=f,this.prepare=H,this.capabilities=W,this.logger=Q,this.telemetry=Z,this.distinctId=j,this.settings=Z7(f),this.pendingPrompts=j7(f),this.automation=new F6(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=P?new N1({workspaceRoot:P.workspaceRoot??process.cwd(),specs:{cronSpecsDir:P.cronSpecsDir??P.cronDir,scope:c5(P.cronScope),workspaceRoot:P.workspaceRoot},runtimeHandlers:d5({host:f,getExtensionContext:()=>q2({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:P.dbPath,logger:P.logger,pollIntervalMs:P.pollIntervalMs,claimLeaseSeconds:P.claimLeaseSeconds,globalMaxConcurrency:P.globalMaxConcurrency,watcherDebounceMs:P.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((X)=>{if(X.type!=="ended")return;this.disposeSessionBootstrap(X.payload.sessionId)})}static async create(f={}){let $=Vf(f.capabilities),J=await P4({...f,capabilities:$}),H=u5(f.automation),W=new yW(J,f.clientName,J.runtimeAddress,f.prepare,$,f.logger,f.telemetry,f.distinctId,H?{...H,logger:f.logger}:void 0);if(H&&H.autoStart!==!1)await W.automation.start();return W}async disposeSessionBootstrap(f){let $=this.activeSessionBootstraps.get(f);if(!$)return;this.activeSessionBootstraps.delete(f),await Promise.resolve($.dispose?.())}async start(f){let $=P7(f),J=await this.prepare?.($);try{let H=J?await J.applyToStartSessionInput($):$,W=await this.host.startSession(UJ(H,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>q2({automationService:this.automationService,automation:this.automation,context:Q,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(W.sessionId))this.activeSessionBootstraps.set(W.sessionId,J);else await Promise.resolve(J.dispose?.());return X7({input:H,sessionId:W.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),W}catch(H){throw await Promise.resolve(J?.dispose?.()),H}}send=(...f)=>this.host.runTurn(...f);getAccumulatedUsage=(...f)=>{return this.host.getAccumulatedUsage?.(...f)??Promise.resolve(void 0)};abort=(...f)=>this.host.abort(...f);stop=async(f)=>{await this.host.stopSession(f),await this.disposeSessionBootstrap(f)};dispose=async(...f)=>{try{await this.automationService?.dispose(),await this.host.dispose(...f)}finally{this.unsubscribeBootstrapCleanup();let $=[...this.activeSessionBootstraps.keys()];await Promise.allSettled($.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...f)=>this.host.getSession(...f);listHistory=async(f={})=>await aJ(this.host,f);list=async(f=200,$={})=>await this.listHistory({...$,limit:f});delete=async(f)=>{let $=await this.host.deleteSession(f);if($)await this.disposeSessionBootstrap(f);return $};update=(...f)=>this.host.updateSession(...f);readMessages=(...f)=>this.host.readSessionMessages(...f);async restore(f){let $=f.start?UJ(f.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>q2({automationService:this.automationService,automation:this.automation,context:J,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}):void 0;return this.host.restoreSession({sessionId:f.sessionId,checkpointRunCount:f.checkpointRunCount,cwd:f.cwd,restore:f.restore,start:$})}ingestHookEvent=(...f)=>this.host.dispatchHookEvent(...f);subscribe(f,$){return this.host.subscribe(f,$)}updateSessionModel=(...f)=>{return this.host.updateSessionModel?.(...f)??Promise.resolve()}}import{HookEventNameSchema as Uj,HookEventPayloadSchema as Gj,parseHookEventPayload as V4,resolveHookSessionContext as ST}from"@cline/shared";import{z as A$}from"zod";import{spawn as NT}from"node:child_process";import{augmentNodeCommandForDebug as qT,withResolvedClineBuildEnv as bT}from"@cline/shared";function wT(f){let $=f.trim();if(!$)return{};let H=$.split(`
694
+ `).map((Q)=>Q.trim()).filter(Boolean).filter((Q)=>Q.startsWith("HOOK_CONTROL\t")).map((Q)=>Q.slice(13)),W=H.length>0?H[H.length-1]:$;try{return{parsedJson:JSON.parse(W)}}catch(Q){return{parseError:Q instanceof Error?Q.message:"Failed to parse subprocess stdout JSON"}}}function CT(f,$){let J=f instanceof Error?f:Error(String(f)),H=J,W=$.join(" ");if(H.code==="EACCES")return Error(`Failed to execute hook command "${W}" (EACCES). Configure hooks with an explicit interpreter/command array (for example: ["bash", "/path/to/script"]) or make the script executable with a valid shebang.`);return Error(`Failed to execute hook command "${W}": ${J.message}`)}async function ET(f,$){let J=f.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((H,W)=>{let Q=(Z)=>{J.off("error",Q);let j=Z.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){H();return}W(Z)};J.once("error",Q),J.end($,(Z)=>{if(J.off("error",Q),Z){let j=Z.code;if(j==="EPIPE"||j==="ERR_STREAM_DESTROYED"){H();return}W(Z);return}H()})})}async function X4(f,$){let J=qT($.command,{env:$.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let H=!!$.detached,W=NT(J[0],J.slice(1),{cwd:$.cwd,env:bT($.env),stdio:H?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:H}),Q=new Promise((B)=>{W.once("spawn",()=>{try{$.onSpawn?.({command:J,pid:W.pid??void 0,detached:H})}catch{}B()})}),Z=new Promise((B,A)=>{W.once("error",(R)=>{A(CT(R,J))})});if(await ET(W,JSON.stringify(f)),H){await Promise.race([Q,Z]),W.unref();return}if(!W.stdout||!W.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let j="",P="",X=!1,V;W.stdout.on("data",(B)=>{j+=B.toString()}),W.stderr.on("data",(B)=>{P+=B.toString()});let Y=new Promise((B)=>{if(($.timeoutMs??0)>0)V=setTimeout(()=>{X=!0,W.kill("SIGKILL")},$.timeoutMs);W.once("close",(A)=>{if(V)clearTimeout(V);let{parsedJson:R,parseError:U}=wT(j);B({exitCode:A,stdout:j,stderr:P,parsedJson:R,parseError:U,timedOut:X})})});return await Promise.race([Y,Z])}var kT=A$.object({contextModification:A$.string().optional(),cancel:A$.boolean().optional(),review:A$.boolean().optional(),errorMessage:A$.string().optional(),context:A$.string().optional(),overrideInput:A$.unknown().optional()}).passthrough();var mT=["agent","hook"];async function Y4(f,$={}){let J=$.command??mT;return await X4(f,{command:J,cwd:$.cwd,env:$.env,detached:$.detached,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn})}function hj(f){return f instanceof Error?f:Error(String(f))}function IT(f){if(!f||typeof f!=="object")return;let $=kT.safeParse(f);if(!$.success)return;let J=$.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let W=typeof J.context==="string"?J.context:typeof J.contextModification==="string"?J.contextModification:typeof J.errorMessage==="string"&&J.errorMessage.length>0?J.errorMessage:void 0;return{cancel:typeof J.cancel==="boolean"?J.cancel:void 0,review:typeof J.review==="boolean"?J.review:void 0,context:W,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function Kj(f){if(!f||typeof f!=="object")return{};let $={};for(let[J,H]of Object.entries(f))if(typeof H==="string")$[J]=H;else $[J]=JSON.stringify(H);return $}function Z0(f,$,J){let H=J.env??process.env,W=H.CLINE_USER_ID?.trim()||H.USER?.trim()||"unknown",Q=J.cwd||process.cwd();return{clineVersion:H.CLINE_VERSION?.trim()||"",hookName:f,timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:ST(J.sessionContext,{hookName:f,conversationId:$.conversationId,agentId:$.agentId,parentAgentId:$.parentAgentId}),workspaceRoots:Q?[Q]:[],workspaceInfo:J.workspaceInfo,userId:W,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function xT(f){return{name:f.name,message:f.message,stack:f.stack}}function gT(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function vT(f){return{agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null}}function uT(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function cT(f){return{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input,output:f.result.output,error:f.result.isError?String(f.result.output):void 0,durationMs:f.durationMs,startedAt:f.startedAt,endedAt:f.endedAt}}function dT(f){if(!f)return;let $={};if(f.cancel===!0)$.stop=!0;if(f.overrideInput!==void 0)$.input=f.overrideInput;return Object.keys($).length>0?$:void 0}async function R$(f,$){try{let J=await Y4(f,{command:$.command,cwd:$.cwd,env:$.env,detached:!0,onSpawn:$.onSpawn});$.onDispatch?.({payload:f,result:J,detached:!0})}catch(J){$.onDispatchError?.(hj(J),f)}}function Tj(f={}){return{hooks:{beforeRun:async(j)=>{let P=vT(j);if((f.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...Z0("agent_resume",P,f),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await R$(V,f)}else{let V={...Z0("agent_start",P,f),hookName:"agent_start",taskStart:{taskMetadata:{}}};await R$(V,f)}return},beforeTool:async(j)=>{let P={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},X={...Z0("tool_call",P,f),hookName:"tool_call",iteration:j.snapshot.iteration,tool_call:{id:j.toolCall.toolCallId,name:j.toolCall.toolName,input:j.input},preToolUse:{toolName:j.toolCall.toolName,parameters:Kj(j.input)}};try{let V=await Y4(X,{command:f.command,cwd:f.cwd,env:f.env,detached:!1,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn});if(f.onDispatch?.({payload:X,result:V,detached:!1}),V?.timedOut)throw Error("tool_call hook command timed out");if(V?.parseError)throw Error(`tool_call hook produced invalid control JSON: ${V.parseError}`);return dT(IT(V?.parsedJson))}catch(V){f.onDispatchError?.(hj(V),X);return}},afterTool:async(j)=>{let P=cT(j),X={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},V={...Z0("tool_result",X,f),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:P,postToolUse:{toolName:P.name,parameters:Kj(P.input),result:typeof P.output==="string"?P.output:JSON.stringify(P.output),success:!P.error,executionTimeMs:P.durationMs}};await R$(V,f);return},afterRun:async({snapshot:j,result:P})=>{let X={agentId:j.agentId,conversationId:j.conversationId??j.runId??j.agentId,parentAgentId:j.parentAgentId??null};if(P.status==="completed"){let B={...Z0("agent_end",X,f),hookName:"agent_end",iteration:P.iterations,turn:{outputText:P.outputText,status:P.status},taskComplete:{taskMetadata:{}}};await R$(B,f);return}let V=P.status==="aborted"||gT(P.error?.message)?"agent_abort":"agent_error",Y=V==="agent_error"?{...Z0(V,X,f),hookName:V,iteration:P.iterations,error:xT(P.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...Z0(V,X,f),hookName:V,reason:P.error?.message,taskCancel:{taskMetadata:{}}};await R$(Y,f)},onEvent:async(j)=>{if(j.type!=="message-added"||j.message.role!=="user")return;let P={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},X={...Z0("prompt_submit",P,f),hookName:"prompt_submit",userPromptSubmit:{prompt:uT(j.message.content),attachments:[]}};await R$(X,f)}},shutdown:async({agentId:j,conversationId:P,parentAgentId:X,reason:V})=>{let Y={...Z0("session_shutdown",{agentId:j,conversationId:P,parentAgentId:X},f),hookName:"session_shutdown",reason:V};await R$(Y,f)}}}import{createSessionId as rT}from"@cline/shared";function qf(f,$){return{version:f.version,requestId:f.requestId,ok:!0,payload:$}}function Dj(f,$,J){return{version:f.version,requestId:f.requestId??rT("hubreq_"),ok:!1,error:{code:$,message:J}}}class B4{schedules;constructor(f){this.schedules=f}async handleCommand(f){try{switch(f.command){case"schedule.create":return qf(f,{schedule:this.schedules.createSchedule(this.toCreateInput(f.payload??{}))});case"schedule.list":return qf(f,{schedules:this.schedules.listSchedules({enabled:typeof f.payload?.enabled==="boolean"?f.payload.enabled:void 0,limit:typeof f.payload?.limit==="number"?f.payload.limit:void 0,tags:Array.isArray(f.payload?.tags)?f.payload?.tags:void 0})});case"schedule.get":return qf(f,{schedule:this.schedules.getSchedule(String(f.payload?.scheduleId??""))});case"schedule.update":return qf(f,{schedule:this.schedules.updateSchedule(String(f.payload?.scheduleId??""),this.toUpdateInput(f.payload??{}))});case"schedule.delete":return qf(f,{deleted:this.schedules.deleteSchedule(String(f.payload?.scheduleId??""))});case"schedule.enable":return qf(f,{schedule:this.schedules.resumeSchedule(String(f.payload?.scheduleId??""))});case"schedule.disable":return qf(f,{schedule:this.schedules.pauseSchedule(String(f.payload?.scheduleId??""))});case"schedule.trigger":return qf(f,{execution:await this.schedules.triggerScheduleNow(String(f.payload?.scheduleId??""))});case"schedule.list_executions":return qf(f,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof f.payload?.scheduleId==="string"?f.payload.scheduleId:void 0,status:typeof f.payload?.status==="string"?f.payload.status:void 0,limit:typeof f.payload?.limit==="number"?f.payload.limit:void 0})});case"schedule.stats":return qf(f,{stats:this.schedules.getScheduleStats(String(f.payload?.scheduleId??""))});case"schedule.active":return qf(f,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return qf(f,{runs:this.schedules.getUpcomingRuns(typeof f.payload?.limit==="number"?f.payload.limit:void 0)});default:return Dj(f,"unsupported_command",`Unsupported hub schedule command: ${f.command}`)}}catch($){return Dj(f,"schedule_command_failed",$ instanceof Error?$.message:String($))}}toCreateInput(f){let $=f.modelSelection&&typeof f.modelSelection==="object"&&!Array.isArray(f.modelSelection)?f.modelSelection:f.provider&&f.model?{providerId:String(f.provider),modelId:String(f.model)}:void 0;return{...f,modelSelection:$}}toUpdateInput(f){let $=f.modelSelection&&typeof f.modelSelection==="object"&&!Array.isArray(f.modelSelection)?f.modelSelection:f.provider||f.model?{providerId:typeof f.provider==="string"?f.provider:"",modelId:typeof f.model==="string"?f.model:""}:void 0;return{...f,modelSelection:$}}}function R4(f){return f?new Date(f).getTime():void 0}function lT(f){let $=f.metadata?{...f.metadata}:void 0;if($)delete $.__hubScheduleCreatedBy,delete $.__hubScheduleCwd,delete $.__hubRuntimeOptions;return $}function A4(f){let $=f.metadata;return{scheduleId:f.externalId,name:f.title,cronPattern:f.scheduleExpr??"",prompt:f.prompt??"",workspaceRoot:f.workspaceRoot??"",cwd:typeof $?.__hubScheduleCwd==="string"?$.__hubScheduleCwd:void 0,modelSelection:f.providerId||f.modelId?{providerId:f.providerId??"",modelId:f.modelId??""}:void 0,enabled:f.enabled&&!f.removed&&f.parseStatus==="valid",mode:f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act",systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,maxParallel:f.maxParallel??1,createdAt:new Date(f.createdAt).getTime(),updatedAt:new Date(f.updatedAt).getTime(),nextRunAt:R4(f.nextRunAt),lastRunAt:R4(f.lastRunAt),createdBy:typeof $?.__hubScheduleCreatedBy==="string"?$.__hubScheduleCreatedBy:void 0,tags:f.tags,runtimeOptions:$?.__hubRuntimeOptions&&typeof $.__hubRuntimeOptions==="object"&&!Array.isArray($.__hubRuntimeOptions)?$.__hubRuntimeOptions:void 0,metadata:lT(f)}}function pT(f){switch(f){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function Mj(f,$){return{executionId:f.runId,scheduleId:$,sessionId:f.sessionId,triggeredAt:new Date(f.scheduledFor??f.createdAt).getTime(),startedAt:R4(f.startedAt),endedAt:R4(f.completedAt),status:pT(f.status),errorMessage:f.error}}class F4{store;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new O1({dbPath:f.dbPath}),this.materializer=new D1({store:this.store}),this.runner=new M1({store:this.store,materializer:this.materializer,runtimeHandlers:f.runtimeHandlers,workspaceRoot:"",logger:f.logger,pollIntervalMs:f.pollIntervalMs,claimLeaseSeconds:f.claimLeaseSeconds,globalMaxConcurrency:f.globalMaxConcurrency})}async start(){if(this.disposed)throw Error("HubScheduleService has been disposed");if(this.started)return;this.started=!0,await this.runner.start()}async stop(){await this.runner.stop(),this.started=!1}async dispose(){if(this.disposed)return;this.disposed=!0,await this.runner.dispose(),this.store.close()}createSchedule(f){if(qJ(f.cronPattern),!f.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return A4(this.store.createHubSchedule(f))}getSchedule(f){let $=this.store.getHubSchedule(f);return $?A4($):void 0}listSchedules(f={}){return this.store.listHubSchedules(f).map(($)=>A4($))}updateSchedule(f,$){if($.cronPattern!==void 0)qJ($.cronPattern);let J=this.store.getHubSchedule(f);if(!J)return;let H=$.workspaceRoot!==void 0?$.workspaceRoot.trim():J.workspaceRoot;if(($.enabled??J.enabled)&&!H)throw Error("workspaceRoot is required for enabled schedules");let Q=this.store.updateHubSchedule(f,{...$,scheduleId:f});return Q?A4(Q):void 0}deleteSchedule(f){return this.store.deleteHubSchedule(f)}pauseSchedule(f){return this.updateSchedule(f,{scheduleId:f,enabled:!1})}resumeSchedule(f){return this.updateSchedule(f,{scheduleId:f,enabled:!0})}async triggerScheduleNow(f){let $=this.store.enqueueHubScheduleRun(f,"manual");if(!$)return;await this.runner.tick();let J=this.store.getRun($.runId)??$;return Mj(J,f)}listScheduleExecutions(f){let $=f.scheduleId?this.store.getHubSchedule(f.scheduleId):void 0,J={specId:$?.specId,limit:f.limit};return this.store.listRuns(J).map((W)=>{let Q=$??this.store.getSpec(W.specId);if(!Q||Q.source!=="hub-schedule")return;return Mj(W,Q.externalId)}).filter((W)=>{if(!W)return!1;return!f.status||W.status===f.status})}getScheduleStats(f){let $=this.listScheduleExecutions({scheduleId:f,limit:1e4});if($.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,H=0,W=0,Q;for(let Z of $){if(Z.status==="success"||Z.status==="completed")J+=1;if(!Q&&Z.status!=="success"&&Z.status!=="completed")Q=Z;if(Z.startedAt&&Z.endedAt)W+=Z.endedAt-Z.startedAt,H+=1}return{totalRuns:$.length,successRate:J/$.length,avgDurationSeconds:H>0?W/H/1000:0,lastFailure:Q}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap((f)=>{let $=this.store.getSpec(f.specId);if(!$||$.source!=="hub-schedule"||!f.sessionId)return[];return[{executionId:f.runId,scheduleId:$.externalId,sessionId:f.sessionId,startedAt:f.startedAt??new Date().toISOString(),timeoutAt:$.timeoutSeconds&&f.startedAt?new Date(new Date(f.startedAt).getTime()+$.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns(f=20){let $={triggerKind:"schedule",enabled:!0,limit:f};return this.store.listSpecs($).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,H)=>String(J.nextRunAt).localeCompare(String(H.nextRunAt))).slice(0,f).map(({spec:J,nextRunAt:H})=>({scheduleId:J.externalId,name:J.title,nextRunAt:H}))}}G4();function FD(f,$){if(f instanceof Error)return f;if(f&&typeof f==="object"&&"message"in f&&typeof f.message==="string"&&f.message.trim())return Error(f.message.trim());let J=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return Error(J?`Failed to connect to hub at ${$} (${J} event before socket open).`:`Failed to connect to hub at ${$}.`)}var yD="cline-hub-auth.";function KD(f){return f.host!==void 0||f.port!==void 0||f.pathname!==void 0}function UD(f,$){let J=new URL(f),H=new URL($);return J.search="",J.hash="",H.search="",H.hash="",J.toString()===H.toString()}async function GD(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=Bf(),H=await Zf(J.discoveryPath);if(H?.url&&UD(f.toString(),H.url))return H.authToken;return}async function hD(f={}){let $=_0(f);if(!KD(f)){let J=Bf(),H=await Zf(J.discoveryPath);if(H?.url)return H.url}return $0($.host,$.port,$.pathname)}async function zj(f){return await new Promise(($,J)=>{(async()=>{let H=new URL(f),W=await GD(H);H.hash="";let Q=new WebSocket(H.toString(),W?[`${yD}${W}`]:void 0),Z=new Map,j=0;Q.addEventListener("open",()=>{$({send(P){let X=P.requestId??`hub-client-${++j}`;return new Promise((V,Y)=>{Z.set(X,{resolve:V,reject:Y});let B={kind:"command",envelope:{...P,requestId:X}};Q.send(JSON.stringify(B))})},close(){Q.close()}})}),Q.addEventListener("message",(P)=>{let X=JSON.parse(String(P.data));if(X.kind==="reply"&&X.envelope.requestId){let V=Z.get(X.envelope.requestId);if(V)Z.delete(X.envelope.requestId),V.resolve(X.envelope)}}),Q.addEventListener("close",()=>{for(let P of Z.values())P.reject(Error("Hub connection closed"));Z.clear()}),Q.addEventListener("error",(P)=>{J(FD(P,f))})})().catch(J)})}async function JI(f){try{return(await zj(f)).close(),!0}catch{return!1}}async function HI(f,$){let J=await hD(f),H=await zj(J);try{return await H.send({version:$.version??"v1",clientId:$.clientId??"hub-client",...$})}finally{H.close()}}function nf(f){return f?JSON.parse(JSON.stringify(f)):{}}function h4(f){let $=f?.session&&typeof f.session==="object"?f.session:void 0;if(!$)return;let J=$.metadata&&typeof $.metadata==="object"?nf($.metadata):void 0;return{sessionId:typeof $.sessionId==="string"?$.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function Oj(f,$){return f.error?.message??`hub command failed: ${$}`}function TD(f){let $=nf(f);if(typeof $.error==="string"&&$.error.trim())return{...$,error:$.error.trim()};let J=$.result&&typeof $.result==="object"?$.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...$,error:J.text.trim()};let H=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof H?.message==="string"&&H.message.trim())return{...$,error:H.message.trim()};return $}function DD(f){let $=f?.checkpoint;if(!$||typeof $!=="object"||Array.isArray($))throw Error("hub checkpoint restore returned no checkpoint");let J=$;if(typeof J.ref!=="string"||typeof J.createdAt!=="number"||typeof J.runCount!=="number")throw Error("hub checkpoint restore returned an invalid checkpoint");return J}function MD(f){let $=f.sessionId?.trim();if(!$)return;switch(f.event){case"iteration.started":return{sessionId:$,eventType:"runtime.chat.iteration_start",payload:nf(f.payload)};case"iteration.finished":return{sessionId:$,eventType:"runtime.chat.iteration_end",payload:nf(f.payload)};case"assistant.delta":return{sessionId:$,eventType:"runtime.chat.text_delta",payload:nf(f.payload)};case"tool.started":return{sessionId:$,eventType:"runtime.chat.tool_call_start",payload:nf(f.payload)};case"tool.finished":return{sessionId:$,eventType:"runtime.chat.tool_call_end",payload:nf(f.payload)};case"approval.requested":return{sessionId:$,eventType:"approval.requested",payload:nf(f.payload)};case"run.aborted":return{sessionId:$,eventType:"runtime.chat.aborted",payload:nf(f.payload)};case"run.failed":return{sessionId:$,eventType:"runtime.chat.failed",payload:TD(f.payload)};case"run.completed":return{sessionId:$,eventType:"runtime.chat.completed",payload:nf(f.payload)};default:return}}class _D{options;client;metadataApplied=!1;constructor(f){this.options=f;this.client=new J0({url:f.address,authToken:f.authToken,clientId:f.clientId,clientType:f.clientType??"hub-session-client",displayName:f.displayName??"hub session client",workspaceRoot:f.workspaceRoot,cwd:f.cwd})}async ensureMetadataApplied(){if(this.metadataApplied||!this.options.metadata){if(!this.options.metadata)await this.client.connect();return}await this.client.connect(),await this.client.command("client.update",{metadata:this.options.metadata}),this.metadataApplied=!0}async connect(){await this.ensureMetadataApplied()}close(){this.client.close()}async dispose(){await this.client.dispose()}async startRuntimeSession(f){await this.ensureMetadataApplied();let $=await this.client.command("session.create",{workspaceRoot:f.workspaceRoot,cwd:f.cwd,sessionConfig:{providerId:f.provider,modelId:f.model,apiKey:f.apiKey,cwd:f.cwd??f.workspaceRoot,workspaceRoot:f.workspaceRoot,systemPrompt:f.systemPrompt??"",mode:f.mode??"act",rules:f.rules,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,enableTools:f.enableTools,enableSpawnAgent:f.enableSpawn!==!1,enableAgentTeams:f.enableTeams!==!1,disableMcpSettingsTools:f.disableMcpSettingsTools,missionLogIntervalSteps:f.missionStepInterval,missionLogIntervalMs:f.missionTimeIntervalMs},metadata:{source:f.source??"cli",provider:f.provider,model:f.model,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,prompt:void 0,interactive:f.interactive!==!1},runtimeOptions:{mode:f.mode,systemPrompt:f.systemPrompt,maxIterations:f.maxIterations,timeoutSeconds:f.timeoutSeconds,enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,autoApproveTools:f.autoApproveTools,toolExecutors:f.toolExecutors,configExtensions:f.configExtensions},modelSelection:{provider:f.provider,model:f.model,apiKey:f.apiKey},toolPolicies:f.toolPolicies}),J=h4($.payload);if(!J?.sessionId)throw Error("hub session create returned no session id");return{sessionId:J.sessionId,startResult:{sessionId:J.sessionId,manifestPath:"",messagesPath:J.messagesPath??""}}}async sendRuntimeSession(f,$,J){return await this.ensureMetadataApplied(),{result:(await this.client.command("session.send_input",{prompt:$.prompt,attachments:$.attachments,delivery:$.delivery,timeoutSeconds:$.config.timeoutSeconds},f,J)).payload?.result}}async stopRuntimeSession(f){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:f},f),{applied:!0}}async abortRuntimeSession(f){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:f},f),{applied:!0}}async updateSession(f){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:f.sessionId,metadata:f.metadata},f.sessionId),{updated:!0}}async getSession(f){await this.ensureMetadataApplied();let $=await this.client.command("session.get",void 0,f);return h4($.payload)}async readMessages(f){let $=f.trim();if(!$)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:$},$);if(!J.ok)throw Error(Oj(J,"session.messages"));let H=J.payload?.messages;return Array.isArray(H)?H:[]}async restore(f){let $=f.sessionId.trim();if(!$)throw Error("sessionId is required");let J=f.restore?.messages!==!1;if(J&&!f.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let H=f.config,W=await this.client.command("session.restore",{sessionId:$,checkpointRunCount:f.checkpointRunCount,restore:f.restore,...H?{workspaceRoot:H.workspaceRoot,cwd:H.cwd,sessionConfig:{providerId:H.provider,modelId:H.model,apiKey:H.apiKey,cwd:H.cwd??H.workspaceRoot,workspaceRoot:H.workspaceRoot,systemPrompt:H.systemPrompt??"",mode:H.mode??"act",rules:H.rules,maxIterations:H.maxIterations,enableTools:H.enableTools,enableSpawnAgent:H.enableSpawn!==!1,enableAgentTeams:H.enableTeams!==!1,disableMcpSettingsTools:H.disableMcpSettingsTools,missionLogIntervalSteps:H.missionStepInterval,missionLogIntervalMs:H.missionTimeIntervalMs},metadata:{source:H.source??"cli",provider:H.provider,model:H.model,enableTools:H.enableTools,enableSpawn:H.enableSpawn,enableTeams:H.enableTeams,prompt:void 0,interactive:H.interactive!==!1},runtimeOptions:{mode:H.mode,systemPrompt:H.systemPrompt,maxIterations:H.maxIterations,enableTools:H.enableTools,enableSpawn:H.enableSpawn,enableTeams:H.enableTeams,autoApproveTools:H.autoApproveTools,configExtensions:H.configExtensions},modelSelection:{provider:H.provider,model:H.model,apiKey:H.apiKey},toolPolicies:H.toolPolicies}:{}},$);if(!W.ok)throw Error(Oj(W,"session.restore"));let Q=h4(W.payload);if(J&&!Q?.sessionId)throw Error("hub checkpoint restore returned no session id");let Z=Array.isArray(W.payload?.messages)?W.payload.messages:void 0,j=DD(W.payload);return{sessionId:Q?.sessionId,startResult:Q?.sessionId?{sessionId:Q.sessionId,manifestPath:"",messagesPath:Q.messagesPath??""}:void 0,...Z?{messages:Z}:{},checkpoint:j}}async listSessions(f){await this.ensureMetadataApplied();let $=await this.client.command("session.list",{limit:f?.limit??200});return(Array.isArray($.payload?.sessions)?$.payload?.sessions:[]).map((H)=>h4({session:H})).filter((H)=>Boolean(H?.sessionId))}async deleteSession(f,$=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:f,deleteCheckpointRefs:$})).payload?.deleted===!0}async respondToolApproval(f){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:f.approvalId,approved:f.approved,payload:f.reason?{reason:f.reason}:void 0,responderClientId:f.responderClientId})}streamEvents(f,$){let J=new Set((f.sessionIds??[]).map((W)=>W.trim()).filter(Boolean)),H=this.client.subscribe((W)=>{let Q=MD(W);if(!Q)return;if(J.size>0&&!J.has(Q.sessionId))return;$.onEvent?.(Q)});return this.ensureMetadataApplied().catch((W)=>{$.onError?.(W instanceof Error?W:Error(String(W)))}),H}streamTeamProgress(f,$){let J=this.client.subscribe((H)=>{if(H.event!=="team.progress"||!H.payload)return;$.onProjection?.(H.payload)});return this.ensureMetadataApplied().catch((H)=>{$.onError?.(H instanceof Error?H:Error(String(H)))}),J}async createSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",f)).payload?.schedule}async listSchedules(f){await this.ensureMetadataApplied();let $=await this.client.command("schedule.list");return Array.isArray($.payload?.schedules)?$.payload?.schedules:[]}async getSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:f})).payload?.schedule}async updateSchedule(f,$){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:f,...$})).payload?.schedule}async pauseSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:f})).payload?.schedule}async resumeSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:f})).payload?.schedule}async deleteSchedule(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:f})).payload?.deleted===!0}async triggerScheduleNow(f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:f})).payload?.execution}async listScheduleExecutions(f,$){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:f,limit:$});return Array.isArray(J.payload?.executions)?J.payload?.executions:[]}async getScheduleStats(){return await this.ensureMetadataApplied(),(await this.client.command("schedule.stats")).payload?.stats}async getActiveScheduledExecutions(){await this.ensureMetadataApplied();let f=await this.client.command("schedule.active");return Array.isArray(f.payload?.executions)?f.payload?.executions:[]}async getUpcomingScheduledRuns(f){await this.ensureMetadataApplied();let $=await this.client.command("schedule.upcoming",{limit:f});return Array.isArray($.payload?.upcoming)?$.payload?.upcoming:[]}}class LD{client;constructor(f){this.client=new J0({url:f.address,authToken:f.authToken,clientId:f.clientId,clientType:f.clientType??"hub-ui-client",displayName:f.displayName??"hub ui client"})}async connect(){await this.client.connect()}close(){this.client.close()}async dispose(){await this.client.dispose()}getClientId(){return this.client.getClientId()}async sendNotify(f){await this.client.command("ui.notify",f)}async sendShowWindow(f){await this.client.command("ui.show_window",f??{})}async listClients(){let f=await this.client.command("client.list");return Array.isArray(f.payload?.clients)?f.payload.clients:[]}async listSessions(f=200){let $=await this.client.command("session.list",{limit:f});return Array.isArray($.payload?.sessions)?$.payload.sessions:[]}subscribeUI(f){return this.client.subscribe(($)=>{switch($.event){case"ui.notify":f.onNotify?.($.payload);break;case"ui.show_window":f.onShowWindow?.($.payload);break;case"hub.client.registered":f.onClientRegistered?.($.payload??{});break;case"hub.client.disconnected":f.onClientDisconnected?.($.payload??{});break;case"session.created":f.onSessionCreated?.($.payload??{});break;case"session.updated":f.onSessionUpdated?.($.payload??{});break;case"session.detached":f.onSessionDetached?.($.payload??{});break}})}}import{normalizeProviderId as zD}from"@cline/llms";function OD(f){return{text:f.text,usage:f.usage,inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,iterations:f.iterations,finishReason:f.finishReason,toolCalls:f.toolCalls.map(($)=>({name:$.name,input:$.input,output:$.output,error:$.error,durationMs:$.durationMs}))}}function ND(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}function RI(f={}){let $=new E0({sessionService:new N0(new O0),fetch:f.fetch,telemetry:f.telemetry});return{async startSession(J){let H=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await $.startSession({source:J.source?.trim()||Pf.CLI,interactive:!1,config:{providerId:zD(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:H,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:ND(J),maxIterations:J.maxIterations,enableTools:J.enableTools!==!1,enableSpawnAgent:J.enableSpawn!==!1,enableAgentTeams:J.enableTeams!==!1,disableMcpSettingsTools:J.disableMcpSettingsTools,missionLogIntervalSteps:J.missionStepInterval,missionLogIntervalMs:J.missionTimeIntervalMs},toolPolicies:J.toolPolicies??{"*":{autoApprove:J.autoApproveTools!==!1}},localRuntime:{configExtensions:J.configExtensions}});return{sessionId:W.sessionId,startResult:{sessionId:W.sessionId,manifestPath:W.manifestPath,messagesPath:W.messagesPath}}},async sendSession(J,H){let W=await $.runTurn({sessionId:J,prompt:H.prompt,userImages:H.attachments?.userImages,userFiles:H.attachments?.userFiles?.map((Q)=>Q.content)});if(!W)throw Error("local hub schedule runtime returned no turn result");return{result:OD(W)}},async abortSession(J){return await $.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function qD(f){if(typeof f==="string")return f.trim()||void 0;if(!Array.isArray(f))return;return f.map((J)=>{if(J&&typeof J==="object"&&"type"in J&&J.type==="text"&&"text"in J&&typeof J.text==="string")return J.text.trim();return""}).filter(Boolean).join(`
695
+ `).trim()||void 0}var Nj=120,hW="...";function TW(f){let $=f.trim();if(!$)return"";if(Buffer.byteLength($,"utf8")<=Nj)return $;let J=Nj-Buffer.byteLength(hW,"utf8");if(J<=0)return hW;let H="";for(let W of $){if(Buffer.byteLength(H+W,"utf8")>J)break;H+=W}return`${H}${hW}`}async function qj(f){let $=f?.sessionId?.trim()||"unknown",J=typeof f?.metadata?.messagesPath==="string"?f.metadata.messagesPath:void 0,W=[...await J$(J)].reverse().find((P)=>P.role==="assistant"),Q=W?qD(W.content):void 0,Z=f?.workspaceRoot?.trim()||"workspace",j=typeof f?.metadata?.prompt==="string"?f.metadata.prompt.trim():Z;return{title:`Task completed (${$})`,body:TW(Q&&Q.length>0?Q:j.length>0?j:Z),severity:"info"}}import{createSessionId as HM}from"@cline/shared";import{createSessionId as ED}from"@cline/shared";import{createSessionId as CD}from"@cline/shared";function bD(f){switch(f){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function wD(f){let $=f.metadata&&typeof f.metadata==="object"?JSON.parse(JSON.stringify(f.metadata)):{};if(f.parentSessionId?.trim())$.parentSessionId=f.parentSessionId;if(f.parentAgentId?.trim())$.parentAgentId=f.parentAgentId;if(f.agentId?.trim())$.agentId=f.agentId;if(f.conversationId?.trim())$.conversationId=f.conversationId;if(f.messagesPath?.trim())$.messagesPath=f.messagesPath;if(f.prompt?.trim())$.prompt=f.prompt;if(f.provider?.trim())$.provider=f.provider;if(f.model?.trim())$.model=f.model;if(f.source?.trim())$.source=f.source;if(typeof f.pid==="number")$.pid=f.pid;return Object.keys($).length>0?$:void 0}function T4(f,$){return{sessionId:f.sessionId,workspaceRoot:f.workspaceRoot,cwd:f.cwd,createdAt:Date.parse(f.startedAt),updatedAt:Date.parse(f.updatedAt),createdByClientId:$?.createdByClientId??"hub",status:bD(f.status),participants:$?[...$.participants.values()]:[],metadata:wD(f),runtimeOptions:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams,mode:typeof f.metadata?.mode==="string"?f.metadata.mode:void 0,systemPrompt:typeof f.metadata?.systemPrompt==="string"?f.metadata.systemPrompt:void 0},runtimeSession:f.agentId?{agentId:f.agentId,team:f.teamName?{teamId:f.teamName}:void 0}:void 0}}function m(f,$){return{version:f.version,requestId:f.requestId,ok:!0,...$!==void 0?{payload:$}:{}}}function E(f,$,J){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:$,message:J}}}function D4(f){return f&&typeof f==="object"&&!Array.isArray(f)?f:void 0}function Uf(f){if(typeof f.payload?.sessionId==="string")return f.payload.sessionId.trim();return f.sessionId?.trim()??""}function F$(f,$,J){return{version:"v1",event:f,eventId:CD("hevt_"),sessionId:J,timestamp:Date.now(),payload:$}}async function bf(f,$){let J=await f.sessionHost.getSession($);if(!J)return;return T4(J,f.sessionState.get($))}async function wf(f,$){let J=await f.sessionHost.getSession($);if(!J)return;let[H,W]=await Promise.all([typeof f.sessionHost.readSessionMessages==="function"?f.sessionHost.readSessionMessages($):[],f.sessionHost.getAccumulatedUsage?.($)]);return z0({session:J,messages:H,usage:W})}function M4(f,$,J,H,W={}){let Q=f.sessionState.get($);if(Q){if(W.interactive!==void 0)Q.interactive=W.interactive;if(!Q.participants.has(J))Q.participants.set(J,{clientId:J,attachedAt:Date.now(),role:H});return Q}let Z={createdByClientId:J,interactive:W.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:H}]])};return f.sessionState.set($,Z),Z}async function DW(f,$){let J=ED("approval_"),H=$.sessionId;if(f.sessionState.get(H)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((Q)=>{f.pendingApprovals.set(J,{sessionId:H,resolve:Q}),f.publish(f.buildEvent("approval.requested",{approvalId:J,sessionId:$.sessionId,agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,toolCallId:$.toolCallId,toolName:$.toolName,inputJson:JSON.stringify($.input??null),policy:$.policy},H))})}function MW(f,$,J){let H=f.pendingApprovals.get($);if(!H)return;return f.pendingApprovals.delete($),H.resolve(J),{sessionId:H.sessionId}}function _W(f,$,J){let H=0;for(let[W,Q]of[...f.pendingApprovals.entries()]){if(!$({approvalId:W,sessionId:Q.sessionId}))continue;f.pendingApprovals.delete(W),Q.resolve({approved:!1,reason:J}),f.publish(f.buildEvent("approval.resolved",{approvalId:W,approved:!1,cancelled:!0,reason:J},Q.sessionId)),H+=1}return H}async function bj(f,$){let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"";if(!f.pendingApprovals.get(J))return E($,"approval_not_found",`Unknown approval: ${J}`);let W=typeof $.payload?.reason==="string"?$.payload.reason:$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)&&typeof $.payload.payload.reason==="string"?$.payload.payload.reason:void 0,Q=$.payload?.approved===!0,Z=MW(f,J,{approved:Q,reason:W});if(!Z)return E($,"approval_not_found",`Unknown approval: ${J}`);return f.publish(f.buildEvent("approval.resolved",{approvalId:J,approved:Q,reason:W},Z.sessionId)),m($,{approvalId:J,approved:Q})}import{createSessionId as mD}from"@cline/shared";function SD(f){if(f instanceof Error)return{name:f.name,message:f.message,stack:f.stack};if(f===void 0)return;return f}var wj={debug:10,info:20,warn:30,error:40,silent:50};function kD(){let f=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if(f==="debug"||f==="info"||f==="warn"||f==="error"||f==="silent")return f;return process.env.VITEST?"error":"info"}function k(f,$,J={}){if(wj[f]<wj[kD()])return;let H=JSON.stringify({ts:new Date().toISOString(),level:f,component:"hub",message:$,...Object.fromEntries(Object.entries(J).map(([W,Q])=>[W,SD(Q)]).filter(([,W])=>W!==void 0))});if(f==="error"||f==="warn"){console.error(`[hub] ${H}`);return}console.log(`[hub] ${H}`)}function LW(f,$){let J=$ instanceof Error?$.stack||$.message:String($);k("error",f,{error:J})}async function Cj(f,$,J,H,W,Q){let Z=mD("capreq_"),j=performance.now();return k("info","capability.request.start",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:W}),await new Promise((P,X)=>{f.pendingCapabilityRequests.set(Z,{sessionId:$,targetClientId:W,capabilityName:J,onProgress:Q,resolve:(V)=>{if(k(V.ok?"info":"warn","capability.request.end",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:W,ok:V.ok,error:V.error,durationMs:Math.round(performance.now()-j)}),!V.ok){X(Error(V.error||`Capability ${J} was rejected by ${W}.`));return}P(V.payload)}}),f.publish(f.buildEvent("capability.requested",{requestId:Z,targetClientId:W,capabilityName:J,payload:H},$)),k("info","capability.request.published",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:W})})}function Ej(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",H=f.pendingCapabilityRequests.get(J);if(!H)return E($,"capability_not_found",`Unknown capability request: ${J}`);if(($.clientId?.trim()||"")!==H.targetClientId)return E($,"capability_wrong_client",`Capability request ${J} is owned by ${H.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==H.sessionId)return E($,"capability_wrong_session",`Capability request ${J} belongs to session ${H.sessionId}`);let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{};return H.onProgress?.(Q),m($,{requestId:J})}function S0(f,$,J){let H=0;for(let[W,Q]of[...f.pendingCapabilityRequests.entries()]){if(!$({requestId:W,...Q}))continue;f.pendingCapabilityRequests.delete(W),k("warn","capability.request.cancelled",{requestId:W,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,reason:J}),Q.resolve({ok:!1,error:J}),f.publish(f.buildEvent("capability.resolved",{requestId:W,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,ok:!1,cancelled:!0,error:J},Q.sessionId)),H+=1}return H}async function Sj(f,$){let J=typeof $.payload?.sessionId==="string"?$.payload.sessionId.trim():$.sessionId?.trim()||"",H=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName.trim():"",W=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId.trim():"";if(!J||!H||!W)return E($,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},Z=await f.requestCapability(J,H,Q,W);return m($,Z)}catch(Q){return E($,"capability_request_failed",Q instanceof Error?Q.message:String(Q))}}function kj(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",H=f.pendingCapabilityRequests.get(J);if(!H)return E($,"capability_not_found",`Unknown capability request: ${J}`);let W=$.clientId?.trim()||"";if(W!==H.targetClientId)return E($,"capability_wrong_client",`Capability request ${J} is owned by ${H.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==H.sessionId)return E($,"capability_wrong_session",`Capability request ${J} belongs to session ${H.sessionId}`);f.pendingCapabilityRequests.delete(J);let Q=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:void 0,Z=typeof $.payload?.error==="string"?$.payload.error:void 0,j=$.payload?.ok===!0;return k(j?"info":"warn","capability.respond",{requestId:J,sessionId:H.sessionId,capabilityName:H.capabilityName,targetClientId:H.targetClientId,respondedByClientId:W,ok:j,error:Z}),H.resolve({ok:j,payload:Q,error:Z}),f.publish(f.buildEvent("capability.resolved",{requestId:J,capabilityName:H.capabilityName,targetClientId:H.targetClientId,respondedByClientId:W,ok:j,payload:Q,error:Z},H.sessionId)),m($,{requestId:J,ok:j})}import{createSessionId as ID}from"@cline/shared";function mj(f,$){let J=$.payload,H=J?.clientId?.trim()||$.clientId?.trim()||ID("client_");return f.clients.set(H,{clientId:H,clientType:J?.clientType??"unknown",displayName:J?.displayName,actorKind:J?.actorKind??"client",connectedAt:Date.now(),lastSeenAt:Date.now(),transport:J?.transport??"native",capabilities:J?.capabilities??[],metadata:J?.metadata,workspaceContext:J?.workspaceContext}),f.publish(f.buildEvent("hub.client.registered",{clientId:H,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),m($,{clientId:H})}function Ij(f,$){let J=$.clientId?.trim(),H=J?f.clients.get(J):void 0;if(!J||!H)return E($,"client_not_found","Client is not registered with this hub.");let W=D4($.payload?.metadata);if(H.lastSeenAt=Date.now(),W)H.metadata=JSON.parse(JSON.stringify(W));return m($)}function xj(f,$,J){let H=$.clientId?.trim();if(H)f.clients.delete(H),J(H),f.publish(f.buildEvent("hub.client.disconnected",{clientId:H}));return m($)}function gj(f,$){return m($,{clients:[...f.clients.values()]})}var xD=30000;function gD(f){if(f==="aborted")return"run.aborted";if(f==="error"||f==="failed")return"run.failed";return"run.completed"}function vD(f){if(f.finishReason!=="error")return;return f.text.trim()||void 0}function uD(f){let $=typeof f.timeoutMs==="number"?f.timeoutMs:typeof f.timeout_ms==="number"?f.timeout_ms:void 0;if($&&Number.isFinite($)&&$>0)return Math.floor($);let J=typeof f.timeoutSeconds==="number"?f.timeoutSeconds:typeof f.timeout_seconds==="number"?f.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function cD(f,$,J,H){let W=performance.now(),Q=!1,Z={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:J.sessionId,timeoutMs:H},j=setInterval(()=>{if(Q)return;let V=Math.round(performance.now()-W);k("warn","run.heartbeat",{...Z,elapsedMs:V}),f.publish(f.buildEvent("run.heartbeat",{requestId:$.requestId,elapsedMs:V,...H?{timeoutMs:H}:{}},J.sessionId))},xD),P=f.sessionHost.runTurn(J);P.then((V)=>{if(!Q)return;k("warn","run.late_end",{...Z,elapsedMs:Math.round(performance.now()-W),finishReason:V?.finishReason})},(V)=>{if(!Q)return;k("error","run.late_error",{...Z,elapsedMs:Math.round(performance.now()-W),error:V})});let X;try{if(!H)return await P;return await Promise.race([P,new Promise((V,Y)=>{X=setTimeout(()=>{let B=`Hub run ${$.command} timed out after ${H}ms.`;Q=!0,clearInterval(j),Y(Error(B)),k("error","run.timeout",{...Z,elapsedMs:Math.round(performance.now()-W)}),_W(f,(A)=>A.sessionId===J.sessionId,B),S0(f,(A)=>A.sessionId===J.sessionId,B),f.sessionHost.abort(J.sessionId,B).catch((A)=>{k("error","run.timeout_abort_failed",{...Z,error:A})})},H)})])}finally{if(Q=!0,clearInterval(j),X)clearTimeout(X)}}async function vj(f,$){let J=Uf($),H=$.payload&&typeof $.payload==="object"?$.payload:{},W=typeof H.prompt==="string"?H.prompt:typeof H.input==="string"?H.input:"";if(!W.trim())return E($,"invalid_session_input","session input requires a prompt string");f.publish(f.buildEvent("run.started",void 0,J));let Q=H.attachments&&typeof H.attachments==="object"&&!Array.isArray(H.attachments)?H.attachments:void 0,Z=Array.isArray(Q?.userFiles)?Q.userFiles.filter((V)=>typeof V==="string"):void 0,j=uD(H);f.suppressNextTerminalEventBySession.set(J,"run.start.reply");let P;try{P=await cD(f,$,{sessionId:J,prompt:W,delivery:H.delivery==="queue"||H.delivery==="steer"?H.delivery:void 0,userImages:Array.isArray(Q?.userImages)?Q.userImages:void 0,userFiles:Z,timeoutMs:j},j)}catch(V){if(f.suppressNextTerminalEventBySession.get(J)==="run.start.reply")f.suppressNextTerminalEventBySession.delete(J);throw f.publish(f.buildEvent("run.failed",{reason:"error",error:V instanceof Error?V.message:String(V)},J)),V}if(P){let V=await wf(f,J),Y=vD(P);if(f.publish(f.buildEvent(gD(P.finishReason),{reason:P.finishReason,...Y?{error:Y}:{},result:P,...V?{snapshot:V}:{}},J)),f.suppressNextTerminalEventBySession.get(J)==="run.start.reply")f.suppressNextTerminalEventBySession.delete(J)}else f.suppressNextTerminalEventBySession.delete(J);let X=await wf(f,J);return m($,P||X?{...P?{result:P}:{},...X?{snapshot:X}:{}}:void 0)}async function uj(f,$){let J=Uf($),H=typeof $.payload?.reason==="string"?$.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return _W(f,(W)=>W.sessionId===J,H),await f.sessionHost.abort(J,$.payload?.reason),S0(f,(W)=>W.sessionId===J,H),f.publish(f.buildEvent("run.aborted",{reason:H},J)),m($,{applied:!0})}async function cj(f,$){let J=V4($.payload?.payload);if(!J)return E($,"invalid_hook_payload","session.hook requires a valid hook event payload");return await f.sessionHost.dispatchHookEvent(J),m($,{applied:!0})}async function dj(f,$){switch($.type){case"chunk":return;case"agent_event":dD(f,$);return;case"hook":if($.payload.hookEventName==="tool_call")f.publish(f.buildEvent("tool.started",{toolName:$.payload.toolName},$.payload.sessionId));else if($.payload.hookEventName==="tool_result")f.publish(f.buildEvent("tool.finished",{toolName:$.payload.toolName},$.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:$.payload.sessionId,summary:$.payload.summary,lastEvent:$.payload.lifecycle};f.publish(f.buildEvent("team.progress",J,$.payload.sessionId));return}case"pending_prompts":f.publish(f.buildEvent("session.pending_prompts",{sessionId:$.payload.sessionId,prompts:$.payload.prompts},$.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:$.payload.id,prompt:$.payload.prompt,delivery:$.payload.delivery,attachmentCount:$.payload.attachmentCount};f.publish(f.buildEvent("session.pending_prompt_submitted",{sessionId:$.payload.sessionId,prompt:J},$.payload.sessionId));return}case"session_snapshot":f.publish(f.buildEvent("session.updated",{sessionId:$.payload.sessionId,snapshot:$.payload.snapshot},$.payload.sessionId));return;case"status":{let[J,H]=await Promise.all([bf(f,$.payload.sessionId),wf(f,$.payload.sessionId)]);if(J)f.publish(f.buildEvent("session.updated",{session:J,...H?{snapshot:H}:{}},$.payload.sessionId));return}case"ended":await rD(f,$);return;default:return}}function dD(f,$){let{sessionId:J,event:H}=$.payload;if(H.type==="iteration_start"){f.publish(f.buildEvent("iteration.started",{iteration:H.iteration},J));return}if(H.type==="iteration_end"){f.publish(f.buildEvent("iteration.finished",{iteration:H.iteration,hadToolCalls:H.hadToolCalls,toolCallCount:H.toolCallCount},J));return}if(H.type==="content_start"){if(H.contentType==="text"&&typeof H.text==="string"&&H.text.length>0){f.publish(f.buildEvent("assistant.delta",{text:H.text},J));return}if(H.contentType==="reasoning"){if(H.redacted&&!H.reasoning){f.publish(f.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof H.reasoning==="string"&&H.reasoning.length>0)f.publish(f.buildEvent("reasoning.delta",{text:H.reasoning,redacted:H.redacted===!0},J));return}if(H.contentType==="tool"){f.publish(f.buildEvent("tool.started",{toolCallId:H.toolCallId,toolName:H.toolName,input:H.input},J));return}}if(H.type==="content_end"){switch(H.contentType){case"text":f.publish(f.buildEvent("assistant.finished",{text:H.text},J));break;case"reasoning":f.publish(f.buildEvent("reasoning.finished",{reasoning:H.reasoning},J));break;case"tool":f.publish(f.buildEvent("tool.finished",{toolCallId:H.toolCallId,toolName:H.toolName,output:H.output,error:H.error},J));break}return}if(H.type==="done")f.publish(f.buildEvent("agent.done",{reason:H.reason,text:H.text,iterations:H.iterations,usage:H.usage},J))}async function rD(f,$){let J=f.suppressNextTerminalEventBySession.get($.payload.sessionId),H=J===$.payload.reason||J==="run.start.reply";if(H)f.suppressNextTerminalEventBySession.delete($.payload.sessionId);let[W,Q]=await Promise.all([bf(f,$.payload.sessionId),wf(f,$.payload.sessionId)]);if($.payload.reason==="completed"){let Z=await qj(W);f.publish(f.buildEvent("ui.notify",Z,$.payload.sessionId))}if(H)return;f.publish(f.buildEvent($.payload.reason==="aborted"?"run.aborted":$.payload.reason==="error"||$.payload.reason==="failed"?"run.failed":"run.completed",{reason:$.payload.reason,...Q?{snapshot:Q}:{}},$.payload.sessionId))}import{createSessionId as lj,parseRuntimeConfigExtensions as pj}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as rI,HUB_COMPACTION_CAPABILITY as lI,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as pI,HUB_HOOK_CAPABILITY_PREFIX as iI,HUB_MISTAKE_LIMIT_CAPABILITY as nI,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as aI,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as tI,isHubToolExecutorName as lD}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as $x,HUB_COMPACTION_CAPABILITY as Jx,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Hx,HUB_HOOK_CAPABILITY_PREFIX as Wx,HUB_MISTAKE_LIMIT_CAPABILITY as Qx,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Zx,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as jx}from"@cline/shared";var pD=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function y$(f){return f&&typeof f==="object"&&!Array.isArray(f)?JSON.parse(JSON.stringify(f)):void 0}function iD(f,$){let J=typeof f.name==="string"?f.name.trim():"",H=typeof f.description==="string"?f.description:"",W=typeof f.capabilityName==="string"?f.capabilityName.trim():"",Q=y$(f.inputSchema);if(!J||!H||!Q||!W||$.has(W))return;return $.add(W),{kind:"tool",capabilityName:W,name:J,description:H,inputSchema:Q,...y$(f.lifecycle)?{lifecycle:y$(f.lifecycle)}:{}}}function OW(f){if(!Array.isArray(f))return[];let $=[],J=new Set;for(let H of f){if(!H||typeof H!=="object"||Array.isArray(H))continue;let W=H,Q=W.kind,Z=typeof W.capabilityName==="string"?W.capabilityName.trim():"";if(!Z||J.has(Z))continue;if(Q==="tool"){let j=iD(W,J);if(j)$.push(j);continue}if(Q==="toolExecutor"){let j=W.executor;if(!lD(j))continue;J.add(Z),$.push({kind:"toolExecutor",capabilityName:Z,executor:j});continue}if(Q==="hook"){let j=typeof W.name==="string"?W.name.trim():"";if(!j)continue;J.add(Z),$.push({kind:"hook",capabilityName:Z,name:j});continue}if(Q==="compaction"){J.add(Z),$.push({kind:"compaction",capabilityName:Z,...y$(W.config)?{config:y$(W.config)}:{}});continue}if(Q==="checkpoint"){J.add(Z),$.push({kind:"checkpoint",capabilityName:Z,...y$(W.config)?{config:y$(W.config)}:{}});continue}if(Q==="mistakeLimit"){J.add(Z),$.push({kind:"mistakeLimit",capabilityName:Z});continue}if(Q==="userInstructionService")J.add(Z),$.push({kind:"userInstructionService",capabilityName:Z})}return $}function rj(f){return{agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,metadata:f.metadata}}function nD(f){return Object.hasOwn(f,"update")?f.update:f}function Q2(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function aD(f){let $=(f??[]).map(Q2).filter(Boolean);return $.length>0?new Set($):void 0}function tD(f,$,J){if(!J)return!0;let H=Q2(f),W=Q2($),Q=H.includes(":")?H.split(":").at(-1)??H:H,Z=W.includes(":")?W.split(":").at(-1)??W:W;return J.has(H)||J.has(W)||J.has(Q)||J.has(Z)}function zW(f,$){let J=aD($);return f.records.skill.map((H)=>({id:H.id,name:H.item.name,description:"description"in H.item&&typeof H.item.description==="string"?H.item.description:void 0,disabled:H.item.disabled===!0,skill:H.item})).filter((H)=>tD(H.id,H.name,J))}function sD(f,$){let J=async(H,W)=>{let Q=Q2(H),j=zW(f,$).filter((B)=>B.id===Q||Q2(B.name)===Q||B.id.endsWith(`:${Q}`)).filter((B)=>!B.disabled);if(j.length!==1)return j.length>1?`Skill "${H}" is ambiguous. Use one of: ${j.map((B)=>B.id).join(", ")}`:`Skill "${H}" not found.`;let P=j[0].skill,X=W?.trim(),V=X?`
696
+ <command-args>${X}</command-args>`:"",Y=P.description?.trim()?`Description: ${P.description.trim()}
697
+
698
+ `:"";return`<command-name>${P.name}</command-name>${V}
699
+ <command-instructions>
700
+ ${Y}${P.instructions}
701
+ </command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>zW(f,$).map(({skill:H,...W})=>W),enumerable:!0}),J}function oD(f,$,J,H){let W={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},Q=async()=>{let Z=await H(f,J.capabilityName,{},$);if(Z?.snapshot)W=Z.snapshot};return{start:Q,stop:()=>{},refreshType:async()=>{await Q()},listRecords:(Z)=>[...W.records[Z]],listRuntimeCommands:()=>[...W.runtimeCommands],resolveRuntimeSlashCommand:(Z)=>{if(!Z.startsWith("/")||Z.length<2)return Z;let P=Z.match(/^\/(\S+)/)?.[1];if(!P)return Z;let X=W.runtimeCommands.find((V)=>V.name===P);return X?`${X.instructions}${Z.slice(P.length+1)}`:Z},hasConfiguredSkills:(Z)=>zW(W,Z).some((j)=>!j.disabled),createExtension:(Z)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[Z.includeRules?"rules":void 0,Z.registerSkillsTool?"tools":void 0,Z.includeSkills||Z.includeWorkflows?"commands":void 0].filter((j)=>Boolean(j))},setup(j){if(Z.includeRules)j.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>S2(W.records.rule.map((P)=>P.item).filter((P)=>P.disabled!==!0))});if(Z.registerSkillsTool)j.registerTool(O$(sD(W,Z.allowedSkillNames)));for(let P of W.runtimeCommands.filter((X)=>X.kind==="skill"&&Z.includeSkills||X.kind==="workflow"&&Z.includeWorkflows))j.registerCommand({name:P.name,description:P.description,handler:(X)=>{let V=X.trim();return V?`${P.instructions}
702
+
703
+ ${V}`:P.instructions}})}})}}function eD(f,$,J,H){let W=J.map((Q)=>[Q.executor,async(...Z)=>{let j=Z.at(-1),P=Z.slice(0,-1);return(await H(f,Q.capabilityName,{executor:Q.executor,args:P,context:rj(j)},$))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function fM(f,$,J,H){if(J.length===0)return;return J.map((W)=>({name:W.name,description:W.description,inputSchema:W.inputSchema,lifecycle:W.lifecycle,async execute(Q,Z){return(await H(f,W.capabilityName,{toolName:W.name,input:Q,context:rj(Z)},$,Z.emitUpdate?(P)=>{Z.emitUpdate?.(nD(P))}:void 0))?.result}}))}function $M(f,$,J,H){let W=new Map(J.map((Z)=>[Z.name,Z])),Q={};for(let Z of pD){let j=W.get(Z);if(!j)continue;Q[Z]=async(P)=>{return(await H(f,j.capabilityName,{context:P},$))?.control}}return Object.keys(Q).length>0?Q:void 0}function NW(f){let $=f.contributions.filter((P)=>P.kind==="toolExecutor"),J=f.contributions.filter((P)=>P.kind==="tool"),H=f.contributions.filter((P)=>P.kind==="hook"),W=f.contributions.find((P)=>P.kind==="compaction"),Q=f.contributions.find((P)=>P.kind==="checkpoint"),Z=f.contributions.find((P)=>P.kind==="mistakeLimit"),j=f.contributions.find((P)=>P.kind==="userInstructionService");return{hasClientContributions:f.contributions.length>0,toolExecutors:eD(f.sessionId,f.targetClientId,$,f.requestCapability),localRuntime:{...H.length>0?{hooks:$M(f.sessionId,f.targetClientId,H,f.requestCapability)}:{},...J.length>0?{extraTools:fM(f.sessionId,f.targetClientId,J,f.requestCapability)}:{},...W?{compaction:{...f.sessionConfig?.compaction??{},...W.config,compact:async(P)=>{return(await f.requestCapability(f.sessionId,W.capabilityName,{context:P},f.targetClientId))?.result}}}:{},...Q?{checkpoint:{...f.sessionConfig?.checkpoint??{},...Q.config,createCheckpoint:async(P)=>{return(await f.requestCapability(f.sessionId,Q.capabilityName,{context:P},f.targetClientId))?.result}}}:{},...Z?{onConsecutiveMistakeLimitReached:async(P)=>{return(await f.requestCapability(f.sessionId,Z.capabilityName,{context:P},f.targetClientId))?.result}}:{},...j?{userInstructionService:oD(f.sessionId,f.targetClientId,j,f.requestCapability)}:{}}}}var ij="hubCapabilityOwnerClientId";function nj(f,$){f[ij]=$}function JM(f){let $=f?.[ij];return typeof $==="string"&&$.trim()?$.trim():void 0}async function aj(f,$,J){let H=performance.now(),W={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:$.sessionId};k("info","session.create.begin",W);let Q=$.payload&&typeof $.payload==="object"?$.payload:{},Z=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{},j=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0,P=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{};if(typeof j?.mode==="string")Z.mode=j.mode;else if(typeof P.mode==="string")Z.mode=P.mode;if(typeof j?.systemPrompt==="string")Z.systemPrompt=j.systemPrompt;else if(typeof P.systemPrompt==="string")Z.systemPrompt=P.systemPrompt;if(j?.checkpoint?.enabled===!0)Z.checkpointEnabled=!0;else if(P.checkpointEnabled===!0)Z.checkpointEnabled=!0;let X=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},V=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():"";if(!V)return k("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),E($,"invalid_session_create","session.create requires workspaceRoot or cwd");let Y=$.clientId?.trim()||"hub-client",B=OW(P.clientContributions);if(k("info","session.create.contributions_parsed",{...W,clientId:Y,workspaceRoot:V,cwd:typeof Q.cwd==="string"?Q.cwd:void 0,contributionCount:B.length}),B.length>0)nj(Z,Y);let R=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||lj(),U=pj(P.configExtensions);k("info","session.create.runtime_build.begin",{...W,sessionId:R,configExtensionCount:U?.length??0});let y=NW({sessionId:R,targetClientId:Y,contributions:B,sessionConfig:j,requestCapability:f.requestCapability});k("info","session.create.start_session.begin",{...W,sessionId:R,provider:j?.providerId??(typeof X.provider==="string"?X.provider:typeof Z.provider==="string"?Z.provider:"hub"),model:j?.modelId??(typeof X.model==="string"?X.model:typeof Z.model==="string"?Z.model:"hub")});let F=await f.sessionHost.startSession({source:typeof Z.source==="string"?Z.source:void 0,interactive:Z.interactive!==!1,sessionMetadata:Object.keys(Z).length>0?Z:void 0,initialMessages:Array.isArray(Q.initialMessages)?Q.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:U,...y.localRuntime},capabilities:{toolExecutors:y.toolExecutors,requestToolApproval:J},config:{...j??{},sessionId:R,providerId:j?.providerId??(typeof X.provider==="string"?X.provider:typeof Z.provider==="string"?Z.provider:"hub"),modelId:j?.modelId??(typeof X.model==="string"?X.model:typeof Z.model==="string"?Z.model:"hub"),apiKey:j?.apiKey??(typeof X.apiKey==="string"?X.apiKey:void 0),cwd:j?.cwd??(typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():V),workspaceRoot:j?.workspaceRoot??V,systemPrompt:j?.systemPrompt??(typeof P.systemPrompt==="string"?P.systemPrompt:""),mode:j?.mode??(P.mode==="plan"||P.mode==="yolo"?P.mode:"act"),maxIterations:j?.maxIterations??(typeof P.maxIterations==="number"?P.maxIterations:void 0),enableTools:j?.enableTools??P.enableTools!==!1,enableSpawnAgent:j?.enableSpawnAgent??P.enableSpawn!==!1,enableAgentTeams:j?.enableAgentTeams??P.enableTeams!==!1,checkpoint:j?.checkpoint??(P.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:j?.teamName??(typeof Z.teamName==="string"?Z.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):P.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});k("info","session.create.start_session.end",{...W,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-H),hasImmediateResult:!!F.result}),M4(f,F.sessionId,Y,"creator",{interactive:Z.interactive!==!1}),k("info","session.create.read_records.begin",{...W,sessionId:F.sessionId});let[K,M]=await Promise.all([bf(f,F.sessionId),wf(f,F.sessionId)]);if(k("info","session.create.read_records.end",{...W,sessionId:F.sessionId,hasSession:!!K,hasSnapshot:!!M,elapsedMs:Math.round(performance.now()-H)}),K)f.publish(f.buildEvent("session.created",{session:K,...M?{snapshot:M}:{}},F.sessionId));return k("info","session.create.reply",{...W,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-H)}),m($,{session:K,...M?{snapshot:M}:{}})}async function tj(f,$,J){let H=$.payload&&typeof $.payload==="object"?$.payload:{},W=typeof H.sessionId==="string"?H.sessionId.trim():$.sessionId?.trim()||"",Q=H.checkpointRunCount;if(!W)return E($,"invalid_restore","session.restore requires a session id");let Z=H.restore&&typeof H.restore==="object"?H.restore:{},j=Z.messages!==!1;if(typeof Q!=="number")return E($,"invalid_restore","checkpointRunCount must be a positive integer");try{let P=H.sessionConfig&&typeof H.sessionConfig==="object"?JSON.parse(JSON.stringify(H.sessionConfig)):void 0;if(j&&!P)return E($,"invalid_restore","sessionConfig is required when restore.messages is true");let X=H.runtimeOptions&&typeof H.runtimeOptions==="object"?H.runtimeOptions:{},V=H.metadata&&typeof H.metadata==="object"?JSON.parse(JSON.stringify(H.metadata)):{};if(typeof P?.mode==="string")V.mode=P.mode;else if(typeof X.mode==="string")V.mode=X.mode;if(typeof P?.systemPrompt==="string")V.systemPrompt=P.systemPrompt;else if(typeof X.systemPrompt==="string")V.systemPrompt=X.systemPrompt;if(P?.checkpoint?.enabled===!0)V.checkpointEnabled=!0;else if(X.checkpointEnabled===!0)V.checkpointEnabled=!0;let Y=H.modelSelection&&typeof H.modelSelection==="object"?H.modelSelection:{},B=$.clientId?.trim()||"hub-client",A=OW(X.clientContributions);if(A.length>0)nj(V,B);let U=(typeof P?.sessionId==="string"?P.sessionId.trim():"")||lj(),y=pj(X.configExtensions),F=NW({sessionId:U,targetClientId:B,contributions:A,sessionConfig:P,requestCapability:f.requestCapability}),M=await new n$().restoreCheckpoint({sessionId:W,checkpointRunCount:Q,restore:{messages:Z.messages,workspace:Z.workspace,omitCheckpointMessageFromSession:Z.omitCheckpointMessageFromSession===!0},start:P,cwd:typeof P?.cwd==="string"&&P.cwd.trim()||typeof P?.workspaceRoot==="string"&&P.workspaceRoot.trim()||void 0,getSession:(L)=>f.sessionHost.getSession(L),readMessages:(L)=>f.sessionHost.readSessionMessages(L),buildStartInput:(L)=>{if(L.restoredCheckpointMetadata)V.checkpoint=L.restoredCheckpointMetadata;let x=typeof H.workspaceRoot==="string"&&H.workspaceRoot.trim()?H.workspaceRoot.trim():typeof H.cwd==="string"&&H.cwd.trim()?H.cwd.trim():L.sourceSession.workspaceRoot||L.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:W,restoredCheckpointRunCount:Q},initialMessages:L.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:y,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...P??{},sessionId:U,providerId:P?.providerId??(typeof Y.provider==="string"?Y.provider:L.sourceSession.provider),modelId:P?.modelId??(typeof Y.model==="string"?Y.model:L.sourceSession.model),apiKey:P?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:""),cwd:P?.cwd??L.plan.cwd,workspaceRoot:P?.workspaceRoot??x,systemPrompt:P?.systemPrompt??(typeof X.systemPrompt==="string"?X.systemPrompt:""),mode:P?.mode??(X.mode==="plan"||X.mode==="yolo"?X.mode:"act"),maxIterations:P?.maxIterations??(typeof X.maxIterations==="number"?X.maxIterations:void 0),enableTools:P?.enableTools??X.enableTools!==!1,enableSpawnAgent:P?.enableSpawnAgent??X.enableSpawn!==!1,enableAgentTeams:P?.enableAgentTeams??X.enableTeams!==!1,checkpoint:P?.checkpoint??(X.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:P?.teamName??(typeof V.teamName==="string"?V.teamName:void 0)},toolPolicies:H.toolPolicies&&typeof H.toolPolicies==="object"&&!Array.isArray(H.toolPolicies)?JSON.parse(JSON.stringify(H.toolPolicies)):X.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(L)=>f.sessionHost.startSession(L),getStartedSessionId:(L)=>L.sessionId,readRestoredSession:(L)=>f.sessionHost.getSession(L)});if(!j)return m($,{checkpoint:M.checkpoint});let T=M.startResult;if(!T)return E($,"restore_failed","Checkpoint restore did not start a session");M4(f,T.sessionId,B,"creator",{interactive:V.interactive!==!1});let[G,h]=await Promise.all([bf(f,T.sessionId),wf(f,T.sessionId)]);if(G)f.publish(f.buildEvent("session.created",{session:G,...h?{snapshot:h}:{}},T.sessionId));return m($,{session:G,...h?{snapshot:h}:{},messages:M.messages??[],checkpoint:M.checkpoint})}catch(P){if(P instanceof mf)return E($,P.code,P.code==="session_not_found"?`Unknown session: ${W}`:P.message);return E($,"restore_failed",P instanceof Error?P.message:String(P))}}async function sj(f,$){let J=Uf($);if(!J)return E($,"invalid_session_attach","session.attach requires a session id");M4(f,J,$.clientId?.trim()||"hub-client","participant");let H=await bf(f,J);if(H)f.publish(f.buildEvent("session.attached",{session:H},J));return H?m($,{session:H}):E($,"session_not_found",`Unknown session: ${J}`)}async function oj(f,$){let J=Uf($);if(!J)return E($,"invalid_session_detach","session.detach requires a session id");let H=$.clientId?.trim()||"hub-client",[W]=await Promise.all([bf(f,J)]),Q=JM(W?.metadata)??H,Z=f.sessionState.get(J);if(Z){if(Z.participants.delete(H),Z.createdByClientId===H)Z.createdByClientId=Q;if(Z.participants.size===0)f.sessionState.delete(J)}S0(f,(X)=>X.sessionId===J&&X.targetClientId===H,`Capability owner client ${H} detached before request was resolved.`);let[j,P]=await Promise.all([bf(f,J),wf(f,J)]);return f.publish(f.buildEvent("session.detached",j?{session:j,...P?{snapshot:P}:{},clientId:H}:{clientId:H},J)),m($)}async function ej(f,$){let J=Uf($),H=$.payload?.includeSnapshot===!0,[W,Q]=await Promise.all([bf(f,J),H?wf(f,J):Promise.resolve(void 0)]);return W?m($,{session:W,...Q?{snapshot:Q}:{}}):E($,"session_not_found",`Unknown session: ${J}`)}async function fP(f,$){let J=Uf($);if(!J)return E($,"invalid_session_id","session.messages requires a session id");if(!await bf(f,J))return E($,"session_not_found",`Unknown session: ${J}`);let W=await f.sessionHost.readSessionMessages(J);return m($,{sessionId:J,messages:W})}async function $P(f,$){let J=typeof $.payload?.limit==="number"?$.payload.limit:200,W=(await f.sessionHost.listSessions(J)).map((Q)=>T4(Q,f.sessionState.get(Q.sessionId)));return m($,{sessions:W})}async function JP(f,$){let J=Uf($),H=D4($.payload?.metadata),W=await f.sessionHost.updateSession(J,{metadata:H}),[Q,Z]=await Promise.all([bf(f,J),wf(f,J)]);if(Q)f.publish(f.buildEvent("session.updated",{session:Q,...Z?{snapshot:Z}:{}},J));return{version:$.version,requestId:$.requestId,ok:W.updated,payload:{updated:W.updated,session:Q,...Z?{snapshot:Z}:{}}}}async function HP(f,$){let J=Uf($),H=await f.sessionHost.deleteSession(J);return f.sessionState.delete(J),m($,{deleted:H})}async function WP(f,$){let J=Uf($),H=f.sessionHost.pendingPrompts;if(!H)return E($,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await H.list({sessionId:J});return m($,{sessionId:J,prompts:W})}async function QP(f,$){let J=Uf($),H=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",W=typeof $.payload?.prompt==="string"?$.payload.prompt:void 0,Q=$.payload?.delivery==="queue"||$.payload?.delivery==="steer"?$.payload.delivery:void 0,Z=f.sessionHost.pendingPrompts;if(!Z)return E($,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Z.update({sessionId:J,promptId:H,prompt:W,delivery:Q});return m($,j)}async function ZP(f,$){let J=Uf($),H=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",W=f.sessionHost.pendingPrompts;if(!W)return E($,"pending_prompts_unavailable","Pending prompt service is not available.");let Q=await W.delete({sessionId:J,promptId:H});return m($,Q)}function jP(f){switch(f){case"schedule.create":return"schedule.created";case"schedule.update":case"schedule.enable":case"schedule.disable":return"schedule.updated";case"schedule.delete":return"schedule.deleted";case"schedule.trigger":return"schedule.triggered";default:return}}var WM=new Set(["skills","workflows","rules","tools"]);function qW(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function Z2(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${$}' must be a string.`);return J}function QM(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${$}' must be a boolean.`);return J}function PP(f){if(f===void 0)return{};if(!qW(f))throw Error("settings.list payload must be an object.");return{cwd:Z2(f,"cwd"),workspaceRoot:Z2(f,"workspaceRoot"),availabilityContext:qW(f.availabilityContext)?f.availabilityContext:void 0}}function ZM(f){if(!qW(f))throw Error("settings.toggle payload must be an object.");let{type:$}=f;if(typeof $!=="string"||!WM.has($))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools.");return{...PP(f),type:$,id:Z2(f,"id"),path:Z2(f,"path"),name:Z2(f,"name"),enabled:QM(f,"enabled")}}class _4{options;clients=new Map;listeners=new Map;sessionState=new Map;pendingApprovals=new Map;pendingCapabilityRequests=new Map;suppressNextTerminalEventBySession=new Map;schedules;scheduleCommands;settings;cronService;sessionHost;hubId=HM("hub_");ctx;constructor(f){this.options=f;if(this.sessionHost=f.sessionHost??new E0({sessionService:new N0(new O0),fetch:f.fetch,telemetry:f.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,sessionHost:this.sessionHost,publish:($)=>this.publish($),buildEvent:F$,requestCapability:($,J,H,W,Q)=>Cj(this.ctx,$,J,H,W,Q)},this.schedules=new F4({...f.scheduleOptions,runtimeHandlers:f.runtimeHandlers,eventPublisher:($,J)=>{let H=$==="schedule.execution.completed"?"schedule.execution_completed":$==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!H)return;this.publish(F$(H,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new B4(this.schedules),this.settings=f.settingsService??new k$,f.cronOptions)this.cronService=new N1({runtimeHandlers:f.runtimeHandlers,...f.cronOptions});this.sessionHost.subscribe(($)=>{dj(this.ctx,$).catch((J)=>{LW("session event handling failed",J)})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch(f){console.error("[hub] cron service start failed",f)}}async stop(){for(let f of this.pendingApprovals.keys())MW(this.ctx,f,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(S0(this.ctx,()=>!0,"Hub shutting down before capability request was resolved."),await this.sessionHost.dispose("hub_server_stop"),await this.schedules.dispose(),this.cronService)try{await this.cronService.dispose()}catch(f){console.error("[hub] cron service stop failed",f)}}async handleCommand(f){switch(f.command){case"client.register":return mj(this.ctx,f);case"client.update":return Ij(this.ctx,f);case"client.unregister":return xj(this.ctx,f,($)=>{this.listeners.delete($),this.detachClientFromSessions($)});case"client.list":return gj(this.ctx,f);case"session.create":return await aj(this.ctx,f,($)=>DW(this.ctx,$));case"session.restore":return await tj(this.ctx,f,($)=>DW(this.ctx,$));case"session.attach":return await sj(this.ctx,f);case"session.detach":return await oj(this.ctx,f);case"session.get":return await ej(this.ctx,f);case"session.messages":return await fP(this.ctx,f);case"session.list":return await $P(this.ctx,f);case"session.update":return await JP(this.ctx,f);case"session.pending_prompts":return await WP(this.ctx,f);case"session.update_pending_prompt":return await QP(this.ctx,f);case"session.remove_pending_prompt":return await ZP(this.ctx,f);case"session.delete":return await HP(this.ctx,f);case"session.hook":return await cj(this.ctx,f);case"run.start":case"session.send_input":return await vj(this.ctx,f);case"run.abort":return await uj(this.ctx,f);case"capability.request":return await Sj(this.ctx,f);case"approval.respond":return await bj(this.ctx,f);case"capability.respond":return kj(this.ctx,f);case"capability.progress":return Ej(this.ctx,f);case"ui.notify":return this.publish(F$("ui.notify",f.payload??{})),m(f);case"ui.show_window":return this.publish(F$("ui.show_window",f.payload??{})),m(f);case"settings.list":return await this.handleSettingsList(f);case"settings.toggle":return await this.handleSettingsToggle(f);case"settings.get":case"settings.patch":return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"not_implemented",message:`${f.command} is not implemented yet.`}};default:{let $=await this.scheduleCommands.handleCommand(f);if($.ok){let J=jP(f.command);if(J)this.publish(F$(J,$.payload))}return $}}}async handleSettingsList(f){try{let $=await this.settings.list(PP(f.payload));return{version:f.version,requestId:f.requestId,ok:!0,payload:{snapshot:$}}}catch($){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"settings_list_failed",message:$ instanceof Error?$.message:String($)}}}}async handleSettingsToggle(f){try{let $=await this.settings.toggle(ZM(f.payload));return this.publish(F$("settings.changed",{types:$.changedTypes,snapshot:$.snapshot})),{version:f.version,requestId:f.requestId,ok:!0,payload:{snapshot:$.snapshot,changedTypes:$.changedTypes}}}catch($){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:"settings_toggle_failed",message:$ instanceof Error?$.message:String($)}}}}subscribe(f,$,J){let H=this.listeners.get(f)??new Set,W={sessionId:J?.sessionId,listener:$};return H.add(W),this.listeners.set(f,H),()=>{let Q=this.listeners.get(f);if(!Q)return;if(Q.delete(W),Q.size===0)this.listeners.delete(f)}}detachClientFromSessions(f){for(let[$,J]of this.sessionState.entries())if(J.participants.delete(f),J.participants.size===0)this.sessionState.delete($);S0(this.ctx,($)=>$.targetClientId===f,`Capability owner client ${f} disconnected before request was resolved.`)}publish(f){for(let $ of this.listeners.values())for(let J of $){if(J.sessionId&&J.sessionId!==f.sessionId)continue;try{J.listener(f)}catch(H){LW(`listener threw while publishing ${f.event}`,H)}}}}import{timingSafeEqual as VM}from"node:crypto";import YM from"node:http";import BM from"node:net";import{URL as YP}from"node:url";import{WebSocketServer as AM}from"ws";import{HUB_COMMAND_SLOW_LOG_MS as jM,resolveHubCommandTimeoutMs as PM,safeJsonParse as XM}from"@cline/shared";function XP(f){return{command:f.envelope.command,requestId:f.envelope.requestId,clientId:f.envelope.clientId,sessionId:f.envelope.sessionId}}function VP(f,$,J){return{version:f.envelope.version,requestId:f.envelope.requestId,ok:!1,error:{code:$,message:J}}}class bW{transport;constructor(f){this.transport=f}attach(f){let $=new Map,J=new Set,H=!1,W=(P)=>{try{f.send(JSON.stringify(P))}catch(X){console.error(`[hub] failed to send websocket frame: ${X instanceof Error?X.stack||X.message:String(X)}`)}},Q=(P)=>{W({kind:"event",envelope:P})},Z=async(P)=>{try{let X=JSON.parse(P.data);switch(X.kind){case"command":{let V=performance.now(),Y=!1,B=XP(X);k("info","command.start",B);let A=setTimeout(()=>{if(Y)return;k("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},jM),R=this.transport.command(X.envelope);R.then((T)=>{if(!Y)return;k(T.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-V),ok:T.ok,errorCode:T.error?.code,errorMessage:T.error?.message})},(T)=>{if(!Y)return;k("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:T})});let U=!1,y,F,K=PM(X.envelope.command,X.envelope.timeoutMs);try{F=K===null?await R:await Promise.race([R,new Promise((T)=>{y=setTimeout(()=>{U=!0,T(VP(X,"hub_command_timeout",`Hub command ${X.envelope.command} did not complete within ${K}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${X.envelope.requestId}.`))},K)})])}catch(T){if(clearTimeout(A),y)clearTimeout(y);throw T}if(Y=U,clearTimeout(A),y)clearTimeout(y);let M=Math.round(performance.now()-V);if(U)k("error","command.timeout",{...B,durationMs:M,timeoutMs:K});else k(F.ok?"info":"warn","command.end",{...B,durationMs:M,ok:F.ok,errorCode:F.error?.code,errorMessage:F.error?.message});if(X.envelope.command==="client.register"&&F.ok){let G=(X.envelope.payload??{}).clientId?.trim()||X.envelope.clientId?.trim();if(G)J.add(G)}else if(X.envelope.command==="client.unregister"&&F.ok){let T=X.envelope.clientId?.trim();if(T)J.delete(T)}W({kind:"reply",envelope:F});break}case"stream.subscribe":{let V=`${X.clientId}:${X.sessionId??"*"}`;if($.has(V))break;let Y=await this.transport.subscribe(X.clientId,Q,{sessionId:X.sessionId});$.set(V,Y);break}case"stream.unsubscribe":{let V=`${X.clientId}:${X.sessionId??"*"}`;$.get(V)?.(),$.delete(V);break}case"reply":case"event":break}}catch(X){let V=typeof P.data==="string"?XM(P.data):void 0;if(!V||V.kind!=="command"){k("error","rejected malformed websocket frame",{error:X});return}k("error","command.error",{...XP(V),error:X}),W({kind:"reply",envelope:VP(V,"command_failed",X instanceof Error?X.message:"Unknown hub error")})}},j=()=>{if(H)return;H=!0;for(let P of $.values())P();$.clear();for(let P of J)this.transport.command({version:"v1",command:"client.unregister",clientId:P});J.clear(),f.removeEventListener("message",Z),f.removeEventListener("close",j)};return f.addEventListener("message",Z),f.addEventListener("close",j),j}}class wW{transport;constructor(f){this.transport=f}command(f){return this.transport.handleCommand(f)}subscribe(f,$,J){return this.transport.subscribe(f,$,J)}}function RM(f){if(typeof f==="string")return f;if(f instanceof Uint8Array)return Buffer.from(f).toString();if(f instanceof ArrayBuffer)return Buffer.from(f).toString();if(Array.isArray(f))return Buffer.concat(f.map(($)=>Buffer.from($))).toString();return String(f)}function FM(f){return{send($){f.send($)},addEventListener($,J){if($==="message"){f.on("message",(H)=>{J({data:RM(H)})});return}f.on("close",J)},removeEventListener(){}}}function yM(f){try{f.write(`HTTP/1.1 400 Bad Request\r
704
+ Connection: close\r
705
+ Content-Length: 0\r
706
+ \r
707
+ `),f.end()}catch{f.destroy()}}function KM(f){try{f.write(`HTTP/1.1 401 Unauthorized\r
708
+ Connection: close\r
709
+ Content-Length: 0\r
710
+ \r
711
+ `),f.end()}catch{f.destroy()}}function BP(f,$){if(!f||!$)return!1;let J=Buffer.from(f,"utf8"),H=Buffer.from($,"utf8");return J.length===H.length&&VM(J,H)}function AP(f,$){let J=f&&typeof f==="object"&&"code"in f&&typeof f.code==="string"?f.code:void 0,H=f instanceof Error?f.message:typeof f==="string"?f:"Unknown startup error",W=`Failed to start hub server on ${$.host}:${$.port}${$.pathname}: ${H}`,Q=Error(J?`${W} (${J})`:W);if(J)f.code=J,Q.code=J;if(f instanceof Error&&f.stack)Q.stack=`${Q.name}: ${Q.message}
712
+ Caused by: ${f.stack}`;return Q}async function UM(f){return await new Promise(($,J)=>{let H=BM.createServer();H.once("error",J),H.listen(0,f,()=>{let W=H.address();if(!W||typeof W==="string"){H.close(()=>J(Error("Failed to resolve free port")));return}let Q=W.port;H.close((Z)=>{if(Z){J(Z);return}$(Q)})})})}function GM(f){return f instanceof Error&&"code"in f&&f.code==="EADDRINUSE"}var CW=new Map,RP="cline-hub-auth.",hM=30000;function FP(f){return Array.isArray(f)?f.join(","):f??""}function TM(f){let $=FP(f).trim();return/^Bearer\s+(.+)$/i.exec($)?.[1]?.trim()||null}function DM(f){for(let $ of FP(f).split(",")){let J=$.trim();if(J.startsWith(RP))return J.slice(RP.length).trim()||null}return null}async function EW(f){let $=f.owner??H$(),J=f.host??"127.0.0.1",H=f.pathname??"/hub",W=f.port??O8(),Q=W===0?await UM(J):W,Z=Q,j=$0(J,Q,H),P=m$(),X=o7(),V=new _4(f);await V.start();let Y=new bW(new wW(V)),B=new Set,A=new Date().toISOString(),R={protocolVersion:"v1",buildId:P,pid:process.pid,startedAt:A},U=new Set,y,F,K=async()=>{if(F)return F;return F=(async()=>{if(y)clearInterval(y),y=void 0;for(let h of U)h.terminate?.();U.clear();for(let h of B)h();if(B.clear(),await new Promise((h,L)=>{T.close((x)=>{if(x){L(x);return}h()})}),await new Promise((h,L)=>{M.close((x)=>{if(x){L(x);return}h()})}),await V.stop(),(await Zf($.discoveryPath))?.url===j)await rf($.discoveryPath)})(),F},M=YM.createServer((G,h)=>{if((G.url??"/")==="/health"){let x=JSON.stringify({hubId:V.getHubId(),...R,authToken:"",host:J,port:Z,url:j,updatedAt:new Date().toISOString()});h.statusCode=200,h.setHeader("content-type","application/json"),h.end(x);return}if((G.url??"/")==="/version"){h.statusCode=200,h.setHeader("content-type","application/json"),h.end(JSON.stringify(R));return}if(new YP(G.url??"/",`http://${J}:${Z}`).pathname==="/shutdown"&&G.method==="POST"){if(!BP(TM(G.headers.authorization),X)){h.statusCode=401,h.end("Unauthorized");return}h.statusCode=202,h.setHeader("content-type","application/json"),h.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{K()});return}h.statusCode=404,h.end("Not found")}),T=new AM({noServer:!0});y=setInterval(()=>{for(let G of U){if(G.isAlive===!1){try{G.terminate?.()}catch{}U.delete(G);continue}G.isAlive=!1;try{G.ping?.()}catch{try{G.terminate?.()}catch{}U.delete(G)}}},hM),M.on("upgrade",(G,h,L)=>{if(new YP(G.url??"/",`http://${J}:${Z}`).pathname!==H){h.destroy();return}if(!BP(DM(G.headers["sec-websocket-protocol"]),X)){KM(h);return}try{T.handleUpgrade(G,h,L,(Cf)=>{let p=Cf;p.isAlive=!0,p.on("pong",()=>{p.isAlive=!0}),U.add(p);let g=Y.attach(FM(Cf));B.add(g),Cf.once("close",()=>{U.delete(p),g(),B.delete(g)})})}catch{yM(h)}});try{await new Promise((G,h)=>{M.once("error",(L)=>{h(AP(L,{host:J,port:Q,pathname:H}))}),M.listen(Q,J,()=>{let L=M.address();if(!L||typeof L==="string"){h(AP(Error("Failed to resolve hub port"),{host:J,port:Q,pathname:H}));return}Z=L.port,j=$0(J,Z,H),G()})})}catch(G){if(y)clearInterval(y),y=void 0;throw await V.stop().catch(()=>{return}),G}return await e7($.discoveryPath,{hubId:V.getHubId(),protocolVersion:"v1",buildId:P,authToken:X,host:J,port:Z,url:j,pid:process.pid,startedAt:A,updatedAt:A}),{host:J,port:Z,url:j,authToken:X,close:K}}async function yP(f){let $=f.owner??H$(),J=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),H=f.host??"127.0.0.1",W=f.port??O8(),Q=f.pathname??"/hub",Z=$0(H,W,Q),j=$.discoveryPath,P=(V)=>{if(!J)I$(V.url,V.authToken);return V},X=CW.get(j);if(X){let V=await X;if(V.url===Z)return P({server:V,url:V.url,authToken:V.authToken,action:"reuse"})}return await fQ($.discoveryPath,async()=>{let V=await Zf($.discoveryPath);if(V?.url&&(V.url===Z||f.allowPortFallback===!0)){let R=await Yf(V.url);if(R?.url&&await L0(R.url,{authToken:V.authToken}))return P({url:R.url,authToken:V.authToken,action:"reuse"})}if((await Yf(Z))?.url||V?.url)await rf($.discoveryPath);let A=async(R)=>{let U=EW({...R,owner:$});CW.set(j,U);try{let y=await U;return P({server:y,url:y.url,authToken:y.authToken,action:"started"})}catch(y){throw CW.delete(j),y}};try{return await A(f)}catch(R){if(!f.allowPortFallback||!GM(R))throw R;return await A({...f,port:0})}})}async function jg(f){let $=_0({host:f.host,port:f.port,pathname:f.pathname});return await EW({...f,...$,owner:Bf()})}async function Pg(f){let $=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=_0({host:f.host,port:f.port,pathname:f.pathname});return await yP({...f,...J,allowPortFallback:f.allowPortFallback??!$,owner:Bf()})}import{mkdir as MM,readFile as _M,unlink as LM,writeFile as zM}from"node:fs/promises";import{join as KP}from"node:path";function OM(f){return f.replace(/[^a-zA-Z0-9._-]+/g,"_")}function NM(f){return new Promise(($)=>setTimeout($,f))}async function SW(f){try{await LM(f)}catch{}}async function qM(f,$={}){let J=$.approvalDir?.trim(),H=$.sessionId?.trim();if(!J||!H)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await MM(J,{recursive:!0});let W=OM(`${f.toolCallId}`),Q=KP(J,`${H}.request.${W}.json`),Z=KP(J,`${H}.decision.${W}.json`),j=$.nowIso??(()=>new Date().toISOString());await zM(Q,`${JSON.stringify({requestId:W,sessionId:H,createdAt:j(),toolCallId:f.toolCallId,toolName:f.toolName,input:f.input,iteration:f.iteration,agentId:f.agentId,conversationId:f.conversationId},null,2)}
713
+ `,"utf8");let P=$.timeoutMs??300000,X=$.pollIntervalMs??200,V=Date.now();while(Date.now()-V<P){try{let Y=await _M(Z,"utf8"),B=JSON.parse(Y),A={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([SW(Z),SW(Q)]),A}catch{}await NM(X)}return await SW(Q),{approved:!1,reason:"Tool approval request timed out"}}ef();import*as Jf from"@cline/llms";import{isOAuthProviderId as bM}from"@cline/shared";function wM(f){return f.apiKey??f.auth?.apiKey}function CM(f){return(f.auth?.accessToken?.trim()??"").length>0}function UP(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function EM(f){let $=f.split(/\s+/).filter(Boolean);if($.length===0)return"?";if($.length===1)return $[0].slice(0,2).toUpperCase();return`${$[0][0]}${$[1][0]}`.toUpperCase()}function SM(f){let $=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let H of f)J=J*31+H.charCodeAt(0)>>>0;return $[J%$.length]}function GP(f){return Object.entries(f).sort(([$],[J])=>$.localeCompare(J)).map(([$,J])=>OZ($,J))}async function kM(f,$){let J=await Jf.getModelsForProvider(f);if(!$)return J;let H=await Y6(f,{loadPrivateOnAuth:!0,failOnError:!1},$);return H?.knownModels?{...J,...H.knownModels}:J}function kW(f){return[...new Set((f??[]).map(($)=>$.trim()).filter(Boolean))]}function hP(f){let $=Object.entries(f??{}).filter(([J])=>J.trim().length>0);return $.length>0?Object.fromEntries($):void 0}function mW(f,$){let J=$?.includes("vision")??!1,H=$?.includes("reasoning")??!1;return Object.fromEntries(f.map((W)=>[W,{id:W,name:W,supportsVision:J,supportsAttachments:J,supportsReasoning:H}]))}async function TP(f){if(!f.shouldRecompute)return f.fallbackModelIds??[];let $=f.modelsSourceUrl?await D2(f.modelsSourceUrl,f.providerId):[];return[...new Set([...f.explicitModels??[],...$])]}function DP(f,$){let J=f.read(),H=!1;if(J.providers[$])delete J.providers[$],H=!0;if(J.lastUsedProvider===$)delete J.lastUsedProvider,H=!0;if(H)f.write(J);Jf.unregisterProvider($)}async function mM(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let H=$.baseUrl.trim(),W=$.apiKey?.trim()??"";if(!H&&!W){let R=B$(f);if((await p$(R)).providers[J]){let y=await _P(f,{providerId:J});return{providerId:J,settingsPath:y.settingsPath,modelsPath:y.modelsPath,modelsCount:0}}return DP(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:R,modelsCount:0}}if(Jf.hasProvider(J))throw Error(`provider "${J}" already exists`);let Q=$.name.trim();if(!Q)throw Error("name is required");if(!H)throw Error("baseUrl is required");let Z=kW($.models),j=$.modelsSourceUrl?.trim(),P=await TP({providerId:J,explicitModels:Z,modelsSourceUrl:j,shouldRecompute:!0});if(P.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let X=$.defaultModelId?.trim()&&P.includes($.defaultModelId.trim())?$.defaultModelId.trim():P[0],V=$.capabilities?.length?[...new Set($.capabilities)]:void 0,Y=hP($.headers);f.saveProviderSettings({provider:J,apiKey:W||void 0,baseUrl:H,headers:Y,timeout:$.timeoutMs,model:X,protocol:$.protocol,client:$.client},{setLastUsed:!1});let B=B$(f),A=await p$(B);return A.providers[J]={provider:{name:Q,baseUrl:H,defaultModelId:X,protocol:$.protocol,client:$.client,capabilities:V,modelsSourceUrl:j},models:mW(P,V)},await s8(B,A),a1(J,A.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:B,modelsCount:P.length}}async function MP(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let H=B$(f),W=await p$(H),Q=W.providers[J];if(!Q){let T=f.getProviderSettings(J);if(!T)throw Error(`provider "${J}" does not exist`);let G=$.modelsSourceUrl?.trim(),h=kW($.models)[0]??T.model?.trim();if(!h&&!G)throw Error(`provider "${J}" cannot be updated because no model is configured`);Q={provider:{name:$.name?.trim()||UP(J),baseUrl:$.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:h,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:h?mW([h],T.capabilities):{}}}if(!Q.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let Z=$.name?.trim()??Q.provider.name.trim();if(!Z)throw Error("name is required");let j=$.baseUrl?.trim()??Q.provider.baseUrl.trim();if(!j)throw Error("baseUrl is required");let P=$.capabilities===void 0?Q.provider.capabilities:$.capabilities===null?void 0:[...new Set($.capabilities)],X=$.protocol===void 0?Q.provider.protocol:$.protocol??void 0,V=$.client===void 0?Q.provider.client:$.client??void 0,Y=kW($.models),B=$.modelsSourceUrl===void 0?Q.provider.modelsSourceUrl:$.modelsSourceUrl?.trim()||void 0,A=$.models!==void 0||$.modelsSourceUrl!==void 0&&!!B,R=Object.keys(Q.models??{}).map((T)=>T.trim()).filter(Boolean),U=await TP({providerId:J,explicitModels:Y,modelsSourceUrl:B,fallbackModelIds:R,shouldRecompute:A});if(U.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let y=$.defaultModelId===void 0?Q.provider.defaultModelId?.trim():$.defaultModelId?.trim(),F=y&&U.includes(y)?y:U[0],M={...f.getProviderSettings(J)??{},provider:J,baseUrl:j,model:F};if(X)M.protocol=X;else delete M.protocol;if(V)M.client=V;else delete M.client;if($.apiKey!==void 0){let T=$.apiKey?.trim()??"";if(T)M.apiKey=T;else delete M.apiKey}if($.headers!==void 0){let T=hP($.headers);if(T)M.headers=T;else delete M.headers}if($.timeoutMs!==void 0)if(typeof $.timeoutMs==="number")M.timeout=$.timeoutMs;else delete M.timeout;return f.saveProviderSettings(M,{setLastUsed:!1}),W.providers[J]={provider:{name:Z,baseUrl:j,defaultModelId:F,protocol:X,client:V,capabilities:P,modelsSourceUrl:B},models:mW(U,P)},await s8(H,W),a1(J,W.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:H,modelsCount:U.length}}async function _P(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let H=B$(f),W=await p$(H);if(!W.providers[J])throw Error(`provider "${J}" does not exist`);return delete W.providers[J],await s8(H,W),Jf.unregisterProvider(J),DP(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:H}}async function IM(f){let $=f.read(),J=Jf.getProviderIds().sort((W,Q)=>W.localeCompare(Q));return{providers:await Promise.all(J.map(async(W)=>{let[Q,Z]=await Promise.all([Jf.getProvider(W),Jf.getModelsForProvider(W)]),j=GP(Z),P=$.providers[W]?.settings,X=Q?.name??UP(W);return{id:W,name:X,models:j.length,color:SM(W),letter:EM(X),enabled:Boolean(P),apiKey:P?wM(P):void 0,oauthAccessTokenPresent:P?CM(P):void 0,baseUrl:P?.baseUrl??Q?.baseUrl,defaultModelId:Q?.defaultModelId,protocol:P?.protocol??Q?.protocol,client:P?.client??Q?.client,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:j}})),settingsPath:f.getFilePath()}}async function xM(f,$){let J=f.trim(),H=await kM(J,$),W=GP(H);return{providerId:J,models:W}}function gM(f,$){let J=$.providerId.trim();if($.enabled===!1){let Q=f.read();if(delete Q.providers[J],Q.lastUsedProvider===J)delete Q.lastUsedProvider;return f.write(Q),{providerId:J,enabled:!1,settingsPath:f.getFilePath()}}let W={...f.getProviderSettings(J)??{},provider:J};for(let Q of["apiKey","baseUrl","model","region"])if(Object.hasOwn($,Q)&&typeof $[Q]==="string")if($[Q].trim().length===0)delete W[Q];else W[Q]=$[Q];for(let Q of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn($,Q))W[Q]=$[Q];for(let Q of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn($,Q)&&$[Q]!=null)W[Q]={...typeof W[Q]==="object"&&W[Q]!=null?W[Q]:{},...$[Q]};return f.saveProviderSettings(W,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:f.getFilePath()}}async function vM(f,$){let J=$.trim(),H=f.getProviderSettings(J),Q=Jf.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,Z=H?.baseUrl?.trim()||Q?.baseUrl?.trim(),j=M2(Z,Q?.baseUrl,Q?.modelsSourceUrl);if(!H||!Q||!Z||!j)return{providerId:J,refreshed:!1};let P=await MP(f,{providerId:J,name:Q.name,baseUrl:Z,apiKey:H.apiKey,headers:H.headers??null,timeoutMs:H.timeout??null,modelsSourceUrl:j,protocol:H.protocol??Q.protocol??null,client:H.client??Q.client??null,capabilities:H.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:P.modelsCount}}function uM(f){let $=f.trim().toLowerCase();if($==="codex"||$==="openai-codex")return"openai-codex";if($==="cline"||$==="oca")return $;throw Error(`provider "${f}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function cM(f,$){if(f==="cline")return $.access.startsWith("workos:")?$.access:`workos:${$.access}`;return $.access}async function dM(f,$,J){let H=q4({onPrompt:async(W)=>W.defaultValue??"",openUrl:J,onOpenUrlError:({error:W})=>{throw W instanceof Error?W:Error(String(W))}});if(f==="cline")return F2({apiBaseUrl:$?.baseUrl?.trim()||"https://api.cline.bot",useWorkOSDeviceAuth:!0,callbacks:H});if(f==="oca")return T2({mode:$?.oca?.mode,callbacks:H});return K2(H)}function rM(f,$,J,H){let W={...J?.auth??{},accessToken:cM($,H),refreshToken:H.refresh,accountId:H.accountId,expiresAt:H.expires},Q={...J??{provider:$},provider:$,auth:W};return f.saveProviderSettings(Q,{tokenSource:"oauth"}),Q}function lM(f){let $=f?.auth?.accessToken?.trim()||f?.apiKey?.trim();return $&&$.length>0?$:void 0}var pM=new Set(["ollama","lmstudio","litellm"]);function iM(f,$){if(!$?.provider.baseUrl)return!1;if($.provider.source!=="system")return!0;return pM.has(f)}function nM(f){let $=Jf.normalizeProviderId(f);if(bM($))return{providerId:$,authMethod:"oauth",fields:{}};let J=Jf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],H=J?.provider.baseUrl,W={apiKey:{}};if(iM($,J))W.baseUrl={defaultValue:H};return{providerId:$,authMethod:"api-key",fields:W}}Af();G4();import{appendFileSync as aM,existsSync as IW,mkdirSync as tM,readFileSync as sM,renameSync as oM,unlinkSync as eM,writeFileSync as f_}from"node:fs";import{join as xW}from"node:path";import{resolveTeamDataDir as $_}from"@cline/shared/storage";function J_(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class LP{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor(f){let $=J_(f.teamName),J=f.baseDir?.trim()||$_();this.dirPath=xW(J,$),this.statePath=xW(this.dirPath,"state.json"),this.taskHistoryPath=xW(this.dirPath,"task-history.jsonl")}loadState(){if(!IW(this.statePath))return;try{let f=sM(this.statePath,"utf8"),$=JSON.parse(f);if($.version!==1||!$.teamState)return;for(let J of $.teammates??[])this.teammateSpecs.set(J.agentId,J);return IQ($.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec(f){this.teammateSpecs.set(f.agentId,f)}removeTeammateSpec(f){this.teammateSpecs.delete(f)}persist(f){if(!this.hasPersistableState(f)){this.clearPersistedState();return}this.ensureDir();let $={version:1,updatedAt:new Date().toISOString(),teamState:f.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;f_(J,`${JSON.stringify($,null,2)}
714
+ `,"utf8"),oM(J,this.statePath)}appendTaskHistory(f){let $={};switch(f.type){case"team_task_updated":$=f.task;break;case"team_message":$={agentId:f.message.fromAgentId,toAgentId:f.message.toAgentId,subject:f.message.subject,taskId:f.message.taskId};break;case"team_mission_log":$={agentId:f.entry.agentId,kind:f.entry.kind,summary:f.entry.summary,taskId:f.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":$={agentId:f.agentId,message:"message"in f?f.message:void 0};break;case"task_end":$={agentId:f.agentId,finishReason:f.result?.finishReason,error:f.error?.message};break;case"agent_event":$={agentId:f.agentId,eventType:f.event.type};break}this.ensureDir(),aM(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:f.type,task:$})}
715
+ `,"utf8")}ensureDir(){if(!IW(this.dirPath))tM(this.dirPath,{recursive:!0})}hasPersistableState(f){let $=f.exportState();if(this.teammateSpecs.size>0)return!0;if($.members.some((J)=>J.role==="teammate"))return!0;return $.tasks.length>0||$.mailbox.length>0||$.missionLog.length>0}clearPersistedState(){if(IW(this.statePath))eM(this.statePath)}}import{z}from"zod";var zP=z.object({workspaceRoot:z.string().min(1),cwd:z.string().optional(),provider:z.string().min(1),model:z.string().min(1),mode:z.enum(["act","plan"]).default("act"),apiKey:z.string(),systemPrompt:z.string().optional(),rules:z.string().optional(),maxIterations:z.number().int().positive().optional(),enableTools:z.boolean(),enableSpawn:z.boolean().optional(),enableTeams:z.boolean().optional(),autoApproveTools:z.boolean().optional(),missionStepInterval:z.number().int().positive().optional(),missionTimeIntervalMs:z.number().int().positive().optional()}),OP=z.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),NP=z.enum(["user","assistant","tool","system","status","error"]),qP=z.object({id:z.string().min(1),sessionId:z.string().nullable(),role:NP,content:z.string(),createdAt:z.number().int().nonnegative(),meta:z.object({stream:z.enum(["stdout","stderr"]).optional(),toolName:z.string().optional(),iteration:z.number().int().nonnegative().optional(),agentId:z.string().optional(),conversationId:z.string().optional(),hookEventName:z.string().optional(),inputTokens:z.number().int().nonnegative().optional(),outputTokens:z.number().int().nonnegative().optional(),checkpoint:z.object({ref:z.string(),createdAt:z.number().int().nonnegative(),runCount:z.number().int().positive(),kind:z.enum(["stash","commit"]).optional()}).optional()}).optional()}),bP=z.object({toolCalls:z.number().int().nonnegative(),tokensIn:z.number().int().nonnegative(),tokensOut:z.number().int().nonnegative()}),H_=z.object({sessionId:z.string().nullable(),status:OP,config:zP,messages:z.array(qP),rawTranscript:z.string(),error:z.string().nullable(),summary:bP});var W_=l7;import{Agent as Uu,createAgentRuntime as Gu}from"@cline/agents";var wP="https://api.cline.bot",Q_=5000,EP={recommended:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",description:"Most intelligent model for agents and coding",tags:["BEST"]},{id:"anthropic/claude-sonnet-4.6",name:"Claude Sonnet 4.6",description:"Strong coding and agent performance",tags:["NEW"]},{id:"google/gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview",description:"1M context window, strong coding performance",tags:["NEW"]},{id:"openai/gpt-5.3-codex",name:"GPT-5.3 Codex",description:"OpenAI's latest with strong coding abilities",tags:["NEW"]}],free:[{id:"kwaipilot/kat-coder-pro",name:"KwaiKAT Kat Coder Pro",description:"Advanced agentic coding model",tags:["FREE"]},{id:"arcee-ai/trinity-large-preview:free",name:"Arcee AI Trinity Large Preview",description:"Advanced large preview model",tags:["FREE"]}]};function Z_(f){return{recommended:f.recommended.map(($)=>({...$,tags:[...$.tags]})),free:f.free.map(($)=>({...$,tags:[...$.tags]}))}}function CP(f){if(!f||typeof f!=="object")return null;let $=f;if(typeof $.id!=="string"||$.id.length===0)return null;return{id:$.id,name:typeof $.name==="string"&&$.name.length>0?$.name:$.id,description:typeof $.description==="string"?$.description:"",tags:Array.isArray($.tags)?$.tags.filter((J)=>typeof J==="string"):[]}}function j_(f){if(!f||typeof f!=="object")return null;let $=f,J=Array.isArray($.recommended)?$.recommended:[],H=Array.isArray($.free)?$.free:[],W=J.map(CP).filter((Z)=>Z!==null),Q=H.map(CP).filter((Z)=>Z!==null);if(W.length===0&&Q.length===0)return null;return{recommended:W,free:Q}}function P_(f){let $=f.baseUrl?.trim();if($)return $;try{return(f.providerSettingsManager??new C0).getProviderSettings("cline")?.baseUrl?.trim()||wP}catch{return wP}}async function X_(f,$,J){let H=new AbortController,W=setTimeout(()=>H.abort(),J);try{return await f($,{signal:H.signal})}finally{clearTimeout(W)}}async function V_(f={}){try{let $=P_(f),J=f.fetchImpl??fetch,H=await X_(J,`${$}/api/v1/ai/cline/recommended-models`,f.timeoutMs??Q_);if(!H.ok)throw Error(`HTTP ${H.status}`);let W=await H.json(),Q=j_(W);if(Q)return Q}catch{}return Z_(EP)}import{readFile as Y_}from"node:fs/promises";import B_ from"node:path";function A_(f){return f}async function R_(f){let $=B_.resolve(f),J=await Y_($,"utf8"),H;try{H=JSON.parse(J)}catch(W){let Q=W instanceof Error?W.message:String(W);throw Error(`Failed to parse JSON config at "${$}": ${Q}`)}return F_(H,$)}function F_(f,$){if(!f||typeof f!=="object")throw Error(`Invalid llms config in "${$}": expected an object.`);let H=f.providers;if(!Array.isArray(H))throw Error(`Invalid llms config in "${$}": "providers" must be an array.`);if(!H.length)throw Error(`Invalid llms config in "${$}": "providers" cannot be empty.`);return f}import{BUILT_IN_PROVIDER_IDS as mP,createHandler as U_,createHandlerAsync as G_,getProviderCollection as h_,hasProvider as IP,registerAsyncHandler as T_,registerHandler as D_,registerModel as M_,registerProvider as xP}from"@cline/llms";function SP(f){return f?{...f}:{}}function y_(f,$){if(f)return f;if(!$)return;let J=globalThis.process;if(!J?.env)return;return J.env[$]}function K_(f,$){if(!$.length)throw Error(`Provider "${f}" must include at least one model.`)}function kP(f){let $=Object.keys(f.collection.models);return{id:f.collection.provider.id,name:f.collection.provider.name,description:f.collection.provider.description,protocol:f.collection.provider.protocol,baseUrl:f.collection.provider.baseUrl,capabilities:f.collection.provider.capabilities,env:f.collection.provider.env,models:$,defaultModel:f.collection.provider.defaultModelId,modelCount:$.length}}class gW{providers=new Map;register(f){K_(f.id,f.models);let $=f.defaultModel??f.models[0];if(!$)throw Error(`Provider "${f.id}" must define a default model.`);if(!f.models.includes($))throw Error(`Default model "${$}" is not included in configured models for "${f.id}".`);let J=this.providers.get(f.id);this.providers.set(f.id,{id:f.id,models:new Set([...J?.models??[],...f.models]),defaultModel:$,defaults:{...J?.defaults??{},...SP(f.defaults)}})}registerSelectionConfig(f){this.register({id:f.id,models:f.models,defaultModel:f.defaultModel,defaults:{apiKey:y_(f.apiKey,f.apiKeyEnv),routingProviderId:f.builtinProviderId,baseUrl:f.baseUrl,headers:f.headers,timeoutMs:f.timeoutMs,capabilities:f.capabilities,...SP(f.settings)}})}registerModel(f,$){let J=this.providers.get(f);if(!J){this.providers.set(f,{id:f,models:new Set([$]),defaultModel:$,defaults:{}});return}J.models.add($)}createHandlerConfig(f){let $=this.require(f.providerId),J=f.modelId??$.defaultModel;if(!$.models.has(J))throw Error(`Model "${J}" is not configured for provider "${f.providerId}".`);return{providerId:f.providerId,modelId:J,...$.defaults,...f.overrides}}list(){return Array.from(this.providers.values()).map((f)=>({id:f.id,models:Array.from(f.models),defaultModel:f.defaultModel}))}getModels(f){return Array.from(this.require(f).models)}hasProvider(f){return this.providers.has(f)}hasModel(f,$){return this.providers.get(f)?.models.has($)??!1}require(f){let $=this.providers.get(f);if(!$)throw Error(`Provider "${f}" is not configured in this SDK instance.`);return $}}class vW{configuredProviders=new gW;constructor(f){this.applyConfig(f)}createHandler(f){return U_(this.configuredProviders.createHandlerConfig(f))}async createHandlerAsync(f){return G_(this.configuredProviders.createHandlerConfig(f))}registerProvider(f){if(xP(f.collection),f.handlerFactory&&f.asyncHandlerFactory)throw Error(`Provider "${f.collection.provider.id}" cannot register both sync and async handlers.`);if(f.handlerFactory)D_(f.collection.provider.id,f.handlerFactory);if(f.asyncHandlerFactory)T_(f.collection.provider.id,f.asyncHandlerFactory);this.configuredProviders.register({id:f.collection.provider.id,models:f.exposeModels??Object.keys(f.collection.models),defaultModel:f.defaultModel??f.collection.provider.defaultModelId,defaults:f.defaults})}registerBuiltinProvider(f){let $=f.exposeModels??Object.keys(f.models),J=f.defaultModel??$[0];if(!J)throw Error(`Provider "${f.id}" must define a default model.`);xP({provider:{id:f.id,name:f.name??f.id,description:f.description,protocol:f.protocol,baseUrl:f.baseUrl,defaultModelId:J,client:f.client??"openai-compatible",capabilities:f.capabilities,env:f.env,source:"system"},models:f.models}),this.configuredProviders.register({id:f.id,models:$,defaultModel:J,defaults:{routingProviderId:f.builtinProviderId,...f.defaults??{}}})}registerModel(f){M_(f.providerId,f.modelId,f.info),this.configuredProviders.registerModel(f.providerId,f.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...mP]}async getBuiltInProviders(){return(await Promise.all(mP.map(($)=>h_($)))).filter(($)=>$!==void 0).map(($)=>kP({collection:$}))}getModels(f){return this.configuredProviders.getModels(f)}isProviderConfigured(f){return this.configuredProviders.hasProvider(f)}isModelConfigured(f,$){return this.configuredProviders.hasModel(f,$)}applyConfig(f){for(let $ of f.providers)this.configuredProviders.registerSelectionConfig($);for(let $ of f.models??[])this.registerModel($);for(let $ of f.customProviders??[])this.registerProvider($);for(let $ of this.configuredProviders.list()){let J=IP($.id),H=this.configuredProviders.createHandlerConfig({providerId:$.id,modelId:$.defaultModel}).routingProviderId,W=typeof H==="string"&&IP(H);if(!J&&!W)throw Error(`Provider "${$.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function __(f){return new vW(f)}KW();async function jv(){return Promise.resolve().then(() => (vP(),gP))}export{e7 as writeHubDiscovery,E$ as writeGlobalSettings,fQ as withHubStartupLock,L0 as verifyHubConnection,MP as updateLocalProvider,TW as truncateNotificationBody,$J as toggleDisabledTool,I8 as toTeamProgressLifecycleEvent,tf as toProviderConfig,oF as toHubHealthUrl,IH as toHookConfigFileName,CH as summarizeUsageFromMessages,sy as stopLocalHubServerGracefully,g0 as startLocalOAuthServer,EW as startHubWebSocketServer,jg as startHubServer,XX as startClineDeviceAuth,KJ as splitCoreSessionConfig,N8 as spawnDetachedHubServer,WA as setTelemetryOptOutGlobally,x3 as setDisabledTools,jA as setDisabledPlugin,HI as sendHubCommand,gM as saveLocalProviderSettings,rM as saveLocalProviderOAuthCredentials,_3 as sanitizeTeamName,q1 as sanitizeSessionToken,v5 as safeParseSettings,YV as safeCreateProviderConfig,X4 as runSubprocessEvent,Y4 as runHook,M3 as reviveTeamStateDates,AQ as restartLocalHubIfIdleAfterStartupTimeout,Tb as resolveWorkspaceHubOwnerContext,N6 as resolveWorkflowsConfigSearchPaths,z6 as resolveSkillsConfigSearchPaths,Bf as resolveSharedHubOwnerContext,OT as resolveSessionBackend,O6 as resolveRulesConfigSearchPaths,Y6 as resolveProviderConfig,BJ as resolvePluginConfigSearchPaths,$W as resolveMcpServerRegistrations,lM as resolveLocalClineAuthToken,hD as resolveHubUrl,H$ as resolveHubOwnerContext,_0 as resolveHubEndpointOptions,m$ as resolveHubBuildId,kH as resolveHooksConfigSearchPaths,cf as resolveDisabledToolNames,X8 as resolveDisabledPluginPaths,a$ as resolveDefaultMcpSettingsPath,O8 as resolveDefaultHubPort,Xy as resolveDefaultHubPathname,Py as resolveDefaultHubHost,N3 as resolveCoreSelectedToolIds,QH as resolveCompatibleLocalHubUrl,Bb as resolveClineDir,eJ as resolveClineDataDir,F8 as resolveAndLoadAgentPlugins,G1 as resolveAgentPluginPaths,fH as requestHubShutdown,qM as requestDesktopToolApproval,I$ as rememberRecoverableLocalHubUrl,$4 as registerMcpServersFromSettingsFile,Dv as registerDisposable,vM as refreshProviderModelsFromSource,s4 as refreshOpenAICodexToken,$6 as refreshOcaToken,a4 as refreshClineToken,tH as readSessionCheckpointHistory,Zf as readHubDiscovery,of as readGlobalSettings,Yf as probeHubServer,JI as probeHubConnection,E9 as prewarmFileIndex,HQ as prewarmDetachedHubServer,L6 as parseWorkflowConfigFromMarkdown,Tv as parseUserCommandEnvelope,M6 as parseSkillConfigFromMarkdown,g5 as parseSettings,_6 as parseRuleConfigFromMarkdown,V4 as parseHookEventPayload,GX as openaiCodexOAuthProvider,s0 as normalizeWorkspacePath,hv as normalizeUserInput,Vf as normalizeRuntimeCapabilities,N2 as normalizeProviderId,UX as normalizeOpenAICodexCredentials,uM as normalizeOAuthProvider,x$ as normalizeHubWebSocketUrl,Gv as noopBasicLogger,iH as migrateLegacyProviderSettings,k2 as mergeRulesForSystemPrompt,n1 as mergeAgentHooks,gJ as makeTeamTaskSubSessionId,T8 as makeSubSessionId,K2 as loginOpenAICodex,T2 as loginOcaOAuth,dM as loginLocalProvider,F2 as loginClineOAuth,jv as loadOpenTelemetryAdapter,fW as loadMcpSettingsFile,R_ as loadLlmsConfigFromFile,t0 as loadAgentPluginsFromPathsWithDiagnostics,s3 as loadAgentPluginsFromPaths,XJ as loadAgentPluginFromPath,IF as listSessionHistoryFromBackend,RJ as listPluginTools,IM as listLocalProviders,r$ as listHookConfigFiles,QA as isToolDisabledGlobally,fJ as isTelemetryOptedOutGlobally,f9 as isRuleEnabled,ZA as isPluginDisabledGlobally,KX as isOpenAICodexTokenExpired,ry as isHubReconnectableTransportError,YQ as isHubCommandTimeoutError,Fb as isDiscoveryFilePresent,pW as isClineAccountActionRequest,jV as isBuiltInProviderId,Y0 as identifyAccount,f4 as hasMcpSettingsFile,o4 as getValidOpenAICodexCredentials,J6 as getValidOcaCredentials,t4 as getValidClineCredentials,nM as getProviderConfigFields,N5 as getProviderConfig,xM as getLocalProviderModels,O2 as getLiveModelsCatalog,l0 as getFileIndex,qU as getCurrentContextSize,e6 as getCoreHeadlessToolNames,O3 as getCoreDefaultEnabledToolIds,F1 as getCoreBuiltinToolCatalog,q3 as getCoreAcpToolNames,Yv as getClineDefaultSystemPrompt,DJ as generateWorkspaceInfoWithDiagnostics,G8 as generateWorkspaceInfo,h5 as generateOcaOpcRequestId,S2 as formatRulesForSystemPrompt,Uv as formatDisplayUserInput,HJ as filterExtensionToolRegistrations,S$ as filterDisabledTools,JJ as filterDisabledPluginPaths,V_ as fetchClineRecommendedModels,iW as executeClineAccountAction,yP as ensureHubWebSocketServer,Pg as ensureHubServer,Cb as ensureDetachedHubServer,EZ as ensureCustomProvidersLoaded,m1 as ensureCompatibleLocalHubUrl,t2 as enrichPromptWithMentions,Kv as emptyWorkspaceManifest,l$ as emptyStoredProviderSettings,AJ as discoverPluginModulePaths,vJ as deriveSubsessionStatus,_P as deleteLocalProvider,A_ as defineLlmsConfig,w6 as createWorkflowsConfigDefinition,C$ as createUserInstructionConfigService,I9 as createToolPoliciesWithPreset,yv as createTool,jj as createTeamName,Tj as createSubprocessHooks,w$ as createSpawnAgentTool,q6 as createSkillsConfigDefinition,P4 as createSessionHost,P4 as createRuntimeHost,b6 as createRulesConfigDefinition,VV as createProviderConfig,K4 as createOpenTelemetryTelemetryService,EX as createOcaRequestHeaders,CX as createOcaOAuthProvider,q4 as createOAuthClientCallbacks,H4 as createMcpTools,RI as createLocalHubScheduleRuntimeHandlers,__ as createLlmsSdk,c$ as createInitialAccumulatedUsage,Rb as createInMemoryHubOwnerContext,$0 as createHubServerUrl,o7 as createHubAuthToken,uH as createHookConfigFileHooks,l8 as createHookConfigFileExtension,r8 as createHookAuditHooks,JW as createDisabledMcpToolPolicy,eZ as createDisabledMcpToolPolicies,J8 as createDelegatedAgentConfigProvider,H8 as createDelegatedAgent,x9 as createDefaultToolsWithPreset,N$ as createDefaultTools,e8 as createDefaultMcpServerClientFactory,f8 as createDefaultExecutors,h1 as createCoreSettingsService,z0 as createCoreSessionSnapshot,Fv as createContributionRegistry,wH as createContextCompactionPrepareTurn,W2 as createConfiguredTelemetryService,U4 as createConfiguredTelemetryHandle,Rv as createClineTelemetryServiceMetadata,Av as createClineTelemetryServiceConfig,YX as createClineOAuthProvider,y1 as createBuiltinTools,R1 as createAgentTeamsTools,Gu as createAgentRuntime,v8 as createAgentHooksExtension,zj as connectToHub,VX as completeClineDeviceAuth,WV as clearPrivateModelsCatalogCache,HV as clearLiveModelsCatalogCache,rf as clearHubDiscovery,tP as captureWorkspacePathResolved,b4 as captureWorkspaceInitialized,w4 as captureWorkspaceInitError,m4 as captureToolUsage,S4 as captureTokenUsage,E4 as captureTaskRestarted,C4 as captureTaskCreated,X2 as captureTaskCompleted,Y2 as captureSubagentExecution,I4 as captureSkillUsed,V2 as captureProviderApiError,k4 as captureModeSwitch,g4 as captureMentionUsed,u4 as captureMentionSearchResults,v4 as captureMentionFailed,d4 as captureHookDiscovery,aP as captureExtensionActivated,x4 as captureDiffEditFailure,$1 as captureConversationTurnEvent,X0 as captureAuthSucceeded,P0 as captureAuthStarted,I0 as captureAuthLoggedOut,V0 as captureAuthFailed,c4 as captureAgentTeamCreated,x0 as captureAgentCreated,MJ as buildWorkspaceMetadata,m8 as buildTeamProgressSummary,B1 as buildDelegatedAgentConfig,Z8 as bootstrapAgentTeams,mM as addLocalProvider,d$ as accumulateUsageTotals,G6 as WORKFLOWS_CONFIG_DIRECTORY_NAME,W1 as UnifiedConfigFileWatcher,uf as ToolPresets,J2 as TelemetryService,y4 as TelemetryLoggerSink,Q8 as TEAM_TOOL_NAMES,B8 as SubprocessSandbox,i8 as StoredProviderSettingsSchema,FZ as StoredProviderSettingsEntrySchema,o1 as SqliteTeamStore,O0 as SqliteSessionStore,n$ as SessionVersioningService,mf as SessionVersioningError,Pf as SessionSource,m5 as SapSettingsSchema,U6 as SKILLS_CONFIG_DIRECTORY_NAME,R6 as SESSION_STATUSES,N4 as RpcClineAccountService,b8 as RemoteRuntimeHost,C5 as ReasoningSettingsSchema,n5 as RULES_CONFIG_DIRECTORY_NAME,_$ as ProviderSettingsSchema,C0 as ProviderSettingsManager,q5 as ProviderProtocolSchema,A6 as ProviderIdSchema,b5 as ProviderClientSchema,H2 as OpenTelemetryProvider,I5 as OcaSettingsSchema,V6 as OPENAI_COMPATIBLE_PROVIDERS,A5 as OCI_HEADER_OPC_REQUEST_ID,J0 as NodeHubClient,wW as NativeHubTransportAdapter,x5 as ModelCatalogSettingsSchema,E0 as LocalRuntimeHost,Xv as Llms,n8 as InMemoryWorkspaceManager,s1 as InMemoryMcpManager,LD as HubUIClient,zf as HubTransportError,_D as HubSessionClient,_4 as HubServerTransport,F4 as HubScheduleService,B4 as HubScheduleCommandService,Z$ as HubRuntimeHost,q8 as HubCommandError,Gj as HookEventPayloadSchema,Uj as HookEventNameSchema,u8 as HookConfigFileName,mH as HOOK_CONFIG_FILE_EVENT_MAP,ZZ as HOOKS_CONFIG_DIRECTORY_NAME,P8 as GlobalSettingsSchema,S5 as GcpSettingsSchema,LP as FileTeamPersistenceStore,EP as FALLBACK_CLINE_RECOMMENDED_MODELS,$f as DefaultToolNames,Q4 as DefaultRuntimeBuilder,vW as DefaultLlmsSdk,L5 as DEFAULT_MODELS_CATALOG_URL,U2 as DEFAULT_INTERNAL_OCA_BASE_URL,P5 as DEFAULT_INTERNAL_IDCS_URL,X5 as DEFAULT_INTERNAL_IDCS_SCOPES,j5 as DEFAULT_INTERNAL_IDCS_CLIENT_ID,Zy as DEFAULT_HUB_PORT,jy as DEFAULT_HUB_PATHNAME,Qy as DEFAULT_HUB_HOST,G2 as DEFAULT_EXTERNAL_OCA_BASE_URL,Y5 as DEFAULT_EXTERNAL_IDCS_URL,B5 as DEFAULT_EXTERNAL_IDCS_SCOPES,V5 as DEFAULT_EXTERNAL_IDCS_CLIENT_ID,k$ as CoreSettingsService,N0 as CoreSessionService,Bv as ContributionRegistry,yW as ClineCore,O4 as ClineAccountService,H_ as ChatViewStateSchema,bP as ChatSummarySchema,OP as ChatSessionStatusSchema,zP as ChatSessionConfigSchema,qP as ChatMessageSchema,NP as ChatMessageRoleSchema,I as CORE_TELEMETRY_EVENTS,W_ as CORE_BUILD_VERSION,bW as BrowserWebSocketHubAdapter,ZV as BUILT_IN_PROVIDER_IDS,B6 as BUILT_IN_PROVIDER,k5 as AzureSettingsSchema,E5 as AwsSettingsSchema,w5 as AuthSettingsSchema,u1 as AgentTeamsRuntime,RH as AgentTeam,Uu as Agent,z$ as ALL_DEFAULT_TOOL_NAMES};