@astralyn/pi 1.4.6 → 1.4.8

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 (253) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/bundle/chunks/{chunk-EYKC6ESU.js → chunk-5VIOGR76.js} +1 -1
  3. package/dist/bundle/chunks/{chunk-KDO6L76C.js → chunk-FODCTZXW.js} +4 -4
  4. package/dist/bundle/chunks/{chunk-RBTJBQWX.js → chunk-I2COK45I.js} +136 -137
  5. package/dist/bundle/chunks/{chunk-AXFWZIHH.js → chunk-MG5XDTXV.js} +1 -1
  6. package/dist/bundle/chunks/{chunk-ALHAFUHP.js → chunk-PU2IWWXV.js} +1 -1
  7. package/dist/bundle/chunks/{chunk-5M3YJ54Z.js → chunk-RO2VH6UZ.js} +1 -1
  8. package/dist/bundle/chunks/{cli-FH77R7JR.js → cli-MEL7SGJD.js} +1 -1
  9. package/dist/bundle/chunks/{execute-5ZQUS52M.js → execute-4CWRNHPO.js} +1 -1
  10. package/dist/bundle/chunks/{runtime-R5CMHJ5P.js → runtime-R3X67XMR.js} +1 -1
  11. package/dist/bundle/chunks/{virtual-modules-KCQU7LOC.js → virtual-modules-BBLD7YLS.js} +1 -1
  12. package/dist/bundle/cli.js +1 -1
  13. package/dist/bundle/index.js +1 -1
  14. package/dist/bundle/rpc-entry.js +1 -1
  15. package/dist/core/agent-session.d.ts +0 -3
  16. package/dist/core/agent-session.d.ts.map +1 -1
  17. package/dist/core/agent-session.js +0 -4
  18. package/dist/core/agent-session.js.map +1 -1
  19. package/dist/core/extensions/index.d.ts +1 -1
  20. package/dist/core/extensions/index.d.ts.map +1 -1
  21. package/dist/core/extensions/index.js.map +1 -1
  22. package/dist/core/package-manager.d.ts +3 -1
  23. package/dist/core/package-manager.d.ts.map +1 -1
  24. package/dist/core/package-manager.js +10 -0
  25. package/dist/core/package-manager.js.map +1 -1
  26. package/dist/core/resource-loader.d.ts +2 -0
  27. package/dist/core/resource-loader.d.ts.map +1 -1
  28. package/dist/core/resource-loader.js +17 -4
  29. package/dist/core/resource-loader.js.map +1 -1
  30. package/dist/core/settings-manager.d.ts +4 -2
  31. package/dist/core/settings-manager.d.ts.map +1 -1
  32. package/dist/core/settings-manager.js +11 -0
  33. package/dist/core/settings-manager.js.map +1 -1
  34. package/dist/core/settings-schema.d.ts +7 -0
  35. package/dist/core/settings-schema.d.ts.map +1 -1
  36. package/dist/core/settings-schema.js +6 -0
  37. package/dist/core/settings-schema.js.map +1 -1
  38. package/dist/core/skill-invocation.d.ts +46 -0
  39. package/dist/core/skill-invocation.d.ts.map +1 -0
  40. package/dist/core/skill-invocation.js +128 -0
  41. package/dist/core/skill-invocation.js.map +1 -0
  42. package/dist/core/skills.d.ts +10 -0
  43. package/dist/core/skills.d.ts.map +1 -1
  44. package/dist/core/skills.js +23 -0
  45. package/dist/core/skills.js.map +1 -1
  46. package/dist/core/tasks/delivery.d.ts +11 -4
  47. package/dist/core/tasks/delivery.d.ts.map +1 -1
  48. package/dist/core/tasks/delivery.js +9 -9
  49. package/dist/core/tasks/delivery.js.map +1 -1
  50. package/dist/core/tasks/execution.d.ts +10 -3
  51. package/dist/core/tasks/execution.d.ts.map +1 -1
  52. package/dist/core/tasks/execution.js +72 -52
  53. package/dist/core/tasks/execution.js.map +1 -1
  54. package/dist/core/tasks/format.d.ts +0 -2
  55. package/dist/core/tasks/format.d.ts.map +1 -1
  56. package/dist/core/tasks/format.js +1 -16
  57. package/dist/core/tasks/format.js.map +1 -1
  58. package/dist/core/tasks/limits.d.ts +12 -1
  59. package/dist/core/tasks/limits.d.ts.map +1 -1
  60. package/dist/core/tasks/limits.js +20 -1
  61. package/dist/core/tasks/limits.js.map +1 -1
  62. package/dist/core/tasks/output.d.ts +6 -12
  63. package/dist/core/tasks/output.d.ts.map +1 -1
  64. package/dist/core/tasks/output.js +35 -32
  65. package/dist/core/tasks/output.js.map +1 -1
  66. package/dist/core/tasks/record.d.ts +45 -0
  67. package/dist/core/tasks/record.d.ts.map +1 -0
  68. package/dist/core/tasks/record.js +80 -0
  69. package/dist/core/tasks/record.js.map +1 -0
  70. package/dist/core/tasks/runtime.d.ts +14 -14
  71. package/dist/core/tasks/runtime.d.ts.map +1 -1
  72. package/dist/core/tasks/runtime.js +111 -93
  73. package/dist/core/tasks/runtime.js.map +1 -1
  74. package/dist/core/tasks/session.d.ts +0 -1
  75. package/dist/core/tasks/session.d.ts.map +1 -1
  76. package/dist/core/tasks/session.js +7 -8
  77. package/dist/core/tasks/session.js.map +1 -1
  78. package/dist/core/tasks/store.d.ts +18 -25
  79. package/dist/core/tasks/store.d.ts.map +1 -1
  80. package/dist/core/tasks/store.js +42 -40
  81. package/dist/core/tasks/store.js.map +1 -1
  82. package/dist/core/tasks/types.d.ts +96 -17
  83. package/dist/core/tasks/types.d.ts.map +1 -1
  84. package/dist/core/tasks/types.js.map +1 -1
  85. package/dist/core/tools/shell-execution.d.ts +8 -7
  86. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  87. package/dist/core/tools/shell-execution.js +18 -26
  88. package/dist/core/tools/shell-execution.js.map +1 -1
  89. package/dist/core/tools/shell-tool.d.ts.map +1 -1
  90. package/dist/core/tools/shell-tool.js +31 -29
  91. package/dist/core/tools/shell-tool.js.map +1 -1
  92. package/dist/core/usage-totals.d.ts +3 -0
  93. package/dist/core/usage-totals.d.ts.map +1 -1
  94. package/dist/core/usage-totals.js +15 -0
  95. package/dist/core/usage-totals.js.map +1 -1
  96. package/dist/extensions/agent/progress.d.ts.map +1 -1
  97. package/dist/extensions/agent/progress.js +1 -11
  98. package/dist/extensions/agent/progress.js.map +1 -1
  99. package/dist/extensions/agent/settings-host.d.ts +33 -0
  100. package/dist/extensions/agent/settings-host.d.ts.map +1 -0
  101. package/dist/extensions/agent/settings-host.js +75 -0
  102. package/dist/extensions/agent/settings-host.js.map +1 -0
  103. package/dist/extensions/agent/settings.d.ts.map +1 -1
  104. package/dist/extensions/agent/settings.js +18 -7
  105. package/dist/extensions/agent/settings.js.map +1 -1
  106. package/dist/extensions/agent/tool.d.ts.map +1 -1
  107. package/dist/extensions/agent/tool.js +9 -5
  108. package/dist/extensions/agent/tool.js.map +1 -1
  109. package/dist/extensions/agent/worker.d.ts.map +1 -1
  110. package/dist/extensions/agent/worker.js +3 -5
  111. package/dist/extensions/agent/worker.js.map +1 -1
  112. package/dist/extensions/btw/agent.d.ts +1 -1
  113. package/dist/extensions/btw/agent.d.ts.map +1 -1
  114. package/dist/extensions/btw/agent.js +3 -20
  115. package/dist/extensions/btw/agent.js.map +1 -1
  116. package/dist/extensions/cached-compaction/index.d.ts.map +1 -1
  117. package/dist/extensions/cached-compaction/index.js +3 -22
  118. package/dist/extensions/cached-compaction/index.js.map +1 -1
  119. package/dist/extensions/cached-compaction/render.d.ts +1 -0
  120. package/dist/extensions/cached-compaction/render.d.ts.map +1 -1
  121. package/dist/extensions/cached-compaction/render.js +42 -14
  122. package/dist/extensions/cached-compaction/render.js.map +1 -1
  123. package/dist/extensions/deepwiki/client.d.ts.map +1 -1
  124. package/dist/extensions/deepwiki/client.js +6 -78
  125. package/dist/extensions/deepwiki/client.js.map +1 -1
  126. package/dist/extensions/deepwiki/transport.d.ts +3 -0
  127. package/dist/extensions/deepwiki/transport.d.ts.map +1 -0
  128. package/dist/extensions/deepwiki/transport.js +96 -0
  129. package/dist/extensions/deepwiki/transport.js.map +1 -0
  130. package/dist/extensions/provider/ui/builtin-data.d.ts +3 -3
  131. package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
  132. package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
  133. package/dist/extensions/provider/ui/compat.d.ts +3 -3
  134. package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
  135. package/dist/extensions/provider/ui/compat.js.map +1 -1
  136. package/dist/extensions/provider/ui/controls.d.ts +2 -2
  137. package/dist/extensions/provider/ui/controls.d.ts.map +1 -1
  138. package/dist/extensions/provider/ui/controls.js.map +1 -1
  139. package/dist/extensions/provider/ui/dialogs.d.ts +3 -3
  140. package/dist/extensions/provider/ui/dialogs.d.ts.map +1 -1
  141. package/dist/extensions/provider/ui/dialogs.js.map +1 -1
  142. package/dist/extensions/provider/ui/dictionary.d.ts +2 -2
  143. package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
  144. package/dist/extensions/provider/ui/dictionary.js.map +1 -1
  145. package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
  146. package/dist/extensions/provider/ui/editor.js +1 -3
  147. package/dist/extensions/provider/ui/editor.js.map +1 -1
  148. package/dist/extensions/provider/ui/fetch-models.d.ts +2 -2
  149. package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
  150. package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
  151. package/dist/extensions/provider/ui/model-fields.d.ts +2 -2
  152. package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
  153. package/dist/extensions/provider/ui/model-fields.js.map +1 -1
  154. package/dist/extensions/provider/ui/model-options.d.ts +6 -6
  155. package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
  156. package/dist/extensions/provider/ui/model-options.js.map +1 -1
  157. package/dist/extensions/provider/ui/pane.d.ts +21 -12
  158. package/dist/extensions/provider/ui/pane.d.ts.map +1 -1
  159. package/dist/extensions/provider/ui/pane.js.map +1 -1
  160. package/dist/extensions/provider/ui/provider-fields.d.ts +3 -3
  161. package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
  162. package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
  163. package/dist/extensions/provider/ui/thinking-map.d.ts +2 -2
  164. package/dist/extensions/provider/ui/thinking-map.d.ts.map +1 -1
  165. package/dist/extensions/provider/ui/thinking-map.js.map +1 -1
  166. package/dist/extensions/run-summary/format.js +1 -1
  167. package/dist/extensions/run-summary/format.js.map +1 -1
  168. package/dist/extensions/statusline/usage.d.ts.map +1 -1
  169. package/dist/extensions/statusline/usage.js +2 -6
  170. package/dist/extensions/statusline/usage.js.map +1 -1
  171. package/dist/extensions/tasks/tool/actions.d.ts +1 -1
  172. package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
  173. package/dist/extensions/tasks/tool/actions.js +49 -106
  174. package/dist/extensions/tasks/tool/actions.js.map +1 -1
  175. package/dist/extensions/tasks/tool/constants.d.ts +1 -6
  176. package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
  177. package/dist/extensions/tasks/tool/constants.js +1 -6
  178. package/dist/extensions/tasks/tool/constants.js.map +1 -1
  179. package/dist/extensions/tasks/tool/schema.d.ts +0 -3
  180. package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
  181. package/dist/extensions/tasks/tool/schema.js +4 -13
  182. package/dist/extensions/tasks/tool/schema.js.map +1 -1
  183. package/dist/extensions/tasks/tool.d.ts.map +1 -1
  184. package/dist/extensions/tasks/tool.js +2 -2
  185. package/dist/extensions/tasks/tool.js.map +1 -1
  186. package/dist/extensions/tasks/ui/completion-render.d.ts.map +1 -1
  187. package/dist/extensions/tasks/ui/completion-render.js +31 -33
  188. package/dist/extensions/tasks/ui/completion-render.js.map +1 -1
  189. package/dist/extensions/tasks/ui/layout.d.ts +7 -7
  190. package/dist/extensions/tasks/ui/layout.d.ts.map +1 -1
  191. package/dist/extensions/tasks/ui/layout.js +17 -19
  192. package/dist/extensions/tasks/ui/layout.js.map +1 -1
  193. package/dist/extensions/tasks/ui/list.d.ts.map +1 -1
  194. package/dist/extensions/tasks/ui/list.js +2 -3
  195. package/dist/extensions/tasks/ui/list.js.map +1 -1
  196. package/dist/extensions/tasks/ui/manager.d.ts +16 -7
  197. package/dist/extensions/tasks/ui/manager.d.ts.map +1 -1
  198. package/dist/extensions/tasks/ui/manager.js +163 -131
  199. package/dist/extensions/tasks/ui/manager.js.map +1 -1
  200. package/dist/extensions/tasks/ui/model.d.ts +25 -0
  201. package/dist/extensions/tasks/ui/model.d.ts.map +1 -1
  202. package/dist/extensions/tasks/ui/model.js +4 -0
  203. package/dist/extensions/tasks/ui/model.js.map +1 -1
  204. package/dist/extensions/tasks/ui/render.d.ts +1 -1
  205. package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
  206. package/dist/extensions/tasks/ui/render.js +11 -7
  207. package/dist/extensions/tasks/ui/render.js.map +1 -1
  208. package/dist/extensions/tasks/ui/status.d.ts +15 -0
  209. package/dist/extensions/tasks/ui/status.d.ts.map +1 -0
  210. package/dist/extensions/tasks/ui/status.js +16 -0
  211. package/dist/extensions/tasks/ui/status.js.map +1 -0
  212. package/dist/index.d.ts +1 -1
  213. package/dist/index.d.ts.map +1 -1
  214. package/dist/index.js.map +1 -1
  215. package/dist/modes/interactive/components/config-selector.d.ts +17 -2
  216. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  217. package/dist/modes/interactive/components/config-selector.js +199 -18
  218. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  219. package/dist/modes/interactive/components/status-marker.d.ts +2 -1
  220. package/dist/modes/interactive/components/status-marker.d.ts.map +1 -1
  221. package/dist/modes/interactive/components/status-marker.js +0 -1
  222. package/dist/modes/interactive/components/status-marker.js.map +1 -1
  223. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  224. package/dist/modes/interactive/interactive-mode.js +7 -1
  225. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  226. package/dist/utils/duration.d.ts +3 -0
  227. package/dist/utils/duration.d.ts.map +1 -0
  228. package/dist/utils/duration.js +17 -0
  229. package/dist/utils/duration.js.map +1 -0
  230. package/dist/utils/number.d.ts +3 -0
  231. package/dist/utils/number.d.ts.map +1 -0
  232. package/dist/utils/number.js +5 -0
  233. package/dist/utils/number.js.map +1 -0
  234. package/docs/bundled/extensions/agent.md +3 -3
  235. package/docs/bundled/extensions/cached-compaction.md +13 -4
  236. package/docs/bundled/extensions/deepwiki.md +3 -1
  237. package/docs/extensions.md +5 -5
  238. package/docs/packages.md +5 -3
  239. package/docs/sdk.md +1 -1
  240. package/docs/session-format.md +1 -1
  241. package/docs/settings.md +11 -0
  242. package/docs/skills.md +23 -0
  243. package/npm-shrinkwrap.json +2 -2
  244. package/package.json +1 -1
  245. package/schemas/settings.schema.json +36 -0
  246. package/dist/extensions/deepwiki/http.d.ts +0 -13
  247. package/dist/extensions/deepwiki/http.d.ts.map +0 -1
  248. package/dist/extensions/deepwiki/http.js +0 -88
  249. package/dist/extensions/deepwiki/http.js.map +0 -1
  250. package/dist/extensions/tasks/ui/task-view.d.ts +0 -8
  251. package/dist/extensions/tasks/ui/task-view.d.ts.map +0 -1
  252. package/dist/extensions/tasks/ui/task-view.js +0 -13
  253. package/dist/extensions/tasks/ui/task-view.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,43 @@ This file records `@astralyn/pi` releases beginning with the first Fork-owned re
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [1.4.8] - 2026-10-31
8
+
9
+ ### Removed
10
+
11
+ - **Breaking (SDK):** `ResolvedResource.skillInvocationOverride` is removed. Package resolution no longer carries invocation policy; the resource loader applies `skillInvocationOverrides` to the loaded skills.
12
+
13
+ ### Fixed
14
+
15
+ - `/agent` no longer flashes the editor when moving between its settings panel and the model or effort picker; every page now stays in one dialog.
16
+ - Skill invocation overrides now mean the same skill in loading and `pi config`:
17
+ - Relative keys resolve against the settings file that declares them, so a project key no longer changes a global skill at the same relative path.
18
+ - `pi config` recognizes `./`-prefixed keys and a file key that wins over its directory alias, and replaces every alias of a skill when it writes.
19
+ - `pi config` edits a project package entry such as `npm:pkg` for a global `npm:pkg@1.0.0` by package identity instead of adding a duplicate entry. This applies to project overrides of every resource type.
20
+ - Skill invocation overrides now apply to skills loaded with `--skill` or provided by extensions, and are applied before an SDK `skillsOverride`, so its result is final.
21
+
22
+ ## [1.4.7] - 2026-10-31
23
+
24
+ ### Added
25
+
26
+ - `TaskReadOptions` is exported from the SDK and extension API as the named shape of `TasksContext.read()` options (`mode`, `bytes`, `sinceBytes`); the `read` options of `wait()` and `waitAny()` are subsets of it.
27
+ - `pi config` now cycles skills through On, User only, and Off, with project-local inheritance and explicit overrides. User-only skills stay available through `/skill:name` without being advertised to the model; the same policy is available through `skillInvocationOverrides` in global, project, and package settings.
28
+
29
+ ### Changed
30
+
31
+ - Refined Agent delegation prompts to keep design and substantial coding in the main session while giving Agents clearer guidance for independent research, verification, bounded implementation, parallel writes, and self-contained final reports.
32
+ - **Breaking (extension and SDK API):** `TasksContext.wait()` and `waitAny()` now take an options object and return a typed result. `wait(id, { timeoutMs?, signal?, toolCallId?, read? })` returns `{ outcome, waitedMs, task, read? }`; `waitAny({ timeoutMs?, signal?, toolCallId?, read? })` returns `{ outcome, waitedMs, task?, read?, running }`. `outcome` is `settled`, `timed_out`, `interrupted`, or `closed`, plus `no_tasks` for an empty `waitAny` cohort. The runtime now owns the whole `tasks wait` delivery protocol: it holds delivery before the wait, reads, registers the persisted-result receipt for the given `toolCallId`, and then releases, and it applies steering interruption itself. `interruptSignal` parameters, `TasksContext.holdDelivery()`, `TasksSessionContext.waitInterruptSignal`, and `TasksSessionContext.prepareWait()` are removed; `TasksSessionContext` keeps only `stoppedByTreeNavigation()`. Hosts embedding a `TaskRuntime` can supply `TaskRuntimeOptions.waits` for the same behavior. `holdDelivery()` remains on `TaskRuntime` for host delivery code.
33
+ - **Breaking (SDK):** `TaskRuntime.pause()` is removed; delivery pausing has one owner, `session.pauseTaskNotifications()`. `TaskRuntime.pendingNotifications()` and `claimNotification()` no longer return nothing while delivery is paused.
34
+ - **Breaking (SDK):** `AgentSession.tasksStoppedByTreeNavigation()` is removed; use `session.tasks.session?.stoppedByTreeNavigation(targetId)`.
35
+ - DeepWiki's transport now reuses the shared layers instead of its own copies: requests go through the management HTTP retry helper, the body is read with the shared bounded reader, and the response envelope is validated with `@earendil-works/pi-mcp`'s JSON-RPC parser. Behavior is unchanged except for retries: DeepWiki now retries network failures and HTTP 408, 425, 429, 500, 502, 503, and 504 (it previously retried every 5xx and 429), retries immediately instead of waiting 1s then 2s, and no longer retries a connection that drops while the body is being read. The 45-second limit is now one budget for the whole call, retries included. Timeouts and caller cancellation still are not retried.
36
+ - The cached-compaction card is now a one-line footnote under the compaction summary, `From cache · CH 98.8% · ↓2.8k · 18s`, in the footer's `↑ ↓ R W CH` units, with the cache hit rate colored by how well the cache was reused. It no longer has its own title, labels only automatic compaction (`auto`), and expands with the summary (Ctrl+O) to show the reason and the prompt split into cached, written and uncached tokens.
37
+ - Shell tools called without an extension context now run as a foreground task, matching the session path: an already aborted signal rejects with the signal's reason, an invalid `timeout` is rejected before the command starts, and an output-capture failure cancels the command and reports its error.
38
+
39
+ ### Fixed
40
+
41
+ - The `/tasks` footer now advertises the background key only when the task can move right now. It no longer offers it while every background slot is taken; pressing the key then still explains the limit.
42
+ - Entries an extension appends in a `session_compact` handler now appear after the compaction summary in the live transcript, as they already did after resuming the session. The cached-compaction card uses this and is saved with the compaction itself instead of on a later tick, so closing the session right after compacting no longer drops it.
43
+
7
44
  ## [1.4.6] - 2026-10-30
