@astralyn/pi 0.82.4 → 0.82.6

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 (144) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/cli/project-trust.d.ts.map +1 -1
  3. package/dist/cli/project-trust.js +4 -1
  4. package/dist/cli/project-trust.js.map +1 -1
  5. package/dist/core/agent-session.d.ts.map +1 -1
  6. package/dist/core/agent-session.js +2 -2
  7. package/dist/core/agent-session.js.map +1 -1
  8. package/dist/core/bash-executor.d.ts.map +1 -1
  9. package/dist/core/bash-executor.js +4 -22
  10. package/dist/core/bash-executor.js.map +1 -1
  11. package/dist/core/extensions/index.d.ts +2 -2
  12. package/dist/core/extensions/index.d.ts.map +1 -1
  13. package/dist/core/extensions/index.js +1 -1
  14. package/dist/core/extensions/index.js.map +1 -1
  15. package/dist/core/extensions/loader.d.ts +1 -1
  16. package/dist/core/extensions/loader.d.ts.map +1 -1
  17. package/dist/core/extensions/loader.js +2 -3
  18. package/dist/core/extensions/loader.js.map +1 -1
  19. package/dist/core/extensions/types.d.ts +37 -5
  20. package/dist/core/extensions/types.d.ts.map +1 -1
  21. package/dist/core/extensions/types.js +11 -0
  22. package/dist/core/extensions/types.js.map +1 -1
  23. package/dist/core/tools/output-accumulator.d.ts +3 -13
  24. package/dist/core/tools/output-accumulator.d.ts.map +1 -1
  25. package/dist/core/tools/output-accumulator.js +6 -36
  26. package/dist/core/tools/output-accumulator.js.map +1 -1
  27. package/dist/extensions/plan/constants.d.ts +11 -2
  28. package/dist/extensions/plan/constants.d.ts.map +1 -1
  29. package/dist/extensions/plan/constants.js +14 -2
  30. package/dist/extensions/plan/constants.js.map +1 -1
  31. package/dist/extensions/plan/index.d.ts +0 -18
  32. package/dist/extensions/plan/index.d.ts.map +1 -1
  33. package/dist/extensions/plan/index.js +35 -3
  34. package/dist/extensions/plan/index.js.map +1 -1
  35. package/dist/extensions/plan/view.d.ts +36 -0
  36. package/dist/extensions/plan/view.d.ts.map +1 -0
  37. package/dist/extensions/plan/view.js +74 -0
  38. package/dist/extensions/plan/view.js.map +1 -0
  39. package/dist/extensions/question/dialog.d.ts +3 -1
  40. package/dist/extensions/question/dialog.d.ts.map +1 -1
  41. package/dist/extensions/question/dialog.js +106 -52
  42. package/dist/extensions/question/dialog.js.map +1 -1
  43. package/dist/extensions/question/index.d.ts.map +1 -1
  44. package/dist/extensions/question/index.js +2 -2
  45. package/dist/extensions/question/index.js.map +1 -1
  46. package/dist/extensions/question/render-cache.d.ts +9 -0
  47. package/dist/extensions/question/render-cache.d.ts.map +1 -1
  48. package/dist/extensions/question/render-cache.js +22 -0
  49. package/dist/extensions/question/render-cache.js.map +1 -1
  50. package/dist/extensions/question/results.d.ts.map +1 -1
  51. package/dist/extensions/question/results.js +6 -1
  52. package/dist/extensions/question/results.js.map +1 -1
  53. package/dist/extensions/question/schema.d.ts +4 -0
  54. package/dist/extensions/question/schema.d.ts.map +1 -1
  55. package/dist/extensions/question/schema.js +19 -28
  56. package/dist/extensions/question/schema.js.map +1 -1
  57. package/dist/extensions/question/types.d.ts +1 -1
  58. package/dist/extensions/question/types.d.ts.map +1 -1
  59. package/dist/extensions/question/types.js.map +1 -1
  60. package/dist/extensions/router/stream.d.ts.map +1 -1
  61. package/dist/extensions/router/stream.js +44 -0
  62. package/dist/extensions/router/stream.js.map +1 -1
  63. package/dist/extensions/subagent/activity.d.ts.map +1 -1
  64. package/dist/extensions/subagent/activity.js +25 -4
  65. package/dist/extensions/subagent/activity.js.map +1 -1
  66. package/dist/extensions/subagent/agents.d.ts.map +1 -1
  67. package/dist/extensions/subagent/agents.js +12 -6
  68. package/dist/extensions/subagent/agents.js.map +1 -1
  69. package/dist/extensions/subagent/constants.d.ts +1 -1
  70. package/dist/extensions/subagent/constants.d.ts.map +1 -1
  71. package/dist/extensions/subagent/constants.js +3 -2
  72. package/dist/extensions/subagent/constants.js.map +1 -1
  73. package/dist/extensions/subagent/index.d.ts.map +1 -1
  74. package/dist/extensions/subagent/index.js +14 -0
  75. package/dist/extensions/subagent/index.js.map +1 -1
  76. package/dist/extensions/subagent/render.d.ts.map +1 -1
  77. package/dist/extensions/subagent/render.js +243 -116
  78. package/dist/extensions/subagent/render.js.map +1 -1
  79. package/dist/extensions/subagent/resolve.d.ts.map +1 -1
  80. package/dist/extensions/subagent/resolve.js +13 -9
  81. package/dist/extensions/subagent/resolve.js.map +1 -1
  82. package/dist/extensions/subagent/runner.d.ts +1 -1
  83. package/dist/extensions/subagent/runner.d.ts.map +1 -1
  84. package/dist/extensions/subagent/runner.js +9 -3
  85. package/dist/extensions/subagent/runner.js.map +1 -1
  86. package/dist/extensions/subagent/schema.d.ts.map +1 -1
  87. package/dist/extensions/subagent/schema.js +4 -4
  88. package/dist/extensions/subagent/schema.js.map +1 -1
  89. package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -1
  90. package/dist/extensions/subagent/sdk-runner.js +5 -0
  91. package/dist/extensions/subagent/sdk-runner.js.map +1 -1
  92. package/dist/extensions/subagent/types.d.ts +7 -0
  93. package/dist/extensions/subagent/types.d.ts.map +1 -1
  94. package/dist/extensions/subagent/types.js.map +1 -1
  95. package/dist/extensions/todo/constants.d.ts +17 -6
  96. package/dist/extensions/todo/constants.d.ts.map +1 -1
  97. package/dist/extensions/todo/constants.js +47 -9
  98. package/dist/extensions/todo/constants.js.map +1 -1
  99. package/dist/extensions/todo/index.d.ts +1 -15
  100. package/dist/extensions/todo/index.d.ts.map +1 -1
  101. package/dist/extensions/todo/index.js +35 -4
  102. package/dist/extensions/todo/index.js.map +1 -1
  103. package/dist/extensions/todo/schema.d.ts +59 -7
  104. package/dist/extensions/todo/schema.d.ts.map +1 -1
  105. package/dist/extensions/todo/schema.js +72 -12
  106. package/dist/extensions/todo/schema.js.map +1 -1
  107. package/dist/extensions/todo/state.d.ts +20 -5
  108. package/dist/extensions/todo/state.d.ts.map +1 -1
  109. package/dist/extensions/todo/state.js +1016 -134
  110. package/dist/extensions/todo/state.js.map +1 -1
  111. package/dist/extensions/todo/view.d.ts +16 -1
  112. package/dist/extensions/todo/view.d.ts.map +1 -1
  113. package/dist/extensions/todo/view.js +293 -7
  114. package/dist/extensions/todo/view.js.map +1 -1
  115. package/dist/modes/interactive/components/extension-selector.d.ts +6 -1
  116. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  117. package/dist/modes/interactive/components/extension-selector.js +14 -6
  118. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  119. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  120. package/dist/modes/interactive/components/tool-execution.js +6 -0
  121. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  122. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  123. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  124. package/dist/modes/interactive/interactive-mode.js +41 -2
  125. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  126. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  127. package/dist/modes/rpc/rpc-mode.js +8 -1
  128. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  129. package/dist/utils/coalescing-terminal.d.ts +71 -17
  130. package/dist/utils/coalescing-terminal.d.ts.map +1 -1
  131. package/dist/utils/coalescing-terminal.js +136 -31
  132. package/dist/utils/coalescing-terminal.js.map +1 -1
  133. package/docs/bundled/extensions/plan.md +6 -4
  134. package/docs/bundled/extensions/question.md +9 -7
  135. package/docs/bundled/extensions/subagent.md +4 -4
  136. package/docs/bundled/extensions/todo.md +9 -5
  137. package/docs/bundled/tool-presentation.md +1 -1
  138. package/docs/extensions.md +14 -0
  139. package/npm-shrinkwrap.json +2 -2
  140. package/package.json +1 -1
  141. package/dist/utils/output-decoder.d.ts +0 -52
  142. package/dist/utils/output-decoder.d.ts.map +0 -1
  143. package/dist/utils/output-decoder.js +0 -134
  144. package/dist/utils/output-decoder.js.map +0 -1
