@mariozechner/pi-coding-agent 0.37.3 → 0.37.4

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 (34) hide show
  1. package/CHANGELOG.md +17 -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/loader.d.ts.map +1 -1
  7. package/dist/core/extensions/loader.js +1 -0
  8. package/dist/core/extensions/loader.js.map +1 -1
  9. package/dist/core/extensions/runner.d.ts.map +1 -1
  10. package/dist/core/extensions/runner.js +1 -0
  11. package/dist/core/extensions/runner.js.map +1 -1
  12. package/dist/core/extensions/types.d.ts +4 -0
  13. package/dist/core/extensions/types.d.ts.map +1 -1
  14. package/dist/core/extensions/types.js.map +1 -1
  15. package/dist/core/sdk.d.ts.map +1 -1
  16. package/dist/core/sdk.js +1 -0
  17. package/dist/core/sdk.js.map +1 -1
  18. package/dist/main.d.ts.map +1 -1
  19. package/dist/main.js +20 -1
  20. package/dist/main.js.map +1 -1
  21. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  22. package/dist/modes/interactive/components/session-selector.js +1 -1
  23. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  24. package/dist/modes/interactive/interactive-mode.d.ts +6 -0
  25. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  26. package/dist/modes/interactive/interactive-mode.js +43 -4
  27. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  28. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  29. package/dist/modes/rpc/rpc-mode.js +3 -0
  30. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  31. package/examples/extensions/custom-header.ts +72 -0
  32. package/examples/extensions/with-deps/package-lock.json +2 -2
  33. package/examples/extensions/with-deps/package.json +1 -1
  34. 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) {
@@ -557,6 +564,37 @@ export class InteractiveMode {
557
564
  }
558
565
  this.ui.requestRender();
559
566
  }
567
+ /**
568
+ * Set a custom header component, or restore the built-in header.
569
+ */
570
+ setExtensionHeader(factory) {
571
+ // Header may not be initialized yet if called during early initialization
572
+ if (!this.builtInHeader) {
573
+ return;
574
+ }
575
+ // Dispose existing custom header
576
+ if (this.customHeader?.dispose) {
577
+ this.customHeader.dispose();
578
+ }
579
+ // Remove current header from UI
580
+ if (this.customHeader) {
581
+ this.ui.removeChild(this.customHeader);
582
+ }
583
+ else {
584
+ this.ui.removeChild(this.builtInHeader);
585
+ }
586
+ if (factory) {
587
+ // Create and add custom header at position 1 (after initial spacer)
588
+ this.customHeader = factory(this.ui, theme);
589
+ this.ui.children.splice(1, 0, this.customHeader);
590
+ }
591
+ else {
592
+ // Restore built-in header at position 1
593
+ this.customHeader = undefined;
594
+ this.ui.children.splice(1, 0, this.builtInHeader);
595
+ }
596
+ this.ui.requestRender();
597
+ }
560
598
  /**
561
599
  * Create the ExtensionUIContext for extensions.
562
600
  */
@@ -569,6 +607,7 @@ export class InteractiveMode {
569
607
  setStatus: (key, text) => this.setExtensionStatus(key, text),
570
608
  setWidget: (key, content) => this.setExtensionWidget(key, content),
571
609
  setFooter: (factory) => this.setExtensionFooter(factory),
610
+ setHeader: (factory) => this.setExtensionHeader(factory),
572
611
  setTitle: (title) => this.ui.terminal.setTitle(title),
573
612
  custom: (factory) => this.showExtensionCustom(factory),
574
613
  setEditorText: (text) => this.editor.setText(text),
@@ -988,7 +1027,6 @@ export class InteractiveMode {
988
1027
  }
989
1028
  else if (event.message.role === "user") {
990
1029
  this.addMessageToChat(event.message);
991
- this.editor.setText("");
992
1030
  this.updatePendingMessagesDisplay();
993
1031
  this.ui.requestRender();
994
1032
  }
@@ -2291,6 +2329,7 @@ export class InteractiveMode {
2291
2329
  | \`Ctrl+V\` | Paste image from clipboard |
2292
2330
  | \`/\` | Slash commands |
2293
2331
  | \`!\` | Run bash command |
2332
+ | \`!!\` | Run bash command (excluded from context) |
2294
2333
  `;
2295
2334
  // Add extension-registered shortcuts
2296
2335
  const extensionRunner = this.session.extensionRunner;