@astralyn/pi 0.82.3 → 0.82.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 +49 -0
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +3 -2
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +3 -2
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +33 -14
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +2 -3
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +18 -0
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +11 -0
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +2 -0
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/plan/constants.d.ts +31 -0
- package/dist/extensions/plan/constants.d.ts.map +1 -0
- package/dist/extensions/plan/constants.js +57 -0
- package/dist/extensions/plan/constants.js.map +1 -0
- package/dist/extensions/plan/index.d.ts +21 -0
- package/dist/extensions/plan/index.d.ts.map +1 -0
- package/dist/extensions/plan/index.js +291 -0
- package/dist/extensions/plan/index.js.map +1 -0
- package/dist/extensions/plan/schema.d.ts +15 -0
- package/dist/extensions/plan/schema.d.ts.map +1 -0
- package/dist/extensions/plan/schema.js +13 -0
- package/dist/extensions/plan/schema.js.map +1 -0
- package/dist/extensions/plan/state.d.ts +29 -0
- package/dist/extensions/plan/state.d.ts.map +1 -0
- package/dist/extensions/plan/state.js +74 -0
- package/dist/extensions/plan/state.js.map +1 -0
- package/dist/extensions/plan/storage.d.ts +18 -0
- package/dist/extensions/plan/storage.d.ts.map +1 -0
- package/dist/extensions/plan/storage.js +58 -0
- package/dist/extensions/plan/storage.js.map +1 -0
- package/dist/extensions/question/dialog.d.ts +3 -1
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js +106 -52
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/index.d.ts.map +1 -1
- package/dist/extensions/question/index.js +2 -2
- package/dist/extensions/question/index.js.map +1 -1
- package/dist/extensions/question/render-cache.d.ts +9 -0
- package/dist/extensions/question/render-cache.d.ts.map +1 -1
- package/dist/extensions/question/render-cache.js +22 -0
- package/dist/extensions/question/render-cache.js.map +1 -1
- package/dist/extensions/question/results.d.ts.map +1 -1
- package/dist/extensions/question/results.js +6 -1
- package/dist/extensions/question/results.js.map +1 -1
- package/dist/extensions/question/schema.d.ts +4 -0
- package/dist/extensions/question/schema.d.ts.map +1 -1
- package/dist/extensions/question/schema.js +19 -28
- package/dist/extensions/question/schema.js.map +1 -1
- package/dist/extensions/question/types.d.ts +1 -1
- package/dist/extensions/question/types.d.ts.map +1 -1
- package/dist/extensions/question/types.js.map +1 -1
- package/dist/extensions/rewind/anchor.d.ts +29 -0
- package/dist/extensions/rewind/anchor.d.ts.map +1 -0
- package/dist/extensions/rewind/anchor.js +35 -0
- package/dist/extensions/rewind/anchor.js.map +1 -0
- package/dist/extensions/rewind/engine.d.ts +2 -6
- package/dist/extensions/rewind/engine.d.ts.map +1 -1
- package/dist/extensions/rewind/engine.js +41 -10
- package/dist/extensions/rewind/engine.js.map +1 -1
- package/dist/extensions/rewind/index.d.ts.map +1 -1
- package/dist/extensions/rewind/index.js +55 -21
- package/dist/extensions/rewind/index.js.map +1 -1
- package/dist/extensions/rewind/menu.d.ts.map +1 -1
- package/dist/extensions/rewind/menu.js +7 -2
- package/dist/extensions/rewind/menu.js.map +1 -1
- package/dist/extensions/rewind/restore.d.ts +26 -9
- package/dist/extensions/rewind/restore.d.ts.map +1 -1
- package/dist/extensions/rewind/restore.js +58 -16
- package/dist/extensions/rewind/restore.js.map +1 -1
- package/dist/extensions/subagent/activity.d.ts +1 -0
- package/dist/extensions/subagent/activity.d.ts.map +1 -1
- package/dist/extensions/subagent/activity.js +20 -4
- package/dist/extensions/subagent/activity.js.map +1 -1
- package/dist/extensions/subagent/agents.d.ts.map +1 -1
- package/dist/extensions/subagent/agents.js +13 -18
- package/dist/extensions/subagent/agents.js.map +1 -1
- package/dist/extensions/subagent/constants.d.ts +5 -4
- package/dist/extensions/subagent/constants.d.ts.map +1 -1
- package/dist/extensions/subagent/constants.js +12 -5
- package/dist/extensions/subagent/constants.js.map +1 -1
- package/dist/extensions/subagent/index.d.ts.map +1 -1
- package/dist/extensions/subagent/index.js +12 -5
- package/dist/extensions/subagent/index.js.map +1 -1
- package/dist/extensions/subagent/render.d.ts.map +1 -1
- package/dist/extensions/subagent/render.js +166 -41
- package/dist/extensions/subagent/render.js.map +1 -1
- package/dist/extensions/subagent/resolve.d.ts +2 -5
- package/dist/extensions/subagent/resolve.d.ts.map +1 -1
- package/dist/extensions/subagent/resolve.js +8 -13
- package/dist/extensions/subagent/resolve.js.map +1 -1
- package/dist/extensions/subagent/runner.d.ts +3 -1
- package/dist/extensions/subagent/runner.d.ts.map +1 -1
- package/dist/extensions/subagent/runner.js +115 -66
- package/dist/extensions/subagent/runner.js.map +1 -1
- package/dist/extensions/subagent/schema.d.ts +0 -6
- package/dist/extensions/subagent/schema.d.ts.map +1 -1
- package/dist/extensions/subagent/schema.js +3 -4
- package/dist/extensions/subagent/schema.js.map +1 -1
- package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -1
- package/dist/extensions/subagent/sdk-runner.js +37 -16
- package/dist/extensions/subagent/sdk-runner.js.map +1 -1
- package/dist/extensions/subagent/types.d.ts +10 -2
- package/dist/extensions/subagent/types.d.ts.map +1 -1
- package/dist/extensions/subagent/types.js.map +1 -1
- package/dist/extensions/todo/constants.d.ts +1 -1
- package/dist/extensions/todo/constants.d.ts.map +1 -1
- package/dist/extensions/todo/constants.js +29 -4
- package/dist/extensions/todo/constants.js.map +1 -1
- package/dist/extensions/todo/index.d.ts +1 -1
- package/dist/extensions/todo/index.d.ts.map +1 -1
- package/dist/extensions/todo/index.js +22 -3
- package/dist/extensions/todo/index.js.map +1 -1
- package/dist/extensions/todo/schema.d.ts +6 -5
- package/dist/extensions/todo/schema.d.ts.map +1 -1
- package/dist/extensions/todo/schema.js +20 -9
- package/dist/extensions/todo/schema.js.map +1 -1
- package/dist/extensions/todo/state.d.ts +5 -1
- package/dist/extensions/todo/state.d.ts.map +1 -1
- package/dist/extensions/todo/state.js +184 -38
- package/dist/extensions/todo/state.js.map +1 -1
- package/dist/extensions/todo/view.d.ts.map +1 -1
- package/dist/extensions/todo/view.js +10 -6
- package/dist/extensions/todo/view.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +36 -2
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/utils/coalescing-terminal.d.ts +116 -0
- package/dist/utils/coalescing-terminal.d.ts.map +1 -0
- package/dist/utils/coalescing-terminal.js +256 -0
- package/dist/utils/coalescing-terminal.js.map +1 -0
- package/docs/bundled/extensions/README.md +1 -0
- package/docs/bundled/extensions/plan.md +31 -0
- package/docs/bundled/extensions/question.md +9 -7
- package/docs/bundled/extensions/rewind.md +19 -8
- package/docs/bundled/extensions/subagent.md +16 -16
- package/docs/bundled/extensions/todo.md +5 -3
- package/docs/compaction.md +6 -2
- package/docs/docs.json +4 -0
- package/docs/extensions.md +4 -2
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
|
@@ -6,7 +6,7 @@ import * as crypto from "node:crypto";
|
|
|
6
6
|
import * as fs from "node:fs";
|
|
7
7
|
import * as os from "node:os";
|
|
8
8
|
import * as path from "node:path";
|
|
9
|
-
import { CombinedAutocompleteProvider, Container, fuzzyFilter, Markdown, matchesKey,
|
|
9
|
+
import { CombinedAutocompleteProvider, Container, fuzzyFilter, Markdown, matchesKey, Spacer, setKeybindings, Text, TruncatedText, TUI, visibleWidth, } from "@earendil-works/pi-tui";
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import { spawn, spawnSync } from "child_process";
|
|
12
12
|
import { APP_NAME, APP_TITLE, CONFIG_DIR_NAME, getAgentDir, getAuthPath, getDebugLogPath, getDocsPath, getShareViewerUrl, VERSION, } from "../../config.js";
|
|
@@ -27,6 +27,7 @@ import { getUsageCostBreakdown } from "../../core/usage-totals.js";
|
|
|
27
27
|
import { getChangelogPath, getNewEntries, normalizeChangelogLinks, parseChangelog } from "../../utils/changelog.js";
|
|
28
28
|
import { copyToClipboard, readClipboardText } from "../../utils/clipboard.js";
|
|
29
29
|
import { extensionForImageMimeType, readClipboardImage } from "../../utils/clipboard-image.js";
|
|
30
|
+
import { CoalescingTerminal } from "../../utils/coalescing-terminal.js";
|
|
30
31
|
import { parseGitUrl } from "../../utils/git.js";
|
|
31
32
|
import { getCwdRelativePath } from "../../utils/paths.js";
|
|
32
33
|
import { killTrackedDetachedChildren } from "../../utils/shell.js";
|
|
@@ -163,6 +164,8 @@ function formatLoginProviderCompletionDescription(provider) {
|
|
|
163
164
|
export class InteractiveMode {
|
|
164
165
|
runtimeHost;
|
|
165
166
|
ui;
|
|
167
|
+
coalescingTerminal;
|
|
168
|
+
agentRunActive = false;
|
|
166
169
|
loadedResourcesContainer;
|
|
167
170
|
chatContainer;
|
|
168
171
|
pendingMessagesContainer;
|
|
@@ -272,7 +275,25 @@ export class InteractiveMode {
|
|
|
272
275
|
await this.rebindCurrentSession({ renderBeforeBind: true });
|
|
273
276
|
});
|
|
274
277
|
this.version = VERSION;
|
|
275
|
-
|
|
278
|
+
const terminal = new CoalescingTerminal();
|
|
279
|
+
this.coalescingTerminal = terminal;
|
|
280
|
+
this.ui = new TUI(terminal, this.settingsManager.getShowHardwareCursor(), getAgentDir());
|
|
281
|
+
// Lets full-redraw rewrites scroll grown content into scrollback
|
|
282
|
+
// instead of dropping the lines pushed above the screen.
|
|
283
|
+
// previousViewportTop is TS-private but a plain runtime field, and
|
|
284
|
+
// pi-tui writes each full-redraw frame before updating it, so the
|
|
285
|
+
// wrapper observes the pre-frame value; if either assumption breaks,
|
|
286
|
+
// readViewportTop falls back to the bottom-anchored repaint.
|
|
287
|
+
terminal.setViewportTopProvider(() => this.ui.previousViewportTop);
|
|
288
|
+
// Scrollback preservation stays on from agent_start until the user's
|
|
289
|
+
// next input after the run settles: post-run reflow frames must not
|
|
290
|
+
// yank a reader who is still scrolled up, but once the user acts they
|
|
291
|
+
// are back at the bottom and upstream's clean wipe-and-replay wins.
|
|
292
|
+
this.ui.addInputListener(() => {
|
|
293
|
+
if (!this.agentRunActive)
|
|
294
|
+
this.coalescingTerminal.setScrollbackPreservation(false);
|
|
295
|
+
return undefined;
|
|
296
|
+
});
|
|
276
297
|
this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
|
|
277
298
|
this.headerContainer = new Container();
|
|
278
299
|
this.loadedResourcesContainer = new Container();
|
|
@@ -2297,6 +2318,8 @@ export class InteractiveMode {
|
|
|
2297
2318
|
this.footer.invalidate();
|
|
2298
2319
|
switch (event.type) {
|
|
2299
2320
|
case "agent_start":
|
|
2321
|
+
this.agentRunActive = true;
|
|
2322
|
+
this.coalescingTerminal.setScrollbackPreservation(true);
|
|
2300
2323
|
this.pendingTools.clear();
|
|
2301
2324
|
if (this.settingsManager.getShowTerminalProgress()) {
|
|
2302
2325
|
this.ui.terminal.setProgress(true);
|
|
@@ -2470,6 +2493,10 @@ export class InteractiveMode {
|
|
|
2470
2493
|
this.ui.requestRender();
|
|
2471
2494
|
break;
|
|
2472
2495
|
case "agent_settled":
|
|
2496
|
+
// Preservation itself stays on until the next user input; the
|
|
2497
|
+
// run's trailing reflow frames may land after this event while
|
|
2498
|
+
// the reader is still scrolled up.
|
|
2499
|
+
this.agentRunActive = false;
|
|
2473
2500
|
await this.checkShutdownRequested();
|
|
2474
2501
|
break;
|
|
2475
2502
|
case "compaction_start": {
|
|
@@ -3117,6 +3144,11 @@ export class InteractiveMode {
|
|
|
3117
3144
|
}
|
|
3118
3145
|
setToolsExpanded(expanded) {
|
|
3119
3146
|
this.toolOutputExpanded = expanded;
|
|
3147
|
+
// An explicit toggle prefers upstream's clean wipe-and-replay even
|
|
3148
|
+
// mid-run: the user just pressed the key, so they are interacting at
|
|
3149
|
+
// the bottom, and a full replay leaves scrollback as the exact new
|
|
3150
|
+
// transcript instead of preservation's stale seams.
|
|
3151
|
+
this.coalescingTerminal.passNextFullRedraw();
|
|
3120
3152
|
const activeHeader = this.customHeader ?? this.builtInHeader;
|
|
3121
3153
|
if (isExpandable(activeHeader)) {
|
|
3122
3154
|
activeHeader.setExpanded(expanded);
|
|
@@ -3133,6 +3165,8 @@ export class InteractiveMode {
|
|
|
3133
3165
|
toggleThinkingBlockVisibility() {
|
|
3134
3166
|
this.hideThinkingBlock = !this.hideThinkingBlock;
|
|
3135
3167
|
this.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);
|
|
3168
|
+
// Same reasoning as setToolsExpanded.
|
|
3169
|
+
this.coalescingTerminal.passNextFullRedraw();
|
|
3136
3170
|
// Rebuild chat from session messages
|
|
3137
3171
|
this.chatContainer.clear();
|
|
3138
3172
|
this.rebuildChatFromMessages();
|