aura-code 0.5.0 → 0.10.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.
- package/README.md +47 -164
- package/dist/agent/affect.d.ts +13 -0
- package/dist/agent/affect.js +34 -0
- package/dist/agent/affect.js.map +1 -0
- package/dist/agent/compactor.d.ts +27 -4
- package/dist/agent/compactor.js +185 -54
- package/dist/agent/compactor.js.map +1 -1
- package/dist/agent/confess.d.ts +35 -0
- package/dist/agent/confess.js +296 -0
- package/dist/agent/confess.js.map +1 -0
- package/dist/agent/domain-expertise.d.ts +22 -0
- package/dist/agent/domain-expertise.js +110 -0
- package/dist/agent/domain-expertise.js.map +1 -0
- package/dist/agent/executive-queue.d.ts +26 -0
- package/dist/agent/executive-queue.js +50 -0
- package/dist/agent/executive-queue.js.map +1 -0
- package/dist/agent/generational-flush.d.ts +28 -0
- package/dist/agent/generational-flush.js +48 -0
- package/dist/agent/generational-flush.js.map +1 -0
- package/dist/agent/loop-profile.d.ts +50 -0
- package/dist/agent/loop-profile.js +88 -0
- package/dist/agent/loop-profile.js.map +1 -0
- package/dist/agent/loop.d.ts +14 -5
- package/dist/agent/loop.js +167 -23
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/memory-consolidate.d.ts +14 -0
- package/dist/agent/memory-consolidate.js +141 -0
- package/dist/agent/memory-consolidate.js.map +1 -0
- package/dist/agent/mixture.d.ts +33 -0
- package/dist/agent/mixture.js +138 -0
- package/dist/agent/mixture.js.map +1 -0
- package/dist/agent/spawner.js +2 -2
- package/dist/agent/spawner.js.map +1 -1
- package/dist/agent/system-prompt.d.ts +1 -1
- package/dist/agent/system-prompt.js +49 -13
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/unified-memory.d.ts +15 -0
- package/dist/agent/unified-memory.js +164 -0
- package/dist/agent/unified-memory.js.map +1 -0
- package/dist/checkpoints/engine.d.ts +44 -0
- package/dist/checkpoints/engine.js +324 -0
- package/dist/checkpoints/engine.js.map +1 -0
- package/dist/cli/command-palette.d.ts +26 -0
- package/dist/cli/command-palette.js +133 -0
- package/dist/cli/command-palette.js.map +1 -0
- package/dist/cli/context-health.d.ts +51 -0
- package/dist/cli/context-health.js +187 -0
- package/dist/cli/context-health.js.map +1 -0
- package/dist/cli/diamond.d.ts +67 -0
- package/dist/cli/diamond.js +222 -12
- package/dist/cli/diamond.js.map +1 -1
- package/dist/cli/dic.d.ts +2 -0
- package/dist/cli/dic.js +106 -0
- package/dist/cli/dic.js.map +1 -0
- package/dist/cli/diff-view.d.ts +18 -0
- package/dist/cli/diff-view.js +114 -0
- package/dist/cli/diff-view.js.map +1 -0
- package/dist/cli/display.d.ts +18 -4
- package/dist/cli/display.js +74 -146
- package/dist/cli/display.js.map +1 -1
- package/dist/cli/help-data.d.ts +7 -0
- package/dist/cli/help-data.js +80 -0
- package/dist/cli/help-data.js.map +1 -0
- package/dist/cli/index.js +1001 -788
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/markdown.d.ts +5 -0
- package/dist/cli/markdown.js +128 -0
- package/dist/cli/markdown.js.map +1 -0
- package/dist/cli/model-select.d.ts +39 -0
- package/dist/cli/model-select.js +65 -0
- package/dist/cli/model-select.js.map +1 -0
- package/dist/cli/tui.d.ts +34 -0
- package/dist/cli/tui.js +1176 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -17
- package/dist/config/defaults.js +25 -39
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/project-config.d.ts +2 -6
- package/dist/config/project-config.js +2 -2
- package/dist/config/project-config.js.map +1 -1
- package/dist/doctor/checks.d.ts +18 -0
- package/dist/doctor/checks.js +524 -0
- package/dist/doctor/checks.js.map +1 -0
- package/dist/doctor/index.d.ts +4 -0
- package/dist/doctor/index.js +229 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/repair.d.ts +19 -0
- package/dist/doctor/repair.js +126 -0
- package/dist/doctor/repair.js.map +1 -0
- package/dist/doctor/types.d.ts +38 -0
- package/dist/doctor/types.js +10 -0
- package/dist/doctor/types.js.map +1 -0
- package/dist/dream/dream.d.ts +79 -36
- package/dist/dream/dream.js +327 -117
- package/dist/dream/dream.js.map +1 -1
- package/dist/dream/episode.d.ts +17 -0
- package/dist/dream/episode.js +116 -0
- package/dist/dream/episode.js.map +1 -0
- package/dist/dream/okf.d.ts +10 -0
- package/dist/dream/okf.js +280 -0
- package/dist/dream/okf.js.map +1 -0
- package/dist/dream/parser.d.ts +60 -0
- package/dist/dream/parser.js +176 -0
- package/dist/dream/parser.js.map +1 -0
- package/dist/dream/reconcile.d.ts +69 -0
- package/dist/dream/reconcile.js +303 -0
- package/dist/dream/reconcile.js.map +1 -0
- package/dist/kanban/engine.d.ts +26 -0
- package/dist/kanban/engine.js +208 -0
- package/dist/kanban/engine.js.map +1 -0
- package/dist/kanban/types.d.ts +19 -0
- package/dist/kanban/types.js +9 -1
- package/dist/kanban/types.js.map +1 -1
- package/dist/machina/index.d.ts +16 -0
- package/dist/machina/index.js +61 -0
- package/dist/machina/index.js.map +1 -0
- package/dist/machina/render-html.d.ts +2 -0
- package/dist/machina/render-html.js +191 -0
- package/dist/machina/render-html.js.map +1 -0
- package/dist/machina/render-terminal.d.ts +2 -0
- package/dist/machina/render-terminal.js +99 -0
- package/dist/machina/render-terminal.js.map +1 -0
- package/dist/machina/repair.d.ts +23 -0
- package/dist/machina/repair.js +98 -0
- package/dist/machina/repair.js.map +1 -0
- package/dist/machina/spec.d.ts +61 -0
- package/dist/machina/spec.js +124 -0
- package/dist/machina/spec.js.map +1 -0
- package/dist/machina/verify.d.ts +39 -0
- package/dist/machina/verify.js +95 -0
- package/dist/machina/verify.js.map +1 -0
- package/dist/mining/extract.d.ts +34 -0
- package/dist/mining/extract.js +229 -0
- package/dist/mining/extract.js.map +1 -0
- package/dist/mining/refine.d.ts +28 -0
- package/dist/mining/refine.js +256 -0
- package/dist/mining/refine.js.map +1 -0
- package/dist/perception/extractor.js +5 -3
- package/dist/perception/extractor.js.map +1 -1
- package/dist/perception/graph-store.d.ts +0 -11
- package/dist/perception/graph-store.js +0 -33
- package/dist/perception/graph-store.js.map +1 -1
- package/dist/perception/index.d.ts +1 -1
- package/dist/perception/index.js +1 -2
- package/dist/perception/index.js.map +1 -1
- package/dist/plugins/commands.d.ts +38 -0
- package/dist/plugins/commands.js +134 -0
- package/dist/plugins/commands.js.map +1 -0
- package/dist/plugins/frontmatter.d.ts +14 -0
- package/dist/plugins/frontmatter.js +78 -0
- package/dist/plugins/frontmatter.js.map +1 -0
- package/dist/plugins/hooks.d.ts +12 -0
- package/dist/plugins/hooks.js +148 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/loader.d.ts +7 -0
- package/dist/plugins/loader.js +255 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/market.d.ts +23 -0
- package/dist/plugins/market.js +281 -0
- package/dist/plugins/market.js.map +1 -0
- package/dist/plugins/types.d.ts +90 -0
- package/dist/plugins/types.js +20 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
- package/dist/providers/anthropic-oauth-draft.js +414 -0
- package/dist/providers/anthropic-oauth-draft.js.map +1 -0
- package/dist/providers/anthropic.d.ts +4 -1
- package/dist/providers/anthropic.js +34 -6
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/factory.d.ts +71 -14
- package/dist/providers/factory.js +205 -124
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.js +8 -21
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/live-models.d.ts +23 -0
- package/dist/providers/live-models.js +145 -0
- package/dist/providers/live-models.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +1 -12
- package/dist/providers/openai-compatible.js +71 -108
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/resilient-factory.js +1 -1
- package/dist/providers/resilient-factory.js.map +1 -1
- package/dist/rem/graph.d.ts +72 -0
- package/dist/rem/graph.js +139 -0
- package/dist/rem/graph.js.map +1 -0
- package/dist/rem/index.d.ts +16 -0
- package/dist/rem/index.js +60 -0
- package/dist/rem/index.js.map +1 -0
- package/dist/rem/render-html.d.ts +2 -0
- package/dist/rem/render-html.js +189 -0
- package/dist/rem/render-html.js.map +1 -0
- package/dist/rem/render-terminal.d.ts +4 -0
- package/dist/rem/render-terminal.js +94 -0
- package/dist/rem/render-terminal.js.map +1 -0
- package/dist/repl/queue.d.ts +22 -0
- package/dist/repl/queue.js +165 -0
- package/dist/repl/queue.js.map +1 -0
- package/dist/repl/side-channel.d.ts +23 -0
- package/dist/repl/side-channel.js +63 -0
- package/dist/repl/side-channel.js.map +1 -0
- package/dist/research/council.d.ts +5 -2
- package/dist/research/council.js +73 -10
- package/dist/research/council.js.map +1 -1
- package/dist/ruby/alternator.d.ts +11 -30
- package/dist/ruby/alternator.js +59 -38
- package/dist/ruby/alternator.js.map +1 -1
- package/dist/ruby/episode-capture.d.ts +0 -10
- package/dist/ruby/episode-capture.js +0 -33
- package/dist/ruby/episode-capture.js.map +1 -1
- package/dist/ruby/types.js +1 -1
- package/dist/ruby/types.js.map +1 -1
- package/dist/safety/path-jail.d.ts +17 -0
- package/dist/safety/path-jail.js +100 -0
- package/dist/safety/path-jail.js.map +1 -0
- package/dist/safety/permissions.d.ts +12 -21
- package/dist/safety/permissions.js +81 -216
- package/dist/safety/permissions.js.map +1 -1
- package/dist/safety/ssrf.d.ts +29 -0
- package/dist/safety/ssrf.js +185 -0
- package/dist/safety/ssrf.js.map +1 -0
- package/dist/server/index.js +64 -10
- package/dist/server/index.js.map +1 -1
- package/dist/setup/first-run.d.ts +0 -24
- package/dist/setup/first-run.js +10 -344
- package/dist/setup/first-run.js.map +1 -1
- package/dist/setup/key-store.d.ts +12 -0
- package/dist/setup/key-store.js +108 -0
- package/dist/setup/key-store.js.map +1 -0
- package/dist/setup/provider-registry.js +31 -18
- package/dist/setup/provider-registry.js.map +1 -1
- package/dist/setup/provider-test.d.ts +7 -0
- package/dist/setup/provider-test.js +73 -10
- package/dist/setup/provider-test.js.map +1 -1
- package/dist/setup/provider-wizard.d.ts +4 -1
- package/dist/setup/provider-wizard.js +92 -26
- package/dist/setup/provider-wizard.js.map +1 -1
- package/dist/setup/xiaomi.d.ts +1 -1
- package/dist/setup/xiaomi.js +3 -3
- package/dist/setup/xiaomi.js.map +1 -1
- package/dist/tools/browser.js +6 -4
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/clipboard.js +7 -1
- package/dist/tools/clipboard.js.map +1 -1
- package/dist/tools/dictate.d.ts +60 -0
- package/dist/tools/dictate.js +983 -0
- package/dist/tools/dictate.js.map +1 -0
- package/dist/tools/dictate_patched.js +1057 -0
- package/dist/tools/edit-file.js +10 -2
- package/dist/tools/edit-file.js.map +1 -1
- package/dist/tools/gmail-tool.d.ts +5 -1
- package/dist/tools/gmail-tool.js +151 -11
- package/dist/tools/gmail-tool.js.map +1 -1
- package/dist/tools/http-request.js +14 -4
- package/dist/tools/http-request.js.map +1 -1
- package/dist/tools/image-read.js +34 -2
- package/dist/tools/image-read.js.map +1 -1
- package/dist/tools/index.d.ts +16 -1
- package/dist/tools/index.js +59 -8
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp.js +12 -0
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/read-file.js +10 -14
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/telegram-audio-policy.d.ts +30 -0
- package/dist/tools/telegram-audio-policy.js +49 -0
- package/dist/tools/telegram-audio-policy.js.map +1 -0
- package/dist/tools/telegram-bot.js +1136 -539
- package/dist/tools/telegram-bot.js.map +1 -1
- package/dist/tools/telegram-voice.d.ts +18 -5
- package/dist/tools/telegram-voice.js +54 -12
- package/dist/tools/telegram-voice.js.map +1 -1
- package/dist/tools/telegram.d.ts +3 -3
- package/dist/tools/telegram.js +5 -84
- package/dist/tools/telegram.js.map +1 -1
- package/dist/tools/tools.d.ts +2 -14
- package/dist/tools/tools.js +79 -144
- package/dist/tools/tools.js.map +1 -1
- package/dist/tools/web-fetch.js +39 -7
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.js +2 -3
- package/dist/tools/web-search.js.map +1 -1
- package/dist/util/errors.js +1 -15
- package/dist/util/errors.js.map +1 -1
- package/dist/util/json-repair.d.ts +11 -0
- package/dist/util/json-repair.js +31 -0
- package/dist/util/json-repair.js.map +1 -0
- package/dist/util/rate-limiter.js +2 -8
- package/dist/util/rate-limiter.js.map +1 -1
- package/dist/viz/index.js +793 -792
- package/dist/viz/index.js.map +1 -1
- package/dist/viz/reader.d.ts +33 -0
- package/dist/viz/reader.js +343 -0
- package/dist/viz/reader.js.map +1 -0
- package/package.json +13 -32
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadKeysIntoEnv = loadKeysIntoEnv;
|
|
37
|
+
exports.saveKey = saveKey;
|
|
38
|
+
exports.listKeyNames = listKeyNames;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const os = __importStar(require("os"));
|
|
42
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
43
|
+
// Persistent API-key store — ~/.aura/keys.json
|
|
44
|
+
//
|
|
45
|
+
// Aura resolves keys from process.env (see util/env.ts), which means a key only
|
|
46
|
+
// survives if it's exported in a shell rc / environment.d file. That's fragile:
|
|
47
|
+
// a key set with :apikey vanished on exit, and keys scattered across .bashrc vs
|
|
48
|
+
// environment.d meant some sessions couldn't see them (the recurring "type the
|
|
49
|
+
// key every time" pain). This store fixes it: keys live in one file, loaded
|
|
50
|
+
// into process.env at startup so every run and every provider sees them.
|
|
51
|
+
//
|
|
52
|
+
// Precedence: a key already present in the real environment WINS (so a shell
|
|
53
|
+
// export or a per-run `KEY=… aura` override is never clobbered by the store).
|
|
54
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
function keyStorePath() {
|
|
56
|
+
return path.join(os.homedir(), '.aura', 'keys.json');
|
|
57
|
+
}
|
|
58
|
+
function readStore() {
|
|
59
|
+
try {
|
|
60
|
+
const p = keyStorePath();
|
|
61
|
+
if (!fs.existsSync(p))
|
|
62
|
+
return {};
|
|
63
|
+
const parsed = JSON.parse(fs.readFileSync(p, 'utf8'));
|
|
64
|
+
return parsed && typeof parsed === 'object' ? parsed : {};
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Merge stored keys into process.env WITHOUT overriding anything already set
|
|
72
|
+
* in the real environment. Call once at startup, before any provider is built.
|
|
73
|
+
*/
|
|
74
|
+
function loadKeysIntoEnv() {
|
|
75
|
+
const store = readStore();
|
|
76
|
+
for (const [name, value] of Object.entries(store)) {
|
|
77
|
+
if (!value || !String(value).trim())
|
|
78
|
+
continue;
|
|
79
|
+
const existing = process.env[name];
|
|
80
|
+
if (existing && existing.trim())
|
|
81
|
+
continue; // real env wins
|
|
82
|
+
process.env[name] = String(value);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Persist a key to the store AND set it live in this process. Written with 0600
|
|
87
|
+
* perms (secrets). Returns the file path.
|
|
88
|
+
*/
|
|
89
|
+
function saveKey(name, value) {
|
|
90
|
+
const store = readStore();
|
|
91
|
+
store[name] = value;
|
|
92
|
+
const p = keyStorePath();
|
|
93
|
+
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
94
|
+
const tmp = `${p}.tmp`;
|
|
95
|
+
fs.writeFileSync(tmp, JSON.stringify(store, null, 2), { mode: 0o600 });
|
|
96
|
+
fs.renameSync(tmp, p);
|
|
97
|
+
try {
|
|
98
|
+
fs.chmodSync(p, 0o600);
|
|
99
|
+
}
|
|
100
|
+
catch { /* best effort */ }
|
|
101
|
+
process.env[name] = value; // live immediately
|
|
102
|
+
return p;
|
|
103
|
+
}
|
|
104
|
+
/** Names of keys currently in the store (values never returned/logged). */
|
|
105
|
+
function listKeyNames() {
|
|
106
|
+
return Object.keys(readStore());
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=key-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-store.js","sourceRoot":"","sources":["../../src/setup/key-store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,0CAQC;AAMD,0BAWC;AAGD,oCAEC;AArED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,gFAAgF;AAChF,+EAA+E;AAC/E,4EAA4E;AAC5E,yEAAyE;AACzE,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,gFAAgF;AAEhF,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACvD,CAAC;AAID,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe;IAC7B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;YAAE,SAAS;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;YAAE,SAAS,CAAC,gBAAgB;QAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAC,IAAY,EAAE,KAAa;IACjD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACpB,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,mBAAmB;IAC9C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,2EAA2E;AAC3E,SAAgB,YAAY;IAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -24,8 +24,8 @@ exports.PROVIDER_REGISTRY = [
|
|
|
24
24
|
envKey: 'DEEPSEEK_API_KEY',
|
|
25
25
|
signupUrl: 'https://platform.deepseek.com/api_keys',
|
|
26
26
|
models: [
|
|
27
|
-
{ id: 'deepseek-v4-flash', label: 'DeepSeek V4 Flash', speed: 'Fast', contextWindow:
|
|
28
|
-
{ id: 'deepseek-v4-pro', label: 'DeepSeek V4 Pro', speed: 'Powerful', contextWindow:
|
|
27
|
+
{ id: 'deepseek-v4-flash', label: 'DeepSeek V4 Flash', speed: 'Fast', contextWindow: 1_000_000 },
|
|
28
|
+
{ id: 'deepseek-v4-pro', label: 'DeepSeek V4 Pro', speed: 'Powerful', contextWindow: 1_000_000 },
|
|
29
29
|
],
|
|
30
30
|
},
|
|
31
31
|
{
|
|
@@ -34,8 +34,8 @@ exports.PROVIDER_REGISTRY = [
|
|
|
34
34
|
envKey: 'ANTHROPIC_API_KEY',
|
|
35
35
|
signupUrl: 'https://console.anthropic.com/settings/keys',
|
|
36
36
|
models: [
|
|
37
|
-
{ id: 'claude-sonnet-4-5-20251001', label: 'Claude Sonnet 4.5', speed: 'Fast', contextWindow:
|
|
38
|
-
{ id: 'claude-opus-4-5-20251001', label: 'Claude Opus 4.5', speed: 'Powerful', contextWindow:
|
|
37
|
+
{ id: 'claude-sonnet-4-5-20251001', label: 'Claude Sonnet 4.5', speed: 'Fast', contextWindow: 200_000 },
|
|
38
|
+
{ id: 'claude-opus-4-5-20251001', label: 'Claude Opus 4.5', speed: 'Powerful', contextWindow: 200_000 },
|
|
39
39
|
],
|
|
40
40
|
},
|
|
41
41
|
{
|
|
@@ -44,9 +44,9 @@ exports.PROVIDER_REGISTRY = [
|
|
|
44
44
|
envKey: 'OPENAI_API_KEY',
|
|
45
45
|
signupUrl: 'https://platform.openai.com/api-keys',
|
|
46
46
|
models: [
|
|
47
|
-
{ id: 'gpt-4o', label: 'GPT-4o', speed: 'Fast', contextWindow:
|
|
48
|
-
{ id: 'gpt-4o-mini', label: 'GPT-4o Mini', speed: 'Fast', contextWindow:
|
|
49
|
-
{ id: 'o1', label: 'o1', speed: 'Reasoning', contextWindow:
|
|
47
|
+
{ id: 'gpt-4o', label: 'GPT-4o', speed: 'Fast', contextWindow: 128_000 },
|
|
48
|
+
{ id: 'gpt-4o-mini', label: 'GPT-4o Mini', speed: 'Fast', contextWindow: 128_000 },
|
|
49
|
+
{ id: 'o1', label: 'o1', speed: 'Reasoning', contextWindow: 200_000 },
|
|
50
50
|
],
|
|
51
51
|
},
|
|
52
52
|
{
|
|
@@ -55,8 +55,8 @@ exports.PROVIDER_REGISTRY = [
|
|
|
55
55
|
envKey: 'GOOGLE_API_KEY',
|
|
56
56
|
signupUrl: 'https://aistudio.google.com/apikey',
|
|
57
57
|
models: [
|
|
58
|
-
{ id: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', speed: 'Fast', contextWindow:
|
|
59
|
-
{ id: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', speed: 'Powerful', contextWindow:
|
|
58
|
+
{ id: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash', speed: 'Fast', contextWindow: 1_000_000 },
|
|
59
|
+
{ id: 'gemini-2.5-pro', label: 'Gemini 2.5 Pro', speed: 'Powerful', contextWindow: 1_000_000 },
|
|
60
60
|
],
|
|
61
61
|
},
|
|
62
62
|
{
|
|
@@ -75,7 +75,7 @@ exports.PROVIDER_REGISTRY = [
|
|
|
75
75
|
envKey: 'OPENROUTER_API_KEY',
|
|
76
76
|
signupUrl: 'https://openrouter.ai/keys',
|
|
77
77
|
models: [
|
|
78
|
-
{ id: 'auto', label: 'Auto (best available)', speed: 'Auto', contextWindow:
|
|
78
|
+
{ id: 'auto', label: 'Auto (best available)', speed: 'Auto', contextWindow: 128_000 },
|
|
79
79
|
],
|
|
80
80
|
},
|
|
81
81
|
{
|
|
@@ -84,7 +84,7 @@ exports.PROVIDER_REGISTRY = [
|
|
|
84
84
|
envKey: 'XAI_API_KEY',
|
|
85
85
|
signupUrl: 'https://console.x.ai',
|
|
86
86
|
models: [
|
|
87
|
-
{ id: 'grok-2', label: 'Grok 2', speed: 'Powerful', contextWindow:
|
|
87
|
+
{ id: 'grok-2', label: 'Grok 2', speed: 'Powerful', contextWindow: 131_072 },
|
|
88
88
|
],
|
|
89
89
|
},
|
|
90
90
|
{
|
|
@@ -93,12 +93,12 @@ exports.PROVIDER_REGISTRY = [
|
|
|
93
93
|
envKey: 'OPENCODE_API_KEY',
|
|
94
94
|
signupUrl: 'https://opencode.ai',
|
|
95
95
|
models: [
|
|
96
|
-
{ id: 'opencode/gpt-5-nano', label: 'GPT-5 Nano (free)', speed: 'Fast · free', contextWindow:
|
|
97
|
-
{ id: 'opencode/big-pickle', label: 'Big Pickle (free)', speed: 'Powerful · free', contextWindow:
|
|
98
|
-
{ id: 'opencode/mimo-v2.5-free', label: 'MiMo V2.5 (free)', speed: 'Fast · free', contextWindow:
|
|
99
|
-
{ id: 'opencode/minimax-m2.5-free', label: 'MiniMax M2.5 (free)', speed: 'Reasoning · free', contextWindow:
|
|
100
|
-
{ id: 'opencode/nemotron-3-super-free', label: 'Nemotron 3 Super (free)', speed: 'Fast · free', contextWindow:
|
|
101
|
-
{ id: 'opencode/ling-2.6-flash-free', label: 'Ling 2.6 Flash (free)', speed: 'Fast · free', contextWindow:
|
|
96
|
+
{ id: 'opencode/gpt-5-nano', label: 'GPT-5 Nano (free)', speed: 'Fast · free', contextWindow: 128_000 },
|
|
97
|
+
{ id: 'opencode/big-pickle', label: 'Big Pickle (free)', speed: 'Powerful · free', contextWindow: 128_000 },
|
|
98
|
+
{ id: 'opencode/mimo-v2.5-free', label: 'MiMo V2.5 (free)', speed: 'Fast · free', contextWindow: 128_000 },
|
|
99
|
+
{ id: 'opencode/minimax-m2.5-free', label: 'MiniMax M2.5 (free)', speed: 'Reasoning · free', contextWindow: 128_000 },
|
|
100
|
+
{ id: 'opencode/nemotron-3-super-free', label: 'Nemotron 3 Super (free)', speed: 'Fast · free', contextWindow: 128_000 },
|
|
101
|
+
{ id: 'opencode/ling-2.6-flash-free', label: 'Ling 2.6 Flash (free)', speed: 'Fast · free', contextWindow: 128_000 },
|
|
102
102
|
],
|
|
103
103
|
},
|
|
104
104
|
{
|
|
@@ -107,7 +107,20 @@ exports.PROVIDER_REGISTRY = [
|
|
|
107
107
|
envKey: 'NVIDIA_API_KEY',
|
|
108
108
|
signupUrl: 'https://build.nvidia.com',
|
|
109
109
|
models: [
|
|
110
|
-
{ id: 'nvidia/llama-3.1-nemotron-70b-instruct', label: 'Nemotron 70B', speed: 'Powerful', contextWindow:
|
|
110
|
+
{ id: 'nvidia/llama-3.1-nemotron-70b-instruct', label: 'Nemotron 70B', speed: 'Powerful', contextWindow: 131_072 },
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: 'GLM (Zhipu)',
|
|
115
|
+
// General endpoint as default; the wizard swaps in the Coding Plan
|
|
116
|
+
// endpoint when the user picks that plan.
|
|
117
|
+
baseUrl: 'https://api.z.ai/api/paas/v4',
|
|
118
|
+
envKey: 'ZHIPU_API_KEY',
|
|
119
|
+
signupUrl: 'https://z.ai',
|
|
120
|
+
models: [
|
|
121
|
+
{ id: 'glm-5.2', label: 'GLM-5.2', speed: 'Powerful · 1M context', contextWindow: 1_000_000 },
|
|
122
|
+
{ id: 'glm-5.1', label: 'GLM-5.1', speed: 'Powerful · agentic', contextWindow: 200_000 },
|
|
123
|
+
{ id: 'glm-5', label: 'GLM-5', speed: 'Powerful · 744B MoE', contextWindow: 200_000 },
|
|
111
124
|
],
|
|
112
125
|
},
|
|
113
126
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/setup/provider-registry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/setup/provider-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,13 @@ export interface TestResult {
|
|
|
8
8
|
ok: boolean;
|
|
9
9
|
error?: string;
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Normalize a user-entered base URL: trim whitespace, drop trailing slashes,
|
|
13
|
+
* and strip a pasted endpoint path (/chat/completions, /completions,
|
|
14
|
+
* /v1/messages) — users often paste the full endpoint URL from provider docs,
|
|
15
|
+
* which would otherwise produce e.g. .../chat/completions/chat/completions.
|
|
16
|
+
*/
|
|
17
|
+
export declare function normalizeBaseUrl(raw: string): string;
|
|
11
18
|
/**
|
|
12
19
|
* Test a provider connection by sending a minimal chat completion request.
|
|
13
20
|
* Times out after 10 seconds.
|
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.normalizeBaseUrl = normalizeBaseUrl;
|
|
36
37
|
exports.testProviderConnection = testProviderConnection;
|
|
37
38
|
/**
|
|
38
39
|
* Provider connection tester.
|
|
@@ -46,15 +47,35 @@ exports.testProviderConnection = testProviderConnection;
|
|
|
46
47
|
const https = __importStar(require("https"));
|
|
47
48
|
const http = __importStar(require("http"));
|
|
48
49
|
const url_1 = require("url");
|
|
50
|
+
/**
|
|
51
|
+
* Normalize a user-entered base URL: trim whitespace, drop trailing slashes,
|
|
52
|
+
* and strip a pasted endpoint path (/chat/completions, /completions,
|
|
53
|
+
* /v1/messages) — users often paste the full endpoint URL from provider docs,
|
|
54
|
+
* which would otherwise produce e.g. .../chat/completions/chat/completions.
|
|
55
|
+
*/
|
|
56
|
+
function normalizeBaseUrl(raw) {
|
|
57
|
+
let url = raw.trim().replace(/\/+$/, '');
|
|
58
|
+
url = url.replace(/\/chat\/completions$/, '');
|
|
59
|
+
url = url.replace(/\/v1\/messages$/, '/v1');
|
|
60
|
+
url = url.replace(/\/+$/, '');
|
|
61
|
+
return url;
|
|
62
|
+
}
|
|
49
63
|
/**
|
|
50
64
|
* Strip routing/vendor prefixes that Aura adds to model IDs for internal
|
|
51
65
|
* routing (e.g. "opencode/big-pickle" → "big-pickle", "ollama/llama3.2" → "llama3.2").
|
|
52
66
|
* These prefixes must not be forwarded to the actual API.
|
|
67
|
+
*
|
|
68
|
+
* NOT applied to Custom endpoints — there the model ID is the user's exact
|
|
69
|
+
* string and any prefix may be genuinely part of the remote model name
|
|
70
|
+
* (e.g. OpenRouter's "qwen/qwen3-coder:free").
|
|
53
71
|
*/
|
|
54
72
|
function stripModelPrefix(model) {
|
|
55
73
|
// opencode/ or zen/ prefix (OpenCode Zen gateway)
|
|
56
74
|
if (/^(opencode|zen)\//.test(model))
|
|
57
75
|
return model.replace(/^(opencode|zen)\//, '');
|
|
76
|
+
// zhipu/ or zhipu-coding/ prefix (Zhipu Z.ai — endpoint routing only)
|
|
77
|
+
if (/^zhipu(-coding)?\//.test(model))
|
|
78
|
+
return model.replace(/^zhipu(-coding)?\//, '');
|
|
58
79
|
// openrouter/vendor/model → just model (last segment)
|
|
59
80
|
if (model.startsWith('openrouter/')) {
|
|
60
81
|
const parts = model.split('/');
|
|
@@ -66,6 +87,9 @@ function stripModelPrefix(model) {
|
|
|
66
87
|
// xai/model
|
|
67
88
|
if (model.startsWith('xai/'))
|
|
68
89
|
return model.replace('xai/', '');
|
|
90
|
+
// xiaomi/model, mimo/model (factory accepts both prefixes)
|
|
91
|
+
if (/^(xiaomi|mimo)\//.test(model))
|
|
92
|
+
return model.replace(/^(xiaomi|mimo)\//, '');
|
|
69
93
|
return model;
|
|
70
94
|
}
|
|
71
95
|
/**
|
|
@@ -76,20 +100,23 @@ async function testProviderConnection(config) {
|
|
|
76
100
|
const isOllama = config.provider === 'Ollama (local, free)';
|
|
77
101
|
const isAnthropic = config.provider === 'Anthropic (Claude)';
|
|
78
102
|
const isGoogle = config.provider === 'Google (Gemini)';
|
|
103
|
+
const isCustom = config.provider === 'Custom endpoint';
|
|
104
|
+
const normalized = { ...config, baseUrl: normalizeBaseUrl(config.baseUrl) };
|
|
79
105
|
// ── Ollama: just check if the server is reachable ──────────────────────────
|
|
80
106
|
if (isOllama) {
|
|
81
|
-
return testOllamaConnection(
|
|
107
|
+
return testOllamaConnection(normalized.baseUrl);
|
|
82
108
|
}
|
|
83
109
|
// ── Google: uses a different API format ────────────────────────────────────
|
|
84
110
|
if (isGoogle) {
|
|
85
|
-
return testGoogleConnection(
|
|
111
|
+
return testGoogleConnection(normalized);
|
|
86
112
|
}
|
|
87
113
|
// ── Anthropic: uses x-api-key header and different body format ─────────────
|
|
88
114
|
if (isAnthropic) {
|
|
89
|
-
return testAnthropicConnection(
|
|
115
|
+
return testAnthropicConnection(normalized);
|
|
90
116
|
}
|
|
91
117
|
// ── All others: OpenAI-compatible chat/completions ─────────────────────────
|
|
92
|
-
|
|
118
|
+
// Custom endpoints send the model ID verbatim — no prefix stripping.
|
|
119
|
+
return testOpenAICompatibleConnection(normalized, { stripPrefix: !isCustom });
|
|
93
120
|
}
|
|
94
121
|
/**
|
|
95
122
|
* Check if Ollama is running by fetching /api/tags.
|
|
@@ -126,12 +153,13 @@ async function testGoogleConnection(config) {
|
|
|
126
153
|
const url = new url_1.URL(`${config.baseUrl}/models/${config.model}:generateContent?key=${config.apiKey}`);
|
|
127
154
|
const body = JSON.stringify({
|
|
128
155
|
contents: [{ parts: [{ text: "Say 'ok' and nothing else" }] }],
|
|
129
|
-
generationConfig: { maxOutputTokens:
|
|
156
|
+
generationConfig: { maxOutputTokens: 64 },
|
|
130
157
|
});
|
|
131
158
|
return makeRequest(url, {
|
|
132
159
|
method: 'POST',
|
|
133
160
|
headers: { 'Content-Type': 'application/json' },
|
|
134
161
|
body,
|
|
162
|
+
expectField: 'candidates',
|
|
135
163
|
});
|
|
136
164
|
}
|
|
137
165
|
/**
|
|
@@ -141,7 +169,7 @@ async function testAnthropicConnection(config) {
|
|
|
141
169
|
const url = new url_1.URL(`${config.baseUrl}/v1/messages`);
|
|
142
170
|
const body = JSON.stringify({
|
|
143
171
|
model: stripModelPrefix(config.model),
|
|
144
|
-
max_tokens:
|
|
172
|
+
max_tokens: 64,
|
|
145
173
|
messages: [{ role: 'user', content: "Say 'ok' and nothing else" }],
|
|
146
174
|
});
|
|
147
175
|
return makeRequest(url, {
|
|
@@ -152,16 +180,19 @@ async function testAnthropicConnection(config) {
|
|
|
152
180
|
'anthropic-version': '2023-06-01',
|
|
153
181
|
},
|
|
154
182
|
body,
|
|
183
|
+
expectField: 'content',
|
|
155
184
|
});
|
|
156
185
|
}
|
|
157
186
|
/**
|
|
158
187
|
* Test OpenAI-compatible connection using chat/completions.
|
|
159
188
|
*/
|
|
160
|
-
async function testOpenAICompatibleConnection(config) {
|
|
189
|
+
async function testOpenAICompatibleConnection(config, opts = { stripPrefix: true }) {
|
|
161
190
|
const url = new url_1.URL(`${config.baseUrl}/chat/completions`);
|
|
162
191
|
const body = JSON.stringify({
|
|
163
|
-
model: stripModelPrefix(config.model),
|
|
164
|
-
|
|
192
|
+
model: opts.stripPrefix ? stripModelPrefix(config.model) : config.model,
|
|
193
|
+
// 64 tokens: reasoning models (GLM, MiMo Pro, o-series) burn small budgets
|
|
194
|
+
// on hidden thinking; 10 used to come back as an empty "length" response.
|
|
195
|
+
max_tokens: 64,
|
|
165
196
|
messages: [{ role: 'user', content: "Say 'ok' and nothing else" }],
|
|
166
197
|
});
|
|
167
198
|
return makeRequest(url, {
|
|
@@ -171,6 +202,7 @@ async function testOpenAICompatibleConnection(config) {
|
|
|
171
202
|
'Authorization': `Bearer ${config.apiKey ?? ''}`,
|
|
172
203
|
},
|
|
173
204
|
body,
|
|
205
|
+
expectField: 'choices',
|
|
174
206
|
});
|
|
175
207
|
}
|
|
176
208
|
/**
|
|
@@ -181,13 +213,44 @@ function makeRequest(url, opts) {
|
|
|
181
213
|
return new Promise(resolve => {
|
|
182
214
|
const req = transport.request(url, {
|
|
183
215
|
method: opts.method,
|
|
184
|
-
headers:
|
|
216
|
+
headers: {
|
|
217
|
+
// Some provider edges (e.g. Z.ai's CDN) silently drop requests with
|
|
218
|
+
// no User-Agent — the connection hangs until timeout instead of 401.
|
|
219
|
+
'User-Agent': 'aura-code',
|
|
220
|
+
'Accept': '*/*',
|
|
221
|
+
'Content-Length': Buffer.byteLength(opts.body),
|
|
222
|
+
...opts.headers,
|
|
223
|
+
},
|
|
185
224
|
timeout: 10_000,
|
|
186
225
|
}, res => {
|
|
187
226
|
let data = '';
|
|
188
227
|
res.on('data', chunk => { data += chunk; });
|
|
189
228
|
res.on('end', () => {
|
|
190
229
|
if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
|
|
230
|
+
// 2xx alone is not proof: a wrong base URL can hit a web app that
|
|
231
|
+
// answers 200 with an HTML page, or a gateway that wraps errors in
|
|
232
|
+
// 200s. Require a JSON body with the field a real completion has.
|
|
233
|
+
let parsed = null;
|
|
234
|
+
try {
|
|
235
|
+
parsed = JSON.parse(data);
|
|
236
|
+
}
|
|
237
|
+
catch { /* not JSON */ }
|
|
238
|
+
if (parsed === null) {
|
|
239
|
+
resolve({
|
|
240
|
+
ok: false,
|
|
241
|
+
error: `Endpoint answered HTTP ${res.statusCode} but not with JSON (got ${data.trimStart().startsWith('<') ? 'an HTML page' : 'unparseable data'}) — the base URL probably points at a website, not an API. Check that it ends with the API root (e.g. /v1).`,
|
|
242
|
+
});
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (opts.expectField && !(opts.expectField in parsed)) {
|
|
246
|
+
const errMsg = parsed.error?.message
|
|
247
|
+
?? parsed.msg;
|
|
248
|
+
resolve({
|
|
249
|
+
ok: false,
|
|
250
|
+
error: `Endpoint answered HTTP ${res.statusCode} but the response has no "${opts.expectField}" field${errMsg ? ` (server said: ${errMsg})` : ''} — wrong API format or base URL path.`,
|
|
251
|
+
});
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
191
254
|
resolve({ ok: true });
|
|
192
255
|
}
|
|
193
256
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-test.js","sourceRoot":"","sources":["../../src/setup/provider-test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"provider-test.js","sourceRoot":"","sources":["../../src/setup/provider-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,11 @@ export interface ProviderConfig {
|
|
|
21
21
|
* Run the full 4-step provider wizard.
|
|
22
22
|
*
|
|
23
23
|
* Returns the chosen config on success, or null if the user cancelled.
|
|
24
|
+
*
|
|
25
|
+
* @param existingRl - Optional readline interface (for non-TUI mode)
|
|
26
|
+
* @param askInputFn - Optional askInput function (for TUI mode)
|
|
24
27
|
*/
|
|
25
|
-
export declare function runProviderWizard(existingRl?: readline.Interface): Promise<ProviderConfig | null>;
|
|
28
|
+
export declare function runProviderWizard(existingRl?: readline.Interface, askInputFn?: (prompt: string) => Promise<string>): Promise<ProviderConfig | null>;
|
|
26
29
|
/**
|
|
27
30
|
* Load saved provider config from the config directory.
|
|
28
31
|
*/
|