fixo-cli 1.0.4 → 2.0.0
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.
Potentially problematic release.
This version of fixo-cli might be problematic. Click here for more details.
- package/CHANGELOG.md +62 -0
- package/README.md +18 -14
- package/dist/agent/agent-client.d.ts +28 -6
- package/dist/agent/agent-client.d.ts.map +1 -1
- package/dist/agent/agent-client.js +118 -39
- package/dist/agent/agent-client.js.map +1 -1
- package/dist/agent/agent-pool.d.ts +55 -6
- package/dist/agent/agent-pool.d.ts.map +1 -1
- package/dist/agent/agent-pool.js +120 -20
- package/dist/agent/agent-pool.js.map +1 -1
- package/dist/agent/auto-verifier.d.ts +55 -0
- package/dist/agent/auto-verifier.d.ts.map +1 -0
- package/dist/agent/auto-verifier.js +50 -0
- package/dist/agent/auto-verifier.js.map +1 -0
- package/dist/agent/command-parser.d.ts.map +1 -1
- package/dist/agent/command-parser.js +176 -0
- package/dist/agent/command-parser.js.map +1 -1
- package/dist/agent/context-builder.d.ts +24 -0
- package/dist/agent/context-builder.d.ts.map +1 -0
- package/dist/agent/context-builder.js +197 -0
- package/dist/agent/context-builder.js.map +1 -0
- package/dist/agent/conversation.d.ts +14 -1
- package/dist/agent/conversation.d.ts.map +1 -1
- package/dist/agent/conversation.js +53 -7
- package/dist/agent/conversation.js.map +1 -1
- package/dist/agent/mcp-bridge.js +1 -1
- package/dist/agent/mcp-bridge.js.map +1 -1
- package/dist/agent/orchestrator.d.ts +45 -0
- package/dist/agent/orchestrator.d.ts.map +1 -1
- package/dist/agent/orchestrator.js +140 -3
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/parser-adapter.d.ts +17 -0
- package/dist/agent/parser-adapter.d.ts.map +1 -1
- package/dist/agent/parser-adapter.js +254 -2
- package/dist/agent/parser-adapter.js.map +1 -1
- package/dist/agent/predictive-gate.d.ts.map +1 -1
- package/dist/agent/predictive-gate.js +4 -1
- package/dist/agent/predictive-gate.js.map +1 -1
- package/dist/agent/providers-manager.d.ts +5 -0
- package/dist/agent/providers-manager.d.ts.map +1 -1
- package/dist/agent/providers-manager.js +119 -8
- package/dist/agent/providers-manager.js.map +1 -1
- package/dist/agent/repo-map.d.ts +18 -1
- package/dist/agent/repo-map.d.ts.map +1 -1
- package/dist/agent/repo-map.js +144 -54
- package/dist/agent/repo-map.js.map +1 -1
- package/dist/agent/retry.js +1 -2
- package/dist/agent/retry.js.map +1 -1
- package/dist/agent/single-agent.d.ts.map +1 -1
- package/dist/agent/single-agent.js +129 -22
- package/dist/agent/single-agent.js.map +1 -1
- package/dist/agent/skills.d.ts.map +1 -1
- package/dist/agent/skills.js +2 -1
- package/dist/agent/skills.js.map +1 -1
- package/dist/agent/subagent.js +2 -2
- package/dist/agent/subagent.js.map +1 -1
- package/dist/agent/task-router.d.ts +46 -0
- package/dist/agent/task-router.d.ts.map +1 -0
- package/dist/agent/task-router.js +352 -0
- package/dist/agent/task-router.js.map +1 -0
- package/dist/agent/telemetry.d.ts +29 -1
- package/dist/agent/telemetry.d.ts.map +1 -1
- package/dist/agent/telemetry.js +25 -10
- package/dist/agent/telemetry.js.map +1 -1
- package/dist/agent/tool-definitions.d.ts +3 -0
- package/dist/agent/tool-definitions.d.ts.map +1 -0
- package/dist/agent/tool-definitions.js +519 -0
- package/dist/agent/tool-definitions.js.map +1 -0
- package/dist/agent/tool-executor.d.ts +6 -1
- package/dist/agent/tool-executor.d.ts.map +1 -1
- package/dist/agent/tool-executor.js +99 -553
- package/dist/agent/tool-executor.js.map +1 -1
- package/dist/agent/tools/command-tools.d.ts +6 -0
- package/dist/agent/tools/command-tools.d.ts.map +1 -0
- package/dist/agent/tools/command-tools.js +104 -0
- package/dist/agent/tools/command-tools.js.map +1 -0
- package/dist/agent/tools/file-tools.d.ts +15 -0
- package/dist/agent/tools/file-tools.d.ts.map +1 -0
- package/dist/agent/tools/file-tools.js +551 -0
- package/dist/agent/tools/file-tools.js.map +1 -0
- package/dist/agent/tools/todo-tools.d.ts +3 -0
- package/dist/agent/tools/todo-tools.d.ts.map +1 -0
- package/dist/agent/tools/todo-tools.js +70 -0
- package/dist/agent/tools/todo-tools.js.map +1 -0
- package/dist/agent/web-impl.d.ts.map +1 -1
- package/dist/agent/web-impl.js +45 -0
- package/dist/agent/web-impl.js.map +1 -1
- package/dist/agent/worker-agent.d.ts +3 -1
- package/dist/agent/worker-agent.d.ts.map +1 -1
- package/dist/agent/worker-agent.js +51 -14
- package/dist/agent/worker-agent.js.map +1 -1
- package/dist/config.d.ts +242 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +79 -0
- package/dist/config.js.map +1 -1
- package/dist/git/git-manager.d.ts +33 -2
- package/dist/git/git-manager.d.ts.map +1 -1
- package/dist/git/git-manager.js +111 -15
- package/dist/git/git-manager.js.map +1 -1
- package/dist/git/git-ops.d.ts.map +1 -1
- package/dist/git/git-ops.js +2 -1
- package/dist/git/git-ops.js.map +1 -1
- package/dist/index.js +85 -8
- package/dist/index.js.map +1 -1
- package/dist/lsp/lsp-manager.js +1 -1
- package/dist/lsp/lsp-manager.js.map +1 -1
- package/dist/model-outcomes.d.ts.map +1 -1
- package/dist/model-outcomes.js +2 -1
- package/dist/model-outcomes.js.map +1 -1
- package/dist/planner.d.ts +0 -9
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +0 -9
- package/dist/planner.js.map +1 -1
- package/dist/project-memory.d.ts +12 -1
- package/dist/project-memory.d.ts.map +1 -1
- package/dist/project-memory.js +8 -6
- package/dist/project-memory.js.map +1 -1
- package/dist/runtime/loop-mitigation.d.ts +78 -7
- package/dist/runtime/loop-mitigation.d.ts.map +1 -1
- package/dist/runtime/loop-mitigation.js +122 -9
- package/dist/runtime/loop-mitigation.js.map +1 -1
- package/dist/runtime/os-sandbox.d.ts +100 -0
- package/dist/runtime/os-sandbox.d.ts.map +1 -0
- package/dist/runtime/os-sandbox.js +246 -0
- package/dist/runtime/os-sandbox.js.map +1 -0
- package/dist/runtime/run-inventory.d.ts +17 -0
- package/dist/runtime/run-inventory.d.ts.map +1 -0
- package/dist/runtime/run-inventory.js +49 -0
- package/dist/runtime/run-inventory.js.map +1 -0
- package/dist/runtime/staging.d.ts.map +1 -1
- package/dist/runtime/staging.js +4 -1
- package/dist/runtime/staging.js.map +1 -1
- package/dist/runtime/task-session.d.ts +14 -0
- package/dist/runtime/task-session.d.ts.map +1 -1
- package/dist/runtime/task-session.js +26 -0
- package/dist/runtime/task-session.js.map +1 -1
- package/dist/setup-wizard.d.ts +11 -3
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +113 -15
- package/dist/setup-wizard.js.map +1 -1
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/commands/context-commands.d.ts +7 -0
- package/dist/ui/commands/context-commands.d.ts.map +1 -0
- package/dist/ui/commands/context-commands.js +241 -0
- package/dist/ui/commands/context-commands.js.map +1 -0
- package/dist/ui/commands/index.d.ts +3 -0
- package/dist/ui/commands/index.d.ts.map +1 -0
- package/dist/ui/commands/index.js +46 -0
- package/dist/ui/commands/index.js.map +1 -0
- package/dist/ui/commands/info-commands.d.ts +15 -0
- package/dist/ui/commands/info-commands.d.ts.map +1 -0
- package/dist/ui/commands/info-commands.js +122 -0
- package/dist/ui/commands/info-commands.js.map +1 -0
- package/dist/ui/commands/model-commands.d.ts +5 -0
- package/dist/ui/commands/model-commands.d.ts.map +1 -0
- package/dist/ui/commands/model-commands.js +417 -0
- package/dist/ui/commands/model-commands.js.map +1 -0
- package/dist/ui/commands/session-commands.d.ts +5 -0
- package/dist/ui/commands/session-commands.d.ts.map +1 -0
- package/dist/ui/commands/session-commands.js +154 -0
- package/dist/ui/commands/session-commands.js.map +1 -0
- package/dist/ui/commands/task-commands.d.ts +8 -0
- package/dist/ui/commands/task-commands.d.ts.map +1 -0
- package/dist/ui/commands/task-commands.js +152 -0
- package/dist/ui/commands/task-commands.js.map +1 -0
- package/dist/ui/commands/types.d.ts +46 -0
- package/dist/ui/commands/types.d.ts.map +1 -0
- package/dist/ui/commands/types.js +2 -0
- package/dist/ui/commands/types.js.map +1 -0
- package/dist/ui/commands/workspace-commands.d.ts +8 -0
- package/dist/ui/commands/workspace-commands.d.ts.map +1 -0
- package/dist/ui/commands/workspace-commands.js +131 -0
- package/dist/ui/commands/workspace-commands.js.map +1 -0
- package/dist/ui/loading-animation.d.ts +24 -0
- package/dist/ui/loading-animation.d.ts.map +1 -0
- package/dist/ui/loading-animation.js +123 -0
- package/dist/ui/loading-animation.js.map +1 -0
- package/dist/ui/markdown-stream.js +2 -2
- package/dist/ui/markdown-stream.js.map +1 -1
- package/dist/ui/prompt.d.ts +7 -0
- package/dist/ui/prompt.d.ts.map +1 -1
- package/dist/ui/prompt.js +435 -1214
- package/dist/ui/prompt.js.map +1 -1
- package/dist/ui/render-primitives.d.ts +6 -0
- package/dist/ui/render-primitives.d.ts.map +1 -1
- package/dist/ui/render-primitives.js +30 -13
- package/dist/ui/render-primitives.js.map +1 -1
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +2 -0
- package/dist/ui/render.js.map +1 -1
- package/package.json +17 -3
- package/scripts/check-vendor-wasm.js +11 -0
- package/vendor/tree-sitter-go.wasm +0 -0
- package/vendor/tree-sitter-javascript.wasm +0 -0
- package/vendor/tree-sitter-python.wasm +0 -0
- package/vendor/tree-sitter-rust.wasm +0 -0
- package/vendor/tree-sitter-tsx.wasm +0 -0
- package/vendor/tree-sitter-typescript.wasm +0 -0
|
@@ -105,6 +105,11 @@ export class TreeSitterAdapter {
|
|
|
105
105
|
supported = true;
|
|
106
106
|
parser = null;
|
|
107
107
|
initialised = false;
|
|
108
|
+
/** Lazily-loaded language grammars, keyed by LanguageId. The `bash`
|
|
109
|
+
* grammar is loaded eagerly in {@link init} because the shell-
|
|
110
|
+
* command parser path runs on virtually every tool call. The other
|
|
111
|
+
* languages are loaded on demand by {@link loadLanguage}. */
|
|
112
|
+
languages = new Map();
|
|
108
113
|
async init() {
|
|
109
114
|
if (this.initialised) {
|
|
110
115
|
return { ok: this.supported };
|
|
@@ -129,12 +134,12 @@ export class TreeSitterAdapter {
|
|
|
129
134
|
const Bash = await LanguageCtor.load(bashWasm);
|
|
130
135
|
this.parser = new ParserCtor();
|
|
131
136
|
this.parser.setLanguage(Bash);
|
|
137
|
+
this.languages.set('bash', Bash);
|
|
132
138
|
this.supported = true;
|
|
133
139
|
return { ok: true };
|
|
134
140
|
}
|
|
135
141
|
catch (err) {
|
|
136
142
|
const reason = err instanceof Error ? err.message : String(err);
|
|
137
|
-
// eslint-disable-next-line no-console
|
|
138
143
|
console.warn(`\u26A0 Tree-Sitter WASM unavailable (${reason}). Falling back to regex parser. ` +
|
|
139
144
|
`Performance reduced; accuracy may vary.`);
|
|
140
145
|
this.parser = null;
|
|
@@ -142,8 +147,68 @@ export class TreeSitterAdapter {
|
|
|
142
147
|
return { ok: false, reason };
|
|
143
148
|
}
|
|
144
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Lazily load a language grammar from the vendored WASM. Idempotent.
|
|
152
|
+
* Returns `true` if the language is ready for tree-sitter-based
|
|
153
|
+
* extraction; `false` if the WASM is missing or fails to load
|
|
154
|
+
* (callers will fall back to the regex extractor).
|
|
155
|
+
*
|
|
156
|
+
* Pre-warm a language before calling {@link extractSymbols} in
|
|
157
|
+
* hot paths \u2014 extractSymbols itself is synchronous (see why in
|
|
158
|
+
* the {@link ParserAdapter} interface) and will silently fall
|
|
159
|
+
* through to the regex path if the grammar isn't loaded yet.
|
|
160
|
+
*/
|
|
161
|
+
async loadLanguage(lang) {
|
|
162
|
+
if (!this.parser || !this.supported)
|
|
163
|
+
return false;
|
|
164
|
+
if (this.languages.has(lang))
|
|
165
|
+
return true;
|
|
166
|
+
const wasmFile = wasmFileForLanguage(lang);
|
|
167
|
+
if (!wasmFile)
|
|
168
|
+
return false;
|
|
169
|
+
const wasmPath = resolveVendorWasm(wasmFile);
|
|
170
|
+
if (!wasmPath)
|
|
171
|
+
return false;
|
|
172
|
+
try {
|
|
173
|
+
const grammar = await LanguageCtor.load(wasmPath);
|
|
174
|
+
this.languages.set(lang, grammar);
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// safe: a single missing/incompatible grammar must not break
|
|
179
|
+
// unrelated languages or the shell path.
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
145
183
|
extractSymbols(source, language) {
|
|
146
|
-
|
|
184
|
+
const grammar = this.languages.get(language);
|
|
185
|
+
if (!grammar || !this.parser) {
|
|
186
|
+
return regexExtractSymbols(source, language);
|
|
187
|
+
}
|
|
188
|
+
try {
|
|
189
|
+
this.parser.setLanguage(grammar);
|
|
190
|
+
const tree = this.parser.parse(source);
|
|
191
|
+
const out = extractSymbolsFromTree(tree.rootNode, language);
|
|
192
|
+
// Restore the parser to its eagerly-loaded bash grammar so the
|
|
193
|
+
// command-parser path stays correct after a symbol extraction.
|
|
194
|
+
const bash = this.languages.get('bash');
|
|
195
|
+
if (bash)
|
|
196
|
+
this.parser.setLanguage(bash);
|
|
197
|
+
// Empty result on a successful parse usually means the source
|
|
198
|
+
// had no top-level declarations \u2014 but it's also the failure
|
|
199
|
+
// mode of an unfamiliar dialect. Fall through to the regex
|
|
200
|
+
// extractor in that case as a belt-and-braces safety net; if
|
|
201
|
+
// the regex agrees there are none, we still return an empty
|
|
202
|
+
// array.
|
|
203
|
+
if (out.length === 0)
|
|
204
|
+
return regexExtractSymbols(source, language);
|
|
205
|
+
return out;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// safe: any tree-sitter failure (mismatched dialect, corrupt
|
|
209
|
+
// source, etc.) falls back to the regex extractor.
|
|
210
|
+
return regexExtractSymbols(source, language);
|
|
211
|
+
}
|
|
147
212
|
}
|
|
148
213
|
extractImports(source, language) {
|
|
149
214
|
return regexExtractImports(source, language);
|
|
@@ -202,6 +267,193 @@ function findCommandNodes(node) {
|
|
|
202
267
|
}
|
|
203
268
|
return list;
|
|
204
269
|
}
|
|
270
|
+
/* ──────────────────────── Language → WASM file ──────────────────────── */
|
|
271
|
+
/**
|
|
272
|
+
* Maps a {@link LanguageId} to the vendored WASM file the grammar
|
|
273
|
+
* lives in. Returns `null` for languages that don't have a vendored
|
|
274
|
+
* grammar (regex fallback only).
|
|
275
|
+
*/
|
|
276
|
+
function wasmFileForLanguage(lang) {
|
|
277
|
+
switch (lang) {
|
|
278
|
+
case 'typescript': return 'tree-sitter-typescript.wasm';
|
|
279
|
+
case 'javascript': return 'tree-sitter-javascript.wasm';
|
|
280
|
+
case 'python': return 'tree-sitter-python.wasm';
|
|
281
|
+
case 'go': return 'tree-sitter-go.wasm';
|
|
282
|
+
case 'rust': return 'tree-sitter-rust.wasm';
|
|
283
|
+
case 'bash': return 'tree-sitter-bash.wasm';
|
|
284
|
+
default: return null;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/* ──────────────────────── AST → SymbolInfo[] ──────────────────────── */
|
|
288
|
+
/**
|
|
289
|
+
* Walks a parsed root node and emits symbol records for top-level
|
|
290
|
+
* declarations. Per-language conventions for "exported":
|
|
291
|
+
* - TS/JS: wrapped in an `export_statement` (or `export default`).
|
|
292
|
+
* - Python: top-level name whose first char is not `_`.
|
|
293
|
+
* - Go: top-level name whose first char is uppercase.
|
|
294
|
+
* - Rust: declaration carries a `visibility_modifier` child whose
|
|
295
|
+
* text starts with `pub`.
|
|
296
|
+
*
|
|
297
|
+
* The function caps at 100 symbols per file to mirror the regex
|
|
298
|
+
* extractor and protect downstream context budgets.
|
|
299
|
+
*/
|
|
300
|
+
function extractSymbolsFromTree(root, language) {
|
|
301
|
+
const out = [];
|
|
302
|
+
const seen = new Set();
|
|
303
|
+
const MAX = 100;
|
|
304
|
+
const push = (name, kind, node, exported) => {
|
|
305
|
+
if (!name || seen.has(name) || out.length >= MAX)
|
|
306
|
+
return;
|
|
307
|
+
seen.add(name);
|
|
308
|
+
out.push({
|
|
309
|
+
name,
|
|
310
|
+
kind,
|
|
311
|
+
line: node.startPosition.row + 1,
|
|
312
|
+
endLine: node.endPosition.row + 1,
|
|
313
|
+
exported,
|
|
314
|
+
});
|
|
315
|
+
};
|
|
316
|
+
/** First identifier-shaped descendant; used as a fallback when the
|
|
317
|
+
* grammar exposes the name via a positional child instead of a
|
|
318
|
+
* named field. */
|
|
319
|
+
const firstIdentText = (node) => {
|
|
320
|
+
const named = node.childForFieldName('name');
|
|
321
|
+
if (named)
|
|
322
|
+
return named.text;
|
|
323
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
324
|
+
const c = node.namedChild(i);
|
|
325
|
+
if (c.type === 'identifier' || c.type === 'type_identifier' || c.type === 'property_identifier') {
|
|
326
|
+
return c.text;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return undefined;
|
|
330
|
+
};
|
|
331
|
+
const hasPub = (node) => {
|
|
332
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
333
|
+
const c = node.namedChild(i);
|
|
334
|
+
if (c.type === 'visibility_modifier' && c.text.startsWith('pub'))
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
return false;
|
|
338
|
+
};
|
|
339
|
+
const visitTopLevel = (node, exportedFromWrapper) => {
|
|
340
|
+
const t = node.type;
|
|
341
|
+
if (language === 'typescript' || language === 'javascript') {
|
|
342
|
+
// Unwrap `export_statement` → emit the inner declaration as exported.
|
|
343
|
+
if (t === 'export_statement') {
|
|
344
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
345
|
+
visitTopLevel(node.namedChild(i), true);
|
|
346
|
+
}
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
if (t === 'class_declaration')
|
|
350
|
+
return push(firstIdentText(node), 'class', node, exportedFromWrapper);
|
|
351
|
+
if (t === 'interface_declaration')
|
|
352
|
+
return push(firstIdentText(node), 'interface', node, exportedFromWrapper);
|
|
353
|
+
if (t === 'function_declaration')
|
|
354
|
+
return push(firstIdentText(node), 'function', node, exportedFromWrapper);
|
|
355
|
+
if (t === 'function_signature')
|
|
356
|
+
return push(firstIdentText(node), 'function', node, exportedFromWrapper);
|
|
357
|
+
if (t === 'enum_declaration')
|
|
358
|
+
return push(firstIdentText(node), 'enum', node, exportedFromWrapper);
|
|
359
|
+
if (t === 'type_alias_declaration')
|
|
360
|
+
return push(firstIdentText(node), 'type', node, exportedFromWrapper);
|
|
361
|
+
if (t === 'lexical_declaration' || t === 'variable_declaration') {
|
|
362
|
+
// `const a = 1, b = 2;` → walk declarators.
|
|
363
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
364
|
+
const decl = node.namedChild(i);
|
|
365
|
+
if (decl.type === 'variable_declarator') {
|
|
366
|
+
push(firstIdentText(decl), 'const', decl, exportedFromWrapper);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
if (language === 'python') {
|
|
374
|
+
if (t === 'class_definition' || t === 'function_definition' || t === 'decorated_definition') {
|
|
375
|
+
// Decorated wraps the real definition as a named child.
|
|
376
|
+
let target = node;
|
|
377
|
+
if (t === 'decorated_definition') {
|
|
378
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
379
|
+
const c = node.namedChild(i);
|
|
380
|
+
if (c.type === 'class_definition' || c.type === 'function_definition') {
|
|
381
|
+
target = c;
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
const name = firstIdentText(target);
|
|
387
|
+
const kind = target.type === 'class_definition' ? 'class' : 'function';
|
|
388
|
+
push(name, kind, target, name !== undefined && !name.startsWith('_'));
|
|
389
|
+
}
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
if (language === 'go') {
|
|
393
|
+
const isUpper = (s) => !!s && s[0] >= 'A' && s[0] <= 'Z';
|
|
394
|
+
if (t === 'function_declaration' || t === 'method_declaration') {
|
|
395
|
+
const name = firstIdentText(node);
|
|
396
|
+
push(name, 'function', node, isUpper(name));
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
if (t === 'type_declaration' || t === 'var_declaration' || t === 'const_declaration') {
|
|
400
|
+
for (let i = 0; i < node.namedChildCount; i++) {
|
|
401
|
+
const spec = node.namedChild(i);
|
|
402
|
+
const name = firstIdentText(spec);
|
|
403
|
+
let kind = 'type';
|
|
404
|
+
if (t === 'var_declaration')
|
|
405
|
+
kind = 'var';
|
|
406
|
+
else if (t === 'const_declaration')
|
|
407
|
+
kind = 'const';
|
|
408
|
+
else if (spec.type === 'type_spec') {
|
|
409
|
+
// Look at the type definition body to refine the kind.
|
|
410
|
+
for (let j = 0; j < spec.namedChildCount; j++) {
|
|
411
|
+
const def = spec.namedChild(j);
|
|
412
|
+
if (def.type === 'struct_type') {
|
|
413
|
+
kind = 'type';
|
|
414
|
+
break;
|
|
415
|
+
}
|
|
416
|
+
if (def.type === 'interface_type') {
|
|
417
|
+
kind = 'interface';
|
|
418
|
+
break;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
push(name, kind, spec, isUpper(name));
|
|
423
|
+
}
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if (language === 'rust') {
|
|
429
|
+
const exported = hasPub(node);
|
|
430
|
+
if (t === 'function_item')
|
|
431
|
+
return push(firstIdentText(node), 'function', node, exported);
|
|
432
|
+
if (t === 'struct_item')
|
|
433
|
+
return push(firstIdentText(node), 'type', node, exported);
|
|
434
|
+
if (t === 'enum_item')
|
|
435
|
+
return push(firstIdentText(node), 'enum', node, exported);
|
|
436
|
+
if (t === 'trait_item')
|
|
437
|
+
return push(firstIdentText(node), 'interface', node, exported);
|
|
438
|
+
if (t === 'mod_item')
|
|
439
|
+
return push(firstIdentText(node), 'module', node, exported);
|
|
440
|
+
if (t === 'const_item')
|
|
441
|
+
return push(firstIdentText(node), 'const', node, exported);
|
|
442
|
+
if (t === 'static_item')
|
|
443
|
+
return push(firstIdentText(node), 'const', node, exported);
|
|
444
|
+
// type_item → `type Alias = …;`
|
|
445
|
+
if (t === 'type_item')
|
|
446
|
+
return push(firstIdentText(node), 'type', node, exported);
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
for (let i = 0; i < root.namedChildCount; i++) {
|
|
451
|
+
visitTopLevel(root.namedChild(i), false);
|
|
452
|
+
if (out.length >= MAX)
|
|
453
|
+
break;
|
|
454
|
+
}
|
|
455
|
+
return out;
|
|
456
|
+
}
|
|
205
457
|
// ──── RegexParserAdapter ─────────────────────────────────────────
|
|
206
458
|
export class RegexParserAdapter {
|
|
207
459
|
name = 'regex';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-adapter.js","sourceRoot":"","sources":["../../src/agent/parser-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parser-adapter.js","sourceRoot":"","sources":["../../src/agent/parser-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predictive-gate.d.ts","sourceRoot":"","sources":["../../src/agent/predictive-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAYH,2EAA2E;AAC3E,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,YAAY,
|
|
1
|
+
{"version":3,"file":"predictive-gate.d.ts","sourceRoot":"","sources":["../../src/agent/predictive-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAYH,2EAA2E;AAC3E,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,YAAY,CAuCd;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,YAAY,EACtB,kBAAkB,EAAE,MAAM,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAChC,SAAS,GAAE,MAAsC,GAChD,aAAa,CAkBf;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,aAAa,GACtB,MAAM,CASR"}
|
|
@@ -71,10 +71,13 @@ export function estimateReadCost(absolutePath, model) {
|
|
|
71
71
|
return { bytes, projectedTokens: Math.ceil(bytes / FALLBACK_BYTES_PER_TOKEN), exact: false };
|
|
72
72
|
}
|
|
73
73
|
finally {
|
|
74
|
+
// safe: closeSync after a failed openSync just means there was
|
|
75
|
+
// no fd to close, or the kernel already reaped it. Either way
|
|
76
|
+
// resource recovery is best-effort.
|
|
74
77
|
try {
|
|
75
78
|
fs.closeSync(fd);
|
|
76
79
|
}
|
|
77
|
-
catch { /*
|
|
80
|
+
catch { /* safe: see above */ }
|
|
78
81
|
}
|
|
79
82
|
}
|
|
80
83
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predictive-gate.js","sourceRoot":"","sources":["../../src/agent/predictive-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,mFAAmF;AACnF,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAEnC,iEAAiE;AACjE,MAAM,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC;AAE/B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAsBlD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,KAAgC;IAEhC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEtE,IAAI,KAAK,IAAI,YAAY,EAAE,CAAC;YAC1B,oCAAoC;YACpC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACjD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACjD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAC/F,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,aAAa,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACvD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC;YACzD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,wBAAwB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC/F,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"predictive-gate.js","sourceRoot":"","sources":["../../src/agent/predictive-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { type ProviderCredential } from '../runtime/credential-vault.js';
|
|
2
|
+
/**
|
|
3
|
+
* Known-good models that reliably follow the multi-agent DAG orchestration contract.
|
|
4
|
+
* Used by the router when `modelRouting === 'auto'` to prevent task deadlocks.
|
|
5
|
+
*/
|
|
6
|
+
export declare const MODEL_DAG_VERIFIED: Set<string>;
|
|
2
7
|
export interface ProviderDefinition {
|
|
3
8
|
/** Short ID used as the key in providers.json */
|
|
4
9
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers-manager.d.ts","sourceRoot":"","sources":["../../src/agent/providers-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"providers-manager.d.ts","sourceRoot":"","sources":["../../src/agent/providers-manager.ts"],"names":[],"mappings":"AAmBA,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,gCAAgC,CAAC;AAIxC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,aAK7B,CAAC;AAEH,MAAM,WAAW,kBAAkB;IACjC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,iBAAiB,EAAE,kBAAkB,EAiIjD,CAAC;AA0GF;;;;;;;GAOG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACtC;AAyGD,eAAO,MAAM,gBAAgB;IAC3B,qDAAqD;gCACzB,MAAM,YAAY,MAAM,GAAG,IAAI;IAK3D,iEAAiE;gCACrC,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD,iEAAiE;+BACtC,IAAI;IAK/B,qDAAqD;YAC7C,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAaxF,wCAAwC;cAC9B,MAAM,UAAU,MAAM,SAAS,MAAM,GAAG,IAAI;IAsBtD,0EAA0E;iBAC7D,MAAM,GAAG,OAAO;IAS7B,qEAAqE;iBACxD,MAAM,GAAG,MAAM,GAAG,IAAI;IAKnC,mEAAmE;0BAC7C,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAkB9F;;;;;;;;;OASG;yBACwB,CAAC,QACpB,MAAM,MACR,CAAC,IAAI,EAAE,kBAAkB,GAAG;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAC3E,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAWpB;;;;;OAKG;oBACa,IAAI;IAkCpB;;;OAGG;kBACW,IAAI;IAIlB,6CAA6C;cACnC,MAAM,GAAG,OAAO;IAK1B,uCAAuC;wBACnB,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI3D,+CAA+C;yBAC1B,kBAAkB,EAAE;IAIzC;;;;;OAKG;0BACmB,MAAM,GAAG,wBAAwB,GAAG,IAAI;IAU9D;;;;;;;;;;;;OAYG;4BAC2B,MAAM,GAAG,OAAO,CAAC;QAC7C,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,mBAAmB,CAAC;QAC/C,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CA+DH,CAAC"}
|
|
@@ -16,7 +16,19 @@
|
|
|
16
16
|
import fs from 'node:fs';
|
|
17
17
|
import path from 'node:path';
|
|
18
18
|
import os from 'node:os';
|
|
19
|
+
import crypto from 'node:crypto';
|
|
19
20
|
import { getProviderKeyVault, resetProviderKeyVault, } from '../runtime/credential-vault.js';
|
|
21
|
+
/* ──────────────────────── Provider Registry ──────────────────────── */
|
|
22
|
+
/**
|
|
23
|
+
* Known-good models that reliably follow the multi-agent DAG orchestration contract.
|
|
24
|
+
* Used by the router when `modelRouting === 'auto'` to prevent task deadlocks.
|
|
25
|
+
*/
|
|
26
|
+
export const MODEL_DAG_VERIFIED = new Set([
|
|
27
|
+
'claude-3-5-sonnet-20241022',
|
|
28
|
+
'gemini-2.5-pro',
|
|
29
|
+
'gpt-4o',
|
|
30
|
+
'o3-mini',
|
|
31
|
+
]);
|
|
20
32
|
export const PROVIDER_REGISTRY = [
|
|
21
33
|
{
|
|
22
34
|
name: 'openai',
|
|
@@ -32,7 +44,7 @@ export const PROVIDER_REGISTRY = [
|
|
|
32
44
|
displayName: 'Anthropic (Claude)',
|
|
33
45
|
baseUrl: 'https://api.anthropic.com/v1',
|
|
34
46
|
openAICompat: false,
|
|
35
|
-
models: ['claude-opus-4-
|
|
47
|
+
models: ['claude-opus-4-7', 'claude-sonnet-4-6', 'claude-haiku-4-5-20251001'],
|
|
36
48
|
requiresKey: true,
|
|
37
49
|
docsUrl: 'https://console.anthropic.com/settings/keys',
|
|
38
50
|
},
|
|
@@ -77,7 +89,7 @@ export const PROVIDER_REGISTRY = [
|
|
|
77
89
|
displayName: 'OpenRouter',
|
|
78
90
|
baseUrl: 'https://openrouter.ai/api/v1',
|
|
79
91
|
openAICompat: true,
|
|
80
|
-
models: ['anthropic/claude-opus-4-
|
|
92
|
+
models: ['anthropic/claude-opus-4-7', 'openai/gpt-4o', 'google/gemini-2.5-pro', 'meta-llama/llama-4-maverick'],
|
|
81
93
|
requiresKey: true,
|
|
82
94
|
docsUrl: 'https://openrouter.ai/keys',
|
|
83
95
|
},
|
|
@@ -151,13 +163,62 @@ export const PROVIDER_REGISTRY = [
|
|
|
151
163
|
function getProvidersFilePath() {
|
|
152
164
|
return path.join(os.homedir(), '.fixocli', 'providers.json');
|
|
153
165
|
}
|
|
166
|
+
function getMachineKey() {
|
|
167
|
+
const p = path.join(os.homedir(), '.fixocli', '.machine_key');
|
|
168
|
+
if (fs.existsSync(p)) {
|
|
169
|
+
return Buffer.from(fs.readFileSync(p, 'utf-8').trim(), 'hex');
|
|
170
|
+
}
|
|
171
|
+
const key = crypto.randomBytes(32);
|
|
172
|
+
fs.writeFileSync(p, key.toString('hex') + '\n', { mode: 0o600 });
|
|
173
|
+
return key;
|
|
174
|
+
}
|
|
175
|
+
function encryptKey(key) {
|
|
176
|
+
if (key.startsWith('ENC:'))
|
|
177
|
+
return key;
|
|
178
|
+
const iv = crypto.randomBytes(16);
|
|
179
|
+
const cipher = crypto.createCipheriv('aes-256-gcm', getMachineKey(), iv);
|
|
180
|
+
let encrypted = cipher.update(key, 'utf8', 'hex');
|
|
181
|
+
encrypted += cipher.final('hex');
|
|
182
|
+
const authTag = cipher.getAuthTag().toString('hex');
|
|
183
|
+
return `ENC:${iv.toString('hex')}:${authTag}:${encrypted}`;
|
|
184
|
+
}
|
|
185
|
+
function decryptKey(val) {
|
|
186
|
+
if (!val.startsWith('ENC:'))
|
|
187
|
+
return val;
|
|
188
|
+
const parts = val.split(':');
|
|
189
|
+
if (parts.length !== 4) {
|
|
190
|
+
console.warn('[FixO] providers.json: malformed ENC entry — removing this key. Run /providers remove and re-add it.');
|
|
191
|
+
throw new Error('Malformed encrypted key entry in providers.json');
|
|
192
|
+
}
|
|
193
|
+
const iv = Buffer.from(parts[1], 'hex');
|
|
194
|
+
const authTag = Buffer.from(parts[2], 'hex');
|
|
195
|
+
const encrypted = parts[3];
|
|
196
|
+
try {
|
|
197
|
+
const decipher = crypto.createDecipheriv('aes-256-gcm', getMachineKey(), iv);
|
|
198
|
+
decipher.setAuthTag(authTag);
|
|
199
|
+
let decrypted = decipher.update(encrypted, 'hex', 'utf8');
|
|
200
|
+
decrypted += decipher.final('utf8');
|
|
201
|
+
return decrypted;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
console.warn('[FixO] Failed to decrypt a stored API key. Your ~/.fixocli/providers.json may be corrupted\n' +
|
|
205
|
+
' or the machine key has changed. Run: /providers remove <name>, then re-add the key.');
|
|
206
|
+
throw new Error('AES-256-GCM decryption failed — corrupted providers.json or rotated machine key');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
154
209
|
function loadStore() {
|
|
155
210
|
const filePath = getProvidersFilePath();
|
|
156
211
|
try {
|
|
157
212
|
if (!fs.existsSync(filePath))
|
|
158
213
|
return {};
|
|
159
214
|
const raw = fs.readFileSync(filePath, 'utf-8');
|
|
160
|
-
|
|
215
|
+
const store = JSON.parse(raw);
|
|
216
|
+
for (const k of Object.keys(store)) {
|
|
217
|
+
if (store[k].apiKey) {
|
|
218
|
+
store[k].apiKey = decryptKey(store[k].apiKey);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return store;
|
|
161
222
|
}
|
|
162
223
|
catch {
|
|
163
224
|
return {};
|
|
@@ -169,14 +230,20 @@ function saveStore(store) {
|
|
|
169
230
|
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
170
231
|
}
|
|
171
232
|
const filePath = getProvidersFilePath();
|
|
172
|
-
|
|
233
|
+
const toSave = JSON.parse(JSON.stringify(store)); // deep copy
|
|
234
|
+
for (const k of Object.keys(toSave)) {
|
|
235
|
+
if (toSave[k].apiKey) {
|
|
236
|
+
toSave[k].apiKey = encryptKey(toSave[k].apiKey);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
fs.writeFileSync(filePath, JSON.stringify(toSave, null, 2) + '\n', {
|
|
173
240
|
encoding: 'utf-8',
|
|
174
241
|
mode: 0o600,
|
|
175
242
|
});
|
|
176
243
|
try {
|
|
177
244
|
fs.chmodSync(filePath, 0o600);
|
|
178
245
|
}
|
|
179
|
-
catch { /*
|
|
246
|
+
catch { /* safe: see above */ }
|
|
180
247
|
}
|
|
181
248
|
function maskKey(key) {
|
|
182
249
|
if (key.length <= 8)
|
|
@@ -210,10 +277,11 @@ function saveModelsCache(store) {
|
|
|
210
277
|
encoding: 'utf-8',
|
|
211
278
|
mode: 0o600,
|
|
212
279
|
});
|
|
280
|
+
// safe: same belt-and-braces chmod as saveStore — see comment there.
|
|
213
281
|
try {
|
|
214
282
|
fs.chmodSync(filePath, 0o600);
|
|
215
283
|
}
|
|
216
|
-
catch { /*
|
|
284
|
+
catch { /* safe: see saveStore */ }
|
|
217
285
|
}
|
|
218
286
|
/**
|
|
219
287
|
* Build the same provider-specific headers that the existing
|
|
@@ -249,6 +317,25 @@ function parseModelsResponse(payload) {
|
|
|
249
317
|
.filter((s) => typeof s === 'string' && s.length > 0);
|
|
250
318
|
return ids.length > 0 ? ids : null;
|
|
251
319
|
}
|
|
320
|
+
function getModelHintsPath() {
|
|
321
|
+
return path.join(os.homedir(), '.fixocli', 'model-hints.json');
|
|
322
|
+
}
|
|
323
|
+
function loadModelProviderHints() {
|
|
324
|
+
try {
|
|
325
|
+
const raw = fs.readFileSync(getModelHintsPath(), 'utf-8');
|
|
326
|
+
const parsed = JSON.parse(raw);
|
|
327
|
+
return new Map(Object.entries(parsed));
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return new Map();
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
function persistModelProviderHints(hints) {
|
|
334
|
+
const dir = path.join(os.homedir(), '.fixocli');
|
|
335
|
+
if (!fs.existsSync(dir))
|
|
336
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
337
|
+
fs.writeFileSync(getModelHintsPath(), JSON.stringify(Object.fromEntries(hints), null, 2) + '\n', { encoding: 'utf-8', mode: 0o600 });
|
|
338
|
+
}
|
|
252
339
|
/**
|
|
253
340
|
* Maps model IDs to their explicitly-selected provider name.
|
|
254
341
|
* Populated when the user picks a model from a provider's list
|
|
@@ -256,11 +343,12 @@ function parseModelsResponse(payload) {
|
|
|
256
343
|
* AgentClient.resolveDirectConfig() before heuristic matching,
|
|
257
344
|
* which makes live-fetched models route to their correct provider.
|
|
258
345
|
*/
|
|
259
|
-
let modelProviderHints =
|
|
346
|
+
let modelProviderHints = loadModelProviderHints();
|
|
260
347
|
export const ProvidersManager = {
|
|
261
348
|
/** Set an explicit model-to-provider association. */
|
|
262
349
|
setModelProviderHint(model, provider) {
|
|
263
350
|
modelProviderHints.set(model.toLowerCase().trim(), provider);
|
|
351
|
+
persistModelProviderHints(modelProviderHints);
|
|
264
352
|
},
|
|
265
353
|
/** Get the explicit provider hint for a model, if one exists. */
|
|
266
354
|
getModelProviderHint(model) {
|
|
@@ -269,6 +357,7 @@ export const ProvidersManager = {
|
|
|
269
357
|
/** Clear all model-provider hints (e.g. when context resets). */
|
|
270
358
|
clearModelProviderHints() {
|
|
271
359
|
modelProviderHints = new Map();
|
|
360
|
+
persistModelProviderHints(modelProviderHints);
|
|
272
361
|
},
|
|
273
362
|
/** List all connected providers with masked keys. */
|
|
274
363
|
list() {
|
|
@@ -363,10 +452,28 @@ export const ProvidersManager = {
|
|
|
363
452
|
hydrateVault() {
|
|
364
453
|
const store = loadStore();
|
|
365
454
|
const vault = getProviderKeyVault();
|
|
455
|
+
let needsMigration = false;
|
|
456
|
+
// We read directly from file without decrypting to check if any are unencrypted
|
|
457
|
+
try {
|
|
458
|
+
const raw = fs.readFileSync(getProvidersFilePath(), 'utf-8');
|
|
459
|
+
const rawStore = JSON.parse(raw);
|
|
460
|
+
for (const entry of Object.values(rawStore)) {
|
|
461
|
+
if (entry.apiKey && !entry.apiKey.startsWith('ENC:')) {
|
|
462
|
+
needsMigration = true;
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
catch {
|
|
468
|
+
// ignore
|
|
469
|
+
}
|
|
366
470
|
for (const [name, entry] of Object.entries(store)) {
|
|
367
471
|
const def = PROVIDER_REGISTRY.find((p) => p.name === name);
|
|
368
472
|
vault.ingest(name, entry.apiKey, def ? def.baseUrl : '', def ? def.displayName : name);
|
|
369
473
|
}
|
|
474
|
+
if (needsMigration) {
|
|
475
|
+
saveStore(store);
|
|
476
|
+
}
|
|
370
477
|
},
|
|
371
478
|
/**
|
|
372
479
|
* Drop the cached vault singleton. Used by the
|
|
@@ -435,10 +542,14 @@ export const ProvidersManager = {
|
|
|
435
542
|
// having to know whether a live fetch was ever attempted.
|
|
436
543
|
const store = loadModelsCache();
|
|
437
544
|
store[name] = { models: def.models.slice(), fetchedAt: now, source: 'registry-fallback' };
|
|
545
|
+
// safe: cache persistence is a perf optimisation only — losing
|
|
546
|
+
// it means the next /model call re-runs the fallback, never
|
|
547
|
+
// user-visible breakage. ENOSPC / read-only $HOME are the only
|
|
548
|
+
// realistic causes.
|
|
438
549
|
try {
|
|
439
550
|
saveModelsCache(store);
|
|
440
551
|
}
|
|
441
|
-
catch { /*
|
|
552
|
+
catch { /* safe: see above */ }
|
|
442
553
|
return { models: def.models.slice(), source: 'registry-fallback', fetchedAt: now };
|
|
443
554
|
};
|
|
444
555
|
// No key on disk → cannot live-fetch; fall through to cache → registry.
|