@astralyn/pi 0.87.0 → 0.87.2

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 (301) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/bundle/chunks/{anthropic-messages-R2LYJUDD.js → anthropic-messages-XWFTZP2N.js} +1 -1
  3. package/dist/bundle/chunks/{chunk-INDBRWNK.js → chunk-NBIUJDV6.js} +1 -1
  4. package/dist/bundle/chunks/{chunk-RKLIHRPH.js → chunk-RFLBIA5Z.js} +82 -82
  5. package/dist/bundle/chunks/github-copilot.js +1 -1
  6. package/dist/bundle/chunks/{openai-completions-JZCEEJ43.js → openai-completions-SHS3CAEL.js} +1 -1
  7. package/dist/bundle/chunks/{virtual-modules-CG7NJ5WO.js → virtual-modules-GOHLE5JL.js} +1 -1
  8. package/dist/bundle/cli.js +1 -1
  9. package/dist/bundle/index.js +1 -1
  10. package/dist/bundle/rpc-entry.js +1 -1
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +14 -4
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/config.d.ts +1 -1
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/core/agent-session-runtime.d.ts +9 -0
  18. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  19. package/dist/core/agent-session-runtime.js +158 -157
  20. package/dist/core/agent-session-runtime.js.map +1 -1
  21. package/dist/core/agent-session.d.ts +30 -0
  22. package/dist/core/agent-session.d.ts.map +1 -1
  23. package/dist/core/agent-session.js +514 -443
  24. package/dist/core/agent-session.js.map +1 -1
  25. package/dist/core/background/service.d.ts +9 -0
  26. package/dist/core/background/service.d.ts.map +1 -1
  27. package/dist/core/background/service.js +13 -1
  28. package/dist/core/background/service.js.map +1 -1
  29. package/dist/core/background/session.d.ts +5 -0
  30. package/dist/core/background/session.d.ts.map +1 -1
  31. package/dist/core/background/session.js +2 -1
  32. package/dist/core/background/session.js.map +1 -1
  33. package/dist/core/background/types.d.ts +2 -0
  34. package/dist/core/background/types.d.ts.map +1 -1
  35. package/dist/core/background/types.js.map +1 -1
  36. package/dist/core/compaction/compaction.js +9 -9
  37. package/dist/core/compaction/compaction.js.map +1 -1
  38. package/dist/core/extensions/distribution-api.d.ts +41 -0
  39. package/dist/core/extensions/distribution-api.d.ts.map +1 -0
  40. package/dist/core/extensions/distribution-api.js +12 -0
  41. package/dist/core/extensions/distribution-api.js.map +1 -0
  42. package/dist/core/extensions/index.d.ts +1 -1
  43. package/dist/core/extensions/index.d.ts.map +1 -1
  44. package/dist/core/extensions/index.js.map +1 -1
  45. package/dist/core/extensions/loader.d.ts.map +1 -1
  46. package/dist/core/extensions/loader.js +1 -0
  47. package/dist/core/extensions/loader.js.map +1 -1
  48. package/dist/core/extensions/runner.d.ts.map +1 -1
  49. package/dist/core/extensions/runner.js +0 -2
  50. package/dist/core/extensions/runner.js.map +1 -1
  51. package/dist/core/extensions/types.d.ts +15 -45
  52. package/dist/core/extensions/types.d.ts.map +1 -1
  53. package/dist/core/extensions/types.js +1 -11
  54. package/dist/core/extensions/types.js.map +1 -1
  55. package/dist/core/extensions/virtual-modules.d.ts.map +1 -1
  56. package/dist/core/extensions/virtual-modules.js +2 -1
  57. package/dist/core/extensions/virtual-modules.js.map +1 -1
  58. package/dist/core/keybinding-registry.d.ts +11 -0
  59. package/dist/core/keybinding-registry.d.ts.map +1 -0
  60. package/dist/core/keybinding-registry.js +24 -0
  61. package/dist/core/keybinding-registry.js.map +1 -0
  62. package/dist/core/keybindings.d.ts +4 -64
  63. package/dist/core/keybindings.d.ts.map +1 -1
  64. package/dist/core/keybindings.js +2 -41
  65. package/dist/core/keybindings.js.map +1 -1
  66. package/dist/core/model-config.d.ts +70 -2
  67. package/dist/core/model-config.d.ts.map +1 -1
  68. package/dist/core/model-config.js +2 -26
  69. package/dist/core/model-config.js.map +1 -1
  70. package/dist/core/model-resolver.js +1 -1
  71. package/dist/core/model-resolver.js.map +1 -1
  72. package/dist/core/resource-loader.d.ts.map +1 -1
  73. package/dist/core/resource-loader.js +5 -11
  74. package/dist/core/resource-loader.js.map +1 -1
  75. package/dist/core/tools/bash.d.ts.map +1 -1
  76. package/dist/core/tools/bash.js +2 -2
  77. package/dist/core/tools/bash.js.map +1 -1
  78. package/dist/core/tools/shell-execution.d.ts +1 -0
  79. package/dist/core/tools/shell-execution.d.ts.map +1 -1
  80. package/dist/core/tools/shell-execution.js +21 -0
  81. package/dist/core/tools/shell-execution.js.map +1 -1
  82. package/dist/core/trust-manager.d.ts.map +1 -1
  83. package/dist/core/trust-manager.js +11 -48
  84. package/dist/core/trust-manager.js.map +1 -1
  85. package/dist/extensions/background/index.d.ts +2 -0
  86. package/dist/extensions/background/index.d.ts.map +1 -1
  87. package/dist/extensions/background/index.js +17 -0
  88. package/dist/extensions/background/index.js.map +1 -1
  89. package/dist/extensions/background/keybindings.d.ts +10 -0
  90. package/dist/extensions/background/keybindings.d.ts.map +1 -0
  91. package/dist/extensions/background/keybindings.js +14 -0
  92. package/dist/extensions/background/keybindings.js.map +1 -0
  93. package/dist/extensions/background/manager.d.ts +2 -0
  94. package/dist/extensions/background/manager.d.ts.map +1 -1
  95. package/dist/extensions/background/manager.js +1 -0
  96. package/dist/extensions/background/manager.js.map +1 -1
  97. package/dist/extensions/btw/controller.d.ts +1 -0
  98. package/dist/extensions/btw/controller.d.ts.map +1 -1
  99. package/dist/extensions/btw/controller.js +5 -5
  100. package/dist/extensions/btw/controller.js.map +1 -1
  101. package/dist/extensions/btw/index.js +1 -2
  102. package/dist/extensions/btw/index.js.map +1 -1
  103. package/dist/extensions/btw/keybindings.d.ts +10 -0
  104. package/dist/extensions/btw/keybindings.d.ts.map +1 -0
  105. package/dist/extensions/btw/keybindings.js +8 -0
  106. package/dist/extensions/btw/keybindings.js.map +1 -0
  107. package/dist/extensions/btw/panel.d.ts +1 -0
  108. package/dist/extensions/btw/panel.d.ts.map +1 -1
  109. package/dist/extensions/btw/panel.js +1 -0
  110. package/dist/extensions/btw/panel.js.map +1 -1
  111. package/dist/extensions/list-keybindings.d.ts +8 -0
  112. package/dist/extensions/list-keybindings.d.ts.map +1 -0
  113. package/dist/extensions/list-keybindings.js +8 -0
  114. package/dist/extensions/list-keybindings.js.map +1 -0
  115. package/dist/extensions/provider/compat-fields.d.ts.map +1 -1
  116. package/dist/extensions/provider/compat-fields.js +23 -3
  117. package/dist/extensions/provider/compat-fields.js.map +1 -1
  118. package/dist/extensions/provider/connection.d.ts.map +1 -1
  119. package/dist/extensions/provider/connection.js +1 -1
  120. package/dist/extensions/provider/connection.js.map +1 -1
  121. package/dist/extensions/provider/constants.d.ts +2 -0
  122. package/dist/extensions/provider/constants.d.ts.map +1 -1
  123. package/dist/extensions/provider/constants.js +2 -0
  124. package/dist/extensions/provider/constants.js.map +1 -1
  125. package/dist/extensions/provider/keybindings.d.ts +9 -0
  126. package/dist/extensions/provider/keybindings.d.ts.map +1 -0
  127. package/dist/extensions/provider/keybindings.js +12 -0
  128. package/dist/extensions/provider/keybindings.js.map +1 -0
  129. package/dist/extensions/provider/probe.d.ts +8 -4
  130. package/dist/extensions/provider/probe.d.ts.map +1 -1
  131. package/dist/extensions/provider/probe.js +169 -11
  132. package/dist/extensions/provider/probe.js.map +1 -1
  133. package/dist/extensions/provider/ui/builtin-data.d.ts +1 -0
  134. package/dist/extensions/provider/ui/builtin-data.d.ts.map +1 -1
  135. package/dist/extensions/provider/ui/builtin-data.js +1 -0
  136. package/dist/extensions/provider/ui/builtin-data.js.map +1 -1
  137. package/dist/extensions/provider/ui/compat.d.ts +1 -0
  138. package/dist/extensions/provider/ui/compat.d.ts.map +1 -1
  139. package/dist/extensions/provider/ui/compat.js +1 -0
  140. package/dist/extensions/provider/ui/compat.js.map +1 -1
  141. package/dist/extensions/provider/ui/dictionary.d.ts +1 -0
  142. package/dist/extensions/provider/ui/dictionary.d.ts.map +1 -1
  143. package/dist/extensions/provider/ui/dictionary.js +1 -0
  144. package/dist/extensions/provider/ui/dictionary.js.map +1 -1
  145. package/dist/extensions/provider/ui/editor.d.ts +1 -0
  146. package/dist/extensions/provider/ui/editor.d.ts.map +1 -1
  147. package/dist/extensions/provider/ui/editor.js +1 -0
  148. package/dist/extensions/provider/ui/editor.js.map +1 -1
  149. package/dist/extensions/provider/ui/fetch-models.d.ts +5 -3
  150. package/dist/extensions/provider/ui/fetch-models.d.ts.map +1 -1
  151. package/dist/extensions/provider/ui/fetch-models.js +28 -3
  152. package/dist/extensions/provider/ui/fetch-models.js.map +1 -1
  153. package/dist/extensions/provider/ui/model-fields.d.ts +1 -0
  154. package/dist/extensions/provider/ui/model-fields.d.ts.map +1 -1
  155. package/dist/extensions/provider/ui/model-fields.js +1 -0
  156. package/dist/extensions/provider/ui/model-fields.js.map +1 -1
  157. package/dist/extensions/provider/ui/model-options.d.ts +1 -0
  158. package/dist/extensions/provider/ui/model-options.d.ts.map +1 -1
  159. package/dist/extensions/provider/ui/model-options.js +1 -0
  160. package/dist/extensions/provider/ui/model-options.js.map +1 -1
  161. package/dist/extensions/provider/ui/provider-fields.d.ts +1 -0
  162. package/dist/extensions/provider/ui/provider-fields.d.ts.map +1 -1
  163. package/dist/extensions/provider/ui/provider-fields.js +1 -0
  164. package/dist/extensions/provider/ui/provider-fields.js.map +1 -1
  165. package/dist/extensions/question/dialog.d.ts +1 -0
  166. package/dist/extensions/question/dialog.d.ts.map +1 -1
  167. package/dist/extensions/question/dialog.js +1 -0
  168. package/dist/extensions/question/dialog.js.map +1 -1
  169. package/dist/extensions/question/keybindings.d.ts +2 -0
  170. package/dist/extensions/question/keybindings.d.ts.map +1 -0
  171. package/dist/extensions/question/keybindings.js +3 -0
  172. package/dist/extensions/question/keybindings.js.map +1 -0
  173. package/dist/index.d.ts +1 -1
  174. package/dist/index.d.ts.map +1 -1
  175. package/dist/index.js.map +1 -1
  176. package/dist/modes/interactive/editor-host.d.ts +43 -0
  177. package/dist/modes/interactive/editor-host.d.ts.map +1 -0
  178. package/dist/modes/interactive/editor-host.js +83 -0
  179. package/dist/modes/interactive/editor-host.js.map +1 -0
  180. package/dist/modes/interactive/interactive-mode.d.ts +1 -11
  181. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  182. package/dist/modes/interactive/interactive-mode.js +300 -360
  183. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  184. package/dist/modes/interactive/tool-chat.d.ts +21 -0
  185. package/dist/modes/interactive/tool-chat.d.ts.map +1 -0
  186. package/dist/modes/interactive/tool-chat.js +58 -0
  187. package/dist/modes/interactive/tool-chat.js.map +1 -0
  188. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  189. package/dist/modes/rpc/rpc-mode.js +0 -2
  190. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  191. package/dist/utils/path-identity.d.ts +12 -0
  192. package/dist/utils/path-identity.d.ts.map +1 -0
  193. package/dist/utils/path-identity.js +63 -0
  194. package/dist/utils/path-identity.js.map +1 -0
  195. package/dist/utils/shell.d.ts +0 -1
  196. package/dist/utils/shell.d.ts.map +1 -1
  197. package/dist/utils/shell.js +0 -21
  198. package/dist/utils/shell.js.map +1 -1
  199. package/dist/utils/syntax-highlight.d.ts +2 -0
  200. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  201. package/dist/utils/syntax-highlight.js +2 -0
  202. package/dist/utils/syntax-highlight.js.map +1 -1
  203. package/docs/bundled/extensions/background.md +3 -3
  204. package/docs/bundled/extensions/provider.md +7 -3
  205. package/docs/bundled/extensions/subagent.md +1 -1
  206. package/docs/compaction.md +1 -1
  207. package/docs/extensions.md +15 -5
  208. package/docs/sdk.md +1 -1
  209. package/docs/usage.md +3 -0
  210. package/examples/README.md +11 -1
  211. package/examples/extensions/README.md +34 -14
  212. package/examples/extensions/auto-commit-on-exit.ts +1 -1
  213. package/examples/extensions/bash-spawn-hook.ts +2 -2
  214. package/examples/extensions/bookmark.ts +1 -1
  215. package/examples/extensions/border-status-editor.ts +6 -1
  216. package/examples/extensions/built-in-tool-renderer.ts +2 -2
  217. package/examples/extensions/claude-rules.ts +1 -1
  218. package/examples/extensions/commands.ts +1 -1
  219. package/examples/extensions/confirm-destructive.ts +1 -1
  220. package/examples/extensions/custom-compaction.ts +2 -2
  221. package/examples/extensions/custom-footer.ts +1 -1
  222. package/examples/extensions/custom-header.ts +2 -2
  223. package/examples/extensions/custom-provider-anthropic/index.ts +6 -6
  224. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  225. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  226. package/examples/extensions/custom-provider-gitlab-duo/index.ts +3 -3
  227. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  228. package/examples/extensions/dirty-repo-guard.ts +1 -1
  229. package/examples/extensions/doom-overlay/index.ts +1 -1
  230. package/examples/extensions/dynamic-resources/dynamic.json +3 -1
  231. package/examples/extensions/dynamic-resources/index.ts +1 -1
  232. package/examples/extensions/dynamic-tools.ts +1 -1
  233. package/examples/extensions/entry-renderer.ts +1 -1
  234. package/examples/extensions/event-bus.ts +1 -1
  235. package/examples/extensions/file-trigger.ts +1 -1
  236. package/examples/extensions/git-checkpoint.ts +1 -1
  237. package/examples/extensions/git-merge-and-resolve.ts +1 -1
  238. package/examples/extensions/github-issue-autocomplete.ts +1 -1
  239. package/examples/extensions/gondolin/index.ts +9 -7
  240. package/examples/extensions/gondolin/package-lock.json +2 -2
  241. package/examples/extensions/gondolin/package.json +1 -1
  242. package/examples/extensions/handoff.ts +2 -2
  243. package/examples/extensions/hello.ts +1 -1
  244. package/examples/extensions/hidden-thinking-label.ts +1 -1
  245. package/examples/extensions/inline-bash.ts +1 -1
  246. package/examples/extensions/input-transform-streaming.ts +1 -1
  247. package/examples/extensions/input-transform.ts +1 -1
  248. package/examples/extensions/interactive-shell.ts +1 -1
  249. package/examples/extensions/mac-system-theme.ts +1 -1
  250. package/examples/extensions/message-renderer.ts +1 -1
  251. package/examples/extensions/minimal-mode.ts +2 -2
  252. package/examples/extensions/modal-editor.ts +1 -1
  253. package/examples/extensions/model-status.ts +1 -1
  254. package/examples/extensions/notify.ts +1 -1
  255. package/examples/extensions/overlay-qa-tests.ts +3 -3
  256. package/examples/extensions/overlay-test.ts +1 -1
  257. package/examples/extensions/permission-gate.ts +1 -1
  258. package/examples/extensions/pirate.ts +1 -1
  259. package/examples/extensions/plan-mode/index.ts +1 -1
  260. package/examples/extensions/preset.ts +2 -2
  261. package/examples/extensions/project-trust.ts +3 -3
  262. package/examples/extensions/prompt-customizer.ts +1 -1
  263. package/examples/extensions/protected-paths.ts +1 -1
  264. package/examples/extensions/provider-payload.ts +1 -1
  265. package/examples/extensions/qna.ts +2 -2
  266. package/examples/extensions/question.ts +1 -1
  267. package/examples/extensions/questionnaire.ts +1 -1
  268. package/examples/extensions/rainbow-editor.ts +1 -1
  269. package/examples/extensions/reload-runtime.ts +1 -1
  270. package/examples/extensions/rpc-demo.ts +1 -1
  271. package/examples/extensions/sandbox/index.ts +2 -2
  272. package/examples/extensions/sandbox/package-lock.json +2 -2
  273. package/examples/extensions/sandbox/package.json +1 -1
  274. package/examples/extensions/send-user-message.ts +1 -1
  275. package/examples/extensions/session-name.ts +1 -1
  276. package/examples/extensions/shutdown-command.ts +1 -1
  277. package/examples/extensions/snake.ts +1 -1
  278. package/examples/extensions/space-invaders.ts +1 -1
  279. package/examples/extensions/ssh.ts +2 -2
  280. package/examples/extensions/status-line.ts +1 -1
  281. package/examples/extensions/structured-output.ts +1 -1
  282. package/examples/extensions/summarize.ts +2 -3
  283. package/examples/extensions/system-prompt-header.ts +1 -1
  284. package/examples/extensions/tic-tac-toe.ts +1 -1
  285. package/examples/extensions/timed-confirm.ts +1 -1
  286. package/examples/extensions/titlebar-spinner.ts +1 -1
  287. package/examples/extensions/todo.ts +1 -1
  288. package/examples/extensions/tool-override.ts +1 -1
  289. package/examples/extensions/tools.ts +2 -2
  290. package/examples/extensions/trigger-compact.ts +1 -1
  291. package/examples/extensions/truncated-tool.ts +4 -4
  292. package/examples/extensions/widget-placement.ts +1 -1
  293. package/examples/extensions/with-deps/index.ts +1 -1
  294. package/examples/extensions/with-deps/package-lock.json +2 -2
  295. package/examples/extensions/with-deps/package.json +1 -1
  296. package/examples/extensions/working-indicator.ts +1 -1
  297. package/examples/extensions/working-message-test.ts +1 -1
  298. package/examples/rpc-client.ts +35 -0
  299. package/examples/rpc-extension-ui.ts +25 -5
  300. package/npm-shrinkwrap.json +43 -43
  301. package/package.json +8 -8
