@mariozechner/pi-coding-agent 0.60.0 → 0.61.0

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 (181) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +1 -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/keybindings.d.ts +268 -51
  43. package/dist/core/keybindings.d.ts.map +1 -1
  44. package/dist/core/keybindings.js +221 -143
  45. package/dist/core/keybindings.js.map +1 -1
  46. package/dist/core/model-registry.d.ts +1 -0
  47. package/dist/core/model-registry.d.ts.map +1 -1
  48. package/dist/core/model-registry.js +23 -14
  49. package/dist/core/model-registry.js.map +1 -1
  50. package/dist/core/sdk.d.ts +2 -2
  51. package/dist/core/sdk.d.ts.map +1 -1
  52. package/dist/core/sdk.js +2 -2
  53. package/dist/core/sdk.js.map +1 -1
  54. package/dist/core/slash-commands.d.ts.map +1 -1
  55. package/dist/core/slash-commands.js +2 -1
  56. package/dist/core/slash-commands.js.map +1 -1
  57. package/dist/core/tools/bash.d.ts.map +1 -1
  58. package/dist/core/tools/bash.js +12 -10
  59. package/dist/core/tools/bash.js.map +1 -1
  60. package/dist/core/tools/edit.d.ts.map +1 -1
  61. package/dist/core/tools/edit.js +3 -2
  62. package/dist/core/tools/edit.js.map +1 -1
  63. package/dist/core/tools/file-mutation-queue.d.ts +6 -0
  64. package/dist/core/tools/file-mutation-queue.d.ts.map +1 -0
  65. package/dist/core/tools/file-mutation-queue.js +37 -0
  66. package/dist/core/tools/file-mutation-queue.js.map +1 -0
  67. package/dist/core/tools/index.d.ts +1 -0
  68. package/dist/core/tools/index.d.ts.map +1 -1
  69. package/dist/core/tools/index.js +1 -0
  70. package/dist/core/tools/index.js.map +1 -1
  71. package/dist/core/tools/write.d.ts.map +1 -1
  72. package/dist/core/tools/write.js +6 -3
  73. package/dist/core/tools/write.js.map +1 -1
  74. package/dist/index.d.ts +3 -3
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +2 -2
  77. package/dist/index.js.map +1 -1
  78. package/dist/main.d.ts.map +1 -1
  79. package/dist/main.js +10 -5
  80. package/dist/main.js.map +1 -1
  81. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  82. package/dist/modes/interactive/components/bash-execution.js +4 -4
  83. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  84. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  85. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  86. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  87. package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
  88. package/dist/modes/interactive/components/branch-summary-message.js +2 -2
  89. package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  90. package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
  91. package/dist/modes/interactive/components/compaction-summary-message.js +2 -2
  92. package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  93. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  94. package/dist/modes/interactive/components/config-selector.js +8 -8
  95. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  96. package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
  97. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  98. package/dist/modes/interactive/components/custom-editor.js +6 -6
  99. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  100. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/extension-editor.js +9 -9
  102. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  103. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  104. package/dist/modes/interactive/components/extension-input.js +5 -5
  105. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  106. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  107. package/dist/modes/interactive/components/extension-selector.js +8 -8
  108. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  109. package/dist/modes/interactive/components/index.d.ts +1 -1
  110. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  111. package/dist/modes/interactive/components/index.js +1 -1
  112. package/dist/modes/interactive/components/index.js.map +1 -1
  113. package/dist/modes/interactive/components/keybinding-hints.d.ts +3 -36
  114. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  115. package/dist/modes/interactive/components/keybinding-hints.js +5 -44
  116. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  117. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  118. package/dist/modes/interactive/components/login-dialog.js +6 -6
  119. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  120. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  121. package/dist/modes/interactive/components/model-selector.js +12 -8
  122. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  123. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  124. package/dist/modes/interactive/components/oauth-selector.js +6 -6
  125. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  126. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  127. package/dist/modes/interactive/components/scoped-models-selector.js +4 -4
  128. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  129. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  130. package/dist/modes/interactive/components/session-selector.js +32 -35
  131. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  132. package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  133. package/dist/modes/interactive/components/skill-invocation-message.js +2 -2
  134. package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  135. package/dist/modes/interactive/components/tool-execution.d.ts +7 -0
  136. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  137. package/dist/modes/interactive/components/tool-execution.js +51 -6
  138. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  139. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  140. package/dist/modes/interactive/components/tree-selector.js +15 -15
  141. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  142. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  143. package/dist/modes/interactive/components/user-message-selector.js +6 -6
  144. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  145. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  146. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  147. package/dist/modes/interactive/interactive-mode.js +140 -87
  148. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  149. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  150. package/dist/modes/interactive/theme/theme.js +49 -37
  151. package/dist/modes/interactive/theme/theme.js.map +1 -1
  152. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  153. package/dist/modes/rpc/rpc-mode.js +4 -1
  154. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  155. package/dist/utils/child-process.d.ts +11 -0
  156. package/dist/utils/child-process.d.ts.map +1 -0
  157. package/dist/utils/child-process.js +78 -0
  158. package/dist/utils/child-process.js.map +1 -0
  159. package/dist/utils/clipboard-native.d.ts +1 -0
  160. package/dist/utils/clipboard-native.d.ts.map +1 -1
  161. package/dist/utils/clipboard-native.js.map +1 -1
  162. package/dist/utils/clipboard.d.ts +1 -1
  163. package/dist/utils/clipboard.d.ts.map +1 -1
  164. package/dist/utils/clipboard.js +11 -1
  165. package/dist/utils/clipboard.js.map +1 -1
  166. package/docs/extensions.md +44 -7
  167. package/docs/keybindings.md +101 -112
  168. package/docs/providers.md +7 -0
  169. package/docs/rpc.md +4 -4
  170. package/docs/sdk.md +2 -2
  171. package/examples/extensions/antigravity-image-gen.ts +5 -3
  172. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  173. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  174. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  175. package/examples/extensions/custom-provider-qwen-cli/package.json +1 -1
  176. package/examples/extensions/subagent/index.ts +7 -5
  177. package/examples/extensions/tool-override.ts +9 -7
  178. package/examples/extensions/truncated-tool.ts +6 -3
  179. package/examples/extensions/with-deps/package-lock.json +2 -2
  180. package/examples/extensions/with-deps/package.json +1 -1
  181. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.61.0] - 2026-03-20