@@ -164,6 +164,8 @@ function formatLoginProviderCompletionDescription(provider) {
164
164
  export class InteractiveMode {
165
165
  runtimeHost;
166
166
  ui;
167
+ coalescingTerminal;
168
+ agentRunActive = false;
167
169
  loadedResourcesContainer;
168
170
  chatContainer;
169
171
  pendingMessagesContainer;
@@ -273,7 +275,25 @@ export class InteractiveMode {
273
275
  await this.rebindCurrentSession({ renderBeforeBind: true });
274
276
  });
275
277
  this.version = VERSION;
276
- this.ui = new TUI(new CoalescingTerminal(), this.settingsManager.getShowHardwareCursor(), getAgentDir());
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
+ });
277
297
  this.ui.setClearOnShrink(this.settingsManager.getClearOnShrink());
278
298
  this.headerContainer = new Container();
279
299
  this.loadedResourcesContainer = new Container();
@@ -1747,7 +1767,13 @@ export class InteractiveMode {
1747
1767
  opts?.signal?.removeEventListener("abort", onAbort);
1748
1768
  this.hideExtensionSelector();
1749
1769
  resolve(undefined);
1750
- }, { tui: this.ui, timeout: opts?.timeout, onToggleToolsExpanded: () => this.toggleToolOutputExpansion() });
1770
+ }, {
1771
+ tui: this.ui,
1772
+ timeout: opts?.timeout,
1773
+ subtitle: opts?.subtitle,
1774
+ cancelHint: opts?.cancelHint,
1775
+ onToggleToolsExpanded: () => this.toggleToolOutputExpansion(),
1776
+ });
1751
1777
  this.editorContainer.clear();
