@code-yeongyu/senpi 2026.9.29-2 → 2026.9.29-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/bundle/chunks/{anthropic-messages-OMTQOHSI.js → anthropic-messages-7WTVWELD.js} +1 -1
  3. package/dist/bundle/chunks/{app-server-command-ZC6A4C3L.js → app-server-command-5DSRGKFG.js} +1 -1
  4. package/dist/bundle/chunks/{azure-openai-responses-Z4FAFKPJ.js → azure-openai-responses-XVZ3FMH2.js} +1 -1
  5. package/dist/bundle/chunks/{chunk-U2SAEU63.js → chunk-27C3ZSZG.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-YJUO37UX.js → chunk-2POUJCWM.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-4LVZQRDG.js → chunk-4VWWEMCJ.js} +1 -1
  8. package/dist/bundle/chunks/{chunk-36ACNYQR.js → chunk-7RVWDN5Z.js} +1 -1
  9. package/dist/bundle/chunks/{chunk-YS72TY6S.js → chunk-CZNE6LIO.js} +1 -1
  10. package/dist/bundle/chunks/{chunk-ILELKDDB.js → chunk-DWNYCJ43.js} +1 -1
  11. package/dist/bundle/chunks/{chunk-OMLHHPMZ.js → chunk-EB3GDOU4.js} +1 -1
  12. package/dist/bundle/chunks/{chunk-2HWLCW54.js → chunk-EQBN6TVJ.js} +1 -1
  13. package/dist/bundle/chunks/{chunk-E5F5SVZF.js → chunk-FUGMDU6B.js} +1 -1
  14. package/dist/bundle/chunks/{chunk-RSPHQOSG.js → chunk-GE32OHDE.js} +7 -7
  15. package/dist/bundle/chunks/chunk-GKR74EKE.js +3 -0
  16. package/dist/bundle/chunks/{chunk-UYV2UM6E.js → chunk-ILQTW6KB.js} +1 -1
  17. package/dist/bundle/chunks/{chunk-TH4XD7AJ.js → chunk-JEWB5XTL.js} +1 -1
  18. package/dist/bundle/chunks/{chunk-FAV4DX74.js → chunk-K2SHQNAA.js} +1 -1
  19. package/dist/bundle/chunks/{chunk-NVJUCNHP.js → chunk-K7B7NFOK.js} +1 -1
  20. package/dist/bundle/chunks/{chunk-TZMNXKL2.js → chunk-KO6GO5ZY.js} +1 -1
  21. package/dist/bundle/chunks/{chunk-5CGFVKUK.js → chunk-LB2B2Q4P.js} +1 -1
  22. package/dist/bundle/chunks/{chunk-77OBRAUG.js → chunk-M4AHRI5L.js} +1 -1
  23. package/dist/bundle/chunks/{chunk-SW4U2HHU.js → chunk-OVDACFW2.js} +1 -1
  24. package/dist/bundle/chunks/{chunk-BTRONX2A.js → chunk-RUOJQL6B.js} +1 -1
  25. package/dist/bundle/chunks/{chunk-ASAQQ6VM.js → chunk-SH6VUPE4.js} +1 -1
  26. package/dist/bundle/chunks/{chunk-TFW6SS3P.js → chunk-SNDTJL2H.js} +1 -1
  27. package/dist/bundle/chunks/{chunk-Y5A6TKBN.js → chunk-T3HGPHPP.js} +1 -1
  28. package/dist/bundle/chunks/{chunk-BPZ5KIOS.js → chunk-UK5TE7WR.js} +1 -1
  29. package/dist/bundle/chunks/{chunk-NDNZU2X7.js → chunk-UNTVGMGW.js} +3 -3
  30. package/dist/bundle/chunks/{chunk-BQGFWWDC.js → chunk-VLTMFAWQ.js} +1 -1
  31. package/dist/bundle/chunks/{chunk-XDZ5RSMX.js → chunk-W4AG5TN4.js} +1 -1
  32. package/dist/bundle/chunks/chunk-WCAKUCN3.js +14 -0
  33. package/dist/bundle/chunks/{chunk-UEWSEALS.js → chunk-WRPX2M5D.js} +1 -1
  34. package/dist/bundle/chunks/{chunk-DA4W77J7.js → chunk-XBGO2JZD.js} +1 -1
  35. package/dist/bundle/chunks/chunk-XVX4M3DZ.js +2 -0
  36. package/dist/bundle/chunks/chunk-YD32NXKZ.js +8 -0
  37. package/dist/bundle/chunks/chunk-YOPVJDSU.js +2 -0
  38. package/dist/bundle/chunks/cli-main-V3T5WOV6.js +3 -0
  39. package/dist/bundle/chunks/{google-generative-ai-NFSRK6V5.js → google-generative-ai-XO6BUQVD.js} +1 -1
  40. package/dist/bundle/chunks/{google-vertex-6YEVHEPI.js → google-vertex-SGNV6ZMK.js} +1 -1
  41. package/dist/bundle/chunks/{help-fast-path-RYMO5ODA.js → help-fast-path-AYPE26W2.js} +1 -1
  42. package/dist/bundle/chunks/{host-command-BU6XSX4H.js → host-command-ZTMADQIT.js} +1 -1
  43. package/dist/bundle/chunks/{host-lifecycle-22DRSTVI.js → host-lifecycle-FTH7WAQN.js} +1 -1
  44. package/dist/bundle/chunks/{interactive-host-runtime-P3FYZWSY.js → interactive-host-runtime-XDRXCEJ3.js} +1 -1
  45. package/dist/bundle/chunks/{interactive-mode-VCIOGSIZ.js → interactive-mode-6VFVZKKW.js} +1 -1
  46. package/dist/bundle/chunks/{list-tips-XXZ5PLE3.js → list-tips-ASETMEFS.js} +1 -1
  47. package/dist/bundle/chunks/{mistral-conversations-R5PTP4P3.js → mistral-conversations-TVJBIL35.js} +1 -1
  48. package/dist/bundle/chunks/{multi-session-host-PRY7CJLK.js → multi-session-host-5VFMTPY7.js} +1 -1
  49. package/dist/bundle/chunks/{native-loader-SU5SGTSW.js → native-loader-WM7NDPEO.js} +1 -1
  50. package/dist/bundle/chunks/{openai-codex-responses-6B2ZLWTN.js → openai-codex-responses-RUT66DHS.js} +1 -1
  51. package/dist/bundle/chunks/{openai-completions-5NTZZNVJ.js → openai-completions-THHRTH7B.js} +1 -1
  52. package/dist/bundle/chunks/{openai-responses-V4JEBGEX.js → openai-responses-ITED6XXB.js} +1 -1
  53. package/dist/bundle/chunks/{package-manager-cli-RQ2NJAJ3.js → package-manager-cli-RAQRCH5L.js} +3 -3
  54. package/dist/bundle/chunks/{rg-engine-XHGOVGVG.js → rg-engine-G2YTYL2T.js} +1 -1
  55. package/dist/bundle/chunks/{rotation-stream-YQLGLRCX.js → rotation-stream-4FQW6IX5.js} +1 -1
  56. package/dist/bundle/chunks/{rpc-mode-U2EQRVC3.js → rpc-mode-W5P5QMF7.js} +1 -1
  57. package/dist/bundle/chunks/{schedule-command-DXC3ECXT.js → schedule-command-EFQUSPN4.js} +1 -1
  58. package/dist/bundle/chunks/{session-picker-KTXLU6MQ.js → session-picker-FF2J4OQA.js} +1 -1
  59. package/dist/bundle/chunks/session-worker.js +188 -188
  60. package/dist/bundle/chunks/{state-store-5A2TZ4SG.js → state-store-IIQL55GC.js} +1 -1
  61. package/dist/bundle/cli.js +2 -1
  62. package/dist/bundle/index.js +1 -1
  63. package/dist/bundle/rpc-entry.js +1 -1
  64. package/dist/bundle/runtime-manifest.json +1 -0
  65. package/dist/cli.js +24 -4
  66. package/dist/cli.js.map +1 -1
  67. package/dist/config.d.ts +5 -0
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/config.js +16 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/main.d.ts.map +1 -1
  72. package/dist/main.js +2 -2
  73. package/dist/main.js.map +1 -1
  74. package/dist/package-manager-cli.js +3 -3
  75. package/dist/package-manager-cli.js.map +1 -1
  76. package/dist/runtime-snapshot/enter.d.ts +17 -0
  77. package/dist/runtime-snapshot/enter.d.ts.map +1 -0
  78. package/dist/runtime-snapshot/enter.js +72 -0
  79. package/dist/runtime-snapshot/enter.js.map +1 -0
  80. package/dist/runtime-snapshot/layout.d.ts +15 -0
  81. package/dist/runtime-snapshot/layout.d.ts.map +1 -0
  82. package/dist/runtime-snapshot/layout.js +126 -0
  83. package/dist/runtime-snapshot/layout.js.map +1 -0
  84. package/dist/runtime-snapshot/marker.d.ts +13 -0
  85. package/dist/runtime-snapshot/marker.d.ts.map +1 -0
  86. package/dist/runtime-snapshot/marker.js +40 -0
  87. package/dist/runtime-snapshot/marker.js.map +1 -0
  88. package/dist/runtime-snapshot/registry.d.ts +14 -0
  89. package/dist/runtime-snapshot/registry.d.ts.map +1 -0
  90. package/dist/runtime-snapshot/registry.js +124 -0
  91. package/dist/runtime-snapshot/registry.js.map +1 -0
  92. package/dist/senpi +24 -4
  93. package/node_modules/@code-yeongyu/senpi-codemode/CHANGELOG.md +12 -0
  94. package/node_modules/@code-yeongyu/senpi-codemode/package.json +4 -4
  95. package/node_modules/@earendil-works/pi-agent-core/package.json +3 -3
  96. package/node_modules/@earendil-works/pi-ai/dist/api/lazy.d.ts.map +1 -1
  97. package/node_modules/@earendil-works/pi-ai/dist/api/lazy.js +2 -1
  98. package/node_modules/@earendil-works/pi-ai/dist/api/lazy.js.map +1 -1
  99. package/node_modules/@earendil-works/pi-ai/dist/providers/data/.manifest.json +1 -1
  100. package/node_modules/@earendil-works/pi-ai/dist/providers/data/openrouter.json +1 -1
  101. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.d.ts +7 -0
  102. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.d.ts.map +1 -1
  103. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.js +21 -0
  104. package/node_modules/@earendil-works/pi-ai/dist/utils/provider-failure-description.js.map +1 -1
  105. package/node_modules/@earendil-works/pi-ai/package.json +2 -2
  106. package/node_modules/@earendil-works/pi-pty/package.json +1 -1
  107. package/node_modules/@earendil-works/pi-telemetry/package.json +1 -1
  108. package/node_modules/@earendil-works/pi-tui/package.json +1 -1
  109. package/package.json +7 -7
  110. package/dist/bundle/chunks/chunk-DXU53IPJ.js +0 -8
  111. package/dist/bundle/chunks/chunk-FILEUW2D.js +0 -3
  112. package/dist/bundle/chunks/chunk-PBWQK23Z.js +0 -14
  113. package/dist/bundle/chunks/chunk-TJV2LFKM.js +0 -2
  114. package/dist/bundle/chunks/chunk-UIOI2SK3.js +0 -2
  115. package/dist/bundle/chunks/cli-main-RPQFXRJ7.js +0 -3
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{isOpenAIResponsesPromptCacheModel}from"./chunk-TH4XD7AJ.js";import{Build,Clean,Convert,Create,Decode,Default,DisableParseErrors,EnableParseErrors,Encode,Errors,HasCodec,IsArray,IsBoolean,IsInteger,IsNumber,IsObject,IsString,ParseError,Parser,arguments_exports,settings_exports,typebox_exports,value_exports}from"./chunk-RBCQOIAD.js";import{SERVER_FALLBACK_ABORTED_DIAGNOSTIC,parseServerFallbackReceipt}from"./chunk-X4Q5YSTE.js";import{isAnthropicApiBaseUrl}from"./chunk-BJICJY47.js";import{describeProviderStallForUser,formatStallDuration}from"./chunk-TJV2LFKM.js";import{InMemoryCredentialStore,ModelsError,createProvider,defaultProviderAuthContext,resolveProviderAuth}from"./chunk-UIOI2SK3.js";import{getProviderEnvValue}from"./chunk-5ROMKDLK.js";import{parseStreamingJson}from"./chunk-3W47LTXQ.js";import{AssistantMessageEventStream,createAssistantMessageEventStream}from"./chunk-DMI55M2N.js";import{providerHeadersToRecord}from"./chunk-BQVVQ2LQ.js";import{__commonJS,__export,__require,__toESM}from"./chunk-IKOFCODM.js";var require_identity=__commonJS({"node_modules/yaml/dist/nodes/identity.js"(exports){"use strict";var ALIAS=Symbol.for("yaml.alias"),DOC=Symbol.for("yaml.document"),MAP=Symbol.for("yaml.map"),PAIR=Symbol.for("yaml.pair"),SCALAR=Symbol.for("yaml.scalar"),SEQ=Symbol.for("yaml.seq"),NODE_TYPE=Symbol.for("yaml.node.type"),isAlias=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===ALIAS,isDocument=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===DOC,isMap=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===MAP,isPair=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===PAIR,isScalar=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===SCALAR,isSeq=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===SEQ;function isCollection(node){if(node&&typeof node=="object")switch(node[NODE_TYPE]){case MAP:case SEQ:return!0}return!1}function isNode(node){if(node&&typeof node=="object")switch(node[NODE_TYPE]){case ALIAS:case MAP:case SCALAR:case SEQ:return!0}return!1}var hasAnchor=node=>(isScalar(node)||isCollection(node))&&!!node.anchor;exports.ALIAS=ALIAS;exports.DOC=DOC;exports.MAP=MAP;exports.NODE_TYPE=NODE_TYPE;exports.PAIR=PAIR;exports.SCALAR=SCALAR;exports.SEQ=SEQ;exports.hasAnchor=hasAnchor;exports.isAlias=isAlias;exports.isCollection=isCollection;exports.isDocument=isDocument;exports.isMap=isMap;exports.isNode=isNode;exports.isPair=isPair;exports.isScalar=isScalar;exports.isSeq=isSeq}});var require_visit=__commonJS({"node_modules/yaml/dist/visit.js"(exports){"use strict";var identity=require_identity(),BREAK=Symbol("break visit"),SKIP=Symbol("skip children"),REMOVE=Symbol("remove node");function visit(node,visitor){let visitor_=initVisitor(visitor);identity.isDocument(node)?visit_(null,node.contents,visitor_,Object.freeze([node]))===REMOVE&&(node.contents=null):visit_(null,node,visitor_,Object.freeze([]))}visit.BREAK=BREAK;visit.SKIP=SKIP;visit.REMOVE=REMOVE;function visit_(key,node,visitor,path){let ctrl=callVisitor(key,node,visitor,path);if(identity.isNode(ctrl)||identity.isPair(ctrl))return replaceNode(key,path,ctrl),visit_(key,ctrl,visitor,path);if(typeof ctrl!="symbol"){if(identity.isCollection(node)){path=Object.freeze(path.concat(node));for(let i=0;i<node.items.length;++i){let ci=visit_(i,node.items[i],visitor,path);if(typeof ci=="number")i=ci-1;else{if(ci===BREAK)return BREAK;ci===REMOVE&&(node.items.splice(i,1),i-=1)}}}else if(identity.isPair(node)){path=Object.freeze(path.concat(node));let ck=visit_("key",node.key,visitor,path);if(ck===BREAK)return BREAK;ck===REMOVE&&(node.key=null);let cv=visit_("value",node.value,visitor,path);if(cv===BREAK)return BREAK;cv===REMOVE&&(node.value=null)}}return ctrl}async function visitAsync(node,visitor){let visitor_=initVisitor(visitor);identity.isDocument(node)?await visitAsync_(null,node.contents,visitor_,Object.freeze([node]))===REMOVE&&(node.contents=null):await visitAsync_(null,node,visitor_,Object.freeze([]))}visitAsync.BREAK=BREAK;visitAsync.SKIP=SKIP;visitAsync.REMOVE=REMOVE;async function visitAsync_(key,node,visitor,path){let ctrl=await callVisitor(key,node,visitor,path);if(identity.isNode(ctrl)||identity.isPair(ctrl))return replaceNode(key,path,ctrl),visitAsync_(key,ctrl,visitor,path);if(typeof ctrl!="symbol"){if(identity.isCollection(node)){path=Object.freeze(path.concat(node));for(let i=0;i<node.items.length;++i){let ci=await visitAsync_(i,node.items[i],visitor,path);if(typeof ci=="number")i=ci-1;else{if(ci===BREAK)return BREAK;ci===REMOVE&&(node.items.splice(i,1),i-=1)}}}else if(identity.isPair(node)){path=Object.freeze(path.concat(node));let ck=await visitAsync_("key",node.key,visitor,path);if(ck===BREAK)return BREAK;ck===REMOVE&&(node.key=null);let cv=await visitAsync_("value",node.value,visitor,path);if(cv===BREAK)return BREAK;cv===REMOVE&&(node.value=null)}}return ctrl}function initVisitor(visitor){return typeof visitor=="object"&&(visitor.Collection||visitor.Node||visitor.Value)?Object.assign({Alias:visitor.Node,Map:visitor.Node,Scalar:visitor.Node,Seq:visitor.Node},visitor.Value&&{Map:visitor.Value,Scalar:visitor.Value,Seq:visitor.Value},visitor.Collection&&{Map:visitor.Collection,Seq:visitor.Collection},visitor):visitor}function callVisitor(key,node,visitor,path){if(typeof visitor=="function")return visitor(key,node,path);if(identity.isMap(node))return visitor.Map?.(key,node,path);if(identity.isSeq(node))return visitor.Seq?.(key,node,path);if(identity.isPair(node))return visitor.Pair?.(key,node,path);if(identity.isScalar(node))return visitor.Scalar?.(key,node,path);if(identity.isAlias(node))return visitor.Alias?.(key,node,path)}function replaceNode(key,path,node){let parent=path[path.length-1];if(identity.isCollection(parent))parent.items[key]=node;else if(identity.isPair(parent))key==="key"?parent.key=node:parent.value=node;else if(identity.isDocument(parent))parent.contents=node;else{let pt=identity.isAlias(parent)?"alias":"scalar";throw new Error(`Cannot replace node with ${pt} parent`)}}exports.visit=visit;exports.visitAsync=visitAsync}});var require_directives=__commonJS({"node_modules/yaml/dist/doc/directives.js"(exports){"use strict";var identity=require_identity(),visit=require_visit(),escapeChars={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},escapeTagName=tn=>tn.replace(/[!,[\]{}]/g,ch=>escapeChars[ch]),Directives=class _Directives{constructor(yaml,tags){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},_Directives.defaultYaml,yaml),this.tags=Object.assign({},_Directives.defaultTags,tags)}clone(){let copy=new _Directives(this.yaml,this.tags);return copy.docStart=this.docStart,copy}atDocument(){let res=new _Directives(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:_Directives.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},_Directives.defaultTags);break}return res}add(line,onError){this.atNextDocument&&(this.yaml={explicit:_Directives.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},_Directives.defaultTags),this.atNextDocument=!1);let parts=line.trim().split(/[ \t]+/),name=parts.shift();switch(name){case"%TAG":{if(parts.length!==2&&(onError(0,"%TAG directive should contain exactly two parts"),parts.length<2))return!1;let[handle,prefix]=parts;return this.tags[handle]=prefix,!0}case"%YAML":{if(this.yaml.explicit=!0,parts.length!==1)return onError(0,"%YAML directive should contain exactly one part"),!1;let[version]=parts;if(version==="1.1"||version==="1.2")return this.yaml.version=version,!0;{let isValid=/^\d+\.\d+$/.test(version);return onError(6,`Unsupported YAML version ${version}`,isValid),!1}}default:return onError(0,`Unknown directive ${name}`,!0),!1}}tagName(source,onError){if(source==="!")return"!";if(source[0]!=="!")return onError(`Not a valid tag: ${source}`),null;if(source[1]==="<"){let verbatim=source.slice(2,-1);return verbatim==="!"||verbatim==="!!"?(onError(`Verbatim tags aren't resolved, so ${source} is invalid.`),null):(source[source.length-1]!==">"&&onError("Verbatim tags must end with a >"),verbatim)}let[,handle,suffix]=source.match(/^(.*!)([^!]*)$/s);suffix||onError(`The ${source} tag has no suffix`);let prefix=this.tags[handle];if(prefix)try{return prefix+decodeURIComponent(suffix)}catch(error){return onError(String(error)),null}return handle==="!"?source:(onError(`Could not resolve tag: ${source}`),null)}tagString(tag){for(let[handle,prefix]of Object.entries(this.tags))if(tag.startsWith(prefix))return handle+escapeTagName(tag.substring(prefix.length));return tag[0]==="!"?tag:`!<${tag}>`}toString(doc){let lines=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],tagEntries=Object.entries(this.tags),tagNames;if(doc&&tagEntries.length>0&&identity.isNode(doc.contents)){let tags={};visit.visit(doc.contents,(_key,node)=>{identity.isNode(node)&&node.tag&&(tags[node.tag]=!0)}),tagNames=Object.keys(tags)}else tagNames=[];for(let[handle,prefix]of tagEntries)handle==="!!"&&prefix==="tag:yaml.org,2002:"||(!doc||tagNames.some(tn=>tn.startsWith(prefix)))&&lines.push(`%TAG ${handle} ${prefix}`);return lines.join(`
2
+ import{isOpenAIResponsesPromptCacheModel}from"./chunk-JEWB5XTL.js";import{Build,Clean,Convert,Create,Decode,Default,DisableParseErrors,EnableParseErrors,Encode,Errors,HasCodec,IsArray,IsBoolean,IsInteger,IsNumber,IsObject,IsString,ParseError,Parser,arguments_exports,settings_exports,typebox_exports,value_exports}from"./chunk-RBCQOIAD.js";import{SERVER_FALLBACK_ABORTED_DIAGNOSTIC,parseServerFallbackReceipt}from"./chunk-X4Q5YSTE.js";import{isAnthropicApiBaseUrl}from"./chunk-BJICJY47.js";import{InMemoryCredentialStore,ModelsError,createProvider,defaultProviderAuthContext,resolveProviderAuth}from"./chunk-XVX4M3DZ.js";import{getProviderEnvValue}from"./chunk-5ROMKDLK.js";import{parseStreamingJson}from"./chunk-3W47LTXQ.js";import{AssistantMessageEventStream,createAssistantMessageEventStream}from"./chunk-DMI55M2N.js";import{providerHeadersToRecord}from"./chunk-BQVVQ2LQ.js";import{__commonJS,__export,__require,__toESM}from"./chunk-IKOFCODM.js";var require_identity=__commonJS({"node_modules/yaml/dist/nodes/identity.js"(exports){"use strict";var ALIAS=Symbol.for("yaml.alias"),DOC=Symbol.for("yaml.document"),MAP=Symbol.for("yaml.map"),PAIR=Symbol.for("yaml.pair"),SCALAR=Symbol.for("yaml.scalar"),SEQ=Symbol.for("yaml.seq"),NODE_TYPE=Symbol.for("yaml.node.type"),isAlias=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===ALIAS,isDocument=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===DOC,isMap=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===MAP,isPair=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===PAIR,isScalar=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===SCALAR,isSeq=node=>!!node&&typeof node=="object"&&node[NODE_TYPE]===SEQ;function isCollection(node){if(node&&typeof node=="object")switch(node[NODE_TYPE]){case MAP:case SEQ:return!0}return!1}function isNode(node){if(node&&typeof node=="object")switch(node[NODE_TYPE]){case ALIAS:case MAP:case SCALAR:case SEQ:return!0}return!1}var hasAnchor=node=>(isScalar(node)||isCollection(node))&&!!node.anchor;exports.ALIAS=ALIAS;exports.DOC=DOC;exports.MAP=MAP;exports.NODE_TYPE=NODE_TYPE;exports.PAIR=PAIR;exports.SCALAR=SCALAR;exports.SEQ=SEQ;exports.hasAnchor=hasAnchor;exports.isAlias=isAlias;exports.isCollection=isCollection;exports.isDocument=isDocument;exports.isMap=isMap;exports.isNode=isNode;exports.isPair=isPair;exports.isScalar=isScalar;exports.isSeq=isSeq}});var require_visit=__commonJS({"node_modules/yaml/dist/visit.js"(exports){"use strict";var identity=require_identity(),BREAK=Symbol("break visit"),SKIP=Symbol("skip children"),REMOVE=Symbol("remove node");function visit(node,visitor){let visitor_=initVisitor(visitor);identity.isDocument(node)?visit_(null,node.contents,visitor_,Object.freeze([node]))===REMOVE&&(node.contents=null):visit_(null,node,visitor_,Object.freeze([]))}visit.BREAK=BREAK;visit.SKIP=SKIP;visit.REMOVE=REMOVE;function visit_(key,node,visitor,path){let ctrl=callVisitor(key,node,visitor,path);if(identity.isNode(ctrl)||identity.isPair(ctrl))return replaceNode(key,path,ctrl),visit_(key,ctrl,visitor,path);if(typeof ctrl!="symbol"){if(identity.isCollection(node)){path=Object.freeze(path.concat(node));for(let i=0;i<node.items.length;++i){let ci=visit_(i,node.items[i],visitor,path);if(typeof ci=="number")i=ci-1;else{if(ci===BREAK)return BREAK;ci===REMOVE&&(node.items.splice(i,1),i-=1)}}}else if(identity.isPair(node)){path=Object.freeze(path.concat(node));let ck=visit_("key",node.key,visitor,path);if(ck===BREAK)return BREAK;ck===REMOVE&&(node.key=null);let cv=visit_("value",node.value,visitor,path);if(cv===BREAK)return BREAK;cv===REMOVE&&(node.value=null)}}return ctrl}async function visitAsync(node,visitor){let visitor_=initVisitor(visitor);identity.isDocument(node)?await visitAsync_(null,node.contents,visitor_,Object.freeze([node]))===REMOVE&&(node.contents=null):await visitAsync_(null,node,visitor_,Object.freeze([]))}visitAsync.BREAK=BREAK;visitAsync.SKIP=SKIP;visitAsync.REMOVE=REMOVE;async function visitAsync_(key,node,visitor,path){let ctrl=await callVisitor(key,node,visitor,path);if(identity.isNode(ctrl)||identity.isPair(ctrl))return replaceNode(key,path,ctrl),visitAsync_(key,ctrl,visitor,path);if(typeof ctrl!="symbol"){if(identity.isCollection(node)){path=Object.freeze(path.concat(node));for(let i=0;i<node.items.length;++i){let ci=await visitAsync_(i,node.items[i],visitor,path);if(typeof ci=="number")i=ci-1;else{if(ci===BREAK)return BREAK;ci===REMOVE&&(node.items.splice(i,1),i-=1)}}}else if(identity.isPair(node)){path=Object.freeze(path.concat(node));let ck=await visitAsync_("key",node.key,visitor,path);if(ck===BREAK)return BREAK;ck===REMOVE&&(node.key=null);let cv=await visitAsync_("value",node.value,visitor,path);if(cv===BREAK)return BREAK;cv===REMOVE&&(node.value=null)}}return ctrl}function initVisitor(visitor){return typeof visitor=="object"&&(visitor.Collection||visitor.Node||visitor.Value)?Object.assign({Alias:visitor.Node,Map:visitor.Node,Scalar:visitor.Node,Seq:visitor.Node},visitor.Value&&{Map:visitor.Value,Scalar:visitor.Value,Seq:visitor.Value},visitor.Collection&&{Map:visitor.Collection,Seq:visitor.Collection},visitor):visitor}function callVisitor(key,node,visitor,path){if(typeof visitor=="function")return visitor(key,node,path);if(identity.isMap(node))return visitor.Map?.(key,node,path);if(identity.isSeq(node))return visitor.Seq?.(key,node,path);if(identity.isPair(node))return visitor.Pair?.(key,node,path);if(identity.isScalar(node))return visitor.Scalar?.(key,node,path);if(identity.isAlias(node))return visitor.Alias?.(key,node,path)}function replaceNode(key,path,node){let parent=path[path.length-1];if(identity.isCollection(parent))parent.items[key]=node;else if(identity.isPair(parent))key==="key"?parent.key=node:parent.value=node;else if(identity.isDocument(parent))parent.contents=node;else{let pt=identity.isAlias(parent)?"alias":"scalar";throw new Error(`Cannot replace node with ${pt} parent`)}}exports.visit=visit;exports.visitAsync=visitAsync}});var require_directives=__commonJS({"node_modules/yaml/dist/doc/directives.js"(exports){"use strict";var identity=require_identity(),visit=require_visit(),escapeChars={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},escapeTagName=tn=>tn.replace(/[!,[\]{}]/g,ch=>escapeChars[ch]),Directives=class _Directives{constructor(yaml,tags){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},_Directives.defaultYaml,yaml),this.tags=Object.assign({},_Directives.defaultTags,tags)}clone(){let copy=new _Directives(this.yaml,this.tags);return copy.docStart=this.docStart,copy}atDocument(){let res=new _Directives(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:_Directives.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},_Directives.defaultTags);break}return res}add(line,onError){this.atNextDocument&&(this.yaml={explicit:_Directives.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},_Directives.defaultTags),this.atNextDocument=!1);let parts=line.trim().split(/[ \t]+/),name=parts.shift();switch(name){case"%TAG":{if(parts.length!==2&&(onError(0,"%TAG directive should contain exactly two parts"),parts.length<2))return!1;let[handle,prefix]=parts;return this.tags[handle]=prefix,!0}case"%YAML":{if(this.yaml.explicit=!0,parts.length!==1)return onError(0,"%YAML directive should contain exactly one part"),!1;let[version]=parts;if(version==="1.1"||version==="1.2")return this.yaml.version=version,!0;{let isValid=/^\d+\.\d+$/.test(version);return onError(6,`Unsupported YAML version ${version}`,isValid),!1}}default:return onError(0,`Unknown directive ${name}`,!0),!1}}tagName(source,onError){if(source==="!")return"!";if(source[0]!=="!")return onError(`Not a valid tag: ${source}`),null;if(source[1]==="<"){let verbatim=source.slice(2,-1);return verbatim==="!"||verbatim==="!!"?(onError(`Verbatim tags aren't resolved, so ${source} is invalid.`),null):(source[source.length-1]!==">"&&onError("Verbatim tags must end with a >"),verbatim)}let[,handle,suffix]=source.match(/^(.*!)([^!]*)$/s);suffix||onError(`The ${source} tag has no suffix`);let prefix=this.tags[handle];if(prefix)try{return prefix+decodeURIComponent(suffix)}catch(error){return onError(String(error)),null}return handle==="!"?source:(onError(`Could not resolve tag: ${source}`),null)}tagString(tag){for(let[handle,prefix]of Object.entries(this.tags))if(tag.startsWith(prefix))return handle+escapeTagName(tag.substring(prefix.length));return tag[0]==="!"?tag:`!<${tag}>`}toString(doc){let lines=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],tagEntries=Object.entries(this.tags),tagNames;if(doc&&tagEntries.length>0&&identity.isNode(doc.contents)){let tags={};visit.visit(doc.contents,(_key,node)=>{identity.isNode(node)&&node.tag&&(tags[node.tag]=!0)}),tagNames=Object.keys(tags)}else tagNames=[];for(let[handle,prefix]of tagEntries)handle==="!!"&&prefix==="tag:yaml.org,2002:"||(!doc||tagNames.some(tn=>tn.startsWith(prefix)))&&lines.push(`%TAG ${handle} ${prefix}`);return lines.join(`
3
3
  `)}};Directives.defaultYaml={explicit:!1,version:"1.2"};Directives.defaultTags={"!!":"tag:yaml.org,2002:"};exports.Directives=Directives}});var require_anchors=__commonJS({"node_modules/yaml/dist/doc/anchors.js"(exports){"use strict";var identity=require_identity(),visit=require_visit();function anchorIsValid(anchor){if(/[\x00-\x19\s,[\]{}]/.test(anchor)){let msg=`Anchor must not contain whitespace or control characters: ${JSON.stringify(anchor)}`;throw new Error(msg)}return!0}function anchorNames(root){let anchors=new Set;return visit.visit(root,{Value(_key,node){node.anchor&&anchors.add(node.anchor)}}),anchors}function findNewAnchor(prefix,exclude){for(let i=1;;++i){let name=`${prefix}${i}`;if(!exclude.has(name))return name}}function createNodeAnchors(doc,prefix){let aliasObjects=[],sourceObjects=new Map,prevAnchors=null;return{onAnchor:source=>{aliasObjects.push(source),prevAnchors??(prevAnchors=anchorNames(doc));let anchor=findNewAnchor(prefix,prevAnchors);return prevAnchors.add(anchor),anchor},setAnchors:()=>{for(let source of aliasObjects){let ref=sourceObjects.get(source);if(typeof ref=="object"&&ref.anchor&&(identity.isScalar(ref.node)||identity.isCollection(ref.node)))ref.node.anchor=ref.anchor;else{let error=new Error("Failed to resolve repeated object (this should not happen)");throw error.source=source,error}}},sourceObjects}}exports.anchorIsValid=anchorIsValid;exports.anchorNames=anchorNames;exports.createNodeAnchors=createNodeAnchors;exports.findNewAnchor=findNewAnchor}});var require_applyReviver=__commonJS({"node_modules/yaml/dist/doc/applyReviver.js"(exports){"use strict";function applyReviver(reviver,obj,key,val){if(val&&typeof val=="object")if(Array.isArray(val))for(let i=0,len=val.length;i<len;++i){let v0=val[i],v1=applyReviver(reviver,val,String(i),v0);v1===void 0?delete val[i]:v1!==v0&&(val[i]=v1)}else if(val instanceof Map)for(let k of Array.from(val.keys())){let v0=val.get(k),v1=applyReviver(reviver,val,k,v0);v1===void 0?val.delete(k):v1!==v0&&val.set(k,v1)}else if(val instanceof Set)for(let v0 of Array.from(val)){let v1=applyReviver(reviver,val,v0,v0);v1===void 0?val.delete(v0):v1!==v0&&(val.delete(v0),val.add(v1))}else for(let[k,v0]of Object.entries(val)){let v1=applyReviver(reviver,val,k,v0);v1===void 0?delete val[k]:v1!==v0&&(val[k]=v1)}return reviver.call(obj,key,val)}exports.applyReviver=applyReviver}});var require_toJS=__commonJS({"node_modules/yaml/dist/nodes/toJS.js"(exports){"use strict";var identity=require_identity();function toJS(value,arg,ctx){if(Array.isArray(value))return value.map((v,i)=>toJS(v,String(i),ctx));if(value&&typeof value.toJSON=="function"){if(!ctx||!identity.hasAnchor(value))return value.toJSON(arg,ctx);let data={aliasCount:0,count:1,res:void 0};ctx.anchors.set(value,data),ctx.onCreate=res2=>{data.res=res2,delete ctx.onCreate};let res=value.toJSON(arg,ctx);return ctx.onCreate&&ctx.onCreate(res),res}return typeof value=="bigint"&&!ctx?.keep?Number(value):value}exports.toJS=toJS}});var require_Node=__commonJS({"node_modules/yaml/dist/nodes/Node.js"(exports){"use strict";var applyReviver=require_applyReviver(),identity=require_identity(),toJS=require_toJS(),NodeBase=class{constructor(type){Object.defineProperty(this,identity.NODE_TYPE,{value:type})}clone(){let copy=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(copy.range=this.range.slice()),copy}toJS(doc,{mapAsMap,maxAliasCount,onAnchor,reviver}={}){if(!identity.isDocument(doc))throw new TypeError("A document argument is required");let ctx={anchors:new Map,doc,keep:!0,mapAsMap:mapAsMap===!0,mapKeyWarned:!1,maxAliasCount:typeof maxAliasCount=="number"?maxAliasCount:100},res=toJS.toJS(this,"",ctx);if(typeof onAnchor=="function")for(let{count,res:res2}of ctx.anchors.values())onAnchor(res2,count);return typeof reviver=="function"?applyReviver.applyReviver(reviver,{"":res},"",res):res}};exports.NodeBase=NodeBase}});var require_Alias=__commonJS({"node_modules/yaml/dist/nodes/Alias.js"(exports){"use strict";var anchors=require_anchors(),visit=require_visit(),identity=require_identity(),Node=require_Node(),toJS=require_toJS(),Alias=class extends Node.NodeBase{constructor(source){super(identity.ALIAS),this.source=source,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(doc,ctx){if(ctx?.maxAliasCount===0)throw new ReferenceError("Alias resolution is disabled");let nodes;ctx?.aliasResolveCache?nodes=ctx.aliasResolveCache:(nodes=[],visit.visit(doc,{Node:(_key,node)=>{(identity.isAlias(node)||identity.hasAnchor(node))&&nodes.push(node)}}),ctx&&(ctx.aliasResolveCache=nodes));let found;for(let node of nodes){if(node===this)break;node.anchor===this.source&&(found=node)}if(found&&ctx){let{anchors:anchors2,doc:doc2,maxAliasCount}=ctx,data=anchors2.get(found);if(data||(toJS.toJS(found,null,ctx),data=anchors2.get(found)),data?.res===void 0){let msg="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(msg)}if(maxAliasCount>=0&&(data.count+=1,data.aliasCount===0&&(data.aliasCount=getAliasCount(doc2,found,anchors2)),data.count*data.aliasCount>maxAliasCount)){let msg="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(msg)}}return found}toJSON(_arg,ctx){if(!ctx)return{source:this.source};let source=this.resolve(ctx.doc,ctx);if(!source){let msg=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(msg)}return ctx.anchors.get(source).res}toString(ctx,_onComment,_onChompKeep){let src=`*${this.source}`;if(ctx){if(anchors.anchorIsValid(this.source),ctx.options.verifyAliasOrder&&!ctx.anchors.has(this.source)){let msg=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(msg)}if(ctx.implicitKey)return`${src} `}return src}};function getAliasCount(doc,node,anchors2){if(identity.isAlias(node)){let source=node.resolve(doc),anchor=anchors2&&source&&anchors2.get(source);return anchor?anchor.count*anchor.aliasCount:0}else if(identity.isCollection(node)){let count=0;for(let item of node.items){let c=getAliasCount(doc,item,anchors2);c>count&&(count=c)}return count}else if(identity.isPair(node)){let kc=getAliasCount(doc,node.key,anchors2),vc=getAliasCount(doc,node.value,anchors2);return Math.max(kc,vc)}return 1}exports.Alias=Alias}});var require_Scalar=__commonJS({"node_modules/yaml/dist/nodes/Scalar.js"(exports){"use strict";var identity=require_identity(),Node=require_Node(),toJS=require_toJS(),isScalarValue=value=>!value||typeof value!="function"&&typeof value!="object",Scalar=class extends Node.NodeBase{constructor(value){super(identity.SCALAR),this.value=value}toJSON(arg,ctx){return ctx?.keep?this.value:toJS.toJS(this.value,arg,ctx)}toString(){return String(this.value)}};Scalar.BLOCK_FOLDED="BLOCK_FOLDED";Scalar.BLOCK_LITERAL="BLOCK_LITERAL";Scalar.PLAIN="PLAIN";Scalar.QUOTE_DOUBLE="QUOTE_DOUBLE";Scalar.QUOTE_SINGLE="QUOTE_SINGLE";exports.Scalar=Scalar;exports.isScalarValue=isScalarValue}});var require_createNode=__commonJS({"node_modules/yaml/dist/doc/createNode.js"(exports){"use strict";var Alias=require_Alias(),identity=require_identity(),Scalar=require_Scalar(),defaultTagPrefix="tag:yaml.org,2002:";function findTagObject(value,tagName,tags){if(tagName){let match=tags.filter(t=>t.tag===tagName),tagObj=match.find(t=>!t.format)??match[0];if(!tagObj)throw new Error(`Tag ${tagName} not found`);return tagObj}return tags.find(t=>t.identify?.(value)&&!t.format)}function createNode(value,tagName,ctx){if(identity.isDocument(value)&&(value=value.contents),identity.isNode(value))return value;if(identity.isPair(value)){let map=ctx.schema[identity.MAP].createNode?.(ctx.schema,null,ctx);return map.items.push(value),map}(value instanceof String||value instanceof Number||value instanceof Boolean||typeof BigInt<"u"&&value instanceof BigInt)&&(value=value.valueOf());let{aliasDuplicateObjects,onAnchor,onTagObj,schema,sourceObjects}=ctx,ref;if(aliasDuplicateObjects&&value&&typeof value=="object"){if(ref=sourceObjects.get(value),ref)return ref.anchor??(ref.anchor=onAnchor(value)),new Alias.Alias(ref.anchor);ref={anchor:null,node:null},sourceObjects.set(value,ref)}tagName?.startsWith("!!")&&(tagName=defaultTagPrefix+tagName.slice(2));let tagObj=findTagObject(value,tagName,schema.tags);if(!tagObj){if(value&&typeof value.toJSON=="function"&&(value=value.toJSON()),!value||typeof value!="object"){let node2=new Scalar.Scalar(value);return ref&&(ref.node=node2),node2}tagObj=value instanceof Map?schema[identity.MAP]:Symbol.iterator in Object(value)?schema[identity.SEQ]:schema[identity.MAP]}onTagObj&&(onTagObj(tagObj),delete ctx.onTagObj);let node=tagObj?.createNode?tagObj.createNode(ctx.schema,value,ctx):typeof tagObj?.nodeClass?.from=="function"?tagObj.nodeClass.from(ctx.schema,value,ctx):new Scalar.Scalar(value);return tagName?node.tag=tagName:tagObj.default||(node.tag=tagObj.tag),ref&&(ref.node=node),node}exports.createNode=createNode}});var require_Collection=__commonJS({"node_modules/yaml/dist/nodes/Collection.js"(exports){"use strict";var createNode=require_createNode(),identity=require_identity(),Node=require_Node();function collectionFromPath(schema,path,value){let v=value;for(let i=path.length-1;i>=0;--i){let k=path[i];if(typeof k=="number"&&Number.isInteger(k)&&k>=0){let a=[];a[k]=v,v=a}else v=new Map([[k,v]])}return createNode.createNode(v,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema,sourceObjects:new Map})}var isEmptyPath=path=>path==null||typeof path=="object"&&!!path[Symbol.iterator]().next().done,Collection=class extends Node.NodeBase{constructor(type,schema){super(type),Object.defineProperty(this,"schema",{value:schema,configurable:!0,enumerable:!1,writable:!0})}clone(schema){let copy=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return schema&&(copy.schema=schema),copy.items=copy.items.map(it=>identity.isNode(it)||identity.isPair(it)?it.clone(schema):it),this.range&&(copy.range=this.range.slice()),copy}addIn(path,value){if(isEmptyPath(path))this.add(value);else{let[key,...rest]=path,node=this.get(key,!0);if(identity.isCollection(node))node.addIn(rest,value);else if(node===void 0&&this.schema)this.set(key,collectionFromPath(this.schema,rest,value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`)}}deleteIn(path){let[key,...rest]=path;if(rest.length===0)return this.delete(key);let node=this.get(key,!0);if(identity.isCollection(node))return node.deleteIn(rest);throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`)}getIn(path,keepScalar){let[key,...rest]=path,node=this.get(key,!0);return rest.length===0?!keepScalar&&identity.isScalar(node)?node.value:node:identity.isCollection(node)?node.getIn(rest,keepScalar):void 0}hasAllNullValues(allowScalar){return this.items.every(node=>{if(!identity.isPair(node))return!1;let n=node.value;return n==null||allowScalar&&identity.isScalar(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(path){let[key,...rest]=path;if(rest.length===0)return this.has(key);let node=this.get(key,!0);return identity.isCollection(node)?node.hasIn(rest):!1}setIn(path,value){let[key,...rest]=path;if(rest.length===0)this.set(key,value);else{let node=this.get(key,!0);if(identity.isCollection(node))node.setIn(rest,value);else if(node===void 0&&this.schema)this.set(key,collectionFromPath(this.schema,rest,value));else throw new Error(`Expected YAML collection at ${key}. Remaining path: ${rest}`)}}};exports.Collection=Collection;exports.collectionFromPath=collectionFromPath;exports.isEmptyPath=isEmptyPath}});var require_stringifyComment=__commonJS({"node_modules/yaml/dist/stringify/stringifyComment.js"(exports){"use strict";var stringifyComment=str=>str.replace(/^(?!$)(?: $)?/gm,"#");function indentComment(comment,indent){return/^\n+$/.test(comment)?comment.substring(1):indent?comment.replace(/^(?! *$)/gm,indent):comment}var lineComment=(str,indent,comment)=>str.endsWith(`
4
4
  `)?indentComment(comment,indent):comment.includes(`
5
5
  `)?`
@@ -141,7 +141,7 @@ ${end.comment}`:end.comment}this.doc.range[2]=end.offset;break}default:this.erro
141
141
  `)}function extractUserMessageText(msg){if(msg.role!=="user")return"";let content=msg.content;return typeof content=="string"?content.trim():content.filter(c=>c.type==="text").map(c=>c.text).join(`
142
142
  `).trim()}function hasUserMessageImages(msg){return msg.role==="user"&&Array.isArray(msg.content)&&msg.content.some(item=>item.type==="image")}function buildCursorRootPromptContent(content){if(typeof content=="string"){let text=content.trim();return text?[{type:"text",text}]:[]}let parts=[];for(let item of content)if(item.type==="text"){let text=item.text.trim();text&&parts.push({type:"text",text})}else parts.push({type:"image",image:`data:${item.mimeType};base64,${item.data}`,mediaType:item.mimeType});return parts}function cursorUserContentKey(content){if(typeof content=="string")return content.trim();let hash=createHash("sha256");for(let item of content)hash.update(item.type),item.type==="text"?hash.update(item.text):(hash.update(item.mimeType),hash.update(item.data));return hash.digest("hex")}function buildCursorAssistantContent(msg){let content=[];for(let item of msg.content)item.type==="text"?item.text&&content.push({type:"text",text:item.text}):item.type==="toolCall"&&content.push({type:"tool-call",toolCallId:item.id,toolName:item.name,args:item.arguments});return content}function findLastUserMessageIndex(messages){for(let i=messages.length-1;i>=0;i--)if(messages[i].role==="user")return i;return-1}function buildRootPromptMessagesJson(messages,systemPromptIds,blobStore,activeUserMessageIndex=findLastUserMessageIndex(messages)){let entries=[...systemPromptIds],pushJson=obj=>{let bytes=new TextEncoder().encode(JSON.stringify(obj));entries.push(storeCursorBlob(blobStore,bytes))};for(let i=0;i<messages.length&&i!==activeUserMessageIndex;i++){let msg=messages[i];if(msg.role==="user"){let content=buildCursorRootPromptContent(msg.content);if(content.length===0)continue;pushJson({role:"user",content})}else if(msg.role==="assistant"){let content=buildCursorAssistantContent(msg);if(content.length===0)continue;pushJson({role:"assistant",content})}else msg.role==="toolResult"&&pushJson({role:"tool",id:msg.toolCallId,content:[{type:"tool-result",toolName:msg.toolName,toolCallId:msg.toolCallId,result:toolResultToText(msg),...msg.isError?{isError:!0}:{}}]})}return entries}function isPlainRecord(value){if(value===null||typeof value!="object"||Array.isArray(value))return!1;let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function isJsonValue(value){if(value===null||typeof value=="string"||typeof value=="boolean")return!0;if(typeof value=="number")return Number.isFinite(value);if(Array.isArray(value))return value.every(isJsonValue);if(!isPlainRecord(value))return!1;for(let key in value)if(!isJsonValue(value[key]))return!1;return!0}function encodeCursorMcpArguments(toolCall){let encoded={};for(let name in toolCall.arguments){let value=toolCall.arguments[name];if(value!==void 0){if(!isJsonValue(value))throw new Error(`Cursor tool argument ${toolCall.name}.${name} is not JSON-serializable`);encoded[name]=toBinary(ValueSchema,fromJson(ValueSchema,value))}}return encoded}function createCursorMcpResult(result){return result.isError?create(McpToolResultSchema,{result:{case:"error",value:create(McpToolErrorSchema,{error:toolResultToText(result)})}}):create(McpToolResultSchema,{result:{case:"success",value:create(McpSuccessSchema,{content:result.content.map(item=>item.type==="text"?create(McpToolResultContentItemSchema,{content:{case:"text",value:create(McpTextContentSchema,{text:item.text})}}):create(McpToolResultContentItemSchema,{content:{case:"image",value:create(McpImageContentSchema,{data:Uint8Array.from(Uint8Array.from(atob(item.data),c=>c.charCodeAt(0))),mimeType:item.mimeType})}}))})}})}function createCursorToolCallStep(toolCall,result){let mcpCall=create(McpToolCallSchema,{args:create(McpArgsSchema,{name:toolCall.name,args:encodeCursorMcpArguments(toolCall),toolCallId:toolCall.id,providerIdentifier:"pi-agent",toolName:toolCall.name}),...result?{result:createCursorMcpResult(result)}:{}});return create(ConversationStepSchema,{message:{case:"toolCall",value:create(ToolCallSchema,{tool:{case:"mcpToolCall",value:mcpCall},toolCallId:toolCall.id})}})}function buildConversationTurns(messages,blobStore,activeUserMessageIndex=findLastUserMessageIndex(messages)){let turns=[],historyEnd=activeUserMessageIndex>=0?activeUserMessageIndex:messages.length,toolResults=new Map,pairedToolCallIds=new Set;for(let index=0;index<historyEnd;index++){let message=messages[index];if(message.role==="toolResult")toolResults.set(message.toolCallId,message);else if(message.role==="assistant")for(let item of message.content)item.type==="toolCall"&&pairedToolCallIds.add(item.id)}let i=0;for(;i<messages.length;){let msg=messages[i];if(msg.role!=="user"){i++;continue}if(i===activeUserMessageIndex)break;let userText=extractUserMessageText(msg);if(userText.length===0&&!hasUserMessageImages(msg)){i++;continue}let userMessage=createCursorUserMessage(msg.content,userText,deterministicUuid(`u:${turns.length}:${cursorUserContentKey(msg.content)}`)),userMessageBlobId=storeCursorBlob(blobStore,toBinary(UserMessageSchema,userMessage)),stepBlobIds=[];for(i++;i<messages.length&&messages[i].role!=="user";){let stepMsg=messages[i];if(stepMsg.role==="assistant")for(let item of stepMsg.content){let step;if(item.type==="text"){if(!item.text)continue;step=create(ConversationStepSchema,{message:{case:"assistantMessage",value:create(AssistantMessageSchema,{text:item.text})}})}else{if(item.type==="thinking")continue;if(item.type==="toolCall")step=createCursorToolCallStep(item,toolResults.get(item.id));else continue}stepBlobIds.push(storeCursorBlob(blobStore,toBinary(ConversationStepSchema,step)))}else if(stepMsg.role==="toolResult"&&!pairedToolCallIds.has(stepMsg.toolCallId)){let text=toolResultToText(stepMsg);if(text){let prefix=stepMsg.isError?"[Tool Error]":"[Tool Result]",step=create(ConversationStepSchema,{message:{case:"assistantMessage",value:create(AssistantMessageSchema,{text:`${prefix}
143
143
  ${text}`})}});stepBlobIds.push(storeCursorBlob(blobStore,toBinary(ConversationStepSchema,step)))}}i++}let agentTurn=create(AgentConversationTurnStructureSchema,{userMessage:userMessageBlobId,steps:stepBlobIds}),turn=create(ConversationTurnStructureSchema,{turn:{case:"agentConversationTurn",value:agentTurn}});turns.push(storeCursorBlob(blobStore,toBinary(ConversationTurnStructureSchema,turn)))}return turns}function createCursorUserMessage(content,text,messageId=randomUUID()){let images=typeof content=="string"?[]:extractImages(content);return create(UserMessageSchema,{text,messageId,...images.length>0?{selectedContext:create(SelectedContextSchema,{selectedImages:images})}:{}})}function extractImages(content){return content.filter(item=>item.type==="image").map(image=>create(SelectedImageSchema,{uuid:randomUUID(),mimeType:image.mimeType,dataOrBlobId:{case:"data",value:Uint8Array.from(atob(image.data),c=>c.charCodeAt(0))}}))}function measureCursorModelInputSerializedBytes(messages,activeUserMessageIndex=findLastUserMessageIndex(messages)){let blobStore=new Map,total=0;for(let blobId of buildRootPromptMessagesJson(messages,[],blobStore,activeUserMessageIndex))total+=readCursorBlob(blobStore,blobId).byteLength;return total}function measureCursorHistorySerializedBytes(messages,activeUserMessageIndex=findLastUserMessageIndex(messages)){return buildCursorHistoryWireBytesForTest(messages,activeUserMessageIndex).reduce((total,bytes)=>total+bytes.byteLength,0)}function buildCursorHistoryWireBytesForTest(messages,activeUserMessageIndex=findLastUserMessageIndex(messages)){let blobStore=new Map;return buildRootPromptMessagesJson(messages,[],blobStore,activeUserMessageIndex),buildConversationTurns(messages,blobStore,activeUserMessageIndex),[...blobStore.values()]}function piReadArgs(path,offset,limit){return limit!==void 0&&Math.floor(limit)<=0?null:{path,offset:offset!==void 0?Math.max(1,Math.floor(offset)):void 0,limit:limit!==void 0?Math.floor(limit):void 0}}function piLsPath(basePath){return basePath||"."}function piLimit(limit){return limit===void 0?void 0:Math.max(1,Math.floor(limit))}function piTimeout(timeout){return timeout!==void 0&&timeout>=0?timeout:void 0}function composeShellCommand(command,workingDirectory){return workingDirectory?`cd ${`'${workingDirectory.replace(/'/g,"'\\''")}'`} && { ${command}
