vegas-chat 2.0.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 (178) hide show
  1. package/LICENSE +21 -0
  2. package/dist/autocomplete.d.ts +11 -0
  3. package/dist/autocomplete.d.ts.map +1 -0
  4. package/dist/autocomplete.js +215 -0
  5. package/dist/autocomplete.js.map +1 -0
  6. package/dist/coding/analyzer.d.ts +14 -0
  7. package/dist/coding/analyzer.d.ts.map +1 -0
  8. package/dist/coding/analyzer.js +245 -0
  9. package/dist/coding/analyzer.js.map +1 -0
  10. package/dist/coding/linter.d.ts +15 -0
  11. package/dist/coding/linter.d.ts.map +1 -0
  12. package/dist/coding/linter.js +118 -0
  13. package/dist/coding/linter.js.map +1 -0
  14. package/dist/coding/refactor.d.ts +14 -0
  15. package/dist/coding/refactor.d.ts.map +1 -0
  16. package/dist/coding/refactor.js +158 -0
  17. package/dist/coding/refactor.js.map +1 -0
  18. package/dist/coding/tester.d.ts +16 -0
  19. package/dist/coding/tester.d.ts.map +1 -0
  20. package/dist/coding/tester.js +118 -0
  21. package/dist/coding/tester.js.map +1 -0
  22. package/dist/commands/apikey.d.ts +4 -0
  23. package/dist/commands/apikey.d.ts.map +1 -0
  24. package/dist/commands/apikey.js +48 -0
  25. package/dist/commands/apikey.js.map +1 -0
  26. package/dist/commands/clear.d.ts +3 -0
  27. package/dist/commands/clear.d.ts.map +1 -0
  28. package/dist/commands/clear.js +11 -0
  29. package/dist/commands/clear.js.map +1 -0
  30. package/dist/commands/coding.d.ts +3 -0
  31. package/dist/commands/coding.d.ts.map +1 -0
  32. package/dist/commands/coding.js +106 -0
  33. package/dist/commands/coding.js.map +1 -0
  34. package/dist/commands/config.d.ts +4 -0
  35. package/dist/commands/config.d.ts.map +1 -0
  36. package/dist/commands/config.js +56 -0
  37. package/dist/commands/config.js.map +1 -0
  38. package/dist/commands/exit.d.ts +3 -0
  39. package/dist/commands/exit.d.ts.map +1 -0
  40. package/dist/commands/exit.js +10 -0
  41. package/dist/commands/exit.js.map +1 -0
  42. package/dist/commands/help.d.ts +3 -0
  43. package/dist/commands/help.d.ts.map +1 -0
  44. package/dist/commands/help.js +46 -0
  45. package/dist/commands/help.js.map +1 -0
  46. package/dist/commands/index.d.ts +4 -0
  47. package/dist/commands/index.d.ts.map +1 -0
  48. package/dist/commands/index.js +52 -0
  49. package/dist/commands/index.js.map +1 -0
  50. package/dist/commands/model.d.ts +4 -0
  51. package/dist/commands/model.d.ts.map +1 -0
  52. package/dist/commands/model.js +36 -0
  53. package/dist/commands/model.js.map +1 -0
  54. package/dist/commands/models.d.ts +4 -0
  55. package/dist/commands/models.d.ts.map +1 -0
  56. package/dist/commands/models.js +123 -0
  57. package/dist/commands/models.js.map +1 -0
  58. package/dist/commands/provider.d.ts +4 -0
  59. package/dist/commands/provider.d.ts.map +1 -0
  60. package/dist/commands/provider.js +118 -0
  61. package/dist/commands/provider.js.map +1 -0
  62. package/dist/commands/session.d.ts +5 -0
  63. package/dist/commands/session.d.ts.map +1 -0
  64. package/dist/commands/session.js +255 -0
  65. package/dist/commands/session.js.map +1 -0
  66. package/dist/commands/skills.d.ts +3 -0
  67. package/dist/commands/skills.d.ts.map +1 -0
  68. package/dist/commands/skills.js +69 -0
  69. package/dist/commands/skills.js.map +1 -0
  70. package/dist/commands/tools.d.ts +4 -0
  71. package/dist/commands/tools.d.ts.map +1 -0
  72. package/dist/commands/tools.js +59 -0
  73. package/dist/commands/tools.js.map +1 -0
  74. package/dist/commands/version.d.ts +4 -0
  75. package/dist/commands/version.d.ts.map +1 -0
  76. package/dist/commands/version.js +17 -0
  77. package/dist/commands/version.js.map +1 -0
  78. package/dist/config.d.ts +21 -0
  79. package/dist/config.d.ts.map +1 -0
  80. package/dist/config.js +110 -0
  81. package/dist/config.js.map +1 -0
  82. package/dist/database.d.ts +59 -0
  83. package/dist/database.d.ts.map +1 -0
  84. package/dist/database.js +212 -0
  85. package/dist/database.js.map +1 -0
  86. package/dist/index.d.ts +3 -0
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +19 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/loop/autoFix.d.ts +12 -0
  91. package/dist/loop/autoFix.d.ts.map +1 -0
  92. package/dist/loop/autoFix.js +42 -0
  93. package/dist/loop/autoFix.js.map +1 -0
  94. package/dist/modelCache.d.ts +3 -0
  95. package/dist/modelCache.d.ts.map +1 -0
  96. package/dist/modelCache.js +10 -0
  97. package/dist/modelCache.js.map +1 -0
  98. package/dist/provider/anthropic.d.ts +10 -0
  99. package/dist/provider/anthropic.d.ts.map +1 -0
  100. package/dist/provider/anthropic.js +106 -0
  101. package/dist/provider/anthropic.js.map +1 -0
  102. package/dist/provider/google.d.ts +11 -0
  103. package/dist/provider/google.d.ts.map +1 -0
  104. package/dist/provider/google.js +113 -0
  105. package/dist/provider/google.js.map +1 -0
  106. package/dist/provider/interface.d.ts +3 -0
  107. package/dist/provider/interface.d.ts.map +1 -0
  108. package/dist/provider/interface.js +2 -0
  109. package/dist/provider/interface.js.map +1 -0
  110. package/dist/provider/openai-compatible.d.ts +10 -0
  111. package/dist/provider/openai-compatible.d.ts.map +1 -0
  112. package/dist/provider/openai-compatible.js +90 -0
  113. package/dist/provider/openai-compatible.js.map +1 -0
  114. package/dist/provider/registry.d.ts +9 -0
  115. package/dist/provider/registry.d.ts.map +1 -0
  116. package/dist/provider/registry.js +118 -0
  117. package/dist/provider/registry.js.map +1 -0
  118. package/dist/provider/zen.d.ts +11 -0
  119. package/dist/provider/zen.d.ts.map +1 -0
  120. package/dist/provider/zen.js +120 -0
  121. package/dist/provider/zen.js.map +1 -0
  122. package/dist/repl.d.ts +23 -0
  123. package/dist/repl.d.ts.map +1 -0
  124. package/dist/repl.js +387 -0
  125. package/dist/repl.js.map +1 -0
  126. package/dist/skills/loader.d.ts +14 -0
  127. package/dist/skills/loader.d.ts.map +1 -0
  128. package/dist/skills/loader.js +109 -0
  129. package/dist/skills/loader.js.map +1 -0
  130. package/dist/skills/matcher.d.ts +11 -0
  131. package/dist/skills/matcher.d.ts.map +1 -0
  132. package/dist/skills/matcher.js +51 -0
  133. package/dist/skills/matcher.js.map +1 -0
  134. package/dist/tools/bash.d.ts +3 -0
  135. package/dist/tools/bash.d.ts.map +1 -0
  136. package/dist/tools/bash.js +59 -0
  137. package/dist/tools/bash.js.map +1 -0
  138. package/dist/tools/edit.d.ts +3 -0
  139. package/dist/tools/edit.d.ts.map +1 -0
  140. package/dist/tools/edit.js +75 -0
  141. package/dist/tools/edit.js.map +1 -0
  142. package/dist/tools/glob.d.ts +3 -0
  143. package/dist/tools/glob.d.ts.map +1 -0
  144. package/dist/tools/glob.js +93 -0
  145. package/dist/tools/glob.js.map +1 -0
  146. package/dist/tools/grep.d.ts +3 -0
  147. package/dist/tools/grep.d.ts.map +1 -0
  148. package/dist/tools/grep.js +119 -0
  149. package/dist/tools/grep.js.map +1 -0
  150. package/dist/tools/read.d.ts +3 -0
  151. package/dist/tools/read.d.ts.map +1 -0
  152. package/dist/tools/read.js +52 -0
  153. package/dist/tools/read.js.map +1 -0
  154. package/dist/tools/registry.d.ts +6 -0
  155. package/dist/tools/registry.d.ts.map +1 -0
  156. package/dist/tools/registry.js +48 -0
  157. package/dist/tools/registry.js.map +1 -0
  158. package/dist/tools/webFetch.d.ts +3 -0
  159. package/dist/tools/webFetch.d.ts.map +1 -0
  160. package/dist/tools/webFetch.js +57 -0
  161. package/dist/tools/webFetch.js.map +1 -0
  162. package/dist/tools/webSearch.d.ts +5 -0
  163. package/dist/tools/webSearch.d.ts.map +1 -0
  164. package/dist/tools/webSearch.js +107 -0
  165. package/dist/tools/webSearch.js.map +1 -0
  166. package/dist/tools/write.d.ts +3 -0
  167. package/dist/tools/write.d.ts.map +1 -0
  168. package/dist/tools/write.js +41 -0
  169. package/dist/tools/write.js.map +1 -0
  170. package/dist/types.d.ts +74 -0
  171. package/dist/types.d.ts.map +1 -0
  172. package/dist/types.js +2 -0
  173. package/dist/types.js.map +1 -0
  174. package/dist/ui.d.ts +179 -0
  175. package/dist/ui.d.ts.map +1 -0
  176. package/dist/ui.js +481 -0
  177. package/dist/ui.js.map +1 -0
  178. package/package.json +52 -0
