@kodax-ai/kodax 0.7.74 → 0.7.76
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/CHANGELOG.md +62 -0
- package/README.md +21 -1
- package/README_CN.md +17 -1
- package/dist/chunks/{agent-2ABIG5NW.js → agent-7X5CFET2.js} +1 -1
- package/dist/chunks/argument-completer-3NHIKB4N.js +2 -0
- package/dist/chunks/{chunk-XMP66YWG.js → chunk-4PWPNCNK.js} +4 -4
- package/dist/chunks/{chunk-C7TZAT3S.js → chunk-7FJNLJLF.js} +9 -9
- package/dist/chunks/chunk-COQYLD4U.js +5 -0
- package/dist/chunks/{chunk-XXQLPTAN.js → chunk-D3T24FJW.js} +7 -7
- package/dist/chunks/{chunk-F7AIEHSS.js → chunk-EI4JBQKL.js} +2 -2
- package/dist/chunks/{chunk-KPGVY6PF.js → chunk-HGT6WQ24.js} +4 -4
- package/dist/chunks/{chunk-7W6KYJU2.js → chunk-HS3XHF3R.js} +4 -4
- package/dist/chunks/{chunk-64M5HOCA.js → chunk-IDCGNQ4H.js} +1 -1
- package/dist/chunks/{chunk-5GH3SVI3.js → chunk-KAY2XLCP.js} +21 -21
- package/dist/chunks/{chunk-XM724XAA.js → chunk-OD6LVXU6.js} +4 -4
- package/dist/chunks/{chunk-VK5QTHS6.js → chunk-OSF3H4RR.js} +3 -3
- package/dist/chunks/{chunk-MBAPT2R5.js → chunk-PXKSE54E.js} +1 -1
- package/dist/chunks/{chunk-QH56WEHK.js → chunk-RDXRM3UI.js} +1 -1
- package/dist/chunks/{chunk-MVCAFD6M.js → chunk-SMT2JSM3.js} +1 -1
- package/dist/chunks/{chunk-VPURXE2F.js → chunk-TGMBHGZO.js} +119 -119
- package/dist/chunks/{chunk-UJS7JAO6.js → chunk-VWSLC2WO.js} +1 -1
- package/dist/chunks/{chunk-GAFFYJU3.js → chunk-Y3AMP22L.js} +12 -12
- package/dist/chunks/compaction-config-7J2XE35D.js +2 -0
- package/dist/chunks/{construction-bootstrap-BKNPJI7O.js → construction-bootstrap-5F5KF2BZ.js} +1 -1
- package/dist/chunks/{dist-EVEJAII2.js → dist-2RA7LSH3.js} +1 -1
- package/dist/chunks/{dist-6EK4H7TP.js → dist-URKXBOC6.js} +1 -1
- package/dist/chunks/host-RKZ2OGFT.js +2 -0
- package/dist/chunks/run-manager-7RM4HEH6.js +2 -0
- package/dist/chunks/{utils-GTJLL4GT.js → utils-X3TEH6IO.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/kodax_cli.js +825 -825
- package/dist/provider-capabilities.json +35 -7
- package/dist/runtime-worker.js +756 -756
- package/dist/sdk-a2a.js +1 -1
- package/dist/sdk-agent.js +1 -1
- package/dist/sdk-coding.js +1 -1
- package/dist/sdk-experimental-memory.js +1 -1
- package/dist/sdk-llm.js +1 -1
- package/dist/sdk-mcp.js +1 -1
- package/dist/sdk-media.js +1 -1
- package/dist/sdk-repl.js +1 -1
- package/dist/sdk-runtime.d.ts +2 -1
- package/dist/sdk-runtime.js +1 -1
- package/dist/sdk-session.js +1 -1
- package/dist/sdk-skills.js +1 -1
- package/docs/SDK_EMBEDDER_GUIDE.md +144 -110
- package/package.json +1 -1
- package/dist/chunks/argument-completer-C45DEO34.js +0 -2
- package/dist/chunks/chunk-PP53SIIL.js +0 -5
- package/dist/chunks/compaction-config-QYCDOW3Q.js +0 -2
- package/dist/chunks/host-KS4TJKWQ.js +0 -2
- package/dist/chunks/run-manager-L7MKGQNX.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
|
|
2
|
-
import{C as Jt,Ha as No,Ma as Do,S as yr,e as Io,f as $o,g as Po,ia as Mo,ka as Lo}from"./chunk-
|
|
2
|
+
import{C as Jt,Ha as No,Ma as Do,S as yr,e as Io,f as $o,g as Po,ia as Mo,ka as Lo}from"./chunk-D3T24FJW.js";import{Ad as Dc,Ce as Fc,Ld as jc,N as Ec,Oa as Tc,Ua as Be,Va as In,Wa as $n,X as Sc,Ya as Ac,Z as _t,Za as Cc,_a as Rc,b as jo,c as Rn,dc as Pe,ec as Lc,kb as Oc,l as B,r as wr,s as xc,va as ae,zd as Nc}from"./chunk-VWSLC2WO.js";import{B as $c,H as Pc,W as br,X as vr,aa as Mc,b as D,e as Qt,f as On,t as Ic}from"./chunk-Y3AMP22L.js";import{w as tt,y as qe}from"./chunk-COQYLD4U.js";import{a as i}from"./chunk-ONUPGMER.js";var mA=2,hA=500,gA=500,Fo="[Cancelled]",Uo=`${Fo} Operation cancelled by user`;import Uc from"fs/promises";import qc from"path";var Wc=2e3,Zt=50*1024,Ch=500,kr=2e3,qo=256*1024,Bo=2e3,Rh="KODAX_TOOL_OUTPUT_DIR";function Hc(e){return{maxLines:e.maxLines??Wc,maxBytes:e.maxBytes??Zt}}i(Hc,"getLimits");function Me(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(1)}MB`}i(Me,"formatSize");function Pn(e,t={}){let{maxLines:n,maxBytes:r}=Hc(t),o=Buffer.byteLength(e,"utf-8"),s=e.split(`
|
|
3
3
|
`),a=s.length;if(a<=n&&o<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:a,totalBytes:o,outputLines:a,outputBytes:o,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};let c=s[0]??"";if(Buffer.byteLength(c,"utf-8")>r)return{content:"",truncated:!0,truncatedBy:"bytes",totalLines:a,totalBytes:o,outputLines:0,outputBytes:0,lastLinePartial:!1,firstLineExceedsLimit:!0,maxLines:n,maxBytes:r};let l=[],d=0,u="lines";for(let p=0;p<s.length&&p<n;p++){let m=s[p]??"",h=Buffer.byteLength(m,"utf-8")+(p>0?1:0);if(d+h>r){u="bytes";break}l.push(m),d+=h}l.length>=n&&d<=r&&(u="lines");let f=l.join(`
|
|
4
4
|
`);return{content:f,truncated:!0,truncatedBy:u,totalLines:a,totalBytes:o,outputLines:l.length,outputBytes:Buffer.byteLength(f,"utf-8"),lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r}}i(Pn,"truncateHead");function Mn(e,t={}){let{maxLines:n,maxBytes:r}=Hc(t),o=Buffer.byteLength(e,"utf-8"),s=e.split(`
|
|
5
5
|
`),a=s.length;if(a<=n&&o<=r)return{content:e,truncated:!1,truncatedBy:null,totalLines:a,totalBytes:o,outputLines:a,outputBytes:o,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines:n,maxBytes:r};let c=[],l=0,d="lines",u=!1;for(let p=s.length-1;p>=0&&c.length<n;p--){let m=s[p]??"",h=Buffer.byteLength(m,"utf-8")+(c.length>0?1:0);if(l+h>r){if(d="bytes",c.length===0&&m.length>0){let y=Ih(m,r);c.unshift(y),l=Buffer.byteLength(y,"utf-8"),u=!0}break}c.unshift(m),l+=h}c.length>=n&&l<=r&&(d="lines");let f=c.join(`
|
|
@@ -12,7 +12,7 @@ ${t.join(`
|
|
|
12
12
|
`),sources:[{label:"README",path:"README.md"}],nextTopics:["license","install","quickstart"]},{id:"license",title:"License & commercial-use boundary",aliases:["licensing","kai-fcl","fair core","commercial use","non-commercial","\u8BB8\u53EF\u8BC1","\u8BB8\u53EF\u534F\u8BAE","\u5546\u4E1A\u4F7F\u7528","\u5546\u7528"],summary:"KAI-FCL from v0.7.70, community use, commercial authorization, and historical Apache copies.",body:["Official KodaX 0.7.70 and later distributions use the KodaX-AI Fair Core","License (KAI-FCL) 1.0 or accompanying KodaX-AI customer terms.","KAI-FCL is source-available / fair-core, not OSI open source.","","Community Use covers individual personal learning, individual non-commercial work,","classroom instruction, non-production research, and contribution development/testing.","Commercial or Managed Use is not granted by the community license. Company, team,","institutional, government, production, intranet, managed-device, paid-service, hosted,","or customer redistribution use requires a Customer Agreement with KodaX-AI and, where","required, a valid License Entitlement.","","This change is not retroactive: historical tags, archives, binaries, npm packages, or","other specific copies already distributed under Apache-2.0 keep that Apache-2.0 grant.","Third-party components remain under their own licenses. The repository LICENSE file is","the governing text; this topic is only a concise product summary."].join(`
|
|
13
13
|
`),sources:[{label:"license",path:"LICENSE"},{label:"README license summary",path:"README.md"}],nextTopics:["overview","install","sdk"]},{id:"install",title:"Install & start KodaX",aliases:["setup","getting started","\u5B89\u88C5","\u542F\u52A8","\u600E\u4E48\u88C5"],summary:"npm install, Node version, secure first-run setup, updating.",body:["Install (Node >= 20):"," npm install -g @kodax-ai/kodax","Then run `kodax` in any project directory to start the interactive REPL.","","On a bare interactive first launch with no selected provider and no supported","credential, KodaX opens metadata-only provider setup before it starts the Runtime","or REPL. It never asks for or stores an API key: it saves only provider/model","selection (and validated public custom-provider metadata), shows the exact required","environment-variable name, then exits. Set that variable, restart terminal, and run","`kodax` again. Use `kodax setup` to rerun the flow deliberately. An explicitly","configured provider with a missing key stays an actionable credential error; scripts,","JSON/print/ACP modes, resume, and non-TTY runs never open setup automatically.","","Native binaries (no Node needed) are published per release on GitHub Releases","(darwin/linux/win, arm64/x64).","Update: re-run the npm install, or download the new binary."].join(`
|
|
14
14
|
`),sources:[{label:"package",path:"package.json"}],nextTopics:["quickstart","providers","config"]},{id:"quickstart",title:"Quickstart workflow",aliases:["workflow","first task","\u5FEB\u901F\u5F00\u59CB","\u4E0A\u624B","\u600E\u4E48\u7528"],summary:"Open a project, give a task, review, run tests, continue a session.",body:["1. `cd` into your repo and run `kodax`.","2. Describe the task in plain language; KodaX plans, edits, and runs tools.","3. Review proposed edits (permission mode controls auto-accept vs prompt).","4. Ask it to run tests / build to verify.","5. Continue later: `kodax -c` (continue last) or `kodax -r` (resume a picker)."].join(`
|
|
15
|
-
`),sources:[{label:"commands",path:"packages/repl/src/interactive/commands.ts"}],nextTopics:["commands","permissions","sessions"]},{id:"providers",title:"Providers & models",aliases:["provider","model","models","llm","\u4F9B\u5E94\u5546","\u6A21\u578B","\u63D0\u4F9B\u5546"],summary:"Built-in providers, choosing a model, credential check, cross-provider fallback.",body:[`KodaX ships ${Go.length} built-in provider aliases:`,` ${Hh}`,"",`Default provider: ${Lo} (override with KODAX_PROVIDER env or`,'"provider" in ~/.kodax/config.json). Switch model live with the /model command.',"","Public Kimi uses KIMI_API_KEY and defaults to `kimi-k2.7-code`; select","`kimi-k2.7-code-highspeed`, `kimi-k2.6`, or `kimi-k2.5` explicitly. These routes","have a 262,144-token context. K2.7 cannot disable thinking; K2.6 sends its required","wire toggle when thinking is disabled. `kimi-code` is the separate Kimi For Coding","subscription endpoint with KIMI_CODE_API_KEY. It
|
|
15
|
+
`),sources:[{label:"commands",path:"packages/repl/src/interactive/commands.ts"}],nextTopics:["commands","permissions","sessions"]},{id:"providers",title:"Providers & models",aliases:["provider","model","models","llm","\u4F9B\u5E94\u5546","\u6A21\u578B","\u63D0\u4F9B\u5546"],summary:"Built-in providers, choosing a model, credential check, cross-provider fallback.",body:[`KodaX ships ${Go.length} built-in provider aliases:`,` ${Hh}`,"",`Default provider: ${Lo} (override with KODAX_PROVIDER env or`,'"provider" in ~/.kodax/config.json). Switch model live with the /model command.',"","Public Kimi uses KIMI_API_KEY and defaults to `kimi-k2.7-code`; select","`kimi-k2.7-code-highspeed`, `kimi-k2.6`, or `kimi-k2.5` explicitly. These routes","have a 262,144-token context. K2.7 cannot disable thinking; K2.6 sends its required","wire toggle when thinking is disabled. `kimi-code` is the separate Kimi For Coding","subscription endpoint with KIMI_CODE_API_KEY. It defaults to the direct `k3-256k`","Model ID (Moderato+) and offers Kimi K3 as `k3` (1,048,576 tokens, Allegretto+),","`kimi-for-coding` (K2.7 Code), and `kimi-for-coding-highspeed`. K3 reasoning uses","`thinking.effort`, defaults to high, and supports explicit disable. Public Kimi","and Kimi For Coding credentials are not interchangeable.","","Qwen Token Plan is the separate `qwen-token-plan` alias. It uses","`QWEN_TOKEN_API_KEY`, defaults to `qwen3.8-max-preview`, and speaks the","Anthropic-compatible protocol. `/model` can select `qwen3.7-max`,","`qwen3.7-plus`, `qwen3.6-flash`, `glm-5.2`, or `deepseek-v4-pro`; these Token","Plan routes have a 1M-token context. Qwen 3.8, 3.7 Plus, and 3.6 Flash accept","image input. It is distinct from the standard `qwen` alias and its `QWEN_API_KEY`.","","Check a key works: `verifyCredential` (SDK) / a configured provider is validated via","its verifyStrategy in provider-capabilities.json.","Cross-provider fallback on hard errors: /fallback slash + KODAX_FALLBACK_PROVIDERS.","Cheap/strong tiers for dispatched children: KODAX_FAST_* / KODAX_DEEP_*."].join(`
|
|
16
16
|
`),sources:[{label:"provider capabilities",path:"packages/llm/src/providers/provider-capabilities.json"}],nextTopics:["custom-providers","config","troubleshooting"]},{id:"custom-providers",title:"Custom providers",aliases:["custom provider","baseurl","openai compatible","\u81EA\u5B9A\u4E49\u4F9B\u5E94\u5546","\u81EA\u5B9A\u4E49\u6A21\u578B"],summary:"Point KodaX at an OpenAI/Anthropic-compatible endpoint, incl. thinking config.",body:["Add a `customProviders` entry in ~/.kodax/config.json for an OpenAI/Anthropic-","compatible endpoint: specify the protocol, baseUrl, auth header(s), and model name(s).","KodaX infers a verifyStrategy from the protocol; you can override it explicitly.","Once added, the custom provider is selectable like any built-in one.","","Thinking / reasoning (set on the provider, or per-model in models[]):","- supportsThinking: true is enough for most non-Claude models. With a bare"," supportsThinking: true (no explicit reasoningPreset/reasoningProfile), openai-compat"," stays passive \u2014 KodaX sends no thinking toggle and just surfaces the reasoning the",' model emits; anthropic-compat sends thinking:{type:"enabled"}, which is what the'," Anthropic-compatible endpoints of zhipu / kimi / minimax / deepseek expect. (An"," explicit reasoningPreset/reasoningProfile can send a toggle on openai-compat too.)","- openai-compat multi-turn caveat: some reasoning models (notably DeepSeek V4) reject a"," later turn whose history drops the prior reasoning_content. If thinking shows on the"," first turn but a follow-up errors, also set replayReasoningContent: true (per-provider"," or per-model).",'- reasoning: { efforts: ["low","high"], default: "high" } adds a tunable effort level.'," On openai-compat it sends reasoning_effort; on anthropic-compat it sends",' thinking:{type:"enabled"} + reasoning_effort (the non-Claude dialect). Include "off"'," in efforts to allow disabling thinking.","- Pointing anthropic-compat at REAL Claude (4.6+)? Claude needs adaptive thinking, not",' the enable toggle \u2014 set reasoningCapability: "native-adaptive" (or an explicit',' reasoningProfile with effortStrategy "anthropic-output-effort").',"- reasoningCapability is the low-level override: native-toggle / native-budget /"," native-effort / native-adaptive / none. It is ignored when supportsThinking is false.","If a relay rejects the chosen thinking shape, KodaX retries the turn once without it, so","it still completes (you just see no thinking) instead of erroring."].join(`
|
|
17
17
|
`),sources:[{label:"config loader",path:"packages/repl/src/common/utils.ts"},{label:"custom provider reasoning",path:"packages/llm/src/providers/custom-provider.ts"}],nextTopics:["providers","config"]},{id:"config",title:"Configuration",aliases:["settings","config.json","env","\u914D\u7F6E","\u8BBE\u7F6E","\u73AF\u5883\u53D8\u91CF"],summary:"Core config, split integration files, migration, and KODAX_* env precedence.",body:["KodaX config is JSON + env vars \u2014 there is no YAML and no single loader entry.","Core file: ~/.kodax/config.json. Common keys: provider, model, effort,","planModeEffort, permissionMode, customProviders, repoIntelligenceMode, compaction,","fallbackProviders, autoMode, verifierLog, stallLog, runtimeMode, and workflow.","`autoMode` configures the Runtime-owned Auto Mode engine, optional classifier model,","timeout, and speculative window. In Auto Mode an omitted engine means `llm`; if no","effective classifier model exists, KodaX reports a recoverable configuration error","before it calls a provider or opens a permission prompt. It never silently falls back","to rules for that error.","","User integration declarations are versioned separately:","- MCP: ~/.kodax/integrations/mcp.json","- A2A: ~/.kodax/integrations/a2a.json","- Extensions: ~/.kodax/integrations/extensions.json","Run `kodax integrations migrate` for a dry run, then","`kodax integrations migrate --apply` to create missing split files. Migration imports","MCP and Extensions from config.json#mcpServers and config.json#extensions; A2A has no","legacy source. It does not overwrite an existing destination. The first MCP/Extension mutation","also stages readable legacy entries before applying the change. Review literal-secret warnings,","then add `--cleanup-legacy` with `--apply` only after the destination validates; cleanup removes","a legacy field only when its split destination exists. Initialize A2A with `a2a add` or an empty",'version-1 `{ "version": 1, "agents": {} }` document.',"Long-lived owners hot-reload","valid changes and retain last-known-good state on failure; inbound A2A execution/store","authority changes are reported as restart-required.","","Env mirrors / extras: KODAX_PROVIDER, KODAX_EFFORT, KODAX_FALLBACK_PROVIDERS, KODAX_FAST_*/KODAX_DEEP_*,","KODAX_REPO_INTELLIGENCE. Env generally overrides file. Project vs user config:","user config is ~/.kodax; project-scoped state lives under <repo>/.kodax/."].join(`
|
|
18
18
|
`),sources:[{label:"config loader",path:"packages/repl/src/common/utils.ts"},{label:"integration config",path:"packages/repl/src/common/integration-config.ts"},{label:"canonical templates",path:"config-templates/"},{label:"permission config",path:"packages/repl/src/common/permission-config.ts"}],nextTopics:["providers","permissions","mcp","compaction"]},{id:"permissions",title:"Permission modes",aliases:["permission","approval","dangerous","\u6743\u9650","\u5BA1\u6279","\u6743\u9650\u6A21\u5F0F"],summary:"File/command permission modes, Runtime-owned Auto Mode, and exact grants.",body:["permissionMode controls when KodaX asks before file/command actions:","- accept-edits: auto-apply edits, still gate risky commands.","- plan: read-only planning, no mutations until you switch.","- auto: the Runtime-owned LLM/rules guardrail decides per action before it calls"," the shared permission broker. A safe allow creates no prompt; only an escalate does.",'Set via ~/.kodax/config.json "permissionMode" or the relevant slash command.',"","For a Runtime-backed prompt, choose allow once, a session-scoped exact grant, or (when","offered) a persistent exact grant. The Runtime creates the opaque suggestion; never","construct or widen a scope from the displayed input. Exact command grants include the","normalized command, cwd, shell, and background setting; path grants cover one tool and","one normalized absolute path. Dynamic shell commands deliberately do not get a","persistent suggestion. Persistent grants are daemon-owned and revisioned; use the SDK","permission service to inspect or revoke them.","Legacy grants without a Runtime-issued matcher remain visible and revocable but never","authorize a concrete call. A legacy `allow_always.scope` response is mapped only to a","current Runtime-issued concrete candidate; KodaX never persists its coarse scope.","","Auto Mode defaults to the `llm` engine. If no effective classifier model is available,","it fails with a recoverable configuration error before provider access or approval; it","does not quietly downgrade to rules. Classifier context is bounded and redacted before","it reaches a provider.","Shift-Tab cycles Plan -> Edits -> Auto; Shift+Enter inserts a newline. Entering Auto","shows the configured engine immediately as Auto[LLM] or Auto[RULES], while Runtime","settings updates are serialized so rapid cycling cannot let an older mode win. A","session-level LLM-to-rules downgrade remains sticky by design; use `/auto-engine llm`","to opt back into LLM classification.","Threat model: KodaX is a single-user CLI; workspace integrity is the user\u2019s responsibility."].join(`
|
|
@@ -213,8 +213,8 @@ Structured content:
|
|
|
213
213
|
${r}`:r}i(Vv,"combineDistinctContent");function Jv(e){return Object.fromEntries(Object.entries(e??{}).filter(([t])=>t!=="providerId"&&t!=="capabilityId"))}i(Jv,"omitRepeatedMetadata");async function Ms(e,t){try{if(!t.extensionRuntime)throw new Error("mcp_call requires an active extension runtime.");let n=_(e,"id");if(!n)throw new Error("id is required.");let r=Pe(n),o=e.args&&typeof e.args=="object"&&!Array.isArray(e.args)?e.args:{},s=await t.extensionRuntime.executeCapability("mcp",r,o);return Q({tool:"mcp_call",scope:"remote",trust:"provider",freshness:"unknown",provider:"mcp",summary:`Executed MCP tool ${r}.`,content:Vv(s.content,s.structuredContent),items:[],metadata:{capabilityKind:s.kind,...Jv(s.metadata)}},t)}catch(n){return`[Tool Error] mcp_call: ${n instanceof Error?n.message:String(n)}`}}i(Ms,"toolMcpCall");function sf(e){if(e!=null){if(typeof e=="string")return e.trim().length>0?e:void 0;try{return JSON.stringify(e)}catch{return String(e)}}}i(sf,"stringifyValue");function Qv(e,t){let n=sf(e),r=sf(t);return n?!r||r===n?n:`${n}
|
|
214
214
|
|
|
215
215
|
Structured content:
|
|
216
|
-
${r}`:r}i(Qv,"combineDistinctContent");function Zv(e){return Object.fromEntries(Object.entries(e??{}).filter(([t])=>t!=="providerId"&&t!=="capabilityId"))}i(Zv,"omitRepeatedMetadata");async function Ls(e,t){try{if(!t.extensionRuntime)throw new Error("mcp_read_resource requires an active extension runtime.");let n=_(e,"id");if(!n)throw new Error("id is required.");let r=Pe(n),{id:o,...s}=e,a=await t.extensionRuntime.readCapability("mcp",r,s);return Q({tool:"mcp_read_resource",scope:"remote",trust:"provider",freshness:"unknown",provider:"mcp",summary:`Read MCP resource ${r}.`,content:Qv(a.content,a.structuredContent),items:[],metadata:{capabilityKind:a.kind,...Zv(a.metadata)}},t)}catch(n){return`[Tool Error] mcp_read_resource: ${n instanceof Error?n.message:String(n)}`}}i(Ls,"toolMcpReadResource");function ek(e){if(e!=null){if(typeof e=="string")return e.trim().length>0?e:void 0;try{return JSON.stringify(e,null,2)}catch{return String(e)}}}i(ek,"stringifyValue");async function Ns(e,t){try{if(!t.extensionRuntime)throw new Error("mcp_get_prompt requires an active extension runtime.");let n=_(e,"id");if(!n)throw new Error("id is required.");let r=Pe(n),o=e.args&&typeof e.args=="object"&&!Array.isArray(e.args)?e.args:{},s=await t.extensionRuntime.getCapabilityPrompt("mcp",r,o);return Q({tool:"mcp_get_prompt",scope:"remote",trust:"provider",freshness:"unknown",provider:"mcp",summary:`Retrieved MCP prompt ${r}.`,content:ek(s),items:[],artifacts:[{kind:"provider",label:r,value:r}],metadata:{capabilityId:r,capabilityKind:"prompt"}},t)}catch(n){return`[Tool Error] mcp_get_prompt: ${n instanceof Error?n.message:String(n)}`}}i(Ns,"toolMcpGetPrompt");import{execFile as tk}from"child_process";import{promisify as nk}from"util";import{mkdirSync as rk}from"fs";import Ds from"path";var vn=nk(tk);function ok(e){return e?`kodax-wt-${e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,50)}`:`kodax-wt-${Date.now()}`}i(ok,"generateBranchName");function ik(e){return/^[a-zA-Z0-9][a-zA-Z0-9._/-]{0,62}[a-zA-Z0-9]$|^[a-zA-Z0-9]$/.test(e)}i(ik,"isValidBranchName");async function Qn(e,t){let n=e.branch_name,r=e.description,o=n??ok(r);if(!ik(o))throw new Error(`Invalid branch name: ${o}. Must start and end with alphanumeric, contain only alphanumeric, dots, dashes, or slashes (max 64 chars).`);if(/(?:^|[\\/])\.\.(?:[\\/]|$)/.test(o))throw new Error(`Invalid branch name: ${o}. Path traversal sequences (..) are not allowed.`);let s=t.executionCwd??t.gitRoot??process.cwd(),a=typeof e.base_dir=="string"&&e.base_dir.length>0?Ds.resolve(e.base_dir):void 0,c=a??Ds.resolve(s,".."),l=Ds.resolve(c,`.kodax-worktree-${o}`);if(!l.startsWith(c))throw new Error(`Worktree path escaped expected directory. Resolved to: ${l}`);a&&rk(a,{recursive:!0});try{await vn("git",["worktree","add","-b",o,l],{cwd:s})}catch(d){let u=d instanceof Error?d.message:String(d);throw new Error(`Failed to create worktree: ${u}`)}return JSON.stringify({path:l,branch:o})}i(Qn,"toolWorktreeCreate");async function Zn(e,t){let n=e.action,r=e.worktree_path,o=e.discard_changes;if(!n||n!=="keep"&&n!=="remove")throw new Error('action must be "keep" or "remove"');if(!r)throw new Error("worktree_path is required");let s=t.executionCwd??t.gitRoot??process.cwd();if(n==="keep")return JSON.stringify({restored:!0,message:`Worktree kept at ${r}. Restored CWD.`});if(!o)try{let{stdout:c}=await vn("git",["status","--porcelain"],{cwd:r}),l=c.trim().split(`
|
|
217
|
-
`).filter(f=>f.trim().length>0).length,{stdout:d}=await vn("git",["rev-list","--count","HEAD","--not","--remotes"],{cwd:r}),u=parseInt(d.trim(),10)||0;if(l>0||u>0)throw new Error(`Worktree has ${l} uncommitted file(s) and ${u} local commit(s). Use discard_changes=true to force removal, or commit/push your work first.`)}catch(c){throw c instanceof Error&&c.message.includes("uncommitted")?c:new Error(`Cannot verify worktree state: ${c instanceof Error?c.message:String(c)}`)}let a="";try{let{stdout:c}=await vn("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:r});a=c.trim()}catch{}try{await vn("git",["worktree","remove",r,"--force"],{cwd:s})}catch(c){let l=c instanceof Error?c.message:String(c);throw new Error(`Failed to remove worktree: ${l}`)}if(a)try{await vn("git",["branch","-D",a],{cwd:s})}catch{}return JSON.stringify({restored:!0,message:`Worktree removed. Branch ${a||"(unknown)"} deleted. Restored CWD.`})}i(Zn,"toolWorktreeRemove");import{createHash as sk}from"node:crypto";var ak="native:kodax-child";function so(e){return e.agentExecutorPlane?e.agentExecutorPlane.context:{actorId:e.actorControl?.callerPath??(e.sessionId?`session:${e.sessionId}`:"kodax:local"),...e.agentScope?{projectId:e.agentScope.id}:{}}}i(so,"codingDispatchContext");function ck(){return{agentId:ak,displayName:"KodaX Child",description:"Default KodaX child agent.",origin:"native",protocol:"native",configurationRevision:"kodax-child:v1",skills:[],inputModalities:["text","image","file"],outputModalities:["text","artifact"],capabilities:{streaming:"supported",durableTasks:"conditional",inputRequired:"supported",cancellation:"supported",artifacts:"supported"},effects:{remote:"none",workspace:"direct"}}}i(ck,"nativeDescriptor");function af(e,t,n){return n?`constructed:project:${encodeURIComponent(n.id)}:${encodeURIComponent(e.agent.name)}`:e.source==="markdown:project"?t.projectId?`constructed:project:${encodeURIComponent(t.projectId)}:${encodeURIComponent(e.agent.name)}`:void 0:`constructed:user:${encodeURIComponent(t.actorId)}:${encodeURIComponent(e.agent.name)}`}i(af,"constructedAgentId");function lk(e){let t=JSON.stringify({name:e.agent.name,instructions:e.agent.instructions,tools:e.agent.tools?.map(n=>n.name)??[],provider:e.agent.provider,model:e.agent.model,effort:e.agent.effort});return`sha256:${sk("sha256").update(t).digest("hex")}`}i(lk,"constructedRevision");function dk(e,t){return{agentId:t,displayName:e.agent.name,...e.agent.description?{description:e.agent.description}:{},origin:"constructed",protocol:"native",configurationRevision:lk(e),skills:[],inputModalities:["text","image","file"],outputModalities:["text","artifact"],capabilities:{streaming:"supported",durableTasks:"conditional",inputRequired:"supported",cancellation:"supported",artifacts:"supported"},effects:{remote:"none",workspace:"direct"}}}i(dk,"constructedDescriptor");function er(e,t){let n=[ck()];for(let r of kn(t)){let o=af(r,e,t);o&&n.push(dk(r,o))}return n}i(er,"listCodingDispatchableAgents");function cf(e,t,n){for(let r of er(t,n)){let o=r.agentId===e,s=r.origin==="constructed"&&r.displayName===e;if(!o&&!s)continue;if(r.origin==="native")return{kind:"native",descriptor:r};let a=kn(n).find(c=>af(c,t,n)===r.agentId);return a?{kind:"constructed",descriptor:r,subagentType:a.agent.name}:void 0}}i(cf,"resolveCodingDispatchableAgent");function uk(e){if(Array.isArray(e))return e.filter(t=>typeof t=="string"&&t.trim().length>0)}i(uk,"stringArray");function fk(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of["streaming","durableTasks","inputRequired","cancellation","artifacts"])t[r]===!0&&(n[r]=!0);return Object.keys(n).length>0?n:void 0}i(fk,"capabilityRequirements");function pk(e,t){for(let r of t.requiredSkills??[])if(!e.skills.includes(r))return!1;let n=t.requiredCapabilities;if(n){for(let r of["streaming","durableTasks","inputRequired","cancellation","artifacts"])if(n[r]===!0&&e.capabilities[r]!=="supported")return!1}return t.readOnly!==!0||e.effects.remote!=="write"&&e.effects.remote!=="unknown"}i(pk,"localMatchesQuery");async function lf(e,t){let n=t.agentExecutorPlane,r=uk(e.required_skills??e.requiredSkills),o=fk(e.required_capabilities??e.requiredCapabilities),s=so(t),a={...s,...r?{requiredSkills:r}:{},...o?{requiredCapabilities:o}:{},...(e.read_only??e.readOnly)===!0?{readOnly:!0}:{}},c=er(s,t.agentScope),l=n?await n.plane.listDispatchable(a,c):c.filter(d=>pk(d,a)).map(d=>({descriptor:d,dispatchability:{status:"dispatchable",checkedAt:new Date().toISOString(),reasons:[]}}));return JSON.stringify({agents:l.map(({descriptor:d,dispatchability:u})=>({agent_id:d.agentId,display_name:d.displayName,...d.description?{description:d.description}:{},origin:d.origin,protocol:d.protocol,skills:d.skills,input_modalities:d.inputModalities,output_modalities:d.outputModalities,capabilities:d.capabilities,effects:d.effects,availability:u.status,configuration_revision:d.configurationRevision}))},null,2)}i(lf,"toolListDispatchableAgents");function mk(e){if(typeof e=="object"&&e!==null&&"name"in e){let t=e.name;if(typeof t=="string"&&t.trim().length>0)return t}return"workflow"}i(mk,"readManifestName");async function df(e,t){let n=t.workflowHost;if(!n)return"[Tool Error] run_workflow is unavailable on this turn. It is exposed only for an explicit Workflow request in AMA mode. Use spawn_agent for a single focused sub-task.";if(!t.actorControl)return"[Tool Error] run_workflow requires the Runtime-owned Actor control plane.";let r=e.source;if(typeof r!="string"||r.trim().length===0)return"[Tool Error] run_workflow requires a non-empty `source` string defining `async function run(wf, args) { ... }`.";let o=e.manifest;if(typeof o!="object"||o===null||Array.isArray(o))return"[Tool Error] run_workflow requires a `manifest` object (name, description, phases, readOnly, maxAgents, maxConcurrency, patterns).";let s={manifest:o,source:r,...e.args!==void 0?{args:e.args}:{},...typeof e.resumeFromRunId=="string"&&e.resumeFromRunId.length>0?{resumeFromRunId:e.resumeFromRunId}:{}};try{let a=await n.startInline(s);if(a.kind==="declined")return`Workflow not started: ${a.reason??"the workflow was declined"}`;a.done.catch(l=>D({source:"coding:workflow-owner",level:"error",message:l instanceof Error?l.message:String(l),detail:{runId:a.runId}}));let c=`${t.actorControl.callerPath}/workflow:${a.runId}`;return[`run_id:${a.runId}`,`workflow_path:${c}`,`Workflow "${mk(o)}" started.`,`Use list_agents to inspect progress, wait_agent when its mailbox result is on the critical path, agent_output("${c}") to read the structured WorkflowOutcome, and interrupt_agent("${c}") to stop it.`].join(`
|
|
216
|
+
${r}`:r}i(Qv,"combineDistinctContent");function Zv(e){return Object.fromEntries(Object.entries(e??{}).filter(([t])=>t!=="providerId"&&t!=="capabilityId"))}i(Zv,"omitRepeatedMetadata");async function Ls(e,t){try{if(!t.extensionRuntime)throw new Error("mcp_read_resource requires an active extension runtime.");let n=_(e,"id");if(!n)throw new Error("id is required.");let r=Pe(n),{id:o,...s}=e,a=await t.extensionRuntime.readCapability("mcp",r,s);return Q({tool:"mcp_read_resource",scope:"remote",trust:"provider",freshness:"unknown",provider:"mcp",summary:`Read MCP resource ${r}.`,content:Qv(a.content,a.structuredContent),items:[],metadata:{capabilityKind:a.kind,...Zv(a.metadata)}},t)}catch(n){return`[Tool Error] mcp_read_resource: ${n instanceof Error?n.message:String(n)}`}}i(Ls,"toolMcpReadResource");function ek(e){if(e!=null){if(typeof e=="string")return e.trim().length>0?e:void 0;try{return JSON.stringify(e,null,2)}catch{return String(e)}}}i(ek,"stringifyValue");async function Ns(e,t){try{if(!t.extensionRuntime)throw new Error("mcp_get_prompt requires an active extension runtime.");let n=_(e,"id");if(!n)throw new Error("id is required.");let r=Pe(n),o=e.args&&typeof e.args=="object"&&!Array.isArray(e.args)?e.args:{},s=await t.extensionRuntime.getCapabilityPrompt("mcp",r,o);return Q({tool:"mcp_get_prompt",scope:"remote",trust:"provider",freshness:"unknown",provider:"mcp",summary:`Retrieved MCP prompt ${r}.`,content:ek(s),items:[],artifacts:[{kind:"provider",label:r,value:r}],metadata:{capabilityId:r,capabilityKind:"prompt"}},t)}catch(n){return`[Tool Error] mcp_get_prompt: ${n instanceof Error?n.message:String(n)}`}}i(Ns,"toolMcpGetPrompt");import{execFile as tk}from"child_process";import{promisify as nk}from"util";import{mkdirSync as rk}from"fs";import Ds from"path";var vn=nk(tk);function ok(e){return e?`kodax-wt-${e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"").slice(0,50)}`:`kodax-wt-${Date.now()}`}i(ok,"generateBranchName");function ik(e){return/^[a-zA-Z0-9][a-zA-Z0-9._/-]{0,62}[a-zA-Z0-9]$|^[a-zA-Z0-9]$/.test(e)}i(ik,"isValidBranchName");async function Qn(e,t){let n=e.branch_name,r=e.description,o=n??ok(r);if(!ik(o))throw new Error(`Invalid branch name: ${o}. Must start and end with alphanumeric, contain only alphanumeric, dots, dashes, or slashes (max 64 chars).`);if(/(?:^|[\\/])\.\.(?:[\\/]|$)/.test(o))throw new Error(`Invalid branch name: ${o}. Path traversal sequences (..) are not allowed.`);let s=t.executionCwd??t.gitRoot??process.cwd(),a=typeof e.base_dir=="string"&&e.base_dir.length>0?Ds.resolve(e.base_dir):void 0,c=a??Ds.resolve(s,".."),l=Ds.resolve(c,`.kodax-worktree-${o}`);if(!l.startsWith(c))throw new Error(`Worktree path escaped expected directory. Resolved to: ${l}`);a&&rk(a,{recursive:!0});try{await vn("git",["worktree","add","-b",o,l],{cwd:s,windowsHide:!0})}catch(d){let u=d instanceof Error?d.message:String(d);throw new Error(`Failed to create worktree: ${u}`)}return JSON.stringify({path:l,branch:o})}i(Qn,"toolWorktreeCreate");async function Zn(e,t){let n=e.action,r=e.worktree_path,o=e.discard_changes;if(!n||n!=="keep"&&n!=="remove")throw new Error('action must be "keep" or "remove"');if(!r)throw new Error("worktree_path is required");let s=t.executionCwd??t.gitRoot??process.cwd();if(n==="keep")return JSON.stringify({restored:!0,message:`Worktree kept at ${r}. Restored CWD.`});if(!o)try{let{stdout:c}=await vn("git",["status","--porcelain"],{cwd:r,windowsHide:!0}),l=c.trim().split(`
|
|
217
|
+
`).filter(f=>f.trim().length>0).length,{stdout:d}=await vn("git",["rev-list","--count","HEAD","--not","--remotes"],{cwd:r,windowsHide:!0}),u=parseInt(d.trim(),10)||0;if(l>0||u>0)throw new Error(`Worktree has ${l} uncommitted file(s) and ${u} local commit(s). Use discard_changes=true to force removal, or commit/push your work first.`)}catch(c){throw c instanceof Error&&c.message.includes("uncommitted")?c:new Error(`Cannot verify worktree state: ${c instanceof Error?c.message:String(c)}`)}let a="";try{let{stdout:c}=await vn("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:r,windowsHide:!0});a=c.trim()}catch{}try{await vn("git",["worktree","remove",r,"--force"],{cwd:s,windowsHide:!0})}catch(c){let l=c instanceof Error?c.message:String(c);throw new Error(`Failed to remove worktree: ${l}`)}if(a)try{await vn("git",["branch","-D",a],{cwd:s,windowsHide:!0})}catch{}return JSON.stringify({restored:!0,message:`Worktree removed. Branch ${a||"(unknown)"} deleted. Restored CWD.`})}i(Zn,"toolWorktreeRemove");import{createHash as sk}from"node:crypto";var ak="native:kodax-child";function so(e){return e.agentExecutorPlane?e.agentExecutorPlane.context:{actorId:e.actorControl?.callerPath??(e.sessionId?`session:${e.sessionId}`:"kodax:local"),...e.agentScope?{projectId:e.agentScope.id}:{}}}i(so,"codingDispatchContext");function ck(){return{agentId:ak,displayName:"KodaX Child",description:"Default KodaX child agent.",origin:"native",protocol:"native",configurationRevision:"kodax-child:v1",skills:[],inputModalities:["text","image","file"],outputModalities:["text","artifact"],capabilities:{streaming:"supported",durableTasks:"conditional",inputRequired:"supported",cancellation:"supported",artifacts:"supported"},effects:{remote:"none",workspace:"direct"}}}i(ck,"nativeDescriptor");function af(e,t,n){return n?`constructed:project:${encodeURIComponent(n.id)}:${encodeURIComponent(e.agent.name)}`:e.source==="markdown:project"?t.projectId?`constructed:project:${encodeURIComponent(t.projectId)}:${encodeURIComponent(e.agent.name)}`:void 0:`constructed:user:${encodeURIComponent(t.actorId)}:${encodeURIComponent(e.agent.name)}`}i(af,"constructedAgentId");function lk(e){let t=JSON.stringify({name:e.agent.name,instructions:e.agent.instructions,tools:e.agent.tools?.map(n=>n.name)??[],provider:e.agent.provider,model:e.agent.model,effort:e.agent.effort});return`sha256:${sk("sha256").update(t).digest("hex")}`}i(lk,"constructedRevision");function dk(e,t){return{agentId:t,displayName:e.agent.name,...e.agent.description?{description:e.agent.description}:{},origin:"constructed",protocol:"native",configurationRevision:lk(e),skills:[],inputModalities:["text","image","file"],outputModalities:["text","artifact"],capabilities:{streaming:"supported",durableTasks:"conditional",inputRequired:"supported",cancellation:"supported",artifacts:"supported"},effects:{remote:"none",workspace:"direct"}}}i(dk,"constructedDescriptor");function er(e,t){let n=[ck()];for(let r of kn(t)){let o=af(r,e,t);o&&n.push(dk(r,o))}return n}i(er,"listCodingDispatchableAgents");function cf(e,t,n){for(let r of er(t,n)){let o=r.agentId===e,s=r.origin==="constructed"&&r.displayName===e;if(!o&&!s)continue;if(r.origin==="native")return{kind:"native",descriptor:r};let a=kn(n).find(c=>af(c,t,n)===r.agentId);return a?{kind:"constructed",descriptor:r,subagentType:a.agent.name}:void 0}}i(cf,"resolveCodingDispatchableAgent");function uk(e){if(Array.isArray(e))return e.filter(t=>typeof t=="string"&&t.trim().length>0)}i(uk,"stringArray");function fk(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let r of["streaming","durableTasks","inputRequired","cancellation","artifacts"])t[r]===!0&&(n[r]=!0);return Object.keys(n).length>0?n:void 0}i(fk,"capabilityRequirements");function pk(e,t){for(let r of t.requiredSkills??[])if(!e.skills.includes(r))return!1;let n=t.requiredCapabilities;if(n){for(let r of["streaming","durableTasks","inputRequired","cancellation","artifacts"])if(n[r]===!0&&e.capabilities[r]!=="supported")return!1}return t.readOnly!==!0||e.effects.remote!=="write"&&e.effects.remote!=="unknown"}i(pk,"localMatchesQuery");async function lf(e,t){let n=t.agentExecutorPlane,r=uk(e.required_skills??e.requiredSkills),o=fk(e.required_capabilities??e.requiredCapabilities),s=so(t),a={...s,...r?{requiredSkills:r}:{},...o?{requiredCapabilities:o}:{},...(e.read_only??e.readOnly)===!0?{readOnly:!0}:{}},c=er(s,t.agentScope),l=n?await n.plane.listDispatchable(a,c):c.filter(d=>pk(d,a)).map(d=>({descriptor:d,dispatchability:{status:"dispatchable",checkedAt:new Date().toISOString(),reasons:[]}}));return JSON.stringify({agents:l.map(({descriptor:d,dispatchability:u})=>({agent_id:d.agentId,display_name:d.displayName,...d.description?{description:d.description}:{},origin:d.origin,protocol:d.protocol,skills:d.skills,input_modalities:d.inputModalities,output_modalities:d.outputModalities,capabilities:d.capabilities,effects:d.effects,availability:u.status,configuration_revision:d.configurationRevision}))},null,2)}i(lf,"toolListDispatchableAgents");function mk(e){if(typeof e=="object"&&e!==null&&"name"in e){let t=e.name;if(typeof t=="string"&&t.trim().length>0)return t}return"workflow"}i(mk,"readManifestName");async function df(e,t){let n=t.workflowHost;if(!n)return"[Tool Error] run_workflow is unavailable on this turn. It is exposed only for an explicit Workflow request in AMA mode. Use spawn_agent for a single focused sub-task.";if(!t.actorControl)return"[Tool Error] run_workflow requires the Runtime-owned Actor control plane.";let r=e.source;if(typeof r!="string"||r.trim().length===0)return"[Tool Error] run_workflow requires a non-empty `source` string defining `async function run(wf, args) { ... }`.";let o=e.manifest;if(typeof o!="object"||o===null||Array.isArray(o))return"[Tool Error] run_workflow requires a `manifest` object (name, description, phases, readOnly, maxAgents, maxConcurrency, patterns).";let s={manifest:o,source:r,...e.args!==void 0?{args:e.args}:{},...typeof e.resumeFromRunId=="string"&&e.resumeFromRunId.length>0?{resumeFromRunId:e.resumeFromRunId}:{}};try{let a=await n.startInline(s);if(a.kind==="declined")return`Workflow not started: ${a.reason??"the workflow was declined"}`;a.done.catch(l=>D({source:"coding:workflow-owner",level:"error",message:l instanceof Error?l.message:String(l),detail:{runId:a.runId}}));let c=`${t.actorControl.callerPath}/workflow:${a.runId}`;return[`run_id:${a.runId}`,`workflow_path:${c}`,`Workflow "${mk(o)}" started.`,`Use list_agents to inspect progress, wait_agent when its mailbox result is on the critical path, agent_output("${c}") to read the structured WorkflowOutcome, and interrupt_agent("${c}") to stop it.`].join(`
|
|
218
218
|
`)}catch(a){return`[Tool Error] run_workflow failed: ${a instanceof Error?a.message:String(a)}`}}i(df,"toolRunWorkflow");var uf=20,hk=20,gk=50,yk=12e4,wk=1e4,bk=36e5,vk=20,kk=5;function _k(e,t,n){let r=tt(),o=i(()=>{let a=r.peek({agentId:e,maxPriority:"background",limit:1,predicate:i(c=>c.mode==="prompt"||c.mode==="agent-message"||c.mode==="task-notification","predicate")})[0];if(a)return a.priority==="user"&&a.mode==="prompt"?"user_input_pending":"mailbox"},"currentStatus"),s=o();return s?Promise.resolve(s):n.aborted?Promise.resolve("interrupted"):new Promise(a=>{let c=!1,l,d=setTimeout(()=>f("wait_expired"),t),u=i(()=>f("interrupted"),"onAbort"),f=i(m=>{c||(c=!0,clearTimeout(d),l?.(),n.removeEventListener("abort",u),a(m))},"settle");l=r.subscribe(m=>{if(m.kind!=="enqueued"||m.message.agentId!==e)return;let h=o();h&&f(h)}),n.addEventListener("abort",u,{once:!0});let p=o();n.aborted?f("interrupted"):p&&f(p)})}i(_k,"waitForMailboxActivity");function xk(e){return tt().has({agentId:e,maxPriority:"user",mode:"prompt"})}i(xk,"hasQueuedUserPrompt");async function js(e,t){let n=Lt(t),r=ht(e,"task_name"),o=ht(e,"objective"),s=e.read_only!==!1,a=re(e.provider),c=re(e.agent_id),l=await Ok(t,c,s),d={taskName:r,objective:o,forkTurns:Ik(e.fork_turns),kind:l.kind,capabilities:{filesystem:s?"read":"write",...a?{providers:[a]}:{},canAskUser:!1,...l.control?{control:l.control}:{}},metadata:Rk(e,s,a,c,l.specialistName)};try{let u=await n.spawn(d);return Ne({ok:!0,...u})}catch(u){return Ce("spawn_agent",u)}}i(js,"toolSpawnAgent");async function Fs(e,t){let n=Lt(t),r=ht(e,"to"),o=ht(e,"content"),s=$k(e.classification),a=re(e.forwarded_message_id);try{if(r==="*"){let u=Ck(n,Ek(n),a);if(u.length>uf)return Ce("send_message",{code:"broadcast_limit_reached",message:`broadcast has ${u.length} recipients; max is ${uf}`});if(u.length===0)return Ce("send_message",{code:"message_cycle_detected",message:"broadcast has no recipient outside the forwarding chain"});let f=mf(t,u.length);if(f)return Ce("send_message",f);let p=await Promise.all(u.map(m=>n.send(m.path,o,s,a)));return Ne({ok:!0,delivery:"broadcast",recipients:u.map(m=>m.path),messageIds:p.map(m=>m.messageId)})}let c=ao(n,r),l=mf(t,1);if(l)return Ce("send_message",l);let d=await n.send(c,o,s,a);return Ne({ok:!0,delivery:"message",actorPath:c,messageId:d.messageId})}catch(c){return Ce("send_message",c)}}i(Fs,"toolSendAgentMessage");async function Us(e,t){let n=Lt(t);try{let r=ao(n,ht(e,"target")),o=await n.followup(r,ht(e,"objective"));return Ne({ok:!0,actorPath:r,...o})}catch(r){return Ce("followup_task",r)}}i(Us,"toolFollowupTask");async function qs(e,t){let n=Lt(t);try{let r=wf(e.timeout_ms,yk,wk,bk,"timeout_ms");if(t.abortSignal?.aborted)return Ne({ok:!0,status:"interrupted"});let o=qe(t.sessionId,n.callerPath),s=new AbortController,a=i(()=>s.abort(t.abortSignal?.reason),"forwardAbort");t.abortSignal?.addEventListener("abort",a,{once:!0});try{let c=await _k(o,r,s.signal);return Ne({ok:!0,status:c==="mailbox"&&xk(o)?"user_input_pending":c})}finally{s.abort("wait_agent settled"),t.abortSignal?.removeEventListener("abort",a)}}catch(r){return Ce("wait_agent",r)}}i(qs,"toolWaitAgent");async function Bs(e,t){let n=Lt(t);try{let r=ao(n,ht(e,"target")),o=Pk(e.scope);return await n.interrupt(r,re(e.reason),o),Ne({ok:!0,actorPath:r,state:"interrupted",scope:o})}catch(r){return Ce("interrupt_agent",r)}}i(Bs,"toolInterruptAgent");async function Ws(e,t){let n=Lt(t);try{let r=n.list(),o=hf(n,re(e.path_prefix)),s=Mk(e.state),a=hf(n,re(e.after_path)),c=wf(e.limit,hk,1,gk,"limit"),l=r.actors.filter(p=>(o===void 0||p.path.startsWith(o))&&(s===void 0||p.state===s)),d=a===void 0?l:l.filter(p=>p.path.localeCompare(a)>0),u=d.slice(0,c),f=d.length>u.length;return Ne({ok:!0,callerPath:n.callerPath,activeNonRootTurns:r.activeNonRootTurns,maxConcurrentThreads:r.maxConcurrentThreads,revision:r.revision,query:{...o===void 0?{}:{pathPrefix:o},...s===void 0?{}:{state:s},...a===void 0?{}:{afterPath:a},limit:c},matchedActorCount:l.length,hasMore:f,...f&&u.at(-1)?{nextAfterPath:u.at(-1)?.path}:{},actors:u.map(p=>({path:p.path,taskName:p.taskName,parentPath:p.parentPath,kind:p.kind,state:p.state,capabilities:p.capabilities,currentTurnId:p.currentTurnId,turnCount:p.turnIds.length,latestTurn:p.latestTurn,revision:p.revision}))})}catch(r){return Ce("list_agents",r)}}i(Ws,"toolListAgents");async function Hs(e,t){let n=Lt(t);try{let r=ao(n,ht(e,"target")),o=n.output(r,re(e.turn_id));return Ne({ok:!0,...o})}catch(r){return Ce("agent_output",r)}}i(Hs,"toolAgentOutput");function Lt(e){if(!e.actorControl)throw new Error("Agent collaboration is unavailable on this turn.");return e.actorControl}i(Lt,"requireActorControl");function ao(e,t){let n=e.list().actors;if(t.startsWith("/root"))return t;if(t==="parent"&&e.callerPath!=="/root"){let a=n.find(c=>c.path===e.callerPath)?.parentPath;if(!a)throw new Error("The root Agent has no parent.");return a}let r=`${e.callerPath}/${t}`;if(n.some(a=>a.path===r))return r;let o=n.find(a=>a.path===e.callerPath)?.parentPath,s=o?`${o}/${t}`:`/root/${t}`;if(n.some(a=>a.path===s))return s;throw new Error(`Actor target is not visible: ${t}`)}i(ao,"resolveTarget");function Ek(e){let t=e.list().actors,n=t.find(r=>r.path===e.callerPath);return n?t.filter(r=>r.path!==n.path&&(n.path==="/root"||r.path===n.parentPath||r.parentPath===n.path||n.parentPath!==void 0&&r.parentPath===n.parentPath)):[]}i(Ek,"messageRecipients");function Sk(e){return e==="completed"||e==="failed"||e==="interrupted"}i(Sk,"isTerminalTurnState");async function BM(e,t){let n=e.actorControl;if(!n)return;let r=Tk(t);if(r.length===0)return;await n.acknowledgeCompletions(r);let o=new Set(r);tt().dequeue({agentId:qe(e.sessionId,n.callerPath),maxPriority:"background",mode:"task-notification",predicate:i(s=>s.taskResult?.source==="child_task"&&o.has(s.taskResult.taskId),"predicate")})}i(BM,"commitActorNotificationReceipts");function Tk(e){let t=new Set;for(let n of e){ff(n._taskResult,t);for(let r of n._taskResults??[])ff(r,t);if(Array.isArray(n.content))for(let r of n.content)r.type!=="tool_result"||typeof r.content!="string"||Ak(r.content,t)}return[...t]}i(Tk,"committedTerminalTurnIds");function ff(e,t){e?.source==="child_task"&&e.taskId.length>0&&t.add(e.taskId)}i(ff,"collectTaskResultTurnIds");function Ak(e,t){let n=e.trim();if(!n.startsWith("{"))return;let r;try{r=JSON.parse(n)}catch{return}if(!(!yf(r)||r.ok!==!0)){if(Array.isArray(r.terminalOutputs))for(let o of r.terminalOutputs)pf(o,t);pf(r,t)}}i(Ak,"collectToolResultTurnIds");function pf(e,t){!yf(e)||typeof e.turnId!="string"||typeof e.state!="string"||!Sk(e.state)||t.add(e.turnId)}i(pf,"collectTerminalOutputTurnId");function yf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(yf,"isRecord");function Ck(e,t,n){if(!n)return[...t];let r=e.get(e.callerPath).mailbox.find(s=>s.messageId===n);if(!r)return[...t];let o=new Set([...r.lineage??[r.senderPath],e.callerPath]);return t.filter(s=>!o.has(s.path))}i(Ck,"novelMessageRecipients");function mf(e,t){let n=e.sendMessageTurnCounter;if(!n)return;let o=e.actorControl?.callerPath==="/root"?vk:kk;if(n.count+t>o)return{code:"message_rate_limited",message:`send_message limit reached for this Agent turn (${n.count} sent, limit ${o})`,limit:o,sent:n.count};n.count+=t}i(mf,"chargeSendCounter");function Rk(e,t,n,r,o){return{readOnly:t,evidenceRefs:gf(e.evidence_refs,"evidence_refs"),constraints:gf(e.constraints,"constraints"),...re(e.scope)?{scope:re(e.scope)??""}:{},...re(e.model)?{model:re(e.model)??""}:{},...re(e.model_hint)?{modelHint:re(e.model_hint)??""}:{},...re(e.effort)?{effort:re(e.effort)??""}:{},...re(e.isolation)?{isolation:re(e.isolation)??""}:{},...n?{provider:n}:{},...r?{agentId:r}:{},...o?{specialistName:o}:{}}}i(Rk,"spawnMetadata");async function Ok(e,t,n){if(!t)return{kind:"native"};let r=so(e),o=cf(t,r,e.agentScope);if(o?.kind==="native")return{kind:"native"};if(o?.kind==="constructed")return{kind:"constructed",specialistName:o.subagentType};let s=e.agentExecutorPlane;if(!s)throw new Error(`agent_id is not known in the local dispatchable catalog: ${t}`);let a=await s.plane.describe(t,{...s.context,readOnly:n},er(s.context,e.agentScope));if(!a||a.descriptor.origin!=="external")throw new Error(`agent_id is not known in the dispatchable catalog: ${t}`);let c=a.descriptor.capabilities;return{kind:"external",control:{followup:c.inputRequired!=="unsupported",interrupt:c.cancellation!=="unsupported",streaming:c.streaming!=="unsupported",artifacts:c.artifacts!=="unsupported"}}}i(Ok,"resolveAgentSelector");function Ik(e){if(e===void 0)return"all";if(e==="all"||e==="none"||typeof e=="number"&&Number.isSafeInteger(e)&&e>0)return e;throw new Error('fork_turns must be "all", "none", or a positive integer.')}i(Ik,"parseForkTurns");function $k(e){if(e===void 0)return"internal";if(e==="public"||e==="internal"||e==="sensitive")return e;throw new Error("classification must be public, internal, or sensitive.")}i($k,"parseClassification");function Pk(e){if(e===void 0||e==="turn")return"turn";if(e==="subtree")return e;throw new Error("scope must be turn or subtree.")}i(Pk,"parseInterruptScope");function Mk(e){if(e!==void 0){if(e==="running"||e==="idle"||e==="closed")return e;throw new Error("state must be running, idle, or closed.")}}i(Mk,"parseActorState");function hf(e,t){if(t!==void 0)return t==="/root"||t.startsWith("/root/")?t:`${e.callerPath}/${t.replace(/^\/+/,"")}`}i(hf,"normalizeActorPath");function ht(e,t){let n=re(e[t]);if(!n)throw new Error(`${t} is required.`);return n}i(ht,"requiredString");function re(e){if(typeof e!="string")return;let t=e.trim();return t.length>0?t:void 0}i(re,"optionalString");function gf(e,t){if(e===void 0)return[];if(!Array.isArray(e)||!e.every(n=>typeof n=="string"))throw new Error(`${t} must be an array of strings.`);return e.map(n=>n.trim()).filter(Boolean)}i(gf,"stringArray");function wf(e,t,n,r,o){if(e===void 0)return t;if(typeof e!="number"||!Number.isSafeInteger(e)||e<n||e>r)throw new Error(`${o} must be an integer between ${n} and ${r}.`);return e}i(wf,"boundedInteger");function Ne(e){return JSON.stringify(e,null,2)}i(Ne,"render");function Ce(e,t){let n=Lk(t);return Ne({ok:!1,tool:e,error:n})}i(Ce,"renderActorError");function Lk(e){if(typeof e=="object"&&e!==null){let t=e;return{code:typeof t.code=="string"?t.code:"agent_control_failed",message:e instanceof Error?e.message:String(t.message??"Agent control failed."),...typeof t.maxConcurrentThreads=="number"?{maxConcurrentThreads:t.maxConcurrentThreads}:{},...typeof t.activeNonRootTurns=="number"?{activeNonRootTurns:t.activeNonRootTurns}:{},...t.availableNonRootSlots===0?{availableNonRootSlots:0}:{},...typeof t.retryable=="boolean"?{retryable:t.retryable}:{},...t.retryable===!0?{hint:"Wait for an active Agent turn to finish, then replan."}:{},...typeof t.limit=="number"?{limit:t.limit}:{},...typeof t.sent=="number"?{sent:t.sent}:{}}}return{code:"agent_control_failed",message:String(e)}}i(Lk,"errorFact");function bf(){let e="[Tool Error] /goal feature is not wired in this session (no host adapter \u2014 likely an isolated test harness or sync-dispatch context). Goal tools require a REPL session with lineage persistence.";return{readGoal:i(async()=>null,"readGoal"),createGoal:i(async()=>{throw new Error(e)},"createGoal"),requestComplete:i(async()=>({ok:!1,reason:e}),"requestComplete"),requestBlocked:i(async()=>({ok:!1,statusMessage:e,counter:{current:0,required:3}}),"requestBlocked")}}i(bf,"makeDisabledGoalToolsContext");import{randomBytes as Nk}from"node:crypto";function vf(e){if(!e)return 0;let t=Math.max(0,(e.inputTokens??0)-(e.cachedReadTokens??0)),n=Math.max(0,e.outputTokens??0);return t+n}i(vf,"goalTokenDelta");function zM(e,t){let n=t-e;return!Number.isFinite(n)||n<=0?0:Math.floor(n/1e3)}i(zM,"turnWallTimeDelta");function kf(e,t,n){return n===null?!1:e+t>=n}i(kf,"shouldFlipBudgetLimited");function Dk(e){return`${e}-${Nk(4).toString("hex")}`}i(Dk,"newGoalId");function QM(e,t,n=Date.now()){let r=e.trim();if(r.length===0)throw new Error("Goal objective must be a non-empty string");if(t!==null&&(!Number.isFinite(t)||t<=0))throw new Error(`Goal tokenBudget must be a positive finite number, got ${t}`);return Object.freeze({version:1,id:Dk(n),objective:r,status:"active",tokenBudget:t,tokensUsed:0,timeUsedSeconds:0,blockerTurnCount:0,lastBlockerKind:null,createdAt:n,updatedAt:n})}i(QM,"buildCreatedGoal");function ZM(e,t,n,r=Date.now()){if(e.status!=="active")return{nextState:e,budgetLimited:!1};let o=vf(t),s=Math.max(0,Math.floor(n));if(o===0&&s===0)return{nextState:e,budgetLimited:!1};let a=kf(e.tokensUsed,o,e.tokenBudget);return{nextState:Object.freeze({...e,tokensUsed:e.tokensUsed+o,timeUsedSeconds:e.timeUsedSeconds+s,status:a?"budget_limited":e.status,updatedAt:r}),budgetLimited:a}}i(ZM,"applyAccountingDelta");function e0(e,t=Date.now()){if(e.status!=="active")throw new Error(`Cannot pause goal from status '${e.status}'; only 'active' is pausable.`);return Object.freeze({...e,status:"paused",updatedAt:t})}i(e0,"buildPausedGoal");function t0(e,t=Date.now()){if(e.status!=="paused")throw new Error(`Cannot resume goal from status '${e.status}'; only 'paused' is resumable.`);return Object.freeze({...e,status:"active",updatedAt:t})}i(t0,"buildResumedGoal");function n0(e,t,n,r=Date.now()){if(e.status!=="active")throw new Error(`Cannot mark goal blocked from status '${e.status}'; only 'active' transitions to 'blocked'.`);return Object.freeze({...e,status:"blocked",lastBlockerKind:t,blockerTurnCount:n,updatedAt:r})}i(n0,"buildBlockedGoal");function r0(e,t=Date.now()){if(e.status!=="active")throw new Error(`Cannot mark goal complete from status '${e.status}'; only 'active' transitions to 'complete'.`);return Object.freeze({...e,status:"complete",updatedAt:t})}i(r0,"buildCompleteGoal");function _f(e){return e===null?!0:typeof e=="number"&&Number.isFinite(e)&&e>0}i(_f,"isValidTokenBudget");var jk="No goal set for this session. Use `/goal <objective>` (slash command) or call `create_goal` (only when the user or system instructions explicitly request a goal).";function Ks(e){return e.goalContext??bf()}i(Ks,"getCtx");async function xf(e,t){let r=await Ks(t).readGoal();if(!r)return jk;let o=[`Goal: ${r.objective}`,`Status: ${r.status}`,`Tokens used: ${r.tokensUsed}`];if(r.tokenBudget!==null){let s=Math.max(0,r.tokenBudget-r.tokensUsed);o.push(`Token budget: ${r.tokenBudget} (remaining: ${s})`)}else o.push("Token budget: none");return o.push(`Elapsed: ${r.timeUsedSeconds}s`),r.status==="blocked"&&r.lastBlockerKind&&o.push(`Blocker: ${r.lastBlockerKind}`),o.join(`
|
|
219
219
|
`)}i(xf,"toolGetGoal");async function Ef(e,t){let n=Ks(t),r=typeof e.objective=="string"?e.objective.trim():"";if(!r)return"[Tool Error] create_goal: missing required parameter `objective` (a non-empty string describing the long-running goal).";let o=e.token_budget??null,s=o===null?null:Number(o);if(!_f(s))return"[Tool Error] create_goal: token_budget must be a positive integer or omitted. Set this only when the user explicitly requested a budget.";try{let a=await n.createGoal({objective:r,tokenBudget:s}),c=a.tokenBudget!==null?` (budget: ${a.tokenBudget} tokens)`:"";return`Goal created: "${a.objective}"${c}. The agent will pursue this objective until completion, blocked confirmation, or user clear.`}catch(a){return`[Tool Error] create_goal: ${a instanceof Error?a.message:String(a)}`}}i(Ef,"toolCreateGoal");async function Sf(e,t){let n=Ks(t),r=typeof e.status=="string"?e.status.trim():"";if(r!=="complete"&&r!=="blocked")return'[Tool Error] update_goal: status must be exactly "complete" or "blocked". Other status transitions (paused, resumed, cleared, budget_limited) are controlled by the user or the runtime, not this tool.';let o=await n.readGoal();if(!o)return"[Tool Error] update_goal: no active goal to update. Use create_goal first (only when explicitly requested by the user / system).";if(r==="complete"){let c=await n.requestComplete();if(c.ok)return`Goal marked complete: "${o.objective}".`;let l=c.suggestedFix?` Suggested next step: ${c.suggestedFix}`:"";return`[Tool Error] update_goal: completion verifier did not confirm. ${c.reason??"unspecified reason."}${l} Keep working until the objective is genuinely achieved.`}let s=typeof e.blocker_kind=="string"?e.blocker_kind.trim():"";if(!s)return"[Tool Error] update_goal: status=blocked requires a non-empty `blocker_kind` describing what is preventing progress.";let a=await n.requestBlocked(s);return a.ok?`Goal marked blocked: ${a.statusMessage}`:`[Tool Error] update_goal: ${a.statusMessage}`}i(Sf,"toolUpdateGoal");var Tf="tool_describe",Gs="tool_call";function Fk(e){if(e.name!==Gs)return;let t=e.input??{},n=typeof t.name=="string"?t.name.trim():typeof t.tool_name=="string"?t.tool_name.trim():"";if(n.length===0)return{ok:!1,error:"`name` is required."};let r=t.input??t.arguments;return!r||typeof r!="object"||Array.isArray(r)?{ok:!1,error:"`input` must be a JSON object."}:{ok:!0,call:{id:`${e.id}:${n}`,name:n,input:r}}}i(Fk,"resolveToolBridgeTarget");var Af=i(async(e,t)=>"[Tool Error] tool bridge dispatch is unavailable outside the agent runtime.","bridgeDispatchUnavailable"),zs={name:Tf,description:"Return the full bounded description and input schema for one active tool. Use this after tool_search when a tool schema is hidden behind the portable bridge.",input_schema:{type:"object",properties:{name:{type:"string",description:"Name of the active tool to describe."},names:{type:"array",items:{type:"string"},description:"Optional list of active tool names to describe. Capped by the runtime."}}},handler:Af,sideEffect:"readonly",planModeAllowed:!0,toClassifierInput:i(()=>"","toClassifierInput")},Xs={name:Gs,description:"Call one active tool through the portable bridge after discovering or describing it. The runtime re-applies the target tool policy, permission checks, and result guardrails.",input_schema:{type:"object",properties:{name:{type:"string",description:"Name of the active target tool to call."},input:{type:"object",description:"JSON object passed as the target tool input."}},required:["name","input"]},handler:Af,sideEffect:"mutates-state",planModeAllowed:!0,toClassifierInput:i(e=>{let t=e&&typeof e=="object"?e:{};return`ToolBridgeCall: ${typeof t.name=="string"?t.name:"<missing-name>"}`},"toClassifierInput")};var tr=3e4,co=i(async()=>"ask-user","defaultPolicy"),gt=class extends Error{static{i(this,"CapabilityDeniedError")}toolName;declaredTools;constructor(t,n){super(`Constructed handler attempted to call '${t}' but capabilities.tools only declares [${n.join(", ")||"<empty>"}]`),this.name="CapabilityDeniedError",this.toolName=t,this.declaredTools=n}},yt=class extends Error{static{i(this,"ConstructionManifestError")}path;constructor(t,n){super(t),this.name="ConstructionManifestError",this.path=n}};import wt from"path";import Ft from"fs/promises";import b_ from"crypto";function Nt(e){let t=e.indexOf(":");if(t===-1)return e;let n=e.slice(t+1),r=n.indexOf("@");return r===-1?n:n.slice(0,r)}i(Nt,"parseToolNameFromRef");function Uk(e){if(!(!e||e.length===0))return e.map(t=>({name:Nt(t.ref)}))}i(Uk,"refsToTools");function qk(e){return{name:Nt(e),instructions:""}}i(qk,"refToHandoffTargetAgent");function Bk(e){if(!(!e||e.length===0))return e.map(t=>({target:qk(t.target.ref),kind:t.kind,description:t.description}))}i(Bk,"refsToHandoffs");function Wk(e){if(!(!e||e.length===0))return e}i(Wk,"passThroughDeclaredInvariants");function ue(e){let{name:t,content:n}=e,r=Uk(n.tools),o=Bk(n.handoffs),s=Wk(n.declaredInvariants);return{name:t,instructions:n.instructions,...r!==void 0?{tools:r}:{},...o!==void 0?{handoffs:o}:{},...n.reasoning!==void 0?{reasoning:n.reasoning}:{},...n.guardrails!==void 0?{guardrails:n.guardrails.map(c=>({kind:c.kind,name:Nt(c.ref)}))}:{},...n.model!==void 0?{model:n.model}:{},...n.provider!==void 0?{provider:n.provider}:{},...n.effort!==void 0?{effort:n.effort}:{},...n.outputSchema!==void 0?{outputSchema:n.outputSchema}:{},...n.maxBudget!==void 0?{maxBudget:n.maxBudget}:{},...s!==void 0?{declaredInvariants:s}:{}}}i(ue,"buildAdmissionManifest");var Hk=3e4;function Kk(e,t){let n=[],r=!1;if(e.expectMatch!==void 0){r=!0;let o;try{o=new RegExp(e.expectMatch)}catch(s){return{caseId:e.id,ok:!1,output:t,error:`expectMatch is not a valid regex: ${s.message}`}}o.test(t)||n.push(`expectMatch ${JSON.stringify(e.expectMatch)} did not match output`)}if(e.expectNotMatch!==void 0){r=!0;let o;try{o=new RegExp(e.expectNotMatch)}catch(s){return{caseId:e.id,ok:!1,output:t,error:`expectNotMatch is not a valid regex: ${s.message}`}}o.test(t)&&n.push(`expectNotMatch ${JSON.stringify(e.expectNotMatch)} unexpectedly matched`)}return e.expectFinalText!==void 0&&(r=!0,t.includes(e.expectFinalText)||n.push(`expectFinalText ${JSON.stringify(e.expectFinalText)} not found in output`)),r?n.length>0?{caseId:e.id,ok:!1,output:t,error:n.join("; ")}:{caseId:e.id,ok:!0,output:t}:{caseId:e.id,ok:!1,output:t,error:"test case has no expectMatch / expectNotMatch / expectFinalText \u2014 at least one is required"}}i(Kk,"gradeCase");async function Gk(e,t,n,r){let o=new AbortController,s=!1,a,c=new Promise((l,d)=>{a=setTimeout(()=>{s=!0,o.abort(),d(new Error("SANDBOX_TIMEOUT"))},r)});try{let l=ae.run(e,t.input,{llm:n,tracer:null,abortSignal:o.signal});l.catch(()=>{});let d=await Promise.race([l,c]);return Kk(t,d.output)}catch(l){return s?{caseId:t.id,ok:!1,error:`timeout after ${r}ms`}:{caseId:t.id,ok:!1,error:l.message}}finally{a&&clearTimeout(a)}}i(Gk,"runOneCase");async function Ys(e,t){let n=e.content.testCases??[];if(n.length===0)return{ok:!0,cases:[]};let r=t.resolvedAgent??nr(e.name);if(!r)return{ok:!1,cases:n.map(a=>({caseId:a.id,ok:!1,error:`sandbox: agent '${e.name}' not found in resolver and no resolvedAgent override supplied`}))};let o=t.budgetMs??Hk,s=[];for(let a of n)s.push(await Gk(r,a,t.llm,o));return{ok:s.every(a=>a.ok),cases:s}}i(Ys,"runSandboxAgentTest");import Ff from"node:fs/promises";import uo from"node:path";import{pathToFileURL as i_}from"node:url";import{existsSync as zk}from"node:fs";import{basename as Xk,dirname as Qs,join as If}from"node:path";import{fileURLToPath as $f,pathToFileURL as Pf}from"node:url";import{Worker as Yk}from"node:worker_threads";var Cf=5,Rf="__constructedDepth";function Vs(e,t,n={}){let r=e??{},o=new Set(t.tools),s=r[Rf]??0,a=Object.create(null);for(let d of o)a[d]=async u=>{if(!o.has(d))throw n.onDenied?.({toolName:d,declaredTools:t.tools}),new gt(d,t.tools);let f=u&&typeof u=="object"&&!Array.isArray(u)?u:{},p=r.planModeBlockCheck;if(p){let g=p(d,f);if(g)return`[Tool Error] ${g} (called from constructed handler \u2014 plan-mode applies transitively).`}let h=_e(d)?.source.kind==="constructed",y=h?s+1:s;if(h&&y>Cf)return`[Tool Error] Constructed tool depth limit (${Cf}) exceeded calling '${d}'. Possible recursive composition (A\u2192B\u2192A); break the cycle or factor through a builtin tool.`;let w={...r,[Rf]:y};return Js(d,f,w)};let c=new Proxy(a,{get(d,u){if(typeof u=="symbol")return Reflect.get(d,u);if(Object.prototype.hasOwnProperty.call(d,u))return d[u];throw n.onDenied?.({toolName:u,declaredTools:t.tools}),new gt(u,t.tools)},set(){throw new Error("Constructed handler attempted to mutate ctx.tools")},deleteProperty(){throw new Error("Constructed handler attempted to delete ctx.tools entries")},has(d,u){return Object.prototype.hasOwnProperty.call(d,u)},ownKeys(d){return Reflect.ownKeys(d)},getPrototypeOf(){return null}});return Object.freeze({...r,tools:c})}i(Vs,"createCtxProxy");function Of(e){let t=e instanceof Error?e:new Error(String(e));return{name:t.name,message:t.message,...t.stack!==void 0?{stack:t.stack}:{}}}i(Of,"serializeHandlerWorkerError");var lo=new Map,Vk=0;async function Lf(e){await rr(e.key);let t={...e,disposed:!1,tail:Promise.resolve()};lo.set(e.key,t);try{await Nf(t).ready}catch(n){throw await rr(e.key),n}return(n,r)=>Jk(t,n,r)}i(Lf,"prepareConstructedHandlerWorker");async function rr(e){let t=lo.get(e);if(!t)return;lo.delete(e),t.disposed=!0;let n=t.state;t.state=void 0,n&&(Df(n,new Error(`Constructed handler '${t.label}' was disposed.`)),await n.worker.terminate())}i(rr,"disposeConstructedHandlerWorker");async function ta(){await Promise.all([...lo.keys()].map(rr))}i(ta,"shutdownConstructedHandlerWorkersForTest");function Jk(e,t,n){let r=e.tail.then(()=>Qk(e,t,n));return e.tail=r.then(()=>{},()=>{}),r}i(Jk,"enqueueInvocation");async function Qk(e,t,n){Zs(e);let r=Nf(e);await r.ready,Zs(e),r.worker.ref();let o=Vs(n,e.capabilities,e.ctxProxyOptions),s=++Vk;return new Promise((a,c)=>{let l=setTimeout(()=>{t_(e,r,s)},e.timeoutMs),d=r_(n),u=i(()=>{ea(r.worker,{kind:"abort",invocationId:s})},"forwardAbort");d&&!d.aborted&&d.addEventListener("abort",u,{once:!0}),r.invocation={id:s,proxy:o,resolve:a,reject:c,timer:l,...d?{removeAbortListener:i(()=>d.removeEventListener("abort",u),"removeAbortListener")}:{}};try{r.worker.postMessage({kind:"invoke",invocationId:s,input:t,context:n_(n)}),d?.aborted&&u()}catch(f){r.invocation?.removeAbortListener?.(),r.invocation=void 0,clearTimeout(l),r.worker.unref(),c(f instanceof Error?f:new Error(String(f)))}})}i(Qk,"invoke");function Nf(e){if(Zs(e),e.state)return e.state;let t=o_(),n=new Yk(t,{workerData:{moduleUrl:e.moduleUrl,label:e.label},execArgv:t.href.endsWith(".ts")?["--import","tsx"]:[]}),r=i(()=>{},"resolveReady"),o=i(()=>{},"rejectReady"),s={worker:n,ready:new Promise((a,c)=>{r=a,o=c})};return e.state=s,n.on("message",a=>{a.kind==="ready"?(n.unref(),r()):a.kind==="bootstrap_error"?o(jf(a.error)):a.kind==="tool_call"?Zk(s,a):a.kind==="result"&&e_(s,a.invocationId,a.result,a.error)}),n.on("error",a=>{o(a),Mf(e,s,a)}),n.on("exit",a=>{let c=new Error(`Constructed handler Worker exited with code ${a}.`);o(c),Mf(e,s,c)}),s}i(Nf,"getWorkerState");function Zs(e){if(e.disposed)throw new Error(`Constructed handler '${e.label}' was disposed.`)}i(Zs,"assertHandlerWorkerEntryActive");async function Zk(e,t){let n=e.invocation;if(!(!n||n.id!==t.invocationId))try{let r=n.proxy.tools[t.toolName],o=await r(t.input);ea(e.worker,{kind:"tool_result",callId:t.callId,result:o})}catch(r){ea(e.worker,{kind:"tool_result",callId:t.callId,error:Of(r)})}}i(Zk,"dispatchToolCall");function e_(e,t,n,r){let o=e.invocation;!o||o.id!==t||(e.invocation=void 0,clearTimeout(o.timer),o.removeAbortListener?.(),e.worker.unref(),r?o.reject(jf(r)):o.resolve(n??""))}i(e_,"settleInvocation");async function t_(e,t,n){let r=t.invocation;if(!(!r||r.id!==n)){t.invocation=void 0,r.removeAbortListener?.(),e.state===t&&(e.state=void 0);try{await t.worker.terminate()}finally{r.reject(new Error(`Constructed handler '${e.label}' timed out after ${e.timeoutMs}ms and its Worker was terminated.`))}}}i(t_,"terminateTimedOutInvocation");function Df(e,t){let n=e.invocation;n&&(e.invocation=void 0,clearTimeout(n.timer),n.removeAbortListener?.(),n.reject(t))}i(Df,"rejectInvocation");function Mf(e,t,n){e.state===t&&(e.state=void 0),Df(t,n)}i(Mf,"failWorker");function n_(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t={};for(let[n,r]of Object.entries(e))if(!(typeof r=="function"||n==="abortSignal"||n==="extensionRuntime"))try{t[n]=structuredClone(r)}catch{}return t}i(n_,"cloneWorkerContext");function r_(e){if(!e||typeof e!="object"||Array.isArray(e)||!("abortSignal"in e))return;let t=e.abortSignal;return t instanceof AbortSignal?t:void 0}i(r_,"readAbortSignal");function jf(e){let t=new Error(e.message);return t.name=e.name,e.stack&&(t.stack=e.stack),e.name==="CapabilityDeniedError"&&Object.setPrototypeOf(t,gt.prototype),t}i(jf,"errorFromWorker");function ea(e,t){try{e.postMessage(t)}catch{}}i(ea,"postWorkerMessage");function o_(){if(import.meta.url.endsWith(".ts")){let t=new URL("../../dist/construction/handler-worker.js",import.meta.url);return zk($f(t))?t:new URL("./handler-worker.ts",import.meta.url)}if(process.env.KODAX_BUNDLED==="true")return Pf(If(Qs(process.execPath),"constructed-handler-worker.js"));let e=Qs($f(import.meta.url));return Xk(e)==="chunks"?Pf(If(Qs(e),"constructed-handler-worker.js")):new URL("./handler-worker.js",import.meta.url)}i(o_,"resolveHandlerWorkerUrl");var Uf=uo.join(".kodax","constructed","tools");async function na(e,t,n,r={}){if(t.kind!=="script"||t.language!=="javascript")throw new Error(`Constructed handler must be { kind: 'script', language: 'javascript' } (got kind='${t.kind}', language='${t.language}'). v0.7.28 does not support TS handlers.`);let o=e.cwd??process.cwd(),s=uo.resolve(o,Uf,e.name);await Ff.mkdir(s,{recursive:!0});let a=uo.join(s,`${e.version}.mjs`);await Ff.writeFile(a,t.code,"utf8");let c=await Lf({key:a,moduleUrl:i_(a).href,label:`${e.name}@${e.version}`,capabilities:n,timeoutMs:r.timeoutMs??3e4,ctxProxyOptions:r.ctxProxyOptions});return(l,d)=>c(l,d)}i(na,"loadHandler");function qf(e){let t=e.cwd??process.cwd(),n=uo.resolve(t,Uf,e.name,`${e.version}.mjs`);return rr(n)}i(qf,"disposeLoadedHandler");import*as P from"typescript";function or(e){let t=P.createSourceFile("handler.js",e,P.ScriptTarget.ES2022,!0,P.ScriptKind.JS),n=[],r=i(s=>{P.isCallExpression(s)&&P.isIdentifier(s.expression)&&s.expression.text==="eval"&&n.push({rule:"no-eval",message:"Calls to 'eval' are forbidden in constructed handlers."}),(P.isNewExpression(s)||P.isCallExpression(s))&&P.isIdentifier(s.expression)&&s.expression.text==="Function"&&n.push({rule:"no-Function-constructor",message:"Calls to 'Function(...)' / 'new Function(...)' are forbidden (equivalent to eval)."}),P.forEachChild(s,r)},"walk");r(t);let o=s_(t);return o.ok||n.push({rule:"require-handler-signature",message:o.reason}),{ok:n.length===0,violations:n}}i(or,"runAstRules");function s_(e){for(let t of e.statements){if(P.isFunctionDeclaration(t)&&t.name?.text==="handler"&&ra(t,P.SyntaxKind.ExportKeyword))return ra(t,P.SyntaxKind.AsyncKeyword)?t.parameters.length<2?{ok:!1,reason:"'handler' must accept at least (input, ctx) parameters."}:{ok:!0}:{ok:!1,reason:"'handler' export must be async."};if(P.isVariableStatement(t)&&ra(t,P.SyntaxKind.ExportKeyword))for(let n of t.declarationList.declarations){if(!P.isIdentifier(n.name)||n.name.text!=="handler")continue;let r=n.initializer;return r?!P.isArrowFunction(r)&&!P.isFunctionExpression(r)?{ok:!1,reason:"'handler' export must be an async function (function declaration / async arrow / async function expression)."}:(r.modifiers??[]).some(s=>s.kind===P.SyntaxKind.AsyncKeyword)?r.parameters.length<2?{ok:!1,reason:"'handler' must accept at least (input, ctx) parameters."}:{ok:!0}:{ok:!1,reason:"'handler' export must be async."}:{ok:!1,reason:"'handler' export must be initialized to a function."}}}return{ok:!1,reason:"Module must export 'handler' as one of: `export async function handler(input, ctx) {...}` / `export const handler = async (input, ctx) => {...}` / `export const handler = async function (input, ctx) {...}`."}}i(s_,"checkHandlerSignature");function ra(e,t){return P.canHaveModifiers(e)?!!P.getModifiers(e)?.some(r=>r.kind===t):!1}i(ra,"hasSyntaxKind");function ir(e,t="anthropic"){let n={errors:[],warnings:[]};return t==="anthropic"?fo(e,n,"$"):n.warnings.push(`No constructed-tool schema validator for provider '${t}'; relying on builtin dispatch path.`),{ok:n.errors.length===0,errors:n.errors,warnings:n.warnings}}i(ir,"validateToolSchemaForProvider");function fo(e,t,n){if(!Bf(e)){t.errors.push(`${n}: input_schema must be a JSON object.`);return}n==="$"&&(e.type!=="object"&&t.errors.push(`${n}.type: Anthropic requires top-level input_schema.type === 'object' (got ${Wf(e.type)}).`),"properties"in e||t.errors.push(`${n}.properties: Anthropic requires top-level input_schema.properties (object).`)),"$ref"in e&&t.errors.push(`${n}: $ref is not supported by Anthropic input_schema (no schema resolver). Inline the referenced shape.`);for(let r of["oneOf","anyOf","allOf"])r in e&&t.warnings.push(`${n}.${r}: Anthropic support for '${r}' is partial. Test with the target model before relying on it.`);if("required"in e){let r=e.required;(!Array.isArray(r)||r.some(o=>typeof o!="string"))&&t.errors.push(`${n}.required: must be an array of strings (got ${Wf(r)}).`)}if(Bf(e.properties)){let r=e.properties;for(let[o,s]of Object.entries(r))fo(s,t,`${n}.properties.${o}`)}if("items"in e){let r=e.items;Array.isArray(r)?r.forEach((o,s)=>{fo(o,t,`${n}.items[${s}]`)}):r!==void 0&&fo(r,t,`${n}.items`)}}i(fo,"validateAnthropic");function Bf(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Bf,"isPlainObject");function Wf(e){if(typeof e=="string")return JSON.stringify(e);if(e===void 0)return"undefined";try{return JSON.stringify(e)}catch{return String(e)}}i(Wf,"formatLiteral");function Hf(e){let t=e.capabilities.tools.length>0?e.capabilities.tools.map(r=>`'${r}'`).join(", "):"<none>";return`You are KodaX reviewing a tool handler that another KodaX agent just generated. The handler runs in a disposable Node Worker for fault isolation, but that Worker is NOT a security sandbox and can still import filesystem/network/process modules. The capability whitelist below only gates calls made through ctx.tools.${e.artifactRef?`
|
|
220
220
|
Artifact: ${e.artifactRef}
|
|
@@ -292,7 +292,7 @@ TODO: replace with the agent's full operating instructions.`,tools:[],reasoning:
|
|
|
292
292
|
`)}catch(n){return`[Tool Error] stage_agent_construction: ${n.message}`}}i(vp,"toolStageAgentConstruction");async function kp(e,t){try{let n=Kt(e,"name"),r=Kt(e,"version"),o=await Bt(n,r);if(!o)return`[Tool Error] test_agent: no staged artifact found for ${n}@${r}.`;if(o.kind!=="agent")return`[Tool Error] test_agent: ${n}@${r} has kind='${o.kind}', expected 'agent'. Use test_tool for tool artifacts.`;if(o.status==="revoked")return`[Tool Error] test_agent: ${n}@${r} is revoked. Bump the version and re-stage.`;let s={artifact:o,stagedAt:Date.now()},a=await ar(s);return yp(a)}catch(n){return`[Tool Error] test_agent: ${n.message}`}}i(kp,"toolTestAgent");async function _p(e,t){try{let n=Kt(e,"name"),r=Kt(e,"version"),o=await Bt(n,r);if(!o)return`[Tool Error] activate_agent: no artifact found for ${n}@${r}. Stage and test it first.`;if(o.kind!=="agent")return`[Tool Error] activate_agent: ${n}@${r} has kind='${o.kind}', expected 'agent'. Use activate_tool for tool artifacts.`;if(o.status==="revoked")return`[Tool Error] activate_agent: ${n}@${r} is revoked. Bump the version and re-stage.`;let s={artifact:o,stagedAt:Date.now()};return await cr(s),[`activated: ${n}@${r} (kind=agent)`,"Resolver now exposes the agent at this name; subsequent Runner.run calls can resolve it."].join(`
|
|
293
293
|
`)}catch(n){return`[Tool Error] activate_agent: ${n.message}`}}i(_p,"toolActivateAgent");import Sn from"fs/promises";import Na from"path";var wo=336*60*60*1e3,Ep=3600*1e3;async function Sp(e,t=wo,n=Date.now()){let r;try{r=await Sn.readdir(e)}catch{return{scanned:0,removed:0,failed:0,bytesRemoved:0}}let o=0,s=0,a=0,c=0;for(let l of r){let d=Na.join(e,l),u;try{u=await Sn.stat(d)}catch{a+=1;continue}if(!(!u.isFile()||(o+=1,n-u.mtimeMs<=t)))try{await Sn.unlink(d),s+=1,c+=u.size}catch{a+=1}}return{scanned:o,removed:s,failed:a,bytesRemoved:c}}i(Sp,"cleanupExpiredToolOutputs");function xp(e){let t=Na.resolve(e);return process.platform==="win32"?t.toLowerCase():t}i(xp,"normalizeArtifactPath");async function Tp(e,t,n=wo,r=Date.now()){let o;try{o=await Sn.readdir(e)}catch{return{scanned:0,removed:0,failed:0,bytesRemoved:0}}let s=new Set([...t].map(xp)),a=0,c=0,l=0,d=0;for(let u of o){let f=Na.join(e,u);try{let p=await Sn.stat(f);if(!p.isFile()||(a+=1,s.has(xp(f))||r-p.mtimeMs<=n))continue;await Sn.unlink(f),c+=1,d+=p.size}catch{l+=1}}return{scanned:a,removed:c,failed:l,bytesRemoved:d}}i(Tp,"cleanupUnreferencedToolOutputs");var yo=0,xe=null;function ax(e,t=wo,n=Date.now()){return xe||(n-yo<Ep?Promise.resolve(null):(yo=n,xe=Sp(e,t,n).then(r=>(xe=null,r)).catch(()=>(xe=null,null)),xe))}i(ax,"maybeRunToolOutputGc");function cx(e,t,n=wo,r=Date.now()){return xe||(r-yo<Ep?Promise.resolve(null):(yo=r,xe=t().then(o=>Tp(e,o,n,r)).then(o=>(xe=null,o)).catch(()=>(xe=null,null)),xe))}i(cx,"maybeRunReferenceAwareToolOutputGc");var Ap=4,Cp=12*1024,Rp=4*1024,lx=192*1024,dx=64*1024;function ux(e){return{aggregateInlineTokens:Math.max(0,Math.floor(e.availableTokens)),...Op({availableTokens:e.availableTokens,contextWindow:e.contextWindow,pressure:e.pressure,smallWindow:e.smallWindow})}}i(ux,"buildToolResultBudget");function fx(e){let t=Math.max(0,Math.floor(e.contextWindow)),n=Math.max(0,Math.floor(e.currentTokens)),r=Math.max(0,Math.floor(e.reservedResponseTokens??0)),o=wr(t,r),s=Math.max(0,o-n),a=t>0?n/t:1,c=t>0&&t<=32e3,l=hx(t,s,a,c);return{aggregateInlineTokens:s,...Op({availableTokens:s,contextWindow:t,pressure:l,smallWindow:c})}}i(fx,"buildToolResultBudgetFromUsage");function px(e,t){if(!t)return e;let n=Math.min(e.maxBytes,t.perResultInlineBytes);return{...e,maxBytes:n,maxLines:Math.min(e.maxLines,mx(e,n))}}i(px,"clampToolResultPolicyToBudget");function Op(e){if(e.pressure==="critical")return{pressure:e.pressure,contextWindow:e.contextWindow,aggregateInlineBytes:Math.max(Cp,Math.floor(e.availableTokens*Ap*.2)),perResultInlineBytes:Rp,reason:"critical_pressure"};if(e.smallWindow||e.pressure==="high"){let t=Math.max(Cp,Math.floor(e.availableTokens*Ap*.35));return{pressure:e.pressure,contextWindow:e.contextWindow,aggregateInlineBytes:t,perResultInlineBytes:Math.min(16*1024,Math.max(Rp,Math.floor(t/3))),reason:"small_window_pressure"}}return e.pressure==="medium"?{pressure:e.pressure,contextWindow:e.contextWindow,aggregateInlineBytes:96*1024,perResultInlineBytes:32*1024,reason:"normal_pressure"}:{pressure:e.pressure,contextWindow:e.contextWindow,aggregateInlineBytes:lx,perResultInlineBytes:dx,reason:"large_window"}}i(Op,"buildCompatibilityMetadata");function mx(e,t){return Math.max(20,Math.floor(e.maxLines*(t/Math.max(1,e.maxBytes))))}i(mx,"estimateLineCap");function hx(e,t,n,r){return e<=0||t<=0||n>=.9?"critical":n>=.75?"high":n>=.55||r&&n>=.4?"medium":"low"}i(hx,"classifyPressure");var zt=Object.freeze({web_search:'Discover web content when no specific URL is known \u2014 call `tool_search("web_search")` for full schema.',web_fetch:'Fetch a specific remote URL (HTML\u2192markdown, cached) \u2014 call `tool_search("web_fetch")` for full schema (includes GitHub-URL gh-CLI guidance).',code_search:'Ranked text search across the repo with noise filtering \u2014 call `tool_search("code_search")` for selection heuristics vs grep / symbol_context.',semantic_lookup:'Symbol-/module-/process-aware semantic queries against repo intelligence \u2014 call `tool_search("semantic_lookup")` for full schema and selection rules.',repo_overview:'Workspace structure snapshot \u2014 call ONCE at session start; `tool_search("repo_overview")` for full schema.',changed_scope:'List files / areas changed in current git diff \u2014 canonical review entry. `tool_search("changed_scope")` for full schema.',module_context:'Compact module capsule (deps, entries, symbols, tests) \u2014 call `tool_search("module_context")` for full schema and selection rules vs symbol_context.',symbol_context:'Definition + callers/callees for one symbol \u2014 call `tool_search("symbol_context")` for full schema and selection rules.',process_context:'Static execution/process trace from an entry \u2014 call `tool_search("process_context")` for full schema.',impact_estimate:'Blast radius estimate BEFORE a rename or refactor \u2014 call `tool_search("impact_estimate")` for full schema (replaces guessing impact from grep).',run_workflow:'Explicitly requested Workflow execution: runs manifest + source with structured output/resume and returns a canonical Workflow actor path. `tool_search("run_workflow")` for contract.'});function bo(e){return e in zt}i(bo,"isDeferredTool");var qa=new WeakMap;function Mp(e,t){let n=qa.get(e);n||(n=new Set,qa.set(e,n)),n.add(t)}i(Mp,"unlockDeferredToolForContext");function MD(e){let t=qa.get(e);return t?new Set(t):new Set}i(MD,"getUnlockedDeferredTools");function Dp(e,t={}){let n=e.map(o=>Ax(o,t.hints?.[o.name])),r=new Map;for(let o of n)for(let s of o.terms.keys())r.set(s,(r.get(s)??0)+1);return{entries:n,documentFrequency:r}}i(Dp,"buildToolSearchIndex");function jp(e,t,n){let r=typeof t=="string"?Tx(t):Fp(t),o=Math.max(0,Math.floor(n));if(o===0||r.required.length===0&&r.loose.length===0)return[];let s=[];for(let a of e.entries){if(!r.required.every(u=>Lp(a,u)))continue;let l=r.loose.filter(u=>Lp(a,u));if(r.loose.length>0&&l.length===0)continue;let d=[...r.required,...l];s.push({name:a.name,score:Cx(e,a,d,r.loose),matchedTerms:d})}return s.sort((a,c)=>c.score!==a.score?c.score-a.score:a.name.localeCompare(c.name)),s.slice(0,o)}i(jp,"searchToolIndex");function Tx(e){let t=[],n=[];for(let r of Up(e))r.startsWith("+")&&r.length>1?t.push(An(r.slice(1))):n.push(An(r));return Fp({required:t,loose:n})}i(Tx,"parseToolSearchQuery");function Ax(e,t){let n=Ox(e.input_schema),r=qp(e.name).join(" "),o=[e.name,r,t,e.description,n].filter(a=>typeof a=="string"&&a.length>0).join(" "),s=new Map;for(let a of Up(o)){let c=An(a);c.length!==0&&s.set(c,(s.get(c)??0)+1)}return{name:e.name,text:o.toLowerCase(),terms:s,tokenCount:Array.from(s.values()).reduce((a,c)=>a+c,0)}}i(Ax,"buildEntry");function Cx(e,t,n,r){let o=0,s=Rx(e);for(let c of n){let l=t.terms.get(c)??(t.text.includes(c)?1:0),d=e.documentFrequency.get(c)??1,u=Math.log(1+(e.entries.length-d+.5)/(d+.5)),f=t.tokenCount>0&&s>0?1.2*(1-.75+.75*(t.tokenCount/s)):1.2;o+=u*(l*2.2/(l+f))}let a=An(t.name);for(let c of[...n,...r])a===c?o+=5:qp(t.name).includes(c)?o+=2:a.includes(c)&&(o+=1);return o}i(Cx,"scoreEntry");function Rx(e){return e.entries.length===0?0:e.entries.reduce((t,n)=>t+n.tokenCount,0)/e.entries.length}i(Rx,"averageDocumentLength");function Lp(e,t){return e.terms.has(t)||e.text.includes(t)}i(Lp,"entryMatchesTerm");function Fp(e){return{required:Np(e.required),loose:Np(e.loose)}}i(Fp,"normalizeQueryParts");function Np(e){let t=[],n=new Set;for(let r of e){let o=An(r);o.length===0||n.has(o)||(n.add(o),t.push(o))}return t}i(Np,"uniqueNormalized");function Up(e){return e.match(/\+?[\p{L}\p{N}_-]+/gu)??[]}i(Up,"tokenize");function An(e){return e.toLowerCase().replace(/[^a-z0-9\p{L}\p{N}]+/gu,"")}i(An,"normalizeTerm");function qp(e){return e.split(/[_-]+/g).map(t=>An(t)).filter(t=>t.length>0)}i(qp,"splitToolName");function Ox(e){let t=[];return Ba(e,t,0),t.join(" ")}i(Ox,"collectSchemaText");function Ba(e,t,n){if(!(n>8||e===null||e===void 0)){if(typeof e=="string"){t.push(e);return}if(typeof e=="number"||typeof e=="boolean"){t.push(String(e));return}if(Array.isArray(e)){for(let r of e)Ba(r,t,n+1);return}if(typeof e=="object")for(let[r,o]of Object.entries(e))t.push(r),Ba(o,t,n+1)}}i(Ba,"collectSchemaTextInto");var Ix=5,$x=15;function Px(e){let t=e.trim();if(t.startsWith("select:"))return{mode:"select",names:t.slice(7).split(/[,\s]+/).map(c=>c.trim()).filter(c=>c.length>0),required:[],loose:[]};let n=t.split(/\s+/).filter(s=>s.length>0),r=[],o=[];for(let s of n)s.startsWith("+")&&s.length>1?r.push(s.slice(1).toLowerCase()):o.push(s.toLowerCase());return{mode:"keyword",names:[],required:r,loose:o}}i(Px,"parseQuery");function Mx(e){let t=[],n=new Set;for(let r of e)n.has(r)||(n.add(r),(bo(r)||Tn(r))&&t.push(r));return t}i(Mx,"resolveSelectNames");function Lx(e,t,n){let r=Object.keys(zt).map(s=>Tn(s)).filter(s=>s!==void 0),o=Dp(r,{hints:zt});return jp(o,{required:e,loose:t},n).map(s=>s.name)}i(Lx,"searchKeywords");function Nx(e){let t={description:e.description,name:e.name,parameters:e.input_schema};return`<function>${JSON.stringify(t)}</function>`}i(Nx,"formatToolAsFunctionBlock");function Bp(e,t,n){if(e.length===0)return"No tools matched the query. Available deferred tools: "+Object.keys(zt).join(", ")+". Use query form `select:NAME` to fetch a specific schema.";let r=[];for(let o of e){let s=Tn(o);if(!s){r.push(`<!-- ${o}: not registered (skipped) -->`);continue}Mp(t,o),r.push(Nx(Sr(s,n)))}return r.join(`
|
|
294
294
|
`)}i(Bp,"buildResult");function Dx(e,t,n){return n?`${e}
|
|
295
|
-
[RESULT_LIMIT_REACHED: max_results=${t}; additional tools matched. Narrow the keyword query or use \`select:NAME\` for an exact schema.]`:e}i(Dx,"appendLimitMarker");var jx=i(async(e,t)=>{let n=e,r=typeof n.query=="string"?n.query:"";if(r.length===0)return"tool_search: `query` is required. Forms: `select:NAME[,NAME...]` for exact lookup, or keyword search (`+required loose terms`).";let o=typeof n.max_results=="number"&&n.max_results>0?Math.min(Math.floor(n.max_results),$x):Ix,s=Px(r);if(s.mode==="select")return Bp(Mx(s.names),t,t.selfManual?.productName);let a=Lx(s.required,s.loose,o+1),c=a.slice(0,o),l=Bp(c,t,t.selfManual?.productName);return Dx(l,o,a.length>o)},"toolSearchHandler"),Wp={name:"tool_search",description:["Fetch full schema definitions for tools whose rich descriptions are deferred behind compact search hints.","The deferred catalog includes web discovery, repo intelligence (module_context / symbol_context / impact_estimate / process_context / changed_scope / repo_overview / semantic_lookup / code_search), and run_workflow.","Use `tool_search` when a hint suggests a tool fits the task and you need the full schema (parameter shape, when-to-prefer-X, behavioral contracts) before invoking.",'Query forms: `select:ToolName` (exact, recommended) or keyword search like `"+module exploration"` (require keyword) / `"refactor impact"` (loose match, ranked).',"On the SA path, resolving a deferred tool unlocks its full description for later tool lists in the same context. On the AMA managed path, the tool list is static, so the `tool_search` result itself is the durable teaching surface."].join(" "),input_schema:{type:"object",properties:{query:{type:"string",description:"Either `select:ToolName[,ToolName...]` for exact lookup, or keyword search (`+keyword required loose terms`)."},max_results:{type:"number",description:"Maximum number of results to return (default 5, capped at 15). Ignored in `select:` mode."}},required:["query"]},handler:jx,sideEffect:"readonly",planModeAllowed:!0,toClassifierInput:i(()=>"","toClassifierInput")};import Ee from"path";import{pathToFileURL as Yp}from"url";import{createHash as Zx}from"node:crypto";import{execFile as Fx}from"child_process";import{promisify as Ux}from"util";var qx=Ux(Fx),Bx=3e4,Wx=1e4;async function Hp(e,t={}){let n=t.timeout??Bx,r=t.shell??(process.platform==="win32"?"powershell":"bash"),o=r==="powershell"?["-Command",e]:["-c",e],s={PATH:process.env.PATH??"",HOME:process.env.HOME??process.env.USERPROFILE??"",LANG:process.env.LANG??"",TERM:process.env.TERM??"",...process.platform==="win32"?{SYSTEMROOT:process.env.SYSTEMROOT??"",COMSPEC:process.env.COMSPEC??"",PATHEXT:process.env.PATHEXT??""}:{},...t.env};try{let{stdout:a,stderr:c}=await qx(r,o,{timeout:n,cwd:t.cwd,env:s});return{exitCode:0,stdout:a.trim(),stderr:c.trim()}}catch(a){let c=a&&typeof a=="object"&&"code"in a&&typeof a.code=="number"?a.code:1,l=a&&typeof a=="object"&&"stdout"in a?String(a.stdout??"").trim():"",d=a&&typeof a=="object"&&"stderr"in a?String(a.stderr??"").trim():a instanceof Error?a.message:String(a);return{exitCode:c,stdout:l,stderr:d}}}i(Hp,"exec");async function Kp(e,t,n={}){let r=n.timeout??Wx,o=new AbortController,s=setTimeout(()=>o.abort(),r);try{let a=await fetch(e,{method:n.method??"POST",headers:{"Content-Type":"application/json",...n.headers},body:JSON.stringify(t),signal:o.signal});clearTimeout(s);let c=await a.text().catch(()=>{});return{ok:a.ok,status:a.status,body:c}}catch(a){return clearTimeout(s),{ok:!1,status:0,body:a instanceof Error?a.message:String(a)}}}i(Kp,"webhook");import De from"path";import{access as Hx,readdir as Kx,realpath as Gx,stat as Ka}from"fs/promises";import{constants as zx}from"fs";var Gp=new Set([".js",".mjs",".cjs",".ts",".mts",".cts"]),vo=["extension.mjs","extension.js","extension.cjs","extension.mts","extension.ts","extension.cts","index.mjs","index.js","index.cjs","index.mts","index.ts","index.cts"];function Ga(e){return e instanceof Error&&"code"in e&&e.code==="ENOENT"}i(Ga,"isMissingPathError");async function zp(e){try{return(await Ka(e)).isFile()?(await Hx(e,zx.R_OK),!0):!1}catch(t){if(Ga(t))return!1;throw t}}i(zp,"isReadableFile");function dr(e){return Gp.has(De.extname(e).toLowerCase())}i(dr,"isSupportedExtensionModulePath");function Xx(e=Qt()){return De.join(e,"extensions")}i(Xx,"getDefaultExtensionDirectory");async function za(e){let t=De.resolve(e),n=await Ka(t);if(n.isFile()){if(!dr(t))throw new Error(`Unsupported extension module "${t}". Expected one of: ${[...Gp].join(", ")}.`);return t}if(!n.isDirectory())throw new Error(`Extension path "${t}" must be a file or directory.`);for(let r of vo){let o=De.join(t,r);if(await zp(o))return o}throw new Error(`Extension directory "${t}" must contain one of: ${vo.join(", ")}.`)}i(za,"resolveExtensionEntrypoint");async function Xp(e){for(let t of vo){let n=De.join(e,t);if(await zp(n))return n}}i(Xp,"tryResolveDirectoryEntrypoint");async function Yx(e){try{let t=await Ka(e);return t.isFile()?dr(e)?De.resolve(e):void 0:t.isDirectory()?Xp(e):void 0}catch(t){if(Ga(t))return;throw t}}i(Yx,"tryResolveDiscoveredEntrypoint");async function Vx(e){try{return await Gx(e)}catch(t){return De.resolve(e)}}i(Vx,"canonicalEntrypointIdentity");async function Ha(e){let t=e.trim();try{return await Vx(await za(t))}catch(n){return De.resolve(t)}}i(Ha,"getExtensionEntrypointIdentity");async function Xa(e){let t=[],n=new Set;for(let r of e){let o=r.trim();if(!o)continue;let s=await Ha(o);n.has(s)||(n.add(s),t.push(o))}return t}i(Xa,"dedupeExtensionPathsByEntrypoint");async function ZD(e,t){let n=new Set;for(let s of t){let a=s.trim();a&&n.add(await Ha(a))}let r=[],o=new Set;for(let s of e){let a=s.trim();if(!a)continue;let c=await Ha(a);n.has(c)||o.has(c)||(o.add(c),r.push(a))}return r}i(ZD,"excludeExtensionPathsByEntrypoint");function Wa(e,t,n){return{path:e,reason:t,message:n}}i(Wa,"skippedEntry");async function Jx(e){let t=De.resolve(e),n;try{n=await Kx(t,{withFileTypes:!0})}catch(s){if(Ga(s))return{paths:[],skipped:[]};throw s}let r=[],o=[];for(let s of n.sort((a,c)=>a.name.localeCompare(c.name))){let a=De.join(t,s.name);if(s.isFile()){dr(a)?r.push(a):o.push(Wa(a,"unsupported_module","File extension is not supported for KodaX runtime extensions."));continue}if(s.isDirectory()){let c=await Xp(a);c?r.push(c):o.push(Wa(a,"missing_entrypoint",`Directory does not contain one of: ${vo.join(", ")}.`));continue}if(s.isSymbolicLink()){let c=await Yx(a);c?r.push(c):o.push(Wa(a,"unsupported_target","Symlink target is not a supported extension file or package directory."))}}return{paths:r,skipped:o}}i(Jx,"discoverExtensionsInDirectoryDetailed");async function Qx(e){return(await Jx(e)).paths}i(Qx,"discoverExtensionsInDirectory");async function ej(){return Qx(Xx())}i(ej,"discoverDefaultExtensions");import{tsImport as eE}from"tsx/esm/api";function tE(e){return e.length===0?"unknown":e.every(t=>t===e[0])?e[0]??"unknown":"mixed"}i(tE,"combineSearchFreshness");function nE(e){let t=e.map(n=>n.revision??JSON.stringify(n.items));return Zx("sha256").update(JSON.stringify(t)).digest("hex").slice(0,16)}i(nE,"combineSearchRevision");function rE(e){return e.map(t=>{if(typeof t=="string")return t;if(t instanceof Error)return t.stack??t.message;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ")}i(rE,"formatExtensionLogArgs");function kt(e,t,n){D({source:e,level:t,message:rE(n)})}i(kt,"emitExtensionDiagnostic");function oE(e){let t=Ee.basename(e),n=Ee.parse(t).name;return n==="extension"||n==="index"?Ee.basename(Ee.dirname(e)):t}i(oE,"getExtensionLabel");var Xt=null,Yt=null;function iE(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.emit=="function"&&typeof t.runHook=="function"}i(iE,"isActiveExtensionExecutionRuntime");function sE(e){let t=[];for(let n of e){let r=n.trim();!r||t.includes(r)||t.push(r)}return t}i(sE,"dedupeStrings");function Vp(e){return typeof e=="string"?{role:"user",content:e}:e}i(Vp,"normalizeQueuedMessage");function aE(e){let t={};return e.provider?.trim()&&(t.provider=e.provider.trim()),e.model?.trim()&&(t.model=e.model.trim()),t}i(aE,"normalizeModelSelection");function Cn(e){if(e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean")return!0;if(Array.isArray(e))return e.every(Cn);if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:Object.values(e).every(Cn)}i(Cn,"isJsonValue");var Ya=class{static{i(this,"KodaXExtensionRuntime")}capabilityProviders=new Map;commands=new Map;eventHandlers=new Map;hookHandlers=new Map;loadedExtensions=new Map;failures=[];runtimeDisposables=[];disposedCapabilityProviders=new WeakSet;capabilityProviderUses=new WeakMap;capabilityProviderWaiters=new WeakMap;capabilityProviderDisposals=new WeakMap;runtimeLogger;config;runtimeController;nextRecordId=0;boundController=null;defaultActiveTools;defaultModelSelection={};defaultThinkingLevel;constructor(t={}){this.config=t.config??{},this.runtimeLogger={debug:i((...n)=>kt("coding:extension","debug",n),"debug"),info:i((...n)=>kt("coding:extension","info",n),"info"),warn:i((...n)=>kt("coding:extension","warn",n),"warn"),error:i((...n)=>kt("coding:extension","error",n),"error")},this.runtimeController=this.createRuntimeControllerProxy()}activate(){return Xt=this,this}getDefaults(){return{activeTools:this.defaultActiveTools===void 0?void 0:[...this.defaultActiveTools],modelSelection:{...this.defaultModelSelection},thinkingLevel:this.defaultThinkingLevel}}bindController(t){let n=this.boundController;return this.boundController=t,()=>{this.boundController=n}}async dispose(){for(let t of Array.from(this.loadedExtensions.values()).reverse())await t.disposeAll();this.loadedExtensions.clear();for(let t of this.runtimeDisposables.reverse())await t();this.runtimeDisposables.length=0,this.failures.length=0,this.boundController=null,Xt===this&&(Xt=null),Yt===this&&(Yt=null)}async loadExtensions(t,n={}){let r=await Xa(t);for(let o of r)try{await this.loadExtension(o,{loadSource:n.loadSource,stage:n.stage??"load"})}catch(s){if(!n.continueOnError)throw s;this.runtimeLogger.warn(`Failed to load extension "${o}" during ${n.stage??"load"}:`,s instanceof Error?s.message:String(s))}}async loadExtension(t,n={}){let r=Ee.resolve(t);try{r=await za(r);let o=this.loadedExtensions.get(r),s=n.loadSource??o?.loadSource??"api",a=await this.importExtensionModule(r),c=a.default,l=c&&typeof c=="object"&&"default"in c?c.default:void 0,d=c&&typeof c=="object"&&"activate"in c?c.activate:void 0,u=typeof c=="function"?c:typeof l=="function"?l:typeof a.activate=="function"?a.activate:typeof d=="function"?d:void 0;if(!u)throw new Error(`Extension "${r}" must export a default function or named activate() function.`);try{let f=[],p=this.createExtensionApi(r,f,s),m={path:r,label:oE(r),loadSource:s,disposeAll:i(async()=>{for(let h of f.reverse())await h()},"disposeAll")};try{let h=await u(p);typeof h=="function"&&f.push(h)}catch(h){throw await m.disposeAll(),h}if(o)try{await o.disposeAll()}catch(h){throw await m.disposeAll(),h}this.loadedExtensions.set(r,m)}catch(f){throw f}}catch(o){throw this.recordFailure(n.stage??(this.loadedExtensions.has(r)?"reload":"load"),r,this.createExtensionSource(r,n.loadSource??this.loadedExtensions.get(r)?.loadSource??"api"),o),o}}async reloadExtensions(t={continueOnError:!0}){let n=Array.from(this.loadedExtensions.keys());for(let r of n)try{await this.loadExtension(r,{loadSource:this.loadedExtensions.get(r)?.loadSource,stage:"reload"})}catch(o){if(!t.continueOnError)throw o;this.runtimeLogger.warn(`Failed to reload extension "${r}":`,o instanceof Error?o.message:String(o))}}listCapabilityProviders(){return Array.from(this.capabilityProviders.values()).map(t=>t[t.length-1]?.value).filter(t=>t!==void 0)}registerCapabilityProvider(t,n={}){let r=n.source??this.createRuntimeSource(`runtime:capability:${t.id}`,t.id),o=this.registerRecord(this.capabilityProviders,t.id,t,r,this.runtimeDisposables);return t.dispose&&this.runtimeDisposables.push(()=>this.disposeCapabilityProvider(t)),o}hasCapabilityProvider(t){return this.getCapabilityProvider(t)!==void 0}async replaceCapabilityProvider(t,n,r={}){if(n&&n.id!==t)throw new Error("Capability provider id mismatch.");let o=this.capabilityProviders.get(t)??[];if(n){let s=`runtime:${++this.nextRecordId}`,a=r.source??this.createRuntimeSource(`runtime:capability:${t}`,t);this.capabilityProviders.set(t,[{id:s,value:n,source:a}]),this.runtimeDisposables.push(()=>{this.capabilityProviders.get(t)?.[0]?.id===s&&this.capabilityProviders.delete(t)}),this.runtimeDisposables.push(()=>this.disposeCapabilityProvider(n))}else this.capabilityProviders.delete(t);for(let s of o)try{await this.disposeCapabilityProvider(s.value)}catch{let a=new Error("Previous capability provider cleanup failed after replacement.");this.recordFailure("dispose",`capability-provider:${t}`,s.source,a),this.runtimeLogger.warn(a.message)}}async reconcileExtensions(t,n){let r=await Xa([...t]),o=0,s=0;for(let l of r)try{await this.loadExtension(l,{loadSource:n.loadSource,stage:"reload"}),o+=1}catch{s+=1}let a=new Set(r.map(l=>Ee.resolve(l))),c=[...this.loadedExtensions.values()].filter(l=>l.loadSource===n.loadSource&&!a.has(l.path));for(let l of c)await this.unloadExtension(l.path);return{applied:o,retained:s,removed:c.length}}registerTool(t,n={}){let r=n.source??{kind:"extension",id:`runtime:tool:${t.name}`,label:t.name},o=En(t,{source:r});return this.runtimeDisposables.push(o),o}registerHook(t,n,r={}){let o=r.source??this.createRuntimeSource(`runtime:hook:${String(t)}`,String(t)),s=this.registerHookHandler(t,n,o);return this.runtimeDisposables.push(s),s}on(t,n,r={}){let o=r.source??this.createRuntimeSource(`runtime:event:${String(t)}`,String(t)),s=this.registerEventHandler(t,n,o);return this.runtimeDisposables.push(s),s}listCommands(){return Array.from(this.commands.values()).map(t=>t[t.length-1]?.value).filter(t=>t!==void 0)}getCommand(t){let n=t.trim().toLowerCase();if(n)return this.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(o=>o.trim().toLowerCase()===n))}getDiagnostics(){let t=Array.from(this.capabilityProviders.entries()).map(([a,c])=>{let l=c[c.length-1];if(l)return{id:a,kinds:[...l.value.kinds],source:{...l.source},metadata:l.value.getDiagnostics?.()}}).filter(a=>a!==void 0).sort((a,c)=>a.id.localeCompare(c.id)),n=Array.from(this.commands.entries()).map(([a,c])=>{let l=c[c.length-1];if(l)return{name:a,aliases:l.value.aliases,description:l.value.description,usage:l.value.usage,metadata:l.value.metadata,source:{...l.source}}}).filter(a=>a!==void 0).sort((a,c)=>a.name.localeCompare(c.name)),r=Ye().map(a=>{let c=Wt(a),l=c[c.length-1];if(l)return{name:l.name,description:l.description,requiredParams:[...l.requiredParams],source:{...l.source},shadowedSources:c.slice(0,-1).map(d=>({...d.source}))}}).filter(a=>a!==void 0).sort((a,c)=>a.name.localeCompare(c.name)),o=Array.from(this.loadedExtensions.values()).map(a=>{let c=this.boundController?Object.keys(this.boundController.getSessionStateSnapshot(this.createExtensionSource(a.path,a.loadSource).id)).sort((d,u)=>d.localeCompare(u)):void 0,l=this.boundController?this.boundController.listSessionRecords(this.createExtensionSource(a.path,a.loadSource).id).reduce((d,u)=>(d[u.type]=(d[u.type]??0)+1,d),{}):void 0;return{path:a.path,label:a.label,loadSource:a.loadSource,sessionStateKeys:c&&c.length>0?c:void 0,sessionRecordCounts:l&&Object.keys(l).length>0?l:void 0}}).sort((a,c)=>a.path.localeCompare(c.path)),s=Array.from(this.hookHandlers.entries()).flatMap(([a,c])=>c.map((l,d)=>({hook:a,order:d+1,source:{...l.source}}))).sort((a,c)=>{let l=a.hook.localeCompare(c.hook);return l!==0?l:a.order-c.order});return{loadedExtensions:o,capabilityProviders:t,commands:n,tools:r,hooks:s,failures:this.failures.map(a=>({...a,source:{...a.source}})),defaults:this.getDefaults()}}getCapabilityProvider(t){let n=this.capabilityProviders.get(t);if(!(!n||n.length===0))return n[n.length-1]?.value}async searchCapabilities(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o)throw new Error(`Unknown capability provider: ${t}`);return o.search?(await this.emit("capability:search",{providerId:t,query:n,kind:r.kind,limit:r.limit}),this.withCapabilityProvider(o,()=>o.search(n,r))):[]}async searchCapabilitySnapshot(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o)throw new Error(`Unknown capability provider: ${t}`);return await this.emit("capability:search",{providerId:t,query:n,kind:r.kind}),o.searchSnapshot?this.withCapabilityProvider(o,()=>o.searchSnapshot(n,r)):{items:o.search?await this.withCapabilityProvider(o,()=>o.search(n,r)):[],complete:!1,freshness:"unknown"}}async describeCapability(t,n){let r=this.getCapabilityProvider(t);if(!r)throw new Error(`Unknown capability provider: ${t}`);return await this.emit("capability:describe",{providerId:t,capabilityId:n}),this.withCapabilityProvider(r,()=>r.describe?.(n))}async executeCapability(t,n,r){let o=this.getCapabilityProvider(t);if(!o?.execute)throw new Error(`Capability provider "${t}" does not implement execute().`);return await this.emit("capability:invoke",{providerId:t,capabilityId:n,kind:"tool"}),this.withCapabilityProvider(o,()=>o.execute(n,r))}async readCapability(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o?.read)throw new Error(`Capability provider "${t}" does not implement read().`);return await this.emit("capability:invoke",{providerId:t,capabilityId:n,kind:"resource"}),this.withCapabilityProvider(o,()=>o.read(n,r))}async getCapabilityPrompt(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o?.getPrompt)throw new Error(`Capability provider "${t}" does not implement getPrompt().`);return await this.emit("capability:invoke",{providerId:t,capabilityId:n,kind:"prompt"}),this.withCapabilityProvider(o,()=>o.getPrompt(n,r))}async getCapabilityPromptContext(t){let n=this.getCapabilityProvider(t);if(n?.getPromptContext)return this.withCapabilityProvider(n,()=>n.getPromptContext())}async refreshCapabilityProviders(t){if(t){let n=this.getCapabilityProvider(t);if(!n)throw new Error(`Unknown capability provider: ${t}`);await this.emit("capability:refresh",{providerId:t}),await n.refresh?.();return}for(let n of this.listCapabilityProviders())await this.emit("capability:refresh",{providerId:n.id}),await n.refresh?.()}async hydrateSession(t){let n=this.hookHandlers.get("session:hydrate");if(!n||n.length===0)return;let r=this.boundController;if(!r)throw new Error("Session hydration requires an active KodaX session binding.");for(let o of n)try{let s=o.source,a=i((c,l)=>{let d=new Error(l);this.recordFailure("persistence",c,s,d),this.runtimeLogger.warn(l)},"warnPersistence");await o.value({sessionId:t,getState:i(c=>r.getSessionState(s.id,c),"getState"),setState:i((c,l)=>{if(l!==void 0&&!Cn(l)){a(`sessionState:${c}`,`Ignoring non-JSON session state for "${s.label}" key "${c}".`);return}r.setSessionState(s.id,c,l)},"setState"),listRecords:i(c=>r.listSessionRecords(s.id,c),"listRecords"),appendRecord:i((c,l,d)=>{let u=c.trim();if(!u){a("sessionRecord",`Ignoring session record with an empty type for "${s.label}".`);return}if(l!==void 0&&!Cn(l)){a(`sessionRecord:${u}`,`Ignoring non-JSON session record "${u}" for "${s.label}".`);return}return r.appendSessionRecord(s.id,u,l,d)},"appendRecord"),clearRecords:i(c=>r.clearSessionRecords(s.id,c),"clearRecords")})}catch(s){this.recordFailure("hook","session:hydrate",o.source,s),this.runtimeLogger.warn('Extension hook failed for "session:hydrate":',s instanceof Error?s.message:String(s))}}async emit(t,n){let r=this.eventHandlers.get(t);if(!(!r||r.length===0))for(let o of r)try{await o.value(n)}catch(s){this.recordFailure("event",t,o.source,s),this.runtimeLogger.warn(`Extension event handler failed for "${t}":`,s instanceof Error?s.message:String(s))}}async runHook(t,n){let r=this.hookHandlers.get(t);if(!(!r||r.length===0))for(let o of r)try{let s=await o.value(n);if(s!==void 0)return s}catch(s){this.recordFailure("hook",t,o.source,s),this.runtimeLogger.warn(`Extension hook failed for "${t}":`,s instanceof Error?s.message:String(s))}}createExtensionSource(t,n="api"){return{kind:"extension",id:`${n}:extension:${t}`,label:Ee.basename(t),path:t}}createRuntimeSource(t,n){return{kind:"runtime",id:t,label:n}}recordFailure(t,n,r,o){this.failures.push({stage:t,target:n,message:o instanceof Error?o.message:String(o),occurredAt:new Date().toISOString(),source:{...r}}),this.failures.length>50&&this.failures.shift()}createExtensionApi(t,n,r="api"){let o=this.createLogger(t),s=this.createExtensionSource(t,r);return{registerTool:i(a=>{let c=En(a,{source:s});return n.push(c),c},"registerTool"),getTool:i(a=>_e(a),"getTool"),getBuiltinTool:i(a=>Da(a),"getBuiltinTool"),registerModelProvider:i(a=>{let c=No(a.name,a.factory);return n.push(c),c},"registerModelProvider"),registerCapabilityProvider:i(a=>{let c=this.registerRecord(this.capabilityProviders,a.id,a,s,n);return a.dispose&&n.push(()=>a.dispose?.()),c},"registerCapabilityProvider"),registerCommand:i(a=>this.registerRecord(this.commands,a.name,a,s,n),"registerCommand"),registerSkillPath:i(a=>{let c=Ee.isAbsolute(a)?a:Ee.resolve(Ee.dirname(t),a),l=$c(c);return n.push(l),l},"registerSkillPath"),registerAgent:i(async(a,c)=>{let l=ue({name:a,content:c}),d=new Map(Re().map(m=>[m.name,m])),u=await ae.admit(l,{activatedAgents:d});if(!u.ok)throw new Error(`[extension:${s.id}] registerAgent("${a}") rejected by admission: ${u.reason}`);let f={kind:"agent",name:a,version:"0.0.0-extension",content:c,status:"active",createdAt:Date.now(),testedAt:Date.now(),activatedAt:Date.now()},p=Oe(f,{bindings:u.handle.invariantBindings,manifest:u.handle.manifest,source:"extension"});return n.push(p),p},"registerAgent"),on:i((a,c)=>{let l=this.registerEventHandler(a,c,s);return n.push(l),l},"on"),hook:i((a,c)=>{let l=this.registerHookHandler(a,c,s);return n.push(l),l},"hook"),logger:o,config:this.config,runtime:this.createExtensionApiRuntimeController(s,o,n),persistence:jc(s.id),exec:Hp,webhook:Kp}}createLogger(t){let r=`coding:extension:${Ee.basename(t)}`;return{debug:i((...o)=>kt(r,"debug",o),"debug"),info:i((...o)=>kt(r,"info",o),"info"),warn:i((...o)=>kt(r,"warn",o),"warn"),error:i((...o)=>kt(r,"error",o),"error")}}createRuntimeControllerProxy(){return{queueUserMessage:i(t=>{let n=this.boundController;if(!n)throw new Error("No active KodaX session is bound to the extension runtime.");n.queueUserMessage(Vp(t))},"queueUserMessage"),getSessionState:i((t,n)=>this.boundController?.getSessionState(t,n),"getSessionState"),setSessionState:i((t,n,r)=>{let o=this.boundController;if(!o)throw new Error("Session state is only available while a KodaX session is active.");o.setSessionState(t,n,r)},"setSessionState"),getSessionStateSnapshot:i(t=>this.boundController?this.boundController.getSessionStateSnapshot(t):{},"getSessionStateSnapshot"),appendSessionRecord:i((t,n,r,o)=>{let s=this.boundController;if(!s)throw new Error("Session records are only available while a KodaX session is active.");return s.appendSessionRecord(t,n,r,o)},"appendSessionRecord"),listSessionRecords:i((t,n)=>this.boundController?this.boundController.listSessionRecords(t,n):[],"listSessionRecords"),clearSessionRecords:i((t,n)=>{let r=this.boundController;if(!r)throw new Error("Session records are only available while a KodaX session is active.");return r.clearSessionRecords(t,n)},"clearSessionRecords"),getActiveTools:i(()=>this.boundController?this.boundController.getActiveTools():this.defaultActiveTools===void 0?Ye():[...this.defaultActiveTools],"getActiveTools"),setActiveTools:i(t=>{let n=sE(t);if(this.boundController){this.boundController.setActiveTools(n);return}this.defaultActiveTools=n},"setActiveTools"),getModelSelection:i(()=>this.boundController?this.boundController.getModelSelection():{...this.defaultModelSelection},"getModelSelection"),setModelSelection:i(t=>{let n=aE(t);if(this.boundController){this.boundController.setModelSelection(n);return}this.defaultModelSelection=n},"setModelSelection"),getThinkingLevel:i(()=>this.boundController?.getThinkingLevel()??this.defaultThinkingLevel,"getThinkingLevel"),setThinkingLevel:i(t=>{if(this.boundController){this.boundController.setThinkingLevel(t);return}this.defaultThinkingLevel=t},"setThinkingLevel")}}createExtensionApiRuntimeController(t,n,r){let o=!1,s,a=!1,c={},l=!1,d,u=i(()=>{o||this.boundController||(o=!0,s=this.defaultActiveTools===void 0?void 0:[...this.defaultActiveTools],r.push(()=>{this.defaultActiveTools=s===void 0?void 0:[...s]}))},"captureActiveToolsRestore"),f=i(()=>{a||this.boundController||(a=!0,c={...this.defaultModelSelection},r.push(()=>{this.defaultModelSelection={...c}}))},"captureModelSelectionRestore"),p=i(()=>{l||this.boundController||(l=!0,d=this.defaultThinkingLevel,r.push(()=>{this.defaultThinkingLevel=d}))},"captureThinkingLevelRestore"),m=i((h,y)=>{let w=new Error(y);this.recordFailure("persistence",h,t,w),n.warn(y)},"recordPersistenceFailure");return{queueUserMessage:i(h=>this.runtimeController.queueUserMessage(Vp(h)),"queueUserMessage"),getSessionState:i(h=>this.runtimeController.getSessionState(t.id,h),"getSessionState"),setSessionState:i((h,y)=>{if(y!==void 0&&!Cn(y)){m(`sessionState:${h}`,`Ignoring non-JSON session state for "${t.label}" key "${h}".`);return}this.runtimeController.setSessionState(t.id,h,y)},"setSessionState"),appendSessionRecord:i((h,y,w)=>{let g=h.trim();if(!g){m("sessionRecord",`Ignoring session record with an empty type for "${t.label}".`);return}if(y!==void 0&&!Cn(y)){m(`sessionRecord:${g}`,`Ignoring non-JSON session record "${g}" for "${t.label}".`);return}return this.runtimeController.appendSessionRecord(t.id,g,y,w)},"appendSessionRecord"),listSessionRecords:i(h=>this.runtimeController.listSessionRecords(t.id,h),"listSessionRecords"),clearSessionRecords:i(h=>this.runtimeController.clearSessionRecords(t.id,h),"clearSessionRecords"),getActiveTools:i(()=>this.runtimeController.getActiveTools(),"getActiveTools"),setActiveTools:i(h=>{u(),this.runtimeController.setActiveTools(h)},"setActiveTools"),getModelSelection:i(()=>this.runtimeController.getModelSelection(),"getModelSelection"),setModelSelection:i(h=>{f(),this.runtimeController.setModelSelection(h)},"setModelSelection"),getThinkingLevel:i(()=>this.runtimeController.getThinkingLevel(),"getThinkingLevel"),setThinkingLevel:i(h=>{p(),this.runtimeController.setThinkingLevel(h)},"setThinkingLevel")}}registerRecord(t,n,r,o,s){let a=`runtime:${++this.nextRecordId}`,c=t.get(n)??[];t.set(n,[...c,{id:a,value:r,source:o}]);let l=i(()=>{let u=(t.get(n)??[]).filter(f=>f.id!==a);u.length===0?t.delete(n):t.set(n,u)},"dispose");return s.push(l),l}async disposeCapabilityProvider(t){let n=this.capabilityProviderDisposals.get(t);if(n)return n;let r=(async()=>{(this.capabilityProviderUses.get(t)??0)>0&&await new Promise(o=>{let s=this.capabilityProviderWaiters.get(t)??new Set;s.add(o),this.capabilityProviderWaiters.set(t,s)}),!this.disposedCapabilityProviders.has(t)&&(this.disposedCapabilityProviders.add(t),await t.dispose?.())})();this.capabilityProviderDisposals.set(t,r);try{await r}catch(o){throw this.capabilityProviderDisposals.delete(t),o}}async withCapabilityProvider(t,n){this.capabilityProviderUses.set(t,(this.capabilityProviderUses.get(t)??0)+1);try{return await n()}finally{let r=(this.capabilityProviderUses.get(t)??1)-1;if(r>0)this.capabilityProviderUses.set(t,r);else{this.capabilityProviderUses.delete(t);let o=this.capabilityProviderWaiters.get(t);this.capabilityProviderWaiters.delete(t);for(let s of o??[])s()}}}registerEventHandler(t,n,r){let o=`runtime:${++this.nextRecordId}`,s=this.eventHandlers.get(t)??[];return s.push({id:o,value:n,source:r}),this.eventHandlers.set(t,s),()=>{let a=this.eventHandlers.get(t);if(!a)return;let c=a.filter(l=>l.id!==o);if(c.length===0){this.eventHandlers.delete(t);return}this.eventHandlers.set(t,c)}}registerHookHandler(t,n,r){let o=`runtime:${++this.nextRecordId}`,s=this.hookHandlers.get(t)??[];return s.push({id:o,value:n,source:r}),this.hookHandlers.set(t,s),()=>{let a=this.hookHandlers.get(t);if(!a)return;let c=a.filter(l=>l.id!==o);if(c.length===0){this.hookHandlers.delete(t);return}this.hookHandlers.set(t,c)}}async unloadExtension(t){let n=this.loadedExtensions.get(t);n&&(await n.disposeAll(),this.loadedExtensions.delete(t))}async importExtensionModule(t){let n=Ee.extname(t).toLowerCase();if(!dr(t))throw new Error(`Unsupported extension module "${t}". FEATURE_034 currently loads .js/.mjs/.cjs/.ts/.mts/.cts files.`);if([".js",".mjs",".cjs"].includes(n)){let r=new URL(Yp(t).href);return r.searchParams.set("kodax_ext_reload",`${Date.now()}:${Math.random()}`),import(r.href)}if([".ts",".mts",".cts"].includes(n))return eE(Yp(t).href,{parentURL:import.meta.url});throw new Error(`Unsupported extension module "${t}". FEATURE_034 currently loads .js/.mjs/.cjs/.ts/.mts/.cts files.`)}},Va=class{static{i(this,"CombinedExtensionRuntime")}primary;secondary;constructor(t,n){this.primary=t,this.secondary=n}getDefaults(){let t=this.primary.getDefaults(),n=this.secondary.getDefaults();return{activeTools:t.activeTools??n.activeTools,modelSelection:{...n.modelSelection,...t.modelSelection},thinkingLevel:t.thinkingLevel??n.thinkingLevel}}hasCapabilityProvider(t){return this.primary.hasCapabilityProvider(t)||this.secondary.hasCapabilityProvider(t)}bindController(t){let n=[this.secondary.bindController(t),this.primary.bindController(t)];return()=>{for(let r of n.reverse())r()}}async hydrateSession(t){await this.secondary.hydrateSession(t),await this.primary.hydrateSession(t)}async runHook(t,n){let r=await this.secondary.runHook(t,n);return r!==void 0?r:this.primary.runHook(t,n)}async emit(t,n){await this.secondary.emit(t,n),await this.primary.emit(t,n)}async searchCapabilities(t,n,r={}){let o=[],s;for(let a of[this.primary,this.secondary])try{o.push(...await a.searchCapabilities(t,n,r))}catch(c){if(!this.shouldTryNextCapabilityRuntime(c,t))throw c;s??=c}if(o.length===0&&s)throw s;return typeof r.limit=="number"?o.slice(0,r.limit):o}async searchCapabilitySnapshot(t,n,r={}){let o=[],s;for(let l of[this.primary,this.secondary])try{o.push(await l.searchCapabilitySnapshot(t,n,r))}catch(d){if(!this.shouldTryNextCapabilityRuntime(d,t))throw d;s??=d}if(o.length===0&&s)throw s;let a=new Set;return{items:o.flatMap(l=>l.items).filter(l=>{let d=l&&typeof l=="object"&&!Array.isArray(l)?l.id:void 0;return typeof d!="string"?!0:a.has(d)?!1:(a.add(d),!0)}),revision:nE(o),complete:o.every(l=>l.complete),freshness:tE(o.map(l=>l.freshness)),failures:o.flatMap(l=>l.failures??[])}}describeCapability(t,n){return this.firstCapabilityResult(t,[()=>this.primary.describeCapability(t,n),()=>this.secondary.describeCapability(t,n)])}executeCapability(t,n,r){return this.firstCapabilityResult(t,[()=>this.primary.executeCapability(t,n,r),()=>this.secondary.executeCapability(t,n,r)])}readCapability(t,n,r={}){return this.firstCapabilityResult(t,[()=>this.primary.readCapability(t,n,r),()=>this.secondary.readCapability(t,n,r)])}getCapabilityPrompt(t,n,r={}){return this.firstCapabilityResult(t,[()=>this.primary.getCapabilityPrompt(t,n,r),()=>this.secondary.getCapabilityPrompt(t,n,r)])}async getCapabilityPromptContext(t){return(await Promise.all([this.secondary.getCapabilityPromptContext(t),this.primary.getCapabilityPromptContext(t)])).filter(o=>typeof o=="string"&&o.trim().length>0).join(`
|
|
295
|
+
[RESULT_LIMIT_REACHED: max_results=${t}; additional tools matched. Narrow the keyword query or use \`select:NAME\` for an exact schema.]`:e}i(Dx,"appendLimitMarker");var jx=i(async(e,t)=>{let n=e,r=typeof n.query=="string"?n.query:"";if(r.length===0)return"tool_search: `query` is required. Forms: `select:NAME[,NAME...]` for exact lookup, or keyword search (`+required loose terms`).";let o=typeof n.max_results=="number"&&n.max_results>0?Math.min(Math.floor(n.max_results),$x):Ix,s=Px(r);if(s.mode==="select")return Bp(Mx(s.names),t,t.selfManual?.productName);let a=Lx(s.required,s.loose,o+1),c=a.slice(0,o),l=Bp(c,t,t.selfManual?.productName);return Dx(l,o,a.length>o)},"toolSearchHandler"),Wp={name:"tool_search",description:["Fetch full schema definitions for tools whose rich descriptions are deferred behind compact search hints.","The deferred catalog includes web discovery, repo intelligence (module_context / symbol_context / impact_estimate / process_context / changed_scope / repo_overview / semantic_lookup / code_search), and run_workflow.","Use `tool_search` when a hint suggests a tool fits the task and you need the full schema (parameter shape, when-to-prefer-X, behavioral contracts) before invoking.",'Query forms: `select:ToolName` (exact, recommended) or keyword search like `"+module exploration"` (require keyword) / `"refactor impact"` (loose match, ranked).',"On the SA path, resolving a deferred tool unlocks its full description for later tool lists in the same context. On the AMA managed path, the tool list is static, so the `tool_search` result itself is the durable teaching surface."].join(" "),input_schema:{type:"object",properties:{query:{type:"string",description:"Either `select:ToolName[,ToolName...]` for exact lookup, or keyword search (`+keyword required loose terms`)."},max_results:{type:"number",description:"Maximum number of results to return (default 5, capped at 15). Ignored in `select:` mode."}},required:["query"]},handler:jx,sideEffect:"readonly",planModeAllowed:!0,toClassifierInput:i(()=>"","toClassifierInput")};import Ee from"path";import{pathToFileURL as Yp}from"url";import{createHash as Zx}from"node:crypto";import{execFile as Fx}from"child_process";import{promisify as Ux}from"util";var qx=Ux(Fx),Bx=3e4,Wx=1e4;async function Hp(e,t={}){let n=t.timeout??Bx,r=t.shell??(process.platform==="win32"?"powershell":"bash"),o=r==="powershell"?["-Command",e]:["-c",e],s={PATH:process.env.PATH??"",HOME:process.env.HOME??process.env.USERPROFILE??"",LANG:process.env.LANG??"",TERM:process.env.TERM??"",...process.platform==="win32"?{SYSTEMROOT:process.env.SYSTEMROOT??"",COMSPEC:process.env.COMSPEC??"",PATHEXT:process.env.PATHEXT??""}:{},...t.env};try{let{stdout:a,stderr:c}=await qx(r,o,{timeout:n,cwd:t.cwd,env:s,windowsHide:!0});return{exitCode:0,stdout:a.trim(),stderr:c.trim()}}catch(a){let c=a&&typeof a=="object"&&"code"in a&&typeof a.code=="number"?a.code:1,l=a&&typeof a=="object"&&"stdout"in a?String(a.stdout??"").trim():"",d=a&&typeof a=="object"&&"stderr"in a?String(a.stderr??"").trim():a instanceof Error?a.message:String(a);return{exitCode:c,stdout:l,stderr:d}}}i(Hp,"exec");async function Kp(e,t,n={}){let r=n.timeout??Wx,o=new AbortController,s=setTimeout(()=>o.abort(),r);try{let a=await fetch(e,{method:n.method??"POST",headers:{"Content-Type":"application/json",...n.headers},body:JSON.stringify(t),signal:o.signal});clearTimeout(s);let c=await a.text().catch(()=>{});return{ok:a.ok,status:a.status,body:c}}catch(a){return clearTimeout(s),{ok:!1,status:0,body:a instanceof Error?a.message:String(a)}}}i(Kp,"webhook");import De from"path";import{access as Hx,readdir as Kx,realpath as Gx,stat as Ka}from"fs/promises";import{constants as zx}from"fs";var Gp=new Set([".js",".mjs",".cjs",".ts",".mts",".cts"]),vo=["extension.mjs","extension.js","extension.cjs","extension.mts","extension.ts","extension.cts","index.mjs","index.js","index.cjs","index.mts","index.ts","index.cts"];function Ga(e){return e instanceof Error&&"code"in e&&e.code==="ENOENT"}i(Ga,"isMissingPathError");async function zp(e){try{return(await Ka(e)).isFile()?(await Hx(e,zx.R_OK),!0):!1}catch(t){if(Ga(t))return!1;throw t}}i(zp,"isReadableFile");function dr(e){return Gp.has(De.extname(e).toLowerCase())}i(dr,"isSupportedExtensionModulePath");function Xx(e=Qt()){return De.join(e,"extensions")}i(Xx,"getDefaultExtensionDirectory");async function za(e){let t=De.resolve(e),n=await Ka(t);if(n.isFile()){if(!dr(t))throw new Error(`Unsupported extension module "${t}". Expected one of: ${[...Gp].join(", ")}.`);return t}if(!n.isDirectory())throw new Error(`Extension path "${t}" must be a file or directory.`);for(let r of vo){let o=De.join(t,r);if(await zp(o))return o}throw new Error(`Extension directory "${t}" must contain one of: ${vo.join(", ")}.`)}i(za,"resolveExtensionEntrypoint");async function Xp(e){for(let t of vo){let n=De.join(e,t);if(await zp(n))return n}}i(Xp,"tryResolveDirectoryEntrypoint");async function Yx(e){try{let t=await Ka(e);return t.isFile()?dr(e)?De.resolve(e):void 0:t.isDirectory()?Xp(e):void 0}catch(t){if(Ga(t))return;throw t}}i(Yx,"tryResolveDiscoveredEntrypoint");async function Vx(e){try{return await Gx(e)}catch(t){return De.resolve(e)}}i(Vx,"canonicalEntrypointIdentity");async function Ha(e){let t=e.trim();try{return await Vx(await za(t))}catch(n){return De.resolve(t)}}i(Ha,"getExtensionEntrypointIdentity");async function Xa(e){let t=[],n=new Set;for(let r of e){let o=r.trim();if(!o)continue;let s=await Ha(o);n.has(s)||(n.add(s),t.push(o))}return t}i(Xa,"dedupeExtensionPathsByEntrypoint");async function ZD(e,t){let n=new Set;for(let s of t){let a=s.trim();a&&n.add(await Ha(a))}let r=[],o=new Set;for(let s of e){let a=s.trim();if(!a)continue;let c=await Ha(a);n.has(c)||o.has(c)||(o.add(c),r.push(a))}return r}i(ZD,"excludeExtensionPathsByEntrypoint");function Wa(e,t,n){return{path:e,reason:t,message:n}}i(Wa,"skippedEntry");async function Jx(e){let t=De.resolve(e),n;try{n=await Kx(t,{withFileTypes:!0})}catch(s){if(Ga(s))return{paths:[],skipped:[]};throw s}let r=[],o=[];for(let s of n.sort((a,c)=>a.name.localeCompare(c.name))){let a=De.join(t,s.name);if(s.isFile()){dr(a)?r.push(a):o.push(Wa(a,"unsupported_module","File extension is not supported for KodaX runtime extensions."));continue}if(s.isDirectory()){let c=await Xp(a);c?r.push(c):o.push(Wa(a,"missing_entrypoint",`Directory does not contain one of: ${vo.join(", ")}.`));continue}if(s.isSymbolicLink()){let c=await Yx(a);c?r.push(c):o.push(Wa(a,"unsupported_target","Symlink target is not a supported extension file or package directory."))}}return{paths:r,skipped:o}}i(Jx,"discoverExtensionsInDirectoryDetailed");async function Qx(e){return(await Jx(e)).paths}i(Qx,"discoverExtensionsInDirectory");async function ej(){return Qx(Xx())}i(ej,"discoverDefaultExtensions");import{tsImport as eE}from"tsx/esm/api";function tE(e){return e.length===0?"unknown":e.every(t=>t===e[0])?e[0]??"unknown":"mixed"}i(tE,"combineSearchFreshness");function nE(e){let t=e.map(n=>n.revision??JSON.stringify(n.items));return Zx("sha256").update(JSON.stringify(t)).digest("hex").slice(0,16)}i(nE,"combineSearchRevision");function rE(e){return e.map(t=>{if(typeof t=="string")return t;if(t instanceof Error)return t.stack??t.message;try{return JSON.stringify(t)}catch{return String(t)}}).join(" ")}i(rE,"formatExtensionLogArgs");function kt(e,t,n){D({source:e,level:t,message:rE(n)})}i(kt,"emitExtensionDiagnostic");function oE(e){let t=Ee.basename(e),n=Ee.parse(t).name;return n==="extension"||n==="index"?Ee.basename(Ee.dirname(e)):t}i(oE,"getExtensionLabel");var Xt=null,Yt=null;function iE(e){if(typeof e!="object"||e===null)return!1;let t=e;return typeof t.emit=="function"&&typeof t.runHook=="function"}i(iE,"isActiveExtensionExecutionRuntime");function sE(e){let t=[];for(let n of e){let r=n.trim();!r||t.includes(r)||t.push(r)}return t}i(sE,"dedupeStrings");function Vp(e){return typeof e=="string"?{role:"user",content:e}:e}i(Vp,"normalizeQueuedMessage");function aE(e){let t={};return e.provider?.trim()&&(t.provider=e.provider.trim()),e.model?.trim()&&(t.model=e.model.trim()),t}i(aE,"normalizeModelSelection");function Cn(e){if(e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean")return!0;if(Array.isArray(e))return e.every(Cn);if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:Object.values(e).every(Cn)}i(Cn,"isJsonValue");var Ya=class{static{i(this,"KodaXExtensionRuntime")}capabilityProviders=new Map;commands=new Map;eventHandlers=new Map;hookHandlers=new Map;loadedExtensions=new Map;failures=[];runtimeDisposables=[];disposedCapabilityProviders=new WeakSet;capabilityProviderUses=new WeakMap;capabilityProviderWaiters=new WeakMap;capabilityProviderDisposals=new WeakMap;runtimeLogger;config;runtimeController;nextRecordId=0;boundController=null;defaultActiveTools;defaultModelSelection={};defaultThinkingLevel;constructor(t={}){this.config=t.config??{},this.runtimeLogger={debug:i((...n)=>kt("coding:extension","debug",n),"debug"),info:i((...n)=>kt("coding:extension","info",n),"info"),warn:i((...n)=>kt("coding:extension","warn",n),"warn"),error:i((...n)=>kt("coding:extension","error",n),"error")},this.runtimeController=this.createRuntimeControllerProxy()}activate(){return Xt=this,this}getDefaults(){return{activeTools:this.defaultActiveTools===void 0?void 0:[...this.defaultActiveTools],modelSelection:{...this.defaultModelSelection},thinkingLevel:this.defaultThinkingLevel}}bindController(t){let n=this.boundController;return this.boundController=t,()=>{this.boundController=n}}async dispose(){for(let t of Array.from(this.loadedExtensions.values()).reverse())await t.disposeAll();this.loadedExtensions.clear();for(let t of this.runtimeDisposables.reverse())await t();this.runtimeDisposables.length=0,this.failures.length=0,this.boundController=null,Xt===this&&(Xt=null),Yt===this&&(Yt=null)}async loadExtensions(t,n={}){let r=await Xa(t);for(let o of r)try{await this.loadExtension(o,{loadSource:n.loadSource,stage:n.stage??"load"})}catch(s){if(!n.continueOnError)throw s;this.runtimeLogger.warn(`Failed to load extension "${o}" during ${n.stage??"load"}:`,s instanceof Error?s.message:String(s))}}async loadExtension(t,n={}){let r=Ee.resolve(t);try{r=await za(r);let o=this.loadedExtensions.get(r),s=n.loadSource??o?.loadSource??"api",a=await this.importExtensionModule(r),c=a.default,l=c&&typeof c=="object"&&"default"in c?c.default:void 0,d=c&&typeof c=="object"&&"activate"in c?c.activate:void 0,u=typeof c=="function"?c:typeof l=="function"?l:typeof a.activate=="function"?a.activate:typeof d=="function"?d:void 0;if(!u)throw new Error(`Extension "${r}" must export a default function or named activate() function.`);try{let f=[],p=this.createExtensionApi(r,f,s),m={path:r,label:oE(r),loadSource:s,disposeAll:i(async()=>{for(let h of f.reverse())await h()},"disposeAll")};try{let h=await u(p);typeof h=="function"&&f.push(h)}catch(h){throw await m.disposeAll(),h}if(o)try{await o.disposeAll()}catch(h){throw await m.disposeAll(),h}this.loadedExtensions.set(r,m)}catch(f){throw f}}catch(o){throw this.recordFailure(n.stage??(this.loadedExtensions.has(r)?"reload":"load"),r,this.createExtensionSource(r,n.loadSource??this.loadedExtensions.get(r)?.loadSource??"api"),o),o}}async reloadExtensions(t={continueOnError:!0}){let n=Array.from(this.loadedExtensions.keys());for(let r of n)try{await this.loadExtension(r,{loadSource:this.loadedExtensions.get(r)?.loadSource,stage:"reload"})}catch(o){if(!t.continueOnError)throw o;this.runtimeLogger.warn(`Failed to reload extension "${r}":`,o instanceof Error?o.message:String(o))}}listCapabilityProviders(){return Array.from(this.capabilityProviders.values()).map(t=>t[t.length-1]?.value).filter(t=>t!==void 0)}registerCapabilityProvider(t,n={}){let r=n.source??this.createRuntimeSource(`runtime:capability:${t.id}`,t.id),o=this.registerRecord(this.capabilityProviders,t.id,t,r,this.runtimeDisposables);return t.dispose&&this.runtimeDisposables.push(()=>this.disposeCapabilityProvider(t)),o}hasCapabilityProvider(t){return this.getCapabilityProvider(t)!==void 0}async replaceCapabilityProvider(t,n,r={}){if(n&&n.id!==t)throw new Error("Capability provider id mismatch.");let o=this.capabilityProviders.get(t)??[];if(n){let s=`runtime:${++this.nextRecordId}`,a=r.source??this.createRuntimeSource(`runtime:capability:${t}`,t);this.capabilityProviders.set(t,[{id:s,value:n,source:a}]),this.runtimeDisposables.push(()=>{this.capabilityProviders.get(t)?.[0]?.id===s&&this.capabilityProviders.delete(t)}),this.runtimeDisposables.push(()=>this.disposeCapabilityProvider(n))}else this.capabilityProviders.delete(t);for(let s of o)try{await this.disposeCapabilityProvider(s.value)}catch{let a=new Error("Previous capability provider cleanup failed after replacement.");this.recordFailure("dispose",`capability-provider:${t}`,s.source,a),this.runtimeLogger.warn(a.message)}}async reconcileExtensions(t,n){let r=await Xa([...t]),o=0,s=0;for(let l of r)try{await this.loadExtension(l,{loadSource:n.loadSource,stage:"reload"}),o+=1}catch{s+=1}let a=new Set(r.map(l=>Ee.resolve(l))),c=[...this.loadedExtensions.values()].filter(l=>l.loadSource===n.loadSource&&!a.has(l.path));for(let l of c)await this.unloadExtension(l.path);return{applied:o,retained:s,removed:c.length}}registerTool(t,n={}){let r=n.source??{kind:"extension",id:`runtime:tool:${t.name}`,label:t.name},o=En(t,{source:r});return this.runtimeDisposables.push(o),o}registerHook(t,n,r={}){let o=r.source??this.createRuntimeSource(`runtime:hook:${String(t)}`,String(t)),s=this.registerHookHandler(t,n,o);return this.runtimeDisposables.push(s),s}on(t,n,r={}){let o=r.source??this.createRuntimeSource(`runtime:event:${String(t)}`,String(t)),s=this.registerEventHandler(t,n,o);return this.runtimeDisposables.push(s),s}listCommands(){return Array.from(this.commands.values()).map(t=>t[t.length-1]?.value).filter(t=>t!==void 0)}getCommand(t){let n=t.trim().toLowerCase();if(n)return this.listCommands().find(r=>r.name.trim().toLowerCase()===n||(r.aliases??[]).some(o=>o.trim().toLowerCase()===n))}getDiagnostics(){let t=Array.from(this.capabilityProviders.entries()).map(([a,c])=>{let l=c[c.length-1];if(l)return{id:a,kinds:[...l.value.kinds],source:{...l.source},metadata:l.value.getDiagnostics?.()}}).filter(a=>a!==void 0).sort((a,c)=>a.id.localeCompare(c.id)),n=Array.from(this.commands.entries()).map(([a,c])=>{let l=c[c.length-1];if(l)return{name:a,aliases:l.value.aliases,description:l.value.description,usage:l.value.usage,metadata:l.value.metadata,source:{...l.source}}}).filter(a=>a!==void 0).sort((a,c)=>a.name.localeCompare(c.name)),r=Ye().map(a=>{let c=Wt(a),l=c[c.length-1];if(l)return{name:l.name,description:l.description,requiredParams:[...l.requiredParams],source:{...l.source},shadowedSources:c.slice(0,-1).map(d=>({...d.source}))}}).filter(a=>a!==void 0).sort((a,c)=>a.name.localeCompare(c.name)),o=Array.from(this.loadedExtensions.values()).map(a=>{let c=this.boundController?Object.keys(this.boundController.getSessionStateSnapshot(this.createExtensionSource(a.path,a.loadSource).id)).sort((d,u)=>d.localeCompare(u)):void 0,l=this.boundController?this.boundController.listSessionRecords(this.createExtensionSource(a.path,a.loadSource).id).reduce((d,u)=>(d[u.type]=(d[u.type]??0)+1,d),{}):void 0;return{path:a.path,label:a.label,loadSource:a.loadSource,sessionStateKeys:c&&c.length>0?c:void 0,sessionRecordCounts:l&&Object.keys(l).length>0?l:void 0}}).sort((a,c)=>a.path.localeCompare(c.path)),s=Array.from(this.hookHandlers.entries()).flatMap(([a,c])=>c.map((l,d)=>({hook:a,order:d+1,source:{...l.source}}))).sort((a,c)=>{let l=a.hook.localeCompare(c.hook);return l!==0?l:a.order-c.order});return{loadedExtensions:o,capabilityProviders:t,commands:n,tools:r,hooks:s,failures:this.failures.map(a=>({...a,source:{...a.source}})),defaults:this.getDefaults()}}getCapabilityProvider(t){let n=this.capabilityProviders.get(t);if(!(!n||n.length===0))return n[n.length-1]?.value}async searchCapabilities(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o)throw new Error(`Unknown capability provider: ${t}`);return o.search?(await this.emit("capability:search",{providerId:t,query:n,kind:r.kind,limit:r.limit}),this.withCapabilityProvider(o,()=>o.search(n,r))):[]}async searchCapabilitySnapshot(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o)throw new Error(`Unknown capability provider: ${t}`);return await this.emit("capability:search",{providerId:t,query:n,kind:r.kind}),o.searchSnapshot?this.withCapabilityProvider(o,()=>o.searchSnapshot(n,r)):{items:o.search?await this.withCapabilityProvider(o,()=>o.search(n,r)):[],complete:!1,freshness:"unknown"}}async describeCapability(t,n){let r=this.getCapabilityProvider(t);if(!r)throw new Error(`Unknown capability provider: ${t}`);return await this.emit("capability:describe",{providerId:t,capabilityId:n}),this.withCapabilityProvider(r,()=>r.describe?.(n))}async executeCapability(t,n,r){let o=this.getCapabilityProvider(t);if(!o?.execute)throw new Error(`Capability provider "${t}" does not implement execute().`);return await this.emit("capability:invoke",{providerId:t,capabilityId:n,kind:"tool"}),this.withCapabilityProvider(o,()=>o.execute(n,r))}async readCapability(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o?.read)throw new Error(`Capability provider "${t}" does not implement read().`);return await this.emit("capability:invoke",{providerId:t,capabilityId:n,kind:"resource"}),this.withCapabilityProvider(o,()=>o.read(n,r))}async getCapabilityPrompt(t,n,r={}){let o=this.getCapabilityProvider(t);if(!o?.getPrompt)throw new Error(`Capability provider "${t}" does not implement getPrompt().`);return await this.emit("capability:invoke",{providerId:t,capabilityId:n,kind:"prompt"}),this.withCapabilityProvider(o,()=>o.getPrompt(n,r))}async getCapabilityPromptContext(t){let n=this.getCapabilityProvider(t);if(n?.getPromptContext)return this.withCapabilityProvider(n,()=>n.getPromptContext())}async refreshCapabilityProviders(t){if(t){let n=this.getCapabilityProvider(t);if(!n)throw new Error(`Unknown capability provider: ${t}`);await this.emit("capability:refresh",{providerId:t}),await n.refresh?.();return}for(let n of this.listCapabilityProviders())await this.emit("capability:refresh",{providerId:n.id}),await n.refresh?.()}async hydrateSession(t){let n=this.hookHandlers.get("session:hydrate");if(!n||n.length===0)return;let r=this.boundController;if(!r)throw new Error("Session hydration requires an active KodaX session binding.");for(let o of n)try{let s=o.source,a=i((c,l)=>{let d=new Error(l);this.recordFailure("persistence",c,s,d),this.runtimeLogger.warn(l)},"warnPersistence");await o.value({sessionId:t,getState:i(c=>r.getSessionState(s.id,c),"getState"),setState:i((c,l)=>{if(l!==void 0&&!Cn(l)){a(`sessionState:${c}`,`Ignoring non-JSON session state for "${s.label}" key "${c}".`);return}r.setSessionState(s.id,c,l)},"setState"),listRecords:i(c=>r.listSessionRecords(s.id,c),"listRecords"),appendRecord:i((c,l,d)=>{let u=c.trim();if(!u){a("sessionRecord",`Ignoring session record with an empty type for "${s.label}".`);return}if(l!==void 0&&!Cn(l)){a(`sessionRecord:${u}`,`Ignoring non-JSON session record "${u}" for "${s.label}".`);return}return r.appendSessionRecord(s.id,u,l,d)},"appendRecord"),clearRecords:i(c=>r.clearSessionRecords(s.id,c),"clearRecords")})}catch(s){this.recordFailure("hook","session:hydrate",o.source,s),this.runtimeLogger.warn('Extension hook failed for "session:hydrate":',s instanceof Error?s.message:String(s))}}async emit(t,n){let r=this.eventHandlers.get(t);if(!(!r||r.length===0))for(let o of r)try{await o.value(n)}catch(s){this.recordFailure("event",t,o.source,s),this.runtimeLogger.warn(`Extension event handler failed for "${t}":`,s instanceof Error?s.message:String(s))}}async runHook(t,n){let r=this.hookHandlers.get(t);if(!(!r||r.length===0))for(let o of r)try{let s=await o.value(n);if(s!==void 0)return s}catch(s){this.recordFailure("hook",t,o.source,s),this.runtimeLogger.warn(`Extension hook failed for "${t}":`,s instanceof Error?s.message:String(s))}}createExtensionSource(t,n="api"){return{kind:"extension",id:`${n}:extension:${t}`,label:Ee.basename(t),path:t}}createRuntimeSource(t,n){return{kind:"runtime",id:t,label:n}}recordFailure(t,n,r,o){this.failures.push({stage:t,target:n,message:o instanceof Error?o.message:String(o),occurredAt:new Date().toISOString(),source:{...r}}),this.failures.length>50&&this.failures.shift()}createExtensionApi(t,n,r="api"){let o=this.createLogger(t),s=this.createExtensionSource(t,r);return{registerTool:i(a=>{let c=En(a,{source:s});return n.push(c),c},"registerTool"),getTool:i(a=>_e(a),"getTool"),getBuiltinTool:i(a=>Da(a),"getBuiltinTool"),registerModelProvider:i(a=>{let c=No(a.name,a.factory);return n.push(c),c},"registerModelProvider"),registerCapabilityProvider:i(a=>{let c=this.registerRecord(this.capabilityProviders,a.id,a,s,n);return a.dispose&&n.push(()=>a.dispose?.()),c},"registerCapabilityProvider"),registerCommand:i(a=>this.registerRecord(this.commands,a.name,a,s,n),"registerCommand"),registerSkillPath:i(a=>{let c=Ee.isAbsolute(a)?a:Ee.resolve(Ee.dirname(t),a),l=$c(c);return n.push(l),l},"registerSkillPath"),registerAgent:i(async(a,c)=>{let l=ue({name:a,content:c}),d=new Map(Re().map(m=>[m.name,m])),u=await ae.admit(l,{activatedAgents:d});if(!u.ok)throw new Error(`[extension:${s.id}] registerAgent("${a}") rejected by admission: ${u.reason}`);let f={kind:"agent",name:a,version:"0.0.0-extension",content:c,status:"active",createdAt:Date.now(),testedAt:Date.now(),activatedAt:Date.now()},p=Oe(f,{bindings:u.handle.invariantBindings,manifest:u.handle.manifest,source:"extension"});return n.push(p),p},"registerAgent"),on:i((a,c)=>{let l=this.registerEventHandler(a,c,s);return n.push(l),l},"on"),hook:i((a,c)=>{let l=this.registerHookHandler(a,c,s);return n.push(l),l},"hook"),logger:o,config:this.config,runtime:this.createExtensionApiRuntimeController(s,o,n),persistence:jc(s.id),exec:Hp,webhook:Kp}}createLogger(t){let r=`coding:extension:${Ee.basename(t)}`;return{debug:i((...o)=>kt(r,"debug",o),"debug"),info:i((...o)=>kt(r,"info",o),"info"),warn:i((...o)=>kt(r,"warn",o),"warn"),error:i((...o)=>kt(r,"error",o),"error")}}createRuntimeControllerProxy(){return{queueUserMessage:i(t=>{let n=this.boundController;if(!n)throw new Error("No active KodaX session is bound to the extension runtime.");n.queueUserMessage(Vp(t))},"queueUserMessage"),getSessionState:i((t,n)=>this.boundController?.getSessionState(t,n),"getSessionState"),setSessionState:i((t,n,r)=>{let o=this.boundController;if(!o)throw new Error("Session state is only available while a KodaX session is active.");o.setSessionState(t,n,r)},"setSessionState"),getSessionStateSnapshot:i(t=>this.boundController?this.boundController.getSessionStateSnapshot(t):{},"getSessionStateSnapshot"),appendSessionRecord:i((t,n,r,o)=>{let s=this.boundController;if(!s)throw new Error("Session records are only available while a KodaX session is active.");return s.appendSessionRecord(t,n,r,o)},"appendSessionRecord"),listSessionRecords:i((t,n)=>this.boundController?this.boundController.listSessionRecords(t,n):[],"listSessionRecords"),clearSessionRecords:i((t,n)=>{let r=this.boundController;if(!r)throw new Error("Session records are only available while a KodaX session is active.");return r.clearSessionRecords(t,n)},"clearSessionRecords"),getActiveTools:i(()=>this.boundController?this.boundController.getActiveTools():this.defaultActiveTools===void 0?Ye():[...this.defaultActiveTools],"getActiveTools"),setActiveTools:i(t=>{let n=sE(t);if(this.boundController){this.boundController.setActiveTools(n);return}this.defaultActiveTools=n},"setActiveTools"),getModelSelection:i(()=>this.boundController?this.boundController.getModelSelection():{...this.defaultModelSelection},"getModelSelection"),setModelSelection:i(t=>{let n=aE(t);if(this.boundController){this.boundController.setModelSelection(n);return}this.defaultModelSelection=n},"setModelSelection"),getThinkingLevel:i(()=>this.boundController?.getThinkingLevel()??this.defaultThinkingLevel,"getThinkingLevel"),setThinkingLevel:i(t=>{if(this.boundController){this.boundController.setThinkingLevel(t);return}this.defaultThinkingLevel=t},"setThinkingLevel")}}createExtensionApiRuntimeController(t,n,r){let o=!1,s,a=!1,c={},l=!1,d,u=i(()=>{o||this.boundController||(o=!0,s=this.defaultActiveTools===void 0?void 0:[...this.defaultActiveTools],r.push(()=>{this.defaultActiveTools=s===void 0?void 0:[...s]}))},"captureActiveToolsRestore"),f=i(()=>{a||this.boundController||(a=!0,c={...this.defaultModelSelection},r.push(()=>{this.defaultModelSelection={...c}}))},"captureModelSelectionRestore"),p=i(()=>{l||this.boundController||(l=!0,d=this.defaultThinkingLevel,r.push(()=>{this.defaultThinkingLevel=d}))},"captureThinkingLevelRestore"),m=i((h,y)=>{let w=new Error(y);this.recordFailure("persistence",h,t,w),n.warn(y)},"recordPersistenceFailure");return{queueUserMessage:i(h=>this.runtimeController.queueUserMessage(Vp(h)),"queueUserMessage"),getSessionState:i(h=>this.runtimeController.getSessionState(t.id,h),"getSessionState"),setSessionState:i((h,y)=>{if(y!==void 0&&!Cn(y)){m(`sessionState:${h}`,`Ignoring non-JSON session state for "${t.label}" key "${h}".`);return}this.runtimeController.setSessionState(t.id,h,y)},"setSessionState"),appendSessionRecord:i((h,y,w)=>{let g=h.trim();if(!g){m("sessionRecord",`Ignoring session record with an empty type for "${t.label}".`);return}if(y!==void 0&&!Cn(y)){m(`sessionRecord:${g}`,`Ignoring non-JSON session record "${g}" for "${t.label}".`);return}return this.runtimeController.appendSessionRecord(t.id,g,y,w)},"appendSessionRecord"),listSessionRecords:i(h=>this.runtimeController.listSessionRecords(t.id,h),"listSessionRecords"),clearSessionRecords:i(h=>this.runtimeController.clearSessionRecords(t.id,h),"clearSessionRecords"),getActiveTools:i(()=>this.runtimeController.getActiveTools(),"getActiveTools"),setActiveTools:i(h=>{u(),this.runtimeController.setActiveTools(h)},"setActiveTools"),getModelSelection:i(()=>this.runtimeController.getModelSelection(),"getModelSelection"),setModelSelection:i(h=>{f(),this.runtimeController.setModelSelection(h)},"setModelSelection"),getThinkingLevel:i(()=>this.runtimeController.getThinkingLevel(),"getThinkingLevel"),setThinkingLevel:i(h=>{p(),this.runtimeController.setThinkingLevel(h)},"setThinkingLevel")}}registerRecord(t,n,r,o,s){let a=`runtime:${++this.nextRecordId}`,c=t.get(n)??[];t.set(n,[...c,{id:a,value:r,source:o}]);let l=i(()=>{let u=(t.get(n)??[]).filter(f=>f.id!==a);u.length===0?t.delete(n):t.set(n,u)},"dispose");return s.push(l),l}async disposeCapabilityProvider(t){let n=this.capabilityProviderDisposals.get(t);if(n)return n;let r=(async()=>{(this.capabilityProviderUses.get(t)??0)>0&&await new Promise(o=>{let s=this.capabilityProviderWaiters.get(t)??new Set;s.add(o),this.capabilityProviderWaiters.set(t,s)}),!this.disposedCapabilityProviders.has(t)&&(this.disposedCapabilityProviders.add(t),await t.dispose?.())})();this.capabilityProviderDisposals.set(t,r);try{await r}catch(o){throw this.capabilityProviderDisposals.delete(t),o}}async withCapabilityProvider(t,n){this.capabilityProviderUses.set(t,(this.capabilityProviderUses.get(t)??0)+1);try{return await n()}finally{let r=(this.capabilityProviderUses.get(t)??1)-1;if(r>0)this.capabilityProviderUses.set(t,r);else{this.capabilityProviderUses.delete(t);let o=this.capabilityProviderWaiters.get(t);this.capabilityProviderWaiters.delete(t);for(let s of o??[])s()}}}registerEventHandler(t,n,r){let o=`runtime:${++this.nextRecordId}`,s=this.eventHandlers.get(t)??[];return s.push({id:o,value:n,source:r}),this.eventHandlers.set(t,s),()=>{let a=this.eventHandlers.get(t);if(!a)return;let c=a.filter(l=>l.id!==o);if(c.length===0){this.eventHandlers.delete(t);return}this.eventHandlers.set(t,c)}}registerHookHandler(t,n,r){let o=`runtime:${++this.nextRecordId}`,s=this.hookHandlers.get(t)??[];return s.push({id:o,value:n,source:r}),this.hookHandlers.set(t,s),()=>{let a=this.hookHandlers.get(t);if(!a)return;let c=a.filter(l=>l.id!==o);if(c.length===0){this.hookHandlers.delete(t);return}this.hookHandlers.set(t,c)}}async unloadExtension(t){let n=this.loadedExtensions.get(t);n&&(await n.disposeAll(),this.loadedExtensions.delete(t))}async importExtensionModule(t){let n=Ee.extname(t).toLowerCase();if(!dr(t))throw new Error(`Unsupported extension module "${t}". FEATURE_034 currently loads .js/.mjs/.cjs/.ts/.mts/.cts files.`);if([".js",".mjs",".cjs"].includes(n)){let r=new URL(Yp(t).href);return r.searchParams.set("kodax_ext_reload",`${Date.now()}:${Math.random()}`),import(r.href)}if([".ts",".mts",".cts"].includes(n))return eE(Yp(t).href,{parentURL:import.meta.url});throw new Error(`Unsupported extension module "${t}". FEATURE_034 currently loads .js/.mjs/.cjs/.ts/.mts/.cts files.`)}},Va=class{static{i(this,"CombinedExtensionRuntime")}primary;secondary;constructor(t,n){this.primary=t,this.secondary=n}getDefaults(){let t=this.primary.getDefaults(),n=this.secondary.getDefaults();return{activeTools:t.activeTools??n.activeTools,modelSelection:{...n.modelSelection,...t.modelSelection},thinkingLevel:t.thinkingLevel??n.thinkingLevel}}hasCapabilityProvider(t){return this.primary.hasCapabilityProvider(t)||this.secondary.hasCapabilityProvider(t)}bindController(t){let n=[this.secondary.bindController(t),this.primary.bindController(t)];return()=>{for(let r of n.reverse())r()}}async hydrateSession(t){await this.secondary.hydrateSession(t),await this.primary.hydrateSession(t)}async runHook(t,n){let r=await this.secondary.runHook(t,n);return r!==void 0?r:this.primary.runHook(t,n)}async emit(t,n){await this.secondary.emit(t,n),await this.primary.emit(t,n)}async searchCapabilities(t,n,r={}){let o=[],s;for(let a of[this.primary,this.secondary])try{o.push(...await a.searchCapabilities(t,n,r))}catch(c){if(!this.shouldTryNextCapabilityRuntime(c,t))throw c;s??=c}if(o.length===0&&s)throw s;return typeof r.limit=="number"?o.slice(0,r.limit):o}async searchCapabilitySnapshot(t,n,r={}){let o=[],s;for(let l of[this.primary,this.secondary])try{o.push(await l.searchCapabilitySnapshot(t,n,r))}catch(d){if(!this.shouldTryNextCapabilityRuntime(d,t))throw d;s??=d}if(o.length===0&&s)throw s;let a=new Set;return{items:o.flatMap(l=>l.items).filter(l=>{let d=l&&typeof l=="object"&&!Array.isArray(l)?l.id:void 0;return typeof d!="string"?!0:a.has(d)?!1:(a.add(d),!0)}),revision:nE(o),complete:o.every(l=>l.complete),freshness:tE(o.map(l=>l.freshness)),failures:o.flatMap(l=>l.failures??[])}}describeCapability(t,n){return this.firstCapabilityResult(t,[()=>this.primary.describeCapability(t,n),()=>this.secondary.describeCapability(t,n)])}executeCapability(t,n,r){return this.firstCapabilityResult(t,[()=>this.primary.executeCapability(t,n,r),()=>this.secondary.executeCapability(t,n,r)])}readCapability(t,n,r={}){return this.firstCapabilityResult(t,[()=>this.primary.readCapability(t,n,r),()=>this.secondary.readCapability(t,n,r)])}getCapabilityPrompt(t,n,r={}){return this.firstCapabilityResult(t,[()=>this.primary.getCapabilityPrompt(t,n,r),()=>this.secondary.getCapabilityPrompt(t,n,r)])}async getCapabilityPromptContext(t){return(await Promise.all([this.secondary.getCapabilityPromptContext(t),this.primary.getCapabilityPromptContext(t)])).filter(o=>typeof o=="string"&&o.trim().length>0).join(`
|
|
296
296
|
|
|
297
297
|
`)||void 0}async refreshCapabilityProviders(t){let n=!1,r;for(let o of[this.primary,this.secondary])try{await o.refreshCapabilityProviders(t),n=!0}catch(s){if(r??=s,!t||!this.shouldTryNextCapabilityRuntime(s,t))throw s}if(!n&&r)throw r}getDiagnostics(){let t=this.primary.getDiagnostics(),n=this.secondary.getDiagnostics();return{loadedExtensions:[...n.loadedExtensions,...t.loadedExtensions].sort((r,o)=>r.path.localeCompare(o.path)),capabilityProviders:[...n.capabilityProviders,...t.capabilityProviders].sort((r,o)=>r.id.localeCompare(o.id)),commands:[...n.commands,...t.commands].sort((r,o)=>r.name.localeCompare(o.name)),tools:this.dedupeToolDiagnostics([...n.tools,...t.tools]),hooks:[...n.hooks,...t.hooks].sort((r,o)=>r.hook.localeCompare(o.hook)||r.order-o.order),failures:[...n.failures,...t.failures],defaults:this.getDefaults()}}async firstCapabilityResult(t,n){let r;for(let o of n)try{return await o()}catch(s){if(r??=s,!this.shouldTryNextCapabilityRuntime(s,t))throw s}throw r}shouldTryNextCapabilityRuntime(t,n){return t instanceof Error?t.message==="Unknown capability provider: "+n||t.message.startsWith('Capability provider "'+n+'" does not implement ')||n==="mcp"&&t.message.startsWith("Unknown MCP server:"):!1}dedupeToolDiagnostics(t){let n=new Set,r=[];for(let o of t){let s=`${o.name}\0${o.source.kind}\0${o.source.id}`;n.has(s)||(n.add(s),r.push(o))}return r.sort((o,s)=>o.name.localeCompare(s.name))}};function gj(e,t){return new Va(e,t)}i(gj,"combineExtensionRuntimes");function yj(e={}){return new Ya(e)}i(yj,"createExtensionRuntime");function wj(e){Xt=e}i(wj,"setActiveExtensionRuntime");function bj(){return Xt}i(bj,"getActiveExtensionRuntime");function vj(e){let t=Yt;return Yt=iE(e)?e:null,()=>{Yt=t}}i(vj,"bindActiveExtensionExecutionRuntime");async function ur(e,t){await(Yt??Xt)?.emit(e,t)}i(ur,"emitActiveExtensionEvent");async function ko(e,t){return(Yt??Xt)?.runHook(e,t)}i(ko,"runActiveExtensionHook");var cE=new Set(["in_progress","completed","failed","skipped","cancelled","deleted"]),Zp=new Set(["build","test","lint"]),lE=new Set(["init","update"]),fr=new Set(["completed","skipped","cancelled"]),Jp=3,Qp="All plan-list items are now in a terminal state (completed / skipped / cancelled). Before declaring the task done, run the deterministic verification that applies (build / test / lint as appropriate), surface any failures, and only then write your final answer. If you have already verified within this run, ignore this reminder. NEVER mention this reminder to the user.";function j(e){return JSON.stringify(e)}i(j,"jsonResult");function dE(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}i(dE,"isPlainObject");function uE(e,t){let n=[];return e.subject!==t.subject&&n.push("subject"),e.description!==t.description&&n.push("description"),e.status!==t.status&&n.push("status"),e.activeForm!==t.activeForm&&n.push("activeForm"),e.note!==t.note&&n.push("note"),e.evaluator!==t.evaluator&&n.push("evaluator"),e.metadata!==t.metadata&&n.push("metadata"),Object.freeze(n)}i(uE,"changedFieldsOf");function fE(e,t){if(!Array.isArray(e.items))return j({ok:!1,reason:"Invalid op:'init' payload: `items` must be an array of {id, content, activeForm?} objects (>= 1 entry)."});let n=e.items;if(n.length===0)return j({ok:!1,reason:"Invalid op:'init' payload: `items` array must contain >= 1 entry. Use op:'update' (or pass a non-empty list) instead of an empty init."});let r=new Set,o=[];for(let s=0;s<n.length;s++){let a=n[s];if(a==null||typeof a!="object")return j({ok:!1,reason:`Invalid op:'init' items[${s}]: must be an object {id, subject, description?, activeForm?}.`});let{id:c,subject:l,description:d,activeForm:u,evaluator:f}=a;if(typeof c!="string"||c.length===0)return j({ok:!1,reason:`Invalid op:'init' items[${s}].id: must be a non-empty string.`});if(r.has(c))return j({ok:!1,reason:`Invalid op:'init' items[${s}].id: duplicate id ${JSON.stringify(c)}. Each item id must be unique within the list.`});if(r.add(c),typeof l!="string"||l.length===0)return j({ok:!1,reason:`Invalid op:'init' items[${s}].subject: must be a non-empty string (brief imperative title shown in the plan-list row).`});if(d!==void 0&&typeof d!="string")return j({ok:!1,reason:`Invalid op:'init' items[${s}].description: when provided, must be a string (fuller context / work instructions; multi-line OK).`});if(u!==void 0&&typeof u!="string")return j({ok:!1,reason:`Invalid op:'init' items[${s}].activeForm: when provided, must be a string (present-continuous form, e.g. "Running tests").`});if(f!==void 0&&(typeof f!="string"||!Zp.has(f)))return j({ok:!1,reason:`Invalid op:'init' items[${s}].evaluator: when provided, must be one of 'build' | 'test' | 'lint'. Got ${JSON.stringify(f)}.`});o.push({id:c,subject:l,...typeof d=="string"?{description:d}:{},...typeof u=="string"?{activeForm:u}:{},...typeof f=="string"?{evaluator:f}:{}})}return t.todoStore.init(o),j({ok:!0,count:o.length})}i(fE,"executeInitOp");async function em(e,t){let{op:n,id:r,status:o,note:s,activeForm:a,subject:c,description:l,evaluator:d,metadata:u}=e;if(!t.todoStore)return j({ok:!1,reason:"todo_update is not active in this run (no plan list was seeded). You may continue working without calling todo_update."});let f=n===void 0?"update":n;if(typeof f!="string"||!lE.has(f))return j({ok:!1,reason:`Invalid op: ${JSON.stringify(n)}. Allowed: 'init' | 'update' (omit for default 'update').`});if(f==="init")return fE(e,t);if(typeof r!="string"||r.length===0)return j({ok:!1,reason:"Missing or invalid required parameter: id (non-empty string)."});if(o!==void 0&&(typeof o!="string"||!cE.has(o)))return j({ok:!1,reason:`Invalid status: ${JSON.stringify(o)}. Allowed: in_progress | completed | failed | skipped | cancelled | deleted.`});if(o===void 0&&c===void 0&&l===void 0&&a===void 0&&s===void 0&&d===void 0&&u===void 0)return j({ok:!1,reason:"Empty op:'update' payload. Supply at least one of: status, subject, description, activeForm, note, evaluator, metadata."});if(!t.todoStore.has(r)){let y=t.todoStore.allIds(),w=y.length===0?"no todos currently exist":y.join(", ");return j({ok:!1,reason:`Unknown todo id: ${JSON.stringify(r)}. Current valid ids: ${w}. Please retry with one of the valid ids, or skip this update.`})}if(o==="deleted"){let y=t.todoStore.getAll().find(b=>b.id===r);if(!t.todoStore.remove(r)||!y)return j({ok:!1,reason:`Failed to delete ${JSON.stringify(r)}.`});await ur("todo:deleted",{id:r,item:y,source:"tool"});let g=t.todoStore.getAll();return g.length>=Jp&&g.every(b=>fr.has(b.status))&&!fr.has(y.status)?j({ok:!0,reminder:Qp}):j({ok:!0})}if(s!==void 0&&typeof s!="string")return j({ok:!1,reason:"Invalid note: when provided, must be a string."});if(a!==void 0&&typeof a!="string")return j({ok:!1,reason:'Invalid activeForm: when provided, must be a string (present-continuous, e.g. "Running tests").'});if(c!==void 0&&(typeof c!="string"||c.length===0))return j({ok:!1,reason:"Invalid subject: when provided, must be a non-empty string (brief imperative title for the plan-list row)."});if(l!==void 0&&typeof l!="string")return j({ok:!1,reason:"Invalid description: when provided, must be a string (fuller context; pass empty string to clear)."});if(d!==void 0&&(typeof d!="string"||!Zp.has(d)))return j({ok:!1,reason:`Invalid evaluator: when provided, must be one of 'build' | 'test' | 'lint'. Got ${JSON.stringify(d)}.`});if(u!=null&&!dE(u))return j({ok:!1,reason:"Invalid metadata: when provided, must be a plain object or null (to clear)."});let p=t.todoStore.getAll().find(y=>y.id===r);if(!p)return j({ok:!1,reason:`Failed to read ${JSON.stringify(r)} before patch.`});if(o==="completed"&&p.status!=="completed"){let y=await ko("todo:before-complete",{id:r,item:p});if(typeof y=="string")return j({ok:!1,reason:y});if(y===!1)return j({ok:!1,reason:"blocked-by-hook"})}t.todoStore.patch(r,{...o!==void 0?{status:o}:{},...c!==void 0?{subject:c}:{},...l!==void 0?{description:l}:{},...a!==void 0?{activeForm:a}:{},...s!==void 0?{note:s}:{},...d!==void 0?{evaluator:d}:{},...u!==void 0?{metadata:u}:{}});let m=t.todoStore.getAll().find(y=>y.id===r);if(m){let y=uE(p,m);y.length>0&&await ur("todo:updated",{id:r,before:p,after:m,changedFields:y,source:"tool"})}let h=t.todoStore.getAll();return h.length>=Jp&&h.every(w=>fr.has(w.status))&&!(t.todoStore.getAll().filter(g=>g.id!==r).every(g=>fr.has(g.status))&&fr.has(p.status))?j({ok:!0,reminder:Qp}):j({ok:!0})}i(em,"toolTodoUpdate");function pE(e){return{id:e.id,subject:e.subject,status:e.status,...e.description?{description:e.description}:{},...e.activeForm?{activeForm:e.activeForm}:{},...e.note?{note:e.note}:{}}}i(pE,"toDTO");function tm(e){return JSON.stringify(e)}i(tm,"jsonResult");async function nm(e,t){if(!t.todoStore)return tm({ok:!1,reason:"todo_list is not active in this run (no plan list infrastructure is wired). Either no managed task is active, or the runtime did not provide a todo store. You may continue working without querying the plan list."});let n=t.todoStore.getAll().map(pE);return tm({ok:!0,count:n.length,items:n})}i(nm,"toolTodoList");var mE=new Set(["build","test","lint"]);function Je(e){return JSON.stringify(e)}i(Je,"jsonResult");function hE(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}i(hE,"isPlainObject");async function rm(e,t){let{subject:n,description:r,activeForm:o,evaluator:s,metadata:a}=e;if(!t.todoStore)return Je({ok:!1,reason:"todo_create is not active in this run (no plan list was seeded). You may continue working without calling todo_create."});if(typeof n!="string"||n.length===0)return Je({ok:!1,reason:'Missing or invalid required parameter: subject (non-empty string). Provide a brief imperative title for the plan-list row, e.g. "Audit handleAuth callers".'});if(r!==void 0&&typeof r!="string")return Je({ok:!1,reason:"Invalid description: when provided, must be a string (fuller context / work instructions; multi-line OK)."});if(o!==void 0&&typeof o!="string")return Je({ok:!1,reason:'Invalid activeForm: when provided, must be a string (present-continuous form, e.g. "Running tests").'});if(s!==void 0&&(typeof s!="string"||!mE.has(s)))return Je({ok:!1,reason:`Invalid evaluator: when provided, must be one of 'build' | 'test' | 'lint'. Got ${JSON.stringify(s)}.`});if(a!==void 0&&!hE(a))return Je({ok:!1,reason:"Invalid metadata: when provided, must be a plain object."});let c={subject:n,...typeof r=="string"?{description:r}:{},...typeof o=="string"?{activeForm:o}:{},...typeof s=="string"?{evaluator:s}:{},...a!==void 0?{metadata:a}:{}},l=await ko("todo:before-create",{seed:c});if(typeof l=="string")return Je({ok:!1,reason:l});if(l===!1)return Je({ok:!1,reason:"blocked-by-hook"});let d=t.todoStore.add(c),f=t.todoStore.getAll().find(p=>p.id===d);return f&&await ur("todo:created",{id:d,item:f,source:"tool"}),Je({ok:!0,id:d})}i(rm,"toolTodoCreate");function gE(e){return{id:e.id,subject:e.subject,status:e.status,...e.description?{description:e.description}:{},...e.activeForm?{activeForm:e.activeForm}:{},...e.note?{note:e.note}:{},...e.evaluator?{evaluator:e.evaluator}:{},...e.metadata?{metadata:e.metadata}:{}}}i(gE,"toDTO");function _o(e){return JSON.stringify(e)}i(_o,"jsonResult");async function om(e,t){let{id:n}=e;if(!t.todoStore)return _o({ok:!1,reason:"todo_get is not active in this run (no plan list infrastructure is wired). Either no managed task is active, or the runtime did not provide a todo store. You may continue working without querying the plan list."});if(typeof n!="string"||n.length===0)return _o({ok:!1,reason:"Missing or invalid required parameter: id (non-empty string)."});let r=t.todoStore.getAll().find(o=>o.id===n);if(!r){let o=t.todoStore.allIds(),s=o.length===0?"no todos currently exist":o.join(", ");return _o({ok:!1,reason:`Unknown todo id: ${JSON.stringify(n)}. Current valid ids: ${s}. Call todo_list to see the full plan, or retry with one of the valid ids.`})}return _o({ok:!0,item:gE(r)})}i(om,"toolTodoGet");function Ja(e){if(typeof e!="string"||e.length===0)return"<no-artifact>";try{let t=JSON.parse(e),n=typeof t?.name=="string"?t.name:"<no-name>",r=typeof t?.version=="string"?t.version:"<no-version>";return`${n}@${r}`}catch{return"<unparseable>"}}i(Ja,"stageArtifactPreview");function im(e,t){if(!e)return to("<no-server>","<no-tool>",t);try{let{serverId:n,kind:r,name:o}=Lc(Pe(e));return to(n,`${r}:${o}`,t)}catch{return to(e,"<invalid-id>",t)}}i(im,"mcpCapabilityPreview");function L(e,t=200,n="<missing>"){if(typeof e!="string"||e.length===0)return n;if(e.length<=t)return e;let r=Math.min(48,Math.floor((t-1)/3)),o=t-r-1;return`${e.slice(0,o)}\u2026${e.slice(-r)}`}i(L,"boundedText");function Qa(e,t=8){return Array.isArray(e)?`[${e.slice(0,t).filter(r=>typeof r=="string").map(r=>L(r,120)).join(", ")}${e.length>t?", \u2026":""}]`:"[]"}i(Qa,"stringArrayPreview");function sm(e,t,n){return Array.isArray(e)?`[${e.slice(0,8).map(o=>{if(o===null||typeof o!="object")return"<invalid>";let s=o,a=L(s[t],120),c=L(s[n],120,"");return c?`${a}->${c}`:a}).join(", ")}${e.length>8?", \u2026":""}]`:"[]"}i(sm,"mappedPathPreview");function yE(e){if(e===null||typeof e!="object"||Array.isArray(e))return"[]";let t=Object.keys(e);return`[${t.slice(0,16).join(", ")}${t.length>16?", \u2026":""}]`}i(yE,"objectKeysPreview");var wE=[Cu,"Author and start a bounded deterministic JavaScript protocol over the Runtime-owned Actor tree. The call returns a run_id and Workflow actor path immediately; inspect progress with list_agents, wait for critical mailbox evidence with wait_agent, read its structured WorkflowOutcome with agent_output, and stop it with interrupt_agent.","Make the Workflow acquire and inspect the real scope before analysis, then give child Agents concrete paths, constraints, evidence, and outputSchema values. Write child prompts in the same natural language as the user's request. Declared fields live on result.structured: read your declared fields off result.structured, never off the top-level result, where they are undefined and can produce an empty report.","The run(wf, args) body may use wf.runAgent, wf.parallel, wf.pipeline, wf.synthesize, wf.workflow, and wf.artifact. Use wf.pipeline for streaming stages and wf.parallel as a barrier only when a stage needs every prior result.","Do not call this tool for an ordinary review or merely because a task is parallel, partitionable, or needs synthesis. Unless the user explicitly requested a Workflow, use adaptive spawn_agent waves instead.","Available single-phase shapes include classify-and-act, fan-out-and-synthesize, adversarial-verification, generate-and-filter, tournament, and loop-until-done. For an explicitly requested review or audit Workflow, combine fan-out-and-synthesize with adversarial-verification: declare ['fan-out-and-synthesize', 'adversarial-verification'], then have verifiers attack findings from a distinct failure-mode angle and keep only those a majority cannot refute. Chain more than one pattern when the protocol has more than one shape, match the effort to the request, and disclose every bounded or silent cap.","Workflow-local limits can only narrow the shared session scheduler and work budget. The script receives no direct filesystem, shell, network, import, or require access."].join(`
|
|
298
298
|
|
|
@@ -321,7 +321,7 @@ ${n.content}
|
|
|
321
321
|
... and ${o} more`:"";return`<diagnostics file="${e}">
|
|
322
322
|
${r.map(KE).join(`
|
|
323
323
|
`)}${s}
|
|
324
|
-
</diagnostics>`}i(fm,"report");import{existsSync as pm,readFileSync as zE,statSync as XE}from"fs";import Fe from"path";import{createRequire as mm}from"module";var GE=process.platform==="win32";function $e(e){let t=e.replace(/\\/g,"/");return GE?t.toLowerCase():t}i($e,"normalizeFsPath");var YE=process.platform==="win32",VE=YE?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];function hm(e){try{return pm(e)&&XE(e).isFile()}catch{return!1}}i(hm,"isFile");function gm(e){let t=(process.env.PATH??"").split(Fe.delimiter).filter(Boolean);for(let n of t)for(let r of VE){let o=r&&e.toLowerCase().endsWith(r.toLowerCase()),s=Fe.join(n,o?e:e+r);if(hm(s))return s}}i(gm,"whichGlobal");function ym(e){return mm(Fe.join(e,"__kodax_lsp_resolve__.js"))}i(ym,"requireFrom");function nc(e,t,n){let r;try{r=ym(t).resolve(`${e}/package.json`)}catch{return}let o;try{o=JSON.parse(zE(r,"utf8")).bin}catch{return}let s;if(typeof o=="string")s=o;else if(o&&typeof o=="object"){let c=o;s=n&&c[n]||c[e]||Object.values(c)[0]}if(!s)return;let a=Fe.join(Fe.dirname(r),s);if(hm(a))return{command:process.execPath,args:[a]}}i(nc,"resolveNodePackageBin");function wm(e,t){try{return ym(e).resolve("typescript/lib/tsserver.js")}catch{}if(t)try{return mm(t).resolve("typescript/lib/tsserver.js")}catch{return}}i(wm,"resolveTsserver");function rc(e,t,n){let r=Fe.resolve(n),o=$e(r),s=Fe.dirname(Fe.resolve(e));if(!$e(s).startsWith(o))return r;for(;;){for(let c of t)if(pm(Fe.join(s,c)))return s;if($e(s)===o)return r;let a=Fe.dirname(s);if(a===s)return r;s=a}}i(rc,"findNearestRoot");import{spawn as oc}from"child_process";function JE(e){return process.platform==="win32"&&e!==process.execPath&&!/\.exe$/i.test(e)}i(JE,"needsShell");function Eo(e,t,n){if(JE(e)){let r=[QE(e),...t].join(" ");return oc(r,{...n,shell:!0})}if(e===process.execPath){let r=Tc({args:t,env:n.env??process.env,isElectron:process.versions.electron!==void 0});return oc(e,r.args,{...n,env:r.env,shell:!1})}return oc(e,[...t],{...n,shell:!1})}i(Eo,"spawnLspProcess");function QE(e){return/[\s"]/.test(e)?`"${e.replace(/"/g,'""')}"`:e}i(QE,"quoteIfNeeded");function ic(){return process.env.KODAX_LSP_DOWNLOAD==="1"&&process.env.KODAX_LSP_NO_DOWNLOAD!=="1"}i(ic,"isAutoInstallEnabled");var ZE=5*6e4;function bm(e,t={}){return t.signal?.aborted?Promise.resolve(!1):new Promise(n=>{let r=!1,o,s,a=i(l=>{r||(r=!0,s&&clearTimeout(s),o&&t.signal?.removeEventListener("abort",o),n(l))},"done"),c=Eo(e.command,e.args,{stdio:"ignore",env:process.env,detached:process.platform!=="win32"});o=i(()=>{Be(c),a(!1)},"onAbort"),t.signal?.addEventListener("abort",o,{once:!0}),s=setTimeout(()=>{Be(c),t.debug?.(`install timed out: ${e.command} ${e.args.join(" ")}`),a(!1)},t.timeoutMs??ZE),c.on("error",l=>{t.debug?.(`install failed to start: ${l.message}`),a(!1)}),c.on("exit",l=>a(l===0))})}i(bm,"runInstallCommand");function mr(e,t=[]){let n=gm(e);return n?{command:n,args:t}:void 0}i(mr,"globalLaunch");function eS({root:e,moduleUrl:t}){let n=wm(e,t);if(!n)return;let o=nc("typescript-language-server",e,"typescript-language-server")??mr("typescript-language-server");if(o)return{command:o.command,args:[...o.args,"--stdio"],initializationOptions:{tsserver:{path:n}}}}i(eS,"discoverTypescript");var tS={id:"typescript",languageIds:["typescript","typescriptreact","javascript","javascriptreact"],rootMarkers:["tsconfig.json","jsconfig.json","package.json",".git"],discover:eS,installGuidance:"Install the TypeScript language server for in-editor diagnostics: `npm i -D typescript typescript-language-server` (project-local, recommended) or `npm i -g typescript-language-server`."};function nS({root:e}){let n=nc("pyright",e,"pyright-langserver")??mr("pyright-langserver");if(n)return{command:n.command,args:[...n.args,"--stdio"]}}i(nS,"discoverPyright");var rS={id:"pyright",languageIds:["python"],rootMarkers:["pyproject.toml","setup.py","setup.cfg","requirements.txt","Pipfile",".git"],discover:nS,installGuidance:"Install pyright for Python diagnostics: `npm i -g pyright` (or `pip install pyright`)."};function vm(){return mr("gopls")}i(vm,"discoverGopls");var oS={id:"gopls",languageIds:["go"],rootMarkers:["go.mod","go.work",".git"],discover:vm,async acquire({signal:e,onProgress:t,debug:n}){return t?.("Installing gopls via `go install`\u2026"),await bm({command:"go",args:["install","golang.org/x/tools/gopls@latest"]},{signal:e,debug:n})?vm():void 0},installGuidance:"Install gopls for Go diagnostics: `go install golang.org/x/tools/gopls@latest` (requires the Go toolchain; ensure GOBIN is on PATH)."};function iS(){return mr("rust-analyzer")}i(iS,"discoverRustAnalyzer");var sS={id:"rust-analyzer",languageIds:["rust"],rootMarkers:["Cargo.toml","Cargo.lock","rust-project.json",".git"],discover:iS,installGuidance:"Install rust-analyzer for Rust diagnostics: `rustup component add rust-analyzer` (or download a release from https://github.com/rust-lang/rust-analyzer/releases)."};function aS(){return mr("jdtls")}i(aS,"discoverJdtls");var cS={id:"jdtls",languageIds:["java"],rootMarkers:["pom.xml","build.gradle","build.gradle.kts","settings.gradle",".git"],discover:aS,installGuidance:"Install the Eclipse JDT language server (jdtls) for Java diagnostics and put its launcher on PATH; it requires a Java 21+ runtime. See https://github.com/eclipse-jdtls/eclipse.jdt.ls."},km=Object.freeze([tS,rS,oS,sS,cS]);import fe from"path";import{fileURLToPath as lS}from"url";import{SymbolKind as se}from"vscode-languageserver-protocol";function sc(e){try{return lS(e)}catch{return e}}i(sc,"uriToPath");function To(e,t){return e.length===0?t:e.map(n=>`${sc(n.uri)}:${n.range.start.line+1}:${n.range.start.character+1}`).join(`
|
|
324
|
+
</diagnostics>`}i(fm,"report");import{existsSync as pm,readFileSync as zE,statSync as XE}from"fs";import Fe from"path";import{createRequire as mm}from"module";var GE=process.platform==="win32";function $e(e){let t=e.replace(/\\/g,"/");return GE?t.toLowerCase():t}i($e,"normalizeFsPath");var YE=process.platform==="win32",VE=YE?(process.env.PATHEXT??".EXE;.CMD;.BAT;.COM").split(";").filter(Boolean):[""];function hm(e){try{return pm(e)&&XE(e).isFile()}catch{return!1}}i(hm,"isFile");function gm(e){let t=(process.env.PATH??"").split(Fe.delimiter).filter(Boolean);for(let n of t)for(let r of VE){let o=r&&e.toLowerCase().endsWith(r.toLowerCase()),s=Fe.join(n,o?e:e+r);if(hm(s))return s}}i(gm,"whichGlobal");function ym(e){return mm(Fe.join(e,"__kodax_lsp_resolve__.js"))}i(ym,"requireFrom");function nc(e,t,n){let r;try{r=ym(t).resolve(`${e}/package.json`)}catch{return}let o;try{o=JSON.parse(zE(r,"utf8")).bin}catch{return}let s;if(typeof o=="string")s=o;else if(o&&typeof o=="object"){let c=o;s=n&&c[n]||c[e]||Object.values(c)[0]}if(!s)return;let a=Fe.join(Fe.dirname(r),s);if(hm(a))return{command:process.execPath,args:[a]}}i(nc,"resolveNodePackageBin");function wm(e,t){try{return ym(e).resolve("typescript/lib/tsserver.js")}catch{}if(t)try{return mm(t).resolve("typescript/lib/tsserver.js")}catch{return}}i(wm,"resolveTsserver");function rc(e,t,n){let r=Fe.resolve(n),o=$e(r),s=Fe.dirname(Fe.resolve(e));if(!$e(s).startsWith(o))return r;for(;;){for(let c of t)if(pm(Fe.join(s,c)))return s;if($e(s)===o)return r;let a=Fe.dirname(s);if(a===s)return r;s=a}}i(rc,"findNearestRoot");import{spawn as oc}from"child_process";function JE(e){return process.platform==="win32"&&e!==process.execPath&&!/\.exe$/i.test(e)}i(JE,"needsShell");function Eo(e,t,n){if(JE(e)){let r=[QE(e),...t].join(" ");return oc(r,{...n,shell:!0,windowsHide:!0})}if(e===process.execPath){let r=Tc({args:t,env:n.env??process.env,isElectron:process.versions.electron!==void 0});return oc(e,r.args,{...n,env:r.env,shell:!1,windowsHide:!0})}return oc(e,[...t],{...n,shell:!1,windowsHide:!0})}i(Eo,"spawnLspProcess");function QE(e){return/[\s"]/.test(e)?`"${e.replace(/"/g,'""')}"`:e}i(QE,"quoteIfNeeded");function ic(){return process.env.KODAX_LSP_DOWNLOAD==="1"&&process.env.KODAX_LSP_NO_DOWNLOAD!=="1"}i(ic,"isAutoInstallEnabled");var ZE=5*6e4;function bm(e,t={}){return t.signal?.aborted?Promise.resolve(!1):new Promise(n=>{let r=!1,o,s,a=i(l=>{r||(r=!0,s&&clearTimeout(s),o&&t.signal?.removeEventListener("abort",o),n(l))},"done"),c=Eo(e.command,e.args,{stdio:"ignore",env:process.env,detached:process.platform!=="win32"});o=i(()=>{Be(c),a(!1)},"onAbort"),t.signal?.addEventListener("abort",o,{once:!0}),s=setTimeout(()=>{Be(c),t.debug?.(`install timed out: ${e.command} ${e.args.join(" ")}`),a(!1)},t.timeoutMs??ZE),c.on("error",l=>{t.debug?.(`install failed to start: ${l.message}`),a(!1)}),c.on("exit",l=>a(l===0))})}i(bm,"runInstallCommand");function mr(e,t=[]){let n=gm(e);return n?{command:n,args:t}:void 0}i(mr,"globalLaunch");function eS({root:e,moduleUrl:t}){let n=wm(e,t);if(!n)return;let o=nc("typescript-language-server",e,"typescript-language-server")??mr("typescript-language-server");if(o)return{command:o.command,args:[...o.args,"--stdio"],initializationOptions:{tsserver:{path:n}}}}i(eS,"discoverTypescript");var tS={id:"typescript",languageIds:["typescript","typescriptreact","javascript","javascriptreact"],rootMarkers:["tsconfig.json","jsconfig.json","package.json",".git"],discover:eS,installGuidance:"Install the TypeScript language server for in-editor diagnostics: `npm i -D typescript typescript-language-server` (project-local, recommended) or `npm i -g typescript-language-server`."};function nS({root:e}){let n=nc("pyright",e,"pyright-langserver")??mr("pyright-langserver");if(n)return{command:n.command,args:[...n.args,"--stdio"]}}i(nS,"discoverPyright");var rS={id:"pyright",languageIds:["python"],rootMarkers:["pyproject.toml","setup.py","setup.cfg","requirements.txt","Pipfile",".git"],discover:nS,installGuidance:"Install pyright for Python diagnostics: `npm i -g pyright` (or `pip install pyright`)."};function vm(){return mr("gopls")}i(vm,"discoverGopls");var oS={id:"gopls",languageIds:["go"],rootMarkers:["go.mod","go.work",".git"],discover:vm,async acquire({signal:e,onProgress:t,debug:n}){return t?.("Installing gopls via `go install`\u2026"),await bm({command:"go",args:["install","golang.org/x/tools/gopls@latest"]},{signal:e,debug:n})?vm():void 0},installGuidance:"Install gopls for Go diagnostics: `go install golang.org/x/tools/gopls@latest` (requires the Go toolchain; ensure GOBIN is on PATH)."};function iS(){return mr("rust-analyzer")}i(iS,"discoverRustAnalyzer");var sS={id:"rust-analyzer",languageIds:["rust"],rootMarkers:["Cargo.toml","Cargo.lock","rust-project.json",".git"],discover:iS,installGuidance:"Install rust-analyzer for Rust diagnostics: `rustup component add rust-analyzer` (or download a release from https://github.com/rust-lang/rust-analyzer/releases)."};function aS(){return mr("jdtls")}i(aS,"discoverJdtls");var cS={id:"jdtls",languageIds:["java"],rootMarkers:["pom.xml","build.gradle","build.gradle.kts","settings.gradle",".git"],discover:aS,installGuidance:"Install the Eclipse JDT language server (jdtls) for Java diagnostics and put its launcher on PATH; it requires a Java 21+ runtime. See https://github.com/eclipse-jdtls/eclipse.jdt.ls."},km=Object.freeze([tS,rS,oS,sS,cS]);import fe from"path";import{fileURLToPath as lS}from"url";import{SymbolKind as se}from"vscode-languageserver-protocol";function sc(e){try{return lS(e)}catch{return e}}i(sc,"uriToPath");function To(e,t){return e.length===0?t:e.map(n=>`${sc(n.uri)}:${n.range.start.line+1}:${n.range.start.character+1}`).join(`
|
|
325
325
|
`)}i(To,"formatLocations");function _m(e){return typeof e=="string"?e:e.value}i(_m,"markedToString");function xm(e){if(!e)return"No hover information.";let t=e.contents;return typeof t=="string"?t.trim()||"No hover information.":Array.isArray(t)?t.map(_m).join(`
|
|
326
326
|
`).trim()||"No hover information.":"kind"in t?t.value.trim()||"No hover information.":_m(t).trim()||"No hover information."}i(xm,"formatHover");var dS=Object.freeze({[se.File]:"File",[se.Module]:"Module",[se.Namespace]:"Namespace",[se.Package]:"Package",[se.Class]:"Class",[se.Method]:"Method",[se.Property]:"Property",[se.Field]:"Field",[se.Constructor]:"Constructor",[se.Enum]:"Enum",[se.Interface]:"Interface",[se.Function]:"Function",[se.Variable]:"Variable",[se.Constant]:"Constant",[se.Struct]:"Struct",[se.EnumMember]:"EnumMember",[se.TypeParameter]:"TypeParameter"});function So(e){return dS[e]??"Symbol"}i(So,"kindName");function ac(e){return`${e.start.line+1}:${e.start.character+1}`}i(ac,"rangeStart");function uS(e){let t=sc(e.uri);return"range"in e?`${t}:${ac(e.range)}`:t}i(uS,"locationText");function Em(e,t){if(e.length===0)return t;let n=[],r=i((o,s)=>{for(let a of o){let c=" ".repeat(s);"location"in a?n.push(`${c}${So(a.kind)} ${a.name} (${a.location.range.start.line+1})`):(n.push(`${c}${So(a.kind)} ${a.name} (${a.range.start.line+1})`),a.children&&a.children.length>0&&r(a.children,s+1))}},"walk");return r(e,0),n.join(`
|
|
327
327
|
`)}i(Em,"formatSymbols");function Sm(e,t){return e.length===0?t:e.map(n=>{let r=n.containerName?` in ${n.containerName}`:"";return`${So(n.kind)} ${n.name}${r} ${uS(n.location)}`}).join(`
|
|
@@ -334,7 +334,7 @@ LSP errors detected in this file, please fix:
|
|
|
334
334
|
${u}`:""}async getDefinition(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=await o.client.definition(fe.resolve(t),n).catch(()=>[]);return To(s,"No definition found at that position.")}async getHover(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=await o.client.hover(fe.resolve(t),n).catch(()=>null);return xm(s)}async getReferences(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=await o.client.references(fe.resolve(t),n).catch(()=>[]);return To(s,"No references found at that position.")}async getDocumentSymbols(t,n={}){let r=await this.navClient(t,n);if(r.kind!=="client")return r.message;let o=await r.client.documentSymbols(fe.resolve(t)).catch(()=>[]);return Em(o,"No symbols found in this file.")}async getWorkspaceSymbols(t,n={}){let r=await this.workspaceClients(n);if(r.length===0)return"No language server is available for workspace symbol search.";let o=await Promise.all(r.map(s=>s.workspaceSymbols(t).catch(()=>[])));return Sm(o.flat(),"No workspace symbols found for that query.")}async getImplementation(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=await o.client.implementation(fe.resolve(t),n).catch(()=>[]);return To(s,"No implementation found at that position.")}async getPrepareCallHierarchy(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=await o.client.prepareCallHierarchy(fe.resolve(t),n).catch(()=>[]);return Am(s,"No call hierarchy item found at that position.")}async getIncomingCalls(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=fe.resolve(t),a=await o.client.prepareCallHierarchy(s,n).catch(()=>[]);if(a.length===0)return"No call hierarchy item found at that position.";let c=await Promise.all(a.map(l=>o.client.incomingCalls(l).catch(()=>[])));return Cm(c.flat(),"No incoming calls found for that symbol.")}async getOutgoingCalls(t,n,r={}){let o=await this.navClient(t,r);if(o.kind!=="client")return o.message;let s=fe.resolve(t),a=await o.client.prepareCallHierarchy(s,n).catch(()=>[]);if(a.length===0)return"No call hierarchy item found at that position.";let c=await Promise.all(a.map(l=>o.client.outgoingCalls(l).catch(()=>[])));return Rm(c.flat(),"No outgoing calls found for that symbol.")}async navClient(t,n){let r=pr(t);if(!r)return{kind:"message",message:`No language server is configured for ${fe.basename(t)}.`};let o=this.servers.filter(c=>c.languageIds.includes(r));if(o.length===0)return{kind:"message",message:`No language server is configured for ${fe.basename(t)}.`};let s=fe.resolve(t),a=n.gitRoot??fe.dirname(s);for(let c of o){let l=rc(s,c.rootMarkers,a),d=await this.getClient(c,l,n);if(d)return await d.notifyOpenOrChange(s).catch(()=>{}),{kind:"client",client:d}}return{kind:"message",message:o.map(c=>c.installGuidance).join(`
|
|
335
335
|
`)}}async workspaceClients(t){let n=fe.resolve(t.gitRoot??process.cwd()),r=[];for(let o of this.servers){let s=await this.getClient(o,n,t);s&&r.push(s)}return r}async shutdownAll(){this.shuttingDown=!0;try{await Promise.all([...this.spawning.values()].map(n=>n.catch(()=>{})));let t=[...this.clients.values()];this.clients.clear(),this.broken.clear(),await Promise.all(t.map(n=>n.shutdown().catch(()=>{})))}finally{this.shuttingDown=!1}}killAllSync(){for(let t of this.clients.values())t.killSync();this.clients.clear()}resetBroken(t){t?this.broken.delete(t):this.broken.clear()}async getClient(t,n,r){let o=`${$e(n)}|${t.id}`,s=this.clients.get(o);if(s)return s;if(this.broken.has(o))return;let a=this.spawning.get(o);if(a)return a;let c=this.spawnClient(t,n,o,r);this.spawning.set(o,c);try{return await c}finally{this.spawning.delete(o)}}async spawnClient(t,n,r,o){try{let s=t.discover({root:n,moduleUrl:this.config.moduleUrl});if(s||(s=await this.acquireIfEnabled(t,n,o)),!s){this.broken.add(r),this.config.debug?.(`${t.id} not installed at ${n} \u2014 ${t.installGuidance}`);return}o.onProgress?.(`Starting ${t.id} language server\u2026`);let c=await(this.config.createClient??$m)({serverId:t.id,root:n,launch:s,debug:this.config.debug});if(this.shuttingDown){await c.shutdown().catch(()=>{});return}return this.clients.set(r,c),c}catch(s){this.broken.add(r),this.config.debug?.(`${t.id} failed to start at ${n}: ${s.message}`);return}}async acquireIfEnabled(t,n,r){if(!(!t.acquire||!ic()))try{return await t.acquire({root:n,signal:r.signal,onProgress:r.onProgress,debug:this.config.debug})}catch(o){this.config.debug?.(`${t.id} auto-install failed: ${o.message}`);return}}},hr,Pm=!1;function Mm(){let e=yr()?.lsp;if(!(e===!1||e===void 0&&process.env.KODAX_LSP==="0"))return hr||(hr=new dc({moduleUrl:import.meta.url,debug:process.env.KODAX_DEBUG_LSP?t=>D({source:"coding:lsp",level:"debug",message:t}):void 0}),Pm||(Pm=!0,process.once("exit",()=>hr?.killAllSync()))),hr}i(Mm,"getDefaultLspService");async function WU(){await hr?.shutdownAll()}i(WU,"shutdownDefaultLspService");import{createHash as $T}from"node:crypto";import{execFileSync as QS}from"child_process";import{randomUUID as ZS}from"node:crypto";import eT from"fs/promises";import Wm from"os";function Lm(e,t,n){let r=e?.provider?.trim()||process.env[t]?.trim()||void 0,o=e?.model?.trim()||process.env[n]?.trim()||void 0;if(!(!r&&!o))return{provider:r,model:o}}i(Lm,"resolveTier");function uc(e,t){let n=yr()?.modelTiers;if(e==="fast")return t?Lm(n?.fast,"KODAX_FAST_PROVIDER","KODAX_FAST_MODEL"):void 0;if(e==="deep")return Lm(n?.deep,"KODAX_DEEP_PROVIDER","KODAX_DEEP_MODEL")}i(uc,"resolveModelHintTier");function WS(){let e=process.env.KODAX_FALLBACK_PROVIDERS?.trim();return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}i(WS,"resolveFallbackChain");function Nm(e){return e instanceof $o||e instanceof Po||e instanceof Io}i(Nm,"isFallbackEligibleError");function HS(e){return e instanceof $o?"rate-limit exhausted":e instanceof Po?"network error":e instanceof Io?"provider error":e instanceof Error?e.message:String(e)}i(HS,"errorReason");async function fc(e,t,n,r){let o=e.provider??"anthropic";try{return await n(e,t)}catch(s){if(e.abortSignal?.aborted||!Nm(s))throw s;let a=WS().filter(l=>l!==o),c=s;for(let l of a){r?.onFallback?.({fromProvider:o,toProvider:l,reason:HS(c)});try{return await n({...e,provider:l,model:void 0},t)}catch(d){if(e.abortSignal?.aborted||!Nm(d))throw d;c=d}}throw c}}i(fc,"invokeChildWithFallback");function KS(e){if(!e.trim())return[];let t=[],n=/(^|\s)\/skill:([\w](?:[\w.\-:]*[\w])?)/g,r;for(;(r=n.exec(e))!==null;){let o=r[1]??"",s=r[2]??"";if(!s)continue;let a=r.index+o.length,c=`/skill:${s}`;t.push({name:s,raw:c,start:a,end:a+c.length})}return t}i(KS,"parseInlineSkillReferences");function GS(e){if(!e.trim())return[];let t=[],n=/(^|\s)\/(?!skill:)([\w](?:[\w.\-:]*[\w])?)/g,r;for(;(r=n.exec(e))!==null;){let o=r[1]??"",s=r[2]??"";if(!s)continue;let a=r.index+o.length,c=`/${s}`;t.push({name:s,raw:c,start:a,end:a+c.length})}return t}i(GS,"parseBareInlineSlashReferences");function Dm(e){return Array.from(new Set(KS(e).map(t=>t.name)))}i(Dm,"uniqueInlineSkillNames");function jm(e){return Array.from(new Set(GS(e).map(t=>t.name)))}i(jm,"uniqueBareInlineSlashNames");function Ue(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}i(Ue,"isRecord");function zS(e){return e instanceof Error?e.message:String(e)}i(zS,"errorMessage");function Co(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}i(Co,"safeStringify");function Fm(e,t){switch(t){case"string":return typeof e=="string";case"number":return typeof e=="number";case"integer":return typeof e=="number"&&Number.isInteger(e);case"boolean":return typeof e=="boolean";case"object":return Ue(e);case"array":return Array.isArray(e);case"null":return e===null;default:return!0}}i(Fm,"matchesType");function XS(e,t){return e.some(n=>n===t?!0:typeof n!="object"||typeof t!="object"?!1:Co(n)===Co(t))}i(XS,"enumMatches");function Ao(e,t){return e?`${e}.${t}`:t}i(Ao,"joinPath");function pc(e,t,n=""){if(!Ue(t))return[];let r=[],o=n||"(root)",s=t.type;if(typeof s=="string"&&!Fm(e,s))return[`${o}: expected type ${s}`];if(Array.isArray(s)&&!s.some(a=>typeof a=="string"&&Fm(e,a)))return[`${o}: expected one of types ${s.join("|")}`];if(Array.isArray(t.enum)&&!XS(t.enum,e)&&r.push(`${o}: value is not one of the allowed enum values`),Ue(e)){let a=Ue(t.properties)?t.properties:void 0;if(Array.isArray(t.required))for(let c of t.required)typeof c=="string"&&!(c in e)&&r.push(`${Ao(n,c)}: required field is missing`);if(a){for(let[c,l]of Object.entries(e))c in a&&r.push(...pc(l,a[c],Ao(n,c)));if(t.additionalProperties===!1)for(let c of Object.keys(e))c in a||r.push(`${Ao(n,c)}: unexpected property (additionalProperties is false)`)}}return Array.isArray(e)&&Ue(t.items)&&e.forEach((a,c)=>{r.push(...pc(a,t.items,`${o}[${c}]`))}),r}i(pc,"validateAgainstSchema");var YS=["$ref","$defs","definitions","oneOf","allOf","anyOf","not","if","then","else","const","patternProperties","propertyNames","dependencies","dependentSchemas","dependentRequired","contains","unevaluatedProperties","unevaluatedItems","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","minLength","maxLength","pattern","minItems","maxItems","uniqueItems","minProperties","maxProperties"];function mc(e,t,n){if(Ue(e)){for(let r of YS)r in e&&!n.has(r)&&n.set(r,t||"(root)");if(Ue(e.properties))for(let[r,o]of Object.entries(e.properties))mc(o,Ao(t,r),n);Ue(e.items)&&mc(e.items,`${t||"(root)"}[]`,n),Ue(e.additionalProperties)&&!n.has("additionalProperties (schema form)")&&n.set("additionalProperties (schema form)",t||"(root)")}}i(mc,"collectUnsupportedKeywords");function eq(e){if(!Ue(e))return;let t=new Map;if(mc(e,"",t),t.size===0)return;let n=[...t.entries()].map(([r,o])=>`\`${r}\` (at ${o})`).join(", ");throw new Error(`outputSchema uses unsupported JSON-Schema keyword(s): ${n}. The workflow validator supports only type, enum, required, properties, items, and additionalProperties: false (nested object arrays included). Inline the referenced shapes, drop value-constraint keywords, and use that subset.`)}i(eq,"assertSupportedOutputSchema");function VS(e){let t=e.indexOf("{"),n=e.indexOf("[");return t<0?n:n<0?t:Math.min(t,n)}i(VS,"firstStructureStart");function Um(e){let t=VS(e);if(t<0)return;let n=e[t],r=n==="{"?"}":"]",o=0,s=!1,a=!1;for(let c=t;c<e.length;c+=1){let l=e[c];if(s){a?a=!1:l==="\\"?a=!0:l==='"'&&(s=!1);continue}if(l==='"'){s=!0;continue}if(l===n)o+=1;else if(l===r&&(o-=1,o===0))return e.slice(t,c+1)}}i(Um,"balancedStructure");function JS(e){if(typeof e!="string"||e.trim().length===0)return;let t=/```(?:json)?\s*([\s\S]*?)```/gi,n,r;for(;(n=t.exec(e))!==null;){let o=n[1]?.trim();o&&(r=o)}return r?Um(r)??r:Um(e)}i(JS,"extractJsonCandidate");function hc(e,t){let n=JS(e);if(n===void 0)return{ok:!1,errors:["no JSON value was found in the output"]};let r;try{r=JSON.parse(n)}catch(s){return{ok:!1,errors:[`output was not valid JSON: ${zS(s)}`]}}let o=pc(r,t);return{ok:o.length===0,value:r,errors:o}}i(hc,"evaluateStructuredOutput");function qm(e){return["## Required Output Format","After your analysis, end your response with a single fenced ```json code block containing ONLY a JSON value that matches the JSON Schema below. Put nothing after the closing fence.","Schema:","```json",Co(e),"```"].join(`
|
|
336
336
|
`)}i(qm,"buildStructuredOutputInstruction");function Bm(e,t){return["Your previous response did not produce a valid result object for the workflow.","Problems:",...e.map(n=>`- ${n}`),"Re-emit ONLY a single fenced ```json code block containing a JSON value that matches this schema. No prose, nothing after the closing fence.","Schema:","```json",Co(t),"```"].join(`
|
|
337
|
-
`)}i(Bm,"buildStructuredOutputRepairPrompt");var gc,Ro;async function Xm(){if(gc)return gc;if(!Ro){let e="./agent.js";Ro=import("./agent-
|
|
337
|
+
`)}i(Bm,"buildStructuredOutputRepairPrompt");var gc,Ro;async function Xm(){if(gc)return gc;if(!Ro){let e="./agent.js";Ro=import("./agent-7X5CFET2.js").then(t=>{let n=t.runKodaX;if(typeof n!="function")throw new Error("[child-executor] Agent module loaded but `runKodaX` export is missing or not a function. This indicates an API break in packages/coding/src/agent.ts. Check that `export { runKodaX }` is still present.");return gc=n,n}).catch(t=>{if(Ro=void 0,t instanceof Error&&t.message.startsWith("[child-executor]"))throw t;let n=t instanceof Error?t.message:String(t);throw new Error(`[child-executor] Failed to lazy-load agent module (\`${e}\`) for a nested Agent turn. This usually means the @kodax-ai/coding build is broken or out of date. Underlying cause: ${n}`)})}return Ro}i(Xm,"getRunKodaX");var tT=["You are summarizing your own just-completed child-agent report for a parent workflow.","Do not use tools. Do not continue investigation. Produce only the digest."].join(`
|
|
338
338
|
`),nT=["Create a short user-facing digest of your previous report for the parent workflow.","Return only 2-4 bullet lines.","Each bullet must be concrete: a finding, decision, risk, evidence pointer, unresolved question, or next action.","Use the same natural language as the user request or your report.","Do not include a title, table, generic preamble, or workflow handoff markers."].join(`
|
|
339
339
|
`),Ym=4,Vm=1e4,rT=45e3,oT=40;function Jm(e,t){return e.historyStorage?{id:`worker-${ZS()}`,scope:"managed-task-worker",storage:e.historyStorage,...t&&t.length>0?{initialMessages:[...t]}:{}}:t&&t.length>0?{initialMessages:[...t]}:void 0}i(Jm,"buildChildRunSession");function Oo(e){let t={};return e.parentOptions.repoIntelligenceMode!==void 0&&(t.repoIntelligenceMode=e.parentOptions.repoIntelligenceMode),e.parentOptions.repoIntelligenceTrace!==void 0&&(t.repoIntelligenceTrace=e.parentOptions.repoIntelligenceTrace),t}i(Oo,"inheritRepoIntelligenceContext");async function Qm(e,t,n){if(e.length===0)return zm;let r=e.filter(f=>f.readOnly),o=e.filter(f=>!f.readOnly),s=IT(o,n.parentRole,n.parentHarness),a=[...r,...s];if(a.length===0)return zm;let c=[],l=[],d=n.onProgress??(()=>{});d(`Starting ${a.length} child tasks in parallel`);let u=await Oc({bundles:a,runOne:i(f=>f.readOnly?vT(f,t,n):_T(f,t,n),"runOne"),maxParallel:n.maxParallel,abortSignal:n.abortSignal,onProgress:i((f,p)=>{f.kind==="start"?d(`[${p.completedCount}/${p.totalCount}] Running: ${f.bundle.id}`):f.kind==="item-done"&&d(`[${p.completedCount}/${p.totalCount}] Done: ${f.bundle.id} \u2192 ${f.result.status}`)},"onProgress")});for(let f of u.results)f.status==="fulfilled"?c.push(f.value):c.push(Vt(f.bundle,`[Crash] ${f.reason.message}`,"failed"));for(let f of u.cancelled)l.push(f.id);return OT(a,c,l)}i(Qm,"executeChildAgents");function Zm(e,t){if(!t)return e;let n=new Set(t.tools),r=n.has("*"),o=new Set(e);for(let s of Gt()){let a=!r&&!n.has(s.name),c=!t.network&&(s.sideEffect==="reads-network"||s.sideEffect==="mutates-network"),l=!t.canAskUser&&s.name==="ask_user_question";(a||c||l)&&o.add(s.name)}return[...o]}i(Zm,"restrictToolsForActor");function iT(e){let t=JSON.parse(e);if(typeof t!="object"||t===null||!("path"in t))throw new Error("worktree_create returned an invalid payload");let n=t.path;if(typeof n!="string"||n.length===0)throw new Error("worktree_create returned an invalid path");return n}i(iT,"readWorktreePath");async function eh(e,t){if(e.isolation!=="worktree")return{ctx:t};let n=await Qn({description:`workflow-${e.id}`,...t.workflowWorktreeBaseDir?{base_dir:t.workflowWorktreeBaseDir}:{}},t),r=iT(n);return{ctx:{...t,gitRoot:r,executionCwd:r},worktreePath:r}}i(eh,"prepareChildIsolationScope");function th(e,t){return t.worktreePath?[`[Workflow worktree: ${t.worktreePath}]`,e].join(`
|
|
340
340
|
`):e}i(th,"annotateWorktreeSummary");async function Hm(e,t){if(e.worktreePath)try{await Zn({action:"remove",worktree_path:e.worktreePath,discard_changes:!1},t);return}catch(n){return`[Workflow worktree cleanup failed: ${n instanceof Error?n.message:String(n)}]`}}i(Hm,"cleanupChildIsolationScope");function sT(e,t){return t?{...e,summary:`${e.summary}
|
|
@@ -348,7 +348,7 @@ ${t}`}:e}i(sT,"appendCleanupWarning");async function nh(e,t,n){let r;try{r=await
|
|
|
348
348
|
`),h=B(m);if(h>r)throw new Dn(h,r);return m}i(fh,"buildChildBriefing");var ET=["file:","diff:","finding:","task_id:"];function kq(e,t,n){for(let r of t??[]){if(!ET.some(o=>r.startsWith(o)))throw new Error(`wf.runAgent("${e}") evidenceRefs entry "${r}" is not a valid evidence reference. Use one of: file:<path>, diff:<path>, finding:<text>, task_id:<id>. To pass another agent's output, use "task_id:" + that agent's result.taskId \u2014 not its name.`);if(r.startsWith("task_id:")){let o=r.slice(8).trim();if(o.length===0)throw new Error(`wf.runAgent("${e}") evidenceRefs contains an empty "task_id:" reference.`);if(n!==void 0&&!n.has(o))throw new Error(`wf.runAgent("${e}") evidenceRefs references unknown workflow task id "${o}". Pass the taskId from a prior result/handle (result.taskId from wf.runAgent, or handle.taskId from wf.spawnAgent) of an agent spawned earlier in this run \u2014 not an agent name or a guessed id.`)}}}i(kq,"assertValidWorkflowEvidenceRefs");async function ST(e,t){if(e.startsWith("file:")){let n=e.slice(5);try{let r=await eT.readFile(n,"utf-8");return`### ${n}
|
|
349
349
|
\`\`\`
|
|
350
350
|
${r}
|
|
351
|
-
\`\`\``}catch{return`- ${e} (could not read file)`}}if(e.startsWith("diff:")){let n=e.slice(5);try{let r=QS("git",["diff","HEAD","--",n],{cwd:t.gitRoot??void 0,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1e4});return r.length>0?`### diff: ${n}
|
|
351
|
+
\`\`\``}catch{return`- ${e} (could not read file)`}}if(e.startsWith("diff:")){let n=e.slice(5);try{let r=QS("git",["diff","HEAD","--",n],{cwd:t.gitRoot??void 0,encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1e4,windowsHide:!0});return r.length>0?`### diff: ${n}
|
|
352
352
|
\`\`\`diff
|
|
353
353
|
${r}
|
|
354
354
|
\`\`\``:`- ${e} (no changes)`}catch{return`- ${e} (could not get diff)`}}if(e.startsWith("finding:"))return`- **Known fact**: ${e.slice(8)}`;if(e.startsWith("agent:")){let n=e.slice(6).trim();if(!n||!t.actorControl)return"- [evidence_refs error] agent: requires a visible canonical actor path.";let r;try{r=t.actorControl.output(n)}catch{return`- agent:${n} (not visible or not controlled by this Agent)`}if(r.state==="running"||r.state==="accepted")return`- agent:${n} (turn still running; wait for its terminal event before forwarding output)`;let o="```",s=r.output??r.error??"(no final text recorded)";return s.includes(o)&&(s=s.replace(/```/g,"`\u200B`\u200B`")),`### agent: ${n} (${r.state})
|
|
@@ -366,4 +366,4 @@ ${ge(o)}
|
|
|
366
366
|
${ge(e.content)}
|
|
367
367
|
</agent-completed>`}return`<agent-message id="${ge(e.messageId)}" from="${ge(e.senderPath)}" classification="${e.classification}">
|
|
368
368
|
${ge(e.content)}
|
|
369
|
-
</agent-message>`}i(kc,"renderMailboxMessage");function BT(e,t){if(!(!t||e.actor.capabilities.providers.includes("*"))&&!e.actor.capabilities.providers.includes(t))throw new Error(`Actor ${e.actor.path} is not authorized to use provider ${t}.`)}i(BT,"assertProviderAuthority");function ge(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}i(ge,"escapeXml");function WT(e){return{async admit(t){return e.spentBudget+t.units>e.totalBudget?{admitted:!1,fact:{code:"agent_budget_exhausted",retryable:!1,reason:`shared root work budget exhausted (${e.spentBudget}/${e.totalBudget})`}}:(e.spentBudget+=t.units,{admitted:!0})},async refund(){e.spentBudget=Math.max(0,e.spentBudget-1)},snapshot:i(()=>({...e}),"snapshot")}}i(WT,"managedWorkBudgetPort");function HT(e,t){let n=Te(e.specialistName);if(n)return n;let r=Te(e.agentId);if(!(!r||t.actor.kind==="native"))throw new Error(`Agent selector ${r} was not resolved before execution.`)}i(HT,"specialistName");function KT(e){return e==="fast"||e==="balanced"||e==="deep"?e:void 0}i(KT,"modelHint");function GT(e){let t=Te(e);if(!t)return;let n=Jt(t);return n==="auto"?void 0:n}i(GT,"effort");function Te(e){return typeof e=="string"&&e.length>0?e:void 0}i(Te,"metadataString");function bh(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}i(bh,"metadataStringArray");import _h from"node:path";var zT=80;function XT(e){let t=e.trim().replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^_+|_+$/g,"").slice(0,zT);return!t||t==="."||t===".."?"session":t}i(XT,"sanitizeScratchSessionId");function xh(e){let t=e.session?.id?.trim();if(!t)return;let n=e.context?.gitRoot?.trim(),r=n?_h.resolve(n):de(e.context);return _h.resolve(r,".agent","tmp","sessions",XT(t))}i(xh,"getSessionScratchDir");var YT="emit_managed_protocol",jq="kodax-task-contract",VT="kodax-task-verdict",Fq="kodax-task-scout",Uq="kodax-task-handoff";function JT(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}i(JT,"asRecord");function Eh(e){return e.trim().toLowerCase()===YT}i(Eh,"isManagedProtocolToolName");function Sh(e,t){if(!(!e&&!t))return{verdict:t?.verdict?{...e?.verdict??{},...t.verdict}:e?.verdict}}i(Sh,"mergeManagedProtocolPayload");function QT(e){let t=e.trim().toLowerCase();if(!t)return;let r=t.replace(/[`"'()[\]{}<>]+/g,"").replace(/[.:;!?]+$/g,"").replace(/[_\s-]+/g," ").trim().split(/\s+/,1)[0]??"";if(r){if(/^accept(?:ed|s|ing)?$/.test(r)||r==="approve"||r==="approved")return"accept";if(/^revis(?:e|ed|es|ing)?$/.test(r))return"revise";if(/^block(?:ed|ing)?$/.test(r))return"blocked"}}i(QT,"normalizeManagedVerdictStatus");function ZT(e){let t=e.trim();if(!t)return;let n=t.replace(/[`"'()[\]{}<>]+/g,"").replace(/[.:;!?]+$/g,"").replace(/[\s-]+/g,"_").trim().toUpperCase();if(n==="H1_EXECUTE_EVAL"||n==="H1")return"H1_EXECUTE_EVAL";if(n==="H2_PLAN_EXECUTE_EVAL"||n==="H2")return"H2_PLAN_EXECUTE_EVAL"}i(ZT,"normalizeManagedNextHarness");function eA(e){return Array.isArray(e)?e.map(t=>String(t).trim()).filter(Boolean):typeof e=="string"?e.split(/\r?\n/).map(t=>t.replace(/^-+\s*/,"").trim()).filter(Boolean):[]}i(eA,"normalizeStringListValue");function qq(e,t,n=""){let r=JT(t);if(!r||e!=="evaluator")return;let o=typeof r.status=="string"?QT(r.status):void 0;if(o)return{verdict:{source:"evaluator",status:o,reason:typeof r.reason=="string"&&r.reason.trim()||void 0,followups:eA(r.followup??r.followups),userFacingText:n,userAnswer:typeof r.user_answer=="string"?r.user_answer.trim()||void 0:typeof r.userAnswer=="string"&&r.userAnswer.trim()||void 0,nextHarness:typeof(r.next_harness??r.nextHarness)=="string"?ZT(String(r.next_harness??r.nextHarness)):void 0,budgetRequest:typeof(r.budget_request??r.budgetRequest)=="string"&&String(r.budget_request??r.budgetRequest).trim()||void 0}}}i(qq,"coerceManagedProtocolToolPayload");function Bq(e){if(e==="evaluator")return VT}i(Bq,"getManagedBlockNameForRole");function Wq(e,t){return e&&t==="evaluator"?!!e.verdict:!1}i(Wq,"hasManagedProtocolForRole");function Hq(e,t){return new RegExp(String.raw`\`\`\`${t}\s*[\s\S]*?\`\`\``,"i").test(e)}i(Hq,"textContainsManagedBlock");function Th(e,t){if(!t||t.length===0)return e;let n=new Set(t);return e.filter(r=>!n.has(r))}i(Th,"filterExcludedTools");function Ah(e,t){return t?e.filter(n=>{let r=_e(n);return r?t({name:r.name,sideEffect:r.sideEffect,planModeAllowed:r.planModeAllowed===!0}):!1}):e}i(Ah,"applyToolVisibilityPolicy");function tA(e,t,n=!1,r,o=!1){let s=Ji(t)==="off"?Fa(e):e;return n||(s=Ua(s)),s=Aa(s,r),s=La(s,r),o||(s=s.filter(a=>a!=="list_dispatchable_agents")),s}i(tA,"getRuntimeActiveToolNames");function Qq(e,t,n=!1,r=!1,o,s,a,c=!1){let l=ja();if(e.length===0)return[];let d=new Set(tA(e,t,r,o,c));return l.filter(u=>d.has(u.name)&&(n||!Eh(u.name))).map(u=>{let f=Sr(u,a);if(!bo(f.name)||s&&s.has(f.name))return f;let p=zt[f.name];return p?{...f,description:p}:f})}i(Qq,"getActiveToolDefinitions");import{join as nA}from"node:path";function rA(e,t){if(t&&/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(t)&&!t.includes(".."))return nA(e,t)}i(rA,"resolveResumeFromRunDir");function d1(e){let{options:t,runtime:n,managedProtocolPayloadRef:r,sessionId:o}=e,s=t.events??{},a=de(t.context),c=xh(t),l=Ah(Th([...mt],t.context?.excludeTools),t.context?.toolVisibilityPolicy),d=mt.every(f=>l.includes(f))?bs({sessionId:o,currentAgentId:t.context?.currentAgentId,sessionScope:t.session?.scope,storage:t.session?.storage}):void 0,u={backups:new Map,actorControl:t.context?.actorControl,actorHost:t.context?.actorHost,managedWorkBudget:t.context?.managedWorkBudget,gitRoot:t.context?.gitRoot??void 0,sessionId:o,...d!==void 0?{loadSessionHistory:d}:{},taskSurface:t.context?.taskSurface,agentProfile:t.context?.agentProfile,agentScope:t.context?.agentScope,agentExecutorPlane:t.context?.agentExecutorPlane,selfManual:t.selfManual,skillDynamicContext:t.skillDynamicContext,skillRegistry:t.context?.skillRegistry,skillScriptRunner:t.context?.skillScriptRunner,assertReadablePath:t.context?.assertReadablePath,toolVisibilityPolicy:t.context?.toolVisibilityPolicy,excludeTools:t.context?.excludeTools,lspService:t.context?.lspService??Mm(),executionCwd:a,sessionScratchDir:c,extensionRuntime:n,askUser:s.askUser,askUserMulti:s.askUserMulti,askUserInput:s.askUserInput,exitPlanMode:s.exitPlanMode,abortSignal:t.abortSignal,managedProtocolRole:t.context?.managedProtocolEmission?.enabled?t.context.managedProtocolEmission.role:void 0,emitManagedProtocol:t.context?.managedProtocolEmission?.enabled?f=>{r.current=Sh(r.current,f)}:void 0,mutationTracker:t.context?.mutationTracker,planModeBlockCheck:t.context?.planModeBlockCheck,guardrails:t.guardrails,parentAgentConfig:{provider:t.provider,model:t.modelOverride??t.model,reasoningMode:t.reasoningMode,effort:t.effort,repoIntelligenceMode:t.context?.repoIntelligenceMode,repoIntelligenceTrace:t.context?.repoIntelligenceTrace,...t.compaction!==void 0?{compaction:{...t.compaction}}:{}},parentEvents:s,onChildProgress:void 0,sendMessageTurnCounter:{count:0},goalContext:t.context?.goalRuntime?.goalContext};if(!u.actorControl&&(t.agentMode==="ama"||t.context?.actorSession)){let f=t.context?.actorSession??new gr({maxConcurrentThreadsPerSession:t.maxConcurrentThreadsPerSession,sessionId:o});u.actorHost=f,u.actorControl=f.attach(u,t)}return u.workflowHost=iA(t,o,u.actorControl,u.actorHost),u}i(d1,"buildToolExecutionContext");function oA(e,t){return{...t?{sessionId:t}:{},...e.context?.agentProfile?.surface?{surface:e.context.agentProfile.surface}:{},...e.context?.taskSurface?{taskSurface:e.context.taskSurface}:{},...e.context?.gitRoot?{projectRoot:e.context.gitRoot}:{}}}i(oA,"buildWorkflowHostMetadata");function iA(e,t,n,r){let o=e.workflowRunsBaseDir;if(process.env.KODAX_DEBUG_WORKFLOW_GATE){let a=o===void 0?"no-host: workflowRunsBaseDir undefined":e.agentMode!=="ama"?`no-host: agentMode=${String(e.agentMode)} (need ama)`:e.context?.workflowIntent!=="explicit"?"no-host: explicit Workflow intent absent":"host wired";D({source:"coding:workflow-gate",level:"debug",message:"Workflow host gate evaluated.",detail:{agentMode:e.agentMode,runsBaseDir:o,decision:a}})}if(o===void 0||e.agentMode!=="ama"||e.context?.workflowIntent!=="explicit")return;let s=i(async({manifest:a,source:c,args:l,resumeFromRunId:d,signal:u})=>{let[{startManagedWorkflow:f},{getDefaultWorkflowRunManager:p}]=await Promise.all([import("./host-KS4TJKWQ.js"),import("./run-manager-L7MKGQNX.js")]),m=[e.abortSignal,u].filter(k=>k!==void 0),h=m.length===0?void 0:m.length===1?m[0]:AbortSignal.any(m),y=n&&r?{...e,context:{...e.context,actorControl:n,actorHost:r}}:e,w=await f({source:{kind:"inline",manifest:a,source:c},args:l,options:y,runsBaseDir:o,manager:p(),...(()=>{let k=rA(o,d);return k?{resumeFromRunDir:k}:{}})(),...h?{signal:h}:{},processMetadata:{hostMetadata:oA(e,t)}});if(w.kind==="declined")return{kind:"declined",reason:w.reason};let g=w.qualityWarnings?.map(k=>`${k.code}: ${k.message}`),b=w.managed.done.then(k=>{let v=w.managed.getSnapshot?.(),E=k.kind==="completed"?k.state.events.reduce((S,F)=>{if(F.type==="agent_unverified"){let C=F.data?.name??F.data?.taskId;S.push(typeof C=="string"&&C.length>0?C:"agent")}return S},[]):[];return{kind:"started",runId:w.runId,...v?.status!==void 0?{status:v.status}:{},...v?.resultText!==void 0?{resultText:v.resultText}:{},...v?.error!==void 0?{error:v.error}:{},...E.length>0?{verificationWarnings:E}:{},...g&&g.length>0?{workflowQualityWarnings:g}:{}}});return{kind:"started",runId:w.runId,done:b,...g&&g.length>0?{workflowQualityWarnings:g}:{}}},"startInline");return{startInline:s,runInline:i(async a=>{let c=await s(a);return c.kind==="declined"?{kind:"declined",reason:c.reason}:await c.done},"runInline")}}i(iA,"buildWorkflowToolHost");export{mA as a,hA as b,gA as c,Fo as d,Uo as e,pt as f,ev as g,hs as h,de as i,X as j,dC as k,Wc as l,Zt as m,kr as n,qo as o,Bo as p,Me as q,Pn as r,Mn as s,$h as t,_r as u,xt as v,Ko as w,bu as x,Yn as y,lP as z,dP as A,mP as B,lv as C,hP as D,Xc as E,xC as F,Yc as G,Zc as H,Xo as I,Sr as J,Au as K,xP as L,Cu as M,uv as N,EP as O,DC as P,Vo as Q,Qo as R,_g as S,xg as T,Zo as U,ii as V,si as W,Al as X,Fn as Y,kl as Z,Dn as _,_l as $,xl as aa,fi as ba,pi as ca,Un as da,hi as ea,gi as fa,We as ga,ln as ha,cI as ia,pd as ja,Ti as ka,Ai as la,md as ma,Ci as na,Ri as oa,Oi as pa,Ii as qa,Pi as ra,Mi as sa,Li as ta,Ni as ua,Hn as va,ie as wa,Vw as xa,Ji as ya,r$ as za,o$ as Aa,i$ as Ba,Gn as Ca,Jr as Da,Qr as Ea,zn as Fa,ub as Ga,fb as Ha,s$ as Ia,Qi as Ja,Zi as Ka,es as La,ts as Ma,It as Na,rs as Oa,pn as Pa,os as Qa,lu as Ra,Q as Sa,is as Ta,ss as Ua,as as Va,cs as Wa,Y$ as Xa,V$ as Ya,J$ as Za,Gb as _a,eo as $a,Q$ as ab,nr as bb,Re as cb,V_ as db,J_ as eb,er as fb,cf as gb,BM as hb,bf as ib,vf as jb,zM as kb,kf as lb,QM as mb,ZM as nb,e0 as ob,t0 as pb,n0 as qb,r0 as rb,_f as sb,Tf as tb,Gs as ub,Fk as vb,zt as wb,bo as xb,MD as yb,Dp as zb,jp as Ab,Tx as Bb,Hp as Cb,Kp as Db,dr as Eb,Xx as Fb,za as Gb,Xa as Hb,ZD as Ib,Jx as Jb,Qx as Kb,ej as Lb,tr as Mb,co as Nb,gt as Ob,yt as Pb,Vs as Qb,na as Rb,or as Sb,ir as Tb,Hf as Ub,Kf as Vb,ia as Wb,Xe as Xb,l_ as Yb,ca as Zb,jt as _b,_n as $b,f_ as ac,sr as bc,m_ as cc,v_ as dc,k_ as ec,Ut as fc,ar as gc,cr as hc,C_ as ic,ga as jc,qt as kc,Bt as lc,R_ as mc,O_ as nc,I_ as oc,D_ as pc,F_ as qc,H_ as rc,go as sc,ip as tc,z_ as uc,X_ as vc,Ya as wc,Va as xc,gj as yc,yj as zc,wj as Ac,bj as Bc,vj as Cc,ur as Dc,ko as Ec,em as Fc,rm as Gc,gx as Hc,En as Ic,yx as Jc,Tn as Kc,_e as Lc,Wt as Mc,wx as Nc,Da as Oc,bx as Pc,vx as Qc,Gt as Rc,kx as Sc,_x as Tc,xx as Uc,Ex as Vc,Sx as Wc,Ye as Xc,ja as Yc,CE as Zc,Js as _c,Sp as $c,Tp as ad,ax as bd,cx as cd,ux as dd,fx as ed,px as fd,UE as gd,dm as hd,um as id,xh as jd,YT as kd,jq as ld,VT as md,Fq as nd,Uq as od,Eh as pd,Sh as qd,qq as rd,Bq as sd,Wq as td,Hq as ud,pr as vd,fm as wd,km as xd,dc as yd,Mm as zd,WU as Ad,Dm as Bd,jm as Cd,pc as Dd,eq as Ed,Qm as Fd,kq as Gd,gr as Hd,Rq as Id,Oq as Jd,Th as Kd,Ah as Ld,tA as Md,Qq as Nd,d1 as Od};
|
|
369
|
+
</agent-message>`}i(kc,"renderMailboxMessage");function BT(e,t){if(!(!t||e.actor.capabilities.providers.includes("*"))&&!e.actor.capabilities.providers.includes(t))throw new Error(`Actor ${e.actor.path} is not authorized to use provider ${t}.`)}i(BT,"assertProviderAuthority");function ge(e){return e.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}i(ge,"escapeXml");function WT(e){return{async admit(t){return e.spentBudget+t.units>e.totalBudget?{admitted:!1,fact:{code:"agent_budget_exhausted",retryable:!1,reason:`shared root work budget exhausted (${e.spentBudget}/${e.totalBudget})`}}:(e.spentBudget+=t.units,{admitted:!0})},async refund(){e.spentBudget=Math.max(0,e.spentBudget-1)},snapshot:i(()=>({...e}),"snapshot")}}i(WT,"managedWorkBudgetPort");function HT(e,t){let n=Te(e.specialistName);if(n)return n;let r=Te(e.agentId);if(!(!r||t.actor.kind==="native"))throw new Error(`Agent selector ${r} was not resolved before execution.`)}i(HT,"specialistName");function KT(e){return e==="fast"||e==="balanced"||e==="deep"?e:void 0}i(KT,"modelHint");function GT(e){let t=Te(e);if(!t)return;let n=Jt(t);return n==="auto"?void 0:n}i(GT,"effort");function Te(e){return typeof e=="string"&&e.length>0?e:void 0}i(Te,"metadataString");function bh(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"):[]}i(bh,"metadataStringArray");import _h from"node:path";var zT=80;function XT(e){let t=e.trim().replace(/[^A-Za-z0-9._-]+/g,"_").replace(/^_+|_+$/g,"").slice(0,zT);return!t||t==="."||t===".."?"session":t}i(XT,"sanitizeScratchSessionId");function xh(e){let t=e.session?.id?.trim();if(!t)return;let n=e.context?.gitRoot?.trim(),r=n?_h.resolve(n):de(e.context);return _h.resolve(r,".agent","tmp","sessions",XT(t))}i(xh,"getSessionScratchDir");var YT="emit_managed_protocol",jq="kodax-task-contract",VT="kodax-task-verdict",Fq="kodax-task-scout",Uq="kodax-task-handoff";function JT(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}i(JT,"asRecord");function Eh(e){return e.trim().toLowerCase()===YT}i(Eh,"isManagedProtocolToolName");function Sh(e,t){if(!(!e&&!t))return{verdict:t?.verdict?{...e?.verdict??{},...t.verdict}:e?.verdict}}i(Sh,"mergeManagedProtocolPayload");function QT(e){let t=e.trim().toLowerCase();if(!t)return;let r=t.replace(/[`"'()[\]{}<>]+/g,"").replace(/[.:;!?]+$/g,"").replace(/[_\s-]+/g," ").trim().split(/\s+/,1)[0]??"";if(r){if(/^accept(?:ed|s|ing)?$/.test(r)||r==="approve"||r==="approved")return"accept";if(/^revis(?:e|ed|es|ing)?$/.test(r))return"revise";if(/^block(?:ed|ing)?$/.test(r))return"blocked"}}i(QT,"normalizeManagedVerdictStatus");function ZT(e){let t=e.trim();if(!t)return;let n=t.replace(/[`"'()[\]{}<>]+/g,"").replace(/[.:;!?]+$/g,"").replace(/[\s-]+/g,"_").trim().toUpperCase();if(n==="H1_EXECUTE_EVAL"||n==="H1")return"H1_EXECUTE_EVAL";if(n==="H2_PLAN_EXECUTE_EVAL"||n==="H2")return"H2_PLAN_EXECUTE_EVAL"}i(ZT,"normalizeManagedNextHarness");function eA(e){return Array.isArray(e)?e.map(t=>String(t).trim()).filter(Boolean):typeof e=="string"?e.split(/\r?\n/).map(t=>t.replace(/^-+\s*/,"").trim()).filter(Boolean):[]}i(eA,"normalizeStringListValue");function qq(e,t,n=""){let r=JT(t);if(!r||e!=="evaluator")return;let o=typeof r.status=="string"?QT(r.status):void 0;if(o)return{verdict:{source:"evaluator",status:o,reason:typeof r.reason=="string"&&r.reason.trim()||void 0,followups:eA(r.followup??r.followups),userFacingText:n,userAnswer:typeof r.user_answer=="string"?r.user_answer.trim()||void 0:typeof r.userAnswer=="string"&&r.userAnswer.trim()||void 0,nextHarness:typeof(r.next_harness??r.nextHarness)=="string"?ZT(String(r.next_harness??r.nextHarness)):void 0,budgetRequest:typeof(r.budget_request??r.budgetRequest)=="string"&&String(r.budget_request??r.budgetRequest).trim()||void 0}}}i(qq,"coerceManagedProtocolToolPayload");function Bq(e){if(e==="evaluator")return VT}i(Bq,"getManagedBlockNameForRole");function Wq(e,t){return e&&t==="evaluator"?!!e.verdict:!1}i(Wq,"hasManagedProtocolForRole");function Hq(e,t){return new RegExp(String.raw`\`\`\`${t}\s*[\s\S]*?\`\`\``,"i").test(e)}i(Hq,"textContainsManagedBlock");function Th(e,t){if(!t||t.length===0)return e;let n=new Set(t);return e.filter(r=>!n.has(r))}i(Th,"filterExcludedTools");function Ah(e,t){return t?e.filter(n=>{let r=_e(n);return r?t({name:r.name,sideEffect:r.sideEffect,planModeAllowed:r.planModeAllowed===!0}):!1}):e}i(Ah,"applyToolVisibilityPolicy");function tA(e,t,n=!1,r,o=!1){let s=Ji(t)==="off"?Fa(e):e;return n||(s=Ua(s)),s=Aa(s,r),s=La(s,r),o||(s=s.filter(a=>a!=="list_dispatchable_agents")),s}i(tA,"getRuntimeActiveToolNames");function Qq(e,t,n=!1,r=!1,o,s,a,c=!1){let l=ja();if(e.length===0)return[];let d=new Set(tA(e,t,r,o,c));return l.filter(u=>d.has(u.name)&&(n||!Eh(u.name))).map(u=>{let f=Sr(u,a);if(!bo(f.name)||s&&s.has(f.name))return f;let p=zt[f.name];return p?{...f,description:p}:f})}i(Qq,"getActiveToolDefinitions");import{join as nA}from"node:path";function rA(e,t){if(t&&/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(t)&&!t.includes(".."))return nA(e,t)}i(rA,"resolveResumeFromRunDir");function d1(e){let{options:t,runtime:n,managedProtocolPayloadRef:r,sessionId:o}=e,s=t.events??{},a=de(t.context),c=xh(t),l=Ah(Th([...mt],t.context?.excludeTools),t.context?.toolVisibilityPolicy),d=mt.every(f=>l.includes(f))?bs({sessionId:o,currentAgentId:t.context?.currentAgentId,sessionScope:t.session?.scope,storage:t.session?.storage}):void 0,u={backups:new Map,actorControl:t.context?.actorControl,actorHost:t.context?.actorHost,managedWorkBudget:t.context?.managedWorkBudget,gitRoot:t.context?.gitRoot??void 0,sessionId:o,...d!==void 0?{loadSessionHistory:d}:{},taskSurface:t.context?.taskSurface,agentProfile:t.context?.agentProfile,agentScope:t.context?.agentScope,agentExecutorPlane:t.context?.agentExecutorPlane,selfManual:t.selfManual,skillDynamicContext:t.skillDynamicContext,skillRegistry:t.context?.skillRegistry,skillScriptRunner:t.context?.skillScriptRunner,assertReadablePath:t.context?.assertReadablePath,toolVisibilityPolicy:t.context?.toolVisibilityPolicy,excludeTools:t.context?.excludeTools,lspService:t.context?.lspService??Mm(),executionCwd:a,sessionScratchDir:c,extensionRuntime:n,askUser:s.askUser,askUserMulti:s.askUserMulti,askUserInput:s.askUserInput,exitPlanMode:s.exitPlanMode,abortSignal:t.abortSignal,managedProtocolRole:t.context?.managedProtocolEmission?.enabled?t.context.managedProtocolEmission.role:void 0,emitManagedProtocol:t.context?.managedProtocolEmission?.enabled?f=>{r.current=Sh(r.current,f)}:void 0,mutationTracker:t.context?.mutationTracker,planModeBlockCheck:t.context?.planModeBlockCheck,guardrails:t.guardrails,parentAgentConfig:{provider:t.provider,model:t.modelOverride??t.model,reasoningMode:t.reasoningMode,effort:t.effort,repoIntelligenceMode:t.context?.repoIntelligenceMode,repoIntelligenceTrace:t.context?.repoIntelligenceTrace,...t.compaction!==void 0?{compaction:{...t.compaction}}:{}},parentEvents:s,onChildProgress:void 0,sendMessageTurnCounter:{count:0},goalContext:t.context?.goalRuntime?.goalContext};if(!u.actorControl&&(t.agentMode==="ama"||t.context?.actorSession)){let f=t.context?.actorSession??new gr({maxConcurrentThreadsPerSession:t.maxConcurrentThreadsPerSession,sessionId:o});u.actorHost=f,u.actorControl=f.attach(u,t)}return u.workflowHost=iA(t,o,u.actorControl,u.actorHost),u}i(d1,"buildToolExecutionContext");function oA(e,t){return{...t?{sessionId:t}:{},...e.context?.agentProfile?.surface?{surface:e.context.agentProfile.surface}:{},...e.context?.taskSurface?{taskSurface:e.context.taskSurface}:{},...e.context?.gitRoot?{projectRoot:e.context.gitRoot}:{}}}i(oA,"buildWorkflowHostMetadata");function iA(e,t,n,r){let o=e.workflowRunsBaseDir;if(process.env.KODAX_DEBUG_WORKFLOW_GATE){let a=o===void 0?"no-host: workflowRunsBaseDir undefined":e.agentMode!=="ama"?`no-host: agentMode=${String(e.agentMode)} (need ama)`:e.context?.workflowIntent!=="explicit"?"no-host: explicit Workflow intent absent":"host wired";D({source:"coding:workflow-gate",level:"debug",message:"Workflow host gate evaluated.",detail:{agentMode:e.agentMode,runsBaseDir:o,decision:a}})}if(o===void 0||e.agentMode!=="ama"||e.context?.workflowIntent!=="explicit")return;let s=i(async({manifest:a,source:c,args:l,resumeFromRunId:d,signal:u})=>{let[{startManagedWorkflow:f},{getDefaultWorkflowRunManager:p}]=await Promise.all([import("./host-RKZ2OGFT.js"),import("./run-manager-7RM4HEH6.js")]),m=[e.abortSignal,u].filter(k=>k!==void 0),h=m.length===0?void 0:m.length===1?m[0]:AbortSignal.any(m),y=n&&r?{...e,context:{...e.context,actorControl:n,actorHost:r}}:e,w=await f({source:{kind:"inline",manifest:a,source:c},args:l,options:y,runsBaseDir:o,manager:p(),...(()=>{let k=rA(o,d);return k?{resumeFromRunDir:k}:{}})(),...h?{signal:h}:{},processMetadata:{hostMetadata:oA(e,t)}});if(w.kind==="declined")return{kind:"declined",reason:w.reason};let g=w.qualityWarnings?.map(k=>`${k.code}: ${k.message}`),b=w.managed.done.then(k=>{let v=w.managed.getSnapshot?.(),E=k.kind==="completed"?k.state.events.reduce((S,F)=>{if(F.type==="agent_unverified"){let C=F.data?.name??F.data?.taskId;S.push(typeof C=="string"&&C.length>0?C:"agent")}return S},[]):[];return{kind:"started",runId:w.runId,...v?.status!==void 0?{status:v.status}:{},...v?.resultText!==void 0?{resultText:v.resultText}:{},...v?.error!==void 0?{error:v.error}:{},...E.length>0?{verificationWarnings:E}:{},...g&&g.length>0?{workflowQualityWarnings:g}:{}}});return{kind:"started",runId:w.runId,done:b,...g&&g.length>0?{workflowQualityWarnings:g}:{}}},"startInline");return{startInline:s,runInline:i(async a=>{let c=await s(a);return c.kind==="declined"?{kind:"declined",reason:c.reason}:await c.done},"runInline")}}i(iA,"buildWorkflowToolHost");export{mA as a,hA as b,gA as c,Fo as d,Uo as e,pt as f,ev as g,hs as h,de as i,X as j,dC as k,Wc as l,Zt as m,kr as n,qo as o,Bo as p,Me as q,Pn as r,Mn as s,$h as t,_r as u,xt as v,Ko as w,bu as x,Yn as y,lP as z,dP as A,mP as B,lv as C,hP as D,Xc as E,xC as F,Yc as G,Zc as H,Xo as I,Sr as J,Au as K,xP as L,Cu as M,uv as N,EP as O,DC as P,Vo as Q,Qo as R,_g as S,xg as T,Zo as U,ii as V,si as W,Al as X,Fn as Y,kl as Z,Dn as _,_l as $,xl as aa,fi as ba,pi as ca,Un as da,hi as ea,gi as fa,We as ga,ln as ha,cI as ia,pd as ja,Ti as ka,Ai as la,md as ma,Ci as na,Ri as oa,Oi as pa,Ii as qa,Pi as ra,Mi as sa,Li as ta,Ni as ua,Hn as va,ie as wa,Vw as xa,Ji as ya,r$ as za,o$ as Aa,i$ as Ba,Gn as Ca,Jr as Da,Qr as Ea,zn as Fa,ub as Ga,fb as Ha,s$ as Ia,Qi as Ja,Zi as Ka,es as La,ts as Ma,It as Na,rs as Oa,pn as Pa,os as Qa,lu as Ra,Q as Sa,is as Ta,ss as Ua,as as Va,cs as Wa,Y$ as Xa,V$ as Ya,J$ as Za,Gb as _a,eo as $a,Q$ as ab,nr as bb,Re as cb,V_ as db,J_ as eb,er as fb,cf as gb,BM as hb,bf as ib,vf as jb,zM as kb,kf as lb,QM as mb,ZM as nb,e0 as ob,t0 as pb,n0 as qb,r0 as rb,_f as sb,Tf as tb,Gs as ub,Fk as vb,zt as wb,bo as xb,MD as yb,Dp as zb,jp as Ab,Tx as Bb,Hp as Cb,Kp as Db,dr as Eb,Xx as Fb,za as Gb,Xa as Hb,ZD as Ib,Jx as Jb,Qx as Kb,ej as Lb,tr as Mb,co as Nb,gt as Ob,yt as Pb,Vs as Qb,na as Rb,or as Sb,ir as Tb,Hf as Ub,Kf as Vb,ia as Wb,Xe as Xb,l_ as Yb,ca as Zb,jt as _b,_n as $b,f_ as ac,sr as bc,m_ as cc,v_ as dc,k_ as ec,Ut as fc,ar as gc,cr as hc,C_ as ic,ga as jc,qt as kc,Bt as lc,R_ as mc,O_ as nc,I_ as oc,D_ as pc,F_ as qc,H_ as rc,go as sc,ip as tc,z_ as uc,X_ as vc,Ya as wc,Va as xc,gj as yc,yj as zc,wj as Ac,bj as Bc,vj as Cc,ur as Dc,ko as Ec,em as Fc,rm as Gc,gx as Hc,En as Ic,yx as Jc,Tn as Kc,_e as Lc,Wt as Mc,wx as Nc,Da as Oc,bx as Pc,vx as Qc,Gt as Rc,kx as Sc,_x as Tc,xx as Uc,Ex as Vc,Sx as Wc,Ye as Xc,ja as Yc,CE as Zc,Js as _c,Sp as $c,Tp as ad,ax as bd,cx as cd,ux as dd,fx as ed,px as fd,UE as gd,dm as hd,um as id,xh as jd,YT as kd,jq as ld,VT as md,Fq as nd,Uq as od,Eh as pd,Sh as qd,qq as rd,Bq as sd,Wq as td,Hq as ud,pr as vd,fm as wd,km as xd,dc as yd,Mm as zd,WU as Ad,Dm as Bd,jm as Cd,pc as Dd,eq as Ed,Qm as Fd,kq as Gd,gr as Hd,Rq as Id,Oq as Jd,Th as Kd,Ah as Ld,tA as Md,Qq as Nd,d1 as Od};
|