@mariozechner/pi-coding-agent 0.60.0 → 0.61.1

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 (195) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +11 -1
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +1 -0
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/bun/register-bedrock.d.ts.map +1 -1
  7. package/dist/bun/register-bedrock.js +3 -84
  8. package/dist/bun/register-bedrock.js.map +1 -1
  9. package/dist/cli/session-picker.d.ts.map +1 -1
  10. package/dist/cli/session-picker.js +2 -1
  11. package/dist/cli/session-picker.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +1 -0
  14. package/dist/cli.js.map +1 -1
  15. package/dist/core/agent-session.d.ts +17 -2
  16. package/dist/core/agent-session.d.ts.map +1 -1
  17. package/dist/core/agent-session.js +61 -6
  18. package/dist/core/agent-session.js.map +1 -1
  19. package/dist/core/exec.d.ts.map +1 -1
  20. package/dist/core/exec.js +7 -3
  21. package/dist/core/exec.js.map +1 -1
  22. package/dist/core/export-html/template.css +43 -13
  23. package/dist/core/export-html/template.html +1 -0
  24. package/dist/core/export-html/template.js +107 -0
  25. package/dist/core/extensions/index.d.ts +1 -1
  26. package/dist/core/extensions/index.d.ts.map +1 -1
  27. package/dist/core/extensions/index.js.map +1 -1
  28. package/dist/core/extensions/loader.d.ts.map +1 -1
  29. package/dist/core/extensions/loader.js +4 -4
  30. package/dist/core/extensions/loader.js.map +1 -1
  31. package/dist/core/extensions/runner.d.ts +1 -1
  32. package/dist/core/extensions/runner.d.ts.map +1 -1
  33. package/dist/core/extensions/runner.js +45 -33
  34. package/dist/core/extensions/runner.js.map +1 -1
  35. package/dist/core/extensions/types.d.ts +4 -3
  36. package/dist/core/extensions/types.d.ts.map +1 -1
  37. package/dist/core/extensions/types.js.map +1 -1
  38. package/dist/core/footer-data-provider.d.ts +9 -2
  39. package/dist/core/footer-data-provider.d.ts.map +1 -1
  40. package/dist/core/footer-data-provider.js +85 -13
  41. package/dist/core/footer-data-provider.js.map +1 -1
  42. package/dist/core/index.d.ts +1 -1
  43. package/dist/core/index.d.ts.map +1 -1
  44. package/dist/core/index.js.map +1 -1
  45. package/dist/core/keybindings.d.ts +268 -51
  46. package/dist/core/keybindings.d.ts.map +1 -1
  47. package/dist/core/keybindings.js +221 -143
  48. package/dist/core/keybindings.js.map +1 -1
  49. package/dist/core/model-registry.d.ts +1 -0
  50. package/dist/core/model-registry.d.ts.map +1 -1
  51. package/dist/core/model-registry.js +23 -14
  52. package/dist/core/model-registry.js.map +1 -1
  53. package/dist/core/model-resolver.d.ts.map +1 -1
  54. package/dist/core/model-resolver.js +4 -4
  55. package/dist/core/model-resolver.js.map +1 -1
  56. package/dist/core/package-manager.d.ts +2 -0
  57. package/dist/core/package-manager.d.ts.map +1 -1
  58. package/dist/core/package-manager.js +42 -1
  59. package/dist/core/package-manager.js.map +1 -1
  60. package/dist/core/sdk.d.ts +2 -2
  61. package/dist/core/sdk.d.ts.map +1 -1
  62. package/dist/core/sdk.js +4 -4
  63. package/dist/core/sdk.js.map +1 -1
  64. package/dist/core/session-manager.d.ts +5 -0
  65. package/dist/core/session-manager.d.ts.map +1 -1
  66. package/dist/core/session-manager.js +2 -2
  67. package/dist/core/session-manager.js.map +1 -1
  68. package/dist/core/slash-commands.d.ts.map +1 -1
  69. package/dist/core/slash-commands.js +2 -1
  70. package/dist/core/slash-commands.js.map +1 -1
  71. package/dist/core/tools/bash.d.ts.map +1 -1
  72. package/dist/core/tools/bash.js +12 -10
  73. package/dist/core/tools/bash.js.map +1 -1
  74. package/dist/core/tools/edit.d.ts.map +1 -1
  75. package/dist/core/tools/edit.js +3 -2
  76. package/dist/core/tools/edit.js.map +1 -1
  77. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  78. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  79. package/dist/core/tools/file-mutation-queue.js +37 -0
  80. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  81. package/dist/core/tools/index.d.ts +1 -0
  82. package/dist/core/tools/index.d.ts.map +1 -1
  83. package/dist/core/tools/index.js +1 -0
  84. package/dist/core/tools/index.js.map +1 -1
  85. package/dist/core/tools/write.d.ts.map +1 -1
  86. package/dist/core/tools/write.js +6 -3
  87. package/dist/core/tools/write.js.map +1 -1
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +2 -2
  91. package/dist/index.js.map +1 -1
  92. package/dist/main.d.ts.map +1 -1
  93. package/dist/main.js +10 -5
  94. package/dist/main.js.map +1 -1
  95. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  96. package/dist/modes/interactive/components/bash-execution.js +4 -4
  97. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  98. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  100. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  101. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  102. package/dist/modes/interactive/components/branch-summary-message.js +2 -2
  103. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  104. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  105. package/dist/modes/interactive/components/compaction-summary-message.js +2 -2
  106. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  107. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  108. package/dist/modes/interactive/components/config-selector.js +8 -8
  109. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  110. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  111. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  112. package/dist/modes/interactive/components/custom-editor.js +6 -6
  113. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  114. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  115. package/dist/modes/interactive/components/extension-editor.js +9 -9
  116. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  117. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  118. package/dist/modes/interactive/components/extension-input.js +5 -5
  119. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  120. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  121. package/dist/modes/interactive/components/extension-selector.js +8 -8
  122. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  123. package/dist/modes/interactive/components/index.d.ts +1 -1
  124. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  125. package/dist/modes/interactive/components/index.js +1 -1
  126. package/dist/modes/interactive/components/index.js.map +1 -1
  127. package/dist/modes/interactive/components/keybinding-hints.d.ts +3 -36
  128. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  129. package/dist/modes/interactive/components/keybinding-hints.js +5 -44
  130. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  131. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  132. package/dist/modes/interactive/components/login-dialog.js +6 -6
  133. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  134. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  135. package/dist/modes/interactive/components/model-selector.js +12 -8
  136. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  137. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  138. package/dist/modes/interactive/components/oauth-selector.js +6 -6
  139. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  140. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/scoped-models-selector.js +4 -4
  142. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  143. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  144. package/dist/modes/interactive/components/session-selector.js +32 -35
  145. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  146. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  147. package/dist/modes/interactive/components/skill-invocation-message.js +2 -2
  148. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  149. package/dist/modes/interactive/components/tool-execution.d.ts +7 -0
  150. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  151. package/dist/modes/interactive/components/tool-execution.js +51 -6
  152. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  153. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  154. package/dist/modes/interactive/components/tree-selector.js +15 -15
  155. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  156. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  157. package/dist/modes/interactive/components/user-message-selector.js +6 -6
  158. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  159. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  160. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  161. package/dist/modes/interactive/interactive-mode.js +156 -91
  162. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  163. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  164. package/dist/modes/interactive/theme/theme.js +49 -37
  165. package/dist/modes/interactive/theme/theme.js.map +1 -1
  166. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  167. package/dist/modes/rpc/rpc-mode.js +4 -1
  168. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  169. package/dist/utils/child-process.d.ts +11 -0
  170. package/dist/utils/child-process.d.ts.map +1 -0
  171. package/dist/utils/child-process.js +78 -0
  172. package/dist/utils/child-process.js.map +1 -0
  173. package/dist/utils/clipboard-native.d.ts +1 -0
  174. package/dist/utils/clipboard-native.d.ts.map +1 -1
  175. package/dist/utils/clipboard-native.js.map +1 -1
  176. package/dist/utils/clipboard.d.ts +1 -1
  177. package/dist/utils/clipboard.d.ts.map +1 -1
  178. package/dist/utils/clipboard.js +11 -1
  179. package/dist/utils/clipboard.js.map +1 -1
  180. package/docs/extensions.md +44 -7
  181. package/docs/keybindings.md +101 -112
  182. package/docs/providers.md +7 -0
  183. package/docs/rpc.md +4 -4
  184. package/docs/sdk.md +2 -2
  185. package/examples/extensions/antigravity-image-gen.ts +5 -3
  186. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  187. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  188. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  189. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  190. package/examples/extensions/subagent/index.ts +28 -6
  191. package/examples/extensions/tool-override.ts +9 -7
  192. package/examples/extensions/truncated-tool.ts +6 -3
  193. package/examples/extensions/with-deps/package-lock.json +2 -2
  194. package/examples/extensions/with-deps/package.json +1 -1
  195. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,68 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.61.1] - 2026-03-20
