@akon-labs/nexus-cli 0.1.5 → 0.1.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 (94) hide show
  1. package/CHANGELOG.md +29 -7
  2. package/README.md +2 -3
  3. package/dist/cli/require-login.d.ts.map +1 -1
  4. package/dist/cli/require-login.js +1 -1
  5. package/dist/cli/require-login.js.map +1 -1
  6. package/dist/cli.js +155 -213
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +1 -1
  9. package/dist/config.js.map +1 -1
  10. package/dist/core/auth-guidance.d.ts.map +1 -1
  11. package/dist/core/auth-guidance.js +3 -2
  12. package/dist/core/auth-guidance.js.map +1 -1
  13. package/dist/core/auto-model.d.ts +9 -0
  14. package/dist/core/auto-model.d.ts.map +1 -0
  15. package/dist/core/auto-model.js +11 -0
  16. package/dist/core/auto-model.js.map +1 -0
  17. package/dist/core/extensions/loader.d.ts.map +1 -1
  18. package/dist/core/extensions/loader.js +4 -8
  19. package/dist/core/extensions/loader.js.map +1 -1
  20. package/dist/core/model-resolver.d.ts.map +1 -1
  21. package/dist/core/model-resolver.js +2 -1
  22. package/dist/core/model-resolver.js.map +1 -1
  23. package/dist/core/models-dev-catalog.d.ts.map +1 -1
  24. package/dist/core/models-dev-catalog.js +11 -7
  25. package/dist/core/models-dev-catalog.js.map +1 -1
  26. package/dist/core/sdk.d.ts +1 -1
  27. package/dist/core/sdk.d.ts.map +1 -1
  28. package/dist/core/sdk.js +1 -1
  29. package/dist/core/sdk.js.map +1 -1
  30. package/dist/core/slash-commands.d.ts.map +1 -1
  31. package/dist/core/slash-commands.js +1 -1
  32. package/dist/core/slash-commands.js.map +1 -1
  33. package/dist/core/tools/websearch.d.ts.map +1 -1
  34. package/dist/core/tools/websearch.js +52 -37
  35. package/dist/core/tools/websearch.js.map +1 -1
  36. package/dist/extensions/gitnexus/device-auth.d.ts.map +1 -1
  37. package/dist/extensions/gitnexus/device-auth.js +2 -1
  38. package/dist/extensions/gitnexus/device-auth.js.map +1 -1
  39. package/dist/extensions/gitnexus/gateway.d.ts +0 -2
  40. package/dist/extensions/gitnexus/gateway.d.ts.map +1 -1
  41. package/dist/extensions/gitnexus/gateway.js +10 -22
  42. package/dist/extensions/gitnexus/gateway.js.map +1 -1
  43. package/dist/extensions/gitnexus/index.d.ts.map +1 -1
  44. package/dist/extensions/gitnexus/index.js +10 -4
  45. package/dist/extensions/gitnexus/index.js.map +1 -1
  46. package/dist/extensions/web-access.d.ts +1 -6
  47. package/dist/extensions/web-access.d.ts.map +1 -1
  48. package/dist/extensions/web-access.js +8 -21
  49. package/dist/extensions/web-access.js.map +1 -1
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +159 -213
  53. package/dist/index.js.map +1 -1
  54. package/dist/main.d.ts.map +1 -1
  55. package/dist/main.js +1 -1
  56. package/dist/main.js.map +1 -1
  57. package/dist/migrations.d.ts.map +1 -1
  58. package/dist/migrations.js +2 -2
  59. package/dist/migrations.js.map +1 -1
  60. package/dist/modes/interactive/components/command-palette.d.ts.map +1 -1
  61. package/dist/modes/interactive/components/command-palette.js +2 -2
  62. package/dist/modes/interactive/components/command-palette.js.map +1 -1
  63. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  64. package/dist/modes/interactive/components/model-selector.js +18 -7
  65. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  66. package/dist/modes/interactive/interactive-mode.d.ts +0 -5
  67. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  68. package/dist/modes/interactive/interactive-mode.js +22 -128
  69. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  70. package/dist/rpc-entry.js +155 -213
  71. package/dist/vendor/ai.js +12 -12
  72. package/docs/compaction.md +1 -1
  73. package/docs/rpc.md +1 -1
  74. package/docs/settings.md +1 -1
  75. package/docs/usage.md +0 -2
  76. package/examples/extensions/border-status-editor.ts +1 -6
  77. package/examples/extensions/custom-compaction.ts +1 -1
  78. package/examples/extensions/custom-footer.ts +1 -1
  79. package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
  80. package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
  81. package/examples/extensions/gondolin/index.ts +1 -1
  82. package/examples/extensions/handoff.ts +2 -2
  83. package/examples/extensions/hello.ts +1 -1
  84. package/examples/extensions/plan-mode/index.ts +1 -1
  85. package/examples/extensions/preset.ts +1 -1
  86. package/examples/extensions/qna.ts +1 -1
  87. package/examples/extensions/sandbox/index.ts +1 -1
  88. package/examples/extensions/subagent/index.ts +3 -3
  89. package/examples/extensions/summarize.ts +1 -1
  90. package/examples/extensions/tic-tac-toe.ts +1 -1
  91. package/examples/extensions/todo.ts +1 -1
  92. package/examples/extensions/tool-override.ts +1 -1
  93. package/npm-shrinkwrap.json +2 -2
  94. package/package.json +1 -1