144
- }`:command}function omitUndefinedArgs(args){let out={};for(let key of Object.keys(args)){let value=args[key];value!==void 0&&(out[key]=value)}return out}var warmers=new Map;function registerPromptCacheWarmer(api,warmer){warmers.set(api,warmer)}function getPromptCacheWarmer(api){return warmers.get(api)}async function warmPromptCache(model,context,options={}){if(isOpenAIResponsesPromptCacheModel(model)){if((options.cacheRetention??model.cacheRetention)==="none")return{supported:!1};let warmer=getPromptCacheWarmer(model.api);if(warmer===void 0)return{supported:!1};let{usage,usageRaw:usageRaw2}=await warmer(model,context,options);return{supported:!0,usage:{input:usage.input,output:usage.output,cacheRead:usage.cacheRead,cacheWrite:usage.cacheWrite,cost:usage.cost},usageRaw:usageRaw2}}if(model.api!=="anthropic-messages"||!isAnthropicApiBaseUrl(model.baseUrl))return{supported:!1};let anthropicModel=model,[{default:Anthropic},{buildAnthropicWarmPromptCacheParams}]=await Promise.all([import("./sdk-2OVOFKEU.js"),import("./anthropic-messages-OMTQOHSI.js")]),headers=providerHeadersToRecord(options.headers),client=new Anthropic({apiKey:options.apiKey??null,baseURL:anthropicModel.baseUrl,dangerouslyAllowBrowser:!0,fetch:options.fetch,defaultHeaders:{...anthropicModel.headers,...headers}}),params=buildAnthropicWarmPromptCacheParams(anthropicModel,context,options),transformed=await options.onPayload?.(params,anthropicModel,{model:anthropicModel,headers});transformed!==void 0&&(params=transformed);let sanitized={...params};delete sanitized.stream,delete sanitized.thinking,delete sanitized.output_config,delete sanitized.tool_choice,sanitized.max_tokens=0;let usageRaw=(await client.beta.messages.create(sanitized,{maxRetries:0,...options.signal?{signal:options.signal}:{},...options.timeoutMs!==void 0?{timeout:options.timeoutMs}:{}})).usage;return{supported:!0,usage:{input:usageRaw.input_tokens,output:usageRaw.output_tokens,cacheRead:usageRaw.cache_read_input_tokens??0,cacheWrite:usageRaw.cache_creation_input_tokens??0},usageRaw}}var DEFAULT_API="faux",DEFAULT_PROVIDER="faux",DEFAULT_MODEL_ID="faux-1",DEFAULT_MODEL_NAME="Faux Model",DEFAULT_BASE_URL="http://localhost:0",DEFAULT_MIN_TOKEN_SIZE=3,DEFAULT_MAX_TOKEN_SIZE=5,DEFAULT_USAGE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function fauxText(text){return{type:"text",text}}function fauxThinking(thinking){return{type:"thinking",thinking}}function fauxToolCall(name,arguments_,options={}){return{type:"toolCall",id:options.id??randomId("tool"),name,arguments:arguments_}}function normalizeFauxAssistantContent(content){return typeof content=="string"?[fauxText(content)]:Array.isArray(content)?content:[content]}function fauxAssistantMessage(content,options={}){return{role:"assistant",content:normalizeFauxAssistantContent(content),api:DEFAULT_API,provider:DEFAULT_PROVIDER,model:DEFAULT_MODEL_ID,usage:DEFAULT_USAGE,stopReason:options.stopReason??"stop",...options.stopDetails===void 0?{}:{stopDetails:options.stopDetails},...options.deferred===void 0?{}:{deferred:options.deferred},...options.errorMessage===void 0?{}:{errorMessage:options.errorMessage},...options.abortSource===void 0?{}:{abortSource:options.abortSource},...options.responseId===void 0?{}:{responseId:options.responseId},timestamp:options.timestamp??Date.now()}}function estimateTokens(text){return Math.ceil(text.length/4)}function randomId(prefix){return`${prefix}:${Date.now()}:${Math.random().toString(36).slice(2)}`}function cloneStreamOptionsForLog(options){if(options)return{...options}}function cloneContextForLog(context){return{...context,messages:structuredClone(context.messages),tools:context.tools?.map(tool=>({name:tool.name,description:tool.description,parameters:structuredClone(tool.parameters),...tool.freeform?{freeform:structuredClone(tool.freeform)}:{}}))}}function contentToText(content){return typeof content=="string"?content:content.map(block=>block.type==="text"?block.text:`[image:${block.mimeType}:${block.data.length}]`).join(`
144
+ }`:command}function omitUndefinedArgs(args){let out={};for(let key of Object.keys(args)){let value=args[key];value!==void 0&&(out[key]=value)}return out}var warmers=new Map;function registerPromptCacheWarmer(api,warmer){warmers.set(api,warmer)}function getPromptCacheWarmer(api){return warmers.get(api)}async function warmPromptCache(model,context,options={}){if(isOpenAIResponsesPromptCacheModel(model)){if((options.cacheRetention??model.cacheRetention)==="none")return{supported:!1};let warmer=getPromptCacheWarmer(model.api);if(warmer===void 0)return{supported:!1};let{usage,usageRaw:usageRaw2}=await warmer(model,context,options);return{supported:!0,usage:{input:usage.input,output:usage.output,cacheRead:usage.cacheRead,cacheWrite:usage.cacheWrite,cost:usage.cost},usageRaw:usageRaw2}}if(model.api!=="anthropic-messages"||!isAnthropicApiBaseUrl(model.baseUrl))return{supported:!1};let anthropicModel=model,[{default:Anthropic},{buildAnthropicWarmPromptCacheParams}]=await Promise.all([import("./sdk-2OVOFKEU.js"),import("./anthropic-messages-7WTVWELD.js")]),headers=providerHeadersToRecord(options.headers),client=new Anthropic({apiKey:options.apiKey??null,baseURL:anthropicModel.baseUrl,dangerouslyAllowBrowser:!0,fetch:options.fetch,defaultHeaders:{...anthropicModel.headers,...headers}}),params=buildAnthropicWarmPromptCacheParams(anthropicModel,context,options),transformed=await options.onPayload?.(params,anthropicModel,{model:anthropicModel,headers});transformed!==void 0&&(params=transformed);let sanitized={...params};delete sanitized.stream,delete sanitized.thinking,delete sanitized.output_config,delete sanitized.tool_choice,sanitized.max_tokens=0;let usageRaw=(await client.beta.messages.create(sanitized,{maxRetries:0,...options.signal?{signal:options.signal}:{},...options.timeoutMs!==void 0?{timeout:options.timeoutMs}:{}})).usage;return{supported:!0,usage:{input:usageRaw.input_tokens,output:usageRaw.output_tokens,cacheRead:usageRaw.cache_read_input_tokens??0,cacheWrite:usageRaw.cache_creation_input_tokens??0},usageRaw}}var DEFAULT_API="faux",DEFAULT_PROVIDER="faux",DEFAULT_MODEL_ID="faux-1",DEFAULT_MODEL_NAME="Faux Model",DEFAULT_BASE_URL="http://localhost:0",DEFAULT_MIN_TOKEN_SIZE=3,DEFAULT_MAX_TOKEN_SIZE=5,DEFAULT_USAGE={input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}};function fauxText(text){return{type:"text",text}}function fauxThinking(thinking){return{type:"thinking",thinking}}function fauxToolCall(name,arguments_,options={}){return{type:"toolCall",id:options.id??randomId("tool"),name,arguments:arguments_}}function normalizeFauxAssistantContent(content){return typeof content=="string"?[fauxText(content)]:Array.isArray(content)?content:[content]}function fauxAssistantMessage(content,options={}){return{role:"assistant",content:normalizeFauxAssistantContent(content),api:DEFAULT_API,provider:DEFAULT_PROVIDER,model:DEFAULT_MODEL_ID,usage:DEFAULT_USAGE,stopReason:options.stopReason??"stop",...options.stopDetails===void 0?{}:{stopDetails:options.stopDetails},...options.deferred===void 0?{}:{deferred:options.deferred},...options.errorMessage===void 0?{}:{errorMessage:options.errorMessage},...options.abortSource===void 0?{}:{abortSource:options.abortSource},...options.responseId===void 0?{}:{responseId:options.responseId},timestamp:options.timestamp??Date.now()}}function estimateTokens(text){return Math.ceil(text.length/4)}function randomId(prefix){return`${prefix}:${Date.now()}:${Math.random().toString(36).slice(2)}`}function cloneStreamOptionsForLog(options){if(options)return{...options}}function cloneContextForLog(context){return{...context,messages:structuredClone(context.messages),tools:context.tools?.map(tool=>({name:tool.name,description:tool.description,parameters:structuredClone(tool.parameters),...tool.freeform?{freeform:structuredClone(tool.freeform)}:{}}))}}function contentToText(content){return typeof content=="string"?content:content.map(block=>block.type==="text"?block.text:`[image:${block.mimeType}:${block.data.length}]`).join(`
145
145
  `)}function assistantContentToText(content){return content.map(block=>block.type==="text"?block.text:block.type==="thinking"?block.thinking:block.type==="providerNative"?"":`${block.name}:${JSON.stringify(block.arguments)}`).join(`
