@selesai/code 0.5.28 → 0.5.29

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 (307) hide show
  1. package/dist/cli/args.d.ts.map +1 -1
  2. package/dist/cli/args.js +9 -1
  3. package/dist/cli/args.js.map +1 -1
  4. package/dist/cli/config-selector.d.ts.map +1 -1
  5. package/dist/cli/config-selector.js +1 -1
  6. package/dist/cli/config-selector.js.map +1 -1
  7. package/dist/cli/credential-print.d.ts +23 -0
  8. package/dist/cli/credential-print.d.ts.map +1 -0
  9. package/dist/cli/credential-print.js +117 -0
  10. package/dist/cli/credential-print.js.map +1 -0
  11. package/dist/cli/startup-ui.d.ts.map +1 -1
  12. package/dist/cli/startup-ui.js +1 -1
  13. package/dist/cli/startup-ui.js.map +1 -1
  14. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  15. package/dist/core/agent-session-runtime.js +3 -0
  16. package/dist/core/agent-session-runtime.js.map +1 -1
  17. package/dist/core/agent-session.d.ts +12 -1
  18. package/dist/core/agent-session.d.ts.map +1 -1
  19. package/dist/core/agent-session.js +20 -14
  20. package/dist/core/agent-session.js.map +1 -1
  21. package/dist/core/compaction/compaction.d.ts.map +1 -1
  22. package/dist/core/compaction/compaction.js +11 -3
  23. package/dist/core/compaction/compaction.js.map +1 -1
  24. package/dist/core/extensions/runner.d.ts +1 -0
  25. package/dist/core/extensions/runner.d.ts.map +1 -1
  26. package/dist/core/extensions/runner.js +11 -0
  27. package/dist/core/extensions/runner.js.map +1 -1
  28. package/dist/core/extensions/types.d.ts +14 -1
  29. package/dist/core/extensions/types.d.ts.map +1 -1
  30. package/dist/core/extensions/types.js.map +1 -1
  31. package/dist/core/footer-data-provider.d.ts +10 -0
  32. package/dist/core/footer-data-provider.d.ts.map +1 -1
  33. package/dist/core/footer-data-provider.js +1 -1
  34. package/dist/core/footer-data-provider.js.map +1 -1
  35. package/dist/core/llama/provider.d.ts.map +1 -1
  36. package/dist/core/llama/provider.js +8 -3
  37. package/dist/core/llama/provider.js.map +1 -1
  38. package/dist/core/model-config.d.ts +30 -0
  39. package/dist/core/model-config.d.ts.map +1 -1
  40. package/dist/core/model-config.js +6 -0
  41. package/dist/core/model-config.js.map +1 -1
  42. package/dist/core/model-registry.d.ts.map +1 -1
  43. package/dist/core/model-registry.js +2 -2
  44. package/dist/core/model-registry.js.map +1 -1
  45. package/dist/core/model-resolver.d.ts +1 -0
  46. package/dist/core/model-resolver.d.ts.map +1 -1
  47. package/dist/core/model-resolver.js +20 -3
  48. package/dist/core/model-resolver.js.map +1 -1
  49. package/dist/core/model-runtime.d.ts +2 -0
  50. package/dist/core/model-runtime.d.ts.map +1 -1
  51. package/dist/core/model-runtime.js +5 -4
  52. package/dist/core/model-runtime.js.map +1 -1
  53. package/dist/core/package-manager.d.ts.map +1 -1
  54. package/dist/core/package-manager.js +13 -6
  55. package/dist/core/package-manager.js.map +1 -1
  56. package/dist/core/remote-catalog-provider.d.ts +1 -1
  57. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  58. package/dist/core/remote-catalog-provider.js +24 -11
  59. package/dist/core/remote-catalog-provider.js.map +1 -1
  60. package/dist/core/resource-loader.d.ts +15 -0
  61. package/dist/core/resource-loader.d.ts.map +1 -1
  62. package/dist/core/resource-loader.js +66 -9
  63. package/dist/core/resource-loader.js.map +1 -1
  64. package/dist/core/settings-manager.d.ts +1 -1
  65. package/dist/core/settings-manager.d.ts.map +1 -1
  66. package/dist/core/settings-manager.js.map +1 -1
  67. package/dist/core/system-prompt.d.ts.map +1 -1
  68. package/dist/core/system-prompt.js +1 -1
  69. package/dist/core/system-prompt.js.map +1 -1
  70. package/dist/core/tools/bash.d.ts +2 -0
  71. package/dist/core/tools/bash.d.ts.map +1 -1
  72. package/dist/core/tools/bash.js +34 -5
  73. package/dist/core/tools/bash.js.map +1 -1
  74. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  75. package/dist/core/tools/tool-definition-wrapper.js +3 -1
  76. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  77. package/dist/extensions/pi-intercom/CHANGELOG.md +249 -0
  78. package/dist/extensions/pi-intercom/README.md +102 -39
  79. package/dist/extensions/pi-intercom/broker/broker.ts +1233 -36
  80. package/dist/extensions/pi-intercom/broker/client.test.ts +83 -0
  81. package/dist/extensions/pi-intercom/broker/client.ts +315 -12
  82. package/dist/extensions/pi-intercom/broker/extension-state.ts +186 -0
  83. package/dist/extensions/pi-intercom/broker/extension.test.ts +387 -0
  84. package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -0
  85. package/dist/extensions/pi-intercom/broker/framing.ts +82 -24
  86. package/dist/extensions/pi-intercom/broker/paths.test.ts +153 -0
  87. package/dist/extensions/pi-intercom/broker/paths.ts +117 -8
  88. package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -0
  89. package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -0
  90. package/dist/extensions/pi-intercom/broker/spawn.test.ts +160 -23
  91. package/dist/extensions/pi-intercom/broker/spawn.ts +113 -27
  92. package/dist/extensions/pi-intercom/config.test.ts +93 -0
  93. package/dist/extensions/pi-intercom/config.ts +55 -6
  94. package/dist/extensions/pi-intercom/cwd.test.ts +40 -0
  95. package/dist/extensions/pi-intercom/cwd.ts +31 -0
  96. package/dist/extensions/pi-intercom/extension-api.ts +44 -0
  97. package/dist/extensions/pi-intercom/format-context.test.ts +31 -0
  98. package/dist/extensions/pi-intercom/format-context.ts +32 -0
  99. package/dist/extensions/pi-intercom/index.ts +742 -145
  100. package/dist/extensions/pi-intercom/intercom.integration.test.ts +2646 -0
  101. package/dist/extensions/pi-intercom/package.json +15 -5
  102. package/dist/extensions/pi-intercom/reply-tracker.test.ts +134 -0
  103. package/dist/extensions/pi-intercom/reply-tracker.ts +31 -13
  104. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +13 -11
  105. package/dist/extensions/pi-intercom/test/inline-message.test.ts +184 -0
  106. package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -0
  107. package/dist/extensions/pi-intercom/types.ts +94 -4
  108. package/dist/extensions/pi-intercom/ui/compose.ts +8 -4
  109. package/dist/extensions/pi-intercom/ui/inline-message.ts +61 -25
  110. package/dist/extensions/pi-intercom/ui/session-list.ts +7 -3
  111. package/dist/extensions/pi-subagents/CHANGELOG.md +85 -0
  112. package/dist/extensions/pi-subagents/LICENSE +21 -0
  113. package/dist/extensions/pi-subagents/README.md +146 -52
  114. package/dist/extensions/pi-subagents/agents/architect.md +1 -0
  115. package/dist/extensions/pi-subagents/agents/builder.md +1 -0
  116. package/dist/extensions/pi-subagents/package-lock.json +2 -2
  117. package/dist/extensions/pi-subagents/package.json +3 -3
  118. package/dist/extensions/pi-subagents/prompts/review-loop.md +1 -1
  119. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +21 -989
  120. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +256 -0
  121. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +430 -0
  122. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +144 -0
  123. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +282 -0
  124. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +71 -30
  125. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +4 -0
  126. package/dist/extensions/pi-subagents/src/agents/agents.ts +118 -9
  127. package/dist/extensions/pi-subagents/src/agents/skills.ts +14 -12
  128. package/dist/extensions/pi-subagents/src/api/delegation.ts +3 -0
  129. package/dist/extensions/pi-subagents/src/api/preflight.ts +16 -12
  130. package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +17 -1
  131. package/dist/extensions/pi-subagents/src/extension/index.ts +17 -7
  132. package/dist/extensions/pi-subagents/src/extension/rpc.ts +248 -6
  133. package/dist/extensions/pi-subagents/src/extension/schemas.ts +31 -6
  134. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +8 -7
  135. package/dist/extensions/pi-subagents/src/intercom/intercom-bridge.ts +9 -4
  136. package/dist/extensions/pi-subagents/src/intercom/result-intercom.ts +33 -4
  137. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +63 -16
  138. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +24 -13
  139. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +7 -5
  140. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +18 -2
  141. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +48 -5
  142. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +68 -1
  143. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +29 -4
  144. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +29 -6
  145. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +29 -3
  146. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +372 -28
  147. package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +65 -0
  148. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +3 -3
  149. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +143 -43
  150. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +527 -247
  151. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-control.ts +42 -0
  152. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +426 -123
  153. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +15 -7
  154. package/dist/extensions/pi-subagents/src/runs/shared/capability-ceiling.ts +51 -19
  155. package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +3 -1
  156. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  157. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +44 -11
  158. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +8 -0
  159. package/dist/extensions/pi-subagents/src/runs/shared/nested-events.ts +97 -20
  160. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +43 -12
  161. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +52 -4
  162. package/dist/extensions/pi-subagents/src/runs/shared/process-signal.ts +19 -0
  163. package/dist/extensions/pi-subagents/src/runs/shared/run-history.ts +45 -9
  164. package/dist/extensions/pi-subagents/src/runs/shared/runtime-acknowledged-extensions.ts +71 -0
  165. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +31 -1
  166. package/dist/extensions/pi-subagents/src/runs/shared/subagent-startup-retry.ts +101 -0
  167. package/dist/extensions/pi-subagents/src/runs/shared/task-intent.ts +1 -1
  168. package/dist/extensions/pi-subagents/src/runs/shared/usage-budget.ts +65 -0
  169. package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +26 -1
  170. package/dist/extensions/pi-subagents/src/shared/settings.ts +17 -1
  171. package/dist/extensions/pi-subagents/src/shared/types.ts +155 -10
  172. package/dist/extensions/pi-subagents/src/shared/utils.ts +73 -4
  173. package/dist/extensions/pi-subagents/src/slash/delegation-adapters.ts +5 -0
  174. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +46 -4
  175. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +5 -3
  176. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +87 -24
  177. package/dist/extensions/pi-subagents/src/tui/fleet.ts +182 -9
  178. package/dist/extensions/pi-subagents/src/tui/render.ts +27 -28
  179. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +14 -7
  180. package/dist/extensions/pi-subagents/src/watchdog/review.ts +5 -4
  181. package/dist/extensions/pi-subagents/src/watchdog/runtime.ts +170 -17
  182. package/dist/extensions/pi-subagents/src/watchdog/scope.ts +62 -0
  183. package/dist/extensions/pi-subagents/src/watchdog/settings.ts +41 -1
  184. package/dist/extensions/pi-subagents/src/watchdog/types.ts +10 -0
  185. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
  186. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +348 -7
  187. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +84 -0
  188. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +4 -2
  189. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +51 -2
  190. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +26 -1
  191. package/dist/extensions/pi-subagents/test/integration/detect-error.test.ts +48 -0
  192. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +3 -3
  193. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +213 -13
  194. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +34 -0
  195. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +44 -0
  196. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +118 -12
  197. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +850 -7
  198. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +112 -23
  199. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +17 -5
  200. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
  201. package/dist/extensions/pi-subagents/test/support/register-loader.mjs +3 -3
  202. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +3 -1
  203. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +128 -0
  204. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +47 -2
  205. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +60 -0
  206. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +8 -0
  207. package/dist/extensions/pi-subagents/test/unit/capability-ceiling-agent-allowlist.test.ts +102 -0
  208. package/dist/extensions/pi-subagents/test/unit/capability-ceiling.test.ts +1 -1
  209. package/dist/extensions/pi-subagents/test/unit/chain-append.test.ts +6 -0
  210. package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +1 -1
  211. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +48 -48
  212. package/dist/extensions/pi-subagents/test/unit/config-dir-runtime.test.ts +23 -0
  213. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +27 -0
  214. package/dist/extensions/pi-subagents/test/unit/delegation-api.test.ts +4 -2
  215. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +1 -0
  216. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +176 -8
  217. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +164 -5
  218. package/dist/extensions/pi-subagents/test/unit/foreground-control.test.ts +41 -1
  219. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +11 -11
  220. package/dist/extensions/pi-subagents/test/unit/intercom-bridge.test.ts +18 -2
  221. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +20 -1
  222. package/dist/extensions/pi-subagents/test/unit/nested-events.test.ts +30 -2
  223. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +10 -2
  224. package/dist/extensions/pi-subagents/test/unit/parallel-utils.test.ts +22 -0
  225. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +103 -0
  226. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +18 -0
  227. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +46 -0
  228. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +13 -1
  229. package/dist/extensions/pi-subagents/test/unit/result-intercom.test.ts +29 -4
  230. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +223 -4
  231. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +30 -0
  232. package/dist/extensions/pi-subagents/test/unit/runtime-acknowledged-extensions.test.ts +52 -0
  233. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +34 -2
  234. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
  235. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +1 -1
  236. package/dist/extensions/pi-subagents/test/unit/streamed-progress-bounds.test.ts +78 -0
  237. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +41 -0
  238. package/dist/extensions/pi-subagents/test/unit/subagent-startup-retry.test.ts +77 -0
  239. package/dist/extensions/pi-subagents/test/unit/task-intent.test.ts +3 -0
  240. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +1 -1
  241. package/dist/extensions/pi-subagents/test/unit/total-cost.test.ts +1 -0
  242. package/dist/extensions/pi-subagents/test/unit/watchdog-runtime.test.ts +210 -1
  243. package/dist/extensions/pi-subagents/test/unit/watchdog-scope.test.ts +33 -0
  244. package/dist/extensions/pi-subagents/test/unit/watchdog-settings.test.ts +32 -0
  245. package/dist/extensions/pi-subagents/test/unit/writer-budget-guidance.test.ts +1 -1
  246. package/dist/main.d.ts.map +1 -1
  247. package/dist/main.js +43 -0
  248. package/dist/main.js.map +1 -1
  249. package/dist/modes/interactive/components/custom-message.d.ts +3 -1
  250. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  251. package/dist/modes/interactive/components/custom-message.js +10 -2
  252. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  253. package/dist/modes/interactive/components/extension-editor.d.ts +1 -2
  254. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  255. package/dist/modes/interactive/components/extension-editor.js +16 -46
  256. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  257. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  258. package/dist/modes/interactive/components/model-selector.js +4 -1
  259. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  260. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  261. package/dist/modes/interactive/components/scoped-models-selector.js +22 -13
  262. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  263. package/dist/modes/interactive/external-editor.d.ts +12 -0
  264. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  265. package/dist/modes/interactive/external-editor.js +37 -0
  266. package/dist/modes/interactive/external-editor.js.map +1 -0
  267. package/dist/modes/interactive/interactive-mode.d.ts +1 -1
  268. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  269. package/dist/modes/interactive/interactive-mode.js +72 -64
  270. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  271. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  272. package/dist/modes/rpc/rpc-mode.js +14 -0
  273. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  274. package/dist/utils/clipboard.d.ts.map +1 -1
  275. package/dist/utils/clipboard.js +19 -8
  276. package/dist/utils/clipboard.js.map +1 -1
  277. package/dist/utils/version-check.d.ts.map +1 -1
  278. package/dist/utils/version-check.js +1 -1
  279. package/dist/utils/version-check.js.map +1 -1
  280. package/docs/compaction.md +1 -1
  281. package/docs/custom-provider.md +14 -5
  282. package/docs/environment-variables.md +86 -0
  283. package/docs/extensions.md +15 -5
  284. package/docs/index.md +1 -0
  285. package/docs/models.md +9 -2
  286. package/docs/providers.md +21 -2
  287. package/docs/rpc.md +23 -6
  288. package/docs/session-format.md +2 -0
  289. package/docs/settings.md +1 -1
  290. package/docs/usage.md +0 -13
  291. package/examples/extensions/custom-compaction.ts +5 -2
  292. package/examples/extensions/custom-provider-anthropic/index.ts +9 -3
  293. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  294. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  295. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  296. package/examples/extensions/gondolin/package-lock.json +2 -2
  297. package/examples/extensions/gondolin/package.json +1 -1
  298. package/examples/extensions/handoff.ts +11 -3
  299. package/examples/extensions/message-renderer.ts +3 -3
  300. package/examples/extensions/sandbox/package-lock.json +2 -2
  301. package/examples/extensions/sandbox/package.json +1 -1
  302. package/examples/extensions/summarize.ts +5 -2
  303. package/examples/extensions/with-deps/package-lock.json +2 -2
  304. package/examples/extensions/with-deps/package.json +1 -1
  305. package/examples/sdk/12-full-control.ts +3 -1
  306. package/package.json +15 -6
  307. package/dist/extensions/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
