@earendil-works/pi-coding-agent 0.99.2 → 1.0.0

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 (143) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/bundle/chunks/anthropic.js +2 -2
  3. package/dist/bundle/chunks/{azure-openai-responses-TLHNIYZK.js → azure-openai-responses-AFMVM6NP.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-7QSPBJKW.js → chunk-2KTBZM5G.js} +14 -28
  5. package/dist/bundle/chunks/{chunk-R5J3MOBF.js → chunk-2VNGUWBO.js} +1 -1
  6. package/dist/bundle/chunks/chunk-33XOIQ5N.js +1204 -0
  7. package/dist/bundle/chunks/chunk-4KU537KD.js +2 -0
  8. package/dist/bundle/chunks/chunk-7FH3BDRG.js +82 -0
  9. package/dist/bundle/chunks/{chunk-45SXDISG.js → chunk-IBCPYVFK.js} +4 -4
  10. package/dist/bundle/chunks/chunk-KDN6RCEQ.js +4 -0
  11. package/dist/bundle/chunks/{chunk-G3UZ5FWD.js → chunk-LTXEMVMA.js} +11 -60
  12. package/dist/bundle/chunks/chunk-PRD6WYBT.js +16 -0
  13. package/dist/bundle/chunks/{cli-ALNBTL3U.js → cli-QOMC26IJ.js} +3 -3
  14. package/dist/bundle/chunks/codemode-worker.js +44 -5
  15. package/dist/bundle/chunks/execute-GVRSEGHL.js +367 -0
  16. package/dist/bundle/chunks/openai-chatgpt.js +1 -1
  17. package/dist/bundle/chunks/{openai-codex-responses-3GKGNXC4.js → openai-codex-responses-GK67DQQJ.js} +1 -1
  18. package/dist/bundle/chunks/openai-codex.js +1 -1
  19. package/dist/bundle/chunks/{openai-responses-S7GKCCDG.js → openai-responses-CQDDLDQF.js} +1 -1
  20. package/dist/bundle/chunks/openrouter.js +1 -1
  21. package/dist/bundle/chunks/pi-logo-animation-MPKZE4EK.js +2 -0
  22. package/dist/bundle/chunks/radius.js +1 -1
  23. package/dist/bundle/chunks/runtime-2SO2JDWM.js +2 -0
  24. package/dist/bundle/chunks/virtual-modules-6ZMK7GDO.js +2 -0
  25. package/dist/bundle/cli-runtime.js +1 -1
  26. package/dist/bundle/index.js +1 -1
  27. package/dist/bundle/rpc-entry.js +1 -1
  28. package/dist/cli/args.js +2 -2
  29. package/dist/cli/args.js.map +1 -1
  30. package/dist/core/agent-session.d.ts +8 -0
  31. package/dist/core/agent-session.d.ts.map +1 -1
  32. package/dist/core/agent-session.js +37 -8
  33. package/dist/core/agent-session.js.map +1 -1
  34. package/dist/core/mcp-servers.d.ts +6 -0
  35. package/dist/core/mcp-servers.d.ts.map +1 -1
  36. package/dist/core/mcp-servers.js +7 -0
  37. package/dist/core/mcp-servers.js.map +1 -1
  38. package/dist/core/model-registry.d.ts +3 -1
  39. package/dist/core/model-registry.d.ts.map +1 -1
  40. package/dist/core/model-registry.js +4 -0
  41. package/dist/core/model-registry.js.map +1 -1
  42. package/dist/core/radius.d.ts +2 -0
  43. package/dist/core/radius.d.ts.map +1 -1
  44. package/dist/core/radius.js +2 -0
  45. package/dist/core/radius.js.map +1 -1
  46. package/dist/core/settings-manager.d.ts +7 -5
  47. package/dist/core/settings-manager.d.ts.map +1 -1
  48. package/dist/core/settings-manager.js +3 -2
  49. package/dist/core/settings-manager.js.map +1 -1
  50. package/dist/core/system-prompt.js +1 -1
  51. package/dist/core/system-prompt.js.map +1 -1
  52. package/dist/core/tools/bash.d.ts.map +1 -1
  53. package/dist/core/tools/bash.js +3 -5
  54. package/dist/core/tools/bash.js.map +1 -1
  55. package/dist/extensions/codemode/execute.d.ts.map +1 -1
  56. package/dist/extensions/codemode/execute.js +154 -47
  57. package/dist/extensions/codemode/execute.js.map +1 -1
  58. package/dist/extensions/codemode/tool.d.ts +7 -7
  59. package/dist/extensions/codemode/tool.d.ts.map +1 -1
  60. package/dist/extensions/codemode/tool.js +55 -102
  61. package/dist/extensions/codemode/tool.js.map +1 -1
  62. package/dist/extensions/mcp/cli.js +2 -2
  63. package/dist/extensions/mcp/cli.js.map +1 -1
  64. package/dist/extensions/mcp/index.d.ts.map +1 -1
  65. package/dist/extensions/mcp/index.js +23 -12
  66. package/dist/extensions/mcp/index.js.map +1 -1
  67. package/dist/extensions/mcp/oauth.d.ts +8 -7
  68. package/dist/extensions/mcp/oauth.d.ts.map +1 -1
  69. package/dist/extensions/mcp/oauth.js +55 -30
  70. package/dist/extensions/mcp/oauth.js.map +1 -1
  71. package/dist/extensions/mcp/runtime.d.ts.map +1 -1
  72. package/dist/extensions/mcp/runtime.js +2 -1
  73. package/dist/extensions/mcp/runtime.js.map +1 -1
  74. package/dist/index.d.ts +1 -1
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/main.d.ts.map +1 -1
  78. package/dist/main.js +6 -0
  79. package/dist/main.js.map +1 -1
  80. package/dist/modes/interactive/components/oauth-selector.d.ts +8 -2
  81. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  82. package/dist/modes/interactive/components/oauth-selector.js +24 -21
  83. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  84. package/dist/modes/interactive/components/pi-logo-animation.d.ts +68 -0
  85. package/dist/modes/interactive/components/pi-logo-animation.d.ts.map +1 -0
  86. package/dist/modes/interactive/components/pi-logo-animation.js +1086 -0
  87. package/dist/modes/interactive/components/pi-logo-animation.js.map +1 -0
  88. package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts +7 -0
  89. package/dist/modes/interactive/components/pi-logo-animation.lazy.d.ts.map +1 -0
  90. package/dist/modes/interactive/components/pi-logo-animation.lazy.js +12 -0
  91. package/dist/modes/interactive/components/pi-logo-animation.lazy.js.map +1 -0
  92. package/dist/modes/interactive/components/pi-logo.d.ts +7 -0
  93. package/dist/modes/interactive/components/pi-logo.d.ts.map +1 -1
  94. package/dist/modes/interactive/components/pi-logo.js +13 -1
  95. package/dist/modes/interactive/components/pi-logo.js.map +1 -1
  96. package/dist/modes/interactive/components/radius-login-selector.d.ts +15 -0
  97. package/dist/modes/interactive/components/radius-login-selector.d.ts.map +1 -0
  98. package/dist/modes/interactive/components/radius-login-selector.js +85 -0
  99. package/dist/modes/interactive/components/radius-login-selector.js.map +1 -0
  100. package/dist/modes/interactive/components/settings-selector.d.ts +3 -3
  101. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  102. package/dist/modes/interactive/components/settings-selector.js +5 -5
  103. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  104. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  105. package/dist/modes/interactive/components/user-message.js +5 -4
  106. package/dist/modes/interactive/components/user-message.js.map +1 -1
  107. package/dist/modes/interactive/interactive-mode.d.ts +10 -0
  108. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  109. package/dist/modes/interactive/interactive-mode.js +153 -40
  110. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  111. package/dist/modes/interactive/theme/system-theme.d.ts +2 -1
  112. package/dist/modes/interactive/theme/system-theme.d.ts.map +1 -1
  113. package/dist/modes/interactive/theme/system-theme.js +16 -5
  114. package/dist/modes/interactive/theme/system-theme.js.map +1 -1
  115. package/docs/cli.md +6 -16
  116. package/docs/codemode.md +207 -0
  117. package/docs/docs.json +5 -1
  118. package/docs/environment-variables.md +2 -2
  119. package/docs/index.md +1 -1
  120. package/docs/mcp.md +17 -0
  121. package/docs/models.md +22 -1
  122. package/docs/providers.md +16 -6
  123. package/docs/sdk.md +1 -1
  124. package/docs/settings.md +3 -3
  125. package/docs/usage.md +1 -1
  126. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  127. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  128. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  129. package/examples/extensions/gondolin/package-lock.json +2 -2
  130. package/examples/extensions/gondolin/package.json +1 -1
  131. package/examples/extensions/sandbox/package-lock.json +2 -2
  132. package/examples/extensions/sandbox/package.json +1 -1
  133. package/examples/extensions/with-deps/package-lock.json +2 -2
  134. package/examples/extensions/with-deps/package.json +1 -1
  135. package/npm-shrinkwrap.json +25 -30
  136. package/package.json +10 -10
  137. package/dist/bundle/chunks/chunk-3KYEVQKX.js +0 -82
  138. package/dist/bundle/chunks/chunk-3NVH2HQH.js +0 -4
  139. package/dist/bundle/chunks/chunk-3YAHQSW6.js +0 -1438
  140. package/dist/bundle/chunks/chunk-ECRK44UV.js +0 -2
  141. package/dist/bundle/chunks/execute-RC7W4ML3.js +0 -328
  142. package/dist/bundle/chunks/runtime-NJPX4ID2.js +0 -2
  143. package/dist/bundle/chunks/virtual-modules-5UGH4HRZ.js +0 -2