4
+
5
+ ### New Features
6
+
7
+ - Typed `tool_call` handler return values via `ToolCallEventResult` exports from the top-level package and core extension entry. See [docs/extensions.md](docs/extensions.md).
8
+ - Updated default models for `zai`, `cerebras`, `minimax`, and `minimax-cn`, and aligned MiniMax catalog coverage and limits with the current provider lineup. See [docs/models.md](docs/models.md) and [docs/providers.md](docs/providers.md).
9
+
10
+ ### Added
11
+
12
+ - Added `ToolCallEventResult` to the `@mariozechner/pi-coding-agent` top-level and core extension exports so extension authors can type explicit `tool_call` handler return values ([#2458](https://github.com/badlogic/pi-mono/issues/2458))
13
+
14
+ ### Changed
15
+
16
+ - Changed the default models for `zai`, `cerebras`, `minimax`, and `minimax-cn` to match the current provider lineup, and added missing `MiniMax-M2.1-highspeed` model entries with normalized MiniMax context limits ([#2445](https://github.com/badlogic/pi-mono/pull/2445) by [@1500256797](https://github.com/1500256797))
17
+
18
+ ### Fixed
19
+
20
+ - Fixed `ctrl+z` suspend and `fg` resume reliability by keeping the process alive until the `SIGCONT` handler restores the TUI, avoiding immediate process exit in environments with no other live event-loop handles ([#2454](https://github.com/badlogic/pi-mono/issues/2454))
21
+ - Fixed `createAgentSession({ agentDir })` to derive the default persisted session path from the provided `agentDir`, keeping session storage aligned with settings, auth, models, and resource loading ([#2457](https://github.com/badlogic/pi-mono/issues/2457))
22
+ - Fixed shared keybinding resolution to stop user overrides from evicting unrelated default shortcuts such as selector confirm and editor cursor keys ([#2455](https://github.com/badlogic/pi-mono/issues/2455))
23
+ - Fixed Termux software keyboard height changes from forcing full-screen redraws and replaying TUI history on every toggle ([#2467](https://github.com/badlogic/pi-mono/issues/2467))
24
+ - Fixed project-local npm package updates to install npm `latest` instead of reusing stale saved dependency ranges, and added `Did you mean ...?` suggestions when `pi update <source>` omits the configured npm or git source prefix ([#2459](https://github.com/badlogic/pi-mono/issues/2459))
25
+
26
+ ## [0.61.0] - 2026-03-20
27
+
28
+ ### New Features
29
+
30
+ - Namespaced keybinding ids and a unified keybinding manager across the app and TUI. See [docs/keybindings.md](docs/keybindings.md) and [docs/extensions.md](docs/extensions.md).
31
+ - JSONL session export and import via `/export <path.jsonl>` and `/import <path.jsonl>`. See [README.md](README.md) and [docs/session.md](docs/session.md).
32
+ - Resizable sidebar in HTML share and export views. See [README.md](README.md).
33
+
34
+ ### Breaking Changes
35
+
36
+ - Interactive keybinding ids are now namespaced, and `keybindings.json` now uses those same canonical namespaced ids. Older config files are migrated automatically on startup. Custom editors and extension UI components still receive an injected `keybindings: KeybindingsManager`. They do not call `getKeybindings()` or `setKeybindings()` themselves. Declaration merging applies to that injected type ([#2391](https://github.com/badlogic/pi-mono/issues/2391))
37
+ - Extension author migration: update `keyHint()`, `keyText()`, and injected `keybindings.matches(...)` calls from old built-in names like `"expandTools"`, `"selectConfirm"`, and `"interrupt"` to namespaced ids like `"app.tools.expand"`, `"tui.select.confirm"`, and `"app.interrupt"`. See [docs/keybindings.md](docs/keybindings.md) for the full list. `pi.registerShortcut("ctrl+shift+p", ...)` is unchanged because extension shortcuts still use raw key combos, not keybinding ids.
38
+
39
+ ### Added
40
+
41
+ - Added `gpt-5.4-mini` to the `openai-codex` model catalog ([#2334](https://github.com/badlogic/pi-mono/pull/2334) by [@justram](https://github.com/justram))
42
+ - Added JSONL session export and import via `/export <path.jsonl>` and `/import <path.jsonl>` ([#2356](https://github.com/badlogic/pi-mono/pull/2356) by [@hjanuschka](https://github.com/hjanuschka))
43
+ - Added a resizable sidebar to HTML share and export views ([#2435](https://github.com/badlogic/pi-mono/pull/2435) by [@dmmulroy](https://github.com/dmmulroy))
44
+
45
+ ### Fixed
46
+
47
+ - Tests for session-selector-rename and tree-selector are now keybinding-agnostic, resetting editor keybindings to defaults before each test so user `keybindings.json` cannot cause failures ([#2360](https://github.com/badlogic/pi-mono/issues/2360))
48
+ - Fixed custom `keybindings.json` overrides to shadow conflicting default shortcuts globally, so bindings such as `cursorUp: ["up", "ctrl+p"]` no longer leave default actions like model cycling active ([#2391](https://github.com/badlogic/pi-mono/issues/2391))
49
+ - Fixed concurrent `edit` and `write` mutations targeting the same file to run serially, preventing interleaved file writes from overwriting each other ([#2327](https://github.com/badlogic/pi-mono/issues/2327))
50
+ - Fixed RPC mode to redirect unexpected stdout writes to stderr so JSONL responses remain parseable ([#2388](https://github.com/badlogic/pi-mono/issues/2388))
51
+ - Fixed auto-retry with tool-using retry responses so `session.prompt()` waits for the full retry loop, including tool execution, before returning ([#2440](https://github.com/badlogic/pi-mono/pull/2440) by [@pasky](https://github.com/pasky))
52
+ - Fixed `/model` to refresh scoped model lists after `models.json` changes, avoiding stale selector contents ([#2408](https://github.com/badlogic/pi-mono/pull/2408) by [@Perlence](https://github.com/Perlence))
53
+ - Fixed `validateToolArguments()` to fall back gracefully when AJV schema compilation is blocked in restricted runtimes such as Cloudflare Workers, allowing tool execution to proceed without schema validation ([#2395](https://github.com/badlogic/pi-mono/issues/2395))
54
+ - Fixed CLI startup to suppress process warnings from leaking into terminal, print, and RPC output ([#2404](https://github.com/badlogic/pi-mono/issues/2404))
55
+ - Fixed bash tool rendering to show elapsed time at the bottom of the tool block ([#2406](https://github.com/badlogic/pi-mono/issues/2406))
56
+ - Fixed custom theme file watching to reload updated theme contents from disk instead of keeping stale cached theme data ([#2417](https://github.com/badlogic/pi-mono/issues/2417), [#2003](https://github.com/badlogic/pi-mono/issues/2003))
57
+ - Fixed footer Git branch refreshes to run asynchronously so branch watcher updates do not block the UI ([#2418](https://github.com/badlogic/pi-mono/issues/2418))
58
+ - Fixed invalid extension provider registrations to surface an extension error without preventing other providers from loading ([#2431](https://github.com/badlogic/pi-mono/issues/2431))
59
+ - Fixed Windows bash execution hanging for commands that spawn detached descendants inheriting stdout/stderr handles, which caused `agent-browser` and similar commands to spin forever ([#2389](https://github.com/badlogic/pi-mono/pull/2389) by [@mrexodia](https://github.com/mrexodia))
60
+ - Fixed `google-vertex` API key resolution to ignore placeholder auth markers like `<authenticated>` and fall back to ADC instead of sending them as literal API keys ([#2335](https://github.com/badlogic/pi-mono/issues/2335))
61
+ - Fixed desktop clipboard text copy to prefer native OS clipboard integration before shell fallbacks, improving reliability on macOS and Windows ([#2347](https://github.com/badlogic/pi-mono/issues/2347))
62
+ - Fixed Bun Bedrock provider registration to survive provider resets and session reloads in compiled binaries ([#2350](https://github.com/badlogic/pi-mono/pull/2350) by [@unexge](https://github.com/unexge))
63
+ - Fixed OpenRouter reasoning requests to use the provider's nested reasoning payload, restoring thinking level support for OpenRouter models and custom compat settings ([#2298](https://github.com/badlogic/pi-mono/pull/2298) by [@PriNova](https://github.com/PriNova))
64
+ - Fixed Bedrock application inference profiles to support prompt caching when `AWS_BEDROCK_FORCE_CACHE=1` is set, covering profile ARNs that do not expose the underlying Claude model name ([#2346](https://github.com/badlogic/pi-mono/pull/2346) by [@haoqixu](https://github.com/haoqixu))
65
+
3
66
  ## [0.60.0] - 2026-03-18
4
67
 
5
68
  ### New Features
package/README.md CHANGED
@@ -1,3 +1,13 @@
1
+ <!-- OSS_WEEKEND_START -->
2
+ # 🏖️ OSS Weekend
3
+
4
+ **Issue tracker reopens Monday, March 23, 2026.**
5
+
6
+ OSS weekend runs Friday, March 20, 2026 through Monday, March 23, 2026. New issues are auto-closed during this time. For support, join [Discord](https://discord.com/invite/3cU7Bz4UPx).
7
+ <!-- OSS_WEEKEND_END -->
8
+
9
+ ---
10
+
1
11
  <p align="center">
2
12
  <a href="https://shittycodingagent.ai">
3
13
  <img src="https://shittycodingagent.ai/logo.svg" alt="pi logo" width="128">
@@ -181,7 +191,7 @@ See `/hotkeys` for the full list. Customize via `~/.pi/agent/keybindings.json`.
181
191
 
182
192
  Submit messages while the agent is working:
183
193
 
184
- - **Enter** queues a *steering* message, delivered after current tool execution (interrupts remaining tools)
194
+ - **Enter** queues a *steering* message, delivered after the current assistant turn finishes executing its tool calls
185
195
  - **Alt+Enter** queues a *follow-up* message, delivered only after the agent finishes all work
186
196
  - **Escape** aborts and restores queued messages to editor
187
197
  - **Alt+Up** retrieves queued messages back to editor
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bun/cli.ts"],"names":[],"mappings":"","sourcesContent":["#!/usr/bin/env node\nprocess.title = \"pi\";\n\nawait import(\"./register-bedrock.js\");\nawait import(\"../cli.js\");\n"]}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/bun/cli.ts"],"names":[],"mappings":"","sourcesContent":["#!/usr/bin/env node\nprocess.title = \"pi\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nawait import(\"./register-bedrock.js\");\nawait import(\"../cli.js\");\n"]}
package/dist/bun/cli.js CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  process.title = "pi";
3
+ process.emitWarning = (() => { });
3
4
  await import("./register-bedrock.js");
4
5
  await import("../cli.js");
5
6
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bun/cli.ts"],"names":[],"mappings":";AACA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AAErB,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACtC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nprocess.title = \"pi\";\n\nawait import(\"./register-bedrock.js\");\nawait import(\"../cli.js\");\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bun/cli.ts"],"names":[],"mappings":";AACA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACrB,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAA+B,CAAC;AAE/D,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;AACtC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nprocess.title = \"pi\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nawait import(\"./register-bedrock.js\");\nawait import(\"../cli.js\");\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"register-bedrock.d.ts","sourceRoot":"","sources":["../../src/bun/register-bedrock.ts"],"names":[],"mappings":"","sourcesContent":["import {\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\tcreateAssistantMessageEventStream,\n\ttype Model,\n\tregisterApiProvider,\n\ttype SimpleStreamOptions,\n\ttype StreamFunction,\n\ttype StreamOptions,\n} from \"@mariozechner/pi-ai\";\n\ninterface LazyBedrockProviderModule {\n\tstreamBedrock: StreamFunction<\"bedrock-converse-stream\", StreamOptions>;\n\tstreamSimpleBedrock: StreamFunction<\"bedrock-converse-stream\", SimpleStreamOptions>;\n}\n\nlet bedrockProviderModulePromise: Promise<LazyBedrockProviderModule> | undefined;\n\nfunction forwardStream(\n\ttarget: ReturnType<typeof createAssistantMessageEventStream>,\n\tsource: AsyncIterable<AssistantMessageEvent>,\n): void {\n\t(async () => {\n\t\tfor await (const event of source) {\n\t\t\ttarget.push(event);\n\t\t}\n\t\ttarget.end();\n\t})();\n}\n\nfunction createLazyLoadErrorMessage(model: Model<\"bedrock-converse-stream\">, error: unknown): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"error\",\n\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction loadBedrockProviderModule(): Promise<LazyBedrockProviderModule> {\n\tif (!bedrockProviderModulePromise) {\n\t\tbedrockProviderModulePromise = import(\"@mariozechner/pi-ai/bedrock-provider\").then(\n\t\t\t({ bedrockProviderModule }) => {\n\t\t\t\treturn {\n\t\t\t\t\tstreamBedrock: (model, context, options) => {\n\t\t\t\t\t\tconst outer = createAssistantMessageEventStream();\n\t\t\t\t\t\tconst inner = bedrockProviderModule.streamBedrock(model, context, options);\n\t\t\t\t\t\tforwardStream(outer, inner);\n\t\t\t\t\t\treturn outer;\n\t\t\t\t\t},\n\t\t\t\t\tstreamSimpleBedrock: (model, context, options) => {\n\t\t\t\t\t\tconst outer = createAssistantMessageEventStream();\n\t\t\t\t\t\tconst inner = bedrockProviderModule.streamSimpleBedrock(model, context, options);\n\t\t\t\t\t\tforwardStream(outer, inner);\n\t\t\t\t\t\treturn outer;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t);\n\t}\n\treturn bedrockProviderModulePromise;\n}\n\nconst streamBedrockLazy: StreamFunction<\"bedrock-converse-stream\", StreamOptions> = (model, context, options) => {\n\tconst outer = createAssistantMessageEventStream();\n\n\tloadBedrockProviderModule()\n\t\t.then((module) => {\n\t\t\tconst inner = module.streamBedrock(model, context, options);\n\t\t\tforwardStream(outer, inner);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconst message = createLazyLoadErrorMessage(model, error);\n\t\t\touter.push({ type: \"error\", reason: \"error\", error: message });\n\t\t\touter.end(message);\n\t\t});\n\n\treturn outer;\n};\n\nconst streamSimpleBedrockLazy: StreamFunction<\"bedrock-converse-stream\", SimpleStreamOptions> = (\n\tmodel,\n\tcontext,\n\toptions,\n) => {\n\tconst outer = createAssistantMessageEventStream();\n\n\tloadBedrockProviderModule()\n\t\t.then((module) => {\n\t\t\tconst inner = module.streamSimpleBedrock(model, context, options);\n\t\t\tforwardStream(outer, inner);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconst message = createLazyLoadErrorMessage(model, error);\n\t\t\touter.push({ type: \"error\", reason: \"error\", error: message });\n\t\t\touter.end(message);\n\t\t});\n\n\treturn outer;\n};\n\nregisterApiProvider({\n\tapi: \"bedrock-converse-stream\",\n\tstream: streamBedrockLazy,\n\tstreamSimple: streamSimpleBedrockLazy,\n});\n"]}
1
+ {"version":3,"file":"register-bedrock.d.ts","sourceRoot":"","sources":["../../src/bun/register-bedrock.ts"],"names":[],"mappings":"","sourcesContent":["import { setBedrockProviderModule } from \"@mariozechner/pi-ai\";\nimport { bedrockProviderModule } from \"@mariozechner/pi-ai/bedrock-provider\";\n\nsetBedrockProviderModule(bedrockProviderModule);\n"]}
@@ -1,85 +1,4 @@
1
- import { createAssistantMessageEventStream, registerApiProvider, } from "@mariozechner/pi-ai";
2
- let bedrockProviderModulePromise;
3
- function forwardStream(target, source) {
4
- (async () => {
5
- for await (const event of source) {
6
- target.push(event);
7
- }
8
- target.end();
9
- })();
10
- }
11
- function createLazyLoadErrorMessage(model, error) {
12
- return {
13
- role: "assistant",
14
- content: [],
15
- api: model.api,
16
- provider: model.provider,
17
- model: model.id,
18
- usage: {
19
- input: 0,
20
- output: 0,
21
- cacheRead: 0,
22
- cacheWrite: 0,
23
- totalTokens: 0,
24
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
25
- },
26
- stopReason: "error",
27
- errorMessage: error instanceof Error ? error.message : String(error),
28
- timestamp: Date.now(),
29
- };
30
- }
31
- function loadBedrockProviderModule() {
32
- if (!bedrockProviderModulePromise) {
33
- bedrockProviderModulePromise = import("@mariozechner/pi-ai/bedrock-provider").then(({ bedrockProviderModule }) => {
34
- return {
35
- streamBedrock: (model, context, options) => {
36
- const outer = createAssistantMessageEventStream();
37
- const inner = bedrockProviderModule.streamBedrock(model, context, options);
38
- forwardStream(outer, inner);
39
- return outer;
40
- },
41
- streamSimpleBedrock: (model, context, options) => {
42
- const outer = createAssistantMessageEventStream();
43
- const inner = bedrockProviderModule.streamSimpleBedrock(model, context, options);
44
- forwardStream(outer, inner);
45
- return outer;
46
- },
47
- };
48
- });
49
- }
50
- return bedrockProviderModulePromise;
51
- }
52
- const streamBedrockLazy = (model, context, options) => {
53
- const outer = createAssistantMessageEventStream();
54
- loadBedrockProviderModule()
55
- .then((module) => {
56
- const inner = module.streamBedrock(model, context, options);
57
- forwardStream(outer, inner);
58
- })
59
- .catch((error) => {
60
- const message = createLazyLoadErrorMessage(model, error);
61
- outer.push({ type: "error", reason: "error", error: message });
62
- outer.end(message);
63
- });
64
- return outer;
65
- };
66
- const streamSimpleBedrockLazy = (model, context, options) => {
67
- const outer = createAssistantMessageEventStream();
68
- loadBedrockProviderModule()
69
- .then((module) => {
70
- const inner = module.streamSimpleBedrock(model, context, options);
71
- forwardStream(outer, inner);
72
- })
73
- .catch((error) => {
74
- const message = createLazyLoadErrorMessage(model, error);
75
- outer.push({ type: "error", reason: "error", error: message });
76
- outer.end(message);
77
- });
78
- return outer;
79
- };
80
- registerApiProvider({
81
- api: "bedrock-converse-stream",
82
- stream: streamBedrockLazy,
83
- streamSimple: streamSimpleBedrockLazy,
84
- });
1
+ import { setBedrockProviderModule } from "@mariozechner/pi-ai";
2
+ import { bedrockProviderModule } from "@mariozechner/pi-ai/bedrock-provider";
3
+ setBedrockProviderModule(bedrockProviderModule);
85
4
  //# sourceMappingURL=register-bedrock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register-bedrock.js","sourceRoot":"","sources":["../../src/bun/register-bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,iCAAiC,EAEjC,mBAAmB,GAInB,MAAM,qBAAqB,CAAC;AAO7B,IAAI,4BAA4E,CAAC;AAEjF,SAAS,aAAa,CACrB,MAA4D,EAC5D,MAA4C,EACrC;IACP,CAAC,KAAK,IAAI,EAAE,CAAC;QACZ,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,CAAC;IAAA,CACb,CAAC,EAAE,CAAC;AAAA,CACL;AAED,SAAS,0BAA0B,CAAC,KAAuC,EAAE,KAAc,EAAoB;IAC9G,OAAO;QACN,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,EAAE;QACf,KAAK,EAAE;YACN,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;SACpE;QACD,UAAU,EAAE,OAAO;QACnB,YAAY,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QACpE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACrB,CAAC;AAAA,CACF;AAED,SAAS,yBAAyB,GAAuC;IACxE,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACnC,4BAA4B,GAAG,MAAM,CAAC,sCAAsC,CAAC,CAAC,IAAI,CACjF,CAAC,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC;YAC9B,OAAO;gBACN,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;oBAC3C,MAAM,KAAK,GAAG,iCAAiC,EAAE,CAAC;oBAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC3E,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC5B,OAAO,KAAK,CAAC;gBAAA,CACb;gBACD,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;oBACjD,MAAM,KAAK,GAAG,iCAAiC,EAAE,CAAC;oBAClD,MAAM,KAAK,GAAG,qBAAqB,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBACjF,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC5B,OAAO,KAAK,CAAC;gBAAA,CACb;aACD,CAAC;QAAA,CACF,CACD,CAAC;IACH,CAAC;IACD,OAAO,4BAA4B,CAAC;AAAA,CACpC;AAED,MAAM,iBAAiB,GAA6D,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC;IAChH,MAAM,KAAK,GAAG,iCAAiC,EAAE,CAAC;IAElD,yBAAyB,EAAE;SACzB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAAA,CAC5B,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAAA,CACnB,CAAC,CAAC;IAEJ,OAAO,KAAK,CAAC;AAAA,CACb,CAAC;AAEF,MAAM,uBAAuB,GAAmE,CAC/F,KAAK,EACL,OAAO,EACP,OAAO,EACN,EAAE,CAAC;IACJ,MAAM,KAAK,GAAG,iCAAiC,EAAE,CAAC;IAElD,yBAAyB,EAAE;SACzB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAAA,CAC5B,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/D,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAAA,CACnB,CAAC,CAAC;IAEJ,OAAO,KAAK,CAAC;AAAA,CACb,CAAC;AAEF,mBAAmB,CAAC;IACnB,GAAG,EAAE,yBAAyB;IAC9B,MAAM,EAAE,iBAAiB;IACzB,YAAY,EAAE,uBAAuB;CACrC,CAAC,CAAC","sourcesContent":["import {\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\tcreateAssistantMessageEventStream,\n\ttype Model,\n\tregisterApiProvider,\n\ttype SimpleStreamOptions,\n\ttype StreamFunction,\n\ttype StreamOptions,\n} from \"@mariozechner/pi-ai\";\n\ninterface LazyBedrockProviderModule {\n\tstreamBedrock: StreamFunction<\"bedrock-converse-stream\", StreamOptions>;\n\tstreamSimpleBedrock: StreamFunction<\"bedrock-converse-stream\", SimpleStreamOptions>;\n}\n\nlet bedrockProviderModulePromise: Promise<LazyBedrockProviderModule> | undefined;\n\nfunction forwardStream(\n\ttarget: ReturnType<typeof createAssistantMessageEventStream>,\n\tsource: AsyncIterable<AssistantMessageEvent>,\n): void {\n\t(async () => {\n\t\tfor await (const event of source) {\n\t\t\ttarget.push(event);\n\t\t}\n\t\ttarget.end();\n\t})();\n}\n\nfunction createLazyLoadErrorMessage(model: Model<\"bedrock-converse-stream\">, error: unknown): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\ttotalTokens: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"error\",\n\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\ttimestamp: Date.now(),\n\t};\n}\n\nfunction loadBedrockProviderModule(): Promise<LazyBedrockProviderModule> {\n\tif (!bedrockProviderModulePromise) {\n\t\tbedrockProviderModulePromise = import(\"@mariozechner/pi-ai/bedrock-provider\").then(\n\t\t\t({ bedrockProviderModule }) => {\n\t\t\t\treturn {\n\t\t\t\t\tstreamBedrock: (model, context, options) => {\n\t\t\t\t\t\tconst outer = createAssistantMessageEventStream();\n\t\t\t\t\t\tconst inner = bedrockProviderModule.streamBedrock(model, context, options);\n\t\t\t\t\t\tforwardStream(outer, inner);\n\t\t\t\t\t\treturn outer;\n\t\t\t\t\t},\n\t\t\t\t\tstreamSimpleBedrock: (model, context, options) => {\n\t\t\t\t\t\tconst outer = createAssistantMessageEventStream();\n\t\t\t\t\t\tconst inner = bedrockProviderModule.streamSimpleBedrock(model, context, options);\n\t\t\t\t\t\tforwardStream(outer, inner);\n\t\t\t\t\t\treturn outer;\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t);\n\t}\n\treturn bedrockProviderModulePromise;\n}\n\nconst streamBedrockLazy: StreamFunction<\"bedrock-converse-stream\", StreamOptions> = (model, context, options) => {\n\tconst outer = createAssistantMessageEventStream();\n\n\tloadBedrockProviderModule()\n\t\t.then((module) => {\n\t\t\tconst inner = module.streamBedrock(model, context, options);\n\t\t\tforwardStream(outer, inner);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconst message = createLazyLoadErrorMessage(model, error);\n\t\t\touter.push({ type: \"error\", reason: \"error\", error: message });\n\t\t\touter.end(message);\n\t\t});\n\n\treturn outer;\n};\n\nconst streamSimpleBedrockLazy: StreamFunction<\"bedrock-converse-stream\", SimpleStreamOptions> = (\n\tmodel,\n\tcontext,\n\toptions,\n) => {\n\tconst outer = createAssistantMessageEventStream();\n\n\tloadBedrockProviderModule()\n\t\t.then((module) => {\n\t\t\tconst inner = module.streamSimpleBedrock(model, context, options);\n\t\t\tforwardStream(outer, inner);\n\t\t})\n\t\t.catch((error) => {\n\t\t\tconst message = createLazyLoadErrorMessage(model, error);\n\t\t\touter.push({ type: \"error\", reason: \"error\", error: message });\n\t\t\touter.end(message);\n\t\t});\n\n\treturn outer;\n};\n\nregisterApiProvider({\n\tapi: \"bedrock-converse-stream\",\n\tstream: streamBedrockLazy,\n\tstreamSimple: streamSimpleBedrockLazy,\n});\n"]}
1
+ {"version":3,"file":"register-bedrock.js","sourceRoot":"","sources":["../../src/bun/register-bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,wBAAwB,CAAC,qBAAqB,CAAC,CAAC","sourcesContent":["import { setBedrockProviderModule } from \"@mariozechner/pi-ai\";\nimport { bedrockProviderModule } from \"@mariozechner/pi-ai/bedrock-provider\";\n\nsetBedrockProviderModule(bedrockProviderModule);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../../src/cli/session-picker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGnF,KAAK,cAAc,GAAG,CAAC,UAAU,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAEnF,sFAAsF;AACtF,wBAAsB,aAAa,CAClC,qBAAqB,EAAE,cAAc,EACrC,iBAAiB,EAAE,cAAc,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmCxB","sourcesContent":["/**\n * TUI session selector for --resume flag\n */\n\nimport { ProcessTerminal, TUI } from \"@mariozechner/pi-tui\";\nimport { KeybindingsManager } from \"../core/keybindings.js\";\nimport type { SessionInfo, SessionListProgress } from \"../core/session-manager.js\";\nimport { SessionSelectorComponent } from \"../modes/interactive/components/session-selector.js\";\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n/** Show TUI session selector and return selected session path or null if cancelled */\nexport async function selectSession(\n\tcurrentSessionsLoader: SessionsLoader,\n\tallSessionsLoader: SessionsLoader,\n): Promise<string | null> {\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tconst keybindings = KeybindingsManager.create();\n\t\tlet resolved = false;\n\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\tcurrentSessionsLoader,\n\t\t\tallSessionsLoader,\n\t\t\t(path: string) => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(path);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t\t{ showRenameHint: false, keybindings },\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getSessionList());\n\t\tui.start();\n\t});\n}\n"]}
1
+ {"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../../src/cli/session-picker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGnF,KAAK,cAAc,GAAG,CAAC,UAAU,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAEnF,sFAAsF;AACtF,wBAAsB,aAAa,CAClC,qBAAqB,EAAE,cAAc,EACrC,iBAAiB,EAAE,cAAc,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoCxB","sourcesContent":["/**\n * TUI session selector for --resume flag\n */\n\nimport { ProcessTerminal, setKeybindings, TUI } from \"@mariozechner/pi-tui\";\nimport { KeybindingsManager } from \"../core/keybindings.js\";\nimport type { SessionInfo, SessionListProgress } from \"../core/session-manager.js\";\nimport { SessionSelectorComponent } from \"../modes/interactive/components/session-selector.js\";\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n/** Show TUI session selector and return selected session path or null if cancelled */\nexport async function selectSession(\n\tcurrentSessionsLoader: SessionsLoader,\n\tallSessionsLoader: SessionsLoader,\n): Promise<string | null> {\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tconst keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(keybindings);\n\t\tlet resolved = false;\n\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\tcurrentSessionsLoader,\n\t\t\tallSessionsLoader,\n\t\t\t(path: string) => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(path);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t\t{ showRenameHint: false, keybindings },\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getSessionList());\n\t\tui.start();\n\t});\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * TUI session selector for --resume flag
3
3
  */
4
- import { ProcessTerminal, TUI } from "@mariozechner/pi-tui";
4
+ import { ProcessTerminal, setKeybindings, TUI } from "@mariozechner/pi-tui";
5
5
  import { KeybindingsManager } from "../core/keybindings.js";
6
6
  import { SessionSelectorComponent } from "../modes/interactive/components/session-selector.js";
7
7
  /** Show TUI session selector and return selected session path or null if cancelled */
@@ -9,6 +9,7 @@ export async function selectSession(currentSessionsLoader, allSessionsLoader) {
9
9
  return new Promise((resolve) => {
10
10
  const ui = new TUI(new ProcessTerminal());
11
11
  const keybindings = KeybindingsManager.create();
12
+ setKeybindings(keybindings);
12
13
  let resolved = false;
13
14
  const selector = new SessionSelectorComponent(currentSessionsLoader, allSessionsLoader, (path) => {
14
15
  if (!resolved) {
@@ -1 +1 @@
1
- {"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../../src/cli/session-picker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAI/F,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,qBAAqC,EACrC,iBAAiC,EACR;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAC5C,qBAAqB,EACrB,iBAAiB,EACjB,CAAC,IAAY,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA,CAChB,EACD,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,EACxB,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,CACtC,CAAC;QAEF,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,KAAK,EAAE,CAAC;IAAA,CACX,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\n * TUI session selector for --resume flag\n */\n\nimport { ProcessTerminal, TUI } from \"@mariozechner/pi-tui\";\nimport { KeybindingsManager } from \"../core/keybindings.js\";\nimport type { SessionInfo, SessionListProgress } from \"../core/session-manager.js\";\nimport { SessionSelectorComponent } from \"../modes/interactive/components/session-selector.js\";\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n/** Show TUI session selector and return selected session path or null if cancelled */\nexport async function selectSession(\n\tcurrentSessionsLoader: SessionsLoader,\n\tallSessionsLoader: SessionsLoader,\n): Promise<string | null> {\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tconst keybindings = KeybindingsManager.create();\n\t\tlet resolved = false;\n\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\tcurrentSessionsLoader,\n\t\t\tallSessionsLoader,\n\t\t\t(path: string) => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(path);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t\t{ showRenameHint: false, keybindings },\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getSessionList());\n\t\tui.start();\n\t});\n}\n"]}
1
+ {"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../../src/cli/session-picker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAC;AAI/F,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,qBAAqC,EACrC,iBAAiC,EACR;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAChD,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAC5C,qBAAqB,EACrB,iBAAiB,EACjB,CAAC,IAAY,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,EAAE,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,CAAC;YACf,CAAC;QAAA,CACD,EACD,GAAG,EAAE,CAAC;YACL,EAAE,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAA,CAChB,EACD,GAAG,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,EACxB,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,CACtC,CAAC;QAEF,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC;QACvC,EAAE,CAAC,KAAK,EAAE,CAAC;IAAA,CACX,CAAC,CAAC;AAAA,CACH","sourcesContent":["/**\n * TUI session selector for --resume flag\n */\n\nimport { ProcessTerminal, setKeybindings, TUI } from \"@mariozechner/pi-tui\";\nimport { KeybindingsManager } from \"../core/keybindings.js\";\nimport type { SessionInfo, SessionListProgress } from \"../core/session-manager.js\";\nimport { SessionSelectorComponent } from \"../modes/interactive/components/session-selector.js\";\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n/** Show TUI session selector and return selected session path or null if cancelled */\nexport async function selectSession(\n\tcurrentSessionsLoader: SessionsLoader,\n\tallSessionsLoader: SessionsLoader,\n): Promise<string | null> {\n\treturn new Promise((resolve) => {\n\t\tconst ui = new TUI(new ProcessTerminal());\n\t\tconst keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(keybindings);\n\t\tlet resolved = false;\n\n\t\tconst selector = new SessionSelectorComponent(\n\t\t\tcurrentSessionsLoader,\n\t\t\tallSessionsLoader,\n\t\t\t(path: string) => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(path);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tif (!resolved) {\n\t\t\t\t\tresolved = true;\n\t\t\t\t\tui.stop();\n\t\t\t\t\tresolve(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tui.stop();\n\t\t\t\tprocess.exit(0);\n\t\t\t},\n\t\t\t() => ui.requestRender(),\n\t\t\t{ showRenameHint: false, keybindings },\n\t\t);\n\n\t\tui.addChild(selector);\n\t\tui.setFocus(selector.getSessionList());\n\t\tui.start();\n\t});\n}\n"]}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\nprocess.title = \"pi\";\n\nimport { EnvHttpProxyAgent, setGlobalDispatcher } from \"undici\";\nimport { main } from \"./main.js\";\n\nsetGlobalDispatcher(new EnvHttpProxyAgent());\n\nmain(process.argv.slice(2));\n"]}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\nprocess.title = \"pi\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nimport { EnvHttpProxyAgent, setGlobalDispatcher } from \"undici\";\nimport { main } from \"./main.js\";\n\nsetGlobalDispatcher(new EnvHttpProxyAgent());\n\nmain(process.argv.slice(2));\n"]}
package/dist/cli.js CHANGED
@@ -6,6 +6,7 @@
6
6
  * Test with: npx tsx src/cli-new.ts [args...]
7
7
  */
8
8
  process.title = "pi";
9
+ process.emitWarning = (() => { });
9
10
  import { EnvHttpProxyAgent, setGlobalDispatcher } from "undici";
10
11
  import { main } from "./main.js";
11
12
  setGlobalDispatcher(new EnvHttpProxyAgent());
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AACH,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AAErB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,mBAAmB,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;AAE7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\nprocess.title = \"pi\";\n\nimport { EnvHttpProxyAgent, setGlobalDispatcher } from \"undici\";\nimport { main } from \"./main.js\";\n\nsetGlobalDispatcher(new EnvHttpProxyAgent());\n\nmain(process.argv.slice(2));\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AACH,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACrB,OAAO,CAAC,WAAW,GAAG,CAAC,GAAG,EAAE,CAAC,EAAC,CAAC,CAA+B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,mBAAmB,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;AAE7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * CLI entry point for the refactored coding agent.\n * Uses main.ts with AgentSession and new mode modules.\n *\n * Test with: npx tsx src/cli-new.ts [args...]\n */\nprocess.title = \"pi\";\nprocess.emitWarning = (() => {}) as typeof process.emitWarning;\n\nimport { EnvHttpProxyAgent, setGlobalDispatcher } from \"undici\";\nimport { main } from \"./main.js\";\n\nsetGlobalDispatcher(new EnvHttpProxyAgent());\n\nmain(process.argv.slice(2));\n"]}
@@ -294,8 +294,9 @@ export declare class AgentSession {
294
294
  */
295
295
  private _expandSkillCommand;
296
296
  /**
297
- * Queue a steering message to interrupt the agent mid-run.
298
- * Delivered after current tool execution, skips remaining tools.
297
+ * Queue a steering message while the agent is running.
298
+ * Delivered after the current assistant turn finishes executing its tool calls,
299
+ * before the next LLM call.
299
300
  * Expands skill commands and prompt templates. Errors on extension commands.
300
301
  * @param images Optional image attachments to include with the message
301
302
  * @throws Error if text is an extension command
@@ -574,6 +575,20 @@ export declare class AgentSession {
574
575
  * @returns Path to exported file
575
576
  */
576
577
  exportToHtml(outputPath?: string): Promise<string>;
578
+ /**
579
+ * Export the current session branch to a JSONL file.
580
+ * Writes the session header followed by all entries on the current branch path.
581
+ * @param outputPath Target file path. If omitted, generates a timestamped file in cwd.
582
+ * @returns The resolved output file path.
583
+ */
584
+ exportToJsonl(outputPath?: string): string;
585
+ /**
586
+ * Import a JSONL session file.
587
+ * Copies the file into the session directory and switches to it (like /resume).
588
+ * @param inputPath Path to the JSONL file to import.
589
+ * @returns true if the session was switched successfully.
590
+ */
591
+ importFromJsonl(inputPath: string): Promise<boolean>;
577
592
  /**
578
593
  * Get text content of last assistant message.
579
594
  * Useful for /copy command.