4
+
5
+ ### New Features
6
+
7
+ - 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).
8
+ - 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).
9
+ - Resizable sidebar in HTML share and export views. See [README.md](README.md).
10
+
11
+ ### Breaking Changes
12
+
13
+ - 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))
14
+ - 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.
15
+
16
+ ### Added
17
+
18
+ - 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))
19
+ - 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))
20
+ - 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))
21
+
22
+ ### Fixed
23
+
24
+ - 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))
25
+ - 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))
26
+ - 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))
27
+ - Fixed RPC mode to redirect unexpected stdout writes to stderr so JSONL responses remain parseable ([#2388](https://github.com/badlogic/pi-mono/issues/2388))
28
+ - 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))
29
+ - 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))
30
+ - 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))
31
+ - Fixed CLI startup to suppress process warnings from leaking into terminal, print, and RPC output ([#2404](https://github.com/badlogic/pi-mono/issues/2404))
32
+ - Fixed bash tool rendering to show elapsed time at the bottom of the tool block ([#2406](https://github.com/badlogic/pi-mono/issues/2406))
33
+ - 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))
34
+ - 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))
35
+ - 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))
36
+ - 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))
37
+ - 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))
38
+ - 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))
39
+ - 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))
40
+ - 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))
41
+ - 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))
42
+
3
43
  ## [0.60.0] - 2026-03-18
4
44
 
5
45
  ### New Features
package/README.md CHANGED
@@ -181,7 +181,7 @@ See `/hotkeys` for the full list. Customize via `~/.pi/agent/keybindings.json`.
181
181
 
182
182
  Submit messages while the agent is working:
183
183
 
184
- - **Enter** queues a *steering* message, delivered after current tool execution (interrupts remaining tools)
184
+ - **Enter** queues a *steering* message, delivered after the current assistant turn finishes executing its tool calls
185
185
  - **Alt+Enter** queues a *follow-up* message, delivered only after the agent finishes all work
186
186
  - **Escape** aborts and restores queued messages to editor
187
187
  - **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":"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","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.