@akon-labs/nexus-cli 0.1.10 → 0.1.11

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 (127) hide show
  1. package/dist/cli/require-login.d.ts.map +1 -1
  2. package/dist/cli/require-login.js +2 -2
  3. package/dist/cli/require-login.js.map +1 -1
  4. package/dist/cli.js +2492 -1088
  5. package/dist/core/agent-session.d.ts +3 -1
  6. package/dist/core/agent-session.d.ts.map +1 -1
  7. package/dist/core/agent-session.js +4 -0
  8. package/dist/core/agent-session.js.map +1 -1
  9. package/dist/core/extensions/index.d.ts +1 -1
  10. package/dist/core/extensions/index.d.ts.map +1 -1
  11. package/dist/core/extensions/index.js.map +1 -1
  12. package/dist/core/extensions/loader.d.ts.map +1 -1
  13. package/dist/core/extensions/loader.js +6 -0
  14. package/dist/core/extensions/loader.js.map +1 -1
  15. package/dist/core/extensions/runner.d.ts +7 -1
  16. package/dist/core/extensions/runner.d.ts.map +1 -1
  17. package/dist/core/extensions/runner.js +14 -0
  18. package/dist/core/extensions/runner.js.map +1 -1
  19. package/dist/core/extensions/types.d.ts +18 -0
  20. package/dist/core/extensions/types.d.ts.map +1 -1
  21. package/dist/core/extensions/types.js.map +1 -1
  22. package/dist/core/graph-rail-store.d.ts +10 -0
  23. package/dist/core/graph-rail-store.d.ts.map +1 -1
  24. package/dist/core/graph-rail-store.js +9 -0
  25. package/dist/core/graph-rail-store.js.map +1 -1
  26. package/dist/core/keybindings.d.ts +2 -1
  27. package/dist/core/keybindings.d.ts.map +1 -1
  28. package/dist/core/keybindings.js +4 -1
  29. package/dist/core/keybindings.js.map +1 -1
  30. package/dist/core/tools/find.d.ts.map +1 -1
  31. package/dist/core/tools/find.js +1 -1
  32. package/dist/core/tools/find.js.map +1 -1
  33. package/dist/core/tools/grep.d.ts.map +1 -1
  34. package/dist/core/tools/grep.js +1 -1
  35. package/dist/core/tools/grep.js.map +1 -1
  36. package/dist/extensions/gitnexus/client.d.ts.map +1 -1
  37. package/dist/extensions/gitnexus/client.js +45 -14
  38. package/dist/extensions/gitnexus/client.js.map +1 -1
  39. package/dist/extensions/gitnexus/config.d.ts +15 -1
  40. package/dist/extensions/gitnexus/config.d.ts.map +1 -1
  41. package/dist/extensions/gitnexus/config.js +86 -2
  42. package/dist/extensions/gitnexus/config.js.map +1 -1
  43. package/dist/extensions/gitnexus/hub-api.d.ts +56 -0
  44. package/dist/extensions/gitnexus/hub-api.d.ts.map +1 -0
  45. package/dist/extensions/gitnexus/hub-api.js +105 -0
  46. package/dist/extensions/gitnexus/hub-api.js.map +1 -0
  47. package/dist/extensions/gitnexus/index-repo.d.ts +50 -0
  48. package/dist/extensions/gitnexus/index-repo.d.ts.map +1 -0
  49. package/dist/extensions/gitnexus/index-repo.js +162 -0
  50. package/dist/extensions/gitnexus/index-repo.js.map +1 -0
  51. package/dist/extensions/gitnexus/index.d.ts.map +1 -1
  52. package/dist/extensions/gitnexus/index.js +137 -17
  53. package/dist/extensions/gitnexus/index.js.map +1 -1
  54. package/dist/extensions/gitnexus/observatory.d.ts.map +1 -1
  55. package/dist/extensions/gitnexus/observatory.js +2 -2
  56. package/dist/extensions/gitnexus/observatory.js.map +1 -1
  57. package/dist/extensions/gitnexus/resolve.d.ts +9 -0
  58. package/dist/extensions/gitnexus/resolve.d.ts.map +1 -1
  59. package/dist/extensions/gitnexus/resolve.js +52 -2
  60. package/dist/extensions/gitnexus/resolve.js.map +1 -1
  61. package/dist/extensions/index.d.ts.map +1 -1
  62. package/dist/extensions/index.js +3 -0
  63. package/dist/extensions/index.js.map +1 -1
  64. package/dist/extensions/mcp/commands.d.ts +22 -2
  65. package/dist/extensions/mcp/commands.d.ts.map +1 -1
  66. package/dist/extensions/mcp/commands.js +201 -9
  67. package/dist/extensions/mcp/commands.js.map +1 -1
  68. package/dist/extensions/mcp/config.d.ts +2 -0
  69. package/dist/extensions/mcp/config.d.ts.map +1 -1
  70. package/dist/extensions/mcp/config.js +6 -1
  71. package/dist/extensions/mcp/config.js.map +1 -1
  72. package/dist/extensions/mcp/index.d.ts.map +1 -1
  73. package/dist/extensions/mcp/index.js +54 -5
  74. package/dist/extensions/mcp/index.js.map +1 -1
  75. package/dist/extensions/mcp/mcp-setup-panel.d.ts +63 -2
  76. package/dist/extensions/mcp/mcp-setup-panel.d.ts.map +1 -1
  77. package/dist/extensions/mcp/mcp-setup-panel.js +563 -77
  78. package/dist/extensions/mcp/mcp-setup-panel.js.map +1 -1
  79. package/dist/extensions/subagent/index.d.ts +2 -1
  80. package/dist/extensions/subagent/index.d.ts.map +1 -1
  81. package/dist/extensions/subagent/index.js +19 -6
  82. package/dist/extensions/subagent/index.js.map +1 -1
  83. package/dist/extensions/subagent-render.d.ts +3 -0
  84. package/dist/extensions/subagent-render.d.ts.map +1 -0
  85. package/dist/extensions/subagent-render.js +39 -0
  86. package/dist/extensions/subagent-render.js.map +1 -0
  87. package/dist/index.js +2524 -1120
  88. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  89. package/dist/modes/interactive/components/assistant-message.js +2 -0
  90. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  91. package/dist/modes/interactive/components/command-palette.d.ts +2 -1
  92. package/dist/modes/interactive/components/command-palette.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/command-palette.js +11 -4
  94. package/dist/modes/interactive/components/command-palette.js.map +1 -1
  95. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  96. package/dist/modes/interactive/components/footer.js +9 -3
  97. package/dist/modes/interactive/components/footer.js.map +1 -1
  98. package/dist/modes/interactive/components/graph-rail.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/graph-rail.js +18 -3
  100. package/dist/modes/interactive/components/graph-rail.js.map +1 -1
  101. package/dist/modes/interactive/components/keybinding-hints.d.ts +1 -0
  102. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  103. package/dist/modes/interactive/components/keybinding-hints.js +7 -1
  104. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  105. package/dist/modes/interactive/components/landing-panel.d.ts.map +1 -1
  106. package/dist/modes/interactive/components/landing-panel.js +15 -2
  107. package/dist/modes/interactive/components/landing-panel.js.map +1 -1
  108. package/dist/modes/interactive/components/tool-execution.d.ts +3 -2
  109. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  110. package/dist/modes/interactive/components/tool-execution.js +12 -2
  111. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  112. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  113. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  114. package/dist/modes/interactive/interactive-mode.js +42 -8
  115. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  116. package/dist/rpc-entry.js +2492 -1088
  117. package/dist/utils/hidden-spawn.d.ts +29 -0
  118. package/dist/utils/hidden-spawn.d.ts.map +1 -0
  119. package/dist/utils/hidden-spawn.js +101 -0
  120. package/dist/utils/hidden-spawn.js.map +1 -0
  121. package/dist/vendor/ai.js +233 -233
  122. package/dist/vendor/tui.js +1 -1
  123. package/native/win32/build.mjs +95 -0
  124. package/native/win32/prebuilds/win32-x64/hidden-spawn.exe +0 -0
  125. package/native/win32/src/hidden-spawn.c +157 -0
  126. package/npm-shrinkwrap.json +2 -37
  127. package/package.json +7 -3
