chorus-codes 0.8.28 → 0.8.30
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/.next/BUILD_ID +1 -1
- package/.next/app-path-routes-manifest.json +4 -4
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/connect/page.js +1 -1
- package/.next/server/app/connect/page.js.nft.json +1 -1
- package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
- package/.next/server/app/demo/[scenario]/page.js +1 -1
- package/.next/server/app/demo/[scenario]/page.js.nft.json +1 -1
- package/.next/server/app/demo/[scenario]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/new/page.js +1 -1
- package/.next/server/app/new/page.js.nft.json +1 -1
- package/.next/server/app/new/page_client-reference-manifest.js +1 -1
- package/.next/server/app/new.html +1 -1
- package/.next/server/app/new.rsc +2 -2
- package/.next/server/app/new.segments/_full.segment.rsc +2 -2
- package/.next/server/app/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/new.segments/_index.segment.rsc +1 -1
- package/.next/server/app/new.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/new.segments/new.segment.rsc +1 -1
- package/.next/server/app/onboarding/page.js +1 -1
- package/.next/server/app/onboarding/page.js.nft.json +1 -1
- package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
- package/.next/server/app/onboarding.html +1 -1
- package/.next/server/app/onboarding.rsc +2 -2
- package/.next/server/app/onboarding.segments/_full.segment.rsc +2 -2
- package/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/_index.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
- package/.next/server/app/page.js +1 -1
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/personas/page.js +1 -1
- package/.next/server/app/personas/page.js.nft.json +1 -1
- package/.next/server/app/personas/page_client-reference-manifest.js +1 -1
- package/.next/server/app/personas.html +1 -1
- package/.next/server/app/personas.rsc +2 -2
- package/.next/server/app/personas.segments/_full.segment.rsc +2 -2
- package/.next/server/app/personas.segments/_head.segment.rsc +1 -1
- package/.next/server/app/personas.segments/_index.segment.rsc +1 -1
- package/.next/server/app/personas.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/personas.segments/personas.segment.rsc +1 -1
- package/.next/server/app/runs/[runId]/page.js +1 -1
- package/.next/server/app/runs/[runId]/page.js.nft.json +1 -1
- package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/runs/page.js +1 -1
- package/.next/server/app/runs/page.js.nft.json +1 -1
- package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/page.js +1 -1
- package/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings/permissions/page.js +1 -1
- package/.next/server/app/settings/permissions/page.js.nft.json +1 -1
- package/.next/server/app/settings/permissions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +2 -2
- package/.next/server/app/settings.segments/_full.segment.rsc +2 -2
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/templates/page.js +1 -1
- package/.next/server/app/templates/page.js.nft.json +1 -1
- package/.next/server/app/templates/page_client-reference-manifest.js +1 -1
- package/.next/server/app/templates.html +1 -1
- package/.next/server/app/templates.rsc +2 -2
- package/.next/server/app/templates.segments/_full.segment.rsc +2 -2
- package/.next/server/app/templates.segments/_head.segment.rsc +1 -1
- package/.next/server/app/templates.segments/_index.segment.rsc +1 -1
- package/.next/server/app/templates.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +2 -2
- package/.next/server/app/templates.segments/templates.segment.rsc +1 -1
- package/.next/server/app-paths-manifest.json +4 -4
- package/.next/server/chunks/189.js +1 -1
- package/.next/server/chunks/{313.js → 385.js} +3 -3
- package/.next/server/chunks/681.js +1 -1
- package/.next/server/chunks/827.js +25 -0
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/static/chunks/{641-02dbc18bdc194ee1.js → 641-7e3f4fc19494c5dc.js} +1 -1
- package/.next/static/chunks/{249-2e840495c38ee022.js → 742-e466c37ab445a8a1.js} +8 -8
- package/.next/static/chunks/app/connect/{page-ad4409761e870bd0.js → page-d61d0769677393ba.js} +1 -1
- package/.next/static/chunks/app/demo/[scenario]/{page-39673968f543c473.js → page-b653a3566b7e08d8.js} +1 -1
- package/.next/static/chunks/app/new/{page-b5f609ab9413ac00.js → page-27eb1817c252cd2e.js} +1 -1
- package/.next/static/chunks/app/onboarding/{page-8b0850fef487abdc.js → page-da4e2a72a0246245.js} +1 -1
- package/.next/static/chunks/app/{page-9bdbaad592d0ce56.js → page-76efbecd45d24a1a.js} +1 -1
- package/.next/static/chunks/app/personas/{page-440c6033a773100c.js → page-013358172d93e623.js} +1 -1
- package/.next/static/chunks/app/runs/[runId]/{page-ffc36f12f1b63ebe.js → page-9aa69b618b2943c1.js} +1 -1
- package/.next/static/chunks/app/runs/{page-6962ea572c9e4b74.js → page-d99788d00708dc0b.js} +1 -1
- package/.next/static/chunks/app/settings/{page-ad7180ee0d142704.js → page-e2f6b190d3794681.js} +1 -1
- package/.next/static/chunks/app/settings/permissions/{page-cd767401ac71a29c.js → page-1315296235b0994f.js} +1 -1
- package/.next/static/chunks/app/templates/{page-0112ab3c7ab5185d.js → page-c712fc69b314d734.js} +1 -1
- package/.next/trace +20 -20
- package/.next/trace-build +1 -1
- package/README.md +6 -5
- package/dist/cli/commands/start.js +12 -6
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/open-browser.js +16 -0
- package/dist/cli/open-browser.js.map +1 -0
- package/dist/cli/port-utils.js +2 -0
- package/dist/cli/port-utils.js.map +1 -1
- package/dist/daemon/agents/codex.js +41 -21
- package/dist/daemon/agents/codex.js.map +1 -1
- package/dist/daemon/output-watcher.js +3 -3
- package/dist/daemon/output-watcher.js.map +1 -1
- package/dist/daemon/runner/reviewer-driver.js +40 -0
- package/dist/daemon/runner/reviewer-driver.js.map +1 -1
- package/dist/lib/cli-precheck.js +29 -1
- package/dist/lib/cli-precheck.js.map +1 -1
- package/dist/lib/db/voices.js +1 -1
- package/dist/lib/db/voices.js.map +1 -1
- package/dist/lib/template-schema.js +30 -0
- package/dist/lib/template-schema.js.map +1 -1
- package/dist/lib/voice-failure-tracker.js +137 -0
- package/dist/lib/voice-failure-tracker.js.map +1 -0
- package/package.json +1 -1
- package/.next/server/chunks/21.js +0 -25
- /package/.next/static/{NjUsrVtX8A7dE29z5nGfv → TWx7XFZiSWXC2bdxzZkHz}/_buildManifest.js +0 -0
- /package/.next/static/{NjUsrVtX8A7dE29z5nGfv → TWx7XFZiSWXC2bdxzZkHz}/_ssgManifest.js +0 -0
package/dist/lib/cli-precheck.js
CHANGED
|
@@ -27,10 +27,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
28
|
};
|
|
29
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.hasKeychainEntry = hasKeychainEntry;
|
|
30
31
|
exports.precheckLineage = precheckLineage;
|
|
31
32
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
32
33
|
const node_path_1 = __importDefault(require("node:path"));
|
|
33
34
|
const node_os_1 = __importDefault(require("node:os"));
|
|
35
|
+
const node_child_process_1 = require("node:child_process");
|
|
34
36
|
const cli_health_1 = require("./cli-health");
|
|
35
37
|
/**
|
|
36
38
|
* Per-lineage credential file we treat as "user is logged in." Each CLI
|
|
@@ -79,6 +81,31 @@ const LOGIN_HINT = {
|
|
|
79
81
|
moonshot: 'Run `kimi` once interactively, or set up opencode if you use the kimi-via-opencode transport.',
|
|
80
82
|
openrouter: 'Save an OpenRouter API key on the Connect page.',
|
|
81
83
|
};
|
|
84
|
+
/**
|
|
85
|
+
* Claude Code v2+ stores OAuth credentials in the macOS Keychain instead of a
|
|
86
|
+
* file on disk. Probe the Keychain for existence only (no `-w` flag — avoids
|
|
87
|
+
* ACL prompts in headless contexts). Returns false on non-macOS platforms.
|
|
88
|
+
*/
|
|
89
|
+
const KEYCHAIN_SERVICES = {
|
|
90
|
+
anthropic: 'Claude Code-credentials',
|
|
91
|
+
};
|
|
92
|
+
function hasKeychainEntry(lineage) {
|
|
93
|
+
if (process.platform !== 'darwin')
|
|
94
|
+
return false;
|
|
95
|
+
const service = KEYCHAIN_SERVICES[lineage];
|
|
96
|
+
if (!service)
|
|
97
|
+
return false;
|
|
98
|
+
try {
|
|
99
|
+
(0, node_child_process_1.execFileSync)('security', ['find-generic-password', '-s', service], {
|
|
100
|
+
stdio: 'ignore',
|
|
101
|
+
timeout: 5000,
|
|
102
|
+
});
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
82
109
|
/**
|
|
83
110
|
* Check whether at least one of the candidate credential paths for `lineage`
|
|
84
111
|
* exists and is readable. Existence-only — we don't parse contents (each CLI
|
|
@@ -127,8 +154,9 @@ async function precheckLineage(lineage) {
|
|
|
127
154
|
}
|
|
128
155
|
// Layer 2: credential file presence. Cheap, catches "logged out" without
|
|
129
156
|
// paying the spawn tax. See CRED_PATHS for the per-CLI lookups.
|
|
157
|
+
// Falls back to macOS Keychain for CLIs that store creds there (Claude Code v2+).
|
|
130
158
|
const cred = hasCredFile(lineage);
|
|
131
|
-
if (!cred.exists) {
|
|
159
|
+
if (!cred.exists && !hasKeychainEntry(lineage)) {
|
|
132
160
|
return {
|
|
133
161
|
ok: false,
|
|
134
162
|
reason: 'auth_missing',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-precheck.js","sourceRoot":"","sources":["../../src/lib/cli-precheck.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;
|
|
1
|
+
{"version":3,"file":"cli-precheck.js","sourceRoot":"","sources":["../../src/lib/cli-precheck.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/db/voices.js
CHANGED
|
@@ -14,7 +14,7 @@ const VoiceRowSchema = zod_1.z.object({
|
|
|
14
14
|
input_cost_per_mtok: zod_1.z.number().nullable(),
|
|
15
15
|
output_cost_per_mtok: zod_1.z.number().nullable(),
|
|
16
16
|
enabled: zod_1.z.coerce.boolean(),
|
|
17
|
-
disabled_reason: zod_1.z.enum(['user', 'auto_missing']).nullable().optional().default(null),
|
|
17
|
+
disabled_reason: zod_1.z.enum(['user', 'auto_missing', 'auto_quota']).nullable().optional().default(null),
|
|
18
18
|
created_at: zod_1.z.number().int(),
|
|
19
19
|
updated_at: zod_1.z.number().int(),
|
|
20
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voices.js","sourceRoot":"","sources":["../../../src/lib/db/voices.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,mDAAwC;AAExC,MAAM,cAAc,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9B,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC1E,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,mBAAmB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,oBAAoB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAO,EAAE;IAC3B,eAAe,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"voices.js","sourceRoot":"","sources":["../../../src/lib/db/voices.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,6 +73,36 @@ const ReviewerSchema = zod_1.z.object({
|
|
|
73
73
|
*/
|
|
74
74
|
persona: zod_1.z.string().optional(),
|
|
75
75
|
})),
|
|
76
|
+
}).superRefine((reviewer, ctx) => {
|
|
77
|
+
// Reject `require: N` when N > candidates.length at template-save
|
|
78
|
+
// time. Without this guard the run would queue, fail to grant
|
|
79
|
+
// enough slots, and surface as an immediate, opaque chat-failure
|
|
80
|
+
// (issue #15: "Job moves immediately to failure upon Start press").
|
|
81
|
+
// Validating here turns it into a clean schema error users can fix
|
|
82
|
+
// before the run ever starts.
|
|
83
|
+
if (reviewer.require > reviewer.candidates.length) {
|
|
84
|
+
ctx.addIssue({
|
|
85
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
86
|
+
path: ['require'],
|
|
87
|
+
message: `reviewer.require (${reviewer.require}) cannot exceed reviewer.candidates.length (${reviewer.candidates.length}). ` +
|
|
88
|
+
`Either lower require or add more candidates.`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Cross-lineage diversity is a stricter constraint: when crossLineage
|
|
92
|
+
// is true, you also can't satisfy `require: N` with fewer than N
|
|
93
|
+
// distinct lineages. Caught at template-save so the runner doesn't
|
|
94
|
+
// have to surface "no diverse fallback available" mid-run.
|
|
95
|
+
if (reviewer.crossLineage && reviewer.require > 0) {
|
|
96
|
+
const distinctLineages = new Set(reviewer.candidates.map((c) => c.lineage)).size;
|
|
97
|
+
if (reviewer.require > distinctLineages) {
|
|
98
|
+
ctx.addIssue({
|
|
99
|
+
code: zod_1.z.ZodIssueCode.custom,
|
|
100
|
+
path: ['require'],
|
|
101
|
+
message: `reviewer.require (${reviewer.require}) exceeds distinct lineages (${distinctLineages}) in candidates with crossLineage=true. ` +
|
|
102
|
+
`Either lower require, disable crossLineage, or add candidates from more lineages.`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
76
106
|
});
|
|
77
107
|
const InputsSchema = zod_1.z.object({
|
|
78
108
|
include: zod_1.z.array(zod_1.z.string()).default([]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-schema.js","sourceRoot":"","sources":["../../src/lib/template-schema.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"template-schema.js","sourceRoot":"","sources":["../../src/lib/template-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._testing = exports.AUTO_DISABLE_THRESHOLD = void 0;
|
|
4
|
+
exports.shouldAutoDisable = shouldAutoDisable;
|
|
5
|
+
exports.recordVoiceFailure = recordVoiceFailure;
|
|
6
|
+
exports.recordVoiceSuccess = recordVoiceSuccess;
|
|
7
|
+
/**
|
|
8
|
+
* Per-voice failure tracker for auto-disabling voices that fail
|
|
9
|
+
* permanently against a specific account.
|
|
10
|
+
*
|
|
11
|
+
* Concrete pain (issue #11): a Gemini Pro model on a Flash-only
|
|
12
|
+
* account fails every call with "exhausted your capacity on this
|
|
13
|
+
* model" — but Gemini does not return a `resetAt`, because the model
|
|
14
|
+
* isn't going to become available. Without auto-disable the runner
|
|
15
|
+
* keeps picking that voice on every chat the user fires, every voice
|
|
16
|
+
* times-out, the user keeps seeing the same opaque error.
|
|
17
|
+
*
|
|
18
|
+
* The signal we trust:
|
|
19
|
+
* - kind: 'quota_exhausted'
|
|
20
|
+
* - hasResetAt: false (the upstream did NOT promise recovery)
|
|
21
|
+
*
|
|
22
|
+
* One strike with that exact signal isn't enough — the user might
|
|
23
|
+
* have hit a transient network blip that the parser couldn't extract
|
|
24
|
+
* a reset window from. Two consecutive strikes is the threshold:
|
|
25
|
+
* cheap on false positives, fast on true permanent-failures (user
|
|
26
|
+
* sees one failed run, not five).
|
|
27
|
+
*
|
|
28
|
+
* On any successful run for the same voice, the counter resets — so
|
|
29
|
+
* a flaky day doesn't accumulate into auto-disable forever.
|
|
30
|
+
*/
|
|
31
|
+
const settings_js_1 = require("./db/settings.js");
|
|
32
|
+
const voices_js_1 = require("./db/voices.js");
|
|
33
|
+
const COUNTER_KEY = (voiceId) => `voice_failures.${voiceId}`;
|
|
34
|
+
/**
|
|
35
|
+
* Strikes-before-disable threshold.
|
|
36
|
+
*
|
|
37
|
+
* Tuned for "fast on true permanent failures, conservative on
|
|
38
|
+
* transient noise". One strike risks a network-blip false positive;
|
|
39
|
+
* three+ strikes is too patient when the user's already complained.
|
|
40
|
+
*/
|
|
41
|
+
exports.AUTO_DISABLE_THRESHOLD = 2;
|
|
42
|
+
/**
|
|
43
|
+
* Pure decision function — exposed so tests don't need DB.
|
|
44
|
+
*
|
|
45
|
+
* Returns true when the runner should disable the voice based on the
|
|
46
|
+
* post-increment counter and whether the upstream promised recovery.
|
|
47
|
+
*/
|
|
48
|
+
function shouldAutoDisable(consecutiveFailures, hasResetAt) {
|
|
49
|
+
// Upstream promised recovery (true rate limit) — this isn't a
|
|
50
|
+
// permanent failure, just wait for the reset window.
|
|
51
|
+
if (hasResetAt)
|
|
52
|
+
return false;
|
|
53
|
+
return consecutiveFailures >= exports.AUTO_DISABLE_THRESHOLD;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Resolve a voice row by its lineage + model. Returns the first
|
|
57
|
+
* matching enabled voice, or null if none. Used by the runner to
|
|
58
|
+
* find the voice it just ran against without plumbing voice IDs
|
|
59
|
+
* through the entire dispatch pipeline.
|
|
60
|
+
*/
|
|
61
|
+
async function resolveVoice(lineage, model) {
|
|
62
|
+
if (!model)
|
|
63
|
+
return null;
|
|
64
|
+
const rows = await voices_js_1.voices.list({ lineage });
|
|
65
|
+
// Exact model match. Voice IDs aren't stable across (lineage, model)
|
|
66
|
+
// combinations (e.g. openrouter wraps with `openrouter:` prefix), so
|
|
67
|
+
// we match on `model_id` which is what the runner has at hand.
|
|
68
|
+
const match = rows.find((r) => r.model_id === model);
|
|
69
|
+
return match ? { id: match.id } : null;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Record a failure for the voice that ran (lineage + model).
|
|
73
|
+
*
|
|
74
|
+
* Increments the per-voice counter. If the post-increment counter
|
|
75
|
+
* crosses AUTO_DISABLE_THRESHOLD AND the upstream did not provide a
|
|
76
|
+
* reset window, sets `voices.enabled=false` with
|
|
77
|
+
* `disabled_reason='auto_quota'`.
|
|
78
|
+
*
|
|
79
|
+
* Returns whether the voice was disabled by this call so the runner
|
|
80
|
+
* can surface a specific cli_warning in the run page.
|
|
81
|
+
*/
|
|
82
|
+
async function recordVoiceFailure(input) {
|
|
83
|
+
const voice = await resolveVoice(input.lineage, input.model);
|
|
84
|
+
if (!voice)
|
|
85
|
+
return { disabled: false, voiceId: null };
|
|
86
|
+
// Skip the counter entirely when the upstream promised recovery.
|
|
87
|
+
// True rate limits should not contribute to the strike count —
|
|
88
|
+
// otherwise a transient daily-quota hit + a later permanent
|
|
89
|
+
// failure would trip the threshold on the first permanent strike
|
|
90
|
+
// instead of the second.
|
|
91
|
+
if (input.hasResetAt) {
|
|
92
|
+
return { disabled: false, voiceId: voice.id };
|
|
93
|
+
}
|
|
94
|
+
const key = COUNTER_KEY(voice.id);
|
|
95
|
+
const raw = await settings_js_1.settings.get(key);
|
|
96
|
+
const previous = typeof raw === 'number' && Number.isFinite(raw) ? raw : 0;
|
|
97
|
+
const next = previous + 1;
|
|
98
|
+
await settings_js_1.settings.set(key, next);
|
|
99
|
+
if (shouldAutoDisable(next, input.hasResetAt)) {
|
|
100
|
+
await voices_js_1.voices.update(voice.id, {
|
|
101
|
+
enabled: false,
|
|
102
|
+
disabled_reason: 'auto_quota',
|
|
103
|
+
});
|
|
104
|
+
// Reset the counter so a future re-enable doesn't trip on
|
|
105
|
+
// stale state.
|
|
106
|
+
await settings_js_1.settings.set(key, 0);
|
|
107
|
+
return { disabled: true, voiceId: voice.id };
|
|
108
|
+
}
|
|
109
|
+
return { disabled: false, voiceId: voice.id };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Reset the failure counter for a voice after a successful run.
|
|
113
|
+
*
|
|
114
|
+
* Called from the runner's participant_done path. Bounded — a
|
|
115
|
+
* voice that succeeds once a day clears its counter, so a flaky
|
|
116
|
+
* day can't accumulate into permanent auto-disable.
|
|
117
|
+
*/
|
|
118
|
+
async function recordVoiceSuccess(input) {
|
|
119
|
+
const voice = await resolveVoice(input.lineage, input.model);
|
|
120
|
+
if (!voice)
|
|
121
|
+
return;
|
|
122
|
+
const key = COUNTER_KEY(voice.id);
|
|
123
|
+
const raw = await settings_js_1.settings.get(key);
|
|
124
|
+
// Skip the write when the counter is already 0 — saves a DB roundtrip
|
|
125
|
+
// on the hot success path.
|
|
126
|
+
if (typeof raw === 'number' && raw > 0) {
|
|
127
|
+
await settings_js_1.settings.set(key, 0);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Internal — exported only for tests.
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
exports._testing = {
|
|
135
|
+
COUNTER_KEY,
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=voice-failure-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-failure-tracker.js","sourceRoot":"","sources":["../../src/lib/voice-failure-tracker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chorus-codes",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.30",
|
|
4
4
|
"description": "Driver-agnostic multi-LLM peer review for code decisions. Bring your own CLI; Chorus convenes 2-4 other LLMs to review the work before you ship.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "99x Agency",
|