@@ -16,7 +16,7 @@ import { FooterDataProvider } from "../../core/footer-data-provider.js";
16
16
  import { configureHttpDispatcher, formatHttpIdleTimeoutMs } from "../../core/http-dispatcher.js";
17
17
  import { KeybindingsManager } from "../../core/keybindings.js";
18
18
  import { createCompactionSummaryMessage } from "../../core/messages.js";
19
- import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope } from "../../core/model-resolver.js";
19
+ import { defaultModelPerProvider, findExactModelReferenceMatch, resolveModelScope, resolveModelScopeWithDiagnostics, } from "../../core/model-resolver.js";
20
20
  import { DefaultPackageManager } from "../../core/package-manager.js";
21
21
  import { formatMissingSessionCwdPrompt, MissingSessionCwdError } from "../../core/session-cwd.js";
22
22
  import { SessionManager, sessionEntryToContextMessages } from "../../core/session-manager.js";
@@ -65,6 +65,7 @@ import { TreeSelectorComponent } from "./components/tree-selector.js";
65
65
  import { TrustSelectorComponent } from "./components/trust-selector.js";
66
66
  import { UserMessageComponent } from "./components/user-message.js";
67
67
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
68
+ import { editInExternalEditor } from "./external-editor.js";
68
69
  import { getModelSearchText } from "./model-search.js";
