@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
@@ -0,0 +1,717 @@
1
+ import{createRequire as XY}from"node:module";var{defineProperty:ZH,getOwnPropertyNames:ZY}=Object;var Y3=Object.prototype.hasOwnProperty;function B3(f){return this[f]}var O=(f,$,J)=>{var H=ZY($);for(let W of H)if(!Y3.call(f,W)&&W!=="default")ZH(f,W,{get:B3.bind($,W),enumerable:!0});if(J){for(let W of H)if(!Y3.call(J,W)&&W!=="default")ZH(J,W,{get:B3.bind($,W),enumerable:!0});return J}};var jY=(f)=>f;function PY(f,$){this[f]=jY.bind(null,$)}var N=(f,$)=>{for(var J in $)ZH(f,J,{get:$[J],enumerable:!0,configurable:!0,set:PY.bind($,J)})};var f1=(f,$)=>()=>(f&&($=f(f=0)),$);var A3=XY(import.meta.url);function l(f,$,J){f?.capture({event:$,properties:J})}function C4(f){if(!f)return;return f.substring(0,500)}function pY(f){if(typeof f==="string")return"Error";return f.name?.trim()||f.constructor?.name||"Error"}function iY(f){return typeof f==="string"?f:f.message}function E3(f,$){return f.some((J)=>$.has(J.trim().toLowerCase()))}function S3(f){l(f,g.CLIENT.EXTENSION_ACTIVATED)}function E4(f,$){let J=[...$.vcs_types],H={root_count:$.root_count,vcs_types:J,is_multi_root:$.root_count>1,has_git:E3(J,new Set(["git"])),has_mercurial:E3(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;l(f,g.WORKSPACE.INITIALIZED,H)}function S4(f,$,J){l(f,g.WORKSPACE.INIT_ERROR,{error_type:pY($),error_message:C4(iY($)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function k3(f,$){l(f,g.WORKSPACE.PATH_RESOLVED,{...$})}function Y0(f,$){l(f,g.USER.AUTH_STARTED,{provider:$})}function B0(f,$){l(f,g.USER.AUTH_SUCCEEDED,{provider:$})}function A0(f,$,J){l(f,g.USER.AUTH_FAILED,{provider:$,errorMessage:C4(J)})}function C0(f,$,J){l(f,g.USER.AUTH_LOGGED_OUT,{provider:$,reason:J})}function m3(f,$){f?.captureRequired(g.USER.TELEMETRY_OPT_OUT,$)}function R0(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 k4(f,$){l(f,g.TASK.CREATED,$)}function m4(f,$){l(f,g.TASK.RESTARTED,$)}function _2(f,$){l(f,g.TASK.COMPLETED,$)}function Z1(f,$){l(f,g.TASK.CONVERSATION_TURN,{...$,timestamp:new Date().toISOString()})}function I4(f,$){l(f,g.TASK.TOKEN_USAGE,$)}function x4(f,$,J){l(f,g.TASK.MODE_SWITCH,{ulid:$,mode:J})}function g4(f,$){l(f,g.TASK.TOOL_USED,$)}function v4(f,$){l(f,g.TASK.SKILL_USED,$)}function u4(f,$){l(f,g.TASK.DIFF_EDIT_FAILED,$)}function L2(f,$){l(f,g.TASK.PROVIDER_API_ERROR,{...$,errorMessage:C4($.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function c4(f,$,J){l(f,g.TASK.MENTION_USED,{mentionType:$,contentLength:J,timestamp:new Date().toISOString()})}function d4(f,$,J,H){l(f,g.TASK.MENTION_FAILED,{mentionType:$,errorType:J,errorMessage:C4(H),timestamp:new Date().toISOString()})}function r4(f,$,J,H,W){l(f,g.TASK.MENTION_SEARCH_RESULTS,{queryLength:$.length,resultCount:J,searchType:H,isEmpty:W,timestamp:new Date().toISOString()})}function E0(f,$){l(f,g.TASK.AGENT_CREATED,{...$,timestamp:new Date().toISOString()})}function l4(f,$){l(f,g.TASK.AGENT_TEAM_CREATED,{...$,timestamp:new Date().toISOString()})}function z2(f,$){l(f,$.event==="ended"?g.TASK.SUBAGENT_COMPLETED:g.TASK.SUBAGENT_STARTED,{...$,timestamp:new Date().toISOString()})}function p4(f,$,J,H){l(f,g.HOOKS.DISCOVERY_COMPLETED,{hookName:$,globalCount:J,workspaceCount:H,totalCount:J+H,timestamp:new Date().toISOString()})}var g;var Kf=f1(()=>{g={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"}}});import{mkdirSync as nY,readFileSync as aY,writeFileSync as tY}from"node:fs";import{dirname as sY}from"node:path";import{resolveGlobalSettingsPath as g3}from"@cline/shared/storage";import{z as O2}from"zod";function x3(){return N2.parse({})}function af(){let f=g3(),$;try{$=JSON.parse(aY(f,"utf8"))}catch{return x3()}let J=N2.safeParse($);return J.success?J.data:x3()}function A$(f,$={}){let J=g3(),H=af();nY(sY(J),{recursive:!0});let W=N2.parse(f);if(!H.telemetryOptOut&&W.telemetryOptOut)m3($.telemetry);tY(J,`${JSON.stringify(W,null,2)}
2
+ `,"utf8")}function i4(){return af().telemetryOptOut}function v3(f,$={}){A$({...af(),telemetryOptOut:f},$)}function uf(f){return new Set(f??af().disabledTools??[])}function q2(f){return new Set(f??af().disabledPlugins??[])}function u3(f){return uf().has(f)}function n4(f){let $=uf(),J=af();if($.has(f))return $.delete(f),A$({...J,disabledTools:[...$]}),!1;return $.add(f),A$({...J,disabledTools:[...$]}),!0}function UH(f,$){let J=[...new Set(f.map((Q)=>Q.trim()).filter(Boolean))];if(J.length===0)return;let H=af(),W=uf(H.disabledTools);for(let Q of J)if($)W.add(Q);else W.delete(Q);A$({...H,disabledTools:[...W]})}function c3(f,$){return UH([f],$),$}function d3(f){return q2().has(f)}function r3(f,$){let J=f.trim();if(!J)return;let H=af(),W=q2(H.disabledPlugins);if($)W.add(J);else W.delete(J);A$({...H,disabledPlugins:[...W]})}function a4(f,$){let J=q2($);if(J.size===0)return[...f];return f.filter((H)=>!J.has(H))}function R$(f,$){let J=uf($);if(J.size===0)return[...f];return f.filter((H)=>!J.has(H.name))}function t4(f,$){if(!f||f.length===0)return f;let J=uf($);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 I3,N2;var F0=f1(()=>{Kf();I3=O2.preprocess((f)=>Array.isArray(f)?f.filter(($)=>typeof $==="string").map(($)=>$.trim()).filter(Boolean):void 0,O2.array(O2.string()).optional()).transform((f)=>{if(!f)return;let $=[...new Set(f)].sort((J,H)=>J.localeCompare(H));return $.length>0?$:void 0}),N2=O2.object({telemetryOptOut:O2.boolean().default(!1).catch(!1),disabledTools:I3.optional(),disabledPlugins:I3.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 oY,mkdirSync as eY,readFileSync as fB,writeFileSync as $B}from"node:fs";import{resolve as JB}from"node:path";import{resolveSessionDataDir as HB}from"@cline/shared/storage";import{nanoid as WB}from"nanoid";import*as QB from"node-machine-id";function F$(f){let $=f?.trim();if($)return $;let J=PB();if(J)return J;return XB()}function jB(){let f=QB;return f.machineIdSync??f.default?.machineIdSync}function PB(){try{let f=jB();if(!f)return;return f().trim()||void 0}catch{return}}function XB(){let f=HB(),$=JB(f,ZB);try{if(oY($)){let H=fB($,"utf8").trim();if(H.length>0)return H}}catch{}let J=`cl-${WB()}`;try{eY(f,{recursive:!0}),$B($,J,"utf8")}catch{}return J}var ZB="machine-id";var s4=()=>{};class w2{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(VB(P)){W[X]=P;continue}try{W[X]=JSON.stringify(P)}catch{W[X]=String(P)}}return W}}function VB(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}class C2{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 j1{adapters;metadata;distinctId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new C2({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 GH=()=>{};import{metrics as YB,trace as BB}from"@opentelemetry/api";import{logs as AB}from"@opentelemetry/api-logs";import{OTLPLogExporter as RB}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as FB}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as yB}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as KB}from"@opentelemetry/resources";import{BatchLogRecordProcessor as UB,ConsoleLogRecordExporter as GB,LoggerProvider as hB}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as TB,MeterProvider as DB,PeriodicExportingMetricReader as l3}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as MB,ConsoleSpanExporter as _B,SimpleSpanProcessor as LB}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as zB}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as OB,ATTR_SERVICE_VERSION as NB}from"@opentelemetry/semantic-conventions";class p3{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 P1{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let $=KB({[OB]:f.serviceName??"cline",...f.serviceVersion?{[NB]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider($),this.loggerProvider=this.createLoggerProvider($),this.tracerProvider=this.createTracerProvider($),this.meterProvider)YB.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)AB.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",$){return BB.getTracer(f,$??this.options.serviceVersion)}createAdapter(f){return new w2({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let $=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new j1({...f,adapters:[$],distinctId:F$(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 $=hH(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)=>wB(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 DB({resource:f,readers:W})}createTracerProvider(f){let $=hH(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=bB(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 zB({resource:f,spanProcessors:W})}createLoggerProvider(f){let $=hH(this.options.logsExporter);if($.length===0)return null;let J=$.map((H)=>{let W=qB(H,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!W)return null;return new UB(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 hB({resource:f,processors:J})}}function E2(f){let $=new P1(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 y$(f){if(i4())return{telemetry:new p3(f)};if(f.enabled!==!0)return{telemetry:new j1({...f,distinctId:F$(f.distinctId)})};return E2(f)}function X1(f){let{telemetry:$,provider:J}=y$(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 hH(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function qB(f,$){if(f==="console")return new GB;if(!$.endpoint)return null;let J=TH($.endpoint,"/v1/logs");return new RB({url:J,headers:$.headers})}function bB(f,$){if(f==="console")return new LB(new _B);if(!$.endpoint)return null;let J=TH($.endpoint,"/v1/traces");return new MB(new yB({url:J,headers:$.headers}))}function wB(f,$){if(f==="console")return new l3({exporter:new TB,exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout});if(!$.endpoint)return null;let J=TH($.endpoint,"/v1/metrics");return new l3({exporter:new FB({url:J,headers:$.headers}),exportIntervalMillis:$.interval,exportTimeoutMillis:$.timeout})}function TH(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 o4=f1(()=>{F0();s4();GH()});var MQ={};N(MQ,{normalizeUserMessage:()=>SF,buildInitialUserContent:()=>EF});async function EF(f,$,J,H){let W=kF($),Q=await IF(J,H);if(W.length===0&&!Q)return f;let Z=[{type:"text",text:f},...W];if(Q)Z.push(...Q);return Z}function SF(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(`
3
+ `)}function kF(f){if(!f||f.length===0)return[];let $=[];for(let J of f){let H=mF(J);if(H)$.push(H)}return $}function mF(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 IF(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}var fV={};N(fV,{createOpenTelemetryTelemetryService:()=>E2,createConfiguredTelemetryService:()=>y$,createConfiguredTelemetryHandle:()=>X1,OpenTelemetryProvider:()=>P1,OpenTelemetryAdapter:()=>w2});var $V=f1(()=>{o4()});var jV={};N(jV,{writeHubDiscovery:()=>f6,withHubStartupLock:()=>$6,verifyHubConnection:()=>sf,truncateNotificationBody:()=>h4,toHubHealthUrl:()=>LH,stopLocalHubServerGracefully:()=>mH,startHubWebSocketServer:()=>M4,startHubServer:()=>QV,spawnDetachedHubServer:()=>Y1,sendHubCommand:()=>K7,restartLocalHubIfIdleAfterStartupTimeout:()=>W6,resolveWorkspaceHubOwnerContext:()=>Q7,resolveSharedHubOwnerContext:()=>Xf,resolveHubUrl:()=>IH,resolveHubOwnerContext:()=>y0,resolveHubEndpointOptions:()=>tf,resolveHubBuildId:()=>S0,resolveDefaultHubPort:()=>V1,resolveDefaultHubPathname:()=>bH,resolveDefaultHubHost:()=>qH,resolveCompatibleLocalHubUrl:()=>x2,resolveClineDir:()=>$7,resolveClineDataDir:()=>S2,requestHubShutdown:()=>I2,rememberRecoverableLocalHubUrl:()=>k0,readHubDiscovery:()=>Qf,probeHubServer:()=>Pf,probeHubConnection:()=>y7,prewarmDetachedHubServer:()=>J6,normalizeHubWebSocketUrl:()=>m0,isHubReconnectableTransportError:()=>SH,isHubCommandTimeoutError:()=>H6,isDiscoveryFilePresent:()=>H7,ensureHubWebSocketServer:()=>oJ,ensureHubServer:()=>ZV,ensureDetachedHubServer:()=>j7,ensureCompatibleLocalHubUrl:()=>K$,createLocalHubScheduleRuntimeHandlers:()=>WV,createInMemoryHubOwnerContext:()=>J7,createHubServerUrl:()=>cf,createHubAuthToken:()=>e4,createConfiguredTelemetryService:()=>y$,createConfiguredTelemetryHandle:()=>X1,connectToHub:()=>Q6,clearHubDiscovery:()=>zf,NodeHubClient:()=>df,NativeHubTransportAdapter:()=>D4,HubUIClient:()=>gH,HubTransportError:()=>Rf,HubSessionClient:()=>xH,HubServerTransport:()=>B2,HubScheduleService:()=>Q1,HubScheduleCommandService:()=>$1,HubCommandError:()=>B1,DEFAULT_HUB_PORT:()=>OH,DEFAULT_HUB_PATHNAME:()=>NH,DEFAULT_HUB_HOST:()=>zH,BrowserWebSocketHubAdapter:()=>T4});import{createSessionId as VY}from"@cline/shared";function Lf(f,$){return{version:f.version,requestId:f.requestId,ok:!0,payload:$}}function R3(f,$,J){return{version:f.version,requestId:f.requestId??VY("hubreq_"),ok:!1,error:{code:$,message:J}}}class $1{schedules;constructor(f){this.schedules=f}async handleCommand(f){try{switch(f.command){case"schedule.create":return Lf(f,{schedule:this.schedules.createSchedule(this.toCreateInput(f.payload??{}))});case"schedule.list":return Lf(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 Lf(f,{schedule:this.schedules.getSchedule(String(f.payload?.scheduleId??""))});case"schedule.update":return Lf(f,{schedule:this.schedules.updateSchedule(String(f.payload?.scheduleId??""),this.toUpdateInput(f.payload??{}))});case"schedule.delete":return Lf(f,{deleted:this.schedules.deleteSchedule(String(f.payload?.scheduleId??""))});case"schedule.enable":return Lf(f,{schedule:this.schedules.resumeSchedule(String(f.payload?.scheduleId??""))});case"schedule.disable":return Lf(f,{schedule:this.schedules.pauseSchedule(String(f.payload?.scheduleId??""))});case"schedule.trigger":return Lf(f,{execution:await this.schedules.triggerScheduleNow(String(f.payload?.scheduleId??""))});case"schedule.list_executions":return Lf(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 Lf(f,{stats:this.schedules.getScheduleStats(String(f.payload?.scheduleId??""))});case"schedule.active":return Lf(f,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return Lf(f,{runs:this.schedules.getUpcomingRuns(typeof f.payload?.limit==="number"?f.payload.limit:void 0)});default:return R3(f,"unsupported_command",`Unsupported hub schedule command: ${f.command}`)}}catch($){return R3(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:$}}}class y2{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 hY}from"node:path";import{buildClineSystemPrompt as TY}from"@cline/shared";import{nowIso as h3}from"@cline/shared/db";var ff={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"},q0=[ff.READ_FILES,ff.SEARCH_CODEBASE,ff.RUN_COMMANDS,ff.FETCH_WEB_CONTENT,ff.APPLY_PATCH,ff.EDITOR,ff.SKILLS,ff.ASK,ff.SUBMIT_AND_EXIT];var y3={};N(y3,{mergeRulesForSystemPrompt:()=>H1,loadRulesForSystemPromptFromWatcher:()=>jH,listEnabledRulesFromWatcher:()=>F3,isRuleEnabled:()=>O4,formatRulesForSystemPrompt:()=>J1});function O4(f){return f.disabled!==!0}function J1(f){if(f.length===0)return"";return`
4
+
5
+ # Rules
6
+ ${f.map((J)=>`## ${J.name}
7
+ ${J.instructions}`).join(`
8
+
9
+ `)}`}function H1(f,$){let J=f?.trim(),H=$?.trim();if(J&&H)return`${J}
10
+
11
+ ${H}`;return J||H||void 0}function F3(f){return[...f.getSnapshot("rule").values()].map((J)=>J.item).filter(O4).sort((J,H)=>J.name.localeCompare(H.name))}function jH(f){return J1(F3(f))}var G3={};N(G3,{normalizeWorkspacePath:()=>V0,generateWorkspaceInfoWithDiagnostics:()=>K2,generateWorkspaceInfo:()=>W1,buildWorkspaceMetadataWithInfo:()=>PH,buildWorkspaceMetadata:()=>U2});import{basename as YY,resolve as BY}from"node:path";import{performance as K3}from"node:perf_hooks";import{processWorkspaceInfo as U3}from"@cline/shared";import AY from"simple-git";function V0(f){return BY(f)}async function W1(f){return(await K2(f)).info}function N4(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 K2(f){let $=V0(f),J={rootPath:$,hint:YY($)},H;try{let W=AY({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??=N4(Z)}try{let Z=(await W.revparse(["HEAD"])).trim();if(Z.length>0)J.latestGitCommitHash=Z}catch(Z){H??=N4(Z)}try{let Z=(await W.branch()).current.trim();if(Z.length>0)J.latestGitBranchName=Z}catch(Z){H??=N4(Z)}return{info:J,vcsType:"git",error:H}}catch(W){return{info:J,vcsType:"none",error:N4(W)}}}async function U2(f){let $=await W1(f);return U3($)}async function PH(f){let $=K3.now(),J=await K2(f),H=K3.now()-$,W=J.info;return{workspaceInfo:W,workspaceMetadata:U3(W),durationMs:H,vcsType:J.vcsType,initError:J.error}}import{mkdirSync as RY,writeFileSync as FY}from"node:fs";import{join as yY}from"node:path";import{resolveCronReportsDir as KY}from"@cline/shared/storage";function b0(f){if(/[:#\n]/.test(f)||f.includes('"'))return JSON.stringify(f);return f}function V$(f,$){if($===void 0||$===null)return;return`${f}: ${b0($)}`}function UY(f,$,J){let H=[`runId: ${b0(f.runId)}`,`specId: ${b0($.specId)}`,`externalId: ${b0($.externalId)}`,`title: ${b0($.title)}`,`triggerKind: ${b0(f.triggerKind)}`,`status: ${b0(f.status)}`,`sourcePath: ${b0($.sourcePath)}`],W=[V$("sessionId",f.sessionId),V$("startedAt",f.startedAt),V$("completedAt",f.completedAt),V$("triggerEventId",f.triggerEventId),V$("triggerEventType",J?.eventType),V$("triggerEventSource",J?.source),V$("triggerEventSubject",J?.subject)];for(let Q of W)if(Q)H.push(Q);return`---
12
+ ${H.join(`
13
+ `)}
14
+ ---
15
+ `}function GY(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
16
+
17
+ ${H.join(`
18
+ `)}
19
+ `)}if(f.error)$.push(`## Error
20
+
21
+ ${f.error}
22
+ `);if(f.finalText&&f.finalText.trim().length>0)$.push(`## Summary
23
+
24
+ ${f.finalText.trim()}
25
+ `);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
26
+
27
+ ${H.join(`
28
+ `)}
29
+ `)}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
30
+
31
+ ${J.join(`
32
+ `)}
33
+ `)}return $.join(`
34
+ `)}function XH(f){let $=KY(f.specs);RY($,{recursive:!0});let J=yY($,`${f.run.runId}.md`),H=`${UY(f.run,f.spec,f.data.triggerEvent)}
35
+ ${GY(f.data)}`;return FY(J,H,"utf8"),J}class VH{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 DY=15000,MY=90,T3=["rules","skills","plugins"];function _Y(f,$){return new Set(f.extensions??T3).has($)}function LY(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[ff.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function zY(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(`
36
+ `)}class YH extends Error{constructor(f){super(f);this.name="TimeoutError"}}async function OY(f,$){if($<=0)return f;let J,H=new Promise((W,Q)=>{J=setTimeout(()=>{Q(new YH("cron run timed out"))},$)});try{return await Promise.race([f,H])}finally{if(J)clearTimeout(J)}}class G2{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 VH(f.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,(f.claimLeaseSeconds??MY)*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??DY);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:h3(),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 OY(A,R)).result,F=Date.now(),K=XH({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,h3())}catch(V){let Y=V instanceof YH;if(Z&&Y)try{await this.options.runtimeHandlers.abortSession(Z)}catch{}let B=V instanceof Error?V.message:String(V),A=Date.now(),R=XH({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}
37
+
38
+ Trigger event:
39
+ ${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=zY(f.notesDirectory),Q=H1(void 0,W),Z=await U2($),j=TY({ide:"Cline Cron",workspaceRoot:$,workspaceName:hY($),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?H1(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:LY(f,Z),configExtensions:T3.filter((j)=>_Y(f,j))}}}function h2(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 NY=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],M3=["sun","mon","tue","wed","thu","fri","sat"];function T2(f,$,J){let H=f[$];if(typeof H!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${$+1}`);return H}function BH(f,$){let J=f[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${$}`);return J}function AH(f){let $=f.trim().split(/\s+/);if($.length!==5)throw Error(`Invalid cron pattern "${f}": expected 5 fields, got ${$.length}`);return{minutes:h2(T2($,0,f),0,59),hours:h2(T2($,1,f),0,23),daysOfMonth:h2(T2($,2,f),1,31),months:h2(T2($,3,f),1,12,NY),daysOfWeek:h2(T2($,4,f),0,6,M3)}}function RH(f){AH(f)}function _3(f,$,J=Date.now()){Y$(f,J,$)}var D3=new Map,qY=new Map(M3.map((f,$)=>[f,$]));function L3(f){let $=f?.trim();return $?$:void 0}function z3(f){let $=D3.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 D3.set(f,J),J}function bY(f){let $=L3(f);if(!$)return;z3($).format(new Date)}function wY(f,$){let J=z3($).formatToParts(new Date(f)),H=new Map(J.map((Z)=>[Z.type,Z.value])),W=H.get("weekday")?.toLowerCase().slice(0,3)??"",Q=qY.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 CY(f){let $=new Date(f);return{month:$.getMonth()+1,dayOfMonth:$.getDate(),dayOfWeek:$.getDay(),hour:$.getHours(),minute:$.getMinutes()}}function EY(f,$){return f.months.includes($.month)&&f.daysOfMonth.includes($.dayOfMonth)&&f.daysOfWeek.includes($.dayOfWeek)&&f.hours.includes($.hour)&&f.minutes.includes($.minute)}function SY(f,$,J){let H=AH(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(EY(H,wY(Q,J)))return Q;Q+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${f}" in timezone "${J}"`)}function Y$(f,$,J){let H=L3(J);if(H)return bY(H),SY(f,$,H);let W=AH(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}=CY(Q.getTime());if(!W.months.includes(j)){let B=W.months.find((R)=>R>j)??BH(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)??BH(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)??BH(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{randomUUID as D2}from"node:crypto";import{asOptionalString as S,asString as i,loadSqliteDb as mY,nowIso as jf}from"@cline/shared/db";import{resolveCronDbPath as IY}from"@cline/shared/storage";var kY=[`CREATE TABLE IF NOT EXISTS cron_specs (
40
+ spec_id TEXT PRIMARY KEY,
41
+ external_id TEXT NOT NULL,
42
+ source_path TEXT NOT NULL UNIQUE,
43
+ trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event')),
44
+ source_mtime_ms INTEGER,
45
+ source_hash TEXT,
46
+ parse_status TEXT NOT NULL CHECK (parse_status IN ('valid', 'invalid')),
47
+ parse_error TEXT,
48
+ enabled INTEGER NOT NULL DEFAULT 1,
49
+ removed INTEGER NOT NULL DEFAULT 0,
50
+ title TEXT NOT NULL,
51
+ prompt TEXT,
52
+ workspace_root TEXT,
53
+ schedule_expr TEXT,
54
+ timezone TEXT,
55
+ event_type TEXT,
56
+ filters_json TEXT,
57
+ debounce_seconds INTEGER,
58
+ dedupe_window_seconds INTEGER,
59
+ cooldown_seconds INTEGER,
60
+ mode TEXT,
61
+ system_prompt TEXT,
62
+ provider_id TEXT,
63
+ model_id TEXT,
64
+ max_iterations INTEGER,
65
+ timeout_seconds INTEGER,
66
+ max_parallel INTEGER,
67
+ tools_json TEXT,
68
+ notes_directory TEXT,
69
+ extensions_json TEXT,
70
+ source TEXT,
71
+ tags_json TEXT,
72
+ metadata_json TEXT,
73
+ revision INTEGER NOT NULL DEFAULT 1,
74
+ last_materialized_run_id TEXT,
75
+ last_run_at TEXT,
76
+ next_run_at TEXT,
77
+ created_at TEXT NOT NULL,
78
+ updated_at TEXT NOT NULL
79
+ );`,`CREATE TABLE IF NOT EXISTS cron_runs (
80
+ run_id TEXT PRIMARY KEY,
81
+ spec_id TEXT NOT NULL REFERENCES cron_specs(spec_id) ON DELETE CASCADE,
82
+ spec_revision INTEGER NOT NULL,
83
+ trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event', 'manual', 'retry')),
84
+ status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'done', 'failed', 'cancelled')),
85
+ claim_token TEXT,
86
+ claim_started_at TEXT,
87
+ claim_until_at TEXT,
88
+ scheduled_for TEXT,
89
+ trigger_event_id TEXT,
90
+ started_at TEXT,
91
+ completed_at TEXT,
92
+ session_id TEXT,
93
+ report_path TEXT,
94
+ error TEXT,
95
+ attempt_count INTEGER NOT NULL DEFAULT 0,
96
+ created_at TEXT NOT NULL,
97
+ updated_at TEXT NOT NULL
98
+ );`,`CREATE TABLE IF NOT EXISTS cron_event_log (
99
+ event_id TEXT PRIMARY KEY,
100
+ event_type TEXT NOT NULL,
101
+ source TEXT NOT NULL,
102
+ subject TEXT,
103
+ occurred_at TEXT NOT NULL,
104
+ received_at TEXT NOT NULL,
105
+ workspace_root TEXT,
106
+ dedupe_key TEXT,
107
+ payload_json TEXT,
108
+ attributes_json TEXT,
109
+ processing_status TEXT NOT NULL DEFAULT 'received'
110
+ CHECK (processing_status IN ('received', 'unmatched', 'queued', 'suppressed', 'failed')),
111
+ matched_spec_count INTEGER NOT NULL DEFAULT 0,
112
+ queued_run_count INTEGER NOT NULL DEFAULT 0,
113
+ suppressed_count INTEGER NOT NULL DEFAULT 0,
114
+ error TEXT,
115
+ created_at TEXT NOT NULL,
116
+ updated_at TEXT NOT NULL
117
+ );`,"DROP INDEX IF EXISTS cron_runs_one_off_active_idx;",`CREATE UNIQUE INDEX IF NOT EXISTS cron_runs_one_off_active_idx
118
+ ON cron_runs(spec_id, spec_revision)
119
+ WHERE trigger_kind = 'one_off';`,`CREATE INDEX IF NOT EXISTS cron_runs_claimable_idx
120
+ ON cron_runs(status, scheduled_for, claim_until_at);`,`CREATE INDEX IF NOT EXISTS cron_runs_spec_idx
121
+ ON cron_runs(spec_id, created_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_runs_trigger_event_idx
122
+ ON cron_runs(trigger_event_id);`,`CREATE INDEX IF NOT EXISTS cron_runs_event_spec_status_idx
123
+ ON cron_runs(spec_id, trigger_kind, status, scheduled_for);`,`CREATE INDEX IF NOT EXISTS cron_event_log_type_idx
124
+ ON cron_event_log(event_type, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_received_idx
125
+ ON cron_event_log(received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_dedupe_idx
126
+ ON cron_event_log(event_type, source, dedupe_key, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_next_run_idx
127
+ ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
128
+ ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
129
+ ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
130
+ ON cron_specs(source_path);`];function O3(f){f.exec("PRAGMA journal_mode = WAL;"),f.exec("PRAGMA busy_timeout = 5000;"),f.exec("PRAGMA foreign_keys = ON;");for(let $ of kY)f.exec($)}function q4(f){if(!f)return;try{let $=JSON.parse(f);if($&&typeof $==="object"&&!Array.isArray($))return $}catch{}return}function FH(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 B$(f){if(typeof f==="number"&&Number.isFinite(f))return f;if(typeof f==="bigint")return Number(f);return}function w0(f){return{specId:i(f.spec_id),externalId:i(f.external_id),sourcePath:i(f.source_path),triggerKind:i(f.trigger_kind),sourceMtimeMs:B$(f.source_mtime_ms),sourceHash:S(f.source_hash),parseStatus:i(f.parse_status)==="invalid"?"invalid":"valid",parseError:S(f.parse_error),enabled:Number(f.enabled??0)===1,removed:Number(f.removed??0)===1,title:i(f.title),prompt:S(f.prompt),workspaceRoot:S(f.workspace_root),scheduleExpr:S(f.schedule_expr),timezone:S(f.timezone),eventType:S(f.event_type),filters:q4(S(f.filters_json)),debounceSeconds:B$(f.debounce_seconds),dedupeWindowSeconds:B$(f.dedupe_window_seconds),cooldownSeconds:B$(f.cooldown_seconds),mode:S(f.mode),systemPrompt:S(f.system_prompt),providerId:S(f.provider_id),modelId:S(f.model_id),maxIterations:B$(f.max_iterations),timeoutSeconds:B$(f.timeout_seconds),maxParallel:B$(f.max_parallel),tools:FH(S(f.tools_json),{preserveEmpty:!0}),notesDirectory:S(f.notes_directory),extensions:FH(S(f.extensions_json),{preserveEmpty:!0}),source:S(f.source),tags:FH(S(f.tags_json)),metadata:q4(S(f.metadata_json)),revision:Number(f.revision??1),lastMaterializedRunId:S(f.last_materialized_run_id),lastRunAt:S(f.last_run_at),nextRunAt:S(f.next_run_at),createdAt:i(f.created_at),updatedAt:i(f.updated_at)}}function yH(f){return{runId:i(f.run_id),specId:i(f.spec_id),specRevision:Number(f.spec_revision??1),triggerKind:i(f.trigger_kind),status:i(f.status),claimToken:S(f.claim_token),claimStartedAt:S(f.claim_started_at),claimUntilAt:S(f.claim_until_at),scheduledFor:S(f.scheduled_for),triggerEventId:S(f.trigger_event_id),startedAt:S(f.started_at),completedAt:S(f.completed_at),sessionId:S(f.session_id),reportPath:S(f.report_path),error:S(f.error),attemptCount:Number(f.attempt_count??0),createdAt:i(f.created_at),updatedAt:i(f.updated_at)}}function N3(f){return{eventId:i(f.event_id),eventType:i(f.event_type),source:i(f.source),subject:S(f.subject),occurredAt:i(f.occurred_at),receivedAt:i(f.received_at),workspaceRoot:S(f.workspace_root),dedupeKey:S(f.dedupe_key),payload:q4(S(f.payload_json)),attributes:q4(S(f.attributes_json)),processingStatus:i(f.processing_status),matchedSpecCount:Number(f.matched_spec_count??0),queuedRunCount:Number(f.queued_run_count??0),suppressedCount:Number(f.suppressed_count??0),error:S(f.error),createdAt:i(f.created_at),updatedAt:i(f.updated_at)}}function q3(f){return f?JSON.stringify(f):null}var xY=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function b3(f){if(f===void 0)return null;if(f&&typeof f==="object")return JSON.stringify(f);return f}function gY(f,$,J,H){for(let W of xY){let Q=f[W],Z=$[W];if(b3(Q)!==b3(Z))return!0}if(J===!1&&H===!0)return!0;return!1}function vY(f){return(f.split("/").pop()??f).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function uY(f){return`hub/schedules/${f}.cron.md`}function cY(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 KH(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:cY(f)}}function w3(f){return JSON.stringify(KH(f))}function dY(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 M2{db;constructor(f={}){let $=f.dbPath??IY();this.db=mY($),O3(this.db)}close(){this.db.close?.()}getSpecBySourcePath(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get(f);return $?w0($):void 0}getSpec(f){let $=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get(f);return $?w0($):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 $?w0($):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)=>w0(Z))}createHubSchedule(f){let $=`sched_${D2()}`,J=this.upsertSpec({externalId:$,sourcePath:uY($),triggerKind:"schedule",sourceHash:w3(f),parseStatus:"valid",spec:KH(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
131
+ WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
132
+ ORDER BY created_at ASC LIMIT 1`).get(f);return $?w0($):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
133
+ WHERE ${$.join(" AND ")}
134
+ ORDER BY created_at DESC LIMIT ?`).all(...J,H).map((Q)=>w0(Q))}updateHubSchedule(f,$){let J=this.getHubSchedule(f);if(!J)return;let H=dY(J,$),W=this.upsertSpec({externalId:f,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:w3(H),parseStatus:"valid",spec:KH(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:jf()})}listEventSpecsForType(f){return this.db.prepare(`SELECT * FROM cron_specs
135
+ WHERE trigger_kind = 'event'
136
+ AND event_type = ?
137
+ AND enabled = 1
138
+ AND removed = 0
139
+ AND parse_status = 'valid'
140
+ ORDER BY created_at ASC`).all(f).map((J)=>w0(J))}upsertSpec(f){let $=jf(),J=this.getSpecBySourcePath(f.sourcePath),H=f.spec,W={title:H?.title??J?.title??vY(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_${D2()}`;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&&gY(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 (
141
+ spec_id, external_id, source_path, trigger_kind,
142
+ source_mtime_ms, source_hash, parse_status, parse_error,
143
+ enabled, removed, title, prompt, workspace_root,
144
+ schedule_expr, timezone, event_type, filters_json,
145
+ debounce_seconds, dedupe_window_seconds, cooldown_seconds,
146
+ mode, system_prompt, provider_id, model_id,
147
+ max_iterations, timeout_seconds, max_parallel,
148
+ tools_json, notes_directory, extensions_json, source,
149
+ tags_json, metadata_json, revision,
150
+ created_at, updated_at
151
+ ) 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
152
+ external_id = ?, trigger_kind = ?,
153
+ source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
154
+ enabled = ?, removed = 0, title = ?, prompt = ?,
155
+ workspace_root = ?, schedule_expr = ?, timezone = ?,
156
+ event_type = ?, filters_json = ?,
157
+ debounce_seconds = ?, dedupe_window_seconds = ?, cooldown_seconds = ?,
158
+ mode = ?, system_prompt = ?, provider_id = ?, model_id = ?,
159
+ max_iterations = ?, timeout_seconds = ?, max_parallel = ?,
160
+ tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
161
+ tags_json = ?, metadata_json = ?,
162
+ revision = ?, updated_at = ?
163
+ 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(jf(),f)}updateSpecNextRunAt(f,$){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run($??null,jf(),f)}updateSpecLastRunAt(f,$){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run($,jf(),f)}updateLastMaterializedRunId(f,$){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run($,jf(),f)}initializeScheduleNextRun(f){let $=this.getSpec(f);if(!$||$.triggerKind!=="schedule"||!$.enabled||!$.scheduleExpr){this.updateSpecNextRunAt(f,void 0);return}let J=new Date(Y$($.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=w0(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(Y$(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_${D2()}`,j;try{j=new Date(Y$(W.scheduleExpr,$,W.timezone)).toISOString()}catch{j=void 0}return this.db.prepare(`INSERT INTO cron_runs (
164
+ run_id, spec_id, spec_revision, trigger_kind, status,
165
+ scheduled_for, trigger_event_id, attempt_count,
166
+ created_at, updated_at
167
+ ) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(Z,W.specId,W.revision,"schedule","queued",Q,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
168
+ last_materialized_run_id = ?,
169
+ last_run_at = ?,
170
+ next_run_at = ?,
171
+ updated_at = ?
172
+ 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 $?yH($):void 0}insertEventLog(f,$={}){let J=jf(),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 (
173
+ event_id, event_type, source, subject,
174
+ occurred_at, received_at, workspace_root, dedupe_key,
175
+ payload_json, attributes_json, processing_status,
176
+ matched_spec_count, queued_run_count, suppressed_count,
177
+ error, created_at, updated_at
178
+ ) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(W,Q,Z,f.subject?.trim()||null,j,H,f.workspaceRoot?.trim()||null,f.dedupeKey?.trim()||null,q3(f.payload),q3(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 $?N3($):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}
179
+ ORDER BY received_at DESC, created_at DESC
180
+ LIMIT ?`).all(...J,W).map((Z)=>N3(Z))}updateEventLogProcessing(f,$){return(this.db.prepare(`UPDATE cron_event_log SET
181
+ processing_status = ?,
182
+ matched_spec_count = COALESCE(?, matched_spec_count),
183
+ queued_run_count = COALESCE(?, queued_run_count),
184
+ suppressed_count = COALESCE(?, suppressed_count),
185
+ error = ?,
186
+ updated_at = ?
187
+ WHERE event_id = ?`).run($.status,$.matchedSpecCount??null,$.queuedRunCount??null,$.suppressedCount??null,$.error??null,jf(),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)=>yH(Z))}hasRecentEventRunForDedupe(f){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
188
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
189
+ WHERE r.spec_id = ?
190
+ AND r.trigger_kind = 'event'
191
+ AND e.dedupe_key = ?
192
+ AND e.received_at >= ?
193
+ LIMIT 1`).get(f.specId,f.dedupeKey,f.sinceIso)}hasRecentEventRunForSpec(f){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
194
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
195
+ WHERE r.spec_id = ?
196
+ AND r.trigger_kind = 'event'
197
+ AND e.received_at >= ?
198
+ LIMIT 1`).get(f.specId,f.sinceIso)}findQueuedEventRunForDedupe(f){let $=this.db.prepare(`SELECT r.* FROM cron_runs r
199
+ INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
200
+ WHERE r.spec_id = ?
201
+ AND r.trigger_kind = 'event'
202
+ AND r.status = 'queued'
203
+ AND e.dedupe_key = ?
204
+ ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
205
+ LIMIT 1`).get(f.specId,f.dedupeKey);return $?yH($):void 0}updateQueuedEventRunForDebounce(f){let $=jf();if((this.db.prepare(`UPDATE cron_runs SET
206
+ trigger_event_id = ?,
207
+ scheduled_for = ?,
208
+ updated_at = ?
209
+ WHERE run_id = ?
210
+ AND trigger_kind = 'event'
211
+ 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
212
+ WHERE spec_id = ? AND spec_revision = ?
213
+ AND trigger_kind = 'one_off'
214
+ LIMIT 1`).get(f,$)}enqueueRun(f){let $=`crun_${D2()}`,J=jf();this.db.prepare(`INSERT INTO cron_runs (
215
+ run_id, spec_id, spec_revision, trigger_kind, status,
216
+ scheduled_for, trigger_event_id, attempt_count,
217
+ created_at, updated_at
218
+ ) 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 = ?
219
+ WHERE spec_id = ? AND status = 'queued'`).run(jf(),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
220
+ WHERE (
221
+ status = 'queued'
222
+ OR (
223
+ status = 'running'
224
+ AND claim_until_at IS NOT NULL
225
+ AND claim_until_at <= ?
226
+ AND completed_at IS NULL
227
+ )
228
+ )
229
+ AND (scheduled_for IS NULL OR scheduled_for <= ?)
230
+ ORDER BY COALESCE(scheduled_for, created_at) ASC
231
+ LIMIT ?`).all($,$,W);for(let j of Z){let P=i(j.run_id);if(!P)continue;let X=`cclaim_${D2()}`;if((this.db.prepare(`UPDATE cron_runs SET
232
+ status = 'running',
233
+ claim_token = ?,
234
+ claim_started_at = ?,
235
+ claim_until_at = ?,
236
+ started_at = ?,
237
+ completed_at = NULL,
238
+ session_id = NULL,
239
+ report_path = NULL,
240
+ error = NULL,
241
+ attempt_count = attempt_count + 1,
242
+ updated_at = ?
243
+ WHERE run_id = ?
244
+ AND (
245
+ status = 'queued'
246
+ OR (
247
+ status = 'running'
248
+ AND claim_until_at IS NOT NULL
249
+ AND claim_until_at <= ?
250
+ AND completed_at IS NULL
251
+ )
252
+ )`).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 = ?
253
+ WHERE run_id = ? AND claim_token = ?`).run(J,jf(),f,$).changes??0)===1}completeRun(f,$){let J=$.completedAtIso??jf(),H=$.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
254
+ status = ?,
255
+ session_id = COALESCE(?, session_id),
256
+ report_path = COALESCE(?, report_path),
257
+ error = ?,
258
+ completed_at = ?,
259
+ claim_started_at = NULL,
260
+ claim_token = NULL,
261
+ claim_until_at = NULL,
262
+ updated_at = ?
263
+ ${H}`).run($.status,$.sessionId??null,$.reportPath??null,$.error??null,J,J,f,...$.claimToken?[$.claimToken]:[]).changes??0)>0}requeueRun(f){let $=jf();return(this.db.prepare(`UPDATE cron_runs SET
264
+ status = 'queued',
265
+ claim_started_at = NULL,
266
+ claim_token = NULL,
267
+ claim_until_at = NULL,
268
+ started_at = NULL,
269
+ completed_at = NULL,
270
+ session_id = NULL,
271
+ report_path = NULL,
272
+ error = ?,
273
+ scheduled_for = COALESCE(?, scheduled_for),
274
+ updated_at = ?
275
+ 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($,jf(),f)}attachReportPathToRun(f,$){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run($,jf(),f)}}function w4(f){return f?new Date(f).getTime():void 0}function rY(f){let $=f.metadata?{...f.metadata}:void 0;if($)delete $.__hubScheduleCreatedBy,delete $.__hubScheduleCwd,delete $.__hubRuntimeOptions;return $}function b4(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:w4(f.nextRunAt),lastRunAt:w4(f.lastRunAt),createdBy:typeof $?.__hubScheduleCreatedBy==="string"?$.__hubScheduleCreatedBy:void 0,tags:f.tags,runtimeOptions:$?.__hubRuntimeOptions&&typeof $.__hubRuntimeOptions==="object"&&!Array.isArray($.__hubRuntimeOptions)?$.__hubRuntimeOptions:void 0,metadata:rY(f)}}function lY(f){switch(f){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function C3(f,$){return{executionId:f.runId,scheduleId:$,sessionId:f.sessionId,triggeredAt:new Date(f.scheduledFor??f.createdAt).getTime(),startedAt:w4(f.startedAt),endedAt:w4(f.completedAt),status:lY(f.status),errorMessage:f.error}}class Q1{store;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new M2({dbPath:f.dbPath}),this.materializer=new y2({store:this.store}),this.runner=new G2({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(RH(f.cronPattern),!f.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return b4(this.store.createHubSchedule(f))}getSchedule(f){let $=this.store.getHubSchedule(f);return $?b4($):void 0}listSchedules(f={}){return this.store.listHubSchedules(f).map(($)=>b4($))}updateSchedule(f,$){if($.cronPattern!==void 0)RH($.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?b4(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 C3(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 C3(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}))}}o4();import{createSessionId as GA,resolveHubCommandTimeoutMs as hA}from"@cline/shared";import{spawn as eB}from"node:child_process";import{closeSync as fA,mkdirSync as $A,openSync as JA}from"node:fs";import{basename as HA,dirname as WA,join as QA}from"node:path";import{fileURLToPath as ZA}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as jA,isHubDaemonProcess as Z7,withResolvedClineBuildEnv as PA}from"@cline/shared";import{createHash as CB,randomBytes as EB}from"node:crypto";import{existsSync as SB}from"node:fs";import{chmod as kB,mkdir as DH,readFile as o3,rm as MH,writeFile as e3}from"node:fs/promises";import{dirname as f7,join as _H}from"node:path";import{resolveClineDataDir as S2,resolveClineDir as $7}from"@cline/shared/storage";var n3="0.0.38-nightly.1778113663";var a3={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:n3,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 mB="CLINE_HUB_DISCOVERY_PATH",IB="CLINE_HUB_BUILD_ID",t3=30000,xB=15000,gB=100;function vB(f){return f.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function uB(f){return CB("sha256").update(f).digest("hex").slice(0,12)}function cB(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 e4(){return EB(32).toString("hex")}function dB(f){return new Promise(($)=>setTimeout($,f))}function rB(f){return`${f}.lock`}async function lB(f){try{let $=JSON.parse(await o3(_H(f,"owner.json"),"utf8"));if(typeof $.pid!=="number"||typeof $.acquiredAt!=="string")return;return{pid:$.pid,acquiredAt:$.acquiredAt}}catch{return}}async function s3(f){await MH(f,{recursive:!0,force:!0}).catch(()=>{return})}function S0(){return process.env[IB]?.trim()||String(a3.version)}function y0(f=process.argv[1]?.trim()||process.cwd()){let $=`hub-${uB(f)}`,J=process.env[mB]?.trim()||_H(S2(),"locks","hub","owners",`${vB($)}.json`);return{ownerId:$,discoveryPath:J}}function J7(f=`hub-${Date.now().toString(36)}`){return y0(f)}async function Qf(f){try{let $=JSON.parse(await o3(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 f6(f,$){await DH(f7(f),{recursive:!0}),await MH(f,{force:!0}).catch(()=>{return}),await e3(f,`${JSON.stringify($,null,2)}
276
+ `,{encoding:"utf8",mode:384}),await kB(f,384)}async function zf(f){await MH(f,{force:!0}).catch(()=>{return})}async function $6(f,$){let J=rB(f);await DH(f7(J),{recursive:!0});let H=Date.now()+xB;while(!0)try{await DH(J,{recursive:!1}),await e3(_H(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
277
+ `,"utf8");try{return await $()}finally{await s3(J)}}catch(W){if((W instanceof Error&&"code"in W?String(W.code):"")!=="EEXIST")throw W;let Z=await lB(J),j=Z?Date.now()-Date.parse(Z.acquiredAt):t3+1;if(!Z||!cB(Z.pid)||j>t3){await s3(J);continue}if(Date.now()>=H)throw Error(`Timed out waiting for hub startup lock ${J}`);await dB(gB)}}async function Pf(f){try{let $=await fetch(LH(f));if(!$.ok)return;return await $.json()}catch{return}}function cf(f,$,J="/hub"){return new URL(`ws://${f}:${$}${J}`).toString()}function LH(f){let $=new URL(f);return $.protocol=$.protocol==="wss:"?"https:":"http:",$.pathname="/health",$.search="",$.toString()}function H7(f){return SB(f)}import{CLINE_HUB_DEV_PORT as pB,CLINE_HUB_PORT as iB,resolveClineBuildEnv as nB}from"@cline/shared";var aB="CLINE_HUB_HOST",tB="CLINE_HUB_PORT",sB="CLINE_HUB_PATHNAME",zH="127.0.0.1",OH=iB,NH="/hub";function W7(f){return nB(f)==="development"?pB:OH}function qH(f={}){return(f.env??process.env)[aB]?.trim()||zH}function V1(f={}){let J=(f.env??process.env)[tB]?.trim();if(!J)return W7(f);let H=Number.parseInt(J,10);if(!Number.isInteger(H)||H<1||H>65535)return W7(f);return H}function bH(f={}){return(f.env??process.env)[sB]?.trim()||NH}function tf(f={},$={}){return{host:f.host??qH($),port:f.port??V1($),pathname:f.pathname??bH($)}}var oB="shared:cline";function Q7(f){let $=V0(f.trim());return y0(`workspace:${$||f.trim()}`)}function Xf(f=oB){return y0(f)}var XA=8000,VA=200,YA=3000,BA=100,AA="--cline-hub-daemon";function RA(f){return[...f.host?["--host",f.host]:[],...typeof f.port==="number"?["--port",String(f.port)]:[],...f.pathname?["--pathname",f.pathname]:[]]}function FA(){try{let f=QA(S2(),"logs","hub-daemon.log");return $A(WA(f),{recursive:!0}),{fd:JA(f,"a"),logPath:f}}catch{return}}function k2(f){let $=f.buildId?.trim();return!!$&&$===S0()}async function yA(f,$){let J=Date.now()+$;while(Date.now()<J){if(!(await Pf(f).catch(()=>{return}))?.url)return!0;await new Promise((W)=>setTimeout(W,BA))}return!1}async function m2(f,$){if(k2(f))return;if(await I2(f.url,f.authToken).catch(()=>!1),f.pid)try{process.kill(f.pid,"SIGTERM")}catch{}await yA(f.url,YA),await zf($).catch(()=>{return})}function KA(){let f=import.meta.url.endsWith(".ts")?"ts":"js";return ZA(new URL(`./entry.${f}`,import.meta.url))}function UA(f,$){let J=KA(),H=process.execPath?.trim();if(!H)throw Error("unable to resolve runtime executable for hub daemon");let W=HA(H).toLowerCase().includes("bun"),Q=J.startsWith("/$bunfs/"),Z=W&&J.toLowerCase().endsWith(".ts"),j=Q?[AA]:[...Z?["--conditions=development"]:[],J];return{launcher:H,args:[...j,"--cwd",f,...RA($)],cwd:f,env:{...PA(process.env),CLINE_NO_INTERACTIVE:"1",[jA]:"1"}}}function Y1(f,$={}){if(Z7())return;let J=UA(f,$),H=FA();try{eB(J.launcher,J.args,{detached:!0,stdio:H?["ignore",H.fd,H.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(H)fA(H.fd)}}function J6(f,$={}){if(Z7())return;let J=Xf(),H=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=tf($),Q=cf(W.host,W.port,W.pathname);Qf(J.discoveryPath).then(async(Z)=>{if(Z?.url){let V=await Pf(Z.url);if(V?.url&&k2(V)&&await sf(V.url,{authToken:Z.authToken}))return;if(V?.url)await m2({...V,authToken:Z.authToken},J.discoveryPath);else await zf(J.discoveryPath).catch(()=>{return})}let j=await Pf(Q);if(j?.url)await m2(j,J.discoveryPath);let X=!H&&W.port!==0?{...W,port:0}:W;Y1(f,X)}).catch(()=>{})}async function j7(f,$={}){let J=Xf(),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=tf($),Z=cf(Q.host,Q.port,Q.pathname),j=(A)=>{if(!H)k0(A.url,A.authToken);return A},P=await Qf(J.discoveryPath);if(P?.url){let A=await Pf(P.url);if(A?.url&&k2(A)&&await sf(A.url,{authToken:P.authToken}))return j({url:A.url,authToken:P.authToken});if(A?.url)await m2({...A,authToken:P.authToken},J.discoveryPath);else await zf(J.discoveryPath).catch(()=>{return})}let X=await Pf(Z);if(X?.url)await m2(X,J.discoveryPath);let Y=!W&&Q.port!==0?{...Q,port:0}:Q;Y1(f,Y);let B=Date.now()+XA;while(Date.now()<B){let A=await Qf(J.discoveryPath);if(A?.url){let U=await Pf(A.url);if(U?.url&&k2(U)&&await sf(U.url,{authToken:A.authToken}))return j({url:U.url,authToken:A.authToken})}let R=await Pf(Z);if(R?.url&&!k2(R))await m2(R,J.discoveryPath);await new Promise((U)=>setTimeout(U,VA))}throw Error("Timed out waiting for detached hub startup.")}function TA(){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 B7(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 B7(f.data);return String(f)}function DA(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 P7(f){let $=f,J=DA($.reason);return new Rf("hub_connection_closed",$.code||J?`Hub connection closed (code=${$.code??0}${J?`, reason=${J}`:""})`:wH,{closeCode:$.code,closeReason:J||void 0})}function MA(f,$){if(f instanceof Rf)return f;if(f instanceof Error)return new Rf("hub_connect_failed",f.message);if(f&&typeof f==="object"&&"error"in f&&f.error instanceof Error)return new Rf("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 Rf("hub_connect_failed",J);let H=f&&typeof f==="object"&&"type"in f&&typeof f.type==="string"?f.type.trim():"";return new Rf("hub_connect_failed",H?`Failed to connect to hub at ${$.toString()} (${H} event before socket open).`:`Failed to connect to hub at ${$.toString()}.`)}var _A=8000,LA=200,X7="*",V7=8000,zA="cline-hub-auth.",A7=new Map,R7=new Set,OA=3000,NA=3000,qA=100,wH="Hub connection closed",bA=250,wA=5000,Y7=0.5;class Rf extends Error{code;details;constructor(f,$,J){super($);this.code=f;this.details=J;this.name="HubTransportError"}}function SH(f){return f instanceof Rf}class B1 extends Error{command;code;constructor(f,$,J){super(J);this.command=f;this.code=$;this.name="HubCommandError"}}function H6(f,$){return f instanceof B1&&f.code==="hub_command_timeout"&&($===void 0||f.command===$)}function F7(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=kH(f.toString());return J?A7.get(J):void 0}function CA(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 kH(f){if(!CA(f))return;let $=new URL(m0(f));return $.search="",$.hash="",$.toString()}function CH(f){let $=kH(f);return!!$&&R7.has($)}function k0(f,$){let J=kH(f);if(J){if(R7.add(J),$?.trim())A7.set(J,$)}return f}class df{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new Rf("hub_connection_closed",wH);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()||F7(f);f.hash="";let H=new(TA())(f.toString(),$?[`${zA}${$}`]: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 Rf("hub_connect_timeout",`Timed out connecting to hub after ${V7}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{H.close()}catch{}Z(this.lastCloseError)},V7);H.addEventListener("open",()=>{if(j)return;j=!0,clearTimeout(P),Q()}),H.addEventListener("error",(X)=>{if(j)return;j=!0,clearTimeout(P),this.lastCloseError=MA(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=P7(X),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,Z(this.lastCloseError)})}),H.addEventListener("message",(Q)=>{this.handleFrame(JSON.parse(B7(Q)))}),H.addEventListener("close",(Q)=>{if(this.socket!==H)return;if(!W)this.lastCloseError=P7(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=GA("hubreq_"),Q=hA(f,H?.timeoutMs),Z=new Promise((P,X)=>{let V=Q===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(W))return;X(new B1(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 B1(f,j.error?.code,j.error?.message??`Hub command ${f} failed`);return j}async recoverLocalHubTransport(f){if(!CH(this.currentUrl)||!SH(f))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let $=await K$({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(bA*2**this.reconnectAttempt,wA),$=Math.round(f*(1-Y7)+Math.random()*f*Y7);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(!CH(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let f=await K$({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 Rf("hub_connection_closed",wH),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 Rf("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??X7}subscriptionSessionIdFromKey(f){return f===X7?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 m0(f){let $=new URL(f);if($.protocol==="http:")$.protocol="ws:";else if($.protocol==="https:")$.protocol="wss:";return $.toString()}async function sf(f,$){let J=new df({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 EH(f,$){let J=m0(f),H=await Pf(J);if(!H)return{status:"unreachable",url:J};let W=S0(),Q=H.buildId?.trim();if(!Q||Q!==W)return{status:"build_mismatch",url:J};if($?.verifyConnection===!0&&!await sf(J,{workspaceRoot:$.workspaceRoot,cwd:$.cwd,authToken:$.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function EA(f){let $=Date.now()+_A;while(Date.now()<$){let J=await Qf(f.discoveryPath);if(J?.url){let H=await EH(J.url,{verifyConnection:!0,authToken:J.authToken});if(H.status==="compatible")return k0(H.url,J.authToken)}await new Promise((H)=>setTimeout(H,LA))}return}async function SA(f){let $=Date.now()+NA;while(Date.now()<$){if(!(await Pf(f).catch(()=>{return}))?.url)return!0;await new Promise((H)=>setTimeout(H,qA))}return!1}function kA(f,$){try{return m0(f)===m0($)}catch{return!1}}function mA(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 IA(f,$,J){let H=new df({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:OA});return!mA(W.payload)}catch{return!1}finally{await H.dispose().catch(()=>{return})}}async function x2(f={}){if(f.endpoint?.trim()){let W=await EH(f.endpoint);return W.status==="compatible"?W.url:void 0}let $=Xf(),J=await Qf($.discoveryPath);if(!J?.url)return;let H=await EH(J.url);if(H.status==="compatible")return k0(H.url,J.authToken);if(H.status==="build_mismatch")await zf($.discoveryPath).catch(()=>{return});return}async function K$(f={}){let $=await x2(f);if($&&await sf($,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return $;if(f.endpoint?.trim())return;let J=Xf();return Y1(f.workspaceRoot??process.cwd()),await EA(J)}async function I2(f,$){let J=new URL(f),H=$?.trim()||F7(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 mH(){let f=Xf(),$=await Qf(f.discoveryPath);if(!$?.url)return!1;try{if(await I2($.url,$.authToken))return!0}catch{}return!1}async function W6(f){if(!CH(f.url))return;let $=Xf(),J=await Qf($.discoveryPath);if(!J?.url||!kA(J.url,f.url))return;if(!await IA(J.url,J.authToken,{workspaceRoot:f.workspaceRoot,cwd:f.cwd}))return;if(!await mH())return;if(!await SA(J.url))return;return await zf($.discoveryPath).catch(()=>{return}),await K$({workspaceRoot:f.workspaceRoot,cwd:f.cwd})}function xA(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 gA="cline-hub-auth.";function vA(f){return f.host!==void 0||f.port!==void 0||f.pathname!==void 0}function uA(f,$){let J=new URL(f),H=new URL($);return J.search="",J.hash="",H.search="",H.hash="",J.toString()===H.toString()}async function cA(f){let $=f.searchParams.get("authToken")?.trim();if(f.searchParams.delete("authToken"),$)return $;let J=Xf(),H=await Qf(J.discoveryPath);if(H?.url&&uA(f.toString(),H.url))return H.authToken;return}async function IH(f={}){let $=tf(f);if(!vA(f)){let J=Xf(),H=await Qf(J.discoveryPath);if(H?.url)return H.url}return cf($.host,$.port,$.pathname)}async function Q6(f){return await new Promise(($,J)=>{(async()=>{let H=new URL(f),W=await cA(H);H.hash="";let Q=new WebSocket(H.toString(),W?[`${gA}${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(xA(P,f))})})().catch(J)})}async function y7(f){try{return(await Q6(f)).close(),!0}catch{return!1}}async function K7(f,$){let J=await IH(f),H=await Q6(J);try{return await H.send({version:$.version??"v1",clientId:$.clientId??"hub-client",...$})}finally{H.close()}}function of(f){return f?JSON.parse(JSON.stringify(f)):{}}function Z6(f){let $=f?.session&&typeof f.session==="object"?f.session:void 0;if(!$)return;let J=$.metadata&&typeof $.metadata==="object"?of($.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 U7(f,$){return f.error?.message??`hub command failed: ${$}`}function dA(f){let $=of(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 rA(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 lA(f){let $=f.sessionId?.trim();if(!$)return;switch(f.event){case"iteration.started":return{sessionId:$,eventType:"runtime.chat.iteration_start",payload:of(f.payload)};case"iteration.finished":return{sessionId:$,eventType:"runtime.chat.iteration_end",payload:of(f.payload)};case"assistant.delta":return{sessionId:$,eventType:"runtime.chat.text_delta",payload:of(f.payload)};case"tool.started":return{sessionId:$,eventType:"runtime.chat.tool_call_start",payload:of(f.payload)};case"tool.finished":return{sessionId:$,eventType:"runtime.chat.tool_call_end",payload:of(f.payload)};case"approval.requested":return{sessionId:$,eventType:"approval.requested",payload:of(f.payload)};case"run.aborted":return{sessionId:$,eventType:"runtime.chat.aborted",payload:of(f.payload)};case"run.failed":return{sessionId:$,eventType:"runtime.chat.failed",payload:dA(f.payload)};case"run.completed":return{sessionId:$,eventType:"runtime.chat.completed",payload:of(f.payload)};default:return}}class xH{options;client;metadataApplied=!1;constructor(f){this.options=f;this.client=new df({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=Z6($.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 Z6($.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(U7(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(U7(W,"session.restore"));let Q=Z6(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=rA(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)=>Z6({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=lA(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 gH{client;constructor(f){this.client=new df({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 PL}from"@cline/llms";var HV={};N(HV,{LocalRuntimeHost:()=>j0});import{homedir as $L}from"node:os";import{isAbsolute as JL,join as o9,resolve as HL}from"node:path";import{createSessionId as WL,isLikelyAuthError as QL,normalizeUserInput as ZL}from"@cline/shared";import{setHomeDirIfUnset as jL}from"@cline/shared/storage";var v7={};N(v7,{createContextCompactionPrepareTurn:()=>d2});import{createHandler as sA}from"@cline/llms";var G7=200000,h7=0.95;var vH=20000;var T7=8;function pA(f){return Math.max(1,Math.ceil(f.length/4))}function U$(f,$){if(f.length<=$)return f;return`${f.slice(0,$)}
278
+ ...[truncated ${f.length-$} chars]`}function iA(f){if(typeof f==="string")return U$(f,2000);return f.map(($)=>{switch($.type){case"text":return $.text;case"file":return`<file path="${$.path}">
279
+ ${U$($.content,2000)}
280
+ </file>`;case"image":return`[image:${$.mediaType}]`;default:return""}}).join(`
281
+ `)}function nA(f){return Object.entries(f).map(([$,J])=>`${$}=${JSON.stringify(J)}`).join(", ")}function D7(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]: ${U$(J.thinking,2000)}`);break;case"redacted_thinking":$.push("[Bot thinking]: [redacted]");break;case"tool_use":$.push(`[Bot tool calls]: ${J.name}(${nA(J.input)})`);break;case"tool_result":$.push(`[Tool result]: ${iA(J.content)}`);break;case"file":$.push(`[${f.role==="user"?"User":"Bot"} file ${J.path}]: ${U$(J.content,2000)}`);break;case"image":$.push(`[${f.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return $.join(`
282
+ `)}function M7(f){return f.map(D7).join(`
283
+
284
+ `).trim()}function _7(){let f=new WeakMap;return($)=>{let J=$,H=f.get(J);if(typeof H==="number")return H;let W=pA(D7($));return f.set(J,W),W}}function u2(f){return f.metadata?.kind==="compaction_summary"}function uH(f){if(!u2(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 aA(f){if(f.role!=="user"||!Array.isArray(f.content))return!1;return f.content.length>0&&f.content.every(($)=>$.type==="tool_result")}function L7(f){return f.role==="user"&&!aA(f)&&!u2(f)}function z7(f){for(let $=0;$<f.length;$+=1)if(L7(f[$]))return $;return-1}function cH(f){for(let $=f.length-1;$>=0;$-=1)if(L7(f[$]))return $;return 0}function O7(f){for(let $=f.length-1;$>=0;$-=1)if(f[$].role==="assistant")return $;return-1}function N7(f){for(let $=f.length-1;$>=0;$-=1)if(u2(f[$]))return $;return-1}function q7(f,$,J){let H=cH(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 v2(f){if(typeof f==="string"&&f.trim().length>0)return[f];if(Array.isArray(f))return f.flatMap(($)=>v2($));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(...v2($[H]));if(Array.isArray($.files)){for(let H of $.files)if(H&&typeof H==="object")J.push(...v2(H.path))}if(Array.isArray($.file_paths))J.push(...v2($.file_paths));return J}return[]}function g2(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 b7(f){let $=[],J=[];for(let H of f){let W=uH(H);if(W){$=g2($,W.details.readFiles),J=g2(J,W.details.modifiedFiles);continue}if(!Array.isArray(H.content))continue;for(let Q of H.content){if(Q.type==="file"){$=g2($,[Q.path]);continue}if(Q.type!=="tool_use")continue;let Z=v2(Q.input);if(Q.name==="read_files"){$=g2($,Z);continue}if(Q.name==="editor"||Q.name==="apply_patch")J=g2(J,Z)}}return{readFiles:$,modifiedFiles:J}}function tA(f){let $=f.readFiles.length>0?f.readFiles.map((H)=>`- ${H}`).join(`
285
+ `):"- none",J=f.modifiedFiles.length>0?f.modifiedFiles.map((H)=>`- ${H}`).join(`
286
+ `):"- none";return`## Files
287
+ Read:
288
+ ${$}
289
+ Modified:
290
+ ${J}`}function w7(f,$){if(/^## Files$/im.test(f))return f.trim();return`${f.trim()}
291
+
292
+ ${tA($)}`.trim()}function C7(f){let $=[`Summarize this session for continuation. Be concise and factual.
293
+
294
+ ## Goal
295
+ One sentence: what is being built or fixed.
296
+
297
+ ## State
298
+ - Done: completed steps
299
+ - In Progress: current work
300
+ - Blocked: blockers or open questions
301
+
302
+ ## Highlights
303
+ Key technical choices or notable findings (omit if none).
304
+
305
+ ## Next
306
+ Immediate next steps.
307
+
308
+ ## Files
309
+ Read: ${f.fileOps.readFiles.join(", ")||"none"}
310
+ Edited: ${f.fileOps.modifiedFiles.join(", ")||"none"}`];if(f.previousSummary?.trim())$.push(`Previous summary:
311
+ ${f.previousSummary.trim()}`);return $.push(`Conversation:
312
+ ${f.conversationText||"(empty)"}`),$.join(`
313
+
314
+ `)}function E7(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 S7(f){return{role:"user",content:`Context summary:
315
+
316
+ ${f.summary}`,metadata:{kind:"compaction_summary",summary:f.summary,details:f.fileOps,tokensBefore:f.tokensBefore,generatedAt:Date.now()}}}async function oA(f){let $=sA(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 k7(f){let $=f.context.messages;if($.length<2)return;let J=q7($,f.preserveRecentTokens,f.estimateMessageTokens);if(J<=0||J>=$.length)return;let H=$.slice(0,J),W=N7(H),Q=W>=0?uH(H[W])?.summary:void 0,Z=W>=0?H.slice(W+1):H;if(Z.length===0)return;let j=b7(H),P=M7(Z),X=await oA({providerConfig:E7({activeProviderConfig:f.providerConfig,summarizer:f.summarizer}),request:C7({previousSummary:Q,conversationText:P,fileOps:j}),logger:f.logger});if(!X.trim())return;let V=w7(X,j),Y=$.reduce((R,U)=>R+f.estimateMessageTokens(U),0),B=[S7({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 x7(f){if(u2(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 c2(f,$){return f.reduce((J,H)=>J+$(H),0)}function m7(f,$){let J=Math.max(1,$),H=Math.max(16,J*4);if(typeof f.content==="string"){let Z=U$(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=U$(Z.text,W).trim();return W-=j.length,{...Z,text:j||"..."}});return{...f,content:Q}}function eA(f,$){let J=z7(f),H=cH(f),W=O7(f),Q=[];for(let Z=0;Z<f.length;Z+=1){let j=x7(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 I7(f,$,J,H){let W=f[$];W.message=J,W.estimatedTokens=H(J)}function j6(f,$,J,H){let W=c2(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 fR(f,$,J){let H=c2(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(T7,Z.estimatedTokens-(H-$));if(j>=Z.estimatedTokens)continue;I7(f,Q,m7(Z.message,j),J),H=c2(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-$));I7(f,W,m7(f[W].message,Q),J)}}function $R(f,$){return JSON.stringify(f)!==JSON.stringify($)}function g7(f){let $=Math.max(1,Math.min(f.context.triggerTokens,f.context.contextWindowTokens)),J=eA(f.context.messages,f.estimateMessageTokens);if(J.length===0)return;j6(J,(Z)=>Z.message.role==="assistant"&&!Z.isLastAssistant,$,f.estimateMessageTokens),j6(J,(Z)=>Z.message.role==="user"&&!Z.isFirstUser&&!Z.isLastUser,$,f.estimateMessageTokens),j6(J,(Z)=>Z.message.role==="assistant"&&Z.isLastAssistant,$,f.estimateMessageTokens),j6(J,(Z)=>Z.message.role==="user"&&Z.isLastUser&&!Z.isFirstUser,$,f.estimateMessageTokens),fR(J,$,f.estimateMessageTokens);let H=J.map((Z)=>Z.message);if(!$R(f.context.messages,H))return;let W=c2(f.context.messages.map((Z)=>x7(Z)??Z),f.estimateMessageTokens),Q=c2(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 JR={basic:({context:f,estimateMessageTokens:$,logger:J})=>g7({context:f,estimateMessageTokens:$,logger:J}),agentic:({context:f,providerConfig:$,compaction:J,mode:H,estimateMessageTokens:W,logger:Q})=>k7({context:f,providerConfig:$,summarizer:J?.summarizer,preserveRecentTokens:H==="manual"?Math.min(J?.preserveRecentTokens??vH,f.triggerTokens):J?.preserveRecentTokens??vH,estimateMessageTokens:W,logger:Q})};function HR(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??h7,J=f.contextWindowTokens*$;return{shouldCompact:f.inputTokens>J,triggerTokens:J,thresholdRatio:$}}function WR(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 d2(f,$={}){let J=f.compaction;if(J?.enabled!==!0)return;let H=f.providerConfig??{providerId:f.providerId,modelId:f.modelId},W=_7(),Q=J?.strategy??"basic",Z=JR[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??G7;if(typeof V!=="number"||!Number.isFinite(V)||V<=0)return;let Y=HR({inputTokens:X,contextWindowTokens:V,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if(j==="auto"&&!Y.shouldCompact)return;let B=j==="manual"?WR({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}}var oQ={};N(oQ,{zodToJsonSchema:()=>Ky,validateWithZod:()=>yy,resolveToolRoutingConfig:()=>U1,resolveToolPresetName:()=>G0,resolveCoreSelectedToolIds:()=>G6,getCoreHeadlessToolNames:()=>Z8,getCoreDefaultEnabledToolIds:()=>U6,getCoreBuiltinToolCatalog:()=>O$,getCoreAcpToolNames:()=>h6,createWindowsShellTool:()=>sH,createWebFetchTool:()=>oH,createWebFetchExecutor:()=>W8,createToolPoliciesWithPreset:()=>B6,createSubmitAndExitTool:()=>JW,createSkillsTool:()=>h$,createSearchTool:()=>aH,createSearchExecutor:()=>H8,createReadFilesTool:()=>nH,createFileReadExecutor:()=>J8,createEditorTool:()=>fW,createEditorExecutor:()=>f8,createDefaultToolsWithPreset:()=>A6,createDefaultTools:()=>u0,createDefaultExecutors:()=>y1,createBuiltinTools:()=>N$,createBashTool:()=>tH,createBashExecutor:()=>e2,createAskQuestionTool:()=>$W,createApplyPatchTool:()=>eH,createApplyPatchExecutor:()=>o2,WebFetchRequestSchema:()=>pH,ToolPresets:()=>bf,TEAM_TOOL_NAMES:()=>D1,SubmitInputSchema:()=>s2,SkillsInputSchema:()=>a2,SearchCodebaseInputSchema:()=>l2,RunCommandsInputSchema:()=>A1,ReadFilesInputSchema:()=>r2,ReadFileRequestSchema:()=>I0,FetchWebContentInputSchema:()=>p2,EditFileInputSchema:()=>i2,DefaultToolNames:()=>ff,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>K1,AskQuestionInputSchema:()=>t2,ApplyPatchInputSchema:()=>n2,ALL_DEFAULT_TOOL_NAMES:()=>q0});import{validateWithZod as yy,zodToJsonSchema as Ky}from"@cline/shared";import{createTool as K0,validateWithZod as v0,zodToJsonSchema as f0}from"@cline/shared";import{validateWithZod as n7}from"@cline/shared";import{z as D}from"zod";var x0=6000,dH=D.string().describe("The absolute file path of a text file to read content from"),u7=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"),I0=D.object({path:dH,start_line:u7.shape.start_line,end_line:u7.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),r2=D.object({files:D.array(I0).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.")}),c7=D.union([r2,I0,D.array(I0),D.array(D.string()),D.string(),D.object({files:I0}),D.object({file_paths:D.array(dH)}),D.object({file_paths:D.string()}),D.object({paths:D.array(D.union([dH,I0]))}),D.object({paths:I0}),D.object({paths:D.string()})]),l2=D.object({queries:D.array(D.string()).describe("Array of regex search queries to execute")}),d7=D.union([l2,D.array(D.string()),D.string(),D.object({queries:D.string()})]),G$=D.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${x0*2} characters) to avoid timeouts.`),A1=D.object({commands:D.array(G$).describe("Array of shell commands to execute")}),r7=D.union([A1,D.object({commands:G$}),D.object({command:G$}),D.object({cmd:G$}),D.array(D.string()),D.string()]),rH=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.")}),l7=D.union([G$,rH]),lH=D.object({commands:D.array(l7).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.")}),p7=D.union([A1,lH,D.object({commands:l7}),D.array(rH),rH,D.object({command:G$}),D.object({cmd:G$}),D.array(D.string()),D.string()]),pH=D.object({url:D.string().describe("The URL to fetch"),prompt:D.string().min(2).describe("Analysis prompt for the fetched content")}),p2=D.object({requests:D.array(pH).describe("Array of the URLs for the web fetch requests")}),i2=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 ${x0} 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 ${x0} 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."),n2=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."),i7=D.union([n2,D.string()]),a2=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")}),t2=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")}),s2=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.
317
+ 'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
318
+ 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 g0(f){if(f instanceof Error)return f.message;return String(f)}function a7(f){if(typeof f.old_text==="string"&&f.old_text.length>x0)return`Editor input too large: old_text was ${f.old_text.length} characters, exceeding the recommended limit of ${x0}. 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>x0)return`Editor input too large: new_text was ${f.new_text.length} characters, exceeding the recommended limit of ${x0}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function ef(f,$,J){return Promise.race([f,new Promise((H,W)=>{setTimeout(()=>W(Error(J)),$)})])}function t7(f){let $=n7(c7,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 P6(f){let{path:$,start_line:J,end_line:H}=f;if(J==null&&H==null)return $;return`${$}:${J??1}-${H??"EOF"}`}function s7(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 o7(f){let $=n7(p7,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 iH(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 nH(f,$={}){let J=$.fileReadTimeoutMs??1e4;return K0({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:f0(r2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(H,W)=>{let Q=t7(H);return Promise.all(Q.map(async(Z)=>{let j=s7(Z);if(j)return{query:P6(Z),result:"",error:`Invalid file range: ${j}`,success:!1};try{let P=await ef(f(Z,W),J,`File read timed out after ${J}ms`);return{query:P6(Z),result:P,success:!0}}catch(P){let X=g0(P);return{query:P6(Z),result:"",error:`Error reading file: ${X}`,success:!1}}}))}})}function aH(f,$={}){let J=$.searchTimeoutMs??30000,H=$.cwd??process.cwd();return K0({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:f0(l2),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(W,Q)=>{let Z=v0(d7,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 ef(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=g0(X);return{query:P,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function tH(f,$={}){let J=$.bashTimeoutMs??30000,H=$.cwd??process.cwd();return K0({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:f0(A1),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=v0(r7,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 ef(f(P,H,Q),J,`Command timed out after ${J}ms`);return{query:P,result:X,success:!0}}catch(X){let V=g0(X);return{query:P,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function sH(f,$={}){let J=$.bashTimeoutMs??30000,H=$.cwd??process.cwd();return K0({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:f0(lH),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=o7(W);return Promise.all(Z.map(async(j)=>{try{let P=await ef(f(j,H,Q),J,`Command timed out after ${J}ms`);return{query:iH(j),result:P,success:!0}}catch(P){let X=g0(P);return{query:iH(j),result:"",error:`Command failed: ${X}`,success:!1}}}))}})}function oH(f,$={}){let J=$.webFetchTimeoutMs??30000;return K0({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:f0(p2),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(H,W)=>{let Q=v0(p2,H);return Promise.all(Q.requests.map(async(Z)=>{try{let j=await ef(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=g0(j);return{query:Z.url,result:"",error:`Error fetching web content: ${P}`,success:!1}}}))}})}var QR=`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:
319
+
320
+ *** Begin Patch
321
+ *** Update File: path/to/file.ts
322
+ @@ optional section marker
323
+ [context before]
324
+ -[old line]
325
+ +[new line]
326
+ [context after]
327
+ *** End Patch
328
+
329
+ Supported actions:
330
+ - \`*** Add File: <path>\`
331
+ - \`*** Update File: <path>\`
332
+ - \`*** Delete File: <path>\`
333
+ - optional \`*** Move to: <new path>\` immediately after an Update File header
334
+
335
+ Rules:
336
+ - In an Add File section, every file-content line must start with \`+\`.
337
+ - In an Update section, use context lines plus \`-\` and \`+\` lines to describe the change.
338
+ - Use \`@@\` markers when extra context is needed to disambiguate repeated code blocks.
339
+ - Do not use line numbers; this format is context-based.
340
+ - Prefer sending the patch body directly. Legacy shell wrappers such as \`%%bash\` and \`apply_patch <<"EOF"\` are accepted for compatibility but are not preferred.
341
+
342
+ Example:
343
+
344
+ *** Begin Patch
345
+ *** Update File: src/page.tsx
346
+ @@
347
+ return (
348
+ <div>
349
+ <button onClick={() => console.log("clicked")}>Click me</button>
350
+ + <button onClick={() => console.log("cancel clicked")}>Cancel</button>
351
+ </div>
352
+ );
353
+ }
354
+ *** End Patch`;function eH(f,$={}){let J=$.applyPatchTimeoutMs??30000,H=$.cwd??process.cwd();return K0({name:"apply_patch",description:QR,inputSchema:f0(n2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=v0(i7,W),j=typeof Z==="string"?Z:Z.input;try{return{query:"apply_patch",result:await ef(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: ${g0(P)}`,success:!1}}}})}function fW(f,$={}){let J=$.editorTimeoutMs??30000,H=$.cwd??process.cwd();return K0({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:f0(i2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,Q)=>{let Z=v0(i2,W),j=Z.insert_line==null?"edit":"insert",P=a7(Z);if(P)return{query:`${j}:${Z.path}`,result:"",error:P,success:!1};try{let X=await ef(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=g0(X);return{query:`${j}:${Z.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function h$(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=K0({name:"skills",description:H,inputSchema:f0(a2),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let j=v0(a2,Q);return ef(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 $W(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:f0(t2),retryable:!1,maxRetries:0,execute:async($,J)=>{let H=v0(t2,$);return f(H.question,H.options,J)}}}function JW(f,$={}){let J=$.submitTimeoutMs??15000;return K0({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:f0(s2),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(H,W)=>{let Q=v0(s2,H);return ef(f(Q.summary,Q.verified,W),J,`submit_and_exit timed out after ${J}ms`)}})}function u0(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(nH($.readFile,Y));if(H&&$.search)B.push(aH($.search,Y));if(W&&$.bash)if(process.platform==="win32")B.push(sH($.bash,Y));else B.push(tH($.bash,Y));if(Q&&$.webFetch)B.push(oH($.webFetch,Y));if(j&&$.editor)B.push(fW($.editor,Y));else if(Z&&$.applyPatch)B.push(eH($.applyPatch,Y));if(P&&$.skills)B.push(h$($.skills,Y));let A=V?$.submit:void 0;if(X&&$.askQuestion&&!A)B.push($W($.askQuestion));if(A)B.push(JW(A,Y));return B}import*as Nf from"node:fs/promises";import*as qf from"node:path";var I={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},fQ=["%%bash","apply_patch","EOF","```"];class Jf extends Error{constructor(f){super(f);this.name="DiffError"}}function Of(f){let $={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return f.normalize("NFC").replace(/./gu,(J)=>$[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class HW{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(I.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(I.END)??!1}parseNextAction(){let f=this.lines[this.index];if(f?.startsWith(I.UPDATE)){this.parseUpdate(f.substring(I.UPDATE.length).trim());return}if(f?.startsWith(I.DELETE)){this.parseDelete(f.substring(I.DELETE.length).trim());return}if(f?.startsWith(I.ADD)){this.parseAdd(f.substring(I.ADD.length).trim());return}throw new Jf(`Unknown line while parsing: ${f}`)}checkDuplicate(f,$){if(f in this.patch.actions)throw new Jf(`Duplicate ${$} for file: ${f}`)}parseUpdate(f){this.checkDuplicate(f,"update"),this.currentPath=f,this.index++;let $=this.lines[this.index]?.startsWith(I.MOVE)?(this.lines[this.index++]??"").substring(I.MOVE.length).trim():void 0;if(!(f in this.currentFiles))throw new Jf(`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(`
355
+ `),W=0,Q=[I.END,I.UPDATE,I.DELETE,I.ADD,I.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 Jf(`Invalid Line:
356
+ ${this.lines[this.index]}`);if(j?.trim()){let y=Of(j.trim());for(let F=W;F<H.length;F++){let K=H[F];if(K&&(Of(K)===y||Of(K.trim())===y)){if(W=F+1,Of(K.trim())===y&&Of(K)!==y)this.fuzz++;break}}}let[X,V,Y,B]=PR(this.lines,this.index),[A,R,U]=jR(H,X,W,B);if(A===-1){let y=X.join(`
357
+ `);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 Jf(`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 Jf(`Add File Error: File already exists: ${f}`);this.index++;let $=[],J=[I.END,I.UPDATE,I.DELETE,I.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 Jf(`Invalid Add File line (missing '+'): ${H}`);$.push(H.substring(1))}this.patch.actions[f]={type:"add",newFile:$.join(`
358
+ `),chunks:[]}}}function e7(f,$){let J=f.length>$.length?f:$,H=f.length>$.length?$:f;if(J.length===0)return 1;let W=ZR(H,J);return(J.length-W)/J.length}function ZR(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 jR(f,$,J,H){if($.length===0)return[J,0,1];let W=0,Q=(Z)=>{let j=Of($.join(`
359
+ `));for(let X=Z;X<f.length;X++){let V=Of(f.slice(X,X+$.length).join(`
360
+ `));if(V===j)return[X,0,1];let Y=e7(V,j);if(Y>W)W=Y}for(let X=Z;X<f.length;X++){let V=Of(f.slice(X,X+$.length).map((B)=>B.trimEnd()).join(`
361
+ `)),Y=Of($.map((B)=>B.trimEnd()).join(`
362
+ `));if(V===Y)return[X,1,1]}for(let X=Z;X<f.length;X++){let V=Of(f.slice(X,X+$.length).map((B)=>B.trim()).join(`
363
+ `)),Y=Of($.map((B)=>B.trim()).join(`
364
+ `));if(V===Y)return[X,100,1]}let P=0.66;for(let X=Z;X<f.length;X++){let V=Of(f.slice(X,X+$.length).join(`
365
+ `)),Y=e7(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 PR(f,$){let J=$,H=[],W=[],Q=[],Z=[],j="keep",P=["@@",I.END,I.UPDATE,I.DELETE,I.ADD,I.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 Jf(`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]===I.END_FILE)return J++,[H,Z,J,!0];return[H,Z,J,!1]}function WW(f,$,J){let H=qf.isAbsolute($),W=H?qf.normalize($):qf.resolve(f,$);if(!J||H)return W;let Q=qf.relative(f,W);if(Q.startsWith("..")||qf.isAbsolute(Q))throw new Jf(`Path must stay within cwd: ${$}`);return W}function XR(f){return f.split(`
366
+ `).map(($)=>$.replace(/\r$/,""))}function $Q(f){if(f.trim()==="")return!1;return fQ.some(($)=>f.startsWith($))}function VR(f){let $=0,J=f.length;while($<J&&$Q(f[$]??""))$++;while(J>$&&$Q(f[J-1]??""))J--;return f.slice($,J)}function YR(f){let $=XR(f),J=$.findIndex((Z)=>Z.startsWith(I.BEGIN)),H=-1;for(let Z=$.length-1;Z>=0;Z--)if($[Z]?.startsWith(I.END)){H=Z;break}if(J!==-1||H!==-1){if(J===-1||H===-1||H<J)throw new Jf("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:$.slice(J,H+1)}}let W=VR($);while(W.length>0&&W[0]==="")W.shift();while(W.length>0&&W[W.length-1]==="")W.pop();return{lines:[I.BEGIN,...W,I.END]}}function BR(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 AR(f,$,J){if($.length===0)return f;let H=f.split(`
367
+ `),W=[],Q=0;for(let Z of $){if(Z.origIndex>H.length)throw new Jf(`${J}: chunk.origIndex ${Z.origIndex} > lines.length ${H.length}`);if(Q>Z.origIndex)throw new Jf(`${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(`
368
+ `)}async function RR(f,$,J,H){let W=BR(f,[I.UPDATE,I.DELETE]),Q={};for(let Z of W){let j=WW($,Z,H),P;try{P=await Nf.readFile(j,J)}catch{throw new Jf(`File not found: ${Z}`)}Q[Z]=P.replace(/\r\n/g,`
369
+ `)}return Q}function FR(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 Jf("ADD action without file content");J[H]={type:"add",newContent:W.newFile};break;case"update":J[H]={type:"update",oldContent:$[H],newContent:AR($[H]??"",W.chunks,H),movePath:W.movePath};break}return J}async function yR(f,$,J,H){let W=[];for(let[Q,Z]of Object.entries(f)){let j=WW($,Q,H);switch(Z.type){case"delete":await Nf.rm(j,{force:!0}),W.push(`${Q}: [deleted]`);break;case"add":if(Z.newContent===void 0)throw new Jf(`Cannot create ${Q} with no content`);await Nf.mkdir(qf.dirname(j),{recursive:!0}),await Nf.writeFile(j,Z.newContent,{encoding:J}),W.push(Q);break;case"update":{if(Z.newContent===void 0)throw new Jf(`UPDATE change for ${Q} has no new content`);if(Z.movePath){let P=WW($,Z.movePath,H);await Nf.mkdir(qf.dirname(P),{recursive:!0}),await Nf.writeFile(P,Z.newContent,{encoding:J}),await Nf.rm(j,{force:!0}),W.push(`${Q} -> ${Z.movePath}`)}else await Nf.writeFile(j,Z.newContent,{encoding:J}),W.push(Q);break}}}return W}function o2(f={}){let{encoding:$="utf-8",restrictToCwd:J=!0}=f;return async(H,W,Q)=>{let Z=YR(H.input),j=await RR(Z.lines,W,$,J),P=new HW(Z.lines,j),{patch:X,fuzz:V}=P.parse(),Y=FR(X,j),B=await yR(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(`
370
+ `)}}import{spawn as JQ}from"node:child_process";import{getDefaultShell as KR,getShellArgs as UR}from"@cline/shared";function GR(f,$,J,H,W){return new Promise((Q,Z)=>{let j=process.platform==="win32",P=JQ(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){JQ("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?`
371
+ [stderr]
372
+ ${Y}`:""):V;if(B>H)h+=`
373
+
374
+ [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 e2(f={}){let{shell:$=KR(process.platform),timeoutMs:J=30000,maxOutputBytes:H=1e6,env:W={},combineOutput:Q=!0}=f;return(Z,j,P)=>{let X=typeof Z!=="string";return GR({executable:X?Z.command:$,args:X?Z.args??[]:UR($,Z),cwd:j,env:W},P,J,H,Q)}}import*as lf from"node:fs/promises";import*as rf from"node:path";function hR(f,$,J){let H=rf.isAbsolute($),W=H?rf.normalize($):rf.resolve(f,$);if(!J)return W;if(H)return W;let Q=rf.relative(f,W);if(Q.startsWith("..")||rf.isAbsolute(Q))throw Error(`Path must stay within cwd: ${$}`);return W}function TR(f,$){if($.length===0)return 0;return f.split($).length-1}function DR(f,$,J){let H=f.split(`
375
+ `),W=$.split(`
376
+ `),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(`
377
+ `)}async function MR(f,$,J){return await lf.mkdir(rf.dirname(f),{recursive:!0}),await lf.writeFile(f,$,{encoding:J}),`File created successfully at: ${f}`}async function _R(f){try{return await lf.access(f),!0}catch{return!1}}async function LR(f,$,J,H,W){let Q=await lf.readFile(f,H),Z=TR(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 lf.writeFile(f,j,{encoding:H});let P=DR(Q,j,W);return`Edited ${f}
378
+ ${P}`}async function zR(f,$,J,H){let Q=(await lf.readFile(f,H)).split(`
379
+ `),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(`
380
+ `)),await lf.writeFile(f,Q.join(`
381
+ `),{encoding:H}),`Inserted content at line ${$} in ${f}.`}function f8(f={}){let{encoding:$="utf-8",restrictToCwd:J=!0,maxDiffLines:H=200}=f;return async(W,Q,Z)=>{let j=hR(Q,W.path,J);if(W.insert_line!=null)return zR(j,W.insert_line,W.new_text,$);if(!await _R(j))return MR(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 LR(j,W.old_text,W.new_text,$,H)}}import*as $8 from"node:fs/promises";import*as c0 from"node:path";var OR=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),NR={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function J8(f={}){let{maxFileSizeBytes:$,encoding:J,includeLineNumbers:H}={...NR,...f};return async(W,Q)=>{let{path:Z,start_line:j,end_line:P}=W,X=c0.isAbsolute(Z)?c0.normalize(Z):c0.resolve(process.cwd(),Z),V=c0.extname(X).toLowerCase(),Y=OR.get(V),B=await $8.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 $8.readFile(X);return[{type:"text",text:"Successfully read image"},{type:"image",data:K.toString("base64"),mediaType:Y}]}let R=(await $8.readFile(X,J)).split(`
382
+ `),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(`
383
+ `)}return F.join(`
384
+ `)}}import{spawn as XQ}from"node:child_process";import*as VQ from"node:fs/promises";import*as Y6 from"node:path";var PQ={};N(PQ,{prewarmFileIndex:()=>V6,getFileIndex:()=>U0,enrichPromptWithMentions:()=>F1});import{spawn as qR}from"node:child_process";import{readdir as bR}from"node:fs/promises";import ZW from"node:path";import{isMainThread as QQ,parentPort as HQ,Worker as wR}from"node:worker_threads";var CR=15000,ER=600000,SR=1000,kR=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function WQ(f){let $=f&&typeof f==="object"&&"code"in f?String(f.code??""):"";return $==="EACCES"||$==="EPERM"||$==="ENOENT"}var R1=new Map;function mR(f){if(R1.size<=1)return;for(let[$,J]of R1.entries()){if(J.pending)continue;if(f-J.lastAccessedAt>ER)R1.delete($)}}function IR(f,$){return ZW.relative(f,$).split(ZW.sep).join("/")}async function xR(f){let J=(await new Promise((H,W)=>{let Q=qR("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 ZQ(f,$,J){let H;try{H=await bR($,{withFileTypes:!0})}catch(W){if(WQ(W))return;throw W}for(let W of H){let Q=ZW.join($,W.name);if(W.isDirectory()){if(kR.has(W.name))continue;try{await ZQ(f,Q,J)}catch(Z){if(WQ(Z))continue;throw Z}continue}if(W.isFile())J.add(IR(f,Q))}}async function gR(f){let $=new Set;return await ZQ(f,f,$),$}async function X6(f){try{return await xR(f)}catch{return gR(f)}}function vR(){if(QQ||!HQ)return;let f=HQ;f.on("message",($)=>{if($.type!=="index")return;X6($.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 jQ{worker=new wR(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)},SR);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($)}}vR();var QW;function uR(){if(!QQ)return null;if(QW===void 0)QW=new jQ;return QW}async function cR(f){let $=uR();if(!$)return X6(f);try{let J=await $.requestIndex(f);if(J===null)return X6(f);return new Set(J)}catch{return X6(f)}}async function U0(f,$={}){let J=$.ttlMs??CR,H=Date.now();mR(H);let W=R1.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=cR(f).then((Z)=>{return R1.set(f,{files:Z,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),Z});return R1.set(f,{files:W?.files??new Set,lastBuiltAt:W?.lastBuiltAt??0,lastAccessedAt:H,pending:Q}),Q}async function V6(f,$={}){await U0(f,{...$,ttlMs:0})}import{stat as dR}from"node:fs/promises";import T$ from"node:path";var rR=/[),.:;!?`'"]+$/,lR=/^[(`'"]+/;function pR(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(lR,"").replace(rR,"");if(Q.length===0||Q.includes("@"))continue;J.push(Q)}return Array.from(new Set(J))}function iR(f,$){let J=f.replace(/\\/g,"/"),H=T$.isAbsolute(J)?T$.resolve(J):T$.resolve($,J),W=T$.relative($,H);if(W.startsWith("..")||T$.isAbsolute(W))return;return W.split(T$.sep).join("/")}async function F1(f,$,J={}){let H=pR(f);if(H.length===0)return{prompt:f,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:W,maxFileBytes:Q,maxTotalBytes:Z}=J,j=await U0($,{ttlMs:J.ttlMs}),P=[],X=[],V=[],Y=0;for(let B of H){if(W&&V.length>=W){X.push(B);continue}let A=iR(B,$);if(!A||!j.has(A)){X.push(B);continue}if(!Q||!Z){P.push(A);continue}let R=T$.join($,A);try{if(!(await dR(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 nR=["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"],aR=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],D$=null;function tR(){if(D$!==null)return Promise.resolve(D$);return new Promise((f)=>{let $=XQ("rg",["--version"],{stdio:["ignore","pipe","pipe"]});$.on("close",(J)=>{D$=J===0,f(D$)}),$.on("error",()=>{D$=!1,f(!1)}),setTimeout(()=>{if(!$.killed)$.kill("SIGTERM");if(D$===null)D$=!1,f(!1)},1000)})}function sR(f,$,J,H,W=5000,Q){return new Promise((Z)=>{let j=XQ("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(`
385
+ `).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 oR(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=Y6.posix.extname(Q).slice(1).toLowerCase();return J.has(j)||!j&&!Q.startsWith(".")}function H8(f={}){let{includeExtensions:$=nR,excludeDirs:J=aR,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 tR(),B=null;if(Y)B=await sR(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(`
386
+ `)}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 U0(X);for(let K of y){if(V.signal?.aborted)throw Error("Search operation aborted");if(!oR(K,Z,j,Q))continue;if(R.length>=H)break;U++;let M=Y6.join(X,K);try{let G=(await VQ.readFile(M,"utf-8")).split(`
387
+ `);for(let h=0;h<G.length;h++){let z=G[h];A.lastIndex=0;let u=A.exec(z);while(u!==null){if(R.length>=H)break;let gf=Math.max(0,h-W),a=Math.min(G.length-1,h+W),c=[];for(let d=gf;d<=a;d++){let t=d===h?">":" ";c.push(`${t} ${d+1}: ${G[d]}`)}if(R.push({file:K,line:h+1,column:u.index+1,match:u[0],context:c}),u.index===A.lastIndex)A.lastIndex++;u=A.exec(z)}}}catch{}}if(R.length===0)return`No results found for pattern: ${P}
388
+ 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(`
389
+ `)}}function eR(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,`
390
+ `).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,`
391
+ `).replace(/\n{3,}/g,`
392
+
393
+ `).trim()}function W8(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:z,value:u}=await U.read();if(z)break;if(F+=u.length,F>J)throw U.cancel(),Error(`Response too large: exceeded ${J} bytes`);y.push(u)}let K=new Uint8Array(F),M=0;for(let z of y)K.set(z,M),M+=z.length;let T=new TextDecoder("utf-8").decode(K),G;if(R.includes("text/html")||R.includes("application/xhtml"))G=eR(T);else if(R.includes("application/json"))try{let z=JSON.parse(T);G=JSON.stringify(z,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(`
394
+ [Content truncated: showing first 50000 of ${G.length} characters]`);return h.push("","--- Analysis Request ---",`Prompt: ${j}`),h.join(`
395
+ `)}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 y1(f={}){return{readFile:J8(f.fileRead),search:H8(f.search),bash:e2(f.bash),webFetch:W8(f.webFetch),applyPatch:o2(f.applyPatch),editor:f8(f.editor)}}var fF={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"},K1=[{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 YQ(f,$){if(!$||$.length===0)return!0;let J=f.toLowerCase();return $.some((H)=>J.includes(H.toLowerCase()))}function $F(f,$,J,H){if(f.mode&&f.mode!=="any"&&f.mode!==H)return!1;return YQ($,f.providerIdIncludes)&&YQ(J,f.modelIdIncludes)}function U1(f,$,J,H){if(!H||H.length===0)return{};let W=new Map;for(let Z of H){if(!$F(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[fF[Z]]=j;return Q}var bf={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 G0(f){if(f.mode==="plan")return"plan";if(f.mode==="yolo")return"yolo";return"act"}function B6(f){if(f!=="yolo")return{};let $={enabled:!0,autoApprove:!0},J={"*":$};for(let H of q0)J[H]=$;return J}function A6(f,$){let J=bf[f],{enableSpawnAgent:H,enableAgentTeams:W,...Q}=J;return u0({...Q,...$})}import{createTool as iF,zodToJsonSchema as nF}from"@cline/shared";import{z as yW}from"zod";import{createAgentRuntime as xF}from"@cline/agents";import{createContributionRegistry as gF}from"@cline/shared";import{createGateway as JF,MODEL_COLLECTIONS_BY_PROVIDER_ID as HF}from"@cline/llms";function jW(f){let $=f.providerConfig;if($?.knownModels)return $.knownModels;if(f.knownModels)return f.knownModels;return HF[f.providerId]?.models??void 0}function BQ(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:jW(f),maxOutputTokens:f.maxTokensPerTurn,reasoningEffort:f.reasoningEffort,thinkingBudgetTokens:f.thinkingBudgetTokens,thinking:f.thinking,logger:$,extensionContext:f.extensionContext};return JF({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 AQ}from"@cline/shared";var WF=50000,QF=6000000,RQ=8000,ZF=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),jF=new Set(["read","read_files"]),M$="[outdated - see the latest file content]",FQ="Tool execution was interrupted before a result was produced.",PF=(f)=>`
396
+
397
+ ...[truncated ${f} chars]...
398
+
399
+ `,XF=(f)=>`
400
+
401
+ ...[truncated ${f} chars to fit provider request budget]...
402
+
403
+ `;class XW{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor(f=WF,$=ZF,J=QF){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=AQ(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=AQ(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?`${FQ} Tool: ${f}.`:FQ}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)??M$;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:M$}}if(Q.type==="image"){if(W===0)return Q;return W-=1,{type:"text",text:M$}}if(Q.type!=="text")return Q;let Z=this.replaceOutdatedInString(Q.text,J);if(Z===null)return{...Q,text:M$};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=M$;else if(typeof H.content==="string")H.content=M$;else H.result=M$;return H}isReadTool(f){return!!f&&jF.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 PW(f,this.maxToolResultChars,PF)}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)=>YF(Q))}}),H=this.collectTruncationCandidates(J);for(let W of H){if($<=this.maxTotalTextBytes)break;let Q=W.byteLength;if(Q<=RQ)continue;let Z=$-this.maxTotalTextBytes,j=Math.max(RQ,Q-Z),P=VF(W.get(),j,XF);W.set(P),$-=Q-Uf(P)}return J}countMessageTextBytes(f){let $=0;for(let J of f){if(typeof J.content==="string"){$+=Uf(J.content);continue}for(let H of J.content)if(H.type==="text")$+=Uf(H.text);else if(H.type==="thinking")$+=Uf(H.thinking);else if(H.type==="file")$+=Uf(H.content);else if(H.type==="tool_result"){if(typeof H.content==="string")$+=Uf(H.content);else for(let W of H.content)if(W.type==="text")$+=Uf(W.text);else if(W.type==="file")$+=Uf(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:Uf(H.content),get:()=>H.content,set:(Q)=>{H.content=Q}});continue}for(let Q of H.content)if(Q.type==="text")$.push({byteLength:Uf(Q.text),get:()=>Q.text,set:(Z)=>{Q.text=Z}});else if(Q.type==="file")$.push({byteLength:Uf(Q.content),get:()=>Q.content,set:(Z)=>{Q.content=Z}})}}return $.sort((J,H)=>H.byteLength-J.byteLength)}}function Uf(f){return Buffer.byteLength(f,"utf8")}function PW(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 VF(f,$,J){if(Uf(f)<=$)return f;let H=0,W=f.length,Q=PW(f,0,J);while(H<=W){let Z=H+W>>>1,j=PW(f,Z,J);if(Uf(j)<=$)Q=j,H=Z+1;else W=Z-1}return Q}function YF(f){if(f.type!=="tool_result"||typeof f.content==="string")return{...f};return{...f,content:f.content.map(($)=>({...$}))}}function VW(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class YW{messages=[];conversationId=VW();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=VW(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=VW(),this.sessionStarted=!1}restore(f){this.messages=[...f],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function BF(f){let $=RF(f.content),J=[],H=f.id??KF(),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(FF),createdAt:f.ts??Date.now(),metadata:f.metadata,modelInfo:f.modelInfo,metrics:yQ(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:yQ(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:[GQ(j)],createdAt:f.ts??Date.now(),metadata:f.metadata})}return Z(),J}function R6(f){return f.flatMap(BF)}function AF(f){let $=f.content.map(hQ).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:yF(f.metrics)}}function G1(f){return f.map(AF)}function UQ(f){let $=[];for(let J of f){let H=J.content.map(hQ).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 RF(f){if(typeof f==="string")return f.length>0?[{type:"text",text:f}]:[];return[...f]}function FF(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 GQ(f)}}function GQ(f){return{type:"tool-result",toolCallId:f.tool_use_id,toolName:"",output:f.content,isError:f.is_error}}function hQ(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 yQ(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 yF(f){if(!f)return;return{inputTokens:f.inputTokens,outputTokens:f.outputTokens,cacheReadTokens:f.cacheReadTokens,cacheWriteTokens:f.cacheWriteTokens,cost:f.cost}}var KQ=0;function KF(){return KQ+=1,`msg_${Date.now().toString(36)}_${KQ.toString(36)}`}function TQ(f){let{agentConfig:$}=f,J=UF($),H=GF($),W=f.hooks,Q=hF($.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??TF($.telemetry),initialMessages:f.initialMessages,completionPolicy:$.completionPolicy,maxIterations:$.maxIterations,toolExecution:Q,toolPolicies:$.toolPolicies,toolContextMetadata:f.toolContextMetadata,requestToolApproval:$.requestToolApproval}}function UF(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 GF(f){let $=f.providerConfig?.family;return{id:f.modelId,provider:f.providerId,family:$}}function hF(f){if(f===void 0)return;return f>=2?"parallel":"sequential"}function TF(f){if(!f)return;return{capture:($,J)=>{f.capture({event:$,properties:J})}}}function DF(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function MF(f){f.lastToolName="",f.lastToolSignature="",f.consecutiveIdenticalCount=0}function BW(f){if(f==null||typeof f!=="object")return f;if(Array.isArray(f))return f.map(BW);let $={};for(let J of Object.keys(f).sort())$[J]=BW(f[J]);return $}function _F(f){if(f==null)return"null";if(typeof f==="string")return f;if(typeof f!=="object")return String(f);try{return JSON.stringify(BW(f))}catch{return String(f)}}function LF(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 DQ={softThreshold:3,hardThreshold:5};class AW{config;state=DF();constructor(f){this.config={softThreshold:f?.softThreshold??DQ.softThreshold,hardThreshold:f?.hardThreshold??DQ.hardThreshold}}inspect(f){let $=_F(f.input),J=LF(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(){MF(this.state)}}class RW{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 OF({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:zF({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 zF(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 OF(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 NF(f){let $=f.content.filter((J)=>J.type==="text");if($.length===0)return;return $.map((J)=>J.text).join("")}function qF(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 bF(f){return f.content.find(($)=>$.type==="tool-result")}function wF(f){switch(f){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function CF(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 FW{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=NF(f);if(J!==void 0)$.push({type:"content_end",contentType:"text",text:J});let H=qF(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=bF(f.message),W=H?.output,Q=CF(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:wF(f.status),text:f.outputText,iterations:f.iterations,usage:$}]}}function vF(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 uF(f){let J=(typeof f.content==="function"?await f.content():f.content).trim();return J.length>0?J:void 0}function cF(f,$){let J=f.trim(),H=$.map((W)=>W.trim()).filter(Boolean).join(`
404
+
405
+ `);if(J&&H)return`${J}
406
+
407
+ ${H}`;return J||H}function dF(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 d0{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 FW;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??xF,this.conversation=new YW(f.initialMessages),this.messageBuilder=new XW,this.contributionRegistry=gF({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 RW({maxConsecutiveMistakes:J,onLimitReached:f.onConsecutiveMistakeLimitReached,emit:(Q)=>this.emitLegacyEvent(Q),log:(Q,Z,j)=>rF(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 AW(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 uF($);if(J)f.push(J)}return cF(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 pF(J,f.userImages,f.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:F})}let H=await this.composeSystemPrompt(),W=BQ(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=_Q(this.config),X=Array.from(Z.values()),V=R6(this.conversation.getMessages()),Y=TQ({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=G1(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=dF([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=G1(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:R6(Z.messages)}:{},...Z.systemPrompt!==void 0?{systemPrompt:Z.systemPrompt}:{}}}}async prepareMessagesForModelRequest(f){let $=await this.prepareProviderMessagesForApi(UQ(f));return R6($)}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?vF(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(G1(f));return}if($.length===0)return;let J=new Set(this.conversation.getMessages().map((W)=>W.id).filter((W)=>typeof W==="string")),H=G1($).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":lF($),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=$?G1($.messages):this.conversation.getMessages(),V=_Q(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 rF(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 lF(f){if(!f)return"error";switch(f.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function pF(f,$,J,H){let{buildInitialUserContent:W}=await Promise.resolve().then(() => MQ);return W(f,$,J,H)}function _Q(f){if(f.knownModels?.[f.modelId])return f.knownModels[f.modelId];let $=jW(f);if($?.[f.modelId])return $[f.modelId];return}import{buildClineSystemPrompt as LQ}from"@cline/shared";function zQ(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return LQ({ide:$.clineIdeName?.trim()||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,rules:`# Team Teammate Role
408
+ ${J}`,platform:$.clinePlatform,metadata:$.workspaceMetadata})}function OQ(f,$){let J=f.trim();if($.providerId.toLowerCase()!=="cline")return J;return LQ({ide:$.clineIdeName||"Terminal",workspaceRoot:$.cwd?.trim()||"/",providerId:$.providerId,overridePrompt:J,metadata:$.workspaceMetadata,platform:$.clinePlatform})}function h1(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 _$(f){let $=f.configProvider.getRuntimeConfig(),J=f.kind==="teammate"?zQ(f.prompt,$):OQ(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 T1(f){let $=_$(f),J=new d0($);if($.onEvent)J.subscribeEvents($.onEvent);return J}var aF=yW.object({systemPrompt:yW.string().describe("System prompt defining the sub-agent's behavior"),task:yW.string().describe("Task for the sub-agent to complete")});function r0(f){return iF({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:nF(aF),execute:async($,J)=>{let H=f.createSubAgentTools?await f.createSubAgentTools($,J):f.subAgentTools??[],W=T1({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 Hf,TEAM_AWAIT_TIMEOUT_MS as tF,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as sF,TEAM_RUN_TEXT_PREVIEW_LIMIT as oF,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as eF,TeamAttachOutcomeFragmentInputSchema as NQ,TeamAwaitRunsInputSchema as qQ,TeamBroadcastInputSchema as bQ,TeamBroadcastToolResultSchema as fy,TeamCancelRunInputSchema as wQ,TeamCancelRunToolResultSchema as $y,TeamCleanupInputSchema as CQ,TeamCleanupToolResultSchema as Jy,TeamCreateOutcomeInputSchema as EQ,TeamCreateOutcomeToolResultSchema as Hy,TeamFinalizeOutcomeInputSchema as SQ,TeamFinalizeOutcomeToolResultSchema as Wy,TeamListOutcomesInputSchema as kQ,TeamListRunsInputSchema as mQ,TeamMailboxMessageToolResultSchema as Qy,TeamMissionLogInputSchema as IQ,TeamMissionLogToolResultSchema as Zy,TeamOutcomeFragmentToolResultSchema as xQ,TeamOutcomeToolResultSchema as jy,TeamReadMailboxInputSchema as gQ,TeamReviewOutcomeFragmentInputSchema as vQ,TeamRunTaskInputSchema as uQ,TeamRunTaskToolResultSchema as KW,TeamRunToolSummarySchema as UW,TeamSendMessageInputSchema as cQ,TeamSendMessageToolResultSchema as Py,TeamShutdownTeammateInputSchema as dQ,TeamSimpleAgentStatusToolResultSchema as rQ,TeamSpawnTeammateInputSchema as lQ,TeamStatusInputSchema as pQ,TeamStatusToolResultSchema as Xy,TeamTaskInputSchema as iQ,TeamTaskToolResultSchema as Q8,validateWithZod as b,zodToJsonSchema as Wf}from"@cline/shared";function nQ(f,$){let J=f.replace(/\s+/g," ").trim();if(J.length<=$)return J;return`${J.slice(0,Math.max(0,$-3)).trimEnd()}...`}function L$(f,$){if(f===void 0)throw Error(`Missing required field: ${$}`);return f}function Vy(f){let $=f.result;if(!$)return;return{textPreview:nQ($.text,oF),iterations:$.iterations,finishReason:$.finishReason,durationMs:$.durationMs,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost}}}function F6(f){return f?.toISOString()}function GW(f){return{id:f.id,agentId:f.agentId,taskId:f.taskId,status:f.status,messagePreview:nQ(f.message,sF),priority:f.priority,retryCount:f.retryCount,maxRetries:f.maxRetries,nextAttemptAt:F6(f.nextAttemptAt),continueConversation:f.continueConversation,startedAt:f.startedAt.toISOString(),endedAt:F6(f.endedAt),leaseOwner:f.leaseOwner,heartbeatAt:F6(f.heartbeatAt),lastProgressAt:F6(f.lastProgressAt),lastProgressMessage:f.lastProgressMessage,currentActivity:f.currentActivity,error:f.error,resultSummary:Vy(f)}}function Yy(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 D1=["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 aQ(f){let $=[];if(f.createBaseTools)$.push(...f.createBaseTools());$.push(...z$({runtime:f.runtime,requesterId:f.spec.agentId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,allowSpawn:!1})),f.runtime.spawnTeammate({agentId:f.spec.agentId,config:_$({kind:"teammate",prompt:f.spec.rolePrompt,role:f.spec.rolePrompt,configProvider:f.teammateConfigProvider,tools:$,maxIterations:f.spec.maxIterations,cwd:f.teammateConfigProvider.getRuntimeConfig().cwd})})}function M1(f){let $=f.leadAgentId??"lead",J=f.restoredFromPersistence===!0,H=z$({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;aQ({runtime:f.runtime,requesterId:$,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:Q}),W.push(Q.agentId)}return{tools:H,restoredFromPersistence:J,restoredTeammates:W}}function z$(f){let $=f.allowSpawn??!0,J=f.includeSpawnTool??!0,H=f.includeManagementTools??!0,W=[];if(J)W.push(Hf({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:Wf(lQ),execute:async(Z)=>{let j=b(lQ,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(aQ({runtime:f.runtime,requesterId:f.requesterId,teammateConfigProvider:f.teammateConfigProvider,createBaseTools:f.createBaseTools,spec:P}),!H)f.onLeadToolsUnlocked?.(z$({...f,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return b(rQ,{agentId:j.agentId,status:"spawned"})}}));if(!H)return W;W.push(Hf({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:Wf(dQ),execute:async(Z)=>{let j=b(dQ,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),b(rQ,{agentId:j.agentId,status:"stopped"})}})),W.push(Hf({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:Wf(pQ),execute:async(Z)=>{return b(pQ,Z),b(Xy,f.runtime.getSnapshot())}})),W.push(Hf({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:Wf(iQ),execute:async(Z)=>{let j=b(iQ,Z);switch(j.action){case"create":{let P=new Set(eF.create??[]),X=Object.entries(Z).filter(([Y,B])=>P.has(Y)&&B!=null).map(([Y])=>Y),V=f.runtime.createTask({title:L$(j.title,"title"),description:L$(j.description,"description"),dependsOn:j.dependsOn,assignee:j.assignee,createdBy:f.requesterId});return b(Q8,{action:"create",taskId:V.id,status:V.status,...X.length>0?{ignoredFields:X,note:`Ignored fields for action=create: ${X.join(", ")}`}:{}})}case"list":return b(Q8,{action:"list",tasks:f.runtime.listTaskItems({status:j.status,assignee:j.assignee})});case"claim":{let P=f.runtime.claimTask(L$(j.taskId,"taskId"),f.requesterId);return b(Q8,{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(L$(j.taskId,"taskId"),f.requesterId,L$(j.summary,"summary"));return b(Q8,{action:"complete",taskId:P.id,status:P.status})}case"block":{let P=f.runtime.blockTask(L$(j.taskId,"taskId"),f.requesterId,L$(j.reason,"reason"));return b(Q8,{action:"block",taskId:P.id,status:P.status})}}}}));let Q=new Map;return W.push(Hf({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:Wf(uQ),execute:async(Z)=>{let j=b(uQ,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 b(KW,{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 b(KW,{...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)=>b(KW,{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(Hf({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:Wf(wQ),execute:async(Z)=>{let j=b(wQ,Z),P=f.runtime.cancelRun(j.runId,j.reason);return b($y,{runId:P.id,status:P.status})}})),W.push(Hf({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:Wf(mQ),execute:async(Z)=>b(UW.array(),f.runtime.listRuns(b(mQ,Z)).map(GW))})),W.push(Hf({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:Wf(qQ),timeoutMs:tF,execute:async(Z)=>{let j=b(qQ,Z);if(j.runId){let V=await f.runtime.awaitRun(j.runId);return Yy(V),b(UW,GW(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 b(UW.array(),P.map(GW))}})),W.push(Hf({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:Wf(cQ),execute:async(Z)=>{let j=b(cQ,Z),P=f.runtime.sendMessage(f.requesterId,j.toAgentId,j.subject,j.body,j.taskId??void 0);return b(Py,{id:P.id,toAgentId:P.toAgentId})}})),W.push(Hf({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:Wf(bQ),execute:async(Z)=>{let j=b(bQ,Z),P=f.runtime.broadcast(f.requesterId,j.subject,j.body,{taskId:j.taskId??void 0});return b(fy,{delivered:P.length})}})),W.push(Hf({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:Wf(gQ),execute:async(Z)=>{let j=b(gQ,Z);return b(Qy.array(),f.runtime.listMailbox(f.requesterId,{unreadOnly:j.unreadOnly,markRead:!0}))}})),W.push(Hf({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:Wf(IQ),execute:async(Z)=>{let j=b(IQ,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 b(Zy,{id:P.id})}})),W.push(Hf({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:Wf(CQ),execute:async(Z)=>{if(b(CQ,Z),f.runtime.getMemberRole(f.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return f.runtime.cleanup(),b(Jy,{status:"cleaned"})}})),W.push(Hf({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:Wf(EQ),execute:async(Z)=>{let j=b(EQ,Z),P=f.runtime.createOutcome({title:j.title,requiredSections:j.requiredSections,createdBy:f.requesterId});return b(Hy,{outcomeId:P.id,status:P.status,requiredSections:P.requiredSections})}})),W.push(Hf({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:Wf(NQ),execute:async(Z)=>{let j=b(NQ,Z),P=f.runtime.attachOutcomeFragment({outcomeId:j.outcomeId,section:j.section,sourceAgentId:f.requesterId,sourceRunId:j.sourceRunId||void 0,content:j.content});return b(xQ,{fragmentId:P.id,status:P.status})}})),W.push(Hf({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:Wf(vQ),execute:async(Z)=>{let j=b(vQ,Z),P=f.runtime.reviewOutcomeFragment({fragmentId:j.fragmentId,reviewedBy:f.requesterId,approved:j.approved});return b(xQ,{fragmentId:P.id,status:P.status})}})),W.push(Hf({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:Wf(SQ),execute:async(Z)=>{let j=b(SQ,Z),P=f.runtime.finalizeOutcome(j.outcomeId);return b(Wy,{outcomeId:P.id,status:P.status})}})),W.push(Hf({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:Wf(kQ),execute:async(Z)=>{return b(kQ,Z),b(jy.array(),f.runtime.listOutcomes())}})),W}function y6(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 K6(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var By=[{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:r0({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[...D1]}],Ay={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function Ry(f){return f==="plan"||f==="yolo"?f:"act"}function sQ(f){let $=Ry(f.mode),J=bf[G0({mode:$})],H=U1(f.providerId??"",f.modelId??"",$,K1);return{mode:$,flags:{...J,...H,...typeof f.enableSpawnAgent==="boolean"?{enableSpawnAgent:f.enableSpawnAgent}:{},...typeof f.enableAgentTeams==="boolean"?{enableAgentTeams:f.enableAgentTeams}:{}}}}function tQ(f,$){if($.disabledToolIds?.has(f))return!1;let{flags:J}=sQ($);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=Ay[f];return H?J[H]===!0:!1}function Fy(f,$){if(f.id==="editor"){let{flags:J}=sQ($),H=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...f,defaultEnabled:tQ(f.id,$),headlessToolNames:[H?"apply_patch":"editor"]}}return{...f,defaultEnabled:tQ(f.id,$)}}function O$(f={}){return By.map(($)=>Fy($,f))}function U6(f={}){return O$(f).filter(($)=>$.defaultEnabled).map(($)=>$.id)}function G6(f){if(!f.enabled)return new Set;let $=O$(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 Z8(f,$={}){return O$($).filter((J)=>f.has(J.id)).flatMap((J)=>J.headlessToolNames)}function h6(f,$={}){return Z8(f,$)}function N$(f={}){let{executorOptions:$={},executors:J,...H}=f,W={...y1($),...J??{}};return u0({...H,executors:W})}import{mkdirSync as Ty,writeFileSync as Dy}from"node:fs";import{dirname as My}from"node:path";import{normalizeUserInput as _y}from"@cline/shared";import{nanoid as Ly}from"nanoid";var eQ={};N(eQ,{sanitizeSessionToken:()=>q$,parseTeamTaskSubSessionId:()=>L1,parseSubSessionId:()=>P8,makeTeamTaskSubSessionId:()=>j8,makeSubSessionId:()=>_1,deriveSubsessionStatus:()=>X8});import{nanoid as Uy}from"nanoid";function q$(f){return f.replace(/[^a-zA-Z0-9._-]+/g,"_")}function _1(f,$){let J=q$(f),H=q$($),W=`${J}__${H}`;return W.length>180?W.slice(0,180):W}function j8(f,$){let J=q$(f),H=q$($);return`${J}__teamtask__${H}__${Uy(6)}`}function L1(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 P8(f){if(L1(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 X8(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 n}from"zod";var fZ={};N(fZ,{SessionSource:()=>Vf,SESSION_STATUSES:()=>V8});import{SESSION_STATUS_VALUES as Gy}from"@cline/shared";var V8=Gy,Vf={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"};var hy=n.enum(V8),Gf=n.object({version:n.literal(1),session_id:n.string().min(1),source:n.string().min(1),pid:n.number().int(),started_at:n.string().min(1),ended_at:n.string().min(1).optional(),exit_code:n.number().int().nullable().optional(),status:hy,interactive:n.boolean(),provider:n.string().min(1),model:n.string().min(1),cwd:n.string().min(1),workspace_root:n.string().min(1),team_name:n.string().min(1).optional(),enable_tools:n.boolean(),enable_spawn:n.boolean(),enable_teams:n.boolean(),prompt:n.string().optional(),metadata:n.record(n.string(),n.unknown()).optional(),messages_path:n.string().min(1).optional()});function $Z(f){if(!f)return!1;return Object.values(f).some(($)=>typeof $==="function")}function TW(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 JZ(f){return JSON.stringify(f,($,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function h0(f){return typeof f==="string"&&f.trim()?f.trim():void 0}function hW(f,$){let J={...f};J.id=h0(J.id)??Ly();let H=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,W={id:h0(H?.id)??h0(J.modelId)??h0($?.id),provider:h0(H?.provider)??h0(J.providerId)??h0($?.provider),family:h0(H?.family)??h0($?.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 T6(f){return f.map(($)=>hW($))}function D6(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 hW(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]={...hW(P,{id:$.model.id,provider:$.model.provider,family:$.model.info?.family}),...X?{metrics:X}:{},ts:P.ts??$.endedAt.getTime()}}return H}function Y8(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 zy=120;function b$(f){let $=f?.trim();return $?$.slice(0,zy):void 0}function DW(f){let $=_y(f??"").trim();if(!$)return;return b$($.split(`
409
+ `)[0]?.trim())}function l0(f){if(!f)return;let $={...f},J=b$(typeof $.title==="string"?$.title:void 0);if(J)$.title=J;else delete $.title;return Object.keys($).length>0?$:void 0}function B8(f){let $=l0(f.metadata)??{},J=f.title!==void 0?b$(f.title):DW(f.prompt);if(J)$.title=J;return Object.keys($).length>0?$:void 0}function MW(f){let $=L1(f);if($)return{agent:"teammate",sessionId:$.rootSessionId,taskType:"team"};let J=P8(f);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:f}}function _W(f){return{version:1,updated_at:f.updatedAt,agent:f.context.agent,sessionId:f.context.sessionId,...f.context.taskType?{taskType:f.context.taskType}:{},messages:T6(f.messages),...f.systemPrompt?{system_prompt:f.systemPrompt}:{}}}function HZ(f,$,J){Ty(My(f),{recursive:!0}),Dy(f,`${JSON.stringify(_W({updatedAt:$,context:J,messages:[]}),null,2)}
410
+ `,"utf8")}function WZ(f,$){return Gf.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 QZ(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}}Kf();var ZZ={};N(ZZ,{summarizeUsageFromMessages:()=>A8,getCurrentContextSize:()=>LW,createInitialAccumulatedUsage:()=>p0,accumulateUsageTotals:()=>i0});function p0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function i0(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 z1(f){return typeof f==="number"&&Number.isFinite(f)?f:0}function A8(f){let $=p0();for(let J of f){let H=J.metrics;if(!H)continue;$=i0($,{inputTokens:z1(H.inputTokens),outputTokens:z1(H.outputTokens),cacheReadTokens:z1(H.cacheReadTokens),cacheWriteTokens:z1(H.cacheWriteTokens),totalCost:z1(H.cost)})}return $}function LW(f){for(let $=f.length-1;$>=0;$-=1){let J=f[$];if(J?.role!=="assistant")continue;let H=z1(J.metrics?.inputTokens);return H>0?H:void 0}return}function Oy(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 zW(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 T0(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 OW(f,$,J){let{sessionId:H,config:W,liveSession:Q,emit:Z}=f,j=W.telemetry,P=Q?.runtime.teamRuntime,X=J?.isPrimaryAgentEvent??!0,V=zW($),Y=T0({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=Oy($.input);if(B)v4(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(g4(j,{ulid:H,tool:B,autoApproved:void 0,success:A,modelId:W.modelId,provider:W.providerId,...Y}),!A&&(B==="editor"||B==="apply_patch"))u4(j,{ulid:H,modelId:W.modelId,provider:W.providerId,errorType:$.error,...Y})}if($.type==="notice"&&$.reason==="api_error")L2(j,{ulid:H,model:W.modelId,provider:W.providerId,errorMessage:$.message,...Y});if($.type==="error")L2(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,i0(Q.turnUsageBaseline,{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost})),Z1(j,{ulid:H,provider:W.providerId,model:W.modelId,source:"assistant",mode:W.mode,...Y}),I4(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:JZ($),ts:Date.now()}})}function n0(f){return f.workspaceRoot??f.cwd}import{hasRuntimeConfigExtension as wU}from"@cline/shared";function jZ(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 Ny(f){let J=new TextEncoder().encode(f),H=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(H)}function qy(f=32){let $=new Uint8Array(f);return crypto.getRandomValues($),jZ($)}async function M6(){let f=qy(),$=jZ(await Ny(f));return{verifier:f,challenge:$}}function _6(f){return f.endsWith("/")?f.slice(0,-1):f}function w$(f,$){return new URL($,`${_6(f)}/`).toString()}function O1(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 by(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 Ff(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=by(W);if(!Q)return null;return JSON.parse(Q)}catch{return null}}function N1(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 C$(f,$){return Date.now()>=f.expires-$}async function q1(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 O1($,f.parseOptions);if(await H,J)throw J;if($)return O1($,f.parseOptions);return{}}F0();import{existsSync as PK}from"node:fs";import{discoverPluginModulePaths as XK,resolveConfiguredPluginModulePaths as VK,resolvePluginConfigSearchPaths as YK}from"@cline/shared/storage";import{resolve as cy}from"node:path";import{normalizePluginManifest as dy}from"@cline/shared";import{existsSync as a0,readFileSync as bW}from"node:fs";import{builtinModules as wy,createRequire as PZ}from"node:module";import{dirname as z6,extname as XZ,isAbsolute as Cy,resolve as yf}from"node:path";import{fileURLToPath as VZ}from"node:url";import{PLUGIN_FILE_EXTENSIONS as Ey}from"@cline/shared";var Sy=z6(VZ(import.meta.url)),YZ=PZ(import.meta.url),ky=yf(Sy,"..","..","..","..",".."),NW=my(ky),wW=new Set(wy.flatMap((f)=>[f,f.replace(/^node:/,"")])),L6=new Set(Ey);function my(f){let $={},J={"@cline/agents":yf(f,"packages/agents/src/index.ts"),"@cline/core":yf(f,"packages/core/src/index.ts"),"@cline/llms":yf(f,"packages/llms/src/index.ts"),"@cline/shared":yf(f,"packages/shared/src/index.ts"),"@cline/shared/storage":yf(f,"packages/shared/src/storage/index.ts"),"@cline/shared/db":yf(f,"packages/shared/src/db/index.ts")};for(let[H,W]of Object.entries(J))if(a0(W))$[H]=W;return $}function BZ(f){return!(f.startsWith(".")||f.startsWith("/")||f.startsWith("file:")||f.startsWith("data:")||f.startsWith("http:")||f.startsWith("https:"))}function qW(f){if(f.startsWith("@")){let[$,J]=f.split("/",3);return J?`${$}/${J}`:f}return f.split("/",1)[0]??f}function AZ(f,$){let J=qW($),H=z6(f);while(!0){let W=yf(H,"node_modules",J);if(a0(W)||a0(yf(W,"package.json")))return!0;let Q=yf(H,"..");if(Q===H)return!1;H=Q}}function Iy(f){try{return YZ.resolve(f),!0}catch{return!1}}function xy(f){try{return YZ.resolve(f)}catch{return null}}function gy(f){let J=z6(f);for(let H=0;H<4;H++){let W=yf(J,"package.json");if(a0(W))try{let Z=JSON.parse(bW(W,"utf8"));return Z!=null&&typeof Z==="object"&&"cline"in Z}catch{return!1}let Q=yf(J,"..");if(Q===J)return!1;J=Q}return!1}function vy(f,$){let J=$.startsWith("file:")?VZ($):Cy($)?$:yf(z6(f),$);if(a0(J)&&L6.has(XZ(J)))return J;for(let H of L6){let W=`${J}${H}`;if(a0(W))return W}for(let H of L6){let W=yf(J,`index${H}`);if(a0(W))return W}return null}function RZ(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 FZ(f,$,J=new Set){if(J.has(f)||!a0(f))return;if(J.add(f),!L6.has(XZ(f)))return;let H=bW(f,"utf8");for(let W of RZ(H)){if(W.startsWith("node:")||wW.has(W))continue;if(BZ(W)){if(Object.hasOwn(NW,W)||Object.hasOwn(NW,qW(W))||AZ(f,W)||$&&Iy(W))continue;throw Error(`Cannot find module '${qW(W)}'`)}let Q=vy(f,W);if(Q)FZ(Q,$,J)}}function uy(f,$){let J=PZ(f),H={};for(let[W,Q]of Object.entries(NW)){try{J.resolve(W);continue}catch{}H[W]=Q}if($){let W=bW(f,"utf8");for(let Q of RZ(W)){if(!BZ(Q)||Q.startsWith("node:")||wW.has(Q)||Object.hasOwn(H,Q)||AZ(f,Q))continue;let Z=xy(Q);if(Z)H[Q]=Z}}return H}async function yZ(f,$={}){let J=!gy(f);FZ(f,J);let H=uy(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:[...wW],transformModules:Object.keys(H)}).import(f,{})}function KZ(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 UZ(f){return typeof f==="object"&&f!==null}function CW(f){return Array.isArray(f)&&f.every(($)=>typeof $==="string")}function ry(f,$){if(!UZ(f.manifest))throw Error(`Invalid plugin module at ${$}: missing required "manifest"`);if(!CW(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")&&!CW(f.manifest.providerIds))throw Error(`Invalid plugin module at ${$}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn(f.manifest,"modelIds")&&!CW(f.manifest.modelIds))throw Error(`Invalid plugin module at ${$}: manifest.modelIds must be a string array when provided`)}function ly(f,$){if(!UZ(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"`);ry(f,$)}async function R8(f,$={}){let J=cy($.cwd??process.cwd(),f),H=await yZ(J,{useCache:$.useCache}),W=$.exportName??"plugin",Q=H.default??H[W];ly(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:dy(Z.manifest),setup:P}}async function O6(f,$={}){return(await D0(f,$)).plugins}async function D0(f,$={}){let J=[],H=[],W=new Map,Q=0;for(let Z of f)try{let j=await R8(Z,$);if(!KZ(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 ty}from"node:fs";import{createRequire as sy}from"node:module";import{dirname as oy,join as N6}from"node:path";import{fileURLToPath as ey}from"node:url";var MZ={};N(MZ,{resolveSubprocessRuntimeExecutable:()=>EW,buildSubprocessSandboxCommand:()=>DZ,SubprocessSandbox:()=>b1,CLINE_JS_RUNTIME_PATH_ENV:()=>TZ});import{spawn as py}from"node:child_process";import{basename as iy}from"node:path";import{augmentNodeCommandForDebug as ny,withResolvedClineBuildEnv as ay}from"@cline/shared";function GZ(f){if(f instanceof Error)return f;return Error(String(f))}var TZ="CLINE_JS_RUNTIME_PATH";function hZ(f){let $=f?.trim();if(!$)return!1;let J=iy($).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function EW(f={}){let $=f.env??process.env,J=f.runtimeExecutable?.trim()||$[TZ]?.trim();if(J)return J;let H=f.execPath?.trim()||process.execPath;if(hZ(H))return H;for(let W of[$.BUN_EXEC_PATH,$.npm_node_execpath,$.NODE]){let Q=W?.trim();if(Q&&hZ(Q))return Q}return"node"}function DZ(f,$={}){let J=EW({env:$.env,execPath:$.execPath,runtimeExecutable:$.runtimeExecutable});return ny([J,...f],{env:$.env,execArgv:$.execArgv,debugRole:$.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class b1{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??""],$=DZ(f,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=py($[0]??EW(this.options),$.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:ay(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: ${GZ(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}": ${GZ(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 fK(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 q6(f){return(f instanceof Error?f.message:String(f)).includes("Unknown sandbox plugin id:")}function $K(){let f=oy(ey(import.meta.url)),$=sy(import.meta.url),J=[N6(f,"plugin-sandbox-bootstrap.js"),N6(f,"extensions","plugin-sandbox-bootstrap.js"),N6(f,"agents","plugin-sandbox-bootstrap.js")];for(let Q of J)if(ty(Q))return{file:Q};let H=N6(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(`
411
+ `)}}var SW=$K();function kW(f,$){return typeof f==="number"&&f>0?f:$}async function LZ(f){let $=new b1({name:"plugin-sandbox",..."file"in SW?{bootstrapFile:SW.file}:{bootstrapScript:SW.script},onEvent:f.onEvent}),J=kW(f.importTimeoutMs,4000),H=kW(f.hookTimeoutMs,3000),W=kW(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(fK).map((Y)=>{let B={name:Y.name,manifest:Y.manifest,setup:(A)=>{JK(A,$,Y,W,j),HK(A,$,Y,W,j),QK(A,$,Y,W,j),WK(A,Y)}};return B.hooks=jK($,Y,H,j),B}),failures:P.failures,shutdown:async()=>{await $.shutdown()},warnings:P.warnings}}function JK(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(!q6(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 HK(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(!q6(j))throw j;return await W(),await $.call("executeCommand",{pluginId:J.pluginId,contributionId:Q.id,input:Z},{timeoutMs:H})}}})}function WK(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 QK(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 _Z(j)?j:Z}catch(j){if(!q6(j))throw j;await W();let P=await $.call("buildMessages",{pluginId:J.pluginId,contributionId:Q.id,messages:Z},{timeoutMs:H});return _Z(P)?P:Z}}})}function _Z(f){return Array.isArray(f)&&f.every(($)=>typeof $==="object"&&$!==null&&("role"in $)&&("content"in $))}function ZK(f,$,J,H,W){return async(Q)=>{try{return await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:H})}catch(Z){if(!q6(Z))throw Z;return await W(),await f.call("invokeHook",{pluginId:$,hookName:J,payload:Q},{timeoutMs:H})}}}function jK(f,$,J,H){let W={};for(let Q of $.hooks??[])W[Q]=ZK(f,$.pluginId,Q,J,H);return Object.keys(W).length>0?W:void 0}function F8(f){return YK(f)}function y8(f){return XK(f)}function E$(f={}){let $=f.cwd??process.cwd(),J=F8(f.workspacePath).flatMap((Z)=>y8(Z)).filter((Z)=>PK(Z)),H=VK(f.pluginPaths??[],$),W=[],Q=new Set;for(let Z of[...H,...J]){if(Q.has(Z))continue;Q.add(Z),W.push(Z)}return a4(W)}async function w1(f={}){let $=E$(f);if($.length===0)return{extensions:[],failures:[],warnings:[]};if(f.mode==="in_process"){let H=await D0($,{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 LZ({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}}import{execFile as BK}from"node:child_process";import{promisify as AK}from"node:util";var RK=AK(BK);function mW(f,$){f?.log($,{severity:"warn"})}function FK(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 S$(f,$){let J=await RK("git",["-C",f,...$],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function IW(f,$){if(!f)return;let J=`refs/cline/checkpoints/${$}/`;try{let{stdout:H}=await S$(f,["for-each-ref","--format=%(refname)",J]),W=H.trim().split(`
412
+ `).filter(Boolean);await Promise.allSettled(W.map((Q)=>S$(f,["update-ref","-d",Q])))}catch{}}async function zZ(f,$,J){if(!f||J.length===0)return;await Promise.allSettled(J.map((H)=>S$(f,["update-ref",`refs/cline/checkpoints/${$}/${H.runCount}`,H.ref])))}function yK(f,$){let J=f.findIndex((H)=>H.runCount===$.runCount);if(J<0)return[...f,$];return f.map((H,W)=>W===J?$:H)}function OZ(f){let $=f.initialRunCount??0,J,H=async()=>{if(J!==void 0)return J;try{J=(await S$(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 S$(f.cwd,["rev-parse","HEAD"])).stdout.trim();if(!Y)return;return{ref:Y,createdAt:Date.now(),runCount:$,kind:"commit"}}catch(V){mW(f.logger,`${X}: ${V instanceof Error?V.message:String(V)}`);return}},Z=`cline checkpoint session=${f.sessionId} run=${$}`,j="";try{j=(await S$(f.cwd,["stash","create",Z])).stdout.trim()}catch(X){return mW(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 S$(f.cwd,["update-ref",P,j])}catch(X){mW(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=FK(j);if(P?.latest.ref===Z.ref)return;let X=yK(P?.history??[],Z);await f.writeSessionMetadata({...j??{},checkpoint:{latest:Z,history:X}});return}}}import{spawn as LK}from"node:child_process";import{appendFileSync as zK,readFileSync as OK}from"node:fs";import{join as NK}from"node:path";import{augmentNodeCommandForDebug as bZ,withResolvedClineBuildEnv as vW}from"@cline/shared";import{ensureHookLogDir as NZ}from"@cline/shared/storage";function C1(f,$){if(!$)return;return{name:f,manifest:{capabilities:["hooks"]},hooks:$}}import{existsSync as KK,readdirSync as UK}from"node:fs";import{basename as GK,extname as hK,join as TK}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as b6,resolveHooksConfigSearchPaths as DK}from"@cline/shared/storage";function K8(f){return DK(f)}var E1;((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"})(E1||={});var U8={["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"},MK=new Map(Object.values(E1).map((f)=>[f.toLowerCase(),f])),_K=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function G8(f){let $=hK(f).toLowerCase();if(!_K.has($))return;let J=GK(f,$).trim().toLowerCase();return MK.get(J)}function t0(f){let $=[],J=new Set,H=K8(f).filter((W)=>KK(W));for(let W of H)try{for(let Q of UK(W,{withFileTypes:!0})){if(!Q.isFile())continue;let Z=G8(Q.name);if(!Z)continue;let j=TK(W,Q.name);if(J.has(j))continue;J.add(j),$.push({fileName:Z,hookEventName:U8[Z],path:j})}}catch{}return $.sort((W,Q)=>W.path.localeCompare(Q.path))}function C6(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 w6(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 qK(f,$){if(!$)return f;if(!f)return{...$};let J=[f.context,$.context].filter((W)=>typeof W==="string"&&W.length>0).join(`
413
+ `),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 bK(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 xW(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function Yf(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 wK(f){let $=f.trim();if(!$)return{};let H=$.split(`
414
+ `).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 CK(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 wZ(f,$){if($.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await qZ(f,$)}catch(J){let H=kK($.command,process.platform,J);if(!H)throw J;return await qZ(f,{...$,command:H})}}async function qZ(f,$){let J=bZ($.command,{env:$.env,debugRole:"hook"}),H=LK(J[0],J.slice(1),{cwd:$.cwd,env:vW($.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 CK(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}=wK(j);B({exitCode:A,stdout:j,stderr:P,parsedJson:R,parseError:U,timedOut:X})})});return await Promise.race([Y,Q])}function EK(f){try{let J=OK(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 SK(f){return!!(f&&typeof f==="object"&&("code"in f)&&f.code==="ENOENT")}function kK(f,$=process.platform,J){if($!=="win32"||!SK(J))return;if(f[0]!=="py"||f[1]!=="-3")return;return["python",...f.slice(2)]}function CZ(f){if(f.length===0)return;let[$,...J]=f,H=$.replace(/\\/g,"/").toLowerCase(),W=H.split("/").at(-1)??H;if(W==="env")return CZ(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 mK(f){let $=EK(f);if($&&$.length>0)return[...CZ($)??$,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 bZ(["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 IK(f){let $={};for(let J of t0(f)){if(!J.hookEventName)continue;let H=J.hookEventName,W=$[H]??[];W.push(mK(J.path)),$[H]=W}return $}async function xK(f){let $;for(let J of f.commands){let H=J.join(" ");try{let W=await wZ(f.payload,{command:J,cwd:f.cwd,env:vW(process.env),detached:!1,timeoutMs:f.timeoutMs});if(W?.timedOut){w6(f.logger,`hook command timed out: ${H}`);continue}if(W?.parseError){w6(f.logger,`hook command returned invalid JSON control output: ${H} (${W.parseError})`);continue}$=qK($,bK(W?.parsedJson))}catch(W){w6(f.logger,`hook command failed: ${H}`,W)}}return $}function k$(f){for(let $ of f.commands){let J=$.join(" ");wZ(f.payload,{command:$,cwd:f.cwd,env:vW(process.env),detached:!0}).catch((H)=>{w6(f.logger,`hook command failed: ${J}`,H)})}}function s0(f){return{agentId:f.agentId,conversationId:f.conversationId??f.runId??f.agentId,parentAgentId:f.parentAgentId??null}}function gW(f,$){return{...s0(f.snapshot),userMessage:$}}function EZ(f){return{...s0(f.snapshot),iteration:f.snapshot.iteration,call:{id:f.toolCall.toolCallId,name:f.toolCall.toolName,input:f.input}}}function SZ(f){return{...s0(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 kZ(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function gK(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 S1(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})}
415
+ `,Z=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??NK(NZ(),"hooks.jsonl");NZ(Z),zK(Z,W,"utf8")};return{beforeRun:async(H)=>{let W=gW(H,"");J({...Yf(W,$),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(H)=>{let W=EZ(H);J({...Yf(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:C6(W.call.input)}});return},afterTool:async(H)=>{let W=SZ(H);J({...Yf(W,$),hookName:"tool_result",iteration:W.iteration,tool_result:W.record,postToolUse:{toolName:W.record.name,parameters:C6(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=s0(H);if(W.status==="completed"){J({...Yf(Q,$),hookName:"agent_end",iteration:W.iterations,turn:{outputText:W.outputText,status:W.status},taskComplete:{taskMetadata:{}}});return}if(W.status==="aborted"||xW(W.error?.message)){J({...Yf(Q,$),hookName:"agent_abort",reason:W.error?.message,taskCancel:{taskMetadata:{}}});return}if(W.error)J({...Yf(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=gW({snapshot:H.snapshot},kZ(H.message.content));J({...Yf(W,$),hookName:"prompt_submit",userPromptSubmit:{prompt:W.userMessage,attachments:[]}})}}}function h8(f){let $=IK(f.workspacePath);if(!Object.values($).some((Y)=>Y.length>0))return;let H=async(Y,B)=>{let A=$[B]??[];if(A.length===0)return;k$({commands:A,cwd:f.cwd,logger:f.logger,payload:B==="agent_resume"?{...Yf(Y,f),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...Yf(Y,f),hookName:B,taskStart:{taskMetadata:{}}}})},W=async(Y)=>{let B=$.prompt_submit??[];if(B.length>0)k$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Yf(Y,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Y.userMessage,attachments:[]}}})},Q=async(Y)=>{let B=$.tool_call??[];if(B.length===0)return;return xK({commands:B,cwd:f.cwd,logger:f.logger,timeoutMs:f.toolCallTimeoutMs??120000,payload:{...Yf(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:C6(Y.call.input)}}})},Z=async(Y)=>{let B=$.tool_result??[];if(B.length===0)return;k$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Yf(Y,f),hookName:"tool_result",iteration:Y.iteration,tool_result:Y.record,postToolUse:{toolName:Y.record.name,parameters:C6(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;k$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Yf(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;k$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Yf(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(xW(Y.reason)){let A=$.agent_abort??[];if(A.length>0)k$({commands:A,cwd:f.cwd,logger:f.logger,payload:{...Yf(Y,f),hookName:"agent_abort",reason:Y.reason,taskCancel:{taskMetadata:{}}}})}let B=$.session_shutdown??[];if(B.length===0)return;k$({commands:B,cwd:f.cwd,logger:f.logger,payload:{...Yf(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(s0(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(gW({snapshot:Y.snapshot},kZ(Y.message.content)))}}if(($.tool_call?.length??0)>0)V.beforeTool=async(Y)=>{let B=await Q(EZ(Y));return gK(B)};if(($.tool_result?.length??0)>0)V.afterTool=async(Y)=>{await Z(SZ(Y));return};if(($.agent_end?.length??0)>0)V.afterRun=async({snapshot:Y,result:B})=>{if(B.status!=="completed")return;await j({...s0(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"||xW(R.error?.message)){await X({...s0(A),reason:R.error?.message});return}if(R.error)await P({...s0(A),iteration:R.iterations,error:R.error})}}return V}function k1(f){return C1("core.hook_config_files",h8(f))}function m$(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 I$(f){let $=f.filter((J)=>J!==void 0);if($.length===0)return;return{beforeRun:m$($,"beforeRun"),afterRun:m$($,"afterRun"),beforeModel:m$($,"beforeModel"),afterModel:m$($,"afterModel"),beforeTool:m$($,"beforeTool"),afterTool:m$($,"afterTool"),onEvent:m$($,"onEvent")}}var mZ={};N(mZ,{normalizeRuntimeCapabilities:()=>Bf});function Bf(...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}:{}}}var eZ={};N(eZ,{toProviderConfig:()=>Cf,emptyStoredProviderSettings:()=>$$,StoredProviderSettingsSchema:()=>u1,StoredProviderSettingsEntrySchema:()=>PJ,ProviderSettingsSchemaTyped:()=>q8});import{z as f$}from"zod";var oZ={};N(oZ,{toProviderConfig:()=>Cf,safeParseSettings:()=>jJ,safeCreateProviderConfig:()=>H5,parseSettings:()=>ZJ,normalizeProviderId:()=>v1,isBuiltInProviderId:()=>$5,createProviderConfig:()=>J5,SapSettingsSchema:()=>HJ,ReasoningSettingsSchema:()=>e6,ProviderSettingsSchema:()=>e0,ProviderProtocolSchema:()=>t6,ProviderIdSchema:()=>N8,ProviderClientSchema:()=>s6,OcaSettingsSchema:()=>WJ,ModelCatalogSettingsSchema:()=>QJ,GcpSettingsSchema:()=>$J,BUILT_IN_PROVIDER_IDS:()=>f5,BUILT_IN_PROVIDER:()=>O8,AzureSettingsSchema:()=>JJ,AwsSettingsSchema:()=>fJ,AuthSettingsSchema:()=>o6});import*as wf from"@cline/llms";import{z as _}from"zod";Kf();var lZ={};N(lZ,{refreshOcaToken:()=>D8,loginOcaOAuth:()=>x1,getValidOcaCredentials:()=>M8,generateOcaOpcRequestId:()=>u6,createOcaRequestHeaders:()=>rW,createOcaOAuthProvider:()=>dW,OCI_HEADER_OPC_REQUEST_ID:()=>g6,DEFAULT_INTERNAL_OCA_BASE_URL:()=>m1,DEFAULT_INTERNAL_IDCS_URL:()=>S6,DEFAULT_INTERNAL_IDCS_SCOPES:()=>k6,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>E6,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>I1,DEFAULT_EXTERNAL_IDCS_URL:()=>I6,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>x6,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>m6});import{nanoid as xZ}from"nanoid";class uW{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 IZ={};N(IZ,{startLocalOAuthServer:()=>M0});function vK(){let f;return{promise:new Promise((J)=>{f=J}),resolve:f}}async function M0(f){let $=await import("node:http"),J=f.host??"127.0.0.1",H=f.timeoutMs??300000,W=f.successHtml??uK,Q=vK(),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 uK=`<!DOCTYPE html>
416
+ <html lang="en">
417
+ <head>
418
+ <meta charset="utf-8">
419
+ <meta name="viewport" content="width=device-width, initial-scale=1">
420
+ <title>Authentication Successful</title>
421
+ <style>
422
+ * { margin: 0; padding: 0; box-sizing: border-box; }
423
+ body {
424
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
425
+ min-height: 100vh;
426
+ display: flex;
427
+ align-items: center;
428
+ justify-content: center;
429
+ background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
430
+ color: #fff;
431
+ }
432
+ .container { text-align: center; padding: 48px; max-width: 420px; }
433
+ .icon {
434
+ width: 72px; height: 72px; margin: 0 auto 24px;
435
+ background: linear-gradient(135deg, #10a37f 0%, #1a7f64 100%);
436
+ border-radius: 50%;
437
+ display: flex; align-items: center; justify-content: center;
438
+ }
439
+ .icon svg { width: 36px; height: 36px; stroke: #fff; stroke-width: 3; fill: none; }
440
+ h1 { font-size: 24px; font-weight: 600; margin-bottom: 12px; }
441
+ p { font-size: 15px; color: rgba(255,255,255,0.7); line-height: 1.5; }
442
+ .closing { margin-top: 32px; font-size: 13px; color: rgba(255,255,255,0.5); }
443
+ </style>
444
+ </head>
445
+ <body>
446
+ <div class="container">
447
+ <div class="icon">
448
+ <svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"></polyline></svg>
449
+ </div>
450
+ <h1>Authentication Successful</h1>
451
+ <p>You're now signed in. You can close this window.</p>
452
+ <p class="closing">This window will close automatically...</p>
453
+ </div>
454
+ <script>setTimeout(() => window.close(), 3000);</script>
455
+ </body>
456
+ </html>`;var E6="a8331954c0cf48ba99b5dd223a14c6ea",S6="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",k6="openid offline_access",m1="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",m6="c1aba3deed5740659981a752714eba33",I6="https://login-ext.identity.oraclecloud.com",x6="openid offline_access",I1="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",g6="opc-request-id",cK="/auth/oca",dK=Array.from({length:11},(f,$)=>48801+$),rK=300000,lK=30000,gZ=30000,pK=600000;class v6 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 o0={internal:{clientId:E6,idcsUrl:S6,scopes:k6,baseUrl:m1},external:{clientId:m6,idcsUrl:I6,scopes:x6,baseUrl:I1}},T8=new Map,iK=86400000,nK=300000,aK=32,cW=new uW(iK,aK);function vZ(f){if(typeof f==="function")return f();return f??"internal"}function uZ(f){return{internal:{clientId:f?.internal?.clientId??o0.internal.clientId,idcsUrl:f?.internal?.idcsUrl??o0.internal.idcsUrl,scopes:f?.internal?.scopes??o0.internal.scopes,baseUrl:f?.internal?.baseUrl??o0.internal.baseUrl},external:{clientId:f?.external?.clientId??o0.external.clientId,idcsUrl:f?.external?.idcsUrl??o0.external.idcsUrl,scopes:f?.external?.scopes??o0.external.scopes,baseUrl:f?.external?.baseUrl??o0.external.baseUrl}}}function tK(f=Date.now()){let $=f-pK;for(let[J,H]of T8.entries())if(H.createdAt<$)T8.delete(J)}function sK(f,$,J){if(typeof f.expires_in==="number"&&f.expires_in>0)return Date.now()+f.expires_in*1000;let W=Ff($)?.exp;if(typeof W==="number"&&W>0)return W*1000;let Z=Ff(J)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;return Date.now()+3600000}function cZ(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=Ff(f.id_token),Z=Ff(H),j=Q?.sub??Z?.sub,P=Q?.email??Z?.email;return{access:H,refresh:W,expires:sK(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 dZ(f,$){let J=_6(f),H=cW.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 cW.set(J,P,Date.now(),nK),P}let j=(await Q.json()).token_endpoint||`${J}/oauth2/v1/token`;return cW.set(J,j),j}function rZ(f){return{code:f.error,message:f.error_description}}async function oK(f){let $=T8.get(f.state);if(!$)throw Error("No PKCE verifier found for this state");T8.delete(f.state);let J=f.mode==="external"?f.config.external:f.config.internal,H=await dZ(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=rZ(Z);throw new v6(`Token exchange failed: ${Q.status}${P.message?` - ${P.message}`:""}`,{status:Q.status,errorCode:P.code})}let j=Ff(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 cZ(Z,f.mode)}function eK(f){let $=f.mode==="external"?f.config.external:f.config.internal,J=new URL(`${_6($.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 x1(f){Y0(f.telemetry,"oca");let $=uZ(f.config),J=vZ(f.mode),H=f.callbackPorts?.length?f.callbackPorts:dK,W=f.callbackPath??cK,Q=f.requestTimeoutMs??gZ,Z=await M0({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=xZ(16),X=xZ(16),{verifier:V,challenge:Y}=await M6();tK(),T8.set(P,{verifier:V,nonce:X,mode:J,redirectUri:j,createdAt:Date.now()});let B=eK({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 q1({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 oK({code:R,state:U,mode:J,config:$,requestTimeoutMs:Q});return B0(f.telemetry,"oca"),R0(f.telemetry,{id:y.accountId,email:y.email,provider:"oca"}),y}catch(A){throw A0(f.telemetry,"oca",A instanceof Error?A.message:String(A)),A}finally{Z.close()}}async function D8(f,$={}){let J=uZ($.config),H=$.requestTimeoutMs??gZ,W=f.metadata?.mode,Q=W==="internal"||W==="external"?W:vZ($.mode),Z=Q==="external"?J.external:J.internal,j=await dZ(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=rZ(V);throw new v6(`Token refresh failed: ${X.status}${Y.message?` - ${Y.message}`:""}`,{status:X.status,errorCode:Y.code})}return cZ(V,Q,f)}async function M8(f,$,J){if(!f)return null;let H=$?.refreshBufferMs??J?.refreshBufferMs??rK,W=$?.retryableTokenGraceMs??J?.retryableTokenGraceMs??lK;if($?.forceRefresh!==!0&&!C$(f,H))return f;try{return await D8(f,J)}catch(Z){if(Z instanceof v6&&Z.isLikelyInvalidGrant())return C0(J?.telemetry,"oca","invalid_grant"),null;if(f.expires-Date.now()>W)return f;return null}}function dW(f={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login($){return x1({...f,callbacks:$})},async refreshToken($){return D8($,f)},getApiKey($){return $.access}}}async function u6(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 rW(f){let $=await u6(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",[g6]:$}}var sZ={};N(sZ,{resolveProviderConfig:()=>z8,getProviderConfig:()=>a6,getLiveModelsCatalog:()=>g1,clearPublicModelsCatalogCache:()=>GU,clearPrivateModelsCatalogCache:()=>eW,clearLiveModelsCatalogCache:()=>oW,OPENAI_COMPATIBLE_PROVIDERS:()=>L8,DEFAULT_MODELS_CATALOG_URL:()=>i6});import*as Af from"@cline/llms";function lW(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 fU(f,$){let J=lW(f);if(J.length>0)return J;if(!f||typeof f!=="object")return[];let H=f,W=lW(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=lW(Q.models??Q);if(j.length>0)return j}return[]}async function c6(f,$){let J=await fetch(f,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${f}: HTTP ${J.status}`);return fU(await J.json(),$)}function pZ(f){return f.replace(/\/+$/,"")}function d6(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=pZ(Z.pathname),X=pZ(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 $U(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{...J}]))}function JU(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 HU=Object.values(Af.MODEL_COLLECTIONS_BY_PROVIDER_ID).map((f)=>({id:f.provider.id,baseUrl:f.provider.baseUrl??"",modelsSourceUrl:f.provider.modelsSourceUrl,modelId:f.provider.defaultModelId,knownModels:$U(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})),iZ=Object.fromEntries(HU.map((f)=>[f.id,f]));function WU(f){return iZ[f]}function QU(){return Object.fromEntries(Object.entries(iZ).filter(([,f])=>JU(f)))}function nZ(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 i6="https://models.dev/api.json",ZU=600000,aZ=300000,jU=5000,p6=new Map,_8=new Map,iW=new Map,r6=new Map;async function PU(){return Af.getGeneratedProviderModels()}async function XU(f,$={},J={},H={},W={},Q={}){let Z=await PU(),j=Af.resolveProviderModelCatalogKeys(f),P=Object.assign({},...j.map((Y)=>Z[Y]??{})),X=Boolean(Af.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl),V=Object.keys(W).length>0;if(X&&V)return Af.sortModelsByReleaseDate({...W,...Q});return Af.sortModelsByReleaseDate({...P,...$,...J,...H,...W,...Q})}function VU(f,$){let J=Af.resolveProviderModelCatalogKeys(f);return Object.assign({},...J.map((H)=>$[H]??{}))}function aW(f){let $=f?.trim();return $&&$.length>0?$:""}function tW(f){let $=f.apiKey?.trim()||f.accessToken?.trim();return $&&$.length>0?$:void 0}function YU(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 BU(f,$){return`${f}:${aW($.baseUrl)}:${YU(tW($)??"")}`}async function sW(f,$,J=jU){let H=new AbortController,W=setTimeout(()=>H.abort(),J);try{return await fetch(f,{...$,signal:H.signal})}finally{clearTimeout(W)}}function pW(f,$,J){if(J&&!f.includes($))f.push($)}function n6(f,$){let J=["streaming","tools"];return pW(J,"images",Boolean($.supportsImages)),pW(J,"prompt-cache",Boolean($.supportsPromptCache)),pW(J,"reasoning",Boolean($.supportsReasoning)),{id:f,name:$.name??f,contextWindow:$.contextWindow,maxTokens:$.maxTokens,capabilities:J,releaseDate:$.releaseDate,status:"active"}}async function AU(f,$){let J=await sW("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]=n6(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 RU(f,$){let J=await sW("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]=n6(j,{name:j,contextWindow:128000,supportsImages:!0,supportsPromptCache:!0})}return Q}function FU(f){let $=aW(f);if(!$)return"http://localhost:4000";return $.endsWith("/v1")?$.slice(0,-3):$}async function yU(f,$){let H=`${FU(f.baseUrl)}/v1/model/info`,W=async(X)=>sW(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=n6(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 tZ={baseten:AU,hicap:RU,litellm:yU},nW=new Map,l6=new Map;function KU(f,$){return`${f}:${aW($.baseUrl)}`}async function UU(f,$,J){let H=Af.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],W=d6(J.baseUrl,H?.provider.baseUrl,H?.provider.modelsSourceUrl);if(!W)return{};let Q=$?.cacheTtlMs??aZ,Z=KU(f,J),j=Date.now(),P=nW.get(Z);if(P&&P.expiresAt>j)return P.data;let X=l6.get(Z);if(X)return X;let V=c6(W,f).then((Y)=>{let B=Object.fromEntries(Y.map((A)=>[A,n6(A,{name:A})]));return nW.set(Z,{data:B,expiresAt:j+Q}),B}).finally(()=>{l6.delete(Z)});return l6.set(Z,V),V}function GU(){nW.clear(),l6.clear()}async function hU(f,$){let J=tW($);if(!J)return{};let H=tZ[f];if(!H)return{};return H($,J)}function TU(f,$,J){if(!J)return!1;if(!tZ[f])return!1;if($?.loadPrivateOnAuth===!1)return!1;return Boolean(tW(J))}async function DU(f,$,J){let H=$?.cacheTtlMs??aZ,W=BU(f,J),Q=Date.now(),Z=iW.get(W);if(Z&&Z.expiresAt>Q)return Z.data;let j=r6.get(W);if(j)return j;let P=hU(f,J).then((X)=>{return iW.set(W,{data:X,expiresAt:Q+H}),X}).finally(()=>{r6.delete(W)});return r6.set(W,P),P}async function MU(f){return Af.fetchModelsDevProviderModels(f)}async function g1(f={}){let $=f.url??i6,J=f.cacheTtlMs??ZU,H=Date.now(),W=p6.get($);if(W&&W.expiresAt>H)return W.data;let Q=_8.get($);if(Q)return Q;let Z=MU($).then((j)=>{return p6.set($,{data:j,expiresAt:H+J}),j}).finally(()=>{_8.delete($)});return _8.set($,Z),Z}function oW(f){if(f){p6.delete(f),_8.delete(f);return}p6.clear(),_8.clear()}function eW(){iW.clear(),r6.clear()}function _U(f){return Object.fromEntries(Object.entries(f).map(([$,J])=>[$,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:nZ(J.capabilities)}]))}var L8=_U(QU());function a6(f){let $=WU(f);if(!$||!$.baseUrl)return;return{baseUrl:$.baseUrl,modelId:$.modelId,knownModels:$.knownModels,capabilities:nZ($.capabilities)}}async function z8(f,$,J){let H=a6(f);if(!H)return;try{let W=$?.loadLatestOnInit?await g1($):void 0,Q=W?VU(f,W):{},Z=J&&TU(f,$,J)?await DU(f,$,J):{},P=Boolean(Af.MODEL_COLLECTIONS_BY_PROVIDER_ID[f]?.provider.modelsSourceUrl)?J??{providerId:f,modelId:H.modelId,baseUrl:H.baseUrl}:J,X=P?await UU(f,$,P).catch(()=>({})):{},V=await XU(f,H.knownModels,Q,Z,X,J?.knownModels);return{...H,knownModels:V}}catch(W){if($?.failOnError)throw W;return H}}var O8=wf.BUILT_IN_PROVIDER,f5=wf.BUILT_IN_PROVIDER_IDS,$5=wf.isBuiltInProviderId,v1=wf.normalizeProviderId,N8=_.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),t6=_.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),s6=_.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),o6=_.object({apiKey:_.string().optional(),accessToken:_.string().optional(),refreshToken:_.string().optional(),expiresAt:_.number().int().positive().optional(),accountId:_.string().optional()}),LU=_.enum(["none","low","medium","high","xhigh"]),e6=_.object({enabled:_.boolean().optional(),effort:LU.optional(),budgetTokens:_.number().int().positive().optional()}),fJ=_.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()}),$J=_.object({projectId:_.string().optional(),region:_.string().optional()}),JJ=_.object({apiVersion:_.string().optional(),useIdentity:_.boolean().optional()}),HJ=_.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()}),WJ=_.object({mode:_.enum(["internal","external"]).optional(),usePromptCache:_.boolean().optional()}),QJ=_.object({loadLatestOnInit:_.boolean().optional(),loadPrivateOnAuth:_.boolean().optional(),url:_.string().url().optional(),cacheTtlMs:_.number().int().positive().optional(),failOnError:_.boolean().optional()}),e0=_.object({provider:N8,apiKey:_.string().optional(),auth:o6.optional(),model:_.string().optional(),protocol:t6.optional(),client:s6.optional(),routingProviderId:N8.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:e6.optional(),aws:fJ.optional(),gcp:$J.optional(),azure:JJ.optional(),sap:HJ.optional(),oca:WJ.optional(),region:_.string().optional(),apiLine:_.enum(["china","international"]).optional(),capabilities:_.array(_.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth"])).optional(),modelCatalog:QJ.optional()});function ZJ(f){return e0.parse(f)}function jJ(f){return e0.safeParse(f)}function zU(f){return f.protocol==="openai-responses"||f.client==="openai"}function Cf(f,$={}){let J=f.provider,H=v1(J),W=$.includeKnownModels!==!1,Q=f.reasoning?.effort||"none",Z=Q==="none"?void 0:Q,j=L8[H],P=Object.assign({},...wf.resolveProviderModelCatalogKeys(H).map((U)=>wf.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"?m1:I1:j?.baseUrl),B=f.routingProviderId??(zU(f)&&H!==O8.OPENAI_NATIVE?O8.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 J5(f){let $=ZJ(f);return Cf($)}function H5(f){let $=jJ(f);if($.success)return{success:!0,config:Cf($.data)};return{success:!1,error:$.error}}var q8=e0;var PJ=f$.object({settings:e0,updatedAt:f$.string().datetime(),tokenSource:f$.enum(["manual","oauth","migration"]).default("manual")}),u1=f$.object({version:f$.literal(1),lastUsedProvider:f$.string().min(1).optional(),providers:f$.record(f$.string(),PJ)});function $$(){return{version:1,providers:{}}}F0();var fj={};N(fj,{InMemoryWorkspaceManager:()=>c1});import{upsertWorkspaceInfo as OU,WorkspaceManifestSchema as W5}from"@cline/shared";class c1{manifest;listeners=new Set;constructor(f){this.manifest=W5.parse(f??{workspaces:{}})}async addWorkspacePath(f){let $=await W1(f);return this.manifest=OU(this.manifest,$),this.emit({type:"workspace_added",workspace:$}),$}async switchWorkspace(f){let $=V0(f),J=this.manifest.workspaces[$];if(J)return this.manifest=W5.parse({...this.manifest,currentWorkspacePath:$}),this.emit({type:"workspace_switched",workspace:J}),J;let H=await this.addWorkspacePath($);return this.manifest=W5.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 $=V0(f);return this.manifest.workspaces[$]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit(f){for(let $ of this.listeners)$(f)}}Kf();import{createHash as NU}from"node:crypto";var $j=new Set,Jj=new Set;function qU(f){return NU("sha256").update(f).digest("hex")}function bU(f){if(f.vcsTypes&&f.vcsTypes.length>0)return f.vcsTypes;return[f.vcsType==="git"?"git":"none"]}function Hj(f){if(!f.telemetry)return;let $=qU(f.rootPath),J=f.rootCount??1;if(!$j.has($))$j.add($),E4(f.telemetry,{root_count:J,vcs_types:bU(f),init_duration_ms:f.durationMs,feature_flag_enabled:f.featureFlagEnabled??!0,is_remote_workspace:f.isRemoteWorkspace});if(f.initError&&!Jj.has($)){Jj.add($);let H=Error(f.initError.message);H.name=f.initError.errorType||"Error",S4(f.telemetry,H,{fallback_to_single_root:!0,workspace_count:J})}}function CU(f){return`${f.pluginName??f.pluginPath}: ${f.message}`}function EU(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(CU).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 SU(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 kU(f,$){return wU(f,$)}function mU(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 IU(f){let $={...f.storedHeaders??{},...f.configHeaders??{}},J=f.accountId?.trim()||xU(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 xU(f){let $=f?.trim();if(!$)return;let J=Ff($),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 gU(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"?IU({sessionId:$,configHeaders:f.headers,storedHeaders:Q?.headers,accountId:Q?.auth?.accountId,accessToken:f.apiKey??Q?.auth?.accessToken??Q?.apiKey}):f.headers??Q?.headers,reasoning:SU(f,Q?.reasoning),modelCatalog:Z},P=Cf(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 Wj(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=n0($.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:z,vcsType:u,initError:gf}=await PH(R),a=T?.extensionContext,c={...a??{},workspace:{...G,...a?.workspace??{}},session:{...a?.session??{},sessionId:J},logger:a?.logger??T?.logger,telemetry:a?.telemetry??T?.telemetry??W};Hj({telemetry:c.telemetry,rootPath:G.rootPath,workspaceInfo:G,rootCount:1,vcsType:u,durationMs:z,initError:gf,featureFlagEnabled:!0});let d=k1({cwd:$.config.cwd,workspacePath:R,rootSessionId:J,logger:T?.logger,workspaceInfo:G}),t=$Z(T?.hooks)?void 0:S1({rootSessionId:J,workspacePath:R,workspaceInfo:G}),pf=I$([T?.hooks,t]),C;if(kU(F,"plugins"))try{C=await w1({pluginPaths:T?.pluginPaths,workspacePath:R,cwd:$.config.cwd,onEvent:P,providerId:$.config.providerId,modelId:$.config.modelId,workspaceInfo:G,session:c.session,client:c.client,user:c.user,logger:c.logger,telemetry:c.telemetry,automation:c.automation}),EU(C.failures,C.warnings,T?.logger)}catch(F2){let r=F2 instanceof Error?F2.message:String(F2);T?.logger?.log?.(`plugin loading failed; continuing without plugins (${r})`)}let vf=TW(d?[d]:void 0,TW(T?.extensions,t4(C?.extensions))),$f={...$.config,...T??{},sessionId:J,hooks:pf,extensions:vf,extensionContext:c,telemetry:c.telemetry},A2=gU($f,J,H,U,j),P$=I$([$f.hooks,$f.checkpoint?.enabled===!0?OZ({cwd:$f.cwd,sessionId:J,logger:$f.logger,createCheckpoint:$f.checkpoint?.createCheckpoint,initialRunCount:mU($.initialMessages),readSessionMetadata:B,writeSessionMetadata:A}):void 0]),X$={...$f,providerConfig:A2,workspaceMetadata:h,hooks:P$},o$=$.toolPolicies??$f.toolPolicies??Z,R2=Bf(Q,$.capabilities),z4=R2?.requestToolApproval,WH=R2?.toolExecutors,e$=new c1({currentWorkspacePath:G.rootPath,workspaces:{[G.rootPath]:G}});return{effectiveInput:$,config:X$,providerConfig:A2,workspaceMetadata:h,workspaceInfo:G,extensions:vf,hooks:P$,toolPolicies:o$,requestToolApproval:z4,pluginSandboxShutdown:C?.shutdown,runtimeBuilderInput:{config:X$,hooks:P$,extensions:vf,onTeamEvent:X,createSpawnTool:V,onTeamRestored:K,userInstructionService:y,configExtensions:F,toolExecutors:WH,workspaceManager:e$,logger:X$.logger,telemetry:X$.telemetry}}}import{existsSync as VJ,mkdirSync as vU,readdirSync as uU,rmdirSync as cU,rmSync as dU,unlinkSync as rU}from"node:fs";import{dirname as Qj,join as XJ}from"node:path";function s(){return new Date().toISOString()}function b8(f){if(!f||!VJ(f))return;try{rU(f)}catch{}}function lU(f){let $=L1(f);if($)return{rootSessionId:$.rootSessionId,fileStem:`${$.agentId}__${$.teamTaskId}`};let J=P8(f);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:f,fileStem:f}}class Q5{ensureSessionsDir;constructor(f){this.ensureSessionsDir=f}sessionArtifactsDir(f){return XJ(this.ensureSessionsDir(),f)}ensureSessionArtifactsDir(f){let $=this.sessionArtifactsDir(f);if(!VJ($))vU($,{recursive:!0});return $}sessionMessagesPath(f){return XJ(this.sessionArtifactsDir(f),`${f}.messages.json`)}sessionManifestPath(f,$=!1){let J=$?this.ensureSessionArtifactsDir(f):this.sessionArtifactsDir(f);return XJ(J,`${f}.json`)}removeSessionDirIfEmpty(f){let $=this.sessionArtifactsDir(f),J=this.ensureSessionsDir();while($.startsWith(J)&&$!==J){if(!VJ($)){$=Qj($);continue}try{if(uU($).length>0)break;cU($)}catch{break}$=Qj($)}}removeSessionDir(f){this.removeDir(this.sessionArtifactsDir(f))}removeDir(f){if(!VJ(f))return;try{dU(f,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths(f,$,J){let{rootSessionId:H,fileStem:W}=lU(f),Q=this.sessionArtifactsDir(H);return{messagesPath:XJ(Q,`${W}.messages.json`)}}}import{resolveDocumentsExtensionPath as pU}from"@cline/shared/storage";Kf();function Zj(f,$,J,H,W){if(J)m4(f.telemetry,{ulid:$,apiProvider:f.providerId,...W});else k4(f.telemetry,{ulid:$,apiProvider:f.providerId,...W});iU(f.telemetry,{workspacePath:H})}function iU(f,$){let J=pU("Hooks"),H=t0($.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())p4(f,Q,Z.global,Z.workspace)}function jj(f,$){for(let J of $.mentions)r4(f,J,$.matchedFiles.includes(J)?1:0,"file",!$.matchedFiles.includes(J));for(let J of $.matchedFiles)c4(f,"file",J.length);for(let J of $.ignoredMentions)d4(f,"file","not_found",J)}var JV={};N(JV,{ProviderSettingsManager:()=>P0});import{chmodSync as PV,existsSync as d9,mkdirSync as k_,readFileSync as m_,writeFileSync as I_}from"node:fs";import{basename as XV,dirname as r9}from"node:path";import{resolveProviderSettingsPath as x_}from"@cline/shared/storage";var L={};N(L,{writeHubDiscovery:()=>f6,writeGlobalSettings:()=>A$,withHubStartupLock:()=>$6,verifyHubConnection:()=>sf,updateLocalProvider:()=>dJ,truncateNotificationBody:()=>h4,toggleDisabledTool:()=>n4,toTeamProgressLifecycleEvent:()=>t1,toProviderConfig:()=>Cf,toHubHealthUrl:()=>LH,toHookConfigFileName:()=>G8,summarizeUsageFromMessages:()=>A8,stopLocalHubServerGracefully:()=>mH,startLocalOAuthServer:()=>M0,startHubWebSocketServer:()=>M4,startHubServer:()=>QV,startClineDeviceAuth:()=>Y5,splitCoreSessionConfig:()=>e8,spawnDetachedHubServer:()=>Y1,setTelemetryOptOutGlobally:()=>v3,setDisabledTools:()=>UH,setDisabledPlugin:()=>r3,sendHubCommand:()=>K7,saveLocalProviderSettings:()=>T9,saveLocalProviderOAuthCredentials:()=>L9,sanitizeTeamName:()=>K6,sanitizeSessionToken:()=>q$,safeParseSettings:()=>jJ,safeCreateProviderConfig:()=>H5,runSubprocessEvent:()=>W2,runHook:()=>Z2,reviveTeamStateDates:()=>y6,restartLocalHubIfIdleAfterStartupTimeout:()=>W6,resolveWorkspaceHubOwnerContext:()=>Q7,resolveWorkflowsConfigSearchPaths:()=>p8,resolveSkillsConfigSearchPaths:()=>r8,resolveSharedHubOwnerContext:()=>Xf,resolveSessionBackend:()=>J9,resolveRulesConfigSearchPaths:()=>l8,resolveProviderConfig:()=>z8,resolvePluginConfigSearchPaths:()=>F8,resolveMcpServerRegistrations:()=>A4,resolveLocalClineAuthToken:()=>z9,resolveHubUrl:()=>IH,resolveHubOwnerContext:()=>y0,resolveHubEndpointOptions:()=>tf,resolveHubBuildId:()=>S0,resolveHooksConfigSearchPaths:()=>K8,resolveDisabledToolNames:()=>uf,resolveDisabledPluginPaths:()=>q2,resolveDefaultMcpSettingsPath:()=>Q$,resolveDefaultHubPort:()=>V1,resolveDefaultHubPathname:()=>bH,resolveDefaultHubHost:()=>qH,resolveCoreSelectedToolIds:()=>G6,resolveCompatibleLocalHubUrl:()=>x2,resolveClineDir:()=>$7,resolveClineDataDir:()=>S2,resolveAndLoadAgentPlugins:()=>w1,resolveAgentPluginPaths:()=>E$,requestHubShutdown:()=>I2,requestDesktopToolApproval:()=>A9,rememberRecoverableLocalHubUrl:()=>k0,registerMcpServersFromSettingsFile:()=>J2,registerDisposable:()=>C_,refreshProviderModelsFromSource:()=>D9,refreshOpenAICodexToken:()=>m8,refreshOcaToken:()=>D8,refreshClineToken:()=>S8,readSessionCheckpointHistory:()=>U4,readHubDiscovery:()=>Qf,readGlobalSettings:()=>af,probeHubServer:()=>Pf,probeHubConnection:()=>y7,prewarmFileIndex:()=>V6,prewarmDetachedHubServer:()=>J6,parseWorkflowConfigFromMarkdown:()=>d8,parseUserCommandEnvelope:()=>w_,parseSkillConfigFromMarkdown:()=>u8,parseSettings:()=>ZJ,parseRuleConfigFromMarkdown:()=>c8,parseHookEventPayload:()=>Q2,openaiCodexOAuthProvider:()=>y5,normalizeWorkspacePath:()=>V0,normalizeUserInput:()=>b_,normalizeRuntimeCapabilities:()=>Bf,normalizeProviderId:()=>v1,normalizeOpenAICodexCredentials:()=>F5,normalizeOAuthProvider:()=>M9,normalizeHubWebSocketUrl:()=>m0,noopBasicLogger:()=>q_,migrateLegacyProviderSettings:()=>K4,mergeRulesForSystemPrompt:()=>H1,mergeAgentHooks:()=>I$,makeTeamTaskSubSessionId:()=>j8,makeSubSessionId:()=>_1,loginOpenAICodex:()=>l1,loginOcaOAuth:()=>x1,loginLocalProvider:()=>_9,loginClineOAuth:()=>r1,loadOpenTelemetryAdapter:()=>G_,loadMcpSettingsFile:()=>B4,loadLlmsConfigFromFile:()=>v9,loadAgentPluginsFromPathsWithDiagnostics:()=>D0,loadAgentPluginsFromPaths:()=>O6,loadAgentPluginFromPath:()=>R8,listSessionHistoryFromBackend:()=>I5,listPluginTools:()=>o8,listLocalProviders:()=>G9,listHookConfigFiles:()=>t0,isToolDisabledGlobally:()=>u3,isTelemetryOptedOutGlobally:()=>i4,isRuleEnabled:()=>O4,isPluginDisabledGlobally:()=>d3,isOpenAICodexTokenExpired:()=>R5,isHubReconnectableTransportError:()=>SH,isHubCommandTimeoutError:()=>H6,isDiscoveryFilePresent:()=>H7,isClineAccountActionRequest:()=>YJ,isBuiltInProviderId:()=>$5,identifyAccount:()=>R0,hasMcpSettingsFile:()=>$2,getValidOpenAICodexCredentials:()=>I8,getValidOcaCredentials:()=>M8,getValidClineCredentials:()=>k8,getProviderConfigFields:()=>O9,getProviderConfig:()=>a6,getLocalProviderModels:()=>h9,getLiveModelsCatalog:()=>g1,getFileIndex:()=>U0,getCurrentContextSize:()=>LW,getCoreHeadlessToolNames:()=>Z8,getCoreDefaultEnabledToolIds:()=>U6,getCoreBuiltinToolCatalog:()=>O$,getCoreAcpToolNames:()=>h6,getClineDefaultSystemPrompt:()=>T_,generateWorkspaceInfoWithDiagnostics:()=>K2,generateWorkspaceInfo:()=>W1,generateOcaOpcRequestId:()=>u6,formatRulesForSystemPrompt:()=>J1,formatDisplayUserInput:()=>N_,filterExtensionToolRegistrations:()=>t4,filterDisabledTools:()=>R$,filterDisabledPluginPaths:()=>a4,fetchClineRecommendedModels:()=>x9,executeClineAccountAction:()=>BJ,ensureHubWebSocketServer:()=>oJ,ensureHubServer:()=>ZV,ensureDetachedHubServer:()=>j7,ensureCustomProvidersLoaded:()=>cJ,ensureCompatibleLocalHubUrl:()=>K$,enrichPromptWithMentions:()=>F1,emptyWorkspaceManifest:()=>O_,emptyStoredProviderSettings:()=>$$,discoverPluginModulePaths:()=>y8,deriveSubsessionStatus:()=>X8,deleteLocalProvider:()=>rJ,defineLlmsConfig:()=>g9,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>H$,createToolPoliciesWithPreset:()=>B6,createTool:()=>z_,createTeamName:()=>IJ,createSubprocessHooks:()=>mJ,createSpawnAgentTool:()=>r0,createSkillsConfigDefinition:()=>i8,createSessionHost:()=>e1,createRuntimeHost:()=>e1,createRulesConfigDefinition:()=>n8,createProviderConfig:()=>J5,createOpenTelemetryTelemetryService:()=>E2,createOcaRequestHeaders:()=>rW,createOcaOAuthProvider:()=>dW,createOAuthClientCallbacks:()=>E8,createMcpTools:()=>H2,createLocalHubScheduleRuntimeHandlers:()=>WV,createLlmsSdk:()=>c9,createInitialAccumulatedUsage:()=>p0,createInMemoryHubOwnerContext:()=>J7,createHubServerUrl:()=>cf,createHubAuthToken:()=>e4,createHookConfigFileHooks:()=>h8,createHookConfigFileExtension:()=>k1,createHookAuditHooks:()=>S1,createDisabledMcpToolPolicy:()=>R4,createDisabledMcpToolPolicies:()=>EJ,createDelegatedAgentConfigProvider:()=>h1,createDelegatedAgent:()=>T1,createDefaultToolsWithPreset:()=>A6,createDefaultTools:()=>u0,createDefaultMcpServerClientFactory:()=>f2,createDefaultExecutors:()=>y1,createCoreSettingsService:()=>v$,createCoreSessionSnapshot:()=>J0,createContributionRegistry:()=>L_,createContextCompactionPrepareTurn:()=>d2,createConfiguredTelemetryService:()=>y$,createConfiguredTelemetryHandle:()=>X1,createClineTelemetryServiceMetadata:()=>__,createClineTelemetryServiceConfig:()=>M_,createClineOAuthProvider:()=>A5,createBuiltinTools:()=>N$,createAgentTeamsTools:()=>z$,createAgentRuntime:()=>S_,createAgentHooksExtension:()=>C1,connectToHub:()=>Q6,completeClineDeviceAuth:()=>B5,clearPrivateModelsCatalogCache:()=>eW,clearLiveModelsCatalogCache:()=>oW,clearHubDiscovery:()=>zf,captureWorkspacePathResolved:()=>k3,captureWorkspaceInitialized:()=>E4,captureWorkspaceInitError:()=>S4,captureToolUsage:()=>g4,captureTokenUsage:()=>I4,captureTaskRestarted:()=>m4,captureTaskCreated:()=>k4,captureTaskCompleted:()=>_2,captureSubagentExecution:()=>z2,captureSkillUsed:()=>v4,captureProviderApiError:()=>L2,captureModeSwitch:()=>x4,captureMentionUsed:()=>c4,captureMentionSearchResults:()=>r4,captureMentionFailed:()=>d4,captureHookDiscovery:()=>p4,captureExtensionActivated:()=>S3,captureDiffEditFailure:()=>u4,captureConversationTurnEvent:()=>Z1,captureAuthSucceeded:()=>B0,captureAuthStarted:()=>Y0,captureAuthLoggedOut:()=>C0,captureAuthFailed:()=>A0,captureAgentTeamCreated:()=>l4,captureAgentCreated:()=>E0,buildWorkspaceMetadata:()=>U2,buildTeamProgressSummary:()=>a1,buildDelegatedAgentConfig:()=>_$,bootstrapAgentTeams:()=>M1,addLocalProvider:()=>U9,accumulateUsageTotals:()=>i0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>x$,ToolPresets:()=>bf,TelemetryService:()=>j1,TelemetryLoggerSink:()=>C2,TEAM_TOOL_NAMES:()=>D1,SubprocessSandbox:()=>b1,StoredProviderSettingsSchema:()=>u1,StoredProviderSettingsEntrySchema:()=>PJ,SqliteTeamStore:()=>n$,SqliteSessionStore:()=>W0,SessionVersioningService:()=>Z$,SessionVersioningError:()=>Df,SessionSource:()=>Vf,SapSettingsSchema:()=>HJ,SKILLS_CONFIG_DIRECTORY_NAME:()=>g8,SESSION_STATUSES:()=>V8,RpcClineAccountService:()=>C8,RemoteRuntimeHost:()=>n1,ReasoningSettingsSchema:()=>e6,RULES_CONFIG_DIRECTORY_NAME:()=>hJ,ProviderSettingsSchema:()=>e0,ProviderSettingsManager:()=>P0,ProviderProtocolSchema:()=>t6,ProviderIdSchema:()=>N8,ProviderClientSchema:()=>s6,OpenTelemetryProvider:()=>P1,OcaSettingsSchema:()=>WJ,OPENAI_COMPATIBLE_PROVIDERS:()=>L8,OCI_HEADER_OPC_REQUEST_ID:()=>g6,NodeHubClient:()=>df,NativeHubTransportAdapter:()=>D4,ModelCatalogSettingsSchema:()=>QJ,LocalRuntimeHost:()=>j0,Llms:()=>h_,InMemoryWorkspaceManager:()=>c1,InMemoryMcpManager:()=>l$,HubUIClient:()=>gH,HubTransportError:()=>Rf,HubSessionClient:()=>xH,HubServerTransport:()=>B2,HubScheduleService:()=>Q1,HubScheduleCommandService:()=>$1,HubRuntimeHost:()=>_0,HubCommandError:()=>B1,HookEventPayloadSchema:()=>kJ,HookEventNameSchema:()=>SJ,HookConfigFileName:()=>E1,HOOK_CONFIG_FILE_EVENT_MAP:()=>U8,HOOKS_CONFIG_DIRECTORY_NAME:()=>b6,GlobalSettingsSchema:()=>N2,GcpSettingsSchema:()=>$J,FileTeamPersistenceStore:()=>lJ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>sJ,DefaultToolNames:()=>ff,DefaultRuntimeBuilder:()=>X2,DefaultLlmsSdk:()=>G4,DEFAULT_MODELS_CATALOG_URL:()=>i6,DEFAULT_INTERNAL_OCA_BASE_URL:()=>m1,DEFAULT_INTERNAL_IDCS_URL:()=>S6,DEFAULT_INTERNAL_IDCS_SCOPES:()=>k6,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>E6,DEFAULT_HUB_PORT:()=>OH,DEFAULT_HUB_PATHNAME:()=>NH,DEFAULT_HUB_HOST:()=>zH,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>I1,DEFAULT_EXTERNAL_IDCS_URL:()=>I6,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>x6,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>m6,CoreSettingsService:()=>W$,CoreSessionService:()=>Z0,ContributionRegistry:()=>D_,ClineCore:()=>V4,ClineAccountService:()=>w8,ChatViewStateSchema:()=>m9,ChatSummarySchema:()=>tJ,ChatSessionStatusSchema:()=>iJ,ChatSessionConfigSchema:()=>pJ,ChatMessageSchema:()=>aJ,ChatMessageRoleSchema:()=>nJ,CORE_TELEMETRY_EVENTS:()=>g,CORE_BUILD_VERSION:()=>I9,BrowserWebSocketHubAdapter:()=>T4,BUILT_IN_PROVIDER_IDS:()=>f5,BUILT_IN_PROVIDER:()=>O8,AzureSettingsSchema:()=>JJ,AwsSettingsSchema:()=>fJ,AuthSettingsSchema:()=>o6,AgentTeamsRuntime:()=>r$,AgentTeam:()=>o1,Agent:()=>E_,ALL_DEFAULT_TOOL_NAMES:()=>q0});O(L,HI);import*as h_ from"@cline/llms";import{buildClineSystemPrompt as T_,ContributionRegistry as D_,createClineTelemetryServiceConfig as M_,createClineTelemetryServiceMetadata as __,createContributionRegistry as L_,createTool as z_,emptyWorkspaceManifest as O_,formatDisplayUserInput as N_,noopBasicLogger as q_,normalizeUserInput as b_,parseUserCommandEnvelope as w_,registerDisposable as C_}from"@cline/shared";import"@cline/shared/storage";var Xj={};N(Xj,{isClineAccountActionRequest:()=>YJ,executeClineAccountAction:()=>BJ,RpcClineAccountService:()=>C8,ClineAccountService:()=>w8});function nU(f){if(typeof f!=="object"||f===null||!("error"in f))return;let $=f.error;return typeof $==="string"&&$.trim()?$:void 0}function Pj(f,$,J){let H=nU(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 w8{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(Pj(Z.status,j,void 0));throw Error("Cline account response was not valid JSON")}if(!Z.ok)throw Error(Pj(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 YJ(f){return f.action==="clineAccount"}async function BJ(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 C8{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}}var Vj={};N(Vj,{createOAuthClientCallbacks:()=>E8});function E8(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}}Kf();var Uj={};N(Uj,{startClineDeviceAuth:()=>Y5,refreshClineToken:()=>S8,loginClineOAuth:()=>r1,getValidClineCredentials:()=>k8,createClineOAuthProvider:()=>A5,completeClineDeviceAuth:()=>B5});var AJ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},Rj={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},Z5="https://api.workos.com",j5="client_01K3A541FN8TA3EPPHTD2325AR",aU="/auth",Yj=Array.from({length:11},(f,$)=>48801+$),tU=300000,sU=30000,d1=30000,oU=300,eU=5;class J$ 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 fG(f){let $=Date.parse(f);if(Number.isNaN($))throw Error(`Invalid expiresAt value: ${f}`);return $}function P5(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:fG(f.expiresAt),accountId:H??void 0,email:f.userInfo.email||J.email,metadata:{provider:$,tokenType:f.tokenType,userInfo:f.userInfo}}}async function X5(f){if(!f)return{};return typeof f==="function"?await f():f}function Bj(f,$){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return $;return Math.floor(f)}async function Aj(f){await new Promise(($)=>setTimeout($,f))}function V5(f,$){if(!f.success||!f.data?.accessToken)throw Error($);return f.data}async function Fj(f,$){let J=await fetch(w$(Z5,Rj.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:f}),signal:AbortSignal.timeout($?.requestTimeoutMs??d1)}),H=await J.json().catch(()=>({}));if(!J.ok)throw new J$(`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:Bj(H.expires_in,oU),pollIntervalSeconds:Bj(H.interval,eU)}}async function yj(f){let $=Date.now()+f.expiresInSeconds*1000,J=Math.max(1,f.initialPollIntervalSeconds);while(Date.now()<=$){let H=await fetch(w$(f.workosApiBaseUrl,Rj.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 Aj(J*1000);break}case"slow_down":{J+=1,await Aj(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new J$(W.error_description||"WorkOS authorization failed",{status:H.status,errorCode:W.error});default:throw new J$(`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 Kj(f,$,J){let H={accessToken:f.accessToken,refreshToken:f.refreshToken},W=await fetch(w$($.apiBaseUrl,AJ.register),{method:"POST",headers:{"Content-Type":"application/json",...await X5($.headers)},body:JSON.stringify(H),signal:AbortSignal.timeout($.requestTimeoutMs??d1)});if(!W.ok){let Z=await W.text().catch(()=>""),j=N1(Z);throw new J$(`Token registration failed: ${W.status}${j.message?` - ${j.message}`:""}`,{status:W.status,errorCode:j.code})}let Q=await W.json();return P5(V5(Q,"Invalid token exchange response"),J??$.provider)}async function $G(f,$,J,H){let W={grant_type:"authorization_code",code:f,client_type:"extension",redirect_uri:$,provider:H??J.provider},Q=await fetch(w$(J.apiBaseUrl,AJ.token),{method:"POST",headers:{"Content-Type":"application/json",...await X5(J.headers)},body:JSON.stringify(W),signal:AbortSignal.timeout(J.requestTimeoutMs??d1)});if(!Q.ok){let j=await Q.text().catch(()=>""),P=N1(j);throw new J$(`Token exchange failed: ${Q.status}${P.message?` - ${P.message}`:""}`,{status:Q.status,errorCode:P.code})}let Z=await Q.json();return P5(V5(Z,"Invalid token exchange response"),H??J.provider)}async function r1(f){Y0(f.telemetry,f.provider??"cline");let $=f.useWorkOSDeviceAuth??!0,J=f.callbackPorts?.length?f.callbackPorts:Yj,H=f.callbackPath??aU,W=$?null:await M0({ports:J,callbackPath:H,onListening:f.callbacks.onServerListening,onClose:f.callbacks.onServerClose}),Q=W?.callbackUrl||`http://127.0.0.1:${J[0]??Yj[0]}${H}`;try{let Z;if($){let j=j5,P=await Fj(j,f);f.callbacks.onAuth({url:P.verificationUriComplete??P.verificationUri,instructions:`Enter this code in your browser: ${P.userCode}`});let X=await yj({clientId:j,deviceCode:P.deviceCode,expiresInSeconds:P.expiresInSeconds,initialPollIntervalSeconds:P.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??d1,workosApiBaseUrl:Z5,onProgress:f.callbacks.onProgress});Z=await Kj(X,f,f.provider)}else{let j=new URL(w$(f.apiBaseUrl,AJ.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 q1({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=O1(Y,{includeProvider:!0});P=B.code,X=B.provider??X}if(!P)throw Error("Missing authorization code");Z=await $G(P,Q,f,X)}return B0(f.telemetry,f.provider??"cline"),R0(f.telemetry,{id:Z.accountId,email:Z.email,provider:f.provider??"cline"}),Z}catch(Z){throw A0(f.telemetry,f.provider??"cline",Z instanceof Error?Z.message:String(Z)),Z}finally{W?.close()}}async function Y5(f){return await Fj(j5,f)}async function B5(f){let $=f.provider??"cline";Y0(f.telemetry,$);try{let J=await yj({clientId:j5,deviceCode:f.deviceCode,expiresInSeconds:f.expiresInSeconds,initialPollIntervalSeconds:f.pollIntervalSeconds,requestTimeoutMs:f.requestTimeoutMs??d1,workosApiBaseUrl:Z5}),H=await Kj(J,{apiBaseUrl:f.apiBaseUrl,headers:f.headers,requestTimeoutMs:f.requestTimeoutMs,provider:f.provider},f.provider);return B0(f.telemetry,$),R0(f.telemetry,{id:H.accountId,email:H.email,provider:$}),H}catch(J){throw A0(f.telemetry,$,J instanceof Error?J.message:String(J)),J}}async function S8(f,$){let J=await fetch(w$($.apiBaseUrl,AJ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await X5($.headers)},body:JSON.stringify({refreshToken:f.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout($.requestTimeoutMs??d1)});if(!J.ok){let Q=await J.text().catch(()=>""),Z=N1(Q);throw new J$(`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 P5(V5(H,"Invalid token refresh response"),W,f)}async function k8(f,$,J){if(!f)return null;let H=J?.refreshBufferMs??tU,W=J?.retryableTokenGraceMs??sU;if(J?.forceRefresh!==!0&&!C$(f,H))return f;try{return await S8(f,$)}catch(Z){if(Z instanceof J$&&Z.isLikelyInvalidGrant())return C0($.telemetry,$.provider??"cline","invalid_grant"),null;if(f.expires-Date.now()>W)return f;return null}}function A5(f){return{id:"cline",name:"Cline Account",usesCallbackServer:!(f.useWorkOSDeviceAuth??!0),async login($){return r1({...f,callbacks:$})},async refreshToken($){return S8($,f)},getApiKey($){return`workos:${$.access}`}}}Kf();var Tj={};N(Tj,{refreshOpenAICodexToken:()=>m8,openaiCodexOAuthProvider:()=>y5,normalizeOpenAICodexCredentials:()=>F5,loginOpenAICodex:()=>l1,isOpenAICodexTokenExpired:()=>R5,getValidOpenAICodexCredentials:()=>I8,OPENAI_CODEX_OAUTH_CONFIG:()=>o});import{nanoid as JG}from"nanoid";var o={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 RJ 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 HG(f,$,J=o.redirectUri){let H=await fetch(o.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:o.clientId,code:f,code_verifier:$,redirect_uri:J}),signal:AbortSignal.timeout(o.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 WG(f){try{let $=await fetch(o.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:f,client_id:o.clientId}),signal:AbortSignal.timeout(o.httpTimeoutMs)});if(!$.ok){let H=await $.text().catch(()=>""),W=N1(H);throw new RJ(`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 RJ)throw $;return{type:"failed"}}}async function QG(f="pi"){let{verifier:$,challenge:J}=await M6(),H=JG(32),W=new URL(o.authorizationEndpoint);return W.searchParams.set("response_type","code"),W.searchParams.set("client_id",o.clientId),W.searchParams.set("redirect_uri",o.redirectUri),W.searchParams.set("scope",o.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 ZG(){try{let f=new URL(o.redirectUri),$=f.port.length>0?Number.parseInt(f.port,10):o.callbackPort;return{host:f.hostname||"localhost",port:Number.isFinite($)?$:o.callbackPort,callbackPath:f.pathname||"/auth/callback",redirectUri:f.toString()}}catch{return{host:"localhost",port:o.callbackPort,callbackPath:"/auth/callback",redirectUri:o.redirectUri}}}function Gj(f,$){let J=$?Ff($):Ff(f),H=J?J:Ff(f),Q=H?.[o.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 hj(f,$){let J=Gj(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 l1(f){Y0(f.telemetry,"openai-codex");let $=ZG(),{verifier:J,state:H,url:W}=await QG(f.originator),Q=await M0({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 q1({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=O1(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 HG(Z,J,$.redirectUri);if(P.type!=="success")throw Error("Token exchange failed");let X=hj(P);return B0(f.telemetry,"openai-codex"),R0(f.telemetry,{id:X.accountId,email:X.email,provider:"openai-codex"}),X}catch(j){throw A0(f.telemetry,"openai-codex",j instanceof Error?j.message:String(j)),j}finally{Q.close()}}async function m8(f,$){let J=await WG(f);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let H=hj(J,$);if(!H.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return H}async function I8(f,$){if(!f)return null;let J=$?.refreshBufferMs??o.refreshBufferMs,H=$?.retryableTokenGraceMs??o.retryableTokenGraceMs;if($?.forceRefresh!==!0&&!C$(f,J))return f;try{return await m8(f.refresh,f)}catch(Q){if(Q instanceof RJ&&Q.isLikelyInvalidGrant())return C0($?.telemetry,"openai-codex","invalid_grant"),null;if(f.expires-Date.now()>H)return f;return null}}function R5(f,$=o.refreshBufferMs){return C$(f,$)}function F5(f){let $=f.accountId??Gj(f.access);if(!$)throw Error("Failed to extract accountId from token");return{...f,accountId:$,metadata:{...f.metadata??{},provider:"openai-codex"}}}var y5={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login(f){return l1({onAuth:f.onAuth,onPrompt:f.onPrompt,onProgress:f.onProgress,onManualCodeInput:f.onManualCodeInput})},async refreshToken(f){return m8(f.refresh,f)},getApiKey(f){return f.access}};var rP={};N(rP,{ClineCore:()=>V4});function Dj(f){if(f===!0)return{};if(!f)return;return f}function Mj(f){if(f==="user")return"global";return f}class K5{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 _j(f){let{host:$}=f;return{async startSession(J){let H=(J.cwd?.trim()||J.workspaceRoot).trim(),W=await $.startSession({source:J.source?.trim()||Vf.CLI,interactive:!1,config:{providerId:v1(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:H,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:XG(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:PG(W)}},async abortSession(J){return await $.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function FJ(f){let $=jG(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 jG(f,$){if(!f)return;return{ingestEvent:(J)=>{$.ingestEvent(J)}}}function PG(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 XG(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}var rj={};N(rj,{createCoreSettingsService:()=>v$,CoreSettingsService:()=>W$});import{existsSync as M5}from"node:fs";import{basename as uj,isAbsolute as IG,relative as xG}from"node:path";var mj={};N(mj,{resolveWorkflowsConfigSearchPaths:()=>p8,resolveSkillsConfigSearchPaths:()=>r8,resolveRulesConfigSearchPaths:()=>l8,parseWorkflowConfigFromMarkdown:()=>d8,parseSkillConfigFromMarkdown:()=>u8,parseRuleConfigFromMarkdown:()=>c8,createWorkflowsConfigDefinition:()=>a8,createUserInstructionConfigService:()=>H$,createSkillsConfigDefinition:()=>i8,createRulesConfigDefinition:()=>n8,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>v8,UnifiedConfigFileWatcher:()=>x$,SKILLS_CONFIG_DIRECTORY_NAME:()=>g8,RULES_CONFIG_DIRECTORY_NAME:()=>hJ});import{createHash as VG}from"node:crypto";import{watch as YG}from"node:fs";import{readdir as BG,readFile as AG}from"node:fs/promises";import{join as RG}from"node:path";function FG(f){return VG("sha1").update(f).digest("hex")}function Oj(f){return Boolean(f&&typeof f==="object"&&"code"in f)}function Lj(f){return Oj(f)&&f.code==="ENOENT"}function zj(f){return Oj(f)&&(f.code==="EACCES"||f.code==="EPERM")}class x${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=YG($,()=>{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(!Lj(J)&&!zj(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 AG(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:FG(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 BG(f,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:f,fileName:J.name,filePath:RG(f,J.name)})).sort((J,H)=>J.fileName.localeCompare(H.fileName))}catch($){if(Lj($)||zj($))return[];throw $}}}import{readdir as U5,readFile as yG,stat as Nj}from"node:fs/promises";import{basename as g$,dirname as KG,extname as G5,join as hf}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as hJ,resolveRulesConfigSearchPaths as UG,resolveSkillsConfigSearchPaths as GG,resolveWorkflowsConfigSearchPaths as hG,SKILLS_CONFIG_DIRECTORY_NAME as g8,WORKFLOWS_CONFIG_DIRECTORY_NAME as v8}from"@cline/shared/storage";import TG from"yaml";var yJ="SKILL.md",DG="managed.json",MG=new Set([".md",".markdown",".txt"]);function h5(f){return f.trim().toLowerCase()}function x8(f){let $=f;return $?.code==="ENOENT"||$?.code==="EACCES"||$?.code==="EPERM"}function KJ(f){return MG.has(G5(f).toLowerCase())}async function T5(f){try{let $=await U5(f,{withFileTypes:!0}),J=[];for(let H of $){if(!H.isDirectory())continue;let W=hf(f,H.name),Q=hf(W,DG);try{let Z=await yG(Q,"utf8"),j=JSON.parse(Z);if(j&&typeof j==="object")J.push(W)}catch(Z){if(x8(Z))continue;if(Z?.name==="SyntaxError")continue;throw Z}}return J.sort((H,W)=>H.localeCompare(W))}catch($){if(x8($))return[];throw $}}function D5(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=TG.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 UJ(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 p1(f,$){if(f===void 0||f===null)return;if(typeof f!=="boolean")throw Error(`Frontmatter field '${$}' must be a boolean.`);return f}function u8(f,$){let{data:J,body:H,parseError:W}=D5(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=UJ(J.name,"name",!1)??$.trim();if(!j)throw Error("Missing skill name.");return{name:j,description:UJ(J.description,"description",!1),disabled:p1(J.disabled,"disabled")??(p1(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function c8(f,$){let{data:J,body:H,parseError:W}=D5(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=UJ(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing rule name.");return{name:Z,disabled:p1(J.disabled,"disabled")??(p1(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function d8(f,$){let{data:J,body:H,parseError:W}=D5(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=UJ(J.name,"name",!1)??$.trim();if(!Z)throw Error("Missing workflow name.");return{name:Z,disabled:p1(J.disabled,"disabled")??(p1(J.enabled,"enabled")===!1?!0:void 0),instructions:Q,frontmatter:J}}function r8(f){return GG(f)}function l8(f){return UG(f)}function p8(f){return hG(f)}async function qj(f){if(g$(f)===".cline"){let $=await T5(f);return(await Promise.all($.map((H)=>qj(hf(H,g8))))).flat()}try{let $=await U5(f,{withFileTypes:!0}),J=[];for(let H of $){if(H.isFile()&&H.name===yJ){J.push({directoryPath:f,fileName:H.name,filePath:hf(f,H.name)});continue}if(H.isDirectory())J.push({directoryPath:hf(f,H.name),fileName:yJ,filePath:hf(f,H.name,yJ)})}return J}catch($){if(x8($))return[];throw $}}async function GJ(f){if(g$(f)===".cline"){let $=await T5(f);return(await Promise.all($.map((H)=>GJ(hf(H,"rules.md"))))).flat()}try{if((await Nj(f)).isFile())return[{directoryPath:KG(f),fileName:g$(f),filePath:f}]}catch($){if(!x8($))throw $}try{let J=(await U5(f,{withFileTypes:!0})).filter((W)=>W.isFile()&&KJ(W.name)).map((W)=>({directoryPath:f,fileName:W.name,filePath:hf(f,W.name)})),H=hf(f,"AGENTS.md");try{if((await Nj(H)).isFile()){if(!J.some((Z)=>Z.fileName==="AGENTS.md"))J.push({directoryPath:f,fileName:"AGENTS.md",filePath:H})}}catch{}return J}catch($){if(x8($))return[];throw $}}async function _G(f){if(g$(f)===".cline"){let $=await T5(f);return(await Promise.all($.map((H)=>GJ(hf(H,v8))))).flat()}return GJ(f)}function i8(f){let $=f?.directories??r8(f?.workspacePath),J=f?.workspacePath?hf(f.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...$,J]:$,discoverFiles:qj,includeFile:(H)=>H===yJ,parseFile:(H)=>u8(H.content,g$(H.directoryPath)),resolveId:(H)=>h5(H.name)}}function n8(f){let $=f?.directories??l8(f?.workspacePath),J=f?.workspacePath?hf(f.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...$,J]:$,discoverFiles:GJ,includeFile:(H,W)=>H===".clinerules"||KJ(H)||KJ(W),parseFile:(H)=>c8(H.content,g$(H.filePath,G5(H.filePath))),resolveId:(H)=>h5(H.name)}}function a8(f){let $=f?.directories??p8(f?.workspacePath),J=f?.workspacePath?hf(f.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...$,J]:$,discoverFiles:_G,includeFile:(H)=>KJ(H),parseFile:(H)=>d8(H.content,g$(H.filePath,G5(H.filePath))),resolveId:(H)=>h5(H.name)}}function bj(f){let $=[i8(f?.skills),n8(f?.rules),a8(f?.workflows)];return new x$($,{debounceMs:f?.debounceMs,emitParseErrors:f?.emitParseErrors})}import{truncateSplit as wj}from"@cline/shared";function LG(f,$){if(f.description?.trim())return wj(f.description,".");if($==="workflow")return;return wj(f.instructions,".")}function zG(f){return f.disabled!==!0}function Cj(f,$){return[...f.getSnapshot($).entries()].map(([J,H])=>({id:J,record:H})).filter(({record:J})=>zG(J.item)).map(({id:J,record:H})=>({id:J,name:H.item.name,instructions:H.item.instructions,description:LG(H.item,$),kind:$})).sort((J,H)=>J.name.localeCompare(H.name))}function t8(f){let $=new Map;for(let J of[...Cj(f,"workflow"),...Cj(f,"skill")])if(!$.has(J.name))$.set(J.name,J);return[...$.values()].sort((J,H)=>J.name.localeCompare(H.name))}function Ej(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=t8($).find((j)=>j.name===H);return Z?`${Z.instructions}${Q}`:f}function TJ(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function OG(f){if(!f||f.length===0)return;let $=f.map(TJ).filter((J)=>J.length>0);return $.length>0?new Set($):void 0}function NG(f,$,J){if(!J)return!0;let H=TJ(f),W=TJ($),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 s8(f,$){let J=OG($);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)=>NG(W.id,W.name,J))}function qG(f,$){return s8(f,$).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,H)=>J.localeCompare(H))}function bG(f,$,J){let H=TJ($);if(!H)return{error:"Missing skill name."};let W=s8(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=qG(f,J);return{error:X.length>0?`Skill "${$}" not found. Available skills: ${X.join(", ")}`:"No skills are currently available."}}function wG(f,$=Promise.resolve(),J){let H=new Set,W=async(Q,Z)=>{await $;let j=bG(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?`
457
+ <command-args>${V}</command-args>`:"",B=X.description?.trim()?`Description: ${X.description.trim()}
458
+
459
+ `:"";return`<command-name>${X.name}</command-name>${Y}
460
+ <command-instructions>
461
+ ${B}${X.instructions}
462
+ </command-instructions>`}finally{H.delete(P)}};return Object.defineProperty(W,"configuredSkills",{get:()=>s8(f,J).map(({skill:Q,...Z})=>Z),enumerable:!0,configurable:!1}),W}function Sj(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:()=>jH(f.watcher)});if(f.registerSkillsTool)H.registerTool(h$(wG(f.watcher,$,f.allowedSkillNames)));for(let W of t8(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}
463
+
464
+ ${Z}`:W.instructions}})}}}class kj{watcher;ready;stopped=!1;constructor(f){this.watcher=bj(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 t8(this.watcher)}resolveRuntimeSlashCommand(f){return Ej(f,this.watcher)}hasConfiguredSkills(f){return s8(this.watcher,f).length>0}createExtension(f){return Sj({...f,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function H$(f){return new kj(f)}import{readFile as CG,writeFile as EG}from"node:fs/promises";import xj from"yaml";function SG(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=xj.parse(H);return{data:Q&&typeof Q==="object"&&!Array.isArray(Q)?Q:{},body:W,hadFrontmatter:!0}}function Ij(f,$){return`---
465
+ ${xj.stringify(f).trimEnd()}
466
+ ---
467
+ ${$}`}function kG(f,$){let{data:J,body:H,hadFrontmatter:W}=SG(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 Ij(J,H)}return J.disabled=!0,Ij(J,H)}async function gj({filePath:f,enabled:$}){let J=await CG(f,"utf8"),H=kG(J,$);return await EG(f,H),{filePath:f,enabled:$,disabled:!$}}F0();var vj={};N(vj,{listPluginTools:()=>o8});F0();function mG(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 o8(f){let $=E$({workspacePath:f.workspacePath,cwd:f.cwd}),J=uf(f.disabledToolNames),H=[];for(let W of $){let Q=await D0([W],{cwd:f.cwd,providerId:f.providerId,modelId:f.modelId});for(let Z of Q.plugins)for(let j of mG(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 _5(f,$){if(!$)return"global";let J=xG($,f);return!J.startsWith("..")&&!IG(J)?"workspace":"global"}function DJ(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 dj(f){return f.workspaceRoot?.trim()||f.cwd?.trim()||""}async function cj(f,$){if(f.userInstructionService)return await $(f.userInstructionService);let J=dj(f);if(!J)return await $(void 0);let H=H$({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await H.start(),await $(H)}finally{H.stop()}}function gG(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 W${async list(f={}){return await cj(f,async($)=>{let J=dj(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:_5(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:_5(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:_5(j.filePath,J),description:P.description,toggleable:!0})}}if(J)try{for(let j of await o8({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:DJ(H.filter((j)=>M5(j.path))),rules:DJ(W.filter((j)=>M5(j.path))),skills:DJ(Q.filter((j)=>M5(j.path))),tools:DJ(Z)}})}async toggle(f){if(f.type==="skills")return await cj(f,async($)=>{let J=gG($,f),H=J?.filePath;if(!H)throw Error(`Unable to resolve skill setting '${f.id??f.name??uj(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??uj(f.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await gj({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)n4(f.name);else c3(f.name,!f.enabled);return{snapshot:await this.list(f),changedTypes:["tools"]}}throw Error(`Settings type '${f.type}' does not support toggles.`)}}function v$(){return new W$}function lj(f){return{async list($){let J=f;if(J.listSettings)return await J.listSettings($);return await v$().list($)},async toggle($){let J=f;if(J.toggleSetting)return await J.toggleSetting($);return await v$().toggle($)}}}function pj(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)}}}var ij={};N(ij,{splitCoreSessionConfig:()=>e8});function e8(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 nj(f){let $=f.config;return"providerId"in $?{...f,config:{...$,...vG(f.localRuntime)},localRuntime:f.localRuntime}:f}function L5(f,$={}){let J=e8(f.config),H=Bf($.defaultCapabilities,f.capabilities),W=uG(J.localRuntime,f.localRuntime),Q=$.withExtensionContext?.(W?.extensionContext);if(Q)W={...W??{},extensionContext:Q};return{...f,...J,...W?{localRuntime:W}:{},...H?{capabilities:H}:{}}}function vG(f){if(!f)return{};let{modelCatalogDefaults:$,userInstructionService:J,configExtensions:H,onTeamRestored:W,...Q}=f;return Q}function uG(...f){let $={};for(let J of f)if(J)Object.assign($,J);return Object.keys($).length>0?$:void 0}Kf();function aj(f){let $=f.input.config.telemetry??f.telemetry;if(!$)return;$.capture({event:g.SESSION.STARTED,properties:{sessionId:f.sessionId,source:f.input.source??Vf.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 f4(f){return!!f&&typeof f==="object"&&!Array.isArray(f)}function z5(f){let $=f?.trim();return $?$:void 0}function cG(f,$){let J=f?.trim();if(!J)return $;let H=Date.parse(J);if(!Number.isFinite(H))return $;return new Date(H).toISOString()}function tj(f,$){return new Date(new Date(f).getTime()+Math.max(0,Math.floor($))*1000).toISOString()}function sj(f,$){return new Date(new Date(f).getTime()-Math.max(0,Math.floor($))*1000).toISOString()}function dG(f,$){if(!f)return $;return new Date(f).getTime()>=new Date($).getTime()?f:$}function rG(f,$){let J=f.eventId.trim(),H=f.eventType.trim(),W=f.source.trim(),Q=z5(f.subject),Z=z5(f.dedupeKey)??`${H}:${W}:${Q??J}`;return{eventId:J,eventType:H,source:W,subject:Q,occurredAt:cG(f.occurredAt,$),workspaceRoot:z5(f.workspaceRoot),payload:f4(f.payload)?f.payload:void 0,attributes:f4(f.attributes)?f.attributes:void 0,dedupeKey:Z}}function O5(f,$){if(!$)return;let J=$.split("."),H=f;for(let W of J){if(!f4(H))return;H=H[W]}return H}function lG(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=O5(J,$);if(H!==void 0)return H;if(f.attributes){let W=O5(f.attributes,$);if(W!==void 0)return W}if(f.payload)return O5(f.payload,$);return}function MJ(f,$){if(Array.isArray($))return $.some((J)=>MJ(f,J));if(Array.isArray(f))return f.some((J)=>MJ(J,$));if(f4($)){if(!f4(f))return!1;return Object.entries($).every(([J,H])=>MJ(f[J],H))}return Object.is(f,$)}function pG(f,$){if(!$||Object.keys($).length===0)return!0;return Object.entries($).every(([J,H])=>MJ(lG(f,J),H))}class N5{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=rG(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(!pG(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=dG(P.scheduledFor,tj(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:sj(J,Q)}))return{reason:"dedupe_window"};let Z=f.cooldownSeconds??0;if(Z>0&&this.store.hasRecentEventRunForSpec({specId:f.specId,sinceIso:sj(J,Z)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:f.specId,specRevision:f.revision,triggerKind:"event",triggerEventId:$.eventId,scheduledFor:W>0?tj(J,W):J}),reason:"dedupe_window"}}}import{existsSync as Ph,readdirSync as Xh,readFileSync as Vh,statSync as Yh}from"node:fs";import{relative as Bh}from"node:path";import{resolveCronSpecsDir as Ah}from"@cline/shared/storage";import{createHash as iG}from"node:crypto";import nG from"yaml";function aG(f){let $=f.replace(/\\/g,"/");if($.startsWith("events/")&&$.endsWith(".event.md"))return"event";if($.endsWith(".cron.md"))return"schedule";return"one_off"}function tG(f){let $=f.replace(/\r\n/g,`
468
+ `);if(!$.startsWith(`---
469
+ `))return{frontmatter:void 0,body:f};let J=$.slice(4),H=J.indexOf(`
470
+ ---`);if(H===-1)return{frontmatter:void 0,body:f};let W=J.slice(0,H),Q=J.slice(H+4);if(Q.startsWith(`
471
+ `))Q=Q.slice(1);return{frontmatter:W,body:Q}}function Ef(f){if(typeof f!=="string")return;let $=f.trim();return $.length>0?$:void 0}function sG(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 w5(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return f}function oG(f){let $=w5(f);if(!$)return;let J=Ef($.providerId),H=Ef($.modelId);if(J===void 0&&H===void 0)return;return{providerId:J,modelId:H}}function eG(f){if(typeof f!=="string")return;let $=f.trim().toLowerCase();if($==="act"||$==="plan"||$==="yolo")return $;return}function ej(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 fh=new Set(q0);function $h(f){let $=ej(f,{preserveEmptyArray:!0});if(!$)return;let J=$.filter((H)=>!fh.has(H));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return $}var Jh=new Set(["rules","skills","plugins"]);function Hh(f){let $=ej(f,{preserveEmptyArray:!0});if(!$)return;let J=$.filter((H)=>!Jh.has(H));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return $}function q5(f){if(typeof f!=="number"||!Number.isFinite(f)||f<=0)return;return Math.floor(f)}function b5(f){if(typeof f!=="number"||!Number.isFinite(f)||f<0)return;return Math.floor(f)}function C5(f){if(f===null||typeof f!=="object")return JSON.stringify(f??null);if(Array.isArray(f))return`[${f.map((J)=>C5(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)}:${C5(H)}`).join(",")}}`}function fP(f,$){let J=iG("sha256");return J.update(C5(f)),J.update(`
472
+ `),J.update($),J.digest("hex")}function Wh(f){return(f.split("/").pop()??f).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var Qh=["schedule","timezone"],Zh=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],jh=["cwd"];function oj(f,$,J,H,W){return{externalId:f,relativePath:f,triggerKind:$,body:J,contentHash:fP(H,J),error:W}}function $0(f,$,J,H,W,Q){return{externalId:f,relativePath:$,triggerKind:J,body:H,contentHash:W,error:Q}}function $P(f){let $=f.relativePath.replace(/\\/g,"/"),J=aG($),{frontmatter:H,body:W}=tG(f.raw),Q={};if(H!==void 0&&H.trim().length>0)try{let K=nG.parse(H);if(K&&typeof K==="object"&&!Array.isArray(K))Q=K;else if(K!==null&&K!==void 0)return oj($,J,W,{},"frontmatter must be a YAML mapping")}catch(K){return oj($,J,W,{},K instanceof Error?`failed to parse frontmatter: ${K.message}`:"failed to parse frontmatter")}let Z=fP(Q,W),j=Ef(Q.id),P=j??$;if(J!=="schedule"){for(let K of Qh)if(Q[K]!==void 0)return $0(P,$,J,W,Z,`field "${K}" is only allowed on *.cron.md specs`)}for(let K of jh)if(Q[K]!==void 0)return $0(P,$,J,W,Z,`field "${K}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let K of Zh)if(Q[K]!==void 0)return $0(P,$,J,W,Z,`field "${K}" is only allowed on .event.md specs`)}let X=Ef(Q.prompt),V=W.trim(),Y=X??(V.length>0?V:void 0);if(!Y)return $0(P,$,J,W,Z,"prompt is required (frontmatter `prompt` or markdown body)");let B=Ef(Q.workspaceRoot);if(!B)return $0(P,$,J,W,Z,"workspaceRoot is required");let A,R;try{A=$h(Q.tools),R=Hh(Q.extensions)}catch(K){return $0(P,$,J,W,Z,K instanceof Error?K.message:String(K))}let U=eG(Q.mode);if(Q.mode!==void 0&&U===void 0)return $0(P,$,J,W,Z,"mode must be one of: act, plan, yolo");let y={id:j,title:Ef(Q.title)??j??Wh($),prompt:Y,workspaceRoot:B,mode:U??"yolo",systemPrompt:Ef(Q.systemPrompt),modelSelection:oG(Q.modelSelection),maxIterations:q5(Q.maxIterations),timeoutSeconds:q5(Q.timeoutSeconds),tools:A,notesDirectory:Ef(Q.notesDirectory),extensions:R,source:Ef(Q.source)??"user",tags:sG(Q.tags),enabled:typeof Q.enabled==="boolean"?Q.enabled:!0,metadata:w5(Q.metadata)},F;if(J==="schedule"){let K=Ef(Q.schedule);if(!K)return $0(P,$,J,W,Z,"schedule is required for *.cron.md specs");let M=Ef(Q.timezone);try{_3(K,M)}catch(G){return $0(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=Ef(Q.event);if(!K)return $0(P,$,J,W,Z,"event is required for .event.md specs");F={...y,triggerKind:"event",event:K,filters:w5(Q.filters),debounceSeconds:b5(Q.debounceSeconds),dedupeWindowSeconds:b5(Q.dedupeWindowSeconds),cooldownSeconds:b5(Q.cooldownSeconds),maxParallel:q5(Q.maxParallel)}}else F={...y,triggerKind:"one_off"};return{externalId:P,relativePath:$,triggerKind:J,body:W,contentHash:Z,spec:F}}function Rh(f,$){return Bh(f,$).replace(/\\/g,"/")}function Fh(f){if(!Ph(f))return[];let $=[],J=[f];while(J.length>0){let H=J.pop();if(!H)continue;let W;try{W=Xh(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 E5{store;cronDir;constructor(f){this.store=f.store,this.cronDir=Ah(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:[]},$=Fh(this.cronDir),J=new Set;for(let W of $){let Q=Rh(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=Vh($,"utf8"),W=Yh($).mtimeMs}catch{return}let Z=$P({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=Y$(f.scheduleExpr,H,f.timezone),Q=new Date(W).toISOString();if(f.nextRunAt!==Q)this.store.updateSpecNextRunAt(f.specId,Q)}catch{}}}import{existsSync as yh,mkdirSync as Kh,watch as Uh}from"node:fs";import{relative as Gh,resolve as hh}from"node:path";var Th=250;class S5{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor(f){this.reconciler=f.reconciler,this.debounceMs=Math.max(0,f.debounceMs??Th),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{Kh(f,{recursive:!0}),this.watcher=Uh(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 $=hh(this.reconciler.getCronDir(),f);if(!yh($)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=Gh(this.reconciler.getCronDir(),$).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,$),await this.onReconciled()}catch($){this.onError($)}}}class $4{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor(f){this.store=new M2({dbPath:f.dbPath});let $=f.specs;this.reconciler=new E5({store:this.store,specs:$}),this.materializer=new y2({store:this.store}),this.eventIngress=new N5({store:this.store,logger:f.logger}),this.runner=new G2({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 S5({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)}}var YP={};N(YP,{manifestToSessionRecord:()=>zJ,listSessionHistoryFromBackend:()=>I5,listSessionHistory:()=>OJ,hydrateSessionHistory:()=>VP});import{readdir as Lh,readFile as jP}from"node:fs/promises";import{join as PP}from"node:path";import{formatDisplayUserInput as zh,normalizeUserInput as Oh}from"@cline/shared";import{resolveSessionDataDir as XP}from"@cline/shared/storage";import{existsSync as Dh}from"node:fs";import{readFile as Mh}from"node:fs/promises";import{formatDisplayUserInput as JP}from"@cline/shared";class J4{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 u$(f){let $=f?.trim();if(!$||!Dh($))return[];try{let J=(await Mh($,"utf8")).trim();if(!J)return[];let H=JSON.parse(J);if(Array.isArray(H))return HP(H);if(H&&typeof H==="object"&&!Array.isArray(H)){let W=H.messages;if(Array.isArray(W))return HP(W)}return[]}catch{return[]}}function _h(f){if(f.role!=="user")return f;if(typeof f.content==="string")return{...f,content:JP(f.content)};return{...f,content:f.content.map(($)=>{if($.type!=="text"||typeof $.text!=="string")return $;return{...$,text:JP($.text)}})}}function HP(f){return f.map(_h)}function WP(f){return f?{...f}:void 0}async function QP(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 _J(f){if(typeof f!=="string")return;let $=f.trim();return $.length>0?$:void 0}function Sf(f){let $=_J(f);if(!$)return;return $.toLowerCase()==="unknown"?void 0:$}function LJ(f){return typeof f==="number"&&Number.isFinite(f)?f:void 0}function Nh(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return{...f}}function m5(f){let $=f??200;return Number.isFinite($)?Math.max(0,Math.floor($)):200}function qh(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 zJ(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 bh(f){let $=m5(f);if($===0)return[];let J=XP(),W=(await Lh(J,{withFileTypes:!0}).catch(()=>[])).filter((Z)=>Z.isDirectory()).map((Z)=>({entry:Z,recency:qh(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=PP(J,j,`${j}.json`),X=await jP(P,"utf8").catch(()=>{return});if(!X)return;let V;try{V=JSON.parse(X)}catch{return}let Y=Gf.safeParse(V);if(!Y.success)return;return zJ(Y.data)}))).filter((Z)=>Boolean(Z)).sort((Z,j)=>j.startedAt.localeCompare(Z.startedAt)).slice(0,$)}async function wh(f,$){let J=m5($);if(J===0)return await f.listSessions(0),[];return(await f.listSessions(J)).slice(0,J)}function Ch(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(`
473
+ `).trim()}function ZP(f){return f.replace(/\s+/g," ").trim()}function Eh(f,$){if(f.length<=$)return f;return`${f.slice(0,Math.max(0,$-3)).trimEnd()}...`}function Sh(f){for(let $ of["user","assistant"])for(let J of f){if(J.role!==$)continue;let H=ZP(Ch(J.content));if(!H)continue;let W=$==="user"?ZP(zh(H)):H,Q=Oh(W.split(`
474
+ `)[0]??W);return Eh(Q,50)}return}function kh(f){let $=0;for(let J of f)$+=LJ(J.metrics?.cost)??0;return $}function mh(f){let $,J;for(let H=f.length-1;H>=0;H-=1){let W=f[H];if(!$)$=Sf(W.modelInfo?.provider);if(!J)J=Sf(W.modelInfo?.id);if($&&J)break}return{provider:$,model:J}}function Ih(f){return Sf(f?.provider)??Sf(f?.provider&&typeof f.provider==="object"&&!Array.isArray(f.provider)?f.provider.id:void 0)}function xh(f){return Sf(f?.model)??Sf(f?.model&&typeof f.model==="object"&&!Array.isArray(f.model)?f.model.id:void 0)}function k5(f,$){let J=Nh(f.metadata),H=_J($?.title)??_J(J?.title),W=LJ($?.totalCost)??LJ(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:Sf($?.provider)??Sf(f.provider)??Ih(J)??"",model:Sf($?.model)??Sf(f.model)??xh(J)??"",metadata:Q}}async function VP(f,$){return await Promise.all($.map(async(J)=>{let H=k5(J),W=Boolean(_J(H.metadata?.title)),Q=Boolean(Sf(H.provider)),Z=Boolean(Sf(H.model)),j=LJ(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=mh(X),Y=kh(X);return k5(J,{title:W?void 0:Sh(X),provider:Q?void 0:V.provider,model:Z?void 0:V.model,totalCost:P||Y<=0?void 0:Y})}))}async function OJ(f,$={}){let J=m5($.limit),H=await wh(f,J),W=$.includeManifestFallback===!0&&H.length<J?await bh(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)=>k5(j));return await VP(f,Z)}async function gh(f){let $=f.trim();if(!$)return;let J=PP(XP(),$,`${$}.json`),H=await jP(J,"utf8").catch(()=>{return});if(!H)return;try{let W=Gf.safeParse(JSON.parse(H));return W.success?W.data.messages_path:void 0}catch{return}}async function I5(f,$={}){let J=new Map;return await OJ({listSessions:async(W)=>{let Q=await f.listSessions(W);J.clear();for(let Z of Q)J.set(Z.sessionId,Z);return Q.map(Y8)},readSessionMessages:async(W)=>{let Q=J.get(W)?.messagesPath??await gh(W);return await u$(Q)}},$)}var dP={};N(dP,{resolveSessionBackend:()=>J9,createRuntimeHost:()=>e1});var TP={};N(TP,{HubRuntimeHost:()=>_0});import{createSessionId as AP,HUB_CHECKPOINT_CAPABILITY as dh,HUB_COMPACTION_CAPABILITY as rh,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as lh,HUB_HOOK_CAPABILITY_PREFIX as ph,HUB_MISTAKE_LIMIT_CAPABILITY as ih,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as nh,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as ah,isHubToolExecutorName as th}from"@cline/shared";var BP={};N(BP,{createCoreSessionSnapshot:()=>J0,coreSessionSnapshotToRecord:()=>NJ});function vh(f){return f?JSON.parse(JSON.stringify(f)):void 0}function uh(f){return f?JSON.parse(JSON.stringify(f)):void 0}function ch(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 J0(f){let{session:$}=f,J=vh($.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:uh(f.messages)}:{},...f.usage?{usage:{...f.usage}}:{},...(()=>{let H=ch(J);return H?{checkpoint:H}:{}})()}}function NJ(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 i1(f){if(!f)return;return JSON.parse(JSON.stringify(f))}var sh=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function RP(f){if(!f||typeof f!=="object"||Array.isArray(f))return;return JSON.parse(JSON.stringify(f))}function FP(f){if(!f)return;let{userInstructionService:$,...J}=f;return JSON.parse(JSON.stringify(J))}function yP(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 c$(f,$,J){f.manifest.push($),f.handlers.set($.capabilityName,J)}function KP(f,$){let J={manifest:[],handlers:new Map};for(let W of Object.keys($.toolExecutors??{}).filter(th)){let Q=$.toolExecutors?.[W];if(typeof Q!=="function")continue;c$(J,{kind:"toolExecutor",executor:W,capabilityName:`${nh}${W}`},async({payload:Z,abortSignal:j})=>{let P=Array.isArray(Z.args)?[...Z.args]:[],X={...yP(Z.context),signal:j};return{result:await Q(...P,X)}})}for(let W of f?.extraTools??[])c$(J,{kind:"tool",name:W.name,description:W.description,inputSchema:i1(W.inputSchema)??{},...W.lifecycle?{lifecycle:i1(W.lifecycle)}:{},capabilityName:`${lh}${W.name}`},async({payload:Q,abortSignal:Z,progress:j})=>{let P={...yP(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 sh){let Q=H[W];if(typeof Q!=="function")continue;c$(J,{kind:"hook",name:W,capabilityName:`${ph}${W}`},async({payload:Z})=>({control:await Q(Z.context)}))}if(f?.compaction?.compact){let W=f.compaction.compact;c$(J,{kind:"compaction",capabilityName:rh,config:RP(f.compaction)},async({payload:Q})=>({result:await W(Q.context)}))}if(f?.checkpoint?.createCheckpoint){let W=f.checkpoint.createCheckpoint;c$(J,{kind:"checkpoint",capabilityName:dh,config:RP(f.checkpoint)},async({payload:Q})=>({result:await W(Q.context)}))}if(f?.onConsecutiveMistakeLimitReached){let W=f.onConsecutiveMistakeLimitReached;c$(J,{kind:"mistakeLimit",capabilityName:ih},async({payload:Q})=>({result:await W(Q.context)}))}if(f?.userInstructionService){let W=f.userInstructionService;c$(J,{kind:"userInstructionService",capabilityName:ah},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 oh(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 eh(f){if(typeof f!=="string")return f;try{return JSON.parse(f)}catch{return f}}function fT(f){return f==="completed"||f==="max_iterations"||f==="aborted"||f==="mistake_limit"||f==="error"}function $T(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 JT(f){let $=f?.result&&typeof f.result==="object"&&!Array.isArray(f.result)?f.result:void 0,J=f?.reason??$?.finishReason,H=fT(J)?J:J==="failed"?"error":"completed",W=$T(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 x5(f,$){return f.error?.message??`hub command failed: ${$}`}function H4(f){switch(f){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function hP(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:Vf.CORE,pid:typeof $?.pid==="number"?$.pid:void 0,startedAt:new Date(f.createdAt).toISOString(),endedAt:H4(f.status)==="running"?void 0:new Date(f.updatedAt).toISOString(),exitCode:H4(f.status)==="completed"?0:H4(f.status)==="failed"?1:void 0,status:H4(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 d$(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 HT(f){let $=d$(f?.snapshot);if($)return NJ($);let J=f?.session;return J?hP(J):void 0}function UP(f,$,J){let H=J?.workspaceRoot?.trim()||$.config.workspaceRoot||$.config.cwd;return Gf.parse({version:1,session_id:f,source:$.source??Vf.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:H4(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 GP(f,$){return Gf.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 _0{runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new J4;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=Bf(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 df({...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(!H6(f,"session.create"))return!1;let $=await W6({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=KP(f.localRuntime,$),H=f.config.sessionId?.trim()||AP(),W=()=>this.client.command("session.create",{workspaceRoot:f.config.workspaceRoot?.trim()||f.config.cwd,cwd:f.config.cwd,sessionConfig:i1({...f.config,sessionId:H}),metadata:{...f.sessionMetadata??{},source:f.source??Vf.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:i1(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=d$(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?GP(Z,f):UP(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?KP(H.localRuntime,W??{}):{manifest:[],handlers:new Map},Z=H?H.config.sessionId?.trim()||AP():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:i1({...H.config,sessionId:Z}),metadata:{...H.sessionMetadata??{},source:H.source??Vf.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:i1(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=d$(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?GP(P,H??{}):UP(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=d$($.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 HT($.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=d$(W);return Q?[NJ(Q)]:[]}):[];if(J.length>0)return J;return($.payload?.sessions??[]).map(hP)}async listSettings(f){let $=await this.client.command("settings.list",FP(f));if(!$.ok)throw Error(x5($,"settings.list"));return $.payload?.snapshot}async toggleSetting(f){let $=await this.client.command("settings.toggle",FP(f));if(!$.ok)throw Error(x5($,"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(x5(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 Bf(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:JT(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=d$(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=d$(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(oh(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=eh(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(()=>{})}}var DP={};N(DP,{RemoteRuntimeHost:()=>n1});class n1 extends _0{constructor(f){super({url:m0(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})}}var MP={};N(MP,{SqliteSessionStore:()=>W0});import{existsSync as WT,mkdirSync as QT}from"node:fs";import{join as ZT}from"node:path";import{asBool as W4,asOptionalString as H0,asString as L0,ensureSessionSchema as jT,loadSqliteDb as PT,nowIso as qJ,toBoolInt as Q4}from"@cline/shared/db";import{resolveDbDataDir as XT}from"@cline/shared/storage";class W0{sessionsDirPath;db;constructor(f={}){this.sessionsDirPath=f.sessionsDir??XT()}init(){this.getRawDb()}ensureSessionsDir(){if(!WT(this.sessionsDirPath))QT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return ZT(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let f=PT(this.sessionDbPath());return jT(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 $=qJ();this.run(`INSERT OR REPLACE INTO sessions (
475
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
476
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
477
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
478
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
479
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[f.sessionId,f.source,f.pid,f.startedAt,f.endedAt??null,f.exitCode??null,f.status,0,Q4(f.interactive),f.provider,f.model,f.cwd,f.workspaceRoot,f.teamName??null,Q4(f.enableTools),Q4(f.enableSpawn),Q4(f.enableTeams),f.parentSessionId??null,f.parentAgentId??null,f.agentId??null,f.conversationId??null,Q4(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(qJ()),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:qJ(),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,
480
+ provider, model, cwd, workspace_root, team_name,
481
+ enable_tools, enable_spawn, enable_teams,
482
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
483
+ prompt, metadata_json, hook_path, messages_path, updated_at
484
+ FROM sessions WHERE session_id = ?`,[f]);if(!$)return;return{sessionId:L0($.session_id),source:L0($.source),pid:Number($.pid??0),startedAt:L0($.started_at),endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:L0($.status),interactive:W4($.interactive),provider:L0($.provider),model:L0($.model),cwd:L0($.cwd),workspaceRoot:L0($.workspace_root),teamName:H0($.team_name),enableTools:W4($.enable_tools),enableSpawn:W4($.enable_spawn),enableTeams:W4($.enable_teams),parentSessionId:H0($.parent_session_id),parentAgentId:H0($.parent_agent_id),agentId:H0($.agent_id),conversationId:H0($.conversation_id),isSubagent:W4($.is_subagent),prompt:H0($.prompt),metadata:(()=>{let J=H0($.metadata_json);if(!J)return;try{let H=JSON.parse(J);if(H&&typeof H==="object"&&!Array.isArray(H))return H}catch{}return})(),hookPath:H0($.hook_path),messagesPath:H0($.messages_path),updatedAt:H0($.updated_at)??qJ()}}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(L0(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}}s4();import{existsSync as t5,mkdirSync as NT,readFileSync as SP,renameSync as qT,writeFileSync as bT}from"node:fs";import{join as kP}from"node:path";import{resolveSessionDataDir as wT}from"@cline/shared/storage";import{dirname as zT}from"node:path";import{nanoid as OT}from"nanoid";import{appendFileSync as VT,existsSync as YT,mkdirSync as _P,readFileSync as BT,writeFileSync as LP}from"node:fs";import{dirname as zP,join as AT}from"node:path";import{ensureHookLogDir as RT}from"@cline/shared/storage";class g5{adapter;messagesArtifactUploader;artifacts;constructor(f,$){this.adapter=f;this.messagesArtifactUploader=$;this.artifacts=new Q5(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile(f,$,J){HZ($,J,MW(f))}writeSessionManifest(f,$){_P(zP(f),{recursive:!0}),LP(f,`${JSON.stringify(Gf.parse($),null,2)}
485
+ `,"utf8")}readSessionManifest(f){return this.readManifestFile(f).manifest}readManifestFile(f){let $=this.artifacts.sessionManifestPath(f,!1);if(!YT($))return{path:$};try{return{path:$,manifest:Gf.parse(JSON.parse(BT($,"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=_W({updatedAt:s(),context:MW(f),messages:$,systemPrompt:J}),Q=`${JSON.stringify(W,null,2)}
486
+ `;if(_P(zP(H),{recursive:!0}),LP(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)??AT(RT(),"hooks.jsonl");VT(Z,`${JSON.stringify({ts:f,hookName:"session_shutdown",reason:H,sessionId:$,pid:J,source:W})}
487
+ `,"utf8")}}import{appendFileSync as FT}from"node:fs";import{join as yT}from"node:path";import{resolveRootSessionId as OP}from"@cline/shared";import{ensureHookLogDir as KT}from"@cline/shared/storage";import{z as v5}from"zod";var UT="subagent",GT=v5.looseObject({task:v5.string().optional(),systemPrompt:v5.string().optional()});class bJ{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:UT,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:B8({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 $=OP(f.sessionContext);if(!$)return;let J=GT.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=_1($,f.agentId),W=await this.adapter.getSession(H),Q=s(),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:B8({metadata:W.metadata??void 0,prompt:W.prompt??j??null}),expectedStatusLock:W.statusLock}),H}async upsertSubagentSessionFromHook(f){if(!f.parent_agent_id)return;let $=OP(f.sessionContext);if(!$)return;if(f.hookName==="session_shutdown"){let J=_1($,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,X8($))}async applySubagentStatusBySessionId(f,$){let J=await this.adapter.getSession(f);if(!J)return;let H=$==="running"?null:s(),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=j8(f,$),Q=s(),{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)??yT(KT(),"hooks.jsonl");FT(J,`${JSON.stringify({ts:s(),...f})}
488
+ `,"utf8")}}import{formatUserInputBlock as LT}from"@cline/shared";var EP={};N(EP,{toTeamProgressLifecycleEvent:()=>t1,sanitizeTeamName:()=>K6,reviveTeamStateDates:()=>y6,createWorkerReviewerTeam:()=>CP,createSpawnAgentTool:()=>r0,createDelegatedAgentConfigProvider:()=>h1,createDelegatedAgent:()=>T1,createAgentTeamsTools:()=>z$,createAgentTeam:()=>c5,buildTeamProgressSummary:()=>a1,buildDelegatedAgentConfig:()=>_$,bootstrapAgentTeams:()=>M1,AgentTeamsRuntime:()=>r$,AgentTeam:()=>o1});function Q0(){return new Date().toISOString()}function NP(f,$){if($<=0)return 0;return Math.round(f/$*100)}function hT(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 a1(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:Q0(),members:{total:$.members.length,byStatus:J,leadCount:j,teammateCount:P},tasks:{total:$.tasks.length,byStatus:H,blockedTaskIds:X,readyTaskIds:V,completionPct:NP(Y,$.tasks.length)},runs:{total:$.runs.length,byStatus:W,activeRunIds:A,latestRunId:R},outcomes:{total:$.outcomes.length,byStatus:Q,finalizedPct:NP(Q.finalized,$.outcomes.length),missingRequiredSections:hT($.outcomes,$.outcomeFragments)},fragments:{total:$.outcomeFragments.length,byStatus:Z}}}function t1(f){let{event:$}=f;switch($.type){case"team_task_updated":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Q0(),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:Q0(),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:Q0(),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:Q0(),outcomeId:$.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Q0(),outcomeId:$.fragment.outcomeId,fragmentId:$.fragment.id,agentId:$.fragment.sourceAgentId};case"team_message":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Q0(),taskId:$.message.taskId,agentId:$.message.fromAgentId,message:$.message.subject};case"team_mission_log":return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Q0(),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:Q0(),agentId:$.agentId}}return{teamName:f.teamName,sessionId:f.sessionId,eventType:$.type,ts:Q0()}}import{sanitizeFileName as TT,TeamMessageType as w}from"@cline/shared";import{nanoid as DT}from"nanoid";import{TeamMessageType as KS}from"@cline/shared";function u5(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 qP(f,$){return f?.status==="stopped"&&u5($)}var MT=600000,bP="recovered_queued";function _T(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.
489
+
490
+ ${f.message}`}class o1{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:w.AgentEvent,agentId:f,event:W})}},H=new d0(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:w.TaskStart,agentId:f,message:$});try{let H=await J.run($);return this.emitEvent({type:w.TaskEnd,agentId:f,result:H}),H}catch(H){let W=H instanceof Error?H:Error(String(H));throw this.emitEvent({type:w.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:w.TaskStart,agentId:f,message:$});try{let H=await J.continue($);return this.emitEvent({type:w.TaskEnd,agentId:f,result:H}),H}catch(H){let W=H instanceof Error?H:Error(String(H));throw this.emitEvent({type:w.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:w.TaskStart,agentId:J.agentId,message:J.message});try{let W=await H.run(J.message);return this.emitEvent({type:w.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:w.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:w.TaskStart,agentId:J.agentId,message:J.message});try{let W=await H.run(J.message);this.emitEvent({type:w.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:w.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:w.TaskStart,agentId:Q,message:W});try{let j=await Z.run(W);this.emitEvent({type:w.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:
491
+ ${j.text}
492
+
493
+ Please continue from here.`}}catch(j){let P=j instanceof Error?j:Error(String(j));this.emitEvent({type:w.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{}}}function c5(f,$){return new o1(f,$)}function CP(f){let $=c5({worker:f.worker,reviewer:f.reviewer}),J=$;return J.doAndReview=async(H)=>{let W=await $.routeTo("worker",H),Q=await $.routeTo("reviewer",`Please review this work:
494
+
495
+ ${W.text}`);return{workerResult:W,reviewResult:Q}},J}class r${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_${TT(DT(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,s1(f.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,s1(f.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,s1(f.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,s1((f.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,s1((f.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,s1((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:MT,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:w.AgentEvent,agentId:f,event:Z}),this.trackMeaningfulEvent(f,Z)}},W=new d0(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:w.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(!u5(H))throw H}J.status="stopped",this.emitEvent({type:w.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:w.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:w.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:w.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:w.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:w.TaskStart,agentId:f,message:$});try{let W=this.listMailbox(f,{unreadOnly:!0,markRead:!0}),Q=W.length>0?`${this.buildMailboxNotification(W)}
496
+
497
+ ${$}`:$,Z=J?.continueConversation?await H.agent.continue(Q):await H.agent.run(Q);return this.emitEvent({type:w.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:w.TaskEnd,agentId:f,error:Q,messages:H.agent.getMessages()}),!qP(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:w.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===bP;f.nextAttemptAt=void 0,f.status="running",f.startedAt=new Date,f.heartbeatAt=new Date,f.currentActivity="run_started",this.emitEvent({type:w.RunStarted,run:{...f}});let J=setInterval(()=>{if(f.status!=="running")return;this.recordRunProgress(f,"heartbeat")},2000);try{let H=$?_T(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:w.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(qP(Q,H))f.status="cancelled",f.currentActivity="cancelled",this.emitEvent({type:w.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:w.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 wP($);return{...J}}async awaitAllRuns(f=250){while(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))await wP(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:w.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:w.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=bP,!this.runQueue.includes(J.id))this.runQueue.push(J.id);$.push({...J}),this.emitEvent({type:w.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:w.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:w.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:w.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:w.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:w.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:w.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:w.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(!u5($))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:w.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(`
498
+ `)}emitEvent(f){try{this.onTeamEvent?.(f)}catch{}}}function wP(f){return new Promise(($)=>setTimeout($,f))}function s1(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 d5(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}),wJ(f);break}default:break}}async function r5(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 l5(f,$,J,H){if(!f.runtime.teamRuntime)return;let W=f.runtime.teamRuntime.getTeamName();H({type:"team_progress",payload:{sessionId:$,teamName:W,lifecycle:t1({teamName:W,sessionId:$,event:J}),summary:a1(W,f.runtime.teamRuntime.exportState())}})}function Z4(f){return f.activeTeamRunIds.size>0||f.pendingTeamRunUpdates.length>0}function p5(f,$){if(f.aborting)return!1;if(!($==="completed"||$==="max_iterations"))return!1;return f.config.enableAgentTeams===!0&&Z4(f)}function wJ(f){let $=f.teamRunWaiters.splice(0);for(let J of $)J()}async function i5(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 n5(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 j4(`System-delivered teammate async run updates:
499
+ ${J.join(`
500
+ `)}
501
+
502
+ ${W}`,f.config.mode)}function j4(f,$){return LT(f,$==="plan"?"plan":$==="yolo"?"yolo":"act")}var a5=4;class z0{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 g5(f,$.messagesArtifactUploader),this.teamChildren=new bJ(f,this.manifestStore,(J,H,W)=>this.toPersistedMessages(J,H,W),z0.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages(f,$,J){if(!f)return;return $?D6($.messages,$,J):T6(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??s(),J=f.sessionId.trim(),H=J.length>0?J:`${Date.now()}_${OT(5)}`,W=this.manifestStore.artifacts.sessionMessagesPath(H),Q=this.manifestStore.artifacts.sessionManifestPath(H),Z=B8({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:l0(j.metadata),hookPath:"",messagesPath:W,updatedAt:s()}),this.manifestStore.initializeMessagesFile(H,W,$),this.manifestStore.writeSessionManifest(Q,j),{manifestPath:Q,messagesPath:W,manifest:j}}async updateSessionStatus(f,$,J){let H;if((await QZ(()=>this.adapter.getSession(f),async(Q)=>{return H=$==="running"?void 0:s(),this.adapter.updateSession({sessionId:f,status:$,endedAt:H??null,exitCode:$==="running"?null:typeof J==="number"?J:null,expectedStatusLock:Q.statusLock})},a5)).updated){if($==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions(f,"cancelled");return{updated:!0,endedAt:H}}return{updated:!1}}async updateSession(f){for(let $=0;$<a5;$++){let J=await this.adapter.getSession(f.sessionId);if(!J)return{updated:!1};let H=J.metadata??void 0,W=f.metadata!==void 0?l0(f.metadata)??{}:l0(H)??{},Q=b$(typeof H?.title==="string"?H.title:void 0),Z=f.title!==void 0?b$(f.title):Q??DW(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?l0(f.metadata)??{}:l0(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=T6($);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 $=s(),J=z0.STALE_REASON;for(let H=0;H<a5;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:z0.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=WZ(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,z0.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=l0(W.metadata??void 0),Z=this.manifestStore.readSessionManifest(W.sessionId),j=b$(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 IW(W.cwd,W.sessionId),b8(W.messagesPath),b8(this.manifestStore.artifacts.sessionManifestPath(W.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(W.sessionId)}))}if(await IW(J.cwd,$),b8(J.messagesPath),b8(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(zT(W));for(let W of H)this.manifestStore.artifacts.removeDir(W)}return{deleted:!0}}}function s5(){return new Date().toISOString()}function mP(f,$){let J=`${f}.tmp`;bT(J,`${JSON.stringify($,null,2)}
503
+ `,"utf8"),qT(J,f)}class IP{sessionsDirPath;constructor(f=wT()){this.sessionsDirPath=f}ensureSessionsDir(){if(!t5(this.sessionsDirPath))NT(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return kP(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return kP(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let f=this.indexPath();if(!t5(f))return{version:1,sessions:{}};try{let $=JSON.parse(SP(f,"utf8"));if($?.version===1&&$.sessions)return $}catch{}return{version:1,sessions:{}}}writeIndex(f){mP(this.indexPath(),f)}readQueue(){let f=this.spawnQueuePath();if(!t5(f))return{version:1,nextId:1,requests:[]};try{let $=JSON.parse(SP(f,"utf8"));if($?.version===1&&typeof $.nextId==="number"&&Array.isArray($.requests))return $}catch{}return{version:1,nextId:1,requests:[]}}writeQueue(f){mP(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:s5()};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:s5()}),$.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=s5(),this.writeQueue(J),H.task}}class o5 extends z0{constructor(f,$={}){super(new IP(f),$)}ensureSessionsDir(){return super.ensureSessionsDir()}}var vP={};N(vP,{CoreSessionService:()=>Z0});import{existsSync as CT,mkdirSync as ET}from"node:fs";import{resolveSessionDataDir as ST}from"@cline/shared/storage";var e5=`
504
+ session_id AS sessionId,
505
+ source,
506
+ pid,
507
+ started_at AS startedAt,
508
+ ended_at AS endedAt,
509
+ exit_code AS exitCode,
510
+ status,
511
+ status_lock AS statusLock,
512
+ interactive,
513
+ provider,
514
+ model,
515
+ cwd,
516
+ workspace_root AS workspaceRoot,
517
+ team_name AS teamName,
518
+ enable_tools AS enableTools,
519
+ enable_spawn AS enableSpawn,
520
+ enable_teams AS enableTeams,
521
+ parent_session_id AS parentSessionId,
522
+ parent_agent_id AS parentAgentId,
523
+ agent_id AS agentId,
524
+ conversation_id AS conversationId,
525
+ is_subagent AS isSubagent,
526
+ prompt,
527
+ metadata_json AS metadata,
528
+ hook_path AS hookPath,
529
+ messages_path AS messagesPath,
530
+ updated_at AS updatedAt`;function f9(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 $9(f){if(!f||Object.keys(f).length===0)return null;return JSON.stringify(f)}function xP(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 gP{store;sessionsDirPath;constructor(f,$=ST()){this.store=f;this.sessionsDirPath=$}ensureSessionsDir(){if(!CT(this.sessionsDirPath))ET(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession(f){this.store.run(`INSERT OR REPLACE INTO sessions (
531
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
532
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
533
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
534
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
535
+ ) 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,$9(f.metadata),"",f.hookPath??"",f.messagesPath??null,f.updatedAt])}async getSession(f){let $=this.store.queryOne(`SELECT ${e5} FROM sessions WHERE session_id = ?`,[f]);return $?f9($):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 ${e5}
536
+ FROM sessions
537
+ ${H}
538
+ ORDER BY started_at DESC
539
+ LIMIT ?`,[...J,f.limit]).map(f9)}async updateSession(f){if(f.setRunning){if(f.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
540
+ SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
541
+ parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
542
+ prompt = COALESCE(prompt, ?)
543
+ WHERE session_id = ? AND status_lock = ?`,[s(),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($9(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(s());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)
544
+ VALUES (?, ?, ?, ?, ?, NULL)`,[f.rootSessionId,f.parentAgentId,f.task??null,f.systemPrompt??null,s()])}async claimSpawnRequest(f,$){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
545
+ WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
546
+ 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 = ?",[s(),J.id]),J.task??void 0}}class Z0 extends z0{store;constructor(f,$={}){super(new gP(f,$.sessionArtifactsDir),$);this.store=f}createRootSession(f){this.store.run(`INSERT OR REPLACE INTO sessions (
547
+ session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
548
+ provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
549
+ parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
550
+ metadata_json, transcript_path, hook_path, messages_path, updated_at
551
+ ) 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,s()])}}function kT(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 P4,X4;function mT(f,$){if(f!=="auto"&&f!=="hub")return;if($.hub?.endpoint?.trim())return;J6($.hub?.workspaceRoot?.trim()||$.hub?.cwd?.trim()||process.cwd())}async function IT(f){await f.reconcileDeadSessions?.().catch(()=>{})}function cP(f){try{let $=new W0;return $.init(),new Z0($,{messagesArtifactUploader:f.messagesArtifactUploader})}catch{return f.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new o5(void 0,{messagesArtifactUploader:f.messagesArtifactUploader})}}function uP(f,$,J){return new j0({sessionService:J??f.sessionService??cP(f),capabilities:f.capabilities,telemetry:f.telemetry,toolPolicies:f.toolPolicies,distinctId:$,fetch:f.fetch})}async function J9(f){if(P4)return P4;if(X4)return await X4;return X4=(async()=>{return P4=cP(f),await IT(P4),P4})().finally(()=>{X4=void 0}),await X4}async function e1(f){let $=F$(f.distinctId);f.telemetry?.setDistinctId($);let J=kT(f);if(mT(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 n1({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 K$({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 _0({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 x2({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 _0({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"}),uP(f,$)}return uP(f,$)}class V4{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=lj(f),this.pendingPrompts=pj(f),this.automation=new K5(()=>{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 $4({workspaceRoot:P.workspaceRoot??process.cwd(),specs:{cronSpecsDir:P.cronSpecsDir??P.cronDir,scope:Mj(P.cronScope),workspaceRoot:P.workspaceRoot},runtimeHandlers:_j({host:f,getExtensionContext:()=>FJ({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 $=Bf(f.capabilities),J=await e1({...f,capabilities:$}),H=Dj(f.automation),W=new V4(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 $=nj(f),J=await this.prepare?.($);try{let H=J?await J.applyToStartSessionInput($):$,W=await this.host.startSession(L5(H,{defaultCapabilities:this.capabilities,withExtensionContext:(Q)=>FJ({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 aj({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 OJ(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?L5(f.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>FJ({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()}}var lP={};N(lP,{resolvePluginConfigSearchPaths:()=>F8,resolveAndLoadAgentPlugins:()=>w1,resolveAgentPluginPaths:()=>E$,loadAgentPluginsFromPathsWithDiagnostics:()=>D0,loadAgentPluginsFromPaths:()=>O6,loadAgentPluginFromPath:()=>R8,discoverPluginModulePaths:()=>y8});var $X={};N($X,{resolveMcpServerRegistrations:()=>A4,resolveDefaultMcpSettingsPath:()=>Q$,registerMcpServersFromSettingsFile:()=>J2,loadMcpSettingsFile:()=>B4,hasMcpSettingsFile:()=>$2,createMcpTools:()=>H2,createDisabledMcpToolPolicy:()=>R4,createDisabledMcpToolPolicies:()=>EJ,createDefaultMcpServerClientFactory:()=>f2,InMemoryMcpManager:()=>l$});import{spawn as xT}from"node:child_process";import{StringDecoder as aP}from"node:string_decoder";var gT="2024-11-05",vT=5000,uT=1500;function pP(f){return f instanceof Error?f.message:String(f)}function iP(f){let $=Buffer.from(JSON.stringify(f),"utf8"),J=Buffer.from(`Content-Length: ${$.byteLength}\r
552
+ \r
553
+ `,"utf8");return Buffer.concat([J,$])}function nP(f){return Buffer.from(`${JSON.stringify(f)}
554
+ `,"utf8")}class H9{buffer="";decoder=new aP("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`\r
555
+ \r
556
+ `);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 W9{buffer="";decoder=new aP("utf8");push(f){this.buffer+=this.decoder.write(f);let $=[];while(!0){let J=this.buffer.indexOf(`
557
+ `);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 tP{registration;process;nextRequestId=1;pending=new Map;framedParser=new H9;newlineParser=new W9;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:gT,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},uT),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 H9,this.newlineParser=new W9,this.stderrBuffer="",this.protocolMode=f;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},H=xT($.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: ${pP(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}": ${pP(f)}.${J}`)),$.kill()}async request(f,$,J=vT){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"?iP(Q):nP(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"?iP(H):nP(H))}failAllPending(f){for(let[$,J]of this.pending)clearTimeout(J.timeout),this.pending.delete($),J.reject(f)}}function f2(){return(f)=>new tP(f)}import{existsSync as cT,readFileSync as dT}from"node:fs";import{resolveMcpSettingsPath as rT}from"@cline/shared/storage";import{z as k}from"zod";var Y4=k.record(k.string(),k.string()),sP=k.record(k.string(),k.unknown()),lT=k.object({type:k.literal("stdio"),command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:Y4.optional()}),pT=k.object({type:k.literal("sse"),url:k.string().url(),headers:Y4.optional()}),iT=k.object({type:k.literal("streamableHttp"),url:k.string().url(),headers:Y4.optional()}),nT=k.discriminatedUnion("type",[lT,pT,iT]),aT=k.object({transport:nT,disabled:k.boolean().optional(),metadata:sP.optional()}),tT=k.enum(["stdio","sse","http","streamableHttp"]).optional(),oP=k.object({type:k.enum(["stdio","sse","streamableHttp"]).optional(),transportType:tT,disabled:k.boolean().optional(),metadata:sP.optional()});function Q9(f){if(!f)return;if(f==="http")return"streamableHttp";return f}var sT=oP.extend({command:k.string().min(1),args:k.array(k.string()).optional(),cwd:k.string().min(1).optional(),env:Y4.optional()}).superRefine((f,$)=>{let J=f.type??Q9(f.transportType);if(J&&J!=="stdio")$.addIssue({code:k.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})),oT=oP.extend({url:k.string().url(),headers:Y4.optional()}).superRefine((f,$)=>{let J=f.type??Q9(f.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")$.addIssue({code:k.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform((f)=>{if((f.type??Q9(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}}),eT=k.union([aT,sT,oT]),fD=k.object({mcpServers:k.record(k.string(),eT)}).strict();function Q$(){return rT()}function B4(f={}){let $=f.filePath??Q$(),J=dT($,"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=fD.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 $2(f={}){let $=f.filePath??Q$();return cT($)}function A4(f={}){let $=B4(f);return Object.entries($.mcpServers).map(([J,H])=>({name:J,transport:H.transport,disabled:H.disabled,metadata:H.metadata}))}async function J2(f,$={}){let J=A4($);for(let H of J)await f.registerServer(H);return J}function kf(){return Date.now()}function $D(f){return f.map(($)=>({name:$.name,description:$.description,inputSchema:$.inputSchema}))}class l${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:kf()});return}let J=JSON.stringify($.registration.transport)!==JSON.stringify(f.transport);if($.registration={...f},$.updatedAt=kf(),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=kf(),$)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&&kf()-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=$D(H);return $.toolCache=W,$.toolCacheUpdatedAt=kf(),$.updatedAt=kf(),W})}async callTool(f){return this.runExclusive(f.serverName,async()=>{let $=this.requireServer(f.serverName),J=await this.ensureConnectedClient($);return $.updatedAt=kf(),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=kf();try{let $=f.client??await this.clientFactory(f.registration);await $.connect(),f.client=$,f.status="connected",f.lastError=void 0,f.updatedAt=kf()}catch($){throw f.status="disconnected",f.lastError=$ instanceof Error?$.message:String($),f.updatedAt=kf(),$}}async disconnectState(f){if(!f.client){f.status="disconnected",f.updatedAt=kf();return}try{await f.client.disconnect()}finally{f.status="disconnected",f.updatedAt=kf()}}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 JD}from"node:crypto";var eP=128,HD=/[^a-zA-Z0-9_-]+/g,fX=8,WD=1,QD="mcp_tool";function ZD(f){return JD("sha1").update(f).digest("hex").slice(0,fX)}function jD(f){return f.replace(HD,"_")}var CJ=({serverName:f,toolName:$})=>{let J=`${f}__${$}`,H=jD(J);if(H===J&&J.length<=eP)return J;let W=ZD(J),Q=eP-WD-fX;return`${H.slice(0,Q)||QD}_${W}`};function R4(f){return{[(f.nameTransform??CJ)({serverName:f.serverName,toolName:f.toolName})]:{enabled:!1}}}function EJ(f){let $={};for(let J of f.toolNames)Object.assign($,R4({serverName:f.serverName,toolName:J,nameTransform:f.nameTransform}));return $}import{createTool as PD}from"@cline/shared";function XD(f,$){let J=$.description?.trim();if(J)return J;return`Execute MCP tool "${$.name}" from server "${f}".`}async function H2(f){let $=await f.provider.listTools(f.serverName),J=f.nameTransform??CJ;return $.map((H)=>{let W=J({serverName:f.serverName,toolName:H.name});return PD({name:W,description:XD(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})})})}var WX={};N(WX,{toHookConfigFileName:()=>G8,runSubprocessEvent:()=>W2,runHook:()=>Z2,resolveHooksConfigSearchPaths:()=>K8,parseHookEventPayload:()=>Q2,mergeAgentHooks:()=>I$,listHookConfigFiles:()=>t0,createSubprocessHooks:()=>mJ,createHookConfigFileHooks:()=>h8,createHookConfigFileExtension:()=>k1,createHookAuditHooks:()=>S1,createAgentHooksExtension:()=>C1,HookEventPayloadSchema:()=>kJ,HookEventNameSchema:()=>SJ,HookConfigFileName:()=>E1,HOOK_CONFIG_FILE_EVENT_MAP:()=>U8,HOOKS_CONFIG_DIRECTORY_NAME:()=>b6});import{HookEventNameSchema as SJ,HookEventPayloadSchema as kJ,parseHookEventPayload as Q2,resolveHookSessionContext as yD}from"@cline/shared";import{z as p$}from"zod";import{spawn as VD}from"node:child_process";import{augmentNodeCommandForDebug as YD,withResolvedClineBuildEnv as BD}from"@cline/shared";function AD(f){let $=f.trim();if(!$)return{};let H=$.split(`
558
+ `).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 RD(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 FD(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 W2(f,$){let J=YD($.command,{env:$.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let H=!!$.detached,W=VD(J[0],J.slice(1),{cwd:$.cwd,env:BD($.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(RD(R,J))})});if(await FD(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}=AD(j);B({exitCode:A,stdout:j,stderr:P,parsedJson:R,parseError:U,timedOut:X})})});return await Promise.race([Y,Z])}var KD=p$.object({contextModification:p$.string().optional(),cancel:p$.boolean().optional(),review:p$.boolean().optional(),errorMessage:p$.string().optional(),context:p$.string().optional(),overrideInput:p$.unknown().optional()}).passthrough();var UD=["agent","hook"];async function Z2(f,$={}){let J=$.command??UD;return await W2(f,{command:J,cwd:$.cwd,env:$.env,detached:$.detached,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn})}function HX(f){return f instanceof Error?f:Error(String(f))}function GD(f){if(!f||typeof f!=="object")return;let $=KD.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 JX(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 O0(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:yD(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 hD(f){return{name:f.name,message:f.message,stack:f.stack}}function TD(f){let $=String(f??"").toLowerCase();return $.includes("cancel")||$.includes("abort")||$.includes("interrupt")}function DD(f){return{agentId:f.snapshot.agentId,conversationId:f.snapshot.conversationId??f.snapshot.runId??f.snapshot.agentId,parentAgentId:f.snapshot.parentAgentId??null}}function MD(f){return f.filter(($)=>$.type==="text"&&typeof $.text==="string").map(($)=>$.text).join("")}function _D(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 LD(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 i$(f,$){try{let J=await Z2(f,{command:$.command,cwd:$.cwd,env:$.env,detached:!0,onSpawn:$.onSpawn});$.onDispatch?.({payload:f,result:J,detached:!0})}catch(J){$.onDispatchError?.(HX(J),f)}}function mJ(f={}){return{hooks:{beforeRun:async(j)=>{let P=DD(j);if((f.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...O0("agent_resume",P,f),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await i$(V,f)}else{let V={...O0("agent_start",P,f),hookName:"agent_start",taskStart:{taskMetadata:{}}};await i$(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={...O0("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:JX(j.input)}};try{let V=await Z2(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 LD(GD(V?.parsedJson))}catch(V){f.onDispatchError?.(HX(V),X);return}},afterTool:async(j)=>{let P=_D(j),X={agentId:j.snapshot.agentId,conversationId:j.snapshot.conversationId??j.snapshot.runId??j.snapshot.agentId,parentAgentId:j.snapshot.parentAgentId??null},V={...O0("tool_result",X,f),hookName:"tool_result",iteration:j.snapshot.iteration,tool_result:P,postToolUse:{toolName:P.name,parameters:JX(P.input),result:typeof P.output==="string"?P.output:JSON.stringify(P.output),success:!P.error,executionTimeMs:P.durationMs}};await i$(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={...O0("agent_end",X,f),hookName:"agent_end",iteration:P.iterations,turn:{outputText:P.outputText,status:P.status},taskComplete:{taskMetadata:{}}};await i$(B,f);return}let V=P.status==="aborted"||TD(P.error?.message)?"agent_abort":"agent_error",Y=V==="agent_error"?{...O0(V,X,f),hookName:V,iteration:P.iterations,error:hD(P.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...O0(V,X,f),hookName:V,reason:P.error?.message,taskCancel:{taskMetadata:{}}};await i$(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={...O0("prompt_submit",P,f),hookName:"prompt_submit",userPromptSubmit:{prompt:MD(j.message.content),attachments:[]}};await i$(X,f)}},shutdown:async({agentId:j,conversationId:P,parentAgentId:X,reason:V})=>{let Y={...O0("session_shutdown",{agentId:j,conversationId:P,parentAgentId:X},f),hookName:"session_shutdown",reason:V};await i$(Y,f)}}}var BX={};N(BX,{createTeamName:()=>IJ,DefaultRuntimeBuilder:()=>X2});import{hasRuntimeConfigExtension as gD}from"@cline/shared";import{nanoid as vD}from"nanoid";F0();var VX={};N(VX,{createLocalTeamStore:()=>X9,SqliteTeamStore:()=>n$,FileTeamStore:()=>F4});import{appendFileSync as zD,existsSync as j2,mkdirSync as QX,readdirSync as OD,readFileSync as ZX,renameSync as ND,writeFileSync as qD}from"node:fs";import{join as Z9}from"node:path";import{resolveTeamDataDir as bD}from"@cline/shared/storage";function jX(){return new Date().toISOString()}function j9(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function PX(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 F4{teamDirPath;constructor(f={}){this.teamDirPath=f.teamDir??bD()}init(){this.ensureTeamDir()}listTeamNames(){if(!j2(this.teamDirPath))return[];return OD(this.teamDirPath,{withFileTypes:!0}).filter((f)=>f.isDirectory()).filter((f)=>j2(this.statePath(f.name))).map((f)=>f.name).sort()}readState(f){let $=this.readEnvelope(f);return $?.teamState?PX($.teamState):void 0}readHistory(f,$=200){let J=this.historyPath(f);if(!j2(J))return[];return ZX(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?PX($.teamState):void 0,teammates:$?.teammates??[],interruptedRunIds:[]}}handleTeamEvent(f,$){this.ensureTeamSubdir(f),zD(this.historyPath(f),`${JSON.stringify({ts:jX(),eventType:$.type,payload:$})}
560
+ `,"utf8")}persistRuntime(f,$,J){this.ensureTeamSubdir(f);let H={version:1,updatedAt:jX(),teamState:$,teammates:J},W=this.statePath(f),Q=`${W}.tmp`;qD(Q,`${JSON.stringify(H,null,2)}
561
+ `,"utf8"),ND(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(!j2(this.teamDirPath))QX(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir(f){let $=Z9(this.ensureTeamDir(),j9(f));if(!j2($))QX($,{recursive:!0});return $}statePath(f){return Z9(this.ensureTeamDir(),j9(f),"state.json")}historyPath(f){return Z9(this.ensureTeamDir(),j9(f),"task-history.jsonl")}readEnvelope(f){let $=this.statePath(f);if(!j2($))return;try{let J=JSON.parse(ZX($,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as wD,mkdirSync as CD}from"node:fs";import{join as ED}from"node:path";import{safeJsonParse as XX}from"@cline/shared";import{loadSqliteDb as SD,nowIso as P9}from"@cline/shared/db";import{resolveDbDataDir as kD}from"@cline/shared/storage";function mD(){return kD()}function P2(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function ID(f){let $=XX(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 xD(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 n${teamDirPath;db;constructor(f={}){this.teamDirPath=f.teamDir??mD()}init(){this.getRawDb()}ensureTeamDir(){if(!wD(this.teamDirPath))CD(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return ED(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let f=SD(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 = ?",[P2(f)]);if(!$)return;let J=XX($.state_json);if(!J)return;try{return xD(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 ?",[P2(f),$]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime(f){let $=P2(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?ID(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, ?)`,[P2(f),P9(),$,JSON.stringify(J),H??null])}persistRuntime(f,$,J){let H=P2(f),W=P9();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=P2(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=P9();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 X9(f={}){try{let $=new n$(f);return $.init(),$}catch{let $=new F4({teamDir:f.teamDir});return $.init(),$}}function V9(f,$){return gD(f,$)}function uD(f,$){let J=$?.["*"]??{},H=$?.[f]??{};return{...J,...H}.enabled!==!1}function cD(f,$){return f.filter((J)=>uD(J.name,$))}function YX(f,$){return R$(cD(f,$))}function IJ(){return`team-${vD(5)}`}function Y9(f,$,J,H,W,Q,Z,j){let P=bf[G0({mode:J})],X=U1($,H,J,W??K1);return YX(N$({cwd:f,...P,enableSkills:!!Z,...X,executors:{...Z?{skills:Z}:{},...j??{}}}),Q)}function dD(f){return Y9(f.cwd,f.providerId,f.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,rD,f.toolExecutors).some(($)=>$.name==="skills")}var rD=async()=>"";async function lD(f){let $=Q$();if(!$2({filePath:$}))return{tools:[]};let J=new l$({clientFactory:f2()}),H;try{H=await J2(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)=>H2({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 pD(f,$){if(!f)return;for(let J of f.getTeammateIds())try{f.shutdownTeammate(J,$)}catch{}}function iD(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 nD(f){let $=bf[G0({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 X2{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=nD($),A=uf(),R=[],U=$.teamName?.trim()||IJ(),y=$.sessionId?.trim()||U,F=V9(X,"rules"),K=V9(X,"skills"),M=V9(X,"workflows"),T=F||K||M,G=!1,h=Boolean(P),z=P,u;if(!z&&T)z=H$({skills:{workspacePath:$.cwd},rules:{workspacePath:$.cwd},workflows:{workspacePath:$.cwd}});if(z)await z.start().catch(()=>{});let gf=B.enableTools&&K&&Boolean(z)&&(h||z?.hasConfiguredSkills($.skills)===!0)&&dD({cwd:$.cwd,providerId:$.providerId,mode:B.mode,modelId:$.modelId,toolRoutingRules:$.toolRoutingRules,toolPolicies:$.toolPolicies,toolExecutors:V}),a=z&&T?z.createExtension({includeRules:F,includeSkills:K,includeWorkflows:M,registerSkillsTool:gf,allowedSkillNames:$.skills}):void 0,c=a?[...H??$.extensions??[],a]:H??$.extensions;if(B.enableTools){if(R.push(...Y9($.cwd,$.providerId,B.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let r=await lD($.logger);R.push(...r.tools),u=r.shutdown}}let d,t=B.enableAgentTeams?X9():void 0,pf=t?.loadRuntime(y),C=pf?.state,nf=pf?.teammates??[],vf=new Map(nf.map((r)=>[r.agentId,r])),$f=$.sessionId||U,A2,P$=[],X$=!1,o$=h1({providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,apiKey:$.apiKey??"",baseUrl:$.baseUrl,headers:$.headers,providerConfig:$.providerConfig,knownModels:$.knownModels,thinking:$.thinking,maxIterations:$.maxIterations,hooks:J,extensions:c,logger:W??$.logger,telemetry:f.telemetry??$.telemetry,workspaceMetadata:$.workspaceMetadata});if(!this.teamRuntimeEntries.has($f))this.teamRuntimeEntries.set($f,{delegatedAgentConfigProvider:o$});let R2=()=>{if(!B.enableAgentTeams)return;let r=this.teamRuntimeEntries.get($f)??{delegatedAgentConfigProvider:o$};if(this.teamRuntimeEntries.set($f,r),d=r.runtime,!d){if(d=new r$({teamName:U,leadAgentId:$.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:(e)=>{if(Y(e),d&&t){if(e.type==="teammate_spawned"&&e.teammate?.rolePrompt){let X0={agentId:e.agentId,rolePrompt:e.teammate.rolePrompt,modelId:e.teammate.modelId,maxIterations:e.teammate.maxIterations};vf.set(X0.agentId,X0)}if(e.type==="teammate_shutdown"&&!iD(e.reason))vf.delete(e.agentId);t.handleTeamEvent(y,e),t.persistRuntime(y,d.exportState(),Array.from(vf.values()))}}}),C)d.hydrateState(C),X$=!0;r.runtime=d}if(!G){if(!d)return;G=!0;let e=M1({runtime:d,leadAgentId:$.sessionId||"lead",restoredFromPersistence:Boolean(C),restoredTeammates:nf,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(X0)=>{P$=X0,A2?.addTools(X0)},createBaseTools:B.enableTools?()=>Y9($.cwd,$.providerId,B.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,void 0,V):void 0,teammateConfigProvider:o$});if(X$)d.recoverActiveRuns("runtime_recovered");if(e.restoredFromPersistence)j?.();R.push(...e.tools)}return d};if(B.enableSpawnAgent&&Z){let r=Z();R.push({...r,execute:async(e,X0)=>{return R2(),r.execute(e,X0)}})}if(B.enableAgentTeams)R2();let z4=YX(R,$.toolPolicies),WH=z4.some((r)=>r.name===ff.SUBMIT_AND_EXIT&&r.lifecycle?.completesRun===!0),e$=B.enableAgentTeams?()=>{let r=this.teamRuntimeEntries.get($f)?.runtime;if(!r)return;let e=r.listTasks(),X0=e.some((N0)=>N0.status==="in_progress"||N0.status==="pending"),X3=r.listRuns({}),QY=X3.some((N0)=>N0.status==="running"||N0.status==="queued");if(X0||QY){let N0=e.filter((_f)=>_f.status==="in_progress"||_f.status==="pending").map((_f)=>`${_f.id} (${_f.status}): ${_f.title}`).join(", "),V3=X3.filter((_f)=>_f.status==="running"||_f.status==="queued").map((_f)=>`${_f.id} (${_f.status})`).join(", "),QH=[];if(N0)QH.push(`Unfinished tasks: ${N0}`);if(V3)QH.push(`Active runs: ${V3}`);return`[SYSTEM] You still have team obligations. ${QH.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,F2=WH?{requireCompletionTool:!0,...e$?{completionGuard:e$}:{}}:e$?{completionGuard:e$}:void 0;return{tools:z4,logger:W??$.logger,telemetry:Q??$.telemetry,teamRuntime:d,teamRestoredFromPersistence:Boolean(C),delegatedAgentConfigProvider:this.teamRuntimeEntries.get($f)?.delegatedAgentConfigProvider??o$,extensions:c,completionPolicy:F2,registerLeadAgent:(r)=>{if(A2=r,P$.length>0)r.addTools(R$(P$,[...A]))},shutdown:async(r)=>{if(pD(d,r),this.teamRuntimeEntries.delete($f),await u?.(),!h)z?.stop()}}}}var RX={};N(RX,{requestDesktopToolApproval:()=>A9});import{mkdir as aD,readFile as tD,unlink as sD,writeFile as oD}from"node:fs/promises";import{join as AX}from"node:path";function eD(f){return f.replace(/[^a-zA-Z0-9._-]+/g,"_")}function fM(f){return new Promise(($)=>setTimeout($,f))}async function B9(f){try{await sD(f)}catch{}}async function A9(f,$={}){let J=$.approvalDir?.trim(),H=$.sessionId?.trim();if(!J||!H)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await aD(J,{recursive:!0});let W=eD(`${f.toolCallId}`),Q=AX(J,`${H}.request.${W}.json`),Z=AX(J,`${H}.decision.${W}.json`),j=$.nowIso??(()=>new Date().toISOString());await oD(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)}
693
+ `,"utf8");let P=$.timeoutMs??300000,X=$.pollIntervalMs??200,V=Date.now();while(Date.now()-V<P){try{let Y=await tD(Z,"utf8"),B=JSON.parse(Y),A={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([B9(Z),B9(Q)]),A}catch{}await fM(X)}return await B9(Q),{approved:!1,reason:"Tool approval request timed out"}}F0();var wX={};N(wX,{updateLocalProvider:()=>dJ,saveLocalProviderSettings:()=>T9,saveLocalProviderOAuthCredentials:()=>L9,resolveLocalClineAuthToken:()=>z9,refreshProviderModelsFromSource:()=>D9,normalizeOAuthProvider:()=>M9,loginLocalProvider:()=>_9,listLocalProviders:()=>G9,getProviderConfigFields:()=>O9,getLocalProviderModels:()=>h9,ensureCustomProvidersLoaded:()=>cJ,deleteLocalProvider:()=>rJ,addLocalProvider:()=>U9});import*as Zf from"@cline/llms";import{isOAuthProviderId as DM}from"@cline/shared";import{existsSync as $M,mkdirSync as JM,readFileSync as HM,writeFileSync as WM}from"node:fs";import{mkdir as QM,readFile as ZM,writeFile as jM}from"node:fs/promises";import{dirname as R9,join as PM}from"node:path";import*as Tf from"@cline/llms";import{ModelCapabilitySchema as XM,ProviderCapabilitySchema as VM,ProviderClientSchema as YM,ProviderProtocolSchema as BM}from"@cline/shared";import{z as p}from"zod";var AM=p.object({id:p.string().optional(),name:p.string().optional(),capabilities:p.array(XM).optional(),supportsVision:p.boolean().optional(),supportsAttachments:p.boolean().optional(),supportsReasoning:p.boolean().optional()}).passthrough(),RM=p.object({name:p.string(),baseUrl:p.string(),defaultModelId:p.string().optional(),protocol:BM.optional(),client:YM.optional(),capabilities:p.array(VM).optional(),modelsSourceUrl:p.string().optional()}).passthrough(),FX=p.object({provider:RM.optional(),models:p.record(p.string(),AM).optional()}).passthrough(),yX=p.object({version:p.literal(1),providers:p.record(p.string(),FX)}),FM=p.object({version:p.literal(1),providers:p.record(p.string(),p.unknown())}),xJ=new Set;function KX(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function a$(f){return PM(R9(f.getFilePath()),"models.json")}function gJ(){return{version:1,providers:{}}}function UX(f){let $=FM.safeParse(f);if(!$.success)return gJ();let J={};for(let[H,W]of Object.entries($.data.providers)){let Q=FX.safeParse(W);if(Q.success)J[H]=Q.data}return{version:1,providers:J}}function F9(f){if(!$M(f))return gJ();try{let $=HM(f,"utf8");return UX(JSON.parse($))}catch{}return gJ()}async function V2(f){try{let $=await ZM(f,"utf8");return UX(JSON.parse($))}catch{}return gJ()}function GX(f,$){JM(R9(f),{recursive:!0});let J=yX.parse($);WM(f,`${JSON.stringify(J,null,2)}
694
+ `,"utf8")}async function vJ(f,$){await QM(R9(f),{recursive:!0});let J=yX.parse($);await jM(f,`${JSON.stringify(J,null,2)}
695
+ `,"utf8")}function hX(f,$){return{id:f,name:$.name??f,supportsAttachments:$.capabilities?.includes("files"),supportsVision:$.capabilities?.includes("images"),supportsReasoning:$.capabilities?.includes("reasoning")||$.thinkingConfig!=null}}function TX(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 DX(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 yM(f){return f!=null&&typeof f.name==="string"&&typeof f.baseUrl==="string"}function MX(f,$){return f??$??"openai-chat"}function _X(f,$,J){return f??J??($==="openai-responses"?"openai":"openai-compatible")}function KM(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 UM(f,$){for(let[J,H]of Object.entries($??{})){let W=H.id?.trim()||J.trim();if(!W)continue;Tf.registerModel(f,W,KM(W,H))}}function GM(f,$,J){return{...$??{},id:f,name:$?.name??f,capabilities:$?.capabilities??J}}function hM(f){return Object.assign({},...Tf.resolveProviderModelCatalogKeys(f).map((J)=>Tf.getGeneratedModelsForProvider(J)))}function TM(f){let $=f.provider.trim();if(!$||Tf.isBuiltInProviderId($))return;let J=f.baseUrl?.trim();if(!J)return;let H=Tf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],W=hM($),Q=DX(f.capabilities),Z=Q.length>0?Q:void 0,j=f.model?.trim(),P={...W,...H?.models??{}};if(j)P[j]=GM(j,P[j],Z);let X=Object.keys(P).filter(Boolean),V=j||X[0];if(!V)return;let Y=MX(f.protocol,H?.provider.protocol),B=_X(f.client,Y,H?.provider.client);Tf.registerProvider({provider:{id:$,name:H?.provider.name??KX($),description:H?.provider.description,protocol:Y,client:B,baseUrl:J,modelsSourceUrl:H?.provider.modelsSourceUrl,defaultModelId:V,capabilities:TX(f.capabilities)??H?.provider.capabilities,source:"file"},models:P})}function uJ(f){for(let $ of Object.values(f.providers))TM($.settings)}function y4(f,$){let J=$.models??{};if(!yM($.provider)){UM(f,J);return}let H=DX($.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=MX($.provider.protocol,void 0),j=_X($.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"}]));Tf.registerProvider({provider:{id:f,name:$.provider.name.trim()||KX(f),protocol:Z,client:j,baseUrl:$.provider.baseUrl,modelsSourceUrl:$.provider.modelsSourceUrl,defaultModelId:Q,capabilities:TX($.provider.capabilities),source:"file"},models:P})}function LX(f){let $=a$(f);if(xJ.has($))return;let J=F9($);for(let[H,W]of Object.entries(J.providers))y4(H,W);xJ.add($)}async function cJ(f){let $=a$(f);if(xJ.has($))return;let J=await V2($);for(let[H,W]of Object.entries(J.providers))y4(H,W);xJ.add($)}function MM(f){return f.apiKey??f.auth?.apiKey}function _M(f){return(f.auth?.accessToken?.trim()??"").length>0}function zX(f){return f.split(/[-_]/).filter(Boolean).map(($)=>$.charAt(0).toUpperCase()+$.slice(1)).join(" ")}function LM(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 zM(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 OX(f){return Object.entries(f).sort(([$],[J])=>$.localeCompare(J)).map(([$,J])=>hX($,J))}async function OM(f,$){let J=await Zf.getModelsForProvider(f);if(!$)return J;let H=await z8(f,{loadPrivateOnAuth:!0,failOnError:!1},$);return H?.knownModels?{...J,...H.knownModels}:J}function y9(f){return[...new Set((f??[]).map(($)=>$.trim()).filter(Boolean))]}function NX(f){let $=Object.entries(f??{}).filter(([J])=>J.trim().length>0);return $.length>0?Object.fromEntries($):void 0}function K9(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 qX(f){if(!f.shouldRecompute)return f.fallbackModelIds??[];let $=f.modelsSourceUrl?await c6(f.modelsSourceUrl,f.providerId):[];return[...new Set([...f.explicitModels??[],...$])]}function bX(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);Zf.unregisterProvider($)}async function U9(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=a$(f);if((await V2(R)).providers[J]){let y=await rJ(f,{providerId:J});return{providerId:J,settingsPath:y.settingsPath,modelsPath:y.modelsPath,modelsCount:0}}return bX(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:R,modelsCount:0}}if(Zf.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=y9($.models),j=$.modelsSourceUrl?.trim(),P=await qX({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=NX($.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=a$(f),A=await V2(B);return A.providers[J]={provider:{name:Q,baseUrl:H,defaultModelId:X,protocol:$.protocol,client:$.client,capabilities:V,modelsSourceUrl:j},models:K9(P,V)},await vJ(B,A),y4(J,A.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:B,modelsCount:P.length}}async function dJ(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let H=a$(f),W=await V2(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=y9($.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()||zX(J),baseUrl:$.baseUrl?.trim()??T.baseUrl?.trim()??"",defaultModelId:h,protocol:T.protocol,client:T.client,capabilities:T.capabilities},models:h?K9([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=y9($.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 qX({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=NX($.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:K9(U,P)},await vJ(H,W),y4(J,W.providers[J]),{providerId:J,settingsPath:f.getFilePath(),modelsPath:H,modelsCount:U.length}}async function rJ(f,$){let J=$.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let H=a$(f),W=await V2(H);if(!W.providers[J])throw Error(`provider "${J}" does not exist`);return delete W.providers[J],await vJ(H,W),Zf.unregisterProvider(J),bX(f,J),{providerId:J,settingsPath:f.getFilePath(),modelsPath:H}}async function G9(f){let $=f.read(),J=Zf.getProviderIds().sort((W,Q)=>W.localeCompare(Q));return{providers:await Promise.all(J.map(async(W)=>{let[Q,Z]=await Promise.all([Zf.getProvider(W),Zf.getModelsForProvider(W)]),j=OX(Z),P=$.providers[W]?.settings,X=Q?.name??zX(W);return{id:W,name:X,models:j.length,color:zM(W),letter:LM(X),enabled:Boolean(P),apiKey:P?MM(P):void 0,oauthAccessTokenPresent:P?_M(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 h9(f,$){let J=f.trim(),H=await OM(J,$),W=OX(H);return{providerId:J,models:W}}function T9(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 D9(f,$){let J=$.trim(),H=f.getProviderSettings(J),Q=Zf.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,Z=H?.baseUrl?.trim()||Q?.baseUrl?.trim(),j=d6(Z,Q?.baseUrl,Q?.modelsSourceUrl);if(!H||!Q||!Z||!j)return{providerId:J,refreshed:!1};let P=await dJ(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 M9(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 NM(f,$){if(f==="cline")return $.access.startsWith("workos:")?$.access:`workos:${$.access}`;return $.access}async function _9(f,$,J){let H=E8({onPrompt:async(W)=>W.defaultValue??"",openUrl:J,onOpenUrlError:({error:W})=>{throw W instanceof Error?W:Error(String(W))}});if(f==="cline")return r1({apiBaseUrl:$?.baseUrl?.trim()||"https://api.cline.bot",useWorkOSDeviceAuth:!0,callbacks:H});if(f==="oca")return x1({mode:$?.oca?.mode,callbacks:H});return l1(H)}function L9(f,$,J,H){let W={...J?.auth??{},accessToken:NM($,H),refreshToken:H.refresh,accountId:H.accountId,expiresAt:H.expires},Q={...J??{provider:$},provider:$,auth:W};return f.saveProviderSettings(Q,{tokenSource:"oauth"}),Q}function z9(f){let $=f?.auth?.accessToken?.trim()||f?.apiKey?.trim();return $&&$.length>0?$:void 0}var qM=new Set(["ollama","lmstudio","litellm"]);function bM(f,$){if(!$?.provider.baseUrl)return!1;if($.provider.source!=="system")return!0;return qM.has(f)}function O9(f){let $=Zf.normalizeProviderId(f);if(DM($))return{providerId:$,authMethod:"oauth",fields:{}};let J=Zf.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],H=J?.provider.baseUrl,W={apiKey:{}};if(bM($,J))W.baseUrl={defaultValue:H};return{providerId:$,authMethod:"api-key",fields:W}}var mX={};N(mX,{resolveLegacyClineAuth:()=>kX,migrateLegacyProviderSettings:()=>K4});import{existsSync as wM,readFileSync as CM}from"node:fs";import{dirname as EM,join as N9}from"node:path";import*as EX from"@cline/llms";import{resolveClineDataDir as SM}from"@cline/shared/storage";var SX="openai";function kX(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 E(f){let $=f?.trim();return $?$:void 0}function CX(f){if(!wM(f))return;try{let $=CM(f,"utf8"),J=JSON.parse($);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function kM(f){let $=f.dataDir??SM(),J=f.globalStatePath??N9($,"globalState.json"),H=f.secretsPath??N9($,"secrets.json"),W=CX(J),Q=CX(H);if(!W&&!Q)return;return{globalState:W??{},secrets:Q??{}}}function mM(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 IM(f){let $=E(f.openAiBaseUrl);if(!$)return!1;if(f.azureApiVersion||f.azureIdentity)return!1;return!mM($)}function q9(f,$){if(f==="openai"&&IM($))return SX;return f}function xM(f,$,J,H){let W=J==="plan"?"planMode":"actMode",Q=$===H?E(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?E(typeof f[j]==="string"?f[j]:void 0):void 0)??Q}function gM(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 vM(f){let $=f["openai-codex-oauth-credentials"];if(!$)return;try{let J=JSON.parse($),H=E(J.access_token),W=E(J.refresh_token),Q=E(J.accountId);if(!H&&!W&&!Q)return;return{...H?{apiKey:H}:{},auth:{...H?{accessToken:H}:{},...W?{refreshToken:W}:{},...Q?{accountId:Q}:{}}}}catch{return}}function uM(f){let $=EX.getGeneratedModelsForProvider(f);return Object.keys($)[0]??void 0}function cM(f,$,J,H){let W=q9(f,$),Q=E(H==="plan"?$.planModeApiProvider:$.actModeApiProvider),Z=xM($,f,H,Q)??uM(W),j=gM($,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,vM(J));if(f==="cline")try{let F=E(J["cline:clineAccountId"]);if(F)V.auth={...V.auth??{},...kX(F)}}catch{}if(f==="openai"&&$.openAiHeaders)V.headers=$.openAiHeaders;if(f==="bedrock")V.aws={accessKey:E(J.awsAccessKey),secretKey:E(J.awsSecretKey),sessionToken:E(J.awsSessionToken),region:E($.awsRegion),authentication:$.awsAuthentication,profile:$.awsUseProfile?E($.awsProfile):void 0,usePromptCache:$.awsBedrockUsePromptCache,useCrossRegionInference:$.awsUseCrossRegionInference,useGlobalInference:$.awsUseGlobalInference,endpoint:E($.awsBedrockEndpoint),customModelBaseId:E(H==="plan"?$.planModeAwsBedrockCustomModelBaseId:$.actModeAwsBedrockCustomModelBaseId)};if(f==="vertex")V.gcp={projectId:E($.vertexProjectId),region:E($.vertexRegion)};if(f==="openai"&&($.azureApiVersion||$.azureIdentity!==void 0))V.azure={apiVersion:E($.azureApiVersion),useIdentity:$.azureIdentity};if(f==="sapaicore")V.sap={clientId:E(J.sapAiCoreClientId),clientSecret:E(J.sapAiCoreClientSecret),tokenUrl:E($.sapAiCoreTokenUrl),resourceGroup:E($.sapAiResourceGroup),deploymentId:E(H==="plan"?$.planModeSapAiCoreDeploymentId:$.actModeSapAiCoreDeploymentId),useOrchestrationMode:$.sapAiCoreUseOrchestrationMode};if(f==="oca"){V.oca={mode:$.ocaMode};let F=E(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=E(X[f]),A=E(Y[f]),R={provider:W,...B?{apiKey:B}:{},...Z?{model:Z}:{},...A?{baseUrl:A}:{},...j?{reasoning:j}:{},...P?{timeout:P}:{},...V},U=q8.safeParse(R);if(!U.success)return;return Object.keys(R).filter((F)=>F!=="provider").length>0?U.data:void 0}function dM(f,$){if(f!==SX)return;if(!$.baseUrl||!$.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:$.baseUrl,defaultModelId:$.model},models:{[$.model]:{id:$.model,name:$.model}}}}function rM(f,$){let J=new Set;for(let H of[f.actModeApiProvider,f.planModeApiProvider]){let W=E(H);if(W)J.add(W)}if(E($.apiKey))J.add("anthropic");if(E($.openRouterApiKey))J.add("openrouter");if(E($.openAiApiKey))J.add("openai");if(E($.openAiNativeApiKey))J.add("openai-native");if(E($["openai-codex-oauth-credentials"]))J.add("openai-codex");if(E($.geminiApiKey))J.add("gemini");if(E($.ollamaApiKey))J.add("ollama");if(E($.awsAccessKey)||E($.awsBedrockApiKey))J.add("bedrock");if(E(f.vertexProjectId)||E(f.vertexRegion))J.add("vertex");if(E($.clineApiKey))J.add("cline");if(E($.ocaApiKey))J.add("oca");return J}function K4(f){let $=f.providerSettingsManager.read(),J=kM(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=rM(H,W),j=$$();j.providers={...$.providers},j.lastUsedProvider=$.lastUsedProvider;let P=new Date().toISOString(),X=0,V=N9(EM(f.providerSettingsManager.getFilePath()),"models.json"),Y=F9(V),B=0;for(let U of Z){let y=q9(U,H);if(j.providers[y])continue;let F=cM(U,H,W,Q);if(!F)continue;j.providers[y]={settings:F,updatedAt:P,tokenSource:"migration"},X+=1;let K=dM(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=E(Q==="plan"?H.planModeApiProvider:H.actModeApiProvider),R=A?q9(A,H):void 0;if(j.lastUsedProvider=$.lastUsedProvider??(R&&j.providers[R]?R:Object.keys(j.providers)[0]),f.providerSettingsManager.write(j),B>0)GX(V,Y);return{migrated:X>0||B>0,providerCount:Object.keys(j.providers).length,lastUsedProvider:j.lastUsedProvider}}Kf();o4();var gX={};N(gX,{trimMessagesToCheckpoint:()=>xX,trimMessagesBeforeCheckpoint:()=>w9,readSessionCheckpointHistory:()=>U4,createRestoredCheckpointMetadata:()=>b9,createCheckpointRestorePlan:()=>C9,applyCheckpointToWorktree:()=>E9});import{execFile as lM}from"node:child_process";import{promisify as pM}from"node:util";var Y2=pM(lM);function U4(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 b9(f,$){let J=U4(f).filter((W)=>W.runCount<=$),H=J.at(-1);return H?{latest:H,history:J}:void 0}function iM(f,$){return f.reduce((J,H)=>{if(H.runCount>$)return J;if(!J||H.runCount>J.runCount)return H;return J},void 0)}function IX(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 xX(f,$){let J=IX(f,$);return f.slice(0,J+1)}function w9(f,$){let J=IX(f,$);return f.slice(0,J)}function C9(f){let $=f.checkpointRunCount;if(!Number.isInteger($)||$<1)throw Error("checkpointRunCount must be a positive integer");let J=iM(U4(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:xX(f.messages??[],$)}:{}}}async function E9(f,$){if((await Y2("git",["-C",f,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${f} is not a git repository`);if(await Y2("git",["-C",f,"cat-file","-e",`${$.ref}^{commit}`],{windowsHide:!0}),await Y2("git",["-C",f,"reset","--hard"],{windowsHide:!0}),await Y2("git",["-C",f,"clean","-fd"],{windowsHide:!0}),$.kind==="commit"){await Y2("git",["-C",f,"reset","--hard",$.ref],{windowsHide:!0});return}await Y2("git",["-C",f,"stash","apply",$.ref],{windowsHide:!0})}var vX={};N(vX,{SessionVersioningService:()=>Z$,SessionVersioningError:()=>Df});class Df extends Error{code;constructor(f,$){super($);this.code=f;this.name="SessionVersioningError"}}function nM(f){let $=f.sessionId.trim();if(!$)throw new Df("invalid_restore","sessionId is required");if(!f.restoreMessages&&!f.restoreWorkspace)throw new Df("invalid_restore","restore.messages or restore.workspace must be true");if(f.restoreMessages&&f.requiresStart)throw new Df("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger(f.checkpointRunCount)||f.checkpointRunCount<1)throw new Df("invalid_restore","checkpointRunCount must be a positive integer");return $}class Z${async restoreCheckpoint(f){let $=f.restore?.messages!==!1,J=f.restore?.workspace!==!1,H=nM({sessionId:f.sessionId,restoreMessages:$,restoreWorkspace:J,requiresStart:f.start===void 0,checkpointRunCount:f.checkpointRunCount}),W=await f.getSession(H);if(!W)throw new Df("session_not_found",`Session ${H} not found`);let Q=$?await f.readMessages(H):void 0;if($&&Q?.length===0)throw new Df("session_messages_not_found",`No messages found for session ${H}`);let Z=C9({session:W,messages:Q,checkpointRunCount:f.checkpointRunCount,cwd:f.cwd,restoreMessages:$});if(J)await(f.applyWorkspaceCheckpoint??E9)(Z.cwd,Z.checkpoint);let j=J0({session:W,messages:Q});if(!$)return{checkpoint:Z.checkpoint,sourceSnapshot:j};let P=b9(W,f.checkpointRunCount),X=f.restore?.omitCheckpointMessageFromSession?w9(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 Df("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??zZ)(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:J0({session:R,messages:X})}:{}}}}var uX={};N(uX,{FileTeamPersistenceStore:()=>lJ});import{appendFileSync as aM,existsSync as S9,mkdirSync as tM,readFileSync as sM,renameSync as oM,unlinkSync as eM,writeFileSync as f_}from"node:fs";import{join as k9}from"node:path";import{resolveTeamDataDir as $_}from"@cline/shared/storage";function J_(f){return f.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class lJ{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor(f){let $=J_(f.teamName),J=f.baseDir?.trim()||$_();this.dirPath=k9(J,$),this.statePath=k9(this.dirPath,"state.json"),this.taskHistoryPath=k9(this.dirPath,"task-history.jsonl")}loadState(){if(!S9(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 xP($.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)}
696
+ `,"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:$})}
697
+ `,"utf8")}ensureDir(){if(!S9(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(S9(this.statePath))eM(this.statePath)}}var cX={};N(cX,{ChatViewStateSchema:()=>m9,ChatSummarySchema:()=>tJ,ChatSessionStatusSchema:()=>iJ,ChatSessionConfigSchema:()=>pJ,ChatMessageSchema:()=>aJ,ChatMessageRoleSchema:()=>nJ});import{z as q}from"zod";var pJ=q.object({workspaceRoot:q.string().min(1),cwd:q.string().optional(),provider:q.string().min(1),model:q.string().min(1),mode:q.enum(["act","plan"]).default("act"),apiKey:q.string(),systemPrompt:q.string().optional(),rules:q.string().optional(),maxIterations:q.number().int().positive().optional(),enableTools:q.boolean(),enableSpawn:q.boolean().optional(),enableTeams:q.boolean().optional(),autoApproveTools:q.boolean().optional(),missionStepInterval:q.number().int().positive().optional(),missionTimeIntervalMs:q.number().int().positive().optional()}),iJ=q.enum(["idle","starting","running","stopping","completed","cancelled","failed","error"]),nJ=q.enum(["user","assistant","tool","system","status","error"]),aJ=q.object({id:q.string().min(1),sessionId:q.string().nullable(),role:nJ,content:q.string(),createdAt:q.number().int().nonnegative(),meta:q.object({stream:q.enum(["stdout","stderr"]).optional(),toolName:q.string().optional(),iteration:q.number().int().nonnegative().optional(),agentId:q.string().optional(),conversationId:q.string().optional(),hookEventName:q.string().optional(),inputTokens:q.number().int().nonnegative().optional(),outputTokens:q.number().int().nonnegative().optional(),checkpoint:q.object({ref:q.string(),createdAt:q.number().int().nonnegative(),runCount:q.number().int().positive(),kind:q.enum(["stash","commit"]).optional()}).optional()}).optional()}),tJ=q.object({toolCalls:q.number().int().nonnegative(),tokensIn:q.number().int().nonnegative(),tokensOut:q.number().int().nonnegative()}),m9=q.object({sessionId:q.string().nullable(),status:iJ,config:pJ,messages:q.array(aJ),rawTranscript:q.string(),error:q.string().nullable(),summary:tJ});var dX={};N(dX,{CORE_BUILD_VERSION:()=>I9});var I9=n3;import{Agent as E_,createAgentRuntime as S_}from"@cline/agents";var pX={};N(pX,{fetchClineRecommendedModels:()=>x9,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>sJ});var rX="https://api.cline.bot",H_=5000,sJ={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 W_(f){return{recommended:f.recommended.map(($)=>({...$,tags:[...$.tags]})),free:f.free.map(($)=>({...$,tags:[...$.tags]}))}}function lX(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 Q_(f){if(!f||typeof f!=="object")return null;let $=f,J=Array.isArray($.recommended)?$.recommended:[],H=Array.isArray($.free)?$.free:[],W=J.map(lX).filter((Z)=>Z!==null),Q=H.map(lX).filter((Z)=>Z!==null);if(W.length===0&&Q.length===0)return null;return{recommended:W,free:Q}}function Z_(f){let $=f.baseUrl?.trim();if($)return $;try{return(f.providerSettingsManager??new P0).getProviderSettings("cline")?.baseUrl?.trim()||rX}catch{return rX}}async function j_(f,$,J){let H=new AbortController,W=setTimeout(()=>H.abort(),J);try{return await f($,{signal:H.signal})}finally{clearTimeout(W)}}async function x9(f={}){try{let $=Z_(f),J=f.fetchImpl??fetch,H=await j_(J,`${$}/api/v1/ai/cline/recommended-models`,f.timeoutMs??H_);if(!H.ok)throw Error(`HTTP ${H.status}`);let W=await H.json(),Q=Q_(W);if(Q)return Q}catch{}return W_(sJ)}var iX={};N(iX,{loadLlmsConfigFromFile:()=>v9,defineLlmsConfig:()=>g9});import{readFile as P_}from"node:fs/promises";import X_ from"node:path";function g9(f){return f}async function v9(f){let $=X_.resolve(f),J=await P_($,"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 V_(H,$)}function V_(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}var eX={};N(eX,{createLlmsSdk:()=>c9,DefaultLlmsSdk:()=>G4});import{BUILT_IN_PROVIDER_IDS as tX,createHandler as A_,createHandlerAsync as R_,getProviderCollection as F_,hasProvider as sX,registerAsyncHandler as y_,registerHandler as K_,registerModel as U_,registerProvider as oX}from"@cline/llms";function nX(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 B_(f,$){if(!$.length)throw Error(`Provider "${f}" must include at least one model.`)}function aX(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 u9{providers=new Map;register(f){B_(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??{},...nX(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,...nX(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 G4{configuredProviders=new u9;constructor(f){this.applyConfig(f)}createHandler(f){return A_(this.configuredProviders.createHandlerConfig(f))}async createHandlerAsync(f){return R_(this.configuredProviders.createHandlerConfig(f))}registerProvider(f){if(oX(f.collection),f.handlerFactory&&f.asyncHandlerFactory)throw Error(`Provider "${f.collection.provider.id}" cannot register both sync and async handlers.`);if(f.handlerFactory)K_(f.collection.provider.id,f.handlerFactory);if(f.asyncHandlerFactory)y_(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.`);oX({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){U_(f.providerId,f.modelId,f.info),this.configuredProviders.registerModel(f.providerId,f.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...tX]}async getBuiltInProviders(){return(await Promise.all(tX.map(($)=>F_($)))).filter(($)=>$!==void 0).map(($)=>aX({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=sX($.id),H=this.configuredProviders.createHandlerConfig({providerId:$.id,modelId:$.defaultModel}).routingProviderId,W=typeof H==="string"&&sX(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 c9(f){return new G4(f)}GH();async function G_(){return Promise.resolve().then(() => ($V(),fV))}function g_(){return new Date().toISOString()}function v_(f){if(XV(f)!=="providers.json")return;let $=r9(f);if(XV($)!=="settings")return;return r9($)}class P0{filePath;dataDir;constructor(f={}){if(this.filePath=f.filePath??x_(),this.dataDir=f.dataDir??v_(this.filePath),this.dataDir||!f.filePath)K4({providerSettingsManager:this,dataDir:this.dataDir});if(LX(this),uJ(this.read()),d9(this.filePath))try{PV(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!d9(this.filePath))return $$();try{let f=m_(this.filePath,"utf8"),$=JSON.parse(f),J=u1.safeParse($);if(J.success)return uJ(J.data),J.data}catch{}return $$()}write(f){let $=u1.parse(f),J=r9(this.filePath);if(!d9(J))k_(J,{recursive:!0,mode:448});I_(this.filePath,`${JSON.stringify($,null,2)}
698
+ `,"utf8");try{PV(this.filePath,384)}catch{}uJ($)}saveProviderSettings(f,$={}){let J=q8.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:g_(),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 Cf(J,$)}getLastUsedProviderConfig(f){let $=this.getLastUsedProviderSettings();if(!$)return;return Cf($,f)}async refreshCatalog(){try{await g1({})}catch{}}}Kf();s4();import{isOAuthProviderId as u_}from"@cline/shared";var c_="https://api.cline.bot",l9="workos:";function d_(f,$){if(f==="cline")return`${l9}${$}`;return $}function r_(f,$){if(f==="cline"&&$.toLowerCase().startsWith(l9))return $.slice(l9.length);return $}function l_(f){let J=Ff(f)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function p_(f,$){let J=f.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let H=l_($);if(H)return H;return Date.now()-1}function i_(f,$){let J=$.auth?.accessToken?.trim(),H=$.auth?.refreshToken?.trim();if(!J||!H)return null;let W=r_(f,J);if(!W)return null;return{access:W,refresh:H,expires:p_($,W),accountId:$.auth?.accountId}}function n_(f,$){let J=f?.expiresAt,H=$?.expiresAt;return f?.accessToken===$?.accessToken&&f?.refreshToken===$?.refreshToken&&f?.accountId===$?.accountId&&J===H}class eJ 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 p9{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor(f){this.providerSettingsManager=f?.providerSettingsManager??new P0,this.telemetry=f?.telemetry}async resolveProviderApiKey(f){if(!u_(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=i_(f,J);if(!H)return null;let W=await this.resolveCredentials(f,J,H,$);if(!W)throw new eJ(f);let Q=d_(f,W.access),Z={...J.auth??{},accessToken:Q,refreshToken:W.refresh,accountId:W.accountId};Z.expiresAt=W.expires;let j={...J,auth:Z},P=!n_(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 k8(J,{apiBaseUrl:$.baseUrl?.trim()||c_,telemetry:this.telemetry},{forceRefresh:H});if(f==="oca")return M8(J,{forceRefresh:H,telemetry:this.telemetry},{mode:$.oca?.mode,telemetry:this.telemetry});return I8(J,{forceRefresh:H,telemetry:this.telemetry})}}import{normalizeUserInput as a_}from"@cline/shared";import{nanoid as t_}from"nanoid";class VV{list(f){return f?mf(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:mf(f),updated:!1};let W=f.pendingPrompts[H];if(!W)return{sessionId:$.sessionId,prompts:mf(f),updated:!1};let Q=$.prompt===void 0?W.prompt:a_($.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),s_(f,j,H,W.delivery),{sessionId:$.sessionId,prompts:mf(f),prompt:fH(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:mf(f),removed:!1};let[W]=f.pendingPrompts.splice(H,1);return{sessionId:$.sessionId,prompts:mf(f),prompt:W?fH(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()}_${t_(5)}`,prompt:J,delivery:H,userImages:W,userFiles:Q};if(H==="steer")f.pendingPrompts.unshift(j);else f.pendingPrompts.push(j)}return mf(f)}consumeSteer(f){let $=f.pendingPrompts.findIndex((H)=>H.delivery==="steer");if($<0)return{prompts:mf(f)};let[J]=f.pendingPrompts.splice($,1);return{entry:J,prompts:mf(f)}}shiftNext(f){return{entry:f.pendingPrompts.shift(),prompts:mf(f)}}requeueFront(f,$){return f.pendingPrompts.unshift($),mf(f)}clear(f){return f.pendingPrompts.length=0,[]}}class i9{deps;service=new VV;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:mf(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=fH($);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:f.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function fH(f){return{id:f.id,prompt:f.prompt,delivery:f.delivery,attachmentCount:(f.userImages?.length??0)+(f.userFiles?.length??0)}}function mf(f){return f.pendingPrompts.map(fH)}function s_(f,$,J,H){if($.delivery==="steer")f.pendingPrompts.unshift($);else if(H==="steer")f.pendingPrompts.push($);else f.pendingPrompts.splice(J,0,$)}Kf();class n9{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=zW(J),Z=H&&Q.agentId===YV(H.agent);OW(W,J,Z?{isPrimaryAgentEvent:!0,...H?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent(f,$){let J=this.deps.getSession(f);if(J){if(d5(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};OW(H,$.event,{teamRole:"teammate",teamAgentId:$.agentId,isPrimaryAgentEvent:!1})}if($.type==="teammate_spawned"){let H=T0({agentId:$.teammate.runtimeAgentId??$.agentId,conversationId:$.teammate.conversationId,parentAgentId:$.teammate.parentAgentId,createdByAgentId:YV(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:$.agentId});if(H)E0(J.config.telemetry,{ulid:f,modelId:$.teammate.modelId??J.config.modelId,provider:J.config.providerId,...H})}}if(await r5(f,$,this.deps.invokeBackendOptional),J)l5(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 YV(f){return f.getAgentId()}function a9(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:n0(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 t9(f,$){let J=f[$];return typeof J==="function"?J:null}async function BV(f,$,...J){let H=t9(f,$);if(!H)throw Error(`session service method not available: ${$}`);return Promise.resolve(H.apply(f,J))}async function AV(f,$,...J){let H=t9(f,$);if(!H)return;await Promise.resolve(H.apply(f,J))}async function RV(f,$,...J){let H=t9(f,$);if(!H)return;return await Promise.resolve(H.apply(f,J))}F0();Kf();function s9(f,$,J,H){return r0({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?N$({cwd:$.cwd,...bf[G0({mode:$.mode})],executors:H}):[];if($.enableSpawnAgent)Q.push(s9(f,$,J,H));return R$(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=T0({agentId:Q.subAgentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamId:Z?.getTeamId(),teamName:Z?.getTeamName(),createdByAgentId:Q.parentAgentId});if(j)E0($.telemetry,{ulid:J,modelId:$.modelId,provider:$.providerId,...j});z2($.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(`
699
+ `).length:0;z2($.telemetry,{event:"ended",ulid:J,durationMs:P,outputLines:X,errorMessage:Q.error?String(Q.error):void 0,agentId:Q.subAgentId,parentId:Q.parentAgentId,...T0({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 o_,stat as e_}from"node:fs/promises";var fL=20480000;async function FV(f){let $=await e_(f);if(!$.isFile())throw Error("Path is not a file");if($.size>fL)throw Error("File is too large to read into context.");let J=await o_(f,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var yV=5000;class j0{runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new J4;sessions=new Map;usageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new Z$;constructor(f){let $=$L();if($)jL($);let J=F$(f.distinctId);this.sessionService=f.sessionService,this.runtimeBuilder=f.runtimeBuilder??new X2,this.createAgentInstance=f.createAgent??((H)=>new d0(H)),this.defaultCapabilities=Bf(f.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=f.toolPolicies,this.providerSettingsManager=f.providerSettingsManager??new P0,this.oauthTokenManager=f.oauthTokenManager??new p9({providerSettingsManager:this.providerSettingsManager,telemetry:f.telemetry}),this.defaultTelemetry=f.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=f.fetch,this.pendingPromptsController=new i9({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 n9({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??Vf.CLI,J=s(),H=f.config.sessionId?.trim()??"",W=H||WL(),Q=f,Z=Q.initialMessages??[];this.usageBySession.set(W,Z.length>0?A8(Z):p0());let j=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!j)throw Error("session service method not available: ensureSessionsDir");let P=o9(j,W),X=o9(P,`${W}.messages.json`),V=o9(P,`${W}.json`),Y=n0(f.config),B=Gf.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 C=await this.invokeOptionalValue("readSessionManifest",W);if(C)B=C,A={manifestPath:V,messagesPath:C.messages_path||X,manifest:C}}let U=Bf(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 Wj({input:Q,localRuntime:f.localRuntime,sessionId:W,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:U,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(C)=>{if(C.name==="plugin_log"){this.eventBridge.handlePluginLog(W,C.payload,K);return}this.eventBridge.handlePluginEvent(W,C,M)},onTeamEvent:(C)=>{this.eventBridge.handleTeamEvent(W,C),T.config.onTeamEvent?.(C)},createSpawnTool:()=>s9({getSession:(C)=>this.sessions.get(C),subAgentStarts:this.subAgentStarts,onAgentEvent:(C,nf,vf)=>this.eventBridge.dispatchAgentEvent(C,nf,vf),invokeBackendOptional:(C,...nf)=>this.invokeOptional(C,...nf)},T.config,W,y),readSessionMetadata:async()=>(await this.getSession(W))?.metadata,writeSessionMetadata:async(C)=>{await this.persistSessionMetadata(W,()=>C)}});let G=await this.runtimeBuilder.build(T.runtimeBuilderInput),h=T.config,z=T.providerConfig;if(G.teamRuntime&&!h.teamName?.trim())h.teamName=G.teamRuntime.getTeamName();let u=[...G.tools,...h.extraTools??[]],gf=G.extensions??T.extensions,a={sessionId:W,providerId:z.providerId,modelId:z.modelId,apiKey:z.apiKey,baseUrl:z.baseUrl,headers:z.headers,knownModels:z.knownModels,providerConfig:z,thinking:h.thinking,reasoningEffort:h.reasoningEffort??z.reasoningEffort,systemPrompt:h.systemPrompt,maxIterations:h.maxIterations,execution:h.execution,prepareTurn:d2(h),tools:u,hooks:T.hooks,extensions:gf,hookErrorMode:h.hookErrorMode,initialMessages:T.effectiveInput.initialMessages,userFileContentLoader:FV,toolPolicies:T.toolPolicies,requestToolApproval:T.requestToolApproval,onConsecutiveMistakeLimitReached:h.onConsecutiveMistakeLimitReached,completionPolicy:G.completionPolicy,consumePendingUserMessage:()=>{let C=this.pendingPromptsController.consumeSteer(W);return C?j4(C,h.mode):C},logger:G.logger??h.logger,extensionContext:h.extensionContext,onEvent:(C)=>this.eventBridge.dispatchAgentEvent(W,h,C)};a.hooks={...a.hooks,onEvent:async(C)=>{if(await T.hooks?.onEvent?.(C),C.type!=="assistant-message")return;let nf=this.sessions.get(W);if(!nf)return;let vf=nf.agent.getMessages();try{await this.invoke("persistSessionMessages",W,vf,h.systemPrompt)}catch($f){h.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:W,error:$f})}}};let c=this.createAgentInstance(a);if(a.onEvent)c.subscribeEvents(a.onEvent);G.registerLeadAgent?.(c);let d=T0({agentId:c.getAgentId(),conversationId:c.getConversationId(),teamId:G.teamRuntime?.getTeamId(),teamName:G.teamRuntime?.getTeamName(),teamRole:G.teamRuntime?"lead":void 0});if(Zj(h,W,H.length>0,Y,d),d)E0(h.telemetry,{ulid:W,modelId:h.modelId,provider:h.providerId,...d});if(G.teamRuntime)l4(h.telemetry,{ulid:W,teamId:G.teamRuntime.getTeamId(),teamName:G.teamRuntime.getTeamName(),leadAgentId:c.getAgentId(),restoredFromPersistence:G.teamRestoredFromPersistence===!0});let t={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:c,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,t),this.emitStatus(W,"running"),Z.length>0&&!A){if(await this.ensureSessionPersisted(t),await this.invoke("persistSessionMessages",t.sessionId,Z,t.config.systemPrompt),!Q.prompt?.trim())await this.updateStatus(t,"completed",0)}let pf;try{if(Q.prompt?.trim())if(pf=await this.executeTurn(t,{prompt:Q.prompt,userImages:Q.userImages,userFiles:Q.userFiles}),!t.interactive)await this.finalizeSingleRun(t,pf.finishReason);else await this.completeInteractiveTurn(t,pf.finishReason)}catch(C){if(t.interactive&&t.aborting)pf=await this.completeAbortedInteractiveTurn(t);else throw await this.failSession(t),C}return{sessionId:W,manifest:B,manifestPath:V,messagesPath:X,result:pf}}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 WP(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 a9($);let J=f.trim();if(!J)return;let H=await this.getRow(J);if(H)return Y8(H);let W=await this.readManifest(J);return W?zJ(W):void 0}async listSessions(f=200){let J=(await this.listRows(f)).map(Y8),H=new Set(J.map((W)=>W.sessionId));for(let W of this.sessions.values()){if(H.has(W.sessionId))continue;J.unshift(a9(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 u$(J.messagesPath);let H=await this.readManifest($);return u$(H?.messages_path)}async dispatchHookEvent(f){await QP(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(p5(f,W.finishReason)){let Q=await i5(f);if(Q.length===0)break;let Z=n5(f,Q);W=await this.executeAgentTurn(f,Z)}return W}async completeInteractiveTurn(f,$){if(Z4(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:p0(),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)??p0();f.turnUsageBaseline=Z,x4(f.config.telemetry,f.sessionId,f.config.mode),Z1(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=D6(P.messages,P,Q);f.persistedMessages=X;let V=i0(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===ff.SUBMIT_AND_EXIT&&H.error===void 0))return;f.submitAndExitObserved=!0,_2(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=n0(f.config),H=ZL($.prompt).trim();if(!H)return{prompt:"",userImages:$.userImages,userFiles:this.resolveAbsoluteFilePaths(f.config.cwd,$.userFiles)};let W=await F1(H,J);jj(f.config.telemetry,W);let Q=j4(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 $=n0(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(Z4(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)_2(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)});wJ(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??s(),W.exit_code=typeof J==="number"?J:null;f.artifacts.manifest=W,f.status=$,f.updatedAt=H.endedAt??s(),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(!QL(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 eJ)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)=>JL(H)?H:HL(f,H));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity(f){return T0({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:J0({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)),yV))}async getRow(f){let $=f.trim();if(!$)return;return(await this.listRows(yV)).find((H)=>H.sessionId===$)}async readManifest(f){let $=f.trim();if(!$)return;return await this.invokeOptionalValue("readSessionManifest",$)}invoke(f,...$){return BV(this.sessionService,f,...$)}invokeOptional(f,...$){return AV(this.sessionService,f,...$)}invokeOptionalValue(f,...$){return RV(this.sessionService,f,...$)}}function XL(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 VL(f){return f.mode==="plan"?"plan":f.mode==="yolo"?"yolo":"act"}function WV(f={}){let $=new j0({sessionService:new Z0(new W0),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()||Vf.CLI,interactive:!1,config:{providerId:PL(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:H,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:VL(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:XL(W)}},async abortSession(J){return await $.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await $.stopSession(J),{applied:!0}}}}function YL(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(`
700
+ `).trim()||void 0}var KV=120,e9="...";function h4(f){let $=f.trim();if(!$)return"";if(Buffer.byteLength($,"utf8")<=KV)return $;let J=KV-Buffer.byteLength(e9,"utf8");if(J<=0)return e9;let H="";for(let W of $){if(Buffer.byteLength(H+W,"utf8")>J)break;H+=W}return`${H}${e9}`}async function UV(f){let $=f?.sessionId?.trim()||"unknown",J=typeof f?.metadata?.messagesPath==="string"?f.metadata.messagesPath:void 0,W=[...await u$(J)].reverse().find((P)=>P.role==="assistant"),Q=W?YL(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:h4(Q&&Q.length>0?Q:j.length>0?j:Z),severity:"info"}}import{createSessionId as gL}from"@cline/shared";import{createSessionId as FL}from"@cline/shared";import{createSessionId as RL}from"@cline/shared";function BL(f){switch(f){case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function AL(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 $H(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:BL(f.status),participants:$?[...$.participants.values()]:[],metadata:AL(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 v(f,$){return{version:f.version,requestId:f.requestId,ok:!0,...$!==void 0?{payload:$}:{}}}function m(f,$,J){return{version:f.version,requestId:f.requestId,ok:!1,error:{code:$,message:J}}}function JH(f){return f&&typeof f==="object"&&!Array.isArray(f)?f:void 0}function Mf(f){if(typeof f.payload?.sessionId==="string")return f.payload.sessionId.trim();return f.sessionId?.trim()??""}function t$(f,$,J){return{version:"v1",event:f,eventId:RL("hevt_"),sessionId:J,timestamp:Date.now(),payload:$}}async function If(f,$){let J=await f.sessionHost.getSession($);if(!J)return;return $H(J,f.sessionState.get($))}async function xf(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 J0({session:J,messages:H,usage:W})}function HH(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 f3(f,$){let J=FL("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 $3(f,$,J){let H=f.pendingApprovals.get($);if(!H)return;return f.pendingApprovals.delete($),H.resolve(J),{sessionId:H.sessionId}}function J3(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 GV(f,$){let J=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"";if(!f.pendingApprovals.get(J))return m($,"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=$3(f,J,{approved:Q,reason:W});if(!Z)return m($,"approval_not_found",`Unknown approval: ${J}`);return f.publish(f.buildEvent("approval.resolved",{approvalId:J,approved:Q,reason:W},Z.sessionId)),v($,{approvalId:J,approved:Q})}import{createSessionId as UL}from"@cline/shared";function yL(f){if(f instanceof Error)return{name:f.name,message:f.message,stack:f.stack};if(f===void 0)return;return f}var hV={debug:10,info:20,warn:30,error:40,silent:50};function KL(){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 x(f,$,J={}){if(hV[f]<hV[KL()])return;let H=JSON.stringify({ts:new Date().toISOString(),level:f,component:"hub",message:$,...Object.fromEntries(Object.entries(J).map(([W,Q])=>[W,yL(Q)]).filter(([,W])=>W!==void 0))});if(f==="error"||f==="warn"){console.error(`[hub] ${H}`);return}console.log(`[hub] ${H}`)}function H3(f,$){let J=$ instanceof Error?$.stack||$.message:String($);x("error",f,{error:J})}async function TV(f,$,J,H,W,Q){let Z=UL("capreq_"),j=performance.now();return x("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(x(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},$)),x("info","capability.request.published",{requestId:Z,sessionId:$,capabilityName:J,targetClientId:W})})}function DV(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",H=f.pendingCapabilityRequests.get(J);if(!H)return m($,"capability_not_found",`Unknown capability request: ${J}`);if(($.clientId?.trim()||"")!==H.targetClientId)return m($,"capability_wrong_client",`Capability request ${J} is owned by ${H.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==H.sessionId)return m($,"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),v($,{requestId:J})}function j$(f,$,J){let H=0;for(let[W,Q]of[...f.pendingCapabilityRequests.entries()]){if(!$({requestId:W,...Q}))continue;f.pendingCapabilityRequests.delete(W),x("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 MV(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 m($,"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 v($,Z)}catch(Q){return m($,"capability_request_failed",Q instanceof Error?Q.message:String(Q))}}function _V(f,$){let J=typeof $.payload?.requestId==="string"?$.payload.requestId.trim():"",H=f.pendingCapabilityRequests.get(J);if(!H)return m($,"capability_not_found",`Unknown capability request: ${J}`);let W=$.clientId?.trim()||"";if(W!==H.targetClientId)return m($,"capability_wrong_client",`Capability request ${J} is owned by ${H.targetClientId}`);if($.sessionId?.trim()&&$.sessionId.trim()!==H.sessionId)return m($,"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 x(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)),v($,{requestId:J,ok:j})}import{createSessionId as GL}from"@cline/shared";function LV(f,$){let J=$.payload,H=J?.clientId?.trim()||$.clientId?.trim()||GL("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()})),v($,{clientId:H})}function zV(f,$){let J=$.clientId?.trim(),H=J?f.clients.get(J):void 0;if(!J||!H)return m($,"client_not_found","Client is not registered with this hub.");let W=JH($.payload?.metadata);if(H.lastSeenAt=Date.now(),W)H.metadata=JSON.parse(JSON.stringify(W));return v($)}function OV(f,$,J){let H=$.clientId?.trim();if(H)f.clients.delete(H),J(H),f.publish(f.buildEvent("hub.client.disconnected",{clientId:H}));return v($)}function NV(f,$){return v($,{clients:[...f.clients.values()]})}var hL=30000;function TL(f){if(f==="aborted")return"run.aborted";if(f==="error"||f==="failed")return"run.failed";return"run.completed"}function DL(f){if(f.finishReason!=="error")return;return f.text.trim()||void 0}function ML(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 _L(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);x("warn","run.heartbeat",{...Z,elapsedMs:V}),f.publish(f.buildEvent("run.heartbeat",{requestId:$.requestId,elapsedMs:V,...H?{timeoutMs:H}:{}},J.sessionId))},hL),P=f.sessionHost.runTurn(J);P.then((V)=>{if(!Q)return;x("warn","run.late_end",{...Z,elapsedMs:Math.round(performance.now()-W),finishReason:V?.finishReason})},(V)=>{if(!Q)return;x("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)),x("error","run.timeout",{...Z,elapsedMs:Math.round(performance.now()-W)}),J3(f,(A)=>A.sessionId===J.sessionId,B),j$(f,(A)=>A.sessionId===J.sessionId,B),f.sessionHost.abort(J.sessionId,B).catch((A)=>{x("error","run.timeout_abort_failed",{...Z,error:A})})},H)})])}finally{if(Q=!0,clearInterval(j),X)clearTimeout(X)}}async function qV(f,$){let J=Mf($),H=$.payload&&typeof $.payload==="object"?$.payload:{},W=typeof H.prompt==="string"?H.prompt:typeof H.input==="string"?H.input:"";if(!W.trim())return m($,"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=ML(H);f.suppressNextTerminalEventBySession.set(J,"run.start.reply");let P;try{P=await _L(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 xf(f,J),Y=DL(P);if(f.publish(f.buildEvent(TL(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 xf(f,J);return v($,P||X?{...P?{result:P}:{},...X?{snapshot:X}:{}}:void 0)}async function bV(f,$){let J=Mf($),H=typeof $.payload?.reason==="string"?$.payload.reason:"Run was aborted before pending approval or capability request was resolved.";return J3(f,(W)=>W.sessionId===J,H),await f.sessionHost.abort(J,$.payload?.reason),j$(f,(W)=>W.sessionId===J,H),f.publish(f.buildEvent("run.aborted",{reason:H},J)),v($,{applied:!0})}async function wV(f,$){let J=Q2($.payload?.payload);if(!J)return m($,"invalid_hook_payload","session.hook requires a valid hook event payload");return await f.sessionHost.dispatchHookEvent(J),v($,{applied:!0})}async function CV(f,$){switch($.type){case"chunk":return;case"agent_event":LL(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([If(f,$.payload.sessionId),xf(f,$.payload.sessionId)]);if(J)f.publish(f.buildEvent("session.updated",{session:J,...H?{snapshot:H}:{}},$.payload.sessionId));return}case"ended":await zL(f,$);return;default:return}}function LL(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 zL(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([If(f,$.payload.sessionId),xf(f,$.payload.sessionId)]);if($.payload.reason==="completed"){let Z=await UV(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 SV,parseRuntimeConfigExtensions as kV}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as fv,HUB_COMPACTION_CAPABILITY as $v,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Jv,HUB_HOOK_CAPABILITY_PREFIX as Hv,HUB_MISTAKE_LIMIT_CAPABILITY as Wv,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Qv,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Zv,isHubToolExecutorName as OL}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as Yv,HUB_COMPACTION_CAPABILITY as Bv,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as Av,HUB_HOOK_CAPABILITY_PREFIX as Rv,HUB_MISTAKE_LIMIT_CAPABILITY as Fv,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as yv,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Kv}from"@cline/shared";var NL=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function s$(f){return f&&typeof f==="object"&&!Array.isArray(f)?JSON.parse(JSON.stringify(f)):void 0}function qL(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=s$(f.inputSchema);if(!J||!H||!Q||!W||$.has(W))return;return $.add(W),{kind:"tool",capabilityName:W,name:J,description:H,inputSchema:Q,...s$(f.lifecycle)?{lifecycle:s$(f.lifecycle)}:{}}}function Q3(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=qL(W,J);if(j)$.push(j);continue}if(Q==="toolExecutor"){let j=W.executor;if(!OL(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,...s$(W.config)?{config:s$(W.config)}:{}});continue}if(Q==="checkpoint"){J.add(Z),$.push({kind:"checkpoint",capabilityName:Z,...s$(W.config)?{config:s$(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 EV(f){return{agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,metadata:f.metadata}}function bL(f){return Object.hasOwn(f,"update")?f.update:f}function _4(f){return f.trim().replace(/^\/+/,"").toLowerCase()}function wL(f){let $=(f??[]).map(_4).filter(Boolean);return $.length>0?new Set($):void 0}function CL(f,$,J){if(!J)return!0;let H=_4(f),W=_4($),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 W3(f,$){let J=wL($);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)=>CL(H.id,H.name,J))}function EL(f,$){let J=async(H,W)=>{let Q=_4(H),j=W3(f,$).filter((B)=>B.id===Q||_4(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?`
701
+ <command-args>${X}</command-args>`:"",Y=P.description?.trim()?`Description: ${P.description.trim()}
702
+
703
+ `:"";return`<command-name>${P.name}</command-name>${V}
704
+ <command-instructions>
705
+ ${Y}${P.instructions}
706
+ </command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>W3(f,$).map(({skill:H,...W})=>W),enumerable:!0}),J}function SL(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)=>W3(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:()=>J1(W.records.rule.map((P)=>P.item).filter((P)=>P.disabled!==!0))});if(Z.registerSkillsTool)j.registerTool(h$(EL(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}
707
+
708
+ ${V}`:P.instructions}})}})}}function kL(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:EV(j)},$))?.result}]);return W.length>0?Object.fromEntries(W):void 0}function mL(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:EV(Z)},$,Z.emitUpdate?(P)=>{Z.emitUpdate?.(bL(P))}:void 0))?.result}}))}function IL(f,$,J,H){let W=new Map(J.map((Z)=>[Z.name,Z])),Q={};for(let Z of NL){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 Z3(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:kL(f.sessionId,f.targetClientId,$,f.requestCapability),localRuntime:{...H.length>0?{hooks:IL(f.sessionId,f.targetClientId,H,f.requestCapability)}:{},...J.length>0?{extraTools:mL(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:SL(f.sessionId,f.targetClientId,j,f.requestCapability)}:{}}}}var mV="hubCapabilityOwnerClientId";function IV(f,$){f[mV]=$}function xL(f){let $=f?.[mV];return typeof $==="string"&&$.trim()?$.trim():void 0}async function xV(f,$,J){let H=performance.now(),W={command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:$.sessionId};x("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 x("warn","session.create.invalid",{...W,reason:"missing_workspace_root"}),m($,"invalid_session_create","session.create requires workspaceRoot or cwd");let Y=$.clientId?.trim()||"hub-client",B=Q3(P.clientContributions);if(x("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)IV(Z,Y);let R=(typeof j?.sessionId==="string"?j.sessionId.trim():"")||SV(),U=kV(P.configExtensions);x("info","session.create.runtime_build.begin",{...W,sessionId:R,configExtensionCount:U?.length??0});let y=Z3({sessionId:R,targetClientId:Y,contributions:B,sessionConfig:j,requestCapability:f.requestCapability});x("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});x("info","session.create.start_session.end",{...W,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-H),hasImmediateResult:!!F.result}),HH(f,F.sessionId,Y,"creator",{interactive:Z.interactive!==!1}),x("info","session.create.read_records.begin",{...W,sessionId:F.sessionId});let[K,M]=await Promise.all([If(f,F.sessionId),xf(f,F.sessionId)]);if(x("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 x("info","session.create.reply",{...W,sessionId:F.sessionId,elapsedMs:Math.round(performance.now()-H)}),v($,{session:K,...M?{snapshot:M}:{}})}async function gV(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 m($,"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 m($,"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 m($,"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=Q3(X.clientContributions);if(A.length>0)IV(V,B);let U=(typeof P?.sessionId==="string"?P.sessionId.trim():"")||SV(),y=kV(X.configExtensions),F=Z3({sessionId:U,targetClientId:B,contributions:A,sessionConfig:P,requestCapability:f.requestCapability}),M=await new Z$().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:(z)=>f.sessionHost.getSession(z),readMessages:(z)=>f.sessionHost.readSessionMessages(z),buildStartInput:(z)=>{if(z.restoredCheckpointMetadata)V.checkpoint=z.restoredCheckpointMetadata;let u=typeof H.workspaceRoot==="string"&&H.workspaceRoot.trim()?H.workspaceRoot.trim():typeof H.cwd==="string"&&H.cwd.trim()?H.cwd.trim():z.sourceSession.workspaceRoot||z.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:W,restoredCheckpointRunCount:Q},initialMessages:z.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:z.sourceSession.provider),modelId:P?.modelId??(typeof Y.model==="string"?Y.model:z.sourceSession.model),apiKey:P?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:""),cwd:P?.cwd??z.plan.cwd,workspaceRoot:P?.workspaceRoot??u,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:(z)=>f.sessionHost.startSession(z),getStartedSessionId:(z)=>z.sessionId,readRestoredSession:(z)=>f.sessionHost.getSession(z)});if(!j)return v($,{checkpoint:M.checkpoint});let T=M.startResult;if(!T)return m($,"restore_failed","Checkpoint restore did not start a session");HH(f,T.sessionId,B,"creator",{interactive:V.interactive!==!1});let[G,h]=await Promise.all([If(f,T.sessionId),xf(f,T.sessionId)]);if(G)f.publish(f.buildEvent("session.created",{session:G,...h?{snapshot:h}:{}},T.sessionId));return v($,{session:G,...h?{snapshot:h}:{},messages:M.messages??[],checkpoint:M.checkpoint})}catch(P){if(P instanceof Df)return m($,P.code,P.code==="session_not_found"?`Unknown session: ${W}`:P.message);return m($,"restore_failed",P instanceof Error?P.message:String(P))}}async function vV(f,$){let J=Mf($);if(!J)return m($,"invalid_session_attach","session.attach requires a session id");HH(f,J,$.clientId?.trim()||"hub-client","participant");let H=await If(f,J);if(H)f.publish(f.buildEvent("session.attached",{session:H},J));return H?v($,{session:H}):m($,"session_not_found",`Unknown session: ${J}`)}async function uV(f,$){let J=Mf($);if(!J)return m($,"invalid_session_detach","session.detach requires a session id");let H=$.clientId?.trim()||"hub-client",[W]=await Promise.all([If(f,J)]),Q=xL(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)}j$(f,(X)=>X.sessionId===J&&X.targetClientId===H,`Capability owner client ${H} detached before request was resolved.`);let[j,P]=await Promise.all([If(f,J),xf(f,J)]);return f.publish(f.buildEvent("session.detached",j?{session:j,...P?{snapshot:P}:{},clientId:H}:{clientId:H},J)),v($)}async function cV(f,$){let J=Mf($),H=$.payload?.includeSnapshot===!0,[W,Q]=await Promise.all([If(f,J),H?xf(f,J):Promise.resolve(void 0)]);return W?v($,{session:W,...Q?{snapshot:Q}:{}}):m($,"session_not_found",`Unknown session: ${J}`)}async function dV(f,$){let J=Mf($);if(!J)return m($,"invalid_session_id","session.messages requires a session id");if(!await If(f,J))return m($,"session_not_found",`Unknown session: ${J}`);let W=await f.sessionHost.readSessionMessages(J);return v($,{sessionId:J,messages:W})}async function rV(f,$){let J=typeof $.payload?.limit==="number"?$.payload.limit:200,W=(await f.sessionHost.listSessions(J)).map((Q)=>$H(Q,f.sessionState.get(Q.sessionId)));return v($,{sessions:W})}async function lV(f,$){let J=Mf($),H=JH($.payload?.metadata),W=await f.sessionHost.updateSession(J,{metadata:H}),[Q,Z]=await Promise.all([If(f,J),xf(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 pV(f,$){let J=Mf($),H=await f.sessionHost.deleteSession(J);return f.sessionState.delete(J),v($,{deleted:H})}async function iV(f,$){let J=Mf($),H=f.sessionHost.pendingPrompts;if(!H)return m($,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await H.list({sessionId:J});return v($,{sessionId:J,prompts:W})}async function nV(f,$){let J=Mf($),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 m($,"pending_prompts_unavailable","Pending prompt service is not available.");let j=await Z.update({sessionId:J,promptId:H,prompt:W,delivery:Q});return v($,j)}async function aV(f,$){let J=Mf($),H=typeof $.payload?.promptId==="string"?$.payload.promptId.trim():"",W=f.sessionHost.pendingPrompts;if(!W)return m($,"pending_prompts_unavailable","Pending prompt service is not available.");let Q=await W.delete({sessionId:J,promptId:H});return v($,Q)}function tV(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 vL=new Set(["skills","workflows","rules","tools"]);function j3(f){return typeof f==="object"&&f!==null&&!Array.isArray(f)}function L4(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${$}' must be a string.`);return J}function uL(f,$){let J=f[$];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${$}' must be a boolean.`);return J}function sV(f){if(f===void 0)return{};if(!j3(f))throw Error("settings.list payload must be an object.");return{cwd:L4(f,"cwd"),workspaceRoot:L4(f,"workspaceRoot"),availabilityContext:j3(f.availabilityContext)?f.availabilityContext:void 0}}function cL(f){if(!j3(f))throw Error("settings.toggle payload must be an object.");let{type:$}=f;if(typeof $!=="string"||!vL.has($))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools.");return{...sV(f),type:$,id:L4(f,"id"),path:L4(f,"path"),name:L4(f,"name"),enabled:uL(f,"enabled")}}class B2{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=gL("hub_");ctx;constructor(f){this.options=f;if(this.sessionHost=f.sessionHost??new j0({sessionService:new Z0(new W0),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:t$,requestCapability:($,J,H,W,Q)=>TV(this.ctx,$,J,H,W,Q)},this.schedules=new Q1({...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(t$(H,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new $1(this.schedules),this.settings=f.settingsService??new W$,f.cronOptions)this.cronService=new $4({runtimeHandlers:f.runtimeHandlers,...f.cronOptions});this.sessionHost.subscribe(($)=>{CV(this.ctx,$).catch((J)=>{H3("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())$3(this.ctx,f,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(j$(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 LV(this.ctx,f);case"client.update":return zV(this.ctx,f);case"client.unregister":return OV(this.ctx,f,($)=>{this.listeners.delete($),this.detachClientFromSessions($)});case"client.list":return NV(this.ctx,f);case"session.create":return await xV(this.ctx,f,($)=>f3(this.ctx,$));case"session.restore":return await gV(this.ctx,f,($)=>f3(this.ctx,$));case"session.attach":return await vV(this.ctx,f);case"session.detach":return await uV(this.ctx,f);case"session.get":return await cV(this.ctx,f);case"session.messages":return await dV(this.ctx,f);case"session.list":return await rV(this.ctx,f);case"session.update":return await lV(this.ctx,f);case"session.pending_prompts":return await iV(this.ctx,f);case"session.update_pending_prompt":return await nV(this.ctx,f);case"session.remove_pending_prompt":return await aV(this.ctx,f);case"session.delete":return await pV(this.ctx,f);case"session.hook":return await wV(this.ctx,f);case"run.start":case"session.send_input":return await qV(this.ctx,f);case"run.abort":return await bV(this.ctx,f);case"capability.request":return await MV(this.ctx,f);case"approval.respond":return await GV(this.ctx,f);case"capability.respond":return _V(this.ctx,f);case"capability.progress":return DV(this.ctx,f);case"ui.notify":return this.publish(t$("ui.notify",f.payload??{})),v(f);case"ui.show_window":return this.publish(t$("ui.show_window",f.payload??{})),v(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=tV(f.command);if(J)this.publish(t$(J,$.payload))}return $}}}async handleSettingsList(f){try{let $=await this.settings.list(sV(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(cL(f.payload));return this.publish(t$("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($);j$(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){H3(`listener threw while publishing ${f.event}`,H)}}}}import{timingSafeEqual as pL}from"node:crypto";import iL from"node:http";import nL from"node:net";import{URL as fY}from"node:url";import{WebSocketServer as aL}from"ws";import{HUB_COMMAND_SLOW_LOG_MS as dL,resolveHubCommandTimeoutMs as rL,safeJsonParse as lL}from"@cline/shared";function oV(f){return{command:f.envelope.command,requestId:f.envelope.requestId,clientId:f.envelope.clientId,sessionId:f.envelope.sessionId}}function eV(f,$,J){return{version:f.envelope.version,requestId:f.envelope.requestId,ok:!1,error:{code:$,message:J}}}class T4{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=oV(X);x("info","command.start",B);let A=setTimeout(()=>{if(Y)return;x("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},dL),R=this.transport.command(X.envelope);R.then((T)=>{if(!Y)return;x(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;x("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:T})});let U=!1,y,F,K=rL(X.envelope.command,X.envelope.timeoutMs);try{F=K===null?await R:await Promise.race([R,new Promise((T)=>{y=setTimeout(()=>{U=!0,T(eV(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)x("error","command.timeout",{...B,durationMs:M,timeoutMs:K});else x(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"?lL(P.data):void 0;if(!V||V.kind!=="command"){x("error","rejected malformed websocket frame",{error:X});return}x("error","command.error",{...oV(V),error:X}),W({kind:"reply",envelope:eV(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 D4{transport;constructor(f){this.transport=f}command(f){return this.transport.handleCommand(f)}subscribe(f,$,J){return this.transport.subscribe(f,$,J)}}function tL(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 sL(f){return{send($){f.send($)},addEventListener($,J){if($==="message"){f.on("message",(H)=>{J({data:tL(H)})});return}f.on("close",J)},removeEventListener(){}}}function oL(f){try{f.write(`HTTP/1.1 400 Bad Request\r
709
+ Connection: close\r
710
+ Content-Length: 0\r
711
+ \r
712
+ `),f.end()}catch{f.destroy()}}function eL(f){try{f.write(`HTTP/1.1 401 Unauthorized\r
713
+ Connection: close\r
714
+ Content-Length: 0\r
715
+ \r
716
+ `),f.end()}catch{f.destroy()}}function $Y(f,$){if(!f||!$)return!1;let J=Buffer.from(f,"utf8"),H=Buffer.from($,"utf8");return J.length===H.length&&pL(J,H)}function JY(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}
717
+ Caused by: ${f.stack}`;return Q}async function fz(f){return await new Promise(($,J)=>{let H=nL.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 $z(f){return f instanceof Error&&"code"in f&&f.code==="EADDRINUSE"}var P3=new Map,HY="cline-hub-auth.",Jz=30000;function WY(f){return Array.isArray(f)?f.join(","):f??""}function Hz(f){let $=WY(f).trim();return/^Bearer\s+(.+)$/i.exec($)?.[1]?.trim()||null}function Wz(f){for(let $ of WY(f).split(",")){let J=$.trim();if(J.startsWith(HY))return J.slice(HY.length).trim()||null}return null}async function M4(f){let $=f.owner??y0(),J=f.host??"127.0.0.1",H=f.pathname??"/hub",W=f.port??V1(),Q=W===0?await fz(J):W,Z=Q,j=cf(J,Q,H),P=S0(),X=e4(),V=new B2(f);await V.start();let Y=new T4(new D4(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,z)=>{T.close((u)=>{if(u){z(u);return}h()})}),await new Promise((h,z)=>{M.close((u)=>{if(u){z(u);return}h()})}),await V.stop(),(await Qf($.discoveryPath))?.url===j)await zf($.discoveryPath)})(),F},M=iL.createServer((G,h)=>{if((G.url??"/")==="/health"){let u=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(u);return}if((G.url??"/")==="/version"){h.statusCode=200,h.setHeader("content-type","application/json"),h.end(JSON.stringify(R));return}if(new fY(G.url??"/",`http://${J}:${Z}`).pathname==="/shutdown"&&G.method==="POST"){if(!$Y(Hz(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 aL({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)}}},Jz),M.on("upgrade",(G,h,z)=>{if(new fY(G.url??"/",`http://${J}:${Z}`).pathname!==H){h.destroy();return}if(!$Y(Wz(G.headers["sec-websocket-protocol"]),X)){eL(h);return}try{T.handleUpgrade(G,h,z,(gf)=>{let a=gf;a.isAlive=!0,a.on("pong",()=>{a.isAlive=!0}),U.add(a);let c=Y.attach(sL(gf));B.add(c),gf.once("close",()=>{U.delete(a),c(),B.delete(c)})})}catch{oL(h)}});try{await new Promise((G,h)=>{M.once("error",(z)=>{h(JY(z,{host:J,port:Q,pathname:H}))}),M.listen(Q,J,()=>{let z=M.address();if(!z||typeof z==="string"){h(JY(Error("Failed to resolve hub port"),{host:J,port:Q,pathname:H}));return}Z=z.port,j=cf(J,Z,H),G()})})}catch(G){if(y)clearInterval(y),y=void 0;throw await V.stop().catch(()=>{return}),G}return await f6($.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 oJ(f){let $=f.owner??y0(),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??V1(),Q=f.pathname??"/hub",Z=cf(H,W,Q),j=$.discoveryPath,P=(V)=>{if(!J)k0(V.url,V.authToken);return V},X=P3.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 $6($.discoveryPath,async()=>{let V=await Qf($.discoveryPath);if(V?.url&&(V.url===Z||f.allowPortFallback===!0)){let R=await Pf(V.url);if(R?.url&&await sf(R.url,{authToken:V.authToken}))return P({url:R.url,authToken:V.authToken,action:"reuse"})}if((await Pf(Z))?.url||V?.url)await zf($.discoveryPath);let A=async(R)=>{let U=M4({...R,owner:$});P3.set(j,U);try{let y=await U;return P({server:y,url:y.url,authToken:y.authToken,action:"started"})}catch(y){throw P3.delete(j),y}};try{return await A(f)}catch(R){if(!f.allowPortFallback||!$z(R))throw R;return await A({...f,port:0})}})}async function QV(f){let $=tf({host:f.host,port:f.port,pathname:f.pathname});return await M4({...f,...$,owner:Xf()})}async function ZV(f){let $=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=tf({host:f.host,port:f.port,pathname:f.pathname});return await oJ({...f,...J,allowPortFallback:f.allowPortFallback??!$,owner:Xf()})}export{f6 as writeHubDiscovery,$6 as withHubStartupLock,sf as verifyHubConnection,h4 as truncateNotificationBody,LH as toHubHealthUrl,mH as stopLocalHubServerGracefully,M4 as startHubWebSocketServer,QV as startHubServer,Y1 as spawnDetachedHubServer,K7 as sendHubCommand,W6 as restartLocalHubIfIdleAfterStartupTimeout,Q7 as resolveWorkspaceHubOwnerContext,Xf as resolveSharedHubOwnerContext,IH as resolveHubUrl,y0 as resolveHubOwnerContext,tf as resolveHubEndpointOptions,S0 as resolveHubBuildId,V1 as resolveDefaultHubPort,bH as resolveDefaultHubPathname,qH as resolveDefaultHubHost,x2 as resolveCompatibleLocalHubUrl,$7 as resolveClineDir,S2 as resolveClineDataDir,I2 as requestHubShutdown,k0 as rememberRecoverableLocalHubUrl,Qf as readHubDiscovery,Pf as probeHubServer,y7 as probeHubConnection,J6 as prewarmDetachedHubServer,m0 as normalizeHubWebSocketUrl,SH as isHubReconnectableTransportError,H6 as isHubCommandTimeoutError,H7 as isDiscoveryFilePresent,oJ as ensureHubWebSocketServer,ZV as ensureHubServer,j7 as ensureDetachedHubServer,K$ as ensureCompatibleLocalHubUrl,WV as createLocalHubScheduleRuntimeHandlers,J7 as createInMemoryHubOwnerContext,cf as createHubServerUrl,e4 as createHubAuthToken,y$ as createConfiguredTelemetryService,X1 as createConfiguredTelemetryHandle,Q6 as connectToHub,zf as clearHubDiscovery,df as NodeHubClient,D4 as NativeHubTransportAdapter,gH as HubUIClient,Rf as HubTransportError,xH as HubSessionClient,B2 as HubServerTransport,Q1 as HubScheduleService,$1 as HubScheduleCommandService,B1 as HubCommandError,OH as DEFAULT_HUB_PORT,NH as DEFAULT_HUB_PATHNAME,zH as DEFAULT_HUB_HOST,T4 as BrowserWebSocketHubAdapter};