@@ -13,6 +13,7 @@ import { spawn, spawnSync } from "child_process";
13
13
  import { APP_NAME, APP_TITLE, CONFIG_DIR_NAME, getAgentDir, getAuthPath, getDebugLogPath, getDocsPath, getShareViewerUrl, readAppEnv, VERSION, } from "../../config.js";
14
14
  import { parseSkillBlock } from "../../core/agent-session.js";
15
15
  import { SessionImportFileNotFoundError } from "../../core/agent-session-runtime.js";
16
+ import { AUTO_MODEL_ID, AUTO_MODEL_LABEL, AUTO_PROVIDER_ID, isAutoModel, isAutoModelReference, } from "../../core/auto-model.js";
16
17
  import { CACHE_TTL_MS, collectCacheMisses, computeCacheWaste, detectCacheMiss, } from "../../core/cache-stats.js";
17
18
  import { FooterDataProvider } from "../../core/footer-data-provider.js";
18
19
  import { graphRailStore } from "../../core/graph-rail-store.js";
@@ -459,9 +460,13 @@ export class InteractiveMode {
459
460
  const modelCommand = slashCommands.find((command) => command.name === "model");
460
461
  if (modelCommand) {
461
462
  modelCommand.getArgumentCompletions = (prefix) => {
462
- const models = this.session.scopedModels.length > 0
463
+ const scopedOrAvailableModels = this.session.scopedModels.length > 0
463
464
  ? this.session.scopedModels.map((s) => s.model)
464
465
  : this.session.modelRuntime.getAvailableSnapshot();
466
+ const autoModel = this.session.modelRuntime.getAvailableSnapshot().find((model) => isAutoModel(model));
467
+ const models = autoModel
468
+ ? [autoModel, ...scopedOrAvailableModels.filter((model) => !isAutoModel(model))]
469
+ : scopedOrAvailableModels;
465
470
  if (models.length === 0)
466
471
  return null;
467
472
  // Create items with provider/id format
@@ -469,12 +474,13 @@ export class InteractiveMode {
469
474
  id: m.id,
470
475
  provider: m.provider,
471
476
  name: m.name,
472
- label: `${m.provider}/${m.id}`,
477
+ displayLabel: isAutoModel(m) ? AUTO_MODEL_LABEL : m.id,
478
+ value: isAutoModel(m) ? AUTO_MODEL_ID : `${m.provider}/${m.id}`,
473
479
  }));
474
480
  return createFuzzyAutocompleteItems(items, prefix, getModelSearchText, (item) => ({
475
- value: item.label,
476
- label: item.id,
477
- description: item.provider,
481
+ value: item.value,
482
+ label: item.displayLabel,
483
+ description: isAutoModel(item) ? "Nexus default" : item.provider,
478
484
  }));
479
485
  };
480
486
  }
@@ -2344,6 +2350,11 @@ export class InteractiveMode {
2344
2350
  await this.showModelsSelector();
2345
2351
  return;
2346
2352
  }