146
146
  `)}function toolResultToText2(message){return[message.toolName,...message.content.map(block=>contentToText([block]))].join(`
147
147
  `)}function messageToText(message){return message.role==="user"?contentToText(message.content):message.role==="assistant"?assistantContentToText(message.content):message.role==="configurationUpdate"?"":toolResultToText2(message)}function serializeContext(context){let parts=[];context.systemPrompt&&parts.push(`system:${context.systemPrompt}`);for(let message of context.messages)parts.push(`${message.role}:${messageToText(message)}`);return context.tools?.length&&parts.push(`tools:${JSON.stringify(context.tools)}`),parts.join(`
@@ -323,4 +323,4 @@ ${yamlBody.length>0?yamlBody:"null"}
323
323
  `).map(line=>` ${line}`),"</tool_response>"].join(`
324
324
  `)}function parseYamlXmlGeneratedText(text,tools,options){if(tools.length===0||text.length===0)return[];let parsedToolCalls=[],toolNames=tools.map(tool=>tool.name),cursor=0;for(;cursor<text.length;){let openingTag=findEarliestXmlToolTag(text.slice(cursor),toolNames);if(!openingTag)break;let absoluteIndex=cursor+openingTag.index;if(openingTag.selfClosing){parsedToolCalls.push({name:openingTag.name,arguments:{}}),cursor=absoluteIndex+openingTag.tag.length;continue}let contentStart=absoluteIndex+openingTag.tag.length,closingTagEnd=findClosingTagEnd(text,contentStart,openingTag.name);if(closingTagEnd===-1)break;let closingTagText=text.slice(contentStart,closingTagEnd),closingTagIndex=new RegExp(`</\\s*${escapeRegExp4(openingTag.name)}\\s*>`).exec(closingTagText)?.index;if(closingTagIndex===void 0){cursor=closingTagEnd;continue}let yamlContent=closingTagText.slice(0,closingTagIndex),parsedArguments=parseYamlMapping(yamlContent);parsedArguments!==null?parsedToolCalls.push({name:openingTag.name,arguments:parsedArguments}):options?.onError?.("Could not process YAML XML tool call, keeping original text.",{toolCall:text.slice(absoluteIndex,closingTagEnd)}),cursor=closingTagEnd}return parsedToolCalls}function createYamlXmlStreamParser(tools,options){let toolNames=tools.map(tool=>tool.name),buffer="",currentToolState=null,nextToolCallIndex=0;function emitSnapshot(events,yamlContent){if(!currentToolState)return;let parsedArguments=parseYamlMapping(yamlContent);if(parsedArguments===null)return;let snapshot=JSON.stringify(parsedArguments);snapshot==="{}"||snapshot===currentToolState.lastArgumentsSnapshot||(currentToolState.lastArgumentsSnapshot===null&&events.push({type:"toolcall_start",index:currentToolState.index,name:currentToolState.name,id:currentToolState.id}),currentToolState.lastArgumentsSnapshot=snapshot,events.push({type:"toolcall_delta",index:currentToolState.index,argumentsDelta:snapshot}))}function processBuffer(){let events=[];for(;buffer.length>0;){if(currentToolState){let closingTagMatch=new RegExp(`</\\s*${escapeRegExp4(currentToolState.name)}\\s*>`).exec(buffer);if(!closingTagMatch||closingTagMatch.index===void 0){emitSnapshot(events,buffer);break}let yamlContent=buffer.slice(0,closingTagMatch.index),originalCallText=`<${currentToolState.name}>${yamlContent}${closingTagMatch[0]}`,parsedArguments=parseYamlMapping(yamlContent);if(buffer=buffer.slice(closingTagMatch.index+closingTagMatch[0].length),parsedArguments===null){options?.onError?.("Could not process YAML XML tool call, keeping original text.",{toolCall:originalCallText}),currentToolState.lastArgumentsSnapshot!==null&&events.push({type:"toolcall_end",index:currentToolState.index,name:currentToolState.name,id:currentToolState.id,arguments:{},incomplete:!0,errorMessage:"Tool call arguments could not be parsed"}),shouldEmitRawToolCallTextOnError4(options)&&events.push({type:"text",text:originalCallText}),currentToolState=null;continue}emitSnapshot(events,yamlContent),currentToolState.lastArgumentsSnapshot===null&&events.push({type:"toolcall_start",index:currentToolState.index,name:currentToolState.name,id:currentToolState.id}),events.push({type:"toolcall_end",index:currentToolState.index,name:currentToolState.name,id:currentToolState.id,arguments:parsedArguments}),currentToolState=null;continue}let openingTag=findEarliestXmlToolTag(buffer,toolNames);if(!openingTag){let textLength=getSafeXmlTextLength(buffer,toolNames);if(textLength===0)break;events.push({type:"text",text:buffer.slice(0,textLength)}),buffer=buffer.slice(textLength);continue}if(openingTag.index>0&&events.push({type:"text",text:buffer.slice(0,openingTag.index)}),buffer=buffer.slice(openingTag.index+openingTag.tag.length),openingTag.selfClosing){let id=`yaml-xml-tool-${nextToolCallIndex}`,index=nextToolCallIndex;nextToolCallIndex+=1,events.push({type:"toolcall_start",index,name:openingTag.name,id}),events.push({type:"toolcall_end",index,name:openingTag.name,id,arguments:{}});continue}currentToolState={id:`yaml-xml-tool-${nextToolCallIndex}`,index:nextToolCallIndex,name:openingTag.name,lastArgumentsSnapshot:null},nextToolCallIndex+=1}return events}return{feed(textDelta){return textDelta.length===0?[]:(buffer+=textDelta,processBuffer())},finish(){let events=processBuffer();if(!currentToolState&&buffer.length>0&&(events.push({type:"text",text:buffer}),buffer=""),currentToolState){let state=currentToolState,parsedArguments=parseYamlMapping(buffer),tool=tools.find(candidate=>candidate.name===state.name),validatedArguments=null;if(parsedArguments!==null&&tool)try{validatedArguments=validateToolArguments(tool,{type:"toolCall",id:state.id,name:state.name,arguments:parsedArguments})}catch{validatedArguments=null}validatedArguments!==null?(emitSnapshot(events,buffer),state.lastArgumentsSnapshot===null&&events.push({type:"toolcall_start",index:state.index,name:state.name,id:state.id}),events.push({type:"toolcall_end",index:state.index,name:state.name,id:state.id,arguments:validatedArguments})):(state.lastArgumentsSnapshot===null&&events.push({type:"toolcall_start",index:state.index,name:state.name,id:state.id}),events.push({type:"toolcall_end",index:state.index,name:state.name,id:state.id,arguments:parsedArguments??{},incomplete:!0,errorMessage:"Tool call was truncated mid-arguments"}),options?.onError?.("Could not complete streaming YAML XML tool call at finish.",{protocol:"yaml-xml",retainedLength:buffer.length})),buffer="",currentToolState=null}return events}}}var hermesProtocol={formatToolsSystemPrompt:hermesFormatToolsSystemPrompt,formatToolResponse:hermesFormatToolResponse,formatToolCall:hermesFormatToolCall,parseGeneratedText:hermesParseGeneratedText,createStreamParser:hermesCreateStreamParser},morphXmlProtocol={formatToolsSystemPrompt:morphXmlFormatToolsSystemPrompt,formatToolResponse:morphXmlFormatToolResponse,formatToolCall:morphXmlFormatToolCall,parseGeneratedText:parseMorphXmlGeneratedText,createStreamParser:createMorphXmlStreamParser},yamlXmlProtocol={formatToolsSystemPrompt:yamlXmlFormatToolsSystemPrompt,formatToolResponse:yamlXmlFormatToolResponse,formatToolCall:yamlXmlFormatToolCall,parseGeneratedText:parseYamlXmlGeneratedText,createStreamParser:createYamlXmlStreamParser},gemma4Protocol={formatToolsSystemPrompt:gemma4FormatToolsSystemPrompt,formatToolResponse:gemma4FormatToolResponse,formatToolCall:gemma4FormatToolCall,parseGeneratedText:gemma4ParseGeneratedText,createStreamParser:gemma4CreateStreamParser},antmlProtocol={formatToolsSystemPrompt:antmlFormatToolsSystemPrompt,formatToolResponse:antmlFormatToolResponse,formatToolCall:antmlFormatToolCall,parseGeneratedText:parseAntmlGeneratedText,createStreamParser:createAntmlStreamParser},kimiXtmlProtocol={formatToolsSystemPrompt:kimiXtmlFormatToolsSystemPrompt,formatToolResponse:kimiXtmlFormatToolResponse,formatToolCall:kimiXtmlFormatToolCall,parseGeneratedText:parseKimiXtmlGeneratedText,createStreamParser:createKimiXtmlStreamParser},anthropicXmlProtocol={formatToolsSystemPrompt:anthropicXmlFormatToolsSystemPrompt,formatToolResponse:anthropicXmlFormatToolResponse,formatToolCall:anthropicXmlFormatToolCall,parseGeneratedText:parseAnthropicXmlGeneratedText,createStreamParser:createAnthropicXmlStreamParser},protocolRegistry={"anthropic-xml":anthropicXmlProtocol,antml:antmlProtocol,hermes:hermesProtocol,xml:morphXmlProtocol,"morph-xml":morphXmlProtocol,"yaml-xml":yamlXmlProtocol,"gemma4-delimiter":gemma4Protocol,"kimi-xtml":kimiXtmlProtocol};function getProtocol(format){let protocol=protocolRegistry[format];if(!protocol)throw new Error(`Unsupported tool call format: ${format}`);return protocol}function transformContext(context,protocol){let transformed={systemPrompt:context.systemPrompt,messages:context.messages.map(msg=>transformMessage(msg,protocol)),tools:void 0};if(context.tools&&context.tools.length>0){let toolPrompt=protocol.formatToolsSystemPrompt(context.tools);toolPrompt&&(transformed.systemPrompt=context.systemPrompt?`${toolPrompt}
325
325
 
