@ashx-j/lunr-dev 0.2.13-dev.3.1 → 0.2.13-dev.4.1

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 (120) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/builtin-extensions/ashxj-tui.d.ts +2 -1
  3. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  4. package/dist/builtin-extensions/ashxj-tui.js +7 -17
  5. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  6. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -0
  7. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  8. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +27 -22
  9. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  10. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  11. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +5 -2
  12. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  13. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  14. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +12 -1
  15. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  16. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +1 -0
  17. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +3 -2
  19. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +1 -0
  22. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -1
  23. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +3 -0
  25. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +3 -3
  28. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  29. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +2 -2
  31. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  32. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +3 -0
  34. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  36. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +7 -1
  37. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +2 -0
  40. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +1 -0
  42. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +19 -3
  44. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  45. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +10 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +19 -0
  48. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
  50. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +2 -1
  53. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +17 -0
  55. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +3 -1
  57. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +14 -3
  59. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +14 -0
  61. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +2 -2
  65. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +12 -10
  68. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  69. package/dist/core/customize.d.ts +2 -4
  70. package/dist/core/customize.d.ts.map +1 -1
  71. package/dist/core/customize.js +2 -8
  72. package/dist/core/customize.js.map +1 -1
  73. package/dist/core/settings-manager.d.ts +0 -6
  74. package/dist/core/settings-manager.d.ts.map +1 -1
  75. package/dist/core/settings-manager.js +0 -17
  76. package/dist/core/settings-manager.js.map +1 -1
  77. package/dist/core/slash-commands.d.ts.map +1 -1
  78. package/dist/core/slash-commands.js +1 -0
  79. package/dist/core/slash-commands.js.map +1 -1
  80. package/dist/migrations.d.ts +2 -0
  81. package/dist/migrations.d.ts.map +1 -1
  82. package/dist/migrations.js +14 -4
  83. package/dist/migrations.js.map +1 -1
  84. package/dist/modes/interactive/components/assistant-message.d.ts +1 -3
  85. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  86. package/dist/modes/interactive/components/assistant-message.js +4 -32
  87. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  88. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  89. package/dist/modes/interactive/components/custom-editor.js +2 -1
  90. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  91. package/dist/modes/interactive/components/plan-message.d.ts +1 -3
  92. package/dist/modes/interactive/components/plan-message.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/plan-message.js +1 -16
  94. package/dist/modes/interactive/components/plan-message.js.map +1 -1
  95. package/dist/modes/interactive/components/settings-selector.d.ts +0 -4
  96. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  97. package/dist/modes/interactive/components/settings-selector.js +10 -30
  98. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  99. package/dist/modes/interactive/components/user-message.d.ts +1 -3
  100. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/user-message.js +2 -19
  102. package/dist/modes/interactive/components/user-message.js.map +1 -1
  103. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  104. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  105. package/dist/modes/interactive/interactive-mode.js +29 -34
  106. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  107. package/dist/modes/interactive/theme/moon.json +0 -1
  108. package/dist/modes/interactive/theme/theme-schema.json +3 -3
  109. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  110. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  111. package/dist/modes/interactive/theme/theme.js +0 -6
  112. package/dist/modes/interactive/theme/theme.js.map +1 -1
  113. package/docs/features.md +2 -2
  114. package/docs/keybindings.md +1 -1
  115. package/docs/quickstart.md +1 -1
  116. package/docs/settings.md +1 -3
  117. package/docs/terminal-setup.md +2 -2
  118. package/docs/usage.md +2 -1
  119. package/docs/windows.md +1 -1
  120. package/package.json +4 -4
@@ -200,6 +200,11 @@ function formatLoginProviderCompletionDescription(provider) {
200
200
  const authTypes = provider.authTypes.map(formatAuthSelectorProviderType).join("/");
201
201
  return provider.name === provider.id ? authTypes : `${provider.name} · ${authTypes}`;
202
202
  }
