@mariozechner/pi-coding-agent 0.37.3 → 0.37.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +3 -0
  3. package/dist/core/auth-storage.d.ts.map +1 -1
  4. package/dist/core/auth-storage.js +4 -6
  5. package/dist/core/auth-storage.js.map +1 -1
  6. package/dist/core/extensions/index.d.ts +1 -1
  7. package/dist/core/extensions/index.d.ts.map +1 -1
  8. package/dist/core/extensions/index.js.map +1 -1
  9. package/dist/core/extensions/loader.d.ts.map +1 -1
  10. package/dist/core/extensions/loader.js +34 -3
  11. package/dist/core/extensions/loader.js.map +1 -1
  12. package/dist/core/extensions/runner.d.ts +4 -1
  13. package/dist/core/extensions/runner.d.ts.map +1 -1
  14. package/dist/core/extensions/runner.js +4 -0
  15. package/dist/core/extensions/runner.js.map +1 -1
  16. package/dist/core/extensions/types.d.ts +17 -1
  17. package/dist/core/extensions/types.d.ts.map +1 -1
  18. package/dist/core/extensions/types.js.map +1 -1
  19. package/dist/core/sdk.d.ts.map +1 -1
  20. package/dist/core/sdk.js +1 -0
  21. package/dist/core/sdk.js.map +1 -1
  22. package/dist/core/system-prompt.d.ts.map +1 -1
  23. package/dist/core/system-prompt.js +1 -1
  24. package/dist/core/system-prompt.js.map +1 -1
  25. package/dist/core/tools/index.d.ts +1 -1
  26. package/dist/core/tools/index.d.ts.map +1 -1
  27. package/dist/core/tools/index.js +1 -0
  28. package/dist/core/tools/index.js.map +1 -1
  29. package/dist/index.d.ts +2 -2
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -2
  32. package/dist/index.js.map +1 -1
  33. package/dist/main.d.ts.map +1 -1
  34. package/dist/main.js +20 -1
  35. package/dist/main.js.map +1 -1
  36. package/dist/modes/interactive/components/index.d.ts +28 -0
  37. package/dist/modes/interactive/components/index.d.ts.map +1 -0
  38. package/dist/modes/interactive/components/index.js +29 -0
  39. package/dist/modes/interactive/components/index.js.map +1 -0
  40. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  41. package/dist/modes/interactive/components/session-selector.js +1 -1
  42. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  43. package/dist/modes/interactive/interactive-mode.d.ts +6 -0
  44. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  45. package/dist/modes/interactive/interactive-mode.js +52 -4
  46. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  47. package/dist/modes/print-mode.d.ts.map +1 -1
  48. package/dist/modes/print-mode.js +9 -0
  49. package/dist/modes/print-mode.js.map +1 -1
  50. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  51. package/dist/modes/rpc/rpc-mode.js +12 -0
  52. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  53. package/docs/extensions.md +149 -9
  54. package/docs/tui.md +220 -2
  55. package/examples/extensions/README.md +1 -0
  56. package/examples/extensions/custom-header.ts +72 -0
  57. package/examples/extensions/preset.ts +398 -0
  58. package/examples/extensions/truncated-tool.ts +192 -0
  59. package/examples/extensions/with-deps/package-lock.json +2 -2
  60. package/examples/extensions/with-deps/package.json +1 -1
  61. package/package.json +4 -4
