@selesai/code 0.13.3 → 0.13.5

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 (511) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cli/credential-print.js +4 -4
  3. package/dist/cli.js +0 -0
  4. package/dist/core/compaction/utils.js +2 -2
  5. package/dist/core/export-html/template.css +1066 -1066
  6. package/dist/core/export-html/template.html +55 -55
  7. package/dist/core/export-html/template.js +1864 -1864
  8. package/dist/core/export-html/vendor/highlight.min.js +1212 -1212
  9. package/dist/core/export-html/vendor/marked.min.js +78 -78
  10. package/dist/core/messages.js +7 -7
  11. package/dist/defaults/models.json +17 -1
  12. package/dist/extensions/context-compaction-reminder.test.ts +82 -82
  13. package/dist/extensions/context-compaction-reminder.ts +28 -28
  14. package/dist/extensions/cost-reconcile.test.ts +24 -5
  15. package/dist/extensions/cost-reconcile.ts +14 -7
  16. package/dist/extensions/pi-hermes-memory/scripts/check-min-sdk.mjs +0 -0
  17. package/dist/extensions/pi-hermes-memory/tests/run-all.sh +0 -0
  18. package/dist/extensions/pi-intercom/CHANGELOG.md +13 -0
  19. package/dist/extensions/pi-intercom/LICENSE +21 -21
  20. package/dist/extensions/pi-intercom/README.md +4 -5
  21. package/dist/extensions/pi-intercom/broker/client.test.ts +83 -83
  22. package/dist/extensions/pi-intercom/broker/framing.test.ts +114 -114
  23. package/dist/extensions/pi-intercom/broker/paths.ts +134 -134
  24. package/dist/extensions/pi-intercom/broker/runtime-claim.test.ts +34 -34
  25. package/dist/extensions/pi-intercom/broker/runtime-claim.ts +21 -21
  26. package/dist/extensions/pi-intercom/config.test.ts +3 -31
  27. package/dist/extensions/pi-intercom/config.ts +0 -15
  28. package/dist/extensions/pi-intercom/cwd.test.ts +40 -40
  29. package/dist/extensions/pi-intercom/cwd.ts +31 -31
  30. package/dist/extensions/pi-intercom/format-context.test.ts +31 -31
  31. package/dist/extensions/pi-intercom/format-context.ts +32 -32
  32. package/dist/extensions/pi-intercom/index.ts +9 -46
  33. package/dist/extensions/pi-intercom/intercom.integration.test.ts +49 -57
  34. package/dist/extensions/pi-intercom/package.json +1 -1
  35. package/dist/extensions/pi-intercom/reply-tracker.test.ts +20 -0
  36. package/dist/extensions/pi-intercom/reply-tracker.ts +8 -0
  37. package/dist/extensions/pi-intercom/test/overlay-width.test.ts +66 -66
  38. package/dist/extensions/pi-intercom/ui/compose.ts +143 -143
  39. package/dist/extensions/pi-intercom/ui/session-list.ts +166 -166
  40. package/dist/extensions/pi-subagents/CHANGELOG.md +27 -0
  41. package/dist/extensions/pi-subagents/docs/tool-reference.md +4 -1
  42. package/dist/extensions/pi-subagents/docs/workflows.md +2 -2
  43. package/dist/extensions/pi-subagents/install.mjs +0 -0
  44. package/dist/extensions/pi-subagents/package-lock.json +2 -2
  45. package/dist/extensions/pi-subagents/package.json +1 -1
  46. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +48 -243
  47. package/dist/extensions/pi-subagents/skills/council-mode/references/pass-contracts.md +150 -0
  48. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +87 -37
  49. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +29 -233
  50. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +49 -8
  51. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +2 -2
  52. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +13 -1
  53. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +34 -27
  54. package/dist/extensions/pi-subagents/skills/pi-subagents/references/review-and-validation.md +73 -0
  55. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +157 -28
  56. package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
  57. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +1 -0
  58. package/dist/extensions/pi-subagents/src/extension/schemas.ts +1 -0
  59. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +4 -1
  60. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +2 -2
  61. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +3 -0
  62. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +45 -2
  63. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +3 -2
  64. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +13 -2
  65. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +5 -1
  66. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +10 -2
  67. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +3 -0
  68. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +11 -2
  69. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +98 -1
  70. package/dist/extensions/pi-subagents/src/runs/shared/async-status-projection.ts +138 -4
  71. package/dist/extensions/pi-subagents/src/runs/shared/background-process-options.ts +9 -0
  72. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-grant.ts +2 -5
  73. package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +52 -3
  74. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +47 -1
  75. package/dist/extensions/pi-subagents/src/runs/shared/single-output.ts +45 -18
  76. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +21 -2
  77. package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +15 -0
  78. package/dist/extensions/pi-subagents/src/shared/types.ts +34 -1
  79. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +11 -3
  80. package/dist/extensions/pi-subagents/src/tui/render-helpers.ts +31 -0
  81. package/dist/extensions/pi-subagents/src/tui/render.ts +597 -112
  82. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +40 -1
  83. package/dist/extensions/pi-subagents/src/workflows/host-command.ts +6 -1
  84. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +53 -2
  85. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +55 -6
  86. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +111 -1
  87. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +206 -38
  88. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +522 -31
  89. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +123 -0
  90. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +48 -0
  91. package/dist/extensions/pi-subagents/test/unit/async-status-projection.test.ts +57 -1
  92. package/dist/extensions/pi-subagents/test/unit/background-process-options.test.ts +17 -0
  93. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +1 -1
  94. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +44 -4
  95. package/dist/extensions/pi-subagents/test/unit/fork-cache-key.test.ts +91 -0
  96. package/dist/extensions/pi-subagents/test/unit/host-command.test.ts +1 -0
  97. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +0 -1
  98. package/dist/extensions/pi-subagents/test/unit/mcp-direct-tool-grant.test.ts +20 -3
  99. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +27 -0
  100. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +93 -17
  101. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +1 -0
  102. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +103 -26
  103. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +58 -0
  104. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +22 -2
  105. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +21 -0
  106. package/dist/extensions/pi-subagents/test/unit/single-output.test.ts +13 -0
  107. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +54 -0
  108. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +2 -0
  109. package/dist/extensions/pi-subagents/test/unit/wait-completions.test.ts +32 -0
  110. package/dist/extensions/pi-subagents/test/unit/watchdog-change-signature.test.ts +48 -1
  111. package/dist/extensions/pi-subagents/test/unit/widget-nested-render.test.ts +21 -6
  112. package/dist/extensions/pi-subagents/test/unit/windows-hide-spawn.test.ts +11 -0
  113. package/dist/extensions/pi-web-agent/CHANGELOG.md +410 -0
  114. package/dist/extensions/pi-web-agent/README.md +131 -0
  115. package/dist/extensions/pi-web-agent/package.json +4 -2
  116. package/dist/extensions/pi-web-agent/src/backends/config.ts +62 -5
  117. package/dist/extensions/pi-web-agent/src/backends/doctor.ts +136 -0
  118. package/dist/extensions/pi-web-agent/src/backends/factory.ts +96 -6
  119. package/dist/extensions/pi-web-agent/src/backends/settings-reader.ts +25 -25
  120. package/dist/extensions/pi-web-agent/src/cache/ttl-cache.ts +28 -28
  121. package/dist/extensions/pi-web-agent/src/changelog-notice.ts +136 -136
  122. package/dist/extensions/pi-web-agent/src/commands/web-agent-config.ts +183 -47
  123. package/dist/extensions/pi-web-agent/src/extension.ts +62 -25
  124. package/dist/extensions/pi-web-agent/src/extract/readability.ts +19 -11
  125. package/dist/extensions/pi-web-agent/src/fetch/browser-resolution.ts +199 -199
  126. package/dist/extensions/pi-web-agent/src/fetch/firecrawl-fetch.ts +100 -100
  127. package/dist/extensions/pi-web-agent/src/fetch/headless-fetch.ts +117 -117
  128. package/dist/extensions/pi-web-agent/src/fetch/http-fetch.ts +67 -67
  129. package/dist/extensions/pi-web-agent/src/orchestration/answer-synthesizer.ts +60 -60
  130. package/dist/extensions/pi-web-agent/src/orchestration/candidate-selector.ts +5 -4
  131. package/dist/extensions/pi-web-agent/src/orchestration/direct-url.ts +2 -25
  132. package/dist/extensions/pi-web-agent/src/orchestration/evidence-quality.ts +5 -2
  133. package/dist/extensions/pi-web-agent/src/orchestration/evidence-ranker.ts +2 -0
  134. package/dist/extensions/pi-web-agent/src/orchestration/index.ts +28 -28
  135. package/dist/extensions/pi-web-agent/src/orchestration/query-planner.ts +47 -47
  136. package/dist/extensions/pi-web-agent/src/orchestration/research-orchestrator.ts +72 -7
  137. package/dist/extensions/pi-web-agent/src/orchestration/research-types.ts +8 -1
  138. package/dist/extensions/pi-web-agent/src/orchestration/research-worker.ts +28 -3
  139. package/dist/extensions/pi-web-agent/src/orchestration/source-profile.ts +4 -0
  140. package/dist/extensions/pi-web-agent/src/orchestration/stop-decider.ts +81 -81
  141. package/dist/extensions/pi-web-agent/src/orchestration/url.ts +35 -0
  142. package/dist/extensions/pi-web-agent/src/presentation/config-store.ts +210 -210
  143. package/dist/extensions/pi-web-agent/src/presentation/config.ts +75 -75
  144. package/dist/extensions/pi-web-agent/src/presentation/explore-presentation.ts +18 -6
  145. package/dist/extensions/pi-web-agent/src/presentation/fetch-presentation.ts +54 -54
  146. package/dist/extensions/pi-web-agent/src/presentation/search-presentation.ts +14 -2
  147. package/dist/extensions/pi-web-agent/src/presentation/select-view.ts +20 -20
  148. package/dist/extensions/pi-web-agent/src/presentation/types.ts +63 -63
  149. package/dist/extensions/pi-web-agent/src/readers/github-reader.ts +150 -0
  150. package/dist/extensions/pi-web-agent/src/readers/limits.ts +3 -0
  151. package/dist/extensions/pi-web-agent/src/readers/pdf-reader.ts +87 -0
  152. package/dist/extensions/pi-web-agent/src/readers/resolver.ts +25 -0
  153. package/dist/extensions/pi-web-agent/src/readers/types.ts +11 -0
  154. package/dist/extensions/pi-web-agent/src/readers/youtube-reader.ts +79 -0
  155. package/dist/extensions/pi-web-agent/src/search/brave.ts +114 -114
  156. package/dist/extensions/pi-web-agent/src/search/duckduckgo.ts +32 -5
  157. package/dist/extensions/pi-web-agent/src/search/exa.ts +109 -0
  158. package/dist/extensions/pi-web-agent/src/search/fanout.ts +154 -0
  159. package/dist/extensions/pi-web-agent/src/search/searxng.ts +96 -96
  160. package/dist/extensions/pi-web-agent/src/search/tavily.ts +113 -0
  161. package/dist/extensions/pi-web-agent/src/search/youcom.ts +109 -0
  162. package/dist/extensions/pi-web-agent/src/tools/web-explore.ts +71 -71
  163. package/dist/extensions/pi-web-agent/src/tools/web-fetch-headless.ts +31 -31
  164. package/dist/extensions/pi-web-agent/src/tools/web-fetch.ts +31 -31
  165. package/dist/extensions/pi-web-agent/src/tools/web-search.ts +22 -9
  166. package/dist/extensions/pi-web-agent/src/types.ts +19 -4
  167. package/dist/extensions/pi-zentui/extensions/zentui/format.ts +7 -1
  168. package/dist/extensions/ponytail/package.json +8 -8
  169. package/dist/extensions/question/constants.ts +30 -30
  170. package/dist/extensions/question/helpers.ts +58 -58
  171. package/dist/extensions/question/navigation.ts +14 -14
  172. package/dist/extensions/question/package.json +19 -19
  173. package/dist/extensions/question/selection-mode.ts +46 -46
  174. package/dist/extensions/question/shortcuts.ts +44 -44
  175. package/dist/extensions/question/types.ts +132 -132
  176. package/dist/extensions/test-resolve-hook-impl.mjs +6 -6
  177. package/dist/extensions/test-resolve-hook.mjs +6 -6
  178. package/dist/extensions/web-agent-onboarding.ts +222 -222
  179. package/dist/package-manager-cli.js +71 -71
  180. package/dist/rpc-entry.js +0 -0
  181. package/dist/skills/improve-codebase/REFERENCE.md +78 -78
  182. package/docs/compaction.md +396 -396
  183. package/docs/containerization.md +111 -111
  184. package/docs/development.md +71 -71
  185. package/docs/docs.json +164 -164
  186. package/docs/environment-variables.md +86 -86
  187. package/docs/index.md +83 -83
  188. package/docs/json.md +82 -82
  189. package/docs/models.md +502 -502
  190. package/docs/packages.md +227 -227
  191. package/docs/plans/subagent-delegation/phase-0-correctness.md +264 -264
  192. package/docs/plans/subagent-delegation/phase-1-behavioral-contract.md +485 -485
  193. package/docs/plans/subagent-delegation/phase-2-context-controls.md +281 -281
  194. package/docs/plans/subagent-delegation/phase-3-advisory-routing.md +361 -361
  195. package/docs/plans/subagent-delegation/phase-4-optional-enforcement.md +380 -380
  196. package/docs/prompt-templates.md +95 -95
  197. package/docs/providers.md +293 -293
  198. package/docs/security.md +59 -59
  199. package/docs/session-format.md +414 -414
  200. package/docs/sessions.md +145 -145
  201. package/docs/shared-host-extensions.md +109 -109
  202. package/docs/shell-aliases.md +13 -13
  203. package/docs/skills.md +231 -231
  204. package/docs/terminal-setup.md +142 -142
  205. package/docs/termux.md +127 -127
  206. package/docs/themes.md +295 -295
  207. package/docs/tmux.md +63 -63
  208. package/docs/tui.md +927 -927
  209. package/docs/windows.md +17 -17
  210. package/examples/README.md +25 -25
  211. package/examples/extensions/README.md +211 -211
  212. package/examples/extensions/auto-commit-on-exit.ts +49 -49
  213. package/examples/extensions/bash-spawn-hook.ts +30 -30
  214. package/examples/extensions/bookmark.ts +50 -50
  215. package/examples/extensions/border-status-editor.ts +150 -150
  216. package/examples/extensions/built-in-tool-renderer.ts +249 -249
  217. package/examples/extensions/claude-rules.ts +86 -86
  218. package/examples/extensions/commands.ts +72 -72
  219. package/examples/extensions/confirm-destructive.ts +59 -59
  220. package/examples/extensions/custom-compaction.ts +130 -130
  221. package/examples/extensions/custom-footer.ts +64 -64
  222. package/examples/extensions/custom-header.ts +73 -73
  223. package/examples/extensions/custom-provider-anthropic/index.ts +610 -610
  224. package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -24
  225. package/examples/extensions/custom-provider-anthropic/package.json +19 -19
  226. package/examples/extensions/custom-provider-gitlab-duo/index.ts +404 -404
  227. package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -16
  228. package/examples/extensions/custom-provider-gitlab-duo/test.ts +82 -82
  229. package/examples/extensions/dirty-repo-guard.ts +56 -56
  230. package/examples/extensions/doom-overlay/README.md +46 -46
  231. package/examples/extensions/doom-overlay/doom/build/doom.js +21 -21
  232. package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
  233. package/examples/extensions/doom-overlay/doom/build.sh +152 -152
  234. package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -72
  235. package/examples/extensions/doom-overlay/doom-component.ts +132 -132
  236. package/examples/extensions/doom-overlay/doom-engine.ts +173 -173
  237. package/examples/extensions/doom-overlay/doom-keys.ts +104 -104
  238. package/examples/extensions/doom-overlay/index.ts +74 -74
  239. package/examples/extensions/doom-overlay/wad-finder.ts +51 -51
  240. package/examples/extensions/dynamic-resources/SKILL.md +8 -8
  241. package/examples/extensions/dynamic-resources/dynamic.json +79 -79
  242. package/examples/extensions/dynamic-resources/dynamic.md +5 -5
  243. package/examples/extensions/dynamic-resources/index.ts +15 -15
  244. package/examples/extensions/dynamic-tools.ts +74 -74
  245. package/examples/extensions/event-bus.ts +43 -43
  246. package/examples/extensions/file-trigger.ts +41 -41
  247. package/examples/extensions/git-checkpoint.ts +53 -53
  248. package/examples/extensions/git-merge-and-resolve.ts +115 -115
  249. package/examples/extensions/github-issue-autocomplete.ts +185 -185
  250. package/examples/extensions/gondolin/index.ts +531 -531
  251. package/examples/extensions/gondolin/package-lock.json +185 -185
  252. package/examples/extensions/gondolin/package.json +19 -19
  253. package/examples/extensions/handoff.ts +199 -199
  254. package/examples/extensions/hello.ts +26 -26
  255. package/examples/extensions/hidden-thinking-label.ts +53 -53
  256. package/examples/extensions/inline-bash.ts +94 -94
  257. package/examples/extensions/input-transform-streaming.ts +39 -39
  258. package/examples/extensions/input-transform.ts +43 -43
  259. package/examples/extensions/interactive-shell.ts +196 -196
  260. package/examples/extensions/mac-system-theme.ts +47 -47
  261. package/examples/extensions/message-renderer.ts +59 -59
  262. package/examples/extensions/minimal-mode.ts +426 -426
  263. package/examples/extensions/modal-editor.ts +85 -85
  264. package/examples/extensions/model-status.ts +31 -31
  265. package/examples/extensions/notify.ts +55 -55
  266. package/examples/extensions/overlay-qa-tests.ts +1450 -1450
  267. package/examples/extensions/overlay-test.ts +153 -153
  268. package/examples/extensions/permission-gate.ts +34 -34
  269. package/examples/extensions/pirate.ts +47 -47
  270. package/examples/extensions/plan-mode/README.md +66 -66
  271. package/examples/extensions/plan-mode/index.ts +390 -390
  272. package/examples/extensions/plan-mode/utils.ts +168 -168
  273. package/examples/extensions/preset.ts +436 -436
  274. package/examples/extensions/project-trust.ts +64 -64
  275. package/examples/extensions/prompt-customizer.ts +97 -97
  276. package/examples/extensions/protected-paths.ts +30 -30
  277. package/examples/extensions/provider-payload.ts +18 -18
  278. package/examples/extensions/qna.ts +122 -122
  279. package/examples/extensions/question.ts +285 -285
  280. package/examples/extensions/questionnaire.ts +448 -448
  281. package/examples/extensions/rainbow-editor.ts +88 -88
  282. package/examples/extensions/reload-runtime.ts +37 -37
  283. package/examples/extensions/rpc-demo.ts +118 -118
  284. package/examples/extensions/sandbox/index.ts +321 -321
  285. package/examples/extensions/sandbox/package-lock.json +92 -92
  286. package/examples/extensions/sandbox/package.json +19 -19
  287. package/examples/extensions/send-user-message.ts +97 -97
  288. package/examples/extensions/session-name.ts +27 -27
  289. package/examples/extensions/shutdown-command.ts +63 -63
  290. package/examples/extensions/snake.ts +343 -343
  291. package/examples/extensions/space-invaders.ts +560 -560
  292. package/examples/extensions/ssh.ts +220 -220
  293. package/examples/extensions/status-line.ts +32 -32
  294. package/examples/extensions/structured-output.ts +65 -65
  295. package/examples/extensions/subagent/README.md +175 -175
  296. package/examples/extensions/subagent/agents/planner.md +37 -37
  297. package/examples/extensions/subagent/agents/reviewer.md +35 -35
  298. package/examples/extensions/subagent/agents/scout.md +50 -50
  299. package/examples/extensions/subagent/agents/worker.md +24 -24
  300. package/examples/extensions/subagent/agents.ts +126 -126
  301. package/examples/extensions/subagent/index.ts +1015 -1015
  302. package/examples/extensions/subagent/prompts/implement-and-review.md +10 -10
  303. package/examples/extensions/subagent/prompts/implement.md +10 -10
  304. package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -9
  305. package/examples/extensions/summarize.ts +209 -209
  306. package/examples/extensions/system-prompt-header.ts +17 -17
  307. package/examples/extensions/tic-tac-toe.ts +1008 -1008
  308. package/examples/extensions/timed-confirm.ts +70 -70
  309. package/examples/extensions/titlebar-spinner.ts +58 -58
  310. package/examples/extensions/todo.ts +297 -297
  311. package/examples/extensions/tool-override.ts +144 -144
  312. package/examples/extensions/tools.ts +146 -146
  313. package/examples/extensions/trigger-compact.ts +50 -50
  314. package/examples/extensions/truncated-tool.ts +195 -195
  315. package/examples/extensions/widget-placement.ts +9 -9
  316. package/examples/extensions/with-deps/index.ts +32 -32
  317. package/examples/extensions/with-deps/package-lock.json +31 -31
  318. package/examples/extensions/with-deps/package.json +22 -22
  319. package/examples/extensions/working-indicator.ts +123 -123
  320. package/examples/extensions/working-message-test.ts +25 -25
  321. package/examples/rpc-extension-ui.ts +632 -632
  322. package/examples/sdk/01-minimal.ts +26 -26
  323. package/examples/sdk/02-custom-model.ts +53 -53
  324. package/examples/sdk/03-custom-prompt.ts +75 -75
  325. package/examples/sdk/04-skills.ts +55 -55
  326. package/examples/sdk/05-tools.ts +48 -48
  327. package/examples/sdk/06-extensions.ts +99 -99
  328. package/examples/sdk/07-context-files.ts +47 -47
  329. package/examples/sdk/08-prompt-templates.ts +51 -51
  330. package/examples/sdk/09-api-keys-and-oauth.ts +52 -52
  331. package/examples/sdk/10-settings.ts +53 -53
  332. package/examples/sdk/11-sessions.ts +52 -52
  333. package/examples/sdk/12-full-control.ts +79 -79
  334. package/examples/sdk/13-session-runtime.ts +67 -67
  335. package/examples/sdk/README.md +144 -144
  336. package/package.json +3 -2
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +0 -3
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +0 -2
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +0 -17
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +0 -57
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +0 -16
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +0 -15
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +0 -18
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +0 -9
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +0 -10
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +0 -10
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +0 -20
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +0 -3
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +0 -96
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +0 -119
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +0 -85
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +0 -620
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +0 -5
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +0 -56
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +0 -32
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +0 -49
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +0 -93
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +0 -128
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +0 -7
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +0 -38
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +0 -3
  362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +0 -15
  363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +0 -9
  364. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +0 -29
  365. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +0 -2
  366. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +0 -22
  367. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +0 -37
  368. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +0 -34
  369. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +0 -12
  370. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +0 -23
  371. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +0 -171
  372. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +0 -1261
  373. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +0 -20
  374. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +0 -54
  375. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +0 -22
  376. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +0 -13
  377. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +0 -358
  378. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +0 -77
  379. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +0 -512
  380. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +0 -43
  381. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +0 -121
  382. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +0 -82
  383. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +0 -17
  384. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +0 -7
  385. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +0 -210
  386. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +0 -15
  387. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +0 -54
  388. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +0 -4
  389. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +0 -55
  390. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +0 -2
  391. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +0 -5
  392. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +0 -30
  393. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +0 -206
  394. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +0 -15
  395. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +0 -106
  396. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +0 -19
  397. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +0 -356
  398. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +0 -297
  399. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +0 -60
  400. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +0 -15
  401. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +0 -18
  402. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +0 -28
  403. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +0 -3
  404. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +0 -10
  405. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +0 -68
  406. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +0 -106
  407. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +0 -51
  408. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +0 -6
  409. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +0 -35
  410. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +0 -37
  411. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +0 -40
  412. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +0 -37
  413. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +0 -52
  414. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +0 -10
  415. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +0 -35
  416. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +0 -24
  417. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +0 -14
  418. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +0 -70
  419. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +0 -26
  420. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +0 -36
  421. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +0 -19
  422. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +0 -3
  423. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +0 -61
  424. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +0 -23
  425. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +0 -3
  426. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +0 -10
  427. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +0 -42
  428. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +0 -35
  429. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +0 -12
  430. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +0 -33
  431. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +0 -9
  432. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +0 -34
  433. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +0 -22
  434. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +0 -34
  435. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  436. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  437. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  438. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +0 -102
  439. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +0 -14
  440. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +0 -21
  441. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +0 -19
  442. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +0 -20
  443. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  444. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +0 -12
  445. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +0 -15
  446. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +0 -5
  447. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +0 -22
  448. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +0 -23
  449. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +0 -26
  450. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +0 -25
  451. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +0 -32
  452. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +0 -34
  453. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +0 -13
  454. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +0 -52
  455. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +0 -54
  456. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +0 -33
  457. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -42
  458. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +0 -23
  459. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +0 -95
  460. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +0 -77
  461. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  462. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  463. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +0 -28
  464. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  465. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  466. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +0 -63
  467. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +0 -94
  468. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +0 -23
  469. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  470. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +0 -14
  471. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  472. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +0 -394
  473. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +0 -12
  474. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +0 -29
  475. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +0 -120
  476. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +0 -28
  477. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +0 -17
  478. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +0 -246
  479. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +0 -20
  480. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +0 -457
  481. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +0 -8
  482. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +0 -3
  483. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +0 -2
  484. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +0 -22
  485. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +0 -18
  486. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +0 -11
  487. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +0 -11
  488. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +0 -4
  489. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +0 -4
  490. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +0 -5
  491. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +0 -8
  492. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +0 -5
  493. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +0 -26
  494. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +0 -7
  495. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +0 -10
  496. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +0 -18
  497. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +0 -30
  498. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +0 -2
  499. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +0 -16
  500. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +0 -3
  501. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +0 -3
  502. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +0 -9
  503. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +0 -31
  504. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +0 -21
  505. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +0 -2
  506. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +0 -31
  507. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +0 -5
  508. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +0 -12
  509. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +0 -3
  510. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +0 -15
  511. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +0 -3
