@astralyn/pi 0.82.6 → 0.82.7

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 (183) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +1 -1
  3. package/dist/cli/session-picker.d.ts.map +1 -1
  4. package/dist/cli/session-picker.js +11 -13
  5. package/dist/cli/session-picker.js.map +1 -1
  6. package/dist/core/extensions/types.d.ts +4 -0
  7. package/dist/core/extensions/types.d.ts.map +1 -1
  8. package/dist/core/extensions/types.js.map +1 -1
  9. package/dist/core/session-manager.d.ts.map +1 -1
  10. package/dist/core/session-manager.js +2 -2
  11. package/dist/core/session-manager.js.map +1 -1
  12. package/dist/core/tools/bash.d.ts +1 -5
  13. package/dist/core/tools/bash.d.ts.map +1 -1
  14. package/dist/core/tools/bash.js +16 -41
  15. package/dist/core/tools/bash.js.map +1 -1
  16. package/dist/core/tools/edit.d.ts.map +1 -1
  17. package/dist/core/tools/edit.js +42 -11
  18. package/dist/core/tools/edit.js.map +1 -1
  19. package/dist/core/tools/find.d.ts.map +1 -1
  20. package/dist/core/tools/find.js +6 -7
  21. package/dist/core/tools/find.js.map +1 -1
  22. package/dist/core/tools/grep.d.ts.map +1 -1
  23. package/dist/core/tools/grep.js +17 -8
  24. package/dist/core/tools/grep.js.map +1 -1
  25. package/dist/core/tools/ls.d.ts.map +1 -1
  26. package/dist/core/tools/ls.js +3 -3
  27. package/dist/core/tools/ls.js.map +1 -1
  28. package/dist/core/tools/read.d.ts.map +1 -1
  29. package/dist/core/tools/read.js +4 -4
  30. package/dist/core/tools/read.js.map +1 -1
  31. package/dist/core/tools/render-utils.d.ts +7 -0
  32. package/dist/core/tools/render-utils.d.ts.map +1 -1
  33. package/dist/core/tools/render-utils.js +11 -0
  34. package/dist/core/tools/render-utils.js.map +1 -1
  35. package/dist/core/tools/write.d.ts.map +1 -1
  36. package/dist/core/tools/write.js +2 -3
  37. package/dist/core/tools/write.js.map +1 -1
  38. package/dist/extensions/deepwiki/render.d.ts.map +1 -1
  39. package/dist/extensions/deepwiki/render.js +34 -22
  40. package/dist/extensions/deepwiki/render.js.map +1 -1
  41. package/dist/extensions/plan/constants.d.ts +32 -4
  42. package/dist/extensions/plan/constants.d.ts.map +1 -1
  43. package/dist/extensions/plan/constants.js +37 -6
  44. package/dist/extensions/plan/constants.js.map +1 -1
  45. package/dist/extensions/plan/index.d.ts +27 -0
  46. package/dist/extensions/plan/index.d.ts.map +1 -1
  47. package/dist/extensions/plan/index.js +150 -44
  48. package/dist/extensions/plan/index.js.map +1 -1
  49. package/dist/extensions/plan/schema.d.ts +5 -0
  50. package/dist/extensions/plan/schema.d.ts.map +1 -1
  51. package/dist/extensions/plan/schema.js.map +1 -1
  52. package/dist/extensions/plan/state.d.ts +11 -2
  53. package/dist/extensions/plan/state.d.ts.map +1 -1
  54. package/dist/extensions/plan/state.js +31 -9
  55. package/dist/extensions/plan/state.js.map +1 -1
  56. package/dist/extensions/plan/storage.d.ts +11 -3
  57. package/dist/extensions/plan/storage.d.ts.map +1 -1
  58. package/dist/extensions/plan/storage.js +45 -20
  59. package/dist/extensions/plan/storage.js.map +1 -1
  60. package/dist/extensions/plan/view.d.ts +15 -7
  61. package/dist/extensions/plan/view.d.ts.map +1 -1
  62. package/dist/extensions/plan/view.js +91 -16
  63. package/dist/extensions/plan/view.js.map +1 -1
  64. package/dist/extensions/question/dialog.d.ts.map +1 -1
  65. package/dist/extensions/question/dialog.js +29 -10
  66. package/dist/extensions/question/dialog.js.map +1 -1
  67. package/dist/extensions/question/index.d.ts.map +1 -1
  68. package/dist/extensions/question/index.js +7 -2
  69. package/dist/extensions/question/index.js.map +1 -1
  70. package/dist/extensions/question/render.d.ts +4 -8
  71. package/dist/extensions/question/render.d.ts.map +1 -1
  72. package/dist/extensions/question/render.js +202 -29
  73. package/dist/extensions/question/render.js.map +1 -1
  74. package/dist/extensions/question/results.d.ts.map +1 -1
  75. package/dist/extensions/question/results.js +1 -0
  76. package/dist/extensions/question/results.js.map +1 -1
  77. package/dist/extensions/question/schema.d.ts.map +1 -1
  78. package/dist/extensions/question/schema.js +2 -2
  79. package/dist/extensions/question/schema.js.map +1 -1
  80. package/dist/extensions/question/types.d.ts +1 -0
  81. package/dist/extensions/question/types.d.ts.map +1 -1
  82. package/dist/extensions/question/types.js +1 -1
  83. package/dist/extensions/question/types.js.map +1 -1
  84. package/dist/extensions/router/stream.d.ts +1 -0
  85. package/dist/extensions/router/stream.d.ts.map +1 -1
  86. package/dist/extensions/router/stream.js +44 -13
  87. package/dist/extensions/router/stream.js.map +1 -1
  88. package/dist/extensions/subagent/constants.d.ts +1 -0
  89. package/dist/extensions/subagent/constants.d.ts.map +1 -1
  90. package/dist/extensions/subagent/constants.js +1 -0
  91. package/dist/extensions/subagent/constants.js.map +1 -1
  92. package/dist/extensions/subagent/index.d.ts.map +1 -1
  93. package/dist/extensions/subagent/index.js +2 -0
  94. package/dist/extensions/subagent/index.js.map +1 -1
  95. package/dist/extensions/subagent/render.d.ts.map +1 -1
  96. package/dist/extensions/subagent/render.js +121 -48
  97. package/dist/extensions/subagent/render.js.map +1 -1
  98. package/dist/extensions/subagent/retry.d.ts +17 -0
  99. package/dist/extensions/subagent/retry.d.ts.map +1 -0
  100. package/dist/extensions/subagent/retry.js +41 -0
  101. package/dist/extensions/subagent/retry.js.map +1 -0
  102. package/dist/extensions/subagent/runner.d.ts.map +1 -1
  103. package/dist/extensions/subagent/runner.js +33 -5
  104. package/dist/extensions/subagent/runner.js.map +1 -1
  105. package/dist/extensions/subagent/sdk-runner.d.ts +6 -0
  106. package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -1
  107. package/dist/extensions/subagent/sdk-runner.js +46 -24
  108. package/dist/extensions/subagent/sdk-runner.js.map +1 -1
  109. package/dist/extensions/subagent/types.d.ts +7 -0
  110. package/dist/extensions/subagent/types.d.ts.map +1 -1
  111. package/dist/extensions/subagent/types.js.map +1 -1
  112. package/dist/extensions/todo/index.d.ts.map +1 -1
  113. package/dist/extensions/todo/index.js +1 -1
  114. package/dist/extensions/todo/index.js.map +1 -1
  115. package/dist/extensions/todo/state.d.ts.map +1 -1
  116. package/dist/extensions/todo/state.js +10 -2
  117. package/dist/extensions/todo/state.js.map +1 -1
  118. package/dist/extensions/todo/view.d.ts +1 -1
  119. package/dist/extensions/todo/view.d.ts.map +1 -1
  120. package/dist/extensions/todo/view.js +179 -34
  121. package/dist/extensions/todo/view.js.map +1 -1
  122. package/dist/migrations.d.ts.map +1 -1
  123. package/dist/migrations.js +2 -1
  124. package/dist/migrations.js.map +1 -1
  125. package/dist/modes/interactive/components/armin.d.ts.map +1 -1
  126. package/dist/modes/interactive/components/armin.js +5 -0
  127. package/dist/modes/interactive/components/armin.js.map +1 -1
  128. package/dist/modes/interactive/components/bash-execution.d.ts +1 -0
  129. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  130. package/dist/modes/interactive/components/bash-execution.js +4 -2
  131. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  132. package/dist/modes/interactive/components/countdown-timer.d.ts +13 -6
  133. package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
  134. package/dist/modes/interactive/components/countdown-timer.js +54 -17
  135. package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  136. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  137. package/dist/modes/interactive/components/extension-selector.js +10 -6
  138. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  139. package/dist/modes/interactive/components/keybinding-hints.d.ts +11 -1
  140. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/keybinding-hints.js +56 -0
  142. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  143. package/dist/modes/interactive/components/session-selector.d.ts +3 -0
  144. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  145. package/dist/modes/interactive/components/session-selector.js +52 -2
  146. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  147. package/dist/modes/interactive/components/tool-execution.d.ts +10 -0
  148. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  149. package/dist/modes/interactive/components/tool-execution.js +133 -18
  150. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  151. package/dist/modes/interactive/components/tool-group.d.ts +1 -0
  152. package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
  153. package/dist/modes/interactive/components/tool-group.js +5 -0
  154. package/dist/modes/interactive/components/tool-group.js.map +1 -1
  155. package/dist/modes/interactive/components/tree-selector.d.ts +10 -1
  156. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  157. package/dist/modes/interactive/components/tree-selector.js +55 -2
  158. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  159. package/dist/modes/interactive/interactive-mode.d.ts +5 -0
  160. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  161. package/dist/modes/interactive/interactive-mode.js +72 -18
  162. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  163. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  164. package/dist/modes/interactive/theme/theme.js +3 -2
  165. package/dist/modes/interactive/theme/theme.js.map +1 -1
  166. package/dist/utils/paths.d.ts +6 -0
  167. package/dist/utils/paths.d.ts.map +1 -1
  168. package/dist/utils/paths.js +8 -0
  169. package/dist/utils/paths.js.map +1 -1
  170. package/docs/bundled/README.md +1 -0
  171. package/docs/bundled/extensions/deepwiki.md +1 -1
  172. package/docs/bundled/extensions/plan.md +10 -9
  173. package/docs/bundled/extensions/question.md +7 -5
  174. package/docs/bundled/extensions/router.md +3 -4
  175. package/docs/bundled/extensions/statusline.md +0 -1
  176. package/docs/bundled/extensions/subagent.md +4 -3
  177. package/docs/bundled/extensions/todo.md +1 -1
  178. package/docs/bundled/tool-presentation.md +17 -16
  179. package/docs/extensions.md +20 -5
  180. package/docs/rpc.md +1 -1
  181. package/docs/usage.md +1 -1
  182. package/npm-shrinkwrap.json +6 -6
  183. package/package.json +1 -1