@@ -1,2 +0,0 @@
1
- import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{AgentSession,AgentSessionRuntime,ArminComponent,AssistantMessageComponent,BashExecutionComponent,BorderedLoader,BranchSummaryMessageComponent,CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent,CredentialSynchronizationError,CustomEditor,CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS,DefaultPackageManager,DefaultResourceLoader,DynamicBorder,ExtensionEditorComponent,ExtensionInputComponent,ExtensionRunner,ExtensionSelectorComponent,FooterComponent,InteractiveMode,LoginDialogComponent,ModelRegistry,ModelRuntime,ModelSelectorComponent,OAuthSelectorComponent,RpcClient,SessionManager,SessionSelectorComponent,SettingsManager,SettingsSelectorComponent,SkillInvocationMessageComponent,ThinkingSelectorComponent,ToolExecutionComponent,TreeSelectorComponent,UserMessageComponent,UserMessageSelectorComponent,VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries,buildSessionContext,buildSessionProjection,calculateContextTokens,collectEntriesForBranchSummary,compact,convertToLlm,convertToPng,copyToClipboard,createAgentSession,createAgentSessionFromServices,createAgentSessionRuntime,createAgentSessionServices,createBashTool,createBashToolDefinition,createCodemodeExtension,createCodingTools,createEditTool,createEditToolDefinition,createEventBus,createExtensionRuntime,createFindTool,createFindToolDefinition,createGrepTool,createGrepToolDefinition,createLocalBashOperations,createLocalPowerShellOperations,createLsTool,createLsToolDefinition,createMcpExtension,createPowerShellTool,createPowerShellToolDefinition,createReadOnlyTools,createReadTool,createReadToolDefinition,createSyntheticSourceInfo,createToolSearchExtension,createWriteTool,createWriteToolDefinition,defineTool,detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions,estimateTokens,findCutPoint,findTurnStartIndex,formatDimensionNote,formatSkillsForPrompt,generateBranchSummary,generateDiffString,generateSummary,generateSummaryWithUsage,generateUnifiedPatch,getLastAssistantUsage,getLatestCompactionEntry,isBashToolResult,isEditToolResult,isFindToolResult,isGrepToolResult,isLsToolResult,isPowerShellToolResult,isReadToolResult,isToolCallEventType,isWriteToolResult,loadProjectContextFiles,loadSkills,loadSkillsFromDir,main,migrateSessionEntries,parseArgs,parseFrontmatter,parseSessionEntries,parseSkillBlock,prepareBranchEntries,renderDiff,resizeImage,resolveCliModel,resolveModelScopeWithDiagnostics,runPrintMode,runRpcMode,serializeConversation,sessionEntryToContextMessages,shouldCompact,stripFrontmatter,withFileMutationQueue,wrapRegisteredTool,wrapRegisteredTools}from"./chunk-3YAHQSW6.js";import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-3NVH2HQH.js";import{DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,formatSize,readStoredCredential,truncateHead,truncateLine,truncateTail}from"./chunk-45SXDISG.js";import{CONFIG_DIR_NAME,Container,SelectList,Theme,VERSION,getAgentDir,getAvailableThemes,getDocsPath,getExamplesPath,getLanguageFromPath,getMarkdownTheme,getPackageDir,getPowerShellConfig,getReadmePath,getSelectListTheme,getSettingsListTheme,getShellConfig,highlightCode,initTheme,keyHint,keyText,rawKeyHint,truncateToVisualLines}from"./chunk-7QSPBJKW.js";import{__export}from"./chunk-4L3WN2XY.js";var dist_exports={};__export(dist_exports,{AgentSession:()=>AgentSession,AgentSessionRuntime:()=>AgentSessionRuntime,ArminComponent:()=>ArminComponent,AssistantMessageComponent:()=>AssistantMessageComponent,BashExecutionComponent:()=>BashExecutionComponent,BorderedLoader:()=>BorderedLoader,BranchSummaryMessageComponent:()=>BranchSummaryMessageComponent,CONFIG_DIR_NAME:()=>CONFIG_DIR_NAME,CURRENT_SESSION_VERSION:()=>CURRENT_SESSION_VERSION,CompactionSummaryMessageComponent:()=>CompactionSummaryMessageComponent,CredentialSynchronizationError:()=>CredentialSynchronizationError,CustomEditor:()=>CustomEditor,CustomMessageComponent:()=>CustomMessageComponent,DEFAULT_COMPACTION_SETTINGS:()=>DEFAULT_COMPACTION_SETTINGS,DEFAULT_MAX_BYTES:()=>DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES:()=>DEFAULT_MAX_LINES,DefaultPackageManager:()=>DefaultPackageManager,DefaultResourceLoader:()=>DefaultResourceLoader,DynamicBorder:()=>DynamicBorder,ExtensionEditorComponent:()=>ExtensionEditorComponent,ExtensionInputComponent:()=>ExtensionInputComponent,ExtensionRunner:()=>ExtensionRunner,ExtensionSelectorComponent:()=>ExtensionSelectorComponent,FooterComponent:()=>FooterComponent,InteractiveMode:()=>InteractiveMode,LoginDialogComponent:()=>LoginDialogComponent,ModelRegistry:()=>ModelRegistry,ModelRuntime:()=>ModelRuntime,ModelSelectorComponent:()=>ModelSelectorComponent,OAuthSelectorComponent:()=>OAuthSelectorComponent,ProjectTrustStore:()=>ProjectTrustStore,RpcClient:()=>RpcClient,SessionManager:()=>SessionManager,SessionSelectorComponent:()=>SessionSelectorComponent,SettingsManager:()=>SettingsManager,SettingsSelectorComponent:()=>SettingsSelectorComponent,ShowImagesSelectorComponent:()=>ShowImagesSelectorComponent,SkillInvocationMessageComponent:()=>SkillInvocationMessageComponent,Theme:()=>Theme,ThemeSelectorComponent:()=>ThemeSelectorComponent,ThinkingSelectorComponent:()=>ThinkingSelectorComponent,ToolExecutionComponent:()=>ToolExecutionComponent,TreeSelectorComponent:()=>TreeSelectorComponent,UserMessageComponent:()=>UserMessageComponent,UserMessageSelectorComponent:()=>UserMessageSelectorComponent,VERSION:()=>VERSION,VIRTUAL_MODEL_STATE_ENTRY:()=>VIRTUAL_MODEL_STATE_ENTRY,buildContextEntries:()=>buildContextEntries,buildSessionContext:()=>buildSessionContext,buildSessionProjection:()=>buildSessionProjection,calculateContextTokens:()=>calculateContextTokens,collectEntriesForBranchSummary:()=>collectEntriesForBranchSummary,compact:()=>compact,convertToLlm:()=>convertToLlm,convertToPng:()=>convertToPng,copyToClipboard:()=>copyToClipboard,createAgentSession:()=>createAgentSession,createAgentSessionFromServices:()=>createAgentSessionFromServices,createAgentSessionRuntime:()=>createAgentSessionRuntime,createAgentSessionServices:()=>createAgentSessionServices,createBashTool:()=>createBashTool,createBashToolDefinition:()=>createBashToolDefinition,createCodemodeExtension:()=>createCodemodeExtension,createCodingTools:()=>createCodingTools,createEditTool:()=>createEditTool,createEditToolDefinition:()=>createEditToolDefinition,createEventBus:()=>createEventBus,createExtensionRuntime:()=>createExtensionRuntime,createFindTool:()=>createFindTool,createFindToolDefinition:()=>createFindToolDefinition,createGrepTool:()=>createGrepTool,createGrepToolDefinition:()=>createGrepToolDefinition,createLocalBashOperations:()=>createLocalBashOperations,createLocalPowerShellOperations:()=>createLocalPowerShellOperations,createLsTool:()=>createLsTool,createLsToolDefinition:()=>createLsToolDefinition,createMcpExtension:()=>createMcpExtension,createPowerShellTool:()=>createPowerShellTool,createPowerShellToolDefinition:()=>createPowerShellToolDefinition,createReadOnlyTools:()=>createReadOnlyTools,createReadTool:()=>createReadTool,createReadToolDefinition:()=>createReadToolDefinition,createSyntheticSourceInfo:()=>createSyntheticSourceInfo,createToolSearchExtension:()=>createToolSearchExtension,createWriteTool:()=>createWriteTool,createWriteToolDefinition:()=>createWriteToolDefinition,defineTool:()=>defineTool,detectSupportedImageMimeTypeFromFile:()=>detectSupportedImageMimeTypeFromFile,discoverAndLoadExtensions:()=>discoverAndLoadExtensions,estimateTokens:()=>estimateTokens,findCutPoint:()=>findCutPoint,findTurnStartIndex:()=>findTurnStartIndex,formatDimensionNote:()=>formatDimensionNote,formatSize:()=>formatSize,formatSkillsForPrompt:()=>formatSkillsForPrompt,generateBranchSummary:()=>generateBranchSummary,generateDiffString:()=>generateDiffString,generateSummary:()=>generateSummary,generateSummaryWithUsage:()=>generateSummaryWithUsage,generateUnifiedPatch:()=>generateUnifiedPatch,getAgentDir:()=>getAgentDir,getDocsPath:()=>getDocsPath,getExamplesPath:()=>getExamplesPath,getLanguageFromPath:()=>getLanguageFromPath,getLastAssistantUsage:()=>getLastAssistantUsage,getLatestCompactionEntry:()=>getLatestCompactionEntry,getMarkdownTheme:()=>getMarkdownTheme,getPackageDir:()=>getPackageDir,getPowerShellConfig:()=>getPowerShellConfig,getReadmePath:()=>getReadmePath,getSelectListTheme:()=>getSelectListTheme,getSettingsListTheme:()=>getSettingsListTheme,getShellConfig:()=>getShellConfig,hasTrustRequiringProjectResources:()=>hasTrustRequiringProjectResources,highlightCode:()=>highlightCode,initTheme:()=>initTheme,isBashToolResult:()=>isBashToolResult,isEditToolResult:()=>isEditToolResult,isFindToolResult:()=>isFindToolResult,isGrepToolResult:()=>isGrepToolResult,isLsToolResult:()=>isLsToolResult,isPowerShellToolResult:()=>isPowerShellToolResult,isReadToolResult:()=>isReadToolResult,isToolCallEventType:()=>isToolCallEventType,isWriteToolResult:()=>isWriteToolResult,keyHint:()=>keyHint,keyText:()=>keyText,loadProjectContextFiles:()=>loadProjectContextFiles,loadSkills:()=>loadSkills,loadSkillsFromDir:()=>loadSkillsFromDir,main:()=>main,migrateSessionEntries:()=>migrateSessionEntries,parseArgs:()=>parseArgs,parseFrontmatter:()=>parseFrontmatter,parseSessionEntries:()=>parseSessionEntries,parseSkillBlock:()=>parseSkillBlock,prepareBranchEntries:()=>prepareBranchEntries,rawKeyHint:()=>rawKeyHint,readStoredCredential:()=>readStoredCredential,renderDiff:()=>renderDiff,resizeImage:()=>resizeImage,resolveCliModel:()=>resolveCliModel,resolveModelScopeWithDiagnostics:()=>resolveModelScopeWithDiagnostics,runPrintMode:()=>runPrintMode,runRpcMode:()=>runRpcMode,serializeConversation:()=>serializeConversation,sessionEntryToContextMessages:()=>sessionEntryToContextMessages,shouldCompact:()=>shouldCompact,stripFrontmatter:()=>stripFrontmatter,truncateHead:()=>truncateHead,truncateLine:()=>truncateLine,truncateTail:()=>truncateTail,truncateToVisualLines:()=>truncateToVisualLines,withFileMutationQueue:()=>withFileMutationQueue,wrapRegisteredTool:()=>wrapRegisteredTool,wrapRegisteredTools:()=>wrapRegisteredTools});var SHOW_IMAGES_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ShowImagesSelectorComponent=class extends Container{selectList;constructor(currentValue,onSelect,onCancel){super();let items=[{value:"yes",label:"Yes",description:"Show images inline in terminal"},{value:"no",label:"No",description:"Show text placeholder instead"}];this.addChild(new DynamicBorder),this.selectList=new SelectList(items,5,getSelectListTheme(),SHOW_IMAGES_SELECT_LIST_LAYOUT),this.selectList.setSelectedIndex(currentValue?0:1),this.selectList.onSelect=item=>{onSelect(item.value==="yes")},this.selectList.onCancel=()=>{onCancel()},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}};var THEME_SELECT_LIST_LAYOUT={minPrimaryColumnWidth:12,maxPrimaryColumnWidth:32},ThemeSelectorComponent=class extends Container{selectList;onPreview;constructor(currentTheme,onSelect,onCancel,onPreview){super(),this.onPreview=onPreview;let themes=getAvailableThemes(),themeItems=themes.map(name=>({value:name,label:name,description:name===currentTheme?"(current)":void 0}));this.addChild(new DynamicBorder),this.selectList=new SelectList(themeItems,10,getSelectListTheme(),THEME_SELECT_LIST_LAYOUT);let currentIndex=themes.indexOf(currentTheme);currentIndex!==-1&&this.selectList.setSelectedIndex(currentIndex),this.selectList.onSelect=item=>{onSelect(item.value)},this.selectList.onCancel=()=>{onCancel()},this.selectList.onSelectionChange=item=>{this.onPreview(item.value)},this.addChild(this.selectList),this.addChild(new DynamicBorder)}getSelectList(){return this.selectList}};export{ShowImagesSelectorComponent,ThemeSelectorComponent,dist_exports};
@@ -1,328 +0,0 @@
1
- import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{Bm25Ranker,CODEMODE_STORE_ENTRY_TYPE,DEFAULT_TOOL_SEARCH_LIMIT,MODEL_GLOBAL_DECLARATIONS,combineUsage,createToolSearchDocument,getCodemodeCallableTools,parseCodemodeSource,renderToolSample,toCodemodeDeclaration,toCodemodeIdentifier}from"./chunk-G3UZ5FWD.js";import{getCodemodeWorkerSpecifier,getQuickJSWasmPath}from"./chunk-7QSPBJKW.js";import"./chunk-S3GGRYIO.js";import"./chunk-4L3WN2XY.js";import{randomBytes}from"node:crypto";import{writeFile}from"node:fs/promises";import{tmpdir}from"node:os";import{join}from"node:path";import{Worker}from"node:worker_threads";import{readFile}from"node:fs/promises";import{createRequire}from"node:module";var modules=new Map;function loadQuickJSWasm(path){let resolved=path??createRequire(import.meta.url).resolve("quickjs-wasi/quickjs.wasm"),module=modules.get(resolved);if(!module){let{WebAssembly}=globalThis;module=readFile(resolved).then(bytes=>WebAssembly.compile(bytes)).catch(error=>{throw modules.delete(resolved),error}),modules.set(resolved,module)}return module}function isWorkerToHostMessage(value){if(typeof value!="object"||value===null)return!1;let type=value.type;return type==="call"||type==="output"||type==="done"||type==="crash"}var DEFAULT_TIMEOUT_MS=3e5,IDENTIFIER=/^[A-Za-z_$][A-Za-z0-9_$]*$/,RESERVED_GLOBALS=new Set(["tools","ALL_TOOLS","console","text","image","exit","globalThis","store","load"]);function errorMessage(error){return error instanceof Error?error.message:String(error)}function serializeStore(store){let serialized={};for(let[key,value]of Object.entries(store??{})){let json=JSON.stringify(value);json!==void 0&&(serialized[key]=json)}return serialized}function parseStoreWrites(json){let writes={set:{},delete:[]};for(let[key,value]of JSON.parse(json))value===void 0?writes.delete.push(key):writes.set[key]=JSON.parse(value);return writes}function defaultWorkerUrl(){return new URL(import.meta.url.endsWith(".ts")?"./worker.ts":"./worker.js",import.meta.url)}var Execution=class{promise;resolveResult;worker;interrupt=new SharedArrayBuffer(4);tools;globals;signal;timer;output=[];calls=[];pending=new Map;finished=!1;constructor(options){this.promise=new Promise(resolve=>{this.resolveResult=resolve}),this.tools=options.tools,this.globals=options.globals,this.signal=options.signal,Number.isFinite(options.timeoutMs)&&(this.timer=setTimeout(()=>{this.finish({kind:"timeout",message:`Execution timed out after ${options.timeoutMs} ms`})},options.timeoutMs)),options.signal&&(options.signal.aborted?this.onAbort():options.signal.addEventListener("abort",this.onAbort,{once:!0})),options.wasm.then(wasm=>this.start(options,wasm),error=>{this.finish({kind:"sandbox",message:`Failed to load QuickJS: ${errorMessage(error)}`})})}abort(message){return this.finish({kind:"aborted",message}),this.promise}start(options,wasm){if(this.finished)return;let workerData={code:options.code,tools:[...options.tools.values()].map(tool=>({name:tool.name,jsName:toCodemodeIdentifier(tool.name),description:tool.description??""})),globals:[...options.globals.values()].map(global=>({name:global.name,spread:global.spread===!0})),wasm,memoryLimitBytes:options.memoryLimitBytes,store:options.store,interrupt:this.interrupt},worker;try{worker=new Worker(options.workerUrl,{workerData})}catch(error){this.finish({kind:"sandbox",message:`Failed to start worker: ${errorMessage(error)}`});return}this.worker=worker,worker.on("message",message=>this.handleMessage(message)),worker.on("error",error=>{this.finish({kind:"sandbox",name:error instanceof Error?error.name:void 0,message:errorMessage(error)})}),worker.on("exit",code=>{this.finish({kind:"sandbox",message:`Worker exited with code ${code} before the script settled`})})}onAbort=()=>{let reason=this.signal?.reason;this.finish({kind:"aborted",message:reason instanceof Error?reason.message:"Execution aborted"})};post(message){this.worker?.postMessage(message)}handleMessage(message){if(!(this.finished||!isWorkerToHostMessage(message)))switch(message.type){case"output":this.output.push(message.item);break;case"call":this.handleCall(message);break;case"done":this.handleDone(message);break;case"crash":this.finish({kind:"sandbox",message:message.message});break}}handleDone(message){if(!message.ok){let parsed=JSON.parse(message.error);this.finish({kind:"script",...parsed});return}this.finish(void 0,message.value===void 0?void 0:JSON.parse(message.value),message.writes)}async handleCall(message){let{id,name}=message,isTool=message.target==="tool",record=isTool?{name,status:"cancelled",durationMs:0}:void 0;record&&this.calls.push(record);let pending={record,startedAt:performance.now(),controller:new AbortController};this.pending.set(id,pending);let status,reply;try{let tool=(isTool?this.tools:this.globals).get(name);if(!tool)throw new Error(`Unknown ${isTool?"tool":"global"} "${name}"`);let args=message.args===void 0?void 0:JSON.parse(message.args),value=await tool.execute(args,{signal:pending.controller.signal});reply={type:"result",id,ok:!0,payload:value===void 0?void 0:JSON.stringify(value)},status="ok"}catch(error){reply={type:"result",id,ok:!1,payload:errorMessage(error)},status="error"}this.pending.delete(id)&&(record&&(record.status=status,record.durationMs=performance.now()-pending.startedAt),this.post(reply))}finish(error,value,writes){if(this.finished)return;this.finished=!0,clearTimeout(this.timer),this.signal?.removeEventListener("abort",this.onAbort);let now=performance.now();for(let pending of this.pending.values())pending.record&&(pending.record.durationMs=now-pending.startedAt),pending.controller.abort();this.pending.clear();let result=error?{ok:!1,error,output:this.output,calls:this.calls}:{ok:!0,value,output:this.output,calls:this.calls,storeWrites:writes===void 0?{set:{},delete:[]}:parseStoreWrites(writes)};if(!this.worker){this.resolveResult(result);return}Atomics.store(new Int32Array(this.interrupt),0,1),this.worker.terminate().catch(()=>{}).then(()=>this.resolveResult(result))}},CodemodeSandbox=class{toolsByName=new Map;globalsByName=new Map;timeoutMs;memoryLimitBytes;wasm;workerUrl;running=new Set;closed=!1;constructor(options={}){this.timeoutMs=options.timeoutMs??DEFAULT_TIMEOUT_MS,this.memoryLimitBytes=options.memoryLimitBytes,this.wasm=options.wasm,this.workerUrl=options.workerUrl??defaultWorkerUrl();for(let tool of options.tools??[])this.registerTool(tool);let namespaces=new Set;for(let global of options.globals??[]){let parts=global.name.split(".");if(parts.length>2||!parts.every(part=>IDENTIFIER.test(part))||RESERVED_GLOBALS.has(parts[0]))throw new Error(`Invalid global name "${global.name}"`);if(this.globalsByName.has(global.name))throw new Error(`Global "${global.name}" is already registered`);parts.length===2&&namespaces.add(parts[0]),this.globalsByName.set(global.name,global)}for(let name of namespaces)if(this.globalsByName.has(name))throw new Error(`Global "${name}" conflicts with the namespace "${name}"`)}registerTool(tool){if(this.toolsByName.has(tool.name))throw new Error(`Tool "${tool.name}" is already registered`);this.toolsByName.set(tool.name,tool)}unregisterTool(name){return this.toolsByName.delete(name)}get tools(){return[...this.toolsByName.values()]}get globals(){return[...this.globalsByName.values()]}execute(code,options={}){if(this.closed)return Promise.reject(new Error("Sandbox is closed"));let execution=new Execution({code,tools:new Map(this.toolsByName),globals:this.globalsByName,timeoutMs:options.timeoutMs??this.timeoutMs,signal:options.signal,memoryLimitBytes:this.memoryLimitBytes,store:serializeStore(options.store),wasm:this.wasm===void 0?loadQuickJSWasm():Promise.resolve(this.wasm),workerUrl:this.workerUrl});return this.running.add(execution),execution.promise.finally(()=>this.running.delete(execution))}async close(){this.closed=!0,await Promise.all([...this.running].map(execution=>execution.abort("Sandbox closed")))}};var IMAGE_HELPER_EXPECTS="image expects a non-empty image URL string, an object with image_url, or a raw MCP image block",PRELUDE_SOURCE=`(function (bridge, toolsJson, globalsJson, storeJson) {
3
- "use strict";
4
- const stringify = JSON.stringify;
5
- const parse = JSON.parse;
6
- const promiseThen = Promise.prototype.then;
7
- const ErrorCtor = Error;
8
- const TypeErrorCtor = TypeError;
9
- const pending = new Map();
10
- let nextId = 1;
11
- let finished = false;
12
- // Thrown by exit() to unwind the script after it already reported success.
13
- const EXIT = Object.freeze({});
14
-
15
- function done(ok, payload, writes) {
16
- if (finished) return;
17
- finished = true;
18
- bridge("done", ok, payload, writes);
19
- }
20
-
21
- function serialize(value) {
22
- return value === undefined ? undefined : stringify(value);
23
- }
24
-
25
- // QuickJS stacks list frames only. Prefix "Name: message" like V8 so the
26
- // text reads the same as a Node error, and drop this prelude's frames.
27
- function errorText(error) {
28
- const head = error.message ? error.name + ": " + error.message : String(error.name);
29
- const frames =
30
- typeof error.stack === "string"
31
- ? error.stack.split("\\n").filter((line) => line.trim() && !line.includes("codemode-prelude.js"))
32
- : [];
33
- return [head, ...frames].join("\\n");
34
- }
35
-
36
- function format(value) {
37
- if (typeof value === "string") return value;
38
- if (value instanceof ErrorCtor) return errorText(value);
39
- try {
40
- const json = stringify(value);
41
- return json === undefined ? String(value) : json;
42
- } catch {
43
- return String(value);
44
- }
45
- }
46
-
47
- function describeError(error) {
48
- if (error instanceof ErrorCtor) {
49
- return stringify({ name: error.name, message: error.message, stack: errorText(error) });
50
- }
51
- return stringify({ message: format(error) });
52
- }
53
-
54
- function caller(kind, name, spread) {
55
- return (...args) =>
56
- new Promise((resolve, reject) => {
57
- let json;
58
- try {
59
- json = serialize(spread ? args : args[0]);
60
- } catch (error) {
61
- reject(error);
62
- return;
63
- }
64
- const id = nextId++;
65
- pending.set(id, { resolve, reject });
66
- bridge(kind, id, name, json);
67
- });
68
- }
69
-
70
- const tools = Object.create(null);
71
- const allTools = [];
72
- for (const { name, jsName, description } of parse(toolsJson)) {
73
- const fn = caller("call", name);
74
- // The first tool wins when two names normalize to the same identifier.
75
- if (!(jsName in tools)) {
76
- tools[jsName] = fn;
77
- allTools.push(Object.freeze({ name: jsName, description }));
78
- }
79
- if (!(name in tools)) tools[name] = fn;
80
- }
81
- Object.freeze(tools);
82
- Object.freeze(allTools);
83
-
84
- const namespaces = new Map();
85
- for (const { name, spread } of parse(globalsJson)) {
86
- const fn = caller("global", name, spread);
87
- const dot = name.indexOf(".");
88
- if (dot === -1) {
89
- Object.defineProperty(globalThis, name, { value: fn, enumerable: true });
90
- continue;
91
- }
92
- const namespace = name.slice(0, dot);
93
- if (!namespaces.has(namespace)) namespaces.set(namespace, Object.create(null));
94
- namespaces.get(namespace)[name.slice(dot + 1)] = fn;
95
- }
96
- for (const [namespace, members] of namespaces) {
97
- Object.defineProperty(globalThis, namespace, { value: Object.freeze(members), enumerable: true });
98
- }
99
-
100
- // key -> JSON text. Sizes count key and JSON characters.
101
- const stored = new Map(Object.entries(parse(storeJson)));
102
- const writes = new Map();
103
- let storedChars = 0;
104
- for (const [key, json] of stored) storedChars += key.length + json.length;
105
-
106
- function checkKey(name, key) {
107
- if (typeof key !== "string") throw new TypeError(name + "() key must be a string");
108
- }
109
-
110
- function store(key, value) {
111
- checkKey("store", key);
112
- const previous = stored.has(key) ? key.length + stored.get(key).length : 0;
113
- if (value === undefined) {
114
- stored.delete(key);
115
- storedChars -= previous;
116
- writes.set(key, undefined);
117
- return;
118
- }
119
- let json;
120
- try {
121
- json = stringify(value);
122
- } catch (error) {
123
- throw new TypeError("store(" + stringify(key) + ") value is not JSON-serializable: " + format(error));
124
- }
125
- if (json === undefined) {
126
- throw new TypeError("store(" + stringify(key) + ") value is not JSON-serializable");
127
- }
128
- if (json.length > 262144) {
129
- throw new RangeError("store(" + stringify(key) + ") value exceeds 262144 characters of JSON");
130
- }
131
- const next = storedChars - previous + key.length + json.length;
132
- if (next > 1048576) {
133
- throw new RangeError("store is full: stored values would exceed 1048576 characters of JSON");
134
- }
135
- stored.set(key, json);
136
- storedChars = next;
137
- writes.set(key, json);
138
- }
139
-
140
- function load(key) {
141
- checkKey("load", key);
142
- const json = stored.get(key);
143
- return json === undefined ? undefined : parse(json);
144
- }
145
-
146
- function serializeWrites() {
147
- const entries = [];
148
- for (const [key, json] of writes) entries.push(json === undefined ? [key] : [key, json]);
149
- return stringify(entries);
150
- }
151
-
152
- Object.defineProperty(globalThis, "store", { value: store, enumerable: true });
153
- Object.defineProperty(globalThis, "load", { value: load, enumerable: true });
154
-
155
- // Primitives become their string form, everything else JSON.
156
- function outputText(value) {
157
- if (value === undefined || value === null || typeof value !== "object" && typeof value !== "function") {
158
- return String(value);
159
- }
160
- const json = stringify(value);
161
- return json === undefined ? String(value) : json;
162
- }
163
-
164
- function text(value) {
165
- let rendered;
166
- try {
167
- rendered = outputText(value);
168
- } catch (error) {
169
- throw new TypeErrorCtor(error instanceof ErrorCtor ? error.message : String(error));
170
- }
171
- if (!finished) bridge("output", "text", rendered);
172
- }
173
-
174
- function imageUrl(value) {
175
- if (typeof value === "string") return value;
176
- if (typeof value !== "object" || value === null || Array.isArray(value)) {
177
- throw new TypeErrorCtor(${JSON.stringify(IMAGE_HELPER_EXPECTS)});
178
- }
179
- if (value.image_url !== undefined) {
180
- if (typeof value.image_url !== "string") throw new TypeErrorCtor(${JSON.stringify(IMAGE_HELPER_EXPECTS)});
181
- return value.image_url;
182
- }
183
- if (typeof value.type !== "string") throw new TypeErrorCtor(${JSON.stringify(IMAGE_HELPER_EXPECTS)});
184
- if (value.type !== "image") {
185
- throw new TypeErrorCtor('image only accepts MCP image blocks, got "' + value.type + '"');
186
- }
187
- if (typeof value.data !== "string" || value.data === "") throw new TypeErrorCtor("image expected MCP image data");
188
- if (value.data.toLowerCase().startsWith("data:")) return value.data;
189
- return "data:;base64," + value.data;
190
- }
191
-
192
- // Base64 of the signatures of the formats providers accept inline (PNG, JPEG except
193
- // JPEG-LS, GIF, "RIFF....WEBP"). Signatures start at byte 0, so their encodings are prefixes.
194
- const IMAGE_SIGNATURES = [
195
- ["image/png", /^iVBORw0KGg/],
196
- ["image/jpeg", /^[/]9j[/](?!9)/],
197
- ["image/gif", /^R0lGOD[dl]h/],
198
- ["image/webp", /^UklG.{8}RUJQ/],
199
- ];
200
-
201
- function image(value) {
202
- const url = imageUrl(value);
203
- if (url === "") throw new TypeErrorCtor(${JSON.stringify(IMAGE_HELPER_EXPECTS)});
204
- const colon = url.indexOf(":");
205
- const scheme = colon === -1 ? "" : url.slice(0, colon).toLowerCase();
206
- if (scheme === "http" || scheme === "https") {
207
- throw new TypeErrorCtor("remote image URLs are not supported in tool outputs. Pass a base64 data URI instead");
208
- }
209
- const comma = url.indexOf(",");
210
- const header = comma === -1 ? [] : url.slice(colon + 1, comma).split(";");
211
- if (scheme !== "data" || comma === -1 || header.slice(1).every((part) => part.toLowerCase() !== "base64")) {
212
- throw new TypeErrorCtor("invalid image output. Pass a base64 data URI instead");
213
- }
214
- // Providers reject the whole request on a bad image, and a persisted image block would be
215
- // resent on every later turn. Line breaks from wrapped base64 are dropped. The declared type
216
- // is ignored in favor of the detected one, as providers also reject mismatches.
217
- const data = url.slice(comma + 1).replace(/\\s+/g, "");
218
- if (data.length % 4 !== 0 || !/^[A-Za-z0-9+/]+={0,2}$/.test(data)) {
219
- throw new TypeErrorCtor("invalid image output. The image data is not valid base64 (truncated or corrupted?)");
220
- }
221
- const head = data.slice(0, 16);
222
- const signature = IMAGE_SIGNATURES.find(([, pattern]) => pattern.test(head));
223
- if (!signature) {
224
- throw new TypeErrorCtor("invalid image output. The image data is not a PNG, JPEG, GIF, or WebP image");
225
- }
226
- if (!finished) bridge("output", "image", data, signature[0]);
227
- }
228
-
229
- function exit() {
230
- let writesJson;
231
- try {
232
- writesJson = serializeWrites();
233
- } catch (error) {
234
- done(false, describeError(error));
235
- throw EXIT;
236
- }
237
- done(true, undefined, writesJson);
238
- throw EXIT;
239
- }
240
-
241
- const console = {};
242
- for (const level of ["log", "info", "warn", "error", "debug"]) {
243
- console[level] = (...args) => {
244
- if (!finished) bridge("output", "text", args.map(format).join(" "));
245
- };
246
- }
247
- Object.freeze(console);
248
-
249
- Object.defineProperty(globalThis, "tools", { value: tools, enumerable: true });
250
- Object.defineProperty(globalThis, "ALL_TOOLS", { value: allTools, enumerable: true });
251
- Object.defineProperty(globalThis, "console", { value: console, enumerable: true });
252
- Object.defineProperty(globalThis, "text", { value: text, enumerable: true });
253
- Object.defineProperty(globalThis, "image", { value: image, enumerable: true });
254
- Object.defineProperty(globalThis, "exit", { value: exit, enumerable: true });
255
-
256
- return {
257
- settle(id, ok, payload) {
258
- const entry = pending.get(id);
259
- if (!entry) return;
260
- pending.delete(id);
261
- if (!ok) {
262
- entry.reject(new ErrorCtor(payload));
263
- return;
264
- }
265
- let value;
266
- try {
267
- value = payload === undefined ? undefined : parse(payload);
268
- } catch (error) {
269
- entry.reject(error);
270
- return;
271
- }
272
- entry.resolve(value);
273
- },
274
- run(fn) {
275
- let promise;
276
- try {
277
- promise = fn(tools, console);
278
- } catch (error) {
279
- done(false, describeError(error));
280
- return;
281
- }
282
- promiseThen.call(
283
- promise,
284
- (value) => {
285
- let json;
286
- try {
287
- json = serialize(value);
288
- } catch (error) {
289
- done(false, describeError(error));
290
- return;
291
- }
292
- done(true, json, serializeWrites());
293
- },
294
- (error) => {
295
- done(false, describeError(error));
296
- },
297
- );
298
- },
299
- stalled() {
300
- if (finished || pending.size > 0) return false;
301
- done(
302
- false,
303
- stringify({
304
- name: "Error",
305
- message:
306
- "The script is waiting on a promise that can never settle: no tool call is pending, and timers do not exist here.",
307
- }),
308
- );
309
- return true;
310
- },
311
- };
312
- })`;var ARGS_PREVIEW_CHARS=200,ERROR_PREVIEW_CHARS=500,MAX_CONCURRENT_MODEL_CALLS=4,CODEMODE_MEMORY_LIMIT_BYTES=256*1024*1024,MODEL_TYPES=new Set(["chat","image","classifier"]);function truncateText(text,maxChars){return text.length>maxChars?`${text.slice(0,maxChars-3)}...`:text}function previewArgs(args){if(args===void 0)return"";try{return truncateText(JSON.stringify(args)??"",ARGS_PREVIEW_CHARS)}catch{return""}}function textOf(result){return(result.content??[]).filter(block=>block.type==="text").map(block=>block.text).join(`
313
- `)}function toModelType(value){if(typeof value=="string"&&MODEL_TYPES.has(value))return value;throw new Error(`Unknown model type ${JSON.stringify(value)}. Use "chat", "image", or "classifier".`)}function toProvider(value){if(value!=null){if(typeof value!="string")throw new Error("provider must be a string");return value}}function toModelInfo(model){let info={...model};return delete info.headers,info}function createLimiter(limit){let active=0,waiting=[];return async run=>{active>=limit&&await new Promise(resolve=>waiting.push(resolve)),active++;try{return await run()}finally{active--,waiting.shift()?.()}}}function isStoreEntryData(data){if(typeof data!="object"||data===null)return!1;let{set,delete:deleted}=data;return typeof set=="object"&&set!==null&&Array.isArray(deleted)&&deleted.every(key=>typeof key=="string")}function readCodemodeStore(branch){let store=new Map;for(let entry of branch)if(!(entry.type!=="custom"||entry.customType!==CODEMODE_STORE_ENTRY_TYPE||!isStoreEntryData(entry.data))){for(let key of entry.data.delete)store.delete(key);for(let[key,value]of Object.entries(entry.data.set))store.set(key,value)}return Object.fromEntries(store)}var DEFAULT_MAX_OUTPUT_TOKENS=1e4,CHARS_PER_TOKEN=4;function valueText(value){return typeof value=="string"?value:JSON.stringify(value)??String(value)}function formatCallSummary(calls){return calls.length===0?"No tool calls were made.":`Tool calls made before the failure (they are not undone): ${calls.map(call=>`${call.name} (${call.status})`).join(", ")}`}function formatError(result,calls){let{error}=result;return`${error.kind==="script"?error.stack??`${error.name??"Error"}: ${error.message}`:error.kind==="timeout"?`Script timed out: ${error.message}`:error.kind==="aborted"?`Script aborted: ${error.message}`:`Script sandbox failed: ${error.message}`}
314
-
315
- ${formatCallSummary(calls)}`}async function spillOutput(text){let path=join(tmpdir(),`pi-codemode-${randomBytes(8).toString("hex")}.txt`);try{return await writeFile(path,text),{path}}catch(error){return{error:error instanceof Error?error.message:String(error)}}}async function truncateOutput(items,maxTokens){let texts=items.filter(item=>item.type==="text").map(item=>item.text),combined=texts.join(`
316
- `),budget=maxTokens*CHARS_PER_TOKEN;if(texts.length===0||combined.length<=budget)return{items};let headChars=Math.floor(budget/2),tailChars=budget-headChars,removed=combined.length-headChars-tailChars,head=combined.slice(0,headChars),tail=tailChars>0?combined.slice(-tailChars):"",text=`Warning: truncated output (original token count: ${Math.ceil(combined.length/CHARS_PER_TOKEN)})
317
- Total output lines: ${combined.split(`
318
- `).length}
319
-
320
- ${head}\u2026${Math.ceil(removed/CHARS_PER_TOKEN)} tokens truncated\u2026${tail}`,spilled=await spillOutput(combined);return text+="path"in spilled?`
321
-
322
- [Full output: ${spilled.path} (read with offset/limit)]`:`
323
-
324
- [Could not save the full output: ${spilled.error}]`,{items:[{type:"text",text},...items.filter(item=>item.type==="image")],..."path"in spilled?{fullOutputPath:spilled.path}:{}}}function toScriptValue(tool,outcome){let{result}=outcome;if(tool.outputSchema&&result.structuredContent!==void 0)return result.structuredContent;let text=textOf(result);if(outcome.isError)throw new Error(text||`Tool "${tool.name}" failed`);return text}async function executeCodemode(toolCallId,input,signal,onUpdate,ctx,options={}){let startedAt=performance.now(),{code,options:sourceOptions}=parseCodemodeSource(input.code),calls=[],modelUsage,addModelUsage=usage=>{modelUsage=modelUsage?combineUsage(modelUsage,usage):usage},snapshot=()=>({calls:calls.map(call=>({...call}))}),publish=()=>onUpdate?.({content:[],details:snapshot()}),callable=ctx?getCodemodeCallableTools(ctx.tools):[],samples=new Map(callable.map(tool=>[tool.name,renderToolSample(toCodemodeDeclaration(tool))])),sandboxTools=callable.map(tool=>({name:tool.name,description:samples.get(tool.name),execute:async(args,{signal:callSignal})=>{let record={id:`${toolCallId}/?`,name:tool.name,args:previewArgs(args),status:"running"};calls.push(record),publish();let callStartedAt=performance.now();if(!ctx)throw new Error("Tool calls need a session");let outcome=await ctx.executeTool(tool.name,args,{signal:callSignal});return record.id=outcome.toolCall.id,record.durationMs=performance.now()-callStartedAt,outcome.isError?(record.status=callSignal.aborted?"cancelled":"error",record.error=truncateText(textOf(outcome.result)||`Tool "${tool.name}" failed`,ERROR_PREVIEW_CHARS)):record.status="ok",publish(),toScriptValue(tool,outcome)}})),sandbox=new CodemodeSandbox({tools:sandboxTools,globals:[...createDiscoveryGlobals(callable,samples,options),...options.models&&ctx?createModelGlobals(ctx.modelRegistry,toolCallId,calls,publish,addModelUsage):[]],timeoutMs:sourceOptions.timeoutMs??Number.POSITIVE_INFINITY,memoryLimitBytes:CODEMODE_MEMORY_LIMIT_BYTES,wasm:loadQuickJSWasm(getQuickJSWasmPath()),workerUrl:getCodemodeWorkerSpecifier()}),result;try{let store=ctx?readCodemodeStore(ctx.sessionManager.getBranch()):{};result=await sandbox.execute(code,{signal,store})}finally{await sandbox.close()}for(let call of calls)call.status==="running"&&(call.status="cancelled");let items=result.output.map(item=>item.type==="text"?{type:"text",text:item.text}:item);if(result.ok){let{set,delete:deleted}=result.storeWrites;(Object.keys(set).length>0||deleted.length>0)&&options.appendEntry?.(CODEMODE_STORE_ENTRY_TYPE,{set,delete:deleted}),result.value!==void 0&&items.push({type:"text",text:valueText(result.value)})}else items.push({type:"text",text:`Script error:
325
- ${formatError(result,calls)}`});let truncated=await truncateOutput(items,sourceOptions.maxOutputTokens??DEFAULT_MAX_OUTPUT_TOKENS),wallTime=((performance.now()-startedAt)/1e3).toFixed(1),header=`${result.ok?"Script completed":"Script failed"}
326
- Wall time ${wallTime} seconds
327
- Output:
328
- `,details=snapshot();return truncated.fullOutputPath&&(details.fullOutputPath=truncated.fullOutputPath),{content:[{type:"text",text:header},...truncated.items],details,...modelUsage?{usage:modelUsage}:{},...result.ok?{}:{isError:!0}}}function isNamespaceName(namespace,query){let id=toCodemodeIdentifier(namespace),queryId=toCodemodeIdentifier(query),suffix=name=>name.includes("__")?name.slice(name.lastIndexOf("__")+2):void 0;return namespace===query||id===queryId||suffix(namespace)===query||suffix(id)===queryId}function createDiscoveryGlobals(tools,samples,options){let ranker=new Bm25Ranker,entry=name=>({name:toCodemodeIdentifier(name),description:samples.get(name)??""});return[{name:"searchTools",spread:!0,execute:args=>{let[query,searchOptions]=args;if(typeof query!="string")throw new Error("searchTools() expects a query string");let limit=searchOptions?.limit??DEFAULT_TOOL_SEARCH_LIMIT;if(typeof limit!="number"||!Number.isInteger(limit)||limit<=0)throw new Error("searchTools() limit must be a positive integer");let namespace=searchOptions?.namespace;if(namespace!=null&&typeof namespace!="string")throw new Error("searchTools() namespace must be a string");let documents=tools.flatMap(tool=>{let toolNamespace=options.getToolNamespace?.(tool.name);return namespace&&(!toolNamespace||!isNamespaceName(toolNamespace.name,namespace))?[]:[createToolSearchDocument(tool,toolNamespace)]});return ranker.rank(query,documents,limit).map(match=>entry(match.name))}},{name:"describeTool",spread:!0,execute:args=>{let[name]=args;if(typeof name!="string")throw new Error("describeTool() expects a tool name");let tool=tools.find(candidate=>candidate.name===name||toCodemodeIdentifier(candidate.name)===name);return tool?samples.get(tool.name):void 0}},{name:"describeNamespace",spread:!0,execute:args=>{let[name]=args;if(typeof name!="string")throw new Error("describeNamespace() expects a namespace name");let namespace,names=[];for(let tool of tools){let toolNamespace=options.getToolNamespace?.(tool.name);!toolNamespace||!isNamespaceName(toolNamespace.name,name)||(namespace??=toolNamespace,names.push(toCodemodeIdentifier(tool.name)))}if(namespace)return{name:namespace.name,...namespace.description?{description:namespace.description}:{},...namespace.instructions?{instructions:namespace.instructions}:{},tools:names}}}]}function createModelGlobals(models,toolCallId,calls,publish,addUsage){let limit=createLimiter(MAX_CONCURRENT_MODEL_CALLS),classifyCount=0,implementations={"models.getModelsOfType":args=>{let[type,provider]=args;return models.getModelsOfType(toModelType(type),toProvider(provider)).map(toModelInfo)},"models.getAvailableOfType":async(args,{signal})=>{let[type,provider]=args;return(await models.getAvailableOfType(toModelType(type),toProvider(provider),{signal})).map(toModelInfo)},"models.getModelOfType":args=>{let[type,provider,id]=args;if(typeof provider!="string"||typeof id!="string")throw new Error("models.getModelOfType() expects a type, a provider, and an id");let model=models.getModelOfType(toModelType(type),provider,id);return model===void 0?void 0:toModelInfo(model)},"models.classify":async(args,{signal})=>{let[model,context]=args,ref=model;if(typeof ref!="object"||ref===null||typeof ref.provider!="string"||typeof ref.id!="string")throw new Error("models.classify() expects a model from models.getModelOfType() or models.getAvailableOfType()");let resolved=models.getModelOfType("classifier",ref.provider,ref.id);if(!resolved)throw new Error(`Unknown classifier model "${ref.provider}/${ref.id}"`);let record={id:`${toolCallId}/models.classify/${++classifyCount}`,name:"models.classify",args:`${resolved.provider}/${resolved.id}`,status:"running"};calls.push(record),publish();let startedAt=performance.now(),result=await limit(()=>models.classify(resolved,context,{signal}));return record.durationMs=performance.now()-startedAt,record.status=result.stopReason==="stop"?"ok":result.stopReason==="aborted"?"cancelled":"error",result.errorMessage&&(record.error=truncateText(result.errorMessage,ERROR_PREVIEW_CHARS)),result.usage&&(record.cost=result.usage.cost.total,addUsage(result.usage)),publish(),result}};return MODEL_GLOBAL_DECLARATIONS.map(declaration=>({name:declaration.name,spread:!0,execute:implementations[declaration.name]}))}export{executeCodemode,readCodemodeStore};
@@ -1,2 +0,0 @@
1
- import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{McpOAuthCredentialStore,McpServerConnection,McpServerLog,McpSignInCancelledError,createDefaultTransport,signInMcpServer}from"./chunk-3KYEVQKX.js";import"./chunk-45SXDISG.js";import"./chunk-7QSPBJKW.js";import"./chunk-S3GGRYIO.js";import"./chunk-4L3WN2XY.js";export{McpOAuthCredentialStore,McpServerConnection,McpServerLog,McpSignInCancelledError,createDefaultTransport,signInMcpServer};
@@ -1,2 +0,0 @@
1
- import { createRequire as __piCreateRequire } from "node:module"; const require = __piCreateRequire(import.meta.url);
2
- import{dist_exports as dist_exports3}from"./chunk-ECRK44UV.js";import{all_exports,compat_exports,compile_exports,dist_exports as dist_exports2,value_exports}from"./chunk-3YAHQSW6.js";import"./chunk-3NVH2HQH.js";import"./chunk-45SXDISG.js";import"./chunk-USJZMAIR.js";import{build_exports}from"./chunk-G3UZ5FWD.js";import{dist_exports}from"./chunk-7QSPBJKW.js";import"./chunk-S3GGRYIO.js";import"./chunk-VIV3CWXG.js";import"./chunk-DRQDKNXA.js";import"./chunk-TRDNDS6A.js";import"./chunk-7JGR3GZN.js";import"./chunk-A3JYRWB6.js";import"./chunk-4L3WN2XY.js";var oauth_exports={};var VIRTUAL_MODULES={typebox:build_exports,"typebox/compile":compile_exports,"typebox/value":value_exports,"@sinclair/typebox":build_exports,"@sinclair/typebox/compile":compile_exports,"@sinclair/typebox/value":value_exports,"@earendil-works/pi-agent-core":dist_exports2,"@earendil-works/pi-tui":dist_exports,"@earendil-works/pi-ai":compat_exports,"@earendil-works/pi-ai/compat":compat_exports,"@earendil-works/pi-ai/oauth":oauth_exports,"@earendil-works/pi-ai/providers/all":all_exports,"@earendil-works/pi-coding-agent":dist_exports3,"@mariozechner/pi-agent-core":dist_exports2,"@mariozechner/pi-tui":dist_exports,"@mariozechner/pi-ai":compat_exports,"@mariozechner/pi-ai/compat":compat_exports,"@mariozechner/pi-ai/oauth":oauth_exports,"@mariozechner/pi-ai/providers/all":all_exports,"@mariozechner/pi-coding-agent":dist_exports3};export{VIRTUAL_MODULES};