69
70
  import { getAvailableThemes, getAvailableThemesWithPaths, getEditorTheme, getMarkdownTheme, getThemeByName, onThemeChange, setRegisteredThemes, stopThemeWatcher, Theme, theme, } from "./theme/theme.js";
70
71
  import { InteractiveThemeController } from "./theme/theme-controller.js";
@@ -274,7 +275,7 @@ export class InteractiveMode {
274
275
  await this.rebindCurrentSession({ renderBeforeBind: true });
275
276
  });
276
277
  this.version = VERSION;
277
- this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor());
278
+ this.ui = new TUI(new ProcessTerminal(), this.settingsManager.getShowHardwareCursor(), getAgentDir());
278
279
  this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
279
280
  this.headerContainer = new Container();
280
281
  this.loadedResourcesContainer = new Container();
@@ -809,8 +810,15 @@ export class InteractiveMode {
809
810
  * Get a short path relative to the package root for display.
810
811
  */
811
812
  getShortPath(fullPath, sourceInfo) {
813
+ const normalizedFullPath = fullPath.replace(/\\/g, "/");
812
814
  const baseDir = sourceInfo?.baseDir;
813
815
  if (baseDir && this.isPackageSource(sourceInfo)) {
816
+ const normalizedBaseDir = baseDir.replace(/\\/g, "/");
817
+ const npmRootMatch = normalizedBaseDir.match(/^(.*\/node_modules)\/(@?[^/]+(?:\/[^/]+)?)$/);
818
+ // If fullPath is under the same node_modules root as baseDir, preserve that relative topology.
819
+ if (npmRootMatch?.[1] && normalizedFullPath.startsWith(`${npmRootMatch[1]}/`)) {
820
+ return path.posix.relative(normalizedBaseDir, normalizedFullPath);
821
+ }
814
822
  const relativePath = path.relative(path.resolve(baseDir), path.resolve(fullPath));
815
823
  if (relativePath &&
816
824
  relativePath !== "." &&
@@ -821,11 +829,11 @@ export class InteractiveMode {
821
829
  }
822
830
  }
823
831
  const source = sourceInfo?.source ?? "";
824
- const npmMatch = fullPath.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);
832
+ const npmMatch = normalizedFullPath.match(/node_modules\/(@?[^/]+(?:\/[^/]+)?)\/(.*)/);
825
833
  if (npmMatch && source.startsWith("npm:")) {
826
834
  return npmMatch[2];
827
835
  }
828
- const gitMatch = fullPath.match(/git\/[^/]+\/[^/]+\/(.*)/);
836
+ const gitMatch = normalizedFullPath.match(/git\/[^/]+\/[^/]+\/(.*)/);
829
837
  if (gitMatch && source.startsWith("git:")) {
830
838
  return gitMatch[1];
831
839
  }
@@ -1110,7 +1118,12 @@ export class InteractiveMode {
1110
1118
  }
1111
1119
  }
1112
1120
  if (showListing) {
1113
- const contextFiles = this.session.resourceLoader.getAgentsFiles().agentsFiles;
1121
+ const systemPromptSource = this.session.resourceLoader.getSystemPromptSource();
1122
+ const contextFiles = [
1123
+ ...(systemPromptSource ? [systemPromptSource] : []),
1124
+ ...this.session.resourceLoader.getAppendSystemPromptSources(),
1125
+ ...this.session.resourceLoader.getAgentsFiles().agentsFiles,
1126
+ ];
1114
1127
  if (contextFiles.length > 0) {
1115
1128
  this.loadedResourcesContainer.addChild(new Spacer(1));
1116
1129
  const contextList = contextFiles
@@ -1310,16 +1323,19 @@ export class InteractiveMode {
1310
1323
  }
1311
1324
  }
1312
1325
  async rebindCurrentSession(options = {}) {
1326
+ const session = this.session;
1313
1327
  this.unsubscribe?.();
1314
1328
  this.unsubscribe = undefined;
1315
1329
  this.applyRuntimeSettings();
1316
1330
  if (options.renderBeforeBind) {
1317
1331
  this.renderCurrentSessionState();
1318
1332
  this.subscribeToAgent();
1319
- await this.bindCurrentSessionExtensions();
1320
1333
  }
1321
- else {
1322
- await this.bindCurrentSessionExtensions();
1334
+ await this.bindCurrentSessionExtensions();
1335
+ if (this.session !== session) {
1336
+ return;
1337
+ }
1338
+ if (!options.renderBeforeBind) {
1323
1339
  this.subscribeToAgent();
1324
1340
  }
1325
1341
  await this.updateAvailableProviderCount();
@@ -1365,6 +1381,8 @@ export class InteractiveMode {
1365
1381
  sessionManager: this.sessionManager,
1366
1382
  modelRegistry: extensionRunner.getModelRegistry(),
1367
1383
  model: this.session.model,
1384
+ scopedModels: this.session.scopedModels,
1385
+ thinkingLevel: this.session.thinkingLevel,
1368
1386
  isIdle: () => this.session.isIdle,
1369
1387
  isProjectTrusted: () => this.settingsManager.isProjectTrusted(),
1370
1388
  signal: this.session.agent.signal,
@@ -2050,7 +2068,7 @@ export class InteractiveMode {
2050
2068
  this.defaultEditor.onAction("app.model.select", () => this.showModelSelector());
2051
2069
  this.defaultEditor.onAction("app.tools.expand", () => this.toggleToolOutputExpansion());
2052
2070
  this.defaultEditor.onAction("app.thinking.toggle", () => this.toggleThinkingBlockVisibility());
2053
- this.defaultEditor.onAction("app.editor.external", () => this.openExternalEditor());
2071
+ this.defaultEditor.onAction("app.editor.external", () => void this.handleOpenExternalEditor());
2054
2072
  this.defaultEditor.onAction("app.message.copy", () => void this.handleCopyCommand());
2055
2073
  this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
2056
2074
  this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
@@ -2460,6 +2478,9 @@ export class InteractiveMode {
2460
2478
  }
2461
2479
  this.ui.requestRender();
2462
2480
  break;
2481
+ case "bash_execution_update":
2482
+ // The bash execution callback handles TUI output rendering.
2483
+ break;
2463
2484
  case "tool_execution_start": {
2464
2485
  let component = this.pendingTools.get(event.toolCallId);
2465
2486
  if (!component) {
@@ -2671,7 +2692,7 @@ export class InteractiveMode {
2671
2692
  case "custom": {
2672
2693
  if (message.display) {
2673
2694
  const renderer = this.session.extensionRunner.getMessageRenderer(message.customType);
2674
- const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings());
2695
+ const component = new CustomMessageComponent(message, renderer, this.getMarkdownThemeWithSettings(), this.outputPad);
2675
2696
  component.setExpanded(this.toolOutputExpanded);
2676
2697
  this.chatContainer.addChild(component);
2677
2698
  }
@@ -3169,7 +3190,7 @@ export class InteractiveMode {
3169
3190
  }
3170
3191
  }
3171
3192
  }
3172
- this.ui.requestRender();
3193
+ this.showStatus(`Tool output: ${expanded ? "expanded" : "collapsed"}`);
3173
3194
  }
3174
3195
  toggleThinkingBlockVisibility() {
3175
3196
  this.hideThinkingBlock = !this.hideThinkingBlock;
@@ -3185,51 +3206,21 @@ export class InteractiveMode {
3185
3206
  }
3186
3207
  this.showStatus(`Thinking blocks: ${this.hideThinkingBlock ? "hidden" : "visible"}`);
3187
3208
  }
3188
- async openExternalEditor() {
3209
+ async handleOpenExternalEditor() {
3189
3210
  const editorCmd = this.settingsManager.getExternalEditorCommand();
3190
- if (!editorCmd) {
3191
- this.showWarning("No editor configured. Set externalEditor in settings.json or $VISUAL/$EDITOR.");
3192
- return;
3193
- }
3194
- const currentText = this.editor.getExpandedText?.() ?? this.editor.getText();
3195
- const tmpFile = path.join(os.tmpdir(), `pi-editor-${Date.now()}.pi.md`);
3211
+ const content = this.editor.getExpandedText?.() ?? this.editor.getText();
3212
+ this.ui.stop();
3196
3213
  try {
3197
- // Write current content to temp file
3198
- fs.writeFileSync(tmpFile, currentText, "utf-8");
3199
- // Stop TUI to release terminal
3200
- this.ui.stop();
3201
- // Split by space to support editor arguments (e.g., "code --wait")
3202
- const [editor, ...editorArgs] = editorCmd.split(" ");
3203
- process.stdout.write(`Launching external editor: ${editorCmd}\nPi will resume when the editor exits.\n`);
3204
- // Do not use spawnSync here. On Windows, synchronous child_process calls can keep
3205
- // Node/libuv's console input read active after ui.stop() pauses stdin, racing
3206
- // vim/nvim for the console input buffer until Ctrl+C cancels the pending read.
3207
- const status = await new Promise((resolve) => {
3208
- const child = spawn(editor, [...editorArgs, tmpFile], {
3209
- stdio: "inherit",
3210
- shell: process.platform === "win32",
3211
- });
3212
- child.on("error", () => resolve(null));
3213
- child.on("close", (code) => resolve(code));
3214
+ const result = await editInExternalEditor({
3215
+ command: editorCmd,
3216
+ content,
3214
3217
  });
3215
- // On successful exit (status 0), replace editor content
3216
- if (status === 0) {
3217
- const newContent = fs.readFileSync(tmpFile, "utf-8").replace(/\n$/, "");
3218
- this.editor.setText(newContent);
3218
+ if (result.status === "complete") {
3219
+ this.editor.setText(result.content);
3219
3220
  }
3220
- // On non-zero exit, keep original text (no action needed)
3221
3221
  }
3222
3222
  finally {
3223
- // Clean up temp file
3224
- try {
3225
- fs.unlinkSync(tmpFile);
3226
- }
3227
- catch {
3228
- // Ignore cleanup errors
3229
- }
3230
- // Restart TUI
3231
3223
  this.ui.start();
3232
- // Force full re-render since external editor uses alternate screen
3233
3224
  this.ui.requestRender(true);
3234
3225
  }
3235
3226
  }
@@ -3607,7 +3598,9 @@ export class InteractiveMode {
3607
3598
  this.outputPad = padding;
3608
3599
  if (this.streamingComponent || this.session.isStreaming) {
3609
3600
  for (const child of this.chatContainer.children) {
3610
- if (child instanceof AssistantMessageComponent || child instanceof UserMessageComponent) {
3601
+ if (child instanceof AssistantMessageComponent ||
3602
+ child instanceof CustomMessageComponent ||
3603
+ child instanceof UserMessageComponent) {
3611
3604
  child.setOutputPad(padding);
3612
3605
  }
3613
3606
  }
@@ -3792,12 +3785,17 @@ export class InteractiveMode {
3792
3785
  // Get all available models
3793
3786
  await this.session.modelRuntime.refresh();
3794
3787
  const allModels = [...(await this.session.modelRuntime.getAvailable())];
3795
- if (allModels.length === 0) {
3788
+ const allModelIds = new Set(allModels.map((model) => `${model.provider}/${model.id}`));
3789
+ const configuredPatterns = this.settingsManager.getEnabledModels();
3790
+ const sessionScopedModels = this.session.scopedModels;
3791
+ if (allModels.length === 0 && !configuredPatterns?.length && sessionScopedModels.length === 0) {
3796
3792
  this.showStatus("No models available");
3797
3793
  return;
3798
3794
  }
3795
+ const configuredScope = configuredPatterns?.length
3796
+ ? await resolveModelScopeWithDiagnostics(configuredPatterns, this.session.modelRuntime)
3797
+ : undefined;
3799
3798
  // Check if session has scoped models (from previous session-only changes or CLI --models)
3800
- const sessionScopedModels = this.session.scopedModels;
3801
3799
  const hasSessionScope = sessionScopedModels.length > 0;
3802
3800
  // Build enabled model IDs from session state or settings
3803
3801
  let currentEnabledIds = null;
@@ -3805,18 +3803,22 @@ export class InteractiveMode {
3805
3803
  // Use current session's scoped models
3806
3804
  currentEnabledIds = sessionScopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3807
3805
  }
3808
- else {
3809
- // Fall back to settings
3810
- const patterns = this.settingsManager.getEnabledModels();
3811
- if (patterns !== undefined && patterns.length > 0) {
3812
- const scopedModels = await resolveModelScope(patterns, this.session.modelRuntime);
3813
- currentEnabledIds = scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3814
- }
3806
+ else if (configuredScope) {
3807
+ currentEnabledIds = configuredScope.scopedModels.map((scoped) => `${scoped.model.provider}/${scoped.model.id}`);
3808
+ }
3809
+ for (const diagnostic of configuredScope?.diagnostics ?? []) {
3810
+ if (diagnostic.code !== "no-match")
3811
+ continue;
3812
+ currentEnabledIds ??= [];
3813
+ if (!currentEnabledIds.includes(diagnostic.pattern))
3814
+ currentEnabledIds.push(diagnostic.pattern);
3815
3815
  }
3816
3816
  // Helper to update session's scoped models (session-only, no persist)
3817
3817
  const updateSessionModels = async (enabledIds) => {
3818
3818
  currentEnabledIds = enabledIds === null ? null : [...enabledIds];
3819
- if (enabledIds && enabledIds.length > 0 && enabledIds.length < allModels.length) {
3819
+ const hasEnabledAvailableModel = enabledIds?.some((id) => allModelIds.has(id)) ?? false;
3820
+ const allAvailableModelsEnabled = enabledIds !== null && [...allModelIds].every((id) => enabledIds.includes(id));
3821
+ if (enabledIds && hasEnabledAvailableModel && !allAvailableModelsEnabled) {
3820
3822
  const newScopedModels = await resolveModelScope(enabledIds, this.session.modelRuntime);
3821
3823
  this.session.setScopedModels(newScopedModels.map((sm) => ({
3822
3824
  model: sm.model,
@@ -3840,9 +3842,10 @@ export class InteractiveMode {
3840
3842
  },
3841
3843
  onPersist: (enabledIds) => {
3842
3844
  // Persist to settings
3843
- const newPatterns = enabledIds === null || enabledIds.length === allModels.length
3844
- ? undefined // All enabled = clear filter
3845
- : enabledIds;
3845
+ const allEnabled = enabledIds !== null &&
3846
+ enabledIds.length === allModels.length &&
3847
+ enabledIds.every((id) => allModelIds.has(id));
3848
+ const newPatterns = enabledIds === null || allEnabled ? undefined : enabledIds;
3846
3849
  this.settingsManager.setEnabledModels(newPatterns ? [...newPatterns] : undefined);
3847
3850
  this.showStatus("Model selection saved to settings");
3848
3851
  },
@@ -3913,7 +3916,7 @@ export class InteractiveMode {
3913
3916
  this.showSelector((done) => {
3914
3917
  const selector = new TreeSelectorComponent(tree, realLeafId, this.ui.terminal.rows, async (entryId) => {
3915
3918
  // Selecting the current leaf is a no-op (already there)
3916
- if (entryId === realLeafId) {
3919
+ if (entryId === this.sessionManager.getLeafId()) {
3917
3920
  done();
3918
3921
  this.showStatus("Already at this point");
3919
3922
  return;
@@ -3948,6 +3951,11 @@ export class InteractiveMode {
3948
3951
  break;
3949
3952
  }
3950
3953
  }
3954
+ // The user committed to navigating: stop the active response first.
3955
+ if (this.session.isStreaming) {
3956
+ this.restoreQueuedMessagesToEditor();
3957
+ await this.session.abort();
3958
+ }
3951
3959
  // Set up escape handler and status indicator if summarizing
3952
3960
  let showingSummaryIndicator = false;
3953
3961
  const originalOnEscape = this.defaultEditor.onEscape;