@@ -17,8 +17,8 @@
17
17
  * separate variables. Only the agent cursor is ever exposed to the agent.
18
18
  */
19
19
 
20
- import type { ExtensionAPI, ExtensionContext, Theme, ToolExecutionMode } from "@astralyn/pi";
21
20
  import { StringEnum } from "@earendil-works/pi-ai";
21
+ import type { ExtensionAPI, ExtensionContext, Theme, ToolExecutionMode } from "@earendil-works/pi-coding-agent";
22
22
  import { type Component, matchesKey, Text, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
23
23
  import { Type } from "typebox";
24
24
 
@@ -7,7 +7,7 @@
7
7
  * - /timed-signal - Shows confirm using AbortSignal (manual approach)
8
8
  */
9
9
 
10
- import type { ExtensionAPI } from "@astralyn/pi";
10
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
11
11
 
12
12
  export default function (pi: ExtensionAPI) {
13
13
  // Simple approach: use timeout option (recommended)
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import path from "node:path";
12
- import type { ExtensionAPI, ExtensionContext } from "@astralyn/pi";
12
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
13
13
 
14
14
  const BRAILLE_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
15
15
 
@@ -10,8 +10,8 @@
10
10
  * correct for that point in history.
11
11
  */
12
12
 
13
- import type { ExtensionAPI, ExtensionContext, Theme } from "@astralyn/pi";
14
13
  import { StringEnum } from "@earendil-works/pi-ai";
14
+ import type { ExtensionAPI, ExtensionContext, Theme } from "@earendil-works/pi-coding-agent";
15
15
  import { matchesKey, Text, truncateToWidth } from "@earendil-works/pi-tui";
16
16
  import { Type } from "typebox";
17
17
 
@@ -20,8 +20,8 @@
20
20
  * pi -e ./tool-override.ts
21
21
  */
22
22
 
23
- import { type ExtensionAPI, getAgentDir, withFileMutationQueue } from "@astralyn/pi";
24
23
  import type { TextContent } from "@earendil-works/pi-ai";
24
+ import { type ExtensionAPI, getAgentDir, withFileMutationQueue } from "@earendil-works/pi-coding-agent";
25
25
  import { constants, readFileSync } from "fs";
26
26
  import { access, appendFile, readFile } from "fs/promises";
27
27
  import { join, resolve } from "path";
@@ -9,8 +9,8 @@
9
9
  * 2. Use /tools to open the tool selector
10
10
  */
11
11
 
12
- import type { ExtensionAPI, ExtensionContext, ToolInfo } from "@astralyn/pi";
13
- import { getSettingsListTheme } from "@astralyn/pi";
12
+ import type { ExtensionAPI, ExtensionContext, ToolInfo } from "@earendil-works/pi-coding-agent";
13
+ import { getSettingsListTheme } from "@earendil-works/pi-coding-agent";
14
14
  import { Container, type SettingItem, SettingsList } from "@earendil-works/pi-tui";
15
15
 
16
16
  // State persisted to session
@@ -1,4 +1,4 @@
1
- import type { ExtensionAPI, ExtensionContext } from "@astralyn/pi";
1
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
2
2
 
3
3
  const COMPACT_THRESHOLD_TOKENS = 100_000;
4
4
 
@@ -10,12 +10,12 @@
10
10
  * 3. Inform the LLM where to find the complete output
11
11
  * 4. Custom rendering of tool calls and results
12
12
  *
13
- * The `rg` tool here wraps ripgrep with proper truncation. For Pi's built-in
14
- * implementation, use the published `createGrepTool` export from `@astralyn/pi`.
13
+ * The `rg` tool here wraps ripgrep with proper truncation. Compare this to the
14
+ * built-in `grep` tool in src/core/tools/grep.ts for a more complete implementation.
15
15
  */
16
16
 
17
17
  import { mkdtemp, writeFile } from "node:fs/promises";
18
- import type { ExtensionAPI } from "@astralyn/pi";
18
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
19
19
  import {
20
20
  DEFAULT_MAX_BYTES,
21
21
  DEFAULT_MAX_LINES,
@@ -23,7 +23,7 @@ import {
23
23
  type TruncationResult,
24
24
  truncateHead,
25
25
  withFileMutationQueue,
26
- } from "@astralyn/pi";
26
+ } from "@earendil-works/pi-coding-agent";
27
27
  import { Text } from "@earendil-works/pi-tui";
28
28
  import { execSync } from "child_process";
29
29
  import { tmpdir } from "os";
@@ -1,4 +1,4 @@
1
- import type { ExtensionAPI } from "@astralyn/pi";
1
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
3
  export default function widgetPlacementExtension(pi: ExtensionAPI) {
4
4
  pi.on("session_start", (_event, ctx) => {
@@ -5,7 +5,7 @@
5
5
  * Requires: npm install in this directory
6
6
  */
7
7
 
8
- import type { ExtensionAPI } from "@astralyn/pi";
8
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
9
9
  import ms from "ms";
10
10
  import { Type } from "typebox";
11
11
 
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "0.84.3",
3
+ "version": "0.87.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "0.84.3",
9
+ "version": "0.87.1",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "0.84.3",
4
+ "version": "0.87.1",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
@@ -16,7 +16,7 @@
16
16
  * /working-indicator reset Restore pi's default spinner
17
17
  */
18
18
 
19
- import type { ExtensionAPI, ExtensionContext, WorkingIndicatorOptions } from "@astralyn/pi";
19
+ import type { ExtensionAPI, ExtensionContext, WorkingIndicatorOptions } from "@earendil-works/pi-coding-agent";
20
20
 
21
21
  type WorkingIndicatorMode = "dot" | "none" | "pulse" | "spinner" | "default";
22
22
 
@@ -12,7 +12,7 @@
12
12
  * loader appears, not revert to the default gray "Working...".
13
13
  */
14
14
 
15
- import type { ExtensionAPI } from "@astralyn/pi";
15
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
16
16
 
17
17
  const CUSTOM_MESSAGE = "\x1b[38;2;155;86;63mWorking... (custom)\x1b[39m";
18
18
  const CUSTOM_INDICATOR = { frames: ["\x1b[38;2;155;86;63m●\x1b[39m"] };
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Run one prompt through a Pi RPC child process.
3
+ *
4
+ * Build the coding-agent package first, then run:
5
+ * npx tsx examples/rpc-client.ts "Explain this repository"
6
+ */
7
+
8
+ import { dirname, join } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ import { RpcClient } from "@astralyn/pi";
11
+
12
+ const exampleDirectory = dirname(fileURLToPath(import.meta.url));
13
+ const prompt = process.argv.slice(2).join(" ") || "Explain this repository in one paragraph.";
14
+
15
+ const client = new RpcClient({
16
+ cliPath: join(exampleDirectory, "../dist/cli.js"),
17
+ args: ["--no-session"],
18
+ });
19
+
20
+ const unsubscribe = client.onEvent((event) => {
21
+ if (event.type === "message_update" && event.assistantMessageEvent.type === "text_delta") {
22
+ process.stdout.write(event.assistantMessageEvent.delta);
23
+ } else if (event.type === "tool_execution_start") {
24
+ process.stderr.write(`\n[tool: ${event.toolName}]\n`);
25
+ }
26
+ });
27
+
28
+ try {
29
+ await client.start();
30
+ await client.promptAndWait(prompt);
31
+ process.stdout.write("\n");
32
+ } finally {
33
+ unsubscribe();
34
+ await client.stop();
35
+ }
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { spawn } from "node:child_process";
18
18
  import { dirname, join } from "node:path";
19
- import * as readline from "node:readline";
19
+ import { StringDecoder } from "node:string_decoder";
20
20
  import { fileURLToPath } from "node:url";
21
21
  import {
22
22
  type Component,
@@ -258,7 +258,7 @@ async function main() {
258
258
 
259
259
  const agent = spawn(
260
260
  "node",
261
- [cliPath, "--mode", "rpc", "--no-session", "--no-extension", "--extension", extensionPath],
261
+ [cliPath, "--mode", "rpc", "--no-session", "--no-extensions", "--extension", extensionPath],
262
262
  { stdio: ["pipe", "pipe", "pipe"] },
263
263
  );
264
264
 
@@ -518,9 +518,7 @@ async function main() {
518
518
 
519
519
  // -- Process agent stdout --
520
520
 
521
- const stdoutRl = readline.createInterface({ input: agent.stdout!, terminal: false });
522
-
523
- stdoutRl.on("line", (line) => {
521
+ function handleAgentLine(line: string): void {
524
522
  let data: Record<string, unknown>;
525
523
  try {
526
524
  data = JSON.parse(line);
@@ -583,6 +581,28 @@ async function main() {
583
581
  tui.requestRender();
584
582
  return;
585
583
  }
584
+ }
585
+
586
+ const stdoutDecoder = new StringDecoder("utf8");
587
+ let stdoutBuffer = "";
588
+
589
+ agent.stdout!.on("data", (chunk: Buffer) => {
590
+ stdoutBuffer += stdoutDecoder.write(chunk);
591
+ while (true) {
592
+ const newlineIndex = stdoutBuffer.indexOf("\n");
593
+ if (newlineIndex === -1) break;
594
+
595
+ const line = stdoutBuffer.slice(0, newlineIndex);
596
+ stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);
597
+ handleAgentLine(line.endsWith("\r") ? line.slice(0, -1) : line);
598
+ }
599
+ });
600
+
601
+ agent.stdout!.on("end", () => {
602
+ stdoutBuffer += stdoutDecoder.end();
603
+ if (stdoutBuffer.length > 0) {
604
+ handleAgentLine(stdoutBuffer.endsWith("\r") ? stdoutBuffer.slice(0, -1) : stdoutBuffer);
605
+ }
586
606
  });
587
607
 
588
608
  // -- User input --
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@astralyn/pi",
3
- "version": "0.87.0",
3
+ "version": "0.87.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@astralyn/pi",
9
- "version": "0.87.0",
9
+ "version": "0.87.2",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
- "@earendil-works/chord": "0.87.0",
13
- "@earendil-works/pi-agent-core": "0.87.0",
14
- "@earendil-works/pi-ai": "0.87.0",
15
- "@earendil-works/pi-tui": "0.87.0",
12
+ "@earendil-works/chord": "0.87.1",
13
+ "@earendil-works/pi-agent-core": "0.87.1",
14
+ "@earendil-works/pi-ai": "0.87.1",
15
+ "@earendil-works/pi-tui": "0.87.1",
16
16
  "@silvia-odwyer/photon-node": "0.3.4",
17
17
  "chalk": "6.0.0",
18
18
  "cross-spawn": "7.0.6",
@@ -36,9 +36,9 @@
36
36
  "@anthropic-ai/sandbox-runtime": "0.0.26",
37
37
  "@anthropic-ai/sdk": "0.52.0",
38
38
  "@biomejs/biome": "2.3.5",
39
- "@earendil-works/pi-client": "0.87.0",
40
- "@earendil-works/pi-protocol": "0.87.0",
41
- "@earendil-works/pi-server": "0.87.0",
39
+ "@earendil-works/pi-client": "0.87.1",
40
+ "@earendil-works/pi-protocol": "0.87.1",
41
+ "@earendil-works/pi-server": "0.87.1",
42
42
  "@types/cross-spawn": "6.0.6",
43
43
  "@types/hosted-git-info": "3.0.5",
44
44
  "@types/ms": "2.1.0",
@@ -626,9 +626,9 @@
626
626
  }
627
627
  },
628
628
  "node_modules/@earendil-works/chord": {
629
- "version": "0.87.0",
630
- "resolved": "https://registry.npmjs.org/@earendil-works/chord/-/chord-0.87.0.tgz",
631
- "integrity": "sha512-t8QOTf0GTHrsDSfcdtXuA9RCkh6mnR4l25N0SM/sgH7Ih25jH4tGXNbkGs9MWpV5xTu9MRPj4A7Zn1UEwQm9+g==",
629
+ "version": "0.87.1",
630
+ "resolved": "https://registry.npmjs.org/@earendil-works/chord/-/chord-0.87.1.tgz",
631
+ "integrity": "sha512-bg7IkJGFcEaMqqYgOGUiq5Ky9RghpRfrlZ8I/v/1b4bBZ02A7t3E+6uhPRbadwWb/kWsnVFbZsqOKRN4a3LLCg==",
632
632
  "license": "MIT",
633
633
  "dependencies": {
634
634
  "esbuild": "0.28.2"
@@ -638,14 +638,14 @@
638
638
  }
639
639
  },
640
640
  "node_modules/@earendil-works/pi-agent-core": {
641
- "version": "0.87.0",
642
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.87.0.tgz",
643
- "integrity": "sha512-c5b2FMdJ7C++HBa6AyBmusdf96gdgRqpF7J+UCq2yVGB28UETJvJ190HkgDWUaLPnOQQPbanjKMAm/TgRmFE2w==",
641
+ "version": "0.87.1",
642
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-agent-core/-/pi-agent-core-0.87.1.tgz",
643
+ "integrity": "sha512-Zev3B0HK7YS5A4EZQ2XnEqiJuirx6QBiltJ+LpmjV5a/+2IU0cfKtIfnkNkORK707XOvKBY2WRtk7cAwHpbh2Q==",
644
644
  "license": "MIT",
645
645
  "dependencies": {
646
- "@earendil-works/chord": "^0.87.0",
647
- "@earendil-works/pi-ai": "^0.87.0",
648
- "@earendil-works/pi-telemetry": "^0.87.0",
646
+ "@earendil-works/chord": "^0.87.1",
647
+ "@earendil-works/pi-ai": "^0.87.1",
648
+ "@earendil-works/pi-telemetry": "^0.87.1",
649
649
  "diff": "8.0.4",
650
650
  "ignore": "7.0.8",
651
651
  "typebox": "1.3.27",
@@ -656,14 +656,14 @@
656
656
  }
657
657
  },
658
658
  "node_modules/@earendil-works/pi-ai": {
659
- "version": "0.87.0",
660
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.87.0.tgz",
661
- "integrity": "sha512-lbRm+EMY6Jx3l+HLpbqbm9Yrhkc5u7EffLk2id+zJQEoBuR5I+tijGiZU8zlnuuCclmQOgH0PVjL9PLbeqJ9MQ==",
659
+ "version": "0.87.1",
660
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-0.87.1.tgz",
661
+ "integrity": "sha512-X/3PfQBnnoeVdO9Cv8zHghUMglzlgNZYGNzoPnbRoGnHl3Rw3TlA2UKSUB7BRHUOxMryHXYa8dnjWZlbRheDZA==",
662
662
  "license": "MIT",
663
663
  "dependencies": {
664
664
  "@anthropic-ai/sdk": "0.124.0",
665
665
  "@aws-sdk/client-bedrock-runtime": "3.1127.0",
666
- "@earendil-works/pi-telemetry": "^0.87.0",
666
+ "@earendil-works/pi-telemetry": "^0.87.1",
667
667
  "@google/genai": "2.21.0",
668
668
  "@smithy/node-http-handler": "4.12.1",
669
669
  "http-proxy-agent": "9.1.0",
@@ -701,27 +701,27 @@
701
701
  }
702
702
  },
703
703
  "node_modules/@earendil-works/pi-client": {
704
- "version": "0.87.0",
705
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-client/-/pi-client-0.87.0.tgz",
706
- "integrity": "sha512-SzlKFULcz3VchpfVizd9fTxaFHxhIe/Dpn9CDHthqRzUx6Sym2tWwlveqdjD4V81yid+r7VEziZuHYYqNt4+kA==",
704
+ "version": "0.87.1",
705
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-client/-/pi-client-0.87.1.tgz",
706
+ "integrity": "sha512-x8dfZ7ppAao9SDnZvD5/DErVdq2fI7hg4lFj7qEhtgo6wimrRafGSLsqLklFVjb6kxU2W3j9F4RZz0rRcb0cwA==",
707
707
  "dev": true,
708
708
  "license": "MIT",
709
709
  "dependencies": {
710
- "@earendil-works/chord": "^0.87.0",
711
- "@earendil-works/pi-protocol": "^0.87.0"
710
+ "@earendil-works/chord": "^0.87.1",
711
+ "@earendil-works/pi-protocol": "^0.87.1"
712
712
  },
713
713
  "engines": {
714
714
  "node": ">=22.19.0"
715
715
  }
716
716
  },
717
717
  "node_modules/@earendil-works/pi-protocol": {
718
- "version": "0.87.0",
719
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-protocol/-/pi-protocol-0.87.0.tgz",
720
- "integrity": "sha512-H6tL0BGj5RbvwPQq7YnaGSudASvmPbHBP3FVqeIIJa91hURB6DdKCmITQkJwQz8nR/bc4B/r2tZXgzlVTBYOrQ==",
718
+ "version": "0.87.1",
719
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-protocol/-/pi-protocol-0.87.1.tgz",
720
+ "integrity": "sha512-48WVjryAIiKOJXnKgO15h2MT/oeH5uf0S4DykcVj3ZrxMTDSGxcUaS5VtvHtFQ1rZSSIjkVcblE13k0GksBuoQ==",
721
721
  "dev": true,
722
722
  "license": "MIT",
723
723
  "dependencies": {
724
- "@earendil-works/chord": "^0.87.0",
724
+ "@earendil-works/chord": "^0.87.1",
725
725
  "typebox": "1.3.27"
726
726
  },
727
727
  "engines": {
@@ -729,33 +729,33 @@
729
729
  }
730
730
  },
731
731
  "node_modules/@earendil-works/pi-server": {
732
- "version": "0.87.0",
733
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-server/-/pi-server-0.87.0.tgz",
734
- "integrity": "sha512-hnxO8xe1iUIvPiPiVmj/UkfVTeOHPam2b62FuvB4OJRqhqDCVRPec+KJZST70c9rb+v1QTQnbimeNop5Ji5N5A==",
732
+ "version": "0.87.1",
733
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-server/-/pi-server-0.87.1.tgz",
734
+ "integrity": "sha512-EZYQ6mSOv7IyDcWoBflNGJcyIBjTnQY9W4z1tF3vOMY5xbksHOsVVzU9Kh49z8iIXGYNawKZSyjaWi9OJjO7Sw==",
735
735
  "dev": true,
736
736
  "license": "MIT",
737
737
  "dependencies": {
738
- "@earendil-works/chord": "^0.87.0",
739
- "@earendil-works/pi-agent-core": "^0.87.0",
740
- "@earendil-works/pi-protocol": "^0.87.0"
738
+ "@earendil-works/chord": "^0.87.1",
739
+ "@earendil-works/pi-agent-core": "^0.87.1",
740
+ "@earendil-works/pi-protocol": "^0.87.1"
741
741
  },
742
742
  "engines": {
743
743
  "node": ">=22.19.0"
744
744
  }
745
745
  },
746
746
  "node_modules/@earendil-works/pi-telemetry": {
747
- "version": "0.87.0",
748
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-telemetry/-/pi-telemetry-0.87.0.tgz",
749
- "integrity": "sha512-IEUMnV6mgHyOMfAxa4CKXoBKKfHM8KxNjbXWM4Bps/iLJcFMf8hQsEZ+95VnVTc7C0cU77Rmdxt773C35jb5AA==",
747
+ "version": "0.87.1",
748
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-telemetry/-/pi-telemetry-0.87.1.tgz",
749
+ "integrity": "sha512-MC6TRQH5lgMXpcN+Vku2WMI2T8BsiUPzMQHGo81uqFZD3/9O79WWJAysEDGuzduP6R4tvtgwMLwmqIxynM10JQ==",
750
750
  "license": "MIT",
751
751
  "engines": {
752
752
  "node": ">=22.19.0"
753
753
  }
754
754
  },
755
755
  "node_modules/@earendil-works/pi-tui": {
756
- "version": "0.87.0",
757
- "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.87.0.tgz",
758
- "integrity": "sha512-7gTC0XOgQfVWg4yGxwHINBpCnGl9p4KEC7PXIc8gAwc/cyxSW4VuFQrp+r1YD3oM+rBkoepKwAt6w6+VJ7BCaw==",
756
+ "version": "0.87.1",
757
+ "resolved": "https://registry.npmjs.org/@earendil-works/pi-tui/-/pi-tui-0.87.1.tgz",
758
+ "integrity": "sha512-YEH2vRyOeiO7hhN6j6AE6YwKSq2Kz2f3XR8bj1TbR+aGE/JsnY1hLPMI2pvaZfRM1n9Y00tejxFQ4zbzvF7nkQ==",
759
759
  "license": "MIT",
760
760
  "dependencies": {
761
761
  "get-east-asian-width": "1.6.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astralyn/pi",
3
- "version": "0.87.0",
3
+ "version": "0.87.2",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -62,10 +62,10 @@
62
62
  "prepublishOnly": "npm run clean && npm run build"
63
63
  },
64
64
  "dependencies": {
65
- "@earendil-works/chord": "0.87.0",
66
- "@earendil-works/pi-agent-core": "0.87.0",
67
- "@earendil-works/pi-ai": "0.87.0",
68
- "@earendil-works/pi-tui": "0.87.0",
65
+ "@earendil-works/chord": "0.87.1",
66
+ "@earendil-works/pi-agent-core": "0.87.1",
67
+ "@earendil-works/pi-ai": "0.87.1",
68
+ "@earendil-works/pi-tui": "0.87.1",
69
69
  "@silvia-odwyer/photon-node": "0.3.4",
70
70
  "chalk": "6.0.0",
71
71
  "cross-spawn": "7.0.6",
@@ -86,9 +86,9 @@
86
86
  "@anthropic-ai/sandbox-runtime": "0.0.26",
87
87
  "@anthropic-ai/sdk": "0.52.0",
88
88
  "@biomejs/biome": "2.3.5",
89
- "@earendil-works/pi-client": "0.87.0",
90
- "@earendil-works/pi-protocol": "0.87.0",
91
- "@earendil-works/pi-server": "0.87.0",
89
+ "@earendil-works/pi-client": "0.87.1",
90
+ "@earendil-works/pi-protocol": "0.87.1",
91
+ "@earendil-works/pi-server": "0.87.1",
92
92
  "@types/cross-spawn": "6.0.6",
93
93
  "@types/hosted-git-info": "3.0.5",
94
94
  "@types/ms": "2.1.0",