@@ -186,6 +186,8 @@ export class InteractiveMode {
186
186
  onInputCallback;
187
187
  pendingUserInputs = [];
188
188
  activeStatusIndicator = undefined;
189
+ activeSelector = null;
190
+ activeSelectorCleanup = null;
189
191
  idleStatus = new IdleStatus();
190
192
  workingMessage = undefined;
191
193
  workingVisible = true;
@@ -1252,7 +1254,7 @@ export class InteractiveMode {
1252
1254
  if (result.cancelled) {
1253
1255
  return { cancelled: true };
1254
1256
  }
1255
- this.chatContainer.clear();
1257
+ this.clearChat();
1256
1258
  this.renderInitialMessages();
1257
1259
  if (result.editorText && !this.editor.getText().trim()) {
1258
1260
  this.editor.setText(result.editorText);
@@ -1331,14 +1333,34 @@ export class InteractiveMode {
1331
1333
  this.stop();
1332
1334
  process.exit(1);
1333
1335
  }
1336
+ disposeChatToolComponents() {
1337
+ for (const child of this.chatContainer.children) {
1338
+ if (child instanceof ToolExecutionComponent ||
1339
+ child instanceof ToolGroupComponent ||
1340
+ child instanceof ArminComponent ||
1341
+ child instanceof DaxnutsComponent) {
1342
+ child.dispose();
1343
+ }
1344
+ }
1345
+ }
1346
+ clearChat() {
1347
+ this.disposeChatToolComponents();
1348
+ this.chatContainer.clear();
1349
+ }
1350
+ clearPendingTools() {
1351
+ for (const component of this.pendingTools.values()) {
1352
+ component.dispose();
1353
+ }
1354
+ this.pendingTools.clear();
1355
+ }
1334
1356
  renderCurrentSessionState() {
1335
1357
  this.loadedResourcesContainer.clear();
1336
- this.chatContainer.clear();
1358
+ this.clearChat();
1337
1359
  this.pendingMessagesContainer.clear();
1338
1360
  this.compactionQueuedMessages = [];
1339
1361
  this.streamingComponent = undefined;
1340
1362
  this.streamingMessage = undefined;
1341
- this.pendingTools.clear();
1363
+ this.clearPendingTools();
1342
1364
  this.renderInitialMessages();
1343
1365
  }
1344
1366
  /**
@@ -2326,7 +2348,7 @@ export class InteractiveMode {
2326
2348
  case "agent_start":
2327
2349
  this.agentRunActive = true;
2328
2350
  this.coalescingTerminal.setScrollbackPreservation(true);
2329
- this.pendingTools.clear();
2351
+ this.clearPendingTools();
2330
2352
  if (this.settingsManager.getShowTerminalProgress()) {
2331
2353
  this.ui.terminal.setProgress(true);
2332
2354
  }
@@ -2495,7 +2517,7 @@ export class InteractiveMode {
2495
2517
  this.streamingComponent = undefined;
2496
2518
  this.streamingMessage = undefined;
2497
2519
  }
2498
- this.pendingTools.clear();
2520
+ this.clearPendingTools();
2499
2521
  this.ui.requestRender();
2500
2522
  break;
2501
2523
  case "agent_settled":
@@ -2537,7 +2559,7 @@ export class InteractiveMode {
2537
2559
  }
2538
2560
  else {
2539
2561
  if (event.result) {
2540
- this.chatContainer.clear();
2562
+ this.clearChat();
2541
2563
  this.rebuildChatFromMessages();
2542
2564
  this.addMessageToChat(createCompactionSummaryMessage(event.result.summary, event.result.tokensBefore, new Date().toISOString()));
2543
2565
  this.footer.invalidate();
@@ -2733,7 +2755,7 @@ export class InteractiveMode {
2733
2755
  }
2734
2756
  }
2735
2757
  renderSessionItems(items, options = {}) {
2736
- this.pendingTools.clear();
2758
+ this.clearPendingTools();
2737
2759
  const renderedPendingTools = new Map();
2738
2760
  // Cache-miss notices are not persisted; re-derive them from the full entry
2739
2761
  // list and re-inject them after the assistant messages that paid for them.
@@ -2882,7 +2904,7 @@ export class InteractiveMode {
2882
2904
  });
2883
2905
  }
2884
2906
  rebuildChatFromMessages() {
2885
- this.chatContainer.clear();
2907
+ this.clearChat();
2886
2908
  this.renderSessionEntries(this.sessionManager.buildContextEntries());
2887
2909
  }
2888
2910
  // =========================================================================
@@ -3174,7 +3196,7 @@ export class InteractiveMode {
3174
3196
  // Same reasoning as setToolsExpanded.
3175
3197
  this.coalescingTerminal.passNextFullRedraw();
3176
3198
  // Rebuild chat from session messages
3177
- this.chatContainer.clear();
3199
+ this.clearChat();
3178
3200
  this.rebuildChatFromMessages();
3179
3201
  // If streaming, re-add the streaming component with updated visibility and re-render
3180
3202
  if (this.streamingComponent && this.streamingMessage) {
@@ -3422,15 +3444,42 @@ export class InteractiveMode {
3422
3444
  * @param create Factory that receives a `done` callback and returns the component and focus target
3423
3445
  */
3424
3446
  showSelector(create) {
3447
+ this.activeSelectorCleanup?.();
3448
+ this.activeSelectorCleanup = null;
3449
+ this.activeSelector = null;
3450
+ let selector;
3451
+ let disposed = false;
3452
+ let closed = false;
3453
+ const dispose = () => {
3454
+ if (disposed || !selector)
3455
+ return;
3456
+ disposed = true;
3457
+ selector.dispose?.();
3458
+ };
3425
3459
  const done = () => {
3426
- this.editorContainer.clear();
3427
- this.editorContainer.addChild(this.editor);
3428
- this.ui.setFocus(this.editor);
3460
+ if (closed)
3461
+ return;
3462
+ closed = true;
3463
+ dispose();
3464
+ if (!selector || this.activeSelector === selector) {
3465
+ this.activeSelector = null;
3466
+ this.activeSelectorCleanup = null;
3467
+ this.editorContainer.clear();
3468
+ this.editorContainer.addChild(this.editor);
3469
+ this.ui.setFocus(this.editor);
3470
+ }
3429
3471
  };
3430
- const { component, focus } = create(done);
3472
+ const created = create(done);
3473
+ selector = created.component;
3474
+ if (closed) {
3475
+ dispose();
3476
+ return;
3477
+ }
3478
+ this.activeSelector = selector;
3479
+ this.activeSelectorCleanup = dispose;
3431
3480
  this.editorContainer.clear();
3432
- this.editorContainer.addChild(component);
3433
- this.ui.setFocus(focus);
3481
+ this.editorContainer.addChild(selector);
3482
+ this.ui.setFocus(created.focus);
3434
3483
  this.ui.requestRender();
3435
3484
  }
3436
3485
  showSettingsSelector() {
@@ -3530,7 +3579,7 @@ export class InteractiveMode {
3530
3579
  child.setHideThinkingBlock(hidden);
3531
3580
  }
3532
3581
  }
3533
- this.chatContainer.clear();
3582
+ this.clearChat();
3534
3583
  this.rebuildChatFromMessages();
3535
3584
  },
3536
3585
  onShowCacheMissNoticesChange: (shown) => {
@@ -3952,7 +4001,7 @@ export class InteractiveMode {
3952
4001
  return;
3953
4002
  }
3954
4003
  // Update UI
3955
- this.chatContainer.clear();
4004
+ this.clearChat();
3956
4005
  this.renderInitialMessages();
3957
4006
  if (result.editorText && !this.editor.getText().trim()) {
3958
4007
  this.editor.setText(result.editorText);
@@ -3975,7 +4024,7 @@ export class InteractiveMode {
3975
4024
  }, (entryId, label) => {
3976
4025
  this.sessionManager.appendLabelChange(entryId, label);
3977
4026
  this.ui.requestRender();
3978
- }, initialSelectedId, initialFilterMode);
4027
+ }, initialSelectedId, initialFilterMode, () => this.ui.requestRender());
3979
4028
  selector.onCopy = async (text) => {
3980
4029
  if (!text) {
3981
4030
  this.showError("Selected entry has no text to copy");
@@ -5082,12 +5131,17 @@ export class InteractiveMode {
5082
5131
  }
5083
5132
  }
5084
5133
  stop() {
5134
+ this.activeSelectorCleanup?.();
5135
+ this.activeSelectorCleanup = null;
5136
+ this.activeSelector = null;
5085
5137
  if (this.settingsManager.getShowTerminalProgress()) {
5086
5138
  this.ui.terminal.setProgress(false);
5087
5139
  }
5088
5140
  this.clearStatusIndicator();
5089
5141
  this.themeController.disableAutoSync();
5090
5142
  this.clearExtensionTerminalInputListeners();
5143
+ this.clearPendingTools();
5144
+ this.disposeChatToolComponents();
5091
5145
  this.footer.dispose();
5092
5146
  this.footerDataProvider.dispose();
5093
5147
  if (this.unsubscribe) {