@aligndottech/cli 0.18.0 → 0.19.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 CHANGED
@@ -112,12 +112,12 @@ Align is **provider-agnostic** - `align ask` (and local relationship typing) use
112
112
  export ALIGN_LLM_API_KEY=sk-or-...
113
113
  export ALIGN_LLM_MODEL=anthropic/claude-3.5-sonnet
114
114
  ```
115
- 3. [Ollama](https://ollama.com) running locally (auto-detected on `localhost:11434`, override `OLLAMA_HOST`), with one of `llama3.2`, `llama3.1`, `llama3`, `mistral`, `gemma2` or `phi3` installed.
115
+ 3. [Ollama](https://ollama.com) running locally (auto-detected on `localhost:11434`, override `OLLAMA_HOST`), with a general-purpose model from a recognised family installed: `llama`, `mistral`, `gemma`, `phi`, `qwen` or `deepseek-r`. The installed version is read from Ollama itself, so a new release of any of those works the day it ships, and the newest one you have is the one used.
116
116
 
117
- Ollama will not answer from a model outside that list. A model tuned for something else entirely will still write fluent prose about your decisions, including relationships between them that do not exist, and it is not obvious from the output that anything went wrong. To use a model that is not listed, name it and it is used as-is:
117
+ Ollama will not answer from a model outside those families, or from one tuned for a different job (a `-coder`, `-math`, `-embed`, `-vision` or `-uncensored` variant). Such a model will still write fluent prose about your decisions, including relationships between them that do not exist, and it is not obvious from the output that anything went wrong. To use any model regardless, name it and it is used as-is:
118
118
 
119
119
  ```bash
120
- export ALIGN_OLLAMA_MODEL=qwen2.5:14b
120
+ export ALIGN_OLLAMA_MODEL=my-fine-tune:latest
121
121
  ```
122
122
 
123
123
  If none is available, `align ask` still works - it prints a ranked list of the matching decisions instead of a synthesised paragraph. No key is ever required.
@@ -395,7 +395,7 @@ align --env local <command> # one-off override
395
395
  | `GROK_API_KEY` / `XAI_API_KEY` | xAI Grok API key for `align ask` synthesis |
396
396
  | `ALIGN_LLM_BASE_URL` | Any OpenAI-compatible endpoint (with `ALIGN_LLM_API_KEY`, `ALIGN_LLM_MODEL`) |
397
397
  | `OLLAMA_HOST` | Ollama host (default: `http://localhost:11434`) |
398
- | `ALIGN_OLLAMA_MODEL` | Use this Ollama model instead of the vetted list |
398
+ | `ALIGN_OLLAMA_MODEL` | Use this Ollama model, whatever family it is from |
399
399
 
400
400
  Advanced: override the model per provider with `ALIGN_ANTHROPIC_MODEL`, `ALIGN_OPENAI_MODEL`, `ALIGN_GEMINI_MODEL`, `ALIGN_GROQ_MODEL`, `ALIGN_MISTRAL_MODEL`, `ALIGN_GROK_MODEL`, or `ALIGN_OLLAMA_MODEL`.
401
401
 
@@ -1 +1 @@
1
- {"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgJzD"}
1
+ {"version":3,"file":"why.d.ts","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJzD"}
@@ -5,7 +5,7 @@ import ora from 'ora';
5
5
  import { createConfigStore } from '../lib/config.js';
6
6
  import { createGatewayClient } from '../lib/gateway-client.js';
7
7
  import { citationFor } from '../lib/decision-links.js';
8
- import { getUnvettedOllamaModels, synthesiseLocally, VETTED_OLLAMA_MODELS } from '../lib/local-llm.js';
8
+ import { getLlmFailure, getUnvettedOllamaModels, RECOMMENDED_OLLAMA_PULL, synthesiseLocally } from '../lib/local-llm.js';
9
9
  import { formatWhen } from '../lib/format-date.js';
