@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.
- package/CHANGELOG.md +29 -7
- package/README.md +2 -3
- package/dist/cli/require-login.d.ts.map +1 -1
- package/dist/cli/require-login.js +1 -1
- package/dist/cli/require-login.js.map +1 -1
- package/dist/cli.js +155 -213
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js +3 -2
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auto-model.d.ts +9 -0
- package/dist/core/auto-model.d.ts.map +1 -0
- package/dist/core/auto-model.js +11 -0
- package/dist/core/auto-model.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +4 -8
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +2 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-dev-catalog.d.ts.map +1 -1
- package/dist/core/models-dev-catalog.js +11 -7
- package/dist/core/models-dev-catalog.js.map +1 -1
- package/dist/core/sdk.d.ts +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +52 -37
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/extensions/gitnexus/device-auth.d.ts.map +1 -1
- package/dist/extensions/gitnexus/device-auth.js +2 -1
- package/dist/extensions/gitnexus/device-auth.js.map +1 -1
- package/dist/extensions/gitnexus/gateway.d.ts +0 -2
- package/dist/extensions/gitnexus/gateway.d.ts.map +1 -1
- package/dist/extensions/gitnexus/gateway.js +10 -22
- package/dist/extensions/gitnexus/gateway.js.map +1 -1
- package/dist/extensions/gitnexus/index.d.ts.map +1 -1
- package/dist/extensions/gitnexus/index.js +10 -4
- package/dist/extensions/gitnexus/index.js.map +1 -1
- package/dist/extensions/web-access.d.ts +1 -6
- package/dist/extensions/web-access.d.ts.map +1 -1
- package/dist/extensions/web-access.js +8 -21
- package/dist/extensions/web-access.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +159 -213
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +2 -2
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/command-palette.d.ts.map +1 -1
- package/dist/modes/interactive/components/command-palette.js +2 -2
- package/dist/modes/interactive/components/command-palette.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +18 -7
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +0 -5
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +22 -128
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/rpc-entry.js +155 -213
- package/dist/vendor/ai.js +12 -12
- package/docs/compaction.md +1 -1
- package/docs/rpc.md +1 -1
- package/docs/settings.md +1 -1
- package/docs/usage.md +0 -2
- package/examples/extensions/border-status-editor.ts +1 -6
- package/examples/extensions/custom-compaction.ts +1 -1
- package/examples/extensions/custom-footer.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +3 -3
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +1 -1
- package/examples/extensions/gondolin/index.ts +1 -1
- package/examples/extensions/handoff.ts +2 -2
- package/examples/extensions/hello.ts +1 -1
- package/examples/extensions/plan-mode/index.ts +1 -1
- package/examples/extensions/preset.ts +1 -1
- package/examples/extensions/qna.ts +1 -1
- package/examples/extensions/sandbox/index.ts +1 -1
- package/examples/extensions/subagent/index.ts +3 -3
- package/examples/extensions/summarize.ts +1 -1
- package/examples/extensions/tic-tac-toe.ts +1 -1
- package/examples/extensions/todo.ts +1 -1
- package/examples/extensions/tool-override.ts +1 -1
- package/npm-shrinkwrap.json +2 -2
- 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
|
|
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
|
-
|
|
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.
|
|
476
|
-
label: item.
|
|
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 {
|