@@ -99,6 +99,10 @@ export class InteractiveMode {
99
99
  widgetContainer;
100
100
  // Custom footer from extension (undefined = use built-in footer)
101
101
  customFooter = undefined;
102
+ // Built-in header (logo + keybinding hints + changelog)
103
+ builtInHeader = undefined;
104
+ // Custom header from extension (undefined = use built-in header)
105
+ customHeader = undefined;
102
106
  // Convenience accessors
103
107
  get agent() {
104
108
  return this.session.agent;
@@ -199,7 +203,7 @@ export class InteractiveMode {
199
203
  theme.fg("muted", " to suspend") +
200
204
  "\n" +
201
205
  theme.fg("dim", deleteToLineEnd) +
202
- theme.fg("muted", " to delete line") +
206
+ theme.fg("muted", " to delete to end") +
203
207
  "\n" +
204
208
  theme.fg("dim", cycleThinkingLevel) +
205
209
  theme.fg("muted", " to cycle thinking") +
@@ -225,6 +229,9 @@ export class InteractiveMode {
225
229
  theme.fg("dim", "!") +
226
230
  theme.fg("muted", " to run bash") +
227
231
  "\n" +
232
+ theme.fg("dim", "!!") +
233
+ theme.fg("muted", " to run bash (no context)") +
234
+ "\n" +
228
235
  theme.fg("dim", followUp) +
229
236
  theme.fg("muted", " to queue follow-up") +
230
237
  "\n" +
@@ -233,10 +240,10 @@ export class InteractiveMode {
233
240
  "\n" +
234
241
  theme.fg("dim", "drop files") +
235
242
  theme.fg("muted", " to attach");
236
- const header = new Text(`${logo}\n${instructions}`, 1, 0);
243
+ this.builtInHeader = new Text(`${logo}\n${instructions}`, 1, 0);
237
244
  // Setup UI layout
238
245
  this.ui.addChild(new Spacer(1));
239
- this.ui.addChild(header);
246
+ this.ui.addChild(this.builtInHeader);
240
247
  this.ui.addChild(new Spacer(1));
241
248
  // Add changelog if provided
242
249
  if (this.changelogMarkdown) {
@@ -407,6 +414,15 @@ export class InteractiveMode {
407
414
  this.showStatus("Navigated to selected point");
408
415
  return { cancelled: false };
409
416
  },
417
+ setModelHandler: async (model) => {
418
+ const key = await this.session.modelRegistry.getApiKey(model);
419
+ if (!key)
420
+ return false;
421
+ await this.session.setModel(model);
422
+ return true;
423
+ },
424
+ getThinkingLevelHandler: () => this.session.thinkingLevel,
425
+ setThinkingLevelHandler: (level) => this.session.setThinkingLevel(level),
410
426
  isIdle: () => !this.session.isStreaming,
411
427
  waitForIdle: () => this.session.agent.waitForIdle(),
412
428
  abort: () => {
@@ -557,6 +573,37 @@ export class InteractiveMode {
557
573
  }
558
574
  this.ui.requestRender();
559
575
  }
576
+ /**
577
+ * Set a custom header component, or restore the built-in header.
578
+ */
579
+ setExtensionHeader(factory) {
580
+ // Header may not be initialized yet if called during early initialization
581
+ if (!this.builtInHeader) {
582
+ return;
583
+ }
584
+ // Dispose existing custom header
585
+ if (this.customHeader?.dispose) {
586
+ this.customHeader.dispose();
587
+ }
588
+ // Remove current header from UI
589
+ if (this.customHeader) {
590
+ this.ui.removeChild(this.customHeader);
591
+ }
592
+ else {
593
+ this.ui.removeChild(this.builtInHeader);
594
+ }
595
+ if (factory) {
596
+ // Create and add custom header at position 1 (after initial spacer)
597
+ this.customHeader = factory(this.ui, theme);
598
+ this.ui.children.splice(1, 0, this.customHeader);
599
+ }
600
+ else {
601
+ // Restore built-in header at position 1
602
+ this.customHeader = undefined;
603
+ this.ui.children.splice(1, 0, this.builtInHeader);
604
+ }
605
+ this.ui.requestRender();
606
+ }
560
607
  /**
561
608
  * Create the ExtensionUIContext for extensions.
562
609
  */
@@ -569,6 +616,7 @@ export class InteractiveMode {
569
616
  setStatus: (key, text) => this.setExtensionStatus(key, text),
570
617
  setWidget: (key, content) => this.setExtensionWidget(key, content),
571
618
  setFooter: (factory) => this.setExtensionFooter(factory),
619
+ setHeader: (factory) => this.setExtensionHeader(factory),
572
620
  setTitle: (title) => this.ui.terminal.setTitle(title),
573
621
  custom: (factory) => this.showExtensionCustom(factory),
574
622
  setEditorText: (text) => this.editor.setText(text),
@@ -988,7 +1036,6 @@ export class InteractiveMode {
988
1036
  }
989
1037
  else if (event.message.role === "user") {
990
1038
  this.addMessageToChat(event.message);
991
- this.editor.setText("");
992
1039
  this.updatePendingMessagesDisplay();
993
1040
  this.ui.requestRender();
994
1041
  }
@@ -2291,6 +2338,7 @@ export class InteractiveMode {
2291
2338
  | \`Ctrl+V\` | Paste image from clipboard |
2292
2339
  | \`/\` | Slash commands |
2293
2340
  | \`!\` | Run bash command |
2341
+ | \`!!\` | Run bash command (excluded from context) |
2294
2342
  `;
2295
2343
  // Add extension-registered shortcuts
2296
2344
  const extensionRunner = this.session.extensionRunner;