203
+ export async function startInteractiveToolInstalls(currentFdPath, onFdInstalled, installer = ensureTool) {
204
+ const [fdPath] = await Promise.all([installer("fd", true), installer("rg", true)]);
205
+ if (fdPath && fdPath !== currentFdPath)
206
+ onFdInstalled(fdPath);
207
+ }
203
208
  export class InteractiveMode {
204
209
  runtimeHost;
205
210
  ui;
@@ -555,11 +560,9 @@ export class InteractiveMode {
555
560
  this.fdPath = getToolPath("fd") ?? undefined;
556
561
  const toolMaintenance = startupBenchmark
557
562
  ? Promise.resolve()
558
- : Promise.all([ensureTool("fd"), ensureTool("rg")]).then(([fdPath]) => {
559
- if (fdPath && fdPath !== this.fdPath) {
560
- this.fdPath = fdPath;
561
- this.setupAutocompleteProvider();
562
- }
563
+ : startInteractiveToolInstalls(this.fdPath, (fdPath) => {
564
+ this.fdPath = fdPath;
565
+ this.setupAutocompleteProvider();
563
566
  });
564
567
  time("ensureTools");
565
568
  if (this.session.scopedModels.length > 0 && (this.options.verbose || !this.settingsManager.getQuietStartup())) {
@@ -2024,9 +2027,6 @@ export class InteractiveMode {
2024
2027
  if (!customEditor.onCtrlD) {
2025
2028
  customEditor.onCtrlD = () => this.defaultEditor.onCtrlD?.();
2026
2029
  }
2027
- if (!customEditor.onPasteImage) {
2028
- customEditor.onPasteImage = () => this.defaultEditor.onPasteImage?.();
2029
- }
2030
2030
  if (!customEditor.onExtensionShortcut) {
2031
2031
  customEditor.onExtensionShortcut = (data) => this.defaultEditor.onExtensionShortcut?.(data);
2032
2032
  }
@@ -2208,6 +2208,7 @@ export class InteractiveMode {
2208
2208
  // lunr: tool/thinking expand is per-item click; ctrl+o is not bound (tree filter still uses ctrl+o).
2209
2209
  this.defaultEditor.onAction("app.thinking.toggle", () => this.toggleThinkingBlockVisibility());
2210
2210
  this.defaultEditor.onAction("app.editor.external", () => this.openExternalEditor());
2211
+ this.defaultEditor.onAction("app.clipboard.pasteImage", () => void this.handleClipboardPaste());
2211
2212
  this.defaultEditor.onAction("app.message.copy", () => void this.handleCopyCommand());
2212
2213
  this.defaultEditor.onAction("app.message.followUp", () => this.handleFollowUp());
2213
2214
  this.defaultEditor.onAction("app.message.dequeue", () => this.handleDequeue());
@@ -2222,12 +2223,6 @@ export class InteractiveMode {
2222
2223
  this.updateEditorBorderColor();
2223
2224
  }
2224
2225
  };
2225
- // Handle clipboard paste (keybinding: app.clipboard.pasteImage, Alt+V on Windows —
2226
- // Ctrl+V is owned by the terminal and never reaches us). Images become `[image_n]`
2227
- // chips; otherwise, paste plain text from the system clipboard.
2228
- this.defaultEditor.onPasteImage = () => {
2229
- void this.handleClipboardPaste();
2230
- };
2231
2226
  this.ui.addInputListener((data) => {
2232
2227
  if (!this.ui.isPinned())
2233
2228
  return;
@@ -2349,7 +2344,7 @@ export class InteractiveMode {
2349
2344
  restoreEditorFromTreeResult(result) {
2350
2345
  this.restoreEditorDraft(result.editorText ?? "", result.editorImages);
2351
2346
  }
2352
- async handleClipboardPaste() {
2347
+ async handleClipboardPaste(options = {}) {
2353
2348
  try {
2354
2349
  const image = await readClipboardImage();
2355
2350
  if (image) {
@@ -2359,13 +2354,15 @@ export class InteractiveMode {
2359
2354
  this.showStatus(`Pasted ${formatImageMarker(id)}`);
2360
2355
  return;
2361
2356
  }
2362
- const text = await readClipboardText();
2363
- if (text) {
2364
- this.editor.insertTextAtCursor?.(text);
2365
- this.ui.requestRender();
2366
- return;
2357
+ if (options.textFallback !== false) {
2358
+ const text = await readClipboardText();
2359
+ if (text) {
2360
+ this.editor.insertTextAtCursor?.(text);
2361
+ this.ui.requestRender();
2362
+ return;
2363
+ }
2367
2364
  }
2368
- this.showStatus("Clipboard contains no image or text");
2365
+ this.showStatus(options.textFallback === false ? "Clipboard contains no image" : "Clipboard contains no image or text");
2369
2366
  }
2370
2367
  catch (err) {
2371
2368
  this.showStatus(`Clipboard paste failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -2382,6 +2379,11 @@ export class InteractiveMode {
2382
2379
  this.activateDeferredStartupEditor();
2383
2380
  this.ui.setChatScroll(0);
2384
2381
  // Handle commands
2382
+ if (text === "/paste-image") {
2383
+ this.editor.setText("");
2384
+ await this.handleClipboardPaste({ textFallback: false });
2385
+ return;
2386
+ }
2385
2387
  if (text === "/settings") {
2386
2388
  void this.showSettingsSelector();
2387
2389
  this.editor.setText("");
@@ -2801,7 +2803,7 @@ export class InteractiveMode {
2801
2803
  this.ui.requestRender();
2802
2804
  }
2803
2805
  else if (event.message.role === "assistant") {
2804
- this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.settingsManager.getGutterRail(), this.thinkingCollapse);
2806
+ this.streamingComponent = new AssistantMessageComponent(undefined, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.thinkingCollapse);
2805
2807
  // lunr: collapsible reasoning — fresh timing array for this message.
2806
2808
  this.thinkingRunTimings = [];
2807
2809
  this.streamingComponent.setThinkingTimings(this.thinkingRunTimings);
@@ -3149,12 +3151,12 @@ export class InteractiveMode {
3149
3151
  // Render user message separately if present
3150
3152
  if (skillBlock.userMessage) {
3151
3153
  this.chatContainer.addChild(new Spacer(1));
3152
- const userComponent = new UserMessageComponent(skillBlock.userMessage, this.getMarkdownThemeWithSettings(), this.outputPad, this.settingsManager.getGutterRail());
3154
+ const userComponent = new UserMessageComponent(skillBlock.userMessage, this.getMarkdownThemeWithSettings(), this.outputPad);
3153
3155
  this.chatContainer.addChild(userComponent);
3154
3156
  }
3155
3157
  }
3156
3158
  else {
3157
- const userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings(), this.outputPad, this.settingsManager.getGutterRail());
3159
+ const userComponent = new UserMessageComponent(textContent, this.getMarkdownThemeWithSettings(), this.outputPad);
3158
3160
  this.chatContainer.addChild(userComponent);
3159
3161
  }
3160
3162
  if (options?.populateHistory) {
@@ -3164,7 +3166,7 @@ export class InteractiveMode {
3164
3166
  break;
3165
3167
  }
3166
3168
  case "assistant": {
3167
- const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.settingsManager.getGutterRail(), this.thinkingCollapse);
3169
+ const assistantComponent = new AssistantMessageComponent(message, this.hideThinkingBlock, this.getMarkdownThemeWithSettings(), this.hiddenThinkingLabel, this.outputPad, this.thinkingCollapse);
3168
3170
  // lunr: collapsible reasoning — re-attach live timings when this
3169
3171
  // message was streamed in this session (undefined = history).
3170
3172
  assistantComponent.setThinkingTimings(this.thinkingTimingsByMessage.get(message));
@@ -3993,8 +3995,6 @@ export class InteractiveMode {
3993
3995
  memoryCharCap: this.settingsManager.getMemoryCharCap(),
3994
3996
  searchCurator: getSearchCuratorSetting(),
3995
3997
  // lunr: TUI customize settings
3996
- gutterRail: this.settingsManager.getGutterRail(),
3997
- promptSymbol: this.settingsManager.getPromptSymbol(),
3998
3998
  footerMcp: this.settingsManager.getFooterMcp(),
3999
3999
  footerLsp: this.settingsManager.getFooterLsp(),
4000
4000
  footerContext: this.settingsManager.getFooterContext(),
@@ -4196,12 +4196,6 @@ export class InteractiveMode {
4196
4196
  }
4197
4197
  },
4198
4198
  // lunr: TUI customize callbacks
4199
- onGutterRailChange: (enabled) => {
4200
- this.settingsManager.setGutterRail(enabled);
4201
- },
4202
- onPromptSymbolChange: (enabled) => {
4203
- this.settingsManager.setPromptSymbol(enabled);
4204
- },
4205
4199
  onFooterMcpChange: (enabled) => {
4206
4200
  this.settingsManager.setFooterMcp(enabled);
4207
4201
  },
@@ -6464,7 +6458,7 @@ export class InteractiveMode {
6464
6458
  // the result text the model sees. Esc/close counts as Decline.
6465
6459
  showPlanInChat(summary) {
6466
6460
  this.chatContainer.addChild(new Spacer(1));
6467
- this.chatContainer.addChild(new PlanMessageComponent(summary, this.getMarkdownThemeWithSettings(), this.outputPad, this.settingsManager.getGutterRail()));
6461
+ this.chatContainer.addChild(new PlanMessageComponent(summary, this.getMarkdownThemeWithSettings(), this.outputPad));
6468
6462
  this.ui.requestRender();
6469
6463
  }
6470
6464
  async showPlanApprovalDialog(summary) {
@@ -6678,6 +6672,7 @@ ${cycleThinkingLevel ? `| \`${cycleThinkingLevel}\` | Cycle thinking level |\n`
6678
6672
  | \`${followUp}\` | Queue follow-up message |
6679
6673
  | \`${dequeue}\` | Restore queued messages |
6680
6674
  | \`${pasteImage}\` | Paste image or text from clipboard |
6675
+ | \`/paste-image\` | Paste image without a terminal shortcut |
6681
6676
  | \`/\` | Slash commands |
6682
6677
  | \`!\` | Run bash command |
6683
6678
  | \`!!\` | Run bash command (excluded from context) |