8
45
 
9
46
  ### Added
@@ -1,2 +1,2 @@
1
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,TaskRuntime,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-RBTJBQWX.js";import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-AXFWZIHH.js";import{readStoredCredential}from"./chunk-ALHAFUHP.js";import{Container,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,SelectList,Theme,formatReadLineRange,formatSize,getAvailableThemes,getLanguageFromPath,getMarkdownTheme,getSelectListTheme,getSettingsListTheme,highlightCode,initTheme,keyHint,keyText,rawKeyHint,truncateHead,truncateLine,truncateTail,truncateToVisualLines}from"./chunk-KDO6L76C.js";import{CONFIG_DIR_NAME,VERSION,getAgentDir,getDocsPath,getExamplesPath,getPackageDir,getPowerShellConfig,getReadmePath,getShellConfig}from"./chunk-RLNMABLM.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,TaskRuntime:()=>TaskRuntime,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,formatReadLineRange:()=>formatReadLineRange,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{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{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};
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,TaskRuntime,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-I2COK45I.js";import{ProjectTrustStore,hasTrustRequiringProjectResources}from"./chunk-MG5XDTXV.js";import{readStoredCredential}from"./chunk-PU2IWWXV.js";import{Container,DEFAULT_MAX_BYTES,DEFAULT_MAX_LINES,SelectList,Theme,formatReadLineRange,formatSize,getAvailableThemes,getLanguageFromPath,getMarkdownTheme,getSelectListTheme,getSettingsListTheme,highlightCode,initTheme,keyHint,keyText,rawKeyHint,truncateHead,truncateLine,truncateTail,truncateToVisualLines}from"./chunk-FODCTZXW.js";import{CONFIG_DIR_NAME,VERSION,getAgentDir,getDocsPath,getExamplesPath,getPackageDir,getPowerShellConfig,getReadmePath,getShellConfig}from"./chunk-RLNMABLM.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,TaskRuntime:()=>TaskRuntime,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,formatReadLineRange:()=>formatReadLineRange,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{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{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};
@@ -152,8 +152,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error
152
152
  `);return content.endsWith(`
153
153
  `)&&lines.pop(),lines}function formatSize(bytes){return bytes<1024?`${bytes}B`:bytes<1024*1024?`${(bytes/1024).toFixed(1)}KB`:`${(bytes/(1024*1024)).toFixed(1)}MB`}function truncateHead(content,options={}){let maxLines=options.maxLines??2e3,maxBytes=options.maxBytes??51200,totalBytes=Buffer.byteLength(content,"utf-8"),lines=splitLinesForCounting(content),totalLines=lines.length;if(totalLines<=maxLines&&totalBytes<=maxBytes)return{content,truncated:!1,truncatedBy:null,totalLines,totalBytes,outputLines:totalLines,outputBytes:totalBytes,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines,maxBytes};if(Buffer.byteLength(lines[0],"utf-8")>maxBytes)return{content:"",truncated:!0,truncatedBy:"bytes",totalLines,totalBytes,outputLines:0,outputBytes:0,lastLinePartial:!1,firstLineExceedsLimit:!0,maxLines,maxBytes};let outputLinesArr=[],outputBytesCount=0,truncatedBy="lines";for(let i=0;i<lines.length&&i<maxLines;i++){let line=lines[i],lineBytes=Buffer.byteLength(line,"utf-8")+(i>0?1:0);if(outputBytesCount+lineBytes>maxBytes){truncatedBy="bytes";break}outputLinesArr.push(line),outputBytesCount+=lineBytes}outputLinesArr.length>=maxLines&&outputBytesCount<=maxBytes&&(truncatedBy="lines");let outputContent=outputLinesArr.join(`
154
154
  `),finalOutputBytes=Buffer.byteLength(outputContent,"utf-8");return{content:outputContent,truncated:!0,truncatedBy,totalLines,totalBytes,outputLines:outputLinesArr.length,outputBytes:finalOutputBytes,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines,maxBytes}}function truncateTail(content,options={}){let maxLines=options.maxLines??2e3,maxBytes=options.maxBytes??51200,totalBytes=Buffer.byteLength(content,"utf-8"),lines=splitLinesForCounting(content),totalLines=lines.length;if(totalLines<=maxLines&&totalBytes<=maxBytes)return{content,truncated:!1,truncatedBy:null,totalLines,totalBytes,outputLines:totalLines,outputBytes:totalBytes,lastLinePartial:!1,firstLineExceedsLimit:!1,maxLines,maxBytes};let outputLinesArr=[],outputBytesCount=0,truncatedBy="lines",lastLinePartial=!1;for(let i=lines.length-1;i>=0&&outputLinesArr.length<maxLines;i--){let line=lines[i],lineBytes=Buffer.byteLength(line,"utf-8")+(outputLinesArr.length>0?1:0);if(outputBytesCount+lineBytes>maxBytes){if(truncatedBy="bytes",outputLinesArr.length===0){let truncatedLine=truncateStringToBytesFromEnd(line,maxBytes);outputLinesArr.unshift(truncatedLine),outputBytesCount=Buffer.byteLength(truncatedLine,"utf-8"),lastLinePartial=!0}break}outputLinesArr.unshift(line),outputBytesCount+=lineBytes}outputLinesArr.length>=maxLines&&outputBytesCount<=maxBytes&&(truncatedBy="lines");let outputContent=outputLinesArr.join(`
155
- `),finalOutputBytes=Buffer.byteLength(outputContent,"utf-8");return{content:outputContent,truncated:!0,truncatedBy,totalLines,totalBytes,outputLines:outputLinesArr.length,outputBytes:finalOutputBytes,lastLinePartial,firstLineExceedsLimit:!1,maxLines,maxBytes}}function truncateStringToBytesFromEnd(str2,maxBytes){let buf=Buffer.from(str2,"utf-8");if(buf.length<=maxBytes)return str2;let start=buf.length-maxBytes;for(;start<buf.length&&(buf[start]&192)===128;)start++;return buf.slice(start).toString("utf-8")}function truncateLine(line,maxChars=500){return line.length<=maxChars?{text:line,wasTruncated:!1}:{text:`${line.slice(0,maxChars)}... [truncated]`,wasTruncated:!0}}function truncateMiddle(content,maxBytes){let buf=Buffer.from(content,"utf-8"),totalLines=splitLinesForCounting(content).length;if(buf.length<=maxBytes)return{content,truncated:!1,removedChars:0,totalBytes:buf.length,totalLines};let isBoundary=index3=>index3>=buf.length||(buf[index3]&192)!==128,headEnd=Math.floor(maxBytes/2);for(;headEnd>0&&!isBoundary(headEnd);)headEnd--;let tailStart=buf.length-(maxBytes-Math.floor(maxBytes/2));for(;tailStart<buf.length&&!isBoundary(tailStart);)tailStart++;let head=buf.subarray(0,headEnd).toString("utf-8"),tail=buf.subarray(tailStart).toString("utf-8"),removedChars=Array.from(buf.subarray(headEnd,tailStart).toString("utf-8")).length;return{content:`${head}\u2026${removedChars} chars truncated\u2026${tail}`,truncated:!0,removedChars,totalBytes:buf.length,totalLines}}import{open}from"node:fs/promises";var TASK_RESULT_BYTES=48*1024,TASK_DETAILS_BYTES=120*1024,TASK_READ_BYTES=8*1024,TASK_INPUT_BYTES=24*1024,TASK_TITLE_BYTES=1024,TASK_LABEL_BYTES=256,TASK_FACTS=16,TASK_FACT_BYTES=1024,TASK_ERROR_BYTES=4096,TASK_PATH_BYTES=8192;function finiteLimit(value,fallback,ceiling){return value===void 0||!Number.isFinite(value)?fallback:Math.max(0,Math.min(ceiling,Math.floor(value)))}function alignedSlice(buffer,start,end){for(;start<end&&(buffer[start]&192)===128;)start++;if(end<buffer.length)for(;end>start&&(buffer[end]&192)===128;)end--;let lead=end-1;for(;lead>=start&&(buffer[lead]&192)===128;)lead--;if(lead>=start){let byte=buffer[lead],width=byte>=240?4:byte>=224?3:byte>=192?2:1;end-lead<width&&(end=lead)}return buffer.subarray(start,end)}function boundText(text2,bytes=TASK_RESULT_BYTES){let limit=finiteLimit(bytes,TASK_RESULT_BYTES,TASK_RESULT_BYTES),prefix=text2.slice(0,limit+1),buffer=Buffer.from(prefix);return alignedSlice(buffer,0,Math.min(limit,buffer.length)).toString("utf8")}function boundTaskText(text2,bytes=TASK_RESULT_BYTES){let bounded=boundText(text2,bytes);return{text:bounded,truncated:bounded!==text2}}function boundInput(input){let text2=boundTaskText(input.text,TASK_INPUT_BYTES);return{label:boundText(input.label,TASK_LABEL_BYTES),text:text2.text,truncated:input.truncated||text2.truncated,...input.language?{language:boundText(input.language,64)}:{}}}function boundFacts(facts){return facts.slice(0,TASK_FACTS).map(([label,value])=>[boundText(label,TASK_LABEL_BYTES),boundText(value,TASK_FACT_BYTES)])}function boundTail(text2,bytes){let buffer=Buffer.from(text2);return buffer.length<=bytes?{text:text2,truncated:!1}:{text:alignedSlice(buffer,buffer.length-bytes,buffer.length).toString("utf8"),truncated:!0}}function resultText(result){let remaining=TASK_RESULT_BYTES,parts=[],truncated=!1;for(let block of result.content){if(remaining<=0){truncated=!0;break}let source=block.type==="text"?block.text:"[Image omitted from task output]",text2=boundText(source,remaining);(block.type!=="text"||text2!==source)&&(truncated=!0),parts.push(text2),remaining-=Math.max(1,Buffer.byteLength(text2)+1)}return{text:boundText(parts.join(`
156
- `)),truncated}}async function readOutputSlice(path5,options={}){let bytes=finiteLimit(options.bytes,TASK_READ_BYTES,TASK_RESULT_BYTES),file=await open(path5,"r");try{let{size}=await file.stat(),since=finiteLimit(options.sinceBytes,0,Number.MAX_SAFE_INTEGER),floor=since>size?0:since,start=options.sinceBytes!==void 0?Math.max(floor,size-bytes):options.mode==="head"?0:Math.max(0,size-bytes),length=Math.min(bytes,size-start),buffer=Buffer.alloc(Math.min(length+1,size-start)),{bytesRead}=await file.read(buffer,0,buffer.length,start),slice=alignedSlice(buffer.subarray(0,bytesRead),0,Math.min(length,bytesRead));return{text:slice.toString("utf8"),totalBytes:size,truncated:options.sinceBytes!==void 0?start>floor||slice.length<length:slice.length<size,fromByte:start+slice.byteOffset-buffer.byteOffset}}finally{await file.close()}}function sliceText(text2,options={}){let buffer=Buffer.from(text2),bytes=finiteLimit(options.bytes,TASK_READ_BYTES,TASK_RESULT_BYTES),since=finiteLimit(options.sinceBytes,0,Number.MAX_SAFE_INTEGER),floor=since>buffer.length?0:since,start=options.sinceBytes!==void 0?Math.max(floor,buffer.length-bytes):options.mode==="head"?0:Math.max(0,buffer.length-bytes),slice=alignedSlice(buffer,start,Math.min(buffer.length,start+bytes));return{text:slice.toString("utf8"),totalBytes:buffer.length,truncated:slice.length<buffer.length-floor,fromByte:slice.byteOffset-buffer.byteOffset}}var TASK_TERMINAL_STATUSES=["completed","partial","failed","cancelled","timeout"],TASK_KIND_PATTERN=/^[a-z][a-z0-9-]{0,63}$/,TASK_BACKGROUND_REJECTION="Background execution is not permitted in this host. Run with background: false or omit background. No work was started.";function isTaskTerminal(status){return TASK_TERMINAL_STATUSES.includes(status)}var TaskLookupError=class extends Error{constructor(kind,matches){super(kind==="ambiguous"?"Ambiguous task ID":"Unknown task ID"),this.name="TaskLookupError",this.kind=kind,this.matches=matches}};var TASK_RECORD_TYPE="task-record",TASK_SNAPSHOT_VERSION=3;function plainObject(value){if(value===null||typeof value!="object"||Array.isArray(value))throw new Error("Expected object");let prototype=Object.getPrototypeOf(value);if(prototype!==Object.prototype&&prototype!==null)throw new Error("Expected plain object");return value}function field(object,key){let descriptor=Object.getOwnPropertyDescriptor(object,key);if(descriptor&&!("value"in descriptor))throw new Error("Unexpected accessor");return descriptor?.value}function text(value,bytes){if(typeof value!="string")throw new Error("Expected string");return boundText(value,bytes)}function exact(value,bytes){if(typeof value!="string"||!value||Buffer.byteLength(value)>bytes||value.includes("\0"))throw new Error("Invalid identity or path");return value}function optional(source,key,read){let value=field(source,key);return value===void 0?void 0:read(value)}function taskText(value,bytes){let source=plainObject(value),original=field(source,"text"),truncated=field(source,"truncated");if(typeof truncated!="boolean")throw new Error("Expected truncation flag");let bounded=text(original,bytes);return{text:bounded,truncated:truncated||bounded!==original}}function taskInput(value){let source=plainObject(value),language=optional(source,"language",item=>text(item,64));return{label:text(field(source,"label"),TASK_LABEL_BYTES),...taskText(source,TASK_INPUT_BYTES),...language?{language}:{}}}function taskFacts(value){if(!Array.isArray(value))throw new Error("Expected facts");return value.slice(0,TASK_FACTS).map(row=>{if(!Array.isArray(row)||row.length!==2)throw new Error("Expected fact");return[text(row[0],TASK_LABEL_BYTES),text(row[1],TASK_FACT_BYTES)]})}function timestamp(value){if(typeof value!="number"||!Number.isSafeInteger(value)||value<0)throw new Error("Expected time");return value}function readPersistedTask(value){try{let source=plainObject(value),kind=field(source,"kind"),mode=field(source,"mode"),status=field(source,"status"),output=field(source,"output");if(typeof kind!="string"||!TASK_KIND_PATTERN.test(kind)||mode!=="foreground"&&mode!=="background"||output!=="log"&&output!=="report"||typeof status!="string"||!isTaskTerminal(status))return;let startedAt=timestamp(field(source,"startedAt")),endedAt=timestamp(field(source,"endedAt"));if(endedAt<startedAt)return;let id=exact(field(source,"id"),512);if(!id.startsWith(`${kind}-`)||id.length<=kind.length+1)return;let anchor=field(source,"anchorId"),task={id,kind,label:text(field(source,"label"),TASK_LABEL_BYTES),title:text(field(source,"title"),TASK_TITLE_BYTES),output,toolCallId:exact(field(source,"toolCallId"),512),anchorId:anchor===null?null:exact(anchor,8192),mode,status,startedAt,endedAt},input=optional(source,"input",taskInput),facts=optional(source,"facts",taskFacts),outputPath=optional(source,"outputPath",item=>exact(item,TASK_PATH_BYTES)),result=optional(source,"result",item=>taskText(item,TASK_RESULT_BYTES)),display=optional(source,"display",item=>taskText(item,TASK_RESULT_BYTES)),error=optional(source,"error",item=>text(item,TASK_ERROR_BYTES));return{...task,...input?{input}:{},...facts?{facts}:{},...outputPath?{outputPath}:{},...result?{result}:{},...display?{display}:{},...error!==void 0?{error}:{}}}catch{return}}function readVersionedTask(value){try{let source=plainObject(value);return field(source,"version")===TASK_SNAPSHOT_VERSION?readPersistedTask(field(source,"task")):void 0}catch{return}}function createUsageTotals(){return{input:0,output:0,cacheRead:0,cacheWrite:0,cost:0}}function addUsageToTotals(totals,usage){totals.input+=usage.input,totals.output+=usage.output,totals.cacheRead+=usage.cacheRead,totals.cacheWrite+=usage.cacheWrite,totals.cost+=usage.cost.total}function combineUsage(first,second){return{input:first.input+second.input,output:first.output+second.output,cacheRead:first.cacheRead+second.cacheRead,cacheWrite:first.cacheWrite+second.cacheWrite,...first.cacheWrite1h!==void 0||second.cacheWrite1h!==void 0?{cacheWrite1h:(first.cacheWrite1h??0)+(second.cacheWrite1h??0)}:{},...first.reasoning!==void 0||second.reasoning!==void 0?{reasoning:(first.reasoning??0)+(second.reasoning??0)}:{},totalTokens:first.totalTokens+second.totalTokens,cost:{input:first.cost.input+second.cost.input,output:first.cost.output+second.cost.output,cacheRead:first.cost.cacheRead+second.cost.cacheRead,cacheWrite:first.cost.cacheWrite+second.cost.cacheWrite,total:first.cost.total+second.cost.total}}}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function isUsageValue(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0}var LEGACY_TASK_USAGE_TYPE="task-usage";function settledTaskId(entry){if(entry.type!=="custom"||!isRecord(entry.data))return;let data=entry.data;if(entry.customType===TASK_RECORD_TYPE)return data.version===TASK_SNAPSHOT_VERSION&&isRecord(data.task)?data.task.id:void 0;if(entry.customType===LEGACY_TASK_USAGE_TYPE)return data.version===1?data.taskId:void 0}function getTaskUsageRecord(entry){let taskId=settledTaskId(entry);if(typeof taskId!="string"||!taskId.trim()||entry.type!=="custom")return;let usage=entry.data.usage;if(!isRecord(usage)||!isRecord(usage.cost))return;let{input,output,cacheRead,cacheWrite,totalTokens,reasoning,cacheWrite1h}=usage,cost=usage.cost;if(!(!isUsageValue(input)||!isUsageValue(output)||!isUsageValue(cacheRead)||!isUsageValue(cacheWrite)||!isUsageValue(totalTokens)||!isUsageValue(cost.input)||!isUsageValue(cost.output)||!isUsageValue(cost.cacheRead)||!isUsageValue(cost.cacheWrite)||!isUsageValue(cost.total)||reasoning!==void 0&&!isUsageValue(reasoning)||cacheWrite1h!==void 0&&!isUsageValue(cacheWrite1h)))return{taskId,usage:{input,output,cacheRead,cacheWrite,totalTokens,...reasoning===void 0?{}:{reasoning},...cacheWrite1h===void 0?{}:{cacheWrite1h},cost:{input:cost.input,output:cost.output,cacheRead:cost.cacheRead,cacheWrite:cost.cacheWrite,total:cost.total}}}}function*accountedUsageEntries(entries){let backgroundTasks=new Set;for(let entry of entries)if(entry.type==="message"&&entry.message.role==="assistant")yield{key:`${entry.message.provider}/${entry.message.responseModel??entry.message.model}`,usage:entry.message.usage};else if(entry.type==="usage")yield{key:`${entry.provider}/${entry.model}`,usage:entry.usage};else if(entry.type==="message"&&entry.message.role==="toolResult"&&entry.message.usage)yield{key:"Tools/summaries",usage:entry.message.usage};else if((entry.type==="branch_summary"||entry.type==="compaction")&&entry.usage)yield{key:"Tools/summaries",usage:entry.usage};else{let record=getTaskUsageRecord(entry);if(!record||backgroundTasks.has(record.taskId))continue;backgroundTasks.add(record.taskId),yield{key:"Tools/summaries",usage:record.usage}}}function getAccountedUsages(entries){return Array.from(accountedUsageEntries(entries),({usage})=>usage)}function getUsageCostBreakdown(entries){let totalsByKey=new Map;for(let{key,usage}of accountedUsageEntries(entries)){let totals=totalsByKey.get(key);totals||(totals=createUsageTotals(),totalsByKey.set(key,totals)),addUsageToTotals(totals,usage)}return Array.from(totalsByKey,([key,totals])=>({key,cost:totals.cost,tokens:totals.input+totals.output+totals.cacheRead+totals.cacheWrite})).filter(entry=>entry.cost>0||entry.tokens>0).sort((a,b2)=>b2.cost-a.cost)}import*as os2 from"node:os";import{pathToFileURL as pathToFileURL2}from"node:url";var ST="(?:\\u0007|\\u001B\\u005C|\\u009C)",OSC_START="\\u001B\\]",CSI_START="[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?",CSI_FINAL="[\\dA-PR-TZcf-nq-uy=><~]",ansiRegex=new RegExp(`(?:${OSC_START}[\\s\\S]*?${ST})|${CSI_START}${CSI_FINAL}`,"g"),unfinishedAnsiAtEndRegex=new RegExp(`(?:${OSC_START}(?:[^\\u0007\\u009C\\u001B]|\\u001B(?!\\\\))*|${CSI_START})$`),MAX_PENDING_ANSI_LENGTH=256;function splitIncompleteAnsiSuffix(value){if(!value.includes("\x1B")&&!value.includes("\x9B"))return{complete:value,pending:""};let windowStart=Math.max(0,value.length-MAX_PENDING_ANSI_LENGTH),match=unfinishedAnsiAtEndRegex.exec(value.slice(windowStart));if(!match)return{complete:value,pending:""};let splitAt=windowStart+match.index;return{complete:value.slice(0,splitAt),pending:value.slice(splitAt)}}function stripAnsi(value){if(typeof value!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof value}\``);return!value.includes("\x1B")&&!value.includes("\x9B")?value:value.replace(ansiRegex,"")}function shortenPath(path5){if(typeof path5!="string")return"";let home=os2.homedir();return path5.startsWith(home)?`~${path5.slice(home.length)}`:path5}function linkPath(styledText,rawPath,cwd){if(!getCapabilities().hyperlinks)return styledText;let absolutePath=resolvePath(rawPath,cwd);return hyperlink(styledText,pathToFileURL2(absolutePath).href)}function str(value){return typeof value=="string"?value:value==null?"":null}function parseLineNumber(value){return typeof value=="string"&&value.trim()!==""&&(value=Number(value)),typeof value=="number"&&Number.isFinite(value)?value:void 0}function formatReadLineRange(offset,limit){if(offset==null&&limit==null)return"";let start=offset==null?1:parseLineNumber(offset);if(start===void 0)return"";if(limit==null)return`:${start}`;let count=parseLineNumber(limit);if(count===void 0)return"";let end=start+count-1;return`:${start}${end?`-${end}`:""}`}function replaceTabs(text2){return text2.replace(/\t/g," ")}function normalizeDisplayText(text2){return text2.replace(/\r/g,"")}function getTextOutput(result,showImages){if(!result)return"";let textBlocks=result.content.filter(c=>c.type==="text"),imageBlocks=result.content.filter(c=>c.type==="image"),output=textBlocks.map(c=>sanitizeBinaryOutput(stripAnsi(c.text||"")).replace(/\r/g,"")).join(`
155
+ `),finalOutputBytes=Buffer.byteLength(outputContent,"utf-8");return{content:outputContent,truncated:!0,truncatedBy,totalLines,totalBytes,outputLines:outputLinesArr.length,outputBytes:finalOutputBytes,lastLinePartial,firstLineExceedsLimit:!1,maxLines,maxBytes}}function truncateStringToBytesFromEnd(str2,maxBytes){let buf=Buffer.from(str2,"utf-8");if(buf.length<=maxBytes)return str2;let start=buf.length-maxBytes;for(;start<buf.length&&(buf[start]&192)===128;)start++;return buf.slice(start).toString("utf-8")}function truncateLine(line,maxChars=500){return line.length<=maxChars?{text:line,wasTruncated:!1}:{text:`${line.slice(0,maxChars)}... [truncated]`,wasTruncated:!0}}function truncateMiddle(content,maxBytes){let buf=Buffer.from(content,"utf-8"),totalLines=splitLinesForCounting(content).length;if(buf.length<=maxBytes)return{content,truncated:!1,removedChars:0,totalBytes:buf.length,totalLines};let isBoundary=index3=>index3>=buf.length||(buf[index3]&192)!==128,headEnd=Math.floor(maxBytes/2);for(;headEnd>0&&!isBoundary(headEnd);)headEnd--;let tailStart=buf.length-(maxBytes-Math.floor(maxBytes/2));for(;tailStart<buf.length&&!isBoundary(tailStart);)tailStart++;let head=buf.subarray(0,headEnd).toString("utf-8"),tail=buf.subarray(tailStart).toString("utf-8"),removedChars=Array.from(buf.subarray(headEnd,tailStart).toString("utf-8")).length;return{content:`${head}\u2026${removedChars} chars truncated\u2026${tail}`,truncated:!0,removedChars,totalBytes:buf.length,totalLines}}import{open}from"node:fs/promises";function finiteLimit(value,fallback,ceiling){return value===void 0||!Number.isFinite(value)?fallback:Math.max(0,Math.min(ceiling,Math.floor(value)))}var TASK_RESULT_BYTES=48*1024,TASK_DETAILS_BYTES=120*1024,TASK_READ_BYTES=8*1024,TASK_INPUT_BYTES=24*1024,TASK_TITLE_BYTES=1024,TASK_LABEL_BYTES=256,TASK_FACTS=16,TASK_FACT_BYTES=1024,TASK_ERROR_BYTES=4096,TASK_PATH_BYTES=8192;function errorText(error,fallback="Task execution failed (unprintable error)"){try{return boundText(error instanceof Error?error.message:String(error),TASK_ERROR_BYTES)}catch{return fallback}}function boundReadBytes(bytes){return finiteLimit(bytes,TASK_READ_BYTES,TASK_RESULT_BYTES)}function alignedSlice(buffer,start,end){for(;start<end&&(buffer[start]&192)===128;)start++;if(end<buffer.length)for(;end>start&&(buffer[end]&192)===128;)end--;let lead=end-1;for(;lead>=start&&(buffer[lead]&192)===128;)lead--;if(lead>=start){let byte=buffer[lead],width=byte>=240?4:byte>=224?3:byte>=192?2:1;end-lead<width&&(end=lead)}return buffer.subarray(start,end)}function boundText(text2,bytes=TASK_RESULT_BYTES){let limit=finiteLimit(bytes,TASK_RESULT_BYTES,TASK_RESULT_BYTES),prefix=text2.slice(0,limit+1),buffer=Buffer.from(prefix);return alignedSlice(buffer,0,Math.min(limit,buffer.length)).toString("utf8")}function boundTaskText(text2,bytes=TASK_RESULT_BYTES){let bounded=boundText(text2,bytes);return{text:bounded,truncated:bounded!==text2}}function boundInput(input){let text2=boundTaskText(input.text,TASK_INPUT_BYTES);return{label:boundText(input.label,TASK_LABEL_BYTES),text:text2.text,truncated:input.truncated||text2.truncated,...input.language?{language:boundText(input.language,64)}:{}}}function boundFacts(facts){return facts.slice(0,TASK_FACTS).map(([label,value])=>[boundText(label,TASK_LABEL_BYTES),boundText(value,TASK_FACT_BYTES)])}function boundTail(text2,bytes){let buffer=Buffer.from(text2);return buffer.length<=bytes?{text:text2,truncated:!1}:{text:alignedSlice(buffer,buffer.length-bytes,buffer.length).toString("utf8"),truncated:!0}}function resultText(result){let remaining=TASK_RESULT_BYTES,parts=[],truncated=!1;for(let block of result.content){if(remaining<=0){truncated=!0;break}let source=block.type==="text"?block.text:"[Image omitted from task output]",text2=boundText(source,remaining);(block.type!=="text"||text2!==source)&&(truncated=!0),parts.push(text2),remaining-=Math.max(1,Buffer.byteLength(text2)+1)}return{text:boundText(parts.join(`
156
+ `)),truncated}}function readWindow(size,options){let bytes=boundReadBytes(options.bytes),since=finiteLimit(options.sinceBytes,0,Number.MAX_SAFE_INTEGER),floor=since>size?0:since,start=options.sinceBytes!==void 0?Math.max(floor,size-bytes):options.mode==="head"?0:Math.max(0,size-bytes);return{start,length:Math.min(bytes,size-start),floor}}function outputSlice(size,floor,slice,fromByte){return{text:slice.toString("utf8"),totalBytes:size,truncated:slice.length<size-floor,fromByte}}async function readOutputSlice(path5,options={}){let file=await open(path5,"r");try{let{size}=await file.stat(),{start,length,floor}=readWindow(size,options),buffer=Buffer.alloc(Math.min(length+1,size-start)),{bytesRead}=await file.read(buffer,0,buffer.length,start),slice=alignedSlice(buffer.subarray(0,bytesRead),0,Math.min(length,bytesRead));return outputSlice(size,floor,slice,start+slice.byteOffset-buffer.byteOffset)}finally{await file.close()}}function sliceText(text2,options={}){let buffer=Buffer.from(text2),{start,length,floor}=readWindow(buffer.length,options),slice=alignedSlice(buffer,start,start+length);return outputSlice(buffer.length,floor,slice,slice.byteOffset-buffer.byteOffset)}var TASK_TERMINAL_STATUSES=["completed","partial","failed","cancelled","timeout"],TASK_KIND_PATTERN=/^[a-z][a-z0-9-]{0,63}$/,TASK_BACKGROUND_REJECTION="Background execution is not permitted in this host. Run with background: false or omit background. No work was started.";function isTaskTerminal(status){return TASK_TERMINAL_STATUSES.includes(status)}var TaskLookupError=class extends Error{constructor(kind,matches){super(kind==="ambiguous"?"Ambiguous task ID":"Unknown task ID"),this.name="TaskLookupError",this.kind=kind,this.matches=matches}};var TASK_RECORD_TYPE="task-record",TASK_SNAPSHOT_VERSION=3;function plainObject(value){if(value===null||typeof value!="object"||Array.isArray(value))throw new Error("Expected object");let prototype=Object.getPrototypeOf(value);if(prototype!==Object.prototype&&prototype!==null)throw new Error("Expected plain object");return value}function field(object,key){let descriptor=Object.getOwnPropertyDescriptor(object,key);if(descriptor&&!("value"in descriptor))throw new Error("Unexpected accessor");return descriptor?.value}function text(value,bytes){if(typeof value!="string")throw new Error("Expected string");return boundText(value,bytes)}function exact(value,bytes){if(typeof value!="string"||!value||Buffer.byteLength(value)>bytes||value.includes("\0"))throw new Error("Invalid identity or path");return value}function optional(source,key,read){let value=field(source,key);return value===void 0?void 0:read(value)}function taskText(value,bytes){let source=plainObject(value),original=field(source,"text"),truncated=field(source,"truncated");if(typeof truncated!="boolean")throw new Error("Expected truncation flag");let bounded=text(original,bytes);return{text:bounded,truncated:truncated||bounded!==original}}function taskInput(value){let source=plainObject(value),language=optional(source,"language",item=>text(item,64));return{label:text(field(source,"label"),TASK_LABEL_BYTES),...taskText(source,TASK_INPUT_BYTES),...language?{language}:{}}}function taskFacts(value){if(!Array.isArray(value))throw new Error("Expected facts");return value.slice(0,TASK_FACTS).map(row=>{if(!Array.isArray(row)||row.length!==2)throw new Error("Expected fact");return[text(row[0],TASK_LABEL_BYTES),text(row[1],TASK_FACT_BYTES)]})}function timestamp(value){if(typeof value!="number"||!Number.isSafeInteger(value)||value<0)throw new Error("Expected time");return value}function readPersistedTask(value){try{let source=plainObject(value),kind=field(source,"kind"),mode=field(source,"mode"),status=field(source,"status"),output=field(source,"output");if(typeof kind!="string"||!TASK_KIND_PATTERN.test(kind)||mode!=="foreground"&&mode!=="background"||output!=="log"&&output!=="report"||typeof status!="string"||!isTaskTerminal(status))return;let startedAt=timestamp(field(source,"startedAt")),endedAt=timestamp(field(source,"endedAt"));if(endedAt<startedAt)return;let id=exact(field(source,"id"),512);if(!id.startsWith(`${kind}-`)||id.length<=kind.length+1)return;let anchor=field(source,"anchorId"),task={id,kind,label:text(field(source,"label"),TASK_LABEL_BYTES),title:text(field(source,"title"),TASK_TITLE_BYTES),output,toolCallId:exact(field(source,"toolCallId"),512),anchorId:anchor===null?null:exact(anchor,8192),mode,status,startedAt,endedAt},input=optional(source,"input",taskInput),facts=optional(source,"facts",taskFacts),outputPath=optional(source,"outputPath",item=>exact(item,TASK_PATH_BYTES)),result=optional(source,"result",item=>taskText(item,TASK_RESULT_BYTES)),display=optional(source,"display",item=>taskText(item,TASK_RESULT_BYTES)),error=optional(source,"error",item=>text(item,TASK_ERROR_BYTES));return{...task,...input?{input}:{},...facts?{facts}:{},...outputPath?{outputPath}:{},...result?{result}:{},...display?{display}:{},...error!==void 0?{error}:{}}}catch{return}}function readVersionedTask(value){try{let source=plainObject(value);return field(source,"version")===TASK_SNAPSHOT_VERSION?readPersistedTask(field(source,"task")):void 0}catch{return}}function createUsageTotals(){return{input:0,output:0,cacheRead:0,cacheWrite:0,cost:0}}function addUsageToTotals(totals,usage){totals.input+=usage.input,totals.output+=usage.output,totals.cacheRead+=usage.cacheRead,totals.cacheWrite+=usage.cacheWrite,totals.cost+=usage.cost.total}function combineUsage(first,second){return{input:first.input+second.input,output:first.output+second.output,cacheRead:first.cacheRead+second.cacheRead,cacheWrite:first.cacheWrite+second.cacheWrite,...first.cacheWrite1h!==void 0||second.cacheWrite1h!==void 0?{cacheWrite1h:(first.cacheWrite1h??0)+(second.cacheWrite1h??0)}:{},...first.reasoning!==void 0||second.reasoning!==void 0?{reasoning:(first.reasoning??0)+(second.reasoning??0)}:{},totalTokens:first.totalTokens+second.totalTokens,cost:{input:first.cost.input+second.cost.input,output:first.cost.output+second.cost.output,cacheRead:first.cost.cacheRead+second.cost.cacheRead,cacheWrite:first.cost.cacheWrite+second.cost.cacheWrite,total:first.cost.total+second.cost.total}}}function emptyUsage(){return{input:0,output:0,cacheRead:0,cacheWrite:0,totalTokens:0,cost:{input:0,output:0,cacheRead:0,cacheWrite:0,total:0}}}function cacheHitPercent({input,cacheRead,cacheWrite}){let promptTokens=input+cacheRead+cacheWrite;return(cacheRead>0||cacheWrite>0)&&promptTokens>0?cacheRead/promptTokens*100:void 0}function isRecord(value){return typeof value=="object"&&value!==null&&!Array.isArray(value)}function isUsageValue(value){return typeof value=="number"&&Number.isFinite(value)&&value>=0}var LEGACY_TASK_USAGE_TYPE="task-usage";function settledTaskId(entry){if(entry.type!=="custom"||!isRecord(entry.data))return;let data=entry.data;if(entry.customType===TASK_RECORD_TYPE)return data.version===TASK_SNAPSHOT_VERSION&&isRecord(data.task)?data.task.id:void 0;if(entry.customType===LEGACY_TASK_USAGE_TYPE)return data.version===1?data.taskId:void 0}function getTaskUsageRecord(entry){let taskId=settledTaskId(entry);if(typeof taskId!="string"||!taskId.trim()||entry.type!=="custom")return;let usage=entry.data.usage;if(!isRecord(usage)||!isRecord(usage.cost))return;let{input,output,cacheRead,cacheWrite,totalTokens,reasoning,cacheWrite1h}=usage,cost=usage.cost;if(!(!isUsageValue(input)||!isUsageValue(output)||!isUsageValue(cacheRead)||!isUsageValue(cacheWrite)||!isUsageValue(totalTokens)||!isUsageValue(cost.input)||!isUsageValue(cost.output)||!isUsageValue(cost.cacheRead)||!isUsageValue(cost.cacheWrite)||!isUsageValue(cost.total)||reasoning!==void 0&&!isUsageValue(reasoning)||cacheWrite1h!==void 0&&!isUsageValue(cacheWrite1h)))return{taskId,usage:{input,output,cacheRead,cacheWrite,totalTokens,...reasoning===void 0?{}:{reasoning},...cacheWrite1h===void 0?{}:{cacheWrite1h},cost:{input:cost.input,output:cost.output,cacheRead:cost.cacheRead,cacheWrite:cost.cacheWrite,total:cost.total}}}}function*accountedUsageEntries(entries){let backgroundTasks=new Set;for(let entry of entries)if(entry.type==="message"&&entry.message.role==="assistant")yield{key:`${entry.message.provider}/${entry.message.responseModel??entry.message.model}`,usage:entry.message.usage};else if(entry.type==="usage")yield{key:`${entry.provider}/${entry.model}`,usage:entry.usage};else if(entry.type==="message"&&entry.message.role==="toolResult"&&entry.message.usage)yield{key:"Tools/summaries",usage:entry.message.usage};else if((entry.type==="branch_summary"||entry.type==="compaction")&&entry.usage)yield{key:"Tools/summaries",usage:entry.usage};else{let record=getTaskUsageRecord(entry);if(!record||backgroundTasks.has(record.taskId))continue;backgroundTasks.add(record.taskId),yield{key:"Tools/summaries",usage:record.usage}}}function getAccountedUsages(entries){return Array.from(accountedUsageEntries(entries),({usage})=>usage)}function getUsageCostBreakdown(entries){let totalsByKey=new Map;for(let{key,usage}of accountedUsageEntries(entries)){let totals=totalsByKey.get(key);totals||(totals=createUsageTotals(),totalsByKey.set(key,totals)),addUsageToTotals(totals,usage)}return Array.from(totalsByKey,([key,totals])=>({key,cost:totals.cost,tokens:totals.input+totals.output+totals.cacheRead+totals.cacheWrite})).filter(entry=>entry.cost>0||entry.tokens>0).sort((a,b2)=>b2.cost-a.cost)}import*as os2 from"node:os";import{pathToFileURL as pathToFileURL2}from"node:url";var ST="(?:\\u0007|\\u001B\\u005C|\\u009C)",OSC_START="\\u001B\\]",CSI_START="[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?",CSI_FINAL="[\\dA-PR-TZcf-nq-uy=><~]",ansiRegex=new RegExp(`(?:${OSC_START}[\\s\\S]*?${ST})|${CSI_START}${CSI_FINAL}`,"g"),unfinishedAnsiAtEndRegex=new RegExp(`(?:${OSC_START}(?:[^\\u0007\\u009C\\u001B]|\\u001B(?!\\\\))*|${CSI_START})$`),MAX_PENDING_ANSI_LENGTH=256;function splitIncompleteAnsiSuffix(value){if(!value.includes("\x1B")&&!value.includes("\x9B"))return{complete:value,pending:""};let windowStart=Math.max(0,value.length-MAX_PENDING_ANSI_LENGTH),match=unfinishedAnsiAtEndRegex.exec(value.slice(windowStart));if(!match)return{complete:value,pending:""};let splitAt=windowStart+match.index;return{complete:value.slice(0,splitAt),pending:value.slice(splitAt)}}function stripAnsi(value){if(typeof value!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof value}\``);return!value.includes("\x1B")&&!value.includes("\x9B")?value:value.replace(ansiRegex,"")}function shortenPath(path5){if(typeof path5!="string")return"";let home=os2.homedir();return path5.startsWith(home)?`~${path5.slice(home.length)}`:path5}function linkPath(styledText,rawPath,cwd){if(!getCapabilities().hyperlinks)return styledText;let absolutePath=resolvePath(rawPath,cwd);return hyperlink(styledText,pathToFileURL2(absolutePath).href)}function str(value){return typeof value=="string"?value:value==null?"":null}function parseLineNumber(value){return typeof value=="string"&&value.trim()!==""&&(value=Number(value)),typeof value=="number"&&Number.isFinite(value)?value:void 0}function formatReadLineRange(offset,limit){if(offset==null&&limit==null)return"";let start=offset==null?1:parseLineNumber(offset);if(start===void 0)return"";if(limit==null)return`:${start}`;let count=parseLineNumber(limit);if(count===void 0)return"";let end=start+count-1;return`:${start}${end?`-${end}`:""}`}function replaceTabs(text2){return text2.replace(/\t/g," ")}function normalizeDisplayText(text2){return text2.replace(/\r/g,"")}function getTextOutput(result,showImages){if(!result)return"";let textBlocks=result.content.filter(c=>c.type==="text"),imageBlocks=result.content.filter(c=>c.type==="image"),output=textBlocks.map(c=>sanitizeBinaryOutput(stripAnsi(c.text||"")).replace(/\r/g,"")).join(`
157
157
  `),caps=getCapabilities();if(imageBlocks.length>0&&(!caps.images||!showImages)){let imageIndicators=imageBlocks.map(img=>{let mimeType=img.mimeType??"image/unknown",dims=img.data&&img.mimeType?getImageDimensions(img.data,img.mimeType)??void 0:void 0;return imageFallback(mimeType,dims)}).join(`
158
158
  `);output=output?`${output}
159
159
  ${imageIndicators}`:imageIndicators}return output}var COLLAPSED_ARGS_CHARS=100;function formatToolCallWithArgs(title,args,theme2,expanded){let header=theme2.fg("toolTitle",theme2.bold(title));if(args==null)return header;let entries=typeof args=="object"&&!Array.isArray(args)?Object.entries(args):[["args",args]];if(entries.length===0)return header;if(expanded){let lines=entries.map(([key,value])=>{let text2=typeof value=="string"?value:JSON.stringify(value,null,2)??String(value);return` ${key}: ${replaceTabs(text2).replace(/\r/g,"").split(`
@@ -206,7 +206,7 @@ Hint: `,RECEIVED_ARGUMENTS_MAX_BYTES=2*1024,RECEIVED_ARGUMENTS_MAX_LINES=40,FIEL
206
206
 
207
207
  Hint: ${hints.join(`
208
208
  Hint: `)}`:head;if(markerIndex!==-1){let bounded=truncateHead(received,{maxBytes:RECEIVED_ARGUMENTS_MAX_BYTES,maxLines:RECEIVED_ARGUMENTS_MAX_LINES});enriched+=`${RECEIVED_ARGUMENTS_MARKER}${bounded.content}`,bounded.truncated&&(enriched+=`
209
- \u2026 (arguments truncated)`)}return new Error(enriched)}function wrapPrepareArguments(definition){let tool={name:definition.name,description:definition.description,parameters:definition.parameters};return raw=>{let args=definition.prepareArguments?definition.prepareArguments(raw):raw;try{validateToolArguments(tool,{type:"toolCall",id:"",name:definition.name,arguments:args})}catch(error){throw enrichValidationError(error,definition.parameters,args)}return args}}function wrapToolDefinition(definition,ctxFactory){return{name:definition.name,label:definition.label,description:definition.description,parameters:definition.parameters,outputSchema:definition.outputSchema,constrainedSampling:definition.constrainedSampling,prepareArguments:wrapPrepareArguments(definition),executionMode:definition.executionMode,execute:(toolCallId,params,signal,onUpdate,ctx)=>definition.execute(toolCallId,params,signal,onUpdate,ctx??ctxFactory?.(toolCallId,signal))}}function createToolDefinitionFromAgentTool(tool){return{name:tool.name,label:tool.label,description:tool.description,parameters:tool.parameters,outputSchema:tool.outputSchema,constrainedSampling:tool.constrainedSampling,prepareArguments:tool.prepareArguments,executionMode:tool.executionMode,execute:async(toolCallId,params,signal,onUpdate)=>tool.execute(toolCallId,params,signal,onUpdate)}}var loadCodemodeExecutor=()=>import("./execute-5ZQUS52M.js");var CODE_PREVIEW_LINES=10,CALL_PREVIEW_COUNT=8,OUTPUT_PREVIEW_LINES=5,COLLAPSED_ARGS_CHARS2=80,SCRIPT_HEADER=/^Script (completed|failed)\nWall time [\d.]+ seconds\nOutput:\n$/;function expandHint(theme2,hidden,noun){return`${theme2.fg("muted",`... (${hidden} more ${noun},`)} ${keyHint("app.tools.expand","to expand")}${theme2.fg("muted",")")}`}function formatDuration(ms){return ms===void 0?"":ms<1e3?`${Math.round(ms)}ms`:`${(ms/1e3).toFixed(1)}s`}function formatCost(cost){return`$${cost>=.01?cost.toFixed(2):cost.toPrecision(2)}`}function statusIcon(call,theme2){switch(call.status){case"running":return theme2.fg("warning","\u2026");case"ok":return theme2.fg("success","\u2713");case"error":return theme2.fg("error","\u2717");case"cancelled":return theme2.fg("muted","\u2298")}}function formatCall(call,theme2,expanded){let args=!expanded&&call.args.length>COLLAPSED_ARGS_CHARS2?`${call.args.slice(0,COLLAPSED_ARGS_CHARS2-3)}...`:call.args,duration=formatDuration(call.durationMs),line=`${statusIcon(call,theme2)} ${theme2.fg("toolTitle",call.name)}`;return args&&(line+=` ${theme2.fg("muted",args)}`),duration&&(line+=` ${theme2.fg("dim",duration)}`),call.cost&&(line+=` ${theme2.fg("dim",formatCost(call.cost))}`),expanded&&call.error&&(line+=`
209
+ \u2026 (arguments truncated)`)}return new Error(enriched)}function wrapPrepareArguments(definition){let tool={name:definition.name,description:definition.description,parameters:definition.parameters};return raw=>{let args=definition.prepareArguments?definition.prepareArguments(raw):raw;try{validateToolArguments(tool,{type:"toolCall",id:"",name:definition.name,arguments:args})}catch(error){throw enrichValidationError(error,definition.parameters,args)}return args}}function wrapToolDefinition(definition,ctxFactory){return{name:definition.name,label:definition.label,description:definition.description,parameters:definition.parameters,outputSchema:definition.outputSchema,constrainedSampling:definition.constrainedSampling,prepareArguments:wrapPrepareArguments(definition),executionMode:definition.executionMode,execute:(toolCallId,params,signal,onUpdate,ctx)=>definition.execute(toolCallId,params,signal,onUpdate,ctx??ctxFactory?.(toolCallId,signal))}}function createToolDefinitionFromAgentTool(tool){return{name:tool.name,label:tool.label,description:tool.description,parameters:tool.parameters,outputSchema:tool.outputSchema,constrainedSampling:tool.constrainedSampling,prepareArguments:tool.prepareArguments,executionMode:tool.executionMode,execute:async(toolCallId,params,signal,onUpdate)=>tool.execute(toolCallId,params,signal,onUpdate)}}var loadCodemodeExecutor=()=>import("./execute-4CWRNHPO.js");var CODE_PREVIEW_LINES=10,CALL_PREVIEW_COUNT=8,OUTPUT_PREVIEW_LINES=5,COLLAPSED_ARGS_CHARS2=80,SCRIPT_HEADER=/^Script (completed|failed)\nWall time [\d.]+ seconds\nOutput:\n$/;function expandHint(theme2,hidden,noun){return`${theme2.fg("muted",`... (${hidden} more ${noun},`)} ${keyHint("app.tools.expand","to expand")}${theme2.fg("muted",")")}`}function formatDuration(ms){return ms===void 0?"":ms<1e3?`${Math.round(ms)}ms`:`${(ms/1e3).toFixed(1)}s`}function formatCost(cost){return`$${cost>=.01?cost.toFixed(2):cost.toPrecision(2)}`}function statusIcon(call,theme2){switch(call.status){case"running":return theme2.fg("warning","\u2026");case"ok":return theme2.fg("success","\u2713");case"error":return theme2.fg("error","\u2717");case"cancelled":return theme2.fg("muted","\u2298")}}function formatCall(call,theme2,expanded){let args=!expanded&&call.args.length>COLLAPSED_ARGS_CHARS2?`${call.args.slice(0,COLLAPSED_ARGS_CHARS2-3)}...`:call.args,duration=formatDuration(call.durationMs),line=`${statusIcon(call,theme2)} ${theme2.fg("toolTitle",call.name)}`;return args&&(line+=` ${theme2.fg("muted",args)}`),duration&&(line+=` ${theme2.fg("dim",duration)}`),call.cost&&(line+=` ${theme2.fg("dim",formatCost(call.cost))}`),expanded&&call.error&&(line+=`
210
210
  ${theme2.fg("error",call.error.split(`
211
211
  `).join(`
212
212
  `))}`),line}var codemodeRenderers={renderCall(args,theme2,context){startToolTimer(context);let code=str(args?.code),title=theme2.fg("toolTitle",theme2.bold("codemode")),component=context.lastComponent??new Container;if(component.clear(),code===null)return component.addChild(new Text(`${title} ${theme2.fg("error","[invalid arg]")}`,0,0)),component;if(component.addChild(new Text(title,0,0)),code){let highlighted=highlightCode(replaceTabs(code.replace(/\r/g,"").trimEnd()),"javascript").join(`
@@ -227,4 +227,4 @@ ${description}`:""}`)}for(let entry of visible)toolSections.push(entry.section)}
227
227
 
228
228
  `)}function describeFields(schema,depth){if(typeof schema!="object"||schema===null)return;let{type,properties,required}=schema;if(type!=="object"||typeof properties!="object"||properties===null)return;let requiredNames=new Set(Array.isArray(required)?required:[]);return`{ ${Object.entries(properties).map(([name,field2])=>{let nested=depth>0?describeFields(field2,depth-1):void 0;return`${name}${requiredNames.has(name)?"":"?"}${nested?`: ${nested}`:""}`}).join(", ")} }`}function describeOutput(schema){let type=renderToolOutputType(schema);return type==="string"?"a string":`\`${describeFields(schema,1)??type.replace(/\s+/g," ")}\``}function describeScriptCall(tool){return`${tool.description.trim()}
229
229
 
230
- Codemode: \`tools.${toCodemodeIdentifier(tool.name)}(args)\` resolves to ${describeOutput(toCodemodeDeclaration(tool).outputSchema)}.`}function prepareCodemodeLoadout(loadout,options){let mode=options.getMode?.()??SETTINGS_DEFAULTS.codemode.mode,isDirect=tool=>loadout.getExposure(tool.name)==="direct",callable=getCodemodeCallableTools(loadout.callable),callableNames=new Set(callable.map(tool=>tool.name)),descriptions={};if(mode==="on")for(let tool of loadout.declared)callableNames.has(tool.name)&&(descriptions[tool.name]=describeScriptCall(tool));let listed=mode==="only"?callable:callable.filter(tool=>!isDirect(tool)),namespaces=new Map(listed.flatMap(tool=>{let namespace=loadout.getNamespace(tool.name);return namespace?[[tool.name,namespace]]:[]})),guidelines=new Map(listed.map(tool=>[tool.name,loadout.getPromptGuidelines(tool.name)]));descriptions[CODEMODE_TOOL_NAME]=createCodemodeDescription(listed,{models:options.models===!0,namespaces,guidelines,deferred:new Set(listed.filter(tool=>loadout.getExposure(tool.name)==="deferred").map(tool=>tool.name)),inlineBudget:options.getInlineBudget?.()??DEFAULT_CODEMODE_INLINE_BUDGET});let declaredNames=new Set(loadout.declared.map(tool=>tool.name));return{descriptions,hiddenDeclarations:mode==="only"?callable.filter(tool=>isDirect(tool)&&declaredNames.has(tool.name)).map(tool=>tool.name):[]}}var DISCOVERY_GLOBALS=/\b(searchTools|describeNamespace|describeTool|ALL_TOOLS)\b/;function getScriptReach(code){return typeof code!="string"?[]:DISCOVERY_GLOBALS.test(code)?"all":code.match(/\w+/g)??[]}function createCodemodeToolDefinition(options={}){return{name:CODEMODE_TOOL_NAME,label:CODEMODE_TOOL_NAME,description:createCodemodeDescription([],{models:options.models===!0}),promptSnippet:codemodeToolSystemPromptContribution.snippet,promptGuidelines:[...codemodeToolSystemPromptContribution.guidelines],parameters:codemodeSchema,exposure:"model-only",prepareLoadout:loadout=>prepareCodemodeLoadout(loadout,options),reachesTools:input=>getScriptReach(input.code),constrainedSampling:{type:"grammar",variants:{openai_lark:CODEMODE_SOURCE_GRAMMAR}},execute:async(toolCallId,params,signal,onUpdate,ctx)=>(await loadCodemodeExecutor()).executeCodemode(toolCallId,params,signal,onUpdate,ctx,options),...codemodeRenderers}}export{typebox_exports,build_exports,envApiKeyAuth,lazyOAuth,fauxText,fauxThinking,fauxToolCall,fauxAssistantMessage,createFauxCore,fauxProvider,isContextOverflow,isRecoverableLength,getOverflowPatterns,DEFAULT_MAX_AGENT_RETRY_DELAY_MS,retryDelayMs,retryAssistantCall,isRetryableAssistantError,StringEnum,value_exports2 as value_exports,Compile,compile_exports,validateToolCall,validateToolArguments,Z,fuzzyMatch,fuzzyFilter,visibleWidth,stripTerminalSequences,wrapTextWithAnsi,truncateToWidth,sliceByColumn,CombinedAutocompleteProvider,indexedColor,rgbColor,parseColor,colorToRgb,mixColors,foregroundAnsi,backgroundAnsi,Key,matchesKey,decodeKittyPrintable,detectCapabilities,getCapabilities,getTerminalColorMode,setCapabilityOverrides,hyperlink,isFocusable,CURSOR_MARKER,Container,isViewportTUI,Box,TUI_KEYBINDINGS,KeybindingsManager,setKeybindings,getKeybindings,Text,Loader,CancellableLoader,SelectList,Editor,setImageTranscoder,Image,Input,Markdown,MouseRegion,ScrollView,SettingsList,Spacer,TruncatedText,VStack,getNativeClipboard,isAppleTerminalSession,ProcessTerminal,TuiAltScreen,TuiMainScreen,dist_exports,SETTINGS_DEFAULTS,FS_WATCH_RETRY_DELAY_MS,closeWatcher,watchWithErrorHandler,loadAllHighlightLanguages,SYSTEM_THEME_NAME,THEME_TOKENS,setThemeJsonValidator,setTerminalColors,setTerminalColorScheme,markTerminalColorsPending,Theme,getAvailableThemes,getAvailableThemesWithPaths,loadThemeFromPath,getThemeByName,parseAutoThemeSetting,resolveThemeSetting,getTerminalTheme,theme,setRegisteredThemes,initTheme,setTheme,setThemeInstance,onThemeChange,stopThemeWatcher,getResolvedThemeColors,getThemeExportColors,highlightCode,getLanguageFromPath,getMarkdownTheme,getSelectListTheme,getEditorTheme,getSettingsListTheme,formatKeyText,keyLabel,keyText,keyDisplayText,keyHint,rawKeyHint,TASK_RESULT_BYTES,TASK_DETAILS_BYTES,TASK_TITLE_BYTES,TASK_LABEL_BYTES,TASK_ERROR_BYTES,TASK_PATH_BYTES,finiteLimit,boundText,boundTaskText,boundInput,boundFacts,boundTail,resultText,readOutputSlice,sliceText,TASK_KIND_PATTERN,TASK_BACKGROUND_REJECTION,isTaskTerminal,TaskLookupError,TASK_RECORD_TYPE,TASK_SNAPSHOT_VERSION,readVersionedTask,splitIncompleteAnsiSuffix,stripAnsi,createOutputFilePath,writeOutputFile,createOutputFileStream,DEFAULT_MAX_LINES,DEFAULT_MAX_BYTES,formatSize,truncateHead,truncateTail,truncateLine,truncateMiddle,createUsageTotals,addUsageToTotals,combineUsage,getTaskUsageRecord,getAccountedUsages,getUsageCostBreakdown,wrapToolDefinition,createToolDefinitionFromAgentTool,shortenPath,str,formatReadLineRange,replaceTabs,normalizeDisplayText,getTextOutput,formatToolCallWithArgs,startToolTimer,toolTimerText,invalidArgText,renderToolPath,truncateToVisualLines,VisualLinePreview,toCodemodeIdentifier,renderToolSample,parseCodemodeSource,TOOL_SEARCH_TOOL_NAME,DEFAULT_TOOL_SEARCH_LIMIT,createToolSearchDocument,Bm25Ranker,createToolSearchToolDefinition,CODEMODE_TOOL_NAME,CODEMODE_STORE_ENTRY_TYPE,CODEMODE_DOCS_PATH,toCodemodeDeclaration,getCodemodeCallableTools,createCodemodeToolDefinition};
230
+ Codemode: \`tools.${toCodemodeIdentifier(tool.name)}(args)\` resolves to ${describeOutput(toCodemodeDeclaration(tool).outputSchema)}.`}function prepareCodemodeLoadout(loadout,options){let mode=options.getMode?.()??SETTINGS_DEFAULTS.codemode.mode,isDirect=tool=>loadout.getExposure(tool.name)==="direct",callable=getCodemodeCallableTools(loadout.callable),callableNames=new Set(callable.map(tool=>tool.name)),descriptions={};if(mode==="on")for(let tool of loadout.declared)callableNames.has(tool.name)&&(descriptions[tool.name]=describeScriptCall(tool));let listed=mode==="only"?callable:callable.filter(tool=>!isDirect(tool)),namespaces=new Map(listed.flatMap(tool=>{let namespace=loadout.getNamespace(tool.name);return namespace?[[tool.name,namespace]]:[]})),guidelines=new Map(listed.map(tool=>[tool.name,loadout.getPromptGuidelines(tool.name)]));descriptions[CODEMODE_TOOL_NAME]=createCodemodeDescription(listed,{models:options.models===!0,namespaces,guidelines,deferred:new Set(listed.filter(tool=>loadout.getExposure(tool.name)==="deferred").map(tool=>tool.name)),inlineBudget:options.getInlineBudget?.()??DEFAULT_CODEMODE_INLINE_BUDGET});let declaredNames=new Set(loadout.declared.map(tool=>tool.name));return{descriptions,hiddenDeclarations:mode==="only"?callable.filter(tool=>isDirect(tool)&&declaredNames.has(tool.name)).map(tool=>tool.name):[]}}var DISCOVERY_GLOBALS=/\b(searchTools|describeNamespace|describeTool|ALL_TOOLS)\b/;function getScriptReach(code){return typeof code!="string"?[]:DISCOVERY_GLOBALS.test(code)?"all":code.match(/\w+/g)??[]}function createCodemodeToolDefinition(options={}){return{name:CODEMODE_TOOL_NAME,label:CODEMODE_TOOL_NAME,description:createCodemodeDescription([],{models:options.models===!0}),promptSnippet:codemodeToolSystemPromptContribution.snippet,promptGuidelines:[...codemodeToolSystemPromptContribution.guidelines],parameters:codemodeSchema,exposure:"model-only",prepareLoadout:loadout=>prepareCodemodeLoadout(loadout,options),reachesTools:input=>getScriptReach(input.code),constrainedSampling:{type:"grammar",variants:{openai_lark:CODEMODE_SOURCE_GRAMMAR}},execute:async(toolCallId,params,signal,onUpdate,ctx)=>(await loadCodemodeExecutor()).executeCodemode(toolCallId,params,signal,onUpdate,ctx,options),...codemodeRenderers}}export{typebox_exports,build_exports,envApiKeyAuth,lazyOAuth,fauxText,fauxThinking,fauxToolCall,fauxAssistantMessage,createFauxCore,fauxProvider,isContextOverflow,isRecoverableLength,getOverflowPatterns,DEFAULT_MAX_AGENT_RETRY_DELAY_MS,retryDelayMs,retryAssistantCall,isRetryableAssistantError,StringEnum,value_exports2 as value_exports,Compile,compile_exports,validateToolCall,validateToolArguments,Z,fuzzyMatch,fuzzyFilter,visibleWidth,stripTerminalSequences,wrapTextWithAnsi,truncateToWidth,sliceByColumn,CombinedAutocompleteProvider,indexedColor,rgbColor,parseColor,colorToRgb,mixColors,foregroundAnsi,backgroundAnsi,Key,matchesKey,decodeKittyPrintable,detectCapabilities,getCapabilities,getTerminalColorMode,setCapabilityOverrides,hyperlink,isFocusable,CURSOR_MARKER,Container,isViewportTUI,Box,TUI_KEYBINDINGS,KeybindingsManager,setKeybindings,getKeybindings,Text,Loader,CancellableLoader,SelectList,Editor,setImageTranscoder,Image,Input,Markdown,MouseRegion,ScrollView,SettingsList,Spacer,TruncatedText,VStack,getNativeClipboard,isAppleTerminalSession,ProcessTerminal,TuiAltScreen,TuiMainScreen,dist_exports,SETTINGS_DEFAULTS,FS_WATCH_RETRY_DELAY_MS,closeWatcher,watchWithErrorHandler,loadAllHighlightLanguages,SYSTEM_THEME_NAME,THEME_TOKENS,setThemeJsonValidator,setTerminalColors,setTerminalColorScheme,markTerminalColorsPending,Theme,getAvailableThemes,getAvailableThemesWithPaths,loadThemeFromPath,getThemeByName,parseAutoThemeSetting,resolveThemeSetting,getTerminalTheme,theme,setRegisteredThemes,initTheme,setTheme,setThemeInstance,onThemeChange,stopThemeWatcher,getResolvedThemeColors,getThemeExportColors,highlightCode,getLanguageFromPath,getMarkdownTheme,getSelectListTheme,getEditorTheme,getSettingsListTheme,formatKeyText,keyLabel,keyText,keyDisplayText,keyHint,rawKeyHint,finiteLimit,TASK_RESULT_BYTES,TASK_DETAILS_BYTES,TASK_READ_BYTES,TASK_TITLE_BYTES,TASK_LABEL_BYTES,TASK_ERROR_BYTES,TASK_PATH_BYTES,errorText,boundReadBytes,boundText,boundTaskText,boundInput,boundFacts,boundTail,resultText,readOutputSlice,sliceText,TASK_KIND_PATTERN,TASK_BACKGROUND_REJECTION,isTaskTerminal,TaskLookupError,TASK_RECORD_TYPE,TASK_SNAPSHOT_VERSION,readVersionedTask,splitIncompleteAnsiSuffix,stripAnsi,createOutputFilePath,writeOutputFile,createOutputFileStream,DEFAULT_MAX_LINES,DEFAULT_MAX_BYTES,formatSize,truncateHead,truncateTail,truncateLine,truncateMiddle,createUsageTotals,addUsageToTotals,combineUsage,emptyUsage,cacheHitPercent,getTaskUsageRecord,getAccountedUsages,getUsageCostBreakdown,wrapToolDefinition,createToolDefinitionFromAgentTool,shortenPath,str,formatReadLineRange,replaceTabs,normalizeDisplayText,getTextOutput,formatToolCallWithArgs,startToolTimer,toolTimerText,invalidArgText,renderToolPath,truncateToVisualLines,VisualLinePreview,toCodemodeIdentifier,renderToolSample,parseCodemodeSource,TOOL_SEARCH_TOOL_NAME,DEFAULT_TOOL_SEARCH_LIMIT,createToolSearchDocument,Bm25Ranker,createToolSearchToolDefinition,CODEMODE_TOOL_NAME,CODEMODE_STORE_ENTRY_TYPE,CODEMODE_DOCS_PATH,toCodemodeDeclaration,getCodemodeCallableTools,createCodemodeToolDefinition};