326
- ${context.systemPrompt}`:toolPrompt)}return transformed}function transformMessage(message,protocol){switch(message.role){case"assistant":return transformAssistantMessage(message,protocol);case"toolResult":return transformToolResultMessage(message,protocol);default:return message}}function transformAssistantMessage(message,protocol){if(!message.content.some(block=>block.type==="toolCall"))return message;let newContent=[];for(let block of message.content)switch(block.type){case"text":{newContent.push(block);break}case"thinking":{newContent.push(block);break}case"toolCall":{let toolCallText=protocol.formatToolCall(block.name,block.arguments);newContent.push({type:"text",text:toolCallText});break}}return{...message,content:newContent}}function transformToolResultMessage(message,protocol){return{role:"user",content:protocol.formatToolResponse(message.toolName,message.toolCallId,message.content),timestamp:message.timestamp}}function wrapStreamWithToolCallMiddleware(innerStream,protocol,tools){let outerStream=new AssistantMessageEventStream,parser=protocol.createStreamParser(tools);return(async()=>{let projection=null,sawToolCall=!1,parserHasPendingInput=!1,flushParser=()=>{if(!projection||!parserHasPendingInput)return;let result=projection.projectParserEvents(parser.finish());sawToolCall=sawToolCall||result.sawToolCall,projection.finishText(),parserHasPendingInput=!1};try{for await(let event of innerStream)switch(event.type){case"start":projection=new StreamMessageProjection(outerStream,event.partial),outerStream.push({type:"start",partial:projection.message});break;case"text_start":if(!projection)break;projection.sync(event.partial),projection.startText(event.contentIndex,event.partial.content[event.contentIndex]);break;case"text_delta":{if(!projection)break;projection.sync(event.partial),event.delta.length>0&&(parserHasPendingInput=!0);let result=projection.projectParserEvents(parser.feed(event.delta));sawToolCall=sawToolCall||result.sawToolCall;break}case"text_end":if(!projection)break;projection.sync(event.partial),flushParser();break;case"thinking_start":if(!projection)break;projection.sync(event.partial),projection.startThinking(event.contentIndex,event.partial);break;case"thinking_delta":if(!projection)break;projection.sync(event.partial),projection.projectThinkingDelta(event.contentIndex,event.delta,event.partial);break;case"thinking_end":if(!projection)break;projection.sync(event.partial),projection.finishThinking(event.contentIndex,event.content,event.partial);break;case"done":{projection??=new StreamMessageProjection(outerStream,event.message),flushParser(),projection.finalizeDanglingToolCalls();let message=projection.finalize(event.message,sawToolCall),reason=(sawToolCall||projection.hasFinalizedToolCallContent())&&(event.reason==="stop"||event.reason==="length")?"toolUse":event.reason;outerStream.push({type:"done",reason,message}),outerStream.end();return}case"error":{if(!projection){outerStream.push(event),outerStream.end(event.error);return}projection.sync(event.error),flushParser(),projection.finalizeDanglingToolCalls();let message=projection.finalize(event.error,sawToolCall);if(projection.hasFinalizedToolCallContent()){let recovered={...message,stopReason:"toolUse"};outerStream.push({type:"done",reason:"toolUse",message:recovered}),outerStream.end(recovered);return}outerStream.push({type:"error",reason:event.reason,error:message}),outerStream.end(message);return}case"toolcall_start":case"toolcall_delta":case"toolcall_end":break}let innerMessage=await innerStream.result();projection??=new StreamMessageProjection(outerStream,innerMessage),flushParser(),projection.finalizeDanglingToolCalls(),outerStream.end(projection.finalize(innerMessage,sawToolCall))}catch(error){flushParser(),projection??=new StreamMessageProjection(outerStream,await innerStream.result()),projection.finalizeDanglingToolCalls();let fallback=projection.message;fallback.stopReason="error",fallback.errorMessage=error instanceof Error?error.message:JSON.stringify(error),outerStream.push({type:"error",reason:"error",error:fallback}),outerStream.end()}})(),outerStream}function getToolCallFormat(model){if(model.api!=="openai-completions")return;let format=model.compat?.toolCallFormat;if(format&&(format==="hermes"||format==="xml"||format==="morph-xml"||format==="yaml-xml"||format==="gemma4-delimiter"||format==="anthropic-xml"||format==="antml"||format==="kimi-xtml"))return format}function shouldRecoverTextToolCalls(model){return getToolCallFormat(model)!==void 0?!1:model.recoverTextToolCalls!==void 0?typeof model.recoverTextToolCalls=="boolean"?model.recoverTextToolCalls:!1:model.api==="cursor-agent"?!1:CLAUDE_MODEL_ID_PATTERN.test(model.id)||KIMI_MODEL_ID_PATTERN.test(model.id)}var CLAUDE_MODEL_ID_PATTERN=/(^|[^a-z0-9])claude([^a-z0-9]|$)/i,KIMI_MODEL_ID_PATTERN=/(^|[^a-z0-9])kimi([^a-z0-9]|$)/i;function hasKimiTextToolCallRecovery(model){return KIMI_MODEL_ID_PATTERN.test(model.id)}function wrapStreamWithModelRecovery(innerStream,model,tools){let recoveredStream=hasKimiTextToolCallRecovery(model)?wrapStreamWithKimiThinkingRecovery(innerStream):innerStream;return!shouldRecoverTextToolCalls(model)||tools.length===0?recoveredStream:wrapStreamWithInvokeRecovery(recoveredStream,tools,hasKimiTextToolCallRecovery(model)?{createParser:createXtmlRecoveryStreamParser,protocol:"kimi-xtml"}:void 0)}function cloneTextContent(content){return{type:"text",text:content.text,...content.textSignature===void 0?{}:{textSignature:content.textSignature}}}function cloneThinkingContent(content){return{type:"thinking",thinking:content.thinking,...content.thinkingSignature===void 0?{}:{thinkingSignature:content.thinkingSignature},...content.redacted===void 0?{}:{redacted:content.redacted}}}function cloneToolCall2(toolCall){return{type:"toolCall",id:toolCall.id,name:toolCall.name,arguments:structuredClone(toolCall.arguments),...toolCall.thoughtSignature===void 0?{}:{thoughtSignature:toolCall.thoughtSignature},...toolCall.namespace===void 0?{}:{namespace:toolCall.namespace}}}function cloneStartMessage(message){return{role:"assistant",content:[],api:message.api,provider:message.provider,model:message.model,...message.responseModel===void 0?{}:{responseModel:message.responseModel},...message.responseId===void 0?{}:{responseId:message.responseId},...message.providerThinkingLevel===void 0?{}:{providerThinkingLevel:message.providerThinkingLevel},...message.diagnostics===void 0?{}:{diagnostics:structuredClone(message.diagnostics)},usage:structuredClone(message.usage),stopReason:"pending",timestamp:message.timestamp}}function assertContentIndex(contentIndex){if(!Number.isSafeInteger(contentIndex)||contentIndex<0)throw new Error(`Invalid assistant message frame contentIndex: ${contentIndex}`)}function eventBlock(event){assertContentIndex(event.contentIndex);let block=event.partial.content[event.contentIndex];if(!block)throw new Error(`${event.type} event has no content block at index ${event.contentIndex}`);return block}function serializedArguments(argumentsValue){let serialized=JSON.stringify(argumentsValue);if(serialized===void 0)throw new Error("Tool-call arguments are not JSON-serializable");return serialized}var EMPTY_PARSED_TOOL_ARGUMENTS=serializedArguments(parseStreamingJson(""));function isJsonPrefix(snapshot,current){if(typeof snapshot=="string")return typeof current=="string"&&current.startsWith(snapshot);if(Array.isArray(snapshot))return Array.isArray(current)&&snapshot.length<=current.length&&snapshot.every((value,index)=>isJsonPrefix(value,current[index]));if(typeof snapshot!="object"||snapshot===null)return Object.is(snapshot,current);if(typeof current!="object"||current===null||Array.isArray(current))return!1;let currentRecord=current;return Object.entries(snapshot).every(([key,value])=>Object.hasOwn(currentRecord,key)&&isJsonPrefix(value,currentRecord[key]))}var AssistantMessageFrameEncoder=class{constructor(){this.started=!1,this.terminal=!1,this.blocks=new Map}encode(event){if(this.terminal)throw new Error(`Assistant message event ${event.type} follows a terminal event`);switch(event.type){case"start":if(this.started)throw new Error("Assistant message stream contains more than one start event");return this.started=!0,{type:"start",partial:cloneStartMessage(event.partial)};case"done":if(!this.started)throw new Error("Assistant message done event appears before start");this.terminal=!0;return;case"error":this.terminal=!0;return}if(!this.started)throw new Error(`Assistant message ${event.type} event appears before start`);switch(event.type){case"text_start":{let content=eventBlock(event);if(content.type!=="text")throw new Error(`text_start event points to ${content.type} block at index ${event.contentIndex}`);return this.startBlock(event.contentIndex,{kind:"text",coveredChars:content.text.length,deltaChars:0}),{type:"text_start",contentIndex:event.contentIndex,content:cloneTextContent(content)}}case"text_delta":return this.encodeTextDelta(event.contentIndex,event.delta,"text");case"text_end":{let content=eventBlock(event);if(content.type!=="text")throw new Error(`text_end event points to ${content.type} block at index ${event.contentIndex}`);return this.endBlock(event.contentIndex,"text"),{type:"text_end",contentIndex:event.contentIndex,content:event.content,...content.textSignature===void 0?{}:{textSignature:content.textSignature}}}case"thinking_start":{let content=eventBlock(event);if(content.type!=="thinking")throw new Error(`thinking_start event points to ${content.type} block at index ${event.contentIndex}`);return this.startBlock(event.contentIndex,{kind:"thinking",coveredChars:content.thinking.length,deltaChars:0}),{type:"thinking_start",contentIndex:event.contentIndex,content:cloneThinkingContent(content)}}case"thinking_delta":return this.encodeTextDelta(event.contentIndex,event.delta,"thinking");case"thinking_end":{let content=eventBlock(event);if(content.type!=="thinking")throw new Error(`thinking_end event points to ${content.type} block at index ${event.contentIndex}`);return this.endBlock(event.contentIndex,"thinking"),{type:"thinking_end",contentIndex:event.contentIndex,content:event.content,...content.thinkingSignature===void 0?{}:{thinkingSignature:content.thinkingSignature},...content.redacted===void 0?{}:{redacted:content.redacted}}}case"toolcall_start":{let content=eventBlock(event);if(content.type!=="toolCall")throw new Error(`toolcall_start event points to ${content.type} block at index ${event.contentIndex}`);let snapshotArguments=serializedArguments(content.arguments),caughtUp=snapshotArguments===EMPTY_PARSED_TOOL_ARGUMENTS;return this.startBlock(event.contentIndex,{kind:"toolCall",caughtUp,catchupJson:"",snapshotArguments:caughtUp?"":snapshotArguments}),{type:"toolcall_start",contentIndex:event.contentIndex,toolCall:cloneToolCall2(content)}}case"toolcall_delta":{let state=this.block(event.contentIndex,"toolCall");if(state.kind!=="toolCall")throw new Error("Unreachable tool-call encoder state");if(state.caughtUp)return event.delta.length===0?void 0:{type:"toolcall_delta",contentIndex:event.contentIndex,delta:event.delta};state.catchupJson+=event.delta;let argumentsValue=parseStreamingJson(state.catchupJson);if(serializedArguments(argumentsValue)!==state.snapshotArguments){let snapshotArguments=parseStreamingJson(state.snapshotArguments);if(!isJsonPrefix(snapshotArguments,argumentsValue))return}state.caughtUp=!0,state.snapshotArguments="";let json=state.catchupJson;return state.catchupJson="",json.length===0?void 0:{type:"toolcall_checkpoint",contentIndex:event.contentIndex,json}}case"toolcall_end":{let content=eventBlock(event);if(content.type!=="toolCall")throw new Error(`toolcall_end event points to ${content.type} block at index ${event.contentIndex}`);if(event.toolCall.type!=="toolCall")throw new Error(`toolcall_end event has invalid tool call at index ${event.contentIndex}`);return this.endBlock(event.contentIndex,"toolCall"),{type:"toolcall_end",contentIndex:event.contentIndex,id:event.toolCall.id,name:event.toolCall.name,arguments:structuredClone(event.toolCall.arguments),...event.toolCall.thoughtSignature===void 0?{}:{thoughtSignature:event.toolCall.thoughtSignature},...event.toolCall.namespace===void 0?{}:{namespace:event.toolCall.namespace}}}}}startBlock(contentIndex,state){if(assertContentIndex(contentIndex),this.blocks.has(contentIndex))throw new Error(`Assistant message block ${contentIndex} starts more than once`);this.blocks.set(contentIndex,state)}block(contentIndex,kind){assertContentIndex(contentIndex);let state=this.blocks.get(contentIndex);if(state===void 0)throw new Error(`Assistant message ${kind} block ${contentIndex} has not started`);if(state.kind!==kind)throw new Error(`Assistant message block ${contentIndex} is ${state.kind}, not ${kind}`);return state}endBlock(contentIndex,kind){this.block(contentIndex,kind),this.blocks.delete(contentIndex)}encodeTextDelta(contentIndex,delta,kind){let state=this.block(contentIndex,kind);if(state.kind==="toolCall")throw new Error("Unreachable text encoder state");let deltaStart=state.deltaChars;state.deltaChars+=delta.length;let covered=Math.max(0,state.coveredChars-deltaStart);if(covered>=delta.length)return;let uncovered=covered===0?delta:delta.slice(covered);return kind==="text"?{type:"text_delta",contentIndex,delta:uncovered}:{type:"thinking_delta",contentIndex,delta:uncovered}}};function appendBlock(message,states,contentIndex,block,state){if(assertContentIndex(contentIndex),contentIndex!==message.content.length){let reason=contentIndex<message.content.length?"already exists":"would leave a gap";throw new Error(`Cannot start assistant message block at index ${contentIndex}: ${reason}`)}message.content.push(structuredClone(block)),states.set(contentIndex,state)}function activeBlock(message,states,contentIndex,expectedKind,frameType){assertContentIndex(contentIndex);let state=states.get(contentIndex),block=message.content[contentIndex];if(!state||!block)throw new Error(`${frameType} frame has no started block at index ${contentIndex}`);if(state.kind!==expectedKind||block.type!==expectedKind)throw new Error(`${frameType} frame expected ${expectedKind} block at index ${contentIndex}, found ${block.type}`);if(state.ended)throw new Error(`${frameType} frame follows the end of block at index ${contentIndex}`);return{block,state}}function reduceAssistantMessageFrames(frames){let message,frameBeforeStart,states=new Map;for(let frame of frames){if(frame.type==="start"){if(message)throw new Error("Assistant message frame sequence contains more than one start frame");if(frameBeforeStart!==void 0)throw new Error(`${frameBeforeStart} frame appears before the start frame`);message=structuredClone(frame.partial);continue}if(!message){frameBeforeStart??=frame.type;continue}switch(frame.type){case"text_start":if(frame.content.type!=="text")throw new Error(`text_start frame contains ${frame.content.type} content`);appendBlock(message,states,frame.contentIndex,frame.content,{kind:"text",ended:!1});break;case"text_delta":{let{block}=activeBlock(message,states,frame.contentIndex,"text",frame.type);if(block.type!=="text")throw new Error("Unreachable text frame state");block.text+=frame.delta;break}case"text_end":{let{block,state}=activeBlock(message,states,frame.contentIndex,"text",frame.type);if(block.type!=="text")throw new Error("Unreachable text frame state");block.text=frame.content,delete block.textSignature,frame.textSignature!==void 0&&(block.textSignature=frame.textSignature),state.ended=!0;break}case"thinking_start":if(frame.content.type!=="thinking")throw new Error(`thinking_start frame contains ${frame.content.type} content`);appendBlock(message,states,frame.contentIndex,frame.content,{kind:"thinking",ended:!1});break;case"thinking_delta":{let{block}=activeBlock(message,states,frame.contentIndex,"thinking",frame.type);if(block.type!=="thinking")throw new Error("Unreachable thinking frame state");block.thinking+=frame.delta;break}case"thinking_end":{let{block,state}=activeBlock(message,states,frame.contentIndex,"thinking",frame.type);if(block.type!=="thinking")throw new Error("Unreachable thinking frame state");block.thinking=frame.content,delete block.thinkingSignature,delete block.redacted,frame.thinkingSignature!==void 0&&(block.thinkingSignature=frame.thinkingSignature),frame.redacted!==void 0&&(block.redacted=frame.redacted),state.ended=!0;break}case"toolcall_start":if(frame.toolCall.type!=="toolCall")throw new Error(`toolcall_start frame contains ${frame.toolCall.type} content`);appendBlock(message,states,frame.contentIndex,frame.toolCall,{kind:"toolCall",ended:!1,json:""});break;case"toolcall_checkpoint":{let{block,state}=activeBlock(message,states,frame.contentIndex,"toolCall",frame.type);if(block.type!=="toolCall"||state.kind!=="toolCall")throw new Error("Unreachable tool-call checkpoint state");state.json=frame.json,block.arguments=parseStreamingJson(frame.json);break}case"toolcall_delta":{let{block,state}=activeBlock(message,states,frame.contentIndex,"toolCall",frame.type);if(block.type!=="toolCall"||state.kind!=="toolCall")throw new Error("Unreachable tool-call frame state");state.json+=frame.delta;break}case"toolcall_end":{let{block,state}=activeBlock(message,states,frame.contentIndex,"toolCall",frame.type);if(block.type!=="toolCall")throw new Error("Unreachable tool-call frame state");block.id=frame.id,block.name=frame.name,block.arguments=structuredClone(frame.arguments),delete block.thoughtSignature,delete block.namespace,frame.thoughtSignature!==void 0&&(block.thoughtSignature=frame.thoughtSignature),frame.namespace!==void 0&&(block.namespace=frame.namespace),state.ended=!0;break}}}if(message){for(let[contentIndex,state]of states){if(state.kind!=="toolCall"||state.ended||state.json.length===0)continue;let block=message.content[contentIndex];if(block?.type!=="toolCall")throw new Error("Unreachable tool-call frame state");block.arguments=parseStreamingJson(state.json)}return message}}var kCursorExecResolved=Symbol.for("provider.block.cursorExecResolved");function isCursorExecResolved(block){return block?.[kCursorExecResolved]===!0}function copyCursorExecResolved(target,source){source[kCursorExecResolved]===!0&&(target[kCursorExecResolved]=!0)}function dropFailedAssistantTurns(messages){let callIdsByKeptAssistants=new Set,callIdsByFailedAssistants=new Set;for(let message of messages){let assistant=asAssistantTurn(message);if(!assistant)continue;let declared=isFailedStop(assistant.stopReason)?callIdsByFailedAssistants:callIdsByKeptAssistants;for(let block of assistant.content)block.type==="toolCall"&&typeof block.id=="string"&&declared.add(block.id)}for(let id of callIdsByKeptAssistants)callIdsByFailedAssistants.delete(id);return messages.filter(message=>{let assistant=asAssistantTurn(message);return assistant?!isFailedStop(assistant.stopReason):message.role==="toolResult"&&"toolCallId"in message&&typeof message.toolCallId=="string"?!callIdsByFailedAssistants.has(message.toolCallId):!0})}function asAssistantTurn(message){if(message.role==="assistant"&&!(!("content"in message)||!Array.isArray(message.content)))return{stopReason:"stopReason"in message?message.stopReason:void 0,content:message.content}}function isFailedStop(stopReason){return stopReason==="error"||stopReason==="aborted"}var OVERFLOW_PATTERNS=[/^Context window exhausted: /,/^The conversation is too long to resend \(about \d+ tokens, limit \d+\)/,/prompt is too long/i,/request_too_large/i,/input is too long for requested model/i,/exceeds (?:(?:the|this) )?(?:model'?s )?context window/i,/exceeds (?:the )?(?:model'?s )?maximum context length(?: of [\d,]+ tokens?|\s*\([\d,]+\))/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds (?:the )?maximum allowed input length of [\d,]+ tokens?/i,/input \(\d+ tokens\) is longer than the model'?s context length \(\d+ tokens\)/i,/model_max_prompt_tokens_exceeded|exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/too large for model with \d+ maximum context length/i,/prompt has [\d,]+ tokens?, but the configured context size is [\d,]+ tokens?/i,/model_context_window_exceeded/i,/prompt too long; exceeded (?:max )?context length/i,/range of input length should be/i,/context[_ ]length[_ ]exceeded/i,/too many tokens/i,/token limit exceeded/i,/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i,/(?:request[ _])?(?:body|entity|payload)[_ ]too[_ ]large/i,/Request payload is \d+ (?:bytes, over the \d+ byte|tokens, over the \d+ token) limit Kiro accepts\./,/Model context limit reached\. Conversation size exceeds model capacity\./],NON_OVERFLOW_PATTERNS=[/^(Throttling error|Service unavailable):/i,/rate limit/i,/too many requests/i,/tokens per (?:min|minute|hour|day)/i,/\bTPM\b/i,/\bRPM\b/i,/quota exceeded/i,/retry (?:after|in) \d/i,/^429\b/,/status code 429/i,/overloaded/i],RESOURCE_EXHAUSTED_PATTERN=/resource.?exhausted/i;function isContextOverflow(message,contextWindow){if(message.stopReason==="error"&&message.errorMessage){let isNonOverflow=NON_OVERFLOW_PATTERNS.some(p=>p.test(message.errorMessage));if(!isNonOverflow&&OVERFLOW_PATTERNS.some(p=>p.test(message.errorMessage)))return!0;let usage=message.usage,hasTokenEvidence=(usage.totalTokens||usage.input+usage.output+usage.cacheRead+usage.cacheWrite)>0;if(!isNonOverflow&&hasTokenEvidence&&RESOURCE_EXHAUSTED_PATTERN.test(message.errorMessage)&&(contextWindow===void 0||contextWindow<=0||cursorZeroTokenCount(message)>=contextWindow*.5))return!0}return!!(contextWindow&&message.stopReason==="stop"&&message.usage.input+message.usage.cacheRead>contextWindow||contextWindow&&message.stopReason==="length"&&message.usage.output===0&&message.usage.input+message.usage.cacheRead>=contextWindow*.99)}function isRecoverableLength(message,desiredMaxOutput){return message.stopReason==="length"&&desiredMaxOutput>0&&message.usage.output<desiredMaxOutput}function getOverflowPatterns(){return[...OVERFLOW_PATTERNS]}function cursorZeroTokenCount(message){let usage=message.usage;return usage?usage.totalTokens||(usage.input??0)+(usage.output??0)+(usage.cacheRead??0)+(usage.cacheWrite??0):0}function isCursorPayloadResourceExhausted(message,_estimateTokens){return message.stopReason!=="error"||!/resource.?exhausted/i.test(message.errorMessage||"")?!1:!(cursorZeroTokenCount(message)>0)}function isCursorQuotaResourceExhausted(message,contextWindow){let tokens=cursorZeroTokenCount(message);return message.stopReason==="error"&&RESOURCE_EXHAUSTED_PATTERN.test(message.errorMessage||"")&&contextWindow>0&&tokens>0&&tokens<contextWindow*.5}function isCursorZeroTokenResourceExhausted(message){return message.stopReason!=="error"||!/resource.?exhausted/i.test(message.errorMessage||"")?!1:!(cursorZeroTokenCount(message)>0)}function shouldSkipProviderFallbackForCursorZeroRe(options){return options?.sameModelRemint===!0}function shouldRetryOverflowWithoutCompact(compacted,errorMessage){return compacted?!1:/Nothing to compact/i.test(errorMessage||"")}function cursorOverflowCompactionSettings(settings,provider,reason){return reason!=="overflow"||provider!=="cursor"&&provider!=="cursor-cli-oauth"?settings:{...settings,keepRecentTokens:0,restorationEnabled:!1}}var TURN_RETRY_SUPPRESSION_PREFIX="senpi:no-turn-retry:";function stripTurnRetrySuppressionPrefix(message){return message.replaceAll(TURN_RETRY_SUPPRESSION_PREFIX,"")}var WEBSOCKET_CLOSED_PATTERN=/^WebSocket closed\b/i,WEBSOCKET_ERROR_PATTERN=/^WebSocket error$/i,WEBSOCKET_CONNECT_TIMEOUT_PATTERN=/^WebSocket connect timeout after (\d+)ms/i,RECOVERY_SENTENCE={"no-fallback-configured":"No fallback model is configured for it, so nothing could take the turn over: run /fallback to add one, or send the message again to continue from the partial reply.","chain-exhausted":"Every model in its fallback chain was tried as well: run /fallback to review the chain, or send the message again to continue from the partial reply."};function transportSymptom(errorMessage,subject){if(WEBSOCKET_CLOSED_PATTERN.test(errorMessage))return`The connection to ${subject} dropped before the reply finished (${errorMessage}).`;if(WEBSOCKET_ERROR_PATTERN.test(errorMessage))return`The connection to ${subject} reported an error before the reply finished (${errorMessage}).`;let connectTimeout=WEBSOCKET_CONNECT_TIMEOUT_PATTERN.exec(errorMessage);if(connectTimeout)return`${subject.replace(/^the provider/,"The provider")} did not accept the connection within ${formatStallDuration(Number(connectTimeout[1]))}.`}function describeProviderFailureForUser(errorMessage,options={}){if(!errorMessage)return;let message=stripTurnRetrySuppressionPrefix(errorMessage).trim();if(!message)return;let stall=describeProviderStallForUser(message,options);if(stall!==void 0)return stall;let subject=options.model?`the provider for ${options.model}`:"the provider",symptom=transportSymptom(message,subject);if(symptom===void 0)return;let sentences=[symptom],attempts=options.attempts??0;return attempts>0&&sentences.push(`Retried ${attempts} time${attempts===1?"":"s"} on the same model with the same result.`),options.recovery&&sentences.push(RECOVERY_SENTENCE[options.recovery]),sentences.join(" ")}var ANTHROPIC_POLICY_REFUSAL_PATTERN=/This request triggered restrictions on [\s\S]+? and was blocked under Anthropic's Usage Policy\b/i;function isClassifierRefusal(message){return message.stopReason!=="error"&&message.stopReason!=="toolUse"?!1:message.stopDetails?.type==="refusal"||message.stopDetails?.type==="sensitive"?!0:message.errorMessage?ANTHROPIC_POLICY_REFUSAL_PATTERN.test(message.errorMessage):!1}var TOOL_RESULT_PLACEHOLDER="Tool output unavailable (context compacted)";function incompleteToolCallRetryText(name,errorMessage){return errorMessage!==void 0?`${errorMessage}${errorMessage.endsWith(".")?"":"."} Re-issue the tool call with complete arguments.`:`Tool call "${name}" was not executed: the response ended before the tool call was complete. Re-issue the tool call with complete arguments.`}function repairOrphanedToolResults(messages){let toolCallIds=new Set,toolResultIds=new Set;for(let message of messages){if(message.role==="assistant")for(let block of message.content)block.type==="toolCall"&&toolCallIds.add(block.id);message.role==="toolResult"&&toolResultIds.add(message.toolCallId)}let output=[],dangling=new Set([...toolCallIds].filter(id=>!toolResultIds.has(id)));for(let message of messages){if(message.role==="toolResult"){if(!toolCallIds.has(message.toolCallId)){output.push({...message,content:[{type:"text",text:TOOL_RESULT_PLACEHOLDER}]});continue}output.push(message);continue}if(output.push(message),message.role==="assistant"){if(message.stopReason==="error"||message.stopReason==="aborted")continue;for(let block of message.content){if(block.type!=="toolCall"||!dangling.has(block.id))continue;let incomplete=block.incomplete===!0,text=incomplete?incompleteToolCallRetryText(block.name,block.errorMessage):TOOL_RESULT_PLACEHOLDER;output.push({role:"toolResult",toolCallId:block.id,toolName:block.name,content:[{type:"text",text}],isError:incomplete,timestamp:message.timestamp?message.timestamp+1:Date.now()}),dangling.delete(block.id)}}}return output}function StringEnum(values,options){return typebox_exports.Unsafe({type:"string",enum:values,...options?.description&&{description:options.description},...options?.default&&{default:options.default}})}var INVISIBLE_FORMAT_CHARS=new RegExp("\\p{Cf}","gu");function hasVisibleText(text){return text.replace(INVISIBLE_FORMAT_CHARS,"").trim().length>0}function hasVisibleAssistantContent(message){return message.content.some(block=>block.type==="toolCall"||block.type==="text"&&hasVisibleText(block.text))}export{create,messageDesc,fromBinary,fileDesc,toBinary,measureCursorModelInputSerializedBytes,measureCursorHistorySerializedBytes,piReadArgs,piLsPath,piLimit,piTimeout,composeShellCommand,omitUndefinedArgs,registerPromptCacheWarmer,warmPromptCache,fauxText,fauxThinking,fauxToolCall,fauxAssistantMessage,createFauxCore,getRegisteredFauxProvider,fauxOverflowError,fauxProvider,installProviderScopeAccessor,registerApiProvider,registerBuiltinApiProvider,getApiProvider,getApiProviders,unregisterApiProviders,clearApiProviders,envApiKeyAuth,lazyOAuth,CURSOR_MODEL_CAPABILITIES,parseCursorVariantId,getCursorVariantAlias,getCursorBaseIdForVariant,getCursorCapabilityForBase,deriveCursorVariantAliases,normalizeCursorCatalog,resolveCursorSelectionDescriptor,renderCursorCliModelString,parseEndpointReasoningEfforts,ANTHROPIC_AUTH_TOKEN_ENV,ANTHROPIC_OAUTH_TOKEN_ENV,ANTHROPIC_API_KEY_ENV,getApiKeyEnvVars,findEnvKeys,getEnvApiKey,createImagesModels,createImagesProvider,supportsAllowedToolChoice,createXtmlRecoveryStreamParser,wrapStreamWithInvokeRecovery,Compile,compile_exports,validateToolCall,validateToolArguments,require_dist,getProtocol,transformContext,wrapStreamWithToolCallMiddleware,getToolCallFormat,shouldRecoverTextToolCalls,hasKimiTextToolCallRecovery,wrapStreamWithModelRecovery,AssistantMessageFrameEncoder,reduceAssistantMessageFrames,kCursorExecResolved,isCursorExecResolved,copyCursorExecResolved,dropFailedAssistantTurns,isContextOverflow,isRecoverableLength,getOverflowPatterns,isCursorPayloadResourceExhausted,isCursorQuotaResourceExhausted,isCursorZeroTokenResourceExhausted,shouldSkipProviderFallbackForCursorZeroRe,shouldRetryOverflowWithoutCompact,cursorOverflowCompactionSettings,TURN_RETRY_SUPPRESSION_PREFIX,stripTurnRetrySuppressionPrefix,describeProviderFailureForUser,isClassifierRefusal,contentText,TOOL_RESULT_PLACEHOLDER,repairOrphanedToolResults,StringEnum,hasVisibleText,hasVisibleAssistantContent};
326
+ ${context.systemPrompt}`:toolPrompt)}return transformed}function transformMessage(message,protocol){switch(message.role){case"assistant":return transformAssistantMessage(message,protocol);case"toolResult":return transformToolResultMessage(message,protocol);default:return message}}function transformAssistantMessage(message,protocol){if(!message.content.some(block=>block.type==="toolCall"))return message;let newContent=[];for(let block of message.content)switch(block.type){case"text":{newContent.push(block);break}case"thinking":{newContent.push(block);break}case"toolCall":{let toolCallText=protocol.formatToolCall(block.name,block.arguments);newContent.push({type:"text",text:toolCallText});break}}return{...message,content:newContent}}function transformToolResultMessage(message,protocol){return{role:"user",content:protocol.formatToolResponse(message.toolName,message.toolCallId,message.content),timestamp:message.timestamp}}function wrapStreamWithToolCallMiddleware(innerStream,protocol,tools){let outerStream=new AssistantMessageEventStream,parser=protocol.createStreamParser(tools);return(async()=>{let projection=null,sawToolCall=!1,parserHasPendingInput=!1,flushParser=()=>{if(!projection||!parserHasPendingInput)return;let result=projection.projectParserEvents(parser.finish());sawToolCall=sawToolCall||result.sawToolCall,projection.finishText(),parserHasPendingInput=!1};try{for await(let event of innerStream)switch(event.type){case"start":projection=new StreamMessageProjection(outerStream,event.partial),outerStream.push({type:"start",partial:projection.message});break;case"text_start":if(!projection)break;projection.sync(event.partial),projection.startText(event.contentIndex,event.partial.content[event.contentIndex]);break;case"text_delta":{if(!projection)break;projection.sync(event.partial),event.delta.length>0&&(parserHasPendingInput=!0);let result=projection.projectParserEvents(parser.feed(event.delta));sawToolCall=sawToolCall||result.sawToolCall;break}case"text_end":if(!projection)break;projection.sync(event.partial),flushParser();break;case"thinking_start":if(!projection)break;projection.sync(event.partial),projection.startThinking(event.contentIndex,event.partial);break;case"thinking_delta":if(!projection)break;projection.sync(event.partial),projection.projectThinkingDelta(event.contentIndex,event.delta,event.partial);break;case"thinking_end":if(!projection)break;projection.sync(event.partial),projection.finishThinking(event.contentIndex,event.content,event.partial);break;case"done":{projection??=new StreamMessageProjection(outerStream,event.message),flushParser(),projection.finalizeDanglingToolCalls();let message=projection.finalize(event.message,sawToolCall),reason=(sawToolCall||projection.hasFinalizedToolCallContent())&&(event.reason==="stop"||event.reason==="length")?"toolUse":event.reason;outerStream.push({type:"done",reason,message}),outerStream.end();return}case"error":{if(!projection){outerStream.push(event),outerStream.end(event.error);return}projection.sync(event.error),flushParser(),projection.finalizeDanglingToolCalls();let message=projection.finalize(event.error,sawToolCall);if(projection.hasFinalizedToolCallContent()){let recovered={...message,stopReason:"toolUse"};outerStream.push({type:"done",reason:"toolUse",message:recovered}),outerStream.end(recovered);return}outerStream.push({type:"error",reason:event.reason,error:message}),outerStream.end(message);return}case"toolcall_start":case"toolcall_delta":case"toolcall_end":break}let innerMessage=await innerStream.result();projection??=new StreamMessageProjection(outerStream,innerMessage),flushParser(),projection.finalizeDanglingToolCalls(),outerStream.end(projection.finalize(innerMessage,sawToolCall))}catch(error){flushParser(),projection??=new StreamMessageProjection(outerStream,await innerStream.result()),projection.finalizeDanglingToolCalls();let fallback=projection.message;fallback.stopReason="error",fallback.errorMessage=error instanceof Error?error.message:JSON.stringify(error),outerStream.push({type:"error",reason:"error",error:fallback}),outerStream.end()}})(),outerStream}function getToolCallFormat(model){if(model.api!=="openai-completions")return;let format=model.compat?.toolCallFormat;if(format&&(format==="hermes"||format==="xml"||format==="morph-xml"||format==="yaml-xml"||format==="gemma4-delimiter"||format==="anthropic-xml"||format==="antml"||format==="kimi-xtml"))return format}function shouldRecoverTextToolCalls(model){return getToolCallFormat(model)!==void 0?!1:model.recoverTextToolCalls!==void 0?typeof model.recoverTextToolCalls=="boolean"?model.recoverTextToolCalls:!1:model.api==="cursor-agent"?!1:CLAUDE_MODEL_ID_PATTERN.test(model.id)||KIMI_MODEL_ID_PATTERN.test(model.id)}var CLAUDE_MODEL_ID_PATTERN=/(^|[^a-z0-9])claude([^a-z0-9]|$)/i,KIMI_MODEL_ID_PATTERN=/(^|[^a-z0-9])kimi([^a-z0-9]|$)/i;function hasKimiTextToolCallRecovery(model){return KIMI_MODEL_ID_PATTERN.test(model.id)}function wrapStreamWithModelRecovery(innerStream,model,tools){let recoveredStream=hasKimiTextToolCallRecovery(model)?wrapStreamWithKimiThinkingRecovery(innerStream):innerStream;return!shouldRecoverTextToolCalls(model)||tools.length===0?recoveredStream:wrapStreamWithInvokeRecovery(recoveredStream,tools,hasKimiTextToolCallRecovery(model)?{createParser:createXtmlRecoveryStreamParser,protocol:"kimi-xtml"}:void 0)}function cloneTextContent(content){return{type:"text",text:content.text,...content.textSignature===void 0?{}:{textSignature:content.textSignature}}}function cloneThinkingContent(content){return{type:"thinking",thinking:content.thinking,...content.thinkingSignature===void 0?{}:{thinkingSignature:content.thinkingSignature},...content.redacted===void 0?{}:{redacted:content.redacted}}}function cloneToolCall2(toolCall){return{type:"toolCall",id:toolCall.id,name:toolCall.name,arguments:structuredClone(toolCall.arguments),...toolCall.thoughtSignature===void 0?{}:{thoughtSignature:toolCall.thoughtSignature},...toolCall.namespace===void 0?{}:{namespace:toolCall.namespace}}}function cloneStartMessage(message){return{role:"assistant",content:[],api:message.api,provider:message.provider,model:message.model,...message.responseModel===void 0?{}:{responseModel:message.responseModel},...message.responseId===void 0?{}:{responseId:message.responseId},...message.providerThinkingLevel===void 0?{}:{providerThinkingLevel:message.providerThinkingLevel},...message.diagnostics===void 0?{}:{diagnostics:structuredClone(message.diagnostics)},usage:structuredClone(message.usage),stopReason:"pending",timestamp:message.timestamp}}function assertContentIndex(contentIndex){if(!Number.isSafeInteger(contentIndex)||contentIndex<0)throw new Error(`Invalid assistant message frame contentIndex: ${contentIndex}`)}function eventBlock(event){assertContentIndex(event.contentIndex);let block=event.partial.content[event.contentIndex];if(!block)throw new Error(`${event.type} event has no content block at index ${event.contentIndex}`);return block}function serializedArguments(argumentsValue){let serialized=JSON.stringify(argumentsValue);if(serialized===void 0)throw new Error("Tool-call arguments are not JSON-serializable");return serialized}var EMPTY_PARSED_TOOL_ARGUMENTS=serializedArguments(parseStreamingJson(""));function isJsonPrefix(snapshot,current){if(typeof snapshot=="string")return typeof current=="string"&&current.startsWith(snapshot);if(Array.isArray(snapshot))return Array.isArray(current)&&snapshot.length<=current.length&&snapshot.every((value,index)=>isJsonPrefix(value,current[index]));if(typeof snapshot!="object"||snapshot===null)return Object.is(snapshot,current);if(typeof current!="object"||current===null||Array.isArray(current))return!1;let currentRecord=current;return Object.entries(snapshot).every(([key,value])=>Object.hasOwn(currentRecord,key)&&isJsonPrefix(value,currentRecord[key]))}var AssistantMessageFrameEncoder=class{constructor(){this.started=!1,this.terminal=!1,this.blocks=new Map}encode(event){if(this.terminal)throw new Error(`Assistant message event ${event.type} follows a terminal event`);switch(event.type){case"start":if(this.started)throw new Error("Assistant message stream contains more than one start event");return this.started=!0,{type:"start",partial:cloneStartMessage(event.partial)};case"done":if(!this.started)throw new Error("Assistant message done event appears before start");this.terminal=!0;return;case"error":this.terminal=!0;return}if(!this.started)throw new Error(`Assistant message ${event.type} event appears before start`);switch(event.type){case"text_start":{let content=eventBlock(event);if(content.type!=="text")throw new Error(`text_start event points to ${content.type} block at index ${event.contentIndex}`);return this.startBlock(event.contentIndex,{kind:"text",coveredChars:content.text.length,deltaChars:0}),{type:"text_start",contentIndex:event.contentIndex,content:cloneTextContent(content)}}case"text_delta":return this.encodeTextDelta(event.contentIndex,event.delta,"text");case"text_end":{let content=eventBlock(event);if(content.type!=="text")throw new Error(`text_end event points to ${content.type} block at index ${event.contentIndex}`);return this.endBlock(event.contentIndex,"text"),{type:"text_end",contentIndex:event.contentIndex,content:event.content,...content.textSignature===void 0?{}:{textSignature:content.textSignature}}}case"thinking_start":{let content=eventBlock(event);if(content.type!=="thinking")throw new Error(`thinking_start event points to ${content.type} block at index ${event.contentIndex}`);return this.startBlock(event.contentIndex,{kind:"thinking",coveredChars:content.thinking.length,deltaChars:0}),{type:"thinking_start",contentIndex:event.contentIndex,content:cloneThinkingContent(content)}}case"thinking_delta":return this.encodeTextDelta(event.contentIndex,event.delta,"thinking");case"thinking_end":{let content=eventBlock(event);if(content.type!=="thinking")throw new Error(`thinking_end event points to ${content.type} block at index ${event.contentIndex}`);return this.endBlock(event.contentIndex,"thinking"),{type:"thinking_end",contentIndex:event.contentIndex,content:event.content,...content.thinkingSignature===void 0?{}:{thinkingSignature:content.thinkingSignature},...content.redacted===void 0?{}:{redacted:content.redacted}}}case"toolcall_start":{let content=eventBlock(event);if(content.type!=="toolCall")throw new Error(`toolcall_start event points to ${content.type} block at index ${event.contentIndex}`);let snapshotArguments=serializedArguments(content.arguments),caughtUp=snapshotArguments===EMPTY_PARSED_TOOL_ARGUMENTS;return this.startBlock(event.contentIndex,{kind:"toolCall",caughtUp,catchupJson:"",snapshotArguments:caughtUp?"":snapshotArguments}),{type:"toolcall_start",contentIndex:event.contentIndex,toolCall:cloneToolCall2(content)}}case"toolcall_delta":{let state=this.block(event.contentIndex,"toolCall");if(state.kind!=="toolCall")throw new Error("Unreachable tool-call encoder state");if(state.caughtUp)return event.delta.length===0?void 0:{type:"toolcall_delta",contentIndex:event.contentIndex,delta:event.delta};state.catchupJson+=event.delta;let argumentsValue=parseStreamingJson(state.catchupJson);if(serializedArguments(argumentsValue)!==state.snapshotArguments){let snapshotArguments=parseStreamingJson(state.snapshotArguments);if(!isJsonPrefix(snapshotArguments,argumentsValue))return}state.caughtUp=!0,state.snapshotArguments="";let json=state.catchupJson;return state.catchupJson="",json.length===0?void 0:{type:"toolcall_checkpoint",contentIndex:event.contentIndex,json}}case"toolcall_end":{let content=eventBlock(event);if(content.type!=="toolCall")throw new Error(`toolcall_end event points to ${content.type} block at index ${event.contentIndex}`);if(event.toolCall.type!=="toolCall")throw new Error(`toolcall_end event has invalid tool call at index ${event.contentIndex}`);return this.endBlock(event.contentIndex,"toolCall"),{type:"toolcall_end",contentIndex:event.contentIndex,id:event.toolCall.id,name:event.toolCall.name,arguments:structuredClone(event.toolCall.arguments),...event.toolCall.thoughtSignature===void 0?{}:{thoughtSignature:event.toolCall.thoughtSignature},...event.toolCall.namespace===void 0?{}:{namespace:event.toolCall.namespace}}}}}startBlock(contentIndex,state){if(assertContentIndex(contentIndex),this.blocks.has(contentIndex))throw new Error(`Assistant message block ${contentIndex} starts more than once`);this.blocks.set(contentIndex,state)}block(contentIndex,kind){assertContentIndex(contentIndex);let state=this.blocks.get(contentIndex);if(state===void 0)throw new Error(`Assistant message ${kind} block ${contentIndex} has not started`);if(state.kind!==kind)throw new Error(`Assistant message block ${contentIndex} is ${state.kind}, not ${kind}`);return state}endBlock(contentIndex,kind){this.block(contentIndex,kind),this.blocks.delete(contentIndex)}encodeTextDelta(contentIndex,delta,kind){let state=this.block(contentIndex,kind);if(state.kind==="toolCall")throw new Error("Unreachable text encoder state");let deltaStart=state.deltaChars;state.deltaChars+=delta.length;let covered=Math.max(0,state.coveredChars-deltaStart);if(covered>=delta.length)return;let uncovered=covered===0?delta:delta.slice(covered);return kind==="text"?{type:"text_delta",contentIndex,delta:uncovered}:{type:"thinking_delta",contentIndex,delta:uncovered}}};function appendBlock(message,states,contentIndex,block,state){if(assertContentIndex(contentIndex),contentIndex!==message.content.length){let reason=contentIndex<message.content.length?"already exists":"would leave a gap";throw new Error(`Cannot start assistant message block at index ${contentIndex}: ${reason}`)}message.content.push(structuredClone(block)),states.set(contentIndex,state)}function activeBlock(message,states,contentIndex,expectedKind,frameType){assertContentIndex(contentIndex);let state=states.get(contentIndex),block=message.content[contentIndex];if(!state||!block)throw new Error(`${frameType} frame has no started block at index ${contentIndex}`);if(state.kind!==expectedKind||block.type!==expectedKind)throw new Error(`${frameType} frame expected ${expectedKind} block at index ${contentIndex}, found ${block.type}`);if(state.ended)throw new Error(`${frameType} frame follows the end of block at index ${contentIndex}`);return{block,state}}function reduceAssistantMessageFrames(frames){let message,frameBeforeStart,states=new Map;for(let frame of frames){if(frame.type==="start"){if(message)throw new Error("Assistant message frame sequence contains more than one start frame");if(frameBeforeStart!==void 0)throw new Error(`${frameBeforeStart} frame appears before the start frame`);message=structuredClone(frame.partial);continue}if(!message){frameBeforeStart??=frame.type;continue}switch(frame.type){case"text_start":if(frame.content.type!=="text")throw new Error(`text_start frame contains ${frame.content.type} content`);appendBlock(message,states,frame.contentIndex,frame.content,{kind:"text",ended:!1});break;case"text_delta":{let{block}=activeBlock(message,states,frame.contentIndex,"text",frame.type);if(block.type!=="text")throw new Error("Unreachable text frame state");block.text+=frame.delta;break}case"text_end":{let{block,state}=activeBlock(message,states,frame.contentIndex,"text",frame.type);if(block.type!=="text")throw new Error("Unreachable text frame state");block.text=frame.content,delete block.textSignature,frame.textSignature!==void 0&&(block.textSignature=frame.textSignature),state.ended=!0;break}case"thinking_start":if(frame.content.type!=="thinking")throw new Error(`thinking_start frame contains ${frame.content.type} content`);appendBlock(message,states,frame.contentIndex,frame.content,{kind:"thinking",ended:!1});break;case"thinking_delta":{let{block}=activeBlock(message,states,frame.contentIndex,"thinking",frame.type);if(block.type!=="thinking")throw new Error("Unreachable thinking frame state");block.thinking+=frame.delta;break}case"thinking_end":{let{block,state}=activeBlock(message,states,frame.contentIndex,"thinking",frame.type);if(block.type!=="thinking")throw new Error("Unreachable thinking frame state");block.thinking=frame.content,delete block.thinkingSignature,delete block.redacted,frame.thinkingSignature!==void 0&&(block.thinkingSignature=frame.thinkingSignature),frame.redacted!==void 0&&(block.redacted=frame.redacted),state.ended=!0;break}case"toolcall_start":if(frame.toolCall.type!=="toolCall")throw new Error(`toolcall_start frame contains ${frame.toolCall.type} content`);appendBlock(message,states,frame.contentIndex,frame.toolCall,{kind:"toolCall",ended:!1,json:""});break;case"toolcall_checkpoint":{let{block,state}=activeBlock(message,states,frame.contentIndex,"toolCall",frame.type);if(block.type!=="toolCall"||state.kind!=="toolCall")throw new Error("Unreachable tool-call checkpoint state");state.json=frame.json,block.arguments=parseStreamingJson(frame.json);break}case"toolcall_delta":{let{block,state}=activeBlock(message,states,frame.contentIndex,"toolCall",frame.type);if(block.type!=="toolCall"||state.kind!=="toolCall")throw new Error("Unreachable tool-call frame state");state.json+=frame.delta;break}case"toolcall_end":{let{block,state}=activeBlock(message,states,frame.contentIndex,"toolCall",frame.type);if(block.type!=="toolCall")throw new Error("Unreachable tool-call frame state");block.id=frame.id,block.name=frame.name,block.arguments=structuredClone(frame.arguments),delete block.thoughtSignature,delete block.namespace,frame.thoughtSignature!==void 0&&(block.thoughtSignature=frame.thoughtSignature),frame.namespace!==void 0&&(block.namespace=frame.namespace),state.ended=!0;break}}}if(message){for(let[contentIndex,state]of states){if(state.kind!=="toolCall"||state.ended||state.json.length===0)continue;let block=message.content[contentIndex];if(block?.type!=="toolCall")throw new Error("Unreachable tool-call frame state");block.arguments=parseStreamingJson(state.json)}return message}}var kCursorExecResolved=Symbol.for("provider.block.cursorExecResolved");function isCursorExecResolved(block){return block?.[kCursorExecResolved]===!0}function copyCursorExecResolved(target,source){source[kCursorExecResolved]===!0&&(target[kCursorExecResolved]=!0)}function dropFailedAssistantTurns(messages){let callIdsByKeptAssistants=new Set,callIdsByFailedAssistants=new Set;for(let message of messages){let assistant=asAssistantTurn(message);if(!assistant)continue;let declared=isFailedStop(assistant.stopReason)?callIdsByFailedAssistants:callIdsByKeptAssistants;for(let block of assistant.content)block.type==="toolCall"&&typeof block.id=="string"&&declared.add(block.id)}for(let id of callIdsByKeptAssistants)callIdsByFailedAssistants.delete(id);return messages.filter(message=>{let assistant=asAssistantTurn(message);return assistant?!isFailedStop(assistant.stopReason):message.role==="toolResult"&&"toolCallId"in message&&typeof message.toolCallId=="string"?!callIdsByFailedAssistants.has(message.toolCallId):!0})}function asAssistantTurn(message){if(message.role==="assistant"&&!(!("content"in message)||!Array.isArray(message.content)))return{stopReason:"stopReason"in message?message.stopReason:void 0,content:message.content}}function isFailedStop(stopReason){return stopReason==="error"||stopReason==="aborted"}var OVERFLOW_PATTERNS=[/^Context window exhausted: /,/^The conversation is too long to resend \(about \d+ tokens, limit \d+\)/,/prompt is too long/i,/request_too_large/i,/input is too long for requested model/i,/exceeds (?:(?:the|this) )?(?:model'?s )?context window/i,/exceeds (?:the )?(?:model'?s )?maximum context length(?: of [\d,]+ tokens?|\s*\([\d,]+\))/i,/input token count.*exceeds the maximum/i,/maximum prompt length is \d+/i,/reduce the length of the messages/i,/maximum context length is \d+ tokens/i,/exceeds (?:the )?maximum allowed input length of [\d,]+ tokens?/i,/input \(\d+ tokens\) is longer than the model'?s context length \(\d+ tokens\)/i,/model_max_prompt_tokens_exceeded|exceeds the limit of \d+/i,/exceeds the available context size/i,/greater than the context length/i,/context window exceeds limit/i,/exceeded model token limit/i,/too large for model with \d+ maximum context length/i,/prompt has [\d,]+ tokens?, but the configured context size is [\d,]+ tokens?/i,/model_context_window_exceeded/i,/prompt too long; exceeded (?:max )?context length/i,/range of input length should be/i,/context[_ ]length[_ ]exceeded/i,/too many tokens/i,/token limit exceeded/i,/^4(?:00|13)\s*(?:status code)?\s*\(no body\)/i,/(?:request[ _])?(?:body|entity|payload)[_ ]too[_ ]large/i,/Request payload is \d+ (?:bytes, over the \d+ byte|tokens, over the \d+ token) limit Kiro accepts\./,/Model context limit reached\. Conversation size exceeds model capacity\./],NON_OVERFLOW_PATTERNS=[/^(Throttling error|Service unavailable):/i,/rate limit/i,/too many requests/i,/tokens per (?:min|minute|hour|day)/i,/\bTPM\b/i,/\bRPM\b/i,/quota exceeded/i,/retry (?:after|in) \d/i,/^429\b/,/status code 429/i,/overloaded/i],RESOURCE_EXHAUSTED_PATTERN=/resource.?exhausted/i;function isContextOverflow(message,contextWindow){if(message.stopReason==="error"&&message.errorMessage){let isNonOverflow=NON_OVERFLOW_PATTERNS.some(p=>p.test(message.errorMessage));if(!isNonOverflow&&OVERFLOW_PATTERNS.some(p=>p.test(message.errorMessage)))return!0;let usage=message.usage,hasTokenEvidence=(usage.totalTokens||usage.input+usage.output+usage.cacheRead+usage.cacheWrite)>0;if(!isNonOverflow&&hasTokenEvidence&&RESOURCE_EXHAUSTED_PATTERN.test(message.errorMessage)&&(contextWindow===void 0||contextWindow<=0||cursorZeroTokenCount(message)>=contextWindow*.5))return!0}return!!(contextWindow&&message.stopReason==="stop"&&message.usage.input+message.usage.cacheRead>contextWindow||contextWindow&&message.stopReason==="length"&&message.usage.output===0&&message.usage.input+message.usage.cacheRead>=contextWindow*.99)}function isRecoverableLength(message,desiredMaxOutput){return message.stopReason==="length"&&desiredMaxOutput>0&&message.usage.output<desiredMaxOutput}function getOverflowPatterns(){return[...OVERFLOW_PATTERNS]}function cursorZeroTokenCount(message){let usage=message.usage;return usage?usage.totalTokens||(usage.input??0)+(usage.output??0)+(usage.cacheRead??0)+(usage.cacheWrite??0):0}function isCursorPayloadResourceExhausted(message,_estimateTokens){return message.stopReason!=="error"||!/resource.?exhausted/i.test(message.errorMessage||"")?!1:!(cursorZeroTokenCount(message)>0)}function isCursorQuotaResourceExhausted(message,contextWindow){let tokens=cursorZeroTokenCount(message);return message.stopReason==="error"&&RESOURCE_EXHAUSTED_PATTERN.test(message.errorMessage||"")&&contextWindow>0&&tokens>0&&tokens<contextWindow*.5}function isCursorZeroTokenResourceExhausted(message){return message.stopReason!=="error"||!/resource.?exhausted/i.test(message.errorMessage||"")?!1:!(cursorZeroTokenCount(message)>0)}function shouldSkipProviderFallbackForCursorZeroRe(options){return options?.sameModelRemint===!0}function shouldRetryOverflowWithoutCompact(compacted,errorMessage){return compacted?!1:/Nothing to compact/i.test(errorMessage||"")}function cursorOverflowCompactionSettings(settings,provider,reason){return reason!=="overflow"||provider!=="cursor"&&provider!=="cursor-cli-oauth"?settings:{...settings,keepRecentTokens:0,restorationEnabled:!1}}var ANTHROPIC_POLICY_REFUSAL_PATTERN=/This request triggered restrictions on [\s\S]+? and was blocked under Anthropic's Usage Policy\b/i;function isClassifierRefusal(message){return message.stopReason!=="error"&&message.stopReason!=="toolUse"?!1:message.stopDetails?.type==="refusal"||message.stopDetails?.type==="sensitive"?!0:message.errorMessage?ANTHROPIC_POLICY_REFUSAL_PATTERN.test(message.errorMessage):!1}var TOOL_RESULT_PLACEHOLDER="Tool output unavailable (context compacted)";function incompleteToolCallRetryText(name,errorMessage){return errorMessage!==void 0?`${errorMessage}${errorMessage.endsWith(".")?"":"."} Re-issue the tool call with complete arguments.`:`Tool call "${name}" was not executed: the response ended before the tool call was complete. Re-issue the tool call with complete arguments.`}function repairOrphanedToolResults(messages){let toolCallIds=new Set,toolResultIds=new Set;for(let message of messages){if(message.role==="assistant")for(let block of message.content)block.type==="toolCall"&&toolCallIds.add(block.id);message.role==="toolResult"&&toolResultIds.add(message.toolCallId)}let output=[],dangling=new Set([...toolCallIds].filter(id=>!toolResultIds.has(id)));for(let message of messages){if(message.role==="toolResult"){if(!toolCallIds.has(message.toolCallId)){output.push({...message,content:[{type:"text",text:TOOL_RESULT_PLACEHOLDER}]});continue}output.push(message);continue}if(output.push(message),message.role==="assistant"){if(message.stopReason==="error"||message.stopReason==="aborted")continue;for(let block of message.content){if(block.type!=="toolCall"||!dangling.has(block.id))continue;let incomplete=block.incomplete===!0,text=incomplete?incompleteToolCallRetryText(block.name,block.errorMessage):TOOL_RESULT_PLACEHOLDER;output.push({role:"toolResult",toolCallId:block.id,toolName:block.name,content:[{type:"text",text}],isError:incomplete,timestamp:message.timestamp?message.timestamp+1:Date.now()}),dangling.delete(block.id)}}}return output}function StringEnum(values,options){return typebox_exports.Unsafe({type:"string",enum:values,...options?.description&&{description:options.description},...options?.default&&{default:options.default}})}var INVISIBLE_FORMAT_CHARS=new RegExp("\\p{Cf}","gu");function hasVisibleText(text){return text.replace(INVISIBLE_FORMAT_CHARS,"").trim().length>0}function hasVisibleAssistantContent(message){return message.content.some(block=>block.type==="toolCall"||block.type==="text"&&hasVisibleText(block.text))}export{create,messageDesc,fromBinary,fileDesc,toBinary,measureCursorModelInputSerializedBytes,measureCursorHistorySerializedBytes,piReadArgs,piLsPath,piLimit,piTimeout,composeShellCommand,omitUndefinedArgs,registerPromptCacheWarmer,warmPromptCache,fauxText,fauxThinking,fauxToolCall,fauxAssistantMessage,createFauxCore,getRegisteredFauxProvider,fauxOverflowError,fauxProvider,installProviderScopeAccessor,registerApiProvider,registerBuiltinApiProvider,getApiProvider,getApiProviders,unregisterApiProviders,clearApiProviders,envApiKeyAuth,lazyOAuth,CURSOR_MODEL_CAPABILITIES,parseCursorVariantId,getCursorVariantAlias,getCursorBaseIdForVariant,getCursorCapabilityForBase,deriveCursorVariantAliases,normalizeCursorCatalog,resolveCursorSelectionDescriptor,renderCursorCliModelString,parseEndpointReasoningEfforts,ANTHROPIC_AUTH_TOKEN_ENV,ANTHROPIC_OAUTH_TOKEN_ENV,ANTHROPIC_API_KEY_ENV,getApiKeyEnvVars,findEnvKeys,getEnvApiKey,createImagesModels,createImagesProvider,supportsAllowedToolChoice,createXtmlRecoveryStreamParser,wrapStreamWithInvokeRecovery,Compile,compile_exports,validateToolCall,validateToolArguments,require_dist,getProtocol,transformContext,wrapStreamWithToolCallMiddleware,getToolCallFormat,shouldRecoverTextToolCalls,hasKimiTextToolCallRecovery,wrapStreamWithModelRecovery,AssistantMessageFrameEncoder,reduceAssistantMessageFrames,kCursorExecResolved,isCursorExecResolved,copyCursorExecResolved,dropFailedAssistantTurns,isContextOverflow,isRecoverableLength,getOverflowPatterns,isCursorPayloadResourceExhausted,isCursorQuotaResourceExhausted,isCursorZeroTokenResourceExhausted,shouldSkipProviderFallbackForCursorZeroRe,shouldRetryOverflowWithoutCompact,cursorOverflowCompactionSettings,isClassifierRefusal,contentText,TOOL_RESULT_PLACEHOLDER,repairOrphanedToolResults,StringEnum,hasVisibleText,hasVisibleAssistantContent};
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{KeybindingsManager,TUI_KEYBINDINGS}from"./chunk-HEKLJWA4.js";import{getAgentDir,stripBom}from"./chunk-PBWQK23Z.js";import{existsSync,readFileSync}from"fs";import{join}from"path";function useWindowsKeybindings(platform=process.platform,env=process.env){return platform==="win32"||platform==="linux"&&!!(env.WSL_DISTRO_NAME||env.WSL_INTEROP)}var windowsKeybindings=useWindowsKeybindings(),QUESTION_ANSWER_PRIMARY_KEY="alt+up",QUESTION_ANSWER_FALLBACK_KEY="alt+a",KEYBINDINGS={...TUI_KEYBINDINGS,"tui.editor.undo":{...TUI_KEYBINDINGS["tui.editor.undo"],defaultKeys:process.platform==="win32"?"ctrl+z":windowsKeybindings?"alt+z":"ctrl+-"},"tui.altScreen.previousPrompt":{...TUI_KEYBINDINGS["tui.altScreen.previousPrompt"],defaultKeys:windowsKeybindings?"ctrl+up":["ctrl+shift+up","ctrl+up"]},"tui.altScreen.nextPrompt":{...TUI_KEYBINDINGS["tui.altScreen.nextPrompt"],defaultKeys:windowsKeybindings?"ctrl+down":["ctrl+shift+down","ctrl+down"]},"tui.altScreen.search":{...TUI_KEYBINDINGS["tui.altScreen.search"],defaultKeys:windowsKeybindings?"ctrl+f":"ctrl+shift+f"},"app.interrupt":{defaultKeys:"escape",description:"Cancel or abort"},"app.clear":{defaultKeys:"ctrl+c",description:"Clear editor"},"app.exit":{defaultKeys:"ctrl+d",description:"Exit when editor is empty"},"app.suspend":{defaultKeys:process.platform==="win32"?[]:"ctrl+z",description:"Suspend to background"},"app.thinking.cycle":{defaultKeys:"shift+tab",description:"Cycle thinking level"},"app.thinking.save":{defaultKeys:"ctrl+s",description:"Save thinking level"},"app.model.cycleForward":{defaultKeys:"ctrl+p",description:"Cycle to next model"},"app.model.cycleBackward":{defaultKeys:windowsKeybindings?"alt+p":"shift+ctrl+p",description:"Cycle to previous model"},"app.model.select":{defaultKeys:"ctrl+l",description:"Open model selector"},"app.history.search":{defaultKeys:"ctrl+r",description:"Search prompt history across sessions"},"app.tools.expand":{defaultKeys:"ctrl+o",description:"Toggle tool output"},"app.thinking.toggle":{defaultKeys:"ctrl+t",description:"Toggle thinking blocks"},"app.session.toggleNamedFilter":{defaultKeys:"ctrl+n",description:"Toggle named session filter"},"app.editor.external":{defaultKeys:"ctrl+g",description:"Open external editor"},"app.message.copy":{defaultKeys:"ctrl+x",description:"Copy message to clipboard"},"app.message.followUp":{defaultKeys:windowsKeybindings?"ctrl+q":"alt+enter",description:"Queue follow-up message"},"app.message.dequeue":{defaultKeys:windowsKeybindings?"alt+q":"alt+up",description:"Restore queued messages"},"app.question.answer":{defaultKeys:[QUESTION_ANSWER_PRIMARY_KEY,QUESTION_ANSWER_FALLBACK_KEY],description:"Open the pending question"},"app.question.next":{defaultKeys:"alt+down",description:"Show the next pending question"},"app.clipboard.pasteImage":{defaultKeys:windowsKeybindings?"alt+v":"ctrl+v",description:"Paste image from clipboard (text fallback)"},"app.session.new":{defaultKeys:[],description:"Start a new session"},"app.session.tree":{defaultKeys:[],description:"Open session tree"},"app.session.fork":{defaultKeys:[],description:"Fork current session"},"app.session.resume":{defaultKeys:[],description:"Resume a session"},"app.session.renameCurrent":{defaultKeys:[],description:"Rename the current session"},"app.tree.foldOrUp":{defaultKeys:process.platform==="darwin"?["alt+left","ctrl+left"]:["ctrl+left","alt+left"],description:"Fold tree branch or move up"},"app.tree.unfoldOrDown":{defaultKeys:process.platform==="darwin"?["alt+right","ctrl+right"]:["ctrl+right","alt+right"],description:"Unfold tree branch or move down"},"app.tree.editLabel":{defaultKeys:"shift+l",description:"Edit tree label"},"app.tree.editMessage":{defaultKeys:"ctrl+e",description:"Edit the selected assistant response, or reopen a user message in the editor"},"app.tree.toggleLabelTimestamp":{defaultKeys:"shift+t",description:"Toggle tree label timestamps"},"app.session.togglePath":{defaultKeys:"ctrl+p",description:"Toggle session path display"},"app.session.toggleSort":{defaultKeys:"ctrl+s",description:"Toggle session sort mode"},"app.session.rename":{defaultKeys:"ctrl+r",description:"Rename session"},"app.session.delete":{defaultKeys:"ctrl+d",description:"Delete session"},"app.session.deleteNoninvasive":{defaultKeys:"ctrl+backspace",description:"Delete session when query is empty"},"app.models.save":{defaultKeys:"ctrl+s",description:"Save model selection"},"app.models.toggleFavorite":{defaultKeys:"ctrl+f",description:"Toggle favorite model"},"app.models.enableAll":{defaultKeys:"ctrl+a",description:"Enable all models"},"app.models.clearAll":{defaultKeys:"ctrl+x",description:"Clear all models"},"app.models.toggleProvider":{defaultKeys:"ctrl+p",description:"Toggle all models for provider"},"app.models.reorderUp":{defaultKeys:"alt+up",description:"Move model up in order"},"app.models.reorderDown":{defaultKeys:"alt+down",description:"Move model down in order"},"app.tree.filter.default":{defaultKeys:"ctrl+d",description:"Tree filter: default view"},"app.tree.filter.noTools":{defaultKeys:"ctrl+t",description:"Tree filter: hide tool results"},"app.tree.filter.userOnly":{defaultKeys:"ctrl+u",description:"Tree filter: user messages only"},"app.tree.filter.labeledOnly":{defaultKeys:"ctrl+l",description:"Tree filter: labeled entries only"},"app.tree.filter.all":{defaultKeys:"ctrl+a",description:"Tree filter: show all entries"},"app.tree.filter.cycleForward":{defaultKeys:"ctrl+o",description:"Tree filter: cycle forward"},"app.tree.filter.cycleBackward":{defaultKeys:"shift+ctrl+o",description:"Tree filter: cycle backward"}},KEYBINDING_NAME_MIGRATIONS={cursorUp:"tui.editor.cursorUp",cursorDown:"tui.editor.cursorDown",cursorLeft:"tui.editor.cursorLeft",cursorRight:"tui.editor.cursorRight",cursorWordLeft:"tui.editor.cursorWordLeft",cursorWordRight:"tui.editor.cursorWordRight",cursorLineStart:"tui.editor.cursorLineStart",cursorLineEnd:"tui.editor.cursorLineEnd",jumpForward:"tui.editor.jumpForward",jumpBackward:"tui.editor.jumpBackward",pageUp:"tui.editor.pageUp",pageDown:"tui.editor.pageDown",deleteCharBackward:"tui.editor.deleteCharBackward",deleteCharForward:"tui.editor.deleteCharForward",deleteWordBackward:"tui.editor.deleteWordBackward",deleteWordForward:"tui.editor.deleteWordForward",deleteToLineStart:"tui.editor.deleteToLineStart",deleteToLineEnd:"tui.editor.deleteToLineEnd",yank:"tui.editor.yank",yankPop:"tui.editor.yankPop",undo:"tui.editor.undo",newLine:"tui.input.newLine",submit:"tui.input.submit",tab:"tui.input.tab",copy:"tui.input.copy",selectUp:"tui.select.up",selectDown:"tui.select.down",selectPageUp:"tui.select.pageUp",selectPageDown:"tui.select.pageDown",selectConfirm:"tui.select.confirm",selectCancel:"tui.select.cancel",interrupt:"app.interrupt",clear:"app.clear",exit:"app.exit",suspend:"app.suspend",cycleThinkingLevel:"app.thinking.cycle",cycleModelForward:"app.model.cycleForward",cycleModelBackward:"app.model.cycleBackward",selectModel:"app.model.select",expandTools:"app.tools.expand",toggleThinking:"app.thinking.toggle",toggleSessionNamedFilter:"app.session.toggleNamedFilter",externalEditor:"app.editor.external",followUp:"app.message.followUp",dequeue:"app.message.dequeue",pasteImage:"app.clipboard.pasteImage",newSession:"app.session.new",tree:"app.session.tree",fork:"app.session.fork",resume:"app.session.resume",treeFoldOrUp:"app.tree.foldOrUp",treeUnfoldOrDown:"app.tree.unfoldOrDown",treeEditLabel:"app.tree.editLabel",treeEditMessage:"app.tree.editMessage",treeToggleLabelTimestamp:"app.tree.toggleLabelTimestamp",toggleSessionPath:"app.session.togglePath",toggleSessionSort:"app.session.toggleSort",renameSession:"app.session.rename",deleteSession:"app.session.delete",deleteSessionNoninvasive:"app.session.deleteNoninvasive"};function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function hasOwn(value,key){return Object.hasOwn(value,key)}function isLegacyKeybindingName(key){return key in KEYBINDING_NAME_MIGRATIONS}function toKeybindingsConfig(value){let config={};for(let[key,binding]of Object.entries(value)){if(typeof binding=="string"){config[key]=binding;continue}Array.isArray(binding)&&binding.every(entry=>typeof entry=="string")&&(config[key]=binding)}return config}function migrateKeybindingsConfig(rawConfig){let config={},migrated=!1;for(let[key,value]of Object.entries(rawConfig)){let nextKey=isLegacyKeybindingName(key)?KEYBINDING_NAME_MIGRATIONS[key]:key;if(nextKey!==key&&(migrated=!0),key!==nextKey&&hasOwn(rawConfig,nextKey)){migrated=!0;continue}config[nextKey]=value}return{config:orderKeybindingsConfig(config),migrated}}function orderKeybindingsConfig(config){let ordered={};for(let keybinding of Object.keys(KEYBINDINGS))hasOwn(config,keybinding)&&(ordered[keybinding]=config[keybinding]);let extras=Object.keys(config).filter(key=>!hasOwn(ordered,key)).sort();for(let key of extras)ordered[key]=config[key];return ordered}function loadRawConfig(path){if(existsSync(path))try{let parsed=JSON.parse(stripBom(readFileSync(path,"utf-8")));return isRecord(parsed)?parsed:void 0}catch{return}}var KeybindingsManager2=class _KeybindingsManager extends KeybindingsManager{constructor(userBindings={},configPath){super(KEYBINDINGS,userBindings),this.configPath=configPath}static create(agentDir=getAgentDir()){let configPath=join(agentDir,"keybindings.json"),userBindings=_KeybindingsManager.loadFromFile(configPath);return new _KeybindingsManager(userBindings,configPath)}reload(){this.configPath&&this.setUserBindings(_KeybindingsManager.loadFromFile(this.configPath))}getEffectiveConfig(){return this.getResolvedBindings()}static loadFromFile(path){let rawConfig=loadRawConfig(path);return rawConfig?toKeybindingsConfig(migrateKeybindingsConfig(rawConfig).config):{}}};export{QUESTION_ANSWER_PRIMARY_KEY,QUESTION_ANSWER_FALLBACK_KEY,KEYBINDINGS,migrateKeybindingsConfig,KeybindingsManager2 as KeybindingsManager};
2
+ import{KeybindingsManager,TUI_KEYBINDINGS}from"./chunk-HEKLJWA4.js";import{getAgentDir,stripBom}from"./chunk-WCAKUCN3.js";import{existsSync,readFileSync}from"fs";import{join}from"path";function useWindowsKeybindings(platform=process.platform,env=process.env){return platform==="win32"||platform==="linux"&&!!(env.WSL_DISTRO_NAME||env.WSL_INTEROP)}var windowsKeybindings=useWindowsKeybindings(),QUESTION_ANSWER_PRIMARY_KEY="alt+up",QUESTION_ANSWER_FALLBACK_KEY="alt+a",KEYBINDINGS={...TUI_KEYBINDINGS,"tui.editor.undo":{...TUI_KEYBINDINGS["tui.editor.undo"],defaultKeys:process.platform==="win32"?"ctrl+z":windowsKeybindings?"alt+z":"ctrl+-"},"tui.altScreen.previousPrompt":{...TUI_KEYBINDINGS["tui.altScreen.previousPrompt"],defaultKeys:windowsKeybindings?"ctrl+up":["ctrl+shift+up","ctrl+up"]},"tui.altScreen.nextPrompt":{...TUI_KEYBINDINGS["tui.altScreen.nextPrompt"],defaultKeys:windowsKeybindings?"ctrl+down":["ctrl+shift+down","ctrl+down"]},"tui.altScreen.search":{...TUI_KEYBINDINGS["tui.altScreen.search"],defaultKeys:windowsKeybindings?"ctrl+f":"ctrl+shift+f"},"app.interrupt":{defaultKeys:"escape",description:"Cancel or abort"},"app.clear":{defaultKeys:"ctrl+c",description:"Clear editor"},"app.exit":{defaultKeys:"ctrl+d",description:"Exit when editor is empty"},"app.suspend":{defaultKeys:process.platform==="win32"?[]:"ctrl+z",description:"Suspend to background"},"app.thinking.cycle":{defaultKeys:"shift+tab",description:"Cycle thinking level"},"app.thinking.save":{defaultKeys:"ctrl+s",description:"Save thinking level"},"app.model.cycleForward":{defaultKeys:"ctrl+p",description:"Cycle to next model"},"app.model.cycleBackward":{defaultKeys:windowsKeybindings?"alt+p":"shift+ctrl+p",description:"Cycle to previous model"},"app.model.select":{defaultKeys:"ctrl+l",description:"Open model selector"},"app.history.search":{defaultKeys:"ctrl+r",description:"Search prompt history across sessions"},"app.tools.expand":{defaultKeys:"ctrl+o",description:"Toggle tool output"},"app.thinking.toggle":{defaultKeys:"ctrl+t",description:"Toggle thinking blocks"},"app.session.toggleNamedFilter":{defaultKeys:"ctrl+n",description:"Toggle named session filter"},"app.editor.external":{defaultKeys:"ctrl+g",description:"Open external editor"},"app.message.copy":{defaultKeys:"ctrl+x",description:"Copy message to clipboard"},"app.message.followUp":{defaultKeys:windowsKeybindings?"ctrl+q":"alt+enter",description:"Queue follow-up message"},"app.message.dequeue":{defaultKeys:windowsKeybindings?"alt+q":"alt+up",description:"Restore queued messages"},"app.question.answer":{defaultKeys:[QUESTION_ANSWER_PRIMARY_KEY,QUESTION_ANSWER_FALLBACK_KEY],description:"Open the pending question"},"app.question.next":{defaultKeys:"alt+down",description:"Show the next pending question"},"app.clipboard.pasteImage":{defaultKeys:windowsKeybindings?"alt+v":"ctrl+v",description:"Paste image from clipboard (text fallback)"},"app.session.new":{defaultKeys:[],description:"Start a new session"},"app.session.tree":{defaultKeys:[],description:"Open session tree"},"app.session.fork":{defaultKeys:[],description:"Fork current session"},"app.session.resume":{defaultKeys:[],description:"Resume a session"},"app.session.renameCurrent":{defaultKeys:[],description:"Rename the current session"},"app.tree.foldOrUp":{defaultKeys:process.platform==="darwin"?["alt+left","ctrl+left"]:["ctrl+left","alt+left"],description:"Fold tree branch or move up"},"app.tree.unfoldOrDown":{defaultKeys:process.platform==="darwin"?["alt+right","ctrl+right"]:["ctrl+right","alt+right"],description:"Unfold tree branch or move down"},"app.tree.editLabel":{defaultKeys:"shift+l",description:"Edit tree label"},"app.tree.editMessage":{defaultKeys:"ctrl+e",description:"Edit the selected assistant response, or reopen a user message in the editor"},"app.tree.toggleLabelTimestamp":{defaultKeys:"shift+t",description:"Toggle tree label timestamps"},"app.session.togglePath":{defaultKeys:"ctrl+p",description:"Toggle session path display"},"app.session.toggleSort":{defaultKeys:"ctrl+s",description:"Toggle session sort mode"},"app.session.rename":{defaultKeys:"ctrl+r",description:"Rename session"},"app.session.delete":{defaultKeys:"ctrl+d",description:"Delete session"},"app.session.deleteNoninvasive":{defaultKeys:"ctrl+backspace",description:"Delete session when query is empty"},"app.models.save":{defaultKeys:"ctrl+s",description:"Save model selection"},"app.models.toggleFavorite":{defaultKeys:"ctrl+f",description:"Toggle favorite model"},"app.models.enableAll":{defaultKeys:"ctrl+a",description:"Enable all models"},"app.models.clearAll":{defaultKeys:"ctrl+x",description:"Clear all models"},"app.models.toggleProvider":{defaultKeys:"ctrl+p",description:"Toggle all models for provider"},"app.models.reorderUp":{defaultKeys:"alt+up",description:"Move model up in order"},"app.models.reorderDown":{defaultKeys:"alt+down",description:"Move model down in order"},"app.tree.filter.default":{defaultKeys:"ctrl+d",description:"Tree filter: default view"},"app.tree.filter.noTools":{defaultKeys:"ctrl+t",description:"Tree filter: hide tool results"},"app.tree.filter.userOnly":{defaultKeys:"ctrl+u",description:"Tree filter: user messages only"},"app.tree.filter.labeledOnly":{defaultKeys:"ctrl+l",description:"Tree filter: labeled entries only"},"app.tree.filter.all":{defaultKeys:"ctrl+a",description:"Tree filter: show all entries"},"app.tree.filter.cycleForward":{defaultKeys:"ctrl+o",description:"Tree filter: cycle forward"},"app.tree.filter.cycleBackward":{defaultKeys:"shift+ctrl+o",description:"Tree filter: cycle backward"}},KEYBINDING_NAME_MIGRATIONS={cursorUp:"tui.editor.cursorUp",cursorDown:"tui.editor.cursorDown",cursorLeft:"tui.editor.cursorLeft",cursorRight:"tui.editor.cursorRight",cursorWordLeft:"tui.editor.cursorWordLeft",cursorWordRight:"tui.editor.cursorWordRight",cursorLineStart:"tui.editor.cursorLineStart",cursorLineEnd:"tui.editor.cursorLineEnd",jumpForward:"tui.editor.jumpForward",jumpBackward:"tui.editor.jumpBackward",pageUp:"tui.editor.pageUp",pageDown:"tui.editor.pageDown",deleteCharBackward:"tui.editor.deleteCharBackward",deleteCharForward:"tui.editor.deleteCharForward",deleteWordBackward:"tui.editor.deleteWordBackward",deleteWordForward:"tui.editor.deleteWordForward",deleteToLineStart:"tui.editor.deleteToLineStart",deleteToLineEnd:"tui.editor.deleteToLineEnd",yank:"tui.editor.yank",yankPop:"tui.editor.yankPop",undo:"tui.editor.undo",newLine:"tui.input.newLine",submit:"tui.input.submit",tab:"tui.input.tab",copy:"tui.input.copy",selectUp:"tui.select.up",selectDown:"tui.select.down",selectPageUp:"tui.select.pageUp",selectPageDown:"tui.select.pageDown",selectConfirm:"tui.select.confirm",selectCancel:"tui.select.cancel",interrupt:"app.interrupt",clear:"app.clear",exit:"app.exit",suspend:"app.suspend",cycleThinkingLevel:"app.thinking.cycle",cycleModelForward:"app.model.cycleForward",cycleModelBackward:"app.model.cycleBackward",selectModel:"app.model.select",expandTools:"app.tools.expand",toggleThinking:"app.thinking.toggle",toggleSessionNamedFilter:"app.session.toggleNamedFilter",externalEditor:"app.editor.external",followUp:"app.message.followUp",dequeue:"app.message.dequeue",pasteImage:"app.clipboard.pasteImage",newSession:"app.session.new",tree:"app.session.tree",fork:"app.session.fork",resume:"app.session.resume",treeFoldOrUp:"app.tree.foldOrUp",treeUnfoldOrDown:"app.tree.unfoldOrDown",treeEditLabel:"app.tree.editLabel",treeEditMessage:"app.tree.editMessage",treeToggleLabelTimestamp:"app.tree.toggleLabelTimestamp",toggleSessionPath:"app.session.togglePath",toggleSessionSort:"app.session.toggleSort",renameSession:"app.session.rename",deleteSession:"app.session.delete",deleteSessionNoninvasive:"app.session.deleteNoninvasive"};function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function hasOwn(value,key){return Object.hasOwn(value,key)}function isLegacyKeybindingName(key){return key in KEYBINDING_NAME_MIGRATIONS}function toKeybindingsConfig(value){let config={};for(let[key,binding]of Object.entries(value)){if(typeof binding=="string"){config[key]=binding;continue}Array.isArray(binding)&&binding.every(entry=>typeof entry=="string")&&(config[key]=binding)}return config}function migrateKeybindingsConfig(rawConfig){let config={},migrated=!1;for(let[key,value]of Object.entries(rawConfig)){let nextKey=isLegacyKeybindingName(key)?KEYBINDING_NAME_MIGRATIONS[key]:key;if(nextKey!==key&&(migrated=!0),key!==nextKey&&hasOwn(rawConfig,nextKey)){migrated=!0;continue}config[nextKey]=value}return{config:orderKeybindingsConfig(config),migrated}}function orderKeybindingsConfig(config){let ordered={};for(let keybinding of Object.keys(KEYBINDINGS))hasOwn(config,keybinding)&&(ordered[keybinding]=config[keybinding]);let extras=Object.keys(config).filter(key=>!hasOwn(ordered,key)).sort();for(let key of extras)ordered[key]=config[key];return ordered}function loadRawConfig(path){if(existsSync(path))try{let parsed=JSON.parse(stripBom(readFileSync(path,"utf-8")));return isRecord(parsed)?parsed:void 0}catch{return}}var KeybindingsManager2=class _KeybindingsManager extends KeybindingsManager{constructor(userBindings={},configPath){super(KEYBINDINGS,userBindings),this.configPath=configPath}static create(agentDir=getAgentDir()){let configPath=join(agentDir,"keybindings.json"),userBindings=_KeybindingsManager.loadFromFile(configPath);return new _KeybindingsManager(userBindings,configPath)}reload(){this.configPath&&this.setUserBindings(_KeybindingsManager.loadFromFile(this.configPath))}getEffectiveConfig(){return this.getResolvedBindings()}static loadFromFile(path){let rawConfig=loadRawConfig(path);return rawConfig?toKeybindingsConfig(migrateKeybindingsConfig(rawConfig).config):{}}};export{QUESTION_ANSWER_PRIMARY_KEY,QUESTION_ANSWER_FALLBACK_KEY,KEYBINDINGS,migrateKeybindingsConfig,KeybindingsManager2 as KeybindingsManager};
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{source_default}from"./chunk-26UBFF6N.js";import{APP_NAME,CONFIG_DIR_NAME,ENV_AGENT_DIR,ENV_SESSION_DIR,envValue}from"./chunk-PBWQK23Z.js";import{legacyProviderIdRejection}from"./chunk-UIOI2SK3.js";function isGrokNeoEnabled(env=process.env){let value=envValue("ENABLE_GROK_NEO",env);if(value===void 0)return!1;let normalized=value.trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"}var SESSION_RUNTIMES=["in-process","worker"];function isSessionRuntimeKind(value){return SESSION_RUNTIMES.includes(value)}function resolveSessionRuntime(parsed){return parsed.sessionRuntime?parsed.sessionRuntime:parsed.listen!==void 0&&parsed.listen!=="stdio://"?"in-process":"worker"}var VALID_THINKING_LEVELS=["off","minimal","low","medium","high","xhigh","max"];function isValidThinkingLevel(level){return VALID_THINKING_LEVELS.includes(level)}function normalizeSessionName(value){let name=value.trim();return name.length>0?name:void 0}function parseArgs(args,options={}){let grokNeoEnabled=options.grokNeoEnabled??isGrokNeoEnabled(),result={messages:[],fileArgs:[],unknownFlags:new Map,diagnostics:[]};for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--"){for(let positionalArg of args.slice(i+1))positionalArg.startsWith("@")?result.fileArgs.push(positionalArg.slice(1)):result.messages.push(positionalArg);break}else if(arg==="--help"||arg==="-h")result.help=!0;else if(arg==="--version"||arg==="-v")result.version=!0;else if(arg==="--mode"&&i+1<args.length){let mode=args[++i];(mode==="text"||mode==="json"||mode==="rpc")&&(result.mode=mode)}else if(arg==="--continue"||arg==="-c")result.continue=!0;else if(arg==="--resume"||arg==="-r")result.resume=!0;else if(arg==="--provider"&&i+1<args.length){let typedProvider=args[++i],rejection=typedProvider===void 0?void 0:legacyProviderIdRejection(typedProvider);if(rejection)throw new Error(rejection);result.provider=typedProvider}else if(arg==="--model"&&i+1<args.length)result.model=args[++i];else if(arg==="--api-key"&&i+1<args.length)result.apiKey=args[++i];else if(arg==="--system-prompt"&&i+1<args.length)result.systemPrompt=args[++i];else if(arg==="--append-system-prompt"&&i+1<args.length)result.appendSystemPrompt=result.appendSystemPrompt??[],result.appendSystemPrompt.push(args[++i]);else if(arg==="--name"||arg==="-n")i+1<args.length?result.name=args[++i]:result.diagnostics.push({type:"error",message:"--name requires a value"});else if(arg==="--no-session")result.noSession=!0;else if(arg==="--session"&&i+1<args.length)result.session=args[++i];else if(arg==="--session-id"&&i+1<args.length)result.sessionId=args[++i];else if(arg==="--fork"&&i+1<args.length)result.fork=args[++i];else if(arg==="--rebind"&&i+1<args.length)result.rebind=args[++i];else if(arg==="--session-dir"&&i+1<args.length)result.sessionDir=args[++i];else if(arg==="--models"&&i+1<args.length)result.models=args[++i].split(",").map(s=>s.trim());else if(arg==="--no-tools"||arg==="-nt")result.noTools=!0;else if(arg==="--no-builtin-tools"||arg==="-nbt")result.noBuiltinTools=!0;else if((arg==="--tools"||arg==="-t")&&i+1<args.length)result.tools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if((arg==="--exclude-tools"||arg==="-xt")&&i+1<args.length)result.excludeTools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if(arg==="--thinking"&&i+1<args.length){let level=args[++i];isValidThinkingLevel(level)?result.thinking=level:result.diagnostics.push({type:"warning",message:`Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`})}else if(arg==="--print"||arg==="-p"){result.print=!0;let next=args[i+1];next!==void 0&&!next.startsWith("@")&&(!next.startsWith("-")||next.startsWith("---"))&&(result.messages.push(next),i++)}else if(arg==="--export"&&i+1<args.length)result.export=args[++i];else if((arg==="--extension"||arg==="-e")&&i+1<args.length)result.extensions=result.extensions??[],result.extensions.push(args[++i]);else if(arg==="--no-extensions"||arg==="-ne")result.noExtensions=!0;else if(arg==="--skill"&&i+1<args.length)result.skills=result.skills??[],result.skills.push(args[++i]);else if(arg==="--prompt-template"&&i+1<args.length)result.promptTemplates=result.promptTemplates??[],result.promptTemplates.push(args[++i]);else if(arg==="--theme"&&i+1<args.length)result.themes=result.themes??[],result.themes.push(args[++i]);else if(arg==="--use-theme"){let themeName=args[i+1];themeName===void 0||themeName.startsWith("-")?result.diagnostics.push({type:"error",message:"--use-theme requires a theme name"}):(result.useTheme=themeName,i++)}else if(arg==="--no-skills"||arg==="-ns")result.noSkills=!0;else if(arg==="--no-prompt-templates"||arg==="-np")result.noPromptTemplates=!0;else if(arg==="--no-themes")result.noThemes=!0;else if(arg==="--no-context-files"||arg==="-nc")result.noContextFiles=!0;else if(arg==="--list-models")i+1<args.length&&!args[i+1].startsWith("-")&&!args[i+1].startsWith("@")?result.listModels=args[++i]:result.listModels=!0;else if(arg==="--list-tips")result.listTips=!0;else if(arg==="--tui-mode"){let mode=args[i+1];mode==="regular"||mode==="fullscreen"?(result.tuiMode=mode,i++):mode===void 0||mode.startsWith("-")?result.diagnostics.push({type:"error",message:"--tui-mode requires regular or fullscreen"}):(i++,result.diagnostics.push({type:"error",message:`Invalid TUI mode "${mode}". Valid values: regular, fullscreen`}))}else if(arg==="--verbose")result.verbose=!0;else if(arg==="--approve"||arg==="-a")result.projectTrustOverride=!0;else if(arg==="--no-approve"||arg==="-na")result.projectTrustOverride=!1;else if(arg==="--offline")result.offline=!0;else if(grokNeoEnabled&&arg==="--grok-neo")result.grokNeo=!0;else if(arg==="--multi-session")result.multiSession=!0;else if(arg==="--auto-title-sessions")result.autoTitleSessions=!0;else if(arg==="--session-runtime"){let value=args[i+1];value!==void 0&&!value.startsWith("--")&&i++,value!==void 0&&isSessionRuntimeKind(value)?result.sessionRuntime=value:result.diagnostics.push({type:"error",message:"--session-runtime must be in-process or worker"})}else if(arg==="--listen"&&result.mode==="rpc"){let value=args[i+1];value===void 0||value.startsWith("--")?result.diagnostics.push({type:"error",message:"--listen requires a value"}):(result.listen=value,result.multiSession=!0,i++)}else if(arg.startsWith("@"))result.fileArgs.push(arg.slice(1));else if(arg.startsWith("--")){let eqIndex=arg.indexOf("=");if(eqIndex!==-1)result.unknownFlags.set(arg.slice(2,eqIndex),arg.slice(eqIndex+1));else{let flagName=arg.slice(2),next=args[i+1];next!==void 0&&!next.startsWith("-")&&!next.startsWith("@")?(result.unknownFlags.set(flagName,next),i++):result.unknownFlags.set(flagName,!0)}}else arg.startsWith("-")&&!arg.startsWith("--")?result.diagnostics.push({type:"error",message:`Unknown option: ${arg}`}):arg.startsWith("-")||result.messages.push(arg)}return result}function printHelp(extensionFlags,grokNeoEnabled=isGrokNeoEnabled()){let extensionFlagsText=extensionFlags&&extensionFlags.length>0?`
2
+ import{source_default}from"./chunk-26UBFF6N.js";import{APP_NAME,CONFIG_DIR_NAME,ENV_AGENT_DIR,ENV_SESSION_DIR,envValue}from"./chunk-WCAKUCN3.js";import{legacyProviderIdRejection}from"./chunk-XVX4M3DZ.js";function isGrokNeoEnabled(env=process.env){let value=envValue("ENABLE_GROK_NEO",env);if(value===void 0)return!1;let normalized=value.trim().toLowerCase();return normalized==="1"||normalized==="true"||normalized==="yes"}var SESSION_RUNTIMES=["in-process","worker"];function isSessionRuntimeKind(value){return SESSION_RUNTIMES.includes(value)}function resolveSessionRuntime(parsed){return parsed.sessionRuntime?parsed.sessionRuntime:parsed.listen!==void 0&&parsed.listen!=="stdio://"?"in-process":"worker"}var VALID_THINKING_LEVELS=["off","minimal","low","medium","high","xhigh","max"];function isValidThinkingLevel(level){return VALID_THINKING_LEVELS.includes(level)}function normalizeSessionName(value){let name=value.trim();return name.length>0?name:void 0}function parseArgs(args,options={}){let grokNeoEnabled=options.grokNeoEnabled??isGrokNeoEnabled(),result={messages:[],fileArgs:[],unknownFlags:new Map,diagnostics:[]};for(let i=0;i<args.length;i++){let arg=args[i];if(arg==="--"){for(let positionalArg of args.slice(i+1))positionalArg.startsWith("@")?result.fileArgs.push(positionalArg.slice(1)):result.messages.push(positionalArg);break}else if(arg==="--help"||arg==="-h")result.help=!0;else if(arg==="--version"||arg==="-v")result.version=!0;else if(arg==="--mode"&&i+1<args.length){let mode=args[++i];(mode==="text"||mode==="json"||mode==="rpc")&&(result.mode=mode)}else if(arg==="--continue"||arg==="-c")result.continue=!0;else if(arg==="--resume"||arg==="-r")result.resume=!0;else if(arg==="--provider"&&i+1<args.length){let typedProvider=args[++i],rejection=typedProvider===void 0?void 0:legacyProviderIdRejection(typedProvider);if(rejection)throw new Error(rejection);result.provider=typedProvider}else if(arg==="--model"&&i+1<args.length)result.model=args[++i];else if(arg==="--api-key"&&i+1<args.length)result.apiKey=args[++i];else if(arg==="--system-prompt"&&i+1<args.length)result.systemPrompt=args[++i];else if(arg==="--append-system-prompt"&&i+1<args.length)result.appendSystemPrompt=result.appendSystemPrompt??[],result.appendSystemPrompt.push(args[++i]);else if(arg==="--name"||arg==="-n")i+1<args.length?result.name=args[++i]:result.diagnostics.push({type:"error",message:"--name requires a value"});else if(arg==="--no-session")result.noSession=!0;else if(arg==="--session"&&i+1<args.length)result.session=args[++i];else if(arg==="--session-id"&&i+1<args.length)result.sessionId=args[++i];else if(arg==="--fork"&&i+1<args.length)result.fork=args[++i];else if(arg==="--rebind"&&i+1<args.length)result.rebind=args[++i];else if(arg==="--session-dir"&&i+1<args.length)result.sessionDir=args[++i];else if(arg==="--models"&&i+1<args.length)result.models=args[++i].split(",").map(s=>s.trim());else if(arg==="--no-tools"||arg==="-nt")result.noTools=!0;else if(arg==="--no-builtin-tools"||arg==="-nbt")result.noBuiltinTools=!0;else if((arg==="--tools"||arg==="-t")&&i+1<args.length)result.tools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if((arg==="--exclude-tools"||arg==="-xt")&&i+1<args.length)result.excludeTools=args[++i].split(",").map(s=>s.trim()).filter(name=>name.length>0);else if(arg==="--thinking"&&i+1<args.length){let level=args[++i];isValidThinkingLevel(level)?result.thinking=level:result.diagnostics.push({type:"warning",message:`Invalid thinking level "${level}". Valid values: ${VALID_THINKING_LEVELS.join(", ")}`})}else if(arg==="--print"||arg==="-p"){result.print=!0;let next=args[i+1];next!==void 0&&!next.startsWith("@")&&(!next.startsWith("-")||next.startsWith("---"))&&(result.messages.push(next),i++)}else if(arg==="--export"&&i+1<args.length)result.export=args[++i];else if((arg==="--extension"||arg==="-e")&&i+1<args.length)result.extensions=result.extensions??[],result.extensions.push(args[++i]);else if(arg==="--no-extensions"||arg==="-ne")result.noExtensions=!0;else if(arg==="--skill"&&i+1<args.length)result.skills=result.skills??[],result.skills.push(args[++i]);else if(arg==="--prompt-template"&&i+1<args.length)result.promptTemplates=result.promptTemplates??[],result.promptTemplates.push(args[++i]);else if(arg==="--theme"&&i+1<args.length)result.themes=result.themes??[],result.themes.push(args[++i]);else if(arg==="--use-theme"){let themeName=args[i+1];themeName===void 0||themeName.startsWith("-")?result.diagnostics.push({type:"error",message:"--use-theme requires a theme name"}):(result.useTheme=themeName,i++)}else if(arg==="--no-skills"||arg==="-ns")result.noSkills=!0;else if(arg==="--no-prompt-templates"||arg==="-np")result.noPromptTemplates=!0;else if(arg==="--no-themes")result.noThemes=!0;else if(arg==="--no-context-files"||arg==="-nc")result.noContextFiles=!0;else if(arg==="--list-models")i+1<args.length&&!args[i+1].startsWith("-")&&!args[i+1].startsWith("@")?result.listModels=args[++i]:result.listModels=!0;else if(arg==="--list-tips")result.listTips=!0;else if(arg==="--tui-mode"){let mode=args[i+1];mode==="regular"||mode==="fullscreen"?(result.tuiMode=mode,i++):mode===void 0||mode.startsWith("-")?result.diagnostics.push({type:"error",message:"--tui-mode requires regular or fullscreen"}):(i++,result.diagnostics.push({type:"error",message:`Invalid TUI mode "${mode}". Valid values: regular, fullscreen`}))}else if(arg==="--verbose")result.verbose=!0;else if(arg==="--approve"||arg==="-a")result.projectTrustOverride=!0;else if(arg==="--no-approve"||arg==="-na")result.projectTrustOverride=!1;else if(arg==="--offline")result.offline=!0;else if(grokNeoEnabled&&arg==="--grok-neo")result.grokNeo=!0;else if(arg==="--multi-session")result.multiSession=!0;else if(arg==="--auto-title-sessions")result.autoTitleSessions=!0;else if(arg==="--session-runtime"){let value=args[i+1];value!==void 0&&!value.startsWith("--")&&i++,value!==void 0&&isSessionRuntimeKind(value)?result.sessionRuntime=value:result.diagnostics.push({type:"error",message:"--session-runtime must be in-process or worker"})}else if(arg==="--listen"&&result.mode==="rpc"){let value=args[i+1];value===void 0||value.startsWith("--")?result.diagnostics.push({type:"error",message:"--listen requires a value"}):(result.listen=value,result.multiSession=!0,i++)}else if(arg.startsWith("@"))result.fileArgs.push(arg.slice(1));else if(arg.startsWith("--")){let eqIndex=arg.indexOf("=");if(eqIndex!==-1)result.unknownFlags.set(arg.slice(2,eqIndex),arg.slice(eqIndex+1));else{let flagName=arg.slice(2),next=args[i+1];next!==void 0&&!next.startsWith("-")&&!next.startsWith("@")?(result.unknownFlags.set(flagName,next),i++):result.unknownFlags.set(flagName,!0)}}else arg.startsWith("-")&&!arg.startsWith("--")?result.diagnostics.push({type:"error",message:`Unknown option: ${arg}`}):arg.startsWith("-")||result.messages.push(arg)}return result}function printHelp(extensionFlags,grokNeoEnabled=isGrokNeoEnabled()){let extensionFlagsText=extensionFlags&&extensionFlags.length>0?`
3
3
  ${source_default.bold("Extension CLI Flags:")}
4
4
  ${extensionFlags.map(flag=>{let value=flag.type==="string"?" <value>":"",description=flag.description??`Registered by ${flag.extensionPath}`;return` --${flag.name}${value}`.padEnd(30)+description}).join(`
5
5
  `)}
@@ -0,0 +1,14 @@
1
+ import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
+ import{require_cross_spawn}from"./chunk-ATQFN5HI.js";import{__toESM}from"./chunk-IKOFCODM.js";var BRAND_ENV_VAR="SENPI_BRAND";function readChangelog(source){let value=source.changelog;if(typeof value!="object"||value===null||Array.isArray(value))return;let changelog=value,path=readString(changelog,"path");if(!path?.startsWith("/")||path.includes("\0"))return;let version=readString(changelog,"version");return{path,...version?{version}:{}}}function readUpdateChannel(source){let update=source.update;if(typeof update!="object"||update===null||Array.isArray(update))return;let channel=update,packageName=readString(channel,"packageName"),command=readString(channel,"command");if(!(!packageName||!command))return{packageName,distTag:readString(channel,"distTag")||"latest",command,changelogUrl:readString(channel,"changelogUrl")}}function isSafeConfigDirName(value){return value!=="."&&value!==".."&&!/[\\/]/.test(value)}function readString(source,key){let value=source[key];return typeof value=="string"&&value.trim()?value.trim():void 0}function parseBrandProfile(raw){if(!raw?.trim())return;let parsed;try{parsed=JSON.parse(raw)}catch{process.stderr.write(`warning: ignoring malformed ${BRAND_ENV_VAR} (expected JSON)
3
+ `);return}if(typeof parsed!="object"||parsed===null||Array.isArray(parsed)){process.stderr.write(`warning: ignoring malformed ${BRAND_ENV_VAR} (expected a JSON object)
4
+ `);return}let source=parsed,name=readString(source,"name");if(!name){process.stderr.write(`warning: ignoring ${BRAND_ENV_VAR} without a "name"
5
+ `);return}let configDir=readString(source,"configDir")||`.${name}`;if(!isSafeConfigDirName(configDir)){process.stderr.write(`warning: ignoring ${BRAND_ENV_VAR} with an unsafe "configDir"
6
+ `);return}let changelog=readChangelog(source);return{name,command:readString(source,"command"),displayVersion:readString(source,"displayVersion"),configDir,flatLayout:source.flatLayout===!0,envPrefix:(readString(source,"envPrefix")||name).toUpperCase(),userAgent:readString(source,"userAgent")||name,originator:readString(source,"originator"),update:readUpdateChannel(source),...changelog?{changelog}:{}}}function consumeBrandProfile(env=process.env){return parseBrandProfile(env[BRAND_ENV_VAR])}function scrubBrandFromEnvironment(env=process.env){delete env[BRAND_ENV_VAR]}var LEGACY_ENV_PREFIXES=["SENPI","PI"],cachedProfile,profileResolved=!1;function brandProfile(){return profileResolved||(cachedProfile=consumeBrandProfile(),profileResolved=!0),cachedProfile}function brandEnvNames(suffix,profile=brandProfile()){let prefixes=[profile?.envPrefix,...LEGACY_ENV_PREFIXES].filter(prefix=>typeof prefix=="string"&&prefix.length>0);return[...new Set(prefixes)].map(prefix=>`${prefix}_${suffix}`)}function envValue(suffix,env=process.env){for(let name of brandEnvNames(suffix)){let value=env[name];if(value!==void 0)return value}}var import_cross_spawn=__toESM(require_cross_spawn(),1);import{spawn as nodeSpawn,spawnSync as nodeSpawnSync}from"node:child_process";var EXIT_STDIO_GRACE_MS=250,ABORT_EXIT_GRACE_MS=5e3;function spawnProcess(command,args,options){return process.platform==="win32"?(0,import_cross_spawn.default)(command,args,options):nodeSpawn(command,args,options)}function spawnProcessSync(command,args,options){return process.platform==="win32"?import_cross_spawn.default.sync(command,args,options):nodeSpawnSync(command,args,options)}function waitForChildProcess(child,options){return new Promise((resolve2,reject)=>{let settled=!1,exited=!1,exitCode=null,postExitTimer,abortGraceTimer,detachAbortListener,stdoutEnded=child.stdout===null,stderrEnded=child.stderr===null,cleanup=()=>{postExitTimer&&(clearTimeout(postExitTimer),postExitTimer=void 0),abortGraceTimer&&(clearTimeout(abortGraceTimer),abortGraceTimer=void 0),detachAbortListener&&(detachAbortListener(),detachAbortListener=void 0),child.removeListener("error",onError),child.removeListener("exit",onExit),child.removeListener("close",onClose),child.stdout?.removeListener("end",onStdoutEnd),child.stderr?.removeListener("end",onStderrEnd),child.stdout?.removeListener("data",onData),child.stderr?.removeListener("data",onData)},finalize=code=>{settled||(settled=!0,cleanup(),child.stdout?.destroy(),child.stderr?.destroy(),resolve2(code))},maybeFinalizeAfterExit=()=>{!exited||settled||stdoutEnded&&stderrEnded&&finalize(exitCode)},armIdleTimer=()=>{postExitTimer&&clearTimeout(postExitTimer),postExitTimer=setTimeout(()=>finalize(exitCode),EXIT_STDIO_GRACE_MS)},onData=()=>{exited&&!settled&&armIdleTimer()},onStdoutEnd=()=>{stdoutEnded=!0,maybeFinalizeAfterExit()},onStderrEnd=()=>{stderrEnded=!0,maybeFinalizeAfterExit()},onError=err=>{settled||(settled=!0,cleanup(),reject(err))},onExit=code=>{exited=!0,exitCode=code,maybeFinalizeAfterExit(),settled||armIdleTimer()},onClose=code=>{finalize(code)},onAbortRelease=()=>{if(child.stdout?.destroy(),child.stderr?.destroy(),stdoutEnded=!0,stderrEnded=!0,exited){maybeFinalizeAfterExit();return}abortGraceTimer=setTimeout(()=>finalize(exitCode),options?.abortExitGraceMs??ABORT_EXIT_GRACE_MS)};child.stdout?.once("end",onStdoutEnd),child.stderr?.once("end",onStderrEnd),child.stdout?.on("data",onData),child.stderr?.on("data",onData),child.once("error",onError),child.once("exit",onExit),child.once("close",onClose);let abortSignal=options?.signal;abortSignal&&(abortSignal.aborted?onAbortRelease():(abortSignal.addEventListener("abort",onAbortRelease,{once:!0}),detachAbortListener=()=>abortSignal.removeEventListener("abort",onAbortRelease)))})}import{createHash}from"node:crypto";import{lstatSync,readFileSync,readlinkSync,realpathSync,statSync}from"node:fs";import{homedir}from"node:os";import{isAbsolute,join,resolve as nodeResolvePath,parse,relative,sep}from"node:path";import{fileURLToPath}from"node:url";var UNICODE_SPACES=/[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;function canonicalizePath(path){try{return realpathSync.native(path)}catch{return path}}function canonicalizePathStrict(path){return realpathSync.native(path)}var MAX_SYMLINK_HOPS=40,MISSING_PATH_CODES=new Set(["ENOENT","ENOTDIR"]);function splitParts(pathSegment){return pathSegment.split(sep).filter(part=>part.length>0)}function resolveWithoutOpen(inputPath){let absolutePath=isAbsolute(inputPath)?inputPath:nodeResolvePath(inputPath),{root}=parse(absolutePath),pending=splitParts(absolutePath.slice(root.length)),resolved=[],hops=0;for(;pending.length>0;){let part=pending.shift();if(part===void 0)break;if(part===".")continue;if(part===".."){resolved.pop();continue}let candidate=join(root,...resolved,part),link;try{if(!lstatSync(candidate).isSymbolicLink()){resolved.push(part);continue}if(hops+=1,hops>MAX_SYMLINK_HOPS)return{path:join(candidate,...pending),errorCode:"ELOOP"};link=readlinkSync(candidate)}catch(error){let code=error?.code??"UNKNOWN";return{path:join(candidate,...pending),errorCode:code}}isAbsolute(link)?(resolved.length=0,pending.unshift(...splitParts(link.slice(parse(link).root.length)))):pending.unshift(...splitParts(link))}return{path:join(root,...resolved)}}function realpathWithoutOpen(inputPath){return resolveWithoutOpen(inputPath).path}function realpathWithoutOpenStrict(inputPath){let resolution=resolveWithoutOpen(inputPath);if(resolution.errorCode!==void 0&&!MISSING_PATH_CODES.has(resolution.errorCode))throw Object.assign(new Error(`${resolution.errorCode}: cannot resolve path '${inputPath}' without opening it`),{code:resolution.errorCode,path:inputPath});return resolution.path}function getFileRevision(path){try{let stats=statSync(path,{bigint:!0});return`${stats.dev}:${stats.ino}:${stats.size}:${stats.mtimeNs}:${stats.ctimeNs}`}catch{return}}function getFileContentRevision(path){try{return createHash("sha256").update(readFileSync(path)).digest("hex")}catch{return}}function isLocalPath(value){let trimmed=value.trim();return!(trimmed.startsWith("npm:")||trimmed.startsWith("git:")||trimmed.startsWith("github:")||trimmed.startsWith("http:")||trimmed.startsWith("https:")||trimmed.startsWith("ssh:"))}function normalizeWindowsShellPath(filePath){if(!filePath.startsWith("/")||filePath.startsWith("//")||filePath.includes("\\"))return filePath;let match=filePath.match(/^\/(?:mnt\/|cygdrive\/)?([a-z])(?:\/(.*))?$/i);if(!match)return filePath;let suffix=match[2]?.replaceAll("/","\\");return`${match[1].toUpperCase()}:\\${suffix??""}`}function normalizePath(input,options={}){let normalized=options.trim?input.trim():input;if(options.normalizeUnicodeSpaces&&(normalized=normalized.replace(UNICODE_SPACES," ")),options.stripAtPrefix&&normalized.startsWith("@")&&(normalized=normalized.slice(1)),process.platform==="win32"&&(normalized=normalizeWindowsShellPath(normalized)),options.expandTilde??!0){let home=options.homeDir??homedir();if(normalized==="~")return home;if(normalized.startsWith("~/")||process.platform==="win32"&&normalized.startsWith("~\\"))return join(home,normalized.slice(2))}return/^file:\/\//.test(normalized)?fileURLToPath(normalized):normalized}function resolvePath(input,baseDir=process.cwd(),options={}){let normalized=normalizePath(input,options),normalizedBaseDir=normalizePath(baseDir);return isAbsolute(normalized)?nodeResolvePath(normalized):nodeResolvePath(normalizedBaseDir,normalized)}function getCwdRelativePath(filePath,cwd){let resolvedCwd=resolvePath(cwd),resolvedPath=resolvePath(filePath,resolvedCwd),relativePath=relative(resolvedCwd,resolvedPath);return relativePath===""||relativePath!==".."&&!relativePath.startsWith(`..${sep}`)&&!isAbsolute(relativePath)?relativePath||".":void 0}function formatPathRelativeToCwdOrAbsolute(filePath,cwd){let absolutePath=resolvePath(filePath,cwd);return(getCwdRelativePath(absolutePath,cwd)??absolutePath).split(sep).join("/")}function markPathIgnoredByCloudSync(path){let attrs=process.platform==="darwin"?["com.dropbox.ignored","com.apple.fileprovider.ignore#P"]:process.platform==="linux"?["user.com.dropbox.ignored"]:[];for(let attr of attrs)process.platform==="darwin"?spawnProcessSync("xattr",["-w",attr,"1",path],{encoding:"utf-8",stdio:"ignore"}):spawnProcessSync("setfattr",["-n",attr,"-v","1",path],{encoding:"utf-8",stdio:"ignore"})}import{accessSync,constants,existsSync,readFileSync as readFileSync3,realpathSync as realpathSync2}from"fs";import{homedir as homedir2}from"os";import{basename,dirname as dirname3,join as join5,resolve,sep as sep2,win32}from"path";import{fileURLToPath as fileURLToPath2}from"url";import{dirname,join as join2}from"node:path";var BUN_LAUNCHER_REPAIR_SOURCE=`
7
+ import { renameSync, writeFileSync } from "node:fs";
8
+ const [launcher, entrypoint] = process.argv.slice(1);
9
+ if (!launcher || !entrypoint) throw new Error("Missing Bun launcher repair path");
10
+ const quote = (value) => "'" + value.replaceAll("'", "'\\"'\\"'") + "'";
11
+ const temporary = launcher + "." + process.pid + ".tmp";
12
+ writeFileSync(temporary, "#!/bin/sh\\nexec " + quote(process.execPath) + " " + quote(entrypoint) + " \\"$@\\"\\n", { mode: 0o755 });
13
+ renameSync(temporary, launcher);
14
+ `.trim();function createBunLauncherRepairCommand(binDir,packageName,executableName){let packageDir=join2(dirname(binDir),"install","global","node_modules",...packageName.split("/")),launcher=join2(binDir,executableName),entrypoint=join2(packageDir,"dist","cli.js");return{command:"bun",args:["-e",BUN_LAUNCHER_REPAIR_SOURCE,launcher,entrypoint],display:`repair Bun launcher ${launcher}`}}import{lstatSync as lstatSync2}from"node:fs";import{dirname as dirname2,join as join3,normalize}from"node:path";var MAX_PARENT_CONFIG_SEARCH_DEPTH=100;function isDirectory(path){try{return lstatSync2(path).isDirectory()}catch{return!1}}function isFile(path){try{return lstatSync2(path).isFile()}catch{return!1}}function findNearestParentConfigDir(cwd,homeDir,configDirName,requiredChildDir,requiredChildFile){let normalizedHomeDir=normalize(homeDir),currentDir=normalize(cwd);for(let depth=0;depth<=MAX_PARENT_CONFIG_SEARCH_DEPTH;depth+=1){if(currentDir===normalizedHomeDir)return;let configDir=join3(currentDir,configDirName),hasRequiredChild=requiredChildFile?isFile(join3(configDir,requiredChildFile)):!requiredChildDir||isDirectory(join3(configDir,requiredChildDir));if(isDirectory(configDir)&&hasRequiredChild)return configDir;let parentDir=dirname2(currentDir);if(parentDir===currentDir)return;currentDir=parentDir}}import{readFileSync as readFileSync2}from"node:fs";import{isAbsolute as isAbsolute2,join as join4,relative as relative2}from"node:path";var RUNTIME_SNAPSHOT_MARKER="runtime-snapshot.json";function readRuntimeSnapshotMarker(packageRoot){let text;try{text=readFileSync2(join4(packageRoot,RUNTIME_SNAPSHOT_MARKER),"utf8")}catch(error){if(error instanceof Error&&"code"in error&&(error.code==="ENOENT"||error.code==="ENOTDIR"))return;throw error}let parsed=JSON.parse(text);if(typeof parsed=="object"&&parsed!==null&&"buildId"in parsed&&typeof parsed.buildId=="string"&&"installPackageDir"in parsed&&typeof parsed.installPackageDir=="string")return{buildId:parsed.buildId,installPackageDir:parsed.installPackageDir}}function resolveInstallPath(path,packageRoot){let marker=readRuntimeSnapshotMarker(packageRoot);if(!marker)return path;let inside=relative2(packageRoot,path);return inside.startsWith("..")||isAbsolute2(inside)?path:join4(marker.installPackageDir,inside)}function splitBom(content){return content.startsWith("\uFEFF")?{bom:"\uFEFF",text:content.slice(1)}:{bom:"",text:content}}function stripBom(content){return splitBom(content).text}var __filename=fileURLToPath2(import.meta.url),__dirname=dirname3(__filename),isBunBinary=import.meta.url.includes("$bunfs")||import.meta.url.includes("~BUN")||import.meta.url.includes("%7EBUN"),isBunRuntime=!!process.versions.bun,isBundledNode=!0;function normalizeSelfUpdatePackageTarget(target){return typeof target=="string"?{packageName:target,installSpec:target}:{packageName:target.packageName,installSpec:target.installSpec??target.packageName}}function makeSelfUpdateCommand(installStep,uninstallStep,postInstallStep){let steps=[...uninstallStep?[uninstallStep]:[],installStep,...postInstallStep?[postInstallStep]:[]];return steps.length===1?installStep:{...installStep,display:steps.map(step=>step.display).join(" && "),steps}}function makeSelfUpdateCommandStep(command,args){return{command,args,display:[command,...args].map(arg=>/\s/.test(arg)?`"${arg}"`:arg).join(" ")}}function detectInstallMethod(){if(isBunBinary)return"bun-binary";let resolvedPath=`${resolveInstallPath(__dirname,findNodePackageDir(__dirname))}\0${process.execPath||""}`.toLowerCase().replace(/\\/g,"/");return resolvedPath.includes("/pnpm/")||resolvedPath.includes("/.pnpm/")?"pnpm":resolvedPath.includes("/yarn/")||resolvedPath.includes("/.yarn/")?"yarn":isBunRuntime||resolvedPath.includes("/install/global/node_modules/")?"bun":resolvedPath.includes("/npm/")||resolvedPath.includes("/node_modules/")?"npm":"unknown"}function getInferredNpmInstall(){let packageDir=getInstallPackageDir(),path=process.platform==="win32"||packageDir.includes("\\")?win32:{basename,dirname:dirname3},parent=path.dirname(packageDir),root;if(path.basename(parent).startsWith("@")&&path.basename(path.dirname(parent))==="node_modules"?root=path.dirname(parent):path.basename(parent)==="node_modules"&&(root=parent),!root)return;let rootParent=path.dirname(root);if(path.basename(rootParent)==="lib")return{root,prefix:path.dirname(rootParent)}}function getSelfUpdateCommandForMethod(method,installedPackageName,updatePackageTarget=installedPackageName,npmCommand){let target=normalizeSelfUpdatePackageTarget(updatePackageTarget);switch(method){case"bun-binary":return;case"pnpm":{let match=readCommandOutput("pnpm",["root","-g"])?void 0:/^(.*[\\/]global[\\/][^\\/]+)[\\/]\.pnpm[\\/]/.exec(getInstallPackageDir()),binDirArgs=match?[`--config.global-bin-dir=${process.env.PNPM_HOME||dirname3(dirname3(match[1]))}`]:[];return makeSelfUpdateCommand(makeSelfUpdateCommandStep("pnpm",["install","-g","--ignore-scripts","--config.minimumReleaseAge=0",...binDirArgs,target.installSpec]),target.packageName===installedPackageName?void 0:makeSelfUpdateCommandStep("pnpm",["remove","-g",...binDirArgs,installedPackageName]))}case"yarn":return makeSelfUpdateCommand(makeSelfUpdateCommandStep("yarn",["global","add","--ignore-scripts",target.installSpec]),target.packageName===installedPackageName?void 0:makeSelfUpdateCommandStep("yarn",["global","remove",installedPackageName]));case"bun":{let binDir=readCommandOutput("bun",["pm","bin","-g"]);return binDir?makeSelfUpdateCommand(makeSelfUpdateCommandStep("bun",["install","-g","--ignore-scripts","--minimum-release-age=0",target.installSpec]),target.packageName===installedPackageName?void 0:makeSelfUpdateCommandStep("bun",["uninstall","-g",installedPackageName]),process.platform==="win32"?void 0:createBunLauncherRepairCommand(binDir,target.packageName,APP_NAME)):void 0}case"npm":{let[command="npm",...npmArgs]=npmCommand??[],inferred=npmCommand?.length?void 0:getInferredNpmInstall(),prefixArgs=[...npmArgs,...inferred?["--prefix",inferred.prefix]:[]],installStep=makeSelfUpdateCommandStep(command,[...prefixArgs,"install","-g","--ignore-scripts","--min-release-age=0",target.installSpec]),uninstallStep=target.packageName===installedPackageName?void 0:makeSelfUpdateCommandStep(command,[...prefixArgs,"uninstall","-g",installedPackageName]);return makeSelfUpdateCommand(installStep,uninstallStep)}case"unknown":return}}function readCommandOutput(command,args,options={}){let result=spawnProcessSync(command,args,{encoding:"utf-8",stdio:["ignore","pipe","pipe"]});if(result.status===0)return result.stdout.trim()||void 0;if(options.requireSuccess){let reason=result.error?.message||result.stderr.trim()||`exit code ${result.status??"unknown"}`;throw new Error(`Failed to run ${[command,...args].join(" ")}: ${reason}`)}}function getGlobalPackageRoots(method,_packageName,npmCommand){switch(method){case"npm":{let configured=!!npmCommand?.length,[command="npm",...npmArgs]=npmCommand??[];if(configured&&command==="bun"){let bunBin=readCommandOutput(command,[...npmArgs,"pm","bin","-g"],{requireSuccess:!0}),roots=[join5(homedir2(),".bun","install","global","node_modules")];return bunBin&&roots.push(join5(dirname3(bunBin),"install","global","node_modules")),roots}let root=readCommandOutput(command,[...npmArgs,"root","-g"],{requireSuccess:configured}),inferred=configured?void 0:getInferredNpmInstall();return[root,inferred?.root].filter(x=>!!x)}case"pnpm":{let root=readCommandOutput("pnpm",["root","-g"]);if(root)return[root,dirname3(root)];let match=/^(.*[\\/]global[\\/][^\\/]+)[\\/]\.pnpm[\\/]/.exec(getInstallPackageDir());return match?[match[1]]:[]}case"yarn":{let dir=readCommandOutput("yarn",["global","dir"]);return dir?[dir,join5(dir,"node_modules")]:[]}case"bun":{let bunBin=readCommandOutput("bun",["pm","bin","-g"]),roots=[join5(homedir2(),".bun","install","global","node_modules")];return bunBin&&roots.push(join5(dirname3(bunBin),"install","global","node_modules")),roots}case"bun-binary":case"unknown":return[]}}function normalizeExistingPathForComparison(path,resolveSymlinks){let resolvedPath=resolve(path);if(!existsSync(resolvedPath))return;let normalizedPath=resolvedPath;if(resolveSymlinks)try{normalizedPath=realpathSync2(resolvedPath)}catch{return}return process.platform==="win32"&&(normalizedPath=normalizedPath.toLowerCase()),normalizedPath}function getPathComparisonCandidates(path){return Array.from(new Set([normalizeExistingPathForComparison(path,!1),normalizeExistingPathForComparison(path,!0)].filter(candidate=>!!candidate)))}function getEntrypointPackageDir(){let entrypoint=process.argv[1];if(!entrypoint)return;let dir=dirname3(entrypoint);for(;dir!==dirname3(dir);){if(existsSync(join5(dir,"package.json")))return dir;dir=dirname3(dir)}}function isSelfUpdatePathWritable(){let packageDir=getInstallPackageDir();try{return accessSync(packageDir,constants.W_OK),accessSync(dirname3(packageDir),constants.W_OK),!0}catch{return!1}}function isManagedByGlobalPackageManager(method,packageName,npmCommand){let packageDirCandidates=[getInstallPackageDir(),getEntrypointPackageDir()].filter(dir=>!!dir).flatMap(dir=>getPathComparisonCandidates(dir));return getGlobalPackageRoots(method,packageName,npmCommand).some(root=>getPathComparisonCandidates(root).some(normalizedRoot=>{let rootPrefix=normalizedRoot.endsWith(sep2)?normalizedRoot:`${normalizedRoot}${sep2}`;return packageDirCandidates.some(packageDir=>packageDir.startsWith(rootPrefix))}))}function getSelfUpdateCommand(packageName,npmCommand,updatePackageTarget=packageName){let method=detectInstallMethod(),command=getSelfUpdateCommandForMethod(method,packageName,updatePackageTarget,npmCommand);if(!(!command||!isManagedByGlobalPackageManager(method,packageName,npmCommand)||!isSelfUpdatePathWritable()))return command}function getSelfUpdateUnavailableInstruction(packageName,npmCommand,updatePackageTarget=packageName){let method=detectInstallMethod(),target=normalizeSelfUpdatePackageTarget(updatePackageTarget);if(method==="bun-binary")return"Download from: https://github.com/code-yeongyu/senpi/releases/latest";let command=getSelfUpdateCommandForMethod(method,packageName,target,npmCommand);return command?isManagedByGlobalPackageManager(method,packageName,npmCommand)&&!isSelfUpdatePathWritable()?`This installation is managed by a global ${method} install, but the install path is not writable. Update it yourself with: ${command.display}`:`This installation is not managed by a global ${method} install. Update it with the package manager, wrapper, or source checkout that provides it.`:`Update ${target.installSpec} using the package manager, wrapper, or source checkout that provides this installation.`}function findNodePackageDir(startDir){let dir=startDir;for(;dir!==dirname3(dir);){if(existsSync(join5(dir,"package.json"))){let parent=dirname3(dir);return basename(dir)==="dist"&&existsSync(join5(parent,"package.json"))?parent:dir}dir=dirname3(dir)}return startDir}function getPackageDir(){let envDir=envValue("PACKAGE_DIR");return envDir?normalizePath(envDir):isBunBinary?dirname3(process.execPath):findNodePackageDir(__dirname)}function getInstallPackageDir(){let packageDir=getPackageDir();return resolveInstallPath(packageDir,packageDir)}var THEMES_ASSET={binaryDir:"theme",sourceSegments:["modes","interactive","theme"],probe:"dark.json"},EXPORT_TEMPLATE_ASSET={binaryDir:"export-html",sourceSegments:["core","export-html"],probe:"template.html"},INTERACTIVE_ASSETS={binaryDir:"assets",sourceSegments:["modes","interactive","assets"],probe:"clankolas.png"};function assetDirIn(root,asset){if(isBunBinary)return join5(root,asset.binaryDir);let srcOrDist=existsSync(join5(root,"src"))?"src":"dist";return join5(root,srcOrDist,...asset.sourceSegments)}function resolveShippedAssetDir(asset){let preferred=assetDirIn(getPackageDir(),asset);return existsSync(join5(preferred,asset.probe))?preferred:assetDirIn(isBunBinary?dirname3(process.execPath):findNodePackageDir(__dirname),asset)}function getThemesDir(){return resolveShippedAssetDir(THEMES_ASSET)}function getExportTemplateDir(){return resolveShippedAssetDir(EXPORT_TEMPLATE_ASSET)}function getPackageJsonPath(){return join5(getPackageDir(),"package.json")}function getReadmePath(){return resolve(join5(getPackageDir(),"README.md"))}function getDocsPath(){return resolve(join5(getPackageDir(),"docs"))}function getExamplesPath(){return resolve(join5(getPackageDir(),"examples"))}function getChangelogPath(){return resolve(join5(getPackageDir(),"CHANGELOG.md"))}function getInteractiveAssetsDir(){return resolveShippedAssetDir(INTERACTIVE_ASSETS)}function getBundledInteractiveAssetPath(name){return join5(getInteractiveAssetsDir(),name)}var pkg={};try{pkg=JSON.parse(stripBom(readFileSync3(getPackageJsonPath(),"utf-8")))}catch(e){if(e.code!=="ENOENT")throw e}var piConfigName=pkg.piConfig?.name,BRAND=brandProfile(),PACKAGE_NAME=pkg.name||"@earendil-works/pi-coding-agent",APP_NAME=BRAND?.name||piConfigName||"pi",APP_COMMAND=BRAND?.command??APP_NAME,APP_TITLE=BRAND?.name||(piConfigName?APP_NAME:"\u03C0"),CONFIG_DIR_NAME=BRAND?.configDir||pkg.piConfig?.configDir||".pi",CONFIG_FLAT_LAYOUT=BRAND?.flatLayout===!0,VERSION=pkg.version||"0.0.0",DISPLAY_VERSION=BRAND?.displayVersion||VERSION,ENV_PREFIX=BRAND?.envPrefix||APP_NAME.toUpperCase(),ENV_AGENT_DIR=`${ENV_PREFIX}_CODING_AGENT_DIR`,ENV_SESSION_DIR=`${ENV_PREFIX}_CODING_AGENT_SESSION_DIR`;function expandTildePath(path){return normalizePath(path)}var DEFAULT_SHARE_VIEWER_URL="https://pi.dev/session/";function getShareViewerUrl(gistId){return`${envValue("SHARE_VIEWER_URL")||DEFAULT_SHARE_VIEWER_URL}#${gistId}`}var FLAT_LAYOUT_SENTINEL="settings.json";function resolveAgentDir(cwd,homeDir,envDir){if(envDir)return normalizePath(envDir,{homeDir});if(CONFIG_FLAT_LAYOUT)return findNearestParentConfigDir(cwd,homeDir,CONFIG_DIR_NAME,void 0,FLAT_LAYOUT_SENTINEL)??join5(homeDir,CONFIG_DIR_NAME);let projectConfigDir=findNearestParentConfigDir(cwd,homeDir,CONFIG_DIR_NAME,"agent");return projectConfigDir?join5(projectConfigDir,"agent"):join5(homeDir,CONFIG_DIR_NAME,"agent")}function getAgentDir(){return resolveAgentDir(process.cwd(),homedir2(),envValue("CODING_AGENT_DIR"))}function agentDirLabel(){return CONFIG_FLAT_LAYOUT?`~/${CONFIG_DIR_NAME}`:`~/${CONFIG_DIR_NAME}/agent`}function getCustomThemesDir(){return join5(getAgentDir(),"themes")}function getModelsPath(){return join5(getAgentDir(),"models.json")}function getAuthPath(){return join5(getAgentDir(),"auth.json")}function getSettingsPath(){return join5(getAgentDir(),"settings.json")}function getBinDir(){return join5(getAgentDir(),"bin")}function getSessionsDir(){return join5(getAgentDir(),"sessions")}function getDebugLogPath(){return join5(getAgentDir(),`${APP_NAME}-debug.log`)}export{scrubBrandFromEnvironment,brandProfile,envValue,findNearestParentConfigDir,RUNTIME_SNAPSHOT_MARKER,readRuntimeSnapshotMarker,spawnProcess,spawnProcessSync,waitForChildProcess,canonicalizePath,canonicalizePathStrict,realpathWithoutOpen,realpathWithoutOpenStrict,getFileRevision,getFileContentRevision,isLocalPath,normalizePath,resolvePath,getCwdRelativePath,formatPathRelativeToCwdOrAbsolute,markPathIgnoredByCloudSync,splitBom,stripBom,isBunBinary,isBunRuntime,isBundledNode,detectInstallMethod,getSelfUpdateCommand,getSelfUpdateUnavailableInstruction,findNodePackageDir,getPackageDir,getInstallPackageDir,getThemesDir,getExportTemplateDir,getReadmePath,getDocsPath,getExamplesPath,getChangelogPath,getBundledInteractiveAssetPath,BRAND,PACKAGE_NAME,APP_NAME,APP_COMMAND,APP_TITLE,CONFIG_DIR_NAME,CONFIG_FLAT_LAYOUT,VERSION,DISPLAY_VERSION,ENV_AGENT_DIR,ENV_SESSION_DIR,expandTildePath,getShareViewerUrl,FLAT_LAYOUT_SENTINEL,resolveAgentDir,getAgentDir,agentDirLabel,getCustomThemesDir,getModelsPath,getAuthPath,getSettingsPath,getBinDir,getSessionsDir,getDebugLogPath};
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url); { const __piWorkerThreads = require("node:worker_threads"); if (typeof __piWorkerThreads.markAsUncloneable !== "function") { __piWorkerThreads.markAsUncloneable = () => {}; } }
2
- import{shortHash}from"./chunk-UIOI2SK3.js";var TOOL_CALL_ID_MAX_LENGTH=64;function normalizeToolCallId(id){let sanitized=id.replace(/[^a-zA-Z0-9_-]/g,"_");if(sanitized.length<=TOOL_CALL_ID_MAX_LENGTH)return sanitized;let suffix=`_${shortHash(id)}`;return`${sanitized.slice(0,TOOL_CALL_ID_MAX_LENGTH-suffix.length)}${suffix}`}export{normalizeToolCallId};
2
+ import{shortHash}from"./chunk-XVX4M3DZ.js";var TOOL_CALL_ID_MAX_LENGTH=64;function normalizeToolCallId(id){let sanitized=id.replace(/[^a-zA-Z0-9_-]/g,"_");if(sanitized.length<=TOOL_CALL_ID_MAX_LENGTH)return sanitized;let suffix=`_${shortHash(id)}`;return`${sanitized.slice(0,TOOL_CALL_ID_MAX_LENGTH-suffix.length)}${suffix}`}export{normalizeToolCallId};