@aligndottech/cli 0.48.0 → 0.49.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.
- package/README.md +6 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -18
- package/dist/cli.js.map +1 -1
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +3 -1
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/ai.d.ts +11 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +121 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/default-action.js +2 -2
- package/dist/commands/default-action.js.map +1 -1
- package/dist/commands/registry.d.ts.map +1 -1
- package/dist/commands/registry.js +4 -0
- package/dist/commands/registry.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +53 -191
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/why.d.ts.map +1 -1
- package/dist/commands/why.js +21 -0
- package/dist/commands/why.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/ask-key-offer.d.ts +38 -0
- package/dist/lib/ask-key-offer.d.ts.map +1 -0
- package/dist/lib/ask-key-offer.js +130 -0
- package/dist/lib/ask-key-offer.js.map +1 -0
- package/dist/lib/config.d.ts +25 -24
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +37 -45
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/launch/adapters/amp.d.ts +18 -0
- package/dist/lib/launch/adapters/amp.d.ts.map +1 -0
- package/dist/lib/launch/adapters/amp.js +29 -0
- package/dist/lib/launch/adapters/amp.js.map +1 -0
- package/dist/lib/launch/adapters/droid.d.ts +19 -0
- package/dist/lib/launch/adapters/droid.d.ts.map +1 -0
- package/dist/lib/launch/adapters/droid.js +38 -0
- package/dist/lib/launch/adapters/droid.js.map +1 -0
- package/dist/lib/launch/adapters/grok-build.d.ts +16 -0
- package/dist/lib/launch/adapters/grok-build.d.ts.map +1 -0
- package/dist/lib/launch/adapters/grok-build.js +25 -0
- package/dist/lib/launch/adapters/grok-build.js.map +1 -0
- package/dist/lib/launch/adapters/kiro.d.ts +17 -0
- package/dist/lib/launch/adapters/kiro.d.ts.map +1 -0
- package/dist/lib/launch/adapters/kiro.js +25 -0
- package/dist/lib/launch/adapters/kiro.js.map +1 -0
- package/dist/lib/launch/adapters/qwen.d.ts +25 -0
- package/dist/lib/launch/adapters/qwen.d.ts.map +1 -0
- package/dist/lib/launch/adapters/qwen.js +67 -0
- package/dist/lib/launch/adapters/qwen.js.map +1 -0
- package/dist/lib/launch/agents.d.ts +4 -1
- package/dist/lib/launch/agents.d.ts.map +1 -1
- package/dist/lib/launch/agents.js +10 -4
- package/dist/lib/launch/agents.js.map +1 -1
- package/dist/lib/launch/amp-state.d.ts +21 -0
- package/dist/lib/launch/amp-state.d.ts.map +1 -0
- package/dist/lib/launch/amp-state.js +61 -0
- package/dist/lib/launch/amp-state.js.map +1 -0
- package/dist/lib/launch/config-writes.d.ts +7 -1
- package/dist/lib/launch/config-writes.d.ts.map +1 -1
- package/dist/lib/launch/config-writes.js +60 -7
- package/dist/lib/launch/config-writes.js.map +1 -1
- package/dist/lib/launch/detect.d.ts.map +1 -1
- package/dist/lib/launch/detect.js +2 -1
- package/dist/lib/launch/detect.js.map +1 -1
- package/dist/lib/launch/droid-state.d.ts +24 -0
- package/dist/lib/launch/droid-state.d.ts.map +1 -0
- package/dist/lib/launch/droid-state.js +74 -0
- package/dist/lib/launch/droid-state.js.map +1 -0
- package/dist/lib/launch/grok-state.d.ts +42 -0
- package/dist/lib/launch/grok-state.d.ts.map +1 -0
- package/dist/lib/launch/grok-state.js +128 -0
- package/dist/lib/launch/grok-state.js.map +1 -0
- package/dist/lib/launch/kiro-state.d.ts +22 -0
- package/dist/lib/launch/kiro-state.d.ts.map +1 -0
- package/dist/lib/launch/kiro-state.js +59 -0
- package/dist/lib/launch/kiro-state.js.map +1 -0
- package/dist/lib/launch/launch.d.ts +34 -0
- package/dist/lib/launch/launch.d.ts.map +1 -1
- package/dist/lib/launch/launch.js +34 -3
- package/dist/lib/launch/launch.js.map +1 -1
- package/dist/lib/launch/layer-files.d.ts +12 -0
- package/dist/lib/launch/layer-files.d.ts.map +1 -0
- package/dist/lib/launch/layer-files.js +43 -0
- package/dist/lib/launch/layer-files.js.map +1 -0
- package/dist/lib/launch/pick-agent.d.ts.map +1 -1
- package/dist/lib/launch/pick-agent.js +7 -6
- package/dist/lib/launch/pick-agent.js.map +1 -1
- package/dist/lib/launch/qwen-state.d.ts +30 -0
- package/dist/lib/launch/qwen-state.d.ts.map +1 -0
- package/dist/lib/launch/qwen-state.js +57 -0
- package/dist/lib/launch/qwen-state.js.map +1 -0
- package/dist/lib/launch/qwen-trust.d.ts +24 -0
- package/dist/lib/launch/qwen-trust.d.ts.map +1 -0
- package/dist/lib/launch/qwen-trust.js +100 -0
- package/dist/lib/launch/qwen-trust.js.map +1 -0
- package/dist/lib/launch/registry/agents/amp.d.ts +3 -0
- package/dist/lib/launch/registry/agents/amp.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/amp.js +14 -0
- package/dist/lib/launch/registry/agents/amp.js.map +1 -0
- package/dist/lib/launch/registry/agents/droid.d.ts +3 -0
- package/dist/lib/launch/registry/agents/droid.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/droid.js +13 -0
- package/dist/lib/launch/registry/agents/droid.js.map +1 -0
- package/dist/lib/launch/registry/agents/grok-build.d.ts +3 -0
- package/dist/lib/launch/registry/agents/grok-build.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/grok-build.js +14 -0
- package/dist/lib/launch/registry/agents/grok-build.js.map +1 -0
- package/dist/lib/launch/registry/agents/kiro.d.ts +3 -0
- package/dist/lib/launch/registry/agents/kiro.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/kiro.js +11 -0
- package/dist/lib/launch/registry/agents/kiro.js.map +1 -0
- package/dist/lib/launch/registry/agents/qwen.d.ts +3 -0
- package/dist/lib/launch/registry/agents/qwen.d.ts.map +1 -0
- package/dist/lib/launch/registry/agents/qwen.js +11 -0
- package/dist/lib/launch/registry/agents/qwen.js.map +1 -0
- package/dist/lib/launch/registry/index.d.ts +4 -1
- package/dist/lib/launch/registry/index.d.ts.map +1 -1
- package/dist/lib/launch/registry/index.js +10 -2
- package/dist/lib/launch/registry/index.js.map +1 -1
- package/dist/lib/launch/registry/types.d.ts +6 -1
- package/dist/lib/launch/registry/types.d.ts.map +1 -1
- package/dist/lib/launch/run-agent.d.ts +11 -0
- package/dist/lib/launch/run-agent.d.ts.map +1 -1
- package/dist/lib/launch/run-agent.js +22 -1
- package/dist/lib/launch/run-agent.js.map +1 -1
- package/dist/lib/launch/strict-entry.d.ts +1 -1
- package/dist/lib/launch/strict-entry.d.ts.map +1 -1
- package/dist/lib/launch/strict-entry.js +3 -1
- package/dist/lib/launch/strict-entry.js.map +1 -1
- package/dist/lib/llm-providers.d.ts +66 -0
- package/dist/lib/llm-providers.d.ts.map +1 -0
- package/dist/lib/llm-providers.js +150 -0
- package/dist/lib/llm-providers.js.map +1 -0
- package/dist/lib/local-llm.d.ts +63 -12
- package/dist/lib/local-llm.d.ts.map +1 -1
- package/dist/lib/local-llm.js +229 -104
- package/dist/lib/local-llm.js.map +1 -1
- package/dist/lib/safe-config-write.d.ts +12 -1
- package/dist/lib/safe-config-write.d.ts.map +1 -1
- package/dist/lib/safe-config-write.js +123 -7
- package/dist/lib/safe-config-write.js.map +1 -1
- package/dist/lib/startup-env.d.ts +8 -0
- package/dist/lib/startup-env.d.ts.map +1 -0
- package/dist/lib/startup-env.js +8 -0
- package/dist/lib/startup-env.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
2
|
import os from 'node:os';
|
|
3
3
|
import path from 'node:path';
|
|
4
|
+
import { PROVIDER_ENV_VARS } from '../llm-providers.js';
|
|
5
|
+
import { STARTUP_ENV } from '../startup-env.js';
|
|
6
|
+
/**
|
|
7
|
+
* The child's environment: align's own, with every LLM provider variable reset to what the
|
|
8
|
+
* user's shell had at startup, then the spec's env on top. Defence in depth for H1 - align
|
|
9
|
+
* keeps saved keys out of process.env by design (local-llm reads them as data), and this
|
|
10
|
+
* guarantees that even a future regression writing one cannot hand a saved ANTHROPIC_API_KEY
|
|
11
|
+
* to Claude Code (API billing over a Max subscription), OPENAI_API_KEY to Codex or
|
|
12
|
+
* GEMINI_API_KEY to Gemini CLI. A variable the user exported is restored, never stripped.
|
|
13
|
+
*/
|
|
14
|
+
export function childEnv(parent, startup, specEnv) {
|
|
15
|
+
const env = { ...parent };
|
|
16
|
+
for (const name of PROVIDER_ENV_VARS) {
|
|
17
|
+
if (startup[name] === undefined)
|
|
18
|
+
delete env[name];
|
|
19
|
+
else
|
|
20
|
+
env[name] = startup[name];
|
|
21
|
+
}
|
|
22
|
+
return { ...env, ...specEnv };
|
|
23
|
+
}
|
|
4
24
|
// cmd.exe re-parses the whole line, so these would run a second command or expand a variable.
|
|
5
25
|
const WIN_SHELL_CHARS = /[&|<>^%"]/;
|
|
6
26
|
/** One CRT-quoted argument: trailing backslashes are doubled so they cannot escape the closing quote. */
|
|
@@ -35,7 +55,8 @@ export async function runAgent(spec, deps = {}) {
|
|
|
35
55
|
const proc = deps.proc ?? process;
|
|
36
56
|
const isShim = platform === 'win32' && /\.(cmd|bat)$/i.test(spec.bin);
|
|
37
57
|
const { command, args } = isShim ? winShimCommand(spec) : { command: spec.bin, args: spec.args };
|
|
38
|
-
const
|
|
58
|
+
const startupEnv = deps.startupEnv ?? STARTUP_ENV;
|
|
59
|
+
const options = { stdio: 'inherit', env: childEnv(process.env, startupEnv, spec.env) };
|
|
39
60
|
if (isShim)
|
|
40
61
|
options.windowsVerbatimArguments = true;
|
|
41
62
|
const child = spawn(command, args, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-agent.js","sourceRoot":"","sources":["../../../src/lib/launch/run-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,IAAI,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"run-agent.js","sourceRoot":"","sources":["../../../src/lib/launch/run-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Deliberately separate from project-state.ts's isLocalAlignServer (Claude Code, pi, Cursor),
|
|
8
8
|
* which matches any command line that mentions align and mcp.
|
|
9
9
|
*/
|
|
10
|
-
export type StrictHost = 'mcpServers' | 'codex' | 'copilot';
|
|
10
|
+
export type StrictHost = 'mcpServers' | 'codex' | 'copilot' | 'droid';
|
|
11
11
|
export interface CanonicalOptions {
|
|
12
12
|
/** Whether a bare `align mcp` reads the local graph on this machine. */
|
|
13
13
|
localIsDefault: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strict-entry.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/strict-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"strict-entry.d.ts","sourceRoot":"","sources":["../../../src/lib/launch/strict-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAiBpC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAelF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0BtD;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAQ3D;AAED,sGAAsG;AACtG,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,gGAAgG;AAChG,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GAAG,eAAe,CAY1H"}
|
|
@@ -7,8 +7,10 @@ const EXTRA = {
|
|
|
7
7
|
codex: { enabled: (v) => v === true },
|
|
8
8
|
// Copilot needs `type`, and a `tools` allowlist: without '*' the tools are not callable.
|
|
9
9
|
copilot: { type: (v) => v === 'local' || v === 'stdio', tools: (v) => sameArgs(v, ['*']) },
|
|
10
|
+
// Factory Droid: `type` is optional and stdio by default; `disabled: true` is configured-but-off.
|
|
11
|
+
droid: { type: (v) => v === 'stdio', disabled: (v) => v === false },
|
|
10
12
|
};
|
|
11
|
-
const REQUIRED = { mcpServers: [], codex: [], copilot: ['type', 'tools'] };
|
|
13
|
+
const REQUIRED = { mcpServers: [], codex: [], copilot: ['type', 'tools'], droid: [] };
|
|
12
14
|
export function isCanonicalLocalEntry(entry, o) {
|
|
13
15
|
if (!isObject(entry))
|
|
14
16
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strict-entry.js","sourceRoot":"","sources":["../../../src/lib/launch/strict-entry.ts"],"names":[],"mappings":"AAmBA,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAa,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAErG,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAE,CAAW,EAAW,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElI,wGAAwG;AACxG,MAAM,KAAK,GAAgE;IACzE,UAAU,EAAE,EAAE;IACd,qFAAqF;IACrF,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;IACrC,yFAAyF;IACzF,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"strict-entry.js","sourceRoot":"","sources":["../../../src/lib/launch/strict-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The providers `align ask` can write answers with, as data: their ids, labels, the env vars
|
|
3
|
+
* that carry their keys and models, endpoints and default models, and which ones a user can
|
|
4
|
+
* save a key for. Shared by local-llm.ts (resolution and preference), the config store, the
|
|
5
|
+
* launcher (which must not leak these variables to an agent) and the `align ai` / first-ask
|
|
6
|
+
* prompts, so there is one list rather than several that drift. Dependency-free on purpose.
|
|
7
|
+
*/
|
|
8
|
+
/** A provider reached with its own key from an env variable or a saved key. */
|
|
9
|
+
export interface NamedProvider {
|
|
10
|
+
id: NamedProviderId;
|
|
11
|
+
label: string;
|
|
12
|
+
/** Every env var holding a key, read in order; a real value under ANY of them beats a saved key. */
|
|
13
|
+
keyEnv: readonly string[];
|
|
14
|
+
/** The env var that overrides the model. */
|
|
15
|
+
modelEnv: string;
|
|
16
|
+
defaultModel: string;
|
|
17
|
+
/** Which request shape. 'openai' posts Chat Completions to `endpoint`; 'anthropic' posts
|
|
18
|
+
* Messages to `endpoint` (default Anthropic's own). */
|
|
19
|
+
api: 'anthropic' | 'gemini' | 'openai';
|
|
20
|
+
/** The full request URL. Required for 'openai'. */
|
|
21
|
+
endpoint?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Use a key exported under keyEnv with no further say-so. True for the original six only.
|
|
24
|
+
* Every later provider's variables are commonly exported for OTHER tools (HF_TOKEN for model
|
|
25
|
+
* downloads, NVIDIA_API_KEY for NGC), so an exported key alone only makes the provider
|
|
26
|
+
* AVAILABLE: align uses it once the user saves a key for it or chooses it (`align ai`,
|
|
27
|
+
* ALIGN_LLM_PROVIDER). Otherwise their decision text would go to a provider they never picked.
|
|
28
|
+
*/
|
|
29
|
+
autoFromEnv?: true;
|
|
30
|
+
/** Where to get a key, shown beside the paste prompt. */
|
|
31
|
+
keyUrl: string;
|
|
32
|
+
}
|
|
33
|
+
export type NamedProviderId = 'anthropic' | 'openai' | 'groq' | 'gemini' | 'mistral' | 'grok' | 'deepseek' | 'zai' | 'moonshotai' | 'cerebras' | 'fireworks' | 'together' | 'nvidia' | 'huggingface' | 'baseten' | 'xiaomi' | 'qwen' | 'qwen-token-plan' | 'minimax' | 'kimi-coding' | 'vercel-ai-gateway';
|
|
34
|
+
/**
|
|
35
|
+
* In the fixed fallback order (ALI-1284: Groq ahead of Gemini, so the free pairing has a real
|
|
36
|
+
* primary). A provider is only ever tried when the user has a key for it.
|
|
37
|
+
*/
|
|
38
|
+
export declare const NAMED_PROVIDERS: readonly NamedProvider[];
|
|
39
|
+
export declare const OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1";
|
|
40
|
+
export declare const OPENROUTER_DEFAULT_MODEL = "openai/gpt-4o-mini";
|
|
41
|
+
/** OpenRouter's own key variable (pi-ai's name) and align's model override for it. */
|
|
42
|
+
export declare const OPENROUTER_KEY_ENV = "OPENROUTER_API_KEY";
|
|
43
|
+
export declare const OPENROUTER_MODEL_ENV = "ALIGN_OPENROUTER_MODEL";
|
|
44
|
+
/** Every id `ALIGN_LLM_PROVIDER` / `align ai --provider` accepts. */
|
|
45
|
+
export declare const LLM_PROVIDER_IDS: readonly LlmProviderId[];
|
|
46
|
+
export type LlmProviderId = NamedProviderId | 'openrouter' | 'custom' | 'ollama';
|
|
47
|
+
/**
|
|
48
|
+
* The providers a key can be saved for, in the order the key prompt lists them: the original
|
|
49
|
+
* seven first (OpenRouter third, as it always was), then the rest in table order.
|
|
50
|
+
*/
|
|
51
|
+
export declare const STORABLE_PROVIDERS: readonly StoredProviderId[];
|
|
52
|
+
export type StoredProviderId = NamedProviderId | 'openrouter';
|
|
53
|
+
export declare function namedProvider(id: string): NamedProvider | undefined;
|
|
54
|
+
export declare const PROVIDER_LABEL: Record<LlmProviderId, string>;
|
|
55
|
+
/** Where to get a key, shown beside the paste prompt. */
|
|
56
|
+
export declare const PROVIDER_KEY_URL: Record<StoredProviderId, string>;
|
|
57
|
+
/**
|
|
58
|
+
* Every env variable that carries an align LLM credential, endpoint, model or preference. The
|
|
59
|
+
* launcher resets each one to the value the user's shell had when align started, so nothing
|
|
60
|
+
* align put into its own environment reaches a coding agent (a saved ANTHROPIC_API_KEY would
|
|
61
|
+
* switch Claude Code from a Max subscription to API billing).
|
|
62
|
+
*/
|
|
63
|
+
export declare const PROVIDER_ENV_VARS: readonly string[];
|
|
64
|
+
/** A user-typed provider id, normalised, or null when it names nothing we support. */
|
|
65
|
+
export declare function parseProviderId(raw: string): LlmProviderId | null;
|
|
66
|
+
//# sourceMappingURL=llm-providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-providers.d.ts","sourceRoot":"","sources":["../../src/lib/llm-providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,eAAe,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB;4DACwD;IACxD,GAAG,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvC,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GACvB,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAC/D,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GACpF,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,iBAAiB,GAAG,SAAS,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAExH;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA8FnD,CAAC;AAcF,eAAO,MAAM,mBAAmB,iCAAiC,CAAC;AAClE,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAC7D,sFAAsF;AACtF,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,oBAAoB,2BAA2B,CAAC;AAE7D,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,EAExB,SAAS,aAAa,EAAE,CAAC;AAC9B,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,gBAAgB,EAGzD,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,YAAY,CAAC;AAE9D,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEnE;AAED,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKxD,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAG7D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAI9C,CAAC;AAIF,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAIjE"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The providers `align ask` can write answers with, as data: their ids, labels, the env vars
|
|
3
|
+
* that carry their keys and models, endpoints and default models, and which ones a user can
|
|
4
|
+
* save a key for. Shared by local-llm.ts (resolution and preference), the config store, the
|
|
5
|
+
* launcher (which must not leak these variables to an agent) and the `align ai` / first-ask
|
|
6
|
+
* prompts, so there is one list rather than several that drift. Dependency-free on purpose.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* In the fixed fallback order (ALI-1284: Groq ahead of Gemini, so the free pairing has a real
|
|
10
|
+
* primary). A provider is only ever tried when the user has a key for it.
|
|
11
|
+
*/
|
|
12
|
+
export const NAMED_PROVIDERS = [
|
|
13
|
+
{
|
|
14
|
+
autoFromEnv: true,
|
|
15
|
+
id: 'anthropic', label: 'Anthropic', keyEnv: ['ANTHROPIC_API_KEY'], modelEnv: 'ALIGN_ANTHROPIC_MODEL',
|
|
16
|
+
defaultModel: 'claude-haiku-4-5-20251001', api: 'anthropic', keyUrl: 'https://console.anthropic.com/settings/keys',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
autoFromEnv: true,
|
|
20
|
+
id: 'openai', label: 'OpenAI', keyEnv: ['OPENAI_API_KEY'], modelEnv: 'ALIGN_OPENAI_MODEL',
|
|
21
|
+
defaultModel: 'gpt-4o-mini', api: 'openai', endpoint: 'https://api.openai.com/v1/chat/completions',
|
|
22
|
+
keyUrl: 'https://platform.openai.com/api-keys',
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
autoFromEnv: true,
|
|
26
|
+
id: 'groq', label: 'Groq', keyEnv: ['GROQ_API_KEY'], modelEnv: 'ALIGN_GROQ_MODEL',
|
|
27
|
+
defaultModel: 'llama-3.1-8b-instant', api: 'openai', endpoint: 'https://api.groq.com/openai/v1/chat/completions',
|
|
28
|
+
keyUrl: 'https://console.groq.com/keys',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
// ALI-1284: a Flash-Lite model, which is what the free pairing is sold as. Override with
|
|
32
|
+
// ALIGN_GEMINI_MODEL if Google retires it.
|
|
33
|
+
autoFromEnv: true,
|
|
34
|
+
id: 'gemini', label: 'Gemini', keyEnv: ['GEMINI_API_KEY', 'GOOGLE_API_KEY'], modelEnv: 'ALIGN_GEMINI_MODEL',
|
|
35
|
+
defaultModel: 'gemini-2.5-flash-lite', api: 'gemini', keyUrl: 'https://aistudio.google.com/apikey',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
autoFromEnv: true,
|
|
39
|
+
id: 'mistral', label: 'Mistral', keyEnv: ['MISTRAL_API_KEY'], modelEnv: 'ALIGN_MISTRAL_MODEL',
|
|
40
|
+
defaultModel: 'mistral-small-latest', api: 'openai', endpoint: 'https://api.mistral.ai/v1/chat/completions',
|
|
41
|
+
keyUrl: 'https://console.mistral.ai/api-keys',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
autoFromEnv: true,
|
|
45
|
+
id: 'grok', label: 'xAI', keyEnv: ['GROK_API_KEY', 'XAI_API_KEY'], modelEnv: 'ALIGN_GROK_MODEL',
|
|
46
|
+
defaultModel: 'grok-2-latest', api: 'openai', endpoint: 'https://api.x.ai/v1/chat/completions',
|
|
47
|
+
keyUrl: 'https://console.x.ai',
|
|
48
|
+
},
|
|
49
|
+
// ---- Appended after the original six, so they only run when the user has their key. ----
|
|
50
|
+
// Source for every env var name, base URL, API shape and model id below, unless a comment
|
|
51
|
+
// says otherwise: @earendil-works/pi-ai 0.87.1 (MIT), dist/env-api-keys.js and
|
|
52
|
+
// dist/providers/data/<id>.json. Default models are the cheapest current id that table lists
|
|
53
|
+
// for the provider, preferring a non-reasoning model where one is cheap (a reasoning model
|
|
54
|
+
// spends align's 1,024-token answer budget thinking).
|
|
55
|
+
openAi('deepseek', 'DeepSeek', ['DEEPSEEK_API_KEY'], 'https://api.deepseek.com/chat/completions', 'deepseek-flash', 'https://platform.deepseek.com/api_keys'),
|
|
56
|
+
// pi-ai lists the GLM Coding Plan endpoint (/api/coding/paas/v4). This is Z.ai's GENERAL
|
|
57
|
+
// endpoint, for an ordinary pay-as-you-go key - https://docs.z.ai/api-reference/introduction
|
|
58
|
+
// says the coding endpoint is only for Coding Plan subscribers.
|
|
59
|
+
openAi('zai', 'Z.ai (GLM)', ['ZAI_API_KEY'], 'https://api.z.ai/api/paas/v4/chat/completions', 'glm-5.3-flash', 'https://z.ai/manage-apikey/apikey-list'),
|
|
60
|
+
openAi('moonshotai', 'Moonshot (Kimi)', ['MOONSHOT_API_KEY'], 'https://api.moonshot.ai/v1/chat/completions', 'kimi-k2.6', 'https://platform.moonshot.ai/console/api-keys'),
|
|
61
|
+
openAi('cerebras', 'Cerebras', ['CEREBRAS_API_KEY'], 'https://api.cerebras.ai/v1/chat/completions', 'gpt-oss-120b', 'https://cloud.cerebras.ai'),
|
|
62
|
+
openAi('fireworks', 'Fireworks AI', ['FIREWORKS_API_KEY'], 'https://api.fireworks.ai/inference/v1/chat/completions', 'accounts/fireworks/models/glm-5p3-flash', 'https://app.fireworks.ai/settings/users/api-keys'),
|
|
63
|
+
openAi('together', 'Together AI', ['TOGETHER_API_KEY'], 'https://api.together.ai/v1/chat/completions', 'Qwen/Qwen2.5-7B-Instruct-Turbo', 'https://api.together.ai/settings/api-keys'),
|
|
64
|
+
openAi('nvidia', 'NVIDIA', ['NVIDIA_API_KEY'], 'https://integrate.api.nvidia.com/v1/chat/completions', 'google/gemma-3-12b-it', 'https://build.nvidia.com'),
|
|
65
|
+
openAi('huggingface', 'Hugging Face', ['HF_TOKEN'], 'https://router.huggingface.co/v1/chat/completions', 'meta-llama/Llama-3.1-8B-Instruct', 'https://huggingface.co/settings/tokens'),
|
|
66
|
+
openAi('baseten', 'Baseten', ['BASETEN_API_KEY'], 'https://inference.baseten.co/v1/chat/completions', 'deepseek-ai/DeepSeek-V4-Flash-0731', 'https://app.baseten.co/settings/api_keys'),
|
|
67
|
+
openAi('xiaomi', 'Xiaomi MiMo', ['XIAOMI_API_KEY'], 'https://api.xiaomimimo.com/v1/chat/completions', 'mimo-v2.5', 'https://platform.xiaomimimo.com'),
|
|
68
|
+
{
|
|
69
|
+
// Alibaba Model Studio: an ordinary Model Studio key (what the paste prompt's console link
|
|
70
|
+
// issues), at the international DashScope compatible-mode domain Alibaba documents as
|
|
71
|
+
// still valid - https://www.alibabacloud.com/help/en/model-studio/base-url - with
|
|
72
|
+
// qwen3.5-flash from https://www.alibabacloud.com/help/en/model-studio/qwen-api-via-openai-chat-completions.
|
|
73
|
+
id: 'qwen', label: 'Qwen (Alibaba Model Studio)', keyEnv: ['DASHSCOPE_API_KEY'], modelEnv: 'ALIGN_QWEN_MODEL',
|
|
74
|
+
defaultModel: 'qwen3.5-flash', api: 'openai',
|
|
75
|
+
endpoint: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions',
|
|
76
|
+
keyUrl: 'https://modelstudio.console.alibabacloud.com',
|
|
77
|
+
},
|
|
78
|
+
// The Alibaba Token Plan: a different product on a different host; a key for one is
|
|
79
|
+
// rejected by the other. Env name, endpoint and model from pi-ai.
|
|
80
|
+
openAi('qwen-token-plan', 'Qwen Token Plan', ['QWEN_TOKEN_PLAN_API_KEY'], 'https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions', 'qwen3.6-flash', 'https://modelstudio.console.alibabacloud.com'),
|
|
81
|
+
// These three speak Anthropic Messages in pi-ai's table, so they reuse align's Anthropic
|
|
82
|
+
// adapter at their own base URL (POST <base>/v1/messages). UNVERIFIED: that each accepts the
|
|
83
|
+
// Anthropic-style `x-api-key` header rather than only a Bearer token - no live call was made.
|
|
84
|
+
anthropicAt('minimax', 'MiniMax', ['MINIMAX_API_KEY'], 'https://api.minimax.io/anthropic/v1/messages', 'MiniMax-M2.7', 'https://platform.minimax.io'),
|
|
85
|
+
anthropicAt('kimi-coding', 'Kimi Coding Plan', ['KIMI_API_KEY'], 'https://api.kimi.com/coding/v1/messages', 'kimi-for-coding', 'https://www.kimi.com/code'),
|
|
86
|
+
anthropicAt('vercel-ai-gateway', 'Vercel AI Gateway', ['AI_GATEWAY_API_KEY'], 'https://ai-gateway.vercel.sh/v1/messages', 'openai/gpt-4o-mini', 'https://vercel.com/dashboard/ai-gateway'),
|
|
87
|
+
// Not included: cloudflare-workers-ai (needs CLOUDFLARE_ACCOUNT_ID in the URL) and Azure
|
|
88
|
+
// OpenAI (a per-resource endpoint, deployment name and api-version) - neither fits a fixed
|
|
89
|
+
// endpoint. Both work today through ALIGN_LLM_BASE_URL.
|
|
90
|
+
];
|
|
91
|
+
function modelEnvFor(id) {
|
|
92
|
+
return `ALIGN_${id.toUpperCase().replace(/[^A-Z0-9]+/g, '_')}_MODEL`;
|
|
93
|
+
}
|
|
94
|
+
function openAi(id, label, keyEnv, endpoint, defaultModel, keyUrl) {
|
|
95
|
+
return { id, label, keyEnv, modelEnv: modelEnvFor(id), defaultModel, api: 'openai', endpoint, keyUrl };
|
|
96
|
+
}
|
|
97
|
+
function anthropicAt(id, label, keyEnv, endpoint, defaultModel, keyUrl) {
|
|
98
|
+
return { id, label, keyEnv, modelEnv: modelEnvFor(id), defaultModel, api: 'anthropic', endpoint, keyUrl };
|
|
99
|
+
}
|
|
100
|
+
export const OPENROUTER_BASE_URL = 'https://openrouter.ai/api/v1';
|
|
101
|
+
export const OPENROUTER_DEFAULT_MODEL = 'openai/gpt-4o-mini';
|
|
102
|
+
/** OpenRouter's own key variable (pi-ai's name) and align's model override for it. */
|
|
103
|
+
export const OPENROUTER_KEY_ENV = 'OPENROUTER_API_KEY';
|
|
104
|
+
export const OPENROUTER_MODEL_ENV = 'ALIGN_OPENROUTER_MODEL';
|
|
105
|
+
/** Every id `ALIGN_LLM_PROVIDER` / `align ai --provider` accepts. */
|
|
106
|
+
export const LLM_PROVIDER_IDS = [
|
|
107
|
+
...NAMED_PROVIDERS.map((p) => p.id), 'openrouter', 'custom', 'ollama',
|
|
108
|
+
];
|
|
109
|
+
/**
|
|
110
|
+
* The providers a key can be saved for, in the order the key prompt lists them: the original
|
|
111
|
+
* seven first (OpenRouter third, as it always was), then the rest in table order.
|
|
112
|
+
*/
|
|
113
|
+
export const STORABLE_PROVIDERS = [
|
|
114
|
+
'anthropic', 'openai', 'openrouter', 'gemini', 'groq', 'mistral', 'grok',
|
|
115
|
+
...NAMED_PROVIDERS.map((p) => p.id).filter((id) => !['anthropic', 'openai', 'gemini', 'groq', 'mistral', 'grok'].includes(id)),
|
|
116
|
+
];
|
|
117
|
+
export function namedProvider(id) {
|
|
118
|
+
return NAMED_PROVIDERS.find((p) => p.id === id);
|
|
119
|
+
}
|
|
120
|
+
export const PROVIDER_LABEL = {
|
|
121
|
+
...Object.fromEntries(NAMED_PROVIDERS.map((p) => [p.id, p.label])),
|
|
122
|
+
openrouter: 'OpenRouter',
|
|
123
|
+
custom: 'Custom endpoint',
|
|
124
|
+
ollama: 'Ollama',
|
|
125
|
+
};
|
|
126
|
+
/** Where to get a key, shown beside the paste prompt. */
|
|
127
|
+
export const PROVIDER_KEY_URL = {
|
|
128
|
+
...Object.fromEntries(NAMED_PROVIDERS.map((p) => [p.id, p.keyUrl])),
|
|
129
|
+
openrouter: 'https://openrouter.ai/keys',
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* Every env variable that carries an align LLM credential, endpoint, model or preference. The
|
|
133
|
+
* launcher resets each one to the value the user's shell had when align started, so nothing
|
|
134
|
+
* align put into its own environment reaches a coding agent (a saved ANTHROPIC_API_KEY would
|
|
135
|
+
* switch Claude Code from a Max subscription to API billing).
|
|
136
|
+
*/
|
|
137
|
+
export const PROVIDER_ENV_VARS = [
|
|
138
|
+
...NAMED_PROVIDERS.flatMap((p) => [...p.keyEnv, p.modelEnv]),
|
|
139
|
+
'ALIGN_LLM_BASE_URL', 'ALIGN_LLM_API_KEY', 'ALIGN_LLM_MODEL', 'ALIGN_LLM_PROVIDER', 'ALIGN_OLLAMA_MODEL',
|
|
140
|
+
OPENROUTER_KEY_ENV, OPENROUTER_MODEL_ENV,
|
|
141
|
+
];
|
|
142
|
+
const ALIASES = { xai: 'grok' };
|
|
143
|
+
/** A user-typed provider id, normalised, or null when it names nothing we support. */
|
|
144
|
+
export function parseProviderId(raw) {
|
|
145
|
+
const id = raw.trim().toLowerCase();
|
|
146
|
+
if (ALIASES[id])
|
|
147
|
+
return ALIASES[id];
|
|
148
|
+
return LLM_PROVIDER_IDS.includes(id) ? id : null;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=llm-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-providers.js","sourceRoot":"","sources":["../../src/lib/llm-providers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiCH;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD;QACE,WAAW,EAAE,IAAI;QACjB,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,uBAAuB;QACrG,YAAY,EAAE,2BAA2B,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,6CAA6C;KACnH;IACD;QACE,WAAW,EAAE,IAAI;QACjB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,oBAAoB;QACzF,YAAY,EAAE,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,4CAA4C;QAClG,MAAM,EAAE,sCAAsC;KAC/C;IACD;QACE,WAAW,EAAE,IAAI;QACjB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,kBAAkB;QACjF,YAAY,EAAE,sBAAsB,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,iDAAiD;QAChH,MAAM,EAAE,+BAA+B;KACxC;IACD;QACE,yFAAyF;QACzF,2CAA2C;QAC3C,WAAW,EAAE,IAAI;QACjB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,oBAAoB;QAC3G,YAAY,EAAE,uBAAuB,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,oCAAoC;KACnG;IACD;QACE,WAAW,EAAE,IAAI;QACjB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,qBAAqB;QAC7F,YAAY,EAAE,sBAAsB,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,4CAA4C;QAC3G,MAAM,EAAE,qCAAqC;KAC9C;IACD;QACE,WAAW,EAAE,IAAI;QACjB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,kBAAkB;QAC/F,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,sCAAsC;QAC9F,MAAM,EAAE,sBAAsB;KAC/B;IAED,2FAA2F;IAC3F,0FAA0F;IAC1F,+EAA+E;IAC/E,6FAA6F;IAC7F,2FAA2F;IAC3F,sDAAsD;IACtD,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,kBAAkB,CAAC,EAAE,2CAA2C,EAC9F,gBAAgB,EAAE,wCAAwC,CAAC;IAC7D,yFAAyF;IACzF,6FAA6F;IAC7F,gEAAgE;IAChE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,+CAA+C,EAC1F,eAAe,EAAE,wCAAwC,CAAC;IAC5D,MAAM,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC,kBAAkB,CAAC,EAAE,6CAA6C,EACzG,WAAW,EAAE,+CAA+C,CAAC;IAC/D,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,kBAAkB,CAAC,EAAE,6CAA6C,EAChG,cAAc,EAAE,2BAA2B,CAAC;IAC9C,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,CAAC,mBAAmB,CAAC,EAAE,wDAAwD,EACjH,yCAAyC,EAAE,kDAAkD,CAAC;IAChG,MAAM,CAAC,UAAU,EAAE,aAAa,EAAE,CAAC,kBAAkB,CAAC,EAAE,6CAA6C,EACnG,gCAAgC,EAAE,2CAA2C,CAAC;IAChF,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,sDAAsD,EACnG,uBAAuB,EAAE,0BAA0B,CAAC;IACtD,MAAM,CAAC,aAAa,EAAE,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,mDAAmD,EACrG,kCAAkC,EAAE,wCAAwC,CAAC;IAC/E,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,kDAAkD,EAClG,oCAAoC,EAAE,0CAA0C,CAAC;IACnF,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,gBAAgB,CAAC,EAAE,gDAAgD,EAClG,WAAW,EAAE,iCAAiC,CAAC;IACjD;QACE,2FAA2F;QAC3F,sFAAsF;QACtF,kFAAkF;QAClF,6GAA6G;QAC7G,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,6BAA6B,EAAE,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,kBAAkB;QAC7G,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ;QAC5C,QAAQ,EAAE,yEAAyE;QACnF,MAAM,EAAE,8CAA8C;KACvD;IACD,oFAAoF;IACpF,kEAAkE;IAClE,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,CAAC,yBAAyB,CAAC,EACtE,yFAAyF,EACzF,eAAe,EAAE,8CAA8C,CAAC;IAClE,yFAAyF;IACzF,6FAA6F;IAC7F,8FAA8F;IAC9F,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,8CAA8C,EACnG,cAAc,EAAE,6BAA6B,CAAC;IAChD,WAAW,CAAC,aAAa,EAAE,kBAAkB,EAAE,CAAC,cAAc,CAAC,EAAE,yCAAyC,EACxG,iBAAiB,EAAE,2BAA2B,CAAC;IACjD,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,CAAC,oBAAoB,CAAC,EAAE,0CAA0C,EACtH,oBAAoB,EAAE,yCAAyC,CAAC;IAClE,yFAAyF;IACzF,2FAA2F;IAC3F,wDAAwD;CACzD,CAAC;AAEF,SAAS,WAAW,CAAC,EAAU;IAC7B,OAAO,SAAS,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,CAAC;AACvE,CAAC;AAED,SAAS,MAAM,CAAC,EAAmB,EAAE,KAAa,EAAE,MAAgB,EAAE,QAAgB,EAAE,YAAoB,EAAE,MAAc;IAC1H,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,WAAW,CAAC,EAAmB,EAAE,KAAa,EAAE,MAAgB,EAAE,QAAgB,EAAE,YAAoB,EAAE,MAAc;IAC/H,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,8BAA8B,CAAC;AAClE,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAC7D,sFAAsF;AACtF,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAE7D,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ;CAC1C,CAAC;AAG9B;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC7D,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IACxE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;CAC/H,CAAC;AAGF,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAkC;IAC3D,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAoC;IACrG,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAqC;IAChE,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAoC;IACtG,UAAU,EAAE,4BAA4B;CACzC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5D,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB;IACxG,kBAAkB,EAAE,oBAAoB;CACzC,CAAC;AAEF,MAAM,OAAO,GAAkC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAE/D,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,EAAE,CAAC;QAAE,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,EAAoB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7F,CAAC"}
|
package/dist/lib/local-llm.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type LlmProviderId, type StoredProviderId } from './llm-providers.js';
|
|
1
2
|
export type AiProvider = 'anthropic' | 'openai' | 'gemini' | 'groq' | 'mistral' | 'grok';
|
|
2
3
|
export interface CallChatOptions {
|
|
3
4
|
maxTokens?: number;
|
|
@@ -262,24 +263,74 @@ export declare const OLLAMA_CONTEXT_FLOOR = 4096;
|
|
|
262
263
|
*/
|
|
263
264
|
export declare function resolveOllamaWindow(host: string, model: string): Promise<ResolvedWindow>;
|
|
264
265
|
/**
|
|
265
|
-
*
|
|
266
|
+
* The model a running local Ollama would answer with, or null. The same 2s /api/tags probe
|
|
267
|
+
* `align ask` already runs on its way down the chain - `align ai` uses it to list Ollama
|
|
268
|
+
* beside the keys, and adds no slower check.
|
|
269
|
+
*/
|
|
270
|
+
export declare function probeOllama(): Promise<string | null>;
|
|
271
|
+
/**
|
|
272
|
+
* Saved keys and the saved provider preference, read through a source cli.ts installs.
|
|
273
|
+
*
|
|
274
|
+
* NEVER through process.env (H1): a value in process.env is inherited by every child, including
|
|
275
|
+
* the coding agent bare `align` opens - where a saved ANTHROPIC_API_KEY switches Claude Code from
|
|
276
|
+
* a Max subscription to API billing. So saved credentials stay data, used only by align's own
|
|
277
|
+
* calls here. The source is read once per call, so a key saved mid-run is live on the next.
|
|
278
|
+
*/
|
|
279
|
+
export interface SavedLlmConfig {
|
|
280
|
+
keys: Partial<Record<StoredProviderId, string>>;
|
|
281
|
+
provider?: string;
|
|
282
|
+
model?: string;
|
|
283
|
+
}
|
|
284
|
+
export declare function setSavedLlmSource(source: () => SavedLlmConfig): void;
|
|
285
|
+
/**
|
|
286
|
+
* Every configured credential and where it came from (env or saved) - Ollama not included.
|
|
287
|
+
* Includes exported keys align will not use until chosen: this is what is AVAILABLE.
|
|
288
|
+
*/
|
|
289
|
+
export declare function listConfiguredCredentials(): Array<{
|
|
290
|
+
id: LlmProviderId;
|
|
291
|
+
source: 'env' | 'saved';
|
|
292
|
+
}>;
|
|
293
|
+
/**
|
|
294
|
+
* Exported keys align found but will not use until the user picks them (Credential.usable),
|
|
295
|
+
* with the variable each came from - what the key menu offers as "found X in your shell".
|
|
296
|
+
*/
|
|
297
|
+
export declare function unusedExportedKeys(): Array<{
|
|
298
|
+
id: LlmProviderId;
|
|
299
|
+
envVar: string;
|
|
300
|
+
}>;
|
|
301
|
+
/**
|
|
302
|
+
* The provider `align ask` tries FIRST, or undefined for the default order. Precedence, in one
|
|
303
|
+
* place:
|
|
304
|
+
*
|
|
305
|
+
* 1. ALIGN_LLM_PROVIDER exported in the shell
|
|
306
|
+
* 2. the saved preference (`align ai`)
|
|
307
|
+
* 3. nothing: the default order (exported credentials, then saved ones, then Ollama - see
|
|
308
|
+
* credentials())
|
|
309
|
+
*
|
|
310
|
+
* The model follows the same rule: a provider's own model variable (ALIGN_OPENAI_MODEL,
|
|
311
|
+
* ALIGN_LLM_MODEL for the custom endpoint, ...) beats the saved model, and the saved model
|
|
312
|
+
* applies only while the saved preference is the one in force.
|
|
313
|
+
*
|
|
314
|
+
* A preferred provider that is not available (no key, Ollama not running) is skipped and the
|
|
315
|
+
* default order runs as if there were no preference. An unknown value warns (once per process
|
|
316
|
+
* per value) and is ignored: a typo must not stop `align ask` answering.
|
|
317
|
+
*/
|
|
318
|
+
export declare function preferredProvider(saved?: SavedLlmConfig): LlmProviderId | undefined;
|
|
319
|
+
/**
|
|
320
|
+
* Is any LLM provider configured - exported or saved? (ALI-414)
|
|
266
321
|
*
|
|
267
322
|
* `callChat` returns null for a missing key and for a provider that answered unusably
|
|
268
323
|
* alike, so a caller that needs to tell "never configured" from "configured but
|
|
269
324
|
* failed" has to ask - this, then the failure `callChatDetailed` returned for the
|
|
270
|
-
* second case, which is the one this function cannot see. Deliberately synchronous
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
325
|
+
* second case, which is the one this function cannot see. Deliberately synchronous:
|
|
326
|
+
* it does NOT probe Ollama, so a machine whose only provider is a broken local Ollama
|
|
327
|
+
* reads as unconfigured. The remedy that points at - configure a provider - is still
|
|
328
|
+
* the right one.
|
|
274
329
|
*
|
|
275
|
-
* `excluding`
|
|
276
|
-
*
|
|
277
|
-
* know whether some OTHER provider is genuinely configured (which should still block the
|
|
278
|
-
* offer) without the Groq/Gemini pair itself, which --reset exists to let the user redo,
|
|
279
|
-
* counting against it. `ALIGN_LLM_BASE_URL` is never excludable: it is not one of the
|
|
280
|
-
* named providers this list manages, so it always means "configured" regardless.
|
|
330
|
+
* `excluding` lets a caller ask "is anything ELSE configured". The custom endpoint is never
|
|
331
|
+
* excludable: it is not one of the named providers.
|
|
281
332
|
*/
|
|
282
|
-
export declare function hasConfiguredProvider(excluding?: readonly
|
|
333
|
+
export declare function hasConfiguredProvider(excluding?: readonly LlmProviderId[]): boolean;
|
|
283
334
|
/**
|
|
284
335
|
* Provider-agnostic chat call. Resolution order:
|
|
285
336
|
* 1. ALIGN_LLM_BASE_URL - any OpenAI-compatible endpoint (Grok, OpenRouter,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"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"}
|