@@ -1,114 +1,114 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { createMessageReader, writeMessage } from "./framing.ts";
4
-
5
- function framePayload(payload: Buffer): Buffer {
6
- const header = Buffer.alloc(4);
7
- header.writeUInt32BE(payload.length, 0);
8
- return Buffer.concat([header, payload]);
9
- }
10
-
11
- test("createMessageReader handles normal fragmented frames", () => {
12
- const messages: unknown[] = [];
13
- const errors: Error[] = [];
14
- const reader = createMessageReader(
15
- (message) => messages.push(message),
16
- (error) => errors.push(error),
17
- 64,
18
- );
19
- const frameA = framePayload(Buffer.from(JSON.stringify({ type: "one" }), "utf-8"));
20
- const frameB = framePayload(Buffer.from(JSON.stringify({ type: "two" }), "utf-8"));
21
- const combined = Buffer.concat([frameA, frameB]);
22
-
23
- reader(combined.subarray(0, 2));
24
- reader(combined.subarray(2, 7));
25
- reader(combined.subarray(7));
26
-
27
- assert.deepEqual(messages, [{ type: "one" }, { type: "two" }]);
28
- assert.deepEqual(errors, []);
29
- });
30
-
31
- test("createMessageReader reassembles a fragmented frame after a header-boundary fast-path frame", () => {
32
- const messages: unknown[] = [];
33
- const errors: Error[] = [];
34
- const reader = createMessageReader(
35
- (message) => messages.push(message),
36
- (error) => errors.push(error),
37
- 64,
38
- );
39
- const frameA = framePayload(Buffer.from(JSON.stringify({ a: 1 }), "utf-8"));
40
- const frameB = framePayload(Buffer.from(JSON.stringify({ bb: "1234567890" }), "utf-8"));
41
-
42
- reader(frameA.subarray(0, 4)); // chunk ends exactly at the end of frame A's header
43
- reader(frameA.subarray(4)); // frame A's payload arrives whole (zero-copy fast path)
44
- reader(frameB.subarray(0, 6)); // frame B header + partial payload (buffered path)
45
- reader(frameB.subarray(6));
46
-
47
- assert.deepEqual(messages, [{ a: 1 }, { bb: "1234567890" }]);
48
- assert.deepEqual(errors, []);
49
- });
50
-
51
- test("createMessageReader rejects an oversized declared frame", () => {
52
- const messages: unknown[] = [];
53
- const errors: Error[] = [];
54
- const reader = createMessageReader(
55
- (message) => messages.push(message),
56
- (error) => errors.push(error),
57
- 8,
58
- );
59
- const oversizedFrame = framePayload(Buffer.from(JSON.stringify({ text: "too large" }), "utf-8"));
60
-
61
- reader(oversizedFrame);
62
-
63
- assert.deepEqual(messages, []);
64
- assert.equal(errors.length, 1);
65
- assert.match(errors[0].message, /Intercom frame length \d+ exceeds maximum 8 bytes/);
66
- });
67
-
68
- test("createMessageReader rejects an oversized frame before retaining same-chunk payload bytes", () => {
69
- const messages: unknown[] = [];
70
- const errors: Error[] = [];
71
- const reader = createMessageReader(
72
- (message) => messages.push(message),
73
- (error) => errors.push(error),
74
- 8,
75
- );
76
- const header = Buffer.alloc(4);
77
- header.writeUInt32BE(9, 0);
78
-
79
- reader(Buffer.concat([header, Buffer.alloc(1024 * 1024)]));
80
-
81
- assert.deepEqual(messages, []);
82
- assert.equal(errors.length, 1);
83
- assert.equal(errors[0].message, "Intercom frame length 9 exceeds maximum 8 bytes");
84
- });
85
-
86
- test("createMessageReader rejects a partial oversized frame before buffering the payload", () => {
87
- const messages: unknown[] = [];
88
- const errors: Error[] = [];
89
- const reader = createMessageReader(
90
- (message) => messages.push(message),
91
- (error) => errors.push(error),
92
- 8,
93
- );
94
- const header = Buffer.alloc(4);
95
- header.writeUInt32BE(9, 0);
96
-
97
- reader(header);
98
-
99
- assert.deepEqual(messages, []);
100
- assert.equal(errors.length, 1);
101
- assert.equal(errors[0].message, "Intercom frame length 9 exceeds maximum 8 bytes");
102
- });
103
-
104
- test("writeMessage emits frames accepted by createMessageReader", () => {
105
- const chunks: Buffer[] = [];
106
- const socket = { write: (chunk: Buffer) => chunks.push(chunk) };
107
- const messages: unknown[] = [];
108
- const reader = createMessageReader((message) => messages.push(message), assert.fail, 64);
109
-
110
- writeMessage(socket as never, { ok: true });
111
- reader(Buffer.concat(chunks));
112
-
113
- assert.deepEqual(messages, [{ ok: true }]);
114
- });
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { createMessageReader, writeMessage } from "./framing.ts";
4
+
5
+ function framePayload(payload: Buffer): Buffer {
6
+ const header = Buffer.alloc(4);
7
+ header.writeUInt32BE(payload.length, 0);
8
+ return Buffer.concat([header, payload]);
9
+ }
10
+
11
+ test("createMessageReader handles normal fragmented frames", () => {
12
+ const messages: unknown[] = [];
13
+ const errors: Error[] = [];
14
+ const reader = createMessageReader(
15
+ (message) => messages.push(message),
16
+ (error) => errors.push(error),
17
+ 64,
18
+ );
19
+ const frameA = framePayload(Buffer.from(JSON.stringify({ type: "one" }), "utf-8"));
20
+ const frameB = framePayload(Buffer.from(JSON.stringify({ type: "two" }), "utf-8"));
21
+ const combined = Buffer.concat([frameA, frameB]);
22
+
23
+ reader(combined.subarray(0, 2));
24
+ reader(combined.subarray(2, 7));
25
+ reader(combined.subarray(7));
26
+
27
+ assert.deepEqual(messages, [{ type: "one" }, { type: "two" }]);
28
+ assert.deepEqual(errors, []);
29
+ });
30
+
31
+ test("createMessageReader reassembles a fragmented frame after a header-boundary fast-path frame", () => {
32
+ const messages: unknown[] = [];
33
+ const errors: Error[] = [];
34
+ const reader = createMessageReader(
35
+ (message) => messages.push(message),
36
+ (error) => errors.push(error),
37
+ 64,
38
+ );
39
+ const frameA = framePayload(Buffer.from(JSON.stringify({ a: 1 }), "utf-8"));
40
+ const frameB = framePayload(Buffer.from(JSON.stringify({ bb: "1234567890" }), "utf-8"));
41
+
42
+ reader(frameA.subarray(0, 4)); // chunk ends exactly at the end of frame A's header
43
+ reader(frameA.subarray(4)); // frame A's payload arrives whole (zero-copy fast path)
44
+ reader(frameB.subarray(0, 6)); // frame B header + partial payload (buffered path)
45
+ reader(frameB.subarray(6));
46
+
47
+ assert.deepEqual(messages, [{ a: 1 }, { bb: "1234567890" }]);
48
+ assert.deepEqual(errors, []);
49
+ });
50
+
51
+ test("createMessageReader rejects an oversized declared frame", () => {
52
+ const messages: unknown[] = [];
53
+ const errors: Error[] = [];
54
+ const reader = createMessageReader(
55
+ (message) => messages.push(message),
56
+ (error) => errors.push(error),
57
+ 8,
58
+ );
59
+ const oversizedFrame = framePayload(Buffer.from(JSON.stringify({ text: "too large" }), "utf-8"));
60
+
61
+ reader(oversizedFrame);
62
+
63
+ assert.deepEqual(messages, []);
64
+ assert.equal(errors.length, 1);
65
+ assert.match(errors[0].message, /Intercom frame length \d+ exceeds maximum 8 bytes/);
66
+ });
67
+
68
+ test("createMessageReader rejects an oversized frame before retaining same-chunk payload bytes", () => {
69
+ const messages: unknown[] = [];
70
+ const errors: Error[] = [];
71
+ const reader = createMessageReader(
72
+ (message) => messages.push(message),
73
+ (error) => errors.push(error),
74
+ 8,
75
+ );
76
+ const header = Buffer.alloc(4);
77
+ header.writeUInt32BE(9, 0);
78
+
79
+ reader(Buffer.concat([header, Buffer.alloc(1024 * 1024)]));
80
+
81
+ assert.deepEqual(messages, []);
82
+ assert.equal(errors.length, 1);
83
+ assert.equal(errors[0].message, "Intercom frame length 9 exceeds maximum 8 bytes");
84
+ });
85
+
86
+ test("createMessageReader rejects a partial oversized frame before buffering the payload", () => {
87
+ const messages: unknown[] = [];
88
+ const errors: Error[] = [];
89
+ const reader = createMessageReader(
90
+ (message) => messages.push(message),
91
+ (error) => errors.push(error),
92
+ 8,
93
+ );
94
+ const header = Buffer.alloc(4);
95
+ header.writeUInt32BE(9, 0);
96
+
97
+ reader(header);
98
+
99
+ assert.deepEqual(messages, []);
100
+ assert.equal(errors.length, 1);
101
+ assert.equal(errors[0].message, "Intercom frame length 9 exceeds maximum 8 bytes");
102
+ });
103
+
104
+ test("writeMessage emits frames accepted by createMessageReader", () => {
105
+ const chunks: Buffer[] = [];
106
+ const socket = { write: (chunk: Buffer) => chunks.push(chunk) };
107
+ const messages: unknown[] = [];
108
+ const reader = createMessageReader((message) => messages.push(message), assert.fail, 64);
109
+
110
+ writeMessage(socket as never, { ok: true });
111
+ reader(Buffer.concat(chunks));
112
+
113
+ assert.deepEqual(messages, [{ ok: true }]);
114
+ });
@@ -1,134 +1,134 @@
1
- import { chmodSync, mkdirSync, readFileSync } from "fs";
2
- import { isAbsolute, join, resolve } from "path";
3
- import { getAgentDir } from "@selesai/code";
4
-
5
- export const INTERCOM_DIR_MODE = 0o700;
6
- export const INTERCOM_RUNTIME_FILE_MODE = 0o600;
7
- export const INTERCOM_TCP_HOST = "127.0.0.1";
8
- export const INTERCOM_PROTOCOL_NAME = "pi-intercom";
9
- export const INTERCOM_PROTOCOL_VERSION = 1;
10
-
11
- export interface BrokerTcpEndpoint {
12
- transport: "tcp";
13
- host: string;
14
- port: number;
15
- stateId?: string;
16
- }
17
-
18
- export type BrokerConnectTarget = string | BrokerTcpEndpoint;
19
-
20
- function sanitizePipeSegment(value: string): string {
21
- return value
22
- .replace(/[^a-zA-Z0-9]+/g, "-")
23
- .replace(/^-+|-+$/g, "")
24
- .toLowerCase() || "default";
25
- }
26
-
27
- export function getAgentDirPath(
28
- env: NodeJS.ProcessEnv = process.env,
29
- cwd: string = process.cwd(),
30
- ): string {
31
- const configured = env.SELESAI_CODING_AGENT_DIR?.trim();
32
- if (!configured) {
33
- return getAgentDir();
34
- }
35
-
36
- return isAbsolute(configured) ? configured : resolve(cwd, configured);
37
- }
38
-
39
- export function getIntercomDirPath(agentDir: string = getAgentDirPath()): string {
40
- return join(agentDir, "intercom");
41
- }
42
-
43
- export function shouldUseWindowsTcpTransport(
44
- platform: NodeJS.Platform = process.platform,
45
- env: NodeJS.ProcessEnv = process.env,
46
- ): boolean {
47
- if (platform !== "win32") {
48
- return false;
49
- }
50
-
51
- const transport = env.PI_INTERCOM_TRANSPORT?.trim().toLowerCase();
52
- if (transport === "tcp") {
53
- return true;
54
- }
55
-
56
- const legacyOptIn = env.PI_INTERCOM_TCP?.trim().toLowerCase();
57
- return legacyOptIn === "1" || legacyOptIn === "true";
58
- }
59
-
60
- export function getBrokerPortFilePath(intercomDir: string = getIntercomDirPath()): string {
61
- return join(intercomDir, "broker.port.json");
62
- }
63
-
64
- export function getBrokerSocketPath(
65
- platform: NodeJS.Platform = process.platform,
66
- agentDir: string = getAgentDirPath(),
67
- ): string {
68
- if (platform === "win32") {
69
- return `\\\\.\\pipe\\pi-intercom-${sanitizePipeSegment(agentDir)}`;
70
- }
71
-
72
- return join(getIntercomDirPath(agentDir), "broker.sock");
73
- }
74
-
75
- export function getBrokerConnectTarget(
76
- platform: NodeJS.Platform = process.platform,
77
- env: NodeJS.ProcessEnv = process.env,
78
- intercomDir: string = getIntercomDirPath(getAgentDirPath(env)),
79
- ): BrokerConnectTarget {
80
- if (shouldUseWindowsTcpTransport(platform, env)) {
81
- const endpointFile = getBrokerPortFilePath(intercomDir);
82
- const raw = readFileSync(endpointFile, "utf-8");
83
- const parsed: unknown = JSON.parse(raw);
84
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
85
- throw new Error(`Invalid intercom TCP endpoint at ${endpointFile}: expected a JSON object`);
86
- }
87
- const endpoint = parsed as Record<string, unknown>;
88
- if (
89
- endpoint.transport !== "tcp"
90
- || endpoint.host !== INTERCOM_TCP_HOST
91
- || typeof endpoint.port !== "number"
92
- || !Number.isSafeInteger(endpoint.port)
93
- || endpoint.port <= 0
94
- || endpoint.port > 65535
95
- || typeof endpoint.stateId !== "string"
96
- || endpoint.stateId.length === 0
97
- ) {
98
- throw new Error(`Invalid intercom TCP endpoint at ${endpointFile}`);
99
- }
100
- return { transport: "tcp", host: endpoint.host, port: endpoint.port, stateId: endpoint.stateId };
101
- }
102
-
103
- return getBrokerSocketPath(platform, getAgentDirPath(env));
104
- }
105
-
106
- export function getBrokerListenTarget(
107
- platform: NodeJS.Platform = process.platform,
108
- env: NodeJS.ProcessEnv = process.env,
109
- ): BrokerConnectTarget {
110
- if (shouldUseWindowsTcpTransport(platform, env)) {
111
- return { transport: "tcp", host: INTERCOM_TCP_HOST, port: 0 };
112
- }
113
-
114
- return getBrokerSocketPath(platform, getAgentDirPath(env));
115
- }
116
-
117
- export function ensureIntercomRuntimeDir(
118
- intercomDir: string = getIntercomDirPath(),
119
- platform: NodeJS.Platform = process.platform,
120
- ): void {
121
- mkdirSync(intercomDir, { recursive: true, mode: INTERCOM_DIR_MODE });
122
- if (platform !== "win32") {
123
- chmodSync(intercomDir, INTERCOM_DIR_MODE);
124
- }
125
- }
126
-
127
- export function restrictIntercomRuntimeFile(
128
- filePath: string,
129
- platform: NodeJS.Platform = process.platform,
130
- ): void {
131
- if (platform !== "win32") {
132
- chmodSync(filePath, INTERCOM_RUNTIME_FILE_MODE);
133
- }
134
- }
1
+ import { chmodSync, mkdirSync, readFileSync } from "fs";
2
+ import { isAbsolute, join, resolve } from "path";
3
+ import { getAgentDir } from "@selesai/code";
4
+
5
+ export const INTERCOM_DIR_MODE = 0o700;
6
+ export const INTERCOM_RUNTIME_FILE_MODE = 0o600;
7
+ export const INTERCOM_TCP_HOST = "127.0.0.1";
8
+ export const INTERCOM_PROTOCOL_NAME = "pi-intercom";
9
+ export const INTERCOM_PROTOCOL_VERSION = 1;
10
+
11
+ export interface BrokerTcpEndpoint {
12
+ transport: "tcp";
13
+ host: string;
14
+ port: number;
15
+ stateId?: string;
16
+ }
17
+
18
+ export type BrokerConnectTarget = string | BrokerTcpEndpoint;
19
+
20
+ function sanitizePipeSegment(value: string): string {
21
+ return value
22
+ .replace(/[^a-zA-Z0-9]+/g, "-")
23
+ .replace(/^-+|-+$/g, "")
24
+ .toLowerCase() || "default";
25
+ }
26
+
27
+ export function getAgentDirPath(
28
+ env: NodeJS.ProcessEnv = process.env,
29
+ cwd: string = process.cwd(),
30
+ ): string {
31
+ const configured = env.SELESAI_CODING_AGENT_DIR?.trim();
32
+ if (!configured) {
33
+ return getAgentDir();
34
+ }
35
+
36
+ return isAbsolute(configured) ? configured : resolve(cwd, configured);
37
+ }
38
+
39
+ export function getIntercomDirPath(agentDir: string = getAgentDirPath()): string {
40
+ return join(agentDir, "intercom");
41
+ }
42
+
43
+ export function shouldUseWindowsTcpTransport(
44
+ platform: NodeJS.Platform = process.platform,
45
+ env: NodeJS.ProcessEnv = process.env,
46
+ ): boolean {
47
+ if (platform !== "win32") {
48
+ return false;
49
+ }
50
+
51
+ const transport = env.PI_INTERCOM_TRANSPORT?.trim().toLowerCase();
52
+ if (transport === "tcp") {
53
+ return true;
54
+ }
55
+
56
+ const legacyOptIn = env.PI_INTERCOM_TCP?.trim().toLowerCase();
57
+ return legacyOptIn === "1" || legacyOptIn === "true";
58
+ }
59
+
60
+ export function getBrokerPortFilePath(intercomDir: string = getIntercomDirPath()): string {
61
+ return join(intercomDir, "broker.port.json");
62
+ }
63
+
64
+ export function getBrokerSocketPath(
65
+ platform: NodeJS.Platform = process.platform,
66
+ agentDir: string = getAgentDirPath(),
67
+ ): string {
68
+ if (platform === "win32") {
69
+ return `\\\\.\\pipe\\pi-intercom-${sanitizePipeSegment(agentDir)}`;
70
+ }
71
+
72
+ return join(getIntercomDirPath(agentDir), "broker.sock");
73
+ }
74
+
75
+ export function getBrokerConnectTarget(
76
+ platform: NodeJS.Platform = process.platform,
77
+ env: NodeJS.ProcessEnv = process.env,
78
+ intercomDir: string = getIntercomDirPath(getAgentDirPath(env)),
79
+ ): BrokerConnectTarget {
80
+ if (shouldUseWindowsTcpTransport(platform, env)) {
81
+ const endpointFile = getBrokerPortFilePath(intercomDir);
82
+ const raw = readFileSync(endpointFile, "utf-8");
83
+ const parsed: unknown = JSON.parse(raw);
84
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
85
+ throw new Error(`Invalid intercom TCP endpoint at ${endpointFile}: expected a JSON object`);
86
+ }
87
+ const endpoint = parsed as Record<string, unknown>;
88
+ if (
89
+ endpoint.transport !== "tcp"
90
+ || endpoint.host !== INTERCOM_TCP_HOST
91
+ || typeof endpoint.port !== "number"
92
+ || !Number.isSafeInteger(endpoint.port)
93
+ || endpoint.port <= 0
94
+ || endpoint.port > 65535
95
+ || typeof endpoint.stateId !== "string"
96
+ || endpoint.stateId.length === 0
97
+ ) {
98
+ throw new Error(`Invalid intercom TCP endpoint at ${endpointFile}`);
99
+ }
100
+ return { transport: "tcp", host: endpoint.host, port: endpoint.port, stateId: endpoint.stateId };
101
+ }
102
+
103
+ return getBrokerSocketPath(platform, getAgentDirPath(env));
104
+ }
105
+
106
+ export function getBrokerListenTarget(
107
+ platform: NodeJS.Platform = process.platform,
108
+ env: NodeJS.ProcessEnv = process.env,
109
+ ): BrokerConnectTarget {
110
+ if (shouldUseWindowsTcpTransport(platform, env)) {
111
+ return { transport: "tcp", host: INTERCOM_TCP_HOST, port: 0 };
112
+ }
113
+
114
+ return getBrokerSocketPath(platform, getAgentDirPath(env));
115
+ }
116
+
117
+ export function ensureIntercomRuntimeDir(
118
+ intercomDir: string = getIntercomDirPath(),
119
+ platform: NodeJS.Platform = process.platform,
120
+ ): void {
121
+ mkdirSync(intercomDir, { recursive: true, mode: INTERCOM_DIR_MODE });
122
+ if (platform !== "win32") {
123
+ chmodSync(intercomDir, INTERCOM_DIR_MODE);
124
+ }
125
+ }
126
+
127
+ export function restrictIntercomRuntimeFile(
128
+ filePath: string,
129
+ platform: NodeJS.Platform = process.platform,
130
+ ): void {
131
+ if (platform !== "win32") {
132
+ chmodSync(filePath, INTERCOM_RUNTIME_FILE_MODE);
133
+ }
134
+ }
@@ -1,34 +1,34 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import path from "node:path";
4
- import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
5
- import { tmpdir } from "node:os";
6
- import { assertNoLiveBroker } from "./runtime-claim.ts";
7
-
8
- test("broker startup refuses to replace a live broker PID", () => {
9
- const directory = mkdtempSync(path.join(tmpdir(), "pi-intercom-runtime-"));
10
- const pidPath = path.join(directory, "broker.pid");
11
- try {
12
- writeFileSync(pidPath, `${process.pid}\n`);
13
- assert.throws(
14
- () => assertNoLiveBroker(pidPath),
15
- new RegExp(`Refusing to replace live intercom broker process ${process.pid}`),
16
- );
17
- } finally {
18
- rmSync(directory, { recursive: true, force: true });
19
- }
20
- });
21
-
22
- test("broker startup tolerates absent, invalid, and stale PID files", () => {
23
- const directory = mkdtempSync(path.join(tmpdir(), "pi-intercom-runtime-"));
24
- const pidPath = path.join(directory, "broker.pid");
25
- try {
26
- assert.doesNotThrow(() => assertNoLiveBroker(pidPath));
27
- writeFileSync(pidPath, "invalid\n");
28
- assert.doesNotThrow(() => assertNoLiveBroker(pidPath));
29
- writeFileSync(pidPath, "2147483647\n");
30
- assert.doesNotThrow(() => assertNoLiveBroker(pidPath));
31
- } finally {
32
- rmSync(directory, { recursive: true, force: true });
33
- }
34
- });
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import path from "node:path";
4
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
5
+ import { tmpdir } from "node:os";
6
+ import { assertNoLiveBroker } from "./runtime-claim.ts";
7
+
8
+ test("broker startup refuses to replace a live broker PID", () => {
9
+ const directory = mkdtempSync(path.join(tmpdir(), "pi-intercom-runtime-"));
10
+ const pidPath = path.join(directory, "broker.pid");
11
+ try {
12
+ writeFileSync(pidPath, `${process.pid}\n`);
13
+ assert.throws(
14
+ () => assertNoLiveBroker(pidPath),
15
+ new RegExp(`Refusing to replace live intercom broker process ${process.pid}`),
16
+ );
17
+ } finally {
18
+ rmSync(directory, { recursive: true, force: true });
19
+ }
20
+ });
21
+
22
+ test("broker startup tolerates absent, invalid, and stale PID files", () => {
23
+ const directory = mkdtempSync(path.join(tmpdir(), "pi-intercom-runtime-"));
24
+ const pidPath = path.join(directory, "broker.pid");
25
+ try {
26
+ assert.doesNotThrow(() => assertNoLiveBroker(pidPath));
27
+ writeFileSync(pidPath, "invalid\n");
28
+ assert.doesNotThrow(() => assertNoLiveBroker(pidPath));
29
+ writeFileSync(pidPath, "2147483647\n");
30
+ assert.doesNotThrow(() => assertNoLiveBroker(pidPath));
31
+ } finally {
32
+ rmSync(directory, { recursive: true, force: true });
33
+ }
34
+ });
@@ -1,21 +1,21 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
-
3
- export function assertNoLiveBroker(pidPath: string): void {
4
- if (!existsSync(pidPath)) return;
5
-
6
- let pid: number;
7
- try {
8
- pid = Number.parseInt(readFileSync(pidPath, "utf8").trim(), 10);
9
- } catch {
10
- return;
11
- }
12
- if (!Number.isSafeInteger(pid) || pid <= 0) return;
13
-
14
- try {
15
- process.kill(pid, 0);
16
- } catch (error) {
17
- if ((error as NodeJS.ErrnoException).code === "ESRCH") return;
18
- throw error;
19
- }
20
- throw new Error(`Refusing to replace live intercom broker process ${pid}`);
21
- }
1
+ import { existsSync, readFileSync } from "node:fs";
2
+
3
+ export function assertNoLiveBroker(pidPath: string): void {
4
+ if (!existsSync(pidPath)) return;
5
+
6
+ let pid: number;
7
+ try {
8
+ pid = Number.parseInt(readFileSync(pidPath, "utf8").trim(), 10);
9
+ } catch {
10
+ return;
11
+ }
12
+ if (!Number.isSafeInteger(pid) || pid <= 0) return;
13
+
14
+ try {
15
+ process.kill(pid, 0);
16
+ } catch (error) {
17
+ if ((error as NodeJS.ErrnoException).code === "ESRCH") return;
18
+ throw error;
19
+ }
20
+ throw new Error(`Refusing to replace live intercom broker process ${pid}`);
21
+ }
@@ -60,24 +60,13 @@ test("loadConfig accepts inboundTrigger replies policy", async () => {
60
60
  }
61
61
  });