@@ -0,0 +1,106 @@
1
+ import { analyzeProject, formatAnalysis } from "../coding/analyzer.js";
2
+ import { detectTestFramework, runTests, formatTestResult } from "../coding/tester.js";
3
+ import { detectLinter, runLint, formatLintResult } from "../coding/linter.js";
4
+ import { analyzeDirectory, formatRefactorSuggestions } from "../coding/refactor.js";
5
+ export function codingCommands() {
6
+ return [
7
+ {
8
+ name: "analyze",
9
+ aliases: ["analysis", "project-info", "info"],
10
+ description: "Analyze current project structure, dependencies, and scripts",
11
+ usage: "/analyze",
12
+ async execute() {
13
+ console.log("Analyzing project...");
14
+ const info = analyzeProject();
15
+ return formatAnalysis(info);
16
+ },
17
+ },
18
+ {
19
+ name: "test",
20
+ aliases: ["run-tests", "tests"],
21
+ description: "Run tests, detect failures, and auto-fix",
22
+ usage: "/test [command]",
23
+ async execute(args) {
24
+ const detected = detectTestFramework();
25
+ if (!detected && args.length === 0) {
26
+ return "No test framework detected.\nSpecify a command: /test npx vitest run";
27
+ }
28
+ const command = args.join(" ") || undefined;
29
+ console.log(`Running tests: ${command || detected?.command}...`);
30
+ const result = runTests(process.cwd(), command);
31
+ return formatTestResult(result);
32
+ },
33
+ },
34
+ {
35
+ name: "lint",
36
+ aliases: ["run-lint", "linter"],
37
+ description: "Run linter, detect errors, and auto-fix",
38
+ usage: "/lint [command]",
39
+ async execute(args) {
40
+ const detected = detectLinter();
41
+ if (!detected && args.length === 0) {
42
+ return "No linter detected.\nSpecify a command: /lint npx eslint .";
43
+ }
44
+ const command = args.join(" ") || undefined;
45
+ console.log(`Running linter: ${command || detected?.command}...`);
46
+ const result = runLint(process.cwd(), command);
47
+ return formatLintResult(result);
48
+ },
49
+ },
50
+ {
51
+ name: "refactor",
52
+ aliases: ["code-review", "review"],
53
+ description: "Analyze code quality and suggest refactoring improvements",
54
+ usage: "/refactor [path] [patterns]",
55
+ async execute(args) {
56
+ const target = args[0] || process.cwd();
57
+ const patterns = args.length > 1 ? args.slice(1) : ["*.ts", "*.tsx", "*.js", "*.jsx", "*.py"];
58
+ const { readdirSync, statSync } = await import("node:fs");
59
+ try {
60
+ if (statSync(target).isFile()) {
61
+ const { analyzeCodeQuality } = await import("../coding/refactor.js");
62
+ const suggestions = analyzeCodeQuality(target);
63
+ return formatRefactorSuggestions(suggestions, 1);
64
+ }
65
+ }
66
+ catch { }
67
+ const result = await analyzeDirectory(target, patterns);
68
+ return formatRefactorSuggestions(result.suggestions, result.files);
69
+ },
70
+ },
71
+ {
72
+ name: "fix",
73
+ aliases: ["auto-fix", "repair"],
74
+ description: "Run lint + test in sequence and auto-fix errors",
75
+ usage: "/fix",
76
+ async execute() {
77
+ // Step 1: Run linter
78
+ const detected = detectLinter();
79
+ const lintResult = detected ? runLint(process.cwd()) : null;
80
+ if (lintResult && lintResult.errors > 0) {
81
+ console.log(`\n${"-".repeat(40)}`);
82
+ console.log("Fix the lint errors above, then the system will re-check.");
83
+ console.log(`${"-".repeat(40)}\n`);
84
+ }
85
+ // Step 2: Run tests
86
+ const testDetected = detectTestFramework();
87
+ const testResult = testDetected ? runTests(process.cwd()) : null;
88
+ if (testResult) {
89
+ console.log(formatTestResult(testResult));
90
+ }
91
+ if (lintResult && testResult) {
92
+ const hasIssues = lintResult.errors > 0 || testResult.failed > 0;
93
+ return hasIssues
94
+ ? "\nIssues found. Run /lint and /test individually to see details."
95
+ : "\n✅ No lint errors, all tests passing.";
96
+ }
97
+ return lintResult
98
+ ? formatLintResult(lintResult)
99
+ : testResult
100
+ ? formatTestResult(testResult)
101
+ : "No linter or test framework detected.";
102
+ },
103
+ },
104
+ ];
105
+ }
106
+ //# sourceMappingURL=coding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coding.js","sourceRoot":"","sources":["../../src/commands/coding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CommandHandler } from "../types.js";
2
+ import { ConfigManager } from "../config.js";
3
+ export declare function configCommand(cm: ConfigManager): CommandHandler;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,aAAa,CAAC,EAAE,EAAE,aAAa,GAAG,cAAc,CAwB/D"}
@@ -0,0 +1,56 @@
1
+ export function configCommand(cm) {
2
+ return {
3
+ name: "config",
4
+ aliases: ["cfg"],
5
+ description: "Show or set config values (dot notation supported)",
6
+ usage: "/config [key] [value]",
7
+ async execute(args) {
8
+ if (args.length === 0) {
9
+ const cfg = cm.get();
10
+ return `\nConfig:\n${JSON.stringify(cfg, null, 2)}\n`;
11
+ }
12
+ if (args.length === 1) {
13
+ const key = args[0];
14
+ const val = getNested(cm.get(), key);
15
+ if (val === undefined)
16
+ return `Key not found: ${key}`;
17
+ return `${key}: ${JSON.stringify(val, null, 2)}`;
18
+ }
19
+ setNested(cm.get(), args[0], parseValue(args.slice(1).join(" ")));
20
+ cm.save();
21
+ return `Set ${args[0]} = ${args.slice(1).join(" ")}`;
22
+ },
23
+ };
24
+ }
25
+ function getNested(obj, path) {
26
+ return path.split(".").reduce((acc, part) => {
27
+ if (acc && typeof acc === "object") {
28
+ return acc[part];
29
+ }
30
+ return undefined;
31
+ }, obj);
32
+ }
33
+ function setNested(obj, path, value) {
34
+ const parts = path.split(".");
35
+ let current = obj;
36
+ for (let i = 0; i < parts.length - 1; i++) {
37
+ if (!current[parts[i]] || typeof current[parts[i]] !== "object") {
38
+ current[parts[i]] = {};
39
+ }
40
+ current = current[parts[i]];
41
+ }
42
+ current[parts[parts.length - 1]] = value;
43
+ }
44
+ function parseValue(val) {
45
+ if (val === "true")
46
+ return true;
47
+ if (val === "false")
48
+ return false;
49
+ if (val === "null")
50
+ return null;
51
+ const num = Number(val);
52
+ if (!isNaN(num) && val.trim() !== "")
53
+ return num;
54
+ return val;
55
+ }
56
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandHandler } from "../types.js";
2
+ export declare const exitCommand: CommandHandler;
3
+ //# sourceMappingURL=exit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../src/commands/exit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,WAAW,EAAE,cAQzB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export const exitCommand = {
2
+ name: "exit",
3
+ aliases: ["quit", "q"],
4
+ description: "Exit vegas",
5
+ usage: "/exit",
6
+ async execute() {
7
+ process.exit(0);
8
+ },
9
+ };
10
+ //# sourceMappingURL=exit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.js","sourceRoot":"","sources":["../../src/commands/exit.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC;IACtB,WAAW,EAAE,YAAY;IACzB,KAAK,EAAE,OAAO;IACd,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { CommandHandler } from "../types.js";
2
+ export declare const helpCommand: CommandHandler;
3
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAsClD,eAAO,MAAM,WAAW,EAAE,cASzB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { printHelpTable } from "../ui.js";
2
+ const COMMANDS = [
3
+ { name: "/help", description: "Show all commands" },
4
+ { name: "/exit", description: "Exit vegas" },
5
+ { name: "/apikey [provider] [key]", description: "Set API key for a provider (omit key for interactive input)" },
6
+ { name: "/provider [name]", description: "Show current provider or switch to another" },
7
+ { name: "/providers", description: "List all available providers and their status" },
8
+ { name: "/model [name]", description: "Show current model or switch to another" },
9
+ { name: "/models [provider]", description: "Fetch and list available models" },
10
+ { name: "/config [key] [value]", description: "Show or set config values" },
11
+ { name: "/clear", description: "Clear chat history" },
12
+ { name: "/tools", description: "List available tools and their status" },
13
+ { name: "/skills [list|add|remove|refresh]", description: "Manage skills" },
14
+ { name: "/provider add <name> <url>", description: "Add custom provider" },
15
+ { name: "/provider remove <name>", description: "Remove custom provider" },
16
+ { name: "/save [file]", description: "Save session to JSON file" },
17
+ { name: "/load <file>", description: "Load session from JSON file" },
18
+ { name: "/sessions", description: "List all SQLite sessions" },
19
+ { name: "/session new [name]", description: "Start a new session" },
20
+ { name: "/session load <id>", description: "Load session by ID" },
21
+ { name: "/session rename <name>", description: "Rename current session" },
22
+ { name: "/session delete <id>", description: "Delete a session" },
23
+ { name: "/history [n]", description: "Show last N chat messages" },
24
+ { name: "/retry", description: "Retry last request" },
25
+ { name: "/remember <key> <val> [cat]", description: "Save to long-term memory" },
26
+ { name: "/recall <key>", description: "Recall from memory" },
27
+ { name: "/forget <key>", description: "Delete a memory" },
28
+ { name: "/memories [cat]", description: "List all memories" },
29
+ { name: "/analyze", description: "Analyze project structure & dependencies" },
30
+ { name: "/test [cmd]", description: "Run tests with auto-fix" },
31
+ { name: "/lint [cmd]", description: "Run linter with auto-fix" },
32
+ { name: "/refactor [path]", description: "Analyze code quality & suggest refactors" },
33
+ { name: "/fix", description: "Run lint + test in sequence" },
34
+ { name: "/version", description: "Show vegas version" },
35
+ ];
36
+ export const helpCommand = {
37
+ name: "help",
38
+ aliases: ["h", "?"],
39
+ description: "Show all available commands",
40
+ usage: "/help",
41
+ async execute() {
42
+ printHelpTable(COMMANDS);
43
+ return null;
44
+ },
45
+ };
46
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CommandHandler, LLMMessage } from "../types.js";
2
+ import { ConfigManager } from "../config.js";
3
+ export declare function buildRegistry(config: ConfigManager, historyGetter?: () => LLMMessage[], historySetter?: (msgs: LLMMessage[]) => void, sessionIdGetter?: () => string, sessionIdSetter?: (id: string) => void): Map<string, CommandHandler>;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAe7C,wBAAgB,aAAa,CAC3B,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,MAAM,UAAU,EAAE,EAClC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,IAAI,EAC5C,eAAe,CAAC,EAAE,MAAM,MAAM,EAC9B,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GACrC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA8C7B"}
@@ -0,0 +1,52 @@
1
+ import { helpCommand } from "./help.js";
2
+ import { exitCommand } from "./exit.js";
3
+ import { apikeyCommand } from "./apikey.js";
4
+ import { providerCommands } from "./provider.js";
5
+ import { modelCommand } from "./model.js";
6
+ import { configCommand } from "./config.js";
7
+ import { clearCommand } from "./clear.js";
8
+ import { toolsCommand } from "./tools.js";
9
+ import { versionCommand } from "./version.js";
10
+ import { modelsCommands } from "./models.js";
11
+ import { skillsCommands } from "./skills.js";
12
+ import { sessionCommands, memoryCommands } from "./session.js";
13
+ import { codingCommands } from "./coding.js";
14
+ export function buildRegistry(config, historyGetter, historySetter, sessionIdGetter, sessionIdSetter) {
15
+ const registry = new Map();
16
+ function register(cmd) {
17
+ registry.set(cmd.name, cmd);
18
+ for (const alias of cmd.aliases) {
19
+ registry.set(alias, cmd);
20
+ }
21
+ }
22
+ register(helpCommand);
23
+ register(exitCommand);
24
+ register(apikeyCommand(config));
25
+ register(modelCommand(config));
26
+ register(configCommand(config));
27
+ register(clearCommand);
28
+ register(toolsCommand(config));
29
+ register(versionCommand(config));
30
+ for (const cmd of providerCommands(config)) {
31
+ register(cmd);
32
+ }
33
+ for (const cmd of modelsCommands(config)) {
34
+ register(cmd);
35
+ }
36
+ for (const cmd of skillsCommands()) {
37
+ register(cmd);
38
+ }
39
+ if (historyGetter && historySetter && sessionIdGetter && sessionIdSetter) {
40
+ for (const cmd of sessionCommands(historyGetter, historySetter, config, sessionIdGetter, sessionIdSetter)) {
41
+ register(cmd);
42
+ }
43
+ }
44
+ for (const cmd of memoryCommands()) {
45
+ register(cmd);
46
+ }
47
+ for (const cmd of codingCommands()) {
48
+ register(cmd);
49
+ }
50
+ return registry;
51
+ }
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,aAAa,CAC3B,MAAqB,EACrB,aAAkC,EAClC,aAA4C,EAC5C,eAA8B,EAC9B,eAAsC;IAEtC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEnD,SAAS,QAAQ,CAAC,GAAmB;QACnC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtB,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,EAAE,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,aAAa,IAAI,aAAa,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;QACzE,KAAK,MAAM,GAAG,IAAI,eAAe,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,CAAC,EAAE,CAAC;YAC1G,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,EAAE,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,EAAE,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CommandHandler } from "../types.js";
2
+ import { ConfigManager } from "../config.js";
3
+ export declare function modelCommand(config: ConfigManager): CommandHandler;
4
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI7C,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,CAkClE"}
@@ -0,0 +1,36 @@
1
+ import { getProviderLabel, getDefaultModel } from "../provider/registry.js";
2
+ import { printAction, printDetail, printSuccess, printKV } from "../ui.js";
3
+ export function modelCommand(config) {
4
+ return {
5
+ name: "model",
6
+ aliases: ["m"],
7
+ description: "Show current model or switch to another",
8
+ usage: "/model [name]",
9
+ async execute(args) {
10
+ if (args.length === 0) {
11
+ const cur = config.getModel();
12
+ const provider = config.getProvider();
13
+ const def = getDefaultModel(provider);
14
+ printAction("Current model");
15
+ printKV("Model", cur);
16
+ printKV("Provider", getProviderLabel(provider));
17
+ if (cur !== def) {
18
+ printDetail(`Default: ${def}`);
19
+ }
20
+ return null;
21
+ }
22
+ const newModel = args.join(" ");
23
+ const provider = config.getProvider();
24
+ const def = getDefaultModel(provider);
25
+ config.setModel(newModel);
26
+ printAction("Model updated");
27
+ printKV("Model", newModel);
28
+ if (newModel !== def) {
29
+ printDetail(`Default for ${getProviderLabel(provider)}: ${def}`);
30
+ }
31
+ printSuccess("Ready");
32
+ return null;
33
+ },
34
+ };
35
+ }
36
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAc,OAAO,EAAE,MAAM,UAAU,CAAC;AAEvF,MAAM,UAAU,YAAY,CAAC,MAAqB;IAChD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,CAAC,GAAG,CAAC;QACd,WAAW,EAAE,yCAAyC;QACtD,KAAK,EAAE,eAAe;QACtB,KAAK,CAAC,OAAO,CAAC,IAAc;YAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACtC,WAAW,CAAC,eAAe,CAAC,CAAC;gBAC7B,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACtB,OAAO,CAAC,UAAU,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;oBAChB,WAAW,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,GAAG,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE1B,WAAW,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3B,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;gBACrB,WAAW,CAAC,eAAe,gBAAgB,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CommandHandler } from "../types.js";
2
+ import { ConfigManager } from "../config.js";
3
+ export declare function modelsCommands(config: ConfigManager): CommandHandler[];
4
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAQ7C,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,EAAE,CAsDtE"}
@@ -0,0 +1,123 @@
1
+ import { getProviderLabel, getDefaultModel, buildProvider, } from "../provider/registry.js";
2
+ import { setModelCache } from "../modelCache.js";
3
+ export function modelsCommands(config) {
4
+ return [
5
+ {
6
+ name: "models",
7
+ aliases: ["list-models"],
8
+ description: "Fetch and list available models from the active provider",
9
+ usage: "/models [provider]",
10
+ async execute(args) {
11
+ const providerName = args[0] || config.getProvider();
12
+ const apiKey = config.getApiKey(providerName);
13
+ const provider = buildProvider(config);
14
+ if (!provider) {
15
+ return `Provider "${providerName}" not configured or missing API key.`;
16
+ }
17
+ console.log(`Fetching models from ${getProviderLabel(providerName)}...`);
18
+ try {
19
+ let models = [];
20
+ if (providerName === "zen") {
21
+ models = await fetchZenModels();
22
+ }
23
+ else if (providerName === "anthropic") {
24
+ models = await fetchAnthropicModels();
25
+ }
26
+ else if (providerName === "google") {
27
+ models = await fetchGoogleModels();
28
+ }
29
+ else {
30
+ models = await fetchGenericModels(providerName, apiKey || "");
31
+ }
32
+ setModelCache(providerName, models);
33
+ const defaultModel = getDefaultModel(providerName);
34
+ if (models.length === 0) {
35
+ return `No models fetched. Default model: ${defaultModel}`;
36
+ }
37
+ const limited = models.slice(0, 50);
38
+ const lines = limited.map(m => {
39
+ const isDefault = m === defaultModel || m.includes(defaultModel) ? " ← default" : "";
40
+ return ` ${m}${isDefault}`;
41
+ });
42
+ const remaining = models.length - limited.length;
43
+ const footer = remaining > 0 ? `\n ... and ${remaining} more` : "";
44
+ return `\nModels (${getProviderLabel(providerName)}):\n${lines.join("\n")}${footer}\n`;
45
+ }
46
+ catch (err) {
47
+ return `Error fetching models: ${err}`;
48
+ }
49
+ },
50
+ },
51
+ ];
52
+ }
53
+ async function fetchZenModels() {
54
+ try {
55
+ const res = await fetch("https://opencode.ai/zen/v1/models");
56
+ if (!res.ok)
57
+ return [];
58
+ const data = (await res.json());
59
+ return data.data?.map(m => `opencode/${m.id}`) || [];
60
+ }
61
+ catch {
62
+ return [];
63
+ }
64
+ }
65
+ async function fetchAnthropicModels() {
66
+ const known = [
67
+ "claude-sonnet-4-20250514",
68
+ "claude-sonnet-4",
69
+ "claude-opus-4-20250514",
70
+ "claude-opus-4",
71
+ "claude-haiku-3-5-20241022",
72
+ "claude-3-5-haiku",
73
+ ];
74
+ return known;
75
+ }
76
+ async function fetchGoogleModels() {
77
+ try {
78
+ const res = await fetch("https://generativelanguage.googleapis.com/v1beta/models?key=demo");
79
+ if (!res.ok)
80
+ return [];
81
+ const data = (await res.json());
82
+ return (data.models
83
+ ?.map(m => m.name.replace("models/", ""))
84
+ .filter(m => m.includes("gemini")) || []);
85
+ }
86
+ catch {
87
+ return [];
88
+ }
89
+ }
90
+ async function fetchGenericModels(providerName, apiKey) {
91
+ const baseUrls = {
92
+ openai: "https://api.openai.com/v1",
93
+ groq: "https://api.groq.com/openai/v1",
94
+ deepseek: "https://api.deepseek.com/v1",
95
+ openrouter: "https://openrouter.ai/api/v1",
96
+ "9router": "http://localhost:20128/v1",
97
+ together: "https://api.together.xyz/v1",
98
+ xai: "https://api.x.ai/v1",
99
+ mistral: "https://api.mistral.ai/v1",
100
+ ollama: "http://localhost:11434/v1",
101
+ };
102
+ const noKey = ["9router", "ollama"];
103
+ const baseUrl = baseUrls[providerName];
104
+ if (!baseUrl)
105
+ return [];
106
+ if (!apiKey && !noKey.includes(providerName))
107
+ return [];
108
+ try {
109
+ const url = `${baseUrl}/models`;
110
+ const headers = {};
111
+ if (apiKey)
112
+ headers["Authorization"] = `Bearer ${apiKey}`;
113
+ const res = await fetch(url, { headers });
114
+ if (!res.ok)
115
+ return [];
116
+ const data = (await res.json());
117
+ return data.data?.map(m => m.id) || [];
118
+ }
119
+ catch {
120
+ return [];
121
+ }
122
+ }
123
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/commands/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CommandHandler } from "../types.js";
2
+ import { ConfigManager } from "../config.js";
3
+ export declare function providerCommands(config: ConfigManager): CommandHandler[];
4
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/commands/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAa7C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc,EAAE,CAqHxE"}