1752
1778
  this.editorContainer.addChild(this.extensionSelector);
1753
1779
  this.ui.setFocus(this.extensionSelector);
@@ -2298,6 +2324,8 @@ export class InteractiveMode {
2298
2324
  this.footer.invalidate();
2299
2325
  switch (event.type) {
2300
2326
  case "agent_start":
2327
+ this.agentRunActive = true;
2328
+ this.coalescingTerminal.setScrollbackPreservation(true);
2301
2329
  this.pendingTools.clear();
2302
2330
  if (this.settingsManager.getShowTerminalProgress()) {
2303
2331
  this.ui.terminal.setProgress(true);
@@ -2471,6 +2499,10 @@ export class InteractiveMode {
2471
2499
  this.ui.requestRender();
2472
2500
  break;
2473
2501
  case "agent_settled":
2502
+ // Preservation itself stays on until the next user input; the
2503
+ // run's trailing reflow frames may land after this event while
2504
+ // the reader is still scrolled up.
2505
+ this.agentRunActive = false;
2474
2506
  await this.checkShutdownRequested();
2475
2507
  break;
2476
2508
  case "compaction_start": {
@@ -3118,6 +3150,11 @@ export class InteractiveMode {
3118
3150
  }
3119
3151
  setToolsExpanded(expanded) {
3120
3152
  this.toolOutputExpanded = expanded;
3153
+ // An explicit toggle prefers upstream's clean wipe-and-replay even
3154
+ // mid-run: the user just pressed the key, so they are interacting at
3155
+ // the bottom, and a full replay leaves scrollback as the exact new
3156
+ // transcript instead of preservation's stale seams.
3157
+ this.coalescingTerminal.passNextFullRedraw();
3121
3158
  const activeHeader = this.customHeader ?? this.builtInHeader;
3122
3159
  if (isExpandable(activeHeader)) {
3123
3160
  activeHeader.setExpanded(expanded);
@@ -3134,6 +3171,8 @@ export class InteractiveMode {
3134
3171
  toggleThinkingBlockVisibility() {
3135
3172
  this.hideThinkingBlock = !this.hideThinkingBlock;
3136
3173
  this.settingsManager.setHideThinkingBlock(this.hideThinkingBlock);
3174
+ // Same reasoning as setToolsExpanded.
3175
+ this.coalescingTerminal.passNextFullRedraw();
3137
3176
  // Rebuild chat from session messages
3138
3177
  this.chatContainer.clear();
3139
3178
  this.rebuildChatFromMessages();