@@ -167,11 +167,15 @@ function formatLoginProviderCompletionDescription(provider) {
167
167
  const authTypes = provider.authTypes.map(formatAuthSelectorProviderType).join("/");
168
168
  return provider.name === provider.id ? authTypes : `${provider.name} · ${authTypes}`;
169
169
  }
170
+ const FULLSCREEN_WHEEL_SCROLL_LINES = 3;
170
171
  /** Composition root for selecting the interactive terminal renderer. */
171
172
  export function createInteractiveTui(options) {
172
173
  const terminal = options.terminal ?? new ProcessTerminal();
173
174
  if (options.uiMode === "fullscreen") {
174
- return new TuiAltScreen(terminal, options.showHardwareCursor, options.logDirectory, { openUrl: openBrowser });
175
+ return new TuiAltScreen(terminal, options.showHardwareCursor, options.logDirectory, {
176
+ openUrl: openBrowser,
177
+ wheelScrollLines: FULLSCREEN_WHEEL_SCROLL_LINES,
178
+ });
175
179
  }
176
180
  return new TuiMainScreen(terminal, options.showHardwareCursor, options.logDirectory);
177
181
  }
@@ -243,6 +247,7 @@ export class InteractiveMode {
243
247
  defaultHiddenThinkingLabel = "Thinking...";
244
248
  hiddenThinkingLabel = this.defaultHiddenThinkingLabel;
245
249
  lastSigintTime = 0;
250
+ quitConfirmationTimer;
246
251
  lastEscapeTime = 0;
247
252
  anthropicSubscriptionWarningShown = false;
248
253
  // Status line tracking (for mutating immediately-sequential status updates)
@@ -437,6 +442,10 @@ export class InteractiveMode {
437
442
  handle.hide();
438
443
  this.ui.setFocus(this.editor);
439
444
  void this.defaultEditor.onSubmit?.(commandText);
445
+ }, (commandText) => {
446
+ handle.hide();
447
+ this.editor.setText(commandText);
448
+ this.ui.setFocus(this.editor);
440
449
  }, () => {
441
450
  handle.hide();
442
451
  this.ui.setFocus(this.editor);
@@ -1575,6 +1584,10 @@ export class InteractiveMode {
1575
1584
  getRegisteredToolDefinition(toolName) {
1576
1585
  return this.session.getToolDefinition(toolName);
1577
1586
  }
1587
+ /** Display-only renderer override for a tool, independent of which extension's definition executes it. */
1588
+ getRegisteredToolRenderer(toolName) {
1589
+ return this.session.getToolRenderer(toolName);
1590
+ }
1578
1591
  getMarkdownTransformers() {
1579
1592
  return [this.mermaidMarkdownTransformer, ...this.session.extensionRunner.getMarkdownTransformers()];
1580
1593
  }
@@ -2594,7 +2607,7 @@ export class InteractiveMode {
2594
2607
  const component = new ToolExecutionComponent(content.name, content.id, content.arguments, {
2595
2608
  showImages: this.settingsManager.getShowImages(),
2596
2609
  imageWidthCells: this.settingsManager.getImageWidthCells(),
2597
- }, this.getRegisteredToolDefinition(content.name), this.ui, this.sessionManager.getCwd());
2610
+ }, this.getRegisteredToolDefinition(content.name), this.ui, this.sessionManager.getCwd(), this.getRegisteredToolRenderer(content.name));
2598
2611
  component.setExpanded(this.toolOutputExpanded);
2599
2612
  this.chatContainer.addChild(component);
2600
2613
  this.pendingTools.set(content.id, component);
@@ -2664,7 +2677,7 @@ export class InteractiveMode {
2664
2677
  component = new ToolExecutionComponent(event.toolName, event.toolCallId, event.args, {
2665
2678
  showImages: this.settingsManager.getShowImages(),
2666
2679
  imageWidthCells: this.settingsManager.getImageWidthCells(),
2667
- }, this.getRegisteredToolDefinition(event.toolName), this.ui, this.sessionManager.getCwd());
2680
+ }, this.getRegisteredToolDefinition(event.toolName), this.ui, this.sessionManager.getCwd(), this.getRegisteredToolRenderer(event.toolName));
2668
2681
  component.setExpanded(this.toolOutputExpanded);
2669
2682
  this.chatContainer.addChild(component);
2670
2683
  this.pendingTools.set(event.toolCallId, component);
@@ -2964,7 +2977,7 @@ export class InteractiveMode {
2964
2977
  const component = new ToolExecutionComponent(content.name, content.id, content.arguments, {
2965
2978
  showImages: this.settingsManager.getShowImages(),
2966
2979
  imageWidthCells: this.settingsManager.getImageWidthCells(),
2967
- }, this.getRegisteredToolDefinition(content.name), this.ui, this.sessionManager.getCwd());
2980
+ }, this.getRegisteredToolDefinition(content.name), this.ui, this.sessionManager.getCwd(), this.getRegisteredToolRenderer(content.name));
2968
2981
  component.setExpanded(this.toolOutputExpanded);