10
10
  function wrapText(text, indent, maxWidth) {
11
11
  const words = text.split(' ');
@@ -174,14 +174,23 @@ export function registerAskCommand(program) {
174
174
  // whatever it listed first. It now declines, so name the models it has rather
175
175
  // than telling someone who is already running a provider to configure one.
176
176
  const unvetted = getUnvettedOllamaModels();
177
+ const failure = getLlmFailure();
177
178
  if (unvetted) {
178
179
  console.log(chalk.dim(' No answer written: Ollama is running, but none of these'));
179
- console.log(chalk.dim(' models are vetted for decision synthesis.'));
180
+ console.log(chalk.dim(' models are recognised for decision synthesis.'));
180
181
  for (const m of unvetted)
181
182
  console.log(chalk.dim(` - ${m}`));
182
- console.log(chalk.dim(` Pull one: ollama pull ${VETTED_OLLAMA_MODELS[0]}`));
183
+ console.log(chalk.dim(` Pull one: ollama pull ${RECOMMENDED_OLLAMA_PULL}`));
183
184
  console.log(chalk.dim(' Or name one: ALIGN_OLLAMA_MODEL=<model>'));
184
185
  }
186
+ else if (failure) {
187
+ // ALI-692: the chain stopped rather than demoting to a weaker model. Name
188
+ // the model that failed - the key hint would be wrong for a user whose
189
+ // provider is configured and answering.
190
+ console.log(chalk.dim(` No answer written: ${failure.model} (${failure.provider}) returned an`));
191
+ console.log(chalk.dim(` unusable response (${failure.detail}). A weaker model was not asked in`));
192
+ console.log(chalk.dim(' its place. Retry, or configure a different provider.'));
193
+ }
185
194
  else {
186
195
  console.log(chalk.dim(' Set ANTHROPIC_API_KEY (or OPENAI_API_KEY) for a conversational answer.'));
187
196
  }
@@ -1 +1 @@
1
- {"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"why.js","sourceRoot":"","sources":["../../src/commands/why.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAGtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM;IA2DnD,2FAA2F;;;;;;;2BAS9D,MAAM;;;;;;;;uBAKV,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;;;;;;;;;;;2BA6BhF;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;2BAgBjB,MAAM,mBAAe,OAAO,CAAC,aAAa,CAAC;yBAgC7C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;2BA8FlD,MAAM,WAAW,MAAM,gBAAgB,MAAM;;;;;;;;;;;0BAQ9C,MAAM;;;;;;;;EAmBrC;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
1
+ {"version":3,"file":"local-gateway-client.d.ts","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAGtC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM;IA2DnD,2FAA2F;;;;;;;2BAS9D,MAAM;;;;;;;;uBAKV,KAAK,CAAC;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;;;;;;;;;;;2BA6BhF;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;2BAgBjB,MAAM,mBAAe,OAAO,CAAC,aAAa,CAAC;yBAgC7C,MAAM,aAAa,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;2BA4GlD,MAAM,WAAW,MAAM,gBAAgB,MAAM;;;;;;;;;;;0BAQ9C,MAAM;;;;;;;;EAmBrC;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { createLocalDb } from './local-db.js';
2
2
  import { cosineSimilarity, getEmbedding } from './local-embeddings.js';
3
3
  import { classifyRelationship } from './local-relationship-classifier.js';
4
+ import { getLlmFailure, RECOMMENDED_OLLAMA_PULL } from './local-llm.js';
4
5
  import { citationFor, repositoryOf } from './decision-links.js';
5
6
  /**
6
7
  * Cosine floor for linking two decisions as related on ingest.
@@ -186,8 +187,17 @@ export function createLocalGatewayClient(dbPath) {
186
187
  // lazy - only the few candidates we surface here). Degrades to untyped.
187
188
  const subject = { title: 'Proposed change', summary: diff.slice(0, 2000) };
188
189
  const typed = [];
190
+ let chainStopped = false;
189
191
  for (const c of candidates) {
190
- const outcome = await classifyRelationship(subject, { title: c.title, summary: c.summary });
192
+ // ALI-692: a recorded chain stop is a property of the PROVIDER, not of this
193
+ // candidate, so asking again per candidate repeats one doomed call N times -
194
+ // on a 429 that burns the retry budget while `--advisory` races its deadline.
195
+ // The remaining candidates still report, untyped, which is what `unknown` means.
196
+ const outcome = chainStopped
197
+ ? { ok: false, reason: 'classifier_error' }
198
+ : await classifyRelationship(subject, { title: c.title, summary: c.summary });
199
+ if (!outcome.ok && getLlmFailure())
200
+ chainStopped = true;
191
201
  const rel = outcome.ok ? outcome.relationship : null;
192
202
  typed.push({
193
203
  id: c.id,
@@ -231,11 +241,17 @@ export function createLocalGatewayClient(dbPath) {
231
241
  if (unclassified) {
232
242
  // ALI-420: an unvetted local model gets its own remedy. The no_llm_key hint below
233
243
  // says "or run a local Ollama", which is nonsense to someone already running one.
244
+ // ALI-692: the third rung. A recorded chain stop names the model that failed,
245
+ // and this is the surface agents gate on - it used to fall through to an empty
246
+ // hint, discarding the diagnosis one frame above where it was recorded.
247
+ const failure = getLlmFailure();
234
248
  const hint = unclassified.failureReason === 'unvetted_local_model'
235
- ? ' Ollama is running, but no vetted model is installed: `ollama pull llama3.2`, or set ALIGN_OLLAMA_MODEL to name your own.'
249
+ ? ` Ollama is running, but no recognised model is installed: \`ollama pull ${RECOMMENDED_OLLAMA_PULL}\`, or set ALIGN_OLLAMA_MODEL to name your own.`
236
250
  : unclassified.failureReason === 'no_llm_key'
237
251
  ? ' Set ANTHROPIC_API_KEY or OPENAI_API_KEY (or run a local Ollama) so these can be classified.'
238
- : '';
252
+ : failure
253
+ ? ` ${failure.model} (${failure.provider}) returned an unusable response (${failure.detail}), and no weaker model was asked in its place.`
254
+ : '';
239
255
  return {
240
256
  status: 'unknown',
241
257
  reason: unclassified.failureReason,
@@ -1 +1 @@
1
- {"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-gateway-client.js","sourceRoot":"","sources":["../../src/lib/local-gateway-client.ts"],"names":[],"mappings":"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"}
@@ -30,13 +30,29 @@ export interface CallChatOptions {
30
30
  * winner between contradicting ones.
31
31
  */
32
32
  export declare const SYNTHESIS_SYSTEM_PROMPT: string;
33
- export declare const VETTED_OLLAMA_MODELS: readonly ["llama3.2", "llama3.1", "llama3", "mistral", "gemma2", "phi3"];
33
+ /**
34
+ * Ollama model families recognised for decision synthesis, in OUR preference order
35
+ * (never /api/tags order - ALI-420). Family-level and version-free on purpose: the
36
+ * old exact-version list (llama3.2, llama3.1, llama3, mistral, gemma2, phi3) went
37
+ * stale the moment a new version shipped, and the 2026-08-25 vetting eval showed the
38
+ * quality lever is SYNTHESIS_SYSTEM_PROMPT, not which mainstream family answers. The
39
+ * list's remaining job is "is something recognisable installed" - matched against the
40
+ * LIVE /api/tags registry, and the newest installed version wins within a family.
41
+ * (ALI-692)
42
+ */
43
+ export declare const OLLAMA_MODEL_FAMILIES: readonly RegExp[];
44
+ /**
45
+ * Static fallback for the "pull one" hint only - version-pinned so it is
46
+ * copy-pasteable, therefore stale by design. Resolution never consults it:
47
+ * resolveOllamaModel picks from what the live registry actually has.
48
+ */
49
+ export declare const RECOMMENDED_OLLAMA_PULL = "llama3.2";
34
50
  export type OllamaModelChoice = {
35
51
  ok: true;
36
52
  model: string;
37
53
  } | {
38
54
  ok: false;
39
- reason: 'no_models' | 'no_vetted_model';
55
+ reason: 'no_models' | 'no_recognised_model';
40
56
  };
41
57
  export declare function resolveOllamaModel(installed: string[], override?: string): OllamaModelChoice;
42
58
  /**
@@ -44,19 +60,41 @@ export declare function resolveOllamaModel(installed: string[], override?: strin
44
60
  * or null when that did not happen. Read it on the failure branch to say WHY there was
45
61
  * no answer, the same way `hasConfiguredProvider()` is read there.
46
62
  *
47
- * Recorded rather than re-probed: `tryOllama` has already fetched `/api/tags`, and
48
- * `callChat` cannot return null without running it (step 4 is unconditional), so
49
- * whenever a caller asks, the recording is from this run.
63
+ * Recorded rather than re-probed: `tryOllama` has already fetched `/api/tags`.
64
+ * Cleared at every callChat entry (a chain stop can end the run before step 4 - see
65
+ * ALI-692), so whenever a caller asks, the recording is from this run.
50
66
  */
51
67
  export declare function getUnvettedOllamaModels(): string[] | null;
52
- /** Test seam: clears the recording above between cases. */
53
- export declare function resetOllamaDiagnostics(): void;
68
+ /**
69
+ * The provider/model the fallback chain STOPPED on, and why (ALI-692), or null when
70
+ * the last call answered or every failure was availability-class. Same recorded-not-
71
+ * re-probed contract as getUnvettedOllamaModels above: cleared at each callChat entry,
72
+ * so whenever a caller asks, the recording is from this run.
73
+ */
74
+ export interface LlmFailure {
75
+ provider: string;
76
+ model: string;
77
+ detail: string;
78
+ }
79
+ export declare function getLlmFailure(): LlmFailure | null;
80
+ /**
81
+ * Only failures on this allowlist may advance the fallback chain: they mean the chosen
82
+ * model can NEVER answer in this environment (bad key, no such model, no credit), so
83
+ * trying the next provider loses nothing. Anything else - a malformed body, an empty
84
+ * answer, a real rate limit, a 5xx - came from the provider the user chose, and
85
+ * silently demoting to a weaker model would launder that failure into an answer the
86
+ * caller trusts as if the chosen model wrote it. Deliberately conservative (ALI-692).
87
+ */
88
+ export declare function isAvailabilityFailure(status: number, body: string): boolean;
89
+ /** Test seam: clears both recordings above between cases. */
90
+ export declare function resetLlmDiagnostics(): void;
54
91
  /**
55
92
  * Is any LLM provider configured by environment? (ALI-414)
56
93
  *
57
- * `callChat` returns null for a missing key, a timeout and a non-2xx alike, so a
58
- * caller that needs to tell "never configured" from "configured but failed" has to
59
- * ask first. Deliberately synchronous and env-only: it does NOT probe Ollama, so a
94
+ * `callChat` returns null for a missing key and for a provider that answered unusably
95
+ * alike, so a caller that needs to tell "never configured" from "configured but
96
+ * failed" has to ask - this, then `getLlmFailure()` for the second case, which is the
97
+ * one this function cannot see. Deliberately synchronous and env-only: it does NOT probe Ollama, so a
60
98
  * machine whose only provider is a broken local Ollama reads as unconfigured. The
61
99
  * remedy that points at - configure a provider - is still the right one.
62
100
  */
@@ -69,6 +107,11 @@ export declare function hasConfiguredProvider(): boolean;
69
107
  * 3. named providers by env key (Anthropic, OpenAI, Gemini, Groq, Mistral, Grok)
70
108
  * 4. local Ollama (no key)
71
109
  * Returns the model's text, or null if nothing is available (callers fall back).
110
+ *
111
+ * ALI-692: only an availability-class failure advances that chain (see
112
+ * isAvailabilityFailure). Anything else - the chosen model answering unusably, a
113
+ * rate limit, a 5xx - stops it, returns null, and is recorded on getLlmFailure()
114
+ * so the caller can name the model instead of a weaker one answering in its place.
72
115
  */
73
116
  export declare function callChat(system: string, user: string, opts?: CallChatOptions): Promise<string | null>;
74
117
  /** Synthesise a natural-language answer from retrieved decisions, using any configured provider. */
@@ -1 +1 @@
1
- {"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,QAMmD,CAAC;AAqHxF,eAAO,MAAM,oBAAoB,0EAEvB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,CAAA;CAAE,CAAC;AAE3D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAY5F;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,GAAG,IAAI,CAEzD;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAiGD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+BxB;AAED,oGAAoG;AACpG,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB"}
1
+ {"version":3,"file":"local-llm.d.ts","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,QAMmD,CAAC;AAoMxF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAOlD,CAAC;AAyBF;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAElD,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,qBAAqB,CAAA;CAAE,CAAC;AA+B/D,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAoB5F;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,GAAG,IAAI,CAEzD;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAoDD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI3E;AAED,6DAA6D;AAC7D,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AA+GD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAG/C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyDxB;AAED,oGAAoG;AACpG,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGxB"}
@@ -22,12 +22,68 @@ function buildUserPrompt(question, decisions) {
22
22
  const ctx = decisions.map(d => `- ${d.title}: ${d.summary}`).join('\n');
23
23
  return `Question: ${question}\n\nDecision context:\n${ctx}`;
24
24
  }
25
- // --- Provider adapters: each takes a generic (system, user) chat and returns text or null ---
25
+ /** Classify a non-2xx response: availability-class advances, anything else stops. */
26
+ async function classifyHttpFailure(res, model) {
27
+ const detail = `HTTP ${res.status}`;
28
+ // 401/403/404 decide on the status alone, so do not download a body to ignore it -
29
+ // behind a proxy the 401 body is an HTML page, and a dead key is the common case.
30
+ if (res.status === 401 || res.status === 403 || res.status === 404) {
31
+ return { kind: 'unavailable', detail };
32
+ }
33
+ let body = '';
34
+ try {
35
+ body = await res.text();
36
+ }
37
+ catch {
38
+ // No readable body; the status alone decides.
39
+ }
40
+ return isAvailabilityFailure(res.status, body)
41
+ ? { kind: 'unavailable', detail }
42
+ : { kind: 'failed', model, detail };
43
+ }
44
+ /**
45
+ * Classify a thrown fetch. An ABORT is not an absence: we chose this provider and gave
46
+ * up waiting on it, which is the same event as a 429 from the caller's point of view
47
+ * and must stop the chain. Slow is not absent - otherwise the same overloaded provider
48
+ * stops the chain when it answers 429 and demotes to a weaker model when it answers
49
+ * nothing, which is the harder failure to notice. A connection or DNS error genuinely
50
+ * means nothing answered, so that advances.
51
+ */
52
+ function classifyThrownFetch(err, model) {
53
+ const name = err?.name;
54
+ if (name === 'TimeoutError' || name === 'AbortError') {
55
+ return { kind: 'failed', model, detail: 'timed out' };
56
+ }
57
+ return { kind: 'unavailable', detail: String(err) };
58
+ }
59
+ // A reasoning model (the deepseek-r family) prefixes its answer with a <think> block.
60
+ // It is a monologue, not prose for a human, and `align ask` prints the response
61
+ // verbatim while parseRelationship's brace match would span a brace inside it.
62
+ function stripReasoningBlock(text) {
63
+ return text.replace(/<think>[\s\S]*?<\/think>/gi, '').trim();
64
+ }
65
+ /**
66
+ * The shared tail every adapter needs: read the body, extract the model's text, and
67
+ * decide answer-or-stop. One owner, because this IS the response policy - four copies
68
+ * drift, and the Gemini copy had already grown its own shape.
69
+ */
70
+ async function parseAdapterResponse(res, model, extract) {
71
+ let data;
72
+ try {
73
+ data = await res.json();
74
+ }
75
+ catch {
76
+ return { kind: 'failed', model, detail: 'malformed response body' };
77
+ }
78
+ const text = stripReasoningBlock(extract(data)?.trim() ?? '');
79
+ return text ? { kind: 'answer', text } : { kind: 'failed', model, detail: 'empty response' };
80
+ }
26
81
  // OpenAI-compatible Chat Completions API (OpenAI, Groq, Mistral, xAI/Grok, and any
27
82
  // ALIGN_LLM_BASE_URL endpoint - OpenRouter, Together, DeepSeek, LM Studio, vLLM, ...).
28
83
  async function tryOpenAiCompatible(system, user, endpoint, model, key, maxTokens = 256, timeoutMs = 15000, temperature) {
84
+ let res;
29
85
  try {
30
- const res = await fetch(endpoint, {
86
+ res = await fetch(endpoint, {
31
87
  method: 'POST',
32
88
  headers: {
33
89
  'Content-Type': 'application/json',
@@ -44,18 +100,19 @@ async function tryOpenAiCompatible(system, user, endpoint, model, key, maxTokens
44
100
  }),
45
101
  signal: AbortSignal.timeout(timeoutMs),
46
102
  });
47
- if (!res.ok)
48
- return null;
49
- const data = await res.json();
50
- return data.choices?.[0]?.message?.content?.trim() ?? null;
51
103
  }
52
- catch {
53
- return null;
104
+ catch (err) {
105
+ return classifyThrownFetch(err, model);
54
106
  }
107
+ if (!res.ok)
108
+ return classifyHttpFailure(res, model);
109
+ return parseAdapterResponse(res, model, d => d.choices?.[0]?.message?.content);
55
110
  }
56
111
  async function tryAnthropic(system, user, key, maxTokens = 256, temperature) {
112
+ const model = process.env['ALIGN_ANTHROPIC_MODEL'] || 'claude-haiku-4-5-20251001';
113
+ let res;
57
114
  try {
58
- const res = await fetch('https://api.anthropic.com/v1/messages', {
115
+ res = await fetch('https://api.anthropic.com/v1/messages', {
59
116
  method: 'POST',
60
117
  headers: {
61
118
  'Content-Type': 'application/json',
@@ -63,7 +120,7 @@ async function tryAnthropic(system, user, key, maxTokens = 256, temperature) {
63
120
  'anthropic-version': '2023-06-01',
64
121
  },
65
122
  body: JSON.stringify({
66
- model: process.env['ALIGN_ANTHROPIC_MODEL'] ?? 'claude-haiku-4-5-20251001',
123
+ model,
67
124
  max_tokens: maxTokens,
68
125
  ...(temperature !== undefined ? { temperature } : {}),
69
126
  system,
@@ -71,19 +128,22 @@ async function tryAnthropic(system, user, key, maxTokens = 256, temperature) {
71
128
  }),
72
129
  signal: AbortSignal.timeout(15000),
73
130
  });
74
- if (!res.ok)
75
- return null;
76
- const data = await res.json();
77
- return data.content?.[0]?.text?.trim() ?? null;
78
131
  }
79
- catch {
80
- return null;
132
+ catch (err) {
133
+ return classifyThrownFetch(err, model);
81
134
  }
135
+ if (!res.ok)
136
+ return classifyHttpFailure(res, model);
137
+ // First block with text, not content[0]: a thinking or tool-use block can lead, and
138
+ // reading index 0 blindly calls a correct answer an empty response - which now STOPS
139
+ // the chain rather than merely falling through it.
140
+ return parseAdapterResponse(res, model, d => d.content?.find(b => b.text?.trim())?.text);
82
141
  }
83
142
  async function tryGemini(system, user, key, maxTokens = 256, temperature) {
143
+ const geminiModel = process.env['ALIGN_GEMINI_MODEL'] || 'gemini-1.5-flash';
144
+ let res;
84
145
  try {
85
- const geminiModel = process.env['ALIGN_GEMINI_MODEL'] ?? 'gemini-1.5-flash';
86
- const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${geminiModel}:generateContent?key=${key}`, {
146
+ res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${geminiModel}:generateContent?key=${key}`, {
87
147
  method: 'POST',
88
148
  headers: { 'Content-Type': 'application/json' },
89
149
  body: JSON.stringify({
@@ -96,18 +156,86 @@ async function tryGemini(system, user, key, maxTokens = 256, temperature) {
96
156
  }),
97
157
  signal: AbortSignal.timeout(15000),
98
158
  });
99
- if (!res.ok)
100
- return null;
101
- const data = await res.json();
102
- return data.candidates?.[0]?.content?.parts?.[0]?.text?.trim() ?? null;
103
159
  }
104
- catch {
105
- return null;
160
+ catch (err) {
161
+ return classifyThrownFetch(err, geminiModel);
106
162
  }
163
+ if (!res.ok)
164
+ return classifyHttpFailure(res, geminiModel);
165
+ // First part with text, for the same reason as Anthropic's blocks above.
166
+ return parseAdapterResponse(res, geminiModel, d => d.candidates?.[0]?.content?.parts?.find(p => p.text?.trim())?.text);
107
167
  }
108
- export const VETTED_OLLAMA_MODELS = [
109
- 'llama3.2', 'llama3.1', 'llama3', 'mistral', 'gemma2', 'phi3',
168
+ /**
169
+ * Ollama model families recognised for decision synthesis, in OUR preference order
170
+ * (never /api/tags order - ALI-420). Family-level and version-free on purpose: the
171
+ * old exact-version list (llama3.2, llama3.1, llama3, mistral, gemma2, phi3) went
172
+ * stale the moment a new version shipped, and the 2026-08-25 vetting eval showed the
173
+ * quality lever is SYNTHESIS_SYSTEM_PROMPT, not which mainstream family answers. The
174
+ * list's remaining job is "is something recognisable installed" - matched against the
175
+ * LIVE /api/tags registry, and the newest installed version wins within a family.
176
+ * (ALI-692)
177
+ */
178
+ export const OLLAMA_MODEL_FAMILIES = [
179
+ /^llama[\d.:-]/i,
180
+ /^mistral[\d.:-]/i,
181
+ /^gemma[\d.:-]/i,
182
+ /^phi[\d.:-]/i,
183
+ /^qwen[\d.:-]/i,
184
+ /^deepseek-r[\d.:-]/i,
110
185
  ];
186
+ /**
187
+ * A family match says who trained it, never what it was trained FOR, and the ALI-420
188
+ * floor is about the second: llama2-uncensored is in the llama family and is the same
189
+ * category as the pentest model from that ticket, while a coder or embedding model is
190
+ * not a synthesis model at all. So a tuning marker disqualifies a tag even when its
191
+ * family is recognised - a user can still name one explicitly via ALIGN_OLLAMA_MODEL.
192
+ */
193
+ const OLLAMA_TUNING_DISQUALIFIERS = /(coder|code|math|uncensored|embed|guard|vision|dolphin)/i;
194
+ /**
195
+ * A tag is recognised by its LAST path segment, because `ollama pull hf.co/<user>/<repo>`
196
+ * prefixes the name - anchoring at the start of the whole string refuses every model
197
+ * installed that mainstream way.
198
+ */
199
+ function ollamaTagBase(name) {
200
+ return name.split('/').pop() ?? name;
201
+ }
202
+ function isRecognisedOllamaModel(name, family) {
203
+ const base = ollamaTagBase(name);
204
+ return family.test(base) && !OLLAMA_TUNING_DISQUALIFIERS.test(base);
205
+ }
206
+ /**
207
+ * Static fallback for the "pull one" hint only - version-pinned so it is
208
+ * copy-pasteable, therefore stale by design. Resolution never consults it:
209
+ * resolveOllamaModel picks from what the live registry actually has.
210
+ */
211
+ export const RECOMMENDED_OLLAMA_PULL = 'llama3.2';
212
+ /**
213
+ * Numeric version segments from a tag name ('llama3.10:latest' -> [3, 10]).
214
+ *
215
+ * A PARAMETER SIZE is not a version, and community tags put one in the name: taking
216
+ * the first digit run makes `mistral-7b-instruct` look newer than `mistral-small3.1`,
217
+ * so any `-7b` / `_7x8b` token comes out before the version is read.
218
+ */
219
+ function modelVersionSegments(name) {
220
+ const base = (name.split(':')[0] ?? '').replace(/[-_]\d+(\.\d+)?x?\d*b\b/gi, '');
221
+ const m = base.match(/(\d+(?:\.\d+)*)/);
222
+ return m ? m[1].split('.').map(Number) : [0];
223
+ }
224
+ /** Parameter count in billions from a tag ('llama3.2:3b' -> 3), 0 when absent. */
225
+ function modelParameterBillions(name) {
226
+ const m = name.match(/(\d+(?:\.\d+)?)b\b/i);
227
+ return m ? Number(m[1]) : 0;
228
+ }
229
+ // Segment-wise, so 3.10 > 3.9 (a float parse or string sort gets it backwards).
230
+ function compareVersionSegments(a, b) {
231
+ const len = Math.max(a.length, b.length);
232
+ for (let i = 0; i < len; i++) {
233
+ const d = (a[i] ?? 0) - (b[i] ?? 0);
234
+ if (d !== 0)
235
+ return d;
236
+ }
237
+ return 0;
238
+ }
111
239
  export function resolveOllamaModel(installed, override) {
112
240
  // Named by the user, so it is their call - the contract every other provider here
113
241
  // already has via ALIGN_<PROVIDER>_MODEL.
@@ -115,14 +243,21 @@ export function resolveOllamaModel(installed, override) {
115
243
  return { ok: true, model: override };
116
244
  if (!installed.length)
117
245
  return { ok: false, reason: 'no_models' };
118
- // Iterate the VETTED list, not the installed list: `/api/tags` order is Ollama's, and
119
- // letting it pick among vetted models is the same defect one line over.
120
- for (const family of VETTED_OLLAMA_MODELS) {
121
- const match = installed.find(m => m.startsWith(family));
122
- if (match)
123
- return { ok: true, model: match };
246
+ // Iterate OUR family order, not the installed list: `/api/tags` order is Ollama's,
247
+ // and letting it pick among recognised families is the same defect one line over.
248
+ for (const family of OLLAMA_MODEL_FAMILIES) {
249
+ const matches = installed.filter(m => isRecognisedOllamaModel(m, family));
250
+ if (!matches.length)
251
+ continue;
252
+ // Newest version, then the larger model, then the name. The last two exist so the
253
+ // result cannot depend on `/api/tags` order: llama3.2:1b and llama3.2:3b tie on
254
+ // version, and a stable sort would hand that choice straight back to Ollama.
255
+ matches.sort((a, b) => compareVersionSegments(modelVersionSegments(b), modelVersionSegments(a))
256
+ || modelParameterBillions(b) - modelParameterBillions(a)
257
+ || a.localeCompare(b));
258
+ return { ok: true, model: matches[0] };
124
259
  }
125
- return { ok: false, reason: 'no_vetted_model' };
260
+ return { ok: false, reason: 'no_recognised_model' };
126
261
  }
127
262
  let unvettedOllamaModels = null;
128
263
  /**
@@ -130,45 +265,121 @@ let unvettedOllamaModels = null;
130
265
  * or null when that did not happen. Read it on the failure branch to say WHY there was
131
266
  * no answer, the same way `hasConfiguredProvider()` is read there.
132
267
  *
133
- * Recorded rather than re-probed: `tryOllama` has already fetched `/api/tags`, and
134
- * `callChat` cannot return null without running it (step 4 is unconditional), so
135
- * whenever a caller asks, the recording is from this run.
268
+ * Recorded rather than re-probed: `tryOllama` has already fetched `/api/tags`.
269
+ * Cleared at every callChat entry (a chain stop can end the run before step 4 - see
270
+ * ALI-692), so whenever a caller asks, the recording is from this run.
136
271
  */
137
272
  export function getUnvettedOllamaModels() {
138
273
  return unvettedOllamaModels;
139
274
  }
140
- /** Test seam: clears the recording above between cases. */
141
- export function resetOllamaDiagnostics() {
275
+ let llmFailure = null;
276
+ export function getLlmFailure() {
277
+ return llmFailure;
278
+ }
279
+ /**
280
+ * Error-body wordings that mean PERMANENT: this key or this model cannot answer here
281
+ * however many times we ask. Providers report several of these on statuses outside
282
+ * 401/403/404 - Gemini says 400 for a bad key, OpenAI says 429 for a dead account -
283
+ * and each one, misread as transient, permanently disables every provider behind it
284
+ * in the chain. Every entry is a real provider phrasing.
285
+ *
286
+ * A TRANSIENT failure must never appear here: a real rate limit, a 529 overload or a
287
+ * 5xx is the chosen provider having a bad minute, and advancing past it is the silent
288
+ * demotion this whole mechanism exists to prevent.
289
+ */
290
+ const AVAILABILITY_BODY_PATTERNS = [
291
+ /unauthori[sz]ed/i,
292
+ /authentication[\s_-]+(failed|error)/i,
293
+ /permission[\s_-]+denied/i,
294
+ /\binvalid[\s_-]+api[\s_-]?key\b/i,
295
+ /\bapi[\s_-]?key[\s_-]+not[\s_-]+valid\b/i,
296
+ /\bunknown\s+(model|provider)\b/i,
297
+ /\binvalid\s+(model|provider)\b/i,
298
+ /\bmodel\s+not\s+(found|available|registered|supported)\b/i,
299
+ /\bno\s+such\s+(model|provider)\b/i,
300
+ /not a valid model/i,
301
+ /\bmodel_not_found\b/i,
302
+ /\binsufficient_quota\b/i,
303
+ /credit balance is too low/i,
304
+ /\bunsupported (parameter|value)\b/i,
305
+ ];
306
+ /**
307
+ * The body text a provider's error carries, WITHOUT any part of the request it may
308
+ * have echoed back. `classifyRelationship` sends a 2,000-character diff as the user
309
+ * prompt, and endpoints routinely quote the offending request in a 4xx body - so
310
+ * matching prose against the whole body lets the decision text under review decide
311
+ * whether to demote to a weaker model. Reading only the error member closes that.
312
+ *
313
+ * A non-JSON body has no error member to read, so it falls back to the raw text: the
314
+ * boundary of this defence is "the provider replied in JSON", which is all of them.
315
+ */
316
+ function providerErrorText(body) {
317
+ try {
318
+ const parsed = JSON.parse(body);
319
+ if (typeof parsed !== 'object' || parsed === null)
320
+ return body;
321
+ const err = parsed.error;
322
+ if (err === undefined)
323
+ return body;
324
+ return typeof err === 'string' ? err : JSON.stringify(err);
325
+ }
326
+ catch {
327
+ return body;
328
+ }
329
+ }
330
+ /**
331
+ * Only failures on this allowlist may advance the fallback chain: they mean the chosen
332
+ * model can NEVER answer in this environment (bad key, no such model, no credit), so
333
+ * trying the next provider loses nothing. Anything else - a malformed body, an empty
334
+ * answer, a real rate limit, a 5xx - came from the provider the user chose, and
335
+ * silently demoting to a weaker model would launder that failure into an answer the
336
+ * caller trusts as if the chosen model wrote it. Deliberately conservative (ALI-692).
337
+ */
338
+ export function isAvailabilityFailure(status, body) {
339
+ if (status === 401 || status === 403 || status === 404)
340
+ return true;
341
+ const text = providerErrorText(body);
342
+ return AVAILABILITY_BODY_PATTERNS.some(p => p.test(text));
343
+ }
344
+ /** Test seam: clears both recordings above between cases. */
345
+ export function resetLlmDiagnostics() {
142
346
  unvettedOllamaModels = null;
347
+ llmFailure = null;
143
348
  }
144
349
  async function tryOllama(system, user, temperature) {
145
- const host = process.env['OLLAMA_HOST'] ?? 'http://localhost:11434';
350
+ // `||`, not `??`: OLLAMA_HOST='' (a stock .env template, an unset compose variable)
351
+ // would otherwise make every probe a relative URL that fetch cannot parse, so a
352
+ // healthy local Ollama is never asked and the user is told to configure a key.
353
+ const host = process.env['OLLAMA_HOST'] || 'http://localhost:11434';
146
354
  // Clear first, so the recording always describes THIS attempt. Without it a refusal
147
355
  // from an earlier call in the same process outlives its cause, and a later failure
148
356
  // with a different cause inherits the wrong diagnosis.
149
357
  unvettedOllamaModels = null;
358
+ // The /api/tags probe is discovery, not a model answering: every way it can fail
359
+ // (not running, no models, nothing recognised) means "no usable model here".
150
360
  let model;
151
361
  try {
152
362
  const tagsRes = await fetch(`${host}/api/tags`, { signal: AbortSignal.timeout(2000) });
153
363
  if (!tagsRes.ok)
154
- return null;
364
+ return { kind: 'unavailable', detail: 'tags probe failed' };
155
365
  const tags = await tagsRes.json();
156
366
  const models = (tags.models ?? []).map(m => m.name);
157
367
  if (!models.length)
158
- return null;
368
+ return { kind: 'unavailable', detail: 'no models installed' };
159
369
  const choice = resolveOllamaModel(models, process.env['ALIGN_OLLAMA_MODEL']);
160
370
  if (!choice.ok) {
161
- if (choice.reason === 'no_vetted_model')
371
+ if (choice.reason === 'no_recognised_model')
162
372
  unvettedOllamaModels = models;
163
- return null;
373
+ return { kind: 'unavailable', detail: choice.reason };
164
374
  }
165
375
  model = choice.model;
166
376
  }
167
- catch {
168
- return null;
377
+ catch (err) {
378
+ return { kind: 'unavailable', detail: String(err) };
169
379
  }
380
+ let res;
170
381
  try {
171
- const res = await fetch(`${host}/api/chat`, {
382
+ res = await fetch(`${host}/api/chat`, {
172
383
  method: 'POST',
173
384
  headers: { 'Content-Type': 'application/json' },
174
385
  body: JSON.stringify({
@@ -182,14 +393,19 @@ async function tryOllama(system, user, temperature) {
182
393
  }),
183
394
  signal: AbortSignal.timeout(30000),
184
395
  });
185
- if (!res.ok)
186
- return null;
187
- const data = await res.json();
188
- return data.message?.content?.trim() ?? null;
189
396
  }
190
- catch {
191
- return null;
397
+ catch (err) {
398
+ // Past selection, Ollama is a CHOSEN provider like any other, so every failure here
399
+ // must be attributable: an unrecorded stop sends the caller to the generic "set a
400
+ // key" hint, which is nonsense for a user whose local model just replied. A cold
401
+ // 7B commonly exceeds the 30s budget on its first load, and that is the model's
402
+ // failure to name, not an absent provider.
403
+ const name = err?.name;
404
+ return { kind: 'failed', model, detail: name === 'TimeoutError' || name === 'AbortError' ? 'timed out' : 'unreachable' };
192
405
  }
406
+ if (!res.ok)
407
+ return { kind: 'failed', model, detail: `HTTP ${res.status}` };
408
+ return parseAdapterResponse(res, model, d => d.message?.content);
193
409
  }
194
410
  /** Normalize a base URL into a full Chat Completions endpoint. */
195
411
  function chatCompletionsUrl(base) {
@@ -200,10 +416,12 @@ function keyForProvider(provider) {
200
416
  switch (provider) {
201
417
  case 'anthropic': return process.env['ANTHROPIC_API_KEY'];
202
418
  case 'openai': return process.env['OPENAI_API_KEY'];
203
- case 'gemini': return process.env['GEMINI_API_KEY'] ?? process.env['GOOGLE_API_KEY'];
419
+ // `||` on the aliases: an empty GEMINI_API_KEY must not shadow a real GOOGLE_API_KEY
420
+ // (a stock .env template ships both names), which `??` would do silently.
421
+ case 'gemini': return process.env['GEMINI_API_KEY'] || process.env['GOOGLE_API_KEY'];
204
422
  case 'groq': return process.env['GROQ_API_KEY'];
205
423
  case 'mistral': return process.env['MISTRAL_API_KEY'];
206
- case 'grok': return process.env['GROK_API_KEY'] ?? process.env['XAI_API_KEY'];
424
+ case 'grok': return process.env['GROK_API_KEY'] || process.env['XAI_API_KEY'];
207
425
  }
208
426
  }
209
427
  async function callProvider(provider, key, system, user, maxTokens, temperature) {
@@ -211,24 +429,25 @@ async function callProvider(provider, key, system, user, maxTokens, temperature)
211
429
  case 'anthropic':
212
430
  return tryAnthropic(system, user, key, maxTokens, temperature);
213
431
  case 'openai':
214
- return tryOpenAiCompatible(system, user, 'https://api.openai.com/v1/chat/completions', process.env['ALIGN_OPENAI_MODEL'] ?? 'gpt-4o-mini', key, maxTokens, undefined, temperature);
432
+ return tryOpenAiCompatible(system, user, 'https://api.openai.com/v1/chat/completions', process.env['ALIGN_OPENAI_MODEL'] || 'gpt-4o-mini', key, maxTokens, undefined, temperature);
215
433
  case 'gemini':
216
434
  return tryGemini(system, user, key, maxTokens, temperature);
217
435
  case 'groq':
218
- return tryOpenAiCompatible(system, user, 'https://api.groq.com/openai/v1/chat/completions', process.env['ALIGN_GROQ_MODEL'] ?? 'llama-3.1-8b-instant', key, maxTokens, undefined, temperature);
436
+ return tryOpenAiCompatible(system, user, 'https://api.groq.com/openai/v1/chat/completions', process.env['ALIGN_GROQ_MODEL'] || 'llama-3.1-8b-instant', key, maxTokens, undefined, temperature);
219
437
  case 'mistral':
220
- return tryOpenAiCompatible(system, user, 'https://api.mistral.ai/v1/chat/completions', process.env['ALIGN_MISTRAL_MODEL'] ?? 'mistral-small-latest', key, maxTokens, undefined, temperature);
438
+ return tryOpenAiCompatible(system, user, 'https://api.mistral.ai/v1/chat/completions', process.env['ALIGN_MISTRAL_MODEL'] || 'mistral-small-latest', key, maxTokens, undefined, temperature);
221
439
  case 'grok':
222
- return tryOpenAiCompatible(system, user, 'https://api.x.ai/v1/chat/completions', process.env['ALIGN_GROK_MODEL'] ?? 'grok-2-latest', key, maxTokens, undefined, temperature);
440
+ return tryOpenAiCompatible(system, user, 'https://api.x.ai/v1/chat/completions', process.env['ALIGN_GROK_MODEL'] || 'grok-2-latest', key, maxTokens, undefined, temperature);
223
441
  }
224
442
  }
225
443
  const ALL_PROVIDERS = ['anthropic', 'openai', 'gemini', 'groq', 'mistral', 'grok'];
226
444
  /**
227
445
  * Is any LLM provider configured by environment? (ALI-414)
228
446
  *
229
- * `callChat` returns null for a missing key, a timeout and a non-2xx alike, so a
230
- * caller that needs to tell "never configured" from "configured but failed" has to
231
- * ask first. Deliberately synchronous and env-only: it does NOT probe Ollama, so a
447
+ * `callChat` returns null for a missing key and for a provider that answered unusably
448
+ * alike, so a caller that needs to tell "never configured" from "configured but
449
+ * failed" has to ask - this, then `getLlmFailure()` for the second case, which is the
450
+ * one this function cannot see. Deliberately synchronous and env-only: it does NOT probe Ollama, so a
232
451
  * machine whose only provider is a broken local Ollama reads as unconfigured. The
233
452
  * remedy that points at - configure a provider - is still the right one.
234
453
  */
@@ -245,24 +464,45 @@ export function hasConfiguredProvider() {
245
464
  * 3. named providers by env key (Anthropic, OpenAI, Gemini, Groq, Mistral, Grok)
246
465
  * 4. local Ollama (no key)
247
466
  * Returns the model's text, or null if nothing is available (callers fall back).
467
+ *
468
+ * ALI-692: only an availability-class failure advances that chain (see
469
+ * isAvailabilityFailure). Anything else - the chosen model answering unusably, a
470
+ * rate limit, a 5xx - stops it, returns null, and is recorded on getLlmFailure()
471
+ * so the caller can name the model instead of a weaker one answering in its place.
248
472
  */
249
473
  export async function callChat(system, user, opts) {
250
474
  const maxTokens = opts?.maxTokens;
251
475
  const temperature = opts?.temperature;
476
+ // Each call describes itself: cleared here so a caller reading the diagnostics
477
+ // after a null sees THIS run's stop. The Ollama recording must clear here too, not
478
+ // only inside tryOllama - a stop earlier in the chain means step 4 never runs, and
479
+ // an earlier call's refusal would outlive its cause and misdiagnose this one.
480
+ llmFailure = null;
481
+ unvettedOllamaModels = null;
482
+ // An answer or a stop returns a value; availability returns undefined = advance.
483
+ const settle = (outcome, provider) => {
484
+ if (outcome.kind === 'answer')
485
+ return outcome.text;
486
+ if (outcome.kind === 'failed') {
487
+ llmFailure = { provider, model: outcome.model, detail: outcome.detail };
488
+ return null;
489
+ }
490
+ return undefined;
491
+ };
252
492
  // 1. configured provider (from align setup) takes priority
253
493
  if (opts?.provider && opts.apiKey) {
254
- const result = await callProvider(opts.provider, opts.apiKey, system, user, maxTokens, temperature);
255
- if (result)
256
- return result;
494
+ const settled = settle(await callProvider(opts.provider, opts.apiKey, system, user, maxTokens, temperature), opts.provider);
495
+ if (settled !== undefined)
496
+ return settled;
257
497
  }
258
498
  // 2. generic OpenAI-compatible escape hatch - covers any provider
259
499
  const baseUrl = process.env['ALIGN_LLM_BASE_URL'];
260
500
  if (baseUrl) {
261
501
  const key = process.env['ALIGN_LLM_API_KEY'] ?? '';
262
- const model = process.env['ALIGN_LLM_MODEL'] ?? 'gpt-4o-mini';
263
- const result = await tryOpenAiCompatible(system, user, chatCompletionsUrl(baseUrl), model, key, maxTokens, undefined, temperature);
264
- if (result)
265
- return result;
502
+ const model = process.env['ALIGN_LLM_MODEL'] || 'gpt-4o-mini';
503
+ const settled = settle(await tryOpenAiCompatible(system, user, chatCompletionsUrl(baseUrl), model, key, maxTokens, undefined, temperature), 'custom');
504
+ if (settled !== undefined)
505
+ return settled;
266
506
  }
267
507
  // 3. named providers via env keys, in priority order
268
508
  for (const provider of ALL_PROVIDERS) {
@@ -270,13 +510,13 @@ export async function callChat(system, user, opts) {
270
510
  continue; // already tried above
271
511
  const key = keyForProvider(provider);
272
512
  if (key) {
273
- const result = await callProvider(provider, key, system, user, maxTokens, temperature);
274
- if (result)
275
- return result;
513
+ const settled = settle(await callProvider(provider, key, system, user, maxTokens, temperature), provider);
514
+ if (settled !== undefined)
515
+ return settled;
276
516
  }
277
517
  }
278
518
  // 4. local Ollama as last resort
279
- return tryOllama(system, user, temperature);
519
+ return settle(await tryOllama(system, user, temperature), 'ollama') ?? null;
280
520
  }
281
521
  /** Synthesise a natural-language answer from retrieved decisions, using any configured provider. */
282
522
  export async function synthesiseLocally(question, decisions, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"local-llm.js","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-llm.js","sourceRoot":"","sources":["../../src/lib/local-llm.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,11 @@ export interface ClassifiedRelationship {
7
7
  reason?: string;
8
8
  }
9
9
  /**
10
- * Why a candidate edge could not be typed. Only distinctions the code can actually
11
- * make: `callChat` cannot tell a timeout from a 429 from an empty body, so there is
12
- * deliberately no `classifier_timeout`.
10
+ * Why a candidate edge could not be typed. This enum stays coarse on purpose: since
11
+ * ALI-692 `callChat` CAN tell a timeout from a 429 from an empty body, but the finer
12
+ * detail travels on `getLlmFailure()` (provider, model, detail) rather than by adding
13
+ * a reason per failure mode, so presenters name the model without this union growing
14
+ * a member every time a provider invents a new way to fail.
13
15
  */
14
16
  export type ClassifierFailureReason =
15
17
  /** Nothing to call: no provider key in the environment, no local Ollama. */
@@ -35,6 +37,13 @@ interface DecisionLite {
35
37
  title: string;
36
38
  summary: string;
37
39
  }
40
+ /**
41
+ * Design constraint for any future multi-model adjudication here (ALI-692): if two
42
+ * models ever judge one question (a conflict verdict plus a second opinion, a jury),
43
+ * the pair must span model FAMILIES. A family's leniency is systematic, so same-family
44
+ * agreement is one opinion counted twice, not independent confirmation. Today exactly
45
+ * one model answers, so there is nothing to enforce - this note is the requirement.
46
+ */
38
47
  export declare function classifyRelationship(subject: DecisionLite, candidate: DecisionLite): Promise<ClassificationOutcome>;
39
48
  export {};
40
49
  //# sourceMappingURL=local-relationship-classifier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-relationship-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,8BAA8B,CAAC;AAOtC,eAAO,MAAM,kBAAkB,8IAAyB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB;AACjC,4EAA4E;AAC1E,YAAY;AACd,sEAAsE;GACpE,kBAAkB;AACpB,sFAAsF;GACpF,wBAAwB;AAC1B;;;;GAIG;GACD,sBAAsB,CAAC;AAE3B,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,sBAAsB,CAAA;CAAE,GAClD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,qBAAqB,CAAC,CAehC"}
1
+ {"version":3,"file":"local-relationship-classifier.d.ts","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,8BAA8B,CAAC;AAOtC,eAAO,MAAM,kBAAkB,8IAAyB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAEpD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB;AACjC,4EAA4E;AAC1E,YAAY;AACd,sEAAsE;GACpE,kBAAkB;AACpB,sFAAsF;GACpF,wBAAwB;AAC1B;;;;GAIG;GACD,sBAAsB,CAAC;AAE3B,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,sBAAsB,CAAA;CAAE,GAClD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,uBAAuB,CAAA;CAAE,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAYD;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,YAAY,GACtB,OAAO,CAAC,qBAAqB,CAAC,CAoBhC"}
@@ -7,7 +7,7 @@
7
7
  // returned a bare null for all three causes, and the caller - unable to tell them
8
8
  // apart, or apart from "classified, no conflict" - reported `aligned`.
9
9
  import { DECISION_RELATIONSHIPS, DETERMINISTIC_TEMPERATURE, isDecisionRelationship, } from '@aligndottech/connector-core';
10
- import { callChat, getUnvettedOllamaModels, hasConfiguredProvider } from './local-llm.js';
10
+ import { callChat, getLlmFailure, getUnvettedOllamaModels, hasConfiguredProvider } from './local-llm.js';
11
11
  // ALI-219: the canonical decision-graph vocabulary is the single source of truth
12
12
  // (connector-core). The local classifier must only emit types the graph accepts,
13
13
  // or a local edge is invalid on personal->org sync. Re-exported for callers/tests.
@@ -19,6 +19,13 @@ const SYSTEM_PROMPT = "You classify how decision B relates to decision A in a so
19
19
  function buildUserPrompt(a, b) {
20
20
  return `Decision A: ${a.title}. ${a.summary}\n\nDecision B: ${b.title}. ${b.summary}`;
21
21
  }
22
+ /**
23
+ * Design constraint for any future multi-model adjudication here (ALI-692): if two
24
+ * models ever judge one question (a conflict verdict plus a second opinion, a jury),
25
+ * the pair must span model FAMILIES. A family's leniency is systematic, so same-family
26
+ * agreement is one opinion counted twice, not independent confirmation. Today exactly
27
+ * one model answers, so there is nothing to enforce - this note is the requirement.
28
+ */
22
29
  export async function classifyRelationship(subject, candidate) {
23
30
  // ALI-218/219: pin the shared deterministic temperature so the same decision
24
31
  // pair types the same way every run - offline relationship detection must be
@@ -31,7 +38,12 @@ export async function classifyRelationship(subject, candidate) {
31
38
  // the other two, and `hasConfiguredProvider()` is env-only so it cannot see it.
32
39
  if (getUnvettedOllamaModels())
33
40
  return { ok: false, reason: 'unvetted_local_model' };
34
- return { ok: false, reason: hasConfiguredProvider() ? 'classifier_error' : 'no_llm_key' };
41
+ // ALI-692: a recorded chain stop means a provider WAS reached and answered unusably.
42
+ // It has to be checked as well as hasConfiguredProvider(), which is env-only and so
43
+ // cannot see a local Ollama - without it that case misreports as no_llm_key. The
44
+ // model that failed is on getLlmFailure(); presenters read it for the remedy.
45
+ const reason = getLlmFailure() || hasConfiguredProvider() ? 'classifier_error' : 'no_llm_key';
46
+ return { ok: false, reason };
35
47
  }
36
48
  const relationship = parseRelationship(raw);
37
49
  return relationship ? { ok: true, relationship } : { ok: false, reason: 'classifier_unparseable' };
@@ -1 +1 @@
1
- {"version":3,"file":"local-relationship-classifier.js","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-relationship-classifier.js","sourceRoot":"","sources":["../../src/lib/local-relationship-classifier.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kFAAkF;AAClF,kFAAkF;AAClF,6EAA6E;AAC7E,EAAE;AACF,6EAA6E;AAC7E,kFAAkF;AAClF,uEAAuE;AAEvE,OAAO,EACL,sBAAsB,EAEtB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEzG,iFAAiF;AACjF,iFAAiF;AACjF,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAwCzD,MAAM,aAAa,GACjB,yFAAyF;IACzF,oDAAoD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,wDAAwD;IACzI,0HAA0H;IAC1H,sHAAsH,CAAC;AAEzH,SAAS,eAAe,CAAC,CAAe,EAAE,CAAe;IACvD,OAAO,eAAe,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACxF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAqB,EACrB,SAAuB;IAEvB,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE;QAC7E,WAAW,EAAE,yBAAyB;KACvC,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,qFAAqF;QACrF,gFAAgF;QAChF,IAAI,uBAAuB,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;QACpF,qFAAqF;QACrF,oFAAoF;QACpF,iFAAiF;QACjF,8EAA8E;QAC9E,MAAM,MAAM,GAAG,aAAa,EAAE,IAAI,qBAAqB,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC;QAC9F,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;AACrG,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAA+D,CAAC;QAC/F,8EAA8E;QAC9E,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACvG,MAAM,MAAM,GAA2B,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC;QACtE,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aligndottech/cli",
3
- "version": "0.18.0",
3
+ "version": "0.19.0",
4
4
  "mcpName": "io.github.aligndottech/cli",
5
5
  "type": "module",
6
6
  "description": "Align CLI - capture decisions, check alignment, and manage connectors",