62
62
 
63
- test("loadConfig defaults intercom tool visibility to always", async () => {
64
- const root = mkdtempSync(join(tmpdir(), "pi-intercom-config-"));
65
- try {
66
- await withAgentDir(root, () => {
67
- assert.equal(loadConfig().toolVisibility, "always");
68
- });
69
- } finally {
70
- rmSync(root, { recursive: true, force: true });
71
- }
72
- });
73
-
74
- test("loadConfig accepts lazy intercom tool visibility", async () => {
63
+ test("loadConfig ignores obsolete toolVisibility values", async () => {
75
64
  const root = mkdtempSync(join(tmpdir(), "pi-intercom-config-"));
76
65
  try {
77
66
  mkdirSync(join(root, "intercom"), { recursive: true });
78
- writeFileSync(join(root, "intercom", "config.json"), JSON.stringify({ toolVisibility: "after-first-use" }));
67
+ writeFileSync(join(root, "intercom", "config.json"), JSON.stringify({ toolVisibility: "lazy", replyHint: false }));
79
68
  await withAgentDir(root, () => {
80
- assert.equal(loadConfig().toolVisibility, "after-first-use");
69
+ assert.equal(loadConfig().replyHint, false);
81
70
  });
82
71
  } finally {
83
72
  rmSync(root, { recursive: true, force: true });
@@ -97,23 +86,6 @@ test("loadConfig accepts a restart-stable intercom id", async () => {
97
86
  }
98
87
  });
99
88
 
100
- test("loadConfig rejects invalid toolVisibility values", async () => {
101
- const root = mkdtempSync(join(tmpdir(), "pi-intercom-config-"));
102
- try {
103
- mkdirSync(join(root, "intercom"), { recursive: true });
104
- writeFileSync(join(root, "intercom", "config.json"), JSON.stringify({ toolVisibility: "lazy" }));
105
-
106
- await withAgentDir(root, () => {
107
- assert.throws(
108
- () => loadConfig(),
109
- /Failed to load intercom config.*"toolVisibility" must be "always" or "after-first-use"/,
110
- );
111
- });
112
- } finally {
113
- rmSync(root, { recursive: true, force: true });
114
- }
115
- });
116
-
117
89
  test("loadConfig rejects invalid inboundTrigger values", async () => {
118
90
  const root = mkdtempSync(join(tmpdir(), "pi-intercom-config-"));
119
91
  try {