@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.
- package/CHANGELOG.md +32 -0
- package/README.md +3 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +4 -6
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +34 -3
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +4 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +4 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +17 -1
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/index.d.ts +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +1 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +20 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +28 -0
- package/dist/modes/interactive/components/index.d.ts.map +1 -0
- package/dist/modes/interactive/components/index.js +29 -0
- package/dist/modes/interactive/components/index.js.map +1 -0
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +1 -1
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +6 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +52 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +9 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +12 -0
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/docs/extensions.md +149 -9
- package/docs/tui.md +220 -2
- package/examples/extensions/README.md +1 -0
- package/examples/extensions/custom-header.ts +72 -0
- package/examples/extensions/preset.ts +398 -0
- package/examples/extensions/truncated-tool.ts +192 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- 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
|
|
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
|
-
|
|
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(
|
|
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;
|