2969
2982
  this.chatContainer.addChild(component);
2970
2983
  if (message.stopReason === "aborted" || message.stopReason === "error") {
@@ -3099,13 +3112,30 @@ export class InteractiveMode {
3099
3112
  // =========================================================================
3100
3113
  handleCtrlC() {
3101
3114
  const now = Date.now();
3102
- if (now - this.lastSigintTime < 500) {
3115
+ if (now - this.lastSigintTime < 2_000) {
3116
+ if (this.quitConfirmationTimer) {
3117
+ clearTimeout(this.quitConfirmationTimer);
3118
+ this.quitConfirmationTimer = undefined;
3119
+ }
3120
+ this.lastSigintTime = 0;
3121
+ this.setExtensionStatus("quit-confirmation", undefined);
3103
3122
  void this.shutdown();
3123
+ return;
3104
3124
  }
3105
- else {
3106
- this.clearEditor();
3107
- this.lastSigintTime = now;
3125
+ if (this.quitConfirmationTimer) {
3126
+ clearTimeout(this.quitConfirmationTimer);
3108
3127
  }
3128
+ this.clearEditor();
3129
+ this.lastSigintTime = now;
3130
+ const shortcut = formatKeyText(this.keybindings.getKeys("app.clear").join("/"), { capitalize: true });
3131
+ this.setExtensionStatus("quit-confirmation", `Press ${shortcut} again to exit`);
3132
+ this.quitConfirmationTimer = setTimeout(() => {
3133
+ if (this.lastSigintTime !== now)
3134
+ return;
3135
+ this.lastSigintTime = 0;
3136
+ this.quitConfirmationTimer = undefined;
3137
+ this.setExtensionStatus("quit-confirmation", undefined);
3138
+ }, 2_000);
3109
3139
  }
3110
3140
  handleCtrlD() {
3111
3141
  // Only called when editor is empty (enforced by CustomEditor)
@@ -3121,6 +3151,10 @@ export class InteractiveMode {
3121
3151
  if (this.isShuttingDown)
3122
3152
  return;
3123
3153
  this.isShuttingDown = true;
3154
+ if (this.quitConfirmationTimer) {
3155
+ clearTimeout(this.quitConfirmationTimer);
3156
+ this.quitConfirmationTimer = undefined;
3157
+ }
3124
3158
  this.graphRailUnsubscribe?.();
3125
3159
  this.graphRailUnsubscribe = undefined;
3126
3160
  this.landingPanel?.dispose();