@sctg/cline-core 3.84.0-beta.20260524130712
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -0
- package/dist/ClineCore.d.ts +283 -0
- package/dist/account/cline-account-service.d.ts +37 -0
- package/dist/account/index.d.ts +3 -0
- package/dist/account/rpc.d.ts +40 -0
- package/dist/account/types.d.ts +98 -0
- package/dist/auth/bounded-ttl-cache.d.ts +13 -0
- package/dist/auth/client.d.ts +30 -0
- package/dist/auth/cline.d.ts +64 -0
- package/dist/auth/codex.d.ts +43 -0
- package/dist/auth/oca.d.ts +28 -0
- package/dist/auth/server.d.ts +54 -0
- package/dist/auth/types.d.ts +103 -0
- package/dist/auth/utils.d.ts +32 -0
- package/dist/cline-core/automation.d.ts +34 -0
- package/dist/cline-core/runtime-services.d.ts +5 -0
- package/dist/cline-core/start-input.d.ts +10 -0
- package/dist/cline-core/telemetry.d.ts +10 -0
- package/dist/cline-core/types.d.ts +221 -0
- package/dist/cron/events/cron-event-ingress.d.ts +37 -0
- package/dist/cron/reports/cron-report-writer.d.ts +40 -0
- package/dist/cron/runner/cron-materializer.d.ts +35 -0
- package/dist/cron/runner/cron-runner.d.ts +47 -0
- package/dist/cron/runner/resource-limiter.d.ts +8 -0
- package/dist/cron/schedule/scheduler.d.ts +12 -0
- package/dist/cron/service/cron-service.d.ts +56 -0
- package/dist/cron/service/schedule-command-service.d.ts +9 -0
- package/dist/cron/service/schedule-service.d.ts +98 -0
- package/dist/cron/specs/cron-reconciler.d.ts +61 -0
- package/dist/cron/specs/cron-spec-parser.d.ts +26 -0
- package/dist/cron/specs/cron-watcher.d.ts +22 -0
- package/dist/cron/store/cron-schema.d.ts +2 -0
- package/dist/cron/store/sqlite-cron-store.d.ts +240 -0
- package/dist/extensions/config/index.d.ts +7 -0
- package/dist/extensions/config/runtime-commands.d.ts +11 -0
- package/dist/extensions/config/skill-frontmatter-toggle.d.ts +11 -0
- package/dist/extensions/config/unified-config-file-watcher.d.ts +77 -0
- package/dist/extensions/config/user-instruction-config-loader.d.ts +64 -0
- package/dist/extensions/config/user-instruction-plugin.d.ts +25 -0
- package/dist/extensions/config/user-instruction-service.d.ts +23 -0
- package/dist/extensions/context/agentic-compaction.d.ts +12 -0
- package/dist/extensions/context/basic-compaction.d.ts +8 -0
- package/dist/extensions/context/compaction-shared.d.ts +61 -0
- package/dist/extensions/context/compaction.d.ts +38 -0
- package/dist/extensions/index.d.ts +5 -0
- package/dist/extensions/mcp/client.d.ts +9 -0
- package/dist/extensions/mcp/config-loader.d.ts +25 -0
- package/dist/extensions/mcp/index.d.ts +11 -0
- package/dist/extensions/mcp/manager.d.ts +23 -0
- package/dist/extensions/mcp/name-transform.d.ts +2 -0
- package/dist/extensions/mcp/oauth.d.ts +48 -0
- package/dist/extensions/mcp/policies.d.ts +14 -0
- package/dist/extensions/mcp/tools.d.ts +3 -0
- package/dist/extensions/mcp/types.d.ts +111 -0
- package/dist/extensions/plugin/plugin-config-loader.d.ts +40 -0
- package/dist/extensions/plugin/plugin-load-report.d.ts +18 -0
- package/dist/extensions/plugin/plugin-loader.d.ts +22 -0
- package/dist/extensions/plugin/plugin-module-import.d.ts +4 -0
- package/dist/extensions/plugin/plugin-sandbox.d.ts +36 -0
- package/dist/extensions/plugin/plugin-targeting.d.ts +6 -0
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -0
- package/dist/extensions/tools/constants.d.ts +24 -0
- package/dist/extensions/tools/definitions.d.ts +102 -0
- package/dist/extensions/tools/executors/apply-patch-parser.d.ts +68 -0
- package/dist/extensions/tools/executors/apply-patch.d.ts +28 -0
- package/dist/extensions/tools/executors/bash.d.ts +49 -0
- package/dist/extensions/tools/executors/editor.d.ts +31 -0
- package/dist/extensions/tools/executors/file-read.d.ts +40 -0
- package/dist/extensions/tools/executors/index.d.ts +50 -0
- package/dist/extensions/tools/executors/search.d.ts +50 -0
- package/dist/extensions/tools/executors/web-fetch.d.ts +58 -0
- package/dist/extensions/tools/helpers.d.ts +15 -0
- package/dist/extensions/tools/index.d.ts +59 -0
- package/dist/extensions/tools/model-tool-routing.d.ts +33 -0
- package/dist/extensions/tools/presets.d.ts +132 -0
- package/dist/extensions/tools/runtime.d.ts +24 -0
- package/dist/extensions/tools/schemas.d.ts +241 -0
- package/dist/extensions/tools/team/delegated-agent.d.ts +43 -0
- package/dist/extensions/tools/team/index.d.ts +2 -0
- package/dist/extensions/tools/team/multi-agent.d.ts +230 -0
- package/dist/extensions/tools/team/projections.d.ts +8 -0
- package/dist/extensions/tools/team/runtime.d.ts +4 -0
- package/dist/extensions/tools/team/spawn-agent-tool.d.ts +84 -0
- package/dist/extensions/tools/team/subagent-prompts.d.ts +3 -0
- package/dist/extensions/tools/team/team-tools.d.ts +35 -0
- package/dist/extensions/tools/types.d.ts +254 -0
- package/dist/hooks/checkpoint-hooks.d.ts +45 -0
- package/dist/hooks/hook-extension.d.ts +2 -0
- package/dist/hooks/hook-file-config.d.ts +24 -0
- package/dist/hooks/hook-file-hooks.d.ts +21 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/subprocess-runner.d.ts +21 -0
- package/dist/hooks/subprocess.d.ts +68 -0
- package/dist/hub/client/connect.d.ts +14 -0
- package/dist/hub/client/index.d.ts +88 -0
- package/dist/hub/client/session-client.d.ts +118 -0
- package/dist/hub/client/ui-client.d.ts +45 -0
- package/dist/hub/daemon/entry.d.ts +1 -0
- package/dist/hub/daemon/entry.js +722 -0
- package/dist/hub/daemon/index.d.ts +9 -0
- package/dist/hub/daemon/runtime-handlers.d.ts +12 -0
- package/dist/hub/daemon/start-shared-server.d.ts +18 -0
- package/dist/hub/discovery/defaults.d.ts +16 -0
- package/dist/hub/discovery/index.d.ts +30 -0
- package/dist/hub/discovery/workspace.d.ts +3 -0
- package/dist/hub/index.d.ts +32 -0
- package/dist/hub/index.js +719 -0
- package/dist/hub/runtime-host/hub-runtime-host.d.ts +76 -0
- package/dist/hub/runtime-host/remote-runtime-host.d.ts +9 -0
- package/dist/hub/server/browser-websocket.d.ts +19 -0
- package/dist/hub/server/command-transport.d.ts +7 -0
- package/dist/hub/server/handlers/approval-handlers.d.ts +17 -0
- package/dist/hub/server/handlers/capability-handlers.d.ts +12 -0
- package/dist/hub/server/handlers/client-handlers.d.ts +6 -0
- package/dist/hub/server/handlers/context.d.ts +57 -0
- package/dist/hub/server/handlers/run-handlers.d.ts +5 -0
- package/dist/hub/server/handlers/session-event-projector.d.ts +7 -0
- package/dist/hub/server/handlers/session-handlers.d.ts +20 -0
- package/dist/hub/server/hub-client-contributions.d.ts +19 -0
- package/dist/hub/server/hub-notifications.d.ts +7 -0
- package/dist/hub/server/hub-schedule-events.d.ts +2 -0
- package/dist/hub/server/hub-server-logging.d.ts +2 -0
- package/dist/hub/server/hub-server-options.d.ts +55 -0
- package/dist/hub/server/hub-server-transport.d.ts +37 -0
- package/dist/hub/server/hub-session-records.d.ts +9 -0
- package/dist/hub/server/hub-websocket-server.d.ts +6 -0
- package/dist/hub/server/index.d.ts +4 -0
- package/dist/hub/server/native-transport.d.ts +16 -0
- package/dist/index.d.ts +104 -0
- package/dist/index.js +717 -0
- package/dist/remote-config/integration.d.ts +17 -0
- package/dist/runtime/capabilities/index.d.ts +2 -0
- package/dist/runtime/capabilities/normalize-runtime-capabilities.d.ts +2 -0
- package/dist/runtime/capabilities/runtime-capabilities.d.ts +6 -0
- package/dist/runtime/config/agent-message-codec.d.ts +6 -0
- package/dist/runtime/config/agent-runtime-config-builder.d.ts +80 -0
- package/dist/runtime/host/history.d.ts +19 -0
- package/dist/runtime/host/host.d.ts +7 -0
- package/dist/runtime/host/local/agent-event-bridge.d.ts +30 -0
- package/dist/runtime/host/local/session-record.d.ts +6 -0
- package/dist/runtime/host/local/session-service-invoker.d.ts +4 -0
- package/dist/runtime/host/local/spawn-tool.d.ts +15 -0
- package/dist/runtime/host/local/user-files.d.ts +1 -0
- package/dist/runtime/host/local-runtime-host.d.ts +127 -0
- package/dist/runtime/host/runtime-host-support.d.ts +20 -0
- package/dist/runtime/host/runtime-host.d.ts +169 -0
- package/dist/runtime/orchestration/runtime-builder.d.ts +6 -0
- package/dist/runtime/orchestration/runtime-event-adapter.d.ts +101 -0
- package/dist/runtime/orchestration/runtime-oauth-token-manager.d.ts +30 -0
- package/dist/runtime/orchestration/session-runtime-orchestrator.d.ts +218 -0
- package/dist/runtime/orchestration/session-runtime.d.ts +58 -0
- package/dist/runtime/orchestration/user-input-builder.d.ts +15 -0
- package/dist/runtime/safety/loop-detection.d.ts +58 -0
- package/dist/runtime/safety/mistake-tracker.d.ts +68 -0
- package/dist/runtime/safety/rules.d.ts +6 -0
- package/dist/runtime/tools/subprocess-sandbox.d.ts +43 -0
- package/dist/runtime/tools/tool-approval.d.ts +9 -0
- package/dist/runtime/turn-queue/pending-prompt-service.d.ts +69 -0
- package/dist/services/agent-events.d.ts +34 -0
- package/dist/services/config.d.ts +2 -0
- package/dist/services/global-settings.d.ts +34 -0
- package/dist/services/llms/cline-recommended-models.d.ts +19 -0
- package/dist/services/llms/configured-provider-registry.d.ts +27 -0
- package/dist/services/llms/handler-factory.d.ts +3 -0
- package/dist/services/llms/provider-defaults.d.ts +28 -0
- package/dist/services/llms/provider-settings.d.ts +250 -0
- package/dist/services/llms/runtime-config.d.ts +3 -0
- package/dist/services/llms/runtime-registry.d.ts +19 -0
- package/dist/services/llms/runtime-types.d.ts +84 -0
- package/dist/services/local-runtime-bootstrap.d.ts +45 -0
- package/dist/services/plugin-tools.d.ts +28 -0
- package/dist/services/providers/local-provider-registry.d.ts +230 -0
- package/dist/services/providers/local-provider-service.d.ts +70 -0
- package/dist/services/providers/model-source.d.ts +3 -0
- package/dist/services/providers/provider-config-fields.d.ts +37 -0
- package/dist/services/session-artifacts.d.ts +17 -0
- package/dist/services/session-data.d.ts +51 -0
- package/dist/services/session-telemetry.d.ts +15 -0
- package/dist/services/storage/file-team-store.d.ts +28 -0
- package/dist/services/storage/provider-settings-legacy-migration.d.ts +38 -0
- package/dist/services/storage/provider-settings-manager.d.ts +23 -0
- package/dist/services/storage/sqlite-session-store.d.ts +30 -0
- package/dist/services/storage/sqlite-team-store.d.ts +34 -0
- package/dist/services/storage/team-store.d.ts +15 -0
- package/dist/services/telemetry/ITelemetryAdapter.d.ts +54 -0
- package/dist/services/telemetry/OpenTelemetryAdapter.d.ts +43 -0
- package/dist/services/telemetry/OpenTelemetryProvider.d.ts +83 -0
- package/dist/services/telemetry/TelemetryLoggerSink.d.ts +27 -0
- package/dist/services/telemetry/TelemetryService.d.ts +34 -0
- package/dist/services/telemetry/core-events.d.ts +276 -0
- package/dist/services/telemetry/distinct-id.d.ts +1 -0
- package/dist/services/telemetry/index.d.ts +3 -0
- package/dist/services/telemetry/index.js +1 -0
- package/dist/services/usage.d.ts +19 -0
- package/dist/services/workspace/file-indexer.d.ts +5 -0
- package/dist/services/workspace/index.d.ts +4 -0
- package/dist/services/workspace/mention-enricher.d.ts +13 -0
- package/dist/services/workspace/workspace-manager.d.ts +27 -0
- package/dist/services/workspace/workspace-manifest.d.ts +31 -0
- package/dist/services/workspace/workspace-telemetry.d.ts +18 -0
- package/dist/session/checkpoint-restore.d.ts +20 -0
- package/dist/session/models/session-graph.d.ts +15 -0
- package/dist/session/models/session-manifest.d.ts +31 -0
- package/dist/session/models/session-row.d.ts +92 -0
- package/dist/session/services/file-session-service.d.ts +10 -0
- package/dist/session/services/message-builder.d.ts +66 -0
- package/dist/session/services/persistence-service.d.ts +59 -0
- package/dist/session/services/session-service.d.ts +15 -0
- package/dist/session/session-snapshot.d.ts +59 -0
- package/dist/session/session-versioning-service.d.ts +48 -0
- package/dist/session/stores/conversation-store.d.ts +29 -0
- package/dist/session/stores/session-manifest-store.d.ts +23 -0
- package/dist/session/stores/team-persistence-store.d.ts +23 -0
- package/dist/session/team/index.d.ts +2 -0
- package/dist/session/team/team-child-session-manager.d.ts +35 -0
- package/dist/session/team/team-session-coordinator.d.ts +13 -0
- package/dist/settings/index.d.ts +2 -0
- package/dist/settings/settings-service.d.ts +6 -0
- package/dist/settings/types.d.ts +43 -0
- package/dist/types/chat-schema.d.ts +163 -0
- package/dist/types/common.d.ts +24 -0
- package/dist/types/config.d.ts +167 -0
- package/dist/types/events.d.ts +89 -0
- package/dist/types/provider-settings.d.ts +19 -0
- package/dist/types/session.d.ts +122 -0
- package/dist/types/sessions.d.ts +38 -0
- package/dist/types/storage.d.ts +36 -0
- package/dist/types.d.ts +32 -0
- package/dist/version.d.ts +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,722 @@
|
|
|
1
|
+
import{createRequire as CB}from"node:module";var{defineProperty:u5,getOwnPropertyNames:yB}=Object;var Z3=Object.prototype.hasOwnProperty;function W3($){return this[$]}var M=($,f,J)=>{var Q=yB(f);for(let Z of Q)if(!Z3.call($,Z)&&Z!=="default")u5($,Z,{get:W3.bind(f,Z),enumerable:!0});if(J){for(let Z of Q)if(!Z3.call(J,Z)&&Z!=="default")u5(J,Z,{get:W3.bind(f,Z),enumerable:!0});return J}};var wB=($)=>$;function SB($,f){this[$]=wB.bind(null,f)}var y=($,f)=>{for(var J in f)u5($,J,{get:f[J],enumerable:!0,configurable:!0,set:SB.bind(f,J)})};var U1=($,f)=>()=>($&&(f=$($=0)),f);var j3=CB(import.meta.url);import{SDK_ERROR_TELEMETRY_EVENT as hB}from"@cline/shared";function p($,f,J){$?.capture({event:f,properties:J})}function p6($){if(!$)return;return $.substring(0,EB)}function bB($){if(typeof $==="string")return"Error";return $.name?.trim()||$.constructor?.name||"Error"}function kB($){return typeof $==="string"?$:$.message}function X3($,f){return $.some((J)=>f.has(J.trim().toLowerCase()))}function H3($){p($,x.CLIENT.EXTENSION_ACTIVATED)}function r6($,f){let J=[...f.vcs_types],Q={root_count:f.root_count,vcs_types:J,is_multi_root:f.root_count>1,has_git:X3(J,new Set(["git"])),has_mercurial:X3(J,new Set(["mercurial","hg"]))};if(f.init_duration_ms!==void 0)Q.init_duration_ms=f.init_duration_ms;if(f.feature_flag_enabled!==void 0)Q.feature_flag_enabled=f.feature_flag_enabled;if(f.is_remote_workspace!==void 0)Q.is_remote_workspace=f.is_remote_workspace;p($,x.WORKSPACE.INITIALIZED,Q)}function i6($,f,J){p($,x.WORKSPACE.INIT_ERROR,{error_type:bB(f),error_message:p6(kB(f)),fallback_to_single_root:J.fallback_to_single_root,workspace_count:J.workspace_count??0})}function Y3($,f){p($,x.WORKSPACE.PATH_RESOLVED,{...f})}function P$($,f){p($,x.USER.AUTH_STARTED,{provider:f})}function U$($,f){p($,x.USER.AUTH_SUCCEEDED,{provider:f})}function D$($,f,J){p($,x.USER.AUTH_FAILED,{provider:f,errorMessage:p6(J)})}function I$($,f,J){p($,x.USER.AUTH_LOGGED_OUT,{provider:f,reason:J})}function V3($,f){p($,x.USER.PROVIDER_CONFIGURED,{provider:f})}function A3($,f){$?.captureRequired(x.USER.TELEMETRY_OPT_OUT,f)}function R$($,f){let J=f.id?.trim();if(J)$?.setDistinctId(J);$?.updateCommonProperties({account_id:f.id,account_email:f.email,provider:f.provider,organization_id:f.organizationId,organization_name:f.organizationName,member_id:f.memberId})}function n6($,f){p($,x.TASK.CREATED,f)}function a6($,f){p($,x.TASK.RESTARTED,f)}function S8($,f){p($,x.TASK.COMPLETED,f)}function G2($,f){p($,x.TASK.CONVERSATION_TURN,{...f,timestamp:new Date().toISOString()})}function t6($,f){p($,x.TASK.TOKEN_USAGE,f)}function s6($,f,J){p($,x.TASK.MODE_SWITCH,{ulid:f,mode:J})}function o6($,f){p($,x.TASK.TOOL_USED,f)}function e6($,f){p($,x.TASK.SKILL_USED,f)}function $f($,f){p($,x.TASK.DIFF_EDIT_FAILED,f)}function C8($,f){p($,x.TASK.PROVIDER_API_ERROR,{...f,errorMessage:p6(f.errorMessage)??"unknown",timestamp:new Date().toISOString()})}function ff($,f,J){p($,x.TASK.MENTION_USED,{mentionType:f,contentLength:J,timestamp:new Date().toISOString()})}function Jf($,f,J,Q){p($,x.TASK.MENTION_FAILED,{mentionType:f,errorType:J,errorMessage:p6(Q),timestamp:new Date().toISOString()})}function Qf($,f,J,Q,Z){p($,x.TASK.MENTION_SEARCH_RESULTS,{queryLength:f.length,resultCount:J,searchType:Q,isEmpty:Z,timestamp:new Date().toISOString()})}function x$($,f){p($,x.TASK.AGENT_CREATED,{...f,timestamp:new Date().toISOString()})}function Zf($,f){p($,x.TASK.AGENT_TEAM_CREATED,{...f,timestamp:new Date().toISOString()})}function h8($,f){p($,f.event==="ended"?x.TASK.SUBAGENT_COMPLETED:x.TASK.SUBAGENT_STARTED,{...f,timestamp:new Date().toISOString()})}function Wf($,f,J,Q){p($,x.HOOKS.DISCOVERY_COMPLETED,{hookName:f,globalCount:J,workspaceCount:Q,totalCount:J+Q,timestamp:new Date().toISOString()})}function jf($,f){p($,x.TASK.COMPACTION_EXECUTED,{...f,timestamp:new Date().toISOString()})}function Xf($,f){p($,x.TASK.COMPACTION_SKIPPED,{...f,timestamp:new Date().toISOString()})}var EB=500,x;var L0=U1(()=>{x={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",PROVIDER_CONFIGURED:"user.provider_configured",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",COMPACTION_EXECUTED:"task.compaction_executed",COMPACTION_SKIPPED:"task.compaction_skipped"},HOOKS:{DISCOVERY_COMPLETED:"hooks.discovery_completed"},WORKSPACE:{INITIALIZED:"workspace.initialized",INIT_ERROR:"workspace.init_error",PATH_RESOLVED:"workspace.path_resolved"},SDK:{ERROR:hB}}});var LW={};y(LW,{normalizeUserMessage:()=>bK,buildInitialUserContent:()=>EK});async function EK($,f,J,Q){let Z=kK(f),W=await xK(J,Q);if(Z.length===0&&!W)return $;let j=[{type:"text",text:$},...Z];if(W)j.push(...W);return j}function bK($){if($==null)return"";if(typeof $==="string")return $;let f=$.content;if(typeof f==="string")return f;if(!Array.isArray(f))return"";let J=[];for(let Q of f)if(Q&&typeof Q==="object"&&Q.type==="text"){let Z=Q.text;if(typeof Z==="string")J.push(Z)}return J.join(`
|
|
2
|
+
`)}function kK($){if(!$||$.length===0)return[];let f=[];for(let J of $){let Q=IK(J);if(Q)f.push(Q)}return f}function IK($){let f=$.trim();if(!f)return;let J=f.match(/^data:([^;,]+);base64,(.+)$/);if(J){let Q=J[1],Z=J[2];if(!Q||!Z)return;return{type:"image",mediaType:Q,data:Z}}return{type:"image",mediaType:"image/png",data:f}}async function xK($,f){if(!$||$.length===0)return;let J=f??(async()=>{throw Error("File loading is not configured in this runtime. Provide userFileContentLoader to enable userFiles support.")}),Q=await Promise.all($.map(async(Z)=>{let W=Z.replace(/\\/g,"/");try{let j=await J(Z);return{type:"file",path:W,content:j}}catch(j){let X=j instanceof Error?j.message:String(j);return{type:"file",path:W,content:`Error fetching content: ${X}`}}}));if(Q.length===0)return;return Q}import{mkdirSync as EF,readFileSync as bF,statSync as kF,writeFileSync as IF}from"node:fs";import{dirname as xF}from"node:path";import{resolveGlobalSettingsPath as Yj}from"@cline/shared/storage";import{z as V4}from"zod";function Mf(){return A4.parse({})}function mF(){qf=void 0}function gF($){if($.disabledTools)Object.freeze($.disabledTools);if($.disabledPlugins)Object.freeze($.disabledPlugins);return Object.freeze($)}function vF($){let f;try{f=bF($,"utf8")}catch{return Mf()}try{let J=A4.safeParse(JSON.parse(f));return J.success?J.data:Mf()}catch{return Mf()}}function uF(){let $=Yj(),f=kF($,{throwIfNoEntry:!1}),J=f?.mtimeMs??0,Q=f?.size??0,Z=qf;if(Z&&Z.path===$&&Z.mtimeMs===J&&Z.size===Q)return Z;let W=gF(f?vF($):Mf());return qf={path:$,mtimeMs:J,size:Q,value:W},qf}function J$(){return uF().value}function h2($,f={}){let J=Yj(),Q=J$();EF(xF(J),{recursive:!0});let Z=A4.parse($);if(!Q.telemetryOptOut&&Z.telemetryOptOut)A3(f.telemetry);IF(J,`${JSON.stringify(Z,null,2)}
|
|
3
|
+
`,"utf8"),mF()}function yf(){return J$().telemetryOptOut}function Vj($,f={}){h2({...J$(),telemetryOptOut:$},f)}function Q$($){return new Set($??J$().disabledTools??[])}function B4($){return new Set($??J$().disabledPlugins??[])}function Aj($){return Q$().has($)}function wf($){let f=J$(),J=new Set(f.disabledTools??[]),Q=J.has($);if(Q)J.delete($);else J.add($);return h2({...f,disabledTools:[...J]}),!Q}function h9($,f){let J=[...new Set($.map((W)=>W.trim()).filter(Boolean))];if(J.length===0)return;let Q=J$(),Z=Q$(Q.disabledTools);for(let W of J)if(f)Z.add(W);else Z.delete(W);h2({...Q,disabledTools:[...Z]})}function Bj($,f){return h9([$],f),f}function Gj($){return B4().has($)}function Kj($,f){let J=$.trim();if(!J)return;let Q=J$(),Z=B4(Q.disabledPlugins);if(f)Z.add(J);else Z.delete(J);h2({...Q,disabledPlugins:[...Z]})}function Sf($,f){let J=B4(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q))}function h1($,f){let J=Q$(f);if(J.size===0)return[...$];return $.filter((Q)=>!J.has(Q.name))}function Cf($,f){if(!$||$.length===0)return $;let J=Q$(f);if(J.size===0)return $;return $.map((Q)=>{if(!Q.setup)return Q;return{...Q,setup:(Z,W)=>Q.setup?.({...Z,registerTool:(j)=>{if(!J.has(j.name))Z.registerTool(j)}},W)}})}var Hj,A4,qf;var T$=U1(()=>{L0();Hj=V4.preprocess(($)=>Array.isArray($)?$.filter((f)=>typeof f==="string").map((f)=>f.trim()).filter(Boolean):void 0,V4.array(V4.string()).optional()).transform(($)=>{if(!$)return;let f=[...new Set($)].sort((J,Q)=>J.localeCompare(Q));return f.length>0?f:void 0}),A4=V4.object({telemetryOptOut:V4.boolean().default(!1).catch(!1),disabledTools:Hj.optional(),disabledPlugins:Hj.optional()}).strip().transform(($)=>{let f={telemetryOptOut:$.telemetryOptOut};if($.disabledTools?.length)f.disabledTools=$.disabledTools;if($.disabledPlugins?.length)f.disabledPlugins=$.disabledPlugins;return f})});var KH={};y(KH,{updateMcpServerOAuthState:()=>r1,setMcpServerDisabled:()=>l1,resolveMcpServerRegistrations:()=>Z$,resolveDefaultMcpSettingsPath:()=>z0,registerMcpServersFromSettingsFile:()=>i1,normalizeMcpServerOAuthState:()=>$8,loadMcpSettingsFile:()=>d1,listMcpServerOAuthStatuses:()=>J6,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>p1});import{existsSync as WR,mkdirSync as HH,readFileSync as C7,writeFileSync as YH}from"node:fs";import{dirname as VH}from"node:path";import{resolveMcpSettingsPath as jR}from"@cline/shared/storage";import{z as S}from"zod";function S7($){if(!$)return;if($==="http")return"streamableHttp";return $}function z0(){return jR()}function UR($){let f=C7($,"utf8"),J;try{J=JSON.parse(f)}catch(Q){let Z=Q instanceof Error?Q.message:String(Q);throw Error(`Failed to parse MCP settings JSON at "${$}": ${Z}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object.`);return J}function GH($,f){if(!Object.hasOwn($,f))return;let J=$[f];if(!J||typeof J!=="object"||Array.isArray(J))return;return J}function DR($,f,J){Object.defineProperty($,f,{value:J,enumerable:!0,configurable:!0,writable:!0})}function d1($={}){let f=$.filePath??z0(),J=C7(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${f}": ${j}`)}let Z=PR.safeParse(Q);if(!Z.success){let W=Z.error.issues.map((j)=>{let X=j.path.join(".");return X?`${X}: ${j.message}`:j.message}).join("; ");throw Error(`Invalid MCP settings at "${f}": ${W}`)}return Z.data}function RR($){let f=C7($,"utf8"),J;try{J=JSON.parse(f)}catch(W){let j=W instanceof Error?W.message:String(W);throw Error(`Failed to parse MCP settings JSON at "${$}": ${j}`)}if(!J||typeof J!=="object"||Array.isArray(J))throw Error(`Invalid MCP settings at "${$}": expected object`);let Q=J,Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${$}": mcpServers must be an object`);return Q}function $8($){if(!$)return;let f={...$.clientInformation?{clientInformation:$.clientInformation}:{},...$.tokens?{tokens:$.tokens}:{},...$.codeVerifier?{codeVerifier:$.codeVerifier}:{},...$.discoveryState?{discoveryState:$.discoveryState}:{},...$.redirectUrl?{redirectUrl:$.redirectUrl}:{},...$.lastError?{lastError:$.lastError}:{},...$.lastAuthenticatedAt?{lastAuthenticatedAt:$.lastAuthenticatedAt}:{}};return Object.keys(f).length>0?f:void 0}function LR($){if($===void 0)return;let f=h7.safeParse($);if(!f.success)return;return $8(f.data)}function q$($={}){let f=$.filePath??z0();return WR(f)}function Z$($={}){let f=d1($);return Object.entries(f.mcpServers).map(([J,Q])=>({name:J,transport:Q.transport,disabled:Q.disabled,metadata:Q.metadata,oauth:Q.oauth}))}function l1($){let f=$.filePath??z0(),J=$.name.trim();if(!J)throw Error("MCP server settings toggle requires a server name.");let Q=UR(f),Z=Q.mcpServers;if(!Z||typeof Z!=="object"||Array.isArray(Z))throw Error(`Invalid MCP settings at "${f}": mcpServers must be an object.`);let W={...Z},j=GH(W,J);if(!j)throw Error(`Unknown MCP server: ${J}`);let X={...j};if($.disabled)X.disabled=!0;else delete X.disabled;DR(W,J,X),HH(VH(f),{recursive:!0}),YH(f,`${JSON.stringify({...Q,mcpServers:W},null,2)}
|
|
4
|
+
`)}function p1($,f={}){let J=d1(f);if(!Object.hasOwn(J.mcpServers,$))return;return $8(J.mcpServers[$]?.oauth)}function r1($,f,J={}){let Q=J.filePath??z0(),Z=RR(Q),W=Z.mcpServers,j=GH(W,$);if(!j)throw Error(`Unknown MCP server: ${$}`);let X=LR(j.oauth)??{},H=$8(f(X));if(H)j.oauth=H;else delete j.oauth;return HH(VH(Q),{recursive:!0}),YH(Q,`${JSON.stringify(Z,null,2)}
|
|
5
|
+
`,"utf8"),H??{}}function J6($={}){return Z$($).map((J)=>{let Q=J.transport.type!=="stdio",Z=J.oauth?.tokens?.access_token;return{serverName:J.name,oauthSupported:Q,oauthConfigured:Q&&typeof Z==="string"&&Z.trim().length>0,lastError:J.oauth?.lastError,lastAuthenticatedAt:J.oauth?.lastAuthenticatedAt}}).sort((J,Q)=>J.serverName.localeCompare(Q.serverName))}async function i1($,f={}){let J=Z$(f);for(let Q of J)await $.registerServer(Q);return J}var f6,AH,h7,XR,HR,YR,VR,AR,BR,BH,GR,KR,FR,PR;var wJ=U1(()=>{f6=S.record(S.string(),S.string()),AH=S.record(S.string(),S.unknown()),h7=S.object({clientInformation:S.record(S.string(),S.unknown()).optional(),tokens:S.record(S.string(),S.unknown()).optional(),codeVerifier:S.string().optional(),discoveryState:S.record(S.string(),S.unknown()).optional(),redirectUrl:S.string().url().optional(),lastError:S.string().optional(),lastAuthenticatedAt:S.number().int().positive().optional()}).strip(),XR=S.object({type:S.literal("stdio"),command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:f6.optional()}),HR=S.object({type:S.literal("sse"),url:S.string().url(),headers:f6.optional()}),YR=S.object({type:S.literal("streamableHttp"),url:S.string().url(),headers:f6.optional()}),VR=S.discriminatedUnion("type",[XR,HR,YR]),AR=S.object({transport:VR,disabled:S.boolean().optional(),metadata:AH.optional(),oauth:h7.optional()}),BR=S.enum(["stdio","sse","http","streamableHttp"]).optional(),BH=S.object({type:S.enum(["stdio","sse","streamableHttp"]).optional(),transportType:BR,disabled:S.boolean().optional(),metadata:AH.optional(),oauth:h7.optional()});GR=BH.extend({command:S.string().min(1),args:S.array(S.string()).optional(),cwd:S.string().min(1).optional(),env:f6.optional()}).superRefine(($,f)=>{let J=$.type??S7($.transportType);if(J&&J!=="stdio")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "stdio" for command-based MCP server',path:["type"]})}).transform(($)=>({transport:{type:"stdio",command:$.command,args:$.args,cwd:$.cwd,env:$.env},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth})),KR=BH.extend({url:S.string().url(),headers:f6.optional()}).superRefine(($,f)=>{let J=$.type??S7($.transportType)??"sse";if(J!=="sse"&&J!=="streamableHttp")f.addIssue({code:S.ZodIssueCode.custom,message:'Expected type "sse" or "streamableHttp" for URL-based MCP server',path:["type"]})}).transform(($)=>{if(($.type??S7($.transportType)??"sse")==="streamableHttp")return{transport:{type:"streamableHttp",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth};return{transport:{type:"sse",url:$.url,headers:$.headers},disabled:$.disabled,metadata:$.metadata,oauth:$.oauth}}),FR=S.union([AR,GR,KR]),PR=S.object({mcpServers:S.record(S.string(),FR)}).passthrough()});import{existsSync as K_,mkdirSync as F_,readFileSync as P_,writeFileSync as U_}from"node:fs";import{resolve as D_}from"node:path";import{resolveSessionDataDir as R_}from"@cline/shared/storage";import{nanoid as L_}from"nanoid";import*as O_ from"node-machine-id";function f2($){let f=$?.trim();if(f)return f;let J=N_();if(J)return J;return T_()}function __(){let $=O_;return $.machineIdSync??$.default?.machineIdSync}function N_(){try{let $=__();if(!$)return;return $().trim()||void 0}catch{return}}function T_(){let $=R_(),f=D_($,z_);try{if(K_(f)){let Q=P_(f,"utf8").trim();if(Q.length>0)return Q}}catch{}let J=`cl-${L_()}`;try{F_($,{recursive:!0}),U_(f,J,"utf8")}catch{}return J}var z_="machine-id";var eJ=()=>{};class S6{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor($){this.name=$.name??"OpenTelemetryAdapter",this.metadata={...$.metadata},this.meterProvider=$.meterProvider,this.loggerProvider=$.loggerProvider,this.meter=$.meterProvider?.getMeter("cline")??null,this.logger=$.loggerProvider?.getLogger("cline")??null,this.enabled=$.enabled??!0,this.distinctId=$.distinctId,this.commonProperties=$.commonProperties?{...$.commonProperties}:{}}emit($,f){if(!this.isEnabled())return;this.emitLog($,f,!1)}emitRequired($,f){this.emitLog($,f,!0)}recordCounter($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.counters.get($);if(!W)W=this.meter.createCounter($,Q?{description:Q}:void 0),this.counters.set($,W);W.add(f,this.flattenProperties(this.buildAttributes(J)))}recordHistogram($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.histograms.get($);if(!W)W=this.meter.createHistogram($,Q?{description:Q}:void 0),this.histograms.set($,W);W.record(f,this.flattenProperties(this.buildAttributes(J)))}recordGauge($,f,J,Q,Z=!1){if(!this.meter||!Z&&!this.isEnabled())return;let W=this.buildAttributes(J),j=JSON.stringify(W),X=this.gaugeValues.get($);if(f===null){if(X){if(X.delete(j),X.size===0)this.gaugeValues.delete($),this.gauges.delete($)}return}let H=X;if(!H)H=new Map,this.gaugeValues.set($,H);if(!this.gauges.has($)){let Y=this.meter.createObservableGauge($,Q?{description:Q}:void 0);Y.addCallback((V)=>{for(let A of this.snapshotGaugeSeries($))V.observe(A.value,this.flattenProperties(A.attributes))}),this.gauges.set($,Y)}H.set(j,{value:f,attributes:W})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId($){this.distinctId=$}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}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 Q=this.flattenProperties(this.buildAttributes(f,J));this.logger.emit({severityText:"INFO",body:$,attributes:Q})}buildAttributes($,f=!1){return{...this.commonProperties,...this.metadata,...$,...this.distinctId?{distinct_id:this.distinctId}:{},...f?{_required:!0}:{}}}snapshotGaugeSeries($){let f=this.gaugeValues.get($);if(!f)return[];return Array.from(f.values(),(J)=>({value:J.value,attributes:J.attributes?{...J.attributes}:void 0}))}flattenProperties($,f="",J=new WeakSet,Q=0){if(!$)return{};let Z={},W=100,j=10;for(let[X,H]of Object.entries($)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Y=f?`${f}.${X}`:X;if(H===null||H===void 0){Z[Y]=String(H);continue}if(Array.isArray(H)){let V=H.length>W?H.slice(0,W):H;try{Z[Y]=JSON.stringify(V)}catch{Z[Y]="[UnserializableArray]"}if(H.length>W)Z[`${Y}_truncated`]=!0,Z[`${Y}_original_length`]=H.length;continue}if(typeof H==="object"){if(H instanceof Date){Z[Y]=H.toISOString();continue}if(H instanceof Error){Z[Y]=H.message;continue}if(J.has(H)){Z[Y]="[Circular]";continue}if(Q>=j){Z[Y]="[MaxDepthExceeded]";continue}J.add(H),Object.assign(Z,this.flattenProperties(H,Y,J,Q+1));continue}if(RN(H)){Z[Y]=H;continue}try{Z[Y]=JSON.stringify(H)}catch{Z[Y]=String(H)}}return Z}}function RN($){return typeof $==="string"||typeof $==="number"||typeof $==="boolean"}class C6{name;logger;enabled;constructor($={}){this.name=$.name??"TelemetryLoggerSink",this.logger=$.logger,this.enabled=$.enabled??!0}emit($,f){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:$,properties:f})}emitRequired($,f){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:$,properties:f})}recordCounter($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordHistogram($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:$,value:f,attributes:J,description:Q,required:Z===!0})}recordGauge($,f,J,Q,Z){if(!Z&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:$,value:f,attributes:J,description:Q,required:Z===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class R8{adapters;metadata;distinctId;commonProperties;constructor($={}){if(this.adapters=[...$.adapters??[]],$.logger)this.adapters.push(new C6({logger:$.logger}));this.metadata={...$.metadata??{}},this.distinctId=$.distinctId,this.commonProperties={...$.commonProperties??{}}}addAdapter($){this.adapters.push($)}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return this.adapters.some(($)=>$.isEnabled())}capture($){let f=this.buildAttributes($.properties);for(let J of this.adapters)J.emit($.event,f)}captureRequired($,f){let J=this.buildAttributes(f);for(let Q of this.adapters)Q.emitRequired($,J)}recordCounter($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordCounter($,f,W,Q,Z)}recordHistogram($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordHistogram($,f,W,Q,Z)}recordGauge($,f,J,Q,Z=!1){let W=this.buildAttributes(J);for(let j of this.adapters)j.recordGauge($,f,W,Q,Z)}async flush(){await Promise.all(this.adapters.map(($)=>$.flush()))}async dispose(){await Promise.all(this.adapters.map(($)=>$.dispose()))}buildAttributes($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}var gQ=()=>{};import{metrics as LN,trace as ON}from"@opentelemetry/api";import{logs as zN}from"@opentelemetry/api-logs";import{OTLPLogExporter as _N}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as NN}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as TN}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as MN}from"@opentelemetry/resources";import{BatchLogRecordProcessor as qN,ConsoleLogRecordExporter as yN,LoggerProvider as wN}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as SN,MeterProvider as CN,PeriodicExportingMetricReader as zV}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as hN,ConsoleSpanExporter as EN,SimpleSpanProcessor as bN}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as kN}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as IN,ATTR_SERVICE_VERSION as xN}from"@opentelemetry/semantic-conventions";class _V{distinctId;metadata;commonProperties;constructor($={}){this.distinctId=$.distinctId,this.metadata={...$.metadata??{}},this.commonProperties={...$.commonProperties??{}}}setDistinctId($){this.distinctId=$}setMetadata($){this.metadata={...$}}updateMetadata($){this.metadata={...this.metadata,...$}}setCommonProperties($){this.commonProperties={...$}}updateCommonProperties($){this.commonProperties={...this.commonProperties,...$}}isEnabled(){return!1}capture($){this.resolveProperties($.properties)}captureRequired($,f){this.resolveProperties(f)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties($){return{...this.commonProperties,...$,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class L8{meterProvider;loggerProvider;tracerProvider;options;constructor($={}){this.options=$;let f=MN({[IN]:$.serviceName??"cline",...$.serviceVersion?{[xN]:$.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(f),this.loggerProvider=this.createLoggerProvider(f),this.tracerProvider=this.createTracerProvider(f),this.meterProvider)LN.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)zN.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer($="cline",f){return ON.getTracer($,f??this.options.serviceVersion)}createAdapter($){return new S6({...$,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService($){let f=this.createAdapter({name:$.name,enabled:this.options.enabled,metadata:$.metadata});return new R8({...$,adapters:[f],distinctId:f2($.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($){let f=vQ(this.options.metricsExporter);if(f.length===0)return null;let J=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),Q=Math.min(30000,Math.floor(J*0.8)),Z=f.map((W)=>vN(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:J,timeout:Q})).filter((W)=>W!==null);if(Z.length===0)return null;return new CN({resource:$,readers:Z})}createTracerProvider($){let f=vQ(this.options.tracesExporter);if(f.length===0)return null;let J=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,Q=this.options.otlpTracesHeaders??this.options.otlpHeaders,Z=[];for(let W of f){let j=gN(W,{endpoint:J,headers:Q,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(j)Z.push(j)}if(Z.length===0)return null;return new kN({resource:$,spanProcessors:Z})}createLoggerProvider($){let f=vQ(this.options.logsExporter);if(f.length===0)return null;let J=f.map((Q)=>{let Z=mN(Q,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!Z)return null;return new qN(Z,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((Q)=>Q!==null);if(J.length===0)return null;return new wN({resource:$,processors:J})}}function h6($){let f=new L8($),J=f.createTelemetryService($);return J.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:$.enabled??!0,logsExporter:Array.isArray($.logsExporter)?$.logsExporter.join(","):$.logsExporter,metricsExporter:Array.isArray($.metricsExporter)?$.metricsExporter.join(","):$.metricsExporter,tracesExporter:Array.isArray($.tracesExporter)?$.tracesExporter.join(","):$.tracesExporter,otlpProtocol:$.otlpProtocol,hasOtlpEndpoint:Boolean($.otlpEndpoint),serviceName:$.serviceName,serviceVersion:$.serviceVersion}),{provider:f,telemetry:J}}function E$($){if(yf())return{telemetry:new _V($)};if($.enabled!==!0)return{telemetry:new R8({...$,distinctId:f2($.distinctId)})};return h6($)}function O8($){let{telemetry:f,provider:J}=E$($);return{telemetry:f,provider:J,flush:async()=>{let W=J;if(W&&typeof W.forceFlush==="function")try{await W.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([f.dispose(),J?.dispose()])}}}function vQ($){if(!$)return[];return(Array.isArray($)?$:$.split(",")).map((J)=>J.trim()).filter((J)=>J==="console"||J==="otlp")}function mN($,f){if($==="console")return new yN;if(!f.endpoint)return null;let J=uQ(f.endpoint,"/v1/logs");return new _N({url:J,headers:f.headers})}function gN($,f){if($==="console")return new bN(new EN);if(!f.endpoint)return null;let J=uQ(f.endpoint,"/v1/traces");return new hN(new TN({url:J,headers:f.headers}))}function vN($,f){if($==="console")return new zV({exporter:new SN,exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout});if(!f.endpoint)return null;let J=uQ(f.endpoint,"/v1/metrics");return new zV({exporter:new NN({url:J,headers:f.headers}),exportIntervalMillis:f.interval,exportTimeoutMillis:f.timeout})}function uQ($,f){let J=new URL($),Q=J.pathname.endsWith("/")?J.pathname.slice(0,-1):J.pathname;return J.pathname=Q.endsWith(f)?Q:`${Q}${f}`,J.toString()}var X5=U1(()=>{T$();eJ();gQ()});var _A={};y(_A,{createOpenTelemetryTelemetryService:()=>h6,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>O8,OpenTelemetryProvider:()=>L8,OpenTelemetryAdapter:()=>S6});var XZ=U1(()=>{X5()});import{initVcr as ny}from"@cline/shared";import{normalizeProviderId as py}from"@cline/llms";var DB={};y(DB,{LocalRuntimeHost:()=>B$});import{readdirSync as Iy}from"node:fs";import{homedir as xy}from"node:os";import{isAbsolute as my,join as $3,resolve as f3}from"node:path";import{captureSdkError as V2,createSessionId as gy,isLikelyAuthError as vy,normalizeUserInput as uy}from"@cline/shared";import{setHomeDirIfUnset as cy}from"@cline/shared/storage";L0();var x3={};y(x3,{createContextCompactionPrepareTurn:()=>m8});import{createHandlerAsync as vB}from"@cline/llms";import{estimateTokens as c5}from"@cline/shared";var K3=200000,d5=0.9,F3=16384,l5=20000,B3=1024,G3=2000,P3=2000,U3=8;function m$($,f){if($.length<=f)return $;return`${$.slice(0,f)}
|
|
6
|
+
...[truncated ${$.length-f} chars]`}function IB($){let f=p5($);if(typeof f==="string")return f;return f.map((J)=>{switch(J.type){case"text":return J.text;case"file":return`<file path="${J.path}">
|
|
7
|
+
${J.content}
|
|
8
|
+
</file>`;case"image":return`[image:${J.mediaType}]`;default:return""}}).join(`
|
|
9
|
+
`)}function p5($){if(typeof $==="string")return m$($,G3);return $.map((f)=>{switch(f.type){case"text":return{...f,text:m$(f.text,G3)};case"file":return{...f,content:m$(f.content,P3)};case"image":return f;default:return f}})}function xB($){return Object.entries($).map(([f,J])=>`${f}=${JSON.stringify(J)}`).join(", ")}function D3($){if(typeof $.content==="string")return`[${$.role==="user"?"User":"Bot"}]: ${$.content}`;let f=[];for(let J of $.content)switch(J.type){case"text":f.push(`[${$.role==="user"?"User":"Bot"}]: ${J.text}`);break;case"thinking":f.push(`[Bot thinking]: ${m$(J.thinking,2000)}`);break;case"redacted_thinking":f.push("[Bot thinking]: [redacted]");break;case"tool_use":f.push(`[Bot tool calls]: ${J.name}(${xB(J.input)})`);break;case"tool_result":f.push(`[Tool result]: ${IB(J.content)}`);break;case"file":f.push(`[${$.role==="user"?"User":"Bot"} file ${J.path}]: ${m$(J.content,P3)}`);break;case"image":f.push(`[${$.role==="user"?"User":"Bot"} image]: ${J.mediaType}`);break}return f.join(`
|
|
10
|
+
`)}function R3($){return $.map(D3).join(`
|
|
11
|
+
|
|
12
|
+
`).trim()}function L3(){let $=new WeakMap;return(f)=>{let J=f,Q=$.get(J);if(typeof Q==="number")return Q;let Z;try{Z=JSON.stringify(f)}catch{Z=D3(f)}let W=c5(Z.length);return $.set(J,W),W}}function k8($){return $.metadata?.kind==="compaction_summary"}function r5($){if(!k8($))return;let f=$.metadata;if(!f)return;let J=f.details;return{kind:"compaction_summary",summary:String(f.summary??""),details:{readFiles:Array.isArray(J?.readFiles)?J.readFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[],modifiedFiles:Array.isArray(J?.modifiedFiles)?J.modifiedFiles.filter((Q)=>typeof Q==="string").map((Q)=>Q.trim()).filter((Q)=>Q.length>0):[]},tokensBefore:Number(f.tokensBefore??0),generatedAt:Number(f.generatedAt??0)}}function mB($){if($.role!=="user"||!Array.isArray($.content))return!1;return $.content.length>0&&$.content.every((f)=>f.type==="tool_result")}function I8($){return $.role==="user"&&!mB($)&&!k8($)}function O3($){for(let f=0;f<$.length;f+=1)if(I8($[f]))return f;return-1}function Hf($){for(let f=$.length-1;f>=0;f-=1)if(I8($[f]))return f;return 0}function z3($){for(let f=$.length-1;f>=0;f-=1)if($[f].role==="assistant")return f;return-1}function _3($){for(let f=$.length-1;f>=0;f-=1)if(k8($[f]))return f;return-1}function N3($,f,J){let Q=Hf($);if(Q<=0)return 0;let Z=0,W=$.length;for(let X=$.length-1;X>=0;X-=1)if(Z+=J($[X]),W=X,Z>=f)break;if(W<=0)return 0;let j=Math.min(W,Q);while(j>0&&!I8($[j]))j-=1;return j}function b8($){if(typeof $==="string"&&$.trim().length>0)return[$];if(Array.isArray($))return $.flatMap((f)=>b8(f));if($&&typeof $==="object"){let f=$,J=[];for(let Q of["path","file_path","target_file","new_file_path","old_file_path"])J.push(...b8(f[Q]));if(Array.isArray(f.files)){for(let Q of f.files)if(Q&&typeof Q==="object")J.push(...b8(Q.path))}if(Array.isArray(f.file_paths))J.push(...b8(f.file_paths));return J}return[]}function E8($,f){let J=new Set($);for(let Q of f){let Z=Q.trim();if(!Z)continue;J.add(Z)}return[...J].sort((Q,Z)=>Q.localeCompare(Z))}function T3($){let f=[],J=[];for(let Q of $){let Z=r5(Q);if(Z){f=E8(f,Z.details.readFiles),J=E8(J,Z.details.modifiedFiles);continue}if(!Array.isArray(Q.content))continue;for(let W of Q.content){if(W.type==="file"){f=E8(f,[W.path]);continue}if(W.type!=="tool_use")continue;let j=b8(W.input);if(W.name==="read_files"){f=E8(f,j);continue}if(W.name==="editor"||W.name==="apply_patch")J=E8(J,j)}}return{readFiles:f,modifiedFiles:J}}function gB($){let f=$.readFiles.length>0?$.readFiles.map((Q)=>`- ${Q}`).join(`
|
|
13
|
+
`):"- none",J=$.modifiedFiles.length>0?$.modifiedFiles.map((Q)=>`- ${Q}`).join(`
|
|
14
|
+
`):"- none";return`## Files
|
|
15
|
+
Read:
|
|
16
|
+
${f}
|
|
17
|
+
Modified:
|
|
18
|
+
${J}`}function M3($,f){if(/^## Files$/im.test($))return $.trim();return`${$.trim()}
|
|
19
|
+
|
|
20
|
+
${gB(f)}`.trim()}function q3($){let f=[`Summarize this session for continuation. Be concise and factual.
|
|
21
|
+
|
|
22
|
+
## Goal
|
|
23
|
+
One sentence: what is being built or fixed.
|
|
24
|
+
|
|
25
|
+
## State
|
|
26
|
+
- Done: completed steps
|
|
27
|
+
- In Progress: current work
|
|
28
|
+
- Blocked: blockers or open questions
|
|
29
|
+
|
|
30
|
+
## Highlights
|
|
31
|
+
Key technical choices or notable findings (omit if none).
|
|
32
|
+
|
|
33
|
+
## Next
|
|
34
|
+
Immediate next steps.
|
|
35
|
+
|
|
36
|
+
## Files
|
|
37
|
+
Read: ${$.fileOps.readFiles.join(", ")||"none"}
|
|
38
|
+
Edited: ${$.fileOps.modifiedFiles.join(", ")||"none"}`];if($.previousSummary?.trim())f.push(`Previous summary:
|
|
39
|
+
${$.previousSummary.trim()}`);return f.push(`Conversation:
|
|
40
|
+
${$.conversationText||"(empty)"}`),f.join(`
|
|
41
|
+
|
|
42
|
+
`)}function y3($){let f=$.summarizer,J=(Z)=>{if(Z.providerId==="openai-codex"){let{maxOutputTokens:W,...j}=Z;return{...j,thinking:!1}}return{...Z,maxOutputTokens:Z.maxOutputTokens??B3,thinking:!1}};if(!f)return J($.activeProviderConfig);let Q=f.providerConfig?.providerId===f.providerId?f.providerConfig:void 0;return J({...Q??{},providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey??Q?.apiKey,baseUrl:f.baseUrl??Q?.baseUrl,headers:f.headers??Q?.headers,knownModels:f.knownModels??Q?.knownModels,maxOutputTokens:f.maxOutputTokens??B3})}function w3($){return{role:"user",content:`Context summary:
|
|
43
|
+
|
|
44
|
+
${$.summary}`,metadata:{kind:"compaction_summary",summary:$.summary,details:$.fileOps,tokensBefore:$.tokensBefore,generatedAt:Date.now()}}}async function uB($){let f=await vB($.providerConfig),J="";for await(let Q of f.createMessage("Summarize the provided coding session into a concise continuation note with detailed next steps.",[{role:"user",content:$.request}])){if(Q.type==="text"){J+=Q.text;continue}if(Q.type==="done"&&!Q.success&&Q.error)throw Error(Q.error)}return $.logger?.debug("Generated compaction summary",{outputChars:J.length,modelId:$.providerConfig.modelId,providerId:$.providerConfig.providerId}),J.trim()}function cB($){try{return JSON.stringify($).length}catch{return String($).length}}async function S3($){let f=$.context.messages;if(f.length<2)return;let J=N3(f,$.preserveRecentTokens,$.estimateMessageTokens);if(J<=0||J>=f.length)return;let Q=f.slice(0,J),Z=_3(Q),W=Z>=0?r5(Q[Z])?.summary:void 0,j=Z>=0?Q.slice(Z+1):Q;if(j.length===0)return;let X=T3(Q),H=R3(j),Y=q3({previousSummary:W,conversationText:H,fileOps:X});$.logger?.debug("Agentic compaction summarizer diagnostics",{messagesToSummarize:Q.length,newMessagesToFold:j.length,preservedMessages:f.length-J,previousSummaryChars:W?.length??0,conversationTextChars:H.length,summaryRequestChars:Y.length,summaryRequestEstimatedTokens:c5(Y.length),newMessagesJsonChars:cB(j),maxInputTokens:$.context.maxInputTokens,triggerTokens:$.context.triggerTokens});let V=await uB({providerConfig:y3({activeProviderConfig:$.providerConfig,summarizer:$.summarizer}),request:Y,logger:$.logger});if(!V.trim())return;let A=M3(V,X),B=f.reduce((D,F)=>D+$.estimateMessageTokens(F),0),G=[w3({summary:A,fileOps:X,tokensBefore:B}),...f.slice(J)],K=G.reduce((D,F)=>D+$.estimateMessageTokens(F),0);return $.logger?.debug("Performed agentic compaction",{messagesBefore:f.length,messagesAfter:G.length,messagesSummarized:J,messagesPreserved:f.length-J,tokensBefore:B,tokensAfter:K,maxInputTokens:$.context.maxInputTokens}),{messages:G}}function E3($){if(k8($))return;if(typeof $.content==="string"){let J=$.content.trim();return J?{...$,content:J}:void 0}let f=$.content.filter((J)=>J.type!=="text"||J.text.trim());if(f.length===0)return;return{...$,content:f.map((J)=>J.type==="text"?{...J,text:J.text.trim()}:J.type==="tool_result"?{...J,content:p5(J.content)}:J)}}function x8($,f){return $.reduce((J,Q)=>J+f(Q),0)}function C3($,f){let J=Math.max(1,f),Q=Math.max(16,J*4);if(typeof $.content==="string"){let j=m$($.content,Q).trim();return{...$,content:j||"..."}}let Z=Q,W=$.content.map((j)=>{if(j.type!=="text"||Z<=0)return j;let X=m$(j.text,Z).trim();return Z-=X.length,{...j,text:X||"..."}});return{...$,content:W}}function dB($,f){let J=O3($),Q=Hf($),Z=z3($),W=[];for(let j=0;j<$.length;j+=1){let X=E3($[j]);if(!X)continue;W.push({index:j,message:X,estimatedTokens:f(X),isFirstUser:j===J,isLastUser:j===Q,isLastAssistant:j===Z})}return W}function h3($,f,J,Q){let Z=$[f];Z.message=J,Z.estimatedTokens=Q(J)}function lB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_use")f.add(J.id);return f}function pB($){let f=new Set;if(!Array.isArray($.content))return f;for(let J of $.content)if(J.type==="tool_result")f.add(J.tool_use_id);return f}function b3($){return new Set([...lB($.message),...pB($.message)])}function rB($){let f=new Map;for(let J=0;J<$.length;J+=1)for(let Q of b3($[J])){let Z=f.get(Q);if(Z)Z.add(J);else f.set(Q,new Set([J]))}return f}function iB($,f){let J=rB($),Q=new Set,Z=[f];while(Z.length>0){let W=Z.shift();if(W===void 0||Q.has(W))continue;Q.add(W);for(let j of b3($[W]))for(let X of J.get(j)??[])if(!Q.has(X))Z.push(X)}return Q}function Yf($,f,J,Q){let Z=x8($.map((W)=>W.message),Q);for(let W=0;W<$.length&&Z>J;){if(!f($[W])){W+=1;continue}let j=iB($,W);Z-=Array.from(j).reduce((X,H)=>X+$[H].estimatedTokens,0);for(let X of Array.from(j).sort((H,Y)=>Y-H))$.splice(X,1)}}function nB($,f,J){let Q=x8($.map((W)=>W.message),J);if(Q<=f)return;for(let W=$.length-1;W>=0&&Q>f;W-=1){let j=$[W];if(j.isFirstUser)continue;let X=Math.max(U3,j.estimatedTokens-(Q-f));if(X>=j.estimatedTokens)continue;h3($,W,C3(j.message,X),J),Q=x8($.map((H)=>H.message),J)}if(Q<=f)return;let Z=$.findIndex((W)=>W.isFirstUser);if(Z>=0){let W=Math.max(1,$[Z].estimatedTokens-(Q-f));h3($,Z,C3($[Z].message,W),J)}}function aB($,f){return JSON.stringify($)!==JSON.stringify(f)}function tB($){let f=Hf($);if(f<0||f===0&&!I8($[0]))return{compactable:$,protectedTail:[]};return{compactable:$.slice(0,f),protectedTail:$.slice(f)}}function k3($){let f=Math.max(1,Math.min($.context.triggerTokens,$.context.maxInputTokens)),{compactable:J,protectedTail:Q}=tB($.context.messages);if(J.length===0)return;let Z=dB(J,$.estimateMessageTokens);if(Z.length===0)return;Yf(Z,(H)=>H.message.role==="assistant"&&!H.isLastAssistant,f,$.estimateMessageTokens),Yf(Z,(H)=>H.message.role==="user"&&!H.isFirstUser&&!H.isLastUser,f,$.estimateMessageTokens),Yf(Z,(H)=>H.message.role==="assistant"&&H.isLastAssistant,f,$.estimateMessageTokens),Yf(Z,(H)=>H.message.role==="user"&&H.isLastUser&&!H.isFirstUser,f,$.estimateMessageTokens),nB(Z,f,$.estimateMessageTokens);let W=[...Z.map((H)=>H.message),...Q];if(!aB($.context.messages,W))return;let j=x8([...J.map((H)=>E3(H)??H),...Q],$.estimateMessageTokens),X=x8(W,$.estimateMessageTokens);return $.logger?.debug("Performed basic compaction",{messagesBefore:$.context.messages.length,messagesAfter:W.length,messagesRemoved:$.context.messages.length-W.length,tokensBefore:j,tokensAfter:X,targetTokens:f,maxInputTokens:$.context.maxInputTokens}),{messages:W}}function I3($){try{return JSON.stringify($).length}catch{return String($).length}}function sB($){let f=0,J=0,Q=0;for(let Z of $){if(!Array.isArray(Z.content))continue;for(let W of Z.content){if(W.type!=="tool_result")continue;let j=I3(W.content);f+=1,J+=j,Q=Math.max(Q,j)}}return{toolResultCount:f,toolResultSerializedChars:J,maxToolResultSerializedChars:Q}}var oB={basic:({context:$,estimateMessageTokens:f,logger:J})=>k3({context:$,estimateMessageTokens:f,logger:J}),agentic:({context:$,providerConfig:f,compaction:J,mode:Q,estimateMessageTokens:Z,logger:W})=>S3({context:$,providerConfig:f,summarizer:J?.summarizer,preserveRecentTokens:Q==="manual"?Math.min(J?.preserveRecentTokens??l5,$.triggerTokens):J?.preserveRecentTokens??l5,estimateMessageTokens:Z,logger:W})};function eB($){if(typeof $.config.reserveTokens==="number"){let Q=Math.max(0,$.config.reserveTokens),Z=Math.max(0,$.maxInputTokens-Q);return{shouldCompact:$.inputTokens>Z,triggerTokens:Z,thresholdRatio:$.maxInputTokens>0?Z/$.maxInputTokens:0}}if(typeof $.config.thresholdRatio!=="number"){let Q=Math.max(0,Math.min($.maxInputTokens-F3,$.maxInputTokens*d5));return{shouldCompact:$.inputTokens>Q,triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}let f=$.config.thresholdRatio??d5,J=$.maxInputTokens*f;return{shouldCompact:$.inputTokens>J,triggerTokens:J,thresholdRatio:f}}function $G($){let f=typeof $.manualTargetRatio==="number"&&Number.isFinite($.manualTargetRatio)?$.manualTargetRatio:0.5,J=Math.min(0.95,Math.max(0.05,f)),Q=Math.max(1,Math.floor(Math.min($.autoTriggerTokens,$.inputTokens*J)));return{triggerTokens:Q,thresholdRatio:$.maxInputTokens>0?Q/$.maxInputTokens:0}}function m8($,f={}){let J=$.compaction;if(J?.enabled!==!0)return;let Q=$.providerConfig??{providerId:$.providerId,modelId:$.modelId},Z=L3(),W=J?.strategy??"basic",j=oB[W],X=f.mode??"auto",H=J?.compact?"custom":W;return async(Y)=>{let V=Y.apiMessages.reduce((L,N)=>L+Z(N),0),A=J?.maxInputTokens??Y.model.info?.maxInputTokens??Y.model.info?.contextWindow??K3;if(typeof A!=="number"||!Number.isFinite(A)||A<=0)return;let B=eB({inputTokens:V,maxInputTokens:A,config:{reserveTokens:J?.reserveTokens,thresholdRatio:J?.thresholdRatio}});if($.logger?.debug("Context compaction diagnostics",{mode:X,strategy:W,iteration:Y.iteration,providerId:$.providerId,modelId:$.modelId,inputTokens:V,maxInputTokens:A,triggerTokens:B.triggerTokens,thresholdRatio:B.thresholdRatio,shouldCompact:B.shouldCompact,messageCount:Y.messages.length,apiMessageCount:Y.apiMessages.length,apiMessagesJsonChars:I3(Y.apiMessages),...sB(Y.apiMessages)}),X==="auto"&&!B.shouldCompact)return;let G=X==="manual"?$G({inputTokens:V,maxInputTokens:A,autoTriggerTokens:B.triggerTokens,manualTargetRatio:f.manualTargetRatio}):B,K={agentId:Y.agentId,conversationId:Y.conversationId,parentAgentId:Y.parentAgentId,iteration:Y.iteration,messages:Y.messages,model:Y.model,maxInputTokens:A,triggerTokens:G.triggerTokens,thresholdRatio:G.thresholdRatio,utilizationRatio:A>0?V/A:0},D=X==="manual"?"manual_compaction":"auto_compaction";Y.emitStatusNotice?.(X==="manual"?"compacting":"auto-compacting",{kind:D,reason:D,iteration:Y.iteration,triggerTokens:G.triggerTokens,maxInputTokens:A});let F=Y.messages.length,P=Date.now(),U=J?.compact?await J.compact(K):await j({context:K,providerConfig:{...Q,abortSignal:Y.abortSignal},compaction:J,mode:X,estimateMessageTokens:Z,logger:$.logger}),z=Date.now()-P,_=$.sessionId??Y.conversationId,R={agentId:Y.agentId,conversationId:Y.conversationId,parentAgentId:Y.parentAgentId??void 0};if(U?.messages){let L=U.messages.reduce((N,w)=>N+Z(w),0);$.logger?.log("Context compaction completed",{severity:"info",strategy:W,maxInputTokens:A,inputTokens:V,afterTokens:L,tokensSaved:V-L,utilizationBefore:`${(V/A*100).toFixed(1)}%`,utilizationAfter:`${(L/A*100).toFixed(1)}%`,thresholdTrigger:`${(G.thresholdRatio*100).toFixed(1)}%`,messagesBefore:F,messagesAfter:U.messages.length,messagesRemoved:F-U.messages.length}),jf($.telemetry,{ulid:_,strategy:H,mode:X,messagesBefore:F,messagesAfter:U.messages.length,messagesRemoved:F-U.messages.length,tokensBefore:V,tokensAfter:L,tokensSaved:V-L,triggerTokens:G.triggerTokens,maxInputTokens:A,thresholdRatio:G.thresholdRatio,durationMs:z,provider:$.providerId,modelId:$.modelId,...R})}else Xf($.telemetry,{ulid:_,strategy:H,mode:X,reason:"no_result",tokensBefore:V,triggerTokens:G.triggerTokens,maxInputTokens:A,thresholdRatio:G.thresholdRatio,durationMs:z,provider:$.providerId,modelId:$.modelId,...R});return U}}var tW={};y(tW,{zodToJsonSchema:()=>UF,validateWithZod:()=>PF,resolveToolRoutingConfig:()=>R2,resolveToolPresetName:()=>z$,resolveCoreSelectedToolIds:()=>Lf,getCoreHeadlessToolNames:()=>J4,getCoreDefaultEnabledToolIds:()=>Rf,getCoreBuiltinToolCatalog:()=>M1,getCoreAcpToolNames:()=>Of,createWindowsShellTool:()=>f9,createWebFetchTool:()=>J9,createWebFetchExecutor:()=>e8,createToolPoliciesWithPreset:()=>Kf,createSubmitAndExitTool:()=>j9,createSkillsTool:()=>R1,createSearchTool:()=>e5,createSearchExecutor:()=>o8,createReadFilesTool:()=>o5,createFileReadExecutor:()=>s8,createEditorTool:()=>Z9,createEditorExecutor:()=>a8,createDefaultToolsWithPreset:()=>Ff,createDefaultTools:()=>l$,createDefaultExecutors:()=>U2,createBuiltinTools:()=>q1,createBashTool:()=>$9,createBashExecutor:()=>n8,createAskQuestionTool:()=>W9,createApplyPatchTool:()=>Q9,createApplyPatchExecutor:()=>i8,WebFetchRequestSchema:()=>t5,ToolPresets:()=>x0,TEAM_TOOL_NAMES:()=>_2,SubmitInputSchema:()=>r8,SkillsInputSchema:()=>l8,SearchCodebaseInputSchema:()=>v8,RunCommandsInputSchema:()=>K2,ReadFilesInputSchema:()=>g8,ReadFileRequestSchema:()=>v$,FetchWebContentInputSchema:()=>u8,EditFileInputSchema:()=>c8,DefaultToolNames:()=>f0,DEFAULT_MODEL_TOOL_ROUTING_RULES:()=>D2,AskQuestionInputSchema:()=>p8,ApplyPatchInputSchema:()=>d8,ALL_DEFAULT_TOOL_NAMES:()=>g$});import{validateWithZod as PF,zodToJsonSchema as UF}from"@cline/shared";var f0={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"},g$=[f0.READ_FILES,f0.SEARCH_CODEBASE,f0.RUN_COMMANDS,f0.FETCH_WEB_CONTENT,f0.APPLY_PATCH,f0.EDITOR,f0.SKILLS,f0.ASK,f0.SUBMIT_AND_EXIT];import{createTool as L$,validateWithZod as d$,zodToJsonSchema as f$}from"@cline/shared";import{validateWithZod as p3}from"@cline/shared";import{z as O}from"zod";var u$=6000,i5=O.string().describe("The absolute file path of a text file to read content from"),m3=O.object({start_line:O.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:O.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"),v$=O.object({path:i5,start_line:m3.shape.start_line,end_line:m3.shape.end_line}).describe("A file read request with optional inclusive one-based line bounds"),g8=O.object({files:O.array(v$).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.")}),g3=O.union([g8,v$,O.array(v$),O.array(O.string()),O.string(),O.object({files:v$}),O.object({file_paths:O.array(i5)}),O.object({file_paths:O.string()}),O.object({paths:O.array(O.union([i5,v$]))}),O.object({paths:v$}),O.object({paths:O.string()})]),v8=O.object({queries:O.array(O.string()).describe("Array of regex search queries to execute")}),v3=O.union([v8,O.array(O.string()),O.string(),O.object({queries:O.string()})]),D1=O.string().describe(`The non-interactive shell command to execute - MUST keep input short and concise (within ${u$*2} characters) to avoid timeouts.`),K2=O.object({commands:O.array(D1).describe("Array of shell commands to execute")}),u3=O.union([K2,O.object({commands:D1}),O.object({command:D1}),O.object({cmd:D1}),O.array(O.string()),O.string()]),n5=O.object({command:O.string().min(1).describe("The executable to run directly without shell parsing."),args:O.array(O.string()).optional().describe("Optional argv list passed directly to the executable.")}),c3=O.union([D1,n5]),a5=O.object({commands:O.array(c3).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.")}),d3=O.union([K2,a5,O.object({commands:c3}),O.array(n5),n5,O.object({command:D1}),O.object({cmd:D1}),O.array(O.string()),O.string()]),t5=O.object({url:O.string().describe("The URL to fetch"),prompt:O.string().min(2).describe("Analysis prompt for the fetched content")}),u8=O.object({requests:O.array(t5).describe("Array of the URLs for the web fetch requests")}),c8=O.object({path:O.string().min(1).describe("The absolute file path for the action to be performed on"),old_text:O.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 ${u$} characters when possible; larger payloads should be split across multiple tool calls to avoid timeouts.`),new_text:O.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 ${u$} 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:O.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."),d8=O.object({input:O.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."),l3=O.union([d8,O.string()]),l8=O.object({skill:O.string().min(1).describe("Name of the skill to execute."),args:O.string().nullable().optional().describe("Arguments for the skill; use null when omitted")}),p8=O.object({question:O.string().min(1).describe('The single question to ask the user. E.g. "How can I help you?"'),options:O.array(O.string().min(1)).min(2).max(5).describe("Array of 2-5 user-selectable answer options for the single question")}),r8=O.object({summary:O.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:O.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.
|
|
45
|
+
'False' if you have done all you can but cannot resolve the issue or if you are stuck and cannot proceed further. =
|
|
46
|
+
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 c$($){if($ instanceof Error)return $.message;return String($)}function r3($){if(typeof $.old_text==="string"&&$.old_text.length>u$)return`Editor input too large: old_text was ${$.old_text.length} characters, exceeding the recommended limit of ${u$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;if($.new_text.length>u$)return`Editor input too large: new_text was ${$.new_text.length} characters, exceeding the recommended limit of ${u$}. Split the edit into smaller tool calls so later tool calls are less likely to be truncated or time out.`;return null}function $$($,f,J){return Promise.race([$,new Promise((Q,Z)=>{setTimeout(()=>Z(Error(J)),f)})])}function i3($){let f=p3(g3,$);if(typeof f==="string")return[{path:f}];if(Array.isArray(f))return f.map((J)=>typeof J==="string"?{path:J}:J);if("files"in f)return Array.isArray(f.files)?f.files:[f.files];if("file_paths"in f)return(Array.isArray(f.file_paths)?f.file_paths:[f.file_paths]).map((Q)=>({path:Q}));if("paths"in f)return(Array.isArray(f.paths)?f.paths:[f.paths]).map((Q)=>typeof Q==="string"?{path:Q}:Q);return[f]}function Vf($){let{path:f,start_line:J,end_line:Q}=$;if(J==null&&Q==null)return f;return`${f}:${J??1}-${Q??"EOF"}`}function n3($){let{start_line:f,end_line:J}=$;if(f==null||J==null||f<=J)return null;return`start_line must be less than or equal to end_line (received start_line: ${f}, end_line: ${J})`}function a3($){let f=p3(d3,$);if(typeof f==="string")return[f];if(Array.isArray(f))return f;if("commands"in f)return Array.isArray(f.commands)?f.commands:[f.commands];if("command"in f)return"args"in f?[f]:[f.command];if("cmd"in f)return[f.cmd];return[f]}function s5($){if(typeof $==="string")return $;let f=$.args??[];if(f.length===0)return $.command;let J=f.map((Q)=>/[\s"]/u.test(Q)?JSON.stringify(Q):Q);return`${$.command} ${J.join(" ")}`}function o5($,f={}){let J=f.fileReadTimeoutMs??1e4;return L$({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. Binary files that are not image and large files are not supported. Returns file contents or error messages for each path. ",inputSchema:f$(g8),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Q,Z)=>{let W=i3(Q);return Promise.all(W.map(async(j)=>{let X=n3(j);if(X)return{query:Vf(j),result:"",error:`Invalid file range: ${X}`,success:!1};try{let H=await $$($(j,Z),J,`File read timed out after ${J}ms`);return{query:Vf(j),result:H,success:!0}}catch(H){let Y=c$(H);return{query:Vf(j),result:"",error:`Error reading file: ${Y}`,success:!1}}}))}})}function e5($,f={}){let J=f.searchTimeoutMs??30000,Q=f.cwd??process.cwd();return L$({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:f$(v8),timeoutMs:J*2,retryable:!0,maxRetries:1,execute:async(Z,W)=>{let j=d$(v3,Z),X=Array.isArray(j)?j:typeof j==="object"?Array.isArray(j.queries)?j.queries:[j.queries]:[j];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Search timed out after ${J}ms`),V=Y.length>0&&!Y.includes("No results found");return{query:H,result:Y,success:V}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Search failed: ${V}`,success:!1}}}))}})}function $9($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return L$({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 and targeted to avoid error or timeout. For long-running commands, run them in background and redirect output to a tmp file that you can read from later.",inputSchema:f$(K2),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=d$(u3,Z),X;if(typeof j==="string")X=[j];else if(Array.isArray(j))X=j;else if("commands"in j)X=Array.isArray(j.commands)?j.commands:[j.commands];else if("command"in j)X=[j.command];else X=[j.cmd];return Promise.all(X.map(async(H)=>{try{let Y=await $$($(H,Q,W),J,`Command timed out after ${J}ms`);return{query:H,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:H,result:"",error:`Command failed: ${V}`,success:!1}}}))}})}function f9($,f={}){let J=f.bashTimeoutMs??30000,Q=f.cwd??process.cwd();return L$({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:f$(a5),timeoutMs:J*2,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=a3(Z);return Promise.all(j.map(async(X)=>{try{let H=await $$($(X,Q,W),J,`Command timed out after ${J}ms`);return{query:s5(X),result:H,success:!0}}catch(H){let Y=c$(H);return{query:s5(X),result:"",error:`Command failed: ${Y}`,success:!1}}}))}})}function J9($,f={}){let J=f.webFetchTimeoutMs??30000;return L$({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:f$(u8),timeoutMs:J*2,retryable:!0,maxRetries:2,execute:async(Q,Z)=>{let W=d$(u8,Q);return Promise.all(W.requests.map(async(j)=>{try{let X=await $$($(j.url,j.prompt,Z),J,`Web fetch timed out after ${J}ms`);return{query:j.url,result:X,success:!0}}catch(X){let H=c$(X);return{query:j.url,result:"",error:`Error fetching web content: ${H}`,success:!1}}}))}})}var fG=`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:
|
|
47
|
+
|
|
48
|
+
*** Begin Patch
|
|
49
|
+
*** Update File: path/to/file.ts
|
|
50
|
+
@@ optional section marker
|
|
51
|
+
[context before]
|
|
52
|
+
-[old line]
|
|
53
|
+
+[new line]
|
|
54
|
+
[context after]
|
|
55
|
+
*** End Patch
|
|
56
|
+
|
|
57
|
+
Supported actions:
|
|
58
|
+
- \`*** Add File: <path>\`
|
|
59
|
+
- \`*** Update File: <path>\`
|
|
60
|
+
- \`*** Delete File: <path>\`
|
|
61
|
+
- optional \`*** Move to: <new path>\` immediately after an Update File header
|
|
62
|
+
|
|
63
|
+
Rules:
|
|
64
|
+
- In an Add File section, every file-content line must start with \`+\`.
|
|
65
|
+
- In an Update section, use context lines plus \`-\` and \`+\` lines to describe the change.
|
|
66
|
+
- Use \`@@\` markers when extra context is needed to disambiguate repeated code blocks.
|
|
67
|
+
- Do not use line numbers; this format is context-based.
|
|
68
|
+
- Prefer sending the patch body directly. Legacy shell wrappers such as \`%%bash\` and \`apply_patch <<"EOF"\` are accepted for compatibility but are not preferred.
|
|
69
|
+
|
|
70
|
+
Example:
|
|
71
|
+
|
|
72
|
+
*** Begin Patch
|
|
73
|
+
*** Update File: src/page.tsx
|
|
74
|
+
@@
|
|
75
|
+
return (
|
|
76
|
+
<div>
|
|
77
|
+
<button onClick={() => console.log("clicked")}>Click me</button>
|
|
78
|
+
+ <button onClick={() => console.log("cancel clicked")}>Cancel</button>
|
|
79
|
+
</div>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
*** End Patch`;function Q9($,f={}){let J=f.applyPatchTimeoutMs??30000,Q=f.cwd??process.cwd();return L$({name:"apply_patch",description:fG,inputSchema:f$(d8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=d$(l3,Z),X=typeof j==="string"?j:j.input;try{return{query:"apply_patch",result:await $$($({input:X},Q,W),J,`apply_patch timed out after ${J}ms`),success:!0}}catch(H){return{query:"apply_patch",result:"",error:`apply_patch failed: ${c$(H)}`,success:!1}}}})}function Z9($,f={}){let J=f.editorTimeoutMs??30000,Q=f.cwd??process.cwd();return L$({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:f$(c8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Z,W)=>{let j=d$(c8,Z),X=j.insert_line==null?"edit":"insert",H=r3(j);if(H)return{query:`${X}:${j.path}`,result:"",error:H,success:!1};try{let Y=await $$($(j,Q,W),J,`Editor operation timed out after ${J}ms`);return{query:`${X}:${j.path}`,result:Y,success:!0}}catch(Y){let V=c$(Y);return{query:`${X}:${j.path}`,result:"",error:`Editor operation failed: ${V}`,success:!1}}}})}function R1($,f={}){let J=f.skillsTimeoutMs??15000,Q='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.',Z=L$({name:"skills",description:Q,inputSchema:f$(l8),timeoutMs:J,retryable:!1,maxRetries:0,execute:async(W,j)=>{let X=d$(l8,W);return $$($(X.skill,X.args||void 0,j),J,`Skills operation timed out after ${J}ms`)}});return Object.defineProperty(Z,"description",{get(){let W=$.configuredSkills?.filter((j)=>!j.disabled).map((j)=>j.name);if(W&&W.length>0)return`${Q} Available skills: ${W.join(", ")}.`;return Q},enumerable:!0,configurable:!0}),Z}function W9($){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:f$(p8),retryable:!1,maxRetries:0,execute:async(f,J)=>{let Q=d$(p8,f);return $(Q.question,Q.options,J)}}}function j9($,f={}){let J=f.submitTimeoutMs??15000;return L$({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. Make sure to verify your output matches the expected format, data types, and file locations specified. Provide a summary of the investigation and confirm the issue is resolved.",inputSchema:f$(r8),lifecycle:{completesRun:!0},timeoutMs:J,retryable:!1,maxRetries:0,execute:async(Q,Z)=>{let W=d$(r8,Q);return $$($(W.summary,W.verified,Z),J,`submit_and_exit timed out after ${J}ms`)}})}function l$($){let{executors:f,enableReadFiles:J=!0,enableSearch:Q=!0,enableBash:Z=!0,enableWebFetch:W=!0,enableApplyPatch:j=!1,enableEditor:X=!0,enableSkills:H=!0,enableAskQuestion:Y=!0,enableSubmitAndExit:V=!1,...A}=$,B=[];if(J&&f.readFile)B.push(o5(f.readFile,A));if(Q&&f.search)B.push(e5(f.search,A));if(Z&&f.bash)if(process.platform==="win32")B.push(f9(f.bash,A));else B.push($9(f.bash,A));if(W&&f.webFetch)B.push(J9(f.webFetch,A));if(X&&f.editor)B.push(Z9(f.editor,A));else if(j&&f.applyPatch)B.push(Q9(f.applyPatch,A));if(H&&f.skills)B.push(R1(f.skills,A));let G=V?f.submit:void 0;if(Y&&f.askQuestion&&!G)B.push(W9(f.askQuestion));if(G)B.push(j9(G,A));return B}import*as k0 from"node:fs/promises";import*as I0 from"node:path";var v={BEGIN:"*** Begin Patch",END:"*** End Patch",ADD:"*** Add File: ",UPDATE:"*** Update File: ",DELETE:"*** Delete File: ",MOVE:"*** Move to: ",SECTION:"@@",END_FILE:"*** End of File"},s3=["%%bash","apply_patch","EOF","```"];class W0 extends Error{constructor($){super($);this.name="DiffError"}}function b0($){let f={"‐":"-","‑":"-","‒":"-","–":"-","—":"-","−":"-","“":'"',"”":'"',"„":'"',"«":'"',"»":'"',"‘":"'","’":"'","‛":"'"," ":" "," ":" "};return $.normalize("NFC").replace(/./gu,(J)=>f[J]??J).replace(/\\`/g,"`").replace(/\\'/g,"'").replace(/\\"/g,'"')}class X9{lines;currentFiles;patch={actions:{},warnings:[]};index=0;fuzz=0;currentPath;constructor($,f){this.lines=$;this.currentFiles=f}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($){if(!this.patch.warnings)this.patch.warnings=[];this.patch.warnings.push($)}skipBeginSentinel(){if(this.lines[this.index]?.startsWith(v.BEGIN))this.index++}hasMoreLines(){return this.index<this.lines.length}isEndMarker(){return this.lines[this.index]?.startsWith(v.END)??!1}parseNextAction(){let $=this.lines[this.index];if($?.startsWith(v.UPDATE)){this.parseUpdate($.substring(v.UPDATE.length).trim());return}if($?.startsWith(v.DELETE)){this.parseDelete($.substring(v.DELETE.length).trim());return}if($?.startsWith(v.ADD)){this.parseAdd($.substring(v.ADD.length).trim());return}throw new W0(`Unknown line while parsing: ${$}`)}checkDuplicate($,f){if($ in this.patch.actions)throw new W0(`Duplicate ${f} for file: ${$}`)}parseUpdate($){this.checkDuplicate($,"update"),this.currentPath=$,this.index++;let f=this.lines[this.index]?.startsWith(v.MOVE)?(this.lines[this.index++]??"").substring(v.MOVE.length).trim():void 0;if(!($ in this.currentFiles))throw new W0(`Update File Error: Missing File: ${$}`);let J=this.currentFiles[$]??"",Q=this.parseUpdateFile(J,$);Q.movePath=f,this.patch.actions[$]=Q,this.currentPath=void 0}parseUpdateFile($,f){let J={type:"update",chunks:[]},Q=$.split(`
|
|
83
|
+
`),Z=0,W=[v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(!W.some((j)=>this.lines[this.index]?.startsWith(j.trim()))){let j=this.lines[this.index],X=j?.startsWith("@@ ")?j.substring(3):void 0;if(X!==void 0||(j==="@@"?j:void 0)!==void 0)this.index++;else if(Z!==0)throw new W0(`Invalid Line:
|
|
84
|
+
${this.lines[this.index]}`);if(X?.trim()){let F=b0(X.trim());for(let P=Z;P<Q.length;P++){let U=Q[P];if(U&&(b0(U)===F||b0(U.trim())===F)){if(Z=P+1,b0(U.trim())===F&&b0(U)!==F)this.fuzz++;break}}}let[Y,V,A,B]=ZG(this.lines,this.index),[G,K,D]=QG(Q,Y,Z,B);if(G===-1){let F=Y.join(`
|
|
85
|
+
`);this.addWarning({path:this.currentPath||f,chunkIndex:J.chunks.length,message:`Could not find matching context (similarity: ${D.toFixed(2)}). Chunk skipped.`,context:F.length>200?`${F.substring(0,200)}...`:F}),this.index=A}else{this.fuzz+=K;for(let F of V)F.origIndex+=G,J.chunks.push(F);Z=G+Y.length,this.index=A}}return J}parseDelete($){if(this.checkDuplicate($,"delete"),!($ in this.currentFiles))throw new W0(`Delete File Error: Missing File: ${$}`);this.patch.actions[$]={type:"delete",chunks:[]},this.index++}parseAdd($){if(this.checkDuplicate($,"add"),$ in this.currentFiles)throw new W0(`Add File Error: File already exists: ${$}`);this.index++;let f=[],J=[v.END,v.UPDATE,v.DELETE,v.ADD];while(this.hasMoreLines()&&!J.some((Q)=>this.lines[this.index]?.startsWith(Q.trim()))){let Q=this.lines[this.index++];if(Q===void 0)break;if(!Q.startsWith("+"))throw new W0(`Invalid Add File line (missing '+'): ${Q}`);f.push(Q.substring(1))}this.patch.actions[$]={type:"add",newFile:f.join(`
|
|
86
|
+
`),chunks:[]}}}function t3($,f){let J=$.length>f.length?$:f,Q=$.length>f.length?f:$;if(J.length===0)return 1;let Z=JG(Q,J);return(J.length-Z)/J.length}function JG($,f){let J=f.length+1,Q=$.length+1,Z=Array(J*Q).fill(0),W=(X,H)=>Z[X*Q+H]??0,j=(X,H,Y)=>{Z[X*Q+H]=Y};for(let X=0;X<=f.length;X++)j(X,0,X);for(let X=0;X<=$.length;X++)j(0,X,X);for(let X=1;X<=f.length;X++)for(let H=1;H<=$.length;H++)if(f[X-1]===$[H-1])j(X,H,W(X-1,H-1));else j(X,H,1+Math.min(W(X-1,H-1),W(X,H-1),W(X-1,H)));return W(f.length,$.length)}function QG($,f,J,Q){if(f.length===0)return[J,0,1];let Z=0,W=(j)=>{let X=b0(f.join(`
|
|
87
|
+
`));for(let Y=j;Y<$.length;Y++){let V=b0($.slice(Y,Y+f.length).join(`
|
|
88
|
+
`));if(V===X)return[Y,0,1];let A=t3(V,X);if(A>Z)Z=A}for(let Y=j;Y<$.length;Y++){let V=b0($.slice(Y,Y+f.length).map((B)=>B.trimEnd()).join(`
|
|
89
|
+
`)),A=b0(f.map((B)=>B.trimEnd()).join(`
|
|
90
|
+
`));if(V===A)return[Y,1,1]}for(let Y=j;Y<$.length;Y++){let V=b0($.slice(Y,Y+f.length).map((B)=>B.trim()).join(`
|
|
91
|
+
`)),A=b0(f.map((B)=>B.trim()).join(`
|
|
92
|
+
`));if(V===A)return[Y,100,1]}let H=0.66;for(let Y=j;Y<$.length;Y++){let V=b0($.slice(Y,Y+f.length).join(`
|
|
93
|
+
`)),A=t3(V,X);if(A>=H)return[Y,1000,A];if(A>Z)Z=A}return[-1,0,Z]};if(Q){let[j,X,H]=W($.length-f.length);if(j!==-1)return[j,X,H];return[j,X,H]=W(J),[j,X+1e4,H]}return W(J)}function ZG($,f){let J=f,Q=[],Z=[],W=[],j=[],X="keep",H=["@@",v.END,v.UPDATE,v.DELETE,v.ADD,v.END_FILE];while(J<$.length){let Y=$[J];if(!Y||H.some((B)=>Y.startsWith(B.trim())))break;if(Y==="***")break;if(Y.startsWith("***"))throw new W0(`Invalid line: ${Y}`);J++;let V=X,A=Y;if(A[0]==="+")X="add";else if(A[0]==="-")X="delete";else if(A[0]===" ")X="keep";else X="keep",A=` ${A}`;if(A=A.slice(1),X==="keep"&&V!==X){if(W.length||Z.length)j.push({origIndex:Q.length-Z.length,delLines:Z,insLines:W});Z=[],W=[]}if(X==="delete")Z.push(A),Q.push(A);else if(X==="add")W.push(A);else Q.push(A)}if(W.length||Z.length)j.push({origIndex:Q.length-Z.length,delLines:Z,insLines:W});if(J<$.length&&$[J]===v.END_FILE)return J++,[Q,j,J,!0];return[Q,j,J,!1]}function H9($,f,J){let Q=I0.isAbsolute(f),Z=Q?I0.normalize(f):I0.resolve($,f);if(!J||Q)return Z;let W=I0.relative($,Z);if(W.startsWith("..")||I0.isAbsolute(W))throw new W0(`Path must stay within cwd: ${f}`);return Z}function WG($){return $.split(`
|
|
94
|
+
`).map((f)=>f.replace(/\r$/,""))}function o3($){if($.trim()==="")return!1;return s3.some((f)=>$.startsWith(f))}function jG($){let f=0,J=$.length;while(f<J&&o3($[f]??""))f++;while(J>f&&o3($[J-1]??""))J--;return $.slice(f,J)}function XG($){let f=WG($),J=f.findIndex((j)=>j.startsWith(v.BEGIN)),Q=-1;for(let j=f.length-1;j>=0;j--)if(f[j]?.startsWith(v.END)){Q=j;break}if(J!==-1||Q!==-1){if(J===-1||Q===-1||Q<J)throw new W0("Invalid patch text - incomplete sentinels. Try breaking it into smaller patches.");return{lines:f.slice(J,Q+1)}}let Z=jG(f);while(Z.length>0&&Z[0]==="")Z.shift();while(Z.length>0&&Z[Z.length-1]==="")Z.pop();return{lines:[v.BEGIN,...Z,v.END]}}function HG($,f){let J=new Set;for(let Q of $)for(let Z of f)if(Q.startsWith(Z)){J.add(Q.substring(Z.length).trim());break}return[...J]}function YG($,f,J){if(f.length===0)return $;let Q=$.split(`
|
|
95
|
+
`),Z=[],W=0;for(let j of f){if(j.origIndex>Q.length)throw new W0(`${J}: chunk.origIndex ${j.origIndex} > lines.length ${Q.length}`);if(W>j.origIndex)throw new W0(`${J}: currentIndex ${W} > chunk.origIndex ${j.origIndex}`);Z.push(...Q.slice(W,j.origIndex)),Z.push(...j.insLines),W=j.origIndex+j.delLines.length}return Z.push(...Q.slice(W)),Z.join(`
|
|
96
|
+
`)}async function VG($,f,J,Q){let Z=HG($,[v.UPDATE,v.DELETE]),W={};for(let j of Z){let X=H9(f,j,Q),H;try{H=await k0.readFile(X,J)}catch{throw new W0(`File not found: ${j}`)}W[j]=H.replace(/\r\n/g,`
|
|
97
|
+
`)}return W}function AG($,f){let J={};for(let[Q,Z]of Object.entries($.actions))switch(Z.type){case"delete":J[Q]={type:"delete",oldContent:f[Q]};break;case"add":if(Z.newFile===void 0)throw new W0("ADD action without file content");J[Q]={type:"add",newContent:Z.newFile};break;case"update":J[Q]={type:"update",oldContent:f[Q],newContent:YG(f[Q]??"",Z.chunks,Q),movePath:Z.movePath};break}return J}async function BG($,f,J,Q){let Z=[];for(let[W,j]of Object.entries($)){let X=H9(f,W,Q);switch(j.type){case"delete":await k0.rm(X,{force:!0}),Z.push(`${W}: [deleted]`);break;case"add":if(j.newContent===void 0)throw new W0(`Cannot create ${W} with no content`);await k0.mkdir(I0.dirname(X),{recursive:!0}),await k0.writeFile(X,j.newContent,{encoding:J}),Z.push(W);break;case"update":{if(j.newContent===void 0)throw new W0(`UPDATE change for ${W} has no new content`);if(j.movePath){let H=H9(f,j.movePath,Q);await k0.mkdir(I0.dirname(H),{recursive:!0}),await k0.writeFile(H,j.newContent,{encoding:J}),await k0.rm(X,{force:!0}),Z.push(`${W} -> ${j.movePath}`)}else await k0.writeFile(X,j.newContent,{encoding:J}),Z.push(W);break}}}return Z}function i8($={}){let{encoding:f="utf-8",restrictToCwd:J=!0}=$;return async(Q,Z,W)=>{let j=XG(Q.input),X=await VG(j.lines,Z,f,J),H=new X9(j.lines,X),{patch:Y,fuzz:V}=H.parse(),A=AG(Y,X),B=await BG(A,Z,f,J),G=["Successfully applied patch to the following files:"];for(let K of B)G.push(K);if(V>0)G.push(`Note: Patch applied with fuzz factor ${V}`);if(Y.warnings&&Y.warnings.length>0)for(let K of Y.warnings)G.push(`Warning (${K.path}): ${K.message}`);return G.join(`
|
|
98
|
+
`)}}import{spawn as e3}from"node:child_process";import{getDefaultShell as GG,getShellArgs as KG}from"@cline/shared";function FG($,f,J,Q,Z){return new Promise((W,j)=>{let X=process.platform==="win32",H=e3($.executable,$.args,{cwd:$.cwd,env:{...process.env,...$.env},stdio:["pipe","pipe","pipe"],detached:!X}),Y=H.pid,V="",A="",B=0,G=!1,K=!1,D=(R)=>{if(K)return;K=!0,R()},F=()=>{if(!Y)return;if(X){e3("taskkill",["/pid",String(Y),"/T","/F"],{stdio:"ignore",shell:!0,windowsHide:!0}).unref();return}try{process.kill(-Y,"SIGKILL")}catch{H.kill("SIGKILL")}},P=(R)=>{G=!0,F(),D(()=>j(R))},U=setTimeout(()=>P(Error(`Command timed out after ${J}ms`)),J),z=()=>P(Error("Command was aborted"));if(f.signal)f.signal.addEventListener("abort",z);let _=()=>{clearTimeout(U),f.signal?.removeEventListener("abort",z)};H.stdout?.on("data",(R)=>{if(B+=R.length,B<=Q)V+=R.toString()}),H.stderr?.on("data",(R)=>{if(B+=R.length,B<=Q)A+=R.toString()}),H.on("close",(R)=>{if(_(),G)return;let L=Z?V+(A?`
|
|
99
|
+
[stderr]
|
|
100
|
+
${A}`:""):V;if(B>Q)L+=`
|
|
101
|
+
|
|
102
|
+
[Output truncated: ${B} bytes total, showing first ${Q} bytes]`;if(R!==0)D(()=>j(Error(A||`Command exited with code ${R}`)));else D(()=>W(L))}),H.on("error",(R)=>{_(),D(()=>j(Error(`Failed to execute command: ${R.message}`)))})})}function n8($={}){let{shell:f=GG(process.platform),timeoutMs:J=30000,maxOutputBytes:Q=1e6,env:Z={},combineOutput:W=!0}=$;return(j,X,H)=>{let Y=typeof j!=="string";return FG({executable:Y?j.command:f,args:Y?j.args??[]:KG(f,j),cwd:X,env:Z},H,J,Q,W)}}import*as t0 from"node:fs/promises";import*as a0 from"node:path";function PG($,f,J){let Q=a0.isAbsolute(f),Z=Q?a0.normalize(f):a0.resolve($,f);if(!J)return Z;if(Q)return Z;let W=a0.relative($,Z);if(W.startsWith("..")||a0.isAbsolute(W))throw Error(`Path must stay within cwd: ${f}`);return Z}function UG($,f){if(f.length===0)return 0;return $.split(f).length-1}function DG($,f,J){let Q=$.split(`
|
|
103
|
+
`),Z=f.split(`
|
|
104
|
+
`),W=Math.max(Q.length,Z.length),j=["```diff"],X=0;for(let H=0;H<W;H++){if(X>=J){j.push("... diff truncated ...");break}let Y=Q[H],V=Z[H];if(Y===V)continue;let A=H+1;if(Y!==void 0)j.push(`-${A}: ${Y}`),X++;if(V!==void 0&&X<J)j.push(`+${A}: ${V}`),X++}return j.push("```"),j.join(`
|
|
105
|
+
`)}async function RG($,f,J){return await t0.mkdir(a0.dirname($),{recursive:!0}),await t0.writeFile($,f,{encoding:J}),`File created successfully at: ${$}`}async function LG($){try{return await t0.access($),!0}catch{return!1}}async function OG($,f,J,Q,Z){let W=await t0.readFile($,Q),j=UG(W,f);if(j===0)throw Error(`No replacement performed: text not found in ${$}.`);if(j>1)throw Error(`No replacement performed: multiple occurrences of text found in ${$}.`);let X=W.replace(f,J??"");await t0.writeFile($,X,{encoding:Q});let H=DG(W,X,Z);return`Edited ${$}
|
|
106
|
+
${H}`}async function zG($,f,J,Q){let W=(await t0.readFile($,Q)).split(`
|
|
107
|
+
`),j=W.length+1;if(f<1||f>j)throw Error(`Invalid insert_line: ${f}. insert_line must be a positive one-based boundary line in the range 1-${j}. Use ${j} to append at EOF.`);let X=f-1;return W.splice(X,0,...J.split(`
|
|
108
|
+
`)),await t0.writeFile($,W.join(`
|
|
109
|
+
`),{encoding:Q}),`Inserted content at line ${f} in ${$}.`}function a8($={}){let{encoding:f="utf-8",restrictToCwd:J=!0,maxDiffLines:Q=200}=$;return async(Z,W,j)=>{let X=PG(W,Z.path,J);if(Z.insert_line!=null)return zG(X,Z.insert_line,Z.new_text,f);if(!await LG(X))return RG(X,Z.new_text,f);if(Z.old_text==null)throw Error("Parameter `old_text` is required when editing an existing file without `insert_line`");return OG(X,Z.old_text,Z.new_text,f,Q)}}import*as t8 from"node:fs/promises";import*as p$ from"node:path";import{resolveExistingFilePath as _G}from"@cline/shared/storage";var NG=new Map([[".gif","image/gif"],[".png","image/png"],[".jpg","image/jpeg"],[".jpeg","image/jpeg"],[".webp","image/webp"]]),TG={maxFileSizeBytes:1e7,encoding:"utf-8",includeLineNumbers:!0};function s8($={}){let{maxFileSizeBytes:f,encoding:J,includeLineNumbers:Q}={...TG,...$};return async(Z,W)=>{let{path:j,start_line:X,end_line:H}=Z,Y=p$.isAbsolute(j)?p$.normalize(j):p$.resolve(process.cwd(),j),V=_G(Y)??Y,A=p$.extname(V).toLowerCase(),B=NG.get(A),G=await t8.stat(V);if(!G.isFile())throw Error(`Path is not a file: ${V}`);if(G.size>f)throw Error(`File too large: ${G.size} bytes (max: ${f} bytes). Consider reading specific sections or using a different approach.`);if(B){if(W.metadata?.modelSupportsImages!==!0)throw Error("Current model does not support image input");let z=await t8.readFile(V);return[{type:"text",text:"Successfully read image"},{type:"image",data:z.toString("base64"),mediaType:B}]}let D=(await t8.readFile(V,J)).split(`
|
|
110
|
+
`),F=Math.max((X??1)-1,0),P=Math.min(H??D.length,D.length),U=D.slice(F,P);if(Q){let z=String(D.length).length;return U.map((_,R)=>`${String(F+R+1).padStart(z," ")} | ${_}`).join(`
|
|
111
|
+
`)}return U.join(`
|
|
112
|
+
`)}}import{spawn as jW}from"node:child_process";import*as XW from"node:fs/promises";import*as Gf from"node:path";var WW={};y(WW,{prewarmFileIndex:()=>Bf,getFileIndex:()=>O$,enrichPromptWithMentions:()=>P2});import{spawn as MG}from"node:child_process";import{readdir as qG}from"node:fs/promises";import V9 from"node:path";import{isMainThread as JW,parentPort as $W,Worker as yG}from"node:worker_threads";var wG=15000,SG=600000,CG=1000,hG=new Set([".git","node_modules","dist","build",".next","coverage",".turbo",".cache","target","out"]);function fW($){let f=$&&typeof $==="object"&&"code"in $?String($.code??""):"";return f==="EACCES"||f==="EPERM"||f==="ENOENT"}var F2=new Map;function EG($){if(F2.size<=1)return;for(let[f,J]of F2.entries()){if(J.pending)continue;if($-J.lastAccessedAt>SG)F2.delete(f)}}function bG($,f){return V9.relative($,f).split(V9.sep).join("/")}async function kG($){let J=(await new Promise((Q,Z)=>{let W=MG("rg",["--files","--hidden","-g","!.git"],{cwd:$,stdio:["ignore","pipe","pipe"]}),j="",X="";W.stdout.on("data",(H)=>{j+=H.toString()}),W.stderr.on("data",(H)=>{X+=H.toString()}),W.on("error",Z),W.on("close",(H)=>{if(H===0){Q(j);return}Z(Error(X||`rg exited with code ${H}`))})})).split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>Q.replace(/\\/g,"/"));return new Set(J)}async function QW($,f,J){let Q;try{Q=await qG(f,{withFileTypes:!0})}catch(Z){if(fW(Z))return;throw Z}for(let Z of Q){let W=V9.join(f,Z.name);if(Z.isDirectory()){if(hG.has(Z.name))continue;try{await QW($,W,J)}catch(j){if(fW(j))continue;throw j}continue}if(Z.isFile())J.add(bG($,W))}}async function IG($){let f=new Set;return await QW($,$,f),f}async function Af($){try{return await kG($)}catch{return IG($)}}function xG(){if(JW||!$W)return;let $=$W;$.on("message",(f)=>{if(f.type!=="index")return;Af(f.cwd).then((J)=>{let Q={type:"indexResult",requestId:f.requestId,files:Array.from(J)};$.postMessage(Q)}).catch((J)=>{let Q={type:"indexResult",requestId:f.requestId,error:J instanceof Error?J.message:"Failed to build file index"};$.postMessage(Q)})})}class ZW{worker=new yG(new URL(import.meta.url));nextRequestId=0;pending=new Map;constructor(){this.worker.unref(),this.worker.on("message",($)=>{if($.type!=="indexResult")return;let f=this.pending.get($.requestId);if(!f)return;if(this.pending.delete($.requestId),$.error){f.reject(Error($.error));return}f.resolve($.files??[])}),this.worker.on("error",($)=>{this.flushPending($)}),this.worker.on("exit",($)=>{if($!==0)this.flushPending(Error(`File index worker exited with code ${$}`))})}requestIndex($){let f=++this.nextRequestId,J=new Promise((Z,W)=>{let j=setTimeout(()=>{this.pending.delete(f),Z(null)},CG);j.unref(),this.pending.set(f,{resolve:(X)=>{clearTimeout(j),Z(X)},reject:(X)=>{clearTimeout(j),W(X)}})}),Q={type:"index",requestId:f,cwd:$};return this.worker.postMessage(Q),J}flushPending($){for(let[f,J]of this.pending.entries())J.reject($),this.pending.delete(f)}}xG();var Y9;function mG(){if(!JW)return null;if(Y9===void 0)Y9=new ZW;return Y9}async function gG($){let f=mG();if(!f)return Af($);try{let J=await f.requestIndex($);if(J===null)return Af($);return new Set(J)}catch{return Af($)}}async function O$($,f={}){let J=f.ttlMs??wG,Q=Date.now();EG(Q);let Z=F2.get($);if(Z&&J>0&&Q-Z.lastBuiltAt<=J&&Z.files.size>0)return Z.lastAccessedAt=Q,Z.files;if(Z?.pending)return Z.lastAccessedAt=Q,Z.pending;let W=gG($).then((j)=>{return F2.set($,{files:j,lastBuiltAt:Date.now(),lastAccessedAt:Date.now(),pending:null}),j});return F2.set($,{files:Z?.files??new Set,lastBuiltAt:Z?.lastBuiltAt??0,lastAccessedAt:Q,pending:W}),W}async function Bf($,f={}){await O$($,{...f,ttlMs:0})}import{stat as vG}from"node:fs/promises";import L1 from"node:path";var uG=/[),.:;!?`'"]+$/,cG=/^[(`'"]+/;function dG($){let f=$.matchAll(/(^|[\s])@([^\s]+)/g),J=[];for(let Q of f){let Z=(Q[2]??"").trim();if(Z.length===0)continue;let W=Z.replace(cG,"").replace(uG,"");if(W.length===0||W.includes("@"))continue;J.push(W)}return Array.from(new Set(J))}function lG($,f){let J=$.replace(/\\/g,"/"),Q=L1.isAbsolute(J)?L1.resolve(J):L1.resolve(f,J),Z=L1.relative(f,Q);if(Z.startsWith("..")||L1.isAbsolute(Z))return;return Z.split(L1.sep).join("/")}async function P2($,f,J={}){let Q=dG($);if(Q.length===0)return{prompt:$,mentions:[],matchedFiles:[],ignoredMentions:[]};let{maxFiles:Z,maxFileBytes:W,maxTotalBytes:j}=J,X=await O$(f,{ttlMs:J.ttlMs}),H=[],Y=[],V=[],A=0;for(let B of Q){if(Z&&V.length>=Z){Y.push(B);continue}let G=lG(B,f);if(!G||!X.has(G)){Y.push(B);continue}if(!W||!j){H.push(G);continue}let K=L1.join(f,G);try{if(!(await vG(K)).isFile()){Y.push(B);continue}let F=A+W;if(F>j){Y.push(B);continue}A=F,H.push(G)}catch{Y.push(B)}}return{prompt:$,mentions:Q,matchedFiles:H,ignoredMentions:Y}}var pG=["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"],rG=["node_modules",".git","dist","build",".next","coverage","__pycache__",".venv","venv",".cache",".turbo",".output","out","target","bin","obj"],O1=null;function iG(){if(O1!==null)return Promise.resolve(O1);return new Promise(($)=>{let f=jW("rg",["--version"],{stdio:["ignore","pipe","pipe"]});f.on("close",(J)=>{O1=J===0,$(O1)}),f.on("error",()=>{O1=!1,$(!1)}),setTimeout(()=>{if(!f.killed)f.kill("SIGTERM");if(O1===null)O1=!1,$(!1)},1000)})}function nG($,f,J,Q,Z=5000,W){return new Promise((j)=>{let X=jW("rg",["--json",`--context=${Q}`,"--max-count=1","-i",$],{cwd:f,stdio:["ignore","pipe","pipe"]}),H="",Y=!1,V=()=>{if(!X.killed)X.kill("SIGTERM")},A=setTimeout(()=>{if(!Y)Y=!0,V(),j(null)},Z),B=(G)=>{if(!Y)Y=!0,clearTimeout(A),V(),j(G)};if(W?.aborted){V(),j(null);return}W?.addEventListener("abort",()=>{B(null)}),X.stdout.on("data",(G)=>{H+=G.toString()}),X.stderr.on("data",()=>{}),X.on("close",(G)=>{if(G===0||G===1){try{let K=[],D=H.split(`
|
|
113
|
+
`).filter((F)=>F.trim());for(let F of D){if(K.length>=J)break;let P=JSON.parse(F);if(P.type==="match"){let U=P.data,z=[];if(P.data.submatches&&P.data.submatches.length>0){let _=P.data.submatches[0];K.push({file:U.path.text,line:U.line_number,column:(_?.start??0)+1,match:_?.match?.text??"",context:z})}}else if(P.type==="context"&&K.length>0){let U=K[K.length-1],z=P.data.line_number===U.line?">":" ";U.context.push(`${z} ${P.data.line_number}: ${P.data.lines?.text??P.data.line?.text??""}`)}}B(K.length>0?K:null)}catch{B(null)}return}B(null)}),X.on("error",()=>{B(null)})})}function aG($,f,J,Q){let Z=$.split("/"),W=Z[Z.length-1]??"";if(Z.length-1>Q)return!1;for(let H=0;H<Z.length-1;H++)if(f.has(Z[H]??""))return!1;let X=Gf.posix.extname(W).slice(1).toLowerCase();return J.has(X)||!X&&!W.startsWith(".")}function o8($={}){let{includeExtensions:f=pG,excludeDirs:J=rG,maxResults:Q=100,contextLines:Z=2,maxDepth:W=20}=$,j=new Set(J),X=new Set(f.map((H)=>H.toLowerCase()));return async(H,Y,V)=>{if(V.signal?.aborted)throw Error("Search operation aborted");let A=await iG(),B=null;if(A)B=await nG(H,Y,Q,Z,5000,V.signal);if(B){let U=[`Found ${B.length} result${B.length===1?"":"s"} for pattern: ${H}`,""];for(let z of B)U.push(`${z.file}:${z.line}:${z.column}`),U.push(...z.context),U.push("");if(B.length>=Q)U.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return U.join(`
|
|
114
|
+
`)}let G;try{G=new RegExp(H,"gim")}catch(U){throw Error(`Invalid regex pattern: ${H}. ${U instanceof Error?U.message:""}`)}let K=[],D=0,F=await O$(Y);for(let U of F){if(V.signal?.aborted)throw Error("Search operation aborted");if(!aG(U,j,X,W))continue;if(K.length>=Q)break;D++;let z=Gf.join(Y,U);try{let R=(await XW.readFile(z,"utf-8")).split(`
|
|
115
|
+
`);for(let L=0;L<R.length;L++){let N=R[L];G.lastIndex=0;let w=G.exec(N);while(w!==null){if(K.length>=Q)break;let Q0=Math.max(0,L-Z),Z0=Math.min(R.length-1,L+Z),o=[];for(let d=Q0;d<=Z0;d++){let R0=d===L?">":" ";o.push(`${R0} ${d+1}: ${R[d]}`)}if(K.push({file:U,line:L+1,column:w.index+1,match:w[0],context:o}),w.index===G.lastIndex)G.lastIndex++;w=G.exec(N)}}}catch{}}if(K.length===0)return`No results found for pattern: ${H}
|
|
116
|
+
Searched ${D} files.`;let P=[`Found ${K.length} result${K.length===1?"":"s"} for pattern: ${H}`,`Searched ${D} files.`,""];for(let U of K)P.push(`${U.file}:${U.line}:${U.column}`),P.push(...U.context),P.push("");if(K.length>=Q)P.push(`(Showing first ${Q} results. Refine your search for more specific results.)`);return P.join(`
|
|
117
|
+
`)}}function tG($){return $.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,`
|
|
118
|
+
`).replace(/<[^>]+>/g," ").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/&#(\d+);/g,(f,J)=>String.fromCharCode(parseInt(J,10))).replace(/\s+/g," ").replace(/\n\s+/g,`
|
|
119
|
+
`).replace(/\n{3,}/g,`
|
|
120
|
+
|
|
121
|
+
`).trim()}function e8($={}){let{timeoutMs:f=30000,maxResponseBytes:J=5000000,userAgent:Q="Mozilla/5.0 (compatible; AgentBot/1.0)",headers:Z={},followRedirects:W=!0}=$;return async(j,X,H)=>{let Y;try{Y=new URL(j)}catch{throw Error(`Invalid URL: ${j}`)}if(!["http:","https:"].includes(Y.protocol))throw Error(`Invalid protocol: ${Y.protocol}. Only http and https are supported.`);let V=new AbortController,A=setTimeout(()=>V.abort(),f),B;if(H.signal)B=()=>V.abort(),H.signal.addEventListener("abort",B);try{let G=await fetch(j,{method:"GET",headers:{"User-Agent":Q,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",...Z},redirect:W?"follow":"manual",signal:V.signal});if(clearTimeout(A),!W&&G.status>=300&&G.status<400)return`Redirect to: ${G.headers.get("location")}`;if(!G.ok)throw Error(`HTTP ${G.status}: ${G.statusText}`);let K=G.headers.get("content-type")||"",D=G.body?.getReader();if(!D)throw Error("Failed to read response body");let F=[],P=0;while(!0){let{done:N,value:w}=await D.read();if(N)break;if(P+=w.length,P>J)throw D.cancel(),Error(`Response too large: exceeded ${J} bytes`);F.push(w)}let U=new Uint8Array(P),z=0;for(let N of F)U.set(N,z),z+=N.length;let _=new TextDecoder("utf-8").decode(U),R;if(K.includes("text/html")||K.includes("application/xhtml"))R=tG(_);else if(K.includes("application/json"))try{let N=JSON.parse(_);R=JSON.stringify(N,null,2)}catch{R=_}else R=_;let L=[`URL: ${j}`,`Content-Type: ${K}`,`Size: ${P} bytes`,"","--- Content ---",R.slice(0,50000)];if(R.length>50000)L.push(`
|
|
122
|
+
[Content truncated: showing first 50000 of ${R.length} characters]`);return L.push("","--- Analysis Request ---",`Prompt: ${X}`),L.join(`
|
|
123
|
+
`)}catch(G){if(clearTimeout(A),G instanceof Error){if(G.name==="AbortError")throw Error(`Request timed out after ${f}ms`);throw G}throw Error(`Fetch failed: ${String(G)}`)}finally{if(H.signal&&B)H.signal.removeEventListener("abort",B)}}}function U2($={}){return{readFile:s8($.fileRead),search:o8($.search),bash:n8($.bash),webFetch:e8($.webFetch),applyPatch:i8($.applyPatch),editor:a8($.editor)}}var sG={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"},D2=[{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 HW($,f){if(!f||f.length===0)return!0;let J=$.toLowerCase();return f.some((Q)=>J.includes(Q.toLowerCase()))}function oG($,f,J,Q){if($.mode&&$.mode!=="any"&&$.mode!==Q)return!1;return HW(f,$.providerIdIncludes)&&HW(J,$.modelIdIncludes)}function R2($,f,J,Q){if(!Q||Q.length===0)return{};let Z=new Map;for(let j of Q){if(!oG(j,$,f,J))continue;for(let X of j.disableTools??[])Z.set(X,!1);for(let X of j.enableTools??[])Z.set(X,!0)}let W={};for(let[j,X]of Z.entries())W[sG[j]]=X;return W}var x0={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 z$($){if($.mode==="plan")return"plan";if($.mode==="yolo")return"yolo";return"act"}function Kf($){if($!=="yolo")return{};let f={enabled:!0,autoApprove:!0},J={"*":f};for(let Q of g$)J[Q]=f;return J}function Ff($,f){let J=x0[$],{enableSpawnAgent:Q,enableAgentTeams:Z,...W}=J;return l$({...W,...f})}import{createTool as iK,zodToJsonSchema as nK}from"@cline/shared";import{z as L9}from"zod";import{createAgentRuntime as mK}from"@cline/agents";import{createContributionRegistry as gK}from"@cline/shared";import{createGateway as eG,MODEL_COLLECTIONS_BY_PROVIDER_ID as $K}from"@cline/llms";function fK($){let f=Object.fromEntries(Object.entries($).filter(([,J])=>J!==void 0));return Object.keys(f).length>0?f:void 0}function JK($){let f={region:$.region,apiLine:$.apiLine,openRouterProviderSorting:$.openRouterProviderSorting,modelCatalog:$.modelCatalog};if($.providerId==="bedrock")Object.assign(f,{authentication:$.aws?.authentication,profile:$.aws?.profile,accessKeyId:$.aws?.accessKey,secretAccessKey:$.aws?.secretKey,sessionToken:$.aws?.sessionToken,usePromptCache:$.aws?.usePromptCache,useCrossRegionInference:$.useCrossRegionInference,useGlobalInference:$.useGlobalInference,endpoint:$.aws?.endpoint,customModelBaseId:$.aws?.customModelBaseId});if($.providerId==="vertex"){let J=$.gcp?.region??$.region;Object.assign(f,{project:$.gcp?.projectId,projectId:$.gcp?.projectId,location:J,region:J})}return fK(f)}function A9($){let f=$.providerConfig;if(f?.knownModels)return f.knownModels;if($.knownModels)return $.knownModels;return $K[$.providerId]?.models??void 0}function QK($){if(!$?.length)return;let f=new Set;for(let J of $)switch(J){case"tools":case"reasoning":case"prompt-cache":case"images":f.add(J);break;case"structured_output":f.add("structured-output");break;default:f.add("text")}return f.add("text"),[...f]}function ZK($,f){return{id:$,name:f.name??$,description:f.description,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxOutputTokens:f.maxTokens,capabilities:QK(f.capabilities),metadata:{family:f.family,pricing:f.pricing,status:f.status,releaseDate:f.releaseDate}}}function YW($,f,J){let Q=$.providerConfig,Z=Q?.providerId===$.providerId?Q:void 0,W={...Z??{},providerId:$.providerId,modelId:$.modelId,apiKey:$.apiKey??Z?.apiKey,baseUrl:$.baseUrl??Z?.baseUrl,headers:$.headers??Z?.headers,knownModels:A9($),maxOutputTokens:$.maxTokensPerTurn,reasoningEffort:$.reasoningEffort,thinkingBudgetTokens:$.thinkingBudgetTokens,thinking:$.thinking,logger:f,extensionContext:$.extensionContext};return eG({providerConfigs:[{providerId:W.providerId,apiKey:W.apiKey,baseUrl:W.baseUrl,headers:W.headers,options:JK(W),models:W.knownModels?Object.entries(W.knownModels).map(([j,X])=>ZK(j,X)):void 0}],logger:f,telemetry:J??$.telemetry??$.extensionContext?.telemetry}).createAgentModel({providerId:W.providerId,modelId:W.modelId},{maxTokens:W.maxOutputTokens})}import{normalizeUserInput as VW}from"@cline/shared";var WK=50000,jK=6000000,AW=8000,XK=new Set(["read","read_files","search","search_codebase","bash","run_commands"]),HK=new Set(["read","read_files"]),z1="[outdated - see the latest file content]",BW="Tool execution was interrupted before a result was produced.",YK=($)=>`
|
|
124
|
+
|
|
125
|
+
...[truncated ${$} chars]...
|
|
126
|
+
|
|
127
|
+
`,VK=($)=>`
|
|
128
|
+
|
|
129
|
+
...[truncated ${$} chars to fit provider request budget]...
|
|
130
|
+
|
|
131
|
+
`;class G9{maxToolResultChars;targetToolNames;maxTotalTextBytes;indexedMessageCount=0;indexedTailRef;toolNameByIdCache=new Map;readLocatorsByToolUseIdCache=new Map;latestReadToolUseByLocatorCache=new Map;latestFullContentOwnerByPathCache=new Map;readResultLocatorCache=new WeakMap;constructor($=WK,f=XK,J=jK){this.maxToolResultChars=$;this.targetToolNames=f;this.maxTotalTextBytes=J}buildForApi($){this.reindex($);let J=this.addMissingToolResults($).map((Q)=>{if(!Array.isArray(Q.content)){if(Q.role==="user"&&typeof Q.content==="string"){let j=VW(Q.content);if(j!==Q.content)return{...Q,content:j}}return Q}let Z=!1,W=Q.content.map((j)=>{let X=this.transformBlock(j,Q.role);if(X!==j)Z=!0;return X});return Z?{...Q,content:W}:Q});return this.truncateToTotalTextBudget(J)}transformBlock($,f){if(f==="user"&&$.type==="text"&&typeof $.text==="string"){let Z=VW($.text);if(Z!==$.text)return{...$,text:Z};return $}if($.type==="file"){let Z=this.truncateMiddle($.content);return Z===$.content?$:{...$,content:Z}}if($.type!=="tool_result")return $;let J=this.toolNameByIdCache.get($.tool_use_id),Q=$.content;if(this.isReadTool(J)&&$.is_error!==!0){let Z=this.getReadLocators($);if(Z.length>0){let W=Z.filter((j)=>this.isOutdatedReadLocator(j,$.tool_use_id));if(W.length>0)Q=this.replaceOutdatedReadContent(Q,W)}}if(this.shouldTruncateTool(J))Q=this.truncateToolResultContent(Q);return Q===$.content?$:{...$,content:Q}}reindex($){let f=this.indexedMessageCount===0||$.length>=this.indexedMessageCount&&$[this.indexedMessageCount-1]===this.indexedTailRef;if($.length<this.indexedMessageCount||!f)this.resetIndexes();for(let J=this.indexedMessageCount;J<$.length;J++){let Q=$[J];if(!Array.isArray(Q.content))continue;for(let Z=0;Z<Q.content.length;Z++){let W=Q.content[Z];if(W.type==="file")this.latestFullContentOwnerByPathCache.set(W.path,`file:${J}:${Z}`);else if(W.type==="tool_use"){let j=W.name.toLowerCase();if(this.toolNameByIdCache.set(W.id,j),this.isReadTool(j)){let X=this.extractLocatorsFromReadToolInput(W.input);if(X.length>0)this.readLocatorsByToolUseIdCache.set(W.id,X)}}else if(W.type==="tool_result"){let j=this.toolNameByIdCache.get(W.tool_use_id);if(!this.isReadTool(j)||W.is_error===!0)continue;let X=this.getReadLocators(W);for(let H of X)if(this.latestReadToolUseByLocatorCache.set(this.toReadLocatorKey(H),W.tool_use_id),this.isFullFileRead(H))this.latestFullContentOwnerByPathCache.set(H.path,W.tool_use_id)}}}this.indexedMessageCount=$.length,this.indexedTailRef=$.length>0?$[$.length-1]:void 0}addMissingToolResults($){let f=this.collectToolResultIds($),J=[],Q=new Map,Z=!1,W=()=>{if(Q.size===0)return;j(this.createMissingToolResultMessage(Q)),Q.clear(),Z=!0},j=(X)=>{let H=J.at(-1);if(this.shouldMergeUserAfterToolResults(H,X)){J[J.length-1]={...H,content:[...H.content,...this.contentBlocksForUserMerge(X.content)]},Z=!0;return}J.push(X)};for(let X of $){if(this.isToolResultOnlyMessage(X)){if(j(this.appendMissingToolResults(X,Q)),Q.size>0)Q.clear(),Z=!0;continue}if(Array.isArray(X.content)){let H=X.content.filter((V)=>V.type==="tool_result"),Y=X.content.filter((V)=>V.type!=="tool_result");if(H.length>0){let V=this.appendMissingToolResults({...X,role:"user",content:H},Q);if(j(V),Q.size>0)Q.clear();Z=!0}if(Y.length>0||H.length===0){if(H.length===0)W();let V=H.length>0?{...X,content:Y}:X;if(j(V),V.role==="assistant")this.trackMissingToolCalls(V,f,Q)}continue}W(),j(X)}return W(),Z?J:$}appendMissingToolResults($,f){if(f.size===0||!Array.isArray($.content))return $;return{...$,role:"user",content:[...$.content,...this.createMissingToolResultBlocks(f)]}}shouldMergeUserAfterToolResults($,f){return $?.role==="user"&&f.role==="user"&&this.isToolResultOnlyMessage($)&&this.contentBlocksForUserMerge(f.content).length>0}contentBlocksForUserMerge($){return typeof $==="string"?$.length>0?[{type:"text",text:$}]:[]:$}collectToolResultIds($){let f=new Set;for(let J of $){if(!Array.isArray(J.content))continue;for(let Q of J.content)if(Q.type==="tool_result")f.add(Q.tool_use_id)}return f}isToolResultOnlyMessage($){return $.role==="user"&&Array.isArray($.content)&&$.content.length>0&&$.content.every((f)=>f.type==="tool_result")}trackMissingToolCalls($,f,J){if(!Array.isArray($.content))return;for(let Q of $.content){if(Q.type!=="tool_use"||f.has(Q.id))continue;J.set(Q.id,Q.name)}}createMissingToolResultMessage($){return{role:"user",content:this.createMissingToolResultBlocks($)}}createMissingToolResultBlocks($){return Array.from($,([f,J])=>({type:"tool_result",tool_use_id:f,name:J,content:[{type:"text",text:this.formatMissingToolResultText(J)}],is_error:!0}))}formatMissingToolResultText($){return $?`${BW} Tool: ${$}.`:BW}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($){let f=$,J=this.readResultLocatorCache.get(f);if(J===void 0)J=this.extractReadLocatorsFromToolResultContent($.content),this.readResultLocatorCache.set(f,J);if(J.length>0)return J;return this.readLocatorsByToolUseIdCache.get($.tool_use_id)??[]}extractLocatorsFromReadToolInput($){if(!$||typeof $!=="object")return[];let f=$,J=[],Q=this.extractLocatorFromReadRequest(f);if(Q)J.push(Q);if(Array.isArray(f.files))for(let Z of f.files){let W=this.extractLocatorFromReadRequest(Z);if(W)J.push(W)}if(Array.isArray(f.file_paths)){for(let Z of f.file_paths)if(typeof Z==="string"&&Z.length>0)J.push({path:Z,startLine:null,endLine:null})}return this.dedupeReadLocators(J)}extractReadLocatorsFromToolResultContent($){if(typeof $==="string")return this.tryParseReadLocators($);for(let f of $){if(f.type!=="text")continue;let J=this.tryParseReadLocators(f.text);if(J.length>0)return J}return[]}tryParseReadLocators($){try{return this.extractLocatorsFromParsedReadResult(JSON.parse($))}catch{return[]}}extractLocatorsFromParsedReadResult($){if(Array.isArray($)){let J=[];for(let Q of $){let Z=this.extractLocatorFromResultEntry(Q);if(Z)J.push(Z)}return this.dedupeReadLocators(J)}let f=this.extractLocatorFromResultEntry($);return f?[f]:[]}extractLocatorFromReadRequest($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(!J)return;return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)}}extractLocatorFromResultEntry($){if(!$||typeof $!=="object")return;let f=$,J=this.extractPath(f);if(J)return{path:J,startLine:this.extractLineNumber(f.start_line),endLine:this.extractLineNumber(f.end_line)};if(typeof f.query==="string"&&f.query.length>0)return this.parseReadQuery(f.query);return}extractPath($){let f=[$.path,$.file_path,$.filePath];for(let J of f)if(typeof J==="string"&&J.length>0)return J;return}extractLineNumber($){return typeof $==="number"&&Number.isInteger($)?$:null}parseReadQuery($){let f=/^(.*):(\d+)-(EOF|\d+)$/.exec($);if(!f)return{path:$,startLine:null,endLine:null};return{path:f[1],startLine:Number(f[2]),endLine:f[3]==="EOF"?null:Number(f[3])}}dedupeReadLocators($){let f=new Map;for(let J of $)f.set(this.toReadLocatorKey(J),J);return Array.from(f.values())}toReadLocatorKey($){if(this.isFullFileRead($))return $.path;return`${$.path}:${$.startLine??1}-${$.endLine??"EOF"}`}isFullFileRead($){return $.startLine==null&&$.endLine==null}isOutdatedReadLocator($,f){let J=this.latestFullContentOwnerByPathCache.get($.path);if(J&&J!==f)return!0;return this.latestReadToolUseByLocatorCache.get(this.toReadLocatorKey($))!==f}replaceOutdatedReadContent($,f){let J=new Set(f.map((W)=>this.toReadLocatorKey(W))),Q=new Set(f.map((W)=>W.path));if(typeof $==="string")return this.replaceOutdatedInString($,J)??z1;let Z=0;for(let W of $)if(W.type==="text")Z+=this.countOutdatedImageEntries(W.text,J);return $.map((W)=>{if(W.type==="file"){if(!Q.has(W.path))return W;return{...W,content:z1}}if(W.type==="image"){if(Z===0)return W;return Z-=1,{type:"text",text:z1}}if(W.type!=="text")return W;let j=this.replaceOutdatedInString(W.text,J);if(j===null)return{...W,text:z1};return j===W.text?W:{...W,text:j}})}countOutdatedImageEntries($,f){let J;try{J=JSON.parse($)}catch{return 0}let Q=Array.isArray(J)?J:[J],Z=0;for(let W of Q){if(!W||typeof W!=="object")continue;let j=W,X=this.extractLocatorFromResultEntry(j);if(!X)continue;if(!f.has(this.toReadLocatorKey(X)))continue;if(j.result==="Successfully read image"||j.content==="Successfully read image")Z+=1}return Z}replaceOutdatedInString($,f){let J;try{J=JSON.parse($)}catch{return null}let Q=Array.isArray(J)?J.map((Z)=>this.replaceOutdatedReadEntry(Z,f)):this.replaceOutdatedReadEntry(J,f);return JSON.stringify(Q)}replaceOutdatedReadEntry($,f){if(!$||typeof $!=="object")return $;let J=this.extractLocatorFromResultEntry($);if(!J||!f.has(this.toReadLocatorKey(J)))return $;let Q={...$};if(typeof Q.result==="string")Q.result=z1;else if(typeof Q.content==="string")Q.content=z1;else Q.result=z1;return Q}isReadTool($){return!!$&&HK.has($)}shouldTruncateTool($){return!!$&&this.targetToolNames.has($)}truncateToolResultContent($){if(typeof $==="string")return this.truncateMiddle($);return $.map((f)=>{if(f.type==="file"){let Q=this.truncateMiddle(f.content);return Q===f.content?f:{...f,content:Q}}if(f.type!=="text")return f;let J=this.truncateMiddle(f.text);return J===f.text?f:{...f,text:J}})}truncateMiddle($){return B9($,this.maxToolResultChars,YK)}truncateToTotalTextBudget($){if(this.maxTotalTextBytes<=0)return $;let f=this.countMessageTextBytes($);if(f<=this.maxTotalTextBytes)return $;let J=$.map((Z)=>{if(!Array.isArray(Z.content))return Z;return{...Z,content:Z.content.map((W)=>BK(W))}}),Q=this.collectTruncationCandidates(J);for(let Z of Q){if(f<=this.maxTotalTextBytes)break;let W=Z.byteLength;if(W<=AW)continue;let j=f-this.maxTotalTextBytes,X=Math.max(AW,W-j),H=AK(Z.get(),X,VK);Z.set(H),f-=W-M0(H)}return J}countMessageTextBytes($){let f=0;for(let J of $){if(typeof J.content==="string"){f+=M0(J.content);continue}for(let Q of J.content)if(Q.type==="text")f+=M0(Q.text);else if(Q.type==="thinking")f+=M0(Q.thinking);else if(Q.type==="file")f+=M0(Q.content);else if(Q.type==="tool_result"){if(typeof Q.content==="string")f+=M0(Q.content);else for(let Z of Q.content)if(Z.type==="text")f+=M0(Z.text);else if(Z.type==="file")f+=M0(Z.content)}}return f}collectTruncationCandidates($){let f=[];for(let J of $){if(!Array.isArray(J.content))continue;for(let Q of J.content){if(Q.type!=="tool_result")continue;let Z=this.toolNameByIdCache.get(Q.tool_use_id);if(!this.shouldTruncateTool(Z))continue;if(typeof Q.content==="string"){f.push({byteLength:M0(Q.content),get:()=>Q.content,set:(W)=>{Q.content=W}});continue}for(let W of Q.content)if(W.type==="text")f.push({byteLength:M0(W.text),get:()=>W.text,set:(j)=>{W.text=j}});else if(W.type==="file")f.push({byteLength:M0(W.content),get:()=>W.content,set:(j)=>{W.content=j}})}}return f.sort((J,Q)=>Q.byteLength-J.byteLength)}}function M0($){return Buffer.byteLength($,"utf8")}function B9($,f,J){if($.length<=f)return $;let Q=J($.length-f),Z=Math.max(0,Math.floor((f-Q.length)/2)),W=Math.max(0,$.length-Z*2),j=J(W),X=Math.max(0,Math.floor((f-j.length)/2)),H=$.slice(0,X),Y=X>0?$.slice(-X):"";return`${H}${j}${Y}`}function AK($,f,J){if(M0($)<=f)return $;let Q=0,Z=$.length,W=B9($,0,J);while(Q<=Z){let j=Q+Z>>>1,X=B9($,j,J);if(M0(X)<=f)W=X,Q=j+1;else Z=j-1}return W}function BK($){if($.type!=="tool_result"||typeof $.content==="string")return{...$};return{...$,content:$.content.map((f)=>({...f}))}}function K9(){return`conv_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}class F9{messages=[];conversationId=K9();sessionStarted=!1;constructor($){if(($?.length??0)>0)this.restore($??[])}getConversationId(){return this.conversationId}getMessages(){return[...this.messages]}appendMessage($){this.messages.push($)}appendMessages($){if($.length===0)return;this.messages.push(...$)}replaceMessages($){this.messages=[...$]}resetForRun(){this.messages=[],this.conversationId=K9(),this.sessionStarted=!1}clearHistory(){this.messages=[],this.conversationId=K9(),this.sessionStarted=!1}restore($){this.messages=[...$],this.sessionStarted=!1}isSessionStarted(){return this.sessionStarted}markSessionStarted(){this.sessionStarted=!0}}function GK($){let f=FK($.content),J=[],Q=$.id??DK(),Z=0,W=[],j=()=>{if(W.length===0)return;let X=Z===0?Q:`${Q}_part_${Z}`;Z+=1,J.push({id:X,role:$.role,content:W.map(PK),createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:GW($.metrics)}),W=[]};if(f.length===0)return J.push({id:Q,role:$.role,content:[],createdAt:$.ts??Date.now(),metadata:$.metadata,modelInfo:$.modelInfo,metrics:GW($.metrics)}),J;for(let X of f){if(X.type!=="tool_result"){W.push(X);continue}j(),J.push({id:`${Q}_tool_${X.tool_use_id}`,role:"tool",content:[PW(X)],createdAt:$.ts??Date.now(),metadata:$.metadata})}return j(),J}function Pf($){return $.flatMap(GK)}function KK($){let f=$.content.map(UW).filter((J)=>J!==void 0);return{id:$.id,role:$.role==="tool"?"user":$.role,content:f,ts:$.createdAt,metadata:$.metadata,modelInfo:$.modelInfo,metrics:UK($.metrics)}}function L2($){return $.map(KK)}function FW($){let f=[];for(let J of $){let Q=J.content.map(UW).filter((j)=>j!==void 0),Z=J.role==="tool"?"user":J.role,W=f[f.length-1];if(Z==="user"&&Q.length>0&&Q.every((j)=>j.type==="tool_result")&&W?.role==="user"&&Array.isArray(W.content)&&W.content.every((j)=>j.type==="tool_result")){W.content.push(...Q);continue}f.push({role:Z,content:Q})}return f}function FK($){if(typeof $==="string")return $.length>0?[{type:"text",text:$}]:[];return[...$]}function PK($){switch($.type){case"text":return{type:"text",text:$.text};case"thinking":return{type:"reasoning",text:$.thinking,metadata:$.signature?{signature:$.signature,details:$.details}:$.details?{details:$.details}:void 0};case"redacted_thinking":return{type:"reasoning",text:"",redacted:!0,metadata:{data:$.data}};case"image":return{type:"image",image:$.data,mediaType:$.mediaType};case"file":return{type:"file",path:$.path,content:$.content};case"tool_use":return{type:"tool-call",toolCallId:$.id,toolName:$.name,input:$.input,metadata:$.signature?{signature:$.signature}:void 0};case"tool_result":return PW($)}}function PW($){return{type:"tool-result",toolCallId:$.tool_use_id,toolName:$.name,output:$.content,isError:$.is_error}}function UW($){switch($.type){case"text":return{type:"text",text:$.text};case"reasoning":{if($.redacted===!0)return{type:"redacted_thinking",data:$.metadata?.data??""};let f=$.metadata;return{type:"thinking",thinking:$.text,signature:f?.signature,details:f?.details}}case"image":return typeof $.image==="string"?{type:"image",data:$.image,mediaType:$.mediaType??"image/png"}:void 0;case"file":return{type:"file",path:$.path,content:$.content};case"tool-call":return{type:"tool_use",id:$.toolCallId,name:$.toolName,input:$.input??{},signature:$.metadata?.signature};case"tool-result":{let f=$.output,J=typeof f==="string"?f:Array.isArray(f)?f:JSON.stringify(f);return{type:"tool_result",tool_use_id:$.toolCallId,name:$.toolName,content:J,is_error:$.isError}}}}function GW($){if(!$)return;return{inputTokens:$.inputTokens??0,outputTokens:$.outputTokens??0,cacheReadTokens:$.cacheReadTokens??0,cacheWriteTokens:$.cacheWriteTokens??0,cost:$.cost}}function UK($){if(!$)return;return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,cost:$.cost}}var KW=0;function DK(){return KW+=1,`msg_${Date.now().toString(36)}_${KW.toString(36)}`}function DW($){let{agentConfig:f}=$,J=RK(f),Q=LK(f),Z=$.hooks,W=OK(f.maxParallelToolCalls);return{sessionId:$.sessionId??f.sessionId,agentId:$.agentId,conversationId:$.conversationId,parentAgentId:$.parentAgentId,agentRole:$.agentRole,systemPrompt:$.systemPrompt??f.systemPrompt,messageModelInfo:Q,model:$.model,modelOptions:J,tools:$.tools,hooks:Z,prepareTurn:$.prepareTurn,consumePendingUserMessage:f.consumePendingUserMessage,plugins:$.plugins,logger:$.logger??f.logger,telemetry:$.telemetry??f.telemetry,initialMessages:$.initialMessages,completionPolicy:f.completionPolicy,maxIterations:f.maxIterations,toolExecution:W,toolPolicies:f.toolPolicies,toolContextMetadata:$.toolContextMetadata,requestToolApproval:f.requestToolApproval}}function RK($){let f={};if($.thinking!==void 0)f.thinking=$.thinking;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;if($.maxTokensPerTurn!==void 0)f.maxTokensPerTurn=$.maxTokensPerTurn;if($.apiTimeoutMs!==void 0)f.apiTimeoutMs=$.apiTimeoutMs;return Object.keys(f).length>0?f:void 0}function LK($){let f=$.providerConfig?.family;return{id:$.modelId,provider:$.providerId,family:f}}function OK($){if($===void 0)return;return $>=2?"parallel":"sequential"}function zK(){return{lastToolName:"",lastToolSignature:"",consecutiveIdenticalCount:0}}function _K($){$.lastToolName="",$.lastToolSignature="",$.consecutiveIdenticalCount=0}function P9($){if($==null||typeof $!=="object")return $;if(Array.isArray($))return $.map(P9);let f={};for(let J of Object.keys($).sort())f[J]=P9($[J]);return f}function NK($){if($==null)return"null";if(typeof $==="string")return $;if(typeof $!=="object")return String($);try{return JSON.stringify(P9($))}catch{return String($)}}function TK($,f,J,Q){if(f===$.lastToolName&&J===$.lastToolSignature)$.consecutiveIdenticalCount++;else $.consecutiveIdenticalCount=1;return $.lastToolName=f,$.lastToolSignature=J,{softWarning:$.consecutiveIdenticalCount===Q.softThreshold,hardEscalation:$.consecutiveIdenticalCount>=Q.hardThreshold}}var RW={softThreshold:3,hardThreshold:5};class U9{config;state=zK();constructor($){this.config={softThreshold:$?.softThreshold??RW.softThreshold,hardThreshold:$?.hardThreshold??RW.hardThreshold}}inspect($){let f=NK($.input),J=TK(this.state,$.name,f,this.config);if(J.hardEscalation)return{kind:"hard",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; stopping to avoid a loop.`};if(J.softWarning)return{kind:"soft",message:`Detected ${this.state.consecutiveIdenticalCount} consecutive identical calls to \`${$.name}\`; consider trying a different approach.`};return{kind:"ok"}}reset(){_K(this.state)}}class D9{consecutiveMistakes=0;options;constructor($){this.options=$}async record($){let f=this.options.maxConsecutiveMistakes,J=$.forceAtLimit&&f?f:this.consecutiveMistakes+1;this.consecutiveMistakes=J;let Q=$.details?.trim()||`consecutive mistake (${$.reason})`;if(this.options.emit({type:"error",error:Error(Q),recoverable:!0,iteration:$.iteration}),this.options.log("warn","Recorded consecutive mistake",{agentId:this.options.agentId,conversationId:this.options.getConversationId(),runId:this.options.getActiveRunId(),iteration:$.iteration,reason:$.reason,details:$.details,consecutiveMistakes:J,maxConsecutiveMistakes:this.options.maxConsecutiveMistakes}),!f||J<f)return{action:"continue"};let Z=await qK({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details},this.options.onLimitReached);if(Z.action==="continue"){let W=Z.guidance?.trim();if(W)this.options.appendRecoveryNotice(W,$.reason);return this.consecutiveMistakes=0,{action:"continue",guidance:W}}return{action:"stop",reason:Z.reason?.trim()||void 0,message:MK({iteration:$.iteration,consecutiveMistakes:J,maxConsecutiveMistakes:f,reason:$.reason,details:$.details,stopReason:Z.reason})}}reset(){this.consecutiveMistakes=0}get value(){return this.consecutiveMistakes}}function MK($){let f=[`Stopped after ${$.consecutiveMistakes}/${$.maxConsecutiveMistakes} consecutive mistakes (${$.reason}) at iteration ${$.iteration}.`],J=$.details?.trim();if(J)f.push(`Error: ${J}`);let Q=$.stopReason?.trim();if(Q)f.push(`Decision: ${Q}`);return f.push("Session state was preserved. Send a new prompt to resume from the latest state."),f.join(" ")}async function qK($,f){if(!f)return{action:"stop",reason:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`};try{return await f($)}catch(J){return{action:"stop",reason:J instanceof Error?J.message:`maximum consecutive mistakes reached (${$.maxConsecutiveMistakes})`}}}function yK($){let f=$.content.filter((J)=>J.type==="text");if(f.length===0)return;return f.map((J)=>J.text).join("")}function wK($){let f=$.content.filter((J)=>J.type==="reasoning");if(f.length===0)return;return{reasoning:f.map((J)=>J.text).join(""),redacted:f.some((J)=>J.redacted===!0)}}function SK($){return $.content.find((f)=>f.type==="tool-result")}function CK($){switch($){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}function hK($){if(!$||$.isError!==!0)return;if(typeof $.output==="string")return $.output;if($.output instanceof Error)return $.output.message;try{return JSON.stringify($.output)}catch{return String($.output)}}class R9{lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0};toolStartedAt=new Map;translate($){switch($.type){case"run-started":return[];case"message-added":return[];case"turn-started":return[{type:"iteration_start",iteration:$.iteration}];case"turn-finished":return[{type:"iteration_end",iteration:$.iteration,hadToolCalls:$.toolCallCount>0,toolCallCount:$.toolCallCount}];case"assistant-text-delta":return[{type:"content_start",contentType:"text",text:$.text,accumulated:$.accumulatedText}];case"assistant-reasoning-delta":return[{type:"content_start",contentType:"reasoning",reasoning:$.text,redacted:$.redacted===!0}];case"assistant-message":return this.translateAssistantMessage($.message);case"tool-started":return this.translateToolStarted($);case"tool-updated":return[{type:"content_update",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,update:$.update}];case"tool-finished":return this.translateToolFinished($);case"usage-updated":return this.translateUsage($.usage);case"status-notice":return[{type:"notice",noticeType:"status",displayRole:"status",message:$.message,reason:$.metadata?.reason==="auto_compaction"?"auto_compaction":void 0,metadata:$.metadata}];case"run-finished":return this.translateRunFinished($.result);case"run-failed":return[{type:"error",error:$.error,recoverable:!1,iteration:$.snapshot.iteration}];default:return $}}reset(){this.lastUsage={inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0},this.toolStartedAt.clear()}translateAssistantMessage($){let f=[],J=yK($);if(J!==void 0)f.push({type:"content_end",contentType:"text",text:J});let Q=wK($);if(Q!==void 0)f.push({type:"content_end",contentType:"reasoning",reasoning:Q.reasoning});return f}translateToolStarted($){return this.toolStartedAt.set($.toolCall.toolCallId,Date.now()),[{type:"content_start",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,input:$.toolCall.input}]}translateToolFinished($){let f=this.toolStartedAt.get($.toolCall.toolCallId),J=f===void 0?void 0:Date.now()-f;this.toolStartedAt.delete($.toolCall.toolCallId);let Q=SK($.message),Z=Q?.output,W=hK(Q);return[{type:"content_end",contentType:"tool",toolName:$.toolCall.toolName,toolCallId:$.toolCall.toolCallId,output:Z,error:W,durationMs:J}]}translateUsage($){let f=$.inputTokens-this.lastUsage.inputTokens,J=$.outputTokens-this.lastUsage.outputTokens,Q=$.cacheReadTokens-this.lastUsage.cacheReadTokens,Z=$.cacheWriteTokens-this.lastUsage.cacheWriteTokens,W=this.lastUsage.totalCost??0,X=($.totalCost??0)-W;return this.lastUsage={inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheReadTokens:$.cacheReadTokens,cacheWriteTokens:$.cacheWriteTokens,totalCost:$.totalCost},[{type:"usage",inputTokens:Math.max(0,f),outputTokens:Math.max(0,J),cacheReadTokens:Q===0?void 0:Math.max(0,Q),cacheWriteTokens:Z===0?void 0:Math.max(0,Z),cost:X===0?void 0:X,totalInputTokens:$.inputTokens,totalOutputTokens:$.outputTokens,totalCacheReadTokens:$.cacheReadTokens===0?void 0:$.cacheReadTokens,totalCacheWriteTokens:$.cacheWriteTokens===0?void 0:$.cacheWriteTokens,totalCost:$.totalCost}]}translateRunFinished($){let f={inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens===0?void 0:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens===0?void 0:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost};return[{type:"done",reason:CK($.status),text:$.outputText,iterations:$.iterations,usage:f}]}}function vK($){if(typeof $==="string")return $;if($ instanceof Error)return $.message;try{return JSON.stringify($)}catch{return String($)}}async function uK($){let J=(typeof $.content==="function"?await $.content():$.content).trim();return J.length>0?J:void 0}function cK($,f){let J=$.trim(),Q=f.map((Z)=>Z.trim()).filter(Boolean).join(`
|
|
132
|
+
|
|
133
|
+
`);if(J&&Q)return`${J}
|
|
134
|
+
|
|
135
|
+
${Q}`;return J||Q}function dK($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return{};return{beforeRun:async(J)=>{for(let Q of f){let Z=await Q.beforeRun?.(J);if(Z?.stop)return Z}return},afterRun:async(J)=>{for(let Q of f)await Q.afterRun?.(J)},beforeModel:async(J)=>{let Q=J.request,Z;for(let W of f){let j=await W.beforeModel?.({...J,request:Q});if(!j)continue;if(j.stop)return j;Z={...Z,...j,options:{...Z?.options??{},...j.options??{}}},Q={...Q,...j.messages?{messages:j.messages}:{},...j.tools?{tools:j.tools}:{},...j.options?{options:{...Q.options??{},...j.options}}:{}}}return Z},afterModel:async(J)=>{for(let Q of f){let Z=await Q.afterModel?.(J);if(Z?.stop)return Z}return},beforeTool:async(J)=>{let Q=J.input,Z;for(let W of f){let j=await W.beforeTool?.({...J,input:Q});if(!j)continue;if(j.stop||j.skip)return j;if(Z={...Z,...j},Object.hasOwn(j,"input"))Q=j.input}return Z},afterTool:async(J)=>{let Q=J.result,Z;for(let W of f){let j=await W.afterTool?.({...J,result:Q});if(!j)continue;if(j.stop)return j;if(Z={...Z,...j},j.result)Q=j.result}return Z},onEvent:async(J)=>{for(let Q of f)await Q.onEvent?.(J)}}}class r${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 R9;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=$,this.agentId=`agent_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,this.parentAgentId=$.parentAgentId,this.logger=f.logger??$.logger,this.telemetry=f.telemetry??$.telemetry,this.createAgentRuntimeImpl=f.createAgentRuntimeImpl??mK,this.conversation=new F9($.initialMessages),this.messageBuilder=new G9,this.contributionRegistry=gK({extensions:$.extensions?[...$.extensions]:[],setupContext:{session:$.extensionContext?.session,client:$.extensionContext?.client,user:$.extensionContext?.user,workspaceInfo:$.extensionContext?.workspace,automation:$.extensionContext?.automation,logger:$.extensionContext?.logger??this.logger,telemetry:$.extensionContext?.telemetry??this.telemetry}}),this.contributionRegistry.resolve(),this.contributionRegistry.validate();let J=$.execution?.maxConsecutiveMistakes??6;this.mistakeTracker=new D9({maxConsecutiveMistakes:J,onLimitReached:$.onConsecutiveMistakeLimitReached,emit:(W)=>this.emitLegacyEvent(W),log:(W,j,X)=>lK(this.logger,W,j,X),agentId:this.agentId,getConversationId:()=>this.conversation.getConversationId(),getActiveRunId:()=>this.activeRunId??"",appendRecoveryNotice:(W,j)=>{this.conversation.appendMessage({role:"user",content:[{type:"text",text:W}]})}});let Q=$.execution?.loopDetection;this.loopDetectionDisabled=Q===!1;let Z=Q===!1||Q===void 0?void 0:Q;this.loopTracker=new U9(Z)}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($){if($.length===0)return;let f=new Set(this.config.tools.map((Q)=>Q.name)),J=[...this.config.tools];for(let Q of $)if(!f.has(Q.name))J.push(Q),f.add(Q.name);this.config={...this.config,tools:J}}updateConnection($){let f={...this.config};if($.providerId!==void 0)f.providerId=$.providerId;if($.modelId!==void 0)f.modelId=$.modelId;if($.apiKey!==void 0)f.apiKey=$.apiKey;if($.baseUrl!==void 0)f.baseUrl=$.baseUrl;if($.headers!==void 0)f.headers=$.headers;if($.providerConfig!==void 0)f.providerConfig=$.providerConfig;if($.reasoningEffort!==void 0)f.reasoningEffort=$.reasoningEffort;if($.thinking!==void 0)f.thinking=$.thinking;if($.thinkingBudgetTokens!==void 0)f.thinkingBudgetTokens=$.thinkingBudgetTokens;this.config=f}clearHistory(){this.conversation.clearHistory(),this.resetConversationBoundaryTrackers()}restore($){this.conversation.restore($),this.resetConversationBoundaryTrackers()}resetConversationBoundaryTrackers(){this.mistakeTracker.reset(),this.loopTracker.reset()}subscribeEvents($){return this.listeners.add($),()=>{this.listeners.delete($)}}abort($){let f=typeof $==="string"?$:$ instanceof Error?$.message:$===void 0?void 0:String($);if(this.abortRequested=!0,this.abortReason=f,this.activeRunPromise)this.activeRunPromise.catch(()=>{});this.activeRuntime?.abort(f)}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:$,userImages:f,userFiles:J,isContinue:!1})}continue($,f,J){return this.executeRun({userMessage:$,userImages:f,userFiles:J,isContinue:!0})}async composeSystemPrompt(){let $=[];for(let f of this.contributionRegistry.getRegisteredRules()){let J=await uK(f);if(J)$.push(J)}return cK(this.config.systemPrompt,$)}executeRun($){let f;return f=this.executeRunInternal($).finally(()=>{if(this.activeRunPromise===f)this.activeRunPromise=null}),this.activeRunPromise=f,f}async executeRunInternal($){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 f=new Date,J=$.userMessage;if(J!==void 0){let P=await rK(J,$.userImages,$.userFiles,this.config.userFileContentLoader);this.conversation.appendMessage({role:"user",content:P})}let Q=await this.composeSystemPrompt(),Z=YW(this.config,this.logger,this.telemetry),W=this.contributionRegistry.getRegisteredTools(),j=new Map;for(let P of W)j.set(P.name,P);for(let P of this.config.tools)j.set(P.name,P);let X=this.conversation.getConversationId(),H=OW(this.config),Y=Array.from(j.values()),V=Pf(this.conversation.getMessages()),A=DW({agentConfig:this.config,sessionId:this.config.sessionId,agentId:this.agentId,conversationId:X,parentAgentId:this.parentAgentId,model:Z,logger:this.logger,telemetry:this.telemetry,tools:Y,toolContextMetadata:{modelSupportsImages:H?.capabilities?.includes("images")??!0,...this.config.toolContextMetadata},hooks:this.createRuntimeHooks(),prepareTurn:this.createRuntimePrepareTurn(H,Y),initialMessages:V,systemPrompt:Q}),B=this.createAgentRuntimeImpl(A);if(this.activeRuntime=B,this.abortRequested)B.abort(this.abortReason);let G=B.subscribe((P)=>{this.handleRuntimeEvent(P)}),K,D;try{if($.isContinue)K=await B.continue(void 0);else K=await B.run("")}catch(P){D=P instanceof Error?P:Error(String(P))}finally{G();try{await this.activeTrackerWork}catch(P){this.logger?.error?.("SessionRuntime tracker work failed during drain",{agentId:this.agentId,error:P})}this.activeRuntime=null,this.running=!1,this.abortRequested=!1,this.abortReason=void 0}if(K&&K.messages.length>0){let P=L2(K.messages);this.conversation.replaceMessages(P)}let F=new Date;try{return this.buildLegacyResult({runResult:K,thrownError:D,startedAt:f,endedAt:F})}finally{this.activeRunId=null}}async ensureExtensionsInitialized(){if(this.extensionsInitialized)return;try{await this.contributionRegistry.initialize()}catch($){if(this.config.hookErrorMode==="throw")throw $;this.emitLegacyEvent({type:"error",error:$ instanceof Error?$:Error(String($)),recoverable:!0,iteration:0})}this.extensionsInitialized=!0}createRuntimeHooks(){let $=dK([this.config.hooks,...this.contributionRegistry.getValidatedExtensions().map((f)=>f.hooks)]);return{...$,beforeModel:async(f)=>{let J=await $.beforeModel?.(f);if(J?.stop)return J;let Q=J?.messages??f.request.messages,Z=await this.prepareMessagesForModelRequest(Q);return{...J,messages:Z}}}}createRuntimePrepareTurn($,f){let J=this.config.prepareTurn;if(!J)return;return async(Q)=>{let Z=L2(Q.messages),W=await this.prepareProviderMessagesForApi(Z),j=await J({agentId:Q.agentId,conversationId:Q.conversationId??this.conversation.getConversationId(),parentAgentId:Q.parentAgentId??null,iteration:Q.iteration,messages:Z,apiMessages:W,abortSignal:Q.signal??new AbortController().signal,systemPrompt:Q.systemPrompt??"",tools:f,model:{id:this.config.modelId,provider:this.config.providerId,info:$},emitStatusNotice:Q.emitStatusNotice});if(!j)return;return{...j.messages?{messages:Pf(j.messages)}:{},...j.systemPrompt!==void 0?{systemPrompt:j.systemPrompt}:{}}}}async prepareMessagesForModelRequest($){let f=await this.prepareProviderMessagesForApi(FW($));return Pf(f)}async prepareProviderMessagesForApi($){let f=$,J=this.contributionRegistry.getRegistrySnapshot().messageBuilder;for(let Q of J)f=await Q.build(f);return this.messageBuilder.buildForApi(f)}handleRuntimeEvent($){switch($.type){case"message-added":case"assistant-message":{this.syncConversationFromRuntimeMessage($.snapshot.messages,[$.message]);break}case"turn-started":{this.currentTurnSuccessfulTools=0,this.currentTurnFailedTools=0,this.currentTurnFailureDetails=[];break}case"tool-started":{this.toolStartedAt.set($.toolCall.toolCallId,new Date),this.toolInputs.set($.toolCall.toolCallId,$.toolCall.input),this.inspectLoopForToolCall($.toolCall.toolName,$.toolCall.input,$.iteration);break}case"tool-finished":{let f=this.toolStartedAt.get($.toolCall.toolCallId),J=new Date,Q=this.toolInputs.get($.toolCall.toolCallId);this.toolStartedAt.delete($.toolCall.toolCallId),this.toolInputs.delete($.toolCall.toolCallId);let Z=$.message.content.find((H)=>H.type==="tool-result"),W=Z?.type==="tool-result"&&Z.isError===!0,j=W?vK(Z?.type==="tool-result"?Z.output:void 0):void 0,X={id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:Q,output:Z?.type==="tool-result"?Z.output:void 0,error:j,durationMs:f===void 0?0:J.getTime()-f.getTime(),startedAt:f??J,endedAt:J};if(this.currentRunToolCalls.push(X),W){if(this.currentTurnFailedTools+=1,j)this.currentTurnFailureDetails.push(`[${$.toolCall.toolName}] ${j}`)}else this.currentTurnSuccessfulTools+=1;break}case"turn-finished":{let f=this.currentTurnFailedTools,J=this.currentTurnSuccessfulTools;if(f>0&&J===0){let Q=this.currentTurnFailureDetails.join("; ");this.enqueueMistakeRecord({iteration:$.iteration,reason:"tool_execution_failed",details:`${f} tool call(s) failed${Q?`: ${Q}`:""}`})}else if(J>0)this.mistakeTracker.reset();break}case"usage-updated":{this.currentRunUsage={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};break}default:break}for(let f of this.eventAdapter.translate($))this.emitLegacyEvent(f)}syncConversationFromRuntimeMessage($,f){if($.length>0){this.conversation.replaceMessages(L2($));return}if(f.length===0)return;let J=new Set(this.conversation.getMessages().map((Z)=>Z.id).filter((Z)=>typeof Z==="string")),Q=L2(f).filter((Z)=>!Z.id||!J.has(Z.id));if(Q.length===0)return;this.conversation.replaceMessages([...this.conversation.getMessages(),...Q])}emitLegacyEvent($){for(let f 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 Q=this.loopTracker.inspect({name:$,input:f});if(Q.kind==="ok")return;if(Q.kind==="soft"){if(Q.message)this.conversation.appendMessage({role:"user",content:[{type:"text",text:Q.message}]});return}this.enqueueMistakeRecord({iteration:J,reason:"tool_execution_failed",forceAtLimit:!0,details:Q.message??`Detected repeated tool calls to \`${$}\`; stopping to avoid a loop.`})}enqueueMistakeRecord($){if(this.trackerAbortInFlight)return;this.activeTrackerWork=this.activeTrackerWork.then(async()=>{if(this.trackerAbortInFlight)return;let f=await this.mistakeTracker.record($);if(f.action==="stop")this.trackerAbortInFlight=!0,this.conversation.appendMessage({role:"user",content:[{type:"text",text:f.message}]}),this.activeRuntime?.abort(f.reason??f.message)})}buildLegacyResult($){let{runResult:f,thrownError:J,startedAt:Q,endedAt:Z}=$,W=Z.getTime()-Q.getTime(),j=J?"error":pK(f),X=f?.outputText||(f?.status==="failed"?f.error?.message:void 0)||"",H=f?{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}:this.currentRunUsage,Y=f?L2(f.messages):this.conversation.getMessages(),V=OW(this.config);if(J)throw J;return{text:X,usage:H,messages:Y,toolCalls:this.currentRunToolCalls,iterations:f?.iterations??0,finishReason:j,model:{id:this.config.modelId,provider:this.config.providerId,info:V},startedAt:Q,endedAt:Z,durationMs:W}}}function lK($,f,J,Q){if(!$)return;if(f==="debug"){$.debug(J,Q);return}if(f==="error"&&$.error){$.error(J,Q);return}let Z=f==="warn"?"warn":f==="error"?"error":"info";$.log(J,{...Q,severity:Z})}function pK($){if(!$)return"error";switch($.status){case"completed":return"completed";case"aborted":return"aborted";case"failed":return"error"}}async function rK($,f,J,Q){let{buildInitialUserContent:Z}=await Promise.resolve().then(() => LW);return Z($,f,J,Q)}function OW($){if($.knownModels?.[$.modelId])return $.knownModels[$.modelId];let f=A9($);if(f?.[$.modelId])return f[$.modelId];return}import{buildClineSystemPrompt as zW}from"@cline/shared";function _W($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return zW({ide:f.clineIdeName?.trim()||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,rules:`# Team Teammate Role
|
|
136
|
+
${J}`,platform:f.clinePlatform,metadata:f.workspaceMetadata})}function NW($,f){let J=$.trim();if(f.providerId.toLowerCase()!=="cline")return J;return zW({ide:f.clineIdeName||"Terminal",workspaceRoot:f.cwd?.trim()||"/",providerId:f.providerId,overridePrompt:J,metadata:f.workspaceMetadata,platform:f.clinePlatform})}function O2($){let f={...$};return{getRuntimeConfig:()=>f,getConnectionConfig:()=>({providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking}),updateConnectionDefaults:(J)=>{f={...f,...J}}}}function _1($){let f=$.configProvider.getRuntimeConfig(),J=$.kind==="teammate"?_W($.prompt,f):NW($.prompt,f);return{...$.configProvider.getConnectionConfig(),systemPrompt:J,tools:$.tools,maxIterations:$.maxIterations??f.maxIterations,parentAgentId:$.parentAgentId,abortSignal:$.abortSignal,onEvent:$.onEvent,hooks:f.hooks,extensions:f.extensions,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval,logger:f.logger,role:$.role}}function z2($){let f=_1($),J=new r$(f);if(f.onEvent)J.subscribeEvents(f.onEvent);return J}var aK=L9.object({systemPrompt:L9.string().describe("System prompt defining the sub-agent's behavior"),task:L9.string().describe("Task for the sub-agent to complete")});function i$($){return iK({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:nK(aK),execute:async(f,J)=>{let Q=$.createSubAgentTools?await $.createSubAgentTools(f,J):$.subAgentTools??[],Z=z2({kind:"subagent",prompt:f.systemPrompt,configProvider:$.configProvider,tools:Q,maxIterations:$.defaultMaxIterations,parentAgentId:J.agentId,abortSignal:J.signal,onEvent:$.onSubAgentEvent,hookErrorMode:$.hookErrorMode,toolPolicies:$.toolPolicies,requestToolApproval:$.requestToolApproval}),W=Z.getAgentId(),j=Z.getConversationId(),X=J.agentId;if($.onSubAgentStart)try{await $.onSubAgentStart({subAgentId:W,conversationId:j,parentAgentId:X,input:f})}catch{}try{let H=await Z.run(f.task),Y={text:H.text,iterations:H.iterations,finishReason:H.finishReason,usage:{inputTokens:H.usage.inputTokens,outputTokens:H.usage.outputTokens}};if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,result:Y,agentResult:H})}catch{}return Y}catch(H){if($.onSubAgentEnd)try{await $.onSubAgentEnd({subAgentId:W,conversationId:j,parentAgentId:X,input:f,error:H instanceof Error?H:Error(String(H))})}catch{}throw H}},timeoutMs:300000,retryable:!1})}import{createTool as j0,TEAM_AWAIT_TIMEOUT_MS as tK,TEAM_RUN_MESSAGE_PREVIEW_LIMIT as sK,TEAM_RUN_TEXT_PREVIEW_LIMIT as oK,TEAM_TASK_IGNORED_FIELDS_BY_ACTION as eK,TeamAttachOutcomeFragmentInputSchema as TW,TeamAwaitRunsInputSchema as MW,TeamBroadcastInputSchema as qW,TeamBroadcastToolResultSchema as $F,TeamCancelRunInputSchema as yW,TeamCancelRunToolResultSchema as fF,TeamCleanupInputSchema as wW,TeamCleanupToolResultSchema as JF,TeamCreateOutcomeInputSchema as SW,TeamCreateOutcomeToolResultSchema as QF,TeamFinalizeOutcomeInputSchema as CW,TeamFinalizeOutcomeToolResultSchema as ZF,TeamListOutcomesInputSchema as hW,TeamListRunsInputSchema as EW,TeamMailboxMessageToolResultSchema as WF,TeamMissionLogInputSchema as bW,TeamMissionLogToolResultSchema as jF,TeamOutcomeFragmentToolResultSchema as kW,TeamOutcomeToolResultSchema as XF,TeamReadMailboxInputSchema as IW,TeamReviewOutcomeFragmentInputSchema as xW,TeamRunTaskInputSchema as mW,TeamRunTaskToolResultSchema as O9,TeamRunToolSummarySchema as z9,TeamSendMessageInputSchema as gW,TeamSendMessageToolResultSchema as HF,TeamShutdownTeammateInputSchema as vW,TeamSimpleAgentStatusToolResultSchema as uW,TeamSpawnTeammateInputSchema as cW,TeamStatusInputSchema as dW,TeamStatusToolResultSchema as YF,TeamTaskInputSchema as lW,TeamTaskToolResultSchema as f4,validateWithZod as h,zodToJsonSchema as X0}from"@cline/shared";function pW($,f){let J=$.replace(/\s+/g," ").trim();if(J.length<=f)return J;return`${J.slice(0,Math.max(0,f-3)).trimEnd()}...`}function N1($,f){if($===void 0)throw Error(`Missing required field: ${f}`);return $}function VF($){let f=$.result;if(!f)return;return{textPreview:pW(f.text,oK),iterations:f.iterations,finishReason:f.finishReason,durationMs:f.durationMs,usage:{inputTokens:f.usage.inputTokens,outputTokens:f.usage.outputTokens,cacheReadTokens:f.usage.cacheReadTokens,cacheWriteTokens:f.usage.cacheWriteTokens,totalCost:f.usage.totalCost}}}function Uf($){return $?.toISOString()}function _9($){return{id:$.id,agentId:$.agentId,taskId:$.taskId,status:$.status,messagePreview:pW($.message,sK),priority:$.priority,retryCount:$.retryCount,maxRetries:$.maxRetries,nextAttemptAt:Uf($.nextAttemptAt),continueConversation:$.continueConversation,startedAt:$.startedAt.toISOString(),endedAt:Uf($.endedAt),leaseOwner:$.leaseOwner,heartbeatAt:Uf($.heartbeatAt),lastProgressAt:Uf($.lastProgressAt),lastProgressMessage:$.lastProgressMessage,currentActivity:$.currentActivity,error:$.error,resultSummary:VF($)}}function AF($){if($.status==="failed")throw Error(`Run "${$.id}" failed${$.error?`: ${$.error}`:""}`);if($.status==="cancelled")throw Error(`Run "${$.id}" was cancelled${$.error?`: ${$.error}`:""}`);if($.status==="interrupted")throw Error(`Run "${$.id}" was interrupted${$.error?`: ${$.error}`:""}`)}var _2=["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 rW($){let f=[];if($.createBaseTools)f.push(...$.createBaseTools());f.push(...T1({runtime:$.runtime,requesterId:$.spec.agentId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!1})),$.runtime.spawnTeammate({agentId:$.spec.agentId,config:_1({kind:"teammate",prompt:$.spec.rolePrompt,role:$.spec.rolePrompt,configProvider:$.teammateConfigProvider,tools:f,maxIterations:$.spec.maxIterations,cwd:$.teammateConfigProvider.getRuntimeConfig().cwd})})}function N2($){let f=$.leadAgentId??"lead",J=$.restoredFromPersistence===!0,Q=T1({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,allowSpawn:!0,includeSpawnTool:$.includeLeadSpawnTool,includeManagementTools:$.includeLeadManagementTools,onLeadToolsUnlocked:$.onLeadToolsUnlocked}),Z=[];for(let W of $.restoredTeammates??[]){if($.runtime.isTeammateActive(W.agentId))continue;rW({runtime:$.runtime,requesterId:f,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:W}),Z.push(W.agentId)}return{tools:Q,restoredFromPersistence:J,restoredTeammates:Z}}function T1($){let f=$.allowSpawn??!0,J=$.includeSpawnTool??!0,Q=$.includeManagementTools??!0,Z=[];if(J)Z.push(j0({name:"team_spawn_teammate",description:"Spawn a teammate with a required agentId and rolePrompt.",inputSchema:X0(cW),execute:async(j)=>{let X=h(cW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");if(!f)throw Error("Spawning teammates is disabled in this context.");let H={agentId:X.agentId,rolePrompt:X.rolePrompt};if(rW({runtime:$.runtime,requesterId:$.requesterId,teammateConfigProvider:$.teammateConfigProvider,createBaseTools:$.createBaseTools,spec:H}),!Q)$.onLeadToolsUnlocked?.(T1({...$,includeSpawnTool:!1,includeManagementTools:!0,onLeadToolsUnlocked:void 0}));return h(uW,{agentId:X.agentId,status:"spawned"})}}));if(!Q)return Z;Z.push(j0({name:"team_shutdown_teammate",description:"Shutdown a teammate by agentId.",inputSchema:X0(vW),execute:async(j)=>{let X=h(vW,j);if($.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can manage teammates.");return $.runtime.shutdownTeammate(X.agentId,X.reason),h(uW,{agentId:X.agentId,status:"stopped"})}})),Z.push(j0({name:"team_status",description:"Return a snapshot of team members, task counts, mailbox, and mission log stats.",inputSchema:X0(dW),execute:async(j)=>{return h(dW,j),h(YF,$.runtime.getSnapshot())}})),Z.push(j0({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:X0(lW),execute:async(j)=>{let X=h(lW,j);switch(X.action){case"create":{let H=new Set(eK.create??[]),Y=Object.entries(j).filter(([A,B])=>H.has(A)&&B!=null).map(([A])=>A),V=$.runtime.createTask({title:N1(X.title,"title"),description:N1(X.description,"description"),dependsOn:X.dependsOn,assignee:X.assignee,createdBy:$.requesterId});return h(f4,{action:"create",taskId:V.id,status:V.status,...Y.length>0?{ignoredFields:Y,note:`Ignored fields for action=create: ${Y.join(", ")}`}:{}})}case"list":return h(f4,{action:"list",tasks:$.runtime.listTaskItems({status:X.status,assignee:X.assignee})});case"claim":{let H=$.runtime.claimTask(N1(X.taskId,"taskId"),$.requesterId);return h(f4,{action:"claim",taskId:H.id,status:H.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 H=$.runtime.completeTask(N1(X.taskId,"taskId"),$.requesterId,N1(X.summary,"summary"));return h(f4,{action:"complete",taskId:H.id,status:H.status})}case"block":{let H=$.runtime.blockTask(N1(X.taskId,"taskId"),$.requesterId,N1(X.reason,"reason"));return h(f4,{action:"block",taskId:H.id,status:H.status})}}}}));let W=new Map;return Z.push(j0({name:"team_run_task",description:"Route a delegated task to a teammate. Choose sync (wait) or async (run in background).",inputSchema:X0(mW),execute:async(j)=>{let X=h(mW,j);if(X.runMode==="async"){let V=$.runtime.startTeammateRun(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0});return h(O9,{agentId:X.agentId,mode:"async",status:"queued",dispatched:!0,message:`Task dispatched to ${X.agentId} and queued as ${V.id}.`,runId:V.id})}let H=W.get(X.agentId);if(H){let V=await H;return h(O9,{...V,status:"joined",deduped:!0,message:`Task for ${X.agentId} was already dispatched in this tool batch; joined the existing in-flight run.`})}let Y=$.runtime.routeToTeammate(X.agentId,X.task,{taskId:X.taskId||void 0,fromAgentId:$.requesterId,continueConversation:X.continueConversation||void 0}).then((V)=>h(O9,{agentId:X.agentId,mode:"sync",status:"running",dispatched:!0,message:`Task dispatched to ${X.agentId} and completed in sync mode.`,text:V.text,iterations:V.iterations})).finally(()=>{W.delete(X.agentId)});return W.set(X.agentId,Y),await Y}})),Z.push(j0({name:"team_cancel_run",description:"Cancel one async teammate run.",inputSchema:X0(yW),execute:async(j)=>{let X=h(yW,j),H=$.runtime.cancelRun(X.runId,X.reason);return h(fF,{runId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_runs",description:"List teammate runs started with team_run_task in async mode, including live activity/progress fields when available.",inputSchema:X0(EW),execute:async(j)=>h(z9.array(),$.runtime.listRuns(h(EW,j)).map(_9))})),Z.push(j0({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:X0(MW),timeoutMs:tK,execute:async(j)=>{let X=h(MW,j);if(X.runId){let V=await $.runtime.awaitRun(X.runId);return AF(V),h(z9,_9(V))}let H=await $.runtime.awaitAllRuns(),Y=H.filter((V)=>["failed","cancelled","interrupted"].includes(V.status));if(Y.length>0){let V=Y.map((A)=>`${A.id}:${A.status}${A.error?`(${A.error})`:""}`).join(", ");throw Error(`One or more runs did not complete successfully: ${V}`)}return h(z9.array(),H.map(_9))}})),Z.push(j0({name:"team_send_message",description:"Send a mailbox message to a specific teammate.",inputSchema:X0(gW),execute:async(j)=>{let X=h(gW,j),H=$.runtime.sendMessage($.requesterId,X.toAgentId,X.subject,X.body,X.taskId??void 0);return h(HF,{id:H.id,toAgentId:H.toAgentId})}})),Z.push(j0({name:"team_broadcast",description:"Broadcast a message to all teammates.",inputSchema:X0(qW),execute:async(j)=>{let X=h(qW,j),H=$.runtime.broadcast($.requesterId,X.subject,X.body,{taskId:X.taskId??void 0});return h($F,{delivered:H.length})}})),Z.push(j0({name:"team_read_mailbox",description:"Read the current agent mailbox.",inputSchema:X0(IW),execute:async(j)=>{let X=h(IW,j);return h(WF.array(),$.runtime.listMailbox($.requesterId,{unreadOnly:X.unreadOnly,markRead:!0}))}})),Z.push(j0({name:"team_mission_log",description:"Append a mission log update for your team.",inputSchema:X0(bW),execute:async(j)=>{let X=h(bW,j),H=$.runtime.appendMissionLog({agentId:$.requesterId,taskId:X.taskId||void 0,kind:X.kind,summary:X.summary,evidence:X.evidence?.length?X.evidence:void 0,nextAction:X.nextAction||void 0});return h(jF,{id:H.id})}})),Z.push(j0({name:"team_cleanup",description:"Clean up the team runtime. Fails if teammates are still running.",inputSchema:X0(wW),execute:async(j)=>{if(h(wW,j),$.runtime.getMemberRole($.requesterId)!=="lead")throw Error("Only the lead agent can run cleanup.");return $.runtime.cleanup(),h(JF,{status:"cleaned"})}})),Z.push(j0({name:"team_create_outcome",description:"Create a converged team outcome.",inputSchema:X0(SW),execute:async(j)=>{let X=h(SW,j),H=$.runtime.createOutcome({title:X.title,requiredSections:X.requiredSections,createdBy:$.requesterId});return h(QF,{outcomeId:H.id,status:H.status,requiredSections:H.requiredSections})}})),Z.push(j0({name:"team_attach_outcome_fragment",description:"Attach a fragment to an outcome section.",inputSchema:X0(TW),execute:async(j)=>{let X=h(TW,j),H=$.runtime.attachOutcomeFragment({outcomeId:X.outcomeId,section:X.section,sourceAgentId:$.requesterId,sourceRunId:X.sourceRunId||void 0,content:X.content});return h(kW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_review_outcome_fragment",description:"Review one outcome fragment.",inputSchema:X0(xW),execute:async(j)=>{let X=h(xW,j),H=$.runtime.reviewOutcomeFragment({fragmentId:X.fragmentId,reviewedBy:$.requesterId,approved:X.approved});return h(kW,{fragmentId:H.id,status:H.status})}})),Z.push(j0({name:"team_finalize_outcome",description:"Finalize one outcome.",inputSchema:X0(CW),execute:async(j)=>{let X=h(CW,j),H=$.runtime.finalizeOutcome(X.outcomeId);return h(ZF,{outcomeId:H.id,status:H.status})}})),Z.push(j0({name:"team_list_outcomes",description:"List team outcomes.",inputSchema:X0(hW),execute:async(j)=>{return h(hW,j),h(XF.array(),$.runtime.listOutcomes())}})),Z}function Df($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}function iW($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}var BF=[{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:i$({configProvider:{}}).description,headlessToolNames:["spawn_agent"]},{id:"teams",description:"Enable team collaboration tools for teammate management, task coordination, mailbox messaging, mission logs, and outcomes.",headlessToolNames:[..._2]}],GF={read_files:"enableReadFiles",search_codebase:"enableSearch",run_commands:"enableBash",fetch_web_content:"enableWebFetch",apply_patch:"enableApplyPatch",editor:"enableEditor",skills:"enableSkills",ask_question:"enableAskQuestion"};function KF($){return $==="plan"||$==="yolo"?$:"act"}function aW($){let f=KF($.mode),J=x0[z$({mode:f})],Q=R2($.providerId??"",$.modelId??"",f,D2);return{mode:f,flags:{...J,...Q,...typeof $.enableSpawnAgent==="boolean"?{enableSpawnAgent:$.enableSpawnAgent}:{},...typeof $.enableAgentTeams==="boolean"?{enableAgentTeams:$.enableAgentTeams}:{}}}}function nW($,f){if(f.disabledToolIds?.has($))return!1;let{flags:J}=aW(f);if($==="spawn_agent")return J.enableSpawnAgent===!0;if($==="teams")return J.enableAgentTeams===!0;if($==="editor")return J.enableEditor===!0||J.enableApplyPatch===!0;let Q=GF[$];return Q?J[Q]===!0:!1}function FF($,f){if($.id==="editor"){let{flags:J}=aW(f),Q=J.enableApplyPatch===!0&&J.enableEditor!==!0;return{...$,defaultEnabled:nW($.id,f),headlessToolNames:[Q?"apply_patch":"editor"]}}return{...$,defaultEnabled:nW($.id,f)}}function M1($={}){return BF.map((f)=>FF(f,$))}function Rf($={}){return M1($).filter((f)=>f.defaultEnabled).map((f)=>f.id)}function Lf($){if(!$.enabled)return new Set;let f=M1($.availabilityContext),J=new Set(f.map((Q)=>Q.id));if(!$.allowlist||$.allowlist.length===0)return new Set(f.filter((Q)=>Q.defaultEnabled).map((Q)=>Q.id));for(let Q of $.allowlist)if(!J.has(Q))throw Error(`Unknown tool "${Q}". Available tools: ${f.map((Z)=>Z.id).join(", ")}`);return new Set($.allowlist)}function J4($,f={}){return M1(f).filter((J)=>$.has(J.id)).flatMap((J)=>J.headlessToolNames)}function Of($,f={}){return J4($,f)}function q1($={}){let{executorOptions:f={},executors:J,...Q}=$,Z={...U2(f),...J??{}};return l$({...Q,executors:Z})}import{mkdirSync as OF,writeFileSync as zF}from"node:fs";import{dirname as _F}from"node:path";import{normalizeUserInput as NF}from"@cline/shared";import{nanoid as TF}from"nanoid";var sW={};y(sW,{sanitizeSessionToken:()=>y1,parseTeamTaskSubSessionId:()=>M2,parseSubSessionId:()=>Z4,makeTeamTaskSubSessionId:()=>Q4,makeSubSessionId:()=>T2,deriveSubsessionStatus:()=>W4});import{nanoid as DF}from"nanoid";function y1($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function T2($,f){let J=y1($),Q=y1(f),Z=`${J}__${Q}`;return Z.length>180?Z.slice(0,180):Z}function Q4($,f){let J=y1($),Q=y1(f);return`${J}__teamtask__${Q}__${DF(6)}`}function M2($){let J=$.indexOf("__teamtask__");if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+12),W=Z.lastIndexOf("__");if(W<=0)return null;let j=Z.slice(0,W),X=Z.slice(W+2);if(!Q||!j||!X)return null;return{rootSessionId:Q,agentId:j,teamTaskId:X}}function Z4($){if(M2($))return null;let f="__",J=$.indexOf(f);if(J<=0)return null;let Q=$.slice(0,J),Z=$.slice(J+f.length);if(!Q||!Z)return null;return{rootSessionId:Q,agentId:Z}}function W4($){switch($.hookName){case"agent_end":return"completed";case"agent_error":return"failed";case"session_shutdown":{let f=String($.reason??"").toLowerCase();if(f.includes("cancel")||f.includes("abort")||f.includes("interrupt"))return"cancelled";if(f.includes("fail")||f.includes("error"))return"failed";return"completed"}default:return"running"}}import{z as a}from"zod";var $j={};y($j,{isTerminalSessionStatus:()=>eW,isNonTerminalSessionStatus:()=>J0,SessionSource:()=>G0,SESSION_STATUSES:()=>j4,NON_TERMINAL_SESSION_STATUSES:()=>oW});import{SESSION_STATUS_VALUES as RF}from"@cline/shared";var j4=RF,oW=["idle","running","pending"];function eW($){return!oW.includes($)}function J0($){return!eW($)}var G0={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 LF=a.enum(j4),q0=a.object({version:a.literal(1),session_id:a.string().min(1),source:a.string().min(1),pid:a.number().int(),started_at:a.string().min(1),ended_at:a.string().min(1).optional(),exit_code:a.number().int().nullable().optional(),status:LF,interactive:a.boolean(),provider:a.string().min(1),model:a.string().min(1),cwd:a.string().min(1),workspace_root:a.string().min(1),team_name:a.string().min(1).optional(),enable_tools:a.boolean(),enable_spawn:a.boolean(),enable_teams:a.boolean(),prompt:a.string().optional(),metadata:a.record(a.string(),a.unknown()).optional(),messages_path:a.string().min(1).optional()});function fj($){if(!$)return!1;return Object.values($).some((f)=>typeof f==="function")}function T9($,f){let J=[...$??[],...f??[]];if(J.length===0)return;let Q=[],Z=new Set;for(let W of J){if(Z.has(W.name))continue;Z.add(W.name),Q.push(W)}return Q}function Jj($){return JSON.stringify($,(f,J)=>{if(J instanceof Error)return{name:J.name,message:J.message,stack:J.stack};return J})}function _$($){return typeof $==="string"&&$.trim()?$.trim():void 0}function N9($,f){let J={...$};J.id=_$(J.id)??TF();let Q=J.modelInfo&&typeof J.modelInfo==="object"?{...J.modelInfo}:void 0,Z={id:_$(Q?.id)??_$(J.modelId)??_$(f?.id),provider:_$(Q?.provider)??_$(J.providerId)??_$(f?.provider),family:_$(Q?.family)??_$(f?.family)};if(delete J.providerId,delete J.modelId,Z.id&&Z.provider)J.modelInfo={id:Z.id,provider:Z.provider,...Z.family?{family:Z.family}:{}};else delete J.modelInfo;return J}function zf($){return $.map((f)=>N9(f))}function _f($,f,J=[]){let Q=$.map((H,Y)=>{let V=J[Y],B=V?.role===H.role&&JSON.stringify(V.content)===JSON.stringify(H.content)?{...V,...H}:{...H};return N9(B)}),Z=J.length,W=[];for(let H=Z;H<Q.length;H+=1)if(Q[H]?.role==="assistant")W.push(H);if(W.length===0){let H=[...Q].reverse().findIndex((Y)=>Y.role==="assistant");if(H===-1)return Q;W.push(Q.length-1-H)}let j=W[W.length-1],X=W.some((H)=>Q[H]?.metrics);for(let H of W){let Y=Q[H],V=Y.metrics;if(!V&&H===j&&!X){let A=f.usage;V={inputTokens:A.inputTokens,outputTokens:A.outputTokens,cacheReadTokens:A.cacheReadTokens??0,cacheWriteTokens:A.cacheWriteTokens??0,cost:A.totalCost}}Q[H]={...N9(Y,{id:f.model.id,provider:f.model.provider,family:f.model.info?.family}),...V?{metrics:V}:{},ts:Y.ts??f.endedAt.getTime()}}return Q}function X4($){return{sessionId:$.sessionId,source:$.source,pid:$.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??void 0,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:$.parentSessionId??void 0,parentAgentId:$.parentAgentId??void 0,agentId:$.agentId??void 0,conversationId:$.conversationId??void 0,isSubagent:$.isSubagent,prompt:$.prompt??void 0,metadata:$.metadata??void 0,messagesPath:$.messagesPath??void 0,updatedAt:$.updatedAt}}var MF=120;function w1($){let f=$?.trim();return f?f.slice(0,MF):void 0}function M9($){let f=NF($??"").trim();if(!f)return;return w1(f.split(`
|
|
137
|
+
`)[0]?.trim())}function n$($){if(!$)return;let f={...$},J=w1(typeof f.title==="string"?f.title:void 0);if(J)f.title=J;else delete f.title;return Object.keys(f).length>0?f:void 0}function H4($){let f=n$($.metadata)??{},J=$.title!==void 0?w1($.title):M9($.prompt);if(J)f.title=J;return Object.keys(f).length>0?f:void 0}function q9($){let f=M2($);if(f)return{agent:"teammate",sessionId:f.rootSessionId,taskType:"team"};let J=Z4($);if(J)return{agent:"subagent",sessionId:J.rootSessionId,taskType:"subagent_task"};return{agent:"lead",sessionId:$}}function y9($){return{version:1,updated_at:$.updatedAt,agent:$.context.agent,sessionId:$.context.sessionId,...$.context.taskType?{taskType:$.context.taskType}:{},messages:zf($.messages),...$.systemPrompt?{system_prompt:$.systemPrompt}:{}}}function Qj($,f,J){OF(_F($),{recursive:!0}),zF($,`${JSON.stringify(y9({updatedAt:f,context:J,messages:[]}),null,2)}
|
|
138
|
+
`,"utf8")}function Zj($,f){return q0.parse({version:1,session_id:$.sessionId,source:$.source,pid:$.pid,started_at:$.startedAt,ended_at:f?.endedAt??$.endedAt??void 0,exit_code:f?.exitCode??$.exitCode??void 0,status:f?.status??$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName??void 0,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt??void 0,metadata:f?.metadata??$.metadata??void 0,messages_path:$.messagesPath??void 0})}async function Wj($,f,J){let Q=0;while(!0){let Z=await $();if(Z===void 0)return{updated:!1};let W=await f(Z);if(typeof W==="object"&&W!==null&&"updated"in W&&W.updated===!1){if(Q+=1,Q>=J)return W;continue}return W}}L0();var jj={};y(jj,{summarizeUsageFromMessages:()=>y2,sumUsageTotals:()=>Y4,getCurrentContextSize:()=>w9,createInitialAccumulatedUsage:()=>A0,accumulateUsageTotals:()=>H0});function A0(){return{inputTokens:0,outputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,totalCost:0}}function H0($,f){return{inputTokens:$.inputTokens+Math.max(0,f.inputTokens??0),outputTokens:$.outputTokens+Math.max(0,f.outputTokens??0),cacheReadTokens:$.cacheReadTokens+Math.max(0,f.cacheReadTokens??0),cacheWriteTokens:$.cacheWriteTokens+Math.max(0,f.cacheWriteTokens??0),totalCost:$.totalCost+Math.max(0,f.totalCost??0)}}function Y4($){let f=A0();for(let J of $)f=H0(f,J);return f}function q2($){return typeof $==="number"&&Number.isFinite($)?$:0}function y2($){let f=A0();for(let J of $){let Q=J.metrics;if(!Q)continue;f=H0(f,{inputTokens:q2(Q.inputTokens),outputTokens:q2(Q.outputTokens),cacheReadTokens:q2(Q.cacheReadTokens),cacheWriteTokens:q2(Q.cacheWriteTokens),totalCost:q2(Q.cost)})}return f}function w9($){for(let f=$.length-1;f>=0;f-=1){let J=$[f];if(J?.role!=="assistant")continue;let Q=q2(J.metrics?.inputTokens);return Q>0?Q:void 0}return}function qF($){if(!$||typeof $!=="object")return;let f=$,J=f.skill??f.skill_name??f.skillName;if(typeof J!=="string")return;let Q=J.trim();return Q.length>0?Q:void 0}function S9($){if(!$||typeof $!=="object")return{};let f=$;return{agentId:typeof f.agentId==="string"?f.agentId:void 0,conversationId:typeof f.conversationId==="string"?f.conversationId:void 0,parentAgentId:typeof f.parentAgentId==="string"?f.parentAgentId:void 0}}function N$($){let f=$.agentId?.trim();if(!f)return;let J=$.parentAgentId?.trim()||void 0,Q=$.teamRole,Z="root";if(Q==="teammate")Z="team_teammate";else if(Q==="lead")Z="team_lead";else if(J)Z="subagent";return{agentId:f,agentKind:Z,conversationId:$.conversationId?.trim()||void 0,parentAgentId:J,createdByAgentId:$.createdByAgentId?.trim()||J||void 0,isSubagent:Boolean(J),teamId:$.teamId?.trim()||void 0,teamName:$.teamName?.trim()||void 0,teamRole:Q,teamAgentId:$.teamAgentId?.trim()||void 0}}function yF($){return{inputTokens:$.inputTokens,outputTokens:$.outputTokens,cacheWriteTokens:$.cacheWriteTokens,cacheReadTokens:$.cacheReadTokens,totalCost:$.cost}}function wF($){let f=$.isPrimaryAgentEvent?[$.overrides?.agentId,$.eventMetadata.agentId,$.overrides?.teamAgentId]:[$.overrides?.teamAgentId,$.overrides?.agentId,$.eventMetadata.agentId,$.eventMetadata.conversationId];for(let J of f){let Q=J?.trim();if(Q)return Q}return $.isPrimaryAgentEvent?"root":"unknown"}function C9($,f,J){let{sessionId:Q,config:Z,liveSession:W,emit:j}=$,X=Z.telemetry,H=W?.runtime.teamRuntime,Y=J?.isPrimaryAgentEvent??!0,V=S9(f),A=N$({agentId:J?.agentId??V.agentId,conversationId:J?.conversationId??V.conversationId,parentAgentId:J?.parentAgentId??V.parentAgentId,createdByAgentId:J?.createdByAgentId,teamId:J?.teamId??H?.getTeamId(),teamName:J?.teamName??H?.getTeamName(),teamRole:J?.teamRole,teamAgentId:J?.teamAgentId});if(f.type==="content_start"&&f.contentType==="tool"&&f.toolName==="skills"){let B=qF(f.input);if(B)e6(X,{ulid:Q,skillName:B,skillSource:"project",skillsAvailableGlobal:0,skillsAvailableProject:0,provider:Z.providerId,modelId:Z.modelId,...A})}if(f.type==="content_end"&&f.contentType==="tool"){let B=f.toolName??"unknown",G=!f.error;if(o6(X,{ulid:Q,tool:B,autoApproved:void 0,success:G,modelId:Z.modelId,provider:Z.providerId,...A}),!G&&(B==="editor"||B==="apply_patch"))$f(X,{ulid:Q,modelId:Z.modelId,provider:Z.providerId,errorType:f.error,...A})}if(f.type==="notice"&&f.reason==="api_error")C8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.message,...A});if(f.type==="error")C8(X,{ulid:Q,model:Z.modelId,provider:Z.providerId,errorMessage:f.error?.message??"unknown error",...A});if(f.type==="usage"&&W?.turnUsageBaseline){let B=yF(f);if(Y){W.turnPrimaryUsage=H0(W.turnPrimaryUsage??A0(),B);let K=H0(W.turnUsageBaseline,W.turnPrimaryUsage);$.usageBySession.set(Q,K),G2(X,{ulid:Q,provider:Z.providerId,model:Z.modelId,source:"assistant",mode:Z.mode,...A}),t6(X,{ulid:Q,tokensIn:f.inputTokens,tokensOut:f.outputTokens,cacheWriteTokens:f.cacheWriteTokens,cacheReadTokens:f.cacheReadTokens,totalCost:f.cost,model:Z.modelId,...A})}else{let K=wF({isPrimaryAgentEvent:Y,overrides:J,eventMetadata:V}),D=W.turnUsageByAgent??new Map;W.turnUsageByAgent=D,D.set(K,H0(D.get(K)??A0(),B))}let G=H0(W.turnPrimaryUsage??A0(),Y4(W.turnUsageByAgent?.values()??[]));$.aggregateUsageBySession.set(Q,H0(W.turnAggregateUsageBaseline??W.turnUsageBaseline,G))}if(f.type==="iteration_end"&&Y)$.persistMessages(Q,W?.agent.getMessages()??[],W?.config.systemPrompt);j({type:"agent_event",payload:{sessionId:Q,event:f,teamAgentId:J?.teamAgentId,teamRole:J!==void 0?J.teamRole??(Y?"lead":void 0):void 0}}),j({type:"chunk",payload:{sessionId:Q,stream:"agent",chunk:Jj(f),ts:Date.now()}})}function a$($){return $.workspaceRoot??$.cwd}import{hasRuntimeConfigExtension as $D}from"@cline/shared";function Xj($){let f="";for(let J=0;J<$.length;J+=1)f+=String.fromCharCode($[J]??0);return btoa(f).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}async function SF($){let J=new TextEncoder().encode($),Q=await crypto.subtle.digest("SHA-256",J);return new Uint8Array(Q)}function CF($=32){let f=new Uint8Array($);return crypto.getRandomValues(f),Xj(f)}async function Nf(){let $=CF(),f=Xj(await SF($));return{verifier:$,challenge:f}}function Tf($){return $.endsWith("/")?$.slice(0,-1):$}function S1($,f){return new URL(f,`${Tf($)}/`).toString()}function w2($,f={}){let J=$.trim();if(!J)return{};try{let Q=new URL(J);return{code:Q.searchParams.get("code")??void 0,state:Q.searchParams.get("state")??void 0,provider:f.includeProvider?Q.searchParams.get("provider")??void 0:void 0}}catch{}if(f.allowHashCodeState&&J.includes("#")){let[Q,Z]=J.split("#",2);return{code:Q||void 0,state:Z||void 0}}if(J.includes("code=")){let Q=new URLSearchParams(J);return{code:Q.get("code")??void 0,state:Q.get("state")??void 0,provider:f.includeProvider?Q.get("provider")??void 0:void 0}}return{code:J}}function hF($){if(typeof atob==="function")try{return atob($)}catch{return null}if(typeof Buffer<"u")try{return Buffer.from($,"base64").toString("utf8")}catch{return null}return null}function O0($){if(!$)return null;try{let f=$.split(".");if(f.length!==3)return null;let J=f[1];if(!J)return null;let Q=J.replace(/-/g,"+").replace(/_/g,"/"),Z=Q.padEnd(Q.length+(4-Q.length%4)%4,"="),W=hF(Z);if(!W)return null;return JSON.parse(W)}catch{return null}}function S2($){try{let f=JSON.parse($),J=f.error,Q=typeof J==="string"?J:J&&typeof J==="object"&&typeof J.type==="string"?J.type:void 0,Z=typeof f.error_description==="string"?f.error_description:typeof f.message==="string"?f.message:J&&typeof J==="object"&&typeof J.message==="string"?J.message:void 0;return{code:Q,message:Z}}catch{return{}}}function C1($,f){return Date.now()>=$.expires-f}async function C2($){if(!$.onManualCodeInput){let W=await $.waitForCallback();return{code:W?.code,state:W?.state,provider:W?.provider,error:W?.error}}let f,J,Q=$.onManualCodeInput().then((W)=>{f=W,$.cancelWait()}).catch((W)=>{J=W instanceof Error?W:Error(String(W)),$.cancelWait()}),Z=await $.waitForCallback();if(J)throw J;if(Z?.code||Z?.error)return{code:Z.code,state:Z.state,provider:Z.provider,error:Z.error};if(f)return w2(f,$.parseOptions);if(await Q,J)throw J;if(f)return w2(f,$.parseOptions);return{}}T$();import{existsSync as qP}from"node:fs";import{discoverPluginModulePaths as yP,resolveConfiguredPluginModulePaths as wP,resolvePluginConfigSearchPaths as SP}from"@cline/shared/storage";import{resolve as XP}from"node:path";import{normalizePluginManifest as HP}from"@cline/shared";import{existsSync as K0,readFileSync as b2}from"node:fs";import{builtinModules as cF,createRequire as I9}from"node:module";import{dirname as t$,extname as K4,isAbsolute as dF,resolve as c}from"node:path";import{fileURLToPath as Pj}from"node:url";import{PLUGIN_FILE_EXTENSIONS as lF}from"@cline/shared";var Uj=t$(Pj(import.meta.url)),pF=I9(import.meta.url),rF=c(Uj,"..","..","..","..",".."),E9=aF(rF),iF=["@cline/sdk","@cline/agents","@cline/core","@cline/core/hub","@cline/core/hub/daemon-entry","@cline/core/telemetry","@cline/llms","@cline/llms/browser","@cline/shared","@cline/shared/automation","@cline/shared/browser","@cline/shared/storage","@cline/shared/db","@cline/shared/types"],x9=new Set(cF.flatMap(($)=>[$,$.replace(/^node:/,"")])),G4=new Set(lF),nF=["development","node","import","require","default"];function aF($){let f={},J={"@cline/sdk":c($,"packages/sdk/src/index.ts"),"@cline/agents":c($,"packages/agents/src/index.ts"),"@cline/core":c($,"packages/core/src/index.ts"),"@cline/llms":c($,"packages/llms/src/index.ts"),"@cline/shared":c($,"packages/shared/src/index.ts"),"@cline/shared/storage":c($,"packages/shared/src/storage/index.ts"),"@cline/shared/db":c($,"packages/shared/src/db/index.ts")};for(let[Q,Z]of Object.entries(J))if(K0(Z))f[Q]=Z;for(let Q of["agents","core","llms","shared"]){let Z=c($,"packages",Q),W=c(Z,"package.json");if(!K0(W))continue;try{let j=JSON.parse(b2(W,"utf8"));if(typeof j.name!=="string"||!j.exports)continue;if(typeof j.exports==="string"){let X=c(Z,j.exports);if(K0(X))f[j.name]=X;continue}if(typeof j.exports!=="object")continue;for(let[X,H]of Object.entries(j.exports)){let Y=tF(Z,H);if(!Y)continue;let V=X==="."?j.name:`${j.name}/${X.replace(/^\.\//,"")}`;f[V]=Y}}catch{}}return f}function tF($,f){let J=m9(f);if(!J)return null;let Q=Dj($,J);for(let Z of Q)if(K0(Z))return Z;return null}function m9($,f=new Set){if(typeof $==="string")return $;if(!$||typeof $!=="object")return null;if(f.has($))return null;f.add($);let J=$;for(let Q of nF){let Z=m9(J[Q],f);if(Z)return Z}return null}function Dj($,f){let J=f.replace(/^\.\//,""),Q=[c($,f)];if(J.startsWith("dist/")){let Z=J.replace(/^dist\//,"src/").replace(/\.(mjs|cjs|js)$/,"");return[c($,`${Z}.ts`),c($,`${Z}.tsx`),c($,`${Z}.mts`),c($,`${Z}.cts`),...Q]}return Q}function sF($){return Object.fromEntries(Object.entries($).sort(([f],[J])=>J.length-f.length))}function hf($){return!($.startsWith(".")||$.startsWith("/")||$.startsWith("file:")||$.startsWith("data:")||$.startsWith("http:")||$.startsWith("https:"))}function E2($){if($.startsWith("@")){let[f,J]=$.split("/",3);return J?`${f}/${J}`:$}return $.split("/",1)[0]??$}function oF($){let f=E2($);if($===f)return".";return`.${$.slice(f.length)}`}function Rj($){return E2($).startsWith("@cline/")}function b9($,f){let J=E2(f),Q=t$($);while(!0){let Z=c(Q,"node_modules",J);if(K0(Z)||K0(c(Z,"package.json")))return!0;let W=c(Q,"..");if(W===Q)return!1;Q=W}}function Fj($){return k9($)!==null}function k9($){try{return pF.resolve($)}catch{}return eF($)}function eF($){let f=E2($),J=Lj(f);if(!J)return null;let Q=c(J,"package.json");try{let Z=JSON.parse(b2(Q,"utf8")),W=oF($),j=W==="."&&typeof Z.exports==="string"?Z.exports:Z.exports&&typeof Z.exports==="object"&&Object.hasOwn(Z.exports,W)?Z.exports[W]:void 0,X=m9(j)??(W==="."&&typeof Z.main==="string"?Z.main:null);if(!X)return null;let H=c(J,X),Y=[H,...Dj(J,X).filter((V)=>V!==H)];for(let V of Y)if(K0(V))return V;return null}catch{return null}}function $P(){let $=[Uj],f=process.env.CLINE_WRAPPER_PATH?.trim();if(f)$.push(t$(t$(f)));let J=process.execPath?.trim();if(J)$.push(t$(J));return[...new Set($.map((Q)=>c(Q)))]}function fP($,f){let J=$;while(!0){let Q=c(J,"package.json");if(K0(Q))try{if(JSON.parse(b2(Q,"utf8")).name===f)return J}catch{}let Z=c(J,"node_modules",f,"package.json");if(K0(Z))return t$(Z);let W=c(J,"..");if(W===J)return null;J=W}}function Lj($){for(let f of $P()){let J=fP(f,$);if(J)return J}return null}function JP($){let J=t$($);for(let Q=0;Q<4;Q++){let Z=c(J,"package.json");if(K0(Z))try{let j=JSON.parse(b2(Z,"utf8"));return j!=null&&typeof j==="object"&&"cline"in j}catch{return!1}let W=c(J,"..");if(W===J)return!1;J=W}return!1}function Oj($,f){let J=f.startsWith("file:")?Pj(f):dF(f)?f:c(t$($),f);if(K0(J)&&G4.has(K4(J)))return J;for(let Q of G4){let Z=`${J}${Q}`;if(K0(Z))return Z}for(let Q of G4){let Z=c(J,`index${Q}`);if(K0(Z))return Z}return null}function zj($){let f=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 Q of J)for(let Z of $.matchAll(Q)){let W=Z[1];if(W)f.add(W)}return[...f]}function QP($){return K4($)!==".ts"}function _j($,f,J=new Set){if(J.has($)||!K0($))return;if(J.add($),!G4.has(K4($)))return;let Q=b2($,"utf8"),Z=QP($);for(let W of zj(Q)){if(W.startsWith("node:")||x9.has(W))continue;if(hf(W)){if(!Z)continue;if(Object.hasOwn(E9,W)||Object.hasOwn(E9,E2(W))||b9($,W)||Rj(W)&&Fj(W)||f&&Fj(W))continue;throw Error(`Cannot find module '${E2(W)}'`)}let j=Oj($,W);if(j)_j(j,f,J)}}function Nj($,f=new Set,J=new Set){if(f.has($)||!K0($))return J;if(f.add($),!G4.has(K4($)))return J;let Q=b2($,"utf8");for(let Z of zj(Q)){if(J.add(Z),hf(Z))continue;let W=Oj($,Z);if(W)Nj(W,f,J)}return J}function ZP($,f){let J=I9($),Q={},Z=Nj($),W=new Set(iF);for(let[j,X]of Object.entries(E9)){try{J.resolve(j);continue}catch{}Q[j]=X}for(let j of Z)if(hf(j)&&(Rj(j)||f))W.add(j);for(let j of W){if(Object.hasOwn(Q,j)||b9($,j))continue;let X=k9(j);if(X)Q[j]=X}if(!f)return Q;for(let j of Z){if(!hf(j)||Object.hasOwn(Q,j)||b9($,j)||j.startsWith("node:")||x9.has(j))continue;let X=k9(j);if(X)Q[j]=X}return Q}function WP($){let f=K4($);return f===".ts"||f===".tsx"||f===".mts"||f===".cts"}var E1;function jP(){if(E1!==void 0)return E1;let $=Lj("jiti");if(!$)return E1=null,null;let f=c($,"dist","babel.cjs");if(!K0(f))return E1=null,null;try{let Q=I9(f)(f);E1=typeof Q==="function"?Q:null}catch{E1=null}return E1}async function Tj($,f={}){let J=!JP($);_j($,J);let Q=ZP($,J),Z=sF(Q),W=await import("jiti"),j=typeof W==="function"?W:typeof W.default==="function"?W.default:void 0;if(!j)throw Error("Unable to load jiti");let X=Object.entries(Z).filter(([,A])=>WP(A)).map(([A])=>A),H=jP(),Y=H?(A)=>H({...A,interopDefault:!0}):void 0;return await j($,{alias:Z,cache:f.useCache,requireCache:f.useCache,esmResolve:!0,interopDefault:!1,nativeModules:[...x9],transformModules:X,tryNative:!1,...Y?{transform:Y}:{}}).import($,{})}function Mj($,f){if(!$)return!0;if($.providerIds?.length){if(!f?.providerId||!$.providerIds.includes(f.providerId))return!1}if($.modelIds?.length){if(!f?.modelId||!$.modelIds.includes(f.modelId))return!1}return!0}function qj($){return typeof $==="object"&&$!==null}function g9($){return Array.isArray($)&&$.every((f)=>typeof f==="string")}function YP($,f){if(!qj($.manifest))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);if(!g9($.manifest.capabilities))throw Error(`Invalid plugin module at ${f}: manifest.capabilities must be a string array`);if($.manifest.capabilities.length===0)throw Error(`Invalid plugin module at ${f}: manifest.capabilities cannot be empty`);if(Object.hasOwn($.manifest,"providerIds")&&!g9($.manifest.providerIds))throw Error(`Invalid plugin module at ${f}: manifest.providerIds must be a string array when provided`);if(Object.hasOwn($.manifest,"modelIds")&&!g9($.manifest.modelIds))throw Error(`Invalid plugin module at ${f}: manifest.modelIds must be a string array when provided`)}function VP($,f){if(!qj($))throw Error(`Invalid plugin module at ${f}: expected object export`);if(typeof $.name!=="string"||$.name.length===0)throw Error(`Invalid plugin module at ${f}: expected non-empty "name"`);if(!Object.hasOwn($,"manifest"))throw Error(`Invalid plugin module at ${f}: missing required "manifest"`);YP($,f)}async function F4($,f={}){let J=XP(f.cwd??process.cwd(),$),Q=await Tj(J,{useCache:f.useCache}),Z=f.exportName??"plugin",W=Q.default??Q[Z];VP(W,J);let j=W,X=j.setup,H=X?(Y,V)=>{let A={...f.session,...V.session},B={...V,session:Object.keys(A).length>0?A:void 0,client:f.client??V.client,user:f.user??V.user,workspaceInfo:f.workspaceInfo??V.workspaceInfo,automation:f.automation??V.automation,logger:f.logger??V.logger,telemetry:f.telemetry??V.telemetry};return X(Y,B)}:void 0;return{...j,manifest:HP(j.manifest),setup:H}}async function Ef($,f={}){return(await b1($,f)).plugins}async function b1($,f={}){let J=[],Q=[],Z=new Map,W=0;for(let j of $)try{let X=await F4(j,f);if(!Mj(X.manifest,f))continue;let H=Z.get(X.name);if(H)Q.push({type:"duplicate_plugin_override",pluginName:X.name,pluginPath:j,overriddenPluginPath:H.pluginPath,message:`Plugin "${X.name}" from ${j} overrides ${H.pluginPath}`});Z.set(X.name,{plugin:X,pluginPath:j,order:W++})}catch(X){let H=X instanceof Error?X.message:String(X);J.push({pluginPath:j,phase:"load",message:H,stack:X instanceof Error?X.stack:void 0})}return{plugins:[...Z.values()].sort((j,X)=>j.order-X.order).map((j)=>j.plugin),failures:J,warnings:Q}}import{existsSync as d9}from"node:fs";import{createRequire as bj}from"node:module";import{dirname as bf,join as I2}from"node:path";import{fileURLToPath as FP}from"node:url";var hj={};y(hj,{resolveSubprocessRuntimeExecutable:()=>v9,buildSubprocessSandboxCommand:()=>Cj,SubprocessSandbox:()=>k2,CLINE_JS_RUNTIME_PATH_ENV:()=>Sj});import{spawn as AP}from"node:child_process";import{basename as BP}from"node:path";import{augmentNodeCommandForDebug as GP,withResolvedClineBuildEnv as KP}from"@cline/shared";function yj($){if($ instanceof Error)return $;return Error(String($))}var Sj="CLINE_JS_RUNTIME_PATH";function wj($){let f=$?.trim();if(!f)return!1;let J=BP(f).toLowerCase();return J==="node"||J==="node.exe"||J==="bun"||J==="bun.exe"}function v9($={}){let f=$.env??process.env,J=$.runtimeExecutable?.trim()||f[Sj]?.trim();if(J)return J;let Q=$.execPath?.trim()||process.execPath;if(wj(Q))return Q;for(let Z of[f.BUN_EXEC_PATH,f.npm_node_execpath,f.NODE]){let W=Z?.trim();if(W&&wj(W))return W}return"node"}function Cj($,f={}){let J=v9({env:f.env,execPath:f.execPath,runtimeExecutable:f.runtimeExecutable});return GP([J,...$],{env:f.env,execArgv:f.execArgv,debugRole:f.name==="plugin-sandbox"?"plugin-sandbox":"sandbox"})}class k2{options;process=null;requestCounter=0;pending=new Map;constructor($){this.options=$}get processLabel(){return this.options.name??"sandbox"}clearPendingRequest($){let f=this.pending.get($);if(!f)return;if(this.pending.delete($),f.timeout)clearTimeout(f.timeout);return f}start(){if(this.process&&this.process.exitCode===null)return;let $=this.options.bootstrapFile?[this.options.bootstrapFile]:["-e",this.options.bootstrapScript??""],f=Cj($,{name:this.options.name,runtimeExecutable:this.options.runtimeExecutable}),J=AP(f[0]??v9(this.options),f.slice(1),{stdio:["ignore","ignore","pipe","ipc"],env:KP(process.env)});this.process=J;let Q="",Z=(W)=>{let j=Q+W;Q=j.length>4000?j.slice(-4000):j};J.stderr?.setEncoding("utf8"),J.stderr?.on("data",(W)=>{Z(W)}),J.on("message",(W)=>{this.onMessage(W)}),J.on("error",(W)=>{this.failPending(Error(`${this.processLabel} process error: ${yj(W).message}`))}),J.on("exit",(W,j)=>{this.process=null;let X=Q.trim();this.failPending(Error(`${this.options.name??"sandbox"} process exited (code=${String(W)}, signal=${String(j)})${X?`: ${X}`:""}`))})}async call($,f,J={}){this.start();let Q=this.process;if(!Q||Q.exitCode!==null)throw Error(`${this.processLabel} process is not available`);let Z=`req_${++this.requestCounter}`,W={type:"call",id:Z,method:$,args:f};return await new Promise((j,X)=>{let H={resolve:(Y)=>j(Y),reject:X};if((J.timeoutMs??0)>0)H.timeout=setTimeout(()=>{this.clearPendingRequest(Z),this.shutdown().catch(()=>{}),X(Error(`${this.processLabel} call timed out after ${J.timeoutMs}ms: ${$}`))},J.timeoutMs);this.pending.set(Z,H),Q.send(W,(Y)=>{if(!Y)return;let V=this.clearPendingRequest(Z);if(!V)return;V.reject(Error(`${this.processLabel} failed to send call "${$}": ${yj(Y).message}`))})})}async shutdown(){let $=this.process;if(this.process=null,!$||$.exitCode!==null){this.failPending(Error(`${this.processLabel} shutdown`));return}await new Promise((f)=>{let J=setTimeout(()=>{try{$.kill("SIGKILL")}catch{}f()},300);$.once("exit",()=>{clearTimeout(J),f()});try{$.kill("SIGTERM")}catch{clearTimeout(J),f()}}),this.failPending(Error(`${this.processLabel} shutdown`))}onMessage($){if(!$)return;if($.type==="event"){if(typeof $.name==="string"&&$.name.length>0)this.options.onEvent?.({name:$.name,payload:$.payload});return}if($.type!=="response"||!$.id)return;let f=this.clearPendingRequest($.id);if(!f)return;if($.ok){f.resolve($.result);return}f.reject(Error($.error?.message||`${this.processLabel} call failed`))}failPending($){for(let[f,J]of this.pending.entries()){if(this.pending.delete(f),J.timeout)clearTimeout(J.timeout);J.reject($)}}}function PP($){return{...$,contributions:{tools:$.contributions?.tools??[],commands:$.contributions?.commands??[],messageBuilders:$.contributions?.messageBuilders??[],providers:$.contributions?.providers??[],automationEventTypes:$.contributions?.automationEventTypes??[],shortcuts:$.contributions?.shortcuts??[],flags:$.contributions?.flags??[]}}}function kf($){return($ instanceof Error?$.message:String($)).includes("Unknown sandbox plugin id:")}function UP(){return`@cline/cli-${process.platform==="win32"?"windows":process.platform}-${process.arch}`}function DP(){let $=process.env.CLINE_WRAPPER_PATH?.trim();if(!$)return;try{let J=bj($).resolve(`${UP()}/package.json`),Q=I2(bf(J),"extensions","plugin-sandbox-bootstrap.js");return d9(Q)?Q:void 0}catch{return}}function RP(){let $=process.execPath?.trim();if(!$)return;let f=I2(bf(bf($)),"extensions","plugin-sandbox-bootstrap.js");return d9(f)?f:void 0}function LP(){let $=bf(FP(import.meta.url)),f=bj(import.meta.url),J=[I2($,"plugin-sandbox-bootstrap.js"),I2($,"extensions","plugin-sandbox-bootstrap.js"),I2($,"agents","plugin-sandbox-bootstrap.js"),DP(),RP()];for(let W of J.filter((j)=>typeof j==="string"))if(d9(W))return{file:W};let Q=I2($,"plugin-sandbox-bootstrap.ts"),Z="jiti";try{Z=f.resolve("jiti")}catch{}return{script:[`const createJiti = require(${JSON.stringify(Z)});`,`const jiti = createJiti(${JSON.stringify(Q)}, { cache: false, requireCache: false, esmResolve: true, interopDefault: false });`,`Promise.resolve(jiti.import(${JSON.stringify(Q)}, {})).catch((error) => {`," console.error(error);"," process.exitCode = 1;","});"].join(`
|
|
139
|
+
`)}}var u9=LP();function c9($,f){return typeof $==="number"&&$>0?$:f}async function If($){let f=new k2({name:"plugin-sandbox",..."file"in u9?{bootstrapFile:u9.file}:{bootstrapScript:u9.script},onEvent:$.onEvent}),J=c9($.importTimeoutMs,4000),Q=c9($.hookTimeoutMs,3000),Z=c9($.contributionTimeoutMs,60000),W={pluginPaths:$.pluginPaths,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,loggerEnabled:Boolean($.logger)},j,X=()=>{return j??=f.call("initialize",W,{timeoutMs:J}).finally(()=>{j=void 0}),j},H;try{H=await f.call("initialize",W,{timeoutMs:J})}catch(A){throw await f.shutdown().catch(()=>{}),A}return{extensions:H.plugins.map(PP).map((A)=>{let B={name:A.name,__clinePluginPath:A.pluginPath,manifest:A.manifest,setup:(G)=>{OP(G,f,A,Z,X),zP(G,f,A,Z,X),NP(G,f,A,Z,X),_P(G,A)}};return B.hooks=MP(f,A,Q,X),B}),failures:H.failures,shutdown:async()=>{await f.shutdown()},warnings:H.warnings}}function OP($,f,J,Q,Z){for(let W of J.contributions?.tools??[]){let j={name:W.name,description:W.description??"",inputSchema:W.inputSchema??{type:"object",properties:{}},timeoutMs:W.timeoutMs,retryable:W.retryable,execute:async(X,H)=>{try{return await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}catch(Y){if(!kf(Y))throw Y;return await Z(),await f.call("executeTool",{pluginId:J.pluginId,contributionId:W.id,input:X,context:H},{timeoutMs:Q})}}};$.registerTool(j)}}function zP($,f,J,Q,Z){for(let W of J.contributions?.commands??[])$.registerCommand({name:W.name,description:W.description,handler:async(j)=>{try{return await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}catch(X){if(!kf(X))throw X;return await Z(),await f.call("executeCommand",{pluginId:J.pluginId,contributionId:W.id,input:j},{timeoutMs:Q})}}})}function _P($,f){for(let J of f.contributions?.providers??[])$.registerProvider({name:J.name,description:J.description,metadata:J.metadata});for(let J of f.contributions?.automationEventTypes??[])$.registerAutomationEventType({eventType:J.eventType,source:J.source,description:J.description,attributesSchema:J.attributesSchema,payloadSchema:J.payloadSchema,examples:J.examples,metadata:J.metadata})}function NP($,f,J,Q,Z){for(let W of J.contributions?.messageBuilders??[])$.registerMessageBuilder({name:W.name,async build(j){try{let X=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Ej(X)?X:j}catch(X){if(!kf(X))throw X;await Z();let H=await f.call("buildMessages",{pluginId:J.pluginId,contributionId:W.id,messages:j},{timeoutMs:Q});return Ej(H)?H:j}}})}function Ej($){return Array.isArray($)&&$.every((f)=>typeof f==="object"&&f!==null&&("role"in f)&&("content"in f))}function TP($,f,J,Q,Z){return async(W)=>{try{return await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}catch(j){if(!kf(j))throw j;return await Z(),await $.call("invokeHook",{pluginId:f,hookName:J,payload:W},{timeoutMs:Q})}}}function MP($,f,J,Q){let Z={};for(let W of f.hooks??[])Z[W]=TP($,f.pluginId,W,J,Q);return Object.keys(Z).length>0?Z:void 0}function P4($){return SP($)}function U4($){return yP($)}function k1($={}){let f=$.cwd??process.cwd(),J=P4($.workspacePath).flatMap((j)=>U4(j)).filter((j)=>qP(j)),Q=wP($.pluginPaths??[],f),Z=[],W=new Set;for(let j of[...Q,...J]){if(W.has(j))continue;W.add(j),Z.push(j)}return Sf(Z)}async function x2($={}){let f=k1($);if(f.length===0)return{extensions:[],failures:[],warnings:[]};if($.mode==="in_process"){let Q=await b1(f,{cwd:$.cwd,exportName:$.exportName,providerId:$.providerId,modelId:$.modelId,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,automation:$.automation,logger:$.logger,telemetry:$.telemetry});return{extensions:Q.plugins,failures:Q.failures,warnings:Q.warnings}}let J=await If({pluginPaths:f,exportName:$.exportName,importTimeoutMs:$.importTimeoutMs,hookTimeoutMs:$.hookTimeoutMs,contributionTimeoutMs:$.contributionTimeoutMs,onEvent:$.onEvent,providerId:$.providerId,modelId:$.modelId,cwd:$.cwd,session:$.session,client:$.client,user:$.user,workspaceInfo:$.workspaceInfo,logger:$.logger});return{extensions:J.extensions??[],shutdown:J.shutdown,failures:J.failures,warnings:J.warnings}}import{execFile as CP}from"node:child_process";import{promisify as hP}from"node:util";var EP=hP(CP);function l9($,f){$?.log(f,{severity:"warn"})}function bP($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))return;let J=f;if(!J.latest||!Array.isArray(J.history))return;let Q=J.latest,Z=J.history.filter((W)=>!!W&&typeof W==="object"&&typeof W.ref==="string"&&typeof W.createdAt==="number"&&typeof W.runCount==="number");if(typeof Q.ref!=="string"||typeof Q.createdAt!=="number"||typeof Q.runCount!=="number")return;return{latest:Q,history:Z}}async function I1($,f){let J=await EP("git",["-C",$,...f],{windowsHide:!0});return{stdout:J.stdout.trim(),stderr:J.stderr.trim()}}async function p9($,f){if(!$)return;let J=`refs/cline/checkpoints/${f}/`;try{let{stdout:Q}=await I1($,["for-each-ref","--format=%(refname)",J]),Z=Q.trim().split(`
|
|
140
|
+
`).filter(Boolean);await Promise.allSettled(Z.map((W)=>I1($,["update-ref","-d",W])))}catch{}}async function kj($,f,J){if(!$||J.length===0)return;await Promise.allSettled(J.map((Q)=>I1($,["update-ref",`refs/cline/checkpoints/${f}/${Q.runCount}`,Q.ref])))}function kP($,f){let J=$.findIndex((Q)=>Q.runCount===f.runCount);if(J<0)return[...$,f];return $.map((Q,Z)=>Z===J?f:Q)}function Ij($){let f=$.initialRunCount??0,J,Q=async()=>{if(J!==void 0)return J;try{J=(await I1($.cwd,["rev-parse","--is-inside-work-tree"])).stdout==="true"}catch{J=!1}return J},Z=async()=>{if($.createCheckpoint)return await $.createCheckpoint({cwd:$.cwd,sessionId:$.sessionId,runCount:f});if(!await Q())return;let W=async(Y)=>{try{let A=(await I1($.cwd,["rev-parse","HEAD"])).stdout.trim();if(!A)return;return{ref:A,createdAt:Date.now(),runCount:f,kind:"commit"}}catch(V){l9($.logger,`${Y}: ${V instanceof Error?V.message:String(V)}`);return}},j=`cline checkpoint session=${$.sessionId} run=${f}`,X="";try{X=(await I1($.cwd,["stash","create",j])).stdout.trim()}catch(Y){return l9($.logger,`Checkpoint snapshot failed: ${Y instanceof Error?Y.message:String(Y)}`),W("Checkpoint HEAD fallback failed")}if(!X)return W("Checkpoint HEAD fallback failed");let H=`refs/cline/checkpoints/${$.sessionId}/${f}`;try{await I1($.cwd,["update-ref",H,X])}catch(Y){l9($.logger,`Checkpoint store failed: ${Y instanceof Error?Y.message:String(Y)}`);return}return{ref:X,createdAt:Date.now(),runCount:f,kind:"stash"}};return{beforeRun:async({snapshot:W})=>{if(W.parentAgentId!=null)return;f+=1;return},beforeModel:async({snapshot:W})=>{if(W.parentAgentId!=null||W.iteration!==1||f<1)return;let j=await Z();if(!j)return;let X=await $.readSessionMetadata(),H=bP(X);if(H?.latest.ref===j.ref)return;let Y=kP(H?.history??[],j);await $.writeSessionMetadata({...X??{},checkpoint:{latest:j,history:Y}});return}}}import{spawn as lP}from"node:child_process";import{appendFileSync as pP,readFileSync as rP}from"node:fs";import{join as iP}from"node:path";import{augmentNodeCommandForDebug as gj,withResolvedClineBuildEnv as n9}from"@cline/shared";import{ensureHookLogDir as xj}from"@cline/shared/storage";function m2($,f){if(!f)return;return{name:$,manifest:{capabilities:["hooks"]},hooks:f}}import{existsSync as IP,readdirSync as xP}from"node:fs";import{basename as mP,extname as gP,join as vP}from"node:path";import{HOOKS_CONFIG_DIRECTORY_NAME as xf,resolveHooksConfigSearchPaths as uP}from"@cline/shared/storage";function D4($){return uP($)}var g2;((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"})(g2||={});var R4={["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"},cP=new Map(Object.values(g2).map(($)=>[$.toLowerCase(),$])),dP=new Set(["",".sh",".bash",".zsh",".js",".mjs",".cjs",".ts",".mts",".cts",".py",".ps1"]);function L4($){let f=gP($).toLowerCase();if(!dP.has(f))return;let J=mP($,f).trim().toLowerCase();return cP.get(J)}function s$($){let f=[],J=new Set,Q=D4($).filter((Z)=>IP(Z));for(let Z of Q)try{for(let W of xP(Z,{withFileTypes:!0})){if(!W.isFile())continue;let j=L4(W.name);if(!j)continue;let X=vP(Z,W.name);if(J.has(X))continue;J.add(X),f.push({fileName:j,hookEventName:R4[j],path:X})}}catch{}return f.sort((Z,W)=>Z.path.localeCompare(W.path))}function gf($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))f[J]=typeof Q==="string"?Q:JSON.stringify(Q);return f}function mf($,f,J){let Q=J instanceof Error?`: ${J.message}`:"",Z=`${f}${Q}`;if($){try{$.log(Z,{severity:"warn",...J!==void 0?{error:J}:{}})}catch{}return}console.warn(Z)}function nP($,f){if(!f)return $;if(!$)return{...f};let J=[$.context,f.context].filter((Z)=>typeof Z==="string"&&Z.length>0).join(`
|
|
141
|
+
`),Q=[...$.appendMessages??[],...f.appendMessages??[]];return{cancel:$.cancel===!0||f.cancel===!0?!0:void 0,review:$.review===!0||f.review===!0?!0:void 0,context:J||void 0,overrideInput:f.overrideInput!==void 0?f.overrideInput:$.overrideInput,systemPrompt:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,appendMessages:Q.length>0?Q:void 0}}function aP($){if(!$||typeof $!=="object")return;let f=$,J=typeof f.context==="string"?f.context:typeof f.contextModification==="string"?f.contextModification:typeof f.errorMessage==="string"?f.errorMessage:void 0;return{cancel:typeof f.cancel==="boolean"?f.cancel:void 0,review:typeof f.review==="boolean"?f.review:void 0,context:J,overrideInput:Object.hasOwn(f,"overrideInput")?f.overrideInput:void 0}}function r9($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function F0($,f){let J=process.env.CLINE_USER_ID?.trim()||process.env.USER?.trim()||"unknown",Q={rootSessionId:f.rootSessionId||$.conversationId};return{clineVersion:process.env.CLINE_VERSION?.trim()||"",timestamp:new Date().toISOString(),taskId:$.conversationId,sessionContext:Q,workspaceRoots:f.workspacePath?[f.workspacePath]:[],workspaceInfo:f.workspaceInfo,userId:J,agent_id:$.agentId,parent_agent_id:$.parentAgentId}}function tP($){let f=$.trim();if(!f)return{};let Q=f.split(`
|
|
142
|
+
`).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse hook stdout JSON"}}}async function sP($,f){let J=$.stdin;if(!J)throw Error("hook command failed to create stdin");await new Promise((Q,Z)=>{let W=!1,j=()=>{J.off("error",H),J.off("finish",Y),$.off("close",V)},X=(A)=>{if(W)return;if(W=!0,j(),A){let B=A.code;if(B==="EPIPE"||B==="ERR_STREAM_DESTROYED"){Q();return}Z(A);return}Q()},H=(A)=>X(A),Y=()=>X(),V=()=>X();J.on("error",H),J.once("finish",Y),$.once("close",V);try{J.end(f)}catch(A){X(A)}})}async function vj($,f){if(f.command.length===0)throw Error("runHookCommand requires non-empty command");try{return await mj($,f)}catch(J){let Q=$U(f.command,process.platform,J);if(!Q)throw J;return await mj($,{...f,command:Q})}}async function mj($,f){let J=gj(f.command,{env:f.env,debugRole:"hook"}),Q=lP(J[0],J.slice(1),{cwd:f.cwd,env:n9(f.env),stdio:f.detached?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:f.detached}),Z=new Promise((B)=>{Q.once("spawn",()=>B())}),W=new Promise((B,G)=>{Q.once("error",(K)=>G(K))}),j=JSON.stringify($);if(await Promise.race([Z,W]),await sP(Q,j),f.detached){Q.unref();return}if(!Q.stdout||!Q.stderr)throw Error("hook command failed to create stdout/stderr");let X="",H="",Y=!1,V;Q.stdout.on("data",(B)=>{X+=B.toString()}),Q.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Q.kill("SIGKILL")},f.timeoutMs);Q.once("close",(G)=>{if(V)clearTimeout(V);let{parsedJson:K,parseError:D}=tP(X);B({exitCode:G,stdout:X,stderr:H,parsedJson:K,parseError:D,timedOut:Y})})});return await Promise.race([A,W])}function oP($){try{let J=rP($,"utf8").split(/\r?\n/,1)[0]?.trim();if(!J?.startsWith("#!"))return;let Q=J.slice(2).trim();if(!Q)return;let Z=Q.split(/\s+/).filter(Boolean);return Z.length>0?Z:void 0}catch{return}}function eP($){return!!($&&typeof $==="object"&&("code"in $)&&$.code==="ENOENT")}function $U($,f=process.platform,J){if(f!=="win32"||!eP(J))return;if($[0]!=="py"||$[1]!=="-3")return;return["python",...$.slice(2)]}function uj($){if($.length===0)return;let[f,...J]=$,Q=f.replace(/\\/g,"/").toLowerCase(),Z=Q.split("/").at(-1)??Q;if(Z==="env")return uj(J);if(Z==="bash"||Z==="sh"||Z==="zsh")return[Z,...J];if(Z==="python3"||Z==="python")return process.platform==="win32"?["py","-3",...J]:[Z,...J];return $}function fU($){let f=oP($);if(f&&f.length>0)return[...uj(f)??f,$];let J=$.toLowerCase();if(J.endsWith(".sh")||J.endsWith(".bash")||J.endsWith(".zsh"))return["bash",$];if(J.endsWith(".js")||J.endsWith(".mjs")||J.endsWith(".cjs"))return gj(["node",$],{debugRole:"hook"});if(J.endsWith(".ts")||J.endsWith(".mts")||J.endsWith(".cts"))return["bun","run",$];if(J.endsWith(".py"))return process.platform==="win32"?["py","-3",$]:["python3",$];if(J.endsWith(".ps1"))return[process.platform==="win32"?"powershell":"pwsh","-File",$];return["bash",$]}function JU($){let f={};for(let J of s$($)){if(!J.hookEventName)continue;let Q=J.hookEventName,Z=f[Q]??[];Z.push(fU(J.path)),f[Q]=Z}return f}async function QU($){let f;for(let J of $.commands){let Q=J.join(" ");try{let Z=await vj($.payload,{command:J,cwd:$.cwd,env:n9(process.env),detached:!1,timeoutMs:$.timeoutMs});if(Z?.timedOut){mf($.logger,`hook command timed out: ${Q}`);continue}if(Z?.parseError){mf($.logger,`hook command returned invalid JSON control output: ${Q} (${Z.parseError})`);continue}f=nP(f,aP(Z?.parsedJson))}catch(Z){mf($.logger,`hook command failed: ${Q}`,Z)}}return f}function x1($){for(let f of $.commands){let J=f.join(" ");vj($.payload,{command:f,cwd:$.cwd,env:n9(process.env),detached:!0}).catch((Q)=>{mf($.logger,`hook command failed: ${J}`,Q)})}}function o$($){return{agentId:$.agentId,conversationId:$.conversationId??$.runId??$.agentId,parentAgentId:$.parentAgentId??null}}function i9($,f){return{...o$($.snapshot),userMessage:f}}function cj($){return{...o$($.snapshot),iteration:$.snapshot.iteration,call:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input}}}function dj($){return{...o$($.snapshot),iteration:$.snapshot.iteration,record:{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}}function lj($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function ZU($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}function v2($){let f={cwd:$.workspacePath,workspacePath:$.workspacePath,rootSessionId:$.rootSessionId,workspaceInfo:$.workspaceInfo},J=(Q)=>{let Z=`${JSON.stringify({ts:new Date().toISOString(),...Q})}
|
|
143
|
+
`,j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??iP(xj(),"hooks.jsonl");xj(j),pP(j,Z,"utf8")};return{beforeRun:async(Q)=>{let Z=i9(Q,"");J({...F0(Z,f),hookName:"agent_start",taskStart:{taskMetadata:{}}});return},beforeTool:async(Q)=>{let Z=cj(Q);J({...F0(Z,f),hookName:"tool_call",iteration:Z.iteration,tool_call:{id:Z.call.id,name:Z.call.name,input:Z.call.input},preToolUse:{toolName:Z.call.name,parameters:gf(Z.call.input)}});return},afterTool:async(Q)=>{let Z=dj(Q);J({...F0(Z,f),hookName:"tool_result",iteration:Z.iteration,tool_result:Z.record,postToolUse:{toolName:Z.record.name,parameters:gf(Z.record.input),result:typeof Z.record.output==="string"?Z.record.output:JSON.stringify(Z.record.output),success:!Z.record.error,executionTimeMs:Z.record.durationMs}});return},afterRun:async({snapshot:Q,result:Z})=>{let W=o$(Q);if(Z.status==="completed"){J({...F0(W,f),hookName:"agent_end",iteration:Z.iterations,turn:{outputText:Z.outputText,status:Z.status},taskComplete:{taskMetadata:{}}});return}if(Z.status==="aborted"||r9(Z.error?.message)){J({...F0(W,f),hookName:"agent_abort",reason:Z.error?.message,taskCancel:{taskMetadata:{}}});return}if(Z.error)J({...F0(W,f),hookName:"agent_error",iteration:Z.iterations,error:{name:Z.error.name,message:Z.error.message,stack:Z.error.stack}})},onEvent:async(Q)=>{if(Q.type!=="message-added"||Q.message.role!=="user")return;let Z=i9({snapshot:Q.snapshot},lj(Q.message.content));J({...F0(Z,f),hookName:"prompt_submit",userPromptSubmit:{prompt:Z.userMessage,attachments:[]}})}}}function O4($){let f=JU($.workspacePath);if(!Object.values(f).some((A)=>A.length>0))return;let Q=async(A,B)=>{let G=f[B]??[];if(G.length===0)return;x1({commands:G,cwd:$.cwd,logger:$.logger,payload:B==="agent_resume"?{...F0(A,$),hookName:B,taskResume:{taskMetadata:{},previousState:{}}}:{...F0(A,$),hookName:B,taskStart:{taskMetadata:{}}}})},Z=async(A)=>{let B=f.prompt_submit??[];if(B.length>0)x1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(A,$),hookName:"prompt_submit",userPromptSubmit:{prompt:A.userMessage,attachments:[]}}})},W=async(A)=>{let B=f.tool_call??[];if(B.length===0)return;return QU({commands:B,cwd:$.cwd,logger:$.logger,timeoutMs:$.toolCallTimeoutMs??120000,payload:{...F0(A,$),hookName:"tool_call",iteration:A.iteration,tool_call:{id:A.call.id,name:A.call.name,input:A.call.input},preToolUse:{toolName:A.call.name,parameters:gf(A.call.input)}}})},j=async(A)=>{let B=f.tool_result??[];if(B.length===0)return;x1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(A,$),hookName:"tool_result",iteration:A.iteration,tool_result:A.record,postToolUse:{toolName:A.record.name,parameters:gf(A.record.input),result:typeof A.record.output==="string"?A.record.output:JSON.stringify(A.record.output),success:!A.record.error,executionTimeMs:A.record.durationMs}}})},X=async(A)=>{let B=f.agent_end??[];if(B.length===0)return;x1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(A,$),hookName:"agent_end",iteration:A.iteration,turn:A.turn,taskComplete:{taskMetadata:{}}}})},H=async(A)=>{let B=f.agent_error??[];if(B.length===0)return;x1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(A,$),hookName:"agent_error",iteration:A.iteration,error:{name:A.error.name,message:A.error.message,stack:A.error.stack}}})},Y=async(A)=>{if(r9(A.reason)){let G=f.agent_abort??[];if(G.length>0)x1({commands:G,cwd:$.cwd,logger:$.logger,payload:{...F0(A,$),hookName:"agent_abort",reason:A.reason,taskCancel:{taskMetadata:{}}}})}let B=f.session_shutdown??[];if(B.length===0)return;x1({commands:B,cwd:$.cwd,logger:$.logger,payload:{...F0(A,$),hookName:"session_shutdown",reason:A.reason}})},V={};if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0||(f.prompt_submit?.length??0)>0){if((f.agent_start?.length??0)>0||(f.agent_resume?.length??0)>0)V.beforeRun=async(A)=>{let B=process.env.CLINE_HOOK_AGENT_RESUME==="1"?"agent_resume":"agent_start";await Q(o$(A.snapshot),B);return};if((f.prompt_submit?.length??0)>0)V.onEvent=async(A)=>{if(A.type!=="message-added"||A.message.role!=="user")return;await Z(i9({snapshot:A.snapshot},lj(A.message.content)))}}if((f.tool_call?.length??0)>0)V.beforeTool=async(A)=>{let B=await W(cj(A));return ZU(B)};if((f.tool_result?.length??0)>0)V.afterTool=async(A)=>{await j(dj(A));return};if((f.agent_end?.length??0)>0)V.afterRun=async({snapshot:A,result:B})=>{if(B.status!=="completed")return;await X({...o$(A),iteration:B.iterations,turn:{outputText:B.outputText,status:B.status}})};if((f.agent_error?.length??0)>0||(f.agent_abort?.length??0)>0||(f.session_shutdown?.length??0)>0){let A=V.afterRun;V.afterRun=async(B)=>{await A?.(B);let{snapshot:G,result:K}=B;if(K.status==="aborted"||r9(K.error?.message)){await Y({...o$(G),reason:K.error?.message});return}if(K.error)await H({...o$(G),iteration:K.iterations,error:K.error})}}return V}function u2($){return m2("core.hook_config_files",O4($))}function m1($,f){let J=$.map((Q)=>Q[f]).filter((Q)=>typeof Q==="function");if(J.length===0)return;return async(Q)=>{let Z;for(let W of J){let j=await W(Q);if(!j||typeof j!=="object")continue;let X=j;Z={...Z??{},...X,stop:Z?.stop===!0||X.stop===!0?!0:X.stop,options:Z?.options||X.options?{...Z?.options??{},...X.options??{}}:void 0}}return Z}}function g1($){let f=$.filter((J)=>J!==void 0);if(f.length===0)return;return{beforeRun:m1(f,"beforeRun"),afterRun:m1(f,"afterRun"),beforeModel:m1(f,"beforeModel"),afterModel:m1(f,"afterModel"),beforeTool:m1(f,"beforeTool"),afterTool:m1(f,"afterTool"),onEvent:m1(f,"onEvent")}}var pj={};y(pj,{normalizeRuntimeCapabilities:()=>P0});function P0(...$){let f,J;for(let Z of $){if(!Z)continue;if(Z.toolExecutors)f={...f??{},...Z.toolExecutors};if(Z.requestToolApproval)J=Z.requestToolApproval}let Q=f&&Object.keys(f).length>0;if(!Q&&!J)return;return{...Q?{toolExecutors:f}:{},...J?{requestToolApproval:J}:{}}}var PX={};y(PX,{toProviderConfig:()=>g0,emptyStoredProviderSettings:()=>J1,StoredProviderSettingsSchema:()=>p2,StoredProviderSettingsEntrySchema:()=>GJ,ProviderSettingsSchemaTyped:()=>S4});import{z as f1}from"zod";var FX={};y(FX,{toProviderConfig:()=>g0,safeParseSettings:()=>BJ,safeCreateProviderConfig:()=>H7,parseSettings:()=>AJ,normalizeProviderId:()=>l2,isBuiltInProviderId:()=>j7,createProviderConfig:()=>X7,SapSettingsSchema:()=>HJ,ReasoningSettingsSchema:()=>ZJ,ProviderSettingsSchema:()=>$1,ProviderProtocolSchema:()=>fJ,ProviderIdSchema:()=>w4,ProviderClientSchema:()=>JJ,OcaSettingsSchema:()=>YJ,ModelCatalogSettingsSchema:()=>VJ,GcpSettingsSchema:()=>jJ,BUILT_IN_PROVIDER_IDS:()=>W7,BUILT_IN_PROVIDER:()=>y4,AzureSettingsSchema:()=>XJ,AwsSettingsSchema:()=>WJ,AuthSettingsSchema:()=>QJ});import*as m0 from"@cline/llms";import{z as q}from"zod";L0();var XX={};y(XX,{refreshOcaToken:()=>_4,loginOcaOAuth:()=>c2,getValidOcaCredentials:()=>N4,generateOcaOpcRequestId:()=>df,createOcaRequestHeaders:()=>o9,createOcaOAuthProvider:()=>s9,OCI_HEADER_OPC_REQUEST_ID:()=>$X,DEFAULT_INTERNAL_OCA_BASE_URL:()=>vf,DEFAULT_INTERNAL_IDCS_URL:()=>aj,DEFAULT_INTERNAL_IDCS_SCOPES:()=>tj,DEFAULT_INTERNAL_IDCS_CLIENT_ID:()=>nj,DEFAULT_EXTERNAL_OCA_BASE_URL:()=>uf,DEFAULT_EXTERNAL_IDCS_URL:()=>oj,DEFAULT_EXTERNAL_IDCS_SCOPES:()=>ej,DEFAULT_EXTERNAL_IDCS_CLIENT_ID:()=>sj});import{nanoid as ij}from"nanoid";class a9{ttlMs;maxEntries;entries=new Map;constructor($,f){this.ttlMs=$;this.maxEntries=f}get($,f=Date.now()){this.pruneExpired(f);let J=this.entries.get($);if(!J)return;return this.entries.delete($),this.entries.set($,J),J.value}set($,f,J=Date.now(),Q=this.ttlMs){this.pruneExpired(J),this.entries.delete($);while(this.entries.size>=this.maxEntries){let Z=this.entries.keys().next().value;if(Z===void 0)break;this.entries.delete(Z)}this.entries.set($,{value:f,expiresAt:J+Q})}pruneExpired($){for(let[f,J]of this.entries)if(J.expiresAt<=$)this.entries.delete(f)}}var rj={};y(rj,{startLocalOAuthServer:()=>s0});function WU(){let $;return{promise:new Promise((J)=>{$=J}),resolve:$}}async function s0($){let f=await import("node:http"),J=$.host??"127.0.0.1",Q=$.timeoutMs??300000,Z=$.successHtml??jU,W=WU(),j=!1,X=null,H=null,Y=null,V=(G)=>{if(j)return;j=!0,W.resolve(G)},A=()=>{if(X)clearTimeout(X),X=null;let G=Y;if(Y=null,H)H.close(),H=null;if(G!==null&&$.onClose)Promise.resolve($.onClose({host:J,port:G})).catch(()=>{})},B=async()=>{return X=setTimeout(()=>{A(),V(null)},Q),W.promise};for(let G of $.ports){let K=f.createServer((F,P)=>{try{let U=new URL(F.url||"",`http://${J}:${G}`);if(U.pathname!==$.callbackPath){P.statusCode=404,P.end("Not found");return}let z={url:U,code:U.searchParams.get("code")??void 0,state:U.searchParams.get("state")??void 0,provider:U.searchParams.get("provider")??void 0,error:U.searchParams.get("error")??void 0};if(z.error){P.statusCode=400,P.end(`Authentication failed: ${z.error}`),A(),V(z);return}if(!z.code){P.statusCode=400,P.end("Missing authorization code");return}if($.expectedState&&z.state!==$.expectedState){P.statusCode=400,P.end("State mismatch");return}P.statusCode=200,P.setHeader("Content-Type","text/html; charset=utf-8"),P.end(Z),A(),V(z)}catch{P.statusCode=500,P.end("Internal error")}}),D=await new Promise((F)=>{let P=(U)=>{K.off("error",P),F({bound:!1,error:U})};K.once("error",P),K.listen(G,J,()=>{K.off("error",P),H=K,F({bound:!0})})});if(D.error){if(D.error.code==="EADDRINUSE")continue;throw A(),D.error}if(D.bound){Y=G;let F=`http://${J}:${G}${$.callbackPath}`;if($.onListening)await Promise.resolve($.onListening({host:J,port:G,callbackUrl:F})).catch(()=>{});return{callbackUrl:F,waitForCallback:B,cancelWait:()=>{A(),V(null)},close:()=>{A(),V(null)}}}}return{callbackUrl:"",waitForCallback:async()=>null,cancelWait:()=>{},close:()=>{}}}var jU=`<!DOCTYPE html>
|
|
144
|
+
<html lang="en">
|
|
145
|
+
<head>
|
|
146
|
+
<meta charset="utf-8">
|
|
147
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
148
|
+
<title>Authentication Successful</title>
|
|
149
|
+
<style>
|
|
150
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
151
|
+
body {
|
|
152
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
|
153
|
+
min-height: 100vh;
|
|
154
|
+
display: flex;
|
|
155
|
+
align-items: center;
|
|
156
|
+
justify-content: center;
|
|
157
|
+
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);
|
|
158
|
+
color: #fff;
|
|
159
|
+
}
|
|
160
|
+
.container { text-align: center; padding: 48px; max-width: 420px; }
|
|
161
|
+
.icon {
|
|
162
|
+
width: 72px; height: 72px; margin: 0 auto 24px;
|
|
163
|
+
background: linear-gradient(135deg, #10a37f 0%, #1a7f64 100%);
|
|
164
|
+
border-radius: 50%;
|
|
165
|
+
display: flex; align-items: center; justify-content: center;
|
|
166
|
+
}
|
|
167
|
+
.icon svg { width: 36px; height: 36px; stroke: #fff; stroke-width: 3; fill: none; }
|
|
168
|
+
h1 { font-size: 24px; font-weight: 600; margin-bottom: 12px; }
|
|
169
|
+
p { font-size: 15px; color: rgba(255,255,255,0.7); line-height: 1.5; }
|
|
170
|
+
.closing { margin-top: 32px; font-size: 13px; color: rgba(255,255,255,0.5); }
|
|
171
|
+
</style>
|
|
172
|
+
</head>
|
|
173
|
+
<body>
|
|
174
|
+
<div class="container">
|
|
175
|
+
<div class="icon">
|
|
176
|
+
<svg viewBox="0 0 24 24"><polyline points="20 6 9 17 4 12"></polyline></svg>
|
|
177
|
+
</div>
|
|
178
|
+
<h1>Authentication Successful</h1>
|
|
179
|
+
<p>You're now signed in. You can close this window.</p>
|
|
180
|
+
<p class="closing">This window will close automatically...</p>
|
|
181
|
+
</div>
|
|
182
|
+
<script>setTimeout(() => window.close(), 3000);</script>
|
|
183
|
+
</body>
|
|
184
|
+
</html>`;var nj="a8331954c0cf48ba99b5dd223a14c6ea",aj="https://idcs-9dc693e80d9b469480d7afe00e743931.identity.oraclecloud.com",tj="openid offline_access",vf="https://code-internal.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",sj="c1aba3deed5740659981a752714eba33",oj="https://login-ext.identity.oraclecloud.com",ej="openid offline_access",uf="https://code.aiservice.us-chicago-1.oci.oraclecloud.com/20250206/app/litellm",$X="opc-request-id",XU="/auth/oca",HU=Array.from({length:11},($,f)=>48801+f),YU=300000,VU=30000,fX=30000,AU=600000;class cf extends Error{status;errorCode;constructor($,f){super($);this.name="OcaOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 e$={internal:{clientId:nj,idcsUrl:aj,scopes:tj,baseUrl:vf},external:{clientId:sj,idcsUrl:oj,scopes:ej,baseUrl:uf}},z4=new Map,BU=86400000,GU=300000,KU=32,t9=new a9(BU,KU);function JX($){if(typeof $==="function")return $();return $??"internal"}function QX($){return{internal:{clientId:$?.internal?.clientId??e$.internal.clientId,idcsUrl:$?.internal?.idcsUrl??e$.internal.idcsUrl,scopes:$?.internal?.scopes??e$.internal.scopes,baseUrl:$?.internal?.baseUrl??e$.internal.baseUrl},external:{clientId:$?.external?.clientId??e$.external.clientId,idcsUrl:$?.external?.idcsUrl??e$.external.idcsUrl,scopes:$?.external?.scopes??e$.external.scopes,baseUrl:$?.external?.baseUrl??e$.external.baseUrl}}}function FU($=Date.now()){let f=$-AU;for(let[J,Q]of z4.entries())if(Q.createdAt<f)z4.delete(J)}function PU($,f,J){if(typeof $.expires_in==="number"&&$.expires_in>0)return Date.now()+$.expires_in*1000;let Z=O0(f)?.exp;if(typeof Z==="number"&&Z>0)return Z*1000;let j=O0(J)?.exp;if(typeof j==="number"&&j>0)return j*1000;return Date.now()+3600000}function ZX($,f,J){let Q=$.access_token;if(!Q)throw Error("Token response did not include an access token");let Z=$.refresh_token??J?.refresh;if(!Z)throw Error("Token response did not include a refresh token");let W=O0($.id_token),j=O0(Q),X=W?.sub??j?.sub,H=W?.email??j?.email;return{access:Q,refresh:Z,expires:PU($,Q,$.id_token),accountId:X??J?.accountId,email:H??J?.email,metadata:{...J?.metadata??{},provider:"oca",mode:f,subject:X,idToken:$.id_token}}}async function WX($,f){let J=Tf($),Q=t9.get(J);if(Q)return Q;let Z=`${J}/.well-known/openid-configuration`,W=await fetch(Z,{method:"GET",signal:AbortSignal.timeout(f)});if(!W.ok){let H=`${J}/oauth2/v1/token`;return t9.set(J,H,Date.now(),GU),H}let X=(await W.json()).token_endpoint||`${J}/oauth2/v1/token`;return t9.set(J,X),X}function jX($){return{code:$.error,message:$.error_description}}async function UU($){let f=z4.get($.state);if(!f)throw Error("No PKCE verifier found for this state");z4.delete($.state);let J=$.mode==="external"?$.config.external:$.config.internal,Q=await WX(J.idcsUrl,$.requestTimeoutMs),Z=new URLSearchParams({grant_type:"authorization_code",code:$.code,redirect_uri:f.redirectUri,client_id:J.clientId,code_verifier:f.verifier}),W=await fetch(Q,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:Z,signal:AbortSignal.timeout($.requestTimeoutMs)}),j=await W.json();if(!W.ok){let H=jX(j);throw new cf(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let X=O0(j.id_token);if(!j.id_token||!X)throw Error("No ID token received from OCA");if(X.nonce!==f.nonce)throw Error("OIDC nonce verification failed");return ZX(j,$.mode)}function DU($){let f=$.mode==="external"?$.config.external:$.config.internal,J=new URL(`${Tf(f.idcsUrl)}/oauth2/v1/authorize`);return J.searchParams.set("client_id",f.clientId),J.searchParams.set("response_type","code"),J.searchParams.set("scope",f.scopes),J.searchParams.set("code_challenge",$.challenge),J.searchParams.set("code_challenge_method","S256"),J.searchParams.set("redirect_uri",$.callbackUrl),J.searchParams.set("state",$.state),J.searchParams.set("nonce",$.nonce),J.toString()}async function c2($){P$($.telemetry,"oca");let f=QX($.config),J=JX($.mode),Q=$.callbackPorts?.length?$.callbackPorts:HU,Z=$.callbackPath??XU,W=$.requestTimeoutMs??fX,j=await s0({ports:Q,callbackPath:Z,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),X=j.callbackUrl;if(!X)throw Error("Unable to bind local OAuth callback server");let H=ij(16),Y=ij(16),{verifier:V,challenge:A}=await Nf();FU(),z4.set(H,{verifier:V,nonce:Y,mode:J,redirectUri:X,createdAt:Date.now()});let B=DU({callbackUrl:X,mode:J,state:H,nonce:Y,challenge:A,config:f});$.callbacks.onAuth({url:B,instructions:"Continue the authentication process in your browser."});try{let G=await C2({waitForCallback:j.waitForCallback,cancelWait:j.cancelWait,onManualCodeInput:$.callbacks.onManualCodeInput}),K=G.code,D=G.state;if(G.error)throw Error(`OAuth error: ${G.error}`);if(!K){if(!$.callbacks.onManualCodeInput)throw Error("Timed out waiting for OCA callback");throw Error("Missing authorization code")}if(!D||D!==H)throw Error("State mismatch");let F=await UU({code:K,state:D,mode:J,config:f,requestTimeoutMs:W});return U$($.telemetry,"oca"),R$($.telemetry,{id:F.accountId,email:F.email,provider:"oca"}),F}catch(G){throw D$($.telemetry,"oca",G instanceof Error?G.message:String(G)),G}finally{j.close()}}async function _4($,f={}){let J=QX(f.config),Q=f.requestTimeoutMs??fX,Z=$.metadata?.mode,W=Z==="internal"||Z==="external"?Z:JX(f.mode),j=W==="external"?J.external:J.internal,X=await WX(j.idcsUrl,Q),H=new URLSearchParams({grant_type:"refresh_token",refresh_token:$.refresh,client_id:j.clientId}),Y=await fetch(X,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:H,signal:AbortSignal.timeout(Q)}),V=await Y.json();if(!Y.ok){let A=jX(V);throw new cf(`Token refresh failed: ${Y.status}${A.message?` - ${A.message}`:""}`,{status:Y.status,errorCode:A.code})}return ZX(V,W,$)}async function N4($,f,J){if(!$)return null;let Q=f?.refreshBufferMs??J?.refreshBufferMs??YU,Z=f?.retryableTokenGraceMs??J?.retryableTokenGraceMs??VU;if(f?.forceRefresh!==!0&&!C1($,Q))return $;try{return await _4($,J)}catch(j){if(j instanceof cf&&j.isLikelyInvalidGrant())return I$(J?.telemetry,"oca","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function s9($={}){return{id:"oca",name:"Oracle Code Assist",usesCallbackServer:!0,async login(f){return c2({...$,callbacks:f})},async refreshToken(f){return _4(f,$)},getApiKey(f){return f.access}}}async function df($,f){let J=new TextEncoder,Q=async(Y)=>{let V=await crypto.subtle.digest("SHA-256",J.encode(Y));return Array.from(new Uint8Array(V).slice(0,4),(A)=>A.toString(16).padStart(2,"0")).join("")},[Z,W]=await Promise.all([Q(f),Q($)]),j=Math.floor(Date.now()/1000).toString(16).padStart(8,"0"),X=new Uint32Array(1);crypto.getRandomValues(X);let H=(X[0]??0).toString(16).padStart(8,"0");return Z+W+j+H}async function o9($){let f=await df($.taskId,$.accessToken);return{Authorization:`Bearer ${$.accessToken}`,"Content-Type":"application/json",client:$.metadata?.client??"Cline","client-version":$.metadata?.clientVersion??"unknown","client-ide":$.metadata?.clientIde??"unknown","client-ide-version":$.metadata?.clientIdeVersion??"unknown",[$X]:f}}var KX={};y(KX,{resolveProviderConfig:()=>q4,getProviderConfig:()=>$J,getLiveModelsCatalog:()=>d2,clearPublicModelsCatalogCache:()=>gU,clearPrivateModelsCatalogCache:()=>Z7,clearLiveModelsCatalogCache:()=>Q7,OPENAI_COMPATIBLE_PROVIDERS:()=>M4,DEFAULT_MODELS_CATALOG_URL:()=>tf});import*as Y0 from"@cline/llms";function e9($){if(!Array.isArray($))return[];return $.map((f)=>{if(typeof f==="string")return f.trim();if(f&&typeof f==="object"){let J=f;for(let Q of[J.id,J.name,J.model])if(typeof Q==="string"&&Q.trim())return Q.trim()}return""}).filter((f)=>f.length>0)}function RU($,f){let J=e9($);if(J.length>0)return J;if(!$||typeof $!=="object")return[];let Q=$,Z=e9(Q.data??Q.models);if(Z.length>0)return Z;if(Q.models&&typeof Q.models==="object"&&!Array.isArray(Q.models)){let j=Object.keys(Q.models).filter((X)=>X.trim().length>0);if(j.length>0)return j}let W=Q.providers?.[f];if(W&&typeof W==="object"){let X=e9(W.models??W);if(X.length>0)return X}return[]}async function lf($,f){let J=await fetch($,{method:"GET"});if(!J.ok)throw Error(`failed to fetch models from ${$}: HTTP ${J.status}`);return RU(await J.json(),f)}function HX($){return $.replace(/\/+$/,"")}function pf($,f,J){let Q=J?.trim();if(!Q)return;let Z=$?.trim();if(!Z||!f?.trim())return Q;try{let W=new URL(Q),j=new URL(f),X=new URL(Z);if(W.origin!==j.origin)return Q;let H=HX(j.pathname),Y=HX(X.pathname);if(H&&W.pathname.startsWith(`${H}/`)){let V=W.pathname.slice(H.length);X.pathname=`${Y}${V}`}else X.pathname=W.pathname;return X.search=W.search,X.hash=W.hash,X.toString()}catch{return Q}}function LU($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{...J}]))}function OU($){if($.baseUrl.length===0)return!1;switch($.client){case"openai-compatible":case"openai":case"openai-r1":case"fetch":return!0;default:return $.protocol==="openai-chat"}}var zU=Object.values(Y0.MODEL_COLLECTIONS_BY_PROVIDER_ID).map(($)=>({id:$.provider.id,baseUrl:$.provider.baseUrl??"",modelsSourceUrl:$.provider.modelsSourceUrl,modelId:$.provider.defaultModelId,knownModels:LU($.models),capabilities:$.provider.capabilities?[...$.provider.capabilities]:void 0,env:$.provider.env?[...$.provider.env]:void 0,client:$.provider.client,protocol:$.provider.protocol})),VX=Object.fromEntries(zU.map(($)=>[$.id,$]));function _U($){return VX[$]}function NU(){return Object.fromEntries(Object.entries(VX).filter(([,$])=>OU($)))}function AX($=[]){let f=$.flatMap((J)=>{switch(J){case"reasoning":case"prompt-cache":case"tools":case"oauth":return[J];default:return[]}});return f.length>0?f:void 0}var tf="https://models.dev/api.json",TU=600000,BX=300000,MU=5000,af=new Map,T4=new Map,$7=new Map,rf=new Map;async function qU(){return Y0.getGeneratedProviderModels()}async function yU($,f={},J={},Q={},Z={},W={}){let j=await qU(),X=Y0.resolveProviderModelCatalogKeys($),H=Object.assign({},...X.map((A)=>j[A]??{})),Y=Boolean(Y0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl),V=Object.keys(Z).length>0;if(Y&&V)return Y0.sortModelsByReleaseDate({...Z,...W});if($==="openai-codex")return Y0.sortModelsByReleaseDate({...f,...Y0.filterOpenAICodexModels(J),...Z,...W});return Y0.sortModelsByReleaseDate({...H,...f,...J,...Q,...Z,...W})}function wU($,f){let J=Y0.resolveProviderModelCatalogKeys($);return Object.assign({},...J.map((Q)=>f[Q]??{}))}function sf($){let f=$?.trim();return f&&f.length>0?f:""}function J7($){let f=$.apiKey?.trim()||$.accessToken?.trim();return f&&f.length>0?f:void 0}function SU($){let f=2166136261;for(let J=0;J<$.length;J+=1)f^=$.charCodeAt(J),f+=(f<<1)+(f<<4)+(f<<7)+(f<<8)+(f<<24);return(f>>>0).toString(16)}function CU($,f){return`${$}:${sf(f.baseUrl)}:${SU(J7(f)??"")}`}async function of($,f,J=MU){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await fetch($,{...f,signal:Q.signal})}finally{clearTimeout(Z)}}function v1($,f,J){if(J&&!$.includes(f))$.push(f)}function ef($,f){let J=["streaming","tools"];return v1(J,"images",Boolean(f.supportsImages)),v1(J,"prompt-cache",Boolean(f.supportsPromptCache)),v1(J,"reasoning",Boolean(f.supportsReasoning)),{id:$,name:f.name??$,contextWindow:f.contextWindow,maxInputTokens:f.maxInputTokens,maxTokens:f.maxTokens,capabilities:J,releaseDate:f.releaseDate,status:"active"}}async function hU($,f){let J=await of("https://inference.baseten.co/v1/models",{method:"GET",headers:{Authorization:`Bearer ${f}`,"Content-Type":"application/json"}});if(!J.ok)throw Error(`Baseten model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;if(X.includes("whisper")||X.includes("tts")||X.includes("embedding"))continue;let H=j.supported_features??[];W[X]=ef(X,{name:X,contextWindow:j.context_length,maxInputTokens:j.context_length,maxTokens:j.max_completion_tokens,supportsReasoning:H.includes("reasoning")||H.includes("reasoning_effort"),supportsImages:!1})}return W}function YX($){if(typeof $==="number")return Number.isFinite($)?$:void 0;if(typeof $==="string"){let f=Number($);return Number.isFinite(f)?f:void 0}return}async function EU($,f){let J=await of("https://api.hicap.ai/v2/openai/models",{method:"GET",headers:{"api-key":f}});if(!J.ok)throw Error(`Hicap model refresh failed: HTTP ${J.status}`);let Z=(await J.json())?.data??[],W={};for(let j of Z){let X=j.id?.trim();if(!X)continue;W[X]=ef(X,{name:X,maxInputTokens:128000,supportsImages:!0,supportsPromptCache:!0})}return W}async function bU($,f){let Q=`${(sf($.baseUrl)||"https://inference.poolside.ai/v1").replace(/\/+$/,"")}/models`,Z=await of(Q,{method:"GET",headers:{Authorization:`Bearer ${f}`,accept:"application/json"}});if(!Z.ok)throw Error(`Poolside model refresh failed: HTTP ${Z.status}`);let j=(await Z.json())?.data??[],X={};for(let H of j){let Y=H.id?.trim();if(!Y)continue;let V=H.supported_features??[],A=H.supported_sampling_parameters??[],B=H.input_modalities??[],G=["streaming"];v1(G,"tools",V.includes("tools")),v1(G,"reasoning",V.includes("reasoning")),v1(G,"temperature",A.includes("temperature")),v1(G,"images",B.includes("image"));let K={input:YX(H.pricing?.prompt),output:YX(H.pricing?.completion)};X[Y]={id:Y,name:H.name??Y,description:H.description,contextWindow:H.context_length,maxInputTokens:H.context_length,maxTokens:H.max_completion_tokens,capabilities:G,pricing:K.input!==void 0||K.output!==void 0?K:void 0,status:"active"}}return X}function kU($){let f=sf($);if(!f)return"http://localhost:4000";return f.endsWith("/v1")?f.slice(0,-3):f}async function IU($,f){let Q=`${kU($.baseUrl)}/v1/model/info`,Z=async(Y)=>of(Q,{method:"GET",headers:{accept:"application/json",...Y}}),W=await Z({"x-litellm-api-key":f});if(!W.ok)W=await Z({Authorization:`Bearer ${f}`});if(!W.ok)throw Error(`LiteLLM model refresh failed: HTTP ${W.status}`);let X=(await W.json())?.data??[],H={};for(let Y of X){let V=Y.model_name?.trim(),B=Y.litellm_params?.model?.trim()||V;if(!B)continue;let G=Y.model_info,K=ef(B,{name:V??B,maxTokens:G?.max_output_tokens??G?.max_tokens,maxInputTokens:G?.max_input_tokens??G?.max_tokens,supportsImages:G?.supports_vision,supportsPromptCache:G?.supports_prompt_caching,supportsReasoning:G?.supports_reasoning});if(H[B]=K,V)H[V]={...K,id:V,name:V}}return H}var GX={baseten:hU,hicap:EU,litellm:IU,poolside:bU},f7=new Map,nf=new Map;function xU($,f){return`${$}:${sf(f.baseUrl)}`}async function mU($,f,J){let Q=Y0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$],Z=pf(J.baseUrl,Q?.provider.baseUrl,Q?.provider.modelsSourceUrl);if(!Z)return{};let W=f?.cacheTtlMs??BX,j=xU($,J),X=Date.now(),H=f7.get(j);if(H&&H.expiresAt>X)return H.data;let Y=nf.get(j);if(Y)return Y;let V=lf(Z,$).then((A)=>{let B=Object.fromEntries(A.map((G)=>[G,ef(G,{name:G})]));return f7.set(j,{data:B,expiresAt:X+W}),B}).finally(()=>{nf.delete(j)});return nf.set(j,V),V}function gU(){f7.clear(),nf.clear()}async function vU($,f){let J=J7(f);if(!J)return{};let Q=GX[$];if(!Q)return{};return Q(f,J)}function uU($,f,J){if(!J)return!1;if(!GX[$])return!1;if(f?.loadPrivateOnAuth===!1)return!1;return Boolean(J7(J))}async function cU($,f,J){let Q=f?.cacheTtlMs??BX,Z=CU($,J),W=Date.now(),j=$7.get(Z);if(j&&j.expiresAt>W)return j.data;let X=rf.get(Z);if(X)return X;let H=vU($,J).then((Y)=>{return $7.set(Z,{data:Y,expiresAt:W+Q}),Y}).finally(()=>{rf.delete(Z)});return rf.set(Z,H),H}async function dU($){return Y0.fetchModelsDevProviderModels($,globalThis.fetch)}async function d2($={}){let f=$.url??tf,J=$.cacheTtlMs??TU,Q=Date.now(),Z=af.get(f);if(Z&&Z.expiresAt>Q)return Z.data;let W=T4.get(f);if(W)return W;let j=dU(f).then((X)=>{return af.set(f,{data:X,expiresAt:Q+J}),X}).finally(()=>{T4.delete(f)});return T4.set(f,j),j}function Q7($){if($){af.delete($),T4.delete($);return}af.clear(),T4.clear()}function Z7(){$7.clear(),rf.clear()}function lU($){return Object.fromEntries(Object.entries($).map(([f,J])=>[f,{baseUrl:J.baseUrl,modelId:J.modelId,capabilities:AX(J.capabilities)}]))}var M4=lU(NU());function $J($){let f=_U($);if(!f)return;return{baseUrl:f.baseUrl||void 0,modelId:f.modelId,knownModels:f.knownModels,capabilities:AX(f.capabilities)}}async function q4($,f,J){let Q=$J($);if(!Q)return;try{let Z=f?.loadLatestOnInit?await d2(f):void 0,W=Z?wU($,Z):{},j=J&&uU($,f,J)?await cU($,f,J):{},H=Boolean(Y0.MODEL_COLLECTIONS_BY_PROVIDER_ID[$]?.provider.modelsSourceUrl)?J??{providerId:$,modelId:Q.modelId,baseUrl:Q.baseUrl}:J,Y=H?await mU($,f,H).catch(()=>({})):{},V=await yU($,Q.knownModels,W,j,Y,J?.knownModels);return{...Q,knownModels:V}}catch(Z){if(f?.failOnError)throw Z;return Q}}var y4=m0.BUILT_IN_PROVIDER,W7=m0.BUILT_IN_PROVIDER_IDS,j7=m0.isBuiltInProviderId,l2=m0.normalizeProviderId,w4=q.string().min(1).regex(/^[a-z0-9][a-z0-9-]*$/i),fJ=q.enum(["anthropic","gemini","openai-chat","openai-responses","openai-r1","ai-sdk"]),JJ=q.enum(["anthropic","ai-sdk","ai-sdk-community","openai","openai-compatible","openai-r1","gemini","bedrock","custom","fetch","vertex"]),QJ=q.object({apiKey:q.string().optional(),accessToken:q.string().optional(),refreshToken:q.string().optional(),expiresAt:q.number().int().positive().optional(),accountId:q.string().optional()}),pU=q.enum(["none","low","medium","high","xhigh"]),ZJ=q.object({enabled:q.boolean().optional(),effort:pU.optional(),budgetTokens:q.number().int().positive().optional()}),WJ=q.object({accessKey:q.string().optional(),secretKey:q.string().optional(),sessionToken:q.string().optional(),region:q.string().optional(),profile:q.string().optional(),authentication:q.enum(["iam","api-key","apikey","profile"]).optional(),usePromptCache:q.boolean().optional(),useCrossRegionInference:q.boolean().optional(),useGlobalInference:q.boolean().optional(),endpoint:q.string().url().optional(),customModelBaseId:q.string().optional()}),jJ=q.object({projectId:q.string().optional(),region:q.string().optional()}),XJ=q.object({apiVersion:q.string().optional(),useIdentity:q.boolean().optional()}),HJ=q.object({clientId:q.string().optional(),clientSecret:q.string().optional(),tokenUrl:q.string().url().optional(),resourceGroup:q.string().optional(),deploymentId:q.string().optional(),useOrchestrationMode:q.boolean().optional(),api:q.enum(["orchestration","foundation-models"]).optional(),defaultSettings:q.record(q.string(),q.unknown()).optional()}),YJ=q.object({mode:q.enum(["internal","external"]).optional(),usePromptCache:q.boolean().optional()}),VJ=q.object({loadLatestOnInit:q.boolean().optional(),loadPrivateOnAuth:q.boolean().optional(),url:q.string().url().optional(),cacheTtlMs:q.number().int().positive().optional(),failOnError:q.boolean().optional()}),$1=q.object({provider:w4,apiKey:q.string().optional(),auth:QJ.optional(),model:q.string().optional(),protocol:fJ.optional(),client:JJ.optional(),routingProviderId:w4.optional(),maxTokens:q.number().int().positive().optional(),contextWindow:q.number().int().positive().optional(),baseUrl:q.string().url().optional(),headers:q.record(q.string(),q.string()).optional(),timeout:q.number().int().positive().optional(),reasoning:ZJ.optional(),aws:WJ.optional(),gcp:jJ.optional(),azure:XJ.optional(),sap:HJ.optional(),oca:YJ.optional(),region:q.string().optional(),apiLine:q.enum(["china","international"]).optional(),capabilities:q.array(q.enum(["reasoning","prompt-cache","streaming","tools","vision","computer-use","oauth","popular"])).optional(),modelCatalog:VJ.optional()});function AJ($){return $1.parse($)}function BJ($){return $1.safeParse($)}function rU($){return $.protocol==="openai-responses"||$.client==="openai"}function g0($,f={}){let J=$.provider,Q=l2(J),Z=f.includeKnownModels!==!1,W=$.reasoning?.effort||"none",j=W==="none"?void 0:W,X=M4[Q],H=Object.assign({},...m0.resolveProviderModelCatalogKeys(Q).map((D)=>m0.getGeneratedModelsForProvider(D))),Y=Object.keys(H)[0],V=$.auth?.accessToken??$.apiKey??$.auth?.apiKey,A=$.baseUrl??(Q==="oca"?$.oca?.mode==="internal"?vf:uf:X?.baseUrl),B=$.routingProviderId??(rU($)&&Q!==y4.OPENAI_NATIVE?y4.OPENAI_NATIVE:void 0),G=Z?X?.knownModels??(Object.keys(H).length>0?H:void 0):void 0,K={providerId:J,clientType:$.client,routingProviderId:B,modelId:$.model??X?.modelId??Y??"default",...Z?{knownModels:G}:{},apiKey:V,accessToken:$.auth?.accessToken,refreshToken:$.auth?.refreshToken,accountId:$.auth?.accountId,baseUrl:A,headers:$.headers,timeoutMs:$.timeout,maxOutputTokens:$.maxTokens,maxInputTokens:$.contextWindow,thinking:$.reasoning?.enabled,reasoningEffort:j,thinkingBudgetTokens:$.reasoning?.budgetTokens,region:$.region??$.aws?.region??$.gcp?.region,apiLine:$.apiLine,useCrossRegionInference:$.aws?.useCrossRegionInference,useGlobalInference:$.aws?.useGlobalInference,aws:$.aws?{accessKey:$.aws.accessKey,secretKey:$.aws.secretKey,sessionToken:$.aws.sessionToken,authentication:$.aws.authentication,profile:$.aws.profile,usePromptCache:$.aws.usePromptCache,endpoint:$.aws.endpoint,customModelBaseId:$.aws.customModelBaseId}:void 0,gcp:$.gcp?{projectId:$.gcp.projectId,region:$.gcp.region}:void 0,azure:$.azure,sap:$.sap,oca:$.oca,capabilities:$.capabilities??X?.capabilities,modelCatalog:$.modelCatalog?{loadLatestOnInit:$.modelCatalog.loadLatestOnInit,loadPrivateOnAuth:$.modelCatalog.loadPrivateOnAuth,url:$.modelCatalog.url,cacheTtlMs:$.modelCatalog.cacheTtlMs,failOnError:$.modelCatalog.failOnError}:void 0};return Object.fromEntries(Object.entries(K).filter(([D,F])=>F!==void 0))}function X7($){let f=AJ($);return g0(f)}function H7($){let f=BJ($);if(f.success)return{success:!0,config:g0(f.data)};return{success:!1,error:f.error}}var S4=$1;var GJ=f1.object({settings:$1,updatedAt:f1.string().datetime(),tokenSource:f1.enum(["manual","oauth","migration"]).default("manual")}),p2=f1.object({version:f1.literal(1),lastUsedProvider:f1.string().min(1).optional(),providers:f1.record(f1.string(),GJ)});function J1(){return{version:1,providers:{}}}T$();var LX={};y(LX,{InMemoryWorkspaceManager:()=>i2});import{upsertWorkspaceInfo as tU,WorkspaceManifestSchema as V7}from"@cline/shared";var RX={};y(RX,{normalizeWorkspacePath:()=>M$,generateWorkspaceInfoWithDiagnostics:()=>C4,generateWorkspaceInfo:()=>r2,buildWorkspaceMetadataWithInfo:()=>Y7,buildWorkspaceMetadata:()=>h4});import{basename as iU,resolve as nU}from"node:path";import{performance as UX}from"node:perf_hooks";import{processWorkspaceInfo as DX}from"@cline/shared";import aU from"simple-git";function M$($){return nU($)}async function r2($){return(await C4($)).info}function KJ($){if($ instanceof Error)return{errorType:$.name?.trim()||$.constructor.name||"Error",message:$.message};return{errorType:"Error",message:String($)}}async function C4($){let f=M$($),J={rootPath:f,hint:iU(f)},Q;try{let Z=aU({baseDir:f});if(!await Z.checkIsRepo())return{info:J,vcsType:"none"};try{let j=await Z.getRemotes(!0);if(j.length>0){let X=j.map((H)=>{let Y=H.refs.fetch||H.refs.push;return`${H.name}: ${Y}`});J.associatedRemoteUrls=X}}catch(j){Q??=KJ(j)}try{let j=(await Z.revparse(["HEAD"])).trim();if(j.length>0)J.latestGitCommitHash=j}catch(j){Q??=KJ(j)}try{let j=(await Z.branch()).current.trim();if(j.length>0)J.latestGitBranchName=j}catch(j){Q??=KJ(j)}return{info:J,vcsType:"git",error:Q}}catch(Z){return{info:J,vcsType:"none",error:KJ(Z)}}}async function h4($){let f=await r2($);return DX(f)}async function Y7($){let f=UX.now(),J=await C4($),Q=UX.now()-f,Z=J.info;return{workspaceInfo:Z,workspaceMetadata:DX(Z),durationMs:Q,vcsType:J.vcsType,initError:J.error}}class i2{manifest;listeners=new Set;constructor($){this.manifest=V7.parse($??{workspaces:{}})}async addWorkspacePath($){let f=await r2($);return this.manifest=tU(this.manifest,f),this.emit({type:"workspace_added",workspace:f}),f}async switchWorkspace($){let f=M$($),J=this.manifest.workspaces[f];if(J)return this.manifest=V7.parse({...this.manifest,currentWorkspacePath:f}),this.emit({type:"workspace_switched",workspace:J}),J;let Q=await this.addWorkspacePath(f);return this.manifest=V7.parse({...this.manifest,currentWorkspacePath:Q.rootPath}),this.emit({type:"workspace_switched",workspace:Q}),Q}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}getCurrentWorkspace(){let $=this.manifest.currentWorkspacePath;if(!$)return;return this.manifest.workspaces[$]}getWorkspace($){let f=M$($);return this.manifest.workspaces[f]}listWorkspaces(){return Object.values(this.manifest.workspaces)}getManifest(){return this.manifest}emit($){for(let f of this.listeners)f($)}}L0();import{createHash as sU}from"node:crypto";var OX=new Set,zX=new Set;function oU($){return sU("sha256").update($).digest("hex")}function eU($){if($.vcsTypes&&$.vcsTypes.length>0)return $.vcsTypes;return[$.vcsType==="git"?"git":"none"]}function _X($){if(!$.telemetry)return;let f=oU($.rootPath),J=$.rootCount??1;if(!OX.has(f))OX.add(f),r6($.telemetry,{root_count:J,vcs_types:eU($),init_duration_ms:$.durationMs,feature_flag_enabled:$.featureFlagEnabled??!0,is_remote_workspace:$.isRemoteWorkspace});if($.initError&&!zX.has(f)){zX.add(f);let Q=Error($.initError.message);Q.name=$.initError.errorType||"Error",i6($.telemetry,Q,{fallback_to_single_root:!0,workspace_count:J})}}function fD($){return`${$.pluginName??$.pluginPath}: ${$.message}`}function JD($,f,J){if(f.length>0)for(let W of f)J?.log(W.message,{severity:"warn"});if($.length===0)return;let Q=$.slice(0,3).map(fD).join("; "),Z=$.length>3?`; and ${$.length-3} more`:"";J?.log(`Some plugins failed to initialize. ${Q}${Z}. Use --verbose for more details.`,{severity:"warn"});for(let W of $)J?.log(`Plugin initialization failed (${W.phase}) for ${W.pluginPath}`,{severity:"warn",stack:W.stack,pluginPath:W.pluginPath,pluginName:W.pluginName})}function QD($,f){let J=typeof $.thinking==="boolean",Q=typeof $.reasoningEffort==="string";if(!J&&!Q)return f;return{...f??{},...J?{enabled:$.thinking}:{},...Q?{effort:$.reasoningEffort}:{}}}function ZD($,f){return $D($,f)}function WD($){let f=0;for(let J of $??[]){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;f+=1}return f}function jD($){let f={...$.storedHeaders??{},...$.configHeaders??{}},J=$.accountId?.trim()||XD($.accessToken);if(f.originator="cline",f.session_id=$.sessionId,f["User-Agent"]=`Cline/${process.env.npm_package_version||"1.0.0"}`,J)f["ChatGPT-Account-Id"]=J;return f}function XD($){let f=$?.trim();if(!f)return;let J=O0(f),Q=J?.["https://api.openai.com/auth"]?.chatgpt_account_id;if(typeof Q==="string"&&Q.length>0)return Q;let Z=J?.organizations?.[0]?.id;if(typeof Z==="string"&&Z.length>0)return Z;let W=J?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;return}function HD($,f,J,Q,Z){let W=J.getProviderSettings($.providerId),j=Q||W?.modelCatalog?{...Q??{},...W?.modelCatalog??{}}:void 0,X={...W??{},provider:$.providerId,model:$.modelId,apiKey:$.apiKey??W?.apiKey,baseUrl:$.baseUrl??W?.baseUrl,headers:$.providerId==="openai-codex"?jD({sessionId:f,configHeaders:$.headers,storedHeaders:W?.headers,accountId:W?.auth?.accountId,accessToken:$.apiKey??W?.auth?.accessToken??W?.apiKey}):$.headers??W?.headers,reasoning:QD($,W?.reasoning),modelCatalog:j},H=g0(X);if($.knownModels)H.knownModels=$.knownModels;if($.extensionContext)H.extensionContext=$.extensionContext;let V=$.fetch??H.fetch??Z;if(V)H.fetch=V;return H}async function NX($){let{input:f,sessionId:J,providerSettingsManager:Q,defaultTelemetry:Z,defaultCapabilities:W,defaultToolPolicies:j,defaultFetch:X,onPluginEvent:H,onTeamEvent:Y,createSpawnTool:V,localRuntime:A,readSessionMetadata:B,writeSessionMetadata:G}=$,K=a$(f.config),{modelCatalogDefaults:D,userInstructionService:F,configExtensions:P,onTeamRestored:U,...z}=A??{},_=Object.keys(z).length>0?z:void 0,{workspaceInfo:R,workspaceMetadata:L,durationMs:N,vcsType:w,initError:Q0}=await Y7(K),Z0=_?.extensionContext,o={...Z0??{},workspace:{...R,...Z0?.workspace??{}},session:{...Z0?.session??{},sessionId:J},logger:Z0?.logger??_?.logger,telemetry:Z0?.telemetry??_?.telemetry??Z};_X({telemetry:o.telemetry,rootPath:R.rootPath,workspaceInfo:R,rootCount:1,vcsType:w,durationMs:N,initError:Q0,featureFlagEnabled:!0});let d=u2({cwd:f.config.cwd,workspacePath:K,rootSessionId:J,logger:_?.logger,workspaceInfo:R}),R0=fj(_?.hooks)?void 0:v2({rootSessionId:J,workspacePath:K,workspaceInfo:R}),b$=g1([_?.hooks,R0]),l;if(ZD(P,"plugins"))try{l=await x2({pluginPaths:_?.pluginPaths,workspacePath:K,cwd:f.config.cwd,onEvent:H,providerId:f.config.providerId,modelId:f.config.modelId,workspaceInfo:R,session:o.session,client:o.client,user:o.user,logger:o.logger,telemetry:o.telemetry,automation:o.automation}),JD(l.failures,l.warnings,_?.logger)}catch(w8){let n=w8 instanceof Error?w8.message:String(w8);_?.logger?.log?.(`plugin loading failed; continuing without plugins (${n})`)}let b=T9(d?[d]:void 0,T9(_?.extensions,Cf(l?.extensions))),i={...f.config,..._??{},sessionId:J,hooks:b$,extensions:b,extensionContext:o,telemetry:o.telemetry},h0=HD(i,J,Q,D,X),T0=g1([i.hooks,i.checkpoint?.enabled===!0?Ij({cwd:i.cwd,sessionId:J,logger:i.logger,createCheckpoint:i.checkpoint?.createCheckpoint,initialRunCount:WD(f.initialMessages),readSessionMetadata:B,writeSessionMetadata:G}):void 0]),P1={...i,providerConfig:h0,workspaceMetadata:L,hooks:T0},A2=f.toolPolicies??i.toolPolicies??j,y8=P0(W,f.capabilities),l6=y8?.requestToolApproval,g5=y8?.toolExecutors,B2=new i2({currentWorkspacePath:R.rootPath,workspaces:{[R.rootPath]:R}});return{effectiveInput:f,config:P1,providerConfig:h0,workspaceMetadata:L,workspaceInfo:R,extensions:b,hooks:T0,toolPolicies:A2,requestToolApproval:l6,pluginSandboxShutdown:l?.shutdown,runtimeBuilderInput:{config:P1,hooks:T0,extensions:b,onTeamEvent:Y,createSpawnTool:V,onTeamRestored:U,userInstructionService:F,configExtensions:P,toolExecutors:g5,workspaceManager:B2,logger:P1.logger,telemetry:P1.telemetry}}}import{existsSync as PJ,mkdirSync as YD,readdirSync as VD,rmdirSync as AD,rmSync as BD,unlinkSync as GD}from"node:fs";import{dirname as TX,join as FJ}from"node:path";function s(){return new Date().toISOString()}function E4($){if(!$||!PJ($))return;try{GD($)}catch{}}function KD($){let f=M2($);if(f)return{rootSessionId:f.rootSessionId,fileStem:`${f.agentId}__${f.teamTaskId}`};let J=Z4($);if(J)return{rootSessionId:J.rootSessionId,fileStem:J.agentId};return{rootSessionId:$,fileStem:$}}class A7{ensureSessionsDir;constructor($){this.ensureSessionsDir=$}sessionArtifactsDir($){return FJ(this.ensureSessionsDir(),$)}ensureSessionArtifactsDir($){let f=this.sessionArtifactsDir($);if(!PJ(f))YD(f,{recursive:!0});return f}sessionMessagesPath($){return FJ(this.sessionArtifactsDir($),`${$}.messages.json`)}sessionManifestPath($,f=!1){let J=f?this.ensureSessionArtifactsDir($):this.sessionArtifactsDir($);return FJ(J,`${$}.json`)}removeSessionDirIfEmpty($){let f=this.sessionArtifactsDir($),J=this.ensureSessionsDir();while(f.startsWith(J)&&f!==J){if(!PJ(f)){f=TX(f);continue}try{if(VD(f).length>0)break;AD(f)}catch{break}f=TX(f)}}removeSessionDir($){this.removeDir(this.sessionArtifactsDir($))}removeDir($){if(!PJ($))return;try{BD($,{recursive:!0,force:!0})}catch{}}subagentArtifactPaths($,f,J){let{rootSessionId:Q,fileStem:Z}=KD($),W=this.sessionArtifactsDir(Q);return{messagesPath:FJ(W,`${Z}.messages.json`)}}}import{resolveDocumentsExtensionPath as FD}from"@cline/shared/storage";L0();function MX($,f,J,Q,Z){if(J)a6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});else n6($.telemetry,{ulid:f,apiProvider:$.providerId,...Z});PD($.telemetry,{workspacePath:Q})}function PD($,f){let J=FD("Hooks"),Q=s$(f.workspacePath),Z=new Map;for(let W of Q){let j=W.hookEventName??"unknown",X=Z.get(j)??{global:0,workspace:0};if(W.path===J||W.path.startsWith(`${J}/`))X.global+=1;else X.workspace+=1;Z.set(j,X)}for(let[W,j]of Z.entries())Wf($,W,j.global,j.workspace)}function qX($,f){for(let J of f.mentions)Qf($,J,f.matchedFiles.includes(J)?1:0,"file",!f.matchedFiles.includes(J));for(let J of f.matchedFiles)ff($,"file",J.length);for(let J of f.ignoredMentions)Jf($,"file","not_found",J)}var UB={};y(UB,{ProviderSettingsManager:()=>G$});import{chmodSync as RB,existsSync as lZ,mkdirSync as Py,readFileSync as Uy,writeFileSync as Dy}from"node:fs";import{basename as LB,dirname as pZ}from"node:path";import{resolveProviderSettingsPath as Ry}from"@cline/shared/storage";var T={};y(T,{writeHubDiscovery:()=>pJ,writeGlobalSettings:()=>h2,withHubStartupLock:()=>rJ,verifyHubConnection:()=>j$,updateMcpServerOAuthState:()=>r1,updateLocalProvider:()=>T5,truncateNotificationBody:()=>E6,toggleDisabledTool:()=>wf,toTeamProgressLifecycleEvent:()=>V8,toProviderConfig:()=>g0,toHubHealthUrl:()=>XQ,toHookConfigFileName:()=>L4,summarizeUsageFromMessages:()=>y2,stopLocalHubServerGracefully:()=>RQ,startLocalOAuthServer:()=>s0,startHubWebSocketServer:()=>X2,startHubServer:()=>LA,startClineDeviceAuth:()=>U7,splitCoreSessionConfig:()=>j6,spawnDetachedHubServerWithRetry:()=>W8,spawnDetachedHubServer:()=>GQ,setTelemetryOptOutGlobally:()=>Vj,setMcpServerDisabled:()=>l1,setDisabledTools:()=>h9,setDisabledPlugin:()=>Kj,sendHubCommand:()=>TV,saveLocalProviderSettings:()=>MZ,saveLocalProviderOAuthCredentials:()=>SZ,sanitizeSessionToken:()=>y1,safeParseSettings:()=>BJ,safeCreateProviderConfig:()=>H7,runSubprocessEvent:()=>K8,runHook:()=>P8,reviveTeamStateDates:()=>Df,restartLocalHubIfIdleAfterStartupTimeout:()=>aJ,resolveWorkspaceHubOwnerContext:()=>zY,resolveWorkflowsConfigSearchPaths:()=>a4,resolveSkillsConfigSearchPaths:()=>i4,resolveSharedHubOwnerContext:()=>V0,resolveSessionBackend:()=>mQ,resolveRulesConfigSearchPaths:()=>n4,resolveProviderConfig:()=>q4,resolvePluginConfigSearchPaths:()=>P4,resolveMcpServerRegistrations:()=>Z$,resolveLocalClineAuthToken:()=>CZ,resolveHubUrl:()=>cQ,resolveHubOwnerContext:()=>y$,resolveHubEndpointOptions:()=>l0,resolveHubBuildId:()=>Y1,resolveHooksConfigSearchPaths:()=>D4,resolveDisabledToolNames:()=>Q$,resolveDisabledPluginPaths:()=>B4,resolveDefaultMcpSettingsPath:()=>z0,resolveDefaultHubPort:()=>Z8,resolveDefaultHubPathname:()=>BQ,resolveDefaultHubHost:()=>AQ,resolveCoreSelectedToolIds:()=>Lf,resolveCompatibleLocalHubUrl:()=>O6,resolveClineDir:()=>DY,resolveClineDataDir:()=>U6,resolveAndLoadAgentPlugins:()=>x2,resolveAgentPluginPaths:()=>k1,requestHubShutdown:()=>L6,requestDesktopToolApproval:()=>DZ,rememberRecoverableLocalHubUrl:()=>V1,registerRemoteConfigSessionBlobUpload:()=>D5,registerMcpServersFromSettingsFile:()=>i1,registerDisposable:()=>By,refreshProviderModelsFromSource:()=>qZ,refreshOpenAICodexToken:()=>g4,refreshOcaToken:()=>_4,refreshClineToken:()=>x4,readSessionCheckpointHistory:()=>b6,readRemoteConfigSessionBlobUploadMetadata:()=>HZ,readHubDiscovery:()=>B0,readGlobalSettings:()=>J$,probeHubServer:()=>D0,probeHubConnection:()=>NV,prewarmFileIndex:()=>Bf,prewarmDetachedHubServer:()=>iJ,prepareRemoteConfigCoreIntegration:()=>VZ,parseWorkflowConfigFromMarkdown:()=>r4,parseUserCommandEnvelope:()=>Ay,parseSkillConfigFromMarkdown:()=>l4,parseSettings:()=>AJ,parseRuleConfigFromMarkdown:()=>p4,parseHookEventPayload:()=>F8,openaiCodexOAuthProvider:()=>z7,normalizeWorkspacePath:()=>M$,normalizeUserInput:()=>Vy,normalizeSdkError:()=>Yy,normalizeRuntimeCapabilities:()=>P0,normalizeProviderId:()=>l2,normalizeOpenAICodexCredentials:()=>O7,normalizeOAuthProvider:()=>yZ,normalizeHubWebSocketUrl:()=>A1,noopBasicLogger:()=>Hy,migrateLegacyProviderSettings:()=>u6,mergeRulesForSystemPrompt:()=>e2,mergeAgentHooks:()=>g1,makeTeamTaskSubSessionId:()=>Q4,makeSubSessionId:()=>T2,loginOpenAICodex:()=>t2,loginOcaOAuth:()=>c2,loginLocalProvider:()=>wZ,loginClineOAuth:()=>a2,loadOpenTelemetryAdapter:()=>tq,loadMcpSettingsFile:()=>d1,loadLlmsConfigFromFile:()=>uZ,loadAgentPluginsFromPathsWithDiagnostics:()=>b1,loadAgentPluginsFromPaths:()=>Ef,loadAgentPluginFromPath:()=>F4,listSessionHistoryFromBackend:()=>QQ,listPluginToolsWithDiagnostics:()=>IJ,listPluginTools:()=>Z6,listMcpServerOAuthStatuses:()=>J6,listLocalProviders:()=>NZ,listHookConfigFiles:()=>s$,isToolDisabledGlobally:()=>Aj,isTelemetryOptedOutGlobally:()=>yf,isRuleEnabled:()=>qJ,isPluginDisabledGlobally:()=>Gj,isOpenAICodexTokenExpired:()=>L7,isHubReconnectableTransportError:()=>UQ,isHubCommandTimeoutError:()=>nJ,isDiscoveryFilePresent:()=>LY,isClineAccountActionRequest:()=>UJ,isBuiltInProviderId:()=>j7,identifyAccount:()=>R$,hasMcpSettingsFile:()=>q$,getValidOpenAICodexCredentials:()=>v4,getValidOcaCredentials:()=>N4,getValidClineCredentials:()=>m4,getProviderConfigFields:()=>hZ,getProviderConfig:()=>$J,getMcpServerOAuthState:()=>p1,getLocalProviderModels:()=>TZ,getLiveModelsCatalog:()=>d2,getFileIndex:()=>O$,getCurrentContextSize:()=>w9,getCoreHeadlessToolNames:()=>J4,getCoreDefaultEnabledToolIds:()=>Rf,getCoreBuiltinToolCatalog:()=>M1,getCoreAcpToolNames:()=>Of,getClineDefaultSystemPrompt:()=>oq,generateWorkspaceInfoWithDiagnostics:()=>C4,generateWorkspaceInfo:()=>r2,generateOcaOpcRequestId:()=>df,formatRulesForSystemPrompt:()=>o2,formatDisplayUserInput:()=>Xy,filterExtensionToolRegistrations:()=>Cf,filterDisabledTools:()=>h1,filterDisabledPluginPaths:()=>Sf,fetchClineRecommendedModels:()=>gZ,executeClineAccountAction:()=>DJ,ensureHubWebSocketServer:()=>K5,ensureHubServer:()=>OA,ensureDetachedHubServer:()=>NY,ensureCustomProvidersLoaded:()=>N5,ensureCompatibleLocalHubUrl:()=>e1,enrichPromptWithMentions:()=>P2,emptyWorkspaceManifest:()=>jy,emptyStoredProviderSettings:()=>J1,discoverPluginModulePaths:()=>U4,deriveSubsessionStatus:()=>W4,deleteLocalProvider:()=>M5,defineLlmsConfig:()=>vZ,createWorkflowsConfigDefinition:()=>o4,createUserInstructionConfigService:()=>Z1,createToolPoliciesWithPreset:()=>Kf,createTool:()=>Wy,createTeamName:()=>R5,createSubprocessHooks:()=>Z5,createSpawnAgentTool:()=>i$,createSkillsConfigDefinition:()=>t4,createSessionHost:()=>G8,createRuntimeHost:()=>G8,createRulesConfigDefinition:()=>s4,createRemoteConfigSessionMessagesArtifactUploader:()=>YZ,createProviderConfig:()=>X7,createOpenTelemetryTelemetryService:()=>h6,createOcaRequestHeaders:()=>o9,createOcaOAuthProvider:()=>s9,createOAuthClientCallbacks:()=>I4,createMcpTools:()=>J8,createLocalHubScheduleRuntimeHandlers:()=>F5,createLlmsSdk:()=>dZ,createInitialAccumulatedUsage:()=>A0,createInMemoryHubOwnerContext:()=>RY,createHubServerUrl:()=>o0,createHubAuthToken:()=>lJ,createHookConfigFileHooks:()=>O4,createHookConfigFileExtension:()=>u2,createHookAuditHooks:()=>v2,createDisabledMcpToolPolicy:()=>Q6,createDisabledMcpToolPolicies:()=>kJ,createDelegatedAgentConfigProvider:()=>O2,createDelegatedAgent:()=>z2,createDefaultToolsWithPreset:()=>Ff,createDefaultTools:()=>l$,createDefaultMcpServerClientFactory:()=>f8,createDefaultExecutors:()=>U2,createCoreSettingsService:()=>a1,createCoreSessionSnapshot:()=>X$,createContributionRegistry:()=>Zy,createContextCompactionPrepareTurn:()=>m8,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>O8,createClineTelemetryServiceMetadata:()=>Qy,createClineTelemetryServiceConfig:()=>Jy,createClineOAuthProvider:()=>R7,createBuiltinTools:()=>q1,createAgentTeamsTools:()=>T1,createAgentRuntime:()=>Fy,createAgentHooksExtension:()=>m2,connectToHub:()=>H5,completeClineDeviceAuth:()=>D7,clearPrivateModelsCatalogCache:()=>Z7,clearLiveModelsCatalogCache:()=>Q7,clearHubDiscovery:()=>d0,captureWorkspacePathResolved:()=>Y3,captureWorkspaceInitialized:()=>r6,captureWorkspaceInitError:()=>i6,captureToolUsage:()=>o6,captureTokenUsage:()=>t6,captureTaskRestarted:()=>a6,captureTaskCreated:()=>n6,captureTaskCompleted:()=>S8,captureSubagentExecution:()=>h8,captureSkillUsed:()=>e6,captureSdkError:()=>fy,captureProviderConfigured:()=>V3,captureProviderApiError:()=>C8,captureModeSwitch:()=>s6,captureMentionUsed:()=>ff,captureMentionSearchResults:()=>Qf,captureMentionFailed:()=>Jf,captureHookDiscovery:()=>Wf,captureExtensionActivated:()=>H3,captureDiffEditFailure:()=>$f,captureConversationTurnEvent:()=>G2,captureCompactionSkipped:()=>Xf,captureCompactionExecuted:()=>jf,captureAuthSucceeded:()=>U$,captureAuthStarted:()=>P$,captureAuthLoggedOut:()=>I$,captureAuthFailed:()=>D$,captureAgentTeamCreated:()=>Zf,captureAgentCreated:()=>x$,buildWorkspaceMetadata:()=>h4,buildTeamProgressSummary:()=>Y8,buildSdkErrorProperties:()=>eq,buildRemoteConfigSessionBlobUploadMetadata:()=>P5,buildDelegatedAgentConfig:()=>_1,bootstrapAgentTeams:()=>N2,authorizeMcpServerOAuth:()=>hJ,addLocalProvider:()=>_Z,accumulateUsageTotals:()=>H0,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>d4,UnifiedConfigFileWatcher:()=>u1,ToolPresets:()=>x0,TelemetryService:()=>R8,TelemetryLoggerSink:()=>C6,TEAM_TOOL_NAMES:()=>_2,SubprocessSandbox:()=>k2,StoredProviderSettingsSchema:()=>p2,StoredProviderSettingsEntrySchema:()=>GJ,SqliteTeamStore:()=>H2,SqliteSessionStore:()=>Y$,SessionVersioningService:()=>F1,SessionVersioningError:()=>S0,SessionSource:()=>G0,SapSettingsSchema:()=>HJ,SKILLS_CONFIG_DIRECTORY_NAME:()=>c4,SESSION_STATUSES:()=>j4,SDK_ERROR_TELEMETRY_EVENT:()=>Gy,RpcClineAccountService:()=>k4,RemoteRuntimeHost:()=>H8,ReasoningSettingsSchema:()=>ZJ,RULES_CONFIG_DIRECTORY_NAME:()=>MJ,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>U5,ProviderSettingsSchema:()=>$1,ProviderSettingsManager:()=>G$,ProviderProtocolSchema:()=>fJ,ProviderIdSchema:()=>w4,ProviderClientSchema:()=>JJ,OpenTelemetryProvider:()=>L8,OcaSettingsSchema:()=>YJ,OPENAI_COMPATIBLE_PROVIDERS:()=>M4,NodeHubClient:()=>e0,NativeHubTransportAdapter:()=>m6,ModelCatalogSettingsSchema:()=>VJ,LocalRuntimeHost:()=>B$,Llms:()=>sq,InMemoryWorkspaceManager:()=>i2,InMemoryMcpManager:()=>n1,HubUIClient:()=>pQ,HubTransportError:()=>_0,HubSessionClient:()=>lQ,HubServerTransport:()=>_8,HubScheduleService:()=>D8,HubScheduleCommandService:()=>U8,HubRuntimeHost:()=>w$,HubCommandError:()=>j8,HookEventPayloadSchema:()=>Q5,HookEventNameSchema:()=>J5,HookConfigFileName:()=>g2,HOOK_CONFIG_FILE_EVENT_MAP:()=>R4,HOOKS_CONFIG_DIRECTORY_NAME:()=>xf,GlobalSettingsSchema:()=>A4,GcpSettingsSchema:()=>jJ,FileTeamPersistenceStore:()=>S5,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>I5,DefaultToolNames:()=>f0,DefaultRuntimeBuilder:()=>M8,DefaultLlmsSdk:()=>c6,DEFAULT_MODELS_CATALOG_URL:()=>tf,DEFAULT_HUB_PORT:()=>YQ,DEFAULT_HUB_PATHNAME:()=>VQ,DEFAULT_HUB_HOST:()=>HQ,CoreSettingsService:()=>W1,CoreSessionService:()=>A$,ContributionRegistry:()=>$y,ClineCore:()=>w6,ClineAccountService:()=>b4,ChatViewStateSchema:()=>xZ,ChatSummarySchema:()=>k5,ChatSessionStatusSchema:()=>h5,ChatSessionConfigSchema:()=>C5,ChatMessageSchema:()=>b5,ChatMessageRoleSchema:()=>E5,CORE_TELEMETRY_EVENTS:()=>x,CORE_BUILD_VERSION:()=>mZ,BrowserWebSocketHubAdapter:()=>x6,BUILT_IN_PROVIDER_IDS:()=>W7,BUILT_IN_PROVIDER:()=>y4,AzureSettingsSchema:()=>XJ,AwsSettingsSchema:()=>WJ,AuthSettingsSchema:()=>QJ,AgentTeamsRuntime:()=>J2,AgentTeam:()=>B8,Agent:()=>Ky,ALL_DEFAULT_TOOL_NAMES:()=>g$});M(T,Cc);import*as sq from"@cline/llms";import{buildClineSystemPrompt as oq,buildSdkErrorProperties as eq,ContributionRegistry as $y,captureSdkError as fy,createClineTelemetryServiceConfig as Jy,createClineTelemetryServiceMetadata as Qy,createContributionRegistry as Zy,createTool as Wy,emptyWorkspaceManifest as jy,formatDisplayUserInput as Xy,noopBasicLogger as Hy,normalizeSdkError as Yy,normalizeUserInput as Vy,parseUserCommandEnvelope as Ay,registerDisposable as By,SDK_ERROR_TELEMETRY_EVENT as Gy}from"@cline/shared";import"@cline/shared/storage";var wX={};y(wX,{isClineAccountActionRequest:()=>UJ,executeClineAccountAction:()=>DJ,RpcClineAccountService:()=>k4,ClineAccountService:()=>b4});function UD($){if(typeof $!=="object"||$===null||!("error"in $))return;let f=$.error;return typeof f==="string"&&f.trim()?f:void 0}function yX($,f,J){let Q=UD(J);if(Q)return Q;let Z=f.trim();if(Z){let W=Z.length>200?`${Z.slice(0,200)}...`:Z;return`Cline account request failed with status ${$}: ${W}`}return`Cline account request failed with status ${$}`}class b4{apiBaseUrl;getAuthTokenFn;getCurrentUserIdFn;getOrganizationMemberIdFn;getHeadersFn;requestTimeoutMs;fetchImpl;constructor($){let f=$.apiBaseUrl.trim();if(!f)throw Error("apiBaseUrl is required");this.apiBaseUrl=f,this.getAuthTokenFn=$.getAuthToken,this.getCurrentUserIdFn=$.getCurrentUserId,this.getOrganizationMemberIdFn=$.getOrganizationMemberId,this.getHeadersFn=$.getHeaders,this.requestTimeoutMs=$.requestTimeoutMs??30000,this.fetchImpl=$.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($){let f=await this.resolveUserId($);return this.request(`/api/v1/users/${encodeURIComponent(f)}/balance`)}async fetchUsageTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/usages`)).items??[]}async fetchPaymentTransactions($){let f=await this.resolveUserId($);return(await this.request(`/api/v1/users/${encodeURIComponent(f)}/payments`)).paymentTransactions??[]}async fetchUserOrganizations(){return(await this.fetchMe()).organizations??[]}async fetchOrganization($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}`)}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request(`/api/v1/organizations/${encodeURIComponent(f)}/balance`)}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");let J=await this.resolveOrganizationMemberId(f,$.memberId);return(await this.request(`/api/v1/organizations/${encodeURIComponent(f)}/members/${encodeURIComponent(J)}/usages`)).items??[]}async switchAccount($){await this.request("/api/v1/users/active-account",{method:"PUT",body:{organizationId:$?.trim()||null},expectNoContent:!0})}async resolveUserId($){let f=$?.trim();if(f)return f;let Q=(this.getCurrentUserIdFn?await this.getCurrentUserIdFn():void 0)?.trim();if(Q)return Q;let Z=await this.fetchMe();if(!Z.id?.trim())throw Error("Unable to resolve current user id");return Z.id}async resolveOrganizationMemberId($,f){let J=f?.trim();if(J)return J;let Z=(this.getOrganizationMemberIdFn?await this.getOrganizationMemberIdFn($):void 0)?.trim();if(Z)return Z;let j=(await this.fetchUserOrganizations()).find((X)=>X.organizationId===$)?.memberId;if(!j?.trim())throw Error(`Unable to resolve memberId for organization ${$}`);return j}async request($,f){let J=(await this.getAuthTokenFn())?.trim();if(!J)throw Error("No Cline account auth token found");let Q=this.getHeadersFn?await this.getHeadersFn():{},Z=new AbortController,W=setTimeout(()=>Z.abort(),this.requestTimeoutMs);try{let j=await this.fetchImpl(new URL($,this.apiBaseUrl),{method:f?.method??"GET",headers:{Authorization:`Bearer ${J}`,"Content-Type":"application/json",...Q??{}},body:f?.body!==void 0?JSON.stringify(f.body):void 0,signal:Z.signal});if(j.status===204||f?.expectNoContent){if(!j.ok)throw Error(`Cline account request failed with status ${j.status}`);return}let X=await j.text(),H;if(X.trim())try{H=JSON.parse(X)}catch{if(!j.ok)throw Error(yX(j.status,X,void 0));throw Error("Cline account response was not valid JSON")}if(!j.ok)throw Error(yX(j.status,X,H));if(typeof H==="object"&&H!==null){let Y=H;if(typeof Y.success==="boolean"){if(!Y.success)throw Error(Y.error||"Cline account request failed");if(Y.data!==void 0)return Y.data}}if(H===void 0||H===null)throw Error("Cline account response payload was empty");return H}finally{clearTimeout(W)}}}function UJ($){return $.action==="clineAccount"}async function DJ($,f){switch($.operation){case"fetchMe":return f.fetchMe();case"fetchBalance":return f.fetchBalance($.userId);case"fetchUsageTransactions":return f.fetchUsageTransactions($.userId);case"fetchPaymentTransactions":return f.fetchPaymentTransactions($.userId);case"fetchUserOrganizations":return f.fetchUserOrganizations();case"fetchOrganizationBalance":return f.fetchOrganizationBalance($.organizationId);case"fetchOrganizationUsageTransactions":return f.fetchOrganizationUsageTransactions({organizationId:$.organizationId,memberId:$.memberId});case"switchAccount":return await f.switchAccount($.organizationId),{updated:!0};case"fetchFeaturebaseToken":return f.fetchFeaturebaseToken?.();default:throw Error(`Unsupported Cline account operation: ${String($)}`)}}class k4{executor;constructor($){this.executor=$}async fetchMe(){return this.request({action:"clineAccount",operation:"fetchMe"})}async fetchBalance($){return this.request({action:"clineAccount",operation:"fetchBalance",...$?.trim()?{userId:$.trim()}:{}})}async fetchUsageTransactions($){return this.request({action:"clineAccount",operation:"fetchUsageTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchPaymentTransactions($){return this.request({action:"clineAccount",operation:"fetchPaymentTransactions",...$?.trim()?{userId:$.trim()}:{}})}async fetchUserOrganizations(){return this.request({action:"clineAccount",operation:"fetchUserOrganizations"})}async fetchOrganizationBalance($){let f=$.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationBalance",organizationId:f})}async fetchOrganizationUsageTransactions($){let f=$.organizationId.trim();if(!f)throw Error("organizationId is required");return this.request({action:"clineAccount",operation:"fetchOrganizationUsageTransactions",organizationId:f,...$.memberId?.trim()?{memberId:$.memberId.trim()}:{}})}async switchAccount($){await this.request({action:"clineAccount",operation:"switchAccount",organizationId:$?.trim()||null})}async fetchFeaturebaseToken(){return this.request({action:"clineAccount",operation:"fetchFeaturebaseToken"})}async request($){return(await this.executor.runProviderAction($)).result}}var SX={};y(SX,{createOAuthClientCallbacks:()=>I4});function I4($){return{onAuth:({url:f,instructions:J})=>{if($.onOutput?.(J??"Complete sign-in in your browser."),$.openUrl)try{Promise.resolve($.openUrl(f)).catch((Q)=>{$.onOpenUrlError?.({url:f,error:Q})})}catch(Q){$.onOpenUrlError?.({url:f,error:Q})}$.onOutput?.(f)},onPrompt:$.onPrompt,onServerListening:$.onServerListening,onServerClose:$.onServerClose}}L0();var mX={};y(mX,{startClineDeviceAuth:()=>U7,refreshClineToken:()=>x4,loginClineOAuth:()=>a2,getValidClineCredentials:()=>m4,createClineOAuthProvider:()=>R7,completeClineDeviceAuth:()=>D7});import{getClineEnvironmentConfig as B7}from"@cline/shared";var RJ={authorize:"/api/v1/auth/authorize",token:"/api/v1/auth/token",register:"/api/v1/auth/register",refresh:"/api/v1/auth/refresh"},bX={deviceAuthorization:"/user_management/authorize/device",authenticate:"/user_management/authenticate"},G7="https://api.workos.com",DD="/auth",CX=Array.from({length:11},($,f)=>48801+f),RD=300000,LD=30000,n2=30000,OD=300,zD=5;class Q1 extends Error{status;errorCode;constructor($,f){super($);this.name="ClineOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 _D($){let f=Date.parse($);if(Number.isNaN(f))throw Error(`Invalid expiresAt value: ${$}`);return f}function K7($,f,J={}){let Q=$.userInfo.clineUserId??J.accountId,Z=$.refreshToken??J.refresh;if(!Z)throw Error("Token response did not include a refresh token");return{access:$.accessToken,refresh:Z,expires:_D($.expiresAt),accountId:Q??void 0,email:$.userInfo.email||J.email,metadata:{provider:f,tokenType:$.tokenType,userInfo:$.userInfo}}}async function F7($){if(!$)return{};return typeof $==="function"?await $():$}function hX($,f){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return f;return Math.floor($)}async function EX($){await new Promise((f)=>setTimeout(f,$))}function P7($,f){if(!$.success||!$.data?.accessToken)throw Error(f);return $.data}async function kX($,f){let J=await fetch(S1(G7,bX.deviceAuthorization),{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:$}),signal:AbortSignal.timeout(f?.requestTimeoutMs??n2)}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Q1(`Device authorization failed: ${J.status}${Q.error_description?` - ${Q.error_description}`:""}`,{status:J.status,errorCode:Q.error});if(!Q.device_code||!Q.user_code||!Q.verification_uri)throw Error("Invalid WorkOS device authorization response");return{deviceCode:Q.device_code,userCode:Q.user_code,verificationUri:Q.verification_uri,verificationUriComplete:Q.verification_uri_complete,expiresInSeconds:hX(Q.expires_in,OD),pollIntervalSeconds:hX(Q.interval,zD)}}async function IX($){let f=Date.now()+$.expiresInSeconds*1000,J=Math.max(1,$.initialPollIntervalSeconds);while(Date.now()<=f){let Q=await fetch(S1($.workosApiBaseUrl,bX.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:$.deviceCode,client_id:$.clientId}),signal:AbortSignal.timeout($.requestTimeoutMs)}),Z=await Q.json().catch(()=>({}));if(Q.ok){if(!Z.access_token||!Z.refresh_token)throw Error("Invalid WorkOS token response");return{accessToken:Z.access_token,refreshToken:Z.refresh_token,tokenType:Z.token_type??"Bearer"}}switch(Z.error){case"authorization_pending":{await EX(J*1000);break}case"slow_down":{J+=1,await EX(J*1000);break}case"access_denied":case"expired_token":case"invalid_grant":throw new Q1(Z.error_description||"WorkOS authorization failed",{status:Q.status,errorCode:Z.error});default:throw new Q1(`WorkOS token polling failed: ${Q.status}${Z.error_description?` - ${Z.error_description}`:""}`,{status:Q.status,errorCode:Z.error})}$.onProgress?.("Waiting for browser authentication confirmation...")}throw Error("WorkOS device authorization timed out")}async function xX($,f,J){let Q={accessToken:$.accessToken,refreshToken:$.refreshToken},Z=await fetch(S1(f.apiBaseUrl,RJ.register),{method:"POST",headers:{"Content-Type":"application/json",...await F7(f.headers)},body:JSON.stringify(Q),signal:AbortSignal.timeout(f.requestTimeoutMs??n2)});if(!Z.ok){let j=await Z.text().catch(()=>""),X=S2(j);throw new Q1(`Token registration failed: ${Z.status}${X.message?` - ${X.message}`:""}`,{status:Z.status,errorCode:X.code})}let W=await Z.json();return K7(P7(W,"Invalid token exchange response"),J??f.provider)}async function ND($,f,J,Q){let Z={grant_type:"authorization_code",code:$,client_type:"extension",redirect_uri:f,provider:Q??J.provider},W=await fetch(S1(J.apiBaseUrl,RJ.token),{method:"POST",headers:{"Content-Type":"application/json",...await F7(J.headers)},body:JSON.stringify(Z),signal:AbortSignal.timeout(J.requestTimeoutMs??n2)});if(!W.ok){let X=await W.text().catch(()=>""),H=S2(X);throw new Q1(`Token exchange failed: ${W.status}${H.message?` - ${H.message}`:""}`,{status:W.status,errorCode:H.code})}let j=await W.json();return K7(P7(j,"Invalid token exchange response"),Q??J.provider)}async function a2($){P$($.telemetry,$.provider??"cline");let f=$.useWorkOSDeviceAuth??!0,J=$.callbackPorts?.length?$.callbackPorts:CX,Q=$.callbackPath??DD,Z=f?null:await s0({ports:J,callbackPath:Q,onListening:$.callbacks.onServerListening,onClose:$.callbacks.onServerClose}),W=Z?.callbackUrl||`http://127.0.0.1:${J[0]??CX[0]}${Q}`;try{let j;if(f){let X=B7().workOsClientId,H=await kX(X,$);$.callbacks.onAuth({url:H.verificationUriComplete??H.verificationUri,instructions:`Enter this code in your browser: ${H.userCode}`});let Y=await IX({clientId:X,deviceCode:H.deviceCode,expiresInSeconds:H.expiresInSeconds,initialPollIntervalSeconds:H.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??n2,workosApiBaseUrl:G7,onProgress:$.callbacks.onProgress});j=await xX(Y,$,$.provider)}else{let X=new URL(S1($.apiBaseUrl,RJ.authorize));X.searchParams.set("client_type","extension"),X.searchParams.set("callback_url",W),X.searchParams.set("redirect_uri",W),$.callbacks.onAuth({url:X.toString(),instructions:"Continue the authentication process in your browser."});let H,Y=$.provider,V=await C2({waitForCallback:Z?.waitForCallback??(async()=>null),cancelWait:Z?.cancelWait??(()=>{}),onManualCodeInput:$.callbacks.onManualCodeInput,parseOptions:{includeProvider:!0}});if(V.error)throw Error(`OAuth error: ${V.error}`);if(H=V.code,Y=V.provider??Y,!H){let A=await $.callbacks.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),B=w2(A,{includeProvider:!0});H=B.code,Y=B.provider??Y}if(!H)throw Error("Missing authorization code");j=await ND(H,W,$,Y)}return U$($.telemetry,$.provider??"cline"),R$($.telemetry,{id:j.accountId,email:j.email,provider:$.provider??"cline"}),j}catch(j){throw D$($.telemetry,$.provider??"cline",j instanceof Error?j.message:String(j)),j}finally{Z?.close()}}async function U7($){return await kX(B7().workOsClientId,$)}async function D7($){let f=$.provider??"cline";P$($.telemetry,f);try{let J=await IX({clientId:B7().workOsClientId,deviceCode:$.deviceCode,expiresInSeconds:$.expiresInSeconds,initialPollIntervalSeconds:$.pollIntervalSeconds,requestTimeoutMs:$.requestTimeoutMs??n2,workosApiBaseUrl:G7}),Q=await xX(J,{apiBaseUrl:$.apiBaseUrl,headers:$.headers,requestTimeoutMs:$.requestTimeoutMs,provider:$.provider},$.provider);return U$($.telemetry,f),R$($.telemetry,{id:Q.accountId,email:Q.email,provider:f}),Q}catch(J){throw D$($.telemetry,f,J instanceof Error?J.message:String(J)),J}}async function x4($,f){let J=await fetch(S1(f.apiBaseUrl,RJ.refresh),{method:"POST",headers:{"Content-Type":"application/json",...await F7(f.headers)},body:JSON.stringify({refreshToken:$.refresh,grantType:"refresh_token"}),signal:AbortSignal.timeout(f.requestTimeoutMs??n2)});if(!J.ok){let W=await J.text().catch(()=>""),j=S2(W);throw new Q1(`Token refresh failed: ${J.status}${j.message?` - ${j.message}`:""}`,{status:J.status,errorCode:j.code})}let Q=await J.json(),Z=$.metadata?.provider??f.provider;return K7(P7(Q,"Invalid token refresh response"),Z,$)}async function m4($,f,J){if(!$)return null;let Q=J?.refreshBufferMs??RD,Z=J?.retryableTokenGraceMs??LD;if(J?.forceRefresh!==!0&&!C1($,Q))return $;try{return await x4($,f)}catch(j){if(j instanceof Q1&&j.isLikelyInvalidGrant())return I$(f.telemetry,f.provider??"cline","invalid_grant"),null;if($.expires-Date.now()>Z)return $;return null}}function R7($){return{id:"cline",name:"Cline Account",usesCallbackServer:!($.useWorkOSDeviceAuth??!0),async login(f){return a2({...$,callbacks:f})},async refreshToken(f){return x4(f,$)},getApiKey(f){return`workos:${f.access}`}}}L0();var uX={};y(uX,{refreshOpenAICodexToken:()=>g4,openaiCodexOAuthProvider:()=>z7,normalizeOpenAICodexCredentials:()=>O7,loginOpenAICodex:()=>t2,isOpenAICodexTokenExpired:()=>L7,getValidOpenAICodexCredentials:()=>v4,OPENAI_CODEX_OAUTH_CONFIG:()=>e});import{nanoid as TD}from"nanoid";var e={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 LJ extends Error{status;errorCode;constructor($,f){super($);this.name="OpenAICodexOAuthTokenError",this.status=f?.status,this.errorCode=f?.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 MD($,f,J=e.redirectUri){let Q=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:$,code_verifier:f,redirect_uri:J}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!Q.ok)return{type:"failed"};let Z=await Q.json();if(!Z.access_token||!Z.refresh_token||typeof Z.expires_in!=="number")return{type:"failed"};return{type:"success",access:Z.access_token,refresh:Z.refresh_token,expires:Date.now()+Z.expires_in*1000,email:Z.email,idToken:Z.id_token}}async function qD($){try{let f=await fetch(e.tokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:$,client_id:e.clientId}),signal:AbortSignal.timeout(e.httpTimeoutMs)});if(!f.ok){let Q=await f.text().catch(()=>""),Z=S2(Q);throw new LJ(`Token refresh failed: ${f.status}${Z.message?` - ${Z.message}`:""}`,{status:f.status,errorCode:Z.code})}let J=await f.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(f){if(f instanceof LJ)throw f;return{type:"failed"}}}async function yD($="pi"){let{verifier:f,challenge:J}=await Nf(),Q=TD(32),Z=new URL(e.authorizationEndpoint);return Z.searchParams.set("response_type","code"),Z.searchParams.set("client_id",e.clientId),Z.searchParams.set("redirect_uri",e.redirectUri),Z.searchParams.set("scope",e.scopes),Z.searchParams.set("code_challenge",J),Z.searchParams.set("code_challenge_method","S256"),Z.searchParams.set("state",Q),Z.searchParams.set("id_token_add_organizations","true"),Z.searchParams.set("codex_cli_simplified_flow","true"),Z.searchParams.set("originator",$),{verifier:f,state:Q,url:Z.toString()}}function wD(){try{let $=new URL(e.redirectUri),f=$.port.length>0?Number.parseInt($.port,10):e.callbackPort;return{host:$.hostname||"localhost",port:Number.isFinite(f)?f:e.callbackPort,callbackPath:$.pathname||"/auth/callback",redirectUri:$.toString()}}catch{return{host:"localhost",port:e.callbackPort,callbackPath:"/auth/callback",redirectUri:e.redirectUri}}}function gX($,f){let J=f?O0(f):O0($),Q=J?J:O0($),W=Q?.[e.jwtClaimPath]?.chatgpt_account_id;if(typeof W==="string"&&W.length>0)return W;let j=Q?.organizations;if(Array.isArray(j)&&j.length>0){let H=j[0];if(typeof H?.id==="string"&&H.id.length>0)return H.id}let X=Q?.chatgpt_account_id;if(typeof X==="string"&&X.length>0)return X;return null}function vX($,f){let J=gX($.access,$.idToken)??f?.accountId;if(!J)throw Error("Failed to extract accountId from token");return{access:$.access,refresh:$.refresh||f?.refresh||"",expires:$.expires,accountId:J,email:$.email??f?.email,metadata:{...f?.metadata??{},provider:"openai-codex"}}}async function t2($){P$($.telemetry,"openai-codex");let f=wD(),{verifier:J,state:Q,url:Z}=await yD($.originator),W=await s0({host:f.host,ports:[f.port],callbackPath:f.callbackPath,expectedState:Q});$.onAuth({url:Z,instructions:"Continue the authentication process in your browser."});let j;try{let X=await C2({waitForCallback:W.waitForCallback,cancelWait:W.cancelWait,onManualCodeInput:$.onManualCodeInput,parseOptions:{allowHashCodeState:!0}});if(X.state&&X.state!==Q)throw Error("State mismatch");if(j=X.code,!j){let V=await $.onPrompt({message:"Paste the authorization code (or full redirect URL):"}),A=w2(V,{allowHashCodeState:!0});if(A.state&&A.state!==Q)throw Error("State mismatch");j=A.code}if(!j)throw Error("Missing authorization code");let H=await MD(j,J,f.redirectUri);if(H.type!=="success")throw Error("Token exchange failed");let Y=vX(H);return U$($.telemetry,"openai-codex"),R$($.telemetry,{id:Y.accountId,email:Y.email,provider:"openai-codex"}),Y}catch(X){throw D$($.telemetry,"openai-codex",X instanceof Error?X.message:String(X)),X}finally{W.close()}}async function g4($,f){let J=await qD($);if(J.type!=="success")throw Error("Failed to refresh OpenAI Codex token");let Q=vX(J,f);if(!Q.refresh)throw Error("Failed to refresh OpenAI Codex token: missing refresh token");return Q}async function v4($,f){if(!$)return null;let J=f?.refreshBufferMs??e.refreshBufferMs,Q=f?.retryableTokenGraceMs??e.retryableTokenGraceMs;if(f?.forceRefresh!==!0&&!C1($,J))return $;try{return await g4($.refresh,$)}catch(W){if(W instanceof LJ&&W.isLikelyInvalidGrant())return I$(f?.telemetry,"openai-codex","invalid_grant"),null;if($.expires-Date.now()>Q)return $;return null}}function L7($,f=e.refreshBufferMs){return C1($,f)}function O7($){let f=$.accountId??gX($.access);if(!f)throw Error("Failed to extract accountId from token");return{...$,accountId:f,metadata:{...$.metadata??{},provider:"openai-codex"}}}var z7={id:"openai-codex",name:"ChatGPT Plus/Pro (ChatGPT Subscription)",usesCallbackServer:!0,async login($){return t2({onAuth:$.onAuth,onPrompt:$.onPrompt,onProgress:$.onProgress,onManualCodeInput:$.onManualCodeInput})},async refreshToken($){return g4($.refresh,$)},getApiKey($){return $.access}};var FV={};y(FV,{ClineCore:()=>w6});function cX($){if($===!0)return{};if(!$)return;return $}function dX($){if($==="user")return"global";return $}class _7{getService;constructor($){this.getService=$}async start(){await this.getService().start()}async stop(){await this.getService().stop()}async reconcileNow(){await this.getService().reconcileNow()}ingestEvent($){let f=this.getService().ingestEvent($);return{event:f.event,duplicate:f.duplicate,matchedSpecIds:f.matchedSpecs.map((J)=>J.specId),queuedRuns:f.queuedRuns,suppressions:f.suppressions}}listEvents($){return this.getService().listEventLogs($)}getEvent($){return this.getService().getEventLog($)}listSpecs($){return this.getService().listSpecs($)}listRuns($){return this.getService().listRuns($)}}function lX($){let{host:f}=$;return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||G0.CLI,interactive:!1,config:{providerId:l2(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:hD(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:$.getExtensionContext(),configExtensions:J.configExtensions}});return{sessionId:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content),delivery:Q.delivery});if(!Z)throw Error("ClineCore automation runtime returned no result");return{result:CD(Z)}},async abortSession(J){return await f.abort(J,Error("ClineCore automation abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}function OJ($){let f=SD($.automationService,$.automation),J=$.context?.client??($.clientName?{name:$.clientName}:void 0),Q=$.context?.user??($.distinctId?{distinctId:$.distinctId}:void 0),Z=$.context?.logger??$.logger,W=$.context?.telemetry??$.telemetry;if(!f&&!J&&!Q&&!Z&&!W)return $.context;return{...$.context??{},...J?{client:J}:{},...Q?{user:Q}:{},...Z?{logger:Z}:{},...W?{telemetry:W}:{},...f?{automation:f}:{}}}function SD($,f){if(!$)return;return{ingestEvent:(J)=>{f.ingestEvent(J)}}}function CD($){return{text:$.text,usage:{inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,cacheReadTokens:$.usage.cacheReadTokens,cacheWriteTokens:$.usage.cacheWriteTokens,totalCost:$.usage.totalCost},inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function hD($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}var CH={};y(CH,{createCoreSettingsService:()=>a1,CoreSettingsService:()=>W1});import{existsSync as xJ}from"node:fs";import{basename as yH,isAbsolute as sR,relative as oR}from"node:path";var ZH={};y(ZH,{resolveWorkflowsConfigSearchPaths:()=>a4,resolveSkillsConfigSearchPaths:()=>i4,resolveRulesConfigSearchPaths:()=>n4,parseWorkflowConfigFromMarkdown:()=>r4,parseSkillConfigFromMarkdown:()=>l4,parseRuleConfigFromMarkdown:()=>p4,createWorkflowsConfigDefinition:()=>o4,createUserInstructionConfigService:()=>Z1,createSkillsConfigDefinition:()=>t4,createRulesConfigDefinition:()=>s4,WORKFLOWS_CONFIG_DIRECTORY_NAME:()=>d4,UnifiedConfigFileWatcher:()=>u1,SKILLS_CONFIG_DIRECTORY_NAME:()=>c4,RULES_CONFIG_DIRECTORY_NAME:()=>MJ});import{createHash as ED}from"node:crypto";import{watch as bD}from"node:fs";import{readdir as kD,readFile as ID}from"node:fs/promises";import{join as xD}from"node:path";function mD($){return ED("sha1").update($).digest("hex")}function iX($){return Boolean($&&typeof $==="object"&&"code"in $)}function pX($){return iX($)&&$.code==="ENOENT"}function rX($){return iX($)&&($.code==="EACCES"||$.code==="EPERM")}class u1{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($.length===0)throw Error("UnifiedConfigFileWatcher requires at least one definition.");this.definitions=$,this.debounceMs=f?.debounceMs??75,this.emitParseErrors=f?.emitParseErrors??!1;for(let J of $){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 Q of J.directories){let Z=this.baseTypesByDirectory.get(Q);if(Z)Z.add(J.type);else this.baseTypesByDirectory.set(Q,new Set([J.type]))}}}subscribe($){return this.listeners.add($),()=>{this.listeners.delete($)}}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 $ of this.watchersByDirectory.values())$.close();this.watchersByDirectory.clear(),this.watchedTypesByDirectory=new Map}async refreshAll(){await this.enqueueRefresh(async()=>{for(let $ of this.definitions)await this.refreshTypeInternal($)})}async refreshType($){let f=this.definitionsByType.get($);if(!f)throw Error(`Unknown unified config type '${$}'.`);await this.enqueueRefresh(async()=>{await this.refreshTypeInternal(f)})}getSnapshot($){let f=this.recordsByType.get($);return new Map([...f?.entries()??[]].map(([J,Q])=>[J,{...Q}]))}getAllSnapshots(){let $=new Map;for(let[f,J]of this.recordsByType.entries())$.set(f,new Map([...J.entries()].map(([Q,Z])=>[Q,{...Z}])));return $}emit($){for(let f of this.listeners)f($)}enqueueRefresh($){return this.refreshQueue=this.refreshQueue.then($,$),this.refreshQueue}startDirectoryWatchers(){this.syncDirectoryWatchers()}syncDirectoryWatchers(){let $=this.buildDesiredTypesByDirectory();for(let[f,J]of this.watchersByDirectory.entries()){if($.has(f))continue;J.close(),this.watchersByDirectory.delete(f)}this.watchedTypesByDirectory=$;for(let f of $.keys()){if(this.watchersByDirectory.has(f))continue;try{let J=bD(f,()=>{let Q=this.watchedTypesByDirectory.get(f);if(!Q)return;for(let Z of Q)this.pendingTypes.add(Z);this.scheduleFlush()});this.watchersByDirectory.set(f,J),J.on("error",(Q)=>{let Z=this.watchedTypesByDirectory.get(f);if(!Z)return;for(let W of Z)this.emit({kind:"error",type:W,error:Q,filePath:f})})}catch(J){if(!pX(J)&&!rX(J)){let Q=$.get(f);if(!Q)continue;for(let Z of Q)this.emit({kind:"error",type:Z,error:J,filePath:f})}}}}scheduleFlush(){if(this.flushTimer)clearTimeout(this.flushTimer);this.flushTimer=setTimeout(()=>{this.flushTimer=void 0;let $=[...this.pendingTypes];this.pendingTypes.clear(),this.enqueueRefresh(async()=>{for(let f of $){let J=this.definitionsByType.get(f);if(!J)continue;await this.refreshTypeInternal(J)}})},this.debounceMs)}async refreshTypeInternal($){let{records:f,discoveredDirectories:J}=await this.loadDefinition($),Q=this.recordsByType.get($.type)??new Map;for(let[Z,W]of Q.entries()){if(f.has(Z))continue;this.emit({kind:"remove",type:$.type,id:Z,filePath:W.filePath})}for(let[Z,W]of f.entries()){let j=Q.get(Z);if(j&&j.filePath===W.filePath&&j.fingerprint===W.fingerprint)continue;this.emit({kind:"upsert",record:{type:W.type,id:Z,item:W.item,filePath:W.filePath}})}if(this.recordsByType.set($.type,f),this.discoveredDirectoriesByType.set($.type,J),this.started)this.syncDirectoryWatchers()}async loadDefinition($){let f=new Map,J=new Set;for(let Q of $.directories){J.add(Q);let Z=$.discoverFiles?await $.discoverFiles(Q):await this.readDirectoryFileCandidates(Q);for(let W of Z){let{fileName:j,filePath:X}=W;if(J.add(W.directoryPath),$.includeFile&&!$.includeFile(j,X))continue;try{let H=await ID(X,"utf8"),Y={type:$.type,directoryPath:W.directoryPath,fileName:j,filePath:X,content:H},V=$.parseFile(Y),A=$.resolveId(V,Y).trim();if(!A)continue;f.set(A,{type:$.type,id:A,item:V,filePath:X,fingerprint:mD(H)})}catch(H){if(this.emitParseErrors)this.emit({kind:"error",type:$.type,error:H,filePath:X})}}}return{records:f,discoveredDirectories:J}}buildDesiredTypesByDirectory(){let $=new Map;for(let[f,J]of this.baseTypesByDirectory.entries())$.set(f,new Set(J));for(let[f,J]of this.discoveredDirectoriesByType.entries())for(let Q of J){let Z=$.get(Q);if(Z)Z.add(f);else $.set(Q,new Set([f]))}return $}async readDirectoryFileCandidates($){try{return(await kD($,{withFileTypes:!0})).filter((J)=>J.isFile()).map((J)=>({directoryPath:$,fileName:J.name,filePath:xD($,J.name)})).sort((J,Q)=>J.fileName.localeCompare(Q.fileName))}catch(f){if(pX(f)||rX(f))return[];throw f}}}import{readdir as N7,readFile as gD,stat as nX}from"node:fs/promises";import{basename as c1,dirname as vD,extname as T7,join as y0}from"node:path";import{RULES_CONFIG_DIRECTORY_NAME as MJ,resolveRulesConfigSearchPaths as uD,resolveSkillsConfigSearchPaths as cD,resolveWorkflowsConfigSearchPaths as dD,SKILLS_CONFIG_DIRECTORY_NAME as c4,WORKFLOWS_CONFIG_DIRECTORY_NAME as d4}from"@cline/shared/storage";import lD from"yaml";var zJ="SKILL.md",pD="managed.json",rD=new Set([".md",".markdown",".txt"]);function M7($){return $.trim().toLowerCase()}function u4($){let f=$;return f?.code==="ENOENT"||f?.code==="EACCES"||f?.code==="EPERM"}function _J($){return rD.has(T7($).toLowerCase())}async function q7($){try{let f=await N7($,{withFileTypes:!0}),J=[];for(let Q of f){if(!Q.isDirectory())continue;let Z=y0($,Q.name),W=y0(Z,pD);try{let j=await gD(W,"utf8"),X=JSON.parse(j);if(X&&typeof X==="object")J.push(Z)}catch(j){if(u4(j))continue;if(j?.name==="SyntaxError")continue;throw j}}return J.sort((Q,Z)=>Q.localeCompare(Z))}catch(f){if(u4(f))return[];throw f}}function y7($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J;try{let W=lD.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}catch(W){let j=W instanceof Error?W.message:String(W);return{data:{},body:$,hadFrontmatter:!0,parseError:j}}}function NJ($,f,J){if($===void 0||$===null){if(J)throw Error(`Missing required frontmatter field '${f}'.`);return}if(typeof $!=="string")throw Error(`Frontmatter field '${f}' must be a string.`);let Q=$.trim();if(!Q&&J)throw Error(`Frontmatter field '${f}' cannot be empty.`);return Q||void 0}function s2($,f){if($===void 0||$===null)return;if(typeof $!=="boolean")throw Error(`Frontmatter field '${f}' must be a boolean.`);return $}function l4($,f){let{data:J,body:Q,parseError:Z}=y7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in skill file.");let X=NJ(J.name,"name",!1)??f.trim();if(!X)throw Error("Missing skill name.");return{name:X,description:NJ(J.description,"description",!1),disabled:s2(J.disabled,"disabled")??(s2(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function p4($,f){let{data:J,body:Q,parseError:Z}=y7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in rule file.");let j=NJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing rule name.");return{name:j,disabled:s2(J.disabled,"disabled")??(s2(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function r4($,f){let{data:J,body:Q,parseError:Z}=y7($);if(Z)throw Error(`Failed to parse YAML frontmatter: ${Z}`);let W=Q.trim();if(!W)throw Error("Missing instructions body in workflow file.");let j=NJ(J.name,"name",!1)??f.trim();if(!j)throw Error("Missing workflow name.");return{name:j,disabled:s2(J.disabled,"disabled")??(s2(J.enabled,"enabled")===!1?!0:void 0),instructions:W,frontmatter:J}}function i4($){return cD($)}function n4($){return uD($)}function a4($){return dD($)}async function aX($){if(c1($)===".cline"){let f=await q7($);return(await Promise.all(f.map((Q)=>aX(y0(Q,c4))))).flat()}try{let f=await N7($,{withFileTypes:!0}),J=[];for(let Q of f){if(Q.isFile()&&Q.name===zJ){J.push({directoryPath:$,fileName:Q.name,filePath:y0($,Q.name)});continue}if(Q.isDirectory())J.push({directoryPath:y0($,Q.name),fileName:zJ,filePath:y0($,Q.name,zJ)})}return J}catch(f){if(u4(f))return[];throw f}}async function TJ($){if(c1($)===".cline"){let f=await q7($);return(await Promise.all(f.map((Q)=>TJ(y0(Q,"rules.md"))))).flat()}try{if((await nX($)).isFile())return[{directoryPath:vD($),fileName:c1($),filePath:$}]}catch(f){if(!u4(f))throw f}try{let J=(await N7($,{withFileTypes:!0})).filter((Z)=>Z.isFile()&&_J(Z.name)).map((Z)=>({directoryPath:$,fileName:Z.name,filePath:y0($,Z.name)})),Q=y0($,"AGENTS.md");try{if((await nX(Q)).isFile()){if(!J.some((j)=>j.fileName==="AGENTS.md"))J.push({directoryPath:$,fileName:"AGENTS.md",filePath:Q})}}catch{}return J}catch(f){if(u4(f))return[];throw f}}async function iD($){if(c1($)===".cline"){let f=await q7($);return(await Promise.all(f.map((Q)=>TJ(y0(Q,d4))))).flat()}return TJ($)}function t4($){let f=$?.directories??i4($?.workspacePath),J=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"skill",directories:J?[...f,J]:f,discoverFiles:aX,includeFile:(Q)=>Q===zJ,parseFile:(Q)=>l4(Q.content,c1(Q.directoryPath)),resolveId:(Q)=>M7(Q.name)}}function s4($){let f=$?.directories??n4($?.workspacePath),J=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"rule",directories:J?[...f,J]:f,discoverFiles:TJ,includeFile:(Q,Z)=>Q===".clinerules"||_J(Q)||_J(Z),parseFile:(Q)=>p4(Q.content,c1(Q.filePath,T7(Q.filePath))),resolveId:(Q)=>M7(Q.name)}}function o4($){let f=$?.directories??a4($?.workspacePath),J=$?.workspacePath?y0($.workspacePath,".cline"):void 0;return{type:"workflow",directories:J?[...f,J]:f,discoverFiles:iD,includeFile:(Q)=>_J(Q),parseFile:(Q)=>r4(Q.content,c1(Q.filePath,T7(Q.filePath))),resolveId:(Q)=>M7(Q.name)}}function tX($){let f=[t4($?.skills),s4($?.rules),o4($?.workflows)];return new u1(f,{debounceMs:$?.debounceMs,emitParseErrors:$?.emitParseErrors})}import{truncateSplit as sX}from"@cline/shared";function nD($,f){if($.description?.trim())return sX($.description,".");if(f==="workflow")return;return sX($.instructions,".")}function aD($){return $.disabled!==!0}function oX($,f){return[...$.getSnapshot(f).entries()].map(([J,Q])=>({id:J,record:Q})).filter(({record:J})=>aD(J.item)).map(({id:J,record:Q})=>({id:J,name:Q.item.name,instructions:Q.item.instructions,description:nD(Q.item,f),kind:f})).sort((J,Q)=>J.name.localeCompare(Q.name))}function e4($){let f=new Map;for(let J of[...oX($,"workflow"),...oX($,"skill")])if(!f.has(J.name))f.set(J.name,J);return[...f.values()].sort((J,Q)=>J.name.localeCompare(Q.name))}function eX($,f){if(!$.startsWith("/")||$.length<2)return $;let J=$.match(/^\/(\S+)/);if(!J)return $;let Q=J[1];if(!Q)return $;let Z=Q.length+1,W=$.slice(Z),j=e4(f).find((X)=>X.name===Q);return j?`${j.instructions}${W}`:$}var fH={};y(fH,{mergeRulesForSystemPrompt:()=>e2,loadRulesForSystemPromptFromWatcher:()=>w7,listEnabledRulesFromWatcher:()=>$H,isRuleEnabled:()=>qJ,formatRulesForSystemPrompt:()=>o2});function qJ($){return $.disabled!==!0}function o2($){if($.length===0)return"";return`
|
|
185
|
+
|
|
186
|
+
# Rules
|
|
187
|
+
${$.map((J)=>`## ${J.name}
|
|
188
|
+
${J.instructions}`).join(`
|
|
189
|
+
|
|
190
|
+
`)}`}function e2($,f){let J=$?.trim(),Q=f?.trim();if(J&&Q)return`${J}
|
|
191
|
+
|
|
192
|
+
${Q}`;return J||Q||void 0}function $H($){return[...$.getSnapshot("rule").values()].map((J)=>J.item).filter(qJ).sort((J,Q)=>J.name.localeCompare(Q.name))}function w7($){return o2($H($))}function yJ($){return $.trim().replace(/^\/+/,"").toLowerCase()}function tD($){if(!$||$.length===0)return;let f=$.map(yJ).filter((J)=>J.length>0);return f.length>0?new Set(f):void 0}function sD($,f,J){if(!J)return!0;let Q=yJ($),Z=yJ(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function $6($,f){let J=tD(f);return[...$.getSnapshot("skill").entries()].map(([Z,W])=>{let j=W.item;return{id:Z,name:j.name.trim(),description:j.description?.trim(),disabled:j.disabled===!0,skill:j}}).filter((Z)=>sD(Z.id,Z.name,J))}function oD($,f){return $6($,f).filter((J)=>!J.disabled).map((J)=>J.name.trim()).filter((J)=>J.length>0).sort((J,Q)=>J.localeCompare(Q))}function eD($,f,J){let Q=yJ(f);if(!Q)return{error:"Missing skill name."};let Z=$6($,J),W=Z.find((V)=>V.id===Q);if(W){let{skill:V}=W;if(V.disabled===!0)return{error:`Skill "${V.name}" is configured but disabled.`};return{id:W.id,skill:V}}let j=Q.includes(":")?Q.split(":").at(-1)??Q:Q,X=Z.filter(({id:V})=>{if(V===j)return!0;return V.endsWith(`:${j}`)}),H=X.filter(({skill:V})=>V.disabled!==!0);if(H.length===1){let{id:V,skill:A}=H[0];return{id:V,skill:A}}if(H.length>1)return{error:`Skill "${f}" is ambiguous. Use one of: ${H.map(({id:V})=>V).join(", ")}`};if(X.length===1){let{skill:V}=X[0];return{error:`Skill "${V.name}" is configured but disabled.`}}if(X.length>1)return{error:`Skill "${f}" is ambiguous, and all matches are disabled: ${X.map(({id:V})=>V).join(", ")}`};let Y=oD($,J);return{error:Y.length>0?`Skill "${f}" not found. Available skills: ${Y.join(", ")}`:"No skills are currently available."}}function $R($,f=Promise.resolve(),J){let Q=new Set,Z=async(W,j)=>{await f;let X=eD($,W,J);if("error"in X)return X.error;let{id:H,skill:Y}=X;if(Q.has(H))return`Skill "${Y.name}" is already running.`;Q.add(H);try{let V=j?.trim(),A=V?`
|
|
193
|
+
<command-args>${V}</command-args>`:"",B=Y.description?.trim()?`Description: ${Y.description.trim()}
|
|
194
|
+
|
|
195
|
+
`:"";return`<command-name>${Y.name}</command-name>${A}
|
|
196
|
+
<command-instructions>
|
|
197
|
+
${B}${Y.instructions}
|
|
198
|
+
</command-instructions>`}finally{Q.delete(H)}};return Object.defineProperty(Z,"configuredSkills",{get:()=>$6($,J).map(({skill:W,...j})=>j),enumerable:!0,configurable:!1}),Z}function JH($){let f=$.watcherReady??Promise.resolve();return{name:"cline-user-instructions",manifest:{capabilities:[$.includeRules?"rules":void 0,$.registerSkillsTool?"tools":void 0,$.includeSkills||$.includeWorkflows?"commands":void 0].filter((Q)=>Boolean(Q))},async setup(Q){if(await f,$.includeRules)Q.registerRule({id:"cline-user-instructions:rules",source:"user-instruction-watcher",content:()=>w7($.watcher)});if($.registerSkillsTool)Q.registerTool(R1($R($.watcher,f,$.allowedSkillNames)));for(let Z of e4($.watcher).filter((W)=>W.kind==="skill"&&$.includeSkills||W.kind==="workflow"&&$.includeWorkflows))Q.registerCommand({name:Z.name,description:Z.description,handler:(W)=>{let j=W.trim();return j?`${Z.instructions}
|
|
199
|
+
|
|
200
|
+
${j}`:Z.instructions}})}}}class QH{watcher;ready;stopped=!1;constructor($){this.watcher=tX($)}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($){await this.start(),await this.watcher.refreshType($)}listRecords($){return[...this.watcher.getSnapshot($).entries()].map(([f,J])=>({type:$,id:f,filePath:J.filePath,item:J.item}))}listRuntimeCommands(){return e4(this.watcher)}resolveRuntimeSlashCommand($){return eX($,this.watcher)}hasConfiguredSkills($){return $6(this.watcher,$).some((f)=>!f.disabled)}createExtension($){return JH({...$,watcher:this.watcher,watcherReady:(this.ready??Promise.resolve()).catch(()=>{})})}}function Z1($){return new QH($)}import{readFile as fR,writeFile as JR}from"node:fs/promises";import jH from"yaml";function QR($){let f=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/,J=$.match(f);if(!J)return{data:{},body:$,hadFrontmatter:!1};let[,Q,Z]=J,W=jH.parse(Q);return{data:W&&typeof W==="object"&&!Array.isArray(W)?W:{},body:Z,hadFrontmatter:!0}}function WH($,f){return`---
|
|
201
|
+
${jH.stringify($).trimEnd()}
|
|
202
|
+
---
|
|
203
|
+
${f}`}function ZR($,f){let{data:J,body:Q,hadFrontmatter:Z}=QR($);if(!Z&&f)return $;if(f){if(delete J.disabled,J.enabled===!1)delete J.enabled;if(Object.keys(J).length===0)return Q;return WH(J,Q)}return J.disabled=!0,WH(J,Q)}async function XH({filePath:$,enabled:f}){let J=await fR($,"utf8"),Q=ZR(J,f);return await JR($,Q),{filePath:$,enabled:f,disabled:!f}}var TH={};y(TH,{updateMcpServerOAuthState:()=>r1,setMcpServerDisabled:()=>l1,resolveMcpServerRegistrations:()=>Z$,resolveDefaultMcpSettingsPath:()=>z0,registerMcpServersFromSettingsFile:()=>i1,loadMcpSettingsFile:()=>d1,listMcpServerOAuthStatuses:()=>J6,hasMcpSettingsFile:()=>q$,getMcpServerOAuthState:()=>p1,createMcpTools:()=>J8,createDisabledMcpToolPolicy:()=>Q6,createDisabledMcpToolPolicies:()=>kJ,createDefaultMcpServerClientFactory:()=>f8,authorizeMcpServerOAuth:()=>hJ,InMemoryMcpManager:()=>n1});import{spawn as CR}from"node:child_process";import{StringDecoder as LH}from"node:string_decoder";import{UnauthorizedError as PH}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as hR}from"@modelcontextprotocol/sdk/client/index.js";import{randomUUID as OR}from"node:crypto";import{UnauthorizedError as zR}from"@modelcontextprotocol/sdk/client/auth.js";import{Client as _R}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as NR}from"@modelcontextprotocol/sdk/client/sse.js";import{StreamableHTTPClientTransport as TR}from"@modelcontextprotocol/sdk/client/streamableHttp.js";wJ();var MR="/mcp/oauth/callback",qR=[1456,1457,1458],yR=300000;function wR($){if($ instanceof Error){let f=$.message.trim();if(f.length>0)return f}return String($)}function SR($){return{client_name:"Cline",redirect_uris:[$],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}}function CJ($){let f={};try{f=p1($.serverName,{filePath:$.settingsPath})??{}}catch{f={}}let J,Q,Z=async(j)=>{let X=$8(j(f))??{};try{f=r1($.serverName,()=>X,{filePath:$.settingsPath})}catch{f=X}};return{provider:{get redirectUrl(){return f.redirectUrl??$.redirectUrl},get clientMetadata(){return SR(f.redirectUrl??$.redirectUrl)},state:()=>{return Q=OR(),Q},clientInformation:()=>f.clientInformation,saveClientInformation:async(j)=>{await Z((X)=>({...X,clientInformation:j,redirectUrl:$.redirectUrl,lastError:void 0}))},tokens:()=>f.tokens,saveTokens:async(j)=>{await Z((X)=>({...X,tokens:j,redirectUrl:$.redirectUrl,lastError:void 0,lastAuthenticatedAt:Date.now()}))},redirectToAuthorization:async(j)=>{J=j.toString(),await $.onAuthorizationUrl?.(J)},saveCodeVerifier:async(j)=>{await Z((X)=>({...X,codeVerifier:j,redirectUrl:$.redirectUrl}))},codeVerifier:()=>{if(!f.codeVerifier)throw Error(`Missing OAuth code verifier for MCP server "${$.serverName}".`);return f.codeVerifier},invalidateCredentials:async(j)=>{await Z((X)=>{if(j==="all")return{lastError:X.lastError,redirectUrl:X.redirectUrl};return{...X,...j==="client"?{clientInformation:void 0}:{},...j==="tokens"?{tokens:void 0,lastAuthenticatedAt:void 0}:{},...j==="verifier"?{codeVerifier:void 0}:{},...j==="discovery"?{discoveryState:void 0}:{}}})},saveDiscoveryState:async(j)=>{await Z((X)=>({...X,discoveryState:j}))},discoveryState:()=>f.discoveryState},getLastAuthorizationUrl:()=>J,getLastOAuthState:()=>Q,resetInteractiveState:async()=>{await Z((j)=>({...j,clientInformation:void 0,codeVerifier:void 0,discoveryState:void 0,lastError:void 0,redirectUrl:$.redirectUrl}))},markError:async(j)=>{await Z((X)=>({...X,lastError:j}))},clearError:async()=>{await Z((j)=>({...j,lastError:void 0}))}}}function SJ($){let f=$.registration.transport;if(f.type==="stdio")throw Error(`MCP server "${$.registration.name}" uses stdio transport and does not support OAuth browser flow.`);let J=f.headers?{headers:f.headers}:void 0;if(f.type==="sse")return new NR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch});return new TR(new URL(f.url),{authProvider:$.oauthProvider,requestInit:J,fetch:$.fetch})}function FH($){return new _R({name:$.clientName?.trim()||"@cline/core",version:$.clientVersion?.trim()||"0.0.0"})}async function hJ($){let f=$.serverName.trim();if(!f)throw Error("MCP server name cannot be empty.");let{resolveMcpServerRegistrations:J}=await Promise.resolve().then(() => (wJ(),KH)),Q=J({filePath:$.filePath}).find((H)=>H.name===f);if(!Q)throw Error(`MCP server "${f}" is not configured.`);if(Q.disabled)throw Error(`MCP server "${f}" is disabled. Enable it before running OAuth.`);if(Q.transport.type==="stdio")throw Error(`MCP server "${f}" uses stdio transport and does not support OAuth browser flow.`);let Z=await s0({host:$.callbackHost,ports:$.callbackPorts?.length?$.callbackPorts:qR,callbackPath:$.callbackPath??MR,timeoutMs:$.timeoutMs??yR,successHtml:$.successHtml,onListening:$.onServerListening,onClose:$.onServerClose});if(!Z.callbackUrl)throw Error("Unable to bind local MCP OAuth callback server.");let W=CJ({settingsPath:$.filePath,serverName:f,redirectUrl:Z.callbackUrl,onAuthorizationUrl:async(H)=>{await $.openUrl?.(H)}});await W.resetInteractiveState();let j=FH($),X;try{let H=SJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});try{return await j.connect(H),await j.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" is already authorized.`}}catch(Y){if(!(Y instanceof zR))throw Y;if(!W.getLastAuthorizationUrl())throw Error(`MCP server "${f}" did not provide an authorization URL.`);let A=await Z.waitForCallback();if(!A)throw Error("Timed out waiting for MCP OAuth authorization callback.");if(A.error)throw Error(`OAuth authorization failed: ${A.error}`);if(!A.code)throw Error("OAuth callback did not include an authorization code.");let B=W.getLastOAuthState();if(!B)throw Error(`MCP server "${f}" did not start an OAuth stateful authorization flow.`);if(A.state!==B)throw Error("OAuth authorization failed: state mismatch.");await H.finishAuth(A.code),X=FH($);let G=SJ({registration:Q,oauthProvider:W.provider,fetch:$.fetch});return await X.connect(G),await X.listTools(),await W.clearError(),{serverName:f,authorized:!0,message:`MCP server "${f}" OAuth authorization completed.`}}}catch(H){let Y=wR(H);throw await W.markError(Y),Error(Y)}finally{await j.close().catch(()=>{return}),await X?.close().catch(()=>{return}),Z.close()}}var ER="2024-11-05",bR=5000,kR=1500,UH="http://127.0.0.1:1456/mcp/oauth/callback";function EJ($){return $ instanceof Error?$.message:String($)}function DH($){let f=Buffer.from(JSON.stringify($),"utf8"),J=Buffer.from(`Content-Length: ${f.byteLength}\r
|
|
204
|
+
\r
|
|
205
|
+
`,"utf8");return Buffer.concat([J,f])}function RH($){return Buffer.from(`${JSON.stringify($)}
|
|
206
|
+
`,"utf8")}class E7{buffer="";decoder=new LH("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`\r
|
|
207
|
+
\r
|
|
208
|
+
`);if(J<0)break;let Z=this.buffer.slice(0,J).match(/(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i);if(!Z)throw Error("Invalid MCP stdio frame: missing Content-Length header.");let W=Number.parseInt(Z[1],10),j=J+4,X=j+W;if(this.buffer.length<X)break;f.push(this.buffer.slice(j,X)),this.buffer=this.buffer.slice(X)}return f}}class b7{buffer="";decoder=new LH("utf8");push($){this.buffer+=this.decoder.write($);let f=[];while(!0){let J=this.buffer.indexOf(`
|
|
209
|
+
`);if(J<0)break;let Q=this.buffer.slice(0,J).trim();if(this.buffer=this.buffer.slice(J+1),Q.length>0)f.push(Q)}return f}}class OH{registration;process;nextRequestId=1;pending=new Map;framedParser=new E7;newlineParser=new b7;stderrBuffer="";connected=!1;protocolMode="newline";constructor($){this.registration=$}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 $=["newline","framed"],f;for(let J of $){await this.disconnect().catch(()=>{}),this.spawnProcess(J);try{await this.request("initialize",{protocolVersion:ER,capabilities:{},clientInfo:{name:"@cline/core",version:"0.0.0"}},kR),this.notify("notifications/initialized"),this.connected=!0,this.protocolMode=J;return}catch(Q){f=Q instanceof Error?Q:Error(String(Q))}}throw f??Error(`Failed to connect to MCP server "${this.registration.name}".`)}async disconnect(){let $=this.process;if(this.connected=!1,this.process=void 0,this.failAllPending(Error(`Disconnected from MCP server "${this.registration.name}".`)),!$)return;$.kill()}async listTools(){return((await this.request("tools/list")).tools??[]).filter((f)=>typeof f?.name==="string"&&typeof f.inputSchema==="object"&&f.inputSchema!==null).map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}async callTool($){return this.request("tools/call",{name:$.name,arguments:$.arguments??{}})}spawnProcess($){let f=this.registration.transport;if(f.type!=="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${f.type}`);this.framedParser=new E7,this.newlineParser=new b7,this.stderrBuffer="",this.protocolMode=$;let J=process.platform==="win32"?{windowsHide:!0,shell:!0}:{},Q=CR(f.command,f.args??[],{cwd:f.cwd,env:{...process.env,...f.env??{}},stdio:["pipe","pipe","pipe"],...J});this.process=Q,Q.stdout.on("data",(Z)=>this.handleStdout(Z)),Q.stderr.on("data",(Z)=>{if(this.process!==Q)return;if(this.stderrBuffer+=Z.toString("utf8"),this.stderrBuffer.length>16384)this.stderrBuffer=this.stderrBuffer.slice(-16384)}),Q.once("error",(Z)=>{if(this.process!==Q)return;this.failAllPending(Error(`MCP process error: ${EJ(Z)}`))}),Q.once("exit",(Z,W)=>{if(this.process!==Q)return;this.connected=!1,this.process=void 0;let j=this.stderrBuffer.trim()?` stderr: ${this.stderrBuffer.trim()}`:"";this.failAllPending(Error(`MCP process exited for "${this.registration.name}" (code=${Z??"null"}, signal=${W??"null"}).${j}`))})}handleStdout($){try{let f=this.protocolMode==="framed"?this.framedParser.push($):this.newlineParser.push($);for(let J of f){let Q=JSON.parse(J);if(typeof Q.id!=="number")continue;let Z=this.pending.get(Q.id);if(!Z)continue;if(this.pending.delete(Q.id),clearTimeout(Z.timeout),Q.error){let W=Q.error.message||`MCP request failed with code ${Q.error.code??"unknown"}`;Z.reject(Error(W));continue}Z.resolve(Q.result)}}catch(f){this.handleProtocolFailure(f)}}handleProtocolFailure($){let f=this.process;if(!f)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}": ${EJ($)}.${J}`)),f.kill()}async request($,f,J=bR){let Q=this.process;if(!Q?.stdin.writable)throw Error(`MCP server "${this.registration.name}" is not connected.`);let Z=this.nextRequestId++,W={jsonrpc:"2.0",id:Z,method:$,...f?{params:f}:{}},j=new Promise((X,H)=>{let Y=setTimeout(()=>{this.pending.delete(Z),H(Error(`MCP request timed out for "${this.registration.name}" (${$}).`))},J);this.pending.set(Z,{resolve:X,reject:H,timeout:Y})});try{Q.stdin.write(this.protocolMode==="framed"?DH(W):RH(W))}catch(X){let H=this.pending.get(Z);if(H)clearTimeout(H.timeout),this.pending.delete(Z);throw X}return j}notify($,f){let J=this.process;if(!J?.stdin.writable)return;let Q={jsonrpc:"2.0",method:$,...f?{params:f}:{}};J.stdin.write(this.protocolMode==="framed"?DH(Q):RH(Q))}failAllPending($){for(let[f,J]of this.pending)clearTimeout(J.timeout),this.pending.delete(f),J.reject($)}}class zH{registration;options;client;authContext;constructor($,f){this.registration=$;this.options=f}async connect(){if(this.client)return;if(this.registration.transport.type==="stdio")throw Error(`Unsupported MCP transport for "${this.registration.name}": ${this.registration.transport.type}`);let $=CJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??UH});this.authContext=$;try{let f=new hR({name:this.options.clientName?.trim()||"@cline/core",version:this.options.clientVersion?.trim()||"0.0.0"}),J=SJ({registration:this.registration,oauthProvider:$.provider,fetch:this.options.fetch});await f.connect(J),await $.clearError(),this.client=f}catch(f){let J=f instanceof PH?this.formatUnauthorizedMessage($.getLastAuthorizationUrl()):EJ(f);throw await $.markError(J),Error(J)}}async disconnect(){let $=this.client;this.client=void 0,await $?.close()}async listTools(){let $=await this.ensureConnectedClient();try{return(await $.listTools()).tools.map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema&&typeof J.inputSchema==="object"&&!Array.isArray(J.inputSchema)?J.inputSchema:{}}))}catch(f){return await this.handleOperationError(f)}}async callTool($){let f=await this.ensureConnectedClient();try{return await f.callTool({name:$.name,arguments:$.arguments??{}})}catch(J){return await this.handleOperationError(J)}}async ensureConnectedClient(){if(!this.client)await this.connect();if(!this.client)throw Error(`MCP server "${this.registration.name}" is not connected.`);return this.client}formatUnauthorizedMessage($){let f=`MCP server "${this.registration.name}" requires OAuth authorization.`;if(!$)return`${f} Run authorizeMcpServerOAuth for this server.`;return`${f} Run authorizeMcpServerOAuth for this server and complete this URL: ${$}`}async handleOperationError($){let f=this.authContext??CJ({settingsPath:this.options.settingsPath,serverName:this.registration.name,redirectUrl:this.registration.oauth?.redirectUrl??UH}),J=$ instanceof PH?this.formatUnauthorizedMessage(f.getLastAuthorizationUrl()):EJ($);throw await f.markError(J),Error(J)}}function f8($={}){return(f)=>f.transport.type==="stdio"?new OH(f):new zH(f,$)}wJ();function v0(){return Date.now()}function IR($){return $.map((f)=>({name:f.name,description:f.description,inputSchema:f.inputSchema}))}class n1{toolsCacheTtlMs;clientFactory;servers=new Map;operationLocks=new Map;constructor($){this.clientFactory=$.clientFactory,this.toolsCacheTtlMs=$.toolsCacheTtlMs??5000}async registerServer($){await this.runExclusive($.name,async()=>{let f=this.servers.get($.name);if(!f){this.servers.set($.name,{registration:{...$},status:"disconnected",updatedAt:v0()});return}let J=JSON.stringify(f.registration.transport)!==JSON.stringify($.transport);if(f.registration={...$},f.updatedAt=v0(),J)await this.disconnectState(f),f.client=void 0,f.toolCache=void 0,f.toolCacheUpdatedAt=void 0})}async unregisterServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f),this.servers.delete($)})}async connectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.connectState(f)})}async disconnectServer($){await this.runExclusive($,async()=>{let f=this.requireServer($);await this.disconnectState(f)})}async setServerDisabled($,f){await this.runExclusive($,async()=>{let J=this.requireServer($);if(J.registration={...J.registration,disabled:f},J.updatedAt=v0(),f)await this.disconnectState(J)})}listServers(){return[...this.servers.values()].map(($)=>({name:$.registration.name,status:$.status,disabled:$.registration.disabled===!0,lastError:$.lastError,toolCount:$.toolCache?.length??0,updatedAt:$.updatedAt,metadata:$.registration.metadata})).sort(($,f)=>$.name.localeCompare(f.name))}async listTools($){let f=this.requireServer($),J=f.toolCacheUpdatedAt??0;if(f.toolCache&&v0()-J<=this.toolsCacheTtlMs)return f.toolCache;return this.refreshTools($)}async refreshTools($){return this.runExclusive($,async()=>{let f=this.requireServer($),Q=await(await this.ensureConnectedClient(f)).listTools(),Z=IR(Q);return f.toolCache=Z,f.toolCacheUpdatedAt=v0(),f.updatedAt=v0(),Z})}async callTool($){return this.runExclusive($.serverName,async()=>{let f=this.requireServer($.serverName),J=await this.ensureConnectedClient(f);return f.updatedAt=v0(),J.callTool({name:$.toolName,arguments:$.arguments,context:$.context})})}async dispose(){let $=[...this.servers.keys()];for(let f of $)await this.unregisterServer(f)}async ensureConnectedClient($){if(await this.connectState($),!$.client)throw Error(`MCP server "${$.registration.name}" does not have an initialized client.`);return $.client}async connectState($){if($.registration.disabled)throw Error(`MCP server "${$.registration.name}" is disabled and cannot be connected.`);if($.status==="connected"&&$.client)return;$.status="connecting",$.updatedAt=v0();try{let f=$.client??await this.clientFactory($.registration);await f.connect(),$.client=f,$.status="connected",$.lastError=void 0,$.updatedAt=v0()}catch(f){throw $.status="disconnected",$.lastError=f instanceof Error?f.message:String(f),$.updatedAt=v0(),f}}async disconnectState($){if(!$.client){$.status="disconnected",$.updatedAt=v0();return}try{await $.client.disconnect()}finally{$.status="disconnected",$.updatedAt=v0()}}requireServer($){let f=this.servers.get($);if(!f)throw Error(`Unknown MCP server: ${$}`);return f}async runExclusive($,f){let J=this.operationLocks.get($)??Promise.resolve(),Q,Z=new Promise((j)=>{Q=j}),W=J.catch(()=>{return}).then(()=>Z);this.operationLocks.set($,W),await J.catch(()=>{return});try{return await f()}finally{if(Q?.(),this.operationLocks.get($)===W)this.operationLocks.delete($)}}}import{createHash as xR}from"node:crypto";var _H=128,mR=/[^a-zA-Z0-9_-]+/g,NH=8,gR=1,vR="mcp_tool";function uR($){return xR("sha1").update($).digest("hex").slice(0,NH)}function cR($){return $.replace(mR,"_")}var bJ=({serverName:$,toolName:f})=>{let J=`${$}__${f}`,Q=cR(J);if(Q===J&&J.length<=_H)return J;let Z=uR(J),W=_H-gR-NH;return`${Q.slice(0,W)||vR}_${Z}`};function Q6($){return{[($.nameTransform??bJ)({serverName:$.serverName,toolName:$.toolName})]:{enabled:!1}}}function kJ($){let f={};for(let J of $.toolNames)Object.assign(f,Q6({serverName:$.serverName,toolName:J,nameTransform:$.nameTransform}));return f}import{createTool as dR}from"@cline/shared";function lR($,f){let J=f.description?.trim();if(J)return J;return`Execute MCP tool "${f.name}" from server "${$}".`}async function J8($){let f=await $.provider.listTools($.serverName),J=$.nameTransform??bJ;return f.map((Q)=>{let Z=J({serverName:$.serverName,toolName:Q.name});return dR({name:Z,description:lR($.serverName,Q),inputSchema:Q.inputSchema,timeoutMs:$.timeoutMs,retryable:$.retryable,maxRetries:$.maxRetries,execute:async(W,j)=>$.provider.callTool({serverName:$.serverName,toolName:Q.name,arguments:W&&typeof W==="object"&&!Array.isArray(W)?W:void 0,context:j})})})}T$();var qH={};y(qH,{listPluginToolsWithDiagnostics:()=>IJ,listPluginTools:()=>Z6});import{stat as pR}from"node:fs/promises";T$();var rR=32,Q8=new Map;function iR($,f){if(!Q8.has($)&&Q8.size>=rR){let J=Q8.keys().next().value;if(J)Q8.delete(J)}Q8.set($,f)}async function nR($){let f=await Promise.all($.pluginPaths.map(async(J)=>{try{let Q=await pR(J);return`${J}:${Q.mtimeMs}:${Q.size}`}catch{return`${J}:missing`}}));return JSON.stringify({workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,pathStats:f})}function MH($,f){return $.map((J)=>({...J,enabled:!f.has(J.name)}))}function aR($){return $.sort((f,J)=>{let Q=f.name.localeCompare(J.name);if(Q!==0)return Q;return f.path.localeCompare(J.path)})}function tR($,f){if(!$.setup)return[];let J=[],Q={registerTool:(Z)=>J.push(Z),registerCommand:()=>{},registerMessageBuilder:()=>{},registerRule:()=>{},registerProvider:()=>{},registerAutomationEventType:()=>{}};return $.setup(Q,{workspaceInfo:f}),J}async function IJ($){let f=k1({workspacePath:$.workspacePath,cwd:$.cwd}),J=Q$($.disabledToolNames);if(f.length===0)return{tools:[],failures:[],warnings:[]};let Q=await nR({pluginPaths:f,workspacePath:$.workspacePath,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId}),Z=Q8.get(Q);if(Z)return{tools:MH(Z.tools,J),failures:Z.failures,warnings:Z.warnings};let W=[],j=[],X=[],H;try{H=await If({pluginPaths:f,cwd:$.cwd,providerId:$.providerId,modelId:$.modelId,workspaceInfo:{rootPath:$.workspacePath}}),j=[...H.failures],X=[...H.warnings];for(let A of H.extensions??[]){let B=A.__clinePluginPath;if(!B)continue;for(let G of tR(A,{rootPath:$.workspacePath}))W.push({name:G.name,pluginName:A.name,path:B,source:B.startsWith($.workspacePath)?"workspace-plugin":"global-plugin",description:G.description?.trim()||void 0})}}catch(A){j=f.map((B)=>({pluginPath:B,phase:"load",message:A instanceof Error?A.message:String(A),stack:A instanceof Error?A.stack:void 0}))}finally{await H?.shutdown().catch(()=>{})}let Y=aR(W);return iR(Q,{tools:Y,failures:j,warnings:X}),{tools:MH(Y,J),failures:j,warnings:X}}async function Z6($){return(await IJ($)).tools}function mJ($,f){if(!f)return"global";let J=oR(f,$);return!J.startsWith("..")&&!sR(J)?"workspace":"global"}function W6($){return[...$].sort((f,J)=>{let Q=(Z)=>{switch(Z){case"workspace":case"workspace-plugin":return 0;case"global":case"global-plugin":return 1;case"builtin":return 2}};if(f.source!==J.source)return Q(f.source)-Q(J.source);return f.name.localeCompare(J.name)})}function SH($){return $.workspaceRoot?.trim()||$.cwd?.trim()||""}async function wH($,f){if($.userInstructionService)return await f($.userInstructionService);let J=SH($);if(!J)return await f(void 0);let Q=Z1({skills:{workspacePath:J},rules:{workspacePath:J},workflows:{workspacePath:J}});try{return await Q.start(),await f(Q)}finally{Q.stop()}}function eR($,f){if(!$)return;let J=$.listRecords("skill");if(f.id){let Q=J.find((Z)=>Z.id===f.id);if(Q)return Q}for(let Q of J)if(Q.filePath===f.path||Q.item.name===f.name||Q.id===f.name)return Q;return}class W1{async list($={}){return await wH($,async(f)=>{let J=SH($),Q=[],Z=[],W=[],j=[],X=[];if(f){for(let Y of f.listRecords("workflow")){let V=Y.item;Q.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"workflow",source:mJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("rule")){let V=Y.item;Z.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"rule",source:mJ(Y.filePath,J),description:V.instructions,toggleable:!1})}for(let Y of f.listRecords("skill")){let V=Y.item;W.push({id:Y.id,name:V.name,path:Y.filePath,enabled:V.disabled!==!0,kind:"skill",source:mJ(Y.filePath,J),description:V.description,toggleable:!0})}}if(J)try{for(let Y of await Z6({workspacePath:J,cwd:$.cwd,providerId:$.availabilityContext?.providerId,modelId:$.availabilityContext?.modelId}))j.push({id:`${Y.pluginName}:${Y.name}:${Y.path}`,name:Y.name,path:Y.path,enabled:Y.enabled,kind:"tool",source:Y.source,description:Y.description,toggleable:!0})}catch{}let H=z0();if(q$({filePath:H}))try{for(let Y of Z$({filePath:H}))X.push({id:Y.name,name:Y.name,path:H,enabled:Y.disabled!==!0,kind:"mcp",source:mJ(H,J),description:Y.transport.type,toggleable:!0})}catch{}return{workflows:W6(Q.filter((Y)=>xJ(Y.path))),rules:W6(Z.filter((Y)=>xJ(Y.path))),skills:W6(W.filter((Y)=>xJ(Y.path))),tools:W6(j),mcp:W6(X.filter((Y)=>xJ(Y.path)))}})}async toggle($){if($.type==="skills")return await wH($,async(f)=>{let J=eR(f,$),Q=J?.filePath;if(!Q)throw Error(`Unable to resolve skill setting '${$.id??$.name??yH($.path??"")}'.`);let Z=J?.item&&"disabled"in J.item?J.item.disabled!==!0:void 0,W=$.enabled??(Z!==void 0?!Z:void 0);if(W===void 0)throw Error(`Cannot determine toggle state for skill '${$.id??$.name??yH($.path??"")}'; provide an explicit enabled value or a resolvable workspace context.`);return await XH({filePath:Q,enabled:W}),await f?.refreshType("skill"),{snapshot:await this.list({...$,userInstructionService:f}),changedTypes:["skills"]}});if($.type==="tools"){if(!$.name?.trim())throw Error("Tool settings toggle requires a tool name.");if($.enabled===void 0)wf($.name);else Bj($.name,!$.enabled);return{snapshot:await this.list($),changedTypes:["tools"]}}if($.type==="mcp"){let f=$.name?.trim()||$.id?.trim();if(!f)throw Error("MCP server settings toggle requires a server name.");let J=$.path?.trim()||z0(),Q=$.enabled;if(Q===void 0){let Z=Z$({filePath:J}).find((W)=>W.name===f);if(!Z)throw Error(`Unknown MCP server: ${f}`);Q=Z.disabled===!0}return l1({filePath:J,name:f,disabled:!Q}),{snapshot:await this.list($),changedTypes:["mcp"]}}throw Error(`Settings type '${$.type}' does not support toggles.`)}}function a1(){return new W1}function hH($){return{async list(f){let J=$;if(J.listSettings)return await J.listSettings(f);return await a1().list(f)},async toggle(f){let J=$;if(J.toggleSetting)return await J.toggleSetting(f);return await a1().toggle(f)}}}function EH($){function f(){let J=$.pendingPrompts;if(!J)throw Error("Pending prompt service is not available.");return J}return{list(J){return f().list(J)},update(J){return f().update(J)},delete(J){return f().delete(J)}}}var bH={};y(bH,{splitCoreSessionConfig:()=>j6});function j6($){let{hooks:f,logger:J,telemetry:Q,extensionContext:Z,extraTools:W,extensions:j,onTeamEvent:X,onConsecutiveMistakeLimitReached:H,checkpoint:Y,compaction:V,...A}=$,B={};if(f)B.hooks=f;if(J)B.logger=J;if(Q)B.telemetry=Q;if(Z)B.extensionContext=Z;if(W)B.extraTools=W;if(j)B.extensions=j;if(X)B.onTeamEvent=X;if(H)B.onConsecutiveMistakeLimitReached=H;if(Y?.createCheckpoint)B.checkpoint=Y;if(V?.compact)B.compaction=V;let G=Object.keys(B).length>0?B:void 0;return{config:{...A,...Y?{checkpoint:{enabled:Y.enabled}}:{},...V?{compaction:{enabled:V.enabled,strategy:V.strategy,thresholdRatio:V.thresholdRatio,reserveTokens:V.reserveTokens,preserveRecentTokens:V.preserveRecentTokens,maxInputTokens:V.maxInputTokens,summarizer:V.summarizer}}:{}},...G?{localRuntime:G}:{}}}function kH($){let f=$.config;return"providerId"in f?{...$,config:{...f,...$L($.localRuntime)},localRuntime:$.localRuntime}:$}function k7($,f={}){let J=j6($.config),Q=P0(f.defaultCapabilities,$.capabilities),Z=fL(J.localRuntime,$.localRuntime),W=f.withExtensionContext?.(Z?.extensionContext);if(W)Z={...Z??{},extensionContext:W};return{...$,...J,...Z?{localRuntime:Z}:{},...Q?{capabilities:Q}:{}}}function $L($){if(!$)return{};let{modelCatalogDefaults:f,userInstructionService:J,configExtensions:Q,onTeamRestored:Z,...W}=$;return W}function fL(...$){let f={};for(let J of $)if(J)Object.assign(f,J);return Object.keys(f).length>0?f:void 0}L0();function IH($){let f=$.input.config.telemetry??$.telemetry;if(!f)return;f.capture({event:x.SESSION.STARTED,properties:{sessionId:$.sessionId,source:$.input.source??G0.CORE,providerId:$.input.config.providerId,modelId:$.input.config.modelId,enableTools:$.input.config.enableTools,enableSpawnAgent:$.input.config.enableSpawnAgent,enableAgentTeams:$.input.config.enableAgentTeams,clientName:$.clientName,runtimeAddress:$.runtimeAddress}})}function X6($){return!!$&&typeof $==="object"&&!Array.isArray($)}function I7($){let f=$?.trim();return f?f:void 0}function JL($,f){let J=$?.trim();if(!J)return f;let Q=Date.parse(J);if(!Number.isFinite(Q))return f;return new Date(Q).toISOString()}function xH($,f){return new Date(new Date($).getTime()+Math.max(0,Math.floor(f))*1000).toISOString()}function mH($,f){return new Date(new Date($).getTime()-Math.max(0,Math.floor(f))*1000).toISOString()}function QL($,f){if(!$)return f;return new Date($).getTime()>=new Date(f).getTime()?$:f}function ZL($,f){let J=$.eventId.trim(),Q=$.eventType.trim(),Z=$.source.trim(),W=I7($.subject),j=I7($.dedupeKey)??`${Q}:${Z}:${W??J}`;return{eventId:J,eventType:Q,source:Z,subject:W,occurredAt:JL($.occurredAt,f),workspaceRoot:I7($.workspaceRoot),payload:X6($.payload)?$.payload:void 0,attributes:X6($.attributes)?$.attributes:void 0,dedupeKey:j}}function x7($,f){if(!f)return;let J=f.split("."),Q=$;for(let Z of J){if(!X6(Q))return;Q=Q[Z]}return Q}function WL($,f){if($.attributes&&Object.hasOwn($.attributes,f))return $.attributes[f];if($.payload&&Object.hasOwn($.payload,f))return $.payload[f];let J={eventId:$.eventId,eventType:$.eventType,source:$.source,subject:$.subject,occurredAt:$.occurredAt,workspaceRoot:$.workspaceRoot,dedupeKey:$.dedupeKey,attributes:$.attributes,payload:$.payload},Q=x7(J,f);if(Q!==void 0)return Q;if($.attributes){let Z=x7($.attributes,f);if(Z!==void 0)return Z}if($.payload)return x7($.payload,f);return}function gJ($,f){if(Array.isArray(f))return f.some((J)=>gJ($,J));if(Array.isArray($))return $.some((J)=>gJ(J,f));if(X6(f)){if(!X6($))return!1;return Object.entries(f).every(([J,Q])=>gJ($[J],Q))}return Object.is($,f)}function jL($,f){if(!f||Object.keys(f).length===0)return!0;return Object.entries(f).every(([J,Q])=>gJ(WL($,J),Q))}class m7{store;nowFn;logger;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now()),this.logger=$.logger}ingestEvent($){let f=new Date(this.nowFn()).toISOString(),J=ZL($,f),Q=this.store.insertEventLog(J,{receivedAtIso:f});if(!Q.created)return this.logger?.debug("cron.event.duplicate",{eventId:Q.record.eventId,eventType:Q.record.eventType,source:Q.record.source}),{event:Q.record,duplicate:!0,matchedSpecs:[],queuedRuns:[],suppressions:[{reason:"duplicate_event",dedupeKey:Q.record.dedupeKey}]};try{let Z=this.store.listEventSpecsForType(J.eventType),W=[],j=[],X=[];for(let V of Z){if(!jL(J,V.filters)){W.push({specId:V.specId,externalId:V.externalId,reason:"filter_mismatch",dedupeKey:J.dedupeKey});continue}j.push(V);let A=this.materializeForSpec(V,J,Q.record.receivedAt);if(A.run)X.push(A.run);else W.push({specId:V.specId,externalId:V.externalId,reason:A.reason,dedupeKey:J.dedupeKey})}let H=j.length===0?"unmatched":X.length>0?"queued":"suppressed";this.store.updateEventLogProcessing(Q.record.eventId,{status:H,matchedSpecCount:j.length,queuedRunCount:X.length,suppressedCount:W.filter((V)=>V.reason!=="filter_mismatch").length});let Y=this.store.getEventLog(Q.record.eventId);return this.logger?.debug("cron.event.processed",{eventId:Q.record.eventId,eventType:Q.record.eventType,status:H,matchedSpecCount:j.length,queuedRunCount:X.length}),{event:Y??Q.record,duplicate:!1,matchedSpecs:j,queuedRuns:X,suppressions:W}}catch(Z){if(this.store.updateEventLogProcessing(Q.record.eventId,{status:"failed",error:Z instanceof Error?Z.message:String(Z)}),this.logger?.error)this.logger.error("cron.event.failed",{eventId:Q.record.eventId,eventType:Q.record.eventType,error:Z});throw Z}}materializeForSpec($,f,J){let Q=f.dedupeKey??f.eventId,Z=$.debounceSeconds??0;if(Z>0){let H=this.store.findQueuedEventRunForDedupe({specId:$.specId,dedupeKey:Q});if(H){let Y=QL(H.scheduledFor,xH(J,Z)),V=this.store.updateQueuedEventRunForDebounce({runId:H.runId,triggerEventId:f.eventId,scheduledFor:Y});if(V)return{run:V,reason:"dedupe_window"}}}let W=$.dedupeWindowSeconds??0;if(W>0&&this.store.hasRecentEventRunForDedupe({specId:$.specId,dedupeKey:Q,sinceIso:mH(J,W)}))return{reason:"dedupe_window"};let j=$.cooldownSeconds??0;if(j>0&&this.store.hasRecentEventRunForSpec({specId:$.specId,sinceIso:mH(J,j)}))return{reason:"cooldown"};return{run:this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"event",triggerEventId:f.eventId,scheduledFor:Z>0?xH(J,Z):J}),reason:"dedupe_window"}}}class H6{store;nowFn;constructor($){this.store=$.store,this.nowFn=$.now??(()=>Date.now())}materializeAll(){let $={oneOffQueued:0,scheduleQueued:0},f=this.store.listSpecs({triggerKind:"one_off",enabled:!0,parseStatus:"valid"});for(let Q of f)if(this.materializeOneOff(Q))$.oneOffQueued+=1;let J=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let Q of J)try{if(this.materializeSchedule(Q))$.scheduleQueued+=1}catch{}return $}materializeOneOff($){if($.triggerKind!=="one_off")return!1;if(!$.enabled||$.removed)return!1;if(this.store.hasOneOffRunForRevision($.specId,$.revision))return!1;return this.store.enqueueRun({specId:$.specId,specRevision:$.revision,triggerKind:"one_off",scheduledFor:new Date(this.nowFn()).toISOString()}),!0}materializeSchedule($){if($.triggerKind!=="schedule")return!1;if(!$.enabled||$.removed)return!1;if(!$.scheduleExpr)return!1;return this.store.materializeDueScheduleRun({specId:$.specId,nowMs:this.nowFn()}).queued}}import{basename as GL}from"node:path";import{buildClineSystemPrompt as KL}from"@cline/shared";import{nowIso as gH}from"@cline/shared/db";import{mkdirSync as XL,writeFileSync as HL}from"node:fs";import{join as YL}from"node:path";import{resolveCronReportsDir as VL}from"@cline/shared/storage";function j1($){if(/[:#\n]/.test($)||$.includes('"'))return JSON.stringify($);return $}function t1($,f){if(f===void 0||f===null)return;return`${$}: ${j1(f)}`}function AL($,f,J){let Q=[`runId: ${j1($.runId)}`,`specId: ${j1(f.specId)}`,`externalId: ${j1(f.externalId)}`,`title: ${j1(f.title)}`,`triggerKind: ${j1($.triggerKind)}`,`status: ${j1($.status)}`,`sourcePath: ${j1(f.sourcePath)}`],Z=[t1("sessionId",$.sessionId),t1("startedAt",$.startedAt),t1("completedAt",$.completedAt),t1("triggerEventId",$.triggerEventId),t1("triggerEventType",J?.eventType),t1("triggerEventSource",J?.source),t1("triggerEventSubject",J?.subject)];for(let W of Z)if(W)Q.push(W);return`---
|
|
210
|
+
${Q.join(`
|
|
211
|
+
`)}
|
|
212
|
+
---
|
|
213
|
+
`}function BL($){let f=[];if($.triggerEvent){let J=$.triggerEvent,Q=[`- 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((Z)=>Z.length>0);f.push(`## Trigger Event
|
|
214
|
+
|
|
215
|
+
${Q.join(`
|
|
216
|
+
`)}
|
|
217
|
+
`)}if($.error)f.push(`## Error
|
|
218
|
+
|
|
219
|
+
${$.error}
|
|
220
|
+
`);if($.finalText&&$.finalText.trim().length>0)f.push(`## Summary
|
|
221
|
+
|
|
222
|
+
${$.finalText.trim()}
|
|
223
|
+
`);if($.usage){let J=$.usage,Q=[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}`:"",$.durationMs!==void 0?`- durationMs: ${$.durationMs}`:""].filter((Z)=>Z.length>0);if(Q.length>0)f.push(`## Usage
|
|
224
|
+
|
|
225
|
+
${Q.join(`
|
|
226
|
+
`)}
|
|
227
|
+
`)}if($.toolCalls&&$.toolCalls.length>0){let J=$.toolCalls.map((Q)=>{let Z=[`- ${Q.name}`];if(Q.durationMs!==void 0)Z.push(`(${Q.durationMs}ms)`);if(Q.error)Z.push(`error: ${Q.error}`);return Z.join(" ")});f.push(`## Tool Calls
|
|
228
|
+
|
|
229
|
+
${J.join(`
|
|
230
|
+
`)}
|
|
231
|
+
`)}return f.join(`
|
|
232
|
+
`)}function g7($){let f=VL($.specs);XL(f,{recursive:!0});let J=YL(f,`${$.run.runId}.md`),Q=`${AL($.run,$.spec,$.data.triggerEvent)}
|
|
233
|
+
${BL($.data)}`;return HL(J,Q,"utf8"),J}class v7{globalMaxConcurrency;activeExecutions=new Map;constructor($){this.globalMaxConcurrency=Math.max(1,Math.floor($))}acquire($,f,J){if(this.getGlobalActiveCount()>=this.globalMaxConcurrency)return!1;let Q=Math.max(1,Math.floor(J)),Z=this.activeExecutions.get($)??new Set;if(Z.size>=Q)return!1;return Z.add(f),this.activeExecutions.set($,Z),!0}release($,f){let J=this.activeExecutions.get($);if(!J)return;if(J.delete(f),J.size===0)this.activeExecutions.delete($)}getGlobalActiveCount(){let $=0;for(let f of this.activeExecutions.values())$+=f.size;return $}}var FL=15000,PL=90,vH=["rules","skills","plugins"];function UL($,f){return new Set($.extensions??vH).has(f)}function DL($,f){if($.tools===void 0)return{"*":{autoApprove:!0}};let J={"*":{enabled:!1,autoApprove:!0}};for(let Q of $.tools)J[Q]={enabled:!0,autoApprove:!0};if(f==="yolo")J[f0.SUBMIT_AND_EXIT]={enabled:!0,autoApprove:!0};return J}function RL($){let f=$?.trim();if(!f)return;return["# Notes Directory",`Use ${f} 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(`
|
|
234
|
+
`)}class u7 extends Error{constructor($){super($);this.name="TimeoutError"}}async function LL($,f){if(f<=0)return $;let J,Q=new Promise((Z,W)=>{J=setTimeout(()=>{W(new u7("cron run timed out"))},f)});try{return await Promise.race([$,Q])}finally{if(J)clearTimeout(J)}}class Y6{store;materializer;options;limiter;claimLeaseMs;timer;started=!1;ticking=!1;disposed=!1;stopping=!1;activeRuns=new Map;constructor($){this.store=$.store,this.materializer=$.materializer,this.options=$,this.limiter=new v7($.globalMaxConcurrency??10),this.claimLeaseMs=Math.max(5000,($.claimLeaseSeconds??PL)*1000)}async start(){if(this.disposed)throw Error("CronRunner disposed");if(this.started)return;this.stopping=!1,this.started=!0;let $=Math.max(2000,this.options.pollIntervalMs??FL);await this.tick(),this.timer=setInterval(()=>void this.tick(),$)}async stop(){let $=this.started;if(this.started=!1,this.stopping=!0,this.timer)clearInterval(this.timer),this.timer=void 0;if(!$)return;let f=[...this.activeRuns.entries()];await Promise.all(f.map(async([J,Q])=>{if(Q.sessionId)try{await this.options.runtimeHandlers.abortSession(Q.sessionId)}catch{}try{this.store.requeueRun({runId:J,claimToken:Q.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 $=this.store.claimDueRuns({nowIso:gH(),leaseMs:this.claimLeaseMs});await Promise.allSettled($.map((f)=>this.executeClaim(f)))}catch($){let f=this.options.logger;if(f)if(f.error)f.error("cron.runner.tick.failed",{error:$});else f.log("cron.runner.tick.failed",{error:$})}finally{this.ticking=!1}}getActiveRuns(){return[...this.activeRuns.entries()].flatMap(([$,f])=>{let J=this.store.getRun($);return J?[{...J,...f}]:[]})}async executeClaim($){let f=$.run,J=this.store.getSpec(f.specId);if(!J){this.store.completeRun(f.runId,{status:"failed",error:"spec not found",claimToken:$.claimToken});return}if(!J.enabled||J.removed){this.store.completeRun(f.runId,{status:"cancelled",error:"spec disabled or removed",claimToken:$.claimToken});return}let Q=J.maxParallel&&J.maxParallel>0?J.maxParallel:1;if(!this.limiter.acquire(J.specId,f.runId,Q)){this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"concurrency limit reached"});return}if(this.stopping){this.limiter.release(J.specId,f.runId),this.store.requeueRun({runId:f.runId,claimToken:$.claimToken,error:"runner stopped before execution"});return}this.activeRuns.set(f.runId,{claimToken:$.claimToken});let W=f.triggerEventId?this.store.getEventLog(f.triggerEventId):void 0,j,X,H=Date.now(),Y;if(J.timeoutSeconds&&J.timeoutSeconds>0)Y=H+J.timeoutSeconds*1000;try{X=this.startClaimLeaseHeartbeat($);let V=await this.buildStartRequest(J);if(j=(await this.options.runtimeHandlers.startSession(V)).sessionId.trim(),!j)throw Error("runtime returned empty sessionId");this.activeRuns.set(f.runId,{claimToken:$.claimToken,sessionId:j}),this.store.attachSessionIdToRun(f.runId,j);let B={config:V,prompt:this.buildPrompt(J,W)},G=this.options.runtimeHandlers.sendSession(j,B),K=Y?Math.max(1,Y-Date.now()):0,F=(await LL(G,K)).result,P=Date.now(),U=g7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"done"},spec:J,data:{finalText:F.text,usage:F.usage,toolCalls:F.toolCalls,durationMs:P-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"done",sessionId:j,reportPath:U,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.completed",J,f.runId),this.store.updateSpecLastRunAt(J.specId,gH())}catch(V){let A=V instanceof u7;if(j&&A)try{await this.options.runtimeHandlers.abortSession(j)}catch{}let B=V instanceof Error?V.message:String(V),G=Date.now(),K=g7({specs:this.options.specs,workspaceRoot:this.options.workspaceRoot,run:{...f,sessionId:j,status:"failed"},spec:J,data:{error:B,durationMs:G-H,triggerEvent:W}});this.store.completeRun(f.runId,{status:"failed",sessionId:j,reportPath:K,error:B,claimToken:$.claimToken}),this.publishScheduleExecutionEvent("schedule.execution.failed",J,f.runId)}finally{if(X?.(),j)try{await this.options.runtimeHandlers.stopSession(j)}catch{}this.activeRuns.delete(f.runId),this.limiter.release(J.specId,f.runId)}}publishScheduleExecutionEvent($,f,J){if(f.source!=="hub-schedule"||!this.options.eventPublisher)return;let Q=this.store.getRun(J);if(!Q)return;let Z=Q.status==="done"?"success":Q.status==="cancelled"?"aborted":Q.status==="running"?"running":Q.status==="queued"?"pending":"failed";this.options.eventPublisher($,{scheduleId:f.externalId,executionId:Q.runId,sessionId:Q.sessionId,triggeredAt:new Date(Q.scheduledFor??Q.createdAt).getTime(),startedAt:Q.startedAt?new Date(Q.startedAt).getTime():void 0,endedAt:Q.completedAt?new Date(Q.completedAt).getTime():void 0,status:Z,errorMessage:Q.error})}buildPrompt($,f){let J=$.prompt??"";if(!f)return J;let Q={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};return`${J}
|
|
235
|
+
|
|
236
|
+
Trigger event:
|
|
237
|
+
${JSON.stringify(Q,null,2)}`}startClaimLeaseHeartbeat($){let f=Math.max(1000,Math.floor(this.claimLeaseMs/2)),J=setInterval(()=>{let Q=new Date(Date.now()+this.claimLeaseMs).toISOString();if(!this.store.renewClaim($.run.runId,$.claimToken,Q))clearInterval(J)},f);return()=>clearInterval(J)}async buildSystemPrompt($,f,J,Q){let Z=RL($.notesDirectory),W=e2(void 0,Z),j=await h4(f),X=KL({ide:"Cline Cron",workspaceRoot:f,workspaceName:GL(f),metadata:j,rules:$.systemPrompt?void 0:W,mode:J,providerId:Q,overridePrompt:$.systemPrompt,platform:typeof process<"u"&&process?.platform||"unknown"});return $.systemPrompt?e2(X,W)??X:X}async buildStartRequest($){let f=($.workspaceRoot??"").trim(),J=($.providerId??"").trim(),Q=($.modelId??"").trim(),Z=$.metadata?.__hubRuntimeOptions&&typeof $.metadata.__hubRuntimeOptions==="object"&&!Array.isArray($.metadata.__hubRuntimeOptions)?$.metadata.__hubRuntimeOptions:void 0,W=typeof $.metadata?.__hubScheduleCwd==="string"&&$.metadata.__hubScheduleCwd.trim()?$.metadata.__hubScheduleCwd.trim():f;if(!f)throw Error("cron spec requires workspaceRoot");let j=$.mode==="plan"?"plan":$.mode==="act"?"act":"yolo";return{workspaceRoot:f,cwd:W,provider:J,model:Q,mode:j,source:$.source?.trim()||"user",systemPrompt:await this.buildSystemPrompt($,f,j,J),maxIterations:$.maxIterations,enableTools:Z?.enableTools??!0,enableSpawn:Z?.enableSpawn??!0,enableTeams:Z?.enableTeams??!0,autoApproveTools:Z?.autoApproveTools??!0,toolPolicies:DL($,j),configExtensions:vH.filter((X)=>UL($,X))}}}import{existsSync as dL,readdirSync as lL,readFileSync as pL,statSync as rL}from"node:fs";import{relative as iL}from"node:path";import{resolveCronSpecsDir as nL}from"@cline/shared/storage";function V6($,f,J,Q){let Z=new Set;function W(j){let X=j.toLowerCase();if(Q){let Y=Q.indexOf(X);if(Y!==-1)return Y+f}let H=Number(j);if(!Number.isInteger(H)||H<f||H>J)throw Error(`Invalid cron value "${j}" for range [${f}-${J}]`);return H}for(let j of $.split(",")){if(j==="*"){for(let Y=f;Y<=J;Y+=1)Z.add(Y);continue}let X=j.indexOf("/");if(X!==-1){let Y=j.slice(0,X),V=Number(j.slice(X+1));if(!Number.isInteger(V)||V<1)throw Error(`Invalid step "${j.slice(X+1)}"`);let A=f,B=J;if(Y!=="*"){let G=Y.indexOf("-");if(G!==-1)A=W(Y.slice(0,G)),B=W(Y.slice(G+1));else A=W(Y)}if(A>B)throw Error(`Invalid cron range "${Y}"`);for(let G=A;G<=B;G+=V)Z.add(G);continue}let H=j.indexOf("-");if(H!==-1){let Y=W(j.slice(0,H)),V=W(j.slice(H+1));if(Y>V)throw Error(`Invalid cron range "${j}"`);for(let A=Y;A<=V;A+=1)Z.add(A);continue}Z.add(W(j))}return[...Z].sort((j,X)=>j-X)}var OL=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],cH=["sun","mon","tue","wed","thu","fri","sat"];function A6($,f,J){let Q=$[f];if(typeof Q!=="string")throw Error(`Invalid cron pattern "${J}": missing field ${f+1}`);return Q}function c7($,f){let J=$[0];if(typeof J!=="number")throw Error(`Invalid cron pattern: no values parsed for ${f}`);return J}function d7($){let f=$.trim().split(/\s+/);if(f.length!==5)throw Error(`Invalid cron pattern "${$}": expected 5 fields, got ${f.length}`);return{minutes:V6(A6(f,0,$),0,59),hours:V6(A6(f,1,$),0,23),daysOfMonth:V6(A6(f,2,$),1,31),months:V6(A6(f,3,$),1,12,OL),daysOfWeek:V6(A6(f,4,$),0,6,cH)}}function l7($){d7($)}function dH($,f,J=Date.now()){s1($,J,f)}var uH=new Map,zL=new Map(cH.map(($,f)=>[$,f]));function lH($){let f=$?.trim();return f?f:void 0}function pH($){let f=uH.get($);if(f)return f;let J=new Intl.DateTimeFormat("en-US",{timeZone:$,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",weekday:"short",hour:"2-digit",minute:"2-digit",hourCycle:"h23"});return uH.set($,J),J}function _L($){let f=lH($);if(!f)return;pH(f).format(new Date)}function NL($,f){let J=pH(f).formatToParts(new Date($)),Q=new Map(J.map((j)=>[j.type,j.value])),Z=Q.get("weekday")?.toLowerCase().slice(0,3)??"",W=zL.get(Z);if(W===void 0)throw Error(`Unable to resolve weekday for timezone "${f}"`);return{month:Number(Q.get("month")),dayOfMonth:Number(Q.get("day")),dayOfWeek:W,hour:Number(Q.get("hour")),minute:Number(Q.get("minute"))}}function TL($){let f=new Date($);return{month:f.getMonth()+1,dayOfMonth:f.getDate(),dayOfWeek:f.getDay(),hour:f.getHours(),minute:f.getMinutes()}}function ML($,f){return $.months.includes(f.month)&&$.daysOfMonth.includes(f.dayOfMonth)&&$.daysOfWeek.includes(f.dayOfWeek)&&$.hours.includes(f.hour)&&$.minutes.includes(f.minute)}function qL($,f,J){let Q=d7($),Z=new Date(f);Z.setSeconds(0,0);let W=Z.getTime()+60000,j=new Date(f);j.setFullYear(j.getFullYear()+4);let X=j.getTime();while(W<=X){if(ML(Q,NL(W,J)))return W;W+=60000}throw Error(`No cron occurrence found within 4 years for pattern "${$}" in timezone "${J}"`)}function s1($,f,J){let Q=lH(J);if(Q)return _L(Q),qL($,f,Q);let Z=d7($),W=new Date(f);W.setSeconds(0,0),W=new Date(W.getTime()+60000);let j=new Date(f);j.setFullYear(j.getFullYear()+4);while(W<=j){let{month:X,dayOfMonth:H,dayOfWeek:Y,hour:V,minute:A}=TL(W.getTime());if(!Z.months.includes(X)){let B=Z.months.find((K)=>K>X)??c7(Z.months,"months"),G=B<=X?1:0;W=new Date(W.getFullYear()+G,B-1,1,0,0,0,0);continue}if(!Z.daysOfMonth.includes(H)||!Z.daysOfWeek.includes(Y)){W=new Date(W.getFullYear(),W.getMonth(),H+1,0,0,0,0);continue}if(!Z.hours.includes(V)){let B=Z.hours.find((K)=>K>V)??c7(Z.hours,"hours"),G=B<=V?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate()+G,B,0,0,0);continue}if(!Z.minutes.includes(A)){let B=Z.minutes.find((K)=>K>A)??c7(Z.minutes,"minutes"),G=B<=A?1:0;W=new Date(W.getFullYear(),W.getMonth(),W.getDate(),W.getHours()+G,B,0,0);continue}return W.getTime()}throw Error(`No cron occurrence found within 4 years for pattern "${$}"`)}import{createHash as yL}from"node:crypto";import wL from"yaml";function SL($){let f=$.replace(/\\/g,"/");if(f.startsWith("events/")&&f.endsWith(".event.md"))return"event";if(f.endsWith(".cron.md"))return"schedule";return"one_off"}function CL($){let f=$.replace(/\r\n/g,`
|
|
238
|
+
`);if(!f.startsWith(`---
|
|
239
|
+
`))return{frontmatter:void 0,body:$};let J=f.slice(4),Q=J.indexOf(`
|
|
240
|
+
---`);if(Q===-1)return{frontmatter:void 0,body:$};let Z=J.slice(0,Q),W=J.slice(Q+4);if(W.startsWith(`
|
|
241
|
+
`))W=W.slice(1);return{frontmatter:Z,body:W}}function u0($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function hL($){if(!Array.isArray($))return;let f=$.map((J)=>typeof J==="string"?J.trim():"").filter((J)=>J.length>0);return f.length>0?f:void 0}function i7($){if(!$||typeof $!=="object"||Array.isArray($))return;return $}function EL($){let f=i7($);if(!f)return;let J=u0(f.providerId),Q=u0(f.modelId);if(J===void 0&&Q===void 0)return;return{providerId:J,modelId:Q}}function bL($){if(typeof $!=="string")return;let f=$.trim().toLowerCase();if(f==="act"||f==="plan"||f==="yolo")return f;return}function iH($,f={}){let J=Array.isArray($)?$:typeof $==="string"?$.split(","):void 0;if(!J)return;let Q=[...new Set(J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0))];if(Array.isArray($)&&f.preserveEmptyArray)return Q;return Q.length>0?Q:void 0}var kL=new Set(g$);function IL($){let f=iH($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Q)=>!kL.has(Q));if(J.length>0)throw Error(`unknown tool(s): ${J.join(", ")}`);return f}var xL=new Set(["rules","skills","plugins"]);function mL($){let f=iH($,{preserveEmptyArray:!0});if(!f)return;let J=f.filter((Q)=>!xL.has(Q));if(J.length>0)throw Error(`unknown extension(s): ${J.join(", ")}`);return f}function p7($){if(typeof $!=="number"||!Number.isFinite($)||$<=0)return;return Math.floor($)}function r7($){if(typeof $!=="number"||!Number.isFinite($)||$<0)return;return Math.floor($)}function n7($){if($===null||typeof $!=="object")return JSON.stringify($??null);if(Array.isArray($))return`[${$.map((J)=>n7(J)).join(",")}]`;let f=Object.entries($).filter(([,J])=>J!==void 0);return f.sort(([J],[Q])=>J<Q?-1:J>Q?1:0),`{${f.map(([J,Q])=>`${JSON.stringify(J)}:${n7(Q)}`).join(",")}}`}function nH($,f){let J=yL("sha256");return J.update(n7($)),J.update(`
|
|
242
|
+
`),J.update(f),J.digest("hex")}function gL($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}var vL=["schedule","timezone"],uL=["event","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds","maxParallel"],cL=["cwd"];function rH($,f,J,Q,Z){return{externalId:$,relativePath:$,triggerKind:f,body:J,contentHash:nH(Q,J),error:Z}}function W$($,f,J,Q,Z,W){return{externalId:$,relativePath:f,triggerKind:J,body:Q,contentHash:Z,error:W}}function aH($){let f=$.relativePath.replace(/\\/g,"/"),J=SL(f),{frontmatter:Q,body:Z}=CL($.raw),W={};if(Q!==void 0&&Q.trim().length>0)try{let U=wL.parse(Q);if(U&&typeof U==="object"&&!Array.isArray(U))W=U;else if(U!==null&&U!==void 0)return rH(f,J,Z,{},"frontmatter must be a YAML mapping")}catch(U){return rH(f,J,Z,{},U instanceof Error?`failed to parse frontmatter: ${U.message}`:"failed to parse frontmatter")}let j=nH(W,Z),X=u0(W.id),H=X??f;if(J!=="schedule"){for(let U of vL)if(W[U]!==void 0)return W$(H,f,J,Z,j,`field "${U}" is only allowed on *.cron.md specs`)}for(let U of cL)if(W[U]!==void 0)return W$(H,f,J,Z,j,`field "${U}" is no longer supported; cron specs use workspaceRoot as cwd`);if(J!=="event"){for(let U of uL)if(W[U]!==void 0)return W$(H,f,J,Z,j,`field "${U}" is only allowed on .event.md specs`)}let Y=u0(W.prompt),V=Z.trim(),A=Y??(V.length>0?V:void 0);if(!A)return W$(H,f,J,Z,j,"prompt is required (frontmatter `prompt` or markdown body)");let B=u0(W.workspaceRoot);if(!B)return W$(H,f,J,Z,j,"workspaceRoot is required");let G,K;try{G=IL(W.tools),K=mL(W.extensions)}catch(U){return W$(H,f,J,Z,j,U instanceof Error?U.message:String(U))}let D=bL(W.mode);if(W.mode!==void 0&&D===void 0)return W$(H,f,J,Z,j,"mode must be one of: act, plan, yolo");let F={id:X,title:u0(W.title)??X??gL(f),prompt:A,workspaceRoot:B,mode:D??"yolo",systemPrompt:u0(W.systemPrompt),modelSelection:EL(W.modelSelection),maxIterations:p7(W.maxIterations),timeoutSeconds:p7(W.timeoutSeconds),tools:G,notesDirectory:u0(W.notesDirectory),extensions:K,source:u0(W.source)??"user",tags:hL(W.tags),enabled:typeof W.enabled==="boolean"?W.enabled:!0,metadata:i7(W.metadata)},P;if(J==="schedule"){let U=u0(W.schedule);if(!U)return W$(H,f,J,Z,j,"schedule is required for *.cron.md specs");let z=u0(W.timezone);try{dH(U,z)}catch(R){return W$(H,f,J,Z,j,R instanceof Error?R.message:String(R))}P={...F,triggerKind:"schedule",schedule:U,timezone:z}}else if(J==="event"){let U=u0(W.event);if(!U)return W$(H,f,J,Z,j,"event is required for .event.md specs");P={...F,triggerKind:"event",event:U,filters:i7(W.filters),debounceSeconds:r7(W.debounceSeconds),dedupeWindowSeconds:r7(W.dedupeWindowSeconds),cooldownSeconds:r7(W.cooldownSeconds),maxParallel:p7(W.maxParallel)}}else P={...F,triggerKind:"one_off"};return{externalId:H,relativePath:f,triggerKind:J,body:Z,contentHash:j,spec:P}}function aL($,f){return iL($,f).replace(/\\/g,"/")}function tL($){if(!dL($))return[];let f=[],J=[$];while(J.length>0){let Q=J.pop();if(!Q)continue;let Z;try{Z=lL(Q,{withFileTypes:!0})}catch{continue}for(let W of Z){let j=`${Q}/${W.name}`;if(W.isDirectory()){if(W.name==="reports")continue;J.push(j);continue}if(!W.isFile())continue;if(!W.name.endsWith(".md"))continue;f.push(j)}}return f}class a7{store;cronDir;constructor($){this.store=$.store,this.cronDir=nL($.specs??($.workspaceRoot?{scope:"workspace",workspaceRoot:$.workspaceRoot}:void 0))}getCronDir(){return this.cronDir}async reconcileAll(){let $={scanned:0,upserted:0,invalidParses:0,removed:0,changes:[]},f=tL(this.cronDir),J=new Set;for(let Z of f){let W=aL(this.cronDir,Z);J.add(W),$.scanned+=1;let j=await this.reconcileFile(W,Z);if(j){if($.changes.push(j),$.upserted+=1,j.parse.error)$.invalidParses+=1}}let Q=this.store.listSpecs({includeRemoved:!1,limit:1e4});for(let Z of Q)if(!J.has(Z.sourcePath))this.handleFileDeleted(Z),$.removed+=1;return this.refreshScheduleNextRunAt(),$}async reconcileFile($,f){let J=this.store.getSpecBySourcePath($),Q,Z;try{Q=pL(f,"utf8"),Z=rL(f).mtimeMs}catch{return}let j=aH({relativePath:$,raw:Q}),X=this.store.upsertSpec({externalId:j.externalId,sourcePath:$,triggerKind:j.triggerKind,sourceMtimeMs:Z,sourceHash:j.contentHash,parseStatus:j.error?"invalid":"valid",parseError:j.error,spec:j.spec});if(!j.error&&j.triggerKind==="schedule"&&X.record.enabled)this.applyScheduleNextRunAt(X.record,{forceReset:!J||J.removed||!J.enabled||J.scheduleExpr!==X.record.scheduleExpr||J.timezone!==X.record.timezone});return{relativePath:$,result:X,parse:j}}handleFileDeleted($){this.store.markSpecRemoved($.specId),this.store.cancelQueuedRunsForSpec($.specId)}refreshScheduleNextRunAt(){let $=this.store.listSpecs({triggerKind:"schedule",enabled:!0,parseStatus:"valid"});for(let f of $)this.applyScheduleNextRunAt(f,{forceReset:!1})}applyScheduleNextRunAt($,f){if(!$.scheduleExpr)return;if(!f.forceReset&&$.nextRunAt)return;try{let J=Date.now(),Q=$.lastRunAt?Math.max(J,new Date($.lastRunAt).getTime()):J,Z=s1($.scheduleExpr,Q,$.timezone),W=new Date(Z).toISOString();if($.nextRunAt!==W)this.store.updateSpecNextRunAt($.specId,W)}catch{}}}import{existsSync as sL,mkdirSync as oL,watch as eL}from"node:fs";import{relative as $O,resolve as fO}from"node:path";var JO=250;class t7{reconciler;debounceMs;onError;onReconciled;watcher;pending=new Map;disposed=!1;constructor($){this.reconciler=$.reconciler,this.debounceMs=Math.max(0,$.debounceMs??JO),this.onError=$.onError??(()=>{}),this.onReconciled=$.onReconciled??(()=>{})}start(){if(this.disposed)throw Error("CronWatcher disposed");if(this.watcher)return;let $=this.reconciler.getCronDir();try{oL($,{recursive:!0}),this.watcher=eL($,{recursive:!0},(f,J)=>{if(!J)return;let Q=String(J).replace(/\\/g,"/");if(!Q.endsWith(".md"))return;if(Q.startsWith("reports/"))return;this.scheduleReconcile(Q)}),this.watcher.on("error",this.onError)}catch(f){this.onError(f)}}stop(){for(let $ of this.pending.values())clearTimeout($);this.pending.clear(),this.watcher?.close(),this.watcher=void 0}dispose(){this.disposed=!0,this.stop()}scheduleReconcile($){let f=this.pending.get($);if(f)clearTimeout(f);let J=setTimeout(()=>{this.pending.delete($),this.reconcileNow($)},this.debounceMs);this.pending.set($,J)}async reconcileNow($){try{let f=fO(this.reconciler.getCronDir(),$);if(!sL(f)){await this.reconciler.reconcileAll(),await this.onReconciled();return}let J=$O(this.reconciler.getCronDir(),f).replace(/\\/g,"/");await this.reconciler.reconcileFile(J,f),await this.onReconciled()}catch(f){this.onError(f)}}}import{randomUUID as B6}from"node:crypto";import{asOptionalString as I,asString as t,loadSqliteDb as ZO,nowIso as U0}from"@cline/shared/db";import{resolveCronDbPath as WO}from"@cline/shared/storage";var QO=[`CREATE TABLE IF NOT EXISTS cron_specs (
|
|
243
|
+
spec_id TEXT PRIMARY KEY,
|
|
244
|
+
external_id TEXT NOT NULL,
|
|
245
|
+
source_path TEXT NOT NULL UNIQUE,
|
|
246
|
+
trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event')),
|
|
247
|
+
source_mtime_ms INTEGER,
|
|
248
|
+
source_hash TEXT,
|
|
249
|
+
parse_status TEXT NOT NULL CHECK (parse_status IN ('valid', 'invalid')),
|
|
250
|
+
parse_error TEXT,
|
|
251
|
+
enabled INTEGER NOT NULL DEFAULT 1,
|
|
252
|
+
removed INTEGER NOT NULL DEFAULT 0,
|
|
253
|
+
title TEXT NOT NULL,
|
|
254
|
+
prompt TEXT,
|
|
255
|
+
workspace_root TEXT,
|
|
256
|
+
schedule_expr TEXT,
|
|
257
|
+
timezone TEXT,
|
|
258
|
+
event_type TEXT,
|
|
259
|
+
filters_json TEXT,
|
|
260
|
+
debounce_seconds INTEGER,
|
|
261
|
+
dedupe_window_seconds INTEGER,
|
|
262
|
+
cooldown_seconds INTEGER,
|
|
263
|
+
mode TEXT,
|
|
264
|
+
system_prompt TEXT,
|
|
265
|
+
provider_id TEXT,
|
|
266
|
+
model_id TEXT,
|
|
267
|
+
max_iterations INTEGER,
|
|
268
|
+
timeout_seconds INTEGER,
|
|
269
|
+
max_parallel INTEGER,
|
|
270
|
+
tools_json TEXT,
|
|
271
|
+
notes_directory TEXT,
|
|
272
|
+
extensions_json TEXT,
|
|
273
|
+
source TEXT,
|
|
274
|
+
tags_json TEXT,
|
|
275
|
+
metadata_json TEXT,
|
|
276
|
+
revision INTEGER NOT NULL DEFAULT 1,
|
|
277
|
+
last_materialized_run_id TEXT,
|
|
278
|
+
last_run_at TEXT,
|
|
279
|
+
next_run_at TEXT,
|
|
280
|
+
created_at TEXT NOT NULL,
|
|
281
|
+
updated_at TEXT NOT NULL
|
|
282
|
+
);`,`CREATE TABLE IF NOT EXISTS cron_runs (
|
|
283
|
+
run_id TEXT PRIMARY KEY,
|
|
284
|
+
spec_id TEXT NOT NULL REFERENCES cron_specs(spec_id) ON DELETE CASCADE,
|
|
285
|
+
spec_revision INTEGER NOT NULL,
|
|
286
|
+
trigger_kind TEXT NOT NULL CHECK (trigger_kind IN ('one_off', 'schedule', 'event', 'manual', 'retry')),
|
|
287
|
+
status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'done', 'failed', 'cancelled')),
|
|
288
|
+
claim_token TEXT,
|
|
289
|
+
claim_started_at TEXT,
|
|
290
|
+
claim_until_at TEXT,
|
|
291
|
+
scheduled_for TEXT,
|
|
292
|
+
trigger_event_id TEXT,
|
|
293
|
+
started_at TEXT,
|
|
294
|
+
completed_at TEXT,
|
|
295
|
+
session_id TEXT,
|
|
296
|
+
report_path TEXT,
|
|
297
|
+
error TEXT,
|
|
298
|
+
attempt_count INTEGER NOT NULL DEFAULT 0,
|
|
299
|
+
created_at TEXT NOT NULL,
|
|
300
|
+
updated_at TEXT NOT NULL
|
|
301
|
+
);`,`CREATE TABLE IF NOT EXISTS cron_event_log (
|
|
302
|
+
event_id TEXT PRIMARY KEY,
|
|
303
|
+
event_type TEXT NOT NULL,
|
|
304
|
+
source TEXT NOT NULL,
|
|
305
|
+
subject TEXT,
|
|
306
|
+
occurred_at TEXT NOT NULL,
|
|
307
|
+
received_at TEXT NOT NULL,
|
|
308
|
+
workspace_root TEXT,
|
|
309
|
+
dedupe_key TEXT,
|
|
310
|
+
payload_json TEXT,
|
|
311
|
+
attributes_json TEXT,
|
|
312
|
+
processing_status TEXT NOT NULL DEFAULT 'received'
|
|
313
|
+
CHECK (processing_status IN ('received', 'unmatched', 'queued', 'suppressed', 'failed')),
|
|
314
|
+
matched_spec_count INTEGER NOT NULL DEFAULT 0,
|
|
315
|
+
queued_run_count INTEGER NOT NULL DEFAULT 0,
|
|
316
|
+
suppressed_count INTEGER NOT NULL DEFAULT 0,
|
|
317
|
+
error TEXT,
|
|
318
|
+
created_at TEXT NOT NULL,
|
|
319
|
+
updated_at TEXT NOT NULL
|
|
320
|
+
);`,"DROP INDEX IF EXISTS cron_runs_one_off_active_idx;",`CREATE UNIQUE INDEX IF NOT EXISTS cron_runs_one_off_active_idx
|
|
321
|
+
ON cron_runs(spec_id, spec_revision)
|
|
322
|
+
WHERE trigger_kind = 'one_off';`,`CREATE INDEX IF NOT EXISTS cron_runs_claimable_idx
|
|
323
|
+
ON cron_runs(status, scheduled_for, claim_until_at);`,`CREATE INDEX IF NOT EXISTS cron_runs_spec_idx
|
|
324
|
+
ON cron_runs(spec_id, created_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_runs_trigger_event_idx
|
|
325
|
+
ON cron_runs(trigger_event_id);`,`CREATE INDEX IF NOT EXISTS cron_runs_event_spec_status_idx
|
|
326
|
+
ON cron_runs(spec_id, trigger_kind, status, scheduled_for);`,`CREATE INDEX IF NOT EXISTS cron_event_log_type_idx
|
|
327
|
+
ON cron_event_log(event_type, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_received_idx
|
|
328
|
+
ON cron_event_log(received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_event_log_dedupe_idx
|
|
329
|
+
ON cron_event_log(event_type, source, dedupe_key, received_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_next_run_idx
|
|
330
|
+
ON cron_specs(trigger_kind, enabled, next_run_at);`,`CREATE INDEX IF NOT EXISTS cron_specs_event_match_idx
|
|
331
|
+
ON cron_specs(trigger_kind, event_type, enabled);`,`CREATE INDEX IF NOT EXISTS cron_specs_parse_status_idx
|
|
332
|
+
ON cron_specs(parse_status, updated_at DESC);`,`CREATE INDEX IF NOT EXISTS cron_specs_source_path_idx
|
|
333
|
+
ON cron_specs(source_path);`];function tH($){$.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec("PRAGMA foreign_keys = ON;");for(let f of QO)$.exec(f)}function vJ($){if(!$)return;try{let f=JSON.parse($);if(f&&typeof f==="object"&&!Array.isArray(f))return f}catch{}return}function s7($,f={}){if(!$)return;try{let J=JSON.parse($);if(!Array.isArray(J))return;let Q=J.map((Z)=>typeof Z==="string"?Z.trim():"").filter((Z)=>Z.length>0);if(f.preserveEmpty)return Q;return Q.length>0?Q:void 0}catch{return}}function o1($){if(typeof $==="number"&&Number.isFinite($))return $;if(typeof $==="bigint")return Number($);return}function X1($){return{specId:t($.spec_id),externalId:t($.external_id),sourcePath:t($.source_path),triggerKind:t($.trigger_kind),sourceMtimeMs:o1($.source_mtime_ms),sourceHash:I($.source_hash),parseStatus:t($.parse_status)==="invalid"?"invalid":"valid",parseError:I($.parse_error),enabled:Number($.enabled??0)===1,removed:Number($.removed??0)===1,title:t($.title),prompt:I($.prompt),workspaceRoot:I($.workspace_root),scheduleExpr:I($.schedule_expr),timezone:I($.timezone),eventType:I($.event_type),filters:vJ(I($.filters_json)),debounceSeconds:o1($.debounce_seconds),dedupeWindowSeconds:o1($.dedupe_window_seconds),cooldownSeconds:o1($.cooldown_seconds),mode:I($.mode),systemPrompt:I($.system_prompt),providerId:I($.provider_id),modelId:I($.model_id),maxIterations:o1($.max_iterations),timeoutSeconds:o1($.timeout_seconds),maxParallel:o1($.max_parallel),tools:s7(I($.tools_json),{preserveEmpty:!0}),notesDirectory:I($.notes_directory),extensions:s7(I($.extensions_json),{preserveEmpty:!0}),source:I($.source),tags:s7(I($.tags_json)),metadata:vJ(I($.metadata_json)),revision:Number($.revision??1),lastMaterializedRunId:I($.last_materialized_run_id),lastRunAt:I($.last_run_at),nextRunAt:I($.next_run_at),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function o7($){return{runId:t($.run_id),specId:t($.spec_id),specRevision:Number($.spec_revision??1),triggerKind:t($.trigger_kind),status:t($.status),claimToken:I($.claim_token),claimStartedAt:I($.claim_started_at),claimUntilAt:I($.claim_until_at),scheduledFor:I($.scheduled_for),triggerEventId:I($.trigger_event_id),startedAt:I($.started_at),completedAt:I($.completed_at),sessionId:I($.session_id),reportPath:I($.report_path),error:I($.error),attemptCount:Number($.attempt_count??0),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function sH($){return{eventId:t($.event_id),eventType:t($.event_type),source:t($.source),subject:I($.subject),occurredAt:t($.occurred_at),receivedAt:t($.received_at),workspaceRoot:I($.workspace_root),dedupeKey:I($.dedupe_key),payload:vJ(I($.payload_json)),attributes:vJ(I($.attributes_json)),processingStatus:t($.processing_status),matchedSpecCount:Number($.matched_spec_count??0),queuedRunCount:Number($.queued_run_count??0),suppressedCount:Number($.suppressed_count??0),error:I($.error),createdAt:t($.created_at),updatedAt:t($.updated_at)}}function oH($){return $?JSON.stringify($):null}var jO=["prompt","workspaceRoot","mode","systemPrompt","providerId","modelId","maxIterations","timeoutSeconds","maxParallel","tools","notesDirectory","extensions","source","scheduleExpr","timezone","eventType","filters","debounceSeconds","dedupeWindowSeconds","cooldownSeconds"];function eH($){if($===void 0)return null;if($&&typeof $==="object")return JSON.stringify($);return $}function XO($,f,J,Q){for(let Z of jO){let W=$[Z],j=f[Z];if(eH(W)!==eH(j))return!0}if(J===!1&&Q===!0)return!0;return!1}function HO($){return($.split("/").pop()??$).replace(/\.event\.md$/,"").replace(/\.cron\.md$/,"").replace(/\.md$/,"")}function YO($){return`hub/schedules/${$}.cron.md`}function VO($){let f={...$.metadata??{},...$.createdBy?{__hubScheduleCreatedBy:$.createdBy}:{},...$.cwd?{__hubScheduleCwd:$.cwd}:{},...$.runtimeOptions?{__hubRuntimeOptions:$.runtimeOptions}:{}};return Object.keys(f).length>0?f:void 0}function e7($){return{triggerKind:"schedule",title:$.name.trim(),prompt:$.prompt,workspaceRoot:$.workspaceRoot.trim(),schedule:$.cronPattern.trim(),mode:$.mode??"act",systemPrompt:$.systemPrompt,modelSelection:$.modelSelection?JSON.parse(JSON.stringify($.modelSelection)):void 0,maxIterations:typeof $.maxIterations==="number"?Math.floor($.maxIterations):void 0,timeoutSeconds:typeof $.timeoutSeconds==="number"?Math.floor($.timeoutSeconds):void 0,maxParallel:typeof $.maxParallel==="number"?Math.max(1,Math.floor($.maxParallel)):1,source:"hub-schedule",tags:$.tags?.filter((f)=>f.trim().length>0),enabled:$.enabled!==!1,metadata:VO($)}}function $Y($){return JSON.stringify(e7($))}function AO($,f){let J=$.metadata?{...$.metadata}:{},Q=f.createdBy===null?void 0:f.createdBy!==void 0?f.createdBy:typeof J.__hubScheduleCreatedBy==="string"?J.__hubScheduleCreatedBy:void 0,Z=f.cwd!==void 0?f.cwd:typeof J.__hubScheduleCwd==="string"?J.__hubScheduleCwd:void 0,W=f.runtimeOptions!==void 0?f.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:f.name??$.title,cronPattern:f.cronPattern??$.scheduleExpr??"",prompt:f.prompt??$.prompt??"",workspaceRoot:f.workspaceRoot??$.workspaceRoot??"",cwd:Z,modelSelection:f.modelSelection!==void 0?f.modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:f.enabled??$.enabled,mode:f.mode??($.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"),systemPrompt:f.systemPrompt===null?void 0:f.systemPrompt!==void 0?f.systemPrompt:$.systemPrompt,maxIterations:f.maxIterations===null?void 0:f.maxIterations!==void 0?f.maxIterations:$.maxIterations,timeoutSeconds:f.timeoutSeconds===null?void 0:f.timeoutSeconds!==void 0?f.timeoutSeconds:$.timeoutSeconds,maxParallel:f.maxParallel??$.maxParallel??1,createdBy:Q,tags:f.tags??$.tags,runtimeOptions:W,metadata:f.metadata!==void 0?f.metadata:Object.keys(J).length>0?J:void 0}}class G6{db;constructor($={}){let f=$.dbPath??WO();this.db=ZO(f),tH(this.db)}close(){this.db.close?.()}getSpecBySourcePath($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE source_path = ?").get($);return f?X1(f):void 0}getSpec($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($);return f?X1(f):void 0}getSpecByExternalId($){let f=this.db.prepare("SELECT * FROM cron_specs WHERE external_id = ? ORDER BY created_at ASC LIMIT 1").get($);return f?X1(f):void 0}listSpecs($={}){let f=[],J=[];if($.triggerKind)f.push("trigger_kind = ?"),J.push($.triggerKind);if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.parseStatus)f.push("parse_status = ?"),J.push($.parseStatus);if(!$.includeRemoved)f.push("removed = 0");let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??500));return this.db.prepare(`SELECT * FROM cron_specs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>X1(j))}createHubSchedule($){let f=`sched_${B6()}`,J=this.upsertSpec({externalId:f,sourcePath:YO(f),triggerKind:"schedule",sourceHash:$Y($),parseStatus:"valid",spec:e7($)});this.initializeScheduleNextRun(J.record.specId);let Q=this.getSpec(J.record.specId);if(!Q)throw Error("failed to create hub schedule");return Q}getHubSchedule($){let f=this.db.prepare(`SELECT * FROM cron_specs
|
|
334
|
+
WHERE external_id = ? AND source = 'hub-schedule' AND removed = 0
|
|
335
|
+
ORDER BY created_at ASC LIMIT 1`).get($);return f?X1(f):void 0}listHubSchedules($={}){let f=["source = 'hub-schedule'","trigger_kind = 'schedule'","removed = 0"],J=[];if(typeof $.enabled==="boolean")f.push("enabled = ?"),J.push($.enabled?1:0);if($.tags&&$.tags.length>0)for(let W of $.tags)f.push("tags_json LIKE ?"),J.push(`%"${W.trim()}"%`);let Q=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_specs
|
|
336
|
+
WHERE ${f.join(" AND ")}
|
|
337
|
+
ORDER BY created_at DESC LIMIT ?`).all(...J,Q).map((W)=>X1(W))}updateHubSchedule($,f){let J=this.getHubSchedule($);if(!J)return;let Q=AO(J,f),Z=this.upsertSpec({externalId:$,sourcePath:J.sourcePath,triggerKind:"schedule",sourceHash:$Y(Q),parseStatus:"valid",spec:e7(Q)});if(f.cronPattern!==void 0||f.enabled!==void 0)this.initializeScheduleNextRun(Z.record.specId);return this.getSpec(Z.record.specId)}deleteHubSchedule($){let f=this.getHubSchedule($);if(!f)return!1;return this.markSpecRemoved(f.specId),this.cancelQueuedRunsForSpec(f.specId),!0}enqueueHubScheduleRun($,f="manual"){let J=this.getHubSchedule($);if(!J||!J.enabled||J.removed||J.parseStatus!=="valid")return;return this.enqueueRun({specId:J.specId,specRevision:J.revision,triggerKind:f,scheduledFor:U0()})}listEventSpecsForType($){return this.db.prepare(`SELECT * FROM cron_specs
|
|
338
|
+
WHERE trigger_kind = 'event'
|
|
339
|
+
AND event_type = ?
|
|
340
|
+
AND enabled = 1
|
|
341
|
+
AND removed = 0
|
|
342
|
+
AND parse_status = 'valid'
|
|
343
|
+
ORDER BY created_at ASC`).all($).map((J)=>X1(J))}upsertSpec($){let f=U0(),J=this.getSpecBySourcePath($.sourcePath),Q=$.spec,Z={title:Q?.title??J?.title??HO($.sourcePath),prompt:Q?.prompt,workspaceRoot:Q?.workspaceRoot,scheduleExpr:Q?.triggerKind==="schedule"?Q.schedule:void 0,timezone:Q?.triggerKind==="schedule"?Q.timezone:void 0,eventType:Q?.triggerKind==="event"?Q.event:void 0,filters:Q?.triggerKind==="event"?Q.filters:void 0,debounceSeconds:Q?.triggerKind==="event"?Q.debounceSeconds:void 0,dedupeWindowSeconds:Q?.triggerKind==="event"?Q.dedupeWindowSeconds:void 0,cooldownSeconds:Q?.triggerKind==="event"?Q.cooldownSeconds:void 0,mode:Q?.mode,systemPrompt:Q?.systemPrompt,providerId:Q?.modelSelection?.providerId,modelId:Q?.modelSelection?.modelId,maxIterations:Q?.maxIterations,timeoutSeconds:Q?.timeoutSeconds,maxParallel:Q&&"maxParallel"in Q?Q.maxParallel:void 0,tools:Q?.tools,notesDirectory:Q?.notesDirectory,extensions:Q?.extensions,source:Q?.source},W=$.parseStatus==="valid"&&(Q?.enabled??!0);if(!J){let V=`cspec_${B6()}`;this.insertSpecRow(V,$,Z,W,f);let A=this.getSpec(V);if(!A)throw Error("failed to insert cron_spec row");return{record:A,created:!0,revisionChanged:!0}}let X=J.sourceHash!==$.sourceHash&&XO(J,Z,J.enabled,W),H=X?J.revision+1:J.revision;this.updateSpecRow(J.specId,$,Z,W,H,f);let Y=this.getSpec(J.specId);if(!Y)throw Error("failed to reload cron_spec after update");return{record:Y,created:!1,revisionChanged:X}}insertSpecRow($,f,J,Q,Z){let W=f.spec;this.db.prepare(`INSERT INTO cron_specs (
|
|
344
|
+
spec_id, external_id, source_path, trigger_kind,
|
|
345
|
+
source_mtime_ms, source_hash, parse_status, parse_error,
|
|
346
|
+
enabled, removed, title, prompt, workspace_root,
|
|
347
|
+
schedule_expr, timezone, event_type, filters_json,
|
|
348
|
+
debounce_seconds, dedupe_window_seconds, cooldown_seconds,
|
|
349
|
+
mode, system_prompt, provider_id, model_id,
|
|
350
|
+
max_iterations, timeout_seconds, max_parallel,
|
|
351
|
+
tools_json, notes_directory, extensions_json, source,
|
|
352
|
+
tags_json, metadata_json, revision,
|
|
353
|
+
created_at, updated_at
|
|
354
|
+
) VALUES (${Array.from({length:36},()=>"?").join(",")})`).run($,f.externalId,f.sourcePath,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Q?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,W?.tags?JSON.stringify(W.tags):null,W?.metadata?JSON.stringify(W.metadata):null,1,Z,Z)}updateSpecRow($,f,J,Q,Z,W){let j=f.spec;this.db.prepare(`UPDATE cron_specs SET
|
|
355
|
+
external_id = ?, trigger_kind = ?,
|
|
356
|
+
source_mtime_ms = ?, source_hash = ?, parse_status = ?, parse_error = ?,
|
|
357
|
+
enabled = ?, removed = 0, title = ?, prompt = ?,
|
|
358
|
+
workspace_root = ?, schedule_expr = ?, timezone = ?,
|
|
359
|
+
event_type = ?, filters_json = ?,
|
|
360
|
+
debounce_seconds = ?, dedupe_window_seconds = ?, cooldown_seconds = ?,
|
|
361
|
+
mode = ?, system_prompt = ?, provider_id = ?, model_id = ?,
|
|
362
|
+
max_iterations = ?, timeout_seconds = ?, max_parallel = ?,
|
|
363
|
+
tools_json = ?, notes_directory = ?, extensions_json = ?, source = ?,
|
|
364
|
+
tags_json = ?, metadata_json = ?,
|
|
365
|
+
revision = ?, updated_at = ?
|
|
366
|
+
WHERE spec_id = ?`).run(f.externalId,f.triggerKind,f.sourceMtimeMs??null,f.sourceHash,f.parseStatus,f.parseError??null,Q?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,j?.tags?JSON.stringify(j.tags):null,j?.metadata?JSON.stringify(j.metadata):null,Z,W,$)}markSpecRemoved($){this.db.prepare("UPDATE cron_specs SET removed = 1, enabled = 0, updated_at = ? WHERE spec_id = ?").run(U0(),$)}updateSpecNextRunAt($,f){this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f??null,U0(),$)}updateSpecLastRunAt($,f){this.db.prepare("UPDATE cron_specs SET last_run_at = ?, updated_at = ? WHERE spec_id = ?").run(f,U0(),$)}updateLastMaterializedRunId($,f){this.db.prepare("UPDATE cron_specs SET last_materialized_run_id = ?, updated_at = ? WHERE spec_id = ?").run(f,U0(),$)}initializeScheduleNextRun($){let f=this.getSpec($);if(!f||f.triggerKind!=="schedule"||!f.enabled||!f.scheduleExpr){this.updateSpecNextRunAt($,void 0);return}let J=new Date(s1(f.scheduleExpr,Date.now(),f.timezone)).toISOString();this.updateSpecNextRunAt($,J)}materializeDueScheduleRun($){let f=$.nowMs,J=new Date(f).toISOString();this.db.exec("BEGIN IMMEDIATE;");try{let Q=this.db.prepare("SELECT * FROM cron_specs WHERE spec_id = ?").get($.specId);if(!Q)return this.db.exec("COMMIT;"),{queued:!1};let Z=X1(Q);if(Z.triggerKind!=="schedule"||!Z.enabled||Z.removed||Z.parseStatus!=="valid"||!Z.scheduleExpr)return this.db.exec("COMMIT;"),{queued:!1};let W=Z.nextRunAt;if(!W){let H=new Date(s1(Z.scheduleExpr,f,Z.timezone)).toISOString();return this.db.prepare("UPDATE cron_specs SET next_run_at = ?, updated_at = ? WHERE spec_id = ?").run(H,J,Z.specId),this.db.exec("COMMIT;"),{queued:!1,nextRunAt:H}}if(new Date(W).getTime()>f)return this.db.exec("COMMIT;"),{queued:!1,nextRunAt:W};let j=`crun_${B6()}`,X;try{X=new Date(s1(Z.scheduleExpr,f,Z.timezone)).toISOString()}catch{X=void 0}return this.db.prepare(`INSERT INTO cron_runs (
|
|
367
|
+
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
368
|
+
scheduled_for, trigger_event_id, attempt_count,
|
|
369
|
+
created_at, updated_at
|
|
370
|
+
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(j,Z.specId,Z.revision,"schedule","queued",W,null,0,J,J),this.db.prepare(`UPDATE cron_specs SET
|
|
371
|
+
last_materialized_run_id = ?,
|
|
372
|
+
last_run_at = ?,
|
|
373
|
+
next_run_at = ?,
|
|
374
|
+
updated_at = ?
|
|
375
|
+
WHERE spec_id = ?`).run(j,J,X??null,J,Z.specId),this.db.exec("COMMIT;"),{queued:!0,run:this.getRun(j),nextRunAt:X}}catch(Q){throw this.db.exec("ROLLBACK;"),Q}}getRun($){let f=this.db.prepare("SELECT * FROM cron_runs WHERE run_id = ?").get($);return f?o7(f):void 0}insertEventLog($,f={}){let J=U0(),Q=f.receivedAtIso??J,Z=$.eventId.trim();if(!Z)throw Error("automation event requires eventId");let W=$.eventType.trim();if(!W)throw Error("automation event requires eventType");let j=$.source.trim();if(!j)throw Error("automation event requires source");let X=$.occurredAt.trim()||Q,H=this.db.prepare(`INSERT OR IGNORE INTO cron_event_log (
|
|
376
|
+
event_id, event_type, source, subject,
|
|
377
|
+
occurred_at, received_at, workspace_root, dedupe_key,
|
|
378
|
+
payload_json, attributes_json, processing_status,
|
|
379
|
+
matched_spec_count, queued_run_count, suppressed_count,
|
|
380
|
+
error, created_at, updated_at
|
|
381
|
+
) VALUES (?,?,?,?, ?,?,?,?, ?,?,?, ?,?,?, ?,?,?)`).run(Z,W,j,$.subject?.trim()||null,X,Q,$.workspaceRoot?.trim()||null,$.dedupeKey?.trim()||null,oH($.payload),oH($.attributes),"received",0,0,0,null,J,J).changes??0,Y=this.getEventLog(Z);if(!Y)throw Error("failed to insert cron_event_log row");return{record:Y,created:H===1}}getEventLog($){let f=this.db.prepare("SELECT * FROM cron_event_log WHERE event_id = ?").get($);return f?sH(f):void 0}listEventLogs($={}){let f=[],J=[];if($.eventType)f.push("event_type = ?"),J.push($.eventType);if($.source)f.push("source = ?"),J.push($.source);if($.processingStatus)f.push("processing_status = ?"),J.push($.processingStatus);let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_event_log ${Q}
|
|
382
|
+
ORDER BY received_at DESC, created_at DESC
|
|
383
|
+
LIMIT ?`).all(...J,Z).map((j)=>sH(j))}updateEventLogProcessing($,f){return(this.db.prepare(`UPDATE cron_event_log SET
|
|
384
|
+
processing_status = ?,
|
|
385
|
+
matched_spec_count = COALESCE(?, matched_spec_count),
|
|
386
|
+
queued_run_count = COALESCE(?, queued_run_count),
|
|
387
|
+
suppressed_count = COALESCE(?, suppressed_count),
|
|
388
|
+
error = ?,
|
|
389
|
+
updated_at = ?
|
|
390
|
+
WHERE event_id = ?`).run(f.status,f.matchedSpecCount??null,f.queuedRunCount??null,f.suppressedCount??null,f.error??null,U0(),$).changes??0)===1}listRuns($={}){let f=[],J=[];if($.specId)f.push("spec_id = ?"),J.push($.specId);if($.status){let j=Array.isArray($.status)?$.status:[$.status];if(j.length>0){let X=j.map(()=>"?").join(",");f.push(`status IN (${X})`);for(let H of j)J.push(H)}}let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"",Z=Math.max(1,Math.floor($.limit??200));return this.db.prepare(`SELECT * FROM cron_runs ${Q} ORDER BY created_at DESC LIMIT ?`).all(...J,Z).map((j)=>o7(j))}hasRecentEventRunForDedupe($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
391
|
+
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
392
|
+
WHERE r.spec_id = ?
|
|
393
|
+
AND r.trigger_kind = 'event'
|
|
394
|
+
AND e.dedupe_key = ?
|
|
395
|
+
AND e.received_at >= ?
|
|
396
|
+
LIMIT 1`).get($.specId,$.dedupeKey,$.sinceIso)}hasRecentEventRunForSpec($){return!!this.db.prepare(`SELECT r.run_id FROM cron_runs r
|
|
397
|
+
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
398
|
+
WHERE r.spec_id = ?
|
|
399
|
+
AND r.trigger_kind = 'event'
|
|
400
|
+
AND e.received_at >= ?
|
|
401
|
+
LIMIT 1`).get($.specId,$.sinceIso)}findQueuedEventRunForDedupe($){let f=this.db.prepare(`SELECT r.* FROM cron_runs r
|
|
402
|
+
INNER JOIN cron_event_log e ON e.event_id = r.trigger_event_id
|
|
403
|
+
WHERE r.spec_id = ?
|
|
404
|
+
AND r.trigger_kind = 'event'
|
|
405
|
+
AND r.status = 'queued'
|
|
406
|
+
AND e.dedupe_key = ?
|
|
407
|
+
ORDER BY COALESCE(r.scheduled_for, r.created_at) DESC
|
|
408
|
+
LIMIT 1`).get($.specId,$.dedupeKey);return f?o7(f):void 0}updateQueuedEventRunForDebounce($){let f=U0();if((this.db.prepare(`UPDATE cron_runs SET
|
|
409
|
+
trigger_event_id = ?,
|
|
410
|
+
scheduled_for = ?,
|
|
411
|
+
updated_at = ?
|
|
412
|
+
WHERE run_id = ?
|
|
413
|
+
AND trigger_kind = 'event'
|
|
414
|
+
AND status = 'queued'`).run($.triggerEventId,$.scheduledFor,f,$.runId).changes??0)!==1)return;return this.getRun($.runId)}hasOneOffRunForRevision($,f){return!!this.db.prepare(`SELECT run_id FROM cron_runs
|
|
415
|
+
WHERE spec_id = ? AND spec_revision = ?
|
|
416
|
+
AND trigger_kind = 'one_off'
|
|
417
|
+
LIMIT 1`).get($,f)}enqueueRun($){let f=`crun_${B6()}`,J=U0();this.db.prepare(`INSERT INTO cron_runs (
|
|
418
|
+
run_id, spec_id, spec_revision, trigger_kind, status,
|
|
419
|
+
scheduled_for, trigger_event_id, attempt_count,
|
|
420
|
+
created_at, updated_at
|
|
421
|
+
) VALUES (?,?,?,?,?, ?,?,?, ?,?)`).run(f,$.specId,$.specRevision,$.triggerKind,"queued",$.scheduledFor??null,$.triggerEventId??null,0,J,J),this.updateLastMaterializedRunId($.specId,f);let Q=this.getRun(f);if(!Q)throw Error("failed to insert cron_run row");return Q}cancelQueuedRunsForSpec($){return this.db.prepare(`UPDATE cron_runs SET status = 'cancelled', updated_at = ?
|
|
422
|
+
WHERE spec_id = ? AND status = 'queued'`).run(U0(),$).changes??0}claimDueRuns($){let f=$.nowIso,J=Math.max(1000,Math.floor($.leaseMs)),Q=new Date(new Date(f).getTime()+J).toISOString(),Z=Math.max(1,Math.floor($.limit??25)),W=[];this.db.exec("BEGIN IMMEDIATE;");try{let j=this.db.prepare(`SELECT * FROM cron_runs
|
|
423
|
+
WHERE (
|
|
424
|
+
status = 'queued'
|
|
425
|
+
OR (
|
|
426
|
+
status = 'running'
|
|
427
|
+
AND claim_until_at IS NOT NULL
|
|
428
|
+
AND claim_until_at <= ?
|
|
429
|
+
AND completed_at IS NULL
|
|
430
|
+
)
|
|
431
|
+
)
|
|
432
|
+
AND (scheduled_for IS NULL OR scheduled_for <= ?)
|
|
433
|
+
ORDER BY COALESCE(scheduled_for, created_at) ASC
|
|
434
|
+
LIMIT ?`).all(f,f,Z);for(let X of j){let H=t(X.run_id);if(!H)continue;let Y=`cclaim_${B6()}`;if((this.db.prepare(`UPDATE cron_runs SET
|
|
435
|
+
status = 'running',
|
|
436
|
+
claim_token = ?,
|
|
437
|
+
claim_started_at = ?,
|
|
438
|
+
claim_until_at = ?,
|
|
439
|
+
started_at = ?,
|
|
440
|
+
completed_at = NULL,
|
|
441
|
+
session_id = NULL,
|
|
442
|
+
report_path = NULL,
|
|
443
|
+
error = NULL,
|
|
444
|
+
attempt_count = attempt_count + 1,
|
|
445
|
+
updated_at = ?
|
|
446
|
+
WHERE run_id = ?
|
|
447
|
+
AND (
|
|
448
|
+
status = 'queued'
|
|
449
|
+
OR (
|
|
450
|
+
status = 'running'
|
|
451
|
+
AND claim_until_at IS NOT NULL
|
|
452
|
+
AND claim_until_at <= ?
|
|
453
|
+
AND completed_at IS NULL
|
|
454
|
+
)
|
|
455
|
+
)`).run(Y,f,Q,f,f,H,f).changes??0)!==1)continue;let A=this.getRun(H);if(!A)continue;W.push({run:A,claimToken:Y,claimUntilAt:Q})}this.db.exec("COMMIT;")}catch(j){throw this.db.exec("ROLLBACK;"),j}return W}renewClaim($,f,J){return(this.db.prepare(`UPDATE cron_runs SET claim_until_at = ?, updated_at = ?
|
|
456
|
+
WHERE run_id = ? AND claim_token = ?`).run(J,U0(),$,f).changes??0)===1}completeRun($,f){let J=f.completedAtIso??U0(),Q=f.claimToken?"WHERE run_id = ? AND claim_token = ?":"WHERE run_id = ?";return(this.db.prepare(`UPDATE cron_runs SET
|
|
457
|
+
status = ?,
|
|
458
|
+
session_id = COALESCE(?, session_id),
|
|
459
|
+
report_path = COALESCE(?, report_path),
|
|
460
|
+
error = ?,
|
|
461
|
+
completed_at = ?,
|
|
462
|
+
claim_started_at = NULL,
|
|
463
|
+
claim_token = NULL,
|
|
464
|
+
claim_until_at = NULL,
|
|
465
|
+
updated_at = ?
|
|
466
|
+
${Q}`).run(f.status,f.sessionId??null,f.reportPath??null,f.error??null,J,J,$,...f.claimToken?[f.claimToken]:[]).changes??0)>0}requeueRun($){let f=U0();return(this.db.prepare(`UPDATE cron_runs SET
|
|
467
|
+
status = 'queued',
|
|
468
|
+
claim_started_at = NULL,
|
|
469
|
+
claim_token = NULL,
|
|
470
|
+
claim_until_at = NULL,
|
|
471
|
+
started_at = NULL,
|
|
472
|
+
completed_at = NULL,
|
|
473
|
+
session_id = NULL,
|
|
474
|
+
report_path = NULL,
|
|
475
|
+
error = ?,
|
|
476
|
+
scheduled_for = COALESCE(?, scheduled_for),
|
|
477
|
+
updated_at = ?
|
|
478
|
+
WHERE run_id = ? AND claim_token = ?`).run($.error??null,$.scheduledFor??null,f,$.runId,$.claimToken).changes??0)>0}attachSessionIdToRun($,f){this.db.prepare("UPDATE cron_runs SET session_id = ?, updated_at = ? WHERE run_id = ?").run(f,U0(),$)}attachReportPathToRun($,f){this.db.prepare("UPDATE cron_runs SET report_path = ?, updated_at = ? WHERE run_id = ?").run(f,U0(),$)}}class K6{store;reconciler;watcher;eventIngress;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new G6({dbPath:$.dbPath});let f=$.specs;this.reconciler=new a7({store:this.store,specs:f}),this.materializer=new H6({store:this.store}),this.eventIngress=new m7({store:this.store,logger:$.logger}),this.runner=new Y6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,workspaceRoot:$.workspaceRoot,specs:f,logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.globalMaxConcurrency}),this.watcher=new t7({reconciler:this.reconciler,debounceMs:$.watcherDebounceMs,onReconciled:()=>{this.materializer.materializeAll()},onError:(J)=>{let Q=$.logger;if(Q)if(Q.error)Q.error("cron.watcher.failed",{error:J});else Q.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($){return this.store.listSpecs($)}getSpec($){return this.store.getSpec($)}listRuns($){return this.store.listRuns($)}getRun($){return this.store.getRun($)}listActiveRuns(){return this.store.listRuns({status:"running",limit:200})}listUpcomingRuns($=20){return this.store.listRuns({status:"queued",limit:$})}async reconcileNow(){await this.reconciler.reconcileAll(),this.materializer.materializeAll()}ingestEvent($){return this.eventIngress.ingestEvent($)}listEventLogs($){return this.store.listEventLogs($)}getEventLog($){return this.store.getEventLog($)}}var YY={};y(YY,{manifestToSessionRecord:()=>cJ,listSessionHistoryFromBackend:()=>QQ,listSessionHistory:()=>dJ,hydrateSessionHistory:()=>HY});import{readdir as FO,readFile as WY}from"node:fs/promises";import{join as jY}from"node:path";import{formatDisplayUserInput as PO,normalizeUserInput as UO}from"@cline/shared";import{resolveSessionDataDir as XY}from"@cline/shared/storage";import{existsSync as BO}from"node:fs";import{readFile as GO}from"node:fs/promises";import{formatDisplayUserInput as fY}from"@cline/shared";class F6{listeners=new Set;subscribe($,f){let J={listener:$,sessionId:f?.sessionId?.trim()||void 0};return this.listeners.add(J),()=>{this.listeners.delete(J)}}emit($){let f=$.payload.sessionId?.trim();for(let J of this.listeners){if(J.sessionId&&J.sessionId!==f)continue;J.listener($)}}get size(){return this.listeners.size}}async function H1($){let f=$?.trim();if(!f||!BO(f))return[];try{let J=(await GO(f,"utf8")).trim();if(!J)return[];let Q=JSON.parse(J);if(Array.isArray(Q))return JY(Q);if(Q&&typeof Q==="object"&&!Array.isArray(Q)){let Z=Q.messages;if(Array.isArray(Z))return JY(Z)}return[]}catch{return[]}}function KO($){if($.role!=="user")return $;if(typeof $.content==="string")return{...$,content:fY($.content)};return{...$,content:$.content.map((f)=>{if(f.type!=="text"||typeof f.text!=="string")return f;return{...f,text:fY(f.text)}})}}function JY($){return $.map(KO)}function $Q($){return $?{...$}:void 0}async function QY($,f){if(!($.hookName==="tool_call"||!!$.parent_agent_id))return;await f.queueSpawnRequest($);let Q=await f.upsertSubagentSessionFromHook($);if(!Q)return;await f.appendSubagentHookAudit(Q,$),await f.applySubagentStatus(Q,$)}function P6($){if(typeof $!=="string")return;let f=$.trim();return f.length>0?f:void 0}function c0($){let f=P6($);if(!f)return;return f.toLowerCase()==="unknown"?void 0:f}function uJ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function DO($){if(!$||typeof $!=="object"||Array.isArray($))return;return{...$}}function JQ($){let f=$??200;return Number.isFinite(f)?Math.max(0,Math.floor(f)):200}function RO($){if($===0)return 0;return Math.min(Math.max($*2,20),2000)}function LO($){return $.isSubagent!==!0&&!P6($.parentSessionId)}function OO($){let f=$.match(/\d{13,}/g);if(!f||f.length===0)return 0;let J=0;for(let Q of f){let Z=Number.parseInt(Q,10);if(Number.isFinite(Z)&&Z>J)J=Z}return J}function cJ($){return{sessionId:$.session_id,source:$.source,pid:$.pid,startedAt:$.started_at,endedAt:$.ended_at??null,exitCode:$.exit_code??null,status:$.status,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspace_root,teamName:$.team_name,enableTools:$.enable_tools,enableSpawn:$.enable_spawn,enableTeams:$.enable_teams,isSubagent:!1,prompt:$.prompt,metadata:$.metadata,messagesPath:$.messages_path,updatedAt:$.ended_at??$.started_at}}async function zO($){let f=JQ($);if(f===0)return[];let J=XY(),Z=(await FO(J,{withFileTypes:!0}).catch(()=>[])).filter((j)=>j.isDirectory()).map((j)=>({entry:j,recency:OO(j.name.trim())})).sort((j,X)=>X.recency-j.recency||X.entry.name.localeCompare(j.entry.name));return(await Promise.all(Z.map(async({entry:j})=>{let X=j.name.trim();if(!X)return;let H=jY(J,X,`${X}.json`),Y=await WY(H,"utf8").catch(()=>{return});if(!Y)return;let V;try{V=JSON.parse(Y)}catch{return}let A=q0.safeParse(V);if(!A.success)return;return cJ(A.data)}))).filter((j)=>Boolean(j)).sort((j,X)=>X.startedAt.localeCompare(j.startedAt)).slice(0,f)}async function _O($,f,J){let Q=JQ(f);if(Q===0)return await $.listSessions(0),[];let Z=J.includeSubagents?Q:RO(Q),W=await $.listSessions(Z);return(J.includeSubagents?W:W.filter(LO)).slice(0,Q)}function NO($){if(typeof $==="string")return $.trim();let f=[];for(let J of $){if(!J||typeof J!=="object")continue;let Q=J;if(Q.type!=="text")continue;let Z=Q.text?.trim();if(Z)f.push(Z)}return f.join(`
|
|
479
|
+
`).trim()}function ZY($){return $.replace(/\s+/g," ").trim()}function TO($,f){if($.length<=f)return $;return`${$.slice(0,Math.max(0,f-3)).trimEnd()}...`}function MO($){for(let f of["user","assistant"])for(let J of $){if(J.role!==f)continue;let Q=ZY(NO(J.content));if(!Q)continue;let Z=f==="user"?ZY(PO(Q)):Q,W=UO(Z.split(`
|
|
480
|
+
`)[0]??Z);return TO(W,50)}return}function qO($){let f=0;for(let J of $)f+=uJ(J.metrics?.cost)??0;return f}function yO($){let f,J;for(let Q=$.length-1;Q>=0;Q-=1){let Z=$[Q];if(!f)f=c0(Z.modelInfo?.provider);if(!J)J=c0(Z.modelInfo?.id);if(f&&J)break}return{provider:f,model:J}}function wO($){return c0($?.provider)??c0($?.provider&&typeof $.provider==="object"&&!Array.isArray($.provider)?$.provider.id:void 0)}function SO($){return c0($?.model)??c0($?.model&&typeof $.model==="object"&&!Array.isArray($.model)?$.model.id:void 0)}function fQ($,f){let J=DO($.metadata),Q=P6(f?.title)??P6(J?.title),Z=uJ(f?.totalCost)??uJ(J?.totalCost),W=J||Q!==void 0||Z!==void 0?{...J??{},...Q!==void 0?{title:Q}:{},...Z!==void 0?{totalCost:Z}:{}}:void 0;return{...$,provider:c0(f?.provider)??c0($.provider)??wO(J)??"",model:c0(f?.model)??c0($.model)??SO(J)??"",metadata:W}}function CO($){let f=$.content;if(!Array.isArray(f))return!1;return f.some((J)=>!!J&&typeof J==="object"&&J.type==="tool-call")}function hO($,f){if($.status!=="running"||$.interactive!==!0)return!1;let J=f.at(-1);return J?.role==="assistant"&&!CO(J)}async function EO($,f){return await Promise.all(f.map(async(J)=>{if(J.status!=="running"||J.interactive!==!0)return J;let Q=await $.readSessionMessages(J.sessionId);return hO(J,Q)?{...J,status:"idle"}:J}))}async function HY($,f){return await Promise.all(f.map(async(J)=>{let Q=fQ(J),Z=Boolean(P6(Q.metadata?.title)),W=Boolean(c0(Q.provider)),j=Boolean(c0(Q.model)),X=uJ(Q.metadata?.totalCost),H=X!==void 0&&X>0;if(Z&&W&&j&&H)return Q;let Y=await $.readSessionMessages(J.sessionId);if(Y.length===0)return Q;let V=yO(Y),A=qO(Y);return fQ(J,{title:Z?void 0:MO(Y),provider:W?void 0:V.provider,model:j?void 0:V.model,totalCost:H||A<=0?void 0:A})}))}async function dJ($,f={}){let J=JQ(f.limit),Q=f.includeSubagents===!0,Z=await _O($,J,{includeSubagents:Q}),W=f.includeManifestFallback===!0&&Z.length<J?await zO(Math.min(Math.max(J*2,100),500)):[],j=new Map;for(let Y of[...Z,...W]){if(j.has(Y.sessionId))continue;j.set(Y.sessionId,Y)}let X=W.length===0?Z:Array.from(j.values()).sort((Y,V)=>V.startedAt.localeCompare(Y.startedAt)).slice(0,J),H=await EO($,X);if(f.hydrate===!1)return H.map((Y)=>fQ(Y));return await HY($,H)}async function bO($){let f=$.trim();if(!f)return;let J=jY(XY(),f,`${f}.json`),Q=await WY(J,"utf8").catch(()=>{return});if(!Q)return;try{let Z=q0.safeParse(JSON.parse(Q));return Z.success?Z.data.messages_path:void 0}catch{return}}async function QQ($,f={}){let J=new Map;return await dJ({listSessions:async(Z)=>{let W=await $.listSessions(Z);J.clear();for(let j of W)J.set(j.sessionId,j);return W.map(X4)},readSessionMessages:async(Z)=>{let W=J.get(Z)?.messagesPath??await bO(Z);return await H1(W)}},f)}var KV={};y(KV,{resolveSessionBackend:()=>mQ,createRuntimeHost:()=>G8});import{captureSdkError as BV}from"@cline/shared";import{createSessionId as Nz,resolveHubCommandTimeoutMs as Tz}from"@cline/shared";import{spawn as Jz}from"node:child_process";import{closeSync as Qz,mkdirSync as Zz,openSync as Wz}from"node:fs";import{basename as jz,dirname as Xz,join as Hz}from"node:path";import{fileURLToPath as Yz}from"node:url";import{CLINE_RUN_AS_HUB_DAEMON_ENV as Vz,isHubDaemonProcess as _Y,withResolvedClineBuildEnv as Az}from"@cline/shared";import{createHash as kO,randomBytes as IO}from"node:crypto";import{existsSync as xO}from"node:fs";import{chmod as mO,mkdir as ZQ,readFile as FY,rm as WQ,writeFile as PY}from"node:fs/promises";import{dirname as UY,join as jQ}from"node:path";import{resolveClineDataDir as U6,resolveClineDir as DY}from"@cline/shared/storage";var AY="3.84.0-beta.20260524130712";var BY={name:"@cline/core",description:"Cline Core SDK for Node Runtime",version:AY,repository:{type:"git",url:"https://github.com/cline/cline",directory:"sdk/packages/core"},type:"module",types:"./dist/index.d.ts",main:"./dist/index.js",private:!1,publishConfig:{access:"public"},exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"},"./hub":{types:"./dist/hub/index.d.ts",import:"./dist/hub/index.js"},"./hub/daemon-entry":{types:"./dist/hub/daemon/entry.d.ts",import:"./dist/hub/daemon/entry.js"},"./telemetry":{types:"./dist/services/telemetry/index.d.ts",import:"./dist/services/telemetry/index.js"}},scripts:{build:"bun run ./bun.mts && bun tsc -p tsconfig.build.json",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:live":"vitest run --config vitest.config.ts src/extensions/context/compaction.live.test.ts","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:*","@modelcontextprotocol/sdk":"^1.29.0","@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:"^2.7.0","node-machine-id":"^1.1.12",nanoid:"^5.1.7","simple-git":"3.36.0",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 gO="CLINE_HUB_DISCOVERY_PATH",vO="CLINE_HUB_BUILD_ID",GY=30000,uO=15000,cO=100;function dO($){return $.replace(/[^a-zA-Z0-9_.-]+/g,"_")}function lO($){return kO("sha256").update($).digest("hex").slice(0,12)}function pO($){if(!Number.isInteger($)||!$||$<=0)return!1;try{return process.kill($,0),!0}catch(f){return f instanceof Error&&"code"in f?String(f.code)==="EPERM":!1}}function lJ(){return IO(32).toString("hex")}function rO($){return new Promise((f)=>setTimeout(f,$))}function iO($){return`${$}.lock`}async function nO($){try{let f=JSON.parse(await FY(jQ($,"owner.json"),"utf8"));if(typeof f.pid!=="number"||typeof f.acquiredAt!=="string")return;return{pid:f.pid,acquiredAt:f.acquiredAt}}catch{return}}async function KY($){await WQ($,{recursive:!0,force:!0}).catch(()=>{return})}function Y1(){return process.env[vO]?.trim()||String(BY.version)}function y$($=process.argv[1]?.trim()||process.cwd()){let f=`hub-${lO($)}`,J=process.env[gO]?.trim()||jQ(U6(),"locks","hub","owners",`${dO(f)}.json`);return{ownerId:f,discoveryPath:J}}function RY($=`hub-${Date.now().toString(36)}`){return y$($)}async function B0($){try{let f=JSON.parse(await FY($,"utf8"));if(typeof f.hubId!=="string"||typeof f.protocolVersion!=="string"||typeof f.authToken!=="string"||typeof f.host!=="string"||typeof f.port!=="number"||typeof f.url!=="string"||typeof f.startedAt!=="string"||typeof f.updatedAt!=="string")return;return{hubId:f.hubId,protocolVersion:f.protocolVersion,buildId:typeof f.buildId==="string"?f.buildId:void 0,authToken:f.authToken,host:f.host,port:f.port,url:f.url,pid:typeof f.pid==="number"?f.pid:void 0,startedAt:f.startedAt,updatedAt:f.updatedAt}}catch{return}}async function pJ($,f){await ZQ(UY($),{recursive:!0}),await WQ($,{force:!0}).catch(()=>{return}),await PY($,`${JSON.stringify(f,null,2)}
|
|
481
|
+
`,{encoding:"utf8",mode:384}),await mO($,384)}async function d0($){await WQ($,{force:!0}).catch(()=>{return})}async function rJ($,f){let J=iO($);await ZQ(UY(J),{recursive:!0});let Q=Date.now()+uO;while(!0)try{await ZQ(J,{recursive:!1}),await PY(jQ(J,"owner.json"),`${JSON.stringify({pid:process.pid,acquiredAt:new Date().toISOString()},null,2)}
|
|
482
|
+
`,"utf8");try{return await f()}finally{await KY(J)}}catch(Z){if((Z instanceof Error&&"code"in Z?String(Z.code):"")!=="EEXIST")throw Z;let j=await nO(J),X=j?Date.now()-Date.parse(j.acquiredAt):GY+1;if(!j||!pO(j.pid)||X>GY){await KY(J);continue}if(Date.now()>=Q)throw Error(`Timed out waiting for hub startup lock ${J}`);await rO(cO)}}async function D0($){try{let f=await fetch(XQ($));if(!f.ok)return;return await f.json()}catch{return}}function o0($,f,J="/hub"){return new URL(`ws://${$}:${f}${J}`).toString()}function XQ($){let f=new URL($);return f.protocol=f.protocol==="wss:"?"https:":"http:",f.pathname="/health",f.search="",f.toString()}function LY($){return xO($)}import{CLINE_HUB_DEV_PORT as aO,CLINE_HUB_PORT as tO,resolveClineBuildEnv as sO}from"@cline/shared";var oO="CLINE_HUB_HOST",eO="CLINE_HUB_PORT",$z="CLINE_HUB_PATHNAME",HQ="127.0.0.1",YQ=tO,VQ="/hub";function OY($){return sO($)==="development"?aO:YQ}function AQ($={}){return($.env??process.env)[oO]?.trim()||HQ}function Z8($={}){let J=($.env??process.env)[eO]?.trim();if(!J)return OY($);let Q=Number.parseInt(J,10);if(!Number.isInteger(Q)||Q<1||Q>65535)return OY($);return Q}function BQ($={}){return($.env??process.env)[$z]?.trim()||VQ}function l0($={},f={}){return{host:$.host??AQ(f),port:$.port??Z8(f),pathname:$.pathname??BQ(f)}}var fz="shared:cline";function zY($){let f=M$($.trim());return y$(`workspace:${f||$.trim()}`)}function V0($=fz){return y$($)}var Bz=8000,Gz=200,Kz=3000,Fz=100,Pz=[100,250,500,1000,2000],Uz="--cline-hub-daemon";function Dz($){return[...$.host?["--host",$.host]:[],...typeof $.port==="number"?["--port",String($.port)]:[],...$.pathname?["--pathname",$.pathname]:[]]}function Rz(){try{let $=Hz(U6(),"logs","hub-daemon.log");return Zz(Xz($),{recursive:!0}),{fd:Wz($,"a"),logPath:$}}catch{return}}function D6($){let f=$.buildId?.trim();return!!f&&f===Y1()}async function Lz($,f){let J=Date.now()+f;while(Date.now()<J){if(!(await D0($).catch(()=>{return}))?.url)return!0;await new Promise((Z)=>setTimeout(Z,Fz))}return!1}async function R6($,f){if(D6($))return;if(await L6($.url,$.authToken).catch(()=>!1),$.pid)try{process.kill($.pid,"SIGTERM")}catch{}await Lz($.url,Kz),await d0(f).catch(()=>{return})}function Oz(){let $=import.meta.url.endsWith(".ts")?"ts":"js";return Yz(new URL(`./entry.${$}`,import.meta.url))}function zz($,f){let J=Oz(),Q=process.execPath?.trim();if(!Q)throw Error("unable to resolve runtime executable for hub daemon");let Z=jz(Q).toLowerCase().includes("bun"),W=J.startsWith("/$bunfs/"),j=Z&&J.toLowerCase().endsWith(".ts"),X=W?[Uz]:[...j?["--conditions=development"]:[],J];return{launcher:Q,args:[...X,"--cwd",$,...Dz(f)],cwd:$,env:{...Az(process.env),CLINE_NO_INTERACTIVE:"1",[Vz]:"1"}}}function _z($){if(!$||typeof $!=="object")return!1;if(("code"in $?$.code:void 0)==="ETXTBSY")return!0;let J="message"in $?$.message:void 0;return typeof J==="string"&&J.includes("ETXTBSY")}function GQ($,f={}){if(_Y())return;let J=zz($,f),Q=Rz();try{Jz(J.launcher,J.args,{detached:!0,stdio:Q?["ignore",Q.fd,Q.fd]:"ignore",env:J.env,cwd:J.cwd}).unref()}finally{if(Q)Qz(Q.fd)}}async function W8($,f={}){for(let J=0;;J++)try{GQ($,f);return}catch(Q){let Z=Pz[J];if(!_z(Q)||Z===void 0)throw Q;await new Promise((W)=>setTimeout(W,Z))}}function iJ($,f={}){if(_Y())return;let J=V0(),Q=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=l0(f),W=o0(Z.host,Z.port,Z.pathname);B0(J.discoveryPath).then(async(j)=>{if(j?.url){let V=await D0(j.url);if(V?.url&&D6(V)&&await j$(V.url,{authToken:j.authToken}))return;if(V?.url)await R6({...V,authToken:j.authToken},J.discoveryPath);else await d0(J.discoveryPath).catch(()=>{return})}let X=await D0(W);if(X?.url)await R6(X,J.discoveryPath);let Y=!Q&&Z.port!==0?{...Z,port:0}:Z;await W8($,Y)}).catch(()=>{})}async function NY($,f={}){let J=V0(),Q=f.host!==void 0||f.port!==void 0||f.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Z=f.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),W=l0(f),j=o0(W.host,W.port,W.pathname),X=(G)=>{if(!Q)V1(G.url,G.authToken);return G},H=await B0(J.discoveryPath);if(H?.url){let G=await D0(H.url);if(G?.url&&D6(G)&&await j$(G.url,{authToken:H.authToken}))return X({url:G.url,authToken:H.authToken});if(G?.url)await R6({...G,authToken:H.authToken},J.discoveryPath);else await d0(J.discoveryPath).catch(()=>{return})}let Y=await D0(j);if(Y?.url)await R6(Y,J.discoveryPath);let A=!Z&&W.port!==0?{...W,port:0}:W;await W8($,A);let B=Date.now()+Bz;while(Date.now()<B){let G=await B0(J.discoveryPath);if(G?.url){let D=await D0(G.url);if(D?.url&&D6(D)&&await j$(D.url,{authToken:G.authToken}))return X({url:D.url,authToken:G.authToken})}let K=await D0(j);if(K?.url&&!D6(K))await R6(K,J.discoveryPath);await new Promise((D)=>setTimeout(D,Gz))}throw Error("Timed out waiting for detached hub startup.")}function Mz(){let $=globalThis.WebSocket;if(!$)throw Error("Global WebSocket is not available in this runtime. Node 22+ is required for hub mode.");return $}function wY($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();if($&&typeof $==="object"&&"data"in $&&typeof $.data<"u")return wY($.data);return String($)}function qz($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString("utf8");if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");return""}function TY($){let f=$,J=qz(f.reason);return new _0("hub_connection_closed",f.code||J?`Hub connection closed (code=${f.code??0}${J?`, reason=${J}`:""})`:KQ,{closeCode:f.code,closeReason:J||void 0})}function yz($,f){if($ instanceof _0)return $;if($ instanceof Error)return new _0("hub_connect_failed",$.message);if($&&typeof $==="object"&&"error"in $&&$.error instanceof Error)return new _0("hub_connect_failed",$.error.message);let J=$&&typeof $==="object"&&"message"in $&&typeof $.message==="string"?$.message.trim():"";if(J)return new _0("hub_connect_failed",J);let Q=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return new _0("hub_connect_failed",Q?`Failed to connect to hub at ${f.toString()} (${Q} event before socket open).`:`Failed to connect to hub at ${f.toString()}.`)}var wz=8000,Sz=200,MY="*",qY=8000,Cz="cline-hub-auth.",SY=new Map,CY=new Set,hz=3000,Ez=3000,bz=100,KQ="Hub connection closed",kz=250,Iz=5000,yY=0.5;class _0 extends Error{code;details;constructor($,f,J){super(f);this.code=$;this.details=J;this.name="HubTransportError"}}function UQ($){return $ instanceof _0}class j8 extends Error{command;code;constructor($,f,J){super(J);this.command=$;this.code=f;this.name="HubCommandError"}}function nJ($,f){return $ instanceof j8&&$.code==="hub_command_timeout"&&(f===void 0||$.command===f)}function hY($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=DQ($.toString());return J?SY.get(J):void 0}function xz($){try{let J=new URL($).hostname.toLowerCase().replace(/^\[|\]$/g,"");return J==="localhost"||J==="127.0.0.1"||J==="::1"}catch{return!1}}function DQ($){if(!xz($))return;let f=new URL(A1($));return f.search="",f.hash="",f.toString()}function FQ($){let f=DQ($);return!!f&&CY.has(f)}function V1($,f){let J=DQ($);if(J){if(CY.add(J),f?.trim())SY.set(J,f)}return $}class e0{options;socket;connectPromise;clientId;currentUrl;recoveryPromise;pendingReplies=new Map;listeners=new Set;subscriptionCounts=new Map;reconnectTimer;reconnectAttempt=0;closedByClient=!1;lastCloseError=new _0("hub_connection_closed",KQ);sawSocketClose=!1;registered=!1;constructor($){this.options=$;this.clientId=$.clientId??`core-${Math.random().toString(36).slice(2,10)}-${Date.now().toString(36)}`,this.currentUrl=$.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 $=new URL(this.currentUrl),f=this.options.authToken?.trim()||hY($);$.hash="";let Q=new(Mz())($.toString(),f?[`${Cz}${f}`]:void 0);this.socket=Q;let Z=!1;this.connectPromise=new Promise((W,j)=>{let X=!1,H=setTimeout(()=>{if(X)return;X=!0,Z=!0,this.lastCloseError=new _0("hub_connect_timeout",`Timed out connecting to hub after ${qY}ms`),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0;try{Q.close()}catch{}j(this.lastCloseError)},qY);Q.addEventListener("open",()=>{if(X)return;X=!0,clearTimeout(H),W()}),Q.addEventListener("error",(Y)=>{if(X)return;X=!0,clearTimeout(H),this.lastCloseError=yz(Y,$),this.sawSocketClose=!1,this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)}),Q.addEventListener("close",(Y)=>{if(X)return;if(X=!0,clearTimeout(H),!Z)this.lastCloseError=TY(Y),this.sawSocketClose=!0;this.connectPromise=void 0,this.socket=void 0,j(this.lastCloseError)})}),Q.addEventListener("message",(W)=>{this.handleFrame(JSON.parse(wY(W)))}),Q.addEventListener("close",(W)=>{if(this.socket!==Q)return;if(!Z)this.lastCloseError=TY(W),this.sawSocketClose=!0;this.registered=!1;for(let j of this.pendingReplies.values())j.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 W of this.subscriptionCounts.keys())this.sendSubscriptionFrame("stream.subscribe",this.subscriptionSessionIdFromKey(W));this.reconnectAttempt=0}subscribe($,f){let J=f?.sessionId?.trim()||void 0,Q={listener:$,sessionId:J};return this.listeners.add(Q),this.adjustSubscriptionCount(J,1),()=>{if(!this.listeners.delete(Q))return;this.adjustSubscriptionCount(J,-1)}}async command($,f,J,Q){let Z=0,W=$!=="client.register"&&$!=="client.unregister";while(!0)try{return await this.commandOnce($,f,J,Q)}catch(j){if(!W||Z>=1||!await this.recoverLocalHubTransport(j))throw j;Z+=1}}async commandOnce($,f,J,Q){await this.connect();let Z=Nz("hubreq_"),W=Tz($,Q?.timeoutMs),j=new Promise((H,Y)=>{let V=W===null?void 0:setTimeout(()=>{if(!this.pendingReplies.delete(Z))return;Y(new j8($,"hub_command_timeout",`Hub command ${$} timed out after ${W}ms (hub=${this.currentUrl}, requestId=${Z}, clientId=${this.clientId}). Check hub-daemon.log for matching command.start/command.slow entries, or run 'cline doctor fix' to restart the hub.`))},W);this.pendingReplies.set(Z,{resolve:(A)=>{if(V)clearTimeout(V);H(A)},reject:(A)=>{if(V)clearTimeout(V);Y(A)}})});try{this.sendFrame({kind:"command",envelope:{version:"v1",command:$,requestId:Z,clientId:this.clientId,sessionId:J,timeoutMs:W,payload:f}})}catch(H){throw this.pendingReplies.delete(Z),H}let X=await j;if(!X.ok)throw new j8($,X.error?.code,X.error?.message??`Hub command ${$} failed`);return X}async recoverLocalHubTransport($){if(!FQ(this.currentUrl)||!UQ($))return!1;if(this.recoveryPromise)return await this.recoveryPromise;return this.recoveryPromise=(async()=>{let f=await e1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd}).catch(()=>{return});if(!f)return!1;return this.currentUrl=f,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 $=Math.min(kz*2**this.reconnectAttempt,Iz),f=Math.round($*(1-yY)+Math.random()*$*yY);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=void 0,this.reconnectSubscribedTransport()},f)}async reconnectSubscribedTransport(){if(this.closedByClient||!this.hasActiveSubscriptions())return;try{await this.connect(),this.reconnectAttempt=0}catch{if(!FQ(this.currentUrl)){this.reconnectAttempt+=1,this.scheduleReconnect();return}try{let $=await e1({workspaceRoot:this.options.workspaceRoot,cwd:this.options.cwd});if($){this.currentUrl=$,await this.connect(),this.reconnectAttempt=0;return}}catch{}this.reconnectAttempt+=1,this.scheduleReconnect()}}close(){let $=this.socket;if(this.closedByClient=!0,this.clearReconnectTimer(),this.registered=!1,!$)return;this.lastCloseError=new _0("hub_connection_closed",KQ),this.sawSocketClose=!1;for(let f of this.pendingReplies.values())f.reject(this.lastCloseError);this.pendingReplies.clear(),this.connectPromise=void 0,this.socket=void 0;try{$.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($){if(!this.socket||this.socket.readyState!==1){if(this.lastCloseError.code==="hub_connection_closed"&&!this.sawSocketClose)throw new _0("hub_connection_not_open","Hub connection is not open.");throw this.lastCloseError}this.socket.send(JSON.stringify($))}sendSubscriptionFrame($,f){this.sendFrame({kind:$,clientId:this.clientId,...f?{sessionId:f}:{}})}adjustSubscriptionCount($,f){let J=this.subscriptionKeyForSessionId($),Q=(this.subscriptionCounts.get(J)??0)+f;if(Q<=0){if(this.subscriptionCounts.delete(J),!this.hasActiveSubscriptions())this.clearReconnectTimer();if(f<0&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.unsubscribe",$);return}if(this.subscriptionCounts.set(J,Q),f>0&&Q===1&&this.socket?.readyState===1)this.sendSubscriptionFrame("stream.subscribe",$)}subscriptionKeyForSessionId($){return $??MY}subscriptionSessionIdFromKey($){return $===MY?void 0:$}handleFrame($){switch($.kind){case"reply":{let f=$.envelope.requestId;if(!f)return;let J=this.pendingReplies.get(f);if(!J)return;this.pendingReplies.delete(f),J.resolve($.envelope);return}case"event":for(let f of this.listeners){if(f.sessionId&&f.sessionId!==$.envelope.sessionId?.trim())continue;f.listener($.envelope)}return;case"command":case"stream.subscribe":case"stream.unsubscribe":return}}}function A1($){let f=new URL($);if(f.protocol==="http:")f.protocol="ws:";else if(f.protocol==="https:")f.protocol="wss:";return f.toString()}async function j$($,f){let J=new e0({url:$,authToken:f?.authToken,clientType:"hub-healthcheck",displayName:"hub healthcheck",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd});try{return await J.connect(),!0}catch{return!1}finally{J.close()}}async function PQ($,f){let J=A1($),Q=await D0(J);if(!Q)return{status:"unreachable",url:J};let Z=Y1(),W=Q.buildId?.trim();if(!W||W!==Z)return{status:"build_mismatch",url:J};if(f?.verifyConnection===!0&&!await j$(J,{workspaceRoot:f.workspaceRoot,cwd:f.cwd,authToken:f.authToken}))return{status:"unreachable",url:J};return{status:"compatible",url:J}}async function mz($){let f=Date.now()+wz;while(Date.now()<f){let J=await B0($.discoveryPath);if(J?.url){let Q=await PQ(J.url,{verifyConnection:!0,authToken:J.authToken});if(Q.status==="compatible")return V1(Q.url,J.authToken)}await new Promise((Q)=>setTimeout(Q,Sz))}return}async function gz($){let f=Date.now()+Ez;while(Date.now()<f){if(!(await D0($).catch(()=>{return}))?.url)return!0;await new Promise((Q)=>setTimeout(Q,bz))}return!1}function vz($,f){try{return A1($)===A1(f)}catch{return!1}}function uz($){return($&&typeof $==="object"&&Array.isArray($.sessions)?$.sessions:[]).some((J)=>{if(!J||typeof J!=="object")return!1;let Q=J;if(Q.status==="running"||Q.status==="idle"||Q.status==="pending")return!0;return Array.isArray(Q.participants)&&Q.participants.length>0})}async function cz($,f,J){let Q=new e0({url:$,authToken:f,clientType:"hub-recovery-check",displayName:"hub recovery check",workspaceRoot:J?.workspaceRoot,cwd:J?.cwd});try{let Z=await Q.command("session.list",{limit:500},void 0,{timeoutMs:hz});return!uz(Z.payload)}catch{return!1}finally{await Q.dispose().catch(()=>{return})}}async function O6($={}){if($.endpoint?.trim()){let Z=await PQ($.endpoint);return Z.status==="compatible"?Z.url:void 0}let f=V0(),J=await B0(f.discoveryPath);if(!J?.url)return;let Q=await PQ(J.url);if(Q.status==="compatible")return V1(Q.url,J.authToken);if(Q.status==="build_mismatch")await d0(f.discoveryPath).catch(()=>{return});return}async function e1($={}){let f=await O6($);if(f&&await j$(f,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return f;if($.endpoint?.trim())return;let J=V0();return await W8($.workspaceRoot??process.cwd()),await mz(J)}async function L6($,f){let J=new URL($),Q=f?.trim()||hY(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:Q?{authorization:`Bearer ${Q}`}:void 0})).ok}async function RQ(){let $=V0(),f=await B0($.discoveryPath);if(!f?.url)return!1;try{if(await L6(f.url,f.authToken))return!0}catch{}return!1}async function aJ($){if(!FQ($.url))return;let f=V0(),J=await B0(f.discoveryPath);if(!J?.url||!vz(J.url,$.url))return;if(!await cz(J.url,J.authToken,{workspaceRoot:$.workspaceRoot,cwd:$.cwd}))return;if(!await RQ())return;if(!await gz(J.url))return;return await d0(f.discoveryPath).catch(()=>{return}),await e1({workspaceRoot:$.workspaceRoot,cwd:$.cwd})}var pY={};y(pY,{HubRuntimeHost:()=>w$});import{captureSdkError as bY,createSessionId as kY,HUB_CHECKPOINT_CAPABILITY as rz,HUB_COMPACTION_CAPABILITY as iz,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as nz,HUB_HOOK_CAPABILITY_PREFIX as az,HUB_MISTAKE_LIMIT_CAPABILITY as tz,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as sz,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as oz,isHubToolExecutorName as ez}from"@cline/shared";var EY={};y(EY,{createCoreSessionSnapshot:()=>X$,coreSessionSnapshotToRecord:()=>tJ});function dz($){return $?JSON.parse(JSON.stringify($)):void 0}function lz($){return $?JSON.parse(JSON.stringify($)):void 0}function pz($){let f=$?.checkpoint&&typeof $.checkpoint==="object"&&!Array.isArray($.checkpoint)?$.checkpoint:void 0,Q=(Array.isArray(f?.history)?f.history:[]).filter((j)=>!!j&&typeof j==="object"&&!Array.isArray(j)).flatMap((j)=>{let X=typeof j.ref==="string"?j.ref.trim():"",H=Number(j.createdAt),Y=Number(j.runCount);if(!X||!Number.isFinite(H)||!Number.isInteger(Y))return[];return[{ref:X,createdAt:H,runCount:Y,...j.kind==="stash"||j.kind==="commit"?{kind:j.kind}:{}}]}),Z=Q.at(-1),W=$?.checkpointEnabled===!0?!0:void 0;if(!W&&Q.length===0)return;return{...W?{enabled:W}:{},...Z?{latest:Z}:{},history:Q}}function X$($){let{session:f}=$,J=dz(f.metadata);return{version:1,sessionId:f.sessionId,source:f.source,status:f.status,createdAt:f.startedAt,updatedAt:f.updatedAt,endedAt:f.endedAt??null,exitCode:f.exitCode??null,interactive:f.interactive,workspace:{cwd:f.cwd,root:f.workspaceRoot},model:{providerId:f.provider,modelId:f.model},capabilities:{enableTools:f.enableTools,enableSpawn:f.enableSpawn,enableTeams:f.enableTeams},lineage:{...f.parentSessionId?{parentSessionId:f.parentSessionId}:{},...f.parentAgentId?{parentAgentId:f.parentAgentId}:{},...f.agentId?{agentId:f.agentId}:{},...f.conversationId?{conversationId:f.conversationId}:{},isSubagent:f.isSubagent},...f.teamName?{team:{name:f.teamName}}:{},...f.prompt?{prompt:f.prompt}:{},...J?{metadata:J}:{},...f.messagesPath?{artifacts:{messagesPath:f.messagesPath}}:{},...$.messages?{messages:lz($.messages)}:{},...$.usage?{usage:{...$.usage}}:{},...$.aggregateUsage?{aggregateUsage:{...$.aggregateUsage}}:{},...(()=>{let Q=pz(J);return Q?{checkpoint:Q}:{}})()}}function tJ($){return{sessionId:$.sessionId,parentSessionId:$.lineage.parentSessionId,agentId:$.lineage.agentId,parentAgentId:$.lineage.parentAgentId,conversationId:$.lineage.conversationId,isSubagent:$.lineage.isSubagent,source:$.source,startedAt:$.createdAt,endedAt:$.endedAt??void 0,exitCode:$.exitCode??void 0,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspaceRoot:$.workspace.root,teamName:$.team?.name,enableTools:$.capabilities.enableTools,enableSpawn:$.capabilities.enableSpawn,enableTeams:$.capabilities.enableTeams,prompt:$.prompt,metadata:$.metadata,updatedAt:$.updatedAt,messagesPath:$.artifacts?.messagesPath}}function X8($){if(!$)return;return JSON.parse(JSON.stringify($))}var $_=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function IY($){if(!$||typeof $!=="object"||Array.isArray($))return;return JSON.parse(JSON.stringify($))}function xY($){if(!$)return;let{userInstructionService:f,...J}=$;return JSON.parse(JSON.stringify(J))}function mY($){let f=$&&typeof $==="object"&&!Array.isArray($)?$:{};return{agentId:typeof f.agentId==="string"?f.agentId:"",conversationId:typeof f.conversationId==="string"?f.conversationId:"",iteration:typeof f.iteration==="number"?f.iteration:0,metadata:f.metadata&&typeof f.metadata==="object"&&!Array.isArray(f.metadata)?f.metadata:void 0}}function $2($,f,J){$.manifest.push(f),$.handlers.set(f.capabilityName,J)}function gY($,f){let J={manifest:[],handlers:new Map};for(let Z of Object.keys(f.toolExecutors??{}).filter(ez)){let W=f.toolExecutors?.[Z];if(typeof W!=="function")continue;$2(J,{kind:"toolExecutor",executor:Z,capabilityName:`${sz}${Z}`},async({payload:j,abortSignal:X})=>{let H=Array.isArray(j.args)?[...j.args]:[],Y={...mY(j.context),signal:X};return{result:await W(...H,Y)}})}for(let Z of $?.extraTools??[])$2(J,{kind:"tool",name:Z.name,description:Z.description,inputSchema:X8(Z.inputSchema)??{},...Z.lifecycle?{lifecycle:X8(Z.lifecycle)}:{},capabilityName:`${nz}${Z.name}`},async({payload:W,abortSignal:j,progress:X})=>{let H={...mY(W.context),signal:j};return{result:await Z.execute(W.input,{...H,emitUpdate:(V)=>{X({update:V})}})}});let Q=$?.hooks;if(Q)for(let Z of $_){let W=Q[Z];if(typeof W!=="function")continue;$2(J,{kind:"hook",name:Z,capabilityName:`${az}${Z}`},async({payload:j})=>({control:await W(j.context)}))}if($?.compaction?.compact){let Z=$.compaction.compact;$2(J,{kind:"compaction",capabilityName:iz,config:IY($.compaction)},async({payload:W})=>({result:await Z(W.context)}))}if($?.checkpoint?.createCheckpoint){let Z=$.checkpoint.createCheckpoint;$2(J,{kind:"checkpoint",capabilityName:rz,config:IY($.checkpoint)},async({payload:W})=>({result:await Z(W.context)}))}if($?.onConsecutiveMistakeLimitReached){let Z=$.onConsecutiveMistakeLimitReached;$2(J,{kind:"mistakeLimit",capabilityName:tz},async({payload:W})=>({result:await Z(W.context)}))}if($?.userInstructionService){let Z=$.userInstructionService;$2(J,{kind:"userInstructionService",capabilityName:oz},async()=>{return await Z.start().catch(()=>{}),{snapshot:{records:{skill:Z.listRecords("skill"),rule:Z.listRecords("rule"),workflow:Z.listRecords("workflow")},runtimeCommands:Z.listRuntimeCommands()}}})}return J}function dY($){if(typeof $==="string"&&$.trim())return $.trim();if($ instanceof Error)return $.message.trim()||void 0;if($&&typeof $==="object"&&"message"in $){let f=$.message;if(typeof f==="string"&&f.trim())return f.trim()}return}function f_($){return dY($)??"Capability request was cancelled."}function J_($){if(typeof $!=="string")return $;try{return JSON.parse($)}catch{return $}}function Q_($){return $==="completed"||$==="max_iterations"||$==="aborted"||$==="mistake_limit"||$==="error"}function Z_($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=typeof f.inputTokens==="number"?f.inputTokens:void 0,Q=typeof f.outputTokens==="number"?f.outputTokens:void 0;if(J===void 0||Q===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:typeof f.cacheReadTokens==="number"?f.cacheReadTokens:0,cacheWriteTokens:typeof f.cacheWriteTokens==="number"?f.cacheWriteTokens:0,totalCost:typeof f.totalCost==="number"?f.totalCost:0}}function vY($){if(!$)return;return{inputTokens:typeof $.inputTokens==="number"?$.inputTokens:0,outputTokens:typeof $.outputTokens==="number"?$.outputTokens:0,cacheReadTokens:typeof $.cacheReadTokens==="number"?$.cacheReadTokens:0,cacheWriteTokens:typeof $.cacheWriteTokens==="number"?$.cacheWriteTokens:0,totalCost:typeof $.totalCost==="number"?$.totalCost:0}}function LQ($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function B1($,f){return LQ($?.[f])??0}function W_($){let f=$?.delta&&typeof $.delta==="object"?$.delta:void 0,J=$?.totals&&typeof $.totals==="object"?$.totals:void 0,Q=$?.agent&&typeof $.agent==="object"?$.agent:void 0,Z=Q?.teamRole==="teammate"||Q?.teamRole==="lead"?Q.teamRole:void 0;return{event:{type:"usage",agentId:typeof Q?.agentId==="string"?Q.agentId:void 0,conversationId:typeof Q?.conversationId==="string"?Q.conversationId:void 0,parentAgentId:typeof Q?.parentAgentId==="string"?Q.parentAgentId:void 0,inputTokens:B1(f,"inputTokens"),outputTokens:B1(f,"outputTokens"),cacheReadTokens:B1(f,"cacheReadTokens"),cacheWriteTokens:B1(f,"cacheWriteTokens"),cost:LQ(f?.totalCost),totalInputTokens:B1(J,"inputTokens"),totalOutputTokens:B1(J,"outputTokens"),totalCacheReadTokens:B1(J,"cacheReadTokens"),totalCacheWriteTokens:B1(J,"cacheWriteTokens"),totalCost:LQ(J?.totalCost)},teamAgentId:typeof Q?.teamAgentId==="string"?Q.teamAgentId:void 0,teamRole:Z}}function j_($){let f=$?.result&&typeof $.result==="object"&&!Array.isArray($.result)?$.result:void 0,J=$?.reason??f?.finishReason,Q=Q_(J)?J:J==="failed"?"error":"completed",Z=Z_($?.usage??f?.usage);return{type:"done",reason:Q,text:typeof $?.text==="string"?$.text:typeof f?.text==="string"?f.text:"",iterations:typeof $?.iterations==="number"?$.iterations:typeof f?.iterations==="number"?f.iterations:0,usage:Z}}function sJ($,f){return $.error?.message??`hub command failed: ${f}`}function z6($){switch($){case"idle":case"completed":return"completed";case"failed":return"failed";case"aborted":return"cancelled";default:return"running"}}function lY($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):void 0;return{sessionId:$.sessionId,parentSessionId:typeof f?.parentSessionId==="string"?f.parentSessionId:void 0,agentId:$.runtimeSession?.agentId||(typeof f?.agentId==="string"?f.agentId:void 0),parentAgentId:typeof f?.parentAgentId==="string"?f.parentAgentId:void 0,conversationId:typeof f?.conversationId==="string"?f.conversationId:void 0,isSubagent:typeof f?.isSubagent==="boolean"?f.isSubagent:!1,source:typeof f?.source==="string"?f.source:G0.CORE,pid:typeof f?.pid==="number"?f.pid:void 0,startedAt:new Date($.createdAt).toISOString(),endedAt:z6($.status)==="running"?void 0:new Date($.updatedAt).toISOString(),exitCode:z6($.status)==="completed"?0:z6($.status)==="failed"?1:void 0,status:z6($.status),interactive:f?.interactive===!0,provider:typeof f?.provider==="string"?f.provider:"hub",model:typeof f?.model==="string"?f.model:"hub",cwd:$.cwd?.trim()||$.workspaceRoot,workspaceRoot:$.workspaceRoot,teamName:typeof f?.teamName==="string"?f.teamName:void 0,enableTools:$.runtimeOptions?.enableTools??f?.enableTools===!0,enableSpawn:$.runtimeOptions?.enableSpawn??f?.enableSpawn===!0,enableTeams:$.runtimeOptions?.enableTeams??f?.enableTeams===!0,prompt:typeof f?.prompt==="string"?f.prompt:void 0,metadata:f,updatedAt:new Date($.updatedAt).toISOString(),messagesPath:typeof f?.messagesPath==="string"?f.messagesPath:void 0,hookPath:typeof f?.hookPath==="string"?f.hookPath:void 0}}function G1($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$;return f.version===1&&typeof f.sessionId==="string"?JSON.parse(JSON.stringify(f)):void 0}function X_($){let f=G1($?.snapshot);if(f)return tJ(f);let J=$?.session;return J?lY(J):void 0}function uY($,f,J){let Q=J?.workspaceRoot?.trim()||f.config.workspaceRoot||f.config.cwd;return q0.parse({version:1,session_id:$,source:f.source??G0.CORE,pid:process.pid,started_at:new Date(J?.createdAt??Date.now()).toISOString(),status:z6(J?.status),interactive:f.interactive===!0,provider:f.config.providerId,model:f.config.modelId,cwd:J?.cwd?.trim()||f.config.cwd,workspace_root:Q,team_name:f.config.teamName,enable_tools:f.config.enableTools,enable_spawn:f.config.enableSpawnAgent,enable_teams:f.config.enableAgentTeams,prompt:f.prompt?.trim()||void 0,metadata:f.sessionMetadata&&Object.keys(f.sessionMetadata).length>0?f.sessionMetadata:void 0})}function cY($,f){return q0.parse({version:1,session_id:$.sessionId,source:$.source,pid:process.pid,started_at:$.createdAt,status:$.status,interactive:$.interactive,provider:$.model.providerId,model:$.model.modelId,cwd:$.workspace.cwd,workspace_root:$.workspace.root,team_name:$.team?.name,enable_tools:$.capabilities.enableTools,enable_spawn:$.capabilities.enableSpawn,enable_teams:$.capabilities.enableTeams,prompt:($.prompt??f.prompt?.trim())||void 0,metadata:$.metadata,messages_path:$.artifacts?.messagesPath})}class w${runtimeAddress;pendingPrompts;client;clientOptions;clientContext;events=new F6;sessionCapabilities=new Map;sessionClientContributionHandlers=new Map;sessionSubscriptions=new Map;pendingApprovalToolCallIds=new Set;agentDoneEmittedForCurrentRunBySession=new Set;activeCapabilityAbortControllers=new Map;defaultCapabilities;telemetry;constructor($,f){this.clientContext=f,this.clientOptions={authToken:$.authToken,clientType:$.clientType??"core-hub-runtime",displayName:$.displayName??"core hub runtime",workspaceRoot:f?.workspaceRoot,cwd:f?.cwd},this.defaultCapabilities=P0($.capabilities)??{},this.telemetry=$.telemetry,this.runtimeAddress=$.url,this.pendingPrompts={list:(J)=>this.requestPendingPromptsList(J),update:(J)=>this.requestPendingPromptUpdate(J),delete:(J)=>this.requestPendingPromptDelete(J)},this.client=this.createClient($.url)}createClient($){return new e0({...this.clientOptions,url:$})}async replaceClient($){let f=this.client;this.client=this.createClient($),this.runtimeAddress=$,await Promise.resolve(f.dispose()).catch(()=>{return})}async recoverLocalHubStartupDeadlock($){if(!nJ($,"session.create"))return!1;let f=await aJ({url:this.client.getUrl(),workspaceRoot:this.clientContext?.workspaceRoot,cwd:this.clientContext?.cwd}).catch(()=>{return});if(!f)return!1;return await this.replaceClient(f),!0}registerPlannedSession($,f,J){if(this.sessionCapabilities.set($,f),J.size>0)this.sessionClientContributionHandlers.set($,J);this.ensureSessionSubscription($)}cleanupPlannedSession($){this.sessionCapabilities.delete($),this.sessionClientContributionHandlers.delete($),this.disposeSessionSubscription($)}async connect(){await this.client.connect()}async startSession($){let f=this.resolveCapabilities($),J=gY($.localRuntime,f),Q=$.config.sessionId?.trim()||kY(),Z=()=>this.client.command("session.create",{workspaceRoot:$.config.workspaceRoot?.trim()||$.config.cwd,cwd:$.config.cwd,sessionConfig:X8({...$.config,sessionId:Q}),metadata:{...$.sessionMetadata??{},source:$.source??G0.CORE,provider:$.config.providerId,model:$.config.modelId,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,teamName:$.config.teamName,prompt:$.prompt,interactive:$.interactive===!0},runtimeOptions:{...J.manifest.length>0?{clientContributions:J.manifest}:{},...$.localRuntime?.configExtensions?{configExtensions:$.localRuntime.configExtensions}:{}},toolPolicies:X8($.toolPolicies),initialMessages:$.initialMessages});this.registerPlannedSession(Q,f,J.handlers);let W;try{W=await Z()}catch(Y){if(this.cleanupPlannedSession(Q),await this.recoverLocalHubStartupDeadlock(Y)){this.registerPlannedSession(Q,f,J.handlers);try{W=await Z()}catch(V){throw this.cleanupPlannedSession(Q),V}}else throw Y}let j=G1(W.payload?.snapshot),X=W.payload?.session,H=(j?.sessionId??X?.sessionId)?.trim();if(!H)throw this.cleanupPlannedSession(Q),Error("Hub runtime did not return a session id.");if(H!==Q)this.cleanupPlannedSession(Q),this.registerPlannedSession(H,f,J.handlers);return{sessionId:H,manifest:j?cY(j,$):uY(H,$,X),manifestPath:"",messagesPath:"",result:void 0}}async restoreSession($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.start)throw Error("start is required when restore.messages is true");let Q=$.start,Z=Q?this.resolveCapabilities(Q):void 0,W=Q?gY(Q.localRuntime,Z??{}):{manifest:[],handlers:new Map},j=Q?Q.config.sessionId?.trim()||kY():void 0;if(j&&Z)this.sessionCapabilities.set(j,Z);if(j&&W.handlers.size>0)this.sessionClientContributionHandlers.set(j,W.handlers),this.ensureSessionSubscription(j);let X;try{X=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.config.workspaceRoot?.trim()||Q.config.cwd,cwd:Q.config.cwd??$.cwd,sessionConfig:X8({...Q.config,sessionId:j}),metadata:{...Q.sessionMetadata??{},source:Q.source??G0.CORE,provider:Q.config.providerId,model:Q.config.modelId,enableTools:Q.config.enableTools,enableSpawn:Q.config.enableSpawnAgent,enableTeams:Q.config.enableAgentTeams,teamName:Q.config.teamName,prompt:Q.prompt,interactive:Q.interactive===!0},runtimeOptions:{...W.manifest.length>0?{clientContributions:W.manifest}:{},...Q.localRuntime?.configExtensions?{configExtensions:Q.localRuntime.configExtensions}:{}},toolPolicies:X8(Q.toolPolicies)}:{}},f)}catch(G){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw G}if(!X.ok){let G=typeof X.payload?.error==="string"?X.payload.error:"session.restore failed";if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error(G)}let H=G1(X.payload?.snapshot),Y=X.payload?.session,V=(H?.sessionId??Y?.sessionId)?.trim();if(J&&!V){if(j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);throw Error("Hub checkpoint restore returned no session id")}if(V&&j&&V!==j)this.sessionCapabilities.delete(j),this.sessionClientContributionHandlers.delete(j),this.disposeSessionSubscription(j);if(V&&Z)this.sessionCapabilities.set(V,Z);if(V&&W.handlers.size>0)this.sessionClientContributionHandlers.set(V,W.handlers);if(V)this.ensureSessionSubscription(V);let A=Array.isArray(X.payload?.messages)?X.payload.messages:void 0,B=X.payload?.checkpoint;if(!B)throw Error("Hub checkpoint restore returned no checkpoint");return{sessionId:V,startResult:V?{sessionId:V,manifest:H?cY(H,Q??{}):uY(V,Q??{},Y),manifestPath:"",messagesPath:"",result:void 0}:void 0,messages:A,checkpoint:B}}async runTurn($){return this.ensureSessionSubscription($.sessionId),(await this.client.command("run.start",{sessionId:$.sessionId,input:$.prompt,mode:$.mode,attachments:($.userImages?.length??0)>0||($.userFiles?.length??0)>0?{...$.userImages?.length?{userImages:$.userImages}:{},...$.userFiles?.length?{userFiles:$.userFiles}:{}}:void 0,delivery:$.delivery,timeoutMs:$.timeoutMs},$.sessionId,{timeoutMs:null})).payload?.result}async requestPendingPromptsList($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.pending_prompts",{sessionId:$.sessionId},$.sessionId);return Array.isArray(f.payload?.prompts)?f.payload.prompts:[]}async requestPendingPromptUpdate($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.update_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,updated:f.payload?.updated===!0}}async requestPendingPromptDelete($){this.ensureSessionSubscription($.sessionId);let f=await this.client.command("session.remove_pending_prompt",{...$},$.sessionId);return{sessionId:$.sessionId,prompts:Array.isArray(f.payload?.prompts)?f.payload.prompts:[],prompt:f.payload?.prompt,removed:f.payload?.removed===!0}}async getAccumulatedUsage($){let f=await this.client.command("session.get",{includeSnapshot:!0},$),J=G1(f.payload?.snapshot);if(J){let j=J.usage?{...J.usage}:void 0,X=J.aggregateUsage?{...J.aggregateUsage}:void 0;return j||X?{usage:j,aggregateUsage:X}:void 0}let Q=f.payload?.session,Z=vY(Q?.usage),W=vY(Q?.aggregateUsage);return Z||W?{usage:Z,aggregateUsage:W}:void 0}async abort($,f){await this.client.command("run.abort",{sessionId:$,reason:dY(f)},$)}async stopSession($){this.sessionCapabilities.delete($),this.disposeSessionSubscription($),await this.client.command("session.detach",{sessionId:$},$)}async dispose(){for(let[$,f]of this.sessionSubscriptions){f();try{await this.client.command("session.detach",{sessionId:$},$)}catch{}}this.sessionSubscriptions.clear(),this.sessionCapabilities.clear(),this.agentDoneEmittedForCurrentRunBySession.clear();for(let $ of this.activeCapabilityAbortControllers.values())$.abort("Hub runtime host disposed.");this.activeCapabilityAbortControllers.clear(),await this.client.dispose()}async getSession($){let f=await this.client.command("session.get",void 0,$);return X_(f.payload)}async listSessions($=100){let f=await this.client.command("session.list",{limit:$}),J=Array.isArray(f.payload?.snapshots)?f.payload.snapshots.flatMap((Z)=>{let W=G1(Z);return W?[tJ(W)]:[]}):[];if(J.length>0)return J;return(f.payload?.sessions??[]).map(lY)}async listSettings($){let f=await this.client.command("settings.list",xY($));if(!f.ok)throw Error(sJ(f,"settings.list"));return f.payload?.snapshot}async toggleSetting($){let f=await this.client.command("settings.toggle",xY($));if(!f.ok)throw Error(sJ(f,"settings.toggle"));return{snapshot:f.payload?.snapshot,changedTypes:Array.isArray(f.payload?.changedTypes)?f.payload.changedTypes:[]}}async deleteSession($){return this.sessionCapabilities.delete($),this.disposeSessionSubscription($),(await this.client.command("session.delete",{sessionId:$})).payload?.deleted===!0}async updateSession($,f){let J={...f.metadata??{}};if(typeof f.prompt==="string")J.prompt=f.prompt;if(typeof f.title==="string")J.title=f.title;return{updated:(await this.client.command("session.update",{sessionId:$,metadata:J})).ok}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw bY(this.telemetry,{component:"core",operation:"hub.runtime_host.read_session_messages",error:Error(sJ(J,"session.messages")),severity:J.error?.code==="session_not_found"?"warn":"error",handled:!0,context:{command:"session.messages",sessionId:f,errorCode:J.error?.code,runtimeAddress:this.runtimeAddress}}),Error(sJ(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async dispatchHookEvent($){await this.client.command("session.hook",{payload:$})}subscribe($,f){return this.events.subscribe($,f)}ensureSessionSubscription($){let f=$.trim();if(!f||this.sessionSubscriptions.has(f))return;let J=this.client.subscribe((Q)=>{this.handleHubEvent(Q)},{sessionId:f});this.sessionSubscriptions.set(f,typeof J==="function"?J:()=>{})}disposeSessionSubscription($){let f=$.trim();if(!f)return;this.sessionSubscriptions.get(f)?.(),this.sessionSubscriptions.delete(f),this.agentDoneEmittedForCurrentRunBySession.delete(f)}resolveCapabilities($){return P0(this.defaultCapabilities,$.capabilities)??{}}emitToolCallContentStart($){this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:{type:"content_start",contentType:"tool",toolCallId:$.toolCallId,toolName:$.toolName,input:$.toolInput}}})}emitAgentDoneIfNeeded($){if(this.agentDoneEmittedForCurrentRunBySession.has($.sessionId))return;this.agentDoneEmittedForCurrentRunBySession.add($.sessionId),this.events.emit({type:"agent_event",payload:{sessionId:$.sessionId,event:j_($.payload)}})}handleHubEvent($){let f=$.sessionId?.trim();if($.event==="capability.requested"){this.handleCapabilityRequest($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_request",J,$)});return}if($.event==="capability.resolved"){this.handleCapabilityResolved($);return}if($.event==="approval.requested"){this.handleApprovalRequested($).catch((J)=>{this.captureDetachedHubEventError("hub.runtime_host.approval_request",J,$)});return}if(!f)return;switch($.event){case"run.started":{this.agentDoneEmittedForCurrentRunBySession.delete(f);let J=G1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"iteration.started":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_start",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0}}});return}case"iteration.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"iteration_end",iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,hadToolCalls:$.payload?.hadToolCalls===!0,toolCallCount:typeof $.payload?.toolCallCount==="number"?$.payload.toolCallCount:0}}});return}case"assistant.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"";if(!J)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"text",text:J}}});return}case"assistant.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"text",text:typeof $.payload?.text==="string"?$.payload.text:void 0}}});return}case"reasoning.delta":{let J=typeof $.payload?.text==="string"?$.payload.text:"",Q=$.payload?.redacted===!0;if(!J&&!Q)return;this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_start",contentType:"reasoning",reasoning:J,redacted:Q}}});return}case"reasoning.finished":{this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"reasoning",reasoning:typeof $.payload?.reasoning==="string"?$.payload.reasoning:void 0}}});return}case"agent.done":{this.emitAgentDoneIfNeeded({sessionId:f,payload:$.payload});return}case"usage.updated":{let J=W_($.payload);this.events.emit({type:"agent_event",payload:{sessionId:f,event:J.event,teamAgentId:J.teamAgentId,teamRole:J.teamRole}});return}case"tool.started":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J&&this.pendingApprovalToolCallIds.delete(J))return;this.emitToolCallContentStart({sessionId:f,toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,toolInput:$.payload?.input});return}case"tool.finished":{let J=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:void 0;if(J)this.pendingApprovalToolCallIds.delete(J);this.events.emit({type:"agent_event",payload:{sessionId:f,event:{type:"content_end",contentType:"tool",toolCallId:J,toolName:typeof $.payload?.toolName==="string"?$.payload.toolName:void 0,output:$.payload?.output,error:typeof $.payload?.error==="string"?$.payload.error:void 0}}});return}case"session.created":case"session.updated":case"session.attached":case"session.detached":{let J=G1($.payload?.snapshot),Q=$.payload?.session;if(J)this.events.emit({type:"session_snapshot",payload:{sessionId:f,snapshot:J}});this.events.emit({type:"status",payload:{sessionId:f,status:Q?.status??"running"}});return}case"session.pending_prompts":{this.events.emit({type:"pending_prompts",payload:{sessionId:f,prompts:Array.isArray($.payload?.prompts)?$.payload.prompts:[]}});return}case"session.pending_prompt_submitted":{let J=$.payload?.prompt;if(!J)return;this.events.emit({type:"pending_prompt_submitted",payload:{sessionId:f,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}});return}case"run.completed":case"run.failed":case"run.aborted":{let J=G1($.payload?.snapshot),Q=typeof $.payload?.reason==="string"?$.payload.reason:$.event==="run.aborted"?"aborted":$.event==="run.failed"?"error":"completed";if(this.emitAgentDoneIfNeeded({sessionId:f,payload:{...$.payload,reason:Q}}),J?.interactive===!0&&J0(J.status))return;this.events.emit({type:"ended",payload:{sessionId:f,reason:Q,ts:$.timestamp??Date.now()}});return}default:return}}captureDetachedHubEventError($,f,J){try{bY(this.telemetry,{component:"core",operation:$,error:f,severity:"warn",handled:!0,context:{event:J.event,sessionId:J.sessionId,runtimeAddress:this.runtimeAddress}})}catch{}}async handleCapabilityRequest($){let f=$.sessionId?.trim();if(!f)return;let J=typeof $.payload?.targetClientId==="string"?$.payload.targetClientId:void 0;if(J&&J!==this.client.getClientId())return;let Q=typeof $.payload?.requestId==="string"?$.payload.requestId:"",Z=typeof $.payload?.capabilityName==="string"?$.payload.capabilityName:"";if(!Q)return;let W=this.sessionClientContributionHandlers.get(f)?.get(Z);if(!W){await this.client.command("capability.respond",{requestId:Q,ok:!1,error:`No client contribution handler registered for capability ${Z} in session ${f}.`},f).catch(()=>{});return}let j=$.payload?.payload&&typeof $.payload.payload==="object"&&!Array.isArray($.payload.payload)?$.payload.payload:{},X=new AbortController;this.activeCapabilityAbortControllers.set(Q,X);let H=(Y)=>{this.client.command("capability.progress",{requestId:Q,payload:Y},f).catch((V)=>{this.captureDetachedHubEventError("hub.runtime_host.capability_progress",V,$)})};try{let Y=await W({payload:j,abortSignal:X.signal,progress:H});if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!0,payload:Y},f)}catch(Y){if(X.signal.aborted)return;await this.client.command("capability.respond",{requestId:Q,ok:!1,error:Y instanceof Error?Y.message:String(Y)},f)}finally{this.activeCapabilityAbortControllers.delete(Q)}}handleCapabilityResolved($){if($.payload?.cancelled!==!0)return;let f=typeof $.payload.requestId==="string"?$.payload.requestId.trim():"";if(!f)return;let J=this.activeCapabilityAbortControllers.get(f);if(!J)return;J.abort(f_($.payload.error))}async handleApprovalRequested($){let f=$.sessionId?.trim();if(!f)return;let J=this.sessionCapabilities.get(f)?.requestToolApproval??this.defaultCapabilities.requestToolApproval;if(!J)return;let Q=typeof $.payload?.approvalId==="string"?$.payload.approvalId.trim():"",Z=typeof $.payload?.toolCallId==="string"?$.payload.toolCallId:"",W=typeof $.payload?.toolName==="string"?$.payload.toolName:"";if(!Q||!Z||!W)return;let j=$.payload?.policy&&typeof $.payload.policy==="object"&&!Array.isArray($.payload.policy)?$.payload.policy:{autoApprove:!1},X=J_($.payload?.inputJson);this.pendingApprovalToolCallIds.add(Z),this.emitToolCallContentStart({sessionId:f,toolCallId:Z,toolName:W,toolInput:X});let H=await Promise.resolve(J({sessionId:f,agentId:typeof $.payload?.agentId==="string"?$.payload.agentId:"",conversationId:typeof $.payload?.conversationId==="string"?$.payload.conversationId:f,iteration:typeof $.payload?.iteration==="number"?$.payload.iteration:0,toolCallId:Z,toolName:W,input:X,policy:j})).catch((Y)=>({approved:!1,reason:Y instanceof Error?Y.message:`Tool approval request failed: ${String(Y)}`}));await this.client.command("approval.respond",{approvalId:Q,approved:H.approved,reason:H.reason},f).catch(()=>{})}}var rY={};y(rY,{RemoteRuntimeHost:()=>H8});class H8 extends w${constructor($){super({url:A1($.endpoint),authToken:$.authToken,clientType:$.clientType??"core-remote-runtime",displayName:$.displayName??"core remote runtime",capabilities:$.capabilities},{workspaceRoot:$.workspaceRoot,cwd:$.cwd})}}var iY={};y(iY,{SqliteSessionStore:()=>Y$});import{existsSync as H_,mkdirSync as Y_}from"node:fs";import{join as V_}from"node:path";import{asBool as _6,asOptionalString as H$,asString as S$,ensureSessionSchema as A_,loadSqliteDb as B_,nowIso as oJ,toBoolInt as N6}from"@cline/shared/db";import{resolveDbDataDir as G_}from"@cline/shared/storage";class Y${sessionsDirPath;db;constructor($={}){this.sessionsDirPath=$.sessionsDir??G_()}init(){this.getRawDb()}ensureSessionsDir(){if(!H_(this.sessionsDirPath))Y_(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}sessionDbPath(){return V_(this.ensureSessionsDir(),"sessions.db")}getRawDb(){if(this.db)return this.db;let $=B_(this.sessionDbPath());return A_($,{includeLegacyMigrations:!0}),this.db=$,$}close(){this.db?.close?.(),this.db=void 0}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}create($){let f=oJ();this.run(`INSERT OR REPLACE INTO sessions (
|
|
483
|
+
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
484
|
+
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
485
|
+
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
486
|
+
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
487
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,0,N6($.interactive),$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,N6($.enableTools),N6($.enableSpawn),N6($.enableTeams),$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,N6($.isSubagent),$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"",$.hookPath??"",$.messagesPath??null,f])}update($){let f=[],J=[];if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push($.metadata?JSON.stringify($.metadata):null);if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId);if(f.length===0)return;f.push("updated_at = ?"),J.push(oJ()),J.push($.sessionId),this.run(`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`,J)}updateStatus($,f,J){this.update({sessionId:$,status:f,endedAt:J0(f)?null:oJ(),exitCode:J0(f)?null:J??(f==="failed"?1:0)})}get($){let f=this.queryOne(`SELECT session_id, source, pid, started_at, ended_at, exit_code, status, interactive,
|
|
488
|
+
provider, model, cwd, workspace_root, team_name,
|
|
489
|
+
enable_tools, enable_spawn, enable_teams,
|
|
490
|
+
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent,
|
|
491
|
+
prompt, metadata_json, hook_path, messages_path, updated_at
|
|
492
|
+
FROM sessions WHERE session_id = ?`,[$]);if(!f)return;return{sessionId:S$(f.session_id),source:S$(f.source),pid:Number(f.pid??0),startedAt:S$(f.started_at),endedAt:f.ended_at??null,exitCode:f.exit_code??null,status:S$(f.status),interactive:_6(f.interactive),provider:S$(f.provider),model:S$(f.model),cwd:S$(f.cwd),workspaceRoot:S$(f.workspace_root),teamName:H$(f.team_name),enableTools:_6(f.enable_tools),enableSpawn:_6(f.enable_spawn),enableTeams:_6(f.enable_teams),parentSessionId:H$(f.parent_session_id),parentAgentId:H$(f.parent_agent_id),agentId:H$(f.agent_id),conversationId:H$(f.conversation_id),isSubagent:_6(f.is_subagent),prompt:H$(f.prompt),metadata:(()=>{let J=H$(f.metadata_json);if(!J)return;try{let Q=JSON.parse(J);if(Q&&typeof Q==="object"&&!Array.isArray(Q))return Q}catch{}return})(),hookPath:H$(f.hook_path),messagesPath:H$(f.messages_path),updatedAt:H$(f.updated_at)??oJ()}}list($=200){let f=this.queryAll("SELECT session_id FROM sessions ORDER BY started_at DESC LIMIT ?",[$]),J=[];for(let Q of f){let Z=this.get(S$(Q.session_id));if(Z)J.push(Z)}return J}delete($,f=!1){let J=this.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}}eJ();import{existsSync as hQ,mkdirSync as l_,readFileSync as ZV,renameSync as p_,writeFileSync as r_}from"node:fs";import{join as WV}from"node:path";import{resolveSessionDataDir as i_}from"@cline/shared/storage";import{dirname as c_}from"node:path";import{nanoid as d_}from"nanoid";import{appendFileSync as M_,existsSync as q_,mkdirSync as nY,readFileSync as y_,writeFileSync as aY}from"node:fs";import{dirname as tY,join as w_}from"node:path";import{ensureHookLogDir as S_}from"@cline/shared/storage";class OQ{adapter;messagesArtifactUploader;logger;artifacts;constructor($,f,J){this.adapter=$;this.messagesArtifactUploader=f;this.logger=J;this.artifacts=new A7(()=>this.ensureSessionsDir())}ensureSessionsDir(){return this.adapter.ensureSessionsDir()}initializeMessagesFile($,f,J){Qj(f,J,q9($))}writeSessionManifest($,f){nY(tY($),{recursive:!0}),aY($,`${JSON.stringify(q0.parse(f),null,2)}
|
|
493
|
+
`,"utf8")}readSessionManifest($){return this.readManifestFile($).manifest}readManifestFile($){let f=this.artifacts.sessionManifestPath($,!1);if(!q_(f))return{path:f};try{return{path:f,manifest:q0.parse(JSON.parse(y_(f,"utf8")))}}catch{return{path:f}}}async resolveArtifactPath($,f,J){let Z=(await this.adapter.getSession($))?.[f];return typeof Z==="string"&&Z.trim().length>0?Z:J($)}async persistSessionMessages($,f,J){let Q=await this.resolveArtifactPath($,"messagesPath",(j)=>this.artifacts.sessionMessagesPath(j)),Z=y9({updatedAt:s(),context:q9($),messages:f,systemPrompt:J}),W=`${JSON.stringify(Z,null,2)}
|
|
494
|
+
`;if(nY(tY(Q),{recursive:!0}),aY(Q,W,"utf8"),!this.messagesArtifactUploader)return;try{let j=await this.adapter.getSession($);await this.messagesArtifactUploader.uploadMessagesFile({sessionId:$,path:Q,contents:W,row:j})}catch(j){this.logger?.debug("Failed to upload persisted session messages",{sessionId:$,error:j})}}appendStaleSessionHookLog($,f,J,Q,Z){let j=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??w_(S_(),"hooks.jsonl");M_(j,`${JSON.stringify({ts:$,hookName:"session_shutdown",reason:Q,sessionId:f,pid:J,source:Z})}
|
|
495
|
+
`,"utf8")}}import{appendFileSync as C_}from"node:fs";import{join as h_}from"node:path";import{resolveRootSessionId as sY}from"@cline/shared";import{ensureHookLogDir as E_}from"@cline/shared/storage";import{z as zQ}from"zod";var b_="subagent",k_=zQ.looseObject({task:zQ.string().optional(),systemPrompt:zQ.string().optional()});class $5{adapter;manifestStore;toPersistedMessages;heartbeatLogIntervalMs;teamTaskSessionsByAgent=new Map;teamTaskLastHeartbeatBySession=new Map;teamTaskLastProgressLineBySession=new Map;constructor($,f,J,Q){this.adapter=$;this.manifestStore=f;this.toPersistedMessages=J;this.heartbeatLogIntervalMs=Q}teamTaskQueueKey($,f){return`${$}::${f}`}activeTeamTaskSessionId($,f){return this.teamTaskSessionsByAgent.get(this.teamTaskQueueKey($,f))?.at(-1)}buildSubsessionRow($,f){return{sessionId:f.sessionId,source:b_,pid:process.ppid,startedAt:f.startedAt,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:!1,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:f.parentSessionId,parentAgentId:f.parentAgentId,agentId:f.agentId,conversationId:f.conversationId??null,isSubagent:!0,prompt:f.prompt,metadata:H4({prompt:f.prompt}),hookPath:"",messagesPath:f.messagesPath,updatedAt:f.startedAt}}async queueSpawnRequest($){if($.hookName!=="tool_call"||$.parent_agent_id!==null)return;if($.tool_call?.name!=="spawn_agent")return;let f=sY($.sessionContext);if(!f)return;let J=k_.safeParse($.tool_call.input);await this.adapter.enqueueSpawnRequest({rootSessionId:f,parentAgentId:$.agent_id,task:J.success?J.data.task:void 0,systemPrompt:J.success?J.data.systemPrompt:void 0})}async upsertSubagentSession($){let f=$.rootSessionId;if(!f)return;let J=await this.adapter.getSession(f);if(!J)return;let Q=T2(f,$.agentId),Z=await this.adapter.getSession(Q),W=s(),j=this.manifestStore.artifacts.subagentArtifactPaths(Q,$.agentId,this.activeTeamTaskSessionId(f,$.parentAgentId)),X=$.prompt??Z?.prompt??void 0;if(!X)X=await this.adapter.claimSpawnRequest(f,$.parentAgentId)??`Subagent run by ${$.parentAgentId}`;if(!Z)return await this.adapter.upsertSession(this.buildSubsessionRow(J,{sessionId:Q,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:X,startedAt:W,...j})),this.manifestStore.initializeMessagesFile(Q,j.messagesPath,W),Q;return await this.adapter.updateSession({sessionId:Q,setRunning:!0,parentSessionId:f,parentAgentId:$.parentAgentId,agentId:$.agentId,conversationId:$.conversationId,prompt:Z.prompt??X??null,metadata:H4({metadata:Z.metadata??void 0,prompt:Z.prompt??X??null}),expectedStatusLock:Z.statusLock}),Q}async upsertSubagentSessionFromHook($){if(!$.parent_agent_id)return;let f=sY($.sessionContext);if(!f)return;if($.hookName==="session_shutdown"){let J=T2(f,$.agent_id);return await this.adapter.getSession(J)?J:void 0}return await this.upsertSubagentSession({agentId:$.agent_id,parentAgentId:$.parent_agent_id,conversationId:$.taskId,rootSessionId:f})}async applySubagentStatus($,f){await this.applySubagentStatusBySessionId($,W4(f))}async applySubagentStatusBySessionId($,f){let J=await this.adapter.getSession($);if(!J)return;let Q=J0(f)?null:s(),Z=J0(f)?null:f==="failed"?1:0;await this.adapter.updateSession({sessionId:$,status:f,endedAt:Q,exitCode:Z,expectedStatusLock:J.statusLock})}async applyStatusToRunningChildSessions($,f){if(!$)return;let J=await this.adapter.listSessions({limit:2000,parentSessionId:$,status:"running"});for(let Q of J)await this.applySubagentStatusBySessionId(Q.sessionId,f)}async onTeamTaskStart($,f,J){let Q=await this.adapter.getSession($);if(!Q)return;let Z=Q4($,f),W=s(),{messagesPath:j}=this.manifestStore.artifacts.subagentArtifactPaths(Z,f);await this.adapter.upsertSession(this.buildSubsessionRow(Q,{sessionId:Z,parentSessionId:$,parentAgentId:"lead",agentId:f,prompt:J||`Team task for ${f}`,startedAt:W,messagesPath:j})),this.manifestStore.initializeMessagesFile(Z,j,W);let X=this.teamTaskQueueKey($,f),H=this.teamTaskSessionsByAgent.get(X)??[];H.push(Z),this.teamTaskSessionsByAgent.set(X,H)}async onTeamTaskEnd($,f,J,Q,Z,W){let j=this.teamTaskQueueKey($,f),X=this.teamTaskSessionsByAgent.get(j);if(!X||X.length===0)return;let H=X.shift();if(X.length===0)this.teamTaskSessionsByAgent.delete(j);if(!H)return;let Y=Z?.messages??W,V=this.toPersistedMessages(Y,Z,W);if(V)await this.manifestStore.persistSessionMessages(H,V);await this.applySubagentStatusBySessionId(H,J),this.teamTaskLastHeartbeatBySession.delete(H),this.teamTaskLastProgressLineBySession.delete(H)}async onTeamTaskProgress($,f,J,Q){let Z=this.teamTaskQueueKey($,f),W=this.teamTaskSessionsByAgent.get(Z)?.[0];if(!W)return;let j=J.trim();if(!j)return;let X=Q?.kind??"progress";if(X==="heartbeat"){let Y=Date.now(),V=this.teamTaskLastHeartbeatBySession.get(W)??0;if(Y-V<this.heartbeatLogIntervalMs)return;this.teamTaskLastHeartbeatBySession.set(W,Y)}let H=X==="heartbeat"?"[progress] heartbeat":X==="text"?`[progress] text: ${j}`:`[progress] ${j}`;if(this.teamTaskLastProgressLineBySession.get(W)===H)return;this.teamTaskLastProgressLineBySession.set(W,H)}async handleSubAgentStart($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;await this.applySubagentStatusBySessionId(J,"running")}async handleSubAgentEnd($,f){let J=await this.upsertSubagentSession({agentId:f.subAgentId,parentAgentId:f.parentAgentId,conversationId:f.conversationId,prompt:f.input.task,rootSessionId:$});if(!J)return;if(f.error){await this.applySubagentStatusBySessionId(J,"failed");return}let Q=this.toPersistedMessages(f.agentResult?.messages,f.agentResult);if(Q)await this.manifestStore.persistSessionMessages(J,Q);let Z=f.result?.finishReason??"completed";await this.applySubagentStatusBySessionId(J,Z==="aborted"?"cancelled":"completed")}appendSubagentHookAudit($){let J=(process.env.CLINE_HOOKS_LOG_PATH?.trim()||void 0)??h_(E_(),"hooks.jsonl");C_(J,`${JSON.stringify({ts:s(),...$})}
|
|
496
|
+
`,"utf8")}}import{formatUserInputBlock as u_}from"@cline/shared";var QV={};y(QV,{toTeamProgressLifecycleEvent:()=>V8,sanitizeTeamName:()=>iW,reviveTeamStateDates:()=>Df,createWorkerReviewerTeam:()=>JV,createSpawnAgentTool:()=>i$,createDelegatedAgentConfigProvider:()=>O2,createDelegatedAgent:()=>z2,createAgentTeamsTools:()=>T1,createAgentTeam:()=>NQ,buildTeamProgressSummary:()=>Y8,buildDelegatedAgentConfig:()=>_1,bootstrapAgentTeams:()=>N2,AgentTeamsRuntime:()=>J2,AgentTeam:()=>B8});function V$(){return new Date().toISOString()}function oY($,f){if(f<=0)return 0;return Math.round($/f*100)}function I_($,f){let J=new Set;for(let Z of f)if(Z.status==="reviewed")J.add(`${Z.outcomeId}:${Z.section}`);let Q=new Set;for(let Z of $){if(Z.status==="finalized")continue;for(let W of Z.requiredSections)if(!J.has(`${Z.id}:${W}`))Q.add(`${Z.id}:${W}`)}return[...Q].sort((Z,W)=>Z.localeCompare(W))}function Y8($,f){let J={idle:0,running:0,stopped:0},Q={pending:0,in_progress:0,blocked:0,completed:0},Z={queued:0,running:0,completed:0,failed:0,cancelled:0,interrupted:0},W={draft:0,in_review:0,finalized:0},j={draft:0,reviewed:0,rejected:0},X=0,H=0;for(let F of f.members)if(J[F.status]+=1,F.role==="lead")X+=1;else H+=1;let Y=[],V=[],A=f.tasks.filter((F)=>F.status==="completed").length,B=new Map(f.tasks.map((F)=>[F.id,F]));for(let F of f.tasks){if(Q[F.status]+=1,F.status==="blocked"){Y.push(F.id);continue}if(F.status!=="pending")continue;if(F.dependsOn.every((U)=>{return B.get(U)?.status==="completed"}))V.push(F.id)}let G=[],K,D=0;for(let F of f.runs){if(Z[F.status]+=1,F.status==="queued"||F.status==="running")G.push(F.id);let P=F.startedAt.getTime();if(P>=D)D=P,K=F.id}for(let F of f.outcomes)W[F.status]+=1;for(let F of f.outcomeFragments)j[F.status]+=1;return{teamName:$,updatedAt:V$(),members:{total:f.members.length,byStatus:J,leadCount:X,teammateCount:H},tasks:{total:f.tasks.length,byStatus:Q,blockedTaskIds:Y,readyTaskIds:V,completionPct:oY(A,f.tasks.length)},runs:{total:f.runs.length,byStatus:Z,activeRunIds:G,latestRunId:K},outcomes:{total:f.outcomes.length,byStatus:W,finalizedPct:oY(W.finalized,f.outcomes.length),missingRequiredSections:I_(f.outcomes,f.outcomeFragments)},fragments:{total:f.outcomeFragments.length,byStatus:j}}}function V8($){let{event:f}=$;switch(f.type){case"team_task_updated":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),taskId:f.task.id,agentId:f.task.assignee??f.task.createdBy};case"run_queued":case"run_started":case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.run.error};case"run_progress":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),runId:f.run.id,taskId:f.run.taskId,agentId:f.run.agentId,message:f.message};case"outcome_created":case"outcome_finalized":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),outcomeId:f.outcome.id};case"outcome_fragment_attached":case"outcome_fragment_reviewed":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),outcomeId:f.fragment.outcomeId,fragmentId:f.fragment.id,agentId:f.fragment.sourceAgentId};case"team_message":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),taskId:f.message.taskId,agentId:f.message.fromAgentId,message:f.message.subject};case"team_mission_log":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),taskId:f.entry.taskId,agentId:f.entry.agentId,message:f.entry.summary};case"teammate_spawned":case"teammate_shutdown":case"task_start":case"task_end":case"agent_event":return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$(),agentId:f.agentId}}return{teamName:$.teamName,sessionId:$.sessionId,eventType:f.type,ts:V$()}}import{sanitizeFileName as x_,TeamMessageType as E}from"@cline/shared";import{nanoid as m_}from"nanoid";import{TeamMessageType as Fx}from"@cline/shared";function _Q($){if(typeof DOMException<"u"&&$ instanceof DOMException&&$.name==="AbortError")return!0;if(!($ instanceof Error))return!1;return $.name==="AbortError"||$.message.toLowerCase().includes("aborted")}function eY($,f){return $?.status==="stopped"&&_Q(f)}var g_=600000,$V="recovered_queued";function v_($){return`This is an automatic recovery of interrupted team run ${$.id}. The previous process stopped before completion. Continue the task safely, inspect the current workspace state before making changes, and avoid duplicating completed work.
|
|
497
|
+
|
|
498
|
+
${$.message}`}class B8{agents=new Map;configs=new Map;onTeamEvent;constructor($,f){if(this.onTeamEvent=f,$)for(let[J,Q]of Object.entries($))this.addAgent(J,Q)}addAgent($,f){if(this.agents.has($))throw Error(`Agent with id "${$}" already exists in the team`);let J={...f,onEvent:(Z)=>{f.onEvent?.(Z),this.emitEvent({type:E.AgentEvent,agentId:$,event:Z})}},Q=new r$(J);if(J.onEvent)Q.subscribeEvents(J.onEvent);this.agents.set($,Q),this.configs.set($,f)}removeAgent($){return this.configs.delete($),this.agents.delete($)}getAgent($){return this.agents.get($)}getAgentIds(){return Array.from(this.agents.keys())}get size(){return this.agents.size}async routeTo($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:E.TaskStart,agentId:$,message:f});try{let Q=await J.run(f);return this.emitEvent({type:E.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let Z=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:E.TaskEnd,agentId:$,error:Z,messages:J.getMessages()}),Q}}async continueTo($,f){let J=this.agents.get($);if(!J)throw Error(`Agent "${$}" not found in team`);this.emitEvent({type:E.TaskStart,agentId:$,message:f});try{let Q=await J.continue(f);return this.emitEvent({type:E.TaskEnd,agentId:$,result:Q}),Q}catch(Q){let Z=Q instanceof Error?Q:Error(String(Q));throw this.emitEvent({type:E.TaskEnd,agentId:$,error:Z,messages:J.getMessages()}),Q}}async runParallel($){let f=$.map(async(J)=>{let Q=this.agents.get(J.agentId);if(!Q)return{agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata};this.emitEvent({type:E.TaskStart,agentId:J.agentId,message:J.message});try{let Z=await Q.run(J.message);return this.emitEvent({type:E.TaskEnd,agentId:J.agentId,result:Z}),{agentId:J.agentId,result:Z,metadata:J.metadata}}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));return this.emitEvent({type:E.TaskEnd,agentId:J.agentId,error:W,messages:Q.getMessages()}),{agentId:J.agentId,result:void 0,error:W,metadata:J.metadata}}});return Promise.all(f)}async runSequential($){let f=[];for(let J of $){let Q=this.agents.get(J.agentId);if(!Q){f.push({agentId:J.agentId,result:void 0,error:Error(`Agent "${J.agentId}" not found in team`),metadata:J.metadata});continue}this.emitEvent({type:E.TaskStart,agentId:J.agentId,message:J.message});try{let Z=await Q.run(J.message);this.emitEvent({type:E.TaskEnd,agentId:J.agentId,result:Z}),f.push({agentId:J.agentId,result:Z,metadata:J.metadata})}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));this.emitEvent({type:E.TaskEnd,agentId:J.agentId,error:W,messages:Q.getMessages()}),f.push({agentId:J.agentId,result:void 0,error:W,metadata:J.metadata})}}return f}async runPipeline($,f,J){let Q=[],Z=f;for(let W of $){let j=this.agents.get(W);if(!j){Q.push({agentId:W,result:void 0,error:Error(`Agent "${W}" not found in team`)});break}this.emitEvent({type:E.TaskStart,agentId:W,message:Z});try{let X=await j.run(Z);this.emitEvent({type:E.TaskEnd,agentId:W,result:X}),Q.push({agentId:W,result:X});let H=$.indexOf(W)+1;if(H<$.length){let Y=$[H];Z=J?J(X,Y):`Previous agent output:
|
|
499
|
+
${X.text}
|
|
500
|
+
|
|
501
|
+
Please continue from here.`}}catch(X){let H=X instanceof Error?X:Error(String(X));this.emitEvent({type:E.TaskEnd,agentId:W,error:H,messages:j.getMessages()}),Q.push({agentId:W,result:void 0,error:H});break}}return Q}abortAll(){for(let $ of this.agents.values())$.abort(Error("Agent team abortAll requested"))}clear(){this.abortAll(),this.agents.clear(),this.configs.clear()}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function NQ($,f){return new B8($,f)}function JV($){let f=NQ({worker:$.worker,reviewer:$.reviewer}),J=f;return J.doAndReview=async(Q)=>{let Z=await f.routeTo("worker",Q),W=await f.routeTo("reviewer",`Please review this work:
|
|
502
|
+
|
|
503
|
+
${Z.text}`);return{workerResult:Z,reviewResult:W}},J}class J2{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($){this.teamName=$.teamName,this.teamId=`t_${x_(m_(10))}`,this.onTeamEvent=$.onTeamEvent,this.missionLogIntervalSteps=Math.max(1,$.missionLogIntervalSteps??3),this.missionLogIntervalMs=Math.max(1000,$.missionLogIntervalMs??120000),this.maxConcurrentRuns=Math.max(1,$.maxConcurrentRuns??2);let f=$.leadAgentId??"lead";this.members.set(f,{agentId:f,role:"lead",status:"idle",runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()})}getTeamId(){return this.teamId}getTeamName(){return this.teamName}getMemberRole($){return this.members.get($)?.role}getMemberIds(){return Array.from(this.members.keys())}getTeammateIds(){return Array.from(this.members.values()).filter(($)=>$.role==="teammate").map(($)=>$.agentId)}getTask($){return this.tasks.get($)}listTasks(){return Array.from(this.tasks.values())}listTaskItems($){return Array.from(this.tasks.values()).map((f)=>{let J=this.getUnresolvedDependencies(f);return{...f,blockedBy:J,isReady:f.status==="pending"&&!f.assignee&&J.length===0}}).filter((f)=>{if($?.status&&f.status!==$.status)return!1;if($?.assignee&&f.assignee!==$.assignee)return!1;return!0})}listMissionLog($){if(!$||$<=0)return[...this.missionLog];return this.missionLog.slice(Math.max(0,this.missionLog.length-$))}listMailbox($,f){let J=f?.unreadOnly??!0,Q=f?.markRead??!0,Z=f?.limit,W=this.mailbox.filter((X)=>X.toAgentId===$&&(!J||!X.readAt)),j=typeof Z==="number"&&Z>0?W.slice(Math.max(0,W.length-Z)):W;if(Q){let X=new Date;for(let H of j)if(!H.readAt)H.readAt=X}return j.map((X)=>({...X}))}getSnapshot(){let $={pending:0,in_progress:0,blocked:0,completed:0};for(let J of this.tasks.values())$[J.status]++;let f={draft:0,in_review:0,finalized:0};for(let J of this.outcomes.values())f[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:$,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:f}}exportState(){return{teamId:this.teamId,teamName:this.teamName,members:Array.from(this.members.values()).map(($)=>({agentId:$.agentId,role:$.role,description:$.description,status:$.status})),tasks:Array.from(this.tasks.values()).map(($)=>({...$})),mailbox:this.mailbox.map(($)=>({...$})),missionLog:this.missionLog.map(($)=>({...$})),runs:Array.from(this.runs.values()).map(($)=>({...$})),outcomes:Array.from(this.outcomes.values()).map(($)=>({...$})),outcomeFragments:Array.from(this.outcomeFragments.values()).map(($)=>({...$}))}}hydrateState($){this.clearQueuedRunDispatchTimer(),this.tasks.clear();for(let J of $.tasks)this.tasks.set(J.id,{...J});this.mailbox.length=0,this.mailbox.push(...$.mailbox.map((J)=>({...J}))),this.missionLog.length=0,this.missionLog.push(...$.missionLog.map((J)=>({...J}))),this.runs.clear();for(let J of $.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 $.outcomes??[])this.outcomes.set(J.id,{...J});this.outcomeFragments.clear();for(let J of $.outcomeFragments??[])this.outcomeFragments.set(J.id,{...J});let f=Array.from(this.members.values()).filter((J)=>J.role==="lead");this.members.clear();for(let J of f)this.members.set(J.agentId,{...J,status:"idle",runningCount:0,lastMissionStep:this.missionStepCounter,lastMissionAt:Date.now()});for(let J of $.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,A8($.tasks.map((J)=>J.id),"task_")),this.messageCounter=Math.max(this.messageCounter,A8($.mailbox.map((J)=>J.id),"msg_")),this.missionCounter=Math.max(this.missionCounter,A8($.missionLog.map((J)=>J.id),"log_")),this.runCounter=Math.max(this.runCounter,A8(($.runs??[]).map((J)=>J.id),"run_")),this.outcomeCounter=Math.max(this.outcomeCounter,A8(($.outcomes??[]).map((J)=>J.id),"out_")),this.outcomeFragmentCounter=Math.max(this.outcomeFragmentCounter,A8(($.outcomeFragments??[]).map((J)=>J.id),"frag_"))}isTeammateActive($){let f=this.members.get($);return!!f&&f.role==="teammate"&&!!f.agent}spawnTeammate({agentId:$,config:f}){let J=this.members.get($);if(J&&J.role!=="teammate")throw Error(`Team member "${$}" already exists and is not a teammate`);if(J&&J.runningCount>0)throw Error(`Teammate "${$}" is currently running and cannot be respawned`);let Q={...f,apiTimeoutMs:g_,consumePendingUserMessage:()=>{let j=this.members.get($);if(!j||!j.pendingSteerMessage)return;let X=j.pendingSteerMessage;return j.pendingSteerMessage=void 0,X},onEvent:(j)=>{f.onEvent?.(j),this.emitEvent({type:E.AgentEvent,agentId:$,event:j}),this.trackMeaningfulEvent($,j)}},Z=new r$(Q);if(Q.onEvent)Z.subscribeEvents(Q.onEvent);let W={agentId:$,role:"teammate",description:f.role,status:"idle",agent:Z,runningCount:0,lastMissionStep:0,lastMissionAt:Date.now()};return this.members.set($,W),this.emitEvent({type:E.TeammateSpawned,agentId:$,role:f.role,teammate:{rolePrompt:f.systemPrompt,modelId:f.modelId,maxIterations:f.maxIterations,runtimeAgentId:Z.getAgentId(),conversationId:Z.getConversationId(),parentAgentId:null}}),{agentId:W.agentId,role:W.role,description:W.description,status:W.status}}shutdownTeammate($,f){let J=this.members.get($);if(!J||J.role!=="teammate")throw Error(`Teammate "${$}" was not found`);try{J.agent?.abort()}catch(Q){if(!_Q(Q))throw Q}J.status="stopped",this.emitEvent({type:E.TeammateShutdown,agentId:$,reason:f})}updateTeammateConnections($){for(let f of this.members.values()){if(f.role!=="teammate"||!f.agent)continue;f.agent.updateConnection($)}}createTask($){let f=`task_${String(++this.taskCounter).padStart(4,"0")}`,J=new Date,Q={id:f,title:$.title,description:$.description,status:$.assignee?"in_progress":"pending",createdAt:J,updatedAt:J,createdBy:$.createdBy,assignee:$.assignee,dependsOn:$.dependsOn??[]};return this.tasks.set(f,Q),this.emitEvent({type:E.TeamTaskUpdated,task:{...Q}}),{...Q}}claimTask($,f){let J=this.requireTask($);return this.assertDependenciesResolved(J),J.status="in_progress",J.assignee=f,J.updatedAt=new Date,this.emitEvent({type:E.TeamTaskUpdated,task:{...J}}),this.appendMissionLog({agentId:f,taskId:$,kind:"progress",summary:`Claimed task "${J.title}"`}),{...J}}blockTask($,f,J){let Q=this.requireTask($);return Q.status="blocked",Q.updatedAt=new Date,Q.summary=J,this.emitEvent({type:E.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:f,taskId:$,kind:"blocked",summary:J}),{...Q}}completeTask($,f,J){let Q=this.requireTask($);if(Q.status="completed",Q.updatedAt=new Date,Q.summary=J,!Q.assignee)Q.assignee=f;return this.emitEvent({type:E.TeamTaskUpdated,task:{...Q}}),this.appendMissionLog({agentId:f,taskId:$,kind:"done",summary:J}),{...Q}}async routeToTeammate($,f,J){let Q=this.members.get($);if(!Q||Q.role!=="teammate"||!Q.agent)throw Error(`Teammate "${$}" was not found`);if(!Q.agent.canStartRun())throw Error("Cannot start a new run while another run is already in progress");Q.runningCount++,Q.status="running",this.emitEvent({type:E.TaskStart,agentId:$,message:f});try{let Z=this.listMailbox($,{unreadOnly:!0,markRead:!0}),W=Z.length>0?`${this.buildMailboxNotification(Z)}
|
|
504
|
+
|
|
505
|
+
${f}`:f,j=J?.continueConversation?await Q.agent.continue(W):await Q.agent.run(W);return this.emitEvent({type:E.TaskEnd,agentId:$,result:j}),this.recordProgressStep($,`Completed a delegated run (${j.iterations} iterations)`,J?.taskId,!0),j}catch(Z){let W=Z instanceof Error?Z:Error(String(Z));if(this.emitEvent({type:E.TaskEnd,agentId:$,error:W,messages:Q.agent.getMessages()}),!eY(Q,W))this.appendMissionLog({agentId:$,taskId:J?.taskId,kind:"error",summary:W.message});throw W}finally{if(Q.runningCount--,Q.runningCount<=0&&this.members.get($)?.status!=="stopped")Q.status="idle"}}startTeammateRun($,f,J){let Q=`run_${String(++this.runCounter).padStart(5,"0")}`,Z={id:Q,agentId:$,taskId:J?.taskId,status:"queued",message:f,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(Q,Z),this.runQueue.push(Q),this.emitEvent({type:E.RunQueued,run:{...Z}}),this.dispatchQueuedRuns(),{...Z}}dispatchQueuedRuns(){this.clearQueuedRunDispatchTimer();let $;while(this.countActiveRuns()<this.maxConcurrentRuns&&this.runQueue.length>0){let f=this.selectNextDispatchableQueuedRun();$=f.nextDelayedAttemptAt;let J=f.index;if(J<0){this.scheduleQueuedRunDispatch($);return}let[Q]=this.runQueue.splice(J,1),Z=Q?this.runs.get(Q):void 0;if(!Z||Z.status!=="queued")continue;this.executeQueuedRun(Z)}this.scheduleQueuedRunDispatch($)}selectNextDispatchableQueuedRun(){let $=-1,f=Number.NEGATIVE_INFINITY,J,Q=Date.now();for(let Z=0;Z<this.runQueue.length;Z++){let W=this.runs.get(this.runQueue[Z]);if(!W||W.status!=="queued")continue;if(W.nextAttemptAt&&W.nextAttemptAt.getTime()>Q){if(!J||W.nextAttemptAt<J)J=W.nextAttemptAt;continue}if(W.priority>f)f=W.priority,$=Z}return{index:$,nextDelayedAttemptAt:J}}scheduleQueuedRunDispatch($){if(!$)return;let f=Math.max(0,$.getTime()-Date.now());this.queuedRunDispatchTimer=setTimeout(()=>{this.queuedRunDispatchTimer=void 0,this.dispatchQueuedRuns()},f)}clearQueuedRunDispatchTimer(){if(!this.queuedRunDispatchTimer)return;clearTimeout(this.queuedRunDispatchTimer),this.queuedRunDispatchTimer=void 0}countActiveRuns(){let $=0;for(let f of this.runs.values())if(f.status==="running")$++;return $}async executeQueuedRun($){let f=$.currentActivity===$V;$.nextAttemptAt=void 0,$.status="running",$.startedAt=new Date,$.heartbeatAt=new Date,$.currentActivity="run_started",this.emitEvent({type:E.RunStarted,run:{...$}});let J=setInterval(()=>{if($.status!=="running")return;this.recordRunProgress($,"heartbeat")},2000);try{let Q=f?v_($):$.message,Z=await this.routeToTeammate($.agentId,Q,{taskId:$.taskId,continueConversation:$.continueConversation});$.status="completed",$.result=Z,$.endedAt=new Date,$.currentActivity="completed",this.emitEvent({type:E.RunCompleted,run:{...$}})}catch(Q){let Z=Q instanceof Error?Q.message:String(Q??"Unknown error");$.error=Z,$.endedAt=new Date;let W=this.members.get($.agentId);if(eY(W,Q))$.status="cancelled",$.currentActivity="cancelled",this.emitEvent({type:E.RunCancelled,run:{...$},reason:Z});else if($.retryCount<$.maxRetries)$.retryCount++,$.status="queued",$.nextAttemptAt=new Date(Date.now()+Math.min(30000,1000*2**$.retryCount)),this.runQueue.push($.id),this.recordRunProgress($,`retry_scheduled_${$.retryCount}`);else $.status="failed",$.currentActivity="failed",this.emitEvent({type:E.RunFailed,run:{...$}})}finally{clearInterval(J),this.dispatchQueuedRuns()}}listRuns($){let f=$?.includeCompleted??!0;return Array.from(this.runs.values()).filter((J)=>{if(!f&&!["running","queued"].includes(J.status))return!1;if($?.status&&J.status!==$.status)return!1;if($?.agentId&&J.agentId!==$.agentId)return!1;return!0}).map((J)=>({...J}))}getRun($){let f=this.runs.get($);return f?{...f}:void 0}async awaitRun($,f=250){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);while(J.status==="queued"||J.status==="running")await fV(f);return{...J}}async awaitAllRuns($=250){while(Array.from(this.runs.values()).some((f)=>["queued","running"].includes(f.status)))await fV($);return this.listRuns()}cancelRun($,f){let J=this.runs.get($);if(!J)throw Error(`Run "${$}" was not found`);if(J.status==="completed"||J.status==="failed")return{...J};J.status="cancelled",J.error=f,J.endedAt=new Date,J.currentActivity="cancelled";let Q=this.runQueue.indexOf($);if(Q>=0)this.runQueue.splice(Q,1);return this.emitEvent({type:E.RunCancelled,run:{...J},reason:f}),{...J}}recoverActiveRuns($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;let Q=this.members.get(J.agentId);if(!Q||Q.role!=="teammate"||!Q.agent){J.status="interrupted",J.error="teammate_unavailable_after_recovery",J.endedAt=new Date,J.currentActivity="interrupted",this.emitEvent({type:E.RunInterrupted,run:{...J},reason:J.error});continue}let Z=new Date;if(J.status="queued",J.error=void 0,J.endedAt=void 0,J.heartbeatAt=Z,J.lastProgressAt=Z,J.lastProgressMessage=$,J.currentActivity=$V,!this.runQueue.includes(J.id))this.runQueue.push(J.id);f.push({...J}),this.emitEvent({type:E.RunQueued,run:{...J}})}return this.dispatchQueuedRuns(),f}markStaleRunsInterrupted($="runtime_recovered"){let f=[];for(let J of this.runs.values()){if(!["queued","running"].includes(J.status))continue;J.status="interrupted",J.error=$,J.endedAt=new Date,J.currentActivity="interrupted",f.push({...J}),this.emitEvent({type:E.RunInterrupted,run:{...J},reason:$})}return this.runQueue.length=0,this.clearQueuedRunDispatchTimer(),f}sendMessage($,f,J,Q,Z){if(!this.members.has($))throw Error(`Unknown sender "${$}"`);let W=this.members.get(f);if(!W)throw Error(`Unknown recipient "${f}"`);let j={id:`msg_${String(++this.messageCounter).padStart(5,"0")}`,teamId:this.teamId,fromAgentId:$,toAgentId:f,subject:J,body:Q,taskId:Z,sentAt:new Date};if(this.mailbox.push(j),this.emitEvent({type:E.TeamMessage,message:{...j}}),W.role==="teammate"&&W.runningCount>0&&W.agent)W.pendingSteerMessage=`[MAILBOX] You got a message from ${$}. Subject: "${J}". Use the team_read_mailbox tool to read it at your convenience.`;return{...j}}broadcast($,f,J,Q){let Z=[];for(let W of this.members.values()){if(W.agentId===$)continue;if(W.role==="lead")continue;Z.push(this.sendMessage($,W.agentId,f,J,Q?.taskId))}return Z}appendMissionLog($){if(!this.members.has($.agentId))throw Error(`Unknown team member "${$.agentId}"`);let f={id:`log_${String(++this.missionCounter).padStart(6,"0")}`,ts:new Date,teamId:this.teamId,agentId:$.agentId,taskId:$.taskId,kind:$.kind,summary:$.summary,evidence:$.evidence,nextAction:$.nextAction};this.missionLog.push(f);let J=this.members.get($.agentId);if(J)J.lastMissionAt=Date.now(),J.lastMissionStep=this.missionStepCounter;return this.emitEvent({type:E.TeamMissionLog,entry:{...f}}),{...f}}createOutcome($){let f={id:`out_${String(++this.outcomeCounter).padStart(4,"0")}`,teamId:this.teamId,title:$.title,status:"draft",requiredSections:[...new Set($.requiredSections)],createdBy:$.createdBy,createdAt:new Date};return this.outcomes.set(f.id,f),this.emitEvent({type:E.OutcomeCreated,outcome:{...f}}),{...f}}listOutcomes(){return Array.from(this.outcomes.values()).map(($)=>({...$}))}attachOutcomeFragment($){let f=this.outcomes.get($.outcomeId);if(!f)throw Error(`Outcome "${$.outcomeId}" was not found`);if(!f.requiredSections.includes($.section))throw Error(`Section "${$.section}" is not part of outcome "${$.outcomeId}"`);let J={id:`frag_${String(++this.outcomeFragmentCounter).padStart(5,"0")}`,teamId:this.teamId,outcomeId:$.outcomeId,section:$.section,sourceAgentId:$.sourceAgentId,sourceRunId:$.sourceRunId,content:$.content,status:"draft",createdAt:new Date};if(this.outcomeFragments.set(J.id,J),f.status==="draft")f.status="in_review";return this.emitEvent({type:E.OutcomeFragmentAttached,fragment:{...J}}),{...J}}reviewOutcomeFragment($){let f=this.outcomeFragments.get($.fragmentId);if(!f)throw Error(`Fragment "${$.fragmentId}" was not found`);return f.status=$.approved?"reviewed":"rejected",f.reviewedBy=$.reviewedBy,f.reviewedAt=new Date,this.emitEvent({type:E.OutcomeFragmentReviewed,fragment:{...f}}),{...f}}listOutcomeFragments($){return Array.from(this.outcomeFragments.values()).filter((f)=>f.outcomeId===$).map((f)=>({...f}))}finalizeOutcome($){let f=this.outcomes.get($);if(!f)throw Error(`Outcome "${$}" was not found`);let J=this.listOutcomeFragments($);for(let Q of f.requiredSections)if(!J.some((W)=>W.section===Q&&W.status==="reviewed"))throw Error(`Outcome "${$}" cannot be finalized. Section "${Q}" is missing a reviewed fragment.`);return f.status="finalized",f.finalizedAt=new Date,this.emitEvent({type:E.OutcomeFinalized,outcome:{...f}}),{...f}}cleanup(){for(let $ of this.members.values())if($.role==="teammate"&&$.runningCount>0)throw Error(`Cannot cleanup team while teammate "${$.agentId}" is still running`);if(Array.from(this.runs.values()).some(($)=>["queued","running"].includes($.status)))throw Error("Cannot cleanup team while async teammate runs are still active");for(let $ of this.members.values())if($.role==="teammate")try{$.agent?.abort()}catch(f){if(!_Q(f))throw f}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(f.role==="teammate")this.members.delete($)}requireTask($){let f=this.tasks.get($);if(!f)throw Error(`Task "${$}" was not found`);return f}assertDependenciesResolved($){let f=this.getUnresolvedDependencies($);if(f.length>0)throw Error(`Task "${$.id}" is blocked by "${f[0]}"`)}getUnresolvedDependencies($){return $.dependsOn.filter((f)=>{let J=this.tasks.get(f);return!J||J.status!=="completed"})}trackMeaningfulEvent($,f){if(this.recordRunActivityFromAgentEvent($,f),f.type==="iteration_end"&&f.hadToolCalls){this.recordProgressStep($,`Completed iteration ${f.iteration} with ${f.toolCallCount} tool call(s)`);return}if(f.type==="content_end"&&f.contentType==="tool"&&!f.error){this.recordProgressStep($,`Finished tool "${f.toolName??"unknown"}"`);return}if(f.type==="done"){this.appendMissionLog({agentId:$,kind:"done",summary:`Completed a delegated run (${f.iterations} iterations)`});return}if(f.type==="error")this.appendMissionLog({agentId:$,kind:"error",summary:f.error.message})}recordRunActivityFromAgentEvent($,f){let J;switch(f.type){case"iteration_start":J=`iteration_${f.iteration}_started`;break;case"content_start":if(f.contentType==="tool")J=`running_tool_${f.toolName??"unknown"}`;break;case"content_end":if(f.contentType==="tool")J=f.error?this.formatProgressErrorActivity(`tool_${f.toolName??"unknown"}_error`,f.error):`finished_tool_${f.toolName??"unknown"}`;break;case"done":J="finalizing_response";break;case"error":J=this.formatProgressErrorActivity("run_error",f.error.message);break;default:break}if(!J)return;for(let Q of this.runs.values()){if(Q.agentId!==$||Q.status!=="running")continue;this.recordRunProgress(Q,J)}}recordRunProgress($,f){let J=new Date;$.heartbeatAt=J,$.lastProgressAt=J,$.lastProgressMessage=f,$.currentActivity=f,this.emitEvent({type:E.RunProgress,run:{...$},message:f})}formatProgressErrorActivity($,f){let J=f.replace(/\s+/g," ").trim();if(J.length===0)return $;let Q=J.length>240?`${J.slice(0,237).trimEnd()}...`:J;return`${$}: ${Q}`}recordProgressStep($,f,J,Q=!1){this.missionStepCounter++;let Z=this.members.get($);if(!Z)return;let W=this.missionStepCounter-Z.lastMissionStep,j=Date.now()-Z.lastMissionAt;if(!Q&&W<this.missionLogIntervalSteps&&j<this.missionLogIntervalMs)return;this.appendMissionLog({agentId:$,taskId:J,kind:"progress",summary:f})}buildMailboxNotification($){if($.length===0)return"";let f=[`[MAILBOX] You have ${$.length} unread message(s):`];for(let J of $)f.push(`--- Message from ${J.fromAgentId} | subject: ${J.subject} ---`),f.push(J.body);return f.push("---"),f.join(`
|
|
506
|
+
`)}emitEvent($){try{this.onTeamEvent?.($)}catch{}}}function fV($){return new Promise((f)=>setTimeout(f,$))}function A8($,f){let J=0;for(let Q of $){if(!Q.startsWith(f))continue;let Z=Number.parseInt(Q.slice(f.length),10);if(Number.isFinite(Z))J=Math.max(J,Z)}return J}function TQ($,f){switch(f.type){case"run_queued":case"run_started":$.activeTeamRunIds.add(f.run.id);break;case"run_completed":case"run_failed":case"run_cancelled":case"run_interrupted":{let J;if(f.type==="run_failed")J=f.run.error;else if(f.type==="run_cancelled"||f.type==="run_interrupted")J=f.run.error??f.reason;$.activeTeamRunIds.delete(f.run.id),$.pendingTeamRunUpdates.push({runId:f.run.id,agentId:f.run.agentId,taskId:f.run.taskId,status:f.type.replace("run_",""),error:J,iterations:f.run.result?.iterations}),f5($);break}default:break}}async function MQ($,f,J){switch(f.type){case"run_progress":await J("onTeamTaskProgress",$,f.run.agentId,f.message,{kind:f.message==="heartbeat"?"heartbeat":"progress"});break;case"agent_event":if(f.event.type==="content_start"&&f.event.contentType==="text"&&typeof f.event.text==="string"){let Q=f.event.text.replace(/\s+/g," ").trim().slice(0,120);if(Q)await J("onTeamTaskProgress",$,f.agentId,Q,{kind:"text"})}break;case"task_start":await J("onTeamTaskStart",$,f.agentId,f.message);break;case"task_end":{if(f.error)await J("onTeamTaskEnd",$,f.agentId,"failed",`[error] ${f.error.message}`,void 0,f.messages);else if(f.result?.finishReason==="aborted")await J("onTeamTaskEnd",$,f.agentId,"cancelled","[done] aborted",f.result,f.result.messages);else await J("onTeamTaskEnd",$,f.agentId,"completed",`[done] ${f.result?.finishReason??"completed"}`,f.result,f.result?.messages);break}default:break}}function qQ($,f,J,Q){if(!$.runtime.teamRuntime)return;let Z=$.runtime.teamRuntime.getTeamName();Q({type:"team_progress",payload:{sessionId:f,teamName:Z,lifecycle:V8({teamName:Z,sessionId:f,event:J}),summary:Y8(Z,$.runtime.teamRuntime.exportState())}})}function T6($){return $.activeTeamRunIds.size>0||$.pendingTeamRunUpdates.length>0}function yQ($,f){if($.aborting)return!1;if(!(f==="completed"||f==="max_iterations"))return!1;return $.config.enableAgentTeams===!0&&T6($)}function f5($){let f=$.teamRunWaiters.splice(0);for(let J of f)J()}async function wQ($){while(!0){if($.aborting)return[];if($.pendingTeamRunUpdates.length>0){let f=[...$.pendingTeamRunUpdates];return $.pendingTeamRunUpdates.length=0,f}if($.activeTeamRunIds.size===0)return[];await new Promise((f)=>{$.teamRunWaiters.push(f)})}}function SQ($,f){let J=f.map((W)=>{let j=[`- ${W.runId} (${W.agentId}) -> ${W.status}`];if(W.taskId)j.push(` task=${W.taskId}`);if(typeof W.iterations==="number")j.push(` iterations=${W.iterations}`);if(W.error)j.push(` error=${W.error}`);return j.join("")}),Q=$.activeTeamRunIds.size,Z=Q>0?`There are still ${Q} 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 M6(`System-delivered teammate async run updates:
|
|
507
|
+
${J.join(`
|
|
508
|
+
`)}
|
|
509
|
+
|
|
510
|
+
${Z}`,$.config.mode)}function M6($,f){return u_($,f==="plan"?"plan":f==="yolo"?"yolo":"act")}var CQ=4;class C${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=$;this.manifestStore=new OQ($,f.messagesArtifactUploader,f.logger),this.teamChildren=new $5($,this.manifestStore,(J,Q,Z)=>this.toPersistedMessages(J,Q,Z),C$.TEAM_HEARTBEAT_LOG_INTERVAL_MS)}toPersistedMessages($,f,J){if(!$)return;return f?_f(f.messages,f,J):zf($)}ensureSessionsDir(){return this.manifestStore.ensureSessionsDir()}writeSessionManifest($,f){this.manifestStore.writeSessionManifest($,f)}readSessionManifest($){return this.manifestStore.readSessionManifest($)}async createRootSessionWithArtifacts($){let f=$.startedAt??s(),J=$.sessionId.trim(),Q=J.length>0?J:`${Date.now()}_${d_(5)}`,Z=this.manifestStore.artifacts.sessionMessagesPath(Q),W=this.manifestStore.artifacts.sessionManifestPath(Q),j=H4({metadata:$.metadata,prompt:$.prompt}),X={version:1,session_id:Q,source:$.source,pid:$.pid,started_at:f,status:"running",interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspace_root:$.workspaceRoot,team_name:$.teamName,enable_tools:$.enableTools,enable_spawn:$.enableSpawn,enable_teams:$.enableTeams,prompt:$.prompt?.trim()||void 0,metadata:j,messages_path:Z};return await this.adapter.upsertSession({sessionId:Q,source:$.source,pid:$.pid,startedAt:f,endedAt:null,exitCode:null,status:"running",statusLock:0,interactive:$.interactive,provider:$.provider,model:$.model,cwd:$.cwd,workspaceRoot:$.workspaceRoot,teamName:$.teamName??null,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,parentSessionId:null,parentAgentId:null,agentId:null,conversationId:null,isSubagent:!1,prompt:X.prompt??null,metadata:n$(X.metadata),hookPath:"",messagesPath:Z,updatedAt:s()}),this.manifestStore.initializeMessagesFile(Q,Z,f),this.manifestStore.writeSessionManifest(W,X),{manifestPath:W,messagesPath:Z,manifest:X}}async updateSessionStatus($,f,J){let Q;if((await Wj(()=>this.adapter.getSession($),async(W)=>{return Q=J0(f)?void 0:s(),this.adapter.updateSession({sessionId:$,status:f,endedAt:Q??null,exitCode:J0(f)?null:typeof J==="number"?J:null,expectedStatusLock:W.statusLock})},CQ)).updated){if(f==="cancelled")await this.teamChildren.applyStatusToRunningChildSessions($,"cancelled");return{updated:!0,endedAt:Q}}return{updated:!1}}async updateSession($){for(let f=0;f<CQ;f++){let J=await this.adapter.getSession($.sessionId);if(!J)return{updated:!1};let Q=J.metadata??void 0,Z=$.metadata!==void 0?n$($.metadata)??{}:n$(Q)??{},W=w1(typeof Q?.title==="string"?Q.title:void 0),j=$.title!==void 0?w1($.title):W??M9($.prompt);if(j)Z.title=j;else delete Z.title;let X=$.metadata!==void 0||$.prompt!==void 0||$.title!==void 0;if(!(await this.adapter.updateSession({sessionId:$.sessionId,prompt:$.prompt,metadata:X?Object.keys(Z).length>0?Z:null:void 0,title:j,expectedStatusLock:J.statusLock})).updated)continue;let{path:Y,manifest:V}=this.manifestStore.readManifestFile($.sessionId);if(V){if($.prompt!==void 0)V.prompt=$.prompt??void 0;let A=$.metadata!==void 0?n$($.metadata)??{}:n$(V.metadata)??{};if(j)A.title=j;V.metadata=Object.keys(A).length>0?A:void 0,this.manifestStore.writeSessionManifest(Y,V)}return{updated:!0}}return{updated:!1}}queueSpawnRequest($){return this.teamChildren.queueSpawnRequest($)}upsertSubagentSession($){return this.teamChildren.upsertSubagentSession($)}upsertSubagentSessionFromHook($){return this.teamChildren.upsertSubagentSessionFromHook($)}appendSubagentHookAudit($,f){return this.teamChildren.appendSubagentHookAudit(f),Promise.resolve()}persistSessionMessages($,f,J){let Q=zf(f);return this.manifestStore.persistSessionMessages($,Q,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,Q,Z,W){return this.teamChildren.onTeamTaskEnd($,f,J,Q,Z,W)}onTeamTaskProgress($,f,J,Q){return this.teamChildren.onTeamTaskProgress($,f,J,Q)}handleSubAgentStart($,f){return this.teamChildren.handleSubAgentStart($,f)}handleSubAgentEnd($,f){return this.teamChildren.handleSubAgentEnd($,f)}isPidAlive($){if(!Number.isFinite($)||$<=0)return!1;try{return process.kill(Math.floor($),0),!0}catch(f){return typeof f==="object"&&f!==null&&"code"in f&&f.code==="EPERM"}}async reconcileDeadRunningSession($){if(J0($.status)===!1||this.isPidAlive($.pid))return $;let f=s(),J=C$.STALE_REASON;for(let Q=0;Q<CQ;Q++){let Z=await this.adapter.getSession($.sessionId);if(!Z)return;if(J0(Z.status)===!1)return Z;let W={...Z.metadata??{},terminal_marker:J,terminal_marker_at:f,terminal_marker_pid:Z.pid,terminal_marker_source:C$.STALE_SOURCE},j=await this.adapter.updateSession({sessionId:Z.sessionId,status:"failed",endedAt:f,exitCode:1,metadata:W,expectedStatusLock:Z.statusLock});if(!j.updated)continue;await this.teamChildren.applyStatusToRunningChildSessions(Z.sessionId,"failed");let X=Zj(Z,{status:"failed",endedAt:f,exitCode:1,metadata:W}),{path:H}=this.manifestStore.readManifestFile(Z.sessionId);return this.manifestStore.writeSessionManifest(H,X),this.manifestStore.appendStaleSessionHookLog(f,Z.sessionId,Z.pid,J,C$.STALE_SOURCE),{...Z,status:"failed",endedAt:f,exitCode:1,metadata:W,statusLock:j.statusLock,updatedAt:f}}return await this.adapter.getSession($.sessionId)}async listSessions($=200){let f=Math.max(1,Math.floor($)),J=Math.min(f*5,2000);return await this.reconcileDeadSessions(J),(await this.adapter.listSessions({limit:J})).slice(0,f).map((Z)=>{let W=n$(Z.metadata??void 0),j=this.manifestStore.readSessionManifest(Z.sessionId),X=w1(typeof j?.metadata?.title==="string"?j.metadata.title:void 0),H=X?{...W??{},title:X}:W;return{...Z,metadata:H}})}async reconcileDeadSessions($=2000){let f=Math.max(1,Math.floor($)),J=(await Promise.all(["idle","running","pending"].map((Z)=>this.adapter.listSessions({limit:f,status:Z})))).flat(),Q=0;for(let Z of J){let W=await this.reconcileDeadRunningSession(Z);if(W&&W.status!==Z.status)Q++}return Q}async deleteSession($){let f=$.trim();if(!f)throw Error("session id is required");let J=await this.adapter.getSession(f);if(!J)return{deleted:!1};if(await this.adapter.deleteSession(f,!1),!J.isSubagent){let Q=await this.adapter.listSessions({limit:2000,parentSessionId:f});await this.adapter.deleteSession(f,!0),await Promise.allSettled(Q.map(async(Z)=>{await p9(Z.cwd,Z.sessionId),E4(Z.messagesPath),E4(this.manifestStore.artifacts.sessionManifestPath(Z.sessionId,!1)),this.manifestStore.artifacts.removeSessionDirIfEmpty(Z.sessionId)}))}if(await p9(J.cwd,f),E4(J.messagesPath),E4(this.manifestStore.artifacts.sessionManifestPath(f,!1)),J.isSubagent)this.manifestStore.artifacts.removeSessionDirIfEmpty(f);else{let Q=new Set([this.manifestStore.artifacts.sessionArtifactsDir(f)]);for(let Z of[J.messagesPath])if(typeof Z==="string"&&Z.trim().length>0)Q.add(c_(Z));for(let Z of Q)this.manifestStore.artifacts.removeDir(Z)}return{deleted:!0}}}function EQ(){return new Date().toISOString()}function jV($,f){let J=`${$}.tmp`;r_(J,`${JSON.stringify(f,null,2)}
|
|
511
|
+
`,"utf8"),p_(J,$)}class XV{sessionsDirPath;constructor($=i_()){this.sessionsDirPath=$}ensureSessionsDir(){if(!hQ(this.sessionsDirPath))l_(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}indexPath(){return WV(this.ensureSessionsDir(),"sessions.index.json")}spawnQueuePath(){return WV(this.ensureSessionsDir(),"subagent-spawn-queue.json")}readIndex(){let $=this.indexPath();if(!hQ($))return{version:1,sessions:{}};try{let f=JSON.parse(ZV($,"utf8"));if(f?.version===1&&f.sessions)return f}catch{}return{version:1,sessions:{}}}writeIndex($){jV(this.indexPath(),$)}readQueue(){let $=this.spawnQueuePath();if(!hQ($))return{version:1,nextId:1,requests:[]};try{let f=JSON.parse(ZV($,"utf8"));if(f?.version===1&&typeof f.nextId==="number"&&Array.isArray(f.requests))return f}catch{}return{version:1,nextId:1,requests:[]}}writeQueue($){jV(this.spawnQueuePath(),$)}async upsertSession($){let f=this.readIndex();f.sessions[$.sessionId]=$,this.writeIndex(f)}async getSession($){return this.readIndex().sessions[$]}async listSessions($){return Object.values(this.readIndex().sessions).filter((f)=>$.parentSessionId!==void 0?f.parentSessionId===$.parentSessionId:!0).filter((f)=>$.status!==void 0?f.status===$.status:!0).sort((f,J)=>J.startedAt.localeCompare(f.startedAt)).slice(0,$.limit)}async updateSession($){let f=this.readIndex(),J=f.sessions[$.sessionId];if(!J)return{updated:!1,statusLock:0};if($.expectedStatusLock!==void 0&&J.statusLock!==$.expectedStatusLock)return{updated:!1,statusLock:J.statusLock};let Q=$.expectedStatusLock!==void 0?$.expectedStatusLock+1:J.statusLock,Z={...J,status:$.status??J.status,endedAt:$.endedAt!==void 0?$.endedAt:J.endedAt??null,exitCode:$.exitCode!==void 0?$.exitCode:J.exitCode??null,prompt:$.prompt!==void 0?$.prompt:J.prompt??null,metadata:$.metadata!==void 0?$.metadata??null:J.metadata??null,parentSessionId:$.parentSessionId!==void 0?$.parentSessionId??null:J.parentSessionId??null,parentAgentId:$.parentAgentId!==void 0?$.parentAgentId??null:J.parentAgentId??null,agentId:$.agentId!==void 0?$.agentId??null:J.agentId??null,conversationId:$.conversationId!==void 0?$.conversationId??null:J.conversationId??null,statusLock:Q,isSubagent:$.setRunning||$.parentSessionId!==void 0?!0:J.isSubagent,updatedAt:EQ()};if($.setRunning)Z.status="running",Z.endedAt=null,Z.exitCode=null;return f.sessions[$.sessionId]=Z,this.writeIndex(f),{updated:!0,statusLock:Z.statusLock}}async deleteSession($,f){let J=this.readIndex();if(!J.sessions[$])return!1;if(delete J.sessions[$],f){for(let Z of Object.values(J.sessions))if(Z.parentSessionId===$)delete J.sessions[Z.sessionId]}return this.writeIndex(J),!0}async enqueueSpawnRequest($){let f=this.readQueue();f.requests.push({id:f.nextId,rootSessionId:$.rootSessionId,parentAgentId:$.parentAgentId,task:$.task,systemPrompt:$.systemPrompt,createdAt:EQ()}),f.nextId+=1,this.writeQueue(f)}async claimSpawnRequest($,f){let J=this.readQueue(),Q=J.requests.find((Z)=>Z.rootSessionId===$&&Z.parentAgentId===f&&!Z.consumedAt);if(!Q)return;return Q.consumedAt=EQ(),this.writeQueue(J),Q.task}}class bQ extends C${constructor($,f={}){super(new XV($),f)}ensureSessionsDir(){return super.ensureSessionsDir()}}var VV={};y(VV,{CoreSessionService:()=>A$});import{existsSync as n_,mkdirSync as a_}from"node:fs";import{resolveSessionDataDir as t_}from"@cline/shared/storage";var kQ=`
|
|
512
|
+
session_id AS sessionId,
|
|
513
|
+
source,
|
|
514
|
+
pid,
|
|
515
|
+
started_at AS startedAt,
|
|
516
|
+
ended_at AS endedAt,
|
|
517
|
+
exit_code AS exitCode,
|
|
518
|
+
status,
|
|
519
|
+
status_lock AS statusLock,
|
|
520
|
+
interactive,
|
|
521
|
+
provider,
|
|
522
|
+
model,
|
|
523
|
+
cwd,
|
|
524
|
+
workspace_root AS workspaceRoot,
|
|
525
|
+
team_name AS teamName,
|
|
526
|
+
enable_tools AS enableTools,
|
|
527
|
+
enable_spawn AS enableSpawn,
|
|
528
|
+
enable_teams AS enableTeams,
|
|
529
|
+
parent_session_id AS parentSessionId,
|
|
530
|
+
parent_agent_id AS parentAgentId,
|
|
531
|
+
agent_id AS agentId,
|
|
532
|
+
conversation_id AS conversationId,
|
|
533
|
+
is_subagent AS isSubagent,
|
|
534
|
+
prompt,
|
|
535
|
+
metadata_json AS metadata,
|
|
536
|
+
hook_path AS hookPath,
|
|
537
|
+
messages_path AS messagesPath,
|
|
538
|
+
updated_at AS updatedAt`;function IQ($){$.interactive=$.interactive===1,$.enableTools=$.enableTools===1,$.enableSpawn=$.enableSpawn===1,$.enableTeams=$.enableTeams===1,$.isSubagent=$.isSubagent===1;let f=$.metadata;if(typeof f==="string"&&f.trim())try{let J=JSON.parse(f);$.metadata=J&&typeof J==="object"&&!Array.isArray(J)?J:null}catch{$.metadata=null}else $.metadata=null;return $}function xQ($){if(!$||Object.keys($).length===0)return null;return JSON.stringify($)}function HV($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class YV{store;sessionsDirPath;constructor($,f=t_()){this.store=$;this.sessionsDirPath=f}ensureSessionsDir(){if(!n_(this.sessionsDirPath))a_(this.sessionsDirPath,{recursive:!0});return this.sessionsDirPath}async upsertSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
539
|
+
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
540
|
+
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
541
|
+
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
542
|
+
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
543
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,$.endedAt??null,$.exitCode??null,$.status,$.statusLock,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.isSubagent?1:0,$.prompt??null,xQ($.metadata),"",$.hookPath??"",$.messagesPath??null,$.updatedAt])}async getSession($){let f=this.store.queryOne(`SELECT ${kQ} FROM sessions WHERE session_id = ?`,[$]);return f?IQ(f):void 0}async listSessions($){let f=[],J=[];if($.parentSessionId)f.push("parent_session_id = ?"),J.push($.parentSessionId);if($.status)f.push("status = ?"),J.push($.status);let Q=f.length>0?`WHERE ${f.join(" AND ")}`:"";return this.store.queryAll(`SELECT ${kQ}
|
|
544
|
+
FROM sessions
|
|
545
|
+
${Q}
|
|
546
|
+
ORDER BY started_at DESC
|
|
547
|
+
LIMIT ?`,[...J,$.limit]).map(IQ)}async updateSession($){if($.setRunning){if($.expectedStatusLock===void 0)return{updated:!1,statusLock:0};return{updated:(this.store.run(`UPDATE sessions
|
|
548
|
+
SET status = 'running', ended_at = NULL, exit_code = NULL, updated_at = ?, status_lock = ?,
|
|
549
|
+
parent_session_id = ?, parent_agent_id = ?, agent_id = ?, conversation_id = ?, is_subagent = 1,
|
|
550
|
+
prompt = COALESCE(prompt, ?)
|
|
551
|
+
WHERE session_id = ? AND status_lock = ?`,[s(),$.expectedStatusLock+1,$.parentSessionId??null,$.parentAgentId??null,$.agentId??null,$.conversationId??null,$.prompt??null,$.sessionId,$.expectedStatusLock]).changes??0)>0,statusLock:$.expectedStatusLock+1}}let f=[],J=[];if($.status!==void 0)f.push("status = ?"),J.push($.status);if($.endedAt!==void 0)f.push("ended_at = ?"),J.push($.endedAt);if($.exitCode!==void 0)f.push("exit_code = ?"),J.push($.exitCode);if($.prompt!==void 0)f.push("prompt = ?"),J.push($.prompt??null);if($.metadata!==void 0)f.push("metadata_json = ?"),J.push(xQ($.metadata));if($.parentSessionId!==void 0)f.push("parent_session_id = ?"),J.push($.parentSessionId??null);if($.parentAgentId!==void 0)f.push("parent_agent_id = ?"),J.push($.parentAgentId??null);if($.agentId!==void 0)f.push("agent_id = ?"),J.push($.agentId??null);if($.conversationId!==void 0)f.push("conversation_id = ?"),J.push($.conversationId??null);if(f.length===0){let j=await this.getSession($.sessionId);return{updated:!!j,statusLock:j?.statusLock??0}}let Q=0;if($.expectedStatusLock!==void 0)Q=$.expectedStatusLock+1,f.push("status_lock = ?"),J.push(Q);f.push("updated_at = ?"),J.push(s());let Z=`UPDATE sessions SET ${f.join(", ")} WHERE session_id = ?`;if(J.push($.sessionId),$.expectedStatusLock!==void 0)Z+=" AND status_lock = ?",J.push($.expectedStatusLock);if((this.store.run(Z,J).changes??0)===0)return{updated:!1,statusLock:0};if($.expectedStatusLock===void 0)Q=(await this.getSession($.sessionId))?.statusLock??0;return{updated:!0,statusLock:Q}}async deleteSession($,f){let J=this.store.run("DELETE FROM sessions WHERE session_id = ?",[$]).changes??0;if(f)this.store.run("DELETE FROM sessions WHERE parent_session_id = ?",[$]);return J>0}async enqueueSpawnRequest($){this.store.run(`INSERT INTO subagent_spawn_queue (root_session_id, parent_agent_id, task, system_prompt, created_at, consumed_at)
|
|
552
|
+
VALUES (?, ?, ?, ?, ?, NULL)`,[$.rootSessionId,$.parentAgentId,$.task??null,$.systemPrompt??null,s()])}async claimSpawnRequest($,f){let J=this.store.queryOne(`SELECT id, task FROM subagent_spawn_queue
|
|
553
|
+
WHERE root_session_id = ? AND parent_agent_id = ? AND consumed_at IS NULL
|
|
554
|
+
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 A$ extends C${store;constructor($,f={}){super(new YV($,f.sessionArtifactsDir),f);this.store=$}createRootSession($){this.store.run(`INSERT OR REPLACE INTO sessions (
|
|
555
|
+
session_id, source, pid, started_at, ended_at, exit_code, status, status_lock, interactive,
|
|
556
|
+
provider, model, cwd, workspace_root, team_name, enable_tools, enable_spawn, enable_teams,
|
|
557
|
+
parent_session_id, parent_agent_id, agent_id, conversation_id, is_subagent, prompt,
|
|
558
|
+
metadata_json, transcript_path, hook_path, messages_path, updated_at
|
|
559
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,[$.sessionId,$.source,$.pid,$.startedAt,null,null,"running",0,$.interactive?1:0,$.provider,$.model,$.cwd,$.workspaceRoot,$.teamName??null,$.enableTools?1:0,$.enableSpawn?1:0,$.enableTeams?1:0,null,null,null,null,0,$.prompt??null,$.metadata?JSON.stringify($.metadata):null,"","",$.messagesPath,s()])}}function s_($){if($.backendMode)return $.backendMode;if(process.env.CLINE_VCR?.trim())return"local";let f=process.env.CLINE_SESSION_BACKEND_MODE?.trim().toLowerCase();if(f==="local"||f==="hub"||f==="remote")return f;return"auto"}var q6,y6;function o_($,f){if($!=="auto"&&$!=="hub")return;if(f.hub?.endpoint?.trim())return;iJ(f.hub?.workspaceRoot?.trim()||f.hub?.cwd?.trim()||process.cwd())}async function e_($){await $.reconcileDeadSessions?.().catch(()=>{})}function GV($){try{let f=new Y$;return f.init(),new A$(f,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}catch(f){return $.telemetry?.capture({event:"session_backend_fallback",properties:{requestedBackend:"sqlite",fallbackBackend:"file"}}),BV($.telemetry,{component:"core",operation:"session_backend.sqlite_init",error:f,severity:"warn",handled:!0,context:{requestedBackend:"sqlite",fallbackBackend:"file"}}),new bQ(void 0,{messagesArtifactUploader:$.messagesArtifactUploader,logger:$.logger})}}function AV($,f,J){return new B$({sessionService:J??$.sessionService??GV($),capabilities:$.capabilities,telemetry:$.telemetry,toolPolicies:$.toolPolicies,distinctId:f,fetch:$.fetch})}async function mQ($){if(q6)return q6;if(y6)return await y6;return y6=(async()=>{return q6=GV($),await e_(q6),q6})().finally(()=>{y6=void 0}),await y6}async function G8($){let f=f2($.distinctId);$.telemetry?.setDistinctId(f);let J=s_($);if(o_(J,$),J==="remote"){let Q=$.remote?.endpoint?.trim();if(!Q)throw Error("Remote runtime mode requires `remote.endpoint` to be configured.");return $.logger?.log("Using remote runtime host",{endpoint:Q}),new H8({endpoint:Q,authToken:$.remote?.authToken,clientType:$.remote?.clientType,displayName:$.remote?.displayName,workspaceRoot:$.remote?.workspaceRoot,cwd:$.remote?.cwd,capabilities:$.capabilities})}if(J==="hub"){let Q=$.hub?.endpoint?.trim(),Z=Q||await e1({strategy:$.hub?.strategy??"require-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(!Z)throw Error("No compatible hub runtime is available.");return $.logger?.log("Using hub runtime host",{url:Z,explicitEndpoint:Q||void 0}),new w$({url:Z,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd})}if(J==="auto"){let Q=await O6({endpoint:$.hub?.endpoint,strategy:$.hub?.strategy??"prefer-hub",workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});if(Q){$.logger?.log("Using discovered local hub runtime host",{url:Q});let Z=new w$({url:Q,authToken:$.hub?.authToken,clientType:$.hub?.clientType,displayName:$.hub?.displayName,capabilities:$.capabilities,telemetry:$.telemetry},{workspaceRoot:$.hub?.workspaceRoot,cwd:$.hub?.cwd});try{return await Z.connect(),Z}catch(W){$.logger?.log("Falling back to local runtime host",{reason:"hub_connect_failed",severity:"warn",error:W}),BV($.telemetry,{component:"core",operation:"runtime_host.hub_connect",error:W,severity:"warn",handled:!0,context:{backendMode:"auto",fallbackBackend:"local"}})}}return $.logger?.log("Falling back to local runtime host",{reason:"compatible_hub_unavailable",severity:"warn"}),AV($,f)}return AV($,f)}class w6{clientName;runtimeAddress;automation;settings;pendingPrompts;host;prepare;capabilities;logger;telemetry;distinctId;automationService;activeSessionBootstraps=new Map;unsubscribeBootstrapCleanup;constructor($,f,J,Q,Z,W,j,X,H){this.clientName=f,this.runtimeAddress=J,this.host=$,this.prepare=Q,this.capabilities=Z,this.logger=W,this.telemetry=j,this.distinctId=X,this.settings=hH($),this.pendingPrompts=EH($),this.automation=new _7(()=>{if(!this.automationService)throw Error("ClineCore automation is not enabled. Pass `automation: true` or automation options to ClineCore.create().");return this.automationService}),this.automationService=H?new K6({workspaceRoot:H.workspaceRoot??process.cwd(),specs:{cronSpecsDir:H.cronSpecsDir??H.cronDir,scope:dX(H.cronScope),workspaceRoot:H.workspaceRoot},runtimeHandlers:lX({host:$,getExtensionContext:()=>OJ({automationService:this.automationService,automation:this.automation,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}),dbPath:H.dbPath,logger:H.logger,pollIntervalMs:H.pollIntervalMs,claimLeaseSeconds:H.claimLeaseSeconds,globalMaxConcurrency:H.globalMaxConcurrency,watcherDebounceMs:H.watcherDebounceMs}):void 0,this.unsubscribeBootstrapCleanup=this.host.subscribe((Y)=>{if(Y.type!=="ended")return;this.disposeSessionBootstrap(Y.payload.sessionId)})}static async create($={}){let f=P0($.capabilities),J=await G8({...$,capabilities:f}),Q=cX($.automation),Z=new w6(J,$.clientName,J.runtimeAddress,$.prepare,f,$.logger,$.telemetry,$.distinctId,Q?{...Q,logger:$.logger}:void 0);if(Q&&Q.autoStart!==!1)await Z.automation.start();return Z}async disposeSessionBootstrap($){let f=this.activeSessionBootstraps.get($);if(!f)return;this.activeSessionBootstraps.delete($),await Promise.resolve(f.dispose?.())}async start($){let f=kH($),J=await this.prepare?.(f);try{let Q=J?await J.applyToStartSessionInput(f):f,Z=await this.host.startSession(k7(Q,{defaultCapabilities:this.capabilities,withExtensionContext:(W)=>OJ({automationService:this.automationService,automation:this.automation,context:W,clientName:this.clientName,distinctId:this.distinctId,logger:this.logger,telemetry:this.telemetry})}));if(J)if(await this.host.getSession(Z.sessionId))this.activeSessionBootstraps.set(Z.sessionId,J);else await Promise.resolve(J.dispose?.());return IH({input:Q,sessionId:Z.sessionId,telemetry:this.telemetry,clientName:this.clientName,runtimeAddress:this.runtimeAddress}),Z}catch(Q){throw await Promise.resolve(J?.dispose?.()),Q}}send=(...$)=>this.host.runTurn(...$);getAccumulatedUsage=(...$)=>{return this.host.getAccumulatedUsage?.(...$)??Promise.resolve(void 0)};abort=(...$)=>this.host.abort(...$);stop=async($)=>{await this.host.stopSession($),await this.disposeSessionBootstrap($)};dispose=async(...$)=>{try{await this.automationService?.dispose(),await this.host.dispose(...$)}finally{this.unsubscribeBootstrapCleanup();let f=[...this.activeSessionBootstraps.keys()];await Promise.allSettled(f.map((J)=>this.disposeSessionBootstrap(J)))}};get=(...$)=>this.host.getSession(...$);listHistory=async($={})=>await dJ(this.host,$);list=async($=200,f={})=>await this.listHistory({...f,limit:$});delete=async($)=>{let f=await this.host.deleteSession($);if(f)await this.disposeSessionBootstrap($);return f};update=(...$)=>this.host.updateSession(...$);readMessages=(...$)=>this.host.readSessionMessages(...$);async restore($){let f=$.start?k7($.start,{defaultCapabilities:this.capabilities,withExtensionContext:(J)=>OJ({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:$.sessionId,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restore:$.restore,start:f})}ingestHookEvent=(...$)=>this.host.dispatchHookEvent(...$);subscribe($,f){return this.host.subscribe($,f)}updateSessionModel=(...$)=>{return this.host.updateSessionModel?.(...$)??Promise.resolve()}}var PV={};y(PV,{resolvePluginConfigSearchPaths:()=>P4,resolveAndLoadAgentPlugins:()=>x2,resolveAgentPluginPaths:()=>k1,loadAgentPluginsFromPathsWithDiagnostics:()=>b1,loadAgentPluginsFromPaths:()=>Ef,loadAgentPluginFromPath:()=>F4,discoverPluginModulePaths:()=>U4});var RV={};y(RV,{toHookConfigFileName:()=>L4,runSubprocessEvent:()=>K8,runHook:()=>P8,resolveHooksConfigSearchPaths:()=>D4,parseHookEventPayload:()=>F8,mergeAgentHooks:()=>g1,listHookConfigFiles:()=>s$,createSubprocessHooks:()=>Z5,createHookConfigFileHooks:()=>O4,createHookConfigFileExtension:()=>u2,createHookAuditHooks:()=>v2,createAgentHooksExtension:()=>m2,HookEventPayloadSchema:()=>Q5,HookEventNameSchema:()=>J5,HookConfigFileName:()=>g2,HOOK_CONFIG_FILE_EVENT_MAP:()=>R4,HOOKS_CONFIG_DIRECTORY_NAME:()=>xf});import{HookEventNameSchema as J5,HookEventPayloadSchema as Q5,parseHookEventPayload as F8,resolveHookSessionContext as jN}from"@cline/shared";import{z as Q2}from"zod";import{spawn as $N}from"node:child_process";import{augmentNodeCommandForDebug as fN,withResolvedClineBuildEnv as JN}from"@cline/shared";function QN($){let f=$.trim();if(!f)return{};let Q=f.split(`
|
|
560
|
+
`).map((W)=>W.trim()).filter(Boolean).filter((W)=>W.startsWith("HOOK_CONTROL\t")).map((W)=>W.slice(13)),Z=Q.length>0?Q[Q.length-1]:f;try{return{parsedJson:JSON.parse(Z)}}catch(W){return{parseError:W instanceof Error?W.message:"Failed to parse subprocess stdout JSON"}}}function ZN($,f){let J=$ instanceof Error?$:Error(String($)),Q=J,Z=f.join(" ");if(Q.code==="EACCES")return Error(`Failed to execute hook command "${Z}" (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 "${Z}": ${J.message}`)}async function WN($,f){let J=$.stdin;if(!J)throw Error("runSubprocessEvent failed to create stdin pipe");await new Promise((Q,Z)=>{let W=(j)=>{J.off("error",W);let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j)};J.once("error",W),J.end(f,(j)=>{if(J.off("error",W),j){let X=j.code;if(X==="EPIPE"||X==="ERR_STREAM_DESTROYED"){Q();return}Z(j);return}Q()})})}async function K8($,f){let J=fN(f.command,{env:f.env,debugRole:"hook"});if(!Array.isArray(J)||J.length===0)throw Error("runSubprocessEvent requires a non-empty command");let Q=!!f.detached,Z=$N(J[0],J.slice(1),{cwd:f.cwd,env:JN(f.env),stdio:Q?["pipe","ignore","ignore"]:["pipe","pipe","pipe"],detached:Q}),W=new Promise((B)=>{Z.once("spawn",()=>{try{f.onSpawn?.({command:J,pid:Z.pid??void 0,detached:Q})}catch{}B()})}),j=new Promise((B,G)=>{Z.once("error",(K)=>{G(ZN(K,J))})});if(await WN(Z,JSON.stringify($)),Q){await Promise.race([W,j]),Z.unref();return}if(!Z.stdout||!Z.stderr)throw Error("runSubprocessEvent failed to create stdout/stderr pipes");let X="",H="",Y=!1,V;Z.stdout.on("data",(B)=>{X+=B.toString()}),Z.stderr.on("data",(B)=>{H+=B.toString()});let A=new Promise((B)=>{if((f.timeoutMs??0)>0)V=setTimeout(()=>{Y=!0,Z.kill("SIGKILL")},f.timeoutMs);Z.once("close",(G)=>{if(V)clearTimeout(V);let{parsedJson:K,parseError:D}=QN(X);B({exitCode:G,stdout:X,stderr:H,parsedJson:K,parseError:D,timedOut:Y})})});return await Promise.race([A,j])}var XN=Q2.object({contextModification:Q2.string().optional(),cancel:Q2.boolean().optional(),review:Q2.boolean().optional(),errorMessage:Q2.string().optional(),context:Q2.string().optional(),overrideInput:Q2.unknown().optional()}).passthrough();var HN=["agent","hook"];async function P8($,f={}){let J=f.command??HN;return await K8($,{command:J,cwd:f.cwd,env:f.env,detached:f.detached,timeoutMs:f.timeoutMs,onSpawn:f.onSpawn})}function DV($){return $ instanceof Error?$:Error(String($))}function YN($){if(!$||typeof $!=="object")return;let f=XN.safeParse($);if(!f.success)return;let J=f.data;if(!(("cancel"in J)||("review"in J)||("context"in J)||("contextModification"in J)||("overrideInput"in J)||("errorMessage"in J)))return;let Z=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:Z,overrideInput:Object.hasOwn(J,"overrideInput")?J.overrideInput:void 0}}function UV($){if(!$||typeof $!=="object")return{};let f={};for(let[J,Q]of Object.entries($))if(typeof Q==="string")f[J]=Q;else f[J]=JSON.stringify(Q);return f}function h$($,f,J){let Q=J.env??process.env,Z=Q.CLINE_USER_ID?.trim()||Q.USER?.trim()||"unknown",W=J.cwd||process.cwd();return{clineVersion:Q.CLINE_VERSION?.trim()||"",hookName:$,timestamp:new Date().toISOString(),taskId:f.conversationId,sessionContext:jN(J.sessionContext,{hookName:$,conversationId:f.conversationId,agentId:f.agentId,parentAgentId:f.parentAgentId}),workspaceRoots:W?[W]:[],workspaceInfo:J.workspaceInfo,userId:Z,agent_id:f.agentId,parent_agent_id:f.parentAgentId}}function VN($){return{name:$.name,message:$.message,stack:$.stack}}function AN($){let f=String($??"").toLowerCase();return f.includes("cancel")||f.includes("abort")||f.includes("interrupt")}function BN($){return{agentId:$.snapshot.agentId,conversationId:$.snapshot.conversationId??$.snapshot.runId??$.snapshot.agentId,parentAgentId:$.snapshot.parentAgentId??null}}function GN($){return $.filter((f)=>f.type==="text"&&typeof f.text==="string").map((f)=>f.text).join("")}function KN($){return{id:$.toolCall.toolCallId,name:$.toolCall.toolName,input:$.input,output:$.result.output,error:$.result.isError?String($.result.output):void 0,durationMs:$.durationMs,startedAt:$.startedAt,endedAt:$.endedAt}}function FN($){if(!$)return;let f={};if($.cancel===!0)f.stop=!0;if($.overrideInput!==void 0)f.input=$.overrideInput;return Object.keys(f).length>0?f:void 0}async function Z2($,f){try{let J=await P8($,{command:f.command,cwd:f.cwd,env:f.env,detached:!0,onSpawn:f.onSpawn});f.onDispatch?.({payload:$,result:J,detached:!0})}catch(J){f.onDispatchError?.(DV(J),$)}}function Z5($={}){return{hooks:{beforeRun:async(X)=>{let H=BN(X);if(($.env??process.env).CLINE_HOOK_AGENT_RESUME==="1"){let V={...h$("agent_resume",H,$),hookName:"agent_resume",taskResume:{taskMetadata:{},previousState:{}}};await Z2(V,$)}else{let V={...h$("agent_start",H,$),hookName:"agent_start",taskStart:{taskMetadata:{}}};await Z2(V,$)}return},beforeTool:async(X)=>{let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("tool_call",H,$),hookName:"tool_call",iteration:X.snapshot.iteration,tool_call:{id:X.toolCall.toolCallId,name:X.toolCall.toolName,input:X.input},preToolUse:{toolName:X.toolCall.toolName,parameters:UV(X.input)}};try{let V=await P8(Y,{command:$.command,cwd:$.cwd,env:$.env,detached:!1,timeoutMs:$.timeoutMs,onSpawn:$.onSpawn});if($.onDispatch?.({payload:Y,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 FN(YN(V?.parsedJson))}catch(V){$.onDispatchError?.(DV(V),Y);return}},afterTool:async(X)=>{let H=KN(X),Y={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},V={...h$("tool_result",Y,$),hookName:"tool_result",iteration:X.snapshot.iteration,tool_result:H,postToolUse:{toolName:H.name,parameters:UV(H.input),result:typeof H.output==="string"?H.output:JSON.stringify(H.output),success:!H.error,executionTimeMs:H.durationMs}};await Z2(V,$);return},afterRun:async({snapshot:X,result:H})=>{let Y={agentId:X.agentId,conversationId:X.conversationId??X.runId??X.agentId,parentAgentId:X.parentAgentId??null};if(H.status==="completed"){let B={...h$("agent_end",Y,$),hookName:"agent_end",iteration:H.iterations,turn:{outputText:H.outputText,status:H.status},taskComplete:{taskMetadata:{}}};await Z2(B,$);return}let V=H.status==="aborted"||AN(H.error?.message)?"agent_abort":"agent_error",A=V==="agent_error"?{...h$(V,Y,$),hookName:V,iteration:H.iterations,error:VN(H.error??Error("Agent run failed")),taskCancel:{taskMetadata:{}}}:{...h$(V,Y,$),hookName:V,reason:H.error?.message,taskCancel:{taskMetadata:{}}};await Z2(A,$)},onEvent:async(X)=>{if(X.type!=="message-added"||X.message.role!=="user")return;let H={agentId:X.snapshot.agentId,conversationId:X.snapshot.conversationId??X.snapshot.runId??X.snapshot.agentId,parentAgentId:X.snapshot.parentAgentId??null},Y={...h$("prompt_submit",H,$),hookName:"prompt_submit",userPromptSubmit:{prompt:GN(X.message.content),attachments:[]}};await Z2(Y,$)}},shutdown:async({agentId:X,conversationId:H,parentAgentId:Y,reason:V})=>{let A={...h$("session_shutdown",{agentId:X,conversationId:H,parentAgentId:Y},$),hookName:"session_shutdown",reason:V};await Z2(A,$)}}}var zA={};y(zA,{writeHubDiscovery:()=>pJ,withHubStartupLock:()=>rJ,verifyHubConnection:()=>j$,truncateNotificationBody:()=>E6,toHubHealthUrl:()=>XQ,stopLocalHubServerGracefully:()=>RQ,startHubWebSocketServer:()=>X2,startHubServer:()=>LA,spawnDetachedHubServerWithRetry:()=>W8,spawnDetachedHubServer:()=>GQ,sendHubCommand:()=>TV,restartLocalHubIfIdleAfterStartupTimeout:()=>aJ,resolveWorkspaceHubOwnerContext:()=>zY,resolveSharedHubOwnerContext:()=>V0,resolveHubUrl:()=>cQ,resolveHubOwnerContext:()=>y$,resolveHubEndpointOptions:()=>l0,resolveHubBuildId:()=>Y1,resolveDefaultHubPort:()=>Z8,resolveDefaultHubPathname:()=>BQ,resolveDefaultHubHost:()=>AQ,resolveCompatibleLocalHubUrl:()=>O6,resolveClineDir:()=>DY,resolveClineDataDir:()=>U6,requestHubShutdown:()=>L6,rememberRecoverableLocalHubUrl:()=>V1,readHubDiscovery:()=>B0,probeHubServer:()=>D0,probeHubConnection:()=>NV,prewarmDetachedHubServer:()=>iJ,normalizeHubWebSocketUrl:()=>A1,isHubReconnectableTransportError:()=>UQ,isHubCommandTimeoutError:()=>nJ,isDiscoveryFilePresent:()=>LY,ensureHubWebSocketServer:()=>K5,ensureHubServer:()=>OA,ensureDetachedHubServer:()=>NY,ensureCompatibleLocalHubUrl:()=>e1,createLocalHubScheduleRuntimeHandlers:()=>F5,createInMemoryHubOwnerContext:()=>RY,createHubServerUrl:()=>o0,createHubAuthToken:()=>lJ,createConfiguredTelemetryService:()=>E$,createConfiguredTelemetryHandle:()=>O8,connectToHub:()=>H5,clearHubDiscovery:()=>d0,NodeHubClient:()=>e0,NativeHubTransportAdapter:()=>m6,HubUIClient:()=>pQ,HubTransportError:()=>_0,HubSessionClient:()=>lQ,HubServerTransport:()=>_8,HubScheduleService:()=>D8,HubScheduleCommandService:()=>U8,HubCommandError:()=>j8,DEFAULT_HUB_PORT:()=>YQ,DEFAULT_HUB_PATHNAME:()=>VQ,DEFAULT_HUB_HOST:()=>HQ,BrowserWebSocketHubAdapter:()=>x6});import{createSessionId as PN}from"@cline/shared";function p0($,f){return{version:$.version,requestId:$.requestId,ok:!0,payload:f}}function LV($,f,J){return{version:$.version,requestId:$.requestId??PN("hubreq_"),ok:!1,error:{code:f,message:J}}}class U8{schedules;constructor($){this.schedules=$}async handleCommand($){try{switch($.command){case"schedule.create":return p0($,{schedule:this.schedules.createSchedule(this.toCreateInput($.payload??{}))});case"schedule.list":return p0($,{schedules:this.schedules.listSchedules({enabled:typeof $.payload?.enabled==="boolean"?$.payload.enabled:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0,tags:Array.isArray($.payload?.tags)?$.payload?.tags:void 0})});case"schedule.get":return p0($,{schedule:this.schedules.getSchedule(String($.payload?.scheduleId??""))});case"schedule.update":return p0($,{schedule:this.schedules.updateSchedule(String($.payload?.scheduleId??""),this.toUpdateInput($.payload??{}))});case"schedule.delete":return p0($,{deleted:this.schedules.deleteSchedule(String($.payload?.scheduleId??""))});case"schedule.enable":return p0($,{schedule:this.schedules.resumeSchedule(String($.payload?.scheduleId??""))});case"schedule.disable":return p0($,{schedule:this.schedules.pauseSchedule(String($.payload?.scheduleId??""))});case"schedule.trigger":return p0($,{execution:await this.schedules.triggerScheduleNow(String($.payload?.scheduleId??""))});case"schedule.list_executions":return p0($,{executions:this.schedules.listScheduleExecutions({scheduleId:typeof $.payload?.scheduleId==="string"?$.payload.scheduleId:void 0,status:typeof $.payload?.status==="string"?$.payload.status:void 0,limit:typeof $.payload?.limit==="number"?$.payload.limit:void 0})});case"schedule.stats":return p0($,{stats:this.schedules.getScheduleStats(String($.payload?.scheduleId??""))});case"schedule.active":return p0($,{executions:this.schedules.getActiveExecutions()});case"schedule.upcoming":return p0($,{runs:this.schedules.getUpcomingRuns(typeof $.payload?.limit==="number"?$.payload.limit:void 0)});default:return LV($,"unsupported_command",`Unsupported hub schedule command: ${$.command}`)}}catch(f){return LV($,"schedule_command_failed",f instanceof Error?f.message:String(f))}}toCreateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider&&$.model?{providerId:String($.provider),modelId:String($.model)}:void 0;return{...$,modelSelection:f}}toUpdateInput($){let f=$.modelSelection&&typeof $.modelSelection==="object"&&!Array.isArray($.modelSelection)?$.modelSelection:$.provider||$.model?{providerId:typeof $.provider==="string"?$.provider:"",modelId:typeof $.model==="string"?$.model:""}:void 0;return{...$,modelSelection:f}}}function j5($){return $?new Date($).getTime():void 0}function UN($){let f=$.metadata?{...$.metadata}:void 0;if(f)delete f.__hubScheduleCreatedBy,delete f.__hubScheduleCwd,delete f.__hubRuntimeOptions;return f}function W5($){let f=$.metadata;return{scheduleId:$.externalId,name:$.title,cronPattern:$.scheduleExpr??"",prompt:$.prompt??"",workspaceRoot:$.workspaceRoot??"",cwd:typeof f?.__hubScheduleCwd==="string"?f.__hubScheduleCwd:void 0,modelSelection:$.providerId||$.modelId?{providerId:$.providerId??"",modelId:$.modelId??""}:void 0,enabled:$.enabled&&!$.removed&&$.parseStatus==="valid",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,maxParallel:$.maxParallel??1,createdAt:new Date($.createdAt).getTime(),updatedAt:new Date($.updatedAt).getTime(),nextRunAt:j5($.nextRunAt),lastRunAt:j5($.lastRunAt),createdBy:typeof f?.__hubScheduleCreatedBy==="string"?f.__hubScheduleCreatedBy:void 0,tags:$.tags,runtimeOptions:f?.__hubRuntimeOptions&&typeof f.__hubRuntimeOptions==="object"&&!Array.isArray(f.__hubRuntimeOptions)?f.__hubRuntimeOptions:void 0,metadata:UN($)}}function DN($){switch($){case"done":return"success";case"cancelled":return"aborted";case"running":return"running";case"queued":return"pending";default:return"failed"}}function OV($,f){return{executionId:$.runId,scheduleId:f,sessionId:$.sessionId,triggeredAt:new Date($.scheduledFor??$.createdAt).getTime(),startedAt:j5($.startedAt),endedAt:j5($.completedAt),status:DN($.status),errorMessage:$.error}}class D8{store;materializer;runner;started=!1;disposed=!1;constructor($){this.store=new G6({dbPath:$.dbPath}),this.materializer=new H6({store:this.store}),this.runner=new Y6({store:this.store,materializer:this.materializer,runtimeHandlers:$.runtimeHandlers,eventPublisher:$.eventPublisher,workspaceRoot:"",logger:$.logger,pollIntervalMs:$.pollIntervalMs,claimLeaseSeconds:$.claimLeaseSeconds,globalMaxConcurrency:$.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($){if(l7($.cronPattern),!$.workspaceRoot?.trim())throw Error("workspaceRoot is required for schedules");return W5(this.store.createHubSchedule($))}getSchedule($){let f=this.store.getHubSchedule($);return f?W5(f):void 0}listSchedules($={}){return this.store.listHubSchedules($).map((f)=>W5(f))}updateSchedule($,f){if(f.cronPattern!==void 0)l7(f.cronPattern);let J=this.store.getHubSchedule($);if(!J)return;let Q=f.workspaceRoot!==void 0?f.workspaceRoot.trim():J.workspaceRoot;if((f.enabled??J.enabled)&&!Q)throw Error("workspaceRoot is required for enabled schedules");let W=this.store.updateHubSchedule($,{...f,scheduleId:$});return W?W5(W):void 0}deleteSchedule($){return this.store.deleteHubSchedule($)}pauseSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!1})}resumeSchedule($){return this.updateSchedule($,{scheduleId:$,enabled:!0})}async triggerScheduleNow($){let f=this.store.enqueueHubScheduleRun($,"manual");if(!f)return;await this.runner.tick();let J=this.store.getRun(f.runId)??f;return OV(J,$)}listScheduleExecutions($){let f=$.scheduleId?this.store.getHubSchedule($.scheduleId):void 0,J={specId:f?.specId,limit:$.limit};return this.store.listRuns(J).map((Z)=>{let W=f??this.store.getSpec(Z.specId);if(!W||W.source!=="hub-schedule")return;return OV(Z,W.externalId)}).filter((Z)=>{if(!Z)return!1;return!$.status||Z.status===$.status})}getScheduleStats($){let f=this.listScheduleExecutions({scheduleId:$,limit:1e4});if(f.length===0)return{totalRuns:0,successRate:0,avgDurationSeconds:0};let J=0,Q=0,Z=0,W;for(let j of f){if(j.status==="success"||j.status==="completed")J+=1;if(!W&&j.status!=="success"&&j.status!=="completed")W=j;if(j.startedAt&&j.endedAt)Z+=j.endedAt-j.startedAt,Q+=1}return{totalRuns:f.length,successRate:J/f.length,avgDurationSeconds:Q>0?Z/Q/1000:0,lastFailure:W}}getActiveExecutions(){return this.runner.getActiveRuns().flatMap(($)=>{let f=this.store.getSpec($.specId);if(!f||f.source!=="hub-schedule"||!$.sessionId)return[];return[{executionId:$.runId,scheduleId:f.externalId,sessionId:$.sessionId,startedAt:$.startedAt??new Date().toISOString(),timeoutAt:f.timeoutSeconds&&$.startedAt?new Date(new Date($.startedAt).getTime()+f.timeoutSeconds*1000).toISOString():void 0}]})}getUpcomingRuns($=20){let f={triggerKind:"schedule",enabled:!0,limit:$};return this.store.listSpecs(f).flatMap((J)=>J.source==="hub-schedule"&&J.nextRunAt?[{spec:J,nextRunAt:J.nextRunAt}]:[]).sort((J,Q)=>String(J.nextRunAt).localeCompare(String(Q.nextRunAt))).slice(0,$).map(({spec:J,nextRunAt:Q})=>({scheduleId:J.externalId,name:J.title,nextRunAt:Q}))}}X5();function uN($,f){if($ instanceof Error)return $;if($&&typeof $==="object"&&"message"in $&&typeof $.message==="string"&&$.message.trim())return Error($.message.trim());let J=$&&typeof $==="object"&&"type"in $&&typeof $.type==="string"?$.type.trim():"";return Error(J?`Failed to connect to hub at ${f} (${J} event before socket open).`:`Failed to connect to hub at ${f}.`)}var cN="cline-hub-auth.";function dN($){return $.host!==void 0||$.port!==void 0||$.pathname!==void 0}function lN($,f){let J=new URL($),Q=new URL(f);return J.search="",J.hash="",Q.search="",Q.hash="",J.toString()===Q.toString()}async function pN($){let f=$.searchParams.get("authToken")?.trim();if($.searchParams.delete("authToken"),f)return f;let J=V0(),Q=await B0(J.discoveryPath);if(Q?.url&&lN($.toString(),Q.url))return Q.authToken;return}async function cQ($={}){let f=l0($);if(!dN($)){let J=V0(),Q=await B0(J.discoveryPath);if(Q?.url)return Q.url}return o0(f.host,f.port,f.pathname)}async function H5($){return await new Promise((f,J)=>{(async()=>{let Q=new URL($),Z=await pN(Q);Q.hash="";let W=new WebSocket(Q.toString(),Z?[`${cN}${Z}`]:void 0),j=new Map,X=0;W.addEventListener("open",()=>{f({send(H){let Y=H.requestId??`hub-client-${++X}`;return new Promise((V,A)=>{j.set(Y,{resolve:V,reject:A});let B={kind:"command",envelope:{...H,requestId:Y}};W.send(JSON.stringify(B))})},close(){W.close()}})}),W.addEventListener("message",(H)=>{let Y=JSON.parse(String(H.data));if(Y.kind==="reply"&&Y.envelope.requestId){let V=j.get(Y.envelope.requestId);if(V)j.delete(Y.envelope.requestId),V.resolve(Y.envelope)}}),W.addEventListener("close",()=>{for(let H of j.values())H.reject(Error("Hub connection closed"));j.clear()}),W.addEventListener("error",(H)=>{J(uN(H,$))})})().catch(J)})}async function NV($){try{return(await H5($)).close(),!0}catch{return!1}}async function TV($,f){let J=await cQ($),Q=await H5(J);try{return await Q.send({version:f.version??"v1",clientId:f.clientId??"hub-client",...f})}finally{Q.close()}}function dQ($){return $?JSON.parse(JSON.stringify($)):{}}function Y5($){let f=$?.session&&typeof $.session==="object"?$.session:void 0;if(!f)return;let J=f.metadata&&typeof f.metadata==="object"?dQ(f.metadata):void 0;return{sessionId:typeof f.sessionId==="string"?f.sessionId:"",parentSessionId:typeof J?.parentSessionId==="string"?J.parentSessionId:void 0,messagesPath:typeof J?.messagesPath==="string"?J.messagesPath:void 0,metadata:J}}function MV($,f){return $.error?.message??`hub command failed: ${f}`}function rN($){let f=dQ($);if(typeof f.error==="string"&&f.error.trim())return{...f,error:f.error.trim()};let J=f.result&&typeof f.result==="object"?f.result:void 0;if(typeof J?.text==="string"&&J.text.trim())return{...f,error:J.text.trim()};let Q=J?.error&&typeof J.error==="object"?J.error:void 0;if(typeof Q?.message==="string"&&Q.message.trim())return{...f,error:Q.message.trim()};return f}function qV($){let f=$?.sessionId;return typeof f==="string"&&f.trim()?f.trim():void 0}function iN($){let f=$?.checkpoint;if(!f||typeof f!=="object"||Array.isArray(f))throw Error("hub checkpoint restore returned no checkpoint");let J=f;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 nN($){let f=dQ($.payload);if($.event==="schedule.execution_completed")return{sessionId:$.sessionId?.trim()||qV(f)||"",eventType:"schedule.execution.completed",payload:f};if($.event==="schedule.execution_failed")return{sessionId:$.sessionId?.trim()||qV(f)||"",eventType:"schedule.execution.failed",payload:f};let J=$.sessionId?.trim();if(!J)return;switch($.event){case"iteration.started":return{sessionId:J,eventType:"runtime.chat.iteration_start",payload:f};case"iteration.finished":return{sessionId:J,eventType:"runtime.chat.iteration_end",payload:f};case"assistant.delta":return{sessionId:J,eventType:"runtime.chat.text_delta",payload:f};case"usage.updated":return{sessionId:J,eventType:"runtime.chat.usage",payload:f};case"tool.started":return{sessionId:J,eventType:"runtime.chat.tool_call_start",payload:f};case"tool.finished":return{sessionId:J,eventType:"runtime.chat.tool_call_end",payload:f};case"approval.requested":return{sessionId:J,eventType:"approval.requested",payload:f};case"run.aborted":return{sessionId:J,eventType:"runtime.chat.aborted",payload:f};case"run.failed":return{sessionId:J,eventType:"runtime.chat.failed",payload:rN($.payload)};case"run.completed":return{sessionId:J,eventType:"runtime.chat.completed",payload:f};default:return}}class lQ{options;client;metadataApplied=!1;constructor($){this.options=$;this.client=new e0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-session-client",displayName:$.displayName??"hub session client",workspaceRoot:$.workspaceRoot,cwd:$.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($){await this.ensureMetadataApplied();let f=await this.client.command("session.create",{workspaceRoot:$.workspaceRoot,cwd:$.cwd,sessionConfig:{providerId:$.provider,modelId:$.model,apiKey:$.apiKey,cwd:$.cwd??$.workspaceRoot,workspaceRoot:$.workspaceRoot,systemPrompt:$.systemPrompt??"",mode:$.mode??"act",rules:$.rules,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawnAgent:$.enableSpawn!==!1,enableAgentTeams:$.enableTeams!==!1,disableMcpSettingsTools:$.disableMcpSettingsTools,missionLogIntervalSteps:$.missionStepInterval,missionLogIntervalMs:$.missionTimeIntervalMs},metadata:{source:$.source??"cli",provider:$.provider,model:$.model,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,prompt:void 0,interactive:$.interactive!==!1},runtimeOptions:{mode:$.mode,systemPrompt:$.systemPrompt,maxIterations:$.maxIterations,timeoutSeconds:$.timeoutSeconds,enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,autoApproveTools:$.autoApproveTools,toolExecutors:$.toolExecutors,configExtensions:$.configExtensions},modelSelection:{provider:$.provider,model:$.model,apiKey:$.apiKey},toolPolicies:$.toolPolicies}),J=Y5(f.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:f.prompt,mode:f.config.mode,attachments:f.attachments,delivery:f.delivery,timeoutSeconds:f.config.timeoutSeconds},$,J)).payload?.result}}async stopRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("session.detach",{sessionId:$},$),{applied:!0}}async abortRuntimeSession($){return await this.ensureMetadataApplied(),await this.client.command("run.abort",{sessionId:$},$),{applied:!0}}async updateSession($){return await this.ensureMetadataApplied(),await this.client.command("session.update",{sessionId:$.sessionId,metadata:$.metadata},$.sessionId),{updated:!0}}async getSession($){await this.ensureMetadataApplied();let f=await this.client.command("session.get",void 0,$);return Y5(f.payload)}async readMessages($){let f=$.trim();if(!f)return[];await this.ensureMetadataApplied();let J=await this.client.command("session.messages",{sessionId:f},f);if(!J.ok)throw Error(MV(J,"session.messages"));let Q=J.payload?.messages;return Array.isArray(Q)?Q:[]}async restore($){let f=$.sessionId.trim();if(!f)throw Error("sessionId is required");let J=$.restore?.messages!==!1;if(J&&!$.config)throw Error("config is required when restore.messages is true");await this.ensureMetadataApplied();let Q=$.config,Z=await this.client.command("session.restore",{sessionId:f,checkpointRunCount:$.checkpointRunCount,restore:$.restore,...Q?{workspaceRoot:Q.workspaceRoot,cwd:Q.cwd,sessionConfig:{providerId:Q.provider,modelId:Q.model,apiKey:Q.apiKey,cwd:Q.cwd??Q.workspaceRoot,workspaceRoot:Q.workspaceRoot,systemPrompt:Q.systemPrompt??"",mode:Q.mode??"act",rules:Q.rules,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawnAgent:Q.enableSpawn!==!1,enableAgentTeams:Q.enableTeams!==!1,disableMcpSettingsTools:Q.disableMcpSettingsTools,missionLogIntervalSteps:Q.missionStepInterval,missionLogIntervalMs:Q.missionTimeIntervalMs},metadata:{source:Q.source??"cli",provider:Q.provider,model:Q.model,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,prompt:void 0,interactive:Q.interactive!==!1},runtimeOptions:{mode:Q.mode,systemPrompt:Q.systemPrompt,maxIterations:Q.maxIterations,enableTools:Q.enableTools,enableSpawn:Q.enableSpawn,enableTeams:Q.enableTeams,autoApproveTools:Q.autoApproveTools,configExtensions:Q.configExtensions},modelSelection:{provider:Q.provider,model:Q.model,apiKey:Q.apiKey},toolPolicies:Q.toolPolicies}:{}},f);if(!Z.ok)throw Error(MV(Z,"session.restore"));let W=Y5(Z.payload);if(J&&!W?.sessionId)throw Error("hub checkpoint restore returned no session id");let j=Array.isArray(Z.payload?.messages)?Z.payload.messages:void 0,X=iN(Z.payload);return{sessionId:W?.sessionId,startResult:W?.sessionId?{sessionId:W.sessionId,manifestPath:"",messagesPath:W.messagesPath??""}:void 0,...j?{messages:j}:{},checkpoint:X}}async listSessions($){await this.ensureMetadataApplied();let f=await this.client.command("session.list",{limit:$?.limit??200});return(Array.isArray(f.payload?.sessions)?f.payload?.sessions:[]).map((Q)=>Y5({session:Q})).filter((Q)=>Boolean(Q?.sessionId))}async deleteSession($,f=!0){return await this.ensureMetadataApplied(),(await this.client.command("session.delete",{sessionId:$,deleteCheckpointRefs:f})).payload?.deleted===!0}async respondToolApproval($){await this.ensureMetadataApplied(),await this.client.command("approval.respond",{approvalId:$.approvalId,approved:$.approved,payload:$.reason?{reason:$.reason}:void 0,responderClientId:$.responderClientId})}streamEvents($,f){let J=new Set(($.sessionIds??[]).map((Z)=>Z.trim()).filter(Boolean)),Q=this.client.subscribe((Z)=>{let W=nN(Z);if(!W)return;if(J.size>0&&!J.has(W.sessionId))return;f.onEvent?.(W)});return this.ensureMetadataApplied().catch((Z)=>{f.onError?.(Z instanceof Error?Z:Error(String(Z)))}),Q}streamTeamProgress($,f){let J=this.client.subscribe((Q)=>{if(Q.event!=="team.progress"||!Q.payload)return;f.onProjection?.(Q.payload)});return this.ensureMetadataApplied().catch((Q)=>{f.onError?.(Q instanceof Error?Q:Error(String(Q)))}),J}async createSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.create",$)).payload?.schedule}async listSchedules($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.list");return Array.isArray(f.payload?.schedules)?f.payload?.schedules:[]}async getSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.get",{scheduleId:$})).payload?.schedule}async updateSchedule($,f){return await this.ensureMetadataApplied(),(await this.client.command("schedule.update",{scheduleId:$,...f})).payload?.schedule}async pauseSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.disable",{scheduleId:$})).payload?.schedule}async resumeSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.enable",{scheduleId:$})).payload?.schedule}async deleteSchedule($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.delete",{scheduleId:$})).payload?.deleted===!0}async triggerScheduleNow($){return await this.ensureMetadataApplied(),(await this.client.command("schedule.trigger",{scheduleId:$})).payload?.execution}async listScheduleExecutions($,f){await this.ensureMetadataApplied();let J=await this.client.command("schedule.list_executions",{scheduleId:$,limit:f});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 $=await this.client.command("schedule.active");return Array.isArray($.payload?.executions)?$.payload?.executions:[]}async getUpcomingScheduledRuns($){await this.ensureMetadataApplied();let f=await this.client.command("schedule.upcoming",{limit:$});return Array.isArray(f.payload?.upcoming)?f.payload?.upcoming:[]}}class pQ{client;constructor($){this.client=new e0({url:$.address,authToken:$.authToken,clientId:$.clientId,clientType:$.clientType??"hub-ui-client",displayName:$.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($){await this.client.command("ui.notify",$)}async sendShowWindow($){await this.client.command("ui.show_window",$??{})}async listClients(){let $=await this.client.command("client.list");return Array.isArray($.payload?.clients)?$.payload.clients:[]}async listSessions($=200){let f=await this.client.command("session.list",{limit:$});return Array.isArray(f.payload?.sessions)?f.payload.sessions:[]}subscribeUI($){return this.client.subscribe((f)=>{switch(f.event){case"ui.notify":$.onNotify?.(f.payload);break;case"ui.show_window":$.onShowWindow?.(f.payload);break;case"hub.client.registered":$.onClientRegistered?.(f.payload??{});break;case"hub.client.disconnected":$.onClientDisconnected?.(f.payload??{});break;case"session.created":$.onSessionCreated?.(f.payload??{});break;case"session.updated":$.onSessionUpdated?.(f.payload??{});break;case"session.detached":$.onSessionDetached?.(f.payload??{});break}})}}function aN($){if(typeof $==="string")return $.trim()||void 0;if(!Array.isArray($))return;return $.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(`
|
|
561
|
+
`).trim()||void 0}var yV=120,rQ="...";function E6($){let f=$.trim();if(!f)return"";if(Buffer.byteLength(f,"utf8")<=yV)return f;let J=yV-Buffer.byteLength(rQ,"utf8");if(J<=0)return rQ;let Q="";for(let Z of f){if(Buffer.byteLength(Q+Z,"utf8")>J)break;Q+=Z}return`${Q}${rQ}`}async function wV($){let f=$?.sessionId?.trim()||"unknown",J=typeof $?.metadata?.messagesPath==="string"?$.metadata.messagesPath:void 0,Z=[...await H1(J)].reverse().find((H)=>H.role==="assistant"),W=Z?aN(Z.content):void 0,j=$?.workspaceRoot?.trim()||"workspace",X=typeof $?.metadata?.prompt==="string"?$.metadata.prompt.trim():j;return{title:`Task completed (${f})`,body:E6(W&&W.length>0?W:X.length>0?X:j),severity:"info"}}import{captureSdkError as G5,createSessionId as yT}from"@cline/shared";import{createSessionId as eN}from"@cline/shared";import{createSessionId as oN}from"@cline/shared";function tN($){switch($){case"idle":return"idle";case"pending":return"pending";case"completed":return"completed";case"failed":return"failed";case"cancelled":return"aborted";default:return"running"}}function sN($){let f=$.metadata&&typeof $.metadata==="object"?JSON.parse(JSON.stringify($.metadata)):{};if($.parentSessionId?.trim())f.parentSessionId=$.parentSessionId;if($.parentAgentId?.trim())f.parentAgentId=$.parentAgentId;if($.agentId?.trim())f.agentId=$.agentId;if($.conversationId?.trim())f.conversationId=$.conversationId;if($.messagesPath?.trim())f.messagesPath=$.messagesPath;if($.prompt?.trim())f.prompt=$.prompt;if($.provider?.trim())f.provider=$.provider;if($.model?.trim())f.model=$.model;if($.source?.trim())f.source=$.source;if(typeof $.pid==="number")f.pid=$.pid;return Object.keys(f).length>0?f:void 0}function V5($,f,J,Q){return{sessionId:$.sessionId,workspaceRoot:$.workspaceRoot,cwd:$.cwd,createdAt:Date.parse($.startedAt),updatedAt:Date.parse($.updatedAt),createdByClientId:f?.createdByClientId??"hub",status:tN($.status),participants:f?[...f.participants.values()]:[],metadata:sN($),runtimeOptions:{enableTools:$.enableTools,enableSpawn:$.enableSpawn,enableTeams:$.enableTeams,mode:typeof $.metadata?.mode==="string"?$.metadata.mode:void 0,systemPrompt:typeof $.metadata?.systemPrompt==="string"?$.metadata.systemPrompt:void 0},runtimeSession:$.agentId?{agentId:$.agentId,team:$.teamName?{teamId:$.teamName}:void 0}:void 0,...J?{usage:{...J}}:{},...Q?{aggregateUsage:{...Q}}:{}}}function u($,f){return{version:$.version,requestId:$.requestId,ok:!0,...f!==void 0?{payload:f}:{}}}function m($,f,J){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:f,message:J}}}function A5($){return $&&typeof $==="object"&&!Array.isArray($)?$:void 0}function w0($){if(typeof $.payload?.sessionId==="string")return $.payload.sessionId.trim();return $.sessionId?.trim()??""}function W2($,f,J){return{version:"v1",event:$,eventId:oN("hevt_"),sessionId:J,timestamp:Date.now(),payload:f}}async function r0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let Q=await $.sessionHost.getAccumulatedUsage?.(f);return V5(J,$.sessionState.get(f),Q?.usage,Q?.aggregateUsage)}async function i0($,f){let J=await $.sessionHost.getSession(f);if(!J)return;let[Q,Z]=await Promise.all([typeof $.sessionHost.readSessionMessages==="function"?$.sessionHost.readSessionMessages(f):[],$.sessionHost.getAccumulatedUsage?.(f)]);return X$({session:J,messages:Q,usage:Z?.usage,aggregateUsage:Z?.aggregateUsage})}function B5($,f,J,Q,Z={}){let W=$.sessionState.get(f);if(W){if(Z.interactive!==void 0)W.interactive=Z.interactive;if(!W.participants.has(J))W.participants.set(J,{clientId:J,attachedAt:Date.now(),role:Q});return W}let j={createdByClientId:J,interactive:Z.interactive??!0,participants:new Map([[J,{clientId:J,attachedAt:Date.now(),role:Q}]])};return $.sessionState.set(f,j),j}async function iQ($,f){let J=eN("approval_"),Q=f.sessionId;if($.sessionState.get(Q)?.interactive===!1)return{approved:!1,reason:"Tool approval requires an interactive session, but this session is non-interactive."};return await new Promise((W)=>{$.pendingApprovals.set(J,{sessionId:Q,resolve:W}),$.publish($.buildEvent("approval.requested",{approvalId:J,sessionId:f.sessionId,agentId:f.agentId,conversationId:f.conversationId,iteration:f.iteration,toolCallId:f.toolCallId,toolName:f.toolName,inputJson:JSON.stringify(f.input??null),policy:f.policy},Q))})}function nQ($,f,J){let Q=$.pendingApprovals.get(f);if(!Q)return;return $.pendingApprovals.delete(f),Q.resolve(J),{sessionId:Q.sessionId}}function aQ($,f,J){let Q=0;for(let[Z,W]of[...$.pendingApprovals.entries()]){if(!f({approvalId:Z,sessionId:W.sessionId}))continue;$.pendingApprovals.delete(Z),W.resolve({approved:!1,reason:J}),$.publish($.buildEvent("approval.resolved",{approvalId:Z,approved:!1,cancelled:!0,reason:J},W.sessionId)),Q+=1}return Q}async function SV($,f){let J=typeof f.payload?.approvalId==="string"?f.payload.approvalId.trim():"";if(!$.pendingApprovals.get(J))return m(f,"approval_not_found",`Unknown approval: ${J}`);let Z=typeof f.payload?.reason==="string"?f.payload.reason:f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)&&typeof f.payload.payload.reason==="string"?f.payload.payload.reason:void 0,W=f.payload?.approved===!0,j=nQ($,J,{approved:W,reason:Z});if(!j)return m(f,"approval_not_found",`Unknown approval: ${J}`);return $.publish($.buildEvent("approval.resolved",{approvalId:J,approved:W,reason:Z},j.sessionId)),u(f,{approvalId:J,approved:W})}import{createSessionId as JT}from"@cline/shared";function $T($){if($ instanceof Error)return{name:$.name,message:$.message,stack:$.stack};if($===void 0)return;return $}var CV={debug:10,info:20,warn:30,error:40,silent:50};function fT(){let $=process.env.CLINE_HUB_LOG_LEVEL?.trim().toLowerCase();if($==="debug"||$==="info"||$==="warn"||$==="error"||$==="silent")return $;return process.env.VITEST?"error":"info"}function g($,f,J={}){if(CV[$]<CV[fT()])return;let Q=JSON.stringify({ts:new Date().toISOString(),level:$,component:"hub",message:f,...Object.fromEntries(Object.entries(J).map(([Z,W])=>[Z,$T(W)]).filter(([,Z])=>Z!==void 0))});if($==="error"||$==="warn"){console.error(`[hub] ${Q}`);return}console.log(`[hub] ${Q}`)}function tQ($,f){let J=f instanceof Error?f.stack||f.message:String(f);g("error",$,{error:J})}async function hV($,f,J,Q,Z,W){let j=JT("capreq_"),X=performance.now();return g("info","capability.request.start",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z}),await new Promise((H,Y)=>{$.pendingCapabilityRequests.set(j,{sessionId:f,targetClientId:Z,capabilityName:J,onProgress:W,resolve:(V)=>{if(g(V.ok?"info":"warn","capability.request.end",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z,ok:V.ok,error:V.error,durationMs:Math.round(performance.now()-X)}),!V.ok){Y(Error(V.error||`Capability ${J} was rejected by ${Z}.`));return}H(V.payload)}}),$.publish($.buildEvent("capability.requested",{requestId:j,targetClientId:Z,capabilityName:J,payload:Q},f)),g("info","capability.request.published",{requestId:j,sessionId:f,capabilityName:J,targetClientId:Z})})}function EV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return m(f,"capability_not_found",`Unknown capability request: ${J}`);if((f.clientId?.trim()||"")!==Q.targetClientId)return m(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return m(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{};return Q.onProgress?.(W),u(f,{requestId:J})}function K1($,f,J){let Q=0;for(let[Z,W]of[...$.pendingCapabilityRequests.entries()]){if(!f({requestId:Z,...W}))continue;$.pendingCapabilityRequests.delete(Z),g("warn","capability.request.cancelled",{requestId:Z,sessionId:W.sessionId,capabilityName:W.capabilityName,targetClientId:W.targetClientId,reason:J}),W.resolve({ok:!1,error:J}),$.publish($.buildEvent("capability.resolved",{requestId:Z,capabilityName:W.capabilityName,targetClientId:W.targetClientId,ok:!1,cancelled:!0,error:J},W.sessionId)),Q+=1}return Q}async function bV($,f){let J=typeof f.payload?.sessionId==="string"?f.payload.sessionId.trim():f.sessionId?.trim()||"",Q=typeof f.payload?.capabilityName==="string"?f.payload.capabilityName.trim():"",Z=typeof f.payload?.targetClientId==="string"?f.payload.targetClientId.trim():"";if(!J||!Q||!Z)return m(f,"invalid_capability_request","capability.request requires sessionId, capabilityName, and targetClientId");try{let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:{},j=await $.requestCapability(J,Q,W,Z);return u(f,j)}catch(W){return m(f,"capability_request_failed",W instanceof Error?W.message:String(W))}}function kV($,f){let J=typeof f.payload?.requestId==="string"?f.payload.requestId.trim():"",Q=$.pendingCapabilityRequests.get(J);if(!Q)return m(f,"capability_not_found",`Unknown capability request: ${J}`);let Z=f.clientId?.trim()||"";if(Z!==Q.targetClientId)return m(f,"capability_wrong_client",`Capability request ${J} is owned by ${Q.targetClientId}`);if(f.sessionId?.trim()&&f.sessionId.trim()!==Q.sessionId)return m(f,"capability_wrong_session",`Capability request ${J} belongs to session ${Q.sessionId}`);$.pendingCapabilityRequests.delete(J);let W=f.payload?.payload&&typeof f.payload.payload==="object"&&!Array.isArray(f.payload.payload)?f.payload.payload:void 0,j=typeof f.payload?.error==="string"?f.payload.error:void 0,X=f.payload?.ok===!0;return g(X?"info":"warn","capability.respond",{requestId:J,sessionId:Q.sessionId,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,error:j}),Q.resolve({ok:X,payload:W,error:j}),$.publish($.buildEvent("capability.resolved",{requestId:J,capabilityName:Q.capabilityName,targetClientId:Q.targetClientId,respondedByClientId:Z,ok:X,payload:W,error:j},Q.sessionId)),u(f,{requestId:J,ok:X})}import{createSessionId as QT}from"@cline/shared";function IV($,f){let J=f.payload,Q=J?.clientId?.trim()||f.clientId?.trim()||QT("client_");return $.clients.set(Q,{clientId:Q,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}),$.publish($.buildEvent("hub.client.registered",{clientId:Q,clientType:J?.clientType??"unknown",displayName:J?.displayName,connectedAt:Date.now()})),u(f,{clientId:Q})}function xV($,f){let J=f.clientId?.trim(),Q=J?$.clients.get(J):void 0;if(!J||!Q)return m(f,"client_not_found","Client is not registered with this hub.");let Z=A5(f.payload?.metadata);if(Q.lastSeenAt=Date.now(),Z)Q.metadata=JSON.parse(JSON.stringify(Z));return u(f)}function mV($,f,J){let Q=f.clientId?.trim();if(Q)$.clients.delete(Q),J(Q),$.publish($.buildEvent("hub.client.disconnected",{clientId:Q}));return u(f)}function gV($,f){return u(f,{clients:[...$.clients.values()]})}var ZT=30000;function WT($){if($==="aborted")return"run.aborted";if($==="error"||$==="failed")return"run.failed";return"run.completed"}function jT($){if($.finishReason!=="error")return;return $.text.trim()||void 0}function XT($){return $?$:void 0}function HT($){let f=typeof $.timeoutMs==="number"?$.timeoutMs:typeof $.timeout_ms==="number"?$.timeout_ms:void 0;if(f&&Number.isFinite(f)&&f>0)return Math.floor(f);let J=typeof $.timeoutSeconds==="number"?$.timeoutSeconds:typeof $.timeout_seconds==="number"?$.timeout_seconds:void 0;if(J&&Number.isFinite(J)&&J>0)return Math.floor(J*1000);return}async function YT($,f,J,Q){let Z=performance.now(),W=!1,j={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J.sessionId,timeoutMs:Q},X=setInterval(()=>{if(W)return;let V=Math.round(performance.now()-Z);g("warn","run.heartbeat",{...j,elapsedMs:V}),$.publish($.buildEvent("run.heartbeat",{requestId:f.requestId,elapsedMs:V,...Q?{timeoutMs:Q}:{}},J.sessionId))},ZT),H=$.sessionHost.runTurn(J);H.then((V)=>{if(!W)return;g("warn","run.late_end",{...j,elapsedMs:Math.round(performance.now()-Z),finishReason:V?.finishReason})},(V)=>{if(!W)return;g("error","run.late_error",{...j,elapsedMs:Math.round(performance.now()-Z),error:V})});let Y;try{if(!Q)return await H;return await Promise.race([H,new Promise((V,A)=>{Y=setTimeout(()=>{let B=`Hub run ${f.command} timed out after ${Q}ms.`;W=!0,clearInterval(X),A(Error(B)),g("error","run.timeout",{...j,elapsedMs:Math.round(performance.now()-Z)}),aQ($,(G)=>G.sessionId===J.sessionId,B),K1($,(G)=>G.sessionId===J.sessionId,B),$.sessionHost.abort(J.sessionId,B).catch((G)=>{g("error","run.timeout_abort_failed",{...j,error:G})})},Q)})])}finally{if(W=!0,clearInterval(X),Y)clearTimeout(Y)}}async function vV($,f){let J=w0(f),Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.prompt==="string"?Q.prompt:typeof Q.input==="string"?Q.input:"";if(!Z.trim())return m(f,"invalid_session_input","session input requires a prompt string");$.publish($.buildEvent("run.started",void 0,J));let W=Q.attachments&&typeof Q.attachments==="object"&&!Array.isArray(Q.attachments)?Q.attachments:void 0,j=Array.isArray(W?.userFiles)?W.userFiles.filter((V)=>typeof V==="string"):void 0,X=HT(Q);$.suppressNextTerminalEventBySession.set(J,"run.start.reply");let H;try{H=await YT($,f,{sessionId:J,prompt:Z,mode:XT(Q.mode),delivery:Q.delivery==="queue"||Q.delivery==="steer"?Q.delivery:void 0,userImages:Array.isArray(W?.userImages)?W.userImages:void 0,userFiles:j,timeoutMs:X},X)}catch(V){if($.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J);throw $.publish($.buildEvent("run.failed",{reason:"error",error:V instanceof Error?V.message:String(V)},J)),V}if(H){let V=await i0($,J),A=jT(H);if($.publish($.buildEvent(WT(H.finishReason),{reason:H.finishReason,...A?{error:A}:{},result:H,...V?{snapshot:V}:{}},J)),$.suppressNextTerminalEventBySession.get(J)==="run.start.reply")$.suppressNextTerminalEventBySession.delete(J)}else $.suppressNextTerminalEventBySession.delete(J);let Y=await i0($,J);return u(f,H||Y?{...H?{result:H}:{},...Y?{snapshot:Y}:{}}:void 0)}async function uV($,f){let J=w0(f),Q=typeof f.payload?.reason==="string"?f.payload.reason:"Run was aborted before pending approval or capability request was resolved.";aQ($,(Z)=>Z.sessionId===J,Q);try{await $.sessionHost.abort(J,f.payload?.reason)}catch(Z){g("warn","run.abort_failed",{command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:J,error:Z})}finally{K1($,(Z)=>Z.sessionId===J,Q)}return u(f,{applied:!0})}async function cV($,f){let J=F8(f.payload?.payload);if(!J)return m(f,"invalid_hook_payload","session.hook requires a valid hook event payload");return await $.sessionHost.dispatchHookEvent(J),u(f,{applied:!0})}async function dV($,f){switch(f.type){case"chunk":return;case"agent_event":await VT($,f);return;case"hook":if(f.payload.hookEventName==="tool_call")$.publish($.buildEvent("tool.started",{toolName:f.payload.toolName},f.payload.sessionId));else if(f.payload.hookEventName==="tool_result")$.publish($.buildEvent("tool.finished",{toolName:f.payload.toolName},f.payload.sessionId));return;case"team_progress":{let J={type:"team_progress_projection",version:1,sessionId:f.payload.sessionId,summary:f.payload.summary,lastEvent:f.payload.lifecycle};$.publish($.buildEvent("team.progress",J,f.payload.sessionId));return}case"pending_prompts":$.publish($.buildEvent("session.pending_prompts",{sessionId:f.payload.sessionId,prompts:f.payload.prompts},f.payload.sessionId));return;case"pending_prompt_submitted":{let J={id:f.payload.id,prompt:f.payload.prompt,delivery:f.payload.delivery,attachmentCount:f.payload.attachmentCount};$.publish($.buildEvent("session.pending_prompt_submitted",{sessionId:f.payload.sessionId,prompt:J},f.payload.sessionId));return}case"session_snapshot":$.publish($.buildEvent("session.updated",{sessionId:f.payload.sessionId,snapshot:f.payload.snapshot},f.payload.sessionId));return;case"status":{let[J,Q]=await Promise.all([r0($,f.payload.sessionId),i0($,f.payload.sessionId)]);if(J)$.publish($.buildEvent("session.updated",{session:J,...Q?{snapshot:Q}:{}},f.payload.sessionId));return}case"ended":await AT($,f);return;default:return}}async function VT($,f){let{sessionId:J,event:Q}=f.payload;if(Q.type==="iteration_start"){$.publish($.buildEvent("iteration.started",{iteration:Q.iteration},J));return}if(Q.type==="iteration_end"){$.publish($.buildEvent("iteration.finished",{iteration:Q.iteration,hadToolCalls:Q.hadToolCalls,toolCallCount:Q.toolCallCount},J));return}if(Q.type==="content_start"){if(Q.contentType==="text"&&typeof Q.text==="string"&&Q.text.length>0){$.publish($.buildEvent("assistant.delta",{text:Q.text},J));return}if(Q.contentType==="reasoning"){if(Q.redacted&&!Q.reasoning){$.publish($.buildEvent("reasoning.delta",{text:"",redacted:!0},J));return}if(typeof Q.reasoning==="string"&&Q.reasoning.length>0)$.publish($.buildEvent("reasoning.delta",{text:Q.reasoning,redacted:Q.redacted===!0},J));return}if(Q.contentType==="tool"){$.publish($.buildEvent("tool.started",{toolCallId:Q.toolCallId,toolName:Q.toolName,input:Q.input},J));return}}if(Q.type==="content_end"){switch(Q.contentType){case"text":$.publish($.buildEvent("assistant.finished",{text:Q.text},J));break;case"reasoning":$.publish($.buildEvent("reasoning.finished",{reasoning:Q.reasoning},J));break;case"tool":$.publish($.buildEvent("tool.finished",{toolCallId:Q.toolCallId,toolName:Q.toolName,output:Q.output,error:Q.error},J));break}return}if(Q.type==="usage"){let Z;try{Z=await $.sessionHost.getAccumulatedUsage?.(J)}catch{Z=void 0}$.publish($.buildEvent("usage.updated",{sessionId:J,delta:{inputTokens:Q.inputTokens,outputTokens:Q.outputTokens,cacheReadTokens:Q.cacheReadTokens??0,cacheWriteTokens:Q.cacheWriteTokens??0,totalCost:Q.cost??0},totals:{inputTokens:Q.totalInputTokens,outputTokens:Q.totalOutputTokens,cacheReadTokens:Q.totalCacheReadTokens??0,cacheWriteTokens:Q.totalCacheWriteTokens??0,totalCost:Q.totalCost??0},usage:Z?.usage,aggregateUsage:Z?.aggregateUsage,agent:{kind:f.payload.teamRole==="teammate"?"teammate":Q.parentAgentId?"subagent":"lead",agentId:Q.agentId,conversationId:Q.conversationId,parentAgentId:Q.parentAgentId,teamAgentId:f.payload.teamAgentId,teamRole:f.payload.teamRole}},J));return}if(Q.type==="done")$.publish($.buildEvent("agent.done",{reason:Q.reason,text:Q.text,iterations:Q.iterations,usage:Q.usage},J))}async function AT($,f){let J=$.suppressNextTerminalEventBySession.get(f.payload.sessionId),Q=J===f.payload.reason||J==="run.start.reply";if(Q)$.suppressNextTerminalEventBySession.delete(f.payload.sessionId);let[Z,W]=await Promise.all([r0($,f.payload.sessionId),i0($,f.payload.sessionId)]);if(f.payload.reason==="completed"){let j=await wV(Z);$.publish($.buildEvent("ui.notify",j,f.payload.sessionId))}if(Q)return;$.publish($.buildEvent(f.payload.reason==="aborted"?"run.aborted":f.payload.reason==="error"||f.payload.reason==="failed"?"run.failed":"run.completed",{reason:f.payload.reason,...W?{snapshot:W}:{}},f.payload.sessionId))}import{createSessionId as aV,parseRuntimeConfigExtensions as tV}from"@cline/shared";var iV={};y(iV,{SessionVersioningService:()=>F1,SessionVersioningError:()=>S0});var rV={};y(rV,{trimMessagesToCheckpoint:()=>pV,trimMessagesBeforeCheckpoint:()=>oQ,readSessionCheckpointHistory:()=>b6,createRestoredCheckpointMetadata:()=>sQ,createCheckpointRestorePlan:()=>eQ,applyCheckpointToWorktree:()=>$Z});import{execFile as BT}from"node:child_process";import{promisify as GT}from"node:util";var z8=GT(BT);function b6($){let f=$?.metadata?.checkpoint&&typeof $.metadata.checkpoint==="object"&&!Array.isArray($.metadata.checkpoint)?$.metadata.checkpoint:void 0;return(Array.isArray(f?.history)?f.history:[]).filter((Q)=>!!Q&&typeof Q==="object"&&!Array.isArray(Q)).flatMap((Q)=>{let Z=String(Q.ref??"").trim(),W=Number(Q.createdAt??0),j=Number(Q.runCount??0);if(Z.length===0||!Number.isFinite(W)||!Number.isInteger(j)||j<1)return[];let X=Q.kind==="stash"||Q.kind==="commit"?Q.kind:void 0;return[{ref:Z,createdAt:W,runCount:j,...X?{kind:X}:{}}]})}function sQ($,f){let J=b6($).filter((Z)=>Z.runCount<=f),Q=J.at(-1);return Q?{latest:Q,history:J}:void 0}function KT($,f){return $.reduce((J,Q)=>{if(Q.runCount>f)return J;if(!J||Q.runCount>J.runCount)return Q;return J},void 0)}function lV($,f){let J=0;for(let Q=0;Q<$.length;Q+=1){let Z=$[Q];if(Z?.role!=="user")continue;if(("metadata"in Z&&Z.metadata&&typeof Z.metadata==="object"?Z.metadata:void 0)?.kind==="recovery_notice")continue;if(J+=1,J===f)return Q}throw Error(`Could not find user message for checkpoint run ${f}`)}function pV($,f){let J=lV($,f);return $.slice(0,J+1)}function oQ($,f){let J=lV($,f);return $.slice(0,J)}function eQ($){let f=$.checkpointRunCount;if(!Number.isInteger(f)||f<1)throw Error("checkpointRunCount must be a positive integer");let J=KT(b6($.session),f);if(!J)throw Error(`No checkpoint found at or before run ${f} in session ${$.session.sessionId}`);let Q=($.cwd?.trim()||$.session.cwd||$.session.workspaceRoot).trim();if(!Q)throw Error("cwd or workspaceRoot is required to restore a checkpoint");return{checkpoint:J,cwd:Q,...$.restoreMessages!==!1?{messages:pV($.messages??[],f)}:{}}}async function $Z($,f){if((await z8("git",["-C",$,"rev-parse","--is-inside-work-tree"],{windowsHide:!0})).stdout.trim()!=="true")throw Error(`${$} is not a git repository`);if(await z8("git",["-C",$,"cat-file","-e",`${f.ref}^{commit}`],{windowsHide:!0}),await z8("git",["-C",$,"reset","--hard"],{windowsHide:!0}),await z8("git",["-C",$,"clean","-fd"],{windowsHide:!0}),f.kind==="commit"){await z8("git",["-C",$,"reset","--hard",f.ref],{windowsHide:!0});return}await z8("git",["-C",$,"stash","apply",f.ref],{windowsHide:!0})}class S0 extends Error{code;constructor($,f){super(f);this.code=$;this.name="SessionVersioningError"}}function FT($){let f=$.sessionId.trim();if(!f)throw new S0("invalid_restore","sessionId is required");if(!$.restoreMessages&&!$.restoreWorkspace)throw new S0("invalid_restore","restore.messages or restore.workspace must be true");if($.restoreMessages&&$.requiresStart)throw new S0("invalid_restore","start is required when restore.messages is true");if(!Number.isInteger($.checkpointRunCount)||$.checkpointRunCount<1)throw new S0("invalid_restore","checkpointRunCount must be a positive integer");return f}class F1{async restoreCheckpoint($){let f=$.restore?.messages!==!1,J=$.restore?.workspace!==!1,Q=FT({sessionId:$.sessionId,restoreMessages:f,restoreWorkspace:J,requiresStart:$.start===void 0,checkpointRunCount:$.checkpointRunCount}),Z=await $.getSession(Q);if(!Z)throw new S0("session_not_found",`Session ${Q} not found`);let W=f?await $.readMessages(Q):void 0;if(f&&W?.length===0)throw new S0("session_messages_not_found",`No messages found for session ${Q}`);let j=eQ({session:Z,messages:W,checkpointRunCount:$.checkpointRunCount,cwd:$.cwd,restoreMessages:f});if(J)await($.applyWorkspaceCheckpoint??$Z)(j.cwd,j.checkpoint);let X=X$({session:Z,messages:W});if(!f)return{checkpoint:j.checkpoint,sourceSnapshot:X};let H=sQ(Z,$.checkpointRunCount),Y=$.restore?.omitCheckpointMessageFromSession?oQ(W??[],$.checkpointRunCount):j.messages??[],V={sourceSession:Z,sourceMessages:W,sourceSnapshot:X,plan:j,restoredCheckpointMetadata:H,initialMessages:Y,restoreMessages:f,restoreWorkspace:J,checkpointRunCount:$.checkpointRunCount};if(!$.start||!$.startSession)throw new S0("invalid_restore","start is required when restore.messages is true");let A=$.buildStartInput?await $.buildStartInput(V,$.start):$.start,B=await $.startSession(A),G=$.getStartedSessionId?.(B);if(G)await($.retainCheckpointRefs??kj)(j.cwd,G,H?.history??[]);let K=G&&$.readRestoredSession?await $.readRestoredSession(G):void 0;return{sessionId:G,startResult:B,messages:j.messages,checkpoint:j.checkpoint,sourceSnapshot:X,...K?{restoredSnapshot:X$({session:K,messages:Y})}:{}}}}import{HUB_CHECKPOINT_CAPABILITY as ug,HUB_COMPACTION_CAPABILITY as cg,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as dg,HUB_HOOK_CAPABILITY_PREFIX as lg,HUB_MISTAKE_LIMIT_CAPABILITY as pg,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as rg,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as ig,isHubToolExecutorName as PT}from"@cline/shared";import{HUB_CHECKPOINT_CAPABILITY as og,HUB_COMPACTION_CAPABILITY as eg,HUB_CUSTOM_TOOL_CAPABILITY_PREFIX as $v,HUB_HOOK_CAPABILITY_PREFIX as fv,HUB_MISTAKE_LIMIT_CAPABILITY as Jv,HUB_TOOL_EXECUTOR_CAPABILITY_PREFIX as Qv,HUB_USER_INSTRUCTIONS_SNAPSHOT_CAPABILITY as Zv}from"@cline/shared";var UT=["beforeRun","afterRun","beforeModel","afterModel","beforeTool","afterTool","onEvent"];function j2($){return $&&typeof $==="object"&&!Array.isArray($)?JSON.parse(JSON.stringify($)):void 0}function DT($,f){let J=typeof $.name==="string"?$.name.trim():"",Q=typeof $.description==="string"?$.description:"",Z=typeof $.capabilityName==="string"?$.capabilityName.trim():"",W=j2($.inputSchema);if(!J||!Q||!W||!Z||f.has(Z))return;return f.add(Z),{kind:"tool",capabilityName:Z,name:J,description:Q,inputSchema:W,...j2($.lifecycle)?{lifecycle:j2($.lifecycle)}:{}}}function JZ($){if(!Array.isArray($))return[];let f=[],J=new Set;for(let Q of $){if(!Q||typeof Q!=="object"||Array.isArray(Q))continue;let Z=Q,W=Z.kind,j=typeof Z.capabilityName==="string"?Z.capabilityName.trim():"";if(!j||J.has(j))continue;if(W==="tool"){let X=DT(Z,J);if(X)f.push(X);continue}if(W==="toolExecutor"){let X=Z.executor;if(!PT(X))continue;J.add(j),f.push({kind:"toolExecutor",capabilityName:j,executor:X});continue}if(W==="hook"){let X=typeof Z.name==="string"?Z.name.trim():"";if(!X)continue;J.add(j),f.push({kind:"hook",capabilityName:j,name:X});continue}if(W==="compaction"){J.add(j),f.push({kind:"compaction",capabilityName:j,...j2(Z.config)?{config:j2(Z.config)}:{}});continue}if(W==="checkpoint"){J.add(j),f.push({kind:"checkpoint",capabilityName:j,...j2(Z.config)?{config:j2(Z.config)}:{}});continue}if(W==="mistakeLimit"){J.add(j),f.push({kind:"mistakeLimit",capabilityName:j});continue}if(W==="userInstructionService")J.add(j),f.push({kind:"userInstructionService",capabilityName:j})}return f}function nV($){return{agentId:$.agentId,conversationId:$.conversationId,iteration:$.iteration,metadata:$.metadata}}function RT($){return Object.hasOwn($,"update")?$.update:$}function k6($){return $.trim().replace(/^\/+/,"").toLowerCase()}function LT($){let f=($??[]).map(k6).filter(Boolean);return f.length>0?new Set(f):void 0}function OT($,f,J){if(!J)return!0;let Q=k6($),Z=k6(f),W=Q.includes(":")?Q.split(":").at(-1)??Q:Q,j=Z.includes(":")?Z.split(":").at(-1)??Z:Z;return J.has(Q)||J.has(Z)||J.has(W)||J.has(j)}function fZ($,f){let J=LT(f);return $.records.skill.map((Q)=>({id:Q.id,name:Q.item.name,description:"description"in Q.item&&typeof Q.item.description==="string"?Q.item.description:void 0,disabled:Q.item.disabled===!0,skill:Q.item})).filter((Q)=>OT(Q.id,Q.name,J))}function zT($,f){let J=async(Q,Z)=>{let W=k6(Q),X=fZ($,f).filter((B)=>B.id===W||k6(B.name)===W||B.id.endsWith(`:${W}`)).filter((B)=>!B.disabled);if(X.length!==1)return X.length>1?`Skill "${Q}" is ambiguous. Use one of: ${X.map((B)=>B.id).join(", ")}`:`Skill "${Q}" not found.`;let H=X[0].skill,Y=Z?.trim(),V=Y?`
|
|
562
|
+
<command-args>${Y}</command-args>`:"",A=H.description?.trim()?`Description: ${H.description.trim()}
|
|
563
|
+
|
|
564
|
+
`:"";return`<command-name>${H.name}</command-name>${V}
|
|
565
|
+
<command-instructions>
|
|
566
|
+
${A}${H.instructions}
|
|
567
|
+
</command-instructions>`};return Object.defineProperty(J,"configuredSkills",{get:()=>fZ($,f).map(({skill:Q,...Z})=>Z),enumerable:!0}),J}function _T($,f,J,Q){let Z={records:{skill:[],rule:[],workflow:[]},runtimeCommands:[]},W=async()=>{let j=await Q($,J.capabilityName,{},f);if(j?.snapshot)Z=j.snapshot};return{start:W,stop:()=>{},refreshType:async()=>{await W()},listRecords:(j)=>[...Z.records[j]],listRuntimeCommands:()=>[...Z.runtimeCommands],resolveRuntimeSlashCommand:(j)=>{if(!j.startsWith("/")||j.length<2)return j;let H=j.match(/^\/(\S+)/)?.[1];if(!H)return j;let Y=Z.runtimeCommands.find((V)=>V.name===H);return Y?`${Y.instructions}${j.slice(H.length+1)}`:j},hasConfiguredSkills:(j)=>fZ(Z,j).some((X)=>!X.disabled),createExtension:(j)=>({name:"cline-hub-user-instructions",manifest:{capabilities:[j.includeRules?"rules":void 0,j.registerSkillsTool?"tools":void 0,j.includeSkills||j.includeWorkflows?"commands":void 0].filter((X)=>Boolean(X))},setup(X){if(j.includeRules)X.registerRule({id:"cline-hub-user-instructions:rules",source:"hub-user-instructions",content:()=>o2(Z.records.rule.map((H)=>H.item).filter((H)=>H.disabled!==!0))});if(j.registerSkillsTool)X.registerTool(R1(zT(Z,j.allowedSkillNames)));for(let H of Z.runtimeCommands.filter((Y)=>Y.kind==="skill"&&j.includeSkills||Y.kind==="workflow"&&j.includeWorkflows))X.registerCommand({name:H.name,description:H.description,handler:(Y)=>{let V=Y.trim();return V?`${H.instructions}
|
|
568
|
+
|
|
569
|
+
${V}`:H.instructions}})}})}}function NT($,f,J,Q){let Z=J.map((W)=>[W.executor,async(...j)=>{let X=j.at(-1),H=j.slice(0,-1);return(await Q($,W.capabilityName,{executor:W.executor,args:H,context:nV(X)},f))?.result}]);return Z.length>0?Object.fromEntries(Z):void 0}function TT($,f,J,Q){if(J.length===0)return;return J.map((Z)=>({name:Z.name,description:Z.description,inputSchema:Z.inputSchema,lifecycle:Z.lifecycle,async execute(W,j){return(await Q($,Z.capabilityName,{toolName:Z.name,input:W,context:nV(j)},f,j.emitUpdate?(H)=>{j.emitUpdate?.(RT(H))}:void 0))?.result}}))}function MT($,f,J,Q){let Z=new Map(J.map((j)=>[j.name,j])),W={};for(let j of UT){let X=Z.get(j);if(!X)continue;W[j]=async(H)=>{return(await Q($,X.capabilityName,{context:H},f))?.control}}return Object.keys(W).length>0?W:void 0}function QZ($){let f=$.contributions.filter((H)=>H.kind==="toolExecutor"),J=$.contributions.filter((H)=>H.kind==="tool"),Q=$.contributions.filter((H)=>H.kind==="hook"),Z=$.contributions.find((H)=>H.kind==="compaction"),W=$.contributions.find((H)=>H.kind==="checkpoint"),j=$.contributions.find((H)=>H.kind==="mistakeLimit"),X=$.contributions.find((H)=>H.kind==="userInstructionService");return{hasClientContributions:$.contributions.length>0,toolExecutors:NT($.sessionId,$.targetClientId,f,$.requestCapability),localRuntime:{...Q.length>0?{hooks:MT($.sessionId,$.targetClientId,Q,$.requestCapability)}:{},...J.length>0?{extraTools:TT($.sessionId,$.targetClientId,J,$.requestCapability)}:{},...Z?{compaction:{...$.sessionConfig?.compaction??{},...Z.config,compact:async(H)=>{return(await $.requestCapability($.sessionId,Z.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...W?{checkpoint:{...$.sessionConfig?.checkpoint??{},...W.config,createCheckpoint:async(H)=>{return(await $.requestCapability($.sessionId,W.capabilityName,{context:H},$.targetClientId))?.result}}}:{},...j?{onConsecutiveMistakeLimitReached:async(H)=>{return(await $.requestCapability($.sessionId,j.capabilityName,{context:H},$.targetClientId))?.result}}:{},...X?{userInstructionService:_T($.sessionId,$.targetClientId,X,$.requestCapability)}:{}}}}var sV="hubCapabilityOwnerClientId";function oV($,f){$[sV]=f}function qT($){let f=$?.[sV];return typeof f==="string"&&f.trim()?f.trim():void 0}async function eV($,f,J){let Q=performance.now(),Z={command:f.command,requestId:f.requestId,clientId:f.clientId,sessionId:f.sessionId};g("info","session.create.begin",Z);let W=f.payload&&typeof f.payload==="object"?f.payload:{},j=W.metadata&&typeof W.metadata==="object"?JSON.parse(JSON.stringify(W.metadata)):{},X=W.sessionConfig&&typeof W.sessionConfig==="object"?JSON.parse(JSON.stringify(W.sessionConfig)):void 0,H=W.runtimeOptions&&typeof W.runtimeOptions==="object"?W.runtimeOptions:{};if(typeof X?.mode==="string")j.mode=X.mode;else if(typeof H.mode==="string")j.mode=H.mode;if(typeof X?.systemPrompt==="string")j.systemPrompt=X.systemPrompt;else if(typeof H.systemPrompt==="string")j.systemPrompt=H.systemPrompt;if(X?.checkpoint?.enabled===!0)j.checkpointEnabled=!0;else if(H.checkpointEnabled===!0)j.checkpointEnabled=!0;let Y=W.modelSelection&&typeof W.modelSelection==="object"?W.modelSelection:{},V=typeof W.workspaceRoot==="string"&&W.workspaceRoot.trim()?W.workspaceRoot.trim():typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():"";if(!V)return g("warn","session.create.invalid",{...Z,reason:"missing_workspace_root"}),m(f,"invalid_session_create","session.create requires workspaceRoot or cwd");let A=f.clientId?.trim()||"hub-client",B=JZ(H.clientContributions);if(g("info","session.create.contributions_parsed",{...Z,clientId:A,workspaceRoot:V,cwd:typeof W.cwd==="string"?W.cwd:void 0,contributionCount:B.length}),B.length>0)oV(j,A);let K=(typeof X?.sessionId==="string"?X.sessionId.trim():"")||aV(),D=tV(H.configExtensions);g("info","session.create.runtime_build.begin",{...Z,sessionId:K,configExtensionCount:D?.length??0});let F=QZ({sessionId:K,targetClientId:A,contributions:B,sessionConfig:X,requestCapability:$.requestCapability});g("info","session.create.start_session.begin",{...Z,sessionId:K,provider:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),model:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub")});let P=await $.sessionHost.startSession({source:typeof j.source==="string"?j.source:void 0,interactive:j.interactive!==!1,sessionMetadata:Object.keys(j).length>0?j:void 0,initialMessages:Array.isArray(W.initialMessages)?W.initialMessages:void 0,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:D,...F.localRuntime},capabilities:{toolExecutors:F.toolExecutors,requestToolApproval:J},config:{...X??{},sessionId:K,providerId:X?.providerId??(typeof Y.provider==="string"?Y.provider:typeof j.provider==="string"?j.provider:"hub"),modelId:X?.modelId??(typeof Y.model==="string"?Y.model:typeof j.model==="string"?j.model:"hub"),apiKey:X?.apiKey??(typeof Y.apiKey==="string"?Y.apiKey:void 0),cwd:X?.cwd??(typeof W.cwd==="string"&&W.cwd.trim()?W.cwd.trim():V),workspaceRoot:X?.workspaceRoot??V,systemPrompt:X?.systemPrompt??(typeof H.systemPrompt==="string"?H.systemPrompt:""),mode:X?.mode??(H.mode==="plan"||H.mode==="yolo"?H.mode:"act"),maxIterations:X?.maxIterations??(typeof H.maxIterations==="number"?H.maxIterations:void 0),enableTools:X?.enableTools??H.enableTools!==!1,enableSpawnAgent:X?.enableSpawnAgent??H.enableSpawn!==!1,enableAgentTeams:X?.enableAgentTeams??H.enableTeams!==!1,checkpoint:X?.checkpoint??(H.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:X?.teamName??(typeof j.teamName==="string"?j.teamName:void 0)},toolPolicies:W.toolPolicies&&typeof W.toolPolicies==="object"&&!Array.isArray(W.toolPolicies)?JSON.parse(JSON.stringify(W.toolPolicies)):H.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0});g("info","session.create.start_session.end",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q),hasImmediateResult:!!P.result}),B5($,P.sessionId,A,"creator",{interactive:j.interactive!==!1}),g("info","session.create.read_records.begin",{...Z,sessionId:P.sessionId});let[U,z]=await Promise.all([r0($,P.sessionId),i0($,P.sessionId)]);if(g("info","session.create.read_records.end",{...Z,sessionId:P.sessionId,hasSession:!!U,hasSnapshot:!!z,elapsedMs:Math.round(performance.now()-Q)}),U)$.publish($.buildEvent("session.created",{session:U,...z?{snapshot:z}:{}},P.sessionId));return g("info","session.create.reply",{...Z,sessionId:P.sessionId,elapsedMs:Math.round(performance.now()-Q)}),u(f,{session:U,...z?{snapshot:z}:{}})}async function $A($,f,J){let Q=f.payload&&typeof f.payload==="object"?f.payload:{},Z=typeof Q.sessionId==="string"?Q.sessionId.trim():f.sessionId?.trim()||"",W=Q.checkpointRunCount;if(!Z)return m(f,"invalid_restore","session.restore requires a session id");let j=Q.restore&&typeof Q.restore==="object"?Q.restore:{},X=j.messages!==!1;if(typeof W!=="number")return m(f,"invalid_restore","checkpointRunCount must be a positive integer");try{let H=Q.sessionConfig&&typeof Q.sessionConfig==="object"?JSON.parse(JSON.stringify(Q.sessionConfig)):void 0;if(X&&!H)return m(f,"invalid_restore","sessionConfig is required when restore.messages is true");let Y=Q.runtimeOptions&&typeof Q.runtimeOptions==="object"?Q.runtimeOptions:{},V=Q.metadata&&typeof Q.metadata==="object"?JSON.parse(JSON.stringify(Q.metadata)):{};if(typeof H?.mode==="string")V.mode=H.mode;else if(typeof Y.mode==="string")V.mode=Y.mode;if(typeof H?.systemPrompt==="string")V.systemPrompt=H.systemPrompt;else if(typeof Y.systemPrompt==="string")V.systemPrompt=Y.systemPrompt;if(H?.checkpoint?.enabled===!0)V.checkpointEnabled=!0;else if(Y.checkpointEnabled===!0)V.checkpointEnabled=!0;let A=Q.modelSelection&&typeof Q.modelSelection==="object"?Q.modelSelection:{},B=f.clientId?.trim()||"hub-client",G=JZ(Y.clientContributions);if(G.length>0)oV(V,B);let D=(typeof H?.sessionId==="string"?H.sessionId.trim():"")||aV(),F=tV(Y.configExtensions),P=QZ({sessionId:D,targetClientId:B,contributions:G,sessionConfig:H,requestCapability:$.requestCapability}),z=await new F1().restoreCheckpoint({sessionId:Z,checkpointRunCount:W,restore:{messages:j.messages,workspace:j.workspace,omitCheckpointMessageFromSession:j.omitCheckpointMessageFromSession===!0},start:H,cwd:typeof H?.cwd==="string"&&H.cwd.trim()||typeof H?.workspaceRoot==="string"&&H.workspaceRoot.trim()||void 0,getSession:(N)=>$.sessionHost.getSession(N),readMessages:(N)=>$.sessionHost.readSessionMessages(N),buildStartInput:(N)=>{if(N.restoredCheckpointMetadata)V.checkpoint=N.restoredCheckpointMetadata;let w=typeof Q.workspaceRoot==="string"&&Q.workspaceRoot.trim()?Q.workspaceRoot.trim():typeof Q.cwd==="string"&&Q.cwd.trim()?Q.cwd.trim():N.sourceSession.workspaceRoot||N.sourceSession.cwd;return{source:typeof V.source==="string"?V.source:void 0,interactive:V.interactive!==!1,sessionMetadata:{...V,restoredFromSessionId:Z,restoredCheckpointRunCount:W},initialMessages:N.initialMessages,localRuntime:{modelCatalogDefaults:{loadLatestOnInit:!0,loadPrivateOnAuth:!0},configExtensions:F,...P.localRuntime},capabilities:{toolExecutors:P.toolExecutors,requestToolApproval:J},config:{...H??{},sessionId:D,providerId:H?.providerId??(typeof A.provider==="string"?A.provider:N.sourceSession.provider),modelId:H?.modelId??(typeof A.model==="string"?A.model:N.sourceSession.model),apiKey:H?.apiKey??(typeof A.apiKey==="string"?A.apiKey:""),cwd:H?.cwd??N.plan.cwd,workspaceRoot:H?.workspaceRoot??w,systemPrompt:H?.systemPrompt??(typeof Y.systemPrompt==="string"?Y.systemPrompt:""),mode:H?.mode??(Y.mode==="plan"||Y.mode==="yolo"?Y.mode:"act"),maxIterations:H?.maxIterations??(typeof Y.maxIterations==="number"?Y.maxIterations:void 0),enableTools:H?.enableTools??Y.enableTools!==!1,enableSpawnAgent:H?.enableSpawnAgent??Y.enableSpawn!==!1,enableAgentTeams:H?.enableAgentTeams??Y.enableTeams!==!1,checkpoint:H?.checkpoint??(Y.checkpointEnabled===!0?{enabled:!0}:void 0),teamName:H?.teamName??(typeof V.teamName==="string"?V.teamName:void 0)},toolPolicies:Q.toolPolicies&&typeof Q.toolPolicies==="object"&&!Array.isArray(Q.toolPolicies)?JSON.parse(JSON.stringify(Q.toolPolicies)):Y.autoApproveTools===!0?{"*":{autoApprove:!0}}:void 0}},startSession:(N)=>$.sessionHost.startSession(N),getStartedSessionId:(N)=>N.sessionId,readRestoredSession:(N)=>$.sessionHost.getSession(N)});if(!X)return u(f,{checkpoint:z.checkpoint});let _=z.startResult;if(!_)return m(f,"restore_failed","Checkpoint restore did not start a session");B5($,_.sessionId,B,"creator",{interactive:V.interactive!==!1});let[R,L]=await Promise.all([r0($,_.sessionId),i0($,_.sessionId)]);if(R)$.publish($.buildEvent("session.created",{session:R,...L?{snapshot:L}:{}},_.sessionId));return u(f,{session:R,...L?{snapshot:L}:{},messages:z.messages??[],checkpoint:z.checkpoint})}catch(H){if(H instanceof S0)return m(f,H.code,H.code==="session_not_found"?`Unknown session: ${Z}`:H.message);return m(f,"restore_failed",H instanceof Error?H.message:String(H))}}async function fA($,f){let J=w0(f);if(!J)return m(f,"invalid_session_attach","session.attach requires a session id");B5($,J,f.clientId?.trim()||"hub-client","participant");let Q=await r0($,J);if(Q)$.publish($.buildEvent("session.attached",{session:Q},J));return Q?u(f,{session:Q}):m(f,"session_not_found",`Unknown session: ${J}`)}async function JA($,f){let J=w0(f);if(!J)return m(f,"invalid_session_detach","session.detach requires a session id");let Q=f.clientId?.trim()||"hub-client",[Z]=await Promise.all([r0($,J)]),W=qT(Z?.metadata)??Q,j=$.sessionState.get(J);if(j){if(j.participants.delete(Q),j.createdByClientId===Q)j.createdByClientId=W;if(j.participants.size===0)$.sessionState.delete(J)}K1($,(Y)=>Y.sessionId===J&&Y.targetClientId===Q,`Capability owner client ${Q} detached before request was resolved.`);let[X,H]=await Promise.all([r0($,J),i0($,J)]);return $.publish($.buildEvent("session.detached",X?{session:X,...H?{snapshot:H}:{},clientId:Q}:{clientId:Q},J)),u(f)}async function QA($,f){let J=w0(f),Q=f.payload?.includeSnapshot===!0,[Z,W]=await Promise.all([r0($,J),Q?i0($,J):Promise.resolve(void 0)]);return Z?u(f,{session:Z,...W?{snapshot:W}:{}}):m(f,"session_not_found",`Unknown session: ${J}`)}async function ZA($,f){let J=w0(f);if(!J)return m(f,"invalid_session_id","session.messages requires a session id");if(!await r0($,J))return m(f,"session_not_found",`Unknown session: ${J}`);let Z=await $.sessionHost.readSessionMessages(J);return u(f,{sessionId:J,messages:Z})}async function WA($,f){let J=typeof f.payload?.limit==="number"?f.payload.limit:200,Z=(await $.sessionHost.listSessions(J)).map((W)=>V5(W,$.sessionState.get(W.sessionId)));return u(f,{sessions:Z})}async function jA($,f){let J=w0(f),Q=A5(f.payload?.metadata),Z=await $.sessionHost.updateSession(J,{metadata:Q}),[W,j]=await Promise.all([r0($,J),i0($,J)]);if(W)$.publish($.buildEvent("session.updated",{session:W,...j?{snapshot:j}:{}},J));return{version:f.version,requestId:f.requestId,ok:Z.updated,payload:{updated:Z.updated,session:W,...j?{snapshot:j}:{}}}}async function XA($,f){let J=w0(f),Q=await $.sessionHost.deleteSession(J);return $.sessionState.delete(J),u(f,{deleted:Q})}async function HA($,f){let J=w0(f),Q=$.sessionHost.pendingPrompts;if(!Q)return m(f,"pending_prompts_unavailable","Pending prompt service is not available.");let Z=await Q.list({sessionId:J});return u(f,{sessionId:J,prompts:Z})}async function YA($,f){let J=w0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=typeof f.payload?.prompt==="string"?f.payload.prompt:void 0,W=f.payload?.delivery==="queue"||f.payload?.delivery==="steer"?f.payload.delivery:void 0,j=$.sessionHost.pendingPrompts;if(!j)return m(f,"pending_prompts_unavailable","Pending prompt service is not available.");let X=await j.update({sessionId:J,promptId:Q,prompt:Z,delivery:W});return u(f,X)}async function VA($,f){let J=w0(f),Q=typeof f.payload?.promptId==="string"?f.payload.promptId.trim():"",Z=$.sessionHost.pendingPrompts;if(!Z)return m(f,"pending_prompts_unavailable","Pending prompt service is not available.");let W=await Z.delete({sessionId:J,promptId:Q});return u(f,W)}function AA($){switch($){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 wT=new Set(["skills","workflows","rules","tools","mcp"]);function ZZ($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function I6($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="string")throw Error(`settings payload '${f}' must be a string.`);return J}function ST($,f){let J=$[f];if(J===void 0)return;if(typeof J!=="boolean")throw Error(`settings payload '${f}' must be a boolean.`);return J}function BA($){if($===void 0)return{};if(!ZZ($))throw Error("settings.list payload must be an object.");return{cwd:I6($,"cwd"),workspaceRoot:I6($,"workspaceRoot"),availabilityContext:ZZ($.availabilityContext)?$.availabilityContext:void 0}}function CT($){if(!ZZ($))throw Error("settings.toggle payload must be an object.");let{type:f}=$;if(typeof f!=="string"||!wT.has(f))throw Error("settings.toggle payload 'type' must be one of: skills, workflows, rules, tools, mcp.");return{...BA($),type:f,id:I6($,"id"),path:I6($,"path"),name:I6($,"name"),enabled:ST($,"enabled")}}class _8{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=yT("hub_");ctx;constructor($){this.options=$;if(this.sessionHost=$.sessionHost??new B$({sessionService:new A$(new Y$),fetch:$.fetch,telemetry:$.telemetry}),this.ctx={clients:this.clients,sessionState:this.sessionState,pendingApprovals:this.pendingApprovals,pendingCapabilityRequests:this.pendingCapabilityRequests,suppressNextTerminalEventBySession:this.suppressNextTerminalEventBySession,telemetry:$.telemetry,sessionHost:this.sessionHost,publish:(f)=>this.publish(f),buildEvent:W2,requestCapability:(f,J,Q,Z,W)=>hV(this.ctx,f,J,Q,Z,W)},this.schedules=new D8({...$.scheduleOptions,runtimeHandlers:$.runtimeHandlers,eventPublisher:(f,J)=>{let Q=f==="schedule.execution.completed"?"schedule.execution_completed":f==="schedule.execution.failed"?"schedule.execution_failed":void 0;if(!Q)return;this.publish(W2(Q,J&&typeof J==="object"?J:void 0))}}),this.scheduleCommands=new U8(this.schedules),this.settings=$.settingsService??new W1,$.cronOptions)this.cronService=new K6({runtimeHandlers:$.runtimeHandlers,...$.cronOptions});this.sessionHost.subscribe((f)=>{dV(this.ctx,f).catch((J)=>{tQ("session event handling failed",J),G5(this.options.telemetry,{component:"core",operation:"hub.session_event_project",error:J,severity:"error",handled:!0,context:{eventType:f.type,sessionId:f.payload.sessionId}})})})}getCronService(){return this.cronService}getHubId(){return this.hubId}async start(){if(await this.schedules.start(),this.cronService)try{await this.cronService.start()}catch($){console.error("[hub] cron service start failed",$)}}async stop(){for(let $ of this.pendingApprovals.keys())nQ(this.ctx,$,{approved:!1,reason:"Hub shutting down before approval was resolved."});if(K1(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($){console.error("[hub] cron service stop failed",$)}}async handleCommand($){try{let f=await this.dispatchCommand($);return this.captureFailedReply($,f),f}catch(f){throw G5(this.options.telemetry,{component:"core",operation:"hub.command",error:f,severity:"error",handled:!1,context:this.commandTelemetryContext($)}),f}}async dispatchCommand($){switch($.command){case"client.register":return IV(this.ctx,$);case"client.update":return xV(this.ctx,$);case"client.unregister":return mV(this.ctx,$,(f)=>{this.listeners.delete(f),this.detachClientFromSessions(f)});case"client.list":return gV(this.ctx,$);case"session.create":return await eV(this.ctx,$,(f)=>iQ(this.ctx,f));case"session.restore":return await $A(this.ctx,$,(f)=>iQ(this.ctx,f));case"session.attach":return await fA(this.ctx,$);case"session.detach":return await JA(this.ctx,$);case"session.get":return await QA(this.ctx,$);case"session.messages":return await ZA(this.ctx,$);case"session.list":return await WA(this.ctx,$);case"session.update":return await jA(this.ctx,$);case"session.pending_prompts":return await HA(this.ctx,$);case"session.update_pending_prompt":return await YA(this.ctx,$);case"session.remove_pending_prompt":return await VA(this.ctx,$);case"session.delete":return await XA(this.ctx,$);case"session.hook":return await cV(this.ctx,$);case"run.start":case"session.send_input":return await vV(this.ctx,$);case"run.abort":return await uV(this.ctx,$);case"capability.request":return await bV(this.ctx,$);case"approval.respond":return await SV(this.ctx,$);case"capability.respond":return kV(this.ctx,$);case"capability.progress":return EV(this.ctx,$);case"ui.notify":return this.publish(W2("ui.notify",$.payload??{})),u($);case"ui.show_window":return this.publish(W2("ui.show_window",$.payload??{})),u($);case"settings.list":return await this.handleSettingsList($);case"settings.toggle":return await this.handleSettingsToggle($);case"settings.get":case"settings.patch":return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"not_implemented",message:`${$.command} is not implemented yet.`}};default:{let f=await this.scheduleCommands.handleCommand($);if(f.ok){let J=AA($.command);if(J)this.publish(W2(J,f.payload))}return f}}}captureFailedReply($,f){if(f.ok||!f.error||!hT(f.error.code))return;G5(this.options.telemetry,{component:"core",operation:"hub.command_reply",error:Error(f.error.message),severity:f.error.code==="session_not_found"?"warn":"error",handled:!0,context:{...this.commandTelemetryContext($),errorCode:f.error.code}})}commandTelemetryContext($){return{command:$.command,requestId:$.requestId,clientId:$.clientId,sessionId:typeof $.payload?.sessionId==="string"?$.payload.sessionId:$.sessionId}}async handleSettingsList($){try{let f=await this.settings.list(BA($.payload));return{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_list_failed",message:f instanceof Error?f.message:String(f)}}}}async handleSettingsToggle($){try{let f=await this.settings.toggle(CT($.payload));return this.publish(W2("settings.changed",{types:f.changedTypes,snapshot:f.snapshot})),{version:$.version,requestId:$.requestId,ok:!0,payload:{snapshot:f.snapshot,changedTypes:f.changedTypes}}}catch(f){return{version:$.version,requestId:$.requestId,ok:!1,error:{code:"settings_toggle_failed",message:f instanceof Error?f.message:String(f)}}}}subscribe($,f,J){let Q=this.listeners.get($)??new Set,Z={sessionId:J?.sessionId,listener:f};return Q.add(Z),this.listeners.set($,Q),()=>{let W=this.listeners.get($);if(!W)return;if(W.delete(Z),W.size===0)this.listeners.delete($)}}detachClientFromSessions($){for(let[f,J]of this.sessionState.entries())if(J.participants.delete($),J.participants.size===0)this.sessionState.delete(f);K1(this.ctx,(f)=>f.targetClientId===$,`Capability owner client ${$} disconnected before request was resolved.`)}publish($){for(let f of this.listeners.values())for(let J of f){if(J.sessionId&&J.sessionId!==$.sessionId)continue;try{J.listener($)}catch(Q){tQ(`listener threw while publishing ${$.event}`,Q),G5(this.options.telemetry,{component:"core",operation:"hub.publish",error:Q,severity:"warn",handled:!0,context:{event:$.event,sessionId:$.sessionId}})}}}}function hT($){return $==="session_not_found"||$==="session_messages_not_found"||$==="hub_command_timeout"||$.endsWith("_failed")}import{timingSafeEqual as IT}from"node:crypto";import xT from"node:http";import mT from"node:net";import{URL as FA}from"node:url";import{WebSocketServer as gT}from"ws";import{captureSdkError as GA,HUB_COMMAND_SLOW_LOG_MS as ET,resolveHubCommandTimeoutMs as bT,safeJsonParse as kT}from"@cline/shared";function WZ($){return{command:$.envelope.command,requestId:$.envelope.requestId,clientId:$.envelope.clientId,sessionId:$.envelope.sessionId}}function KA($,f,J){return{version:$.envelope.version,requestId:$.envelope.requestId,ok:!1,error:{code:f,message:J}}}class x6{transport;telemetry;constructor($,f){this.transport=$;this.telemetry=f}attach($){let f=new Map,J=new Set,Q=!1,Z=(H)=>{try{$.send(JSON.stringify(H))}catch(Y){console.error(`[hub] failed to send websocket frame: ${Y instanceof Error?Y.stack||Y.message:String(Y)}`)}},W=(H)=>{Z({kind:"event",envelope:H})},j=async(H)=>{try{let Y=JSON.parse(H.data);switch(Y.kind){case"command":{let V=performance.now(),A=!1,B=WZ(Y);g("info","command.start",B);let G=setTimeout(()=>{if(A)return;g("warn","command.slow",{...B,elapsedMs:Math.round(performance.now()-V)})},ET),K=this.transport.command(Y.envelope);K.then((_)=>{if(!A)return;g(_.ok?"warn":"error","command.late_end",{...B,elapsedMs:Math.round(performance.now()-V),ok:_.ok,errorCode:_.error?.code,errorMessage:_.error?.message})},(_)=>{if(!A)return;g("error","command.late_error",{...B,elapsedMs:Math.round(performance.now()-V),error:_})});let D=!1,F,P,U=bT(Y.envelope.command,Y.envelope.timeoutMs);try{P=U===null?await K:await Promise.race([K,new Promise((_)=>{F=setTimeout(()=>{D=!0,GA(this.telemetry,{component:"core",operation:"hub.command_timeout",error:Error(`Hub command ${Y.envelope.command} did not complete within ${U}ms.`),severity:"error",handled:!0,context:{...B,timeoutMs:U}}),_(KA(Y,"hub_command_timeout",`Hub command ${Y.envelope.command} did not complete within ${U}ms. Check hub-daemon.log for command.start/command.slow logs with requestId ${Y.envelope.requestId}.`))},U)})])}catch(_){if(clearTimeout(G),F)clearTimeout(F);throw _}if(A=D,clearTimeout(G),F)clearTimeout(F);let z=Math.round(performance.now()-V);if(D)g("error","command.timeout",{...B,durationMs:z,timeoutMs:U});else g(P.ok?"info":"warn","command.end",{...B,durationMs:z,ok:P.ok,errorCode:P.error?.code,errorMessage:P.error?.message});if(Y.envelope.command==="client.register"&&P.ok){let R=(Y.envelope.payload??{}).clientId?.trim()||Y.envelope.clientId?.trim();if(R)J.add(R)}else if(Y.envelope.command==="client.unregister"&&P.ok){let _=Y.envelope.clientId?.trim();if(_)J.delete(_)}Z({kind:"reply",envelope:P});break}case"stream.subscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;if(f.has(V))break;let A=await this.transport.subscribe(Y.clientId,W,{sessionId:Y.sessionId});f.set(V,A);break}case"stream.unsubscribe":{let V=`${Y.clientId}:${Y.sessionId??"*"}`;f.get(V)?.(),f.delete(V);break}case"reply":case"event":break}}catch(Y){let V=typeof H.data==="string"?kT(H.data):void 0;if(!V||V.kind!=="command"){g("error","rejected malformed websocket frame",{error:Y});return}g("error","command.error",{...WZ(V),error:Y}),GA(this.telemetry,{component:"core",operation:"hub.websocket_command",error:Y,severity:"error",handled:!0,context:WZ(V)}),Z({kind:"reply",envelope:KA(V,"command_failed",Y instanceof Error?Y.message:"Unknown hub error")})}},X=()=>{if(Q)return;Q=!0;for(let H of f.values())H();f.clear();for(let H of J)this.transport.command({version:"v1",command:"client.unregister",clientId:H});J.clear(),$.removeEventListener("message",j),$.removeEventListener("close",X)};return $.addEventListener("message",j),$.addEventListener("close",X),X}}class m6{transport;constructor($){this.transport=$}command($){return this.transport.handleCommand($)}subscribe($,f,J){return this.transport.subscribe($,f,J)}}function vT($){if(typeof $==="string")return $;if($ instanceof Uint8Array)return Buffer.from($).toString();if($ instanceof ArrayBuffer)return Buffer.from($).toString();if(Array.isArray($))return Buffer.concat($.map((f)=>Buffer.from(f))).toString();return String($)}function uT($){return{send(f){$.send(f)},addEventListener(f,J){if(f==="message"){$.on("message",(Q)=>{J({data:vT(Q)})});return}$.on("close",J)},removeEventListener(){}}}function cT($){try{$.write(`HTTP/1.1 400 Bad Request\r
|
|
570
|
+
Connection: close\r
|
|
571
|
+
Content-Length: 0\r
|
|
572
|
+
\r
|
|
573
|
+
`),$.end()}catch{$.destroy()}}function dT($){try{$.write(`HTTP/1.1 401 Unauthorized\r
|
|
574
|
+
Connection: close\r
|
|
575
|
+
Content-Length: 0\r
|
|
576
|
+
\r
|
|
577
|
+
`),$.end()}catch{$.destroy()}}function PA($,f){if(!$||!f)return!1;let J=Buffer.from($,"utf8"),Q=Buffer.from(f,"utf8");return J.length===Q.length&&IT(J,Q)}function UA($,f){let J=$&&typeof $==="object"&&"code"in $&&typeof $.code==="string"?$.code:void 0,Q=$ instanceof Error?$.message:typeof $==="string"?$:"Unknown startup error",Z=`Failed to start hub server on ${f.host}:${f.port}${f.pathname}: ${Q}`,W=Error(J?`${Z} (${J})`:Z);if(J)$.code=J,W.code=J;if($ instanceof Error&&$.stack)W.stack=`${W.name}: ${W.message}
|
|
578
|
+
Caused by: ${$.stack}`;return W}async function lT($){return await new Promise((f,J)=>{let Q=mT.createServer();Q.once("error",J),Q.listen(0,$,()=>{let Z=Q.address();if(!Z||typeof Z==="string"){Q.close(()=>J(Error("Failed to resolve free port")));return}let W=Z.port;Q.close((j)=>{if(j){J(j);return}f(W)})})})}function pT($){return $ instanceof Error&&"code"in $&&$.code==="EADDRINUSE"}var jZ=new Map,DA="cline-hub-auth.",rT=30000;function RA($){return Array.isArray($)?$.join(","):$??""}function iT($){let f=RA($).trim();return/^Bearer\s+(.+)$/i.exec(f)?.[1]?.trim()||null}function nT($){for(let f of RA($).split(",")){let J=f.trim();if(J.startsWith(DA))return J.slice(DA.length).trim()||null}return null}async function X2($){let f=$.owner??y$(),J=$.host??"127.0.0.1",Q=$.pathname??"/hub",Z=$.port??Z8(),W=Z===0?await lT(J):Z,j=W,X=o0(J,W,Q),H=Y1(),Y=lJ(),V=new _8($);await V.start();let A=new x6(new m6(V),$.telemetry),B=new Set,G=new Date().toISOString(),K={protocolVersion:"v1",buildId:H,pid:process.pid,startedAt:G},D=new Set,F,P,U=async()=>{if(P)return P;return P=(async()=>{if(F)clearInterval(F),F=void 0;for(let L of D)L.terminate?.();D.clear();for(let L of B)L();if(B.clear(),await new Promise((L,N)=>{_.close((w)=>{if(w){N(w);return}L()})}),await new Promise((L,N)=>{z.close((w)=>{if(w){N(w);return}L()})}),await V.stop(),(await B0(f.discoveryPath))?.url===X)await d0(f.discoveryPath)})(),P},z=xT.createServer((R,L)=>{if((R.url??"/")==="/health"){let w=JSON.stringify({hubId:V.getHubId(),...K,authToken:"",host:J,port:j,url:X,updatedAt:new Date().toISOString()});L.statusCode=200,L.setHeader("content-type","application/json"),L.end(w);return}if((R.url??"/")==="/version"){L.statusCode=200,L.setHeader("content-type","application/json"),L.end(JSON.stringify(K));return}if(new FA(R.url??"/",`http://${J}:${j}`).pathname==="/shutdown"&&R.method==="POST"){if(!PA(iT(R.headers.authorization),Y)){L.statusCode=401,L.end("Unauthorized");return}L.statusCode=202,L.setHeader("content-type","application/json"),L.end(JSON.stringify({ok:!0})),queueMicrotask(()=>{U()});return}L.statusCode=404,L.end("Not found")}),_=new gT({noServer:!0});F=setInterval(()=>{for(let R of D){if(R.isAlive===!1){try{R.terminate?.()}catch{}D.delete(R);continue}R.isAlive=!1;try{R.ping?.()}catch{try{R.terminate?.()}catch{}D.delete(R)}}},rT),z.on("upgrade",(R,L,N)=>{if(new FA(R.url??"/",`http://${J}:${j}`).pathname!==Q){L.destroy();return}if(!PA(nT(R.headers["sec-websocket-protocol"]),Y)){dT(L);return}try{_.handleUpgrade(R,L,N,(Q0)=>{let Z0=Q0;Z0.isAlive=!0,Z0.on("pong",()=>{Z0.isAlive=!0}),D.add(Z0);let o=A.attach(uT(Q0));B.add(o),Q0.once("close",()=>{D.delete(Z0),o(),B.delete(o)})})}catch{cT(L)}});try{await new Promise((R,L)=>{z.once("error",(N)=>{L(UA(N,{host:J,port:W,pathname:Q}))}),z.listen(W,J,()=>{let N=z.address();if(!N||typeof N==="string"){L(UA(Error("Failed to resolve hub port"),{host:J,port:W,pathname:Q}));return}j=N.port,X=o0(J,j,Q),R()})})}catch(R){if(F)clearInterval(F),F=void 0;throw await V.stop().catch(()=>{return}),R}return await pJ(f.discoveryPath,{hubId:V.getHubId(),protocolVersion:"v1",buildId:H,authToken:Y,host:J,port:j,url:X,pid:process.pid,startedAt:G,updatedAt:G}),{host:J,port:j,url:X,authToken:Y,close:U}}async function K5($){let f=$.owner??y$(),J=$.host!==void 0||$.port!==void 0||$.pathname!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),Q=$.host??"127.0.0.1",Z=$.port??Z8(),W=$.pathname??"/hub",j=o0(Q,Z,W),X=f.discoveryPath,H=(V)=>{if(!J)V1(V.url,V.authToken);return V},Y=jZ.get(X);if(Y){let V=await Y;if(V.url===j)return H({server:V,url:V.url,authToken:V.authToken,action:"reuse"})}return await rJ(f.discoveryPath,async()=>{let V=await B0(f.discoveryPath);if(V?.url&&(V.url===j||$.allowPortFallback===!0)){let K=await D0(V.url);if(K?.url&&await j$(K.url,{authToken:V.authToken}))return H({url:K.url,authToken:V.authToken,action:"reuse"})}if((await D0(j))?.url||V?.url)await d0(f.discoveryPath);let G=async(K)=>{let D=X2({...K,owner:f});jZ.set(X,D);try{let F=await D;return H({server:F,url:F.url,authToken:F.authToken,action:"started"})}catch(F){throw jZ.delete(X),F}};try{return await G($)}catch(K){if(!$.allowPortFallback||!pT(K))throw K;return await G({...$,port:0})}})}async function LA($){let f=l0({host:$.host,port:$.port,pathname:$.pathname});return await X2({...$,...f,owner:V0()})}async function OA($){let f=$.port!==void 0||!!process.env.CLINE_HUB_PORT?.trim(),J=l0({host:$.host,port:$.port,pathname:$.pathname});return await K5({...$,...J,allowPortFallback:$.allowPortFallback??!f,owner:V0()})}XZ();var NA={};y(NA,{registerRemoteConfigSessionBlobUpload:()=>D5,readRemoteConfigSessionBlobUploadMetadata:()=>HZ,prepareRemoteConfigCoreIntegration:()=>VZ,createRemoteConfigSessionMessagesArtifactUploader:()=>YZ,buildRemoteConfigSessionBlobUploadMetadata:()=>P5,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY:()=>U5});import{buildRemoteConfigSessionBlobUploadMetadata as P5,clearRemoteConfigSessionBlobUpload as aT,createClineTelemetryServiceConfig as tT,createSessionId as sT,createRemoteConfigSessionMessagesArtifactUploader as oT,prepareRemoteConfigRuntime as eT,REMOTE_CONFIG_SESSION_BLOB_UPLOAD_METADATA_KEY as U5,readRemoteConfigSessionBlobUploadMetadata as HZ,registerRemoteConfigSessionBlobUpload as D5}from"@cline/shared";function $M($,f){let J=$.telemetry||f.telemetryService?{...f.telemetryService??{},...$.telemetry??{}}:void 0;if(!J)return;return E$(tT(J)).telemetry}function YZ(){let $=oT();return{async uploadMessagesFile(f){await $.uploadMessagesFile(f)}}}async function VZ($){let f=await eT($),J=$M(f,$),Q=[f.pluginDefinition],Z=f.claims?.subject,W=P5(f.bundle?.remoteConfig,Z),j;return{prepared:f,extensions:Q,telemetry:J,applyToStartSessionInput(X){let H=X.config.extensions??[],Y=X.config.telemetry,V=W?X.config.sessionId?.trim()||sT():X.config.sessionId;if(V&&W)j=V;let A=V&&W?D5(V,f.bundle?.remoteConfig,Z):void 0,B=A?{...X.sessionMetadata??{},[U5]:A}:X.sessionMetadata;return{...X,...B?{sessionMetadata:B}:{},config:{...X.config,...V?{sessionId:V}:{},extensions:[...H,...Q],telemetry:J??Y}}},async dispose(){if(j)aT(j)}}}var hA={};y(hA,{createTeamName:()=>R5,DefaultRuntimeBuilder:()=>M8});import{hasRuntimeConfigExtension as KM}from"@cline/shared";import{nanoid as FM}from"nanoid";T$();var SA={};y(SA,{createLocalTeamStore:()=>KZ,SqliteTeamStore:()=>H2,FileTeamStore:()=>g6});import{appendFileSync as fM,existsSync as N8,mkdirSync as TA,readdirSync as JM,readFileSync as MA,renameSync as QM,writeFileSync as ZM}from"node:fs";import{join as AZ}from"node:path";import{resolveTeamDataDir as WM}from"@cline/shared/storage";function qA(){return new Date().toISOString()}function BZ($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function yA($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class g6{teamDirPath;constructor($={}){this.teamDirPath=$.teamDir??WM()}init(){this.ensureTeamDir()}listTeamNames(){if(!N8(this.teamDirPath))return[];return JM(this.teamDirPath,{withFileTypes:!0}).filter(($)=>$.isDirectory()).filter(($)=>N8(this.statePath($.name))).map(($)=>$.name).sort()}readState($){let f=this.readEnvelope($);return f?.teamState?yA(f.teamState):void 0}readHistory($,f=200){let J=this.historyPath($);if(!N8(J))return[];return MA(J,"utf8").split(`
|
|
579
|
+
`).map((Q)=>Q.trim()).filter(Boolean).map((Q)=>{try{return JSON.parse(Q)}catch{return}}).filter((Q)=>Q!==void 0).reverse().slice(0,f)}loadRuntime($){let f=this.readEnvelope($);return{state:f?.teamState?yA(f.teamState):void 0,teammates:f?.teammates??[],interruptedRunIds:[]}}handleTeamEvent($,f){this.ensureTeamSubdir($),fM(this.historyPath($),`${JSON.stringify({ts:qA(),eventType:f.type,payload:f})}
|
|
580
|
+
`,"utf8")}persistRuntime($,f,J){this.ensureTeamSubdir($);let Q={version:1,updatedAt:qA(),teamState:f,teammates:J},Z=this.statePath($),W=`${Z}.tmp`;ZM(W,`${JSON.stringify(Q,null,2)}
|
|
581
|
+
`,"utf8"),QM(W,Z)}markInProgressRunsInterrupted($,f){let J=this.readEnvelope($);if(!J?.teamState?.runs?.length)return[];let Q=J.teamState.runs.filter((W)=>W.status==="queued"||W.status==="running").map((W)=>W.id);if(Q.length===0)return[];let Z=new Date;return J.teamState={...J.teamState,runs:J.teamState.runs.map((W)=>W.status==="queued"||W.status==="running"?{...W,status:"interrupted",error:f,endedAt:Z}:W)},this.persistRuntime($,J.teamState,J.teammates),Q}ensureTeamDir(){if(!N8(this.teamDirPath))TA(this.teamDirPath,{recursive:!0});return this.teamDirPath}ensureTeamSubdir($){let f=AZ(this.ensureTeamDir(),BZ($));if(!N8(f))TA(f,{recursive:!0});return f}statePath($){return AZ(this.ensureTeamDir(),BZ($),"state.json")}historyPath($){return AZ(this.ensureTeamDir(),BZ($),"task-history.jsonl")}readEnvelope($){let f=this.statePath($);if(!N8(f))return;try{let J=JSON.parse(MA(f,"utf8"));if(J?.version===1&&J.teamState)return J}catch{}return}}import{existsSync as jM,mkdirSync as XM}from"node:fs";import{join as HM}from"node:path";import{safeJsonParse as wA}from"@cline/shared";import{loadSqliteDb as YM,nowIso as GZ}from"@cline/shared/db";import{resolveDbDataDir as VM}from"@cline/shared/storage";function AM(){return VM()}function T8($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function BM($){let f=wA($);if(!Array.isArray(f))return[];let J=[];for(let Q of f){if(!Q||typeof Q!=="object")continue;let Z=Q,W=Z.agentId,j=Z.rolePrompt;if(typeof W!=="string"||!W.trim())continue;if(typeof j!=="string"||!j.trim())continue;let X={agentId:W.trim(),rolePrompt:j};if(typeof Z.modelId==="string"&&Z.modelId.trim())X.modelId=Z.modelId.trim();if(typeof Z.maxIterations==="number"&&Number.isFinite(Z.maxIterations))X.maxIterations=Math.max(1,Math.floor(Z.maxIterations));J.push(X)}return J}function GM($){return{...$,tasks:$.tasks.map((f)=>({...f,createdAt:new Date(f.createdAt),updatedAt:new Date(f.updatedAt)})),mailbox:$.mailbox.map((f)=>({...f,sentAt:new Date(f.sentAt),readAt:f.readAt?new Date(f.readAt):void 0})),missionLog:$.missionLog.map((f)=>({...f,ts:new Date(f.ts)})),runs:($.runs??[]).map((f)=>({...f,startedAt:new Date(f.startedAt),endedAt:f.endedAt?new Date(f.endedAt):void 0,nextAttemptAt:f.nextAttemptAt?new Date(f.nextAttemptAt):void 0,heartbeatAt:f.heartbeatAt?new Date(f.heartbeatAt):void 0})),outcomes:($.outcomes??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),finalizedAt:f.finalizedAt?new Date(f.finalizedAt):void 0})),outcomeFragments:($.outcomeFragments??[]).map((f)=>({...f,createdAt:new Date(f.createdAt),reviewedAt:f.reviewedAt?new Date(f.reviewedAt):void 0}))}}class H2{teamDirPath;db;constructor($={}){this.teamDirPath=$.teamDir??AM()}init(){this.getRawDb()}ensureTeamDir(){if(!jM(this.teamDirPath))XM(this.teamDirPath,{recursive:!0});return this.teamDirPath}dbPath(){return HM(this.ensureTeamDir(),"teams.db")}getRawDb(){if(this.db)return this.db;let $=YM(this.dbPath());return this.ensureSchema($),this.db=$,$}ensureSchema($){if($.exec("PRAGMA journal_mode = WAL;"),$.exec("PRAGMA busy_timeout = 5000;"),$.exec(`
|
|
582
|
+
CREATE TABLE IF NOT EXISTS team_store_schema_version (
|
|
583
|
+
lock INTEGER PRIMARY KEY CHECK (lock = 1),
|
|
584
|
+
version INTEGER NOT NULL
|
|
585
|
+
);
|
|
586
|
+
`),!$.prepare("SELECT version FROM team_store_schema_version WHERE lock = 1").get())$.prepare("INSERT INTO team_store_schema_version (lock, version) VALUES (1, 1)").run();$.exec(`
|
|
587
|
+
CREATE TABLE IF NOT EXISTS team_events (
|
|
588
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
589
|
+
team_name TEXT NOT NULL,
|
|
590
|
+
ts TEXT NOT NULL,
|
|
591
|
+
event_type TEXT NOT NULL,
|
|
592
|
+
payload_json TEXT NOT NULL,
|
|
593
|
+
causation_id TEXT,
|
|
594
|
+
correlation_id TEXT
|
|
595
|
+
);
|
|
596
|
+
`),$.exec(`
|
|
597
|
+
CREATE INDEX IF NOT EXISTS idx_team_events_name_ts
|
|
598
|
+
ON team_events(team_name, ts DESC);
|
|
599
|
+
`),$.exec(`
|
|
600
|
+
CREATE TABLE IF NOT EXISTS team_runtime_snapshot (
|
|
601
|
+
team_name TEXT PRIMARY KEY,
|
|
602
|
+
state_json TEXT NOT NULL,
|
|
603
|
+
teammates_json TEXT NOT NULL,
|
|
604
|
+
updated_at TEXT NOT NULL
|
|
605
|
+
);
|
|
606
|
+
`),$.exec(`
|
|
607
|
+
CREATE TABLE IF NOT EXISTS team_tasks (
|
|
608
|
+
team_name TEXT NOT NULL,
|
|
609
|
+
task_id TEXT NOT NULL,
|
|
610
|
+
title TEXT NOT NULL,
|
|
611
|
+
description TEXT NOT NULL,
|
|
612
|
+
status TEXT NOT NULL,
|
|
613
|
+
assignee TEXT,
|
|
614
|
+
depends_on_json TEXT NOT NULL,
|
|
615
|
+
summary TEXT,
|
|
616
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
617
|
+
updated_at TEXT NOT NULL,
|
|
618
|
+
PRIMARY KEY(team_name, task_id)
|
|
619
|
+
);
|
|
620
|
+
`),$.exec(`
|
|
621
|
+
CREATE TABLE IF NOT EXISTS team_runs (
|
|
622
|
+
team_name TEXT NOT NULL,
|
|
623
|
+
run_id TEXT NOT NULL,
|
|
624
|
+
agent_id TEXT NOT NULL,
|
|
625
|
+
task_id TEXT,
|
|
626
|
+
status TEXT NOT NULL,
|
|
627
|
+
message TEXT NOT NULL,
|
|
628
|
+
started_at TEXT,
|
|
629
|
+
ended_at TEXT,
|
|
630
|
+
error TEXT,
|
|
631
|
+
lease_owner TEXT,
|
|
632
|
+
heartbeat_at TEXT,
|
|
633
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
634
|
+
PRIMARY KEY(team_name, run_id)
|
|
635
|
+
);
|
|
636
|
+
`),$.exec(`
|
|
637
|
+
CREATE INDEX IF NOT EXISTS idx_team_runs_status
|
|
638
|
+
ON team_runs(team_name, status);
|
|
639
|
+
`),$.exec(`
|
|
640
|
+
CREATE TABLE IF NOT EXISTS team_outcomes (
|
|
641
|
+
team_name TEXT NOT NULL,
|
|
642
|
+
outcome_id TEXT NOT NULL,
|
|
643
|
+
title TEXT NOT NULL,
|
|
644
|
+
status TEXT NOT NULL,
|
|
645
|
+
schema_json TEXT NOT NULL,
|
|
646
|
+
finalized_at TEXT,
|
|
647
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
648
|
+
PRIMARY KEY(team_name, outcome_id)
|
|
649
|
+
);
|
|
650
|
+
`),$.exec(`
|
|
651
|
+
CREATE TABLE IF NOT EXISTS team_outcome_fragments (
|
|
652
|
+
team_name TEXT NOT NULL,
|
|
653
|
+
outcome_id TEXT NOT NULL,
|
|
654
|
+
fragment_id TEXT NOT NULL,
|
|
655
|
+
section TEXT NOT NULL,
|
|
656
|
+
source_agent_id TEXT NOT NULL,
|
|
657
|
+
source_run_id TEXT,
|
|
658
|
+
content TEXT NOT NULL,
|
|
659
|
+
status TEXT NOT NULL,
|
|
660
|
+
reviewed_by TEXT,
|
|
661
|
+
reviewed_at TEXT,
|
|
662
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
663
|
+
PRIMARY KEY(team_name, fragment_id)
|
|
664
|
+
);
|
|
665
|
+
`)}run($,f=[]){return this.getRawDb().prepare($).run(...f)}queryOne($,f=[]){return this.getRawDb().prepare($).get(...f)??void 0}queryAll($,f=[]){return this.getRawDb().prepare($).all(...f)}withTransaction($){let f=this.getRawDb();f.exec("BEGIN IMMEDIATE;");try{$(),f.exec("COMMIT;")}catch(J){try{f.exec("ROLLBACK;")}catch{}throw J}}listTeamNames(){return this.queryAll("SELECT team_name FROM team_runtime_snapshot ORDER BY team_name ASC").map(($)=>$.team_name)}readState($){let f=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[T8($)]);if(!f)return;let J=wA(f.state_json);if(!J)return;try{return GM(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 ?",[T8($),f]).flatMap((J)=>{try{return[{eventType:J.event_type,payload:JSON.parse(J.payload_json),ts:J.ts}]}catch{return[]}})}loadRuntime($){let f=T8($),J=this.readState(f),Q=this.queryOne("SELECT team_name, state_json, teammates_json, updated_at FROM team_runtime_snapshot WHERE team_name = ?",[f]),Z=Q?BM(Q.teammates_json):[];return{state:J,teammates:Z,interruptedRunIds:[]}}appendTeamEvent($,f,J,Q){this.run(`INSERT INTO team_events (team_name, ts, event_type, payload_json, causation_id, correlation_id)
|
|
666
|
+
VALUES (?, ?, ?, ?, NULL, ?)`,[T8($),GZ(),f,JSON.stringify(J),Q??null])}persistRuntime($,f,J){let Q=T8($),Z=GZ();this.withTransaction(()=>{this.run(`INSERT INTO team_runtime_snapshot (team_name, state_json, teammates_json, updated_at)
|
|
667
|
+
VALUES (?, ?, ?, ?)
|
|
668
|
+
ON CONFLICT(team_name) DO UPDATE SET
|
|
669
|
+
state_json = excluded.state_json,
|
|
670
|
+
teammates_json = excluded.teammates_json,
|
|
671
|
+
updated_at = excluded.updated_at`,[Q,JSON.stringify(f),JSON.stringify(J),Z]);for(let W of f.tasks)this.run(`INSERT INTO team_tasks (team_name, task_id, title, description, status, assignee, depends_on_json, summary, version, updated_at)
|
|
672
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?)
|
|
673
|
+
ON CONFLICT(team_name, task_id) DO UPDATE SET
|
|
674
|
+
title = excluded.title,
|
|
675
|
+
description = excluded.description,
|
|
676
|
+
status = excluded.status,
|
|
677
|
+
assignee = excluded.assignee,
|
|
678
|
+
depends_on_json = excluded.depends_on_json,
|
|
679
|
+
summary = excluded.summary,
|
|
680
|
+
version = team_tasks.version + 1,
|
|
681
|
+
updated_at = excluded.updated_at`,[Q,W.id,W.title,W.description,W.status,W.assignee??null,JSON.stringify(W.dependsOn??[]),W.summary??null,W.updatedAt.toISOString()]);for(let W of f.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)
|
|
682
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
|
|
683
|
+
ON CONFLICT(team_name, run_id) DO UPDATE SET
|
|
684
|
+
agent_id = excluded.agent_id,
|
|
685
|
+
task_id = excluded.task_id,
|
|
686
|
+
status = excluded.status,
|
|
687
|
+
message = excluded.message,
|
|
688
|
+
started_at = excluded.started_at,
|
|
689
|
+
ended_at = excluded.ended_at,
|
|
690
|
+
error = excluded.error,
|
|
691
|
+
lease_owner = excluded.lease_owner,
|
|
692
|
+
heartbeat_at = excluded.heartbeat_at,
|
|
693
|
+
version = team_runs.version + 1`,[Q,W.id,W.agentId,W.taskId??null,W.status,W.message,W.startedAt?W.startedAt.toISOString():null,W.endedAt?W.endedAt.toISOString():null,W.error??null,W.leaseOwner??null,W.heartbeatAt?W.heartbeatAt.toISOString():null]);for(let W of f.outcomes??[])this.run(`INSERT INTO team_outcomes (team_name, outcome_id, title, status, schema_json, finalized_at, version)
|
|
694
|
+
VALUES (?, ?, ?, ?, ?, ?, 1)
|
|
695
|
+
ON CONFLICT(team_name, outcome_id) DO UPDATE SET
|
|
696
|
+
title = excluded.title,
|
|
697
|
+
status = excluded.status,
|
|
698
|
+
schema_json = excluded.schema_json,
|
|
699
|
+
finalized_at = excluded.finalized_at,
|
|
700
|
+
version = team_outcomes.version + 1`,[Q,W.id,W.title,W.status,JSON.stringify({requiredSections:W.requiredSections}),W.finalizedAt?W.finalizedAt.toISOString():null]);for(let W of f.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)
|
|
701
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
|
|
702
|
+
ON CONFLICT(team_name, fragment_id) DO UPDATE SET
|
|
703
|
+
outcome_id = excluded.outcome_id,
|
|
704
|
+
section = excluded.section,
|
|
705
|
+
source_agent_id = excluded.source_agent_id,
|
|
706
|
+
source_run_id = excluded.source_run_id,
|
|
707
|
+
content = excluded.content,
|
|
708
|
+
status = excluded.status,
|
|
709
|
+
reviewed_by = excluded.reviewed_by,
|
|
710
|
+
reviewed_at = excluded.reviewed_at,
|
|
711
|
+
version = team_outcome_fragments.version + 1`,[Q,W.outcomeId,W.id,W.section,W.sourceAgentId,W.sourceRunId??null,W.content,W.status,W.reviewedBy??null,W.reviewedAt?W.reviewedAt.toISOString():null])})}markInProgressRunsInterrupted($,f){let J=T8($),Q=this.queryAll("SELECT run_id FROM team_runs WHERE team_name = ? AND status IN ('queued', 'running')",[J]);if(Q.length===0)return[];let Z=GZ();return this.run(`UPDATE team_runs SET status = 'interrupted', error = ?, ended_at = ?, version = version + 1
|
|
712
|
+
WHERE team_name = ? AND status IN ('queued', 'running')`,[f,Z,J]),Q.map((W)=>W.run_id)}handleTeamEvent($,f){this.appendTeamEvent($,f.type,f)}}function KZ($={}){try{let f=new H2($);return f.init(),f}catch{let f=new g6({teamDir:$.teamDir});return f.init(),f}}function FZ($,f){return KM($,f)}function PM($,f){let J=f?.["*"]??{},Q=f?.[$]??{};return{...J,...Q}.enabled!==!1}function UM($,f){return $.filter((J)=>PM(J.name,f))}function CA($,f){return h1(UM($,f))}function R5(){return`team-${FM(5)}`}function PZ($,f,J,Q,Z,W,j,X){let H=x0[z$({mode:J})],Y=R2(f,Q,J,Z??D2);return CA(q1({cwd:$,...H,enableSkills:!!j,...Y,executors:{...j?{skills:j}:{},...X??{}}}),W)}function DM($){return PZ($.cwd,$.providerId,$.mode,$.modelId,$.toolRoutingRules,$.toolPolicies,RM,$.toolExecutors).some((f)=>f.name==="skills")}var RM=async()=>"";async function LM($){let f=z0();if(!q$({filePath:f}))return{tools:[]};let J=new n1({clientFactory:f8({settingsPath:f})}),Q;try{Q=await i1(J,{filePath:f})}catch(X){await J.dispose().catch(()=>{});let H=X instanceof Error?X.message:String(X);return $?.log(`[mcp] Failed to load MCP settings, skipping MCP tools: ${H}`),{tools:[]}}let Z=Q.filter((X)=>X.disabled!==!0),W=await Promise.allSettled(Z.map((X)=>J8({serverName:X.name,provider:J}))),j=[];for(let[X,H]of W.entries())if(H.status==="fulfilled")j.push(...H.value);else{let Y=H.reason instanceof Error?H.reason.message:String(H.reason);$?.log(`[mcp] Failed to load tools from MCP server "${Z[X].name}", skipping: ${Y}`)}return{tools:j,shutdown:async()=>{await J.dispose()}}}function OM($,f){if(!$)return;for(let J of $.getTeammateIds())try{$.shutdownTeammate(J,f)}catch{}}function zM($){if($===void 0)return!0;switch($){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 _M($){let f=x0[z$({mode:$.mode})];return{sessionId:$.sessionId||"",mode:$.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act",enableTools:$.enableTools!==!1,enableSpawnAgent:$.enableSpawnAgent??f.enableSpawnAgent??!0,enableAgentTeams:$.enableAgentTeams??f.enableAgentTeams??!0,disableMcpSettingsTools:$.disableMcpSettingsTools===!0,yolo:$.yolo===!0,missionLogIntervalSteps:typeof $.missionLogIntervalSteps==="number"&&Number.isFinite($.missionLogIntervalSteps)?$.missionLogIntervalSteps:3,missionLogIntervalMs:typeof $.missionLogIntervalMs==="number"&&Number.isFinite($.missionLogIntervalMs)?$.missionLogIntervalMs:120000}}class M8{teamRuntimeEntries=new Map;async build($){let{config:f,hooks:J,extensions:Q,logger:Z,telemetry:W,createSpawnTool:j,onTeamRestored:X,userInstructionService:H,configExtensions:Y,toolExecutors:V}=$,A=$.onTeamEvent??(()=>{}),B=_M(f),G=Q$(),K=[],D=f.teamName?.trim()||R5(),F=f.sessionId?.trim()||D,P=FZ(Y,"rules"),U=FZ(Y,"skills"),z=FZ(Y,"workflows"),_=P||U||z,R=!1,L=Boolean(H),N=H,w;if(!N&&_)N=Z1({skills:{workspacePath:f.cwd},rules:{workspacePath:f.cwd},workflows:{workspacePath:f.cwd}});if(N)await N.start().catch(()=>{});let Q0=B.enableTools&&U&&Boolean(N)&&N?.hasConfiguredSkills(f.skills)===!0&&DM({cwd:f.cwd,providerId:f.providerId,mode:B.mode,modelId:f.modelId,toolRoutingRules:f.toolRoutingRules,toolPolicies:f.toolPolicies,toolExecutors:V}),Z0=N&&_?N.createExtension({includeRules:P,includeSkills:U,includeWorkflows:z,registerSkillsTool:Q0,allowedSkillNames:f.skills}):void 0,o=Z0?[...Q??f.extensions??[],Z0]:Q??f.extensions;if(B.enableTools){if(K.push(...PZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V)),!B.disableMcpSettingsTools){let n=await LM(f.logger);K.push(...n.tools),w=n.shutdown}}let d,R0=B.enableAgentTeams?KZ():void 0,b$=R0?.loadRuntime(F),l=b$?.state,K$=b$?.teammates??[],b=new Map(K$.map((n)=>[n.agentId,n])),i=f.sessionId||D,h0,T0=[],P1=!1,A2=O2({providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey??"",baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:J,extensions:o,logger:Z??f.logger,telemetry:$.telemetry??f.telemetry,workspaceMetadata:f.workspaceMetadata});if(!this.teamRuntimeEntries.has(i))this.teamRuntimeEntries.set(i,{delegatedAgentConfigProvider:A2});let y8=()=>{if(!B.enableAgentTeams)return;let n=this.teamRuntimeEntries.get(i)??{delegatedAgentConfigProvider:A2};if(this.teamRuntimeEntries.set(i,n),d=n.runtime,!d){if(d=new J2({teamName:D,leadAgentId:f.sessionId||"lead",missionLogIntervalSteps:B.missionLogIntervalSteps,missionLogIntervalMs:B.missionLogIntervalMs,onTeamEvent:($0)=>{if(A($0),d&&R0){if($0.type==="teammate_spawned"&&$0.teammate?.rolePrompt){let F$={agentId:$0.agentId,rolePrompt:$0.teammate.rolePrompt,modelId:$0.teammate.modelId,maxIterations:$0.teammate.maxIterations};b.set(F$.agentId,F$)}if($0.type==="teammate_shutdown"&&!zM($0.reason))b.delete($0.agentId);R0.handleTeamEvent(F,$0),R0.persistRuntime(F,d.exportState(),Array.from(b.values()))}}}),l)d.hydrateState(l),P1=!0;n.runtime=d}if(!R){if(!d)return;R=!0;let $0=N2({runtime:d,leadAgentId:f.sessionId||"lead",restoredFromPersistence:Boolean(l),restoredTeammates:K$,includeLeadSpawnTool:!0,includeLeadManagementTools:!0,onLeadToolsUnlocked:(F$)=>{T0=F$,h0?.addTools(F$)},createBaseTools:B.enableTools?()=>PZ(f.cwd,f.providerId,B.mode,f.modelId,f.toolRoutingRules,f.toolPolicies,void 0,V):void 0,teammateConfigProvider:A2});if(P1)d.recoverActiveRuns("runtime_recovered");if($0.restoredFromPersistence)X?.();K.push(...$0.tools)}return d};if(B.enableSpawnAgent&&j){let n=j();K.push({...n,execute:async($0,F$)=>{return y8(),n.execute($0,F$)}})}if(B.enableAgentTeams)y8();let l6=CA(K,f.toolPolicies),g5=l6.some((n)=>n.name===f0.SUBMIT_AND_EXIT&&n.lifecycle?.completesRun===!0),B2=B.enableAgentTeams?()=>{let n=this.teamRuntimeEntries.get(i)?.runtime;if(!n)return;let $0=n.listTasks(),F$=$0.some((k$)=>k$.status==="in_progress"||k$.status==="pending"),J3=n.listRuns({}),qB=J3.some((k$)=>k$.status==="running"||k$.status==="queued");if(F$||qB){let k$=$0.filter((E0)=>E0.status==="in_progress"||E0.status==="pending").map((E0)=>`${E0.id} (${E0.status}): ${E0.title}`).join(", "),Q3=J3.filter((E0)=>E0.status==="running"||E0.status==="queued").map((E0)=>`${E0.id} (${E0.status})`).join(", "),v5=[];if(k$)v5.push(`Unfinished tasks: ${k$}`);if(Q3)v5.push(`Active runs: ${Q3}`);return`[SYSTEM] You still have team obligations. ${v5.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,w8=g5?{requireCompletionTool:!0,...B2?{completionGuard:B2}:{}}:B2?{completionGuard:B2}:void 0;return{tools:l6,logger:Z??f.logger,telemetry:W??f.telemetry,teamRuntime:d,teamRestoredFromPersistence:Boolean(l),delegatedAgentConfigProvider:this.teamRuntimeEntries.get(i)?.delegatedAgentConfigProvider??A2,extensions:o,completionPolicy:w8,registerLeadAgent:(n)=>{if(h0=n,T0.length>0)n.addTools(h1(T0,[...G]))},shutdown:async(n)=>{if(OM(d,n),this.teamRuntimeEntries.delete(i),await w?.(),!L)N?.stop()}}}}var bA={};y(bA,{requestDesktopToolApproval:()=>DZ});import{mkdir as NM,readFile as TM,unlink as MM,writeFile as qM}from"node:fs/promises";import{join as EA}from"node:path";function yM($){return $.replace(/[^a-zA-Z0-9._-]+/g,"_")}function wM($){return new Promise((f)=>setTimeout(f,$))}async function UZ($){try{await MM($)}catch{}}async function DZ($,f={}){let J=f.approvalDir?.trim(),Q=f.sessionId?.trim();if(!J||!Q)return{approved:!1,reason:"Desktop tool approval IPC is not configured"};await NM(J,{recursive:!0});let Z=yM(`${$.toolCallId}`),W=EA(J,`${Q}.request.${Z}.json`),j=EA(J,`${Q}.decision.${Z}.json`),X=f.nowIso??(()=>new Date().toISOString());await qM(W,`${JSON.stringify({requestId:Z,sessionId:Q,createdAt:X(),toolCallId:$.toolCallId,toolName:$.toolName,input:$.input,iteration:$.iteration,agentId:$.agentId,conversationId:$.conversationId},null,2)}
|
|
713
|
+
`,"utf8");let H=f.timeoutMs??300000,Y=f.pollIntervalMs??200,V=Date.now();while(Date.now()-V<H){try{let A=await TM(j,"utf8"),B=JSON.parse(A),G={approved:B.approved===!0,reason:typeof B.reason==="string"?B.reason:void 0};return await Promise.all([UZ(j),UZ(W)]),G}catch{}await wM(Y)}return await UZ(W),{approved:!1,reason:"Tool approval request timed out"}}T$();var oA={};y(oA,{updateLocalProvider:()=>T5,saveLocalProviderSettings:()=>MZ,saveLocalProviderOAuthCredentials:()=>SZ,resolveLocalClineAuthToken:()=>CZ,refreshProviderModelsFromSource:()=>qZ,normalizeOAuthProvider:()=>yZ,loginLocalProvider:()=>wZ,listLocalProviders:()=>NZ,getLocalProviderModels:()=>TZ,ensureCustomProvidersLoaded:()=>N5,deleteLocalProvider:()=>M5,addLocalProvider:()=>_Z});import*as N0 from"@cline/llms";import{getClineEnvironmentConfig as tM}from"@cline/shared";import{existsSync as SM,mkdirSync as CM,readFileSync as hM,writeFileSync as EM}from"node:fs";import{mkdir as bM,readFile as kM,writeFile as IM}from"node:fs/promises";import{dirname as RZ,join as xM}from"node:path";import*as C0 from"@cline/llms";import{ModelCapabilitySchema as mM,ProviderCapabilitySchema as gM,ProviderClientSchema as vM,ProviderProtocolSchema as uM}from"@cline/shared";import{z as r}from"zod";var cM=r.object({id:r.string().optional(),name:r.string().optional(),maxTokens:r.number().optional(),contextWindow:r.number().optional(),maxInputTokens:r.number().optional(),capabilities:r.array(mM).optional(),supportsVision:r.boolean().optional(),supportsAttachments:r.boolean().optional(),supportsReasoning:r.boolean().optional()}).passthrough(),dM=r.object({name:r.string(),baseUrl:r.string(),defaultModelId:r.string().optional(),protocol:uM.optional(),client:vM.optional(),capabilities:r.array(gM).optional(),modelsSourceUrl:r.string().optional()}).passthrough(),kA=r.object({provider:dM.optional(),models:r.record(r.string(),cM).optional()}).passthrough(),IA=r.object({version:r.literal(1),providers:r.record(r.string(),kA)}),lM=r.object({version:r.literal(1),providers:r.record(r.string(),r.unknown())}),L5=new Set;function xA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function Y2($){return xM(RZ($.getFilePath()),"models.json")}function O5(){return{version:1,providers:{}}}function mA($){let f=lM.safeParse($);if(!f.success)return O5();let J={};for(let[Q,Z]of Object.entries(f.data.providers)){let W=kA.safeParse(Z);if(W.success)J[Q]=W.data}return{version:1,providers:J}}function LZ($){if(!SM($))return O5();try{let f=hM($,"utf8");return mA(JSON.parse(f))}catch{}return O5()}async function q8($){try{let f=await kM($,"utf8");return mA(JSON.parse(f))}catch{}return O5()}function gA($,f){CM(RZ($),{recursive:!0});let J=IA.parse(f);EM($,`${JSON.stringify(J,null,2)}
|
|
714
|
+
`,"utf8")}async function z5($,f){await bM(RZ($),{recursive:!0});let J=IA.parse(f);await IM($,`${JSON.stringify(J,null,2)}
|
|
715
|
+
`,"utf8")}function vA($,f){return{id:$,name:f.name??$,supportsAttachments:f.capabilities?.includes("files"),supportsVision:f.capabilities?.includes("images"),supportsReasoning:f.capabilities?.includes("reasoning")||f.thinkingConfig!=null}}function uA($){if(!$||$.length===0)return;let f=new Set;if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("tools"))f.add("tools");return f.size>0?[...f]:void 0}function cA($){let f=new Set;if(!$||$.length===0)return[...f];if($.includes("streaming"))f.add("streaming");if($.includes("tools"))f.add("tools");if($.includes("reasoning"))f.add("reasoning");if($.includes("prompt-cache"))f.add("prompt-cache");if($.includes("vision"))f.add("images"),f.add("files");return[...f]}function pM($){return $!=null&&typeof $.name==="string"&&typeof $.baseUrl==="string"}function dA($,f){return $??f??"openai-chat"}function lA($,f,J){return $??J??(f==="openai-responses"?"openai":"openai-compatible")}function pA($,f,J){let Q=new Set(f?.capabilities??J??[]);if(f?.supportsVision)Q.add("images");if(f?.supportsAttachments)Q.add("files");if(f?.supportsReasoning)Q.add("reasoning");return{id:$,name:f?.name??$,maxTokens:f?.maxTokens,contextWindow:f?.contextWindow,maxInputTokens:f?.maxInputTokens,capabilities:Q.size>0?[...Q]:void 0}}function rM($,f){for(let[J,Q]of Object.entries(f??{})){let Z=Q.id?.trim()||J.trim();if(!Z)continue;C0.registerModel($,Z,pA(Z,Q))}}function iM($,f,J){return{...f??{},id:$,name:f?.name??$,capabilities:f?.capabilities??J}}function nM($){return Object.assign({},...C0.resolveProviderModelCatalogKeys($).map((J)=>C0.getGeneratedModelsForProvider(J)))}function aM($){let f=$.provider.trim();if(!f||C0.isBuiltInProviderId(f))return;let J=$.baseUrl?.trim();if(!J)return;let Q=C0.MODEL_COLLECTIONS_BY_PROVIDER_ID[f],Z=nM(f),W=cA($.capabilities),j=W.length>0?W:void 0,X=$.model?.trim(),H={...Z,...Q?.models??{}};if(X)H[X]=iM(X,H[X],j);let Y=Object.keys(H).filter(Boolean),V=X||Y[0];if(!V)return;let A=dA($.protocol,Q?.provider.protocol),B=lA($.client,A,Q?.provider.client);C0.registerProvider({provider:{id:f,name:Q?.provider.name??xA(f),description:Q?.provider.description,protocol:A,client:B,baseUrl:J,modelsSourceUrl:Q?.provider.modelsSourceUrl,defaultModelId:V,capabilities:uA($.capabilities)??Q?.provider.capabilities,source:"file"},models:H})}function _5($){for(let f of Object.values($.providers))aM(f.settings)}function v6($,f){let J=f.models??{};if(!pM(f.provider)){rM($,J);return}let Q=cA(f.provider.capabilities),Z=Object.entries(J).map(([Y,V])=>({id:V.id?.trim()||Y.trim(),model:V})).filter(({id:Y})=>Y.length>0),W=f.provider.defaultModelId?.trim()||Z[0]?.id||"default",j=dA(f.provider.protocol,void 0),X=lA(f.provider.client,j,void 0),H=Object.fromEntries(Z.map(({id:Y,model:V})=>[Y,{...pA(Y,V,Q.length>0?Q:void 0),status:"active"}]));C0.registerProvider({provider:{id:$,name:f.provider.name.trim()||xA($),protocol:j,client:X,baseUrl:f.provider.baseUrl,modelsSourceUrl:f.provider.modelsSourceUrl,defaultModelId:W,capabilities:uA(f.provider.capabilities),source:"file"},models:H})}function rA($){let f=Y2($);if(L5.has(f))return;let J=LZ(f);for(let[Q,Z]of Object.entries(J.providers))v6(Q,Z);L5.add(f)}async function N5($){let f=Y2($);if(L5.has(f))return;let J=await q8(f);for(let[Q,Z]of Object.entries(J.providers))v6(Q,Z);L5.add(f)}function sM($){return $.apiKey??$.auth?.apiKey}function oM($){return($.auth?.accessToken?.trim()??"").length>0}function iA($){return $.split(/[-_]/).filter(Boolean).map((f)=>f.charAt(0).toUpperCase()+f.slice(1)).join(" ")}function eM($){let f=$.split(/\s+/).filter(Boolean);if(f.length===0)return"?";if(f.length===1)return f[0].slice(0,2).toUpperCase();return`${f[0][0]}${f[1][0]}`.toUpperCase()}function $q($){let f=["#c4956a","#6b8aad","#e8963a","#5b9bd5","#6bbd7b","#9b7dd4","#d07f68","#57a6a1"],J=0;for(let Q of $)J=J*31+Q.charCodeAt(0)>>>0;return f[J%f.length]}function nA($){return Object.entries($).sort(([f],[J])=>f.localeCompare(J)).map(([f,J])=>vA(f,J))}async function fq($,f){let J=await N0.getModelsForProvider($);if(!f)return J;let Q=await q4($,{loadPrivateOnAuth:!0,failOnError:!1},f);return Q?.knownModels?{...J,...Q.knownModels}:J}function OZ($){return[...new Set(($??[]).map((f)=>f.trim()).filter(Boolean))]}function Jq($){if(!$?.length)return;return[...new Set($)]}function Qq($,f){return Jq([...$??[],...f??[]])}function Zq($){let f=$?.popularRank;return typeof f==="number"&&Number.isFinite(f)?f:Number.MAX_SAFE_INTEGER}function aA($){let f=Object.entries($??{}).filter(([J])=>J.trim().length>0);return f.length>0?Object.fromEntries(f):void 0}function zZ($,f){let J=f?.includes("vision")??!1,Q=f?.includes("reasoning")??!1;return Object.fromEntries($.map((Z)=>[Z,{id:Z,name:Z,supportsVision:J,supportsAttachments:J,supportsReasoning:Q}]))}async function tA($){if(!$.shouldRecompute)return $.fallbackModelIds??[];let f=$.modelsSourceUrl?await lf($.modelsSourceUrl,$.providerId):[];return[...new Set([...$.explicitModels??[],...f])]}function sA($,f){let J=$.read(),Q=!1;if(J.providers[f])delete J.providers[f],Q=!0;if(J.lastUsedProvider===f)delete J.lastUsedProvider,Q=!0;if(Q)$.write(J);N0.unregisterProvider(f)}async function _Z($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=f.baseUrl.trim(),Z=f.apiKey?.trim()??"";if(!Q&&!Z){let K=Y2($);if((await q8(K)).providers[J]){let F=await M5($,{providerId:J});return{providerId:J,settingsPath:F.settingsPath,modelsPath:F.modelsPath,modelsCount:0}}return sA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:K,modelsCount:0}}if(N0.hasProvider(J))throw Error(`provider "${J}" already exists`);let W=f.name.trim();if(!W)throw Error("name is required");if(!Q)throw Error("baseUrl is required");let j=OZ(f.models),X=f.modelsSourceUrl?.trim(),H=await tA({providerId:J,explicitModels:j,modelsSourceUrl:X,shouldRecompute:!0});if(H.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let Y=f.defaultModelId?.trim()&&H.includes(f.defaultModelId.trim())?f.defaultModelId.trim():H[0],V=f.capabilities?.length?[...new Set(f.capabilities)]:void 0,A=aA(f.headers);$.saveProviderSettings({provider:J,apiKey:Z||void 0,baseUrl:Q,headers:A,timeout:f.timeoutMs,model:Y,protocol:f.protocol,client:f.client},{setLastUsed:!1});let B=Y2($),G=await q8(B);return G.providers[J]={provider:{name:W,baseUrl:Q,defaultModelId:Y,protocol:f.protocol,client:f.client,capabilities:V,modelsSourceUrl:X},models:zZ(H,V)},await z5(B,G),v6(J,G.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:B,modelsCount:H.length}}async function T5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Y2($),Z=await q8(Q),W=Z.providers[J];if(!W){let _=$.getProviderSettings(J);if(!_)throw Error(`provider "${J}" does not exist`);let R=f.modelsSourceUrl?.trim(),L=OZ(f.models)[0]??_.model?.trim();if(!L&&!R)throw Error(`provider "${J}" cannot be updated because no model is configured`);W={provider:{name:f.name?.trim()||iA(J),baseUrl:f.baseUrl?.trim()??_.baseUrl?.trim()??"",defaultModelId:L,protocol:_.protocol,client:_.client,capabilities:_.capabilities},models:L?zZ([L],_.capabilities):{}}}if(!W.provider)throw Error(`provider "${J}" cannot be updated because it is a model overlay (no provider metadata)`);let j=f.name?.trim()??W.provider.name.trim();if(!j)throw Error("name is required");let X=f.baseUrl?.trim()??W.provider.baseUrl.trim();if(!X)throw Error("baseUrl is required");let H=f.capabilities===void 0?W.provider.capabilities:f.capabilities===null?void 0:[...new Set(f.capabilities)],Y=f.protocol===void 0?W.provider.protocol:f.protocol??void 0,V=f.client===void 0?W.provider.client:f.client??void 0,A=OZ(f.models),B=f.modelsSourceUrl===void 0?W.provider.modelsSourceUrl:f.modelsSourceUrl?.trim()||void 0,G=f.models!==void 0||f.modelsSourceUrl!==void 0&&!!B,K=Object.keys(W.models??{}).map((_)=>_.trim()).filter(Boolean),D=await tA({providerId:J,explicitModels:A,modelsSourceUrl:B,fallbackModelIds:K,shouldRecompute:G});if(D.length===0)throw Error("at least one model is required (manual or via modelsSourceUrl)");let F=f.defaultModelId===void 0?W.provider.defaultModelId?.trim():f.defaultModelId?.trim(),P=F&&D.includes(F)?F:D[0],z={...$.getProviderSettings(J)??{},provider:J,baseUrl:X,model:P};if(Y)z.protocol=Y;else delete z.protocol;if(V)z.client=V;else delete z.client;if(f.apiKey!==void 0){let _=f.apiKey?.trim()??"";if(_)z.apiKey=_;else delete z.apiKey}if(f.headers!==void 0){let _=aA(f.headers);if(_)z.headers=_;else delete z.headers}if(f.timeoutMs!==void 0)if(typeof f.timeoutMs==="number")z.timeout=f.timeoutMs;else delete z.timeout;return $.saveProviderSettings(z,{setLastUsed:!1}),Z.providers[J]={provider:{name:j,baseUrl:X,defaultModelId:P,protocol:Y,client:V,capabilities:H,modelsSourceUrl:B},models:zZ(D,H)},await z5(Q,Z),v6(J,Z.providers[J]),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q,modelsCount:D.length}}async function M5($,f){let J=f.providerId.trim().toLowerCase();if(!J)throw Error("providerId is required");let Q=Y2($),Z=await q8(Q);if(!Z.providers[J])throw Error(`provider "${J}" does not exist`);return delete Z.providers[J],await z5(Q,Z),N0.unregisterProvider(J),sA($,J),{providerId:J,settingsPath:$.getFilePath(),modelsPath:Q}}async function NZ($){let f=$.read(),J=N0.getProviderIds(),Q=await Promise.all(J.map(async(W)=>{let[j,X]=await Promise.all([N0.getProvider(W),N0.getModelsForProvider(W)]),H=nA(X),Y=f.providers[W]?.settings,V=j?.name??iA(W),A=Qq(j?.capabilities,Y?.capabilities);return{provider:{id:W,name:V,models:H.length,color:$q(W),letter:eM(V),enabled:Boolean(Y),apiKey:Y?sM(Y):void 0,oauthAccessTokenPresent:Y?oM(Y):void 0,baseUrl:Y?.baseUrl??j?.baseUrl,defaultModelId:j?.defaultModelId,protocol:Y?.protocol??j?.protocol,client:Y?.client??j?.client,capabilities:A,authDescription:"This provider uses API keys for authentication.",baseUrlDescription:"The base endpoint to use for provider requests.",modelList:H},rank:Zq(j?.metadata)}}));return Q.sort((W,j)=>{if(W.rank!==j.rank)return W.rank-j.rank;return W.provider.name.localeCompare(j.provider.name)||W.provider.id.localeCompare(j.provider.id)}),{providers:Q.map((W)=>W.provider),settingsPath:$.getFilePath()}}async function TZ($,f){let J=$.trim(),Q=await fq(J,f),Z=nA(Q);return{providerId:J,models:Z}}function MZ($,f){let J=f.providerId.trim();if(f.enabled===!1){let W=$.read();if(delete W.providers[J],W.lastUsedProvider===J)delete W.lastUsedProvider;return $.write(W),{providerId:J,enabled:!1,settingsPath:$.getFilePath()}}let Z={...$.getProviderSettings(J)??{},provider:J};for(let W of["apiKey","baseUrl","model","region"])if(Object.hasOwn(f,W)&&typeof f[W]==="string")if(f[W].trim().length===0)delete Z[W];else Z[W]=f[W];for(let W of["maxTokens","contextWindow","timeout","apiLine","protocol","client","routingProviderId","capabilities"])if(Object.hasOwn(f,W))Z[W]=f[W];for(let W of["auth","headers","reasoning","aws","gcp","azure","sap","oca"])if(Object.hasOwn(f,W)&&f[W]!=null)Z[W]={...typeof Z[W]==="object"&&Z[W]!=null?Z[W]:{},...f[W]};return $.saveProviderSettings(Z,{setLastUsed:!1}),{providerId:J,enabled:!0,settingsPath:$.getFilePath()}}async function qZ($,f){let J=f.trim(),Q=$.getProviderSettings(J),W=N0.MODEL_COLLECTIONS_BY_PROVIDER_ID[J]?.provider,j=Q?.baseUrl?.trim()||W?.baseUrl?.trim(),X=pf(j,W?.baseUrl,W?.modelsSourceUrl);if(!Q||!W||!j||!X)return{providerId:J,refreshed:!1};let H=await T5($,{providerId:J,name:W.name,baseUrl:j,apiKey:Q.apiKey,headers:Q.headers??null,timeoutMs:Q.timeout??null,modelsSourceUrl:X,protocol:Q.protocol??W.protocol??null,client:Q.client??W.client??null,capabilities:Q.capabilities??null});return{providerId:J,refreshed:!0,modelsCount:H.modelsCount}}function yZ($){let f=$.trim().toLowerCase();if(f==="codex"||f==="openai-codex")return"openai-codex";if(f==="cline"||f==="oca")return f;throw Error(`provider "${$}" does not support OAuth login (supported: cline, oca, openai-codex)`)}function Wq($,f){if($==="cline")return f.access.startsWith("workos:")?f.access:`workos:${f.access}`;return f.access}async function wZ($,f,J,Q){let Z=I4({onPrompt:async(W)=>W.defaultValue??"",openUrl:J,onOpenUrlError:({error:W})=>{throw W instanceof Error?W:Error(String(W))}});if($==="cline")return a2({apiBaseUrl:f?.baseUrl?.trim()||tM().apiBaseUrl,useWorkOSDeviceAuth:!0,callbacks:Z,telemetry:Q});if($==="oca")return c2({mode:f?.oca?.mode,callbacks:Z,telemetry:Q});return t2({onAuth:Z.onAuth,onPrompt:Z.onPrompt,onProgress:Z.onProgress,onManualCodeInput:Z.onManualCodeInput,telemetry:Q})}function SZ($,f,J,Q){let Z={...J?.auth??{},accessToken:Wq(f,Q),refreshToken:Q.refresh,accountId:Q.accountId,expiresAt:Q.expires},W={...J??{provider:f},provider:f,auth:Z};return $.saveProviderSettings(W,{tokenSource:"oauth"}),W}function CZ($){let f=$?.auth?.accessToken?.trim()||$?.apiKey?.trim();return f&&f.length>0?f:void 0}var eA={};y(eA,{getProviderConfigFields:()=>hZ});import*as q5 from"@cline/llms";import{isOAuthProviderId as jq}from"@cline/shared";var Xq=["apiKey","baseUrl","awsRegion","awsProfile"],Hq={bedrock:{mode:"replace",description:"AWS region is required for Bedrock. It can be auto-filled from AWS_REGION, AWS_DEFAULT_REGION, or ~/.aws/config.",fields:{awsRegion:{label:"AWS Region",placeholder:"us-east-1"},apiKey:{label:"AWS Bedrock API Key (optional)",placeholder:"Leave blank to use AWS profile/default chain",optional:!0},awsProfile:{label:"AWS Profile Name (optional)",placeholder:"default",optional:!0}}},ollama:{fields:{apiKey:{note:"Keep empty if no API key for local inference."}}}};function Yq($,f){let J={};for(let Q of Xq){let Z=$[Q],W=f[Q];if(Z||W)J[Q]={...Z,...W}}return J}function Vq($){let f=Hq[$.providerId];if(!f)return $;return{...$,description:f.description??$.description,fields:f.mode==="replace"?f.fields:Yq($.fields,f.fields)}}var Aq=new Set(["ollama","lmstudio","litellm","openai-compatible"]);function Bq($,f){if(!f?.provider.baseUrl)return!1;if(f.provider.source!=="system")return!0;return Aq.has($)}function hZ($){let f=q5.normalizeProviderId($);if(jq(f))return{providerId:f,authMethod:"oauth",fields:{}};let J=q5.MODEL_COLLECTIONS_BY_PROVIDER_ID[f];if(J?.provider.capabilities?.includes("local-auth"))return{providerId:f,authMethod:"local",fields:{}};let Q=J?.provider.baseUrl,Z={apiKey:{}};if(Bq(f,J))Z.baseUrl={defaultValue:Q};return Vq({providerId:f,authMethod:"api-key",fields:Z})}var ZB={};y(ZB,{resolveLegacyClineAuth:()=>QB,migrateLegacyProviderSettings:()=>u6});import{existsSync as Gq,readFileSync as Kq}from"node:fs";import{dirname as Fq,join as EZ}from"node:path";import*as w5 from"@cline/llms";import{resolveClineDataDir as Pq}from"@cline/shared/storage";var y5="openai",JB=w5.BUILT_IN_PROVIDER.OPENAI_COMPATIBLE,$B=128000;function QB($){let f=$?.trim();if(!f)return;try{let J=JSON.parse(f);if(!J)return;return{accessToken:J.idToken,refreshToken:J.refreshToken,expiresAt:J.expiresAt,accountId:J.userInfo?.id}}catch{return}}function k($){let f=$?.trim();return f?f:void 0}function fB($){if(!Gq($))return;try{let f=Kq($,"utf8"),J=JSON.parse(f);if(J&&typeof J==="object"&&!Array.isArray(J))return J}catch{}return}function Uq($){let f=$.dataDir??Pq(),J=$.globalStatePath??EZ(f,"globalState.json"),Q=$.secretsPath??EZ(f,"secrets.json"),Z=fB(J),W=fB(Q);if(!Z&&!W)return;return{globalState:Z??{},secrets:W??{}}}function bZ($){if($===y5)return JB;return $}function Dq($,f,J,Q){let Z=J==="plan"?"planMode":"actMode",W=f===Q?k(J==="plan"?$.planModeApiModelId:$.actModeApiModelId):void 0,X={openrouter:`${Z}OpenRouterModelId`,cline:`${Z}ClineModelId`,openai:`${Z}OpenAiModelId`,ollama:`${Z}OllamaModelId`,lmstudio:`${Z}LmStudioModelId`,litellm:`${Z}LiteLlmModelId`,requesty:`${Z}RequestyModelId`,together:`${Z}TogetherModelId`,fireworks:`${Z}FireworksModelId`,sapaicore:`${Z}SapAiCoreModelId`,groq:`${Z}GroqModelId`,baseten:`${Z}BasetenModelId`,huggingface:`${Z}HuggingFaceModelId`,"huawei-cloud-maas":`${Z}HuaweiCloudMaasModelId`,oca:`${Z}OcaModelId`,aihubmix:`${Z}AihubmixModelId`,hicap:`${Z}HicapModelId`,nousResearch:`${Z}NousResearchModelId`,"vercel-ai-gateway":`${Z}VercelAiGatewayModelId`}[f];return(X?k(typeof $[X]==="string"?$[X]:void 0):void 0)??W}function Rq($,f,J){let Q=J==="plan"?$.planModeReasoningEffort:$.actModeReasoningEffort,Z=J==="plan"?$.geminiPlanModeThinkingLevel:$.geminiActModeThinkingLevel,W=J==="plan"?$.planModeThinkingBudgetTokens:$.actModeThinkingBudgetTokens,j=(f==="gemini"?Z:void 0)??Q,X=j==="none"||j==="low"||j==="medium"||j==="high"?j:void 0,H=typeof W==="number"&&Number.isInteger(W)&&W>0?W:void 0;if(!X&&H===void 0)return;return{...X?{effort:X}:{},...H!==void 0?{budgetTokens:H}:{}}}function Lq($){let f=$["openai-codex-oauth-credentials"];if(!f)return;try{let J=JSON.parse(f),Q=k(J.access_token),Z=k(J.refresh_token),W=k(J.accountId);if(!Q&&!Z&&!W)return;return{...Q?{apiKey:Q}:{},auth:{...Q?{accessToken:Q}:{},...Z?{refreshToken:Z}:{},...W?{accountId:W}:{}}}}catch{return}}function Oq($){let f=w5.getGeneratedModelsForProvider($);return Object.keys(f)[0]??void 0}function zq($,f,J,Q){let Z=bZ($),W=k(Q==="plan"?f.planModeApiProvider:f.actModeApiProvider),j=Dq(f,$,Q,W)??Oq(Z),X=Rq(f,Z,Q),H=typeof f.requestTimeoutMs==="number"&&Number.isInteger(f.requestTimeoutMs)&&f.requestTimeoutMs>0?f.requestTimeoutMs:void 0,Y={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($==="openai-codex")Object.assign(V,Lq(J));if($==="cline")try{let P=k(J["cline:clineAccountId"]);if(P)V.auth={...V.auth??{},...QB(P)}}catch{}if($===y5&&f.openAiHeaders)V.headers=f.openAiHeaders;if($==="bedrock"){let P=f.awsAuthentication==="profile"||f.awsUseProfile===!0;V.aws={accessKey:k(J.awsAccessKey),secretKey:k(J.awsSecretKey),sessionToken:k(J.awsSessionToken),region:k(f.awsRegion),authentication:f.awsAuthentication,profile:P?k(f.awsProfile):void 0,usePromptCache:f.awsBedrockUsePromptCache,useCrossRegionInference:f.awsUseCrossRegionInference,useGlobalInference:f.awsUseGlobalInference,endpoint:k(f.awsBedrockEndpoint),customModelBaseId:k(Q==="plan"?f.planModeAwsBedrockCustomModelBaseId:f.actModeAwsBedrockCustomModelBaseId)}}if($==="vertex")V.gcp={projectId:k(f.vertexProjectId),region:k(f.vertexRegion)};if($===y5&&(f.azureApiVersion||f.azureIdentity!==void 0))V.azure={apiVersion:k(f.azureApiVersion),useIdentity:f.azureIdentity};if($==="sapaicore")V.sap={clientId:k(J.sapAiCoreClientId),clientSecret:k(J.sapAiCoreClientSecret),tokenUrl:k(f.sapAiCoreTokenUrl),resourceGroup:k(f.sapAiResourceGroup),deploymentId:k(Q==="plan"?f.planModeSapAiCoreDeploymentId:f.actModeSapAiCoreDeploymentId),useOrchestrationMode:f.sapAiCoreUseOrchestrationMode};if($==="oca"){V.oca={mode:f.ocaMode};let P=k(J.ocaRefreshToken);if(P)V.auth={...V.auth??{},refreshToken:P}}if($==="qwen")V.apiLine=f.qwenApiLine;if($==="moonshot")V.apiLine=f.moonshotApiLine;if($==="zai")V.apiLine=f.zaiApiLine;if($==="minimax")V.apiLine=f.minimaxApiLine;let A={anthropic:f.anthropicBaseUrl,openai:f.openAiBaseUrl,ollama:f.ollamaBaseUrl,lmstudio:f.lmStudioBaseUrl,litellm:f.liteLlmBaseUrl,gemini:f.geminiBaseUrl,requesty:f.requestyBaseUrl,asksage:f.asksageApiUrl,dify:f.difyBaseUrl,oca:f.ocaBaseUrl,aihubmix:f.aihubmixBaseUrl,sapaicore:f.sapAiCoreBaseUrl},B=k(Y[$]),G=k(A[$]),K={provider:Z,...B?{apiKey:B}:{},...j?{model:j}:{},...G?{baseUrl:G}:{},...X?{reasoning:X}:{},...H?{timeout:H}:{},...V},D=S4.safeParse(K);if(!D.success)return;return Object.keys(K).filter((P)=>P!=="provider").length>0?D.data:void 0}function _q($,f){if($!==JB)return;if(!f.baseUrl||!f.model)return;return{provider:{name:"OpenAI Compatible",baseUrl:f.baseUrl,defaultModelId:f.model},models:{[f.model]:{id:f.model,name:f.model,contextWindow:$B,maxInputTokens:$B,capabilities:["streaming","tools","images"]}}}}function Nq($,f){let J=new Set;for(let Q of[$.actModeApiProvider,$.planModeApiProvider]){let Z=k(Q);if(Z)J.add(Z)}if(k(f.apiKey))J.add("anthropic");if(k(f.openRouterApiKey))J.add("openrouter");if(k(f.openAiApiKey))J.add(y5);if(k(f.openAiNativeApiKey))J.add("openai-native");if(k(f["openai-codex-oauth-credentials"]))J.add("openai-codex");if(k(f.geminiApiKey))J.add("gemini");if(k(f.ollamaApiKey))J.add("ollama");if(k(f.awsAccessKey)||k(f.awsBedrockApiKey)||$.awsAuthentication!==void 0||$.awsUseProfile===!0||k($.awsProfile))J.add("bedrock");if(k($.vertexProjectId)||k($.vertexRegion))J.add("vertex");if(k(f.clineApiKey))J.add("cline");if(k(f.ocaApiKey))J.add("oca");return J}function u6($){let f=$.providerSettingsManager.read(),J=Uq($);if(!J)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let{globalState:Q,secrets:Z}=J,W=Q.mode==="plan"?"plan":"act",j=Nq(Q,Z),X=J1();X.providers={...f.providers},X.lastUsedProvider=f.lastUsedProvider;let H=new Date().toISOString(),Y=0,V=EZ(Fq($.providerSettingsManager.getFilePath()),"models.json"),A=LZ(V),B=0;for(let D of j){let F=bZ(D);if(X.providers[F])continue;let P=zq(D,Q,Z,W);if(!P)continue;X.providers[F]={settings:P,updatedAt:H,tokenSource:"migration"},Y+=1;let U=_q(F,P);if(U&&!A.providers[F])A.providers[F]=U,B+=1}if(Y===0&&B===0)return{migrated:!1,providerCount:Object.keys(f.providers).length,lastUsedProvider:f.lastUsedProvider};let G=k(W==="plan"?Q.planModeApiProvider:Q.actModeApiProvider),K=G?bZ(G):void 0;if(X.lastUsedProvider=f.lastUsedProvider??(K&&X.providers[K]?K:Object.keys(X.providers)[0]),$.providerSettingsManager.write(X),B>0)gA(V,A);return{migrated:Y>0||B>0,providerCount:Object.keys(X.providers).length,lastUsedProvider:X.lastUsedProvider}}L0();X5();var WB={};y(WB,{FileTeamPersistenceStore:()=>S5});import{appendFileSync as Tq,existsSync as kZ,mkdirSync as Mq,readFileSync as qq,renameSync as yq,unlinkSync as wq,writeFileSync as Sq}from"node:fs";import{join as IZ}from"node:path";import{resolveTeamDataDir as Cq}from"@cline/shared/storage";function hq($){return $.toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}class S5{dirPath;statePath;taskHistoryPath;teammateSpecs=new Map;constructor($){let f=hq($.teamName),J=$.baseDir?.trim()||Cq();this.dirPath=IZ(J,f),this.statePath=IZ(this.dirPath,"state.json"),this.taskHistoryPath=IZ(this.dirPath,"task-history.jsonl")}loadState(){if(!kZ(this.statePath))return;try{let $=qq(this.statePath,"utf8"),f=JSON.parse($);if(f.version!==1||!f.teamState)return;for(let J of f.teammates??[])this.teammateSpecs.set(J.agentId,J);return HV(f.teamState)}catch{return}}getTeammateSpecs(){return Array.from(this.teammateSpecs.values())}upsertTeammateSpec($){this.teammateSpecs.set($.agentId,$)}removeTeammateSpec($){this.teammateSpecs.delete($)}persist($){if(!this.hasPersistableState($)){this.clearPersistedState();return}this.ensureDir();let f={version:1,updatedAt:new Date().toISOString(),teamState:$.exportState(),teammates:Array.from(this.teammateSpecs.values())},J=`${this.statePath}.tmp`;Sq(J,`${JSON.stringify(f,null,2)}
|
|
716
|
+
`,"utf8"),yq(J,this.statePath)}appendTaskHistory($){let f={};switch($.type){case"team_task_updated":f=$.task;break;case"team_message":f={agentId:$.message.fromAgentId,toAgentId:$.message.toAgentId,subject:$.message.subject,taskId:$.message.taskId};break;case"team_mission_log":f={agentId:$.entry.agentId,kind:$.entry.kind,summary:$.entry.summary,taskId:$.entry.taskId};break;case"teammate_spawned":case"teammate_shutdown":case"task_start":f={agentId:$.agentId,message:"message"in $?$.message:void 0};break;case"task_end":f={agentId:$.agentId,finishReason:$.result?.finishReason,error:$.error?.message};break;case"agent_event":f={agentId:$.agentId,eventType:$.event.type};break}this.ensureDir(),Tq(this.taskHistoryPath,`${JSON.stringify({ts:new Date().toISOString(),type:$.type,task:f})}
|
|
717
|
+
`,"utf8")}ensureDir(){if(!kZ(this.dirPath))Mq(this.dirPath,{recursive:!0})}hasPersistableState($){let f=$.exportState();if(this.teammateSpecs.size>0)return!0;if(f.members.some((J)=>J.role==="teammate"))return!0;return f.tasks.length>0||f.mailbox.length>0||f.missionLog.length>0}clearPersistedState(){if(kZ(this.statePath))wq(this.statePath)}}var jB={};y(jB,{ChatViewStateSchema:()=>xZ,ChatSummarySchema:()=>k5,ChatSessionStatusSchema:()=>h5,ChatSessionConfigSchema:()=>C5,ChatMessageSchema:()=>b5,ChatMessageRoleSchema:()=>E5});import{z as C}from"zod";var C5=C.object({workspaceRoot:C.string().min(1),cwd:C.string().optional(),provider:C.string().min(1),model:C.string().min(1),mode:C.enum(["act","plan"]).default("act"),apiKey:C.string(),systemPrompt:C.string().optional(),rules:C.string().optional(),maxIterations:C.number().int().positive().optional(),enableTools:C.boolean(),enableSpawn:C.boolean().optional(),enableTeams:C.boolean().optional(),autoApproveTools:C.boolean().optional(),missionStepInterval:C.number().int().positive().optional(),missionTimeIntervalMs:C.number().int().positive().optional()}),h5=C.enum(["idle","starting","running","pending","stopping","completed","cancelled","failed","error"]),E5=C.enum(["user","assistant","tool","system","status","error"]),b5=C.object({id:C.string().min(1),sessionId:C.string().nullable(),role:E5,content:C.string(),createdAt:C.number().int().nonnegative(),meta:C.object({stream:C.enum(["stdout","stderr"]).optional(),toolName:C.string().optional(),iteration:C.number().int().nonnegative().optional(),agentId:C.string().optional(),conversationId:C.string().optional(),hookEventName:C.string().optional(),inputTokens:C.number().int().nonnegative().optional(),outputTokens:C.number().int().nonnegative().optional(),checkpoint:C.object({ref:C.string(),createdAt:C.number().int().nonnegative(),runCount:C.number().int().positive(),kind:C.enum(["stash","commit"]).optional()}).optional()}).optional()}),k5=C.object({toolCalls:C.number().int().nonnegative(),tokensIn:C.number().int().nonnegative(),tokensOut:C.number().int().nonnegative()}),xZ=C.object({sessionId:C.string().nullable(),status:h5,config:C5,messages:C.array(b5),rawTranscript:C.string(),error:C.string().nullable(),summary:k5});var XB={};y(XB,{CORE_BUILD_VERSION:()=>mZ});var mZ=AY;import{Agent as Ky,createAgentRuntime as Fy}from"@cline/agents";var YB={};y(YB,{fetchClineRecommendedModels:()=>gZ,FALLBACK_CLINE_RECOMMENDED_MODELS:()=>I5});import{getClineEnvironmentConfig as Eq}from"@cline/shared";var bq=5000,I5={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 kq($){return{recommended:$.recommended.map((f)=>({...f,tags:[...f.tags]})),free:$.free.map((f)=>({...f,tags:[...f.tags]}))}}function HB($){if(!$||typeof $!=="object")return null;let f=$;if(typeof f.id!=="string"||f.id.length===0)return null;return{id:f.id,name:typeof f.name==="string"&&f.name.length>0?f.name:f.id,description:typeof f.description==="string"?f.description:"",tags:Array.isArray(f.tags)?f.tags.filter((J)=>typeof J==="string"):[]}}function Iq($){if(!$||typeof $!=="object")return null;let f=$,J=Array.isArray(f.recommended)?f.recommended:[],Q=Array.isArray(f.free)?f.free:[],Z=J.map(HB).filter((j)=>j!==null),W=Q.map(HB).filter((j)=>j!==null);if(Z.length===0&&W.length===0)return null;return{recommended:Z,free:W}}function xq($){let f=$.baseUrl?.trim();if(f)return f;let J=Eq().apiBaseUrl;try{return($.providerSettingsManager??new G$).getProviderSettings("cline")?.baseUrl?.trim()||J}catch{return J}}async function mq($,f,J){let Q=new AbortController,Z=setTimeout(()=>Q.abort(),J);try{return await $(f,{signal:Q.signal})}finally{clearTimeout(Z)}}async function gZ($={}){try{let f=xq($),J=$.fetchImpl??fetch,Q=await mq(J,`${f}/api/v1/ai/cline/recommended-models`,$.timeoutMs??bq);if(!Q.ok)throw Error(`HTTP ${Q.status}`);let Z=await Q.json(),W=Iq(Z);if(W)return W}catch{}return kq(I5)}var VB={};y(VB,{loadLlmsConfigFromFile:()=>uZ,defineLlmsConfig:()=>vZ});import{readFile as gq}from"node:fs/promises";import vq from"node:path";function vZ($){return $}async function uZ($){let f=vq.resolve($),J=await gq(f,"utf8"),Q;try{Q=JSON.parse(J)}catch(Z){let W=Z instanceof Error?Z.message:String(Z);throw Error(`Failed to parse JSON config at "${f}": ${W}`)}return uq(Q,f)}function uq($,f){if(!$||typeof $!=="object")throw Error(`Invalid llms config in "${f}": expected an object.`);let Q=$.providers;if(!Array.isArray(Q))throw Error(`Invalid llms config in "${f}": "providers" must be an array.`);if(!Q.length)throw Error(`Invalid llms config in "${f}": "providers" cannot be empty.`);return $}var PB={};y(PB,{createLlmsSdk:()=>dZ,DefaultLlmsSdk:()=>c6});import{BUILT_IN_PROVIDER_IDS as GB,createHandler as lq,createHandlerAsync as pq,getProviderCollection as rq,hasProvider as KB,registerAsyncHandler as iq,registerHandler as nq,registerModel as aq,registerProvider as FB}from"@cline/llms";function AB($){return $?{...$}:{}}function cq($,f){if($)return $;if(!f)return;let J=globalThis.process;if(!J?.env)return;return J.env[f]}function dq($,f){if(!f.length)throw Error(`Provider "${$}" must include at least one model.`)}function BB($){let f=Object.keys($.collection.models);return{id:$.collection.provider.id,name:$.collection.provider.name,description:$.collection.provider.description,protocol:$.collection.provider.protocol,baseUrl:$.collection.provider.baseUrl,capabilities:$.collection.provider.capabilities,env:$.collection.provider.env,models:f,defaultModel:$.collection.provider.defaultModelId,modelCount:f.length}}class cZ{providers=new Map;register($){dq($.id,$.models);let f=$.defaultModel??$.models[0];if(!f)throw Error(`Provider "${$.id}" must define a default model.`);if(!$.models.includes(f))throw Error(`Default model "${f}" is not included in configured models for "${$.id}".`);let J=this.providers.get($.id);this.providers.set($.id,{id:$.id,models:new Set([...J?.models??[],...$.models]),defaultModel:f,defaults:{...J?.defaults??{},...AB($.defaults)}})}registerSelectionConfig($){this.register({id:$.id,models:$.models,defaultModel:$.defaultModel,defaults:{apiKey:cq($.apiKey,$.apiKeyEnv),routingProviderId:$.builtinProviderId,baseUrl:$.baseUrl,headers:$.headers,timeoutMs:$.timeoutMs,capabilities:$.capabilities,...AB($.settings)}})}registerModel($,f){let J=this.providers.get($);if(!J){this.providers.set($,{id:$,models:new Set([f]),defaultModel:f,defaults:{}});return}J.models.add(f)}createHandlerConfig($){let f=this.require($.providerId),J=$.modelId??f.defaultModel;if(!f.models.has(J))throw Error(`Model "${J}" is not configured for provider "${$.providerId}".`);return{providerId:$.providerId,modelId:J,...f.defaults,...$.overrides}}list(){return Array.from(this.providers.values()).map(($)=>({id:$.id,models:Array.from($.models),defaultModel:$.defaultModel}))}getModels($){return Array.from(this.require($).models)}hasProvider($){return this.providers.has($)}hasModel($,f){return this.providers.get($)?.models.has(f)??!1}require($){let f=this.providers.get($);if(!f)throw Error(`Provider "${$}" is not configured in this SDK instance.`);return f}}class c6{configuredProviders=new cZ;constructor($){this.applyConfig($)}createHandler($){return lq(this.configuredProviders.createHandlerConfig($))}async createHandlerAsync($){return pq(this.configuredProviders.createHandlerConfig($))}registerProvider($){if(FB($.collection),$.handlerFactory&&$.asyncHandlerFactory)throw Error(`Provider "${$.collection.provider.id}" cannot register both sync and async handlers.`);if($.handlerFactory)nq($.collection.provider.id,$.handlerFactory);if($.asyncHandlerFactory)iq($.collection.provider.id,$.asyncHandlerFactory);this.configuredProviders.register({id:$.collection.provider.id,models:$.exposeModels??Object.keys($.collection.models),defaultModel:$.defaultModel??$.collection.provider.defaultModelId,defaults:$.defaults})}registerBuiltinProvider($){let f=$.exposeModels??Object.keys($.models),J=$.defaultModel??f[0];if(!J)throw Error(`Provider "${$.id}" must define a default model.`);FB({provider:{id:$.id,name:$.name??$.id,description:$.description,protocol:$.protocol,baseUrl:$.baseUrl,defaultModelId:J,client:$.client??"openai-compatible",capabilities:$.capabilities,env:$.env,source:"system"},models:$.models}),this.configuredProviders.register({id:$.id,models:f,defaultModel:J,defaults:{routingProviderId:$.builtinProviderId,...$.defaults??{}}})}registerModel($){aq($.providerId,$.modelId,$.info),this.configuredProviders.registerModel($.providerId,$.modelId)}getProviders(){return this.configuredProviders.list()}getBuiltInProviderIds(){return[...GB]}async getBuiltInProviders(){return(await Promise.all(GB.map((f)=>rq(f)))).filter((f)=>f!==void 0).map((f)=>BB({collection:f}))}getModels($){return this.configuredProviders.getModels($)}isProviderConfigured($){return this.configuredProviders.hasProvider($)}isModelConfigured($,f){return this.configuredProviders.hasModel($,f)}applyConfig($){for(let f of $.providers)this.configuredProviders.registerSelectionConfig(f);for(let f of $.models??[])this.registerModel(f);for(let f of $.customProviders??[])this.registerProvider(f);for(let f of this.configuredProviders.list()){let J=KB(f.id),Q=this.configuredProviders.createHandlerConfig({providerId:f.id,modelId:f.defaultModel}).routingProviderId,Z=typeof Q==="string"&&KB(Q);if(!J&&!Z)throw Error(`Provider "${f.id}" is not known. Register it through customProviders/registerProvider, registerBuiltinProvider, or use a built-in provider ID.`)}}}function dZ($){return new c6($)}gQ();async function tq(){return Promise.resolve().then(() => (XZ(),_A))}function Ly(){return new Date().toISOString()}function Oy($){if(LB($)!=="providers.json")return;let f=pZ($);if(LB(f)!=="settings")return;return pZ(f)}class G${filePath;dataDir;constructor($={}){if(this.filePath=$.filePath??Ry(),this.dataDir=$.dataDir??Oy(this.filePath),this.dataDir||!$.filePath)u6({providerSettingsManager:this,dataDir:this.dataDir});if(rA(this),_5(this.read()),lZ(this.filePath))try{RB(this.filePath,384)}catch{}}getFilePath(){return this.filePath}read(){if(!lZ(this.filePath))return J1();try{let $=Uy(this.filePath,"utf8"),f=JSON.parse($),J=p2.safeParse(f);if(J.success)return _5(J.data),J.data}catch{}return J1()}write($){let f=p2.parse($),J=pZ(this.filePath);if(!lZ(J))Py(J,{recursive:!0,mode:448});Dy(this.filePath,`${JSON.stringify(f,null,2)}
|
|
718
|
+
`,"utf8");try{RB(this.filePath,384)}catch{}_5(f)}saveProviderSettings($,f={}){let J=S4.parse($),Q=this.read(),Z=J.provider,W=f.setLastUsed!==!1,j=Q.providers[Z],X=f.tokenSource??j?.tokenSource??"manual",H={...Q,providers:{...Q.providers,[Z]:{settings:J,updatedAt:Ly(),tokenSource:X}},lastUsedProvider:W?Z:Q.lastUsedProvider};return this.write(H),H}getProviderSettings($){return this.read().providers[$]?.settings}getLastUsedProviderSettings(){let $=this.read(),f=$.lastUsedProvider;if(!f)return;return $.providers[f]?.settings}getProviderConfig($,f){let J=this.getProviderSettings($);if(!J)return;return g0(J,f)}getLastUsedProviderConfig($){let f=this.getLastUsedProviderSettings();if(!f)return;return g0(f,$)}async refreshCatalog(){try{await d2({})}catch{}}}L0();eJ();import{getClineEnvironmentConfig as zy,isOAuthProviderId as _y}from"@cline/shared";var rZ="workos:";function Ny($,f){if($==="cline")return`${rZ}${f}`;return f}function Ty($,f){if($==="cline"&&f.toLowerCase().startsWith(rZ))return f.slice(rZ.length);return f}function My($){let J=O0($)?.exp;if(typeof J==="number"&&J>0)return J*1000;return null}function qy($,f){let J=$.auth?.expiresAt;if(typeof J==="number"&&Number.isFinite(J)&&J>0)return J;let Q=My(f);if(Q)return Q;return Date.now()-1}function yy($,f){let J=f.auth?.accessToken?.trim(),Q=f.auth?.refreshToken?.trim();if(!J||!Q)return null;let Z=Ty($,J);if(!Z)return null;return{access:Z,refresh:Q,expires:qy(f,Z),accountId:f.auth?.accountId}}function wy($,f){let J=$?.expiresAt,Q=f?.expiresAt;return $?.accessToken===f?.accessToken&&$?.refreshToken===f?.refreshToken&&$?.accountId===f?.accountId&&J===Q}class x5 extends Error{providerId;constructor($){super(`OAuth credentials for provider "${$}" are no longer valid. Re-run authentication for this provider.`);this.name="OAuthReauthRequiredError",this.providerId=$}}class iZ{providerSettingsManager;telemetry;refreshInFlight=new Map;constructor($){this.providerSettingsManager=$?.providerSettingsManager??new G$,this.telemetry=$?.telemetry}async resolveProviderApiKey($){if(!_y($.providerId))return null;return this.resolveWithSingleFlight($.providerId,$.forceRefresh)}async resolveWithSingleFlight($,f=!1){let J=this.refreshInFlight.get($);if(J)return J;let Q=this.resolveProviderApiKeyInternal($,f).catch((Z)=>{throw Z}).finally(()=>{this.refreshInFlight.delete($)});return this.refreshInFlight.set($,Q),Q}async resolveProviderApiKeyInternal($,f){let J=this.providerSettingsManager.getProviderSettings($);if(!J)return null;let Q=yy($,J);if(!Q)return null;let Z=await this.resolveCredentials($,J,Q,f);if(!Z)throw new x5($);let W=Ny($,Z.access),j={...J.auth??{},accessToken:W,refreshToken:Z.refresh,accountId:Z.accountId};j.expiresAt=Z.expires;let X={...J,auth:j},H=!wy(J.auth,X.auth);if(H)this.providerSettingsManager.saveProviderSettings(X,{setLastUsed:!1,tokenSource:"oauth"});return{providerId:$,apiKey:W,accountId:Z.accountId,refreshed:H}}async resolveCredentials($,f,J,Q){if($==="cline")return m4(J,{apiBaseUrl:f.baseUrl?.trim()||zy().apiBaseUrl,telemetry:this.telemetry},{forceRefresh:Q});if($==="oca")return N4(J,{forceRefresh:Q,telemetry:this.telemetry},{mode:f.oca?.mode,telemetry:this.telemetry});return v4(J,{forceRefresh:Q,telemetry:this.telemetry})}}import{normalizeUserInput as Sy}from"@cline/shared";import{nanoid as Cy}from"nanoid";class OB{list($){return $?n0($):[]}update($,f){if(!$)return{sessionId:f.sessionId,prompts:[],updated:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((H)=>H.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:n0($),updated:!1};let Z=$.pendingPrompts[Q];if(!Z)return{sessionId:f.sessionId,prompts:n0($),updated:!1};let W=f.prompt===void 0?Z.prompt:Sy(f.prompt).trim();if(!W)throw Error("prompt cannot be empty");let j=f.delivery??Z.delivery,X={...Z,prompt:W,mode:f.mode??Z.mode,delivery:j};return $.pendingPrompts.splice(Q,1),hy($,X,Q,Z.delivery),{sessionId:f.sessionId,prompts:n0($),prompt:m5(X),updated:!0}}delete($,f){if(!$)return{sessionId:f.sessionId,prompts:[],removed:!1};let J=f.promptId.trim(),Q=$.pendingPrompts.findIndex((W)=>W.id===J);if(Q<0)return{sessionId:f.sessionId,prompts:n0($),removed:!1};let[Z]=$.pendingPrompts.splice(Q,1);return{sessionId:f.sessionId,prompts:n0($),prompt:Z?m5(Z):void 0,removed:!0}}enqueue($,f){let{prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j}=f,X=$.pendingPrompts.findIndex((H)=>H.prompt===J);if(X>=0){let[H]=$.pendingPrompts.splice(X,1),Y={...H,prompt:J,mode:Q??H.mode,userImages:W??H.userImages,userFiles:j??H.userFiles};if(Z==="steer"||H.delivery==="steer")$.pendingPrompts.unshift({...Y,delivery:"steer"});else $.pendingPrompts.push(Y)}else{let H={id:`pending_${Date.now()}_${Cy(5)}`,prompt:J,mode:Q,delivery:Z,userImages:W,userFiles:j};if(Z==="steer")$.pendingPrompts.unshift(H);else $.pendingPrompts.push(H)}return n0($)}consumeSteer($){let f=$.pendingPrompts.findIndex((Q)=>Q.delivery==="steer");if(f<0)return{prompts:n0($)};let[J]=$.pendingPrompts.splice(f,1);return{entry:J,prompts:n0($)}}shiftNext($){return{entry:$.pendingPrompts.shift(),prompts:n0($)}}requeueFront($,f){return $.pendingPrompts.unshift(f),n0($)}clear($){return $.pendingPrompts.length=0,[]}}class nZ{deps;service=new OB;constructor($){this.deps=$}list($){return this.service.list(this.deps.getSession($))}update($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],updated:!1};let J=this.service.update(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}delete($){let f=this.deps.getSession($.sessionId);if(!f||f.aborting)return{sessionId:$.sessionId,prompts:[],removed:!1};let J=this.service.delete(f,$);return this.emitPrompts(f),this.scheduleDrain($.sessionId,f),J}enqueue($,f){let J=this.deps.getSession($);if(!J||J.aborting)return;this.service.enqueue(J,f),this.emitPrompts(J),this.scheduleDrain($,J)}consumeSteer($){let f=this.deps.getSession($);if(!f)return;let{entry:J}=this.service.consumeSteer(f);if(!J)return;return this.emitPrompts(f),this.emitSubmitted(f,J),J}clearAborted($){if($.pendingPrompts.length===0)return;this.service.clear($),this.emitPrompts($)}emitPrompts($){this.deps.emit({type:"pending_prompts",payload:{sessionId:$.sessionId,prompts:n0($)}})}scheduleDrain($,f){if(f.pendingPrompts.length===0||f.aborting||f.drainingPendingPrompts||!f.agent.canStartRun())return;queueMicrotask(()=>{this.drain($)})}async drain($){let f=this.deps.getSession($);if(!f)return;if(f.aborting||f.drainingPendingPrompts)return;if(!f.agent.canStartRun())return;let{entry:J}=this.service.shiftNext(f);if(!J)return;this.emitPrompts(f),this.emitSubmitted(f,J),f.drainingPendingPrompts=!0;let Q=!0;try{await this.deps.send({sessionId:$,prompt:J.prompt,...J.mode?{mode:J.mode}:{},userImages:J.userImages,userFiles:J.userFiles})}catch{Q=!1,this.service.requeueFront(f,J),this.emitPrompts(f)}finally{if(f.drainingPendingPrompts=!1,Q&&f.pendingPrompts.length>0&&f.status!=="failed"&&f.status!=="cancelled")queueMicrotask(()=>{this.drain($)})}}emitSubmitted($,f){let J=m5(f);this.deps.emit({type:"pending_prompt_submitted",payload:{sessionId:$.sessionId,id:J.id,prompt:J.prompt,delivery:J.delivery,attachmentCount:J.attachmentCount}})}}function m5($){return{id:$.id,prompt:$.prompt,delivery:$.delivery,attachmentCount:($.userImages?.length??0)+($.userFiles?.length??0)}}function n0($){return $.pendingPrompts.map(m5)}function hy($,f,J,Q){if(f.delivery==="steer")$.pendingPrompts.unshift(f);else if(Q==="steer")$.pendingPrompts.push(f);else $.pendingPrompts.splice(J,0,f)}L0();class tZ{deps;constructor($){this.deps=$}dispatchAgentEvent($,f,J){let Q=this.deps.getSession($),Z={sessionId:$,config:f,liveSession:Q,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit},W=S9(J),j=!!Q&&(!W.agentId||W.agentId===aZ(Q.agent));C9(Z,J,j?{isPrimaryAgentEvent:!0,agentId:aZ(Q.agent),conversationId:Q.agent.getConversationId(),...Q?.runtime.teamRuntime?{teamRole:"lead"}:{}}:{isPrimaryAgentEvent:!1})}async handleTeamEvent($,f){let J=this.deps.getSession($);if(J){if(TQ(J,f),f.type==="agent_event"){let Q={sessionId:$,config:J.config,liveSession:J,usageBySession:this.deps.usageBySession,aggregateUsageBySession:this.deps.aggregateUsageBySession,persistMessages:this.deps.persistMessages,emit:this.deps.emit};C9(Q,f.event,{agentId:f.agentId,teamRole:"teammate",teamAgentId:f.agentId,isPrimaryAgentEvent:!1})}if(f.type==="teammate_spawned"){let Q=N$({agentId:f.teammate.runtimeAgentId??f.agentId,conversationId:f.teammate.conversationId,parentAgentId:f.teammate.parentAgentId,createdByAgentId:aZ(J.agent),teamId:J.runtime.teamRuntime?.getTeamId(),teamName:J.runtime.teamRuntime?.getTeamName(),teamRole:"teammate",teamAgentId:f.agentId});if(Q)x$(J.config.telemetry,{ulid:$,modelId:f.teammate.modelId??J.config.modelId,provider:J.config.providerId,...Q})}}if(await MQ($,f,this.deps.invokeBackendOptional),J)qQ(J,$,f,this.deps.emit)}async handlePluginEvent($,f,J){if(f.name==="plugin_log"){this.handlePluginLog($,f.payload);return}if(f.name==="automation_event"){let H=this.deps.getSession($)?.config.extensionContext?.automation??J;if(!H)return;let Y=f.payload&&typeof f.payload==="object"?f.payload:void 0;if(!Y)return;await H.ingestEvent(Y);return}if(f.name!=="steer_message"&&f.name!=="queue_message"&&f.name!=="pending_prompt")return;let Q=f.payload&&typeof f.payload==="object"?f.payload:void 0,Z=typeof Q?.sessionId==="string"&&Q.sessionId.trim().length>0?Q.sessionId.trim():$,W=typeof Q?.prompt==="string"?Q.prompt.trim():"";if(!W)return;let j=f.name==="steer_message"?"steer":f.name==="queue_message"?"queue":Q?.delivery==="steer"?"steer":"queue";this.deps.enqueuePendingPrompt(Z,{prompt:W,delivery:j})}handlePluginLog($,f,J){let Q=this.deps.getSession($),Z=J??Q?.config.extensionContext?.logger??Q?.config.logger;if(!Z||!f||typeof f!=="object")return;let W=f,j=typeof W.message==="string"?W.message:"";if(!j)return;let X=W.metadata&&typeof W.metadata==="object"?{...W.metadata}:{};if(X.sessionId??=$,typeof W.pluginName==="string"&&W.pluginName)X.pluginName=W.pluginName;if(W.level==="debug"){Z.debug(j,X);return}if(W.level==="error"){if(Z.error)Z.error(j,X);else Z.log(j,{...X,severity:"error"});return}Z.log(j,X)}}function aZ($){return $.getAgentId()}function sZ($){return{sessionId:$.sessionId,source:$.source,pid:process.pid,startedAt:$.startedAt,endedAt:$.endedAt??null,exitCode:$.exitCode??null,status:$.status,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:a$($.config),teamName:$.config.teamName?.trim()||void 0,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,parentSessionId:typeof $.sessionMetadata?.parentSessionId==="string"?$.sessionMetadata.parentSessionId:void 0,parentAgentId:typeof $.sessionMetadata?.parentAgentId==="string"?$.sessionMetadata.parentAgentId:void 0,agentId:typeof $.sessionMetadata?.agentId==="string"?$.sessionMetadata.agentId:void 0,conversationId:typeof $.sessionMetadata?.conversationId==="string"?$.sessionMetadata.conversationId:void 0,isSubagent:typeof $.sessionMetadata?.isSubagent==="boolean"?$.sessionMetadata.isSubagent:!1,prompt:$.pendingPrompt,metadata:$.sessionMetadata,messagesPath:$.artifacts?.messagesPath,updatedAt:$.updatedAt??$.endedAt??$.startedAt}}function oZ($,f){let J=$[f];return typeof J==="function"?J:null}async function zB($,f,...J){let Q=oZ($,f);if(!Q)throw Error(`session service method not available: ${f}`);return Promise.resolve(Q.apply($,J))}async function _B($,f,...J){let Q=oZ($,f);if(!Q)return;await Promise.resolve(Q.apply($,J))}async function NB($,f,...J){let Q=oZ($,f);if(!Q)return;return await Promise.resolve(Q.apply($,J))}T$();L0();function eZ($,f,J,Q){return i$({configProvider:{getRuntimeConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getRuntimeConfig()??{providerId:f.providerId,modelId:f.modelId,cwd:f.cwd,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking,maxIterations:f.maxIterations,hooks:f.hooks,extensions:f.extensions,logger:f.logger,telemetry:f.telemetry},getConnectionConfig:()=>$.getSession(J)?.runtime.delegatedAgentConfigProvider?.getConnectionConfig()??{providerId:f.providerId,modelId:f.modelId,apiKey:f.apiKey,baseUrl:f.baseUrl,headers:f.headers,providerConfig:f.providerConfig,knownModels:f.knownModels,thinking:f.thinking},updateConnectionDefaults:()=>{}},createSubAgentTools:()=>{let W=f.enableTools?q1({cwd:f.cwd,...x0[z$({mode:f.mode})],executors:Q}):[];if(f.enableSpawnAgent)W.push(eZ($,f,J,Q));return h1(W)},onSubAgentEvent:(W)=>$.onAgentEvent(J,f,W),onSubAgentStart:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime;$.subAgentStarts.set(W.subAgentId,{startedAt:Date.now(),rootSessionId:J});let X=N$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId});if(X)x$(f.telemetry,{ulid:J,modelId:f.modelId,provider:f.providerId,...X});h8(f.telemetry,{event:"started",ulid:J,durationMs:0,parentId:W.parentAgentId,agentId:W.subAgentId,...X}),$.invokeBackendOptional("handleSubAgentStart",J,W)},onSubAgentEnd:(W)=>{let j=$.getSession(J)?.runtime.teamRuntime,X=$.subAgentStarts.get(W.subAgentId),H=X?Date.now()-X.startedAt:0,Y=W.result?.text?W.result.text.split(`
|
|
719
|
+
`).length:0;h8(f.telemetry,{event:"ended",ulid:J,durationMs:H,outputLines:Y,errorMessage:W.error?String(W.error):void 0,agentId:W.subAgentId,parentId:W.parentAgentId,...N$({agentId:W.subAgentId,conversationId:W.conversationId,parentAgentId:W.parentAgentId,teamId:j?.getTeamId(),teamName:j?.getTeamName(),createdByAgentId:W.parentAgentId})}),$.subAgentStarts.delete(W.subAgentId),$.invokeBackendOptional("handleSubAgentEnd",J,W)}})}import{readFile as Ey,stat as by}from"node:fs/promises";var ky=20480000;async function TB($){let f=await by($);if(!f.isFile())throw Error("Path is not a file");if(f.size>ky)throw Error("File is too large to read into context.");let J=await Ey($,"utf8");if(J.includes("\x00"))throw Error("Cannot read binary file into context.");return J}var MB=5000;function d6($){return typeof $==="number"&&Number.isFinite($)?$:void 0}function dy($){if(!$||typeof $!=="object"||Array.isArray($))return;let f=$,J=d6(f.inputTokens),Q=d6(f.outputTokens),Z=d6(f.cacheReadTokens),W=d6(f.cacheWriteTokens),j=d6(f.totalCost);if(J===void 0||Q===void 0||Z===void 0||W===void 0||j===void 0)return;return{inputTokens:J,outputTokens:Q,cacheReadTokens:Z,cacheWriteTokens:W,totalCost:j}}function ly($,f){return{inputTokens:Math.max($.inputTokens,f.inputTokens),outputTokens:Math.max($.outputTokens,f.outputTokens),cacheReadTokens:Math.max($.cacheReadTokens,f.cacheReadTokens),cacheWriteTokens:Math.max($.cacheWriteTokens,f.cacheWriteTokens),totalCost:Math.max($.totalCost,f.totalCost)}}class B${runtimeAddress=void 0;pendingPrompts;sessionService;runtimeBuilder;createAgentInstance;toolExecutors;defaultCapabilities;defaultToolPolicies;providerSettingsManager;oauthTokenManager;defaultTelemetry;defaultFetch;events=new F6;sessions=new Map;usageBySession=new Map;aggregateUsageBySession=new Map;subAgentStarts=new Map;pendingPromptsController;eventBridge;sessionVersioning=new F1;constructor($){let f=xy();if(f)cy(f);let J=f2($.distinctId);this.sessionService=$.sessionService,this.runtimeBuilder=$.runtimeBuilder??new M8,this.createAgentInstance=$.createAgent??((Q)=>new r$(Q)),this.defaultCapabilities=P0($.capabilities),this.toolExecutors=this.defaultCapabilities?.toolExecutors,this.defaultToolPolicies=$.toolPolicies,this.providerSettingsManager=$.providerSettingsManager??new G$,this.oauthTokenManager=$.oauthTokenManager??new iZ({providerSettingsManager:this.providerSettingsManager,telemetry:$.telemetry}),this.defaultTelemetry=$.telemetry,this.defaultTelemetry?.setDistinctId(J),this.defaultFetch=$.fetch,this.pendingPromptsController=new nZ({getSession:(Q)=>this.sessions.get(Q),emit:(Q)=>this.emit(Q),send:(Q)=>this.runTurn(Q)}),this.pendingPrompts={list:async(Q)=>this.pendingPromptsController.list(Q.sessionId),update:async(Q)=>this.pendingPromptsController.update(Q),delete:async(Q)=>this.pendingPromptsController.delete(Q)},this.eventBridge=new tZ({getSession:(Q)=>this.sessions.get(Q),usageBySession:this.usageBySession,aggregateUsageBySession:this.aggregateUsageBySession,emit:(Q)=>this.emit(Q),persistMessages:(Q,Z,W)=>{this.invoke("persistSessionMessages",Q,Z,W)},enqueuePendingPrompt:(Q,Z)=>this.pendingPromptsController.enqueue(Q,Z),invokeBackendOptional:(Q,...Z)=>this.invokeOptional(Q,...Z)})}async startSession($){let f=$.source??G0.CLI,J=s(),Q=$.config.sessionId?.trim()??"",Z=Q||gy(),W=$,j=W.initialMessages??[],X=j.length>0?y2(j):A0(),H=await this.invokeOptionalValue("ensureSessionsDir")??"";if(!H)throw Error("session service method not available: ensureSessionsDir");let Y=$3(H,Z),V=$3(Y,`${Z}.messages.json`),A=$3(Y,`${Z}.json`),B=a$($.config),G=q0.parse({version:1,session_id:Z,source:f,pid:process.pid,started_at:J,status:"running",interactive:$.interactive===!0,provider:W.config.providerId,model:W.config.modelId,cwd:W.config.cwd,workspace_root:B,team_name:W.config.teamName,enable_tools:W.config.enableTools,enable_spawn:W.config.enableSpawnAgent,enable_teams:W.config.enableAgentTeams,prompt:W.prompt?.trim()||void 0,messages_path:V}),K;if(Q.length>0&&j.length>0&&!W.prompt?.trim()){let b=await this.invokeOptionalValue("readSessionManifest",Z);if(b)G=b,K={manifestPath:A,messagesPath:b.messages_path||V,manifest:b}}let F=await this.seedAggregateUsageFromArtifacts({initialUsage:X,sessionDir:Y,rootMessagesPath:K?.messagesPath??V,manifest:G});this.usageBySession.set(Z,X),this.aggregateUsageBySession.set(Z,F);let P=P0(this.defaultCapabilities,$.capabilities),U=P?.toolExecutors??this.toolExecutors,z=$.localRuntime,_=z?.extensionContext?.logger??z?.logger,R=z?.extensionContext?.automation,L;L=await NX({input:W,localRuntime:$.localRuntime,sessionId:Z,providerSettingsManager:this.providerSettingsManager,defaultTelemetry:this.defaultTelemetry,defaultCapabilities:P,defaultToolPolicies:this.defaultToolPolicies,defaultFetch:this.defaultFetch,onPluginEvent:(b)=>{if(b.name==="plugin_log"){this.eventBridge.handlePluginLog(Z,b.payload,_);return}this.eventBridge.handlePluginEvent(Z,b,R)},onTeamEvent:(b)=>{this.eventBridge.handleTeamEvent(Z,b),L.config.onTeamEvent?.(b)},createSpawnTool:()=>eZ({getSession:(b)=>this.sessions.get(b),subAgentStarts:this.subAgentStarts,onAgentEvent:(b,i,h0)=>this.eventBridge.dispatchAgentEvent(b,i,h0),invokeBackendOptional:(b,...i)=>this.invokeOptional(b,...i)},L.config,Z,U),readSessionMetadata:async()=>(await this.getSession(Z))?.metadata,writeSessionMetadata:async(b)=>{await this.persistSessionMetadata(Z,()=>b)}});let N=await this.runtimeBuilder.build(L.runtimeBuilderInput),w=L.config,Q0=L.providerConfig;if(N.teamRuntime&&!w.teamName?.trim())w.teamName=N.teamRuntime.getTeamName();let Z0=[...N.tools,...w.extraTools??[]],o=N.extensions??L.extensions,d={sessionId:Z,providerId:Q0.providerId,modelId:Q0.modelId,apiKey:Q0.apiKey,baseUrl:Q0.baseUrl,headers:Q0.headers,knownModels:Q0.knownModels,providerConfig:Q0,thinking:w.thinking,reasoningEffort:w.reasoningEffort??Q0.reasoningEffort,systemPrompt:w.systemPrompt,maxIterations:w.maxIterations,execution:w.execution,prepareTurn:m8(w),tools:Z0,hooks:L.hooks,extensions:o,hookErrorMode:w.hookErrorMode,initialMessages:L.effectiveInput.initialMessages,userFileContentLoader:TB,toolPolicies:L.toolPolicies,requestToolApproval:L.requestToolApproval?async(b)=>{let i=L.requestToolApproval,h0=this.sessions.get(Z);if(h0)await this.markTurnPending(h0);try{if(!i)return{approved:!1,reason:"Tool approval callback is not configured."};return await i(b)}finally{let T0=this.sessions.get(Z);if(T0?.status==="pending")await this.markTurnRunning(T0)}}:void 0,telemetry:w.telemetry,onConsecutiveMistakeLimitReached:w.onConsecutiveMistakeLimitReached,completionPolicy:N.completionPolicy,consumePendingUserMessage:()=>{let b=this.pendingPromptsController.consumeSteer(Z);return b?M6(b.prompt,b.mode??w.mode):void 0},logger:N.logger??w.logger,extensionContext:w.extensionContext,onEvent:(b)=>this.eventBridge.dispatchAgentEvent(Z,w,b)};d.hooks={...d.hooks,onEvent:async(b)=>{if(await L.hooks?.onEvent?.(b),b.type!=="assistant-message")return;let i=this.sessions.get(Z);if(!i)return;let h0=i.agent.getMessages();try{await this.invoke("persistSessionMessages",Z,h0,w.systemPrompt)}catch(T0){w.logger?.error?.("Failed to persist session messages after assistant response",{sessionId:Z,error:T0}),V2(w.telemetry,{component:"core",operation:"session.persist_messages_after_assistant_response",error:T0,severity:"warn",handled:!0,context:{sessionId:Z,providerId:w.providerId,modelId:w.modelId}})}}};let R0=this.createAgentInstance(d);if(d.onEvent)R0.subscribeEvents(d.onEvent);N.registerLeadAgent?.(R0);let b$=N$({agentId:R0.getAgentId(),conversationId:R0.getConversationId(),teamId:N.teamRuntime?.getTeamId(),teamName:N.teamRuntime?.getTeamName(),teamRole:N.teamRuntime?"lead":void 0});if(MX(w,Z,Q.length>0,B,b$),b$)x$(w.telemetry,{ulid:Z,modelId:w.modelId,provider:w.providerId,...b$});if(N.teamRuntime)Zf(w.telemetry,{ulid:Z,teamId:N.teamRuntime.getTeamId(),teamName:N.teamRuntime.getTeamName(),leadAgentId:R0.getAgentId(),restoredFromPersistence:N.teamRestoredFromPersistence===!0});let l={sessionId:Z,config:w,sessionMetadata:W.sessionMetadata,...K?{artifacts:K}:{},source:f,startedAt:K?.manifest.started_at??J,updatedAt:K?.manifest.ended_at??K?.manifest.started_at??J,pendingPrompt:G.prompt,runtime:N,agent:R0,started:!1,status:K?.manifest.status??"running",aborting:!1,interactive:$.interactive===!0,persistedMessages:j,activeTeamRunIds:new Set,pendingTeamRunUpdates:[],teamRunWaiters:[],pendingPrompts:[],drainingPendingPrompts:!1,pluginSandboxShutdown:L.pluginSandboxShutdown,submitAndExitObserved:!1,lastInteractiveTurnFinishReason:void 0};if(this.sessions.set(Z,l),this.emitStatus(Z,"running"),j.length>0&&!K){if(await this.ensureSessionPersisted(l),await this.invoke("persistSessionMessages",l.sessionId,j,l.config.systemPrompt),!W.prompt?.trim())await this.updateStatus(l,"completed",0)}let K$;try{if(W.prompt?.trim())if(K$=await this.executeTurn(l,{prompt:W.prompt,userImages:W.userImages,userFiles:W.userFiles}),!l.interactive)await this.finalizeSingleRun(l,K$.finishReason);else await this.completeInteractiveTurn(l,K$.finishReason)}catch(b){if(l.interactive&&l.aborting)K$=await this.completeAbortedInteractiveTurn(l);else throw V2(l.config.telemetry,{component:"core",operation:"session.start",error:b,severity:"error",handled:!1,context:{sessionId:l.sessionId,providerId:l.config.providerId,modelId:l.config.modelId}}),await this.failSession(l),b}return{sessionId:Z,manifest:G,manifestPath:A,messagesPath:V,result:K$}}async restoreSession($){return this.sessionVersioning.restoreCheckpoint({...$,getSession:(f)=>this.getSession(f),readMessages:(f)=>this.readSessionMessages(f),buildStartInput:(f,J)=>{let Q=f.restoredCheckpointMetadata?{...J.sessionMetadata??{},checkpoint:f.restoredCheckpointMetadata}:J.sessionMetadata;return{...J,...Q?{sessionMetadata:Q}:{},initialMessages:f.initialMessages}},startSession:(f)=>this.startSession(f),getStartedSessionId:(f)=>f.sessionId,readRestoredSession:(f)=>this.getSession(f)})}async runTurn($){let f=this.getSessionOrThrow($.sessionId),J=f.agent.canStartRun(),Q=$.delivery??(f.interactive&&!J?"queue":void 0);if(f.config.telemetry?.capture({event:"session.input_sent",properties:{sessionId:$.sessionId,promptLength:$.prompt.length,userImageCount:$.userImages?.length??0,userFileCount:$.userFiles?.length??0,delivery:Q??"immediate"}}),Q==="queue"||Q==="steer"){this.pendingPromptsController.enqueue($.sessionId,{prompt:$.prompt,mode:$.mode,delivery:Q,userImages:$.userImages,userFiles:$.userFiles});return}try{let Z=await this.executeTurn(f,{prompt:$.prompt,mode:$.mode,userImages:$.userImages,userFiles:$.userFiles});if(!f.interactive)await this.finalizeSingleRun(f,Z.finishReason);else await this.completeInteractiveTurn(f,Z.finishReason);if(Z.finishReason==="error"||Z.finishReason==="aborted")return Z;return queueMicrotask(()=>{this.pendingPromptsController.drain($.sessionId)}),Z}catch(Z){if(f.interactive&&f.aborting)return await this.completeAbortedInteractiveTurn(f);throw V2(f.config.telemetry,{component:"core",operation:"session.submit",error:Z,severity:"error",handled:!1,context:{sessionId:f.sessionId,providerId:f.config.providerId,modelId:f.config.modelId}}),await this.failSession(f),Z}}async getAccumulatedUsage($){let f=$Q(this.usageBySession.get($)),J=$Q(this.aggregateUsageBySession.get($));return f||J?{usage:f,aggregateUsage:J}:void 0}async abort($,f){let J=this.sessions.get($);if(!J)return;J.config.telemetry?.capture({event:"session.aborted",properties:{sessionId:$}}),J.aborting=!0,this.pendingPromptsController.clearAborted(J),J.agent.abort(f)}async stopSession($){let f=this.sessions.get($);if(!f)return;if(f.config.telemetry?.capture({event:"session.stopped",properties:{sessionId:$}}),f.interactive&&!J0(f.status)){await this.releaseSessionRuntime(f,"session_stop");return}if(f.interactive&&f.agent.canStartRun()){await this.shutdownSession(f,{status:this.resolveInteractiveStopStatus(f),exitCode:this.resolveInteractiveStopExitCode(f),shutdownReason:"session_stop",endReason:"stopped"});return}f.aborting=!0,f.agent.abort(Error("session_stop")),await this.shutdownSession(f,{status:"cancelled",exitCode:0,shutdownReason:"session_stop",endReason:"stopped"})}async dispose($="session_manager_dispose"){let f=[...this.sessions.values()];if(f.length===0)return;await Promise.allSettled(f.map((J)=>J.interactive&&!J0(J.status)?this.releaseSessionRuntime(J,$):J.interactive&&J.agent.canStartRun()?this.shutdownSession(J,{status:this.resolveInteractiveStopStatus(J),exitCode:this.resolveInteractiveStopExitCode(J),shutdownReason:$,endReason:"disposed"}):this.shutdownSession(J,{status:"cancelled",exitCode:0,shutdownReason:$,endReason:"disposed"}))),this.usageBySession.clear(),this.aggregateUsageBySession.clear()}async getSession($){let f=this.sessions.get($);if(f)return sZ(f);let J=$.trim();if(!J)return;let Q=await this.getRow(J);if(Q)return X4(Q);let Z=await this.readManifest(J);return Z?cJ(Z):void 0}async listSessions($=200){let J=(await this.listRows($)).map(X4),Q=new Set(J.map((Z)=>Z.sessionId));for(let Z of this.sessions.values()){if(Q.has(Z.sessionId))continue;J.unshift(sZ(Z))}return J.slice(0,$)}async deleteSession($){if(this.sessions.has($))await this.stopSession($);let f=await this.invoke("deleteSession",$);if(f.deleted)this.usageBySession.delete($),this.aggregateUsageBySession.delete($);return f.deleted}async updateSession($,f){return{updated:(await this.invokeOptionalValue("updateSession",{sessionId:$,prompt:f.prompt,metadata:f.metadata,title:f.title}))?.updated===!0}}async readSessionMessages($){let f=$.trim();if(!f)return[];let J=await this.getRow(f);if(J?.messagesPath)return H1(J.messagesPath);let Q=await this.readManifest(f);return H1(Q?.messages_path)}async dispatchHookEvent($){await QY($,{queueSpawnRequest:(f)=>this.invokeOptional("queueSpawnRequest",f),upsertSubagentSessionFromHook:(f)=>this.invokeOptionalValue("upsertSubagentSessionFromHook",f),appendSubagentHookAudit:(f,J)=>this.invokeOptional("appendSubagentHookAudit",f,J),applySubagentStatus:(f,J)=>this.invokeOptional("applySubagentStatus",f,J)})}subscribe($,f){return this.events.subscribe($,f)}async updateSessionModel($,f){let J=this.getSessionOrThrow($);J.config.modelId=f,J.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({modelId:f}),J.agent.updateConnection({modelId:f})}handlePluginEvent($,f,J){return this.eventBridge.handlePluginEvent($,f,J)}async executeTurn($,f){let J=await this.prepareTurnInput($,f),Q=J.prompt.trim();if(!Q)throw Error("prompt cannot be empty");if(!$.artifacts&&!$.pendingPrompt)$.pendingPrompt=Q;await this.ensureSessionPersisted($),await this.syncOAuthCredentials($),await this.markTurnRunning($);let Z=await this.executeAgentTurn($,Q,J.userImages,J.userFiles);while(yQ($,Z.finishReason)){let W=await wQ($);if(W.length===0)break;let j=SQ($,W);Z=await this.executeAgentTurn($,j)}return Z}async completeInteractiveTurn($,f){if(T6($))return;$.lastInteractiveTurnFinishReason=f,await this.markTurnIdle($),$.aborting=!1}resolveInteractiveStopStatus($){let f=$.lastInteractiveTurnFinishReason;if(!f)return"cancelled";switch(f){case"completed":return"completed";case"error":return"failed";case"aborted":case"max_iterations":case"mistake_limit":return"cancelled"}return f}resolveInteractiveStopExitCode($){return $.lastInteractiveTurnFinishReason==="error"?1:0}async completeAbortedInteractiveTurn($){let f=new Date,J=$.agent.getMessages(),Q=A0();return $.persistedMessages=J,$.started=$.started||J.length>0,this.eventBridge.dispatchAgentEvent($.sessionId,$.config,{type:"done",reason:"aborted",text:"",iterations:0,usage:Q}),await this.completeInteractiveTurn($,"aborted"),{text:"",usage:Q,messages:J,toolCalls:[],iterations:0,finishReason:"aborted",model:{id:$.config.modelId,provider:$.config.providerId},startedAt:f,endedAt:f,durationMs:0}}async executeAgentTurn($,f,J,Q){let Z=$.started||$.agent.getMessages().length>0,W=$.persistedMessages??$.agent.getMessages(),j=this.usageBySession.get($.sessionId)??A0(),X=this.aggregateUsageBySession.get($.sessionId)??j;$.turnUsageBaseline=j,$.turnAggregateUsageBaseline=X,$.turnPrimaryUsage=A0(),$.turnUsageByAgent=new Map,s6($.config.telemetry,$.sessionId,$.config.mode),G2($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,model:$.config.modelId,source:"user",mode:$.config.mode,...this.getSessionAgentTelemetryIdentity($)});try{let H=Z?()=>$.agent.continue(f,J,Q):()=>$.agent.run(f,J,Q),Y=await this.runWithAuthRetry($,H,W);$.started=!0;let V=_f(Y.messages,Y,W);$.persistedMessages=V;let A=Y4($.turnUsageByAgent?.values()??[]),B=H0(j,Y.usage),G=H0(H0(A0(),Y.usage),A),K=H0(X,G);return this.usageBySession.set($.sessionId,B),this.aggregateUsageBySession.set($.sessionId,K),await this.persistSessionMetadata($.sessionId,(D)=>({...D??{},totalCost:B.totalCost,aggregatedAgentsCost:K.totalCost,usage:B,aggregateUsage:K})),await this.invoke("persistSessionMessages",$.sessionId,V,$.config.systemPrompt),this.observeTaskCompletionTool($,Y),Y}catch(H){throw V2($.config.telemetry,{component:"core",operation:"session.turn",error:H,severity:"error",handled:!1,context:{sessionId:$.sessionId,providerId:$.config.providerId,modelId:$.config.modelId}}),await this.invoke("persistSessionMessages",$.sessionId,$.agent.getMessages(),$.config.systemPrompt),H}finally{$.turnUsageBaseline=void 0,$.turnAggregateUsageBaseline=void 0,$.turnPrimaryUsage=void 0,$.turnUsageByAgent=void 0}}observeTaskCompletionTool($,f){if($.submitAndExitObserved)return;if(!f.toolCalls.some((Q)=>Q.name===f0.SUBMIT_AND_EXIT&&Q.error===void 0))return;$.submitAndExitObserved=!0,S8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"submit_and_exit",...this.getSessionAgentTelemetryIdentity($)})}async prepareTurnInput($,f){let J=a$($.config),Q=uy(f.prompt).trim();if(!Q)return{prompt:"",userImages:f.userImages,userFiles:this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles)};let Z=await P2(Q,J);qX($.config.telemetry,Z);let W=M6(Z.prompt,f.mode??$.config.mode),j=this.resolveAbsoluteFilePaths($.config.cwd,f.userFiles),X=this.resolveAbsoluteFilePaths(J,Z.matchedFiles),H=Array.from(new Set([...j,...X]));return{prompt:W,userImages:f.userImages,userFiles:H.length>0?H:void 0}}async ensureSessionPersisted($){if($.artifacts)return;let f=a$($.config);$.artifacts=await this.invoke("createRootSessionWithArtifacts",{sessionId:$.sessionId,source:$.source,pid:process.pid,interactive:$.interactive,provider:$.config.providerId,model:$.config.modelId,cwd:$.config.cwd,workspaceRoot:f,teamName:$.config.teamName,enableTools:$.config.enableTools,enableSpawn:$.config.enableSpawnAgent,enableTeams:$.config.enableAgentTeams,prompt:$.pendingPrompt,metadata:$.sessionMetadata,startedAt:$.startedAt})}async markTurnRunning($){if($.status==="running")return;await this.updateStatus($,"running",null)}async markTurnPending($){if($.status==="pending")return;await this.updateStatus($,"pending",null)}async markTurnIdle($){if($.status==="idle")return;await this.updateStatus($,"idle",null)}async persistSessionMetadata($,f){let J=this.sessions.get($),Q=await this.invokeOptionalValue("readSessionManifest",$)??J?.artifacts?.manifest,Z=f(Q?.metadata);if(!J?.artifacts)return;if((await this.invokeOptionalValue("updateSession",{sessionId:$,metadata:Z}))?.updated===!1)return;J.sessionMetadata=Z,J.artifacts.manifest.metadata=Z}async finalizeSingleRun($,f){if(T6($))return;let J=f==="aborted"||$.aborting,Q=f==="error";await this.shutdownSession($,{status:J?"cancelled":Q?"failed":"completed",exitCode:Q?1:0,shutdownReason:Q?"session_error":"session_complete",endReason:f})}async failSession($){await this.shutdownSession($,{status:"failed",exitCode:1,shutdownReason:"session_error",endReason:"error"})}async shutdownSession($,f){if(f.status==="completed"&&!$.submitAndExitObserved)S8($.config.telemetry,{ulid:$.sessionId,provider:$.config.providerId,modelId:$.config.modelId,mode:$.config.mode,durationMs:Date.now()-Date.parse($.startedAt),source:"shutdown",...this.getSessionAgentTelemetryIdentity($)});f5($);let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session shutdown cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),V2($.config.telemetry,{component:"core",operation:"session.shutdown_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,status:f.status,shutdownReason:f.shutdownReason,providerId:$.config.providerId,modelId:$.config.modelId}})};if($.artifacts){try{await this.updateStatus($,f.status,f.exitCode)}catch(Z){Q("update_status",Z)}try{await $.agent.shutdown(f.shutdownReason)}catch(Z){Q("agent_shutdown",Z)}}try{await Promise.resolve($.runtime.shutdown(f.shutdownReason))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),this.emit({type:"ended",payload:{sessionId:$.sessionId,reason:f.endReason,ts:Date.now()}}),J.length>0&&f.status==="failed")throw J[0]}async releaseSessionRuntime($,f){let J=[],Q=(Z,W)=>{J.push(W),$.config.logger?.log("Session runtime cleanup failed",{sessionId:$.sessionId,stage:Z,error:W,severity:"warn"}),V2($.config.telemetry,{component:"core",operation:"session.runtime_cleanup",error:W,severity:"warn",handled:!0,context:{sessionId:$.sessionId,stage:Z,reason:f,providerId:$.config.providerId,modelId:$.config.modelId}})};try{await $.agent.shutdown(f)}catch(Z){Q("agent_shutdown",Z)}try{await Promise.resolve($.runtime.shutdown(f))}catch(Z){Q("runtime_shutdown",Z)}try{await $.pluginSandboxShutdown?.()}catch(Z){Q("plugin_sandbox_shutdown",Z)}if(this.sessions.delete($.sessionId),J.length>0)throw J[0]}async updateStatus($,f,J){if(!$.artifacts)return;let Q=await this.invoke("updateSessionStatus",$.sessionId,f,J);if(!Q.updated)return;let Z=await this.invokeOptionalValue("readSessionManifest",$.sessionId)??$.artifacts.manifest;if(Z.status=f,J0(f))delete Z.ended_at,Z.exit_code=null;else Z.ended_at=Q.endedAt??s(),Z.exit_code=typeof J==="number"?J:null;$.artifacts.manifest=Z,$.status=f,$.updatedAt=Q.endedAt??s(),$.endedAt=J0(f)?null:Z.ended_at,$.exitCode=Z.exit_code,await this.invoke("writeSessionManifest",$.artifacts.manifestPath,Z),this.emitStatus($.sessionId,f)}async runWithAuthRetry($,f,J){try{return await f()}catch(Q){if(!vy(Q,$.config.providerId))throw Q;return await this.syncOAuthCredentials($,{forceRefresh:!0}),$.agent.restore(J),f()}}async syncOAuthCredentials($,f){let J=null;try{J=await this.oauthTokenManager.resolveProviderApiKey({providerId:$.config.providerId,forceRefresh:f?.forceRefresh})}catch(Q){if(Q instanceof x5)throw Error(`${Q.providerId} requires re-authentication.`);throw Q}if(!J?.apiKey||$.config.apiKey===J.apiKey)return;$.config.apiKey=J.apiKey,$.agent.updateConnection({apiKey:J.apiKey}),$.runtime.delegatedAgentConfigProvider?.updateConnectionDefaults({apiKey:J.apiKey}),$.runtime.teamRuntime?.updateTeammateConnections({apiKey:J.apiKey})}getSessionOrThrow($){let f=this.sessions.get($);if(!f){let J=Error(`session not found: ${$}`);throw V2(this.defaultTelemetry,{component:"core",operation:"session.active_lookup",error:J,severity:"warn",handled:!0,context:{sessionId:$,activeSessionCount:this.sessions.size}}),J}return f}resolveAbsoluteFilePaths($,f){if(!f||f.length===0)return[];let J=f.map((Q)=>Q.trim()).filter((Q)=>Q.length>0).map((Q)=>my(Q)?Q:f3($,Q));return Array.from(new Set(J))}getSessionAgentTelemetryIdentity($){return N$({agentId:$.agent.getAgentId(),conversationId:$.agent.getConversationId(),teamId:$.runtime.teamRuntime?.getTeamId(),teamName:$.runtime.teamRuntime?.getTeamName(),teamRole:$.runtime.teamRuntime?"lead":void 0})}async seedAggregateUsageFromArtifacts($){let f=await this.summarizePersistedTeammateUsage($.sessionDir,$.rootMessagesPath,$.manifest.session_id),J=H0($.initialUsage,f);return this.withPersistedAggregateUsageFloor(J,$.manifest)}async summarizePersistedTeammateUsage($,f,J){let Q=f3(f),Z=`${J}.messages.json`,W;try{W=Iy($)}catch{return A0()}let j=A0();for(let X of W){if(!X.endsWith(".messages.json"))continue;if(X===Z)continue;let H=f3($,X);if(H===Q)continue;let Y=await H1(H);if(Y.length===0)continue;j=H0(j,y2(Y))}return j}withPersistedAggregateUsageFloor($,f){let J=dy(f.metadata?.aggregateUsage);if(J)return ly($,J);let Q=f.metadata?.aggregatedAgentsCost;if(typeof Q!=="number"||!Number.isFinite(Q)||Q<=$.totalCost)return $;return{...$,totalCost:Q}}emitStatus($,f){this.emitSessionSnapshot($),this.emit({type:"status",payload:{sessionId:$,status:f}})}async emitSessionSnapshot($){let f=await this.getSession($);if(!f)return;this.emit({type:"session_snapshot",payload:{sessionId:$,snapshot:X$({session:f,messages:await this.readSessionMessages($),usage:this.usageBySession.get($),aggregateUsage:this.aggregateUsageBySession.get($)})}})}emit($){this.events.emit($)}async listRows($){return this.invoke("listSessions",Math.min(Math.max(1,Math.floor($)),MB))}async getRow($){let f=$.trim();if(!f)return;return(await this.listRows(MB)).find((Q)=>Q.sessionId===f)}async readManifest($){let f=$.trim();if(!f)return;return await this.invokeOptionalValue("readSessionManifest",f)}invoke($,...f){return zB(this.sessionService,$,...f)}invokeOptional($,...f){return _B(this.sessionService,$,...f)}invokeOptionalValue($,...f){return NB(this.sessionService,$,...f)}}function ry($){return{text:$.text,usage:$.usage,inputTokens:$.usage.inputTokens,outputTokens:$.usage.outputTokens,iterations:$.iterations,finishReason:$.finishReason,toolCalls:$.toolCalls.map((f)=>({name:f.name,input:f.input,output:f.output,error:f.error,durationMs:f.durationMs}))}}function iy($){return $.mode==="plan"?"plan":$.mode==="yolo"?"yolo":"act"}function F5($={}){let f=new B$({sessionService:new A$(new Y$),fetch:$.fetch,telemetry:$.telemetry});return{async startSession(J){let Q=(J.cwd?.trim()||J.workspaceRoot).trim(),Z=await f.startSession({source:J.source?.trim()||G0.CLI,interactive:!1,config:{providerId:py(J.provider),modelId:J.model,apiKey:J.apiKey?.trim()||void 0,cwd:Q,workspaceRoot:J.workspaceRoot,systemPrompt:J.systemPrompt??"",mode:iy(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:Z.sessionId,startResult:{sessionId:Z.sessionId,manifestPath:Z.manifestPath,messagesPath:Z.messagesPath}}},async sendSession(J,Q){let Z=await f.runTurn({sessionId:J,prompt:Q.prompt,userImages:Q.attachments?.userImages,userFiles:Q.attachments?.userFiles?.map((W)=>W.content)});if(!Z)throw Error("local hub schedule runtime returned no turn result");return{result:ry(Z)}},async abortSession(J){return await f.abort(J,Error("hub schedule abort")),{applied:!0}},async stopSession(J){return await f.stopSession(J),{applied:!0}}}}ny(process.env.CLINE_VCR);function ay($){let f=process.cwd(),J,Q,Z;for(let W=0;W<$.length;W+=1){let j=$[W],X=$[W+1];if(j==="--cwd"&&X){f=X,W+=1;continue}if(j==="--host"&&X){J=X,W+=1;continue}if(j==="--port"&&X){let H=Number(X);if(Number.isFinite(H))Q=H;W+=1;continue}if(j==="--pathname"&&X)Z=X,W+=1}return{cwd:f,host:J,port:Q,pathname:Z}}async function ty(){let $=ay(process.argv.slice(2));process.chdir($.cwd);let f=l0({host:$.host,port:$.port,pathname:$.pathname}),J=await X2({host:f.host,port:f.port,pathname:f.pathname,owner:V0(),runtimeHandlers:F5(),cronOptions:{workspaceRoot:$.cwd}}),Q=async()=>{await J.close(),process.exit(0)},Z=!1,W=(j,X)=>{if(Z)return;Z=!0;let H=X instanceof Error?X.stack||X.message:String(X);process.stderr.write(`[hub-daemon] ${j}: ${H}
|
|
720
|
+
`),J.close().catch((Y)=>{let V=Y instanceof Error?Y.stack||Y.message:String(Y);process.stderr.write(`[hub-daemon] shutdown after ${j} failed: ${V}
|
|
721
|
+
`)}).finally(()=>{process.exit(1)})};process.on("SIGINT",()=>{Q()}),process.on("SIGTERM",()=>{Q()}),process.on("uncaughtException",(j)=>{W("uncaughtException",j)}),process.on("unhandledRejection",(j)=>{W("unhandledRejection",j)}),await new Promise(()=>{})}ty().catch(($)=>{let f=$ instanceof Error?$.stack||$.message:String($);process.stderr.write(`[hub-daemon] fatal: ${f}
|
|
722
|
+
`),process.exit(1)});
|