2353
+ if (text === "/auto") {
2354
+ this.editor.setText("");
2355
+ await this.handleModelCommand(AUTO_MODEL_ID);
2356
+ return;
2357
+ }
2347
2358
  if (text === "/model" || text.startsWith("/model ")) {
2348
2359
  const searchTerm = text.startsWith("/model ") ? text.slice(7).trim() : undefined;
2349
2360
  this.editor.setText("");
@@ -2380,11 +2391,6 @@ export class InteractiveMode {
2380
2391
  this.editor.setText("");
2381
2392
  return;
2382
2393
  }
2383
- if (text === "/hotkeys") {
2384
- this.handleHotkeysCommand();
2385
- this.editor.setText("");
2386
- return;
2387
- }
2388
2394
  if (text === "/theme") {
2389
2395
  this.showThemeSelector();
2390
2396
  this.editor.setText("");
@@ -3901,7 +3907,7 @@ export class InteractiveMode {
3901
3907
  await this.session.setModel(model);
3902
3908
  this.footer.invalidate();
3903
3909
  this.updateEditorBorderColor();
3904
- this.showStatus(`Model: ${model.id}`);
3910
+ this.showStatus(`Model: ${isAutoModel(model) ? "Auto" : model.id}`);
3905
3911
  void this.maybeWarnAboutAnthropicSubscriptionAuth(model);
3906
3912
  }
3907
3913
  catch (error) {
@@ -3912,6 +3918,11 @@ export class InteractiveMode {
3912
3918
  this.showModelSelector(searchTerm);
3913
3919
  }
3914
3920
  async findExactModelMatch(searchTerm) {
3921
+ if (isAutoModelReference(searchTerm)) {
3922
+ return this.session.modelRuntime
3923
+ .getAvailableSnapshot()
3924
+ .find((model) => model.provider === AUTO_PROVIDER_ID && model.id === AUTO_MODEL_ID);
3925
+ }
3915
3926
  const cachedModels = this.session.scopedModels.length > 0
3916
3927
  ? this.session.scopedModels.map((scoped) => scoped.model)
3917
3928
  : [...this.session.modelRuntime.getAvailableSnapshot()];
@@ -5206,123 +5217,6 @@ export class InteractiveMode {
5206
5217
  getAppKeyDisplay(action) {
5207
5218
  return keyDisplayText(action);
5208
5219
  }
5209
- /**
5210
- * Get capitalized display string for an editor keybinding action.
5211
- */
5212
- getEditorKeyDisplay(action) {
5213
- return keyDisplayText(action);
5214
- }
5215
- handleHotkeysCommand() {
5216
- // Navigation keybindings
5217
- const cursorUp = this.getEditorKeyDisplay("tui.editor.cursorUp");
5218
- const cursorDown = this.getEditorKeyDisplay("tui.editor.cursorDown");
5219
- const cursorLeft = this.getEditorKeyDisplay("tui.editor.cursorLeft");
5220
- const cursorRight = this.getEditorKeyDisplay("tui.editor.cursorRight");
5221
- const cursorWordLeft = this.getEditorKeyDisplay("tui.editor.cursorWordLeft");
5222
- const cursorWordRight = this.getEditorKeyDisplay("tui.editor.cursorWordRight");
5223
- const cursorLineStart = this.getEditorKeyDisplay("tui.editor.cursorLineStart");
5224
- const cursorLineEnd = this.getEditorKeyDisplay("tui.editor.cursorLineEnd");
5225
- const jumpForward = this.getEditorKeyDisplay("tui.editor.jumpForward");
5226
- const jumpBackward = this.getEditorKeyDisplay("tui.editor.jumpBackward");
5227
- const pageUp = this.getEditorKeyDisplay("tui.editor.pageUp");
5228
- const pageDown = this.getEditorKeyDisplay("tui.editor.pageDown");
5229
- // Editing keybindings
5230
- const submit = this.getEditorKeyDisplay("tui.input.submit");
5231
- const newLine = this.getEditorKeyDisplay("tui.input.newLine");
5232
- const deleteWordBackward = this.getEditorKeyDisplay("tui.editor.deleteWordBackward");
5233
- const deleteWordForward = this.getEditorKeyDisplay("tui.editor.deleteWordForward");
5234
- const deleteToLineStart = this.getEditorKeyDisplay("tui.editor.deleteToLineStart");
5235
- const deleteToLineEnd = this.getEditorKeyDisplay("tui.editor.deleteToLineEnd");
5236
- const yank = this.getEditorKeyDisplay("tui.editor.yank");
5237
- const yankPop = this.getEditorKeyDisplay("tui.editor.yankPop");
5238
- const undo = this.getEditorKeyDisplay("tui.editor.undo");
5239
- const tab = this.getEditorKeyDisplay("tui.input.tab");
5240
- // App keybindings
5241
- const interrupt = this.getAppKeyDisplay("app.interrupt");
5242
- const clear = this.getAppKeyDisplay("app.clear");
5243
- const exit = this.getAppKeyDisplay("app.exit");
5244
- const suspend = this.getAppKeyDisplay("app.suspend");
5245
- const cycleThinkingLevel = this.getAppKeyDisplay("app.thinking.cycle");
5246
- const cycleModelForward = this.getAppKeyDisplay("app.model.cycleForward");
5247
- const selectModel = this.getAppKeyDisplay("app.model.select");
5248
- const expandTools = this.getAppKeyDisplay("app.tools.expand");
5249
- const toggleThinking = this.getAppKeyDisplay("app.thinking.toggle");
5250
- const externalEditor = this.getAppKeyDisplay("app.editor.external");
5251
- const cycleModelBackward = this.getAppKeyDisplay("app.model.cycleBackward");
5252
- const copyMessage = this.getAppKeyDisplay("app.message.copy");
5253
- const followUp = this.getAppKeyDisplay("app.message.followUp");
5254
- const dequeue = this.getAppKeyDisplay("app.message.dequeue");
5255
- const pasteImage = this.getAppKeyDisplay("app.clipboard.pasteImage");
5256
- let hotkeys = `
5257
- **Navigation**
5258
- | Key | Action |
5259
- |-----|--------|
5260
- | \`${cursorUp}\` / \`${cursorDown}\` / \`${cursorLeft}\` / \`${cursorRight}\` | Move cursor / browse history |
5261
- | \`${cursorWordLeft}\` / \`${cursorWordRight}\` | Move by word |
5262
- | \`${cursorLineStart}\` | Start of line |
5263
- | \`${cursorLineEnd}\` | End of line |
5264
- | \`${jumpForward}\` | Jump forward to character |
5265
- | \`${jumpBackward}\` | Jump backward to character |
5266
- | \`${pageUp}\` / \`${pageDown}\` | Scroll by page |
5267
-
5268
- **Editing**
5269
- | Key | Action |
5270
- |-----|--------|
5271
- | \`${submit}\` | Send message |
5272
- | \`${newLine}\` | New line${process.platform === "win32" ? " (Ctrl+Enter on Windows Terminal)" : ""} |
5273
- | \`${deleteWordBackward}\` | Delete word backwards |
5274
- | \`${deleteWordForward}\` | Delete word forwards |
5275
- | \`${deleteToLineStart}\` | Delete to start of line |
5276
- | \`${deleteToLineEnd}\` | Delete to end of line |
5277
- | \`${yank}\` | Paste the most-recently-deleted text |
5278
- | \`${yankPop}\` | Cycle through the deleted text after pasting |
5279
- | \`${undo}\` | Undo |
5280
-
5281
- **Other**
5282
- | Key | Action |
5283
- |-----|--------|
5284
- | \`${tab}\` | Path completion / accept autocomplete |
5285
- | \`${interrupt}\` | Cancel autocomplete / abort streaming |
5286
- | \`${clear}\` | Clear editor (first) / exit (second) |
5287
- | \`${exit}\` | Exit (when editor is empty) |
5288
- | \`${suspend}\` | Suspend to background |
5289
- | \`${cycleThinkingLevel}\` | Cycle thinking level |
5290
- | \`${cycleModelForward}\` / \`${cycleModelBackward}\` | Cycle models |
5291
- | \`${selectModel}\` | Open model selector |
5292
- | \`${expandTools}\` | Toggle tool output expansion |
5293
- | \`${toggleThinking}\` | Toggle thinking block visibility |
5294
- | \`${externalEditor}\` | Edit message in external editor |
5295
- | \`${copyMessage}\` | Copy last assistant message |
5296
- | \`${followUp}\` | Queue follow-up message |
5297
- | \`${dequeue}\` | Restore queued messages |
5298
- | \`${pasteImage}\` | Paste image or text from clipboard |
5299
- | \`/\` | Slash commands |
5300
- | \`!\` | Run bash command |
5301
- | \`!!\` | Run bash command (excluded from context) |
5302
- `;
5303
- // Add extension-registered shortcuts
5304
- const extensionRunner = this.session.extensionRunner;
5305
- const shortcuts = extensionRunner.getShortcuts(this.keybindings.getEffectiveConfig());
5306
- if (shortcuts.size > 0) {
5307
- hotkeys += `
5308
- **Extensions**
5309
- | Key | Action |
5310
- |-----|--------|
5311
- `;
5312
- for (const [key, shortcut] of shortcuts) {
5313
- const description = shortcut.description ?? shortcut.extensionPath;
5314
- const keyDisplay = formatKeyText(key, { capitalize: true });
5315
- hotkeys += `| \`${keyDisplay}\` | ${description} |\n`;
5316
- }
5317
- }
5318
- this.chatContainer.addChild(new Spacer(1));
5319
- this.chatContainer.addChild(new DynamicBorder());
5320
- this.chatContainer.addChild(new Text(theme.bold(theme.fg("accent", "Keyboard Shortcuts")), 1, 0));
5321
- this.chatContainer.addChild(new Spacer(1));
5322
- this.chatContainer.addChild(new Markdown(hotkeys.trim(), 1, 1, this.getMarkdownThemeWithSettings()));
5323
- this.chatContainer.addChild(new DynamicBorder());
5324
- this.ui.requestRender();
5325
- }
5326
5220
  async handleClearCommand() {
5327
5221
  this.clearStatusIndicator();
5328
5222
  try {