@cleocode/core 2026.6.14 → 2026.6.17
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/dist/check/pr-gate.d.ts +6 -2
- package/dist/check/pr-gate.d.ts.map +1 -1
- package/dist/check/pr-gate.js +14 -32
- package/dist/check/pr-gate.js.map +1 -1
- package/dist/config/config-repair.d.ts +70 -0
- package/dist/config/config-repair.d.ts.map +1 -0
- package/dist/config/config-repair.js +248 -0
- package/dist/config/config-repair.js.map +1 -0
- package/dist/config/registry.d.ts.map +1 -1
- package/dist/config/registry.js +4 -4
- package/dist/config/registry.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +11 -10
- package/dist/config.js.map +1 -1
- package/dist/docs/export-document.js +58 -16
- package/dist/docs/export-document.js.map +2 -2
- package/dist/gc/cleanup.d.ts +23 -8
- package/dist/gc/cleanup.d.ts.map +1 -1
- package/dist/gc/cleanup.js +287 -22
- package/dist/gc/cleanup.js.map +1 -1
- package/dist/gc/janitor.d.ts +149 -0
- package/dist/gc/janitor.d.ts.map +1 -0
- package/dist/gc/janitor.js +760 -0
- package/dist/gc/janitor.js.map +1 -0
- package/dist/internal.d.ts +1 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +3 -0
- package/dist/internal.js.map +1 -1
- package/dist/llm/cli-ops.d.ts +31 -4
- package/dist/llm/cli-ops.d.ts.map +1 -1
- package/dist/llm/cli-ops.js +110 -26
- package/dist/llm/cli-ops.js.map +1 -1
- package/dist/llm/credential-pool.d.ts +62 -0
- package/dist/llm/credential-pool.d.ts.map +1 -1
- package/dist/llm/credential-pool.js +161 -0
- package/dist/llm/credential-pool.js.map +1 -1
- package/dist/llm/cross-provider-selector.d.ts +254 -0
- package/dist/llm/cross-provider-selector.d.ts.map +1 -0
- package/dist/llm/cross-provider-selector.js +635 -0
- package/dist/llm/cross-provider-selector.js.map +1 -0
- package/dist/llm/index.d.ts +2 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +1 -0
- package/dist/llm/index.js.map +1 -1
- package/dist/llm/local-model-fit.d.ts +260 -0
- package/dist/llm/local-model-fit.d.ts.map +1 -0
- package/dist/llm/local-model-fit.js +563 -0
- package/dist/llm/local-model-fit.js.map +1 -0
- package/dist/llm/plugin-facade.js +883 -231
- package/dist/llm/plugin-facade.js.map +3 -3
- package/dist/llm/provider-registry/builtin/ollama.d.ts +18 -0
- package/dist/llm/provider-registry/builtin/ollama.d.ts.map +1 -1
- package/dist/llm/provider-registry/builtin/ollama.js +20 -2
- package/dist/llm/provider-registry/builtin/ollama.js.map +1 -1
- package/dist/llm/role-resolver.d.ts.map +1 -1
- package/dist/llm/role-resolver.js +45 -10
- package/dist/llm/role-resolver.js.map +1 -1
- package/dist/llm/transports/codex-responses.d.ts +111 -88
- package/dist/llm/transports/codex-responses.d.ts.map +1 -1
- package/dist/llm/transports/codex-responses.js +456 -258
- package/dist/llm/transports/codex-responses.js.map +1 -1
- package/dist/release/index.d.ts +2 -2
- package/dist/release/index.d.ts.map +1 -1
- package/dist/release/index.js +1 -1
- package/dist/release/index.js.map +1 -1
- package/dist/release/reconcile.d.ts +97 -0
- package/dist/release/reconcile.d.ts.map +1 -1
- package/dist/release/reconcile.js +412 -5
- package/dist/release/reconcile.js.map +1 -1
- package/dist/resources/backend.d.ts +155 -0
- package/dist/resources/backend.d.ts.map +1 -0
- package/dist/resources/backend.js +23 -0
- package/dist/resources/backend.js.map +1 -0
- package/dist/resources/linux-backend.d.ts +167 -0
- package/dist/resources/linux-backend.d.ts.map +1 -0
- package/dist/resources/linux-backend.js +259 -0
- package/dist/resources/linux-backend.js.map +1 -0
- package/dist/resources/monitor.d.ts +230 -0
- package/dist/resources/monitor.d.ts.map +1 -0
- package/dist/resources/monitor.js +255 -0
- package/dist/resources/monitor.js.map +1 -0
- package/dist/resources/spawn-wrapper.d.ts +265 -0
- package/dist/resources/spawn-wrapper.d.ts.map +1 -0
- package/dist/resources/spawn-wrapper.js +304 -0
- package/dist/resources/spawn-wrapper.js.map +1 -0
- package/dist/selfimprove/budget.d.ts +11 -2
- package/dist/selfimprove/budget.d.ts.map +1 -1
- package/dist/selfimprove/budget.js +11 -2
- package/dist/selfimprove/budget.js.map +1 -1
- package/dist/selfimprove/fix-gen-context.d.ts +172 -0
- package/dist/selfimprove/fix-gen-context.d.ts.map +1 -0
- package/dist/selfimprove/fix-gen-context.js +218 -0
- package/dist/selfimprove/fix-gen-context.js.map +1 -0
- package/dist/selfimprove/fix-gen.d.ts +285 -0
- package/dist/selfimprove/fix-gen.d.ts.map +1 -0
- package/dist/selfimprove/fix-gen.js +346 -0
- package/dist/selfimprove/fix-gen.js.map +1 -0
- package/dist/selfimprove/op-source-map.d.ts +92 -0
- package/dist/selfimprove/op-source-map.d.ts.map +1 -0
- package/dist/selfimprove/op-source-map.js +187 -0
- package/dist/selfimprove/op-source-map.js.map +1 -0
- package/dist/selfimprove/probe-helper.d.ts +61 -0
- package/dist/selfimprove/probe-helper.d.ts.map +1 -0
- package/dist/selfimprove/probe-helper.js +64 -0
- package/dist/selfimprove/probe-helper.js.map +1 -0
- package/dist/selfimprove/run-loop.d.ts +44 -4
- package/dist/selfimprove/run-loop.d.ts.map +1 -1
- package/dist/selfimprove/run-loop.js +73 -6
- package/dist/selfimprove/run-loop.js.map +1 -1
- package/dist/selfimprove/scenarios/seeded-code-regression/golden.json +18 -0
- package/dist/selfimprove/scenarios/seeded-code-regression/scenario.json +12 -0
- package/dist/sentient/cross-project-hygiene.d.ts +11 -2
- package/dist/sentient/cross-project-hygiene.d.ts.map +1 -1
- package/dist/sentient/cross-project-hygiene.js +73 -10
- package/dist/sentient/cross-project-hygiene.js.map +1 -1
- package/dist/sentient/daemon.d.ts.map +1 -1
- package/dist/sentient/daemon.js +7 -2
- package/dist/sentient/daemon.js.map +1 -1
- package/dist/sentient/worktree-dispatch.d.ts.map +1 -1
- package/dist/sentient/worktree-dispatch.js +8 -1
- package/dist/sentient/worktree-dispatch.js.map +1 -1
- package/dist/setup/index.d.ts +1 -0
- package/dist/setup/index.d.ts.map +1 -1
- package/dist/setup/index.js +1 -0
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/sections/models-roles.d.ts +32 -1
- package/dist/setup/sections/models-roles.d.ts.map +1 -1
- package/dist/setup/sections/models-roles.js +118 -19
- package/dist/setup/sections/models-roles.js.map +1 -1
- package/dist/setup/whoami-summary.d.ts +34 -0
- package/dist/setup/whoami-summary.d.ts.map +1 -0
- package/dist/setup/whoami-summary.js +106 -0
- package/dist/setup/whoami-summary.js.map +1 -0
- package/dist/spawn/branch-lock.d.ts.map +1 -1
- package/dist/spawn/branch-lock.js +7 -1
- package/dist/spawn/branch-lock.js.map +1 -1
- package/dist/store/attachment-repair.d.ts +110 -0
- package/dist/store/attachment-repair.d.ts.map +1 -0
- package/dist/store/attachment-repair.js +326 -0
- package/dist/store/attachment-repair.js.map +1 -0
- package/dist/store/attachment-store.d.ts.map +1 -1
- package/dist/store/attachment-store.js +24 -7
- package/dist/store/attachment-store.js.map +1 -1
- package/dist/tasks/evidence.d.ts +34 -2
- package/dist/tasks/evidence.d.ts.map +1 -1
- package/dist/tasks/evidence.js +293 -35
- package/dist/tasks/evidence.js.map +1 -1
- package/dist/verification/verify-tools.d.ts.map +1 -1
- package/dist/verification/verify-tools.js +5 -6
- package/dist/verification/verify-tools.js.map +1 -1
- package/package.json +22 -12
- package/templates/workflows/release-prepare.yml.tmpl +48 -2
|
@@ -30,6 +30,24 @@ import type { ProviderProfile } from '@cleocode/contracts';
|
|
|
30
30
|
* `authTypes: ['api_key']` is listed for compatibility with the credential
|
|
31
31
|
* store API, but local Ollama deployments do not require an actual key —
|
|
32
32
|
* users may leave it empty or store a token for remote/proxied deployments.
|
|
33
|
+
*
|
|
34
|
+
* ## Default model selection (DHQ-081 · T11978 · T11990)
|
|
35
|
+
*
|
|
36
|
+
* `defaultModel` is `gemma4:e4b` (standard/frontier tasks, requires ≥ 8 GB RAM).
|
|
37
|
+
* `defaultAuxModel` is `gemma4:e2b` (fast/aux tasks, requires ≥ 4 GB RAM).
|
|
38
|
+
*
|
|
39
|
+
* Tags live-verified on ollama.com/library/gemma4 2026-06-11:
|
|
40
|
+
* - gemma4:e2b = 7.2 GB download (Q4_K_M), edge 2B effective params
|
|
41
|
+
* - gemma4:e4b = 9.6 GB download (Q4_K_M), edge 4B effective params
|
|
42
|
+
* - gemma4:12b = 7.6 GB download (QAT), 12B params, 256k context
|
|
43
|
+
*
|
|
44
|
+
* The cross-provider selector (`cross-provider-selector.ts`) gates model selection
|
|
45
|
+
* on `os.totalmem()` and falls through to `qwen2:0.5b` only as a proof-of-life
|
|
46
|
+
* last resort when RAM is below 4 GB. These are the provider-registry SSoT
|
|
47
|
+
* constants; the selector reads them via `getProviderProfile('ollama')`.
|
|
48
|
+
*
|
|
49
|
+
* If the catalog does not yet have a `gemma4` family entry, the resolver logs a
|
|
50
|
+
* hint to run `cleo llm refresh-catalog`.
|
|
33
51
|
*/
|
|
34
52
|
export declare const ollamaProfile: ProviderProfile;
|
|
35
53
|
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../../src/llm/provider-registry/builtin/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../../src/llm/provider-registry/builtin/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,aAAa,EAAE,eAa3B,CAAC"}
|
|
@@ -32,17 +32,35 @@
|
|
|
32
32
|
* `authTypes: ['api_key']` is listed for compatibility with the credential
|
|
33
33
|
* store API, but local Ollama deployments do not require an actual key —
|
|
34
34
|
* users may leave it empty or store a token for remote/proxied deployments.
|
|
35
|
+
*
|
|
36
|
+
* ## Default model selection (DHQ-081 · T11978 · T11990)
|
|
37
|
+
*
|
|
38
|
+
* `defaultModel` is `gemma4:e4b` (standard/frontier tasks, requires ≥ 8 GB RAM).
|
|
39
|
+
* `defaultAuxModel` is `gemma4:e2b` (fast/aux tasks, requires ≥ 4 GB RAM).
|
|
40
|
+
*
|
|
41
|
+
* Tags live-verified on ollama.com/library/gemma4 2026-06-11:
|
|
42
|
+
* - gemma4:e2b = 7.2 GB download (Q4_K_M), edge 2B effective params
|
|
43
|
+
* - gemma4:e4b = 9.6 GB download (Q4_K_M), edge 4B effective params
|
|
44
|
+
* - gemma4:12b = 7.6 GB download (QAT), 12B params, 256k context
|
|
45
|
+
*
|
|
46
|
+
* The cross-provider selector (`cross-provider-selector.ts`) gates model selection
|
|
47
|
+
* on `os.totalmem()` and falls through to `qwen2:0.5b` only as a proof-of-life
|
|
48
|
+
* last resort when RAM is below 4 GB. These are the provider-registry SSoT
|
|
49
|
+
* constants; the selector reads them via `getProviderProfile('ollama')`.
|
|
50
|
+
*
|
|
51
|
+
* If the catalog does not yet have a `gemma4` family entry, the resolver logs a
|
|
52
|
+
* hint to run `cleo llm refresh-catalog`.
|
|
35
53
|
*/
|
|
36
54
|
export const ollamaProfile = {
|
|
37
55
|
name: 'ollama',
|
|
38
56
|
displayName: 'Ollama (local)',
|
|
39
57
|
authTypes: ['api_key'],
|
|
40
58
|
baseUrl: 'http://localhost:11434',
|
|
41
|
-
defaultModel: '
|
|
59
|
+
defaultModel: 'gemma4:e4b',
|
|
42
60
|
aliases: ['ollama-local'],
|
|
43
61
|
// Hermes-parity routing/catalog fields (T11756). Local on-device tier.
|
|
44
62
|
tier: 'local',
|
|
45
|
-
defaultAuxModel: '
|
|
63
|
+
defaultAuxModel: 'gemma4:e2b',
|
|
46
64
|
defaultMaxTokens: 2048,
|
|
47
65
|
envVars: ['OLLAMA_API_KEY', 'OLLAMA_BASE_URL'],
|
|
48
66
|
supportsThinkingBudget: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../../src/llm/provider-registry/builtin/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../../src/llm/provider-registry/builtin/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,gBAAgB;IAC7B,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,OAAO,EAAE,wBAAwB;IACjC,YAAY,EAAE,YAAY;IAC1B,OAAO,EAAE,CAAC,cAAc,CAAC;IACzB,uEAAuE;IACvE,IAAI,EAAE,OAAO;IACb,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,IAAI;IACtB,OAAO,EAAE,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAC9C,sBAAsB,EAAE,KAAK;CAC9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,OAAO,EAEP,sBAAsB,EAKtB,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,QAAQ,EACR,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"role-resolver.d.ts","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EACV,OAAO,EAEP,sBAAsB,EAKtB,SAAS,EACT,gBAAgB,EAChB,wBAAwB,EACxB,QAAQ,EACR,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,uBAAuB,EAAE,CAAC;AAEnC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,cAA4B,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAKrE,YAAY,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,QAAQ,EAAE,cAAc,CAAC;IACzB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB;;;;;;;OAOG;IACH,UAAU,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC1C;;;;;;;;OAQG;IACH,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1C,kDAAkD;IAClD,MAAM,EAAE,gBAAgB,CAAC;IACzB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;OAQG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;OAIG;IACH,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACjD;;;OAGG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAyVD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,IAAI,CAAC,EAAE,wBAAwB,GAC9B,OAAO,CAAC,WAAW,CAAC,CA+GtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,QAAQ,EACd,IAAI,CAAC,EAAE,wBAAwB,GAC9B,OAAO,CAAC;IACT,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,IAAI,CAAC,CAwBR"}
|
|
@@ -30,6 +30,7 @@ import { deriveApiWire } from './api-mode.js';
|
|
|
30
30
|
import { CredentialPool } from './credential-pool.js';
|
|
31
31
|
import { resolveCredentials } from './credentials.js';
|
|
32
32
|
import { getCredentialByLabel, pickCredentialForProvider } from './credentials-store.js';
|
|
33
|
+
import { selectBestProvisioned } from './cross-provider-selector.js';
|
|
33
34
|
import { IMPLICIT_FALLBACK_MODEL } from './fallback-model.js';
|
|
34
35
|
import { makeSealedCredential, tokenPreview } from './sealed-credential.js';
|
|
35
36
|
import { getRegisteredSystemDefault } from './system-of-use-registry.js';
|
|
@@ -197,23 +198,31 @@ function resolveRegisteredSystemDefault(llm, systemKey) {
|
|
|
197
198
|
* 5. `defaultProfile` → named profile (`source: 'default-profile'`)
|
|
198
199
|
* 6. `registerSystemOfUse` default (`source: 'registered-default'`) — runtime
|
|
199
200
|
* registration, consulted strictly BELOW all user config (T11751).
|
|
200
|
-
* 7.
|
|
201
|
+
* 7. Cross-provider provisioning-aware selection (DHQ-081 · T11978) —
|
|
202
|
+
* enumerates all builtin providers, ranks by provisioning + scoring,
|
|
203
|
+
* returns the best provisioned provider+model (`source: 'cross-provider'`).
|
|
204
|
+
* Fires ONLY when all config tiers miss. Config pins win absolutely.
|
|
205
|
+
* 8. Implicit fallback (`source: 'implicit-fallback'`) — only reached when
|
|
206
|
+
* NO provider has a usable credential (preserves backward compat).
|
|
201
207
|
*
|
|
202
208
|
* Tiers 1–2 are the *explicit-arg* lane (per-role config / role override);
|
|
203
209
|
* tier 3 is the hermes *granular override* — consulted after the explicit
|
|
204
210
|
* choice but before the global base (`default` / `defaultProfile`), matching
|
|
205
211
|
* the E9 priority `explicit-arg → llm.systems[key] → llm.defaultProfile →
|
|
206
|
-
* registered-default → implicit fallback` (T11748 · T11751).
|
|
207
|
-
* `defaultProfile` is what lets background roles resolve to a
|
|
208
|
-
* provider WITHOUT hardcoding the provider in code.
|
|
212
|
+
* registered-default → cross-provider → implicit fallback` (T11748 · T11751).
|
|
213
|
+
* The configurable `defaultProfile` is what lets background roles resolve to a
|
|
214
|
+
* user-selectable provider WITHOUT hardcoding the provider in code.
|
|
209
215
|
*
|
|
210
|
-
* @param llm
|
|
211
|
-
* @param role
|
|
212
|
-
* @param systemKey
|
|
216
|
+
* @param llm - The LLM config block (may be undefined).
|
|
217
|
+
* @param role - The role used for `roles[role]` lookup.
|
|
218
|
+
* @param systemKey - Optional encoded system-of-use key activating tiers 3 + 6.
|
|
219
|
+
* @param profileOverride - Optional profile name pin (tier 0).
|
|
220
|
+
* @param projectRoot - Project root for credential resolution at tier 7.
|
|
213
221
|
* @task T11748 (`systems[systemKey]` tier)
|
|
214
222
|
* @task T11751 (`registered-default` tier)
|
|
223
|
+
* @task T11978 (`cross-provider` tier — DHQ-081)
|
|
215
224
|
*/
|
|
216
|
-
function selectProviderModel(llm, role, systemKey, profileOverride) {
|
|
225
|
+
async function selectProviderModel(llm, role, systemKey, profileOverride, projectRoot) {
|
|
217
226
|
const roleEntry = llm?.roles?.[role];
|
|
218
227
|
// 0. Explicit profile pin (T11759 · M4) — HIGHEST priority. A caller that
|
|
219
228
|
// pins a named profile (e.g. a `.cantbook` stage's `profile:`) cannot be
|
|
@@ -259,7 +268,31 @@ function selectProviderModel(llm, role, systemKey, profileOverride) {
|
|
|
259
268
|
const registeredDefault = resolveRegisteredSystemDefault(llm, systemKey);
|
|
260
269
|
if (registeredDefault)
|
|
261
270
|
return registeredDefault;
|
|
262
|
-
// 7.
|
|
271
|
+
// 7. Cross-provider provisioning-aware selection (DHQ-081 · T11978).
|
|
272
|
+
//
|
|
273
|
+
// All config tiers missed. Instead of immediately returning the hardcoded
|
|
274
|
+
// anthropic fallback, enumerate all builtin providers, rank them by
|
|
275
|
+
// provisioning state + scoring, and return the best available provider.
|
|
276
|
+
//
|
|
277
|
+
// This fixes the core DHQ-081 bug: a machine with only OPENAI_API_KEY set
|
|
278
|
+
// was landing on anthropic (no credential) instead of openai (has credential).
|
|
279
|
+
//
|
|
280
|
+
// Config pins (tiers 0-6) ALWAYS win over this tier. The LIVE anthropic OAuth
|
|
281
|
+
// path (sk-ant-oat credentials) is handled here — if anthropic wins the
|
|
282
|
+
// scoring race (provisioned frontier cloud gets PROVISIONED_CLOUD_BIAS),
|
|
283
|
+
// it returns naturally without any change in behavior.
|
|
284
|
+
try {
|
|
285
|
+
const crossProviderResult = await selectBestProvisioned(role, {
|
|
286
|
+
projectRoot: projectRoot ?? '',
|
|
287
|
+
});
|
|
288
|
+
if (crossProviderResult !== null) {
|
|
289
|
+
return crossProviderResult;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// Non-fatal — fall through to the anthropic implicit fallback.
|
|
294
|
+
}
|
|
295
|
+
// 8. Implicit fallback (last resort — no provider has a usable credential).
|
|
263
296
|
return {
|
|
264
297
|
provider: IMPLICIT_FALLBACK_PROVIDER,
|
|
265
298
|
model: IMPLICIT_FALLBACK_MODEL,
|
|
@@ -398,8 +431,10 @@ export async function resolveLLMForRole(role, opts) {
|
|
|
398
431
|
// `opts.systemKey` (threaded by `resolveLLMForSystem`) activates the
|
|
399
432
|
// `llm.systems[key]` granular-override tier; role callers leave it unset and
|
|
400
433
|
// that tier is skipped — role resolution is unchanged (T11748).
|
|
434
|
+
// `projectRoot` is threaded to tier 7 (cross-provider selector) for any
|
|
435
|
+
// credential resolution that may need the project context (DHQ-081 · T11978).
|
|
401
436
|
const llmBlock = readLlmBlock(config);
|
|
402
|
-
const { provider, model, credentialLabel, source } = selectProviderModel(llmBlock, role, opts?.systemKey, opts?.profileOverride);
|
|
437
|
+
const { provider, model, credentialLabel, source } = await selectProviderModel(llmBlock, role, opts?.systemKey, opts?.profileOverride, projectRoot);
|
|
403
438
|
// Step 3 — resolve credential.
|
|
404
439
|
const { credential, usedLabel } = await resolveCredentialForRole(provider, credentialLabel, projectRoot);
|
|
405
440
|
// Step 4 — construct SDK client if we have a credential.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role-resolver.js","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"role-resolver.js","sourceRoot":"","sources":["../../src/llm/role-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* CodexResponsesTransport — OpenAI Responses API transport.
|
|
2
|
+
* CodexResponsesTransport — OpenAI Responses API transport (raw-fetch variant).
|
|
3
3
|
*
|
|
4
|
-
* Implements {@link LlmTransport} for
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - xAI (grok-* models via Responses-compatible endpoints)
|
|
4
|
+
* Implements {@link LlmTransport} for the ChatGPT Codex backend
|
|
5
|
+
* (`https://chatgpt.com/backend-api/codex/responses`) and any provider that
|
|
6
|
+
* speaks a compatible Responses-API SSE protocol (xAI grok-via-responses).
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
* - Input uses the `input` array of ResponseInputItem (not `messages`).
|
|
11
|
-
* - Tools use `{type: 'function', name, description, parameters}` shape.
|
|
12
|
-
* - Tool results use `{type: 'function_call_output', call_id, output}` items.
|
|
13
|
-
* - The system prompt goes in `instructions`, not a system message.
|
|
14
|
-
* - Response text is extracted from `output_text` shortcut or by scanning
|
|
15
|
-
* `output` for `{type: 'message'}` items.
|
|
16
|
-
* - Tool calls come from `output` items of `{type: 'function_call'}`.
|
|
17
|
-
* - Usage is in `response.usage.input_tokens` / `output_tokens`.
|
|
8
|
+
* ## Wire shape (mirrored from @earendil-works/pi-ai 0.78.x — imports banned)
|
|
18
9
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
10
|
+
* Unlike the previous OpenAI-SDK-based implementation, this transport uses
|
|
11
|
+
* **raw `fetch`** to control every request header. The Codex backend rejects
|
|
12
|
+
* requests that carry the SDK's default `Accept: application/json` header or
|
|
13
|
+
* that omit `store: false` in the body.
|
|
14
|
+
*
|
|
15
|
+
* Mandatory request headers:
|
|
16
|
+
* - `Authorization: Bearer <token>`
|
|
17
|
+
* - `chatgpt-account-id: <jwt claim>`
|
|
18
|
+
* - `originator: codex_cli_rs` (set by buildCodexOAuthHeaders)
|
|
19
|
+
* - `OpenAI-Beta: responses=experimental`
|
|
20
|
+
* - `accept: text/event-stream` (always — backend mandates stream:true on every request)
|
|
21
|
+
* - `content-type: application/json`
|
|
22
|
+
*
|
|
23
|
+
* Mandatory body fields:
|
|
24
|
+
* - `model`, `input`, `instructions`
|
|
25
|
+
* - `store: false` (codex backend rejects store:true or absent)
|
|
26
|
+
* - `stream: true` (always — the Codex backend rejects stream:false)
|
|
21
27
|
*
|
|
22
28
|
* @module llm/transports/codex-responses
|
|
29
|
+
* @task T11985
|
|
23
30
|
* @task T9311
|
|
24
31
|
* @epic T9261 (T-LLM-CRED-CENTRALIZATION Phase 5)
|
|
25
32
|
* @see ADR-072 §LlmTransport — pure wire level
|
|
@@ -31,11 +38,13 @@ import type { ModelTransport } from '@cleocode/contracts/operations/llm.js';
|
|
|
31
38
|
/**
|
|
32
39
|
* Options accepted by {@link CodexResponsesTransport}.
|
|
33
40
|
*
|
|
34
|
-
* `baseUrl` overrides the default
|
|
35
|
-
*
|
|
41
|
+
* `baseUrl` overrides the default endpoint. Required when serving xAI (use
|
|
42
|
+
* `'https://api.x.ai/v1'`) or any other Responses-compatible shim.
|
|
36
43
|
*
|
|
37
|
-
* `defaultHeaders` carries extra HTTP headers merged into every
|
|
38
|
-
*
|
|
44
|
+
* `defaultHeaders` carries extra HTTP headers merged into every request.
|
|
45
|
+
* For Codex OAuth callers this should include at minimum
|
|
46
|
+
* `Authorization`, `chatgpt-account-id`, and `originator` (built by
|
|
47
|
+
* {@link buildCodexOAuthHeaders}).
|
|
39
48
|
*/
|
|
40
49
|
export interface CodexResponsesTransportOptions {
|
|
41
50
|
/**
|
|
@@ -47,31 +56,35 @@ export interface CodexResponsesTransportOptions {
|
|
|
47
56
|
apiKey: string;
|
|
48
57
|
/** Override base URL for non-OpenAI providers (no trailing slash). */
|
|
49
58
|
baseUrl?: string;
|
|
50
|
-
/** Extra headers merged into every
|
|
59
|
+
/** Extra headers merged into every request. */
|
|
51
60
|
defaultHeaders?: Record<string, string>;
|
|
52
61
|
}
|
|
53
62
|
/**
|
|
54
|
-
* Transport for providers that expose the OpenAI Responses API.
|
|
63
|
+
* Transport for providers that expose the OpenAI Responses API via raw fetch.
|
|
55
64
|
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
65
|
+
* Uses native `fetch` (not the OpenAI SDK) so that the `Accept` header,
|
|
66
|
+
* `store: false` body field, and `OpenAI-Beta` header can all be set
|
|
67
|
+
* explicitly — the OpenAI SDK hardcodes `Accept: application/json` and omits
|
|
68
|
+
* `store`, both of which cause the Codex ChatGPT backend to return a 400.
|
|
58
69
|
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
* items when a prior `assistant` turn carries tool calls.
|
|
70
|
+
* SSE stream parsing mirrors the pi-ai 0.78.x reference implementation
|
|
71
|
+
* (`@earendil-works/pi-ai/dist/providers/openai-codex-responses.js`) —
|
|
72
|
+
* imports from that package are banned; the wire shape is transcribed here.
|
|
63
73
|
*
|
|
64
74
|
* @example
|
|
65
75
|
* ```ts
|
|
66
76
|
* const transport = new CodexResponsesTransport({
|
|
67
77
|
* provider: 'openai',
|
|
68
|
-
* apiKey: process.env.
|
|
69
|
-
*
|
|
70
|
-
* const response = await transport.complete({
|
|
71
|
-
* model: 'codex-mini-latest',
|
|
72
|
-
* messages: [{ role: 'user', content: 'Write a fizzbuzz.' }],
|
|
73
|
-
* maxTokens: 1024,
|
|
78
|
+
* apiKey: process.env.CODEX_OAUTH_TOKEN!,
|
|
79
|
+
* defaultHeaders: buildCodexOAuthHeaders(process.env.CODEX_OAUTH_TOKEN!),
|
|
74
80
|
* });
|
|
81
|
+
* for await (const delta of transport.stream({
|
|
82
|
+
* model: 'gpt-5.5',
|
|
83
|
+
* messages: [{ role: 'user', content: 'Reply with exactly: pong' }],
|
|
84
|
+
* maxTokens: 64,
|
|
85
|
+
* }, {})) {
|
|
86
|
+
* process.stdout.write(delta.text);
|
|
87
|
+
* }
|
|
75
88
|
* ```
|
|
76
89
|
*/
|
|
77
90
|
export declare class CodexResponsesTransport implements LlmTransport {
|
|
@@ -86,21 +99,31 @@ export declare class CodexResponsesTransport implements LlmTransport {
|
|
|
86
99
|
* @see ADR-072 §Type lock-in
|
|
87
100
|
*/
|
|
88
101
|
readonly apiMode: ApiMode;
|
|
89
|
-
/**
|
|
90
|
-
private readonly
|
|
102
|
+
/** API key / OAuth bearer token. */
|
|
103
|
+
private readonly _apiKey;
|
|
104
|
+
/**
|
|
105
|
+
* Resolved endpoint URL (the full `/codex/responses` path).
|
|
106
|
+
* Derived once at construction so the URL normalisation runs once.
|
|
107
|
+
*/
|
|
108
|
+
private readonly _endpointUrl;
|
|
109
|
+
/** Extra headers merged into every request (auth, originator, etc.). */
|
|
110
|
+
private readonly _defaultHeaders;
|
|
91
111
|
/**
|
|
92
112
|
* Construct a CodexResponsesTransport.
|
|
93
113
|
*
|
|
94
|
-
* @param opts - Construction options
|
|
95
|
-
*
|
|
114
|
+
* @param opts - Construction options: provider, API key, optional base URL
|
|
115
|
+
* and default headers (auth + Cloudflare-bypass headers for OAuth callers).
|
|
96
116
|
*/
|
|
97
117
|
constructor(opts: CodexResponsesTransportOptions);
|
|
98
118
|
/**
|
|
99
|
-
* Execute a single completion using the
|
|
119
|
+
* Execute a single (non-streaming) completion using the Responses API.
|
|
100
120
|
*
|
|
101
|
-
*
|
|
102
|
-
* `
|
|
103
|
-
*
|
|
121
|
+
* The Codex ChatGPT backend mandates `stream: true` on every request and
|
|
122
|
+
* returns `400 {"detail":"Stream must be set to true"}` for `stream: false`.
|
|
123
|
+
* This method therefore always sends `stream: true` with
|
|
124
|
+
* `Accept: text/event-stream`, internally consumes the SSE stream, and
|
|
125
|
+
* aggregates text deltas + tool calls + usage into a {@link NormalizedResponse}
|
|
126
|
+
* — identical to calling `stream()` and collecting all chunks.
|
|
104
127
|
*
|
|
105
128
|
* @param request - Provider-neutral request parameters.
|
|
106
129
|
* @param _ctx - Transport context (unused; `request.signal` handles abort).
|
|
@@ -108,11 +131,17 @@ export declare class CodexResponsesTransport implements LlmTransport {
|
|
|
108
131
|
*/
|
|
109
132
|
complete(request: TransportRequest, _ctx?: TransportContext): Promise<NormalizedResponse>;
|
|
110
133
|
/**
|
|
111
|
-
* Stream a completion using the
|
|
134
|
+
* Stream a completion using the Responses API SSE stream.
|
|
112
135
|
*
|
|
113
136
|
* Yields {@link NormalizedDelta} chunks from `response.output_text.delta`
|
|
114
|
-
* events
|
|
115
|
-
*
|
|
137
|
+
* events parsed from the raw SSE stream. The final delta carries
|
|
138
|
+
* `stopReason` and `usage` from `response.completed`.
|
|
139
|
+
*
|
|
140
|
+
* Wire shape:
|
|
141
|
+
* - `store: false` (required — codex backend rejects absent or true)
|
|
142
|
+
* - `stream: true`
|
|
143
|
+
* - `Accept: text/event-stream`
|
|
144
|
+
* - `OpenAI-Beta: responses=experimental`
|
|
116
145
|
*
|
|
117
146
|
* @param request - Provider-neutral request parameters.
|
|
118
147
|
* @param _ctx - Transport context (unused; `request.signal` handles abort).
|
|
@@ -120,56 +149,50 @@ export declare class CodexResponsesTransport implements LlmTransport {
|
|
|
120
149
|
*/
|
|
121
150
|
stream(request: TransportRequest, _ctx: TransportContext): AsyncIterable<NormalizedDelta>;
|
|
122
151
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
* Mapping rules:
|
|
126
|
-
* - `user` / `assistant` string messages → `EasyInputMessage` with `type:'message'`.
|
|
127
|
-
* - `user` / `assistant` multimodal blocks → content list with `input_text` /
|
|
128
|
-
* `input_image` items.
|
|
129
|
-
* - `tool` messages (role=`'tool'`) → `function_call_output` items using
|
|
130
|
-
* `toolUseId` as `call_id`.
|
|
152
|
+
* Build the HTTP headers for a Codex request.
|
|
131
153
|
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
154
|
+
* Merges the auth/cloudflare headers from `_defaultHeaders` with the
|
|
155
|
+
* mandatory Codex-specific headers:
|
|
156
|
+
* - `OpenAI-Beta: responses=experimental`
|
|
157
|
+
* - `content-type: application/json`
|
|
158
|
+
* - `accept: text/event-stream` (always — both complete() and stream() use SSE)
|
|
136
159
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*/
|
|
140
|
-
private _buildInputItems;
|
|
141
|
-
/**
|
|
142
|
-
* Convert provider-neutral tool definitions to the Responses API
|
|
143
|
-
* `{type: 'function', name, description, parameters, strict}` shape.
|
|
160
|
+
* The Authorization header is injected only if not already present in
|
|
161
|
+
* `_defaultHeaders` (OAuth callers pre-set it via buildCodexOAuthHeaders).
|
|
144
162
|
*
|
|
145
|
-
* @param
|
|
146
|
-
* @returns
|
|
163
|
+
* @param streaming - Whether this is a streaming (SSE) or completion call.
|
|
164
|
+
* @returns Plain string record of all request headers.
|
|
147
165
|
*/
|
|
148
|
-
private
|
|
166
|
+
private _buildHeaders;
|
|
149
167
|
/**
|
|
150
|
-
*
|
|
151
|
-
* {@link NormalizedResponse}.
|
|
168
|
+
* Build the JSON request body for a Codex Responses API call.
|
|
152
169
|
*
|
|
153
|
-
*
|
|
154
|
-
* - `
|
|
155
|
-
*
|
|
156
|
-
* - `
|
|
157
|
-
* - `stopReason` — from `response.status` (completed / failed / incomplete).
|
|
158
|
-
* - `usage` — `input_tokens` → `inputTokens`, `output_tokens` → `outputTokens`.
|
|
159
|
-
* - `cachedTokens` — from `usage.input_tokens_details.cached_tokens`.
|
|
160
|
-
* - `raw` — unmodified SDK response.
|
|
170
|
+
* Mandatory fields per the Codex backend:
|
|
171
|
+
* - `store: false` — backend rejects absent or `true`.
|
|
172
|
+
* - `instructions` — system prompt (defaulting to empty string when absent).
|
|
173
|
+
* - `input` — array of Responses API input items.
|
|
161
174
|
*
|
|
162
|
-
* @param
|
|
163
|
-
* @param
|
|
164
|
-
* @returns
|
|
175
|
+
* @param request - Provider-neutral request.
|
|
176
|
+
* @param streaming - Whether to enable SSE streaming.
|
|
177
|
+
* @returns Serialisable request body.
|
|
165
178
|
*/
|
|
166
|
-
private
|
|
167
|
-
/**
|
|
168
|
-
* Normalize OpenAI Responses API usage into {@link NormalizedUsage}.
|
|
169
|
-
*
|
|
170
|
-
* @param usage - Raw usage object (may be null when the API omits it).
|
|
171
|
-
* @returns Normalized usage with optional `cachedTokens`.
|
|
172
|
-
*/
|
|
173
|
-
private _normalizeUsage;
|
|
179
|
+
private _buildBody;
|
|
174
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Resolve the full Responses API endpoint URL from an optional base URL.
|
|
183
|
+
*
|
|
184
|
+
* Mirrors the `resolveCodexUrl` logic from pi-ai 0.78.x so the same base URL
|
|
185
|
+
* variants work:
|
|
186
|
+
* - `https://chatgpt.com/backend-api` → `.../codex/responses`
|
|
187
|
+
* - `https://chatgpt.com/backend-api/codex` → `.../codex/responses`
|
|
188
|
+
* - `https://chatgpt.com/backend-api/codex/responses` → unchanged
|
|
189
|
+
* - `undefined` (no override) → ChatGPT Codex default
|
|
190
|
+
*
|
|
191
|
+
* For non-ChatGPT providers (xAI, custom shims) the raw baseUrl is
|
|
192
|
+
* appended with `/responses` when it doesn't already end with `/responses`.
|
|
193
|
+
*
|
|
194
|
+
* @param baseUrl - Optional override base URL (no trailing slash).
|
|
195
|
+
* @returns The fully resolved endpoint URL.
|
|
196
|
+
*/
|
|
197
|
+
export declare function resolveCodexUrl(baseUrl: string | undefined): string;
|
|
175
198
|
//# sourceMappingURL=codex-responses.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-responses.d.ts","sourceRoot":"","sources":["../../../src/llm/transports/codex-responses.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"codex-responses.d.ts","sourceRoot":"","sources":["../../../src/llm/transports/codex-responses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC/F,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAKlB,gBAAgB,EAGjB,MAAM,gDAAgD,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAM5E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,EAAE,cAAc,CAAC;IACzB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,uBAAwB,YAAW,YAAY;IAC1D;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAElC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAA8B;IAEvD,oCAAoC;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,wEAAwE;IACxE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyB;IAEzD;;;;;OAKG;gBACS,IAAI,EAAE,8BAA8B;IAWhD;;;;;;;;;;;;;OAaG;IACG,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8G/F;;;;;;;;;;;;;;;;OAgBG;IACI,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,GAAG,aAAa,CAAC,eAAe,CAAC;IA4EhG;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,aAAa;IAerB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,UAAU;CAgBnB;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOnE"}
|