@urateam/core 0.1.31 → 0.1.33
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/__tests__/agent-stream.test.js +35 -1
- package/dist/__tests__/agent-stream.test.js.map +1 -1
- package/dist/__tests__/audit-immutability.test.js +7 -1
- package/dist/__tests__/audit-immutability.test.js.map +1 -1
- package/dist/__tests__/auth-monitor.test.d.ts +2 -0
- package/dist/__tests__/auth-monitor.test.d.ts.map +1 -0
- package/dist/__tests__/auth-monitor.test.js +253 -0
- package/dist/__tests__/auth-monitor.test.js.map +1 -0
- package/dist/__tests__/bec-186-repro.test.d.ts +16 -0
- package/dist/__tests__/bec-186-repro.test.d.ts.map +1 -0
- package/dist/__tests__/bec-186-repro.test.js +223 -0
- package/dist/__tests__/bec-186-repro.test.js.map +1 -0
- package/dist/__tests__/control-signals.test.d.ts +2 -0
- package/dist/__tests__/control-signals.test.d.ts.map +1 -0
- package/dist/__tests__/control-signals.test.js +77 -0
- package/dist/__tests__/control-signals.test.js.map +1 -0
- package/dist/__tests__/db-migrations.test.d.ts +2 -0
- package/dist/__tests__/db-migrations.test.d.ts.map +1 -0
- package/dist/__tests__/db-migrations.test.js +237 -0
- package/dist/__tests__/db-migrations.test.js.map +1 -0
- package/dist/__tests__/executor-issue-id.test.js +2 -0
- package/dist/__tests__/executor-issue-id.test.js.map +1 -1
- package/dist/__tests__/pm-slack-interface.test.js +45 -0
- package/dist/__tests__/pm-slack-interface.test.js.map +1 -1
- package/dist/__tests__/pm-triage.test.js +101 -0
- package/dist/__tests__/pm-triage.test.js.map +1 -1
- package/dist/__tests__/post-fanout-comments.test.js +36 -0
- package/dist/__tests__/post-fanout-comments.test.js.map +1 -1
- package/dist/__tests__/preflight-claude-auth.test.d.ts +2 -0
- package/dist/__tests__/preflight-claude-auth.test.d.ts.map +1 -0
- package/dist/__tests__/preflight-claude-auth.test.js +36 -0
- package/dist/__tests__/preflight-claude-auth.test.js.map +1 -0
- package/dist/__tests__/resolve-claude-auth.test.d.ts +2 -0
- package/dist/__tests__/resolve-claude-auth.test.d.ts.map +1 -0
- package/dist/__tests__/resolve-claude-auth.test.js +129 -0
- package/dist/__tests__/resolve-claude-auth.test.js.map +1 -0
- package/dist/__tests__/stage-models.test.js +4 -0
- package/dist/__tests__/stage-models.test.js.map +1 -1
- package/dist/__tests__/util-linear.test.d.ts +10 -0
- package/dist/__tests__/util-linear.test.d.ts.map +1 -0
- package/dist/__tests__/util-linear.test.js +244 -0
- package/dist/__tests__/util-linear.test.js.map +1 -0
- package/dist/audit/events.d.ts +37 -0
- package/dist/audit/events.d.ts.map +1 -1
- package/dist/audit/events.js +53 -0
- package/dist/audit/events.js.map +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +8 -0
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrations/postgres/014_missing_indexes.sql +28 -0
- package/dist/db/migrations/sqlite/013_missing_indexes.sql +28 -0
- package/dist/executor/agent-stream.d.ts +16 -0
- package/dist/executor/agent-stream.d.ts.map +1 -1
- package/dist/executor/agent-stream.js +43 -1
- package/dist/executor/agent-stream.js.map +1 -1
- package/dist/executor/auth-check.d.ts +39 -0
- package/dist/executor/auth-check.d.ts.map +1 -1
- package/dist/executor/auth-check.js +31 -0
- package/dist/executor/auth-check.js.map +1 -1
- package/dist/executor/auth-monitor.d.ts +40 -0
- package/dist/executor/auth-monitor.d.ts.map +1 -0
- package/dist/executor/auth-monitor.js +114 -0
- package/dist/executor/auth-monitor.js.map +1 -0
- package/dist/executor/executor.d.ts.map +1 -1
- package/dist/executor/executor.js +7 -2
- package/dist/executor/executor.js.map +1 -1
- package/dist/executor/index.d.ts +2 -0
- package/dist/executor/index.d.ts.map +1 -1
- package/dist/executor/index.js +2 -0
- package/dist/executor/index.js.map +1 -1
- package/dist/executor/review/post-fanout-comments.d.ts +8 -0
- package/dist/executor/review/post-fanout-comments.d.ts.map +1 -1
- package/dist/executor/review/post-fanout-comments.js +23 -3
- package/dist/executor/review/post-fanout-comments.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/notifier/composite.d.ts +1 -0
- package/dist/notifier/composite.d.ts.map +1 -1
- package/dist/notifier/composite.js +3 -0
- package/dist/notifier/composite.js.map +1 -1
- package/dist/notifier/linear.d.ts +1 -0
- package/dist/notifier/linear.d.ts.map +1 -1
- package/dist/notifier/linear.js +7 -0
- package/dist/notifier/linear.js.map +1 -1
- package/dist/pipeline/control-signals.d.ts +49 -0
- package/dist/pipeline/control-signals.d.ts.map +1 -0
- package/dist/pipeline/control-signals.js +93 -0
- package/dist/pipeline/control-signals.js.map +1 -0
- package/dist/pipeline/feedback-pipeline.d.ts +140 -0
- package/dist/pipeline/feedback-pipeline.d.ts.map +1 -0
- package/dist/pipeline/feedback-pipeline.js +427 -0
- package/dist/pipeline/feedback-pipeline.js.map +1 -0
- package/dist/pipeline/index.d.ts +1 -0
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +1 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/pipeline/runner.d.ts +49 -33
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +143 -350
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/pm/actions/promote.d.ts.map +1 -1
- package/dist/pm/actions/promote.js +15 -11
- package/dist/pm/actions/promote.js.map +1 -1
- package/dist/pm/actions/recover-stuck.d.ts.map +1 -1
- package/dist/pm/actions/recover-stuck.js +9 -5
- package/dist/pm/actions/recover-stuck.js.map +1 -1
- package/dist/pm/actions/triage.d.ts.map +1 -1
- package/dist/pm/actions/triage.js +67 -1
- package/dist/pm/actions/triage.js.map +1 -1
- package/dist/pm/linear-helpers.d.ts +10 -0
- package/dist/pm/linear-helpers.d.ts.map +1 -1
- package/dist/pm/linear-helpers.js +13 -21
- package/dist/pm/linear-helpers.js.map +1 -1
- package/dist/pm/pause-state.d.ts +29 -0
- package/dist/pm/pause-state.d.ts.map +1 -0
- package/dist/pm/pause-state.js +34 -0
- package/dist/pm/pause-state.js.map +1 -0
- package/dist/pm/scheduler.d.ts.map +1 -1
- package/dist/pm/scheduler.js +19 -0
- package/dist/pm/scheduler.js.map +1 -1
- package/dist/pm/slack-bulk.d.ts +34 -0
- package/dist/pm/slack-bulk.d.ts.map +1 -0
- package/dist/pm/slack-bulk.js +110 -0
- package/dist/pm/slack-bulk.js.map +1 -0
- package/dist/pm/slack-commands.d.ts +101 -0
- package/dist/pm/slack-commands.d.ts.map +1 -0
- package/dist/pm/slack-commands.js +309 -0
- package/dist/pm/slack-commands.js.map +1 -0
- package/dist/pm/slack-helpers.d.ts +10 -0
- package/dist/pm/slack-helpers.d.ts.map +1 -1
- package/dist/pm/slack-helpers.js +32 -0
- package/dist/pm/slack-helpers.js.map +1 -1
- package/dist/pm/slack-interface.d.ts +32 -58
- package/dist/pm/slack-interface.d.ts.map +1 -1
- package/dist/pm/slack-interface.js +150 -320
- package/dist/pm/slack-interface.js.map +1 -1
- package/dist/rbac/matrix.d.ts +2 -0
- package/dist/rbac/matrix.d.ts.map +1 -1
- package/dist/rbac/matrix.js +2 -0
- package/dist/rbac/matrix.js.map +1 -1
- package/dist/release-manager/index.d.ts +2 -0
- package/dist/release-manager/index.d.ts.map +1 -1
- package/dist/release-manager/index.js +2 -0
- package/dist/release-manager/index.js.map +1 -1
- package/dist/release-manager/release-helpers.d.ts +112 -0
- package/dist/release-manager/release-helpers.d.ts.map +1 -0
- package/dist/release-manager/release-helpers.js +164 -0
- package/dist/release-manager/release-helpers.js.map +1 -0
- package/dist/release-manager/release-tick.d.ts +101 -0
- package/dist/release-manager/release-tick.d.ts.map +1 -0
- package/dist/release-manager/release-tick.js +374 -0
- package/dist/release-manager/release-tick.js.map +1 -0
- package/dist/release-manager/scheduler.d.ts +28 -3
- package/dist/release-manager/scheduler.d.ts.map +1 -1
- package/dist/release-manager/scheduler.js +41 -417
- package/dist/release-manager/scheduler.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -0
- package/dist/server.js.map +1 -1
- package/dist/sync/gh-linear-sync.d.ts.map +1 -1
- package/dist/sync/gh-linear-sync.js +2 -2
- package/dist/sync/gh-linear-sync.js.map +1 -1
- package/dist/types.d.ts +22 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -1
- package/dist/util/linear.d.ts +70 -0
- package/dist/util/linear.d.ts.map +1 -0
- package/dist/util/linear.js +108 -0
- package/dist/util/linear.js.map +1 -0
- package/dist/webhook/github-handler.d.ts +7 -1
- package/dist/webhook/github-handler.d.ts.map +1 -1
- package/dist/webhook/github-handler.js +82 -38
- package/dist/webhook/github-handler.js.map +1 -1
- package/package.json +1 -1
|
@@ -38,6 +38,18 @@ export class StagePreStreamStalledError extends Error {
|
|
|
38
38
|
this.name = "StagePreStreamStalledError";
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Thrown when a stage's agent stream is interrupted via the abort signal
|
|
43
|
+
* (operator-initiated cancel). Distinct from the timeout errors because the
|
|
44
|
+
* runner uses the error class to decide how to mark the run (`aborted`, not
|
|
45
|
+
* `failed`).
|
|
46
|
+
*/
|
|
47
|
+
export class StageCancelledError extends Error {
|
|
48
|
+
constructor() {
|
|
49
|
+
super("stage cancelled by operator");
|
|
50
|
+
this.name = "StageCancelledError";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
41
53
|
/**
|
|
42
54
|
* Consume an Agent SDK message stream, accumulating token usage and
|
|
43
55
|
* extracting the last assistant text content.
|
|
@@ -47,6 +59,11 @@ export class StagePreStreamStalledError extends Error {
|
|
|
47
59
|
* the iteration boilerplate.
|
|
48
60
|
*/
|
|
49
61
|
export async function consumeAgentStream(messages, options) {
|
|
62
|
+
// Honour a pre-aborted signal immediately so callers can short-circuit
|
|
63
|
+
// without paying for an iterator setup.
|
|
64
|
+
if (options?.abortSignal?.aborted) {
|
|
65
|
+
throw new StageCancelledError();
|
|
66
|
+
}
|
|
50
67
|
let inputTokens = 0;
|
|
51
68
|
let outputTokens = 0;
|
|
52
69
|
let cacheCreationInputTokens = 0;
|
|
@@ -66,6 +83,7 @@ export async function consumeAgentStream(messages, options) {
|
|
|
66
83
|
let firstMessageReceived = false;
|
|
67
84
|
const iterator = messages[Symbol.asyncIterator]();
|
|
68
85
|
const STALLED = { __stalled: true };
|
|
86
|
+
const ABORTED = { __aborted: true };
|
|
69
87
|
while (true) {
|
|
70
88
|
const stallRemaining = stallTimeoutMs - (Date.now() - lastTokenAdvanceAt);
|
|
71
89
|
// First-message timeout: only active until the first real message arrives.
|
|
@@ -86,9 +104,33 @@ export async function consumeAgentStream(messages, options) {
|
|
|
86
104
|
const stallPromise = new Promise((resolve) => {
|
|
87
105
|
stallTimer = setTimeout(() => resolve(STALLED), remainingUntilTimeout);
|
|
88
106
|
});
|
|
89
|
-
|
|
107
|
+
// Race the abort signal in alongside next + stallPromise. We re-create the
|
|
108
|
+
// listener each iteration so it cleans up automatically (removeEventListener
|
|
109
|
+
// below) and an external abort fires within one iteration tick.
|
|
110
|
+
let abortListener;
|
|
111
|
+
const abortPromise = new Promise((resolve) => {
|
|
112
|
+
if (!options?.abortSignal)
|
|
113
|
+
return; // Promise never resolves — Promise.race ignores it
|
|
114
|
+
if (options.abortSignal.aborted) {
|
|
115
|
+
resolve(ABORTED);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
abortListener = () => resolve(ABORTED);
|
|
119
|
+
options.abortSignal.addEventListener("abort", abortListener, { once: true });
|
|
120
|
+
});
|
|
121
|
+
const raced = await Promise.race([next, stallPromise, abortPromise]);
|
|
90
122
|
if (stallTimer)
|
|
91
123
|
clearTimeout(stallTimer);
|
|
124
|
+
if (abortListener && options?.abortSignal) {
|
|
125
|
+
options.abortSignal.removeEventListener("abort", abortListener);
|
|
126
|
+
}
|
|
127
|
+
if (raced === ABORTED) {
|
|
128
|
+
// Operator-initiated cancel. Same .return() best-effort cleanup as the
|
|
129
|
+
// stall path; the agent generator may be parked on a never-resolving
|
|
130
|
+
// await, in which case GC handles eventual release.
|
|
131
|
+
iterator.return?.()?.catch((err) => log.debug({ err }, "iterator cleanup failed on abort"));
|
|
132
|
+
throw new StageCancelledError();
|
|
133
|
+
}
|
|
92
134
|
if (raced === STALLED) {
|
|
93
135
|
// Defensive race-loss check: if the iterator settled in the same tick
|
|
94
136
|
// as the timer fired, prefer the message we already have. The
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-stream.js","sourceRoot":"","sources":["../../src/executor/agent-stream.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;AAwBvD;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAExB;IACA;IAFlB,YACkB,YAAoB,EACpB,SAA6F;QAE7G,KAAK,CACH,6CAA6C,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI;YAC9E,iBAAiB,SAAS,CAAC,YAAY,WAAW,SAAS,CAAC,KAAK,kBAAkB,SAAS,CAAC,YAAY,GAAG,CAC/G,CAAC;QANc,iBAAY,GAAZ,YAAY,CAAQ;QACpB,cAAS,GAAT,SAAS,CAAoF;QAM7G,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACvB;IAA5B,YAA4B,SAAiB;QAC3C,KAAK,CACH,uDAAuD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CACnG,CAAC;QAHwB,cAAS,GAAT,SAAS,CAAQ;QAI3C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgC,EAChC,
|
|
1
|
+
{"version":3,"file":"agent-stream.js","sourceRoot":"","sources":["../../src/executor/agent-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The resolved Claude authentication method.
|
|
3
|
+
* Precedence: CLAUDE_CODE_OAUTH_TOKEN → ANTHROPIC_API_KEY → mounted session.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately does NOT surface the raw token value: the Agent SDK reads
|
|
6
|
+
* CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY from `process.env` directly,
|
|
7
|
+
* so callers never need it. Returning the credential value here would make
|
|
8
|
+
* it easy for a future caller to accidentally serialise the whole struct
|
|
9
|
+
* into a log line and leak the token (pino, console, audit payloads, etc.).
|
|
10
|
+
*/
|
|
11
|
+
export interface ClaudeAuthCredentials {
|
|
12
|
+
/**
|
|
13
|
+
* Which auth path was selected:
|
|
14
|
+
* - "oauth-token" — CLAUDE_CODE_OAUTH_TOKEN env var is present (long-lived
|
|
15
|
+
* programmatic token produced by `claude setup-token`, bills against
|
|
16
|
+
* Pro/Max subscription, no weekly expiry)
|
|
17
|
+
* - "api-key" — ANTHROPIC_API_KEY env var is present (pay-per-token,
|
|
18
|
+
* no expiry)
|
|
19
|
+
* - "session" — neither env var is set; falls back to the locally
|
|
20
|
+
* mounted `claude login` session (~/.config/claude/), which expires ~weekly
|
|
21
|
+
*/
|
|
22
|
+
method: "oauth-token" | "api-key" | "session";
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Resolve which Claude auth method is active based on environment variables.
|
|
26
|
+
* Implements the precedence order documented in deploy/CLAUDE_AUTH.md:
|
|
27
|
+
* 1. CLAUDE_CODE_OAUTH_TOKEN (long-lived, subscription-billed)
|
|
28
|
+
* 2. ANTHROPIC_API_KEY (long-lived, pay-per-token)
|
|
29
|
+
* 3. Local CLI session (mounted credentials, ~weekly expiry)
|
|
30
|
+
*
|
|
31
|
+
* Call this once per executeStage invocation so the auth method is logged
|
|
32
|
+
* alongside the stage, run-id, and issue-id fields for observability.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveClaudeAuth(): ClaudeAuthCredentials;
|
|
1
35
|
/**
|
|
2
36
|
* Validates Claude auth credentials by running `claude auth status`.
|
|
3
37
|
* Results are cached for 5 minutes to avoid hammering the CLI on every call.
|
|
4
38
|
* Uses a single-flight pattern so concurrent callers share one subprocess.
|
|
5
39
|
* Returns true if auth is valid, false otherwise.
|
|
40
|
+
*
|
|
41
|
+
* **Short-circuits to true when CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY
|
|
42
|
+
* is present** — those paths have no session-lifetime semantics and the
|
|
43
|
+
* subprocess check is unnecessary (and would be incorrect if no local
|
|
44
|
+
* `claude` CLI is installed).
|
|
6
45
|
*/
|
|
7
46
|
export declare function isClaudeAuthValid(): Promise<boolean>;
|
|
8
47
|
/** Reset the cached auth check (e.g., after a refresh attempt). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-check.d.ts","sourceRoot":"","sources":["../../src/executor/auth-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-check.d.ts","sourceRoot":"","sources":["../../src/executor/auth-check.ts"],"names":[],"mappings":"AAcA;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;;;;;OASG;IACH,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,SAAS,CAAC;CAC/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,qBAAqB,CAQzD;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAmC1D;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C"}
|
|
@@ -5,13 +5,44 @@ let lastCheckTime = 0;
|
|
|
5
5
|
let lastCheckResult = false;
|
|
6
6
|
let inflightCheck = null;
|
|
7
7
|
const CHECK_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
|
|
8
|
+
/**
|
|
9
|
+
* Resolve which Claude auth method is active based on environment variables.
|
|
10
|
+
* Implements the precedence order documented in deploy/CLAUDE_AUTH.md:
|
|
11
|
+
* 1. CLAUDE_CODE_OAUTH_TOKEN (long-lived, subscription-billed)
|
|
12
|
+
* 2. ANTHROPIC_API_KEY (long-lived, pay-per-token)
|
|
13
|
+
* 3. Local CLI session (mounted credentials, ~weekly expiry)
|
|
14
|
+
*
|
|
15
|
+
* Call this once per executeStage invocation so the auth method is logged
|
|
16
|
+
* alongside the stage, run-id, and issue-id fields for observability.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveClaudeAuth() {
|
|
19
|
+
if (process.env.CLAUDE_CODE_OAUTH_TOKEN) {
|
|
20
|
+
return { method: "oauth-token" };
|
|
21
|
+
}
|
|
22
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
23
|
+
return { method: "api-key" };
|
|
24
|
+
}
|
|
25
|
+
return { method: "session" };
|
|
26
|
+
}
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// isClaudeAuthValid — session-lifetime gate for the mounted-session path
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
8
30
|
/**
|
|
9
31
|
* Validates Claude auth credentials by running `claude auth status`.
|
|
10
32
|
* Results are cached for 5 minutes to avoid hammering the CLI on every call.
|
|
11
33
|
* Uses a single-flight pattern so concurrent callers share one subprocess.
|
|
12
34
|
* Returns true if auth is valid, false otherwise.
|
|
35
|
+
*
|
|
36
|
+
* **Short-circuits to true when CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY
|
|
37
|
+
* is present** — those paths have no session-lifetime semantics and the
|
|
38
|
+
* subprocess check is unnecessary (and would be incorrect if no local
|
|
39
|
+
* `claude` CLI is installed).
|
|
13
40
|
*/
|
|
14
41
|
export async function isClaudeAuthValid() {
|
|
42
|
+
// Long-lived token paths — no session-lifetime semantics, always valid.
|
|
43
|
+
if (process.env.CLAUDE_CODE_OAUTH_TOKEN || process.env.ANTHROPIC_API_KEY) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
15
46
|
const now = Date.now();
|
|
16
47
|
if (now - lastCheckTime < CHECK_INTERVAL_MS) {
|
|
17
48
|
return lastCheckResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-check.js","sourceRoot":"","sources":["../../src/executor/auth-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;AAErD,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,IAAI,aAAa,GAA4B,IAAI,CAAC;AAClD,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"auth-check.js","sourceRoot":"","sources":["../../src/executor/auth-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;AAErD,IAAI,aAAa,GAAG,CAAC,CAAC;AACtB,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,IAAI,aAAa,GAA4B,IAAI,CAAC;AAClD,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;AA8BrD;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC/B,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,wEAAwE;IACxE,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,GAAG,GAAG,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC5C,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,sEAAsE;IACtE,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC;IAExC,aAAa,GAAG,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;oBAClE,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,eAAe,GAAG,IAAI,CAAC;YACvB,GAAG,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,eAAe,GAAG,KAAK,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QACxF,CAAC;gBAAS,CAAC;YACT,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,mBAAmB;IACjC,aAAa,GAAG,CAAC,CAAC;IAClB,eAAe,GAAG,KAAK,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { AnyDb } from "../db/client.js";
|
|
2
|
+
/** Default check interval: 6 hours */
|
|
3
|
+
export declare const AUTH_MONITOR_INTERVAL_MS: number;
|
|
4
|
+
export interface AuthMonitorOptions {
|
|
5
|
+
/** Slack bot token for posting alerts. Optional — skips Slack if absent. */
|
|
6
|
+
slackBotToken?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Slack channel ID for auth expiry alerts.
|
|
9
|
+
* Typically PM_AGENT_SLACK_CHANNEL_ID when SLACK_ERROR_ALERTS=true.
|
|
10
|
+
*/
|
|
11
|
+
slackErrorChannel?: string;
|
|
12
|
+
/** Database for writing claude.auth_expired audit events. Optional. */
|
|
13
|
+
db?: AnyDb;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Run the periodic Claude auth health-check.
|
|
17
|
+
*
|
|
18
|
+
* Call this from the PM scheduler tick with a 6-hour throttle. The function
|
|
19
|
+
* is idempotent and safe to call more frequently — it will no-op until the
|
|
20
|
+
* interval has elapsed.
|
|
21
|
+
*
|
|
22
|
+
* @param lastCheckTime - Unix-ms timestamp of the last successful check run.
|
|
23
|
+
* Pass 0 on first call. The caller stores and passes back the returned value.
|
|
24
|
+
* @returns Updated lastCheckTime (pass back on next call).
|
|
25
|
+
*/
|
|
26
|
+
export declare function runAuthMonitorCheck(lastCheckTime: number, opts: AuthMonitorOptions, intervalMs?: number): Promise<number>;
|
|
27
|
+
/**
|
|
28
|
+
* Stateful AuthMonitor factory.
|
|
29
|
+
* Creates a closure that tracks `lastCheckTime` across repeated calls,
|
|
30
|
+
* so callers don't need to manage the timestamp themselves.
|
|
31
|
+
*/
|
|
32
|
+
export declare function createAuthMonitor(opts: AuthMonitorOptions, intervalMs?: number): {
|
|
33
|
+
/**
|
|
34
|
+
* Run the auth check if the interval has elapsed.
|
|
35
|
+
* Fire-and-forget safe — errors are logged but never thrown.
|
|
36
|
+
*/
|
|
37
|
+
tick(): Promise<void>;
|
|
38
|
+
};
|
|
39
|
+
export type AuthMonitor = ReturnType<typeof createAuthMonitor>;
|
|
40
|
+
//# sourceMappingURL=auth-monitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-monitor.d.ts","sourceRoot":"","sources":["../../src/executor/auth-monitor.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAI7C,sCAAsC;AACtC,eAAO,MAAM,wBAAwB,QAAqB,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,kBAAkB,EACxB,UAAU,SAA2B,GACpC,OAAO,CAAC,MAAM,CAAC,CAkEjB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,EAAE,UAAU,SAA2B;IAI7F;;;OAGG;YACW,OAAO,CAAC,IAAI,CAAC;EAQ9B;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthMonitor — periodic Claude session health-check (BEC-207).
|
|
3
|
+
*
|
|
4
|
+
* Defence-in-depth for operators still using the mounted-session auth path
|
|
5
|
+
* (`claude login` / ~/.config/claude/). The monitor runs every 6 hours:
|
|
6
|
+
*
|
|
7
|
+
* - When CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY is set → returns
|
|
8
|
+
* immediately (long-lived token paths have no session-lifetime semantics).
|
|
9
|
+
* - Otherwise → runs `claude auth status`. On failure: fires a Slack alert
|
|
10
|
+
* to the configured error channel and writes a `claude.auth_expired` audit
|
|
11
|
+
* event so operators can correlate expiry with pipeline failures.
|
|
12
|
+
*
|
|
13
|
+
* The monitor is registered as a step inside the PM scheduler tick so it runs
|
|
14
|
+
* on the same cadence as the PM agent's own health checks.
|
|
15
|
+
*/
|
|
16
|
+
import { execFile } from "node:child_process";
|
|
17
|
+
import { createLogger } from "../logger.js";
|
|
18
|
+
import { postSlackMessage } from "../pm/slack-helpers.js";
|
|
19
|
+
import { claudeAuthExpiredEvent } from "../audit/events.js";
|
|
20
|
+
import { logAuditEventUnchecked } from "../audit/writer.js";
|
|
21
|
+
import { resetAuthCheckCache } from "./auth-check.js";
|
|
22
|
+
const log = createLogger({ component: "AuthMonitor" });
|
|
23
|
+
/** Default check interval: 6 hours */
|
|
24
|
+
export const AUTH_MONITOR_INTERVAL_MS = 6 * 60 * 60 * 1000;
|
|
25
|
+
/**
|
|
26
|
+
* Run the periodic Claude auth health-check.
|
|
27
|
+
*
|
|
28
|
+
* Call this from the PM scheduler tick with a 6-hour throttle. The function
|
|
29
|
+
* is idempotent and safe to call more frequently — it will no-op until the
|
|
30
|
+
* interval has elapsed.
|
|
31
|
+
*
|
|
32
|
+
* @param lastCheckTime - Unix-ms timestamp of the last successful check run.
|
|
33
|
+
* Pass 0 on first call. The caller stores and passes back the returned value.
|
|
34
|
+
* @returns Updated lastCheckTime (pass back on next call).
|
|
35
|
+
*/
|
|
36
|
+
export async function runAuthMonitorCheck(lastCheckTime, opts, intervalMs = AUTH_MONITOR_INTERVAL_MS) {
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
if (now - lastCheckTime < intervalMs) {
|
|
39
|
+
return lastCheckTime; // Not time to check yet
|
|
40
|
+
}
|
|
41
|
+
// BEC-207: env-var paths have no session-lifetime semantics — skip.
|
|
42
|
+
if (process.env.CLAUDE_CODE_OAUTH_TOKEN || process.env.ANTHROPIC_API_KEY) {
|
|
43
|
+
log.debug("AuthMonitor: env-var auth path detected, skipping session check");
|
|
44
|
+
return now;
|
|
45
|
+
}
|
|
46
|
+
log.info("AuthMonitor: checking mounted Claude session validity");
|
|
47
|
+
// Force a fresh subprocess call (bypass the 5-min cache in isClaudeAuthValid)
|
|
48
|
+
resetAuthCheckCache();
|
|
49
|
+
const valid = await new Promise((resolve) => {
|
|
50
|
+
execFile("claude", ["auth", "status"], { timeout: 15_000 }, (err) => {
|
|
51
|
+
resolve(!err);
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
if (valid) {
|
|
55
|
+
log.debug("AuthMonitor: mounted session is valid");
|
|
56
|
+
return now;
|
|
57
|
+
}
|
|
58
|
+
// Session invalid — alert and record.
|
|
59
|
+
log.error("AuthMonitor: mounted Claude session expired. " +
|
|
60
|
+
"Run `claude login` in the container, or switch to CLAUDE_CODE_OAUTH_TOKEN (see deploy/CLAUDE_AUTH.md).");
|
|
61
|
+
// Slack alert
|
|
62
|
+
if (opts.slackBotToken && opts.slackErrorChannel) {
|
|
63
|
+
try {
|
|
64
|
+
await postSlackMessage(opts.slackBotToken, {
|
|
65
|
+
channel: opts.slackErrorChannel,
|
|
66
|
+
text: "⚠ *Claude session auth expired* — new pipeline runs will fail immediately.\n" +
|
|
67
|
+
"Fix: `docker compose exec <service> claude login`\n" +
|
|
68
|
+
"Or switch to `CLAUDE_CODE_OAUTH_TOKEN` (run `claude setup-token` once). " +
|
|
69
|
+
"See `deploy/CLAUDE_AUTH.md` for details.",
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
log.warn({ err }, "AuthMonitor: failed to post Slack alert");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Audit event.
|
|
77
|
+
//
|
|
78
|
+
// We use `logAuditEventUnchecked` (which bypasses the `audit-log` Enterprise
|
|
79
|
+
// feature gate) deliberately: a Claude-session expiry is an operational
|
|
80
|
+
// signal that any operator needs to see regardless of license tier. The
|
|
81
|
+
// alternative — `logAuditEvent` — would silently drop the event in OSS and
|
|
82
|
+
// Pro deployments where `audit-log` isn't licensed, leaving the operator
|
|
83
|
+
// wondering why their pipeline runs started failing en masse with no
|
|
84
|
+
// visible event in the audit dashboard. CLAUDE.md's list of bypass call
|
|
85
|
+
// sites should include this one alongside `license.ts` and the Pro-tier
|
|
86
|
+
// PM/RM modules.
|
|
87
|
+
if (opts.db) {
|
|
88
|
+
void logAuditEventUnchecked(opts.db, claudeAuthExpiredEvent({ detectedAt: new Date() }));
|
|
89
|
+
}
|
|
90
|
+
return now;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Stateful AuthMonitor factory.
|
|
94
|
+
* Creates a closure that tracks `lastCheckTime` across repeated calls,
|
|
95
|
+
* so callers don't need to manage the timestamp themselves.
|
|
96
|
+
*/
|
|
97
|
+
export function createAuthMonitor(opts, intervalMs = AUTH_MONITOR_INTERVAL_MS) {
|
|
98
|
+
let lastCheckTime = 0;
|
|
99
|
+
return {
|
|
100
|
+
/**
|
|
101
|
+
* Run the auth check if the interval has elapsed.
|
|
102
|
+
* Fire-and-forget safe — errors are logged but never thrown.
|
|
103
|
+
*/
|
|
104
|
+
async tick() {
|
|
105
|
+
try {
|
|
106
|
+
lastCheckTime = await runAuthMonitorCheck(lastCheckTime, opts, intervalMs);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
log.warn({ err }, "AuthMonitor tick failed");
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=auth-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-monitor.js","sourceRoot":"","sources":["../../src/executor/auth-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executor/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,EAAE,EAAS,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAqBnE;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,EAChB,iBAAiB,EAAE,OAAO,GACzB,YAAY,CAKd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,EAAE,CAAC;IACP,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;kEAC8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;mFAE+E;IAC/E,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;kEAG8D;IAC9D,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/executor/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,UAAU,EACV,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,EAAE,EAAS,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAqBnE;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,SAAS,EAChB,iBAAiB,EAAE,OAAO,GACzB,YAAY,CAKd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,EAAE,CAAC;IACP,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;kEAC8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC;;mFAE+E;IAC/E,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC;;;kEAG8D;IAC9D,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAkRtB"}
|
|
@@ -8,7 +8,7 @@ import { buildStagePermissionOptions } from "./permissions.js";
|
|
|
8
8
|
import { resolveTooling } from "./mcp-resolver.js";
|
|
9
9
|
import { createLogger } from "../logger.js";
|
|
10
10
|
import { consumeAgentStream, StagePreStreamStalledError } from "./agent-stream.js";
|
|
11
|
-
import { isClaudeAuthValid } from "./auth-check.js";
|
|
11
|
+
import { isClaudeAuthValid, resolveClaudeAuth } from "./auth-check.js";
|
|
12
12
|
/**
|
|
13
13
|
* BEC-183: wall-clock stage timeouts. Independent of the in-stream watchdog
|
|
14
14
|
* (StageStalledError / StagePreStreamStalledError inside consumeAgentStream),
|
|
@@ -78,8 +78,13 @@ Do NOT run build, test, or lint commands directly on the host — always use \`d
|
|
|
78
78
|
let cacheCreationInputTokens = 0;
|
|
79
79
|
let cacheReadInputTokens = 0;
|
|
80
80
|
try {
|
|
81
|
+
// Resolve auth method before any SDK call (BEC-207). Logs which path is
|
|
82
|
+
// active (oauth-token / api-key / session) alongside the run context.
|
|
83
|
+
const claudeAuth = resolveClaudeAuth();
|
|
84
|
+
log.info({ authMethod: claudeAuth.method }, "Claude auth method resolved");
|
|
81
85
|
// Pre-flight auth check — fail fast with a clear message rather than
|
|
82
|
-
// burning tokens on a doomed run.
|
|
86
|
+
// burning tokens on a doomed run. Short-circuits to true for env-var
|
|
87
|
+
// auth paths (CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY).
|
|
83
88
|
if (!(await isClaudeAuthValid())) {
|
|
84
89
|
throw new Error("Claude auth credentials are invalid or expired. Run: docker compose exec <service> claude login");
|
|
85
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAsB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/executor/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAsB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;;;;;;GAOG;AACH,MAAM,2BAA2B,GAAoC;IACnE,SAAS,EAAE,EAAE,GAAG,MAAM,EAAE,oCAAoC;CAC7D,CAAC;AACF,MAAM,mCAAmC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,wBAAwB;AAEjF,oEAAoE;AACpE,MAAM,wBAAwB,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,QAAQ;AAErD;;;;;;GAMG;AACH,MAAM,UAAU,kCAAkC,CAChD,OAAqB,EACrB,KAAgB,EAChB,iBAA0B;IAE1B,IAAI,iBAAiB,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/C,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AA6BD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,MAAM,EACJ,KAAK,EACL,OAAO,EACP,KAAK,EACL,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,EACP,EAAE,EAAE,KAAK,GACV,GAAG,OAAO,CAAC;IAEZ,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,gBAAgB,GAAG,kCAAkC,CACzD,OAAO,EACP,KAAK,EACL,CAAC,CAAC,OAAO,CAAC,cAAc,CACzB,CAAC;IAEF,oEAAoE;IACpE,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3E,MAAM,EAAE,GAAG,KAAc,CAAC;IAC1B,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,cAAc,CACzB,KAAK,EACL,cAAc,EACd,UAAU,EACV,OAAO,EACP,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,oBAAoB,CAC7B,CAAC;IAEF,oFAAoF;IACpF,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QAChC,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,eAAe,CAAC;QACvD,MAAM,IAAI;;yCAE2B,OAAO,CAAC,mBAAmB,CAAC,YAAY;gDACjC,EAAE;;wBAE1B,CAAC;IACvB,CAAC;IAED,6DAA6D;IAC7D,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAChC,EAAE,EAAE,UAAU;QACd,aAAa,EAAE,KAAK;QACpB,KAAK;QACL,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,wBAAwB,GAAG,CAAC,CAAC;IACjC,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,wEAAwE;QACxE,sEAAsE;QACtE,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,6BAA6B,CAAC,CAAC;QAE3E,qEAAqE;QACrE,qEAAqE;QACrE,4DAA4D;QAC5D,IAAI,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;QACJ,CAAC;QAED,yDAAyD;QACzD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAC7C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACjE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAE9C,sDAAsD;QACtD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS;YAC/B,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC;YAC9D,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAEpC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,sBAAsB,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM;YACN,OAAO,EAAE;gBACP,YAAY,EAAE,gBAAgB,CAAC,KAAK;gBACpC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;gBACnC,GAAG,EAAE,OAAO;gBACZ,GAAG,2BAA2B,CAAC,KAAK,CAAC;gBACrC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK;oBACxD,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAM,EAAE;oBACpE,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpE;SACF,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAErC,0CAA0C;QAC1C,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,IAAI,QAAQ,GAA6E,EAAE,CAAC;QAE5F,KAAK,UAAU,aAAa;YAC1B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAClC,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,0EAA0E;QAC1E,4EAA4E;QAC5E,mEAAmE;QACnE,yEAAyE;QACzE,sCAAsC;QACtC,IAAI,wBAA4D,CAAC;QACjE,MAAM,mBAAmB,GAA2B;YAClD,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9C,wBAAwB,GAAG,IAAI,CAAC;gBAChC,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC;QAEF,yEAAyE;QACzE,wEAAwE;QACxE,6DAA6D;QAC7D,MAAM,cAAc,GAAG,2BAA2B,CAAC,KAAK,CAAC,IAAI,mCAAmC,CAAC;QACjG,IAAI,iBAA4D,CAAC;QACjE,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;YAC3D,iBAAiB,GAAG,UAAU,CAAC,GAAG,EAAE;gBAClC,MAAM,CAAC,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC;YACzD,CAAC,EAAE,cAAc,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YAChC,kBAAkB,CAAC,mBAAmB,EAAE;gBACtC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;oBACpB,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;gBAC7C,CAAC;gBACD,aAAa,EAAE,CAAC,GAAkB,EAAE,EAAE;oBACpC,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,MAAM,EAAE;wBACZ,UAAU,EAAE,UAAU;wBACtB,IAAI,EAAE,GAAG,CAAC,IAAK;wBACf,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;qBAC5C,CAAC,CAAC;oBACH,IAAI,QAAQ,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;wBAClC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,mCAAmC,CAAC,CAAC,CAAC;oBACzF,CAAC;gBACH,CAAC;gBACD,qBAAqB,EAAE,wBAAwB;aAChD,CAAC;YACF,mBAAmB;SACpB,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACxB,oEAAoE;YACpE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,kEAAkE;YAClE,qDAAqD;YACrD,wBAAwB,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACtD,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACd,yEAAyE;YACzE,yEAAyE;YACzE,8BAA8B;YAC9B,IAAI,iBAAiB;gBAAE,YAAY,CAAC,iBAAiB,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,aAAa,EAAE,CAAC;QAEtB,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACjC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACnC,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,CAAC;QAC3D,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;QACnD,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QACrB,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC;QAElC,+DAA+D;QAC/D,qEAAqE;QACrE,qEAAqE;QACrE,qEAAqE;QACrE,oEAAoE;QACpE,gDAAgD;QAChD,MAAM,aAAa,GAAG,MAAM,cAAc,CACxC,eAAe,EACf,KAAK,EACL,OAAO,EACP,KAAK,EACL,OAAO,EACP,UAAU,UAAU,CAAC,aAAa,EAAE,CACrC,CAAC;QAEF,MAAM,EAAE;aACL,MAAM,CAAC,SAAS,CAAC;aACjB,GAAG,CAAC;YACH,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,WAAW;YACX,YAAY;YACZ,wBAAwB;YACxB,oBAAoB;YACpB,KAAK;YACL,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;SACxD,CAAC;aACD,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvC,GAAG,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAClE,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,eAAe,EAAE,aAAa,CAAC,QAAQ;YACvC,mBAAmB,EAAE,aAAa,CAAC,UAAU;YAC7C,WAAW;YACX,YAAY;YACZ,KAAK;YACL,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,CAAC;QAE1C,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAChC,EAAE,EAAE,MAAM,EAAE;YACZ,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;SACrC,CAAC,CAAC;QAEH,MAAM,EAAE;aACL,MAAM,CAAC,SAAS,CAAC;aACjB,GAAG,CAAC;YACH,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,IAAI,IAAI,EAAE;YACvB,WAAW;YACX,YAAY;YACZ,wBAAwB;YACxB,oBAAoB;YACpB,KAAK;YACL,YAAY;SACb,CAAC;aACD,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,WAAW;YACX,YAAY;YACZ,KAAK;YACL,YAAY;YACZ,UAAU;SACX,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/dist/executor/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { agentProfiles, getAgentProfiles, DEFAULT_AGENT_PROFILES } from "./profiles.js";
|
|
2
|
+
export { resolveClaudeAuth, type ClaudeAuthCredentials } from "./auth-check.js";
|
|
3
|
+
export { createAuthMonitor, runAuthMonitorCheck, AUTH_MONITOR_INTERVAL_MS, type AuthMonitor } from "./auth-monitor.js";
|
|
2
4
|
export { checkTestQuality, analyzeTestFile, isTestFile, extractTestBlocks, TRIVIAL_MATCHERS, BEHAVIORAL_MATCHERS, TRIVIAL_THRESHOLD, type TestFileAnalysis, type TestQualityResult, } from "./test-quality.js";
|
|
3
5
|
export { parseHandoffArtifact } from "./handoff.js";
|
|
4
6
|
export { executeStage, type ExecuteStageContext } from "./executor.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC"}
|
package/dist/executor/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { agentProfiles, getAgentProfiles, DEFAULT_AGENT_PROFILES } from "./profiles.js";
|
|
2
|
+
export { resolveClaudeAuth } from "./auth-check.js";
|
|
3
|
+
export { createAuthMonitor, runAuthMonitorCheck, AUTH_MONITOR_INTERVAL_MS } from "./auth-monitor.js";
|
|
2
4
|
export { checkTestQuality, analyzeTestFile, isTestFile, extractTestBlocks, TRIVIAL_MATCHERS, BEHAVIORAL_MATCHERS, TRIVIAL_THRESHOLD, } from "./test-quality.js";
|
|
3
5
|
export { parseHandoffArtifact } from "./handoff.js";
|
|
4
6
|
export { executeStage } from "./executor.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAA4B,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,sBAAsB,GAGvB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAA8B,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,wBAAwB,EAAoB,MAAM,mBAAmB,CAAC;AACvH,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAGlB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAA4B,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AACtH,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,sBAAsB,GAGvB,MAAM,kBAAkB,CAAC"}
|
|
@@ -10,6 +10,14 @@ export interface PostFanoutResult {
|
|
|
10
10
|
* Audit events (`review.fanout_model_completed`) still fire for suppressed runs.
|
|
11
11
|
*/
|
|
12
12
|
suppressedEmptyCount: number;
|
|
13
|
+
/**
|
|
14
|
+
* Number of failed runs suppressed from PR comments because the failure is
|
|
15
|
+
* an upstream-provider fault (200 OK but no completion / `Provider returned
|
|
16
|
+
* error` from OpenRouter free-tier models). The run still records as failed
|
|
17
|
+
* in the DB and emits its audit event — we just don't post a noisy "Status:
|
|
18
|
+
* failed" comment on the PR for something the operator can't act on.
|
|
19
|
+
*/
|
|
20
|
+
suppressedProviderFailureCount: number;
|
|
13
21
|
}
|
|
14
22
|
export declare function postFanoutCommentsToPR(octokit: Octokit, owner: string, repo: string, prNumber: number, runs: ReviewModelRun[]): Promise<PostFanoutResult>;
|
|
15
23
|
export declare function renderRunMarkdown(run: ReviewModelRun): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-fanout-comments.d.ts","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"post-fanout-comments.d.ts","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,8BAA8B,EAAE,MAAM,CAAC;CACxC;AAgBD,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EAAE,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA4C3B;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,CA2C7D"}
|
|
@@ -1,17 +1,37 @@
|
|
|
1
1
|
import { addPRComment } from "../../repo/github.js";
|
|
2
2
|
import { createLogger } from "../../logger.js";
|
|
3
3
|
const log = createLogger({ component: "PostFanoutComments" });
|
|
4
|
+
/**
|
|
5
|
+
* Match the error class introduced by the openrouter-client when the upstream
|
|
6
|
+
* provider returns 200 OK with `{ error: ... }` and no `choices`. Repeats
|
|
7
|
+
* regularly for free-tier / community models (notably the nvidia free tier).
|
|
8
|
+
* Surfacing each such failure as a per-model PR comment was creating noise
|
|
9
|
+
* with no operator action — the right fix is to remove the model from
|
|
10
|
+
* REVIEW_MODELS, which the model-health probe already flags advisorily.
|
|
11
|
+
*/
|
|
12
|
+
function isUpstreamProviderError(run) {
|
|
13
|
+
if (run.status !== "failed")
|
|
14
|
+
return false;
|
|
15
|
+
const msg = run.errorMessage ?? "";
|
|
16
|
+
return msg.includes("openrouter response missing choices");
|
|
17
|
+
}
|
|
4
18
|
export async function postFanoutCommentsToPR(octokit, owner, repo, prNumber, runs) {
|
|
5
19
|
const toPost = [];
|
|
6
20
|
let suppressedEmptyCount = 0;
|
|
21
|
+
let suppressedProviderFailureCount = 0;
|
|
7
22
|
for (const run of runs) {
|
|
8
|
-
const
|
|
23
|
+
const isEmptySuccess = run.status !== "failed" &&
|
|
9
24
|
run.findings.length === 0 &&
|
|
10
25
|
run.rawOutput === undefined;
|
|
11
|
-
|
|
26
|
+
const isUpstreamFault = isUpstreamProviderError(run);
|
|
27
|
+
if (isEmptySuccess) {
|
|
12
28
|
suppressedEmptyCount++;
|
|
13
29
|
log.debug({ modelId: run.modelId }, "fanout: suppressing empty-findings comment (no findings, no rawOutput)");
|
|
14
30
|
}
|
|
31
|
+
else if (isUpstreamFault) {
|
|
32
|
+
suppressedProviderFailureCount++;
|
|
33
|
+
log.info({ modelId: run.modelId, err: run.errorMessage }, "fanout: suppressing upstream-provider failure from PR comment (DB row + audit event still recorded)");
|
|
34
|
+
}
|
|
15
35
|
else {
|
|
16
36
|
toPost.push(run);
|
|
17
37
|
}
|
|
@@ -24,7 +44,7 @@ export async function postFanoutCommentsToPR(octokit, owner, repo, prNumber, run
|
|
|
24
44
|
}
|
|
25
45
|
});
|
|
26
46
|
const fallbackCount = runs.filter((r) => r.rawOutput !== undefined).length;
|
|
27
|
-
return { fallbackCount, suppressedEmptyCount };
|
|
47
|
+
return { fallbackCount, suppressedEmptyCount, suppressedProviderFailureCount };
|
|
28
48
|
}
|
|
29
49
|
export function renderRunMarkdown(run) {
|
|
30
50
|
const tokens = `${run.inputTokens.toLocaleString()} in / ${run.outputTokens.toLocaleString()} out tokens`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-fanout-comments.js","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"post-fanout-comments.js","sourceRoot":"","sources":["../../../src/executor/review/post-fanout-comments.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export { createDb, isPostgres, sqlDateGroup, sqlDaysAgoFilter, type Db } from ".
|
|
|
11
11
|
export { pipelineRuns, stageRuns, agentLogs, activeWork, pmApprovals } from "./db/index.js";
|
|
12
12
|
export { createApp, type ServerConfig } from "./server.js";
|
|
13
13
|
export { PipelineRunner, type PipelineRunnerConfig, type LinearIssue } from "./pipeline/index.js";
|
|
14
|
+
export { type StopMode, requestRunStop, getStopSignal, clearStopSignal } from "./pipeline/index.js";
|
|
14
15
|
export { formatPRCostSummary, type StageCostBreakdown, type CostSummaryConfig, } from "./pipeline/cost-summary.js";
|
|
15
16
|
export { defaultConfigs, validatePipelineConfigs, validateRepoConfigs, applyDeepReviewPassesOverride, applyAutoMergeOverride, resolvePipeline } from "./pipeline/index.js";
|
|
16
17
|
export { createWebhookHandler } from "./webhook/index.js";
|
|
@@ -27,7 +28,8 @@ export { checkRequirements, buildRalphContext, type RalphCheckResult } from "./e
|
|
|
27
28
|
export { cleanupWorktrees } from "./repo/git.js";
|
|
28
29
|
export { sweepStaleAgentBranches, type SweepInput, type SweepResult, type SweptBranch, } from "./repo/agent-branch-sweep.js";
|
|
29
30
|
export { runAgentBranchSweep, type RunAgentBranchSweepDeps, } from "./repo/agent-branch-sweep-runner.js";
|
|
30
|
-
export { isClaudeAuthValid, resetAuthCheckCache } from "./executor/auth-check.js";
|
|
31
|
+
export { isClaudeAuthValid, resetAuthCheckCache, resolveClaudeAuth, type ClaudeAuthCredentials } from "./executor/auth-check.js";
|
|
32
|
+
export { createAuthMonitor, runAuthMonitorCheck, AUTH_MONITOR_INTERVAL_MS, type AuthMonitor } from "./executor/auth-monitor.js";
|
|
31
33
|
export type { GitHubConfig } from "./repo/github.js";
|
|
32
34
|
export { createGitHubClient } from "./repo/github.js";
|
|
33
35
|
export { buildGitHubConfigFromEnv } from "./repo/github-from-env.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,MAAM,eAAe,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACL,mBAAmB,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3K,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,KAAK,UAAU,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACjG,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|