@astralyn/pi 0.84.0 → 0.84.2
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 +30 -1
- package/dist/cli/args.js +3 -3
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +19 -0
- package/dist/cli/auth-check.d.ts.map +1 -0
- package/dist/cli/auth-check.js +50 -0
- package/dist/cli/auth-check.js.map +1 -0
- package/dist/cli/auth-command.d.ts +24 -0
- package/dist/cli/auth-command.d.ts.map +1 -0
- package/dist/cli/auth-command.js +104 -0
- package/dist/cli/auth-command.js.map +1 -0
- package/dist/cli/credential-print.d.ts +4 -14
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +38 -79
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/core/auth-storage.d.ts +10 -0
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +76 -1
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/extensions/types.d.ts +5 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +8 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +2 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +3 -1
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/tools/bash.d.ts +4 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +6 -4
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts +4 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +11 -7
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +4 -0
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +5 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +4 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +5 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/ls.d.ts +4 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +5 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +4 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +6 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/write.d.ts +4 -0
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +6 -2
- package/dist/core/tools/write.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +0 -4
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/todo/schema.d.ts +1 -1
- package/dist/extensions/todo/state.js +5 -5
- package/dist/extensions/todo/state.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +57 -21
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +3 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +48 -41
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +11 -3
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/server/create-harness.d.ts +26 -0
- package/dist/server/create-harness.d.ts.map +1 -0
- package/dist/server/create-harness.js +104 -0
- package/dist/server/create-harness.js.map +1 -0
- package/dist/utils/coalescing-terminal.d.ts +19 -4
- package/dist/utils/coalescing-terminal.d.ts.map +1 -1
- package/dist/utils/coalescing-terminal.js +33 -5
- package/dist/utils/coalescing-terminal.js.map +1 -1
- package/docs/bundled/README.md +0 -2
- package/docs/docs.json +0 -8
- package/docs/extensions.md +3 -2
- package/docs/keybindings.md +9 -5
- package/docs/providers.md +8 -1
- package/docs/usage.md +0 -1
- package/examples/extensions/README.md +2 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +5 -5
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/plan-mode/README.md +66 -0
- package/examples/extensions/plan-mode/index.ts +390 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/sandbox/package-lock.json +3 -3
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/subagent/README.md +175 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +126 -0
- package/examples/extensions/subagent/index.ts +1009 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/with-deps/package-lock.json +4 -4
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +26 -26
- package/package.json +6 -6
- package/dist/extensions/biu/index.d.ts +0 -19
- package/dist/extensions/biu/index.d.ts.map +0 -1
- package/dist/extensions/biu/index.js +0 -350
- package/dist/extensions/biu/index.js.map +0 -1
- package/dist/extensions/biu/prompts.d.ts +0 -26
- package/dist/extensions/biu/prompts.d.ts.map +0 -1
- package/dist/extensions/biu/prompts.js +0 -260
- package/dist/extensions/biu/prompts.js.map +0 -1
- package/dist/extensions/biu/workspace.d.ts +0 -122
- package/dist/extensions/biu/workspace.d.ts.map +0 -1
- package/dist/extensions/biu/workspace.js +0 -404
- package/dist/extensions/biu/workspace.js.map +0 -1
- package/dist/extensions/rewind/anchor.d.ts +0 -29
- package/dist/extensions/rewind/anchor.d.ts.map +0 -1
- package/dist/extensions/rewind/anchor.js +0 -35
- package/dist/extensions/rewind/anchor.js.map +0 -1
- package/dist/extensions/rewind/config.d.ts +0 -16
- package/dist/extensions/rewind/config.d.ts.map +0 -1
- package/dist/extensions/rewind/config.js +0 -69
- package/dist/extensions/rewind/config.js.map +0 -1
- package/dist/extensions/rewind/engine.d.ts +0 -93
- package/dist/extensions/rewind/engine.d.ts.map +0 -1
- package/dist/extensions/rewind/engine.js +0 -778
- package/dist/extensions/rewind/engine.js.map +0 -1
- package/dist/extensions/rewind/gc.d.ts +0 -35
- package/dist/extensions/rewind/gc.d.ts.map +0 -1
- package/dist/extensions/rewind/gc.js +0 -169
- package/dist/extensions/rewind/gc.js.map +0 -1
- package/dist/extensions/rewind/index.d.ts +0 -3
- package/dist/extensions/rewind/index.d.ts.map +0 -1
- package/dist/extensions/rewind/index.js +0 -287
- package/dist/extensions/rewind/index.js.map +0 -1
- package/dist/extensions/rewind/menu.d.ts +0 -13
- package/dist/extensions/rewind/menu.d.ts.map +0 -1
- package/dist/extensions/rewind/menu.js +0 -123
- package/dist/extensions/rewind/menu.js.map +0 -1
- package/dist/extensions/rewind/paths.d.ts +0 -4
- package/dist/extensions/rewind/paths.d.ts.map +0 -1
- package/dist/extensions/rewind/paths.js +0 -15
- package/dist/extensions/rewind/paths.js.map +0 -1
- package/dist/extensions/rewind/restore.d.ts +0 -54
- package/dist/extensions/rewind/restore.d.ts.map +0 -1
- package/dist/extensions/rewind/restore.js +0 -94
- package/dist/extensions/rewind/restore.js.map +0 -1
- package/dist/extensions/rewind/snapshot.d.ts +0 -45
- package/dist/extensions/rewind/snapshot.d.ts.map +0 -1
- package/dist/extensions/rewind/snapshot.js +0 -21
- package/dist/extensions/rewind/snapshot.js.map +0 -1
- package/dist/extensions/rewind/storage.d.ts +0 -12
- package/dist/extensions/rewind/storage.d.ts.map +0 -1
- package/dist/extensions/rewind/storage.js +0 -33
- package/dist/extensions/rewind/storage.js.map +0 -1
- package/dist/extensions/rewind/text.d.ts +0 -7
- package/dist/extensions/rewind/text.d.ts.map +0 -1
- package/dist/extensions/rewind/text.js +0 -19
- package/dist/extensions/rewind/text.js.map +0 -1
- package/dist/extensions/rewind/tool-path.d.ts +0 -3
- package/dist/extensions/rewind/tool-path.d.ts.map +0 -1
- package/dist/extensions/rewind/tool-path.js +0 -9
- package/dist/extensions/rewind/tool-path.js.map +0 -1
- package/docs/bundled/extensions/biu.md +0 -63
- package/docs/bundled/extensions/rewind.md +0 -86
|
@@ -167,7 +167,10 @@ function formatLoginProviderCompletionDescription(provider) {
|
|
|
167
167
|
export function createInteractiveTui(options) {
|
|
168
168
|
const terminal = options.terminal ?? new ProcessTerminal();
|
|
169
169
|
if (options.tuiMode === "fullscreen") {
|
|
170
|
-
return new TuiAltScreen(terminal, options.showHardwareCursor, options.logDirectory, {
|
|
170
|
+
return new TuiAltScreen(terminal, options.showHardwareCursor, options.logDirectory, {
|
|
171
|
+
openUrl: openBrowser,
|
|
172
|
+
onRightClickPaste: options.onRightClickPaste,
|
|
173
|
+
});
|
|
171
174
|
}
|
|
172
175
|
return new TuiMainScreen(terminal, options.showHardwareCursor, options.logDirectory);
|
|
173
176
|
}
|
|
@@ -179,12 +182,19 @@ export function createInteractiveTuiReference(getTui) {
|
|
|
179
182
|
const value = Reflect.get(tui, property, tui);
|
|
180
183
|
if (typeof value !== "function")
|
|
181
184
|
return value;
|
|
185
|
+
let methodTui = tui;
|
|
186
|
+
let method = value;
|
|
182
187
|
return (...args) => {
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
+
const currentTui = getTui();
|
|
189
|
+
if (currentTui !== methodTui) {
|
|
190
|
+
const currentMethod = Reflect.get(currentTui, property, currentTui);
|
|
191
|
+
if (typeof currentMethod !== "function") {
|
|
192
|
+
throw new TypeError(`TUI property ${String(property)} is not callable`);
|
|
193
|
+
}
|
|
194
|
+
methodTui = currentTui;
|
|
195
|
+
method = currentMethod;
|
|
196
|
+
}
|
|
197
|
+
return Reflect.apply(method, methodTui, args);
|
|
188
198
|
};
|
|
189
199
|
},
|
|
190
200
|
set: (_target, property, value) => {
|
|
@@ -210,16 +220,6 @@ export class InteractiveMode {
|
|
|
210
220
|
return this.session.settingsManager;
|
|
211
221
|
}
|
|
212
222
|
constructor(runtimeHost, options = {}) {
|
|
213
|
-
// Input listeners live on the TUI renderer instance, which switchTuiMode
|
|
214
|
-
// replaces; this pair tracks the scrollback-preservation listener so it
|
|
215
|
-
// can be unsubscribed from the outgoing renderer and re-registered on the
|
|
216
|
-
// incoming one without duplicates.
|
|
217
|
-
this.scrollbackPreservationInputHandler = () => {
|
|
218
|
-
if (!this.agentRunActive)
|
|
219
|
-
this.coalescingTerminal.setScrollbackPreservation(false);
|
|
220
|
-
return undefined;
|
|
221
|
-
};
|
|
222
|
-
this.agentRunActive = false;
|
|
223
223
|
this.autocompleteProviderWrappers = [];
|
|
224
224
|
this.isInitialized = false;
|
|
225
225
|
this.pendingUserInputs = [];
|
|
@@ -280,6 +280,9 @@ export class InteractiveMode {
|
|
|
280
280
|
this.builtInHeader = undefined;
|
|
281
281
|
// Custom header from extension (undefined = use built-in header)
|
|
282
282
|
this.customHeader = undefined;
|
|
283
|
+
this.onRightClickPaste = () => {
|
|
284
|
+
void this.handleRightClickPaste();
|
|
285
|
+
};
|
|
283
286
|
/**
|
|
284
287
|
* Gracefully shutdown the agent.
|
|
285
288
|
* Stops the TUI before emitting shutdown events so extension UI cleanup cannot
|
|
@@ -304,22 +307,17 @@ export class InteractiveMode {
|
|
|
304
307
|
showHardwareCursor: this.settingsManager.getShowHardwareCursor(),
|
|
305
308
|
logDirectory: getAgentDir(),
|
|
306
309
|
terminal,
|
|
310
|
+
onRightClickPaste: this.onRightClickPaste,
|
|
307
311
|
});
|
|
308
312
|
this.ui = createInteractiveTuiReference(() => this.renderer);
|
|
309
313
|
// Lets full-redraw rewrites scroll grown content into scrollback
|
|
310
|
-
// instead of dropping the lines pushed above the screen.
|
|
311
|
-
//
|
|
312
|
-
//
|
|
313
|
-
// wrapper observes the pre-frame
|
|
314
|
-
//
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
// next input after the run settles: post-run reflow frames must not
|
|
318
|
-
// yank a reader who is still scrolled up, but once the user acts they
|
|
319
|
-
// are back at the bottom and upstream's clean wipe-and-replay wins.
|
|
320
|
-
// The listener is registered on the initial renderer and rebound by
|
|
321
|
-
// switchTuiMode whenever the renderer is replaced.
|
|
322
|
-
this.scrollbackPreservationInputUnsubscribe = this.ui.addInputListener(this.scrollbackPreservationInputHandler);
|
|
314
|
+
// instead of dropping the lines pushed above the screen. The render
|
|
315
|
+
// state comes from pi-tui's public captureRenderState(); pi-tui
|
|
316
|
+
// writes each full-redraw frame before updating its bookkeeping, so
|
|
317
|
+
// the wrapper observes the pre-frame viewport top. Fullscreen
|
|
318
|
+
// renderers return undefined (their frames do not match the rewrite
|
|
319
|
+
// shape anyway), falling back to the bottom-anchored repaint.
|
|
320
|
+
terminal.setViewportTopProvider(() => this.renderer instanceof TuiMainScreen ? this.renderer.captureRenderState().previousViewportTop : undefined);
|
|
323
321
|
this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
|
|
324
322
|
this.headerContainer = new Container();
|
|
325
323
|
this.loadedResourcesContainer = new Container();
|
|
@@ -550,6 +548,7 @@ export class InteractiveMode {
|
|
|
550
548
|
showHardwareCursor,
|
|
551
549
|
logDirectory: getAgentDir(),
|
|
552
550
|
terminal,
|
|
551
|
+
onRightClickPaste: this.onRightClickPaste,
|
|
553
552
|
});
|
|
554
553
|
nextUi.setClearOnShrink(clearOnShrink);
|
|
555
554
|
nextUi.onDebug = onDebug;
|
|
@@ -557,9 +556,6 @@ export class InteractiveMode {
|
|
|
557
556
|
nextUi.restoreRenderState(this.mainScreenRenderState);
|
|
558
557
|
}
|
|
559
558
|
this.renderer = nextUi;
|
|
560
|
-
// Renderers own their input-listener sets; move the preservation
|
|
561
|
-
// listener onto the incoming renderer before anything else touches it.
|
|
562
|
-
this.rebindScrollbackPreservationInputListener();
|
|
563
559
|
this.options.tuiMode = mode;
|
|
564
560
|
this.mountInteractiveTui(nextUi, components);
|
|
565
561
|
nextUi.invalidate();
|
|
@@ -1825,10 +1821,6 @@ export class InteractiveMode {
|
|
|
1825
1821
|
this.extensionTerminalInputSubscriptions.delete(subscription);
|
|
1826
1822
|
};
|
|
1827
1823
|
}
|
|
1828
|
-
rebindScrollbackPreservationInputListener() {
|
|
1829
|
-
this.scrollbackPreservationInputUnsubscribe?.();
|
|
1830
|
-
this.scrollbackPreservationInputUnsubscribe = this.ui.addInputListener(this.scrollbackPreservationInputHandler);
|
|
1831
|
-
}
|
|
1832
1824
|
rebindExtensionTerminalInputListeners() {
|
|
1833
1825
|
for (const subscription of this.extensionTerminalInputSubscriptions) {
|
|
1834
1826
|
subscription.unsubscribe();
|
|
@@ -2279,6 +2271,22 @@ export class InteractiveMode {
|
|
|
2279
2271
|
void this.handleClipboardPaste();
|
|
2280
2272
|
};
|
|
2281
2273
|
}
|
|
2274
|
+
async handleRightClickPaste() {
|
|
2275
|
+
const target = this.renderer.getFocusedComponent();
|
|
2276
|
+
const handleInput = target?.handleInput;
|
|
2277
|
+
if (!target || !handleInput)
|
|
2278
|
+
return;
|
|
2279
|
+
try {
|
|
2280
|
+
const text = await readClipboardText();
|
|
2281
|
+
if (!text || this.renderer.getFocusedComponent() !== target)
|
|
2282
|
+
return;
|
|
2283
|
+
handleInput.call(target, `\x1b[200~${text}\x1b[201~`);
|
|
2284
|
+
this.ui.requestRender();
|
|
2285
|
+
}
|
|
2286
|
+
catch {
|
|
2287
|
+
// Silently ignore clipboard errors (may not have permission, etc.)
|
|
2288
|
+
}
|
|
2289
|
+
}
|
|
2282
2290
|
async handleClipboardPaste() {
|
|
2283
2291
|
try {
|
|
2284
2292
|
const image = await readClipboardImage();
|
|
@@ -2499,8 +2507,9 @@ export class InteractiveMode {
|
|
|
2499
2507
|
this.footer.invalidate();
|
|
2500
2508
|
switch (event.type) {
|
|
2501
2509
|
case "agent_start":
|
|
2502
|
-
|
|
2503
|
-
|
|
2510
|
+
// Opens the scrollback-preservation window; the terminal
|
|
2511
|
+
// closes it on the user's next input after the run settles.
|
|
2512
|
+
this.coalescingTerminal.setAgentRunActive(true);
|
|
2504
2513
|
this.clearPendingTools();
|
|
2505
2514
|
if (this.settingsManager.getShowTerminalProgress()) {
|
|
2506
2515
|
this.ui.terminal.setProgress(true);
|
|
@@ -2677,7 +2686,7 @@ export class InteractiveMode {
|
|
|
2677
2686
|
// Preservation itself stays on until the next user input; the
|
|
2678
2687
|
// run's trailing reflow frames may land after this event while
|
|
2679
2688
|
// the reader is still scrolled up.
|
|
2680
|
-
this.
|
|
2689
|
+
this.coalescingTerminal.setAgentRunActive(false);
|
|
2681
2690
|
await this.checkShutdownRequested();
|
|
2682
2691
|
break;
|
|
2683
2692
|
case "compaction_start": {
|
|
@@ -5401,8 +5410,6 @@ export class InteractiveMode {
|
|
|
5401
5410
|
this.clearStatusIndicator();
|
|
5402
5411
|
this.themeController.disableAutoSync();
|
|
5403
5412
|
this.clearExtensionTerminalInputListeners();
|
|
5404
|
-
this.scrollbackPreservationInputUnsubscribe?.();
|
|
5405
|
-
this.scrollbackPreservationInputUnsubscribe = undefined;
|
|
5406
5413
|
this.clearPendingTools();
|
|
5407
5414
|
this.disposeChatToolComponents();
|
|
5408
5415
|
this.footer.dispose();
|