@tokenfactory/acc-runner 0.40.26 → 0.40.28
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/attachments/allowlist.d.ts +16 -0
- package/dist/attachments/allowlist.d.ts.map +1 -0
- package/dist/attachments/allowlist.js +34 -0
- package/dist/attachments/allowlist.js.map +1 -0
- package/dist/attachments/content-block.d.ts +16 -0
- package/dist/attachments/content-block.d.ts.map +1 -0
- package/dist/attachments/content-block.js +38 -0
- package/dist/attachments/content-block.js.map +1 -0
- package/dist/attachments/fetch-attachment.d.ts +24 -0
- package/dist/attachments/fetch-attachment.d.ts.map +1 -0
- package/dist/attachments/fetch-attachment.js +55 -0
- package/dist/attachments/fetch-attachment.js.map +1 -0
- package/dist/attachments/index.d.ts +21 -0
- package/dist/attachments/index.d.ts.map +1 -0
- package/dist/attachments/index.js +20 -0
- package/dist/attachments/index.js.map +1 -0
- package/dist/attachments/types.d.ts +39 -0
- package/dist/attachments/types.d.ts.map +1 -0
- package/dist/attachments/types.js +9 -0
- package/dist/attachments/types.js.map +1 -0
- package/dist/chat-cancel/cancel-controller.d.ts +77 -0
- package/dist/chat-cancel/cancel-controller.d.ts.map +1 -0
- package/dist/chat-cancel/cancel-controller.js +148 -0
- package/dist/chat-cancel/cancel-controller.js.map +1 -0
- package/dist/chat-cancel/cancel-source.d.ts +37 -0
- package/dist/chat-cancel/cancel-source.d.ts.map +1 -0
- package/dist/chat-cancel/cancel-source.js +26 -0
- package/dist/chat-cancel/cancel-source.js.map +1 -0
- package/dist/chat-cancel/child-terminator.d.ts +37 -0
- package/dist/chat-cancel/child-terminator.d.ts.map +1 -0
- package/dist/chat-cancel/child-terminator.js +81 -0
- package/dist/chat-cancel/child-terminator.js.map +1 -0
- package/dist/chat-cancel/index.d.ts +21 -0
- package/dist/chat-cancel/index.d.ts.map +1 -0
- package/dist/chat-cancel/index.js +20 -0
- package/dist/chat-cancel/index.js.map +1 -0
- package/dist/chat-cancel/types.d.ts +69 -0
- package/dist/chat-cancel/types.d.ts.map +1 -0
- package/dist/chat-cancel/types.js +7 -0
- package/dist/chat-cancel/types.js.map +1 -0
- package/dist/claim-deadman/deadman.d.ts +152 -0
- package/dist/claim-deadman/deadman.d.ts.map +1 -0
- package/dist/claim-deadman/deadman.js +176 -0
- package/dist/claim-deadman/deadman.js.map +1 -0
- package/dist/claim-deadman/heartbeat-signal.d.ts +48 -0
- package/dist/claim-deadman/heartbeat-signal.d.ts.map +1 -0
- package/dist/claim-deadman/heartbeat-signal.js +31 -0
- package/dist/claim-deadman/heartbeat-signal.js.map +1 -0
- package/dist/claim-deadman/index.d.ts +19 -0
- package/dist/claim-deadman/index.d.ts.map +1 -0
- package/dist/claim-deadman/index.js +17 -0
- package/dist/claim-deadman/index.js.map +1 -0
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +45 -0
- package/dist/doctor.js.map +1 -1
- package/dist/git-auth/classify.d.ts +16 -0
- package/dist/git-auth/classify.d.ts.map +1 -0
- package/dist/git-auth/classify.js +51 -0
- package/dist/git-auth/classify.js.map +1 -0
- package/dist/git-auth/controller.d.ts +70 -0
- package/dist/git-auth/controller.d.ts.map +1 -0
- package/dist/git-auth/controller.js +83 -0
- package/dist/git-auth/controller.js.map +1 -0
- package/dist/git-auth/index.d.ts +14 -0
- package/dist/git-auth/index.d.ts.map +1 -0
- package/dist/git-auth/index.js +14 -0
- package/dist/git-auth/index.js.map +1 -0
- package/dist/git-auth/probe.d.ts +34 -0
- package/dist/git-auth/probe.d.ts.map +1 -0
- package/dist/git-auth/probe.js +72 -0
- package/dist/git-auth/probe.js.map +1 -0
- package/dist/watch.d.ts +112 -0
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +421 -2
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
export const DEFAULT_GIT_AUTH_FAILURE_THRESHOLD = 2;
|
|
2
|
+
export class GitAuthController {
|
|
3
|
+
deps;
|
|
4
|
+
threshold;
|
|
5
|
+
_degraded = false;
|
|
6
|
+
_consecutiveAuthFailures = 0;
|
|
7
|
+
_peakConsecutive = 0;
|
|
8
|
+
_lastDetail = "";
|
|
9
|
+
constructor(deps) {
|
|
10
|
+
this.deps = deps;
|
|
11
|
+
this.threshold = Math.max(1, Math.floor(deps.threshold ?? DEFAULT_GIT_AUTH_FAILURE_THRESHOLD));
|
|
12
|
+
}
|
|
13
|
+
get degraded() {
|
|
14
|
+
return this._degraded;
|
|
15
|
+
}
|
|
16
|
+
get consecutiveAuthFailures() {
|
|
17
|
+
return this._consecutiveAuthFailures;
|
|
18
|
+
}
|
|
19
|
+
snapshot() {
|
|
20
|
+
return {
|
|
21
|
+
degraded: this._degraded,
|
|
22
|
+
consecutiveAuthFailures: this._consecutiveAuthFailures,
|
|
23
|
+
lastDetail: this._lastDetail,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Run one probe, fold the result into the state machine, and fire the
|
|
28
|
+
* transition callback when (and only when) the degraded state flips. Never
|
|
29
|
+
* rejects: a throwing probe is treated as transient and a throwing callback is
|
|
30
|
+
* swallowed (best-effort emit).
|
|
31
|
+
*/
|
|
32
|
+
async check() {
|
|
33
|
+
let result;
|
|
34
|
+
try {
|
|
35
|
+
result = await this.deps.probe();
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
result = {
|
|
39
|
+
ok: false,
|
|
40
|
+
failureClass: "transient",
|
|
41
|
+
detail: err?.message?.split(/\r?\n/)[0] ?? String(err),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
this._lastDetail = result.detail;
|
|
45
|
+
await this.apply(result);
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
async apply(result) {
|
|
49
|
+
if (result.ok) {
|
|
50
|
+
const failuresBeforeRecovery = this._peakConsecutive;
|
|
51
|
+
this._consecutiveAuthFailures = 0;
|
|
52
|
+
this._peakConsecutive = 0;
|
|
53
|
+
if (this._degraded) {
|
|
54
|
+
this._degraded = false;
|
|
55
|
+
await this.fire(() => this.deps.onRecovered?.({ failuresBeforeRecovery, detail: result.detail }));
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
if (result.failureClass === "auth") {
|
|
60
|
+
this._consecutiveAuthFailures += 1;
|
|
61
|
+
this._peakConsecutive = Math.max(this._peakConsecutive, this._consecutiveAuthFailures);
|
|
62
|
+
if (!this._degraded && this._consecutiveAuthFailures >= this.threshold) {
|
|
63
|
+
this._degraded = true;
|
|
64
|
+
await this.fire(() => this.deps.onDegraded?.({
|
|
65
|
+
consecutiveFailures: this._consecutiveAuthFailures,
|
|
66
|
+
detail: result.detail,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// transient failure: leave counters + degraded state untouched. A network
|
|
71
|
+
// blip while healthy stays healthy; while degraded, only a real success
|
|
72
|
+
// (above) recovers — never a transient blip.
|
|
73
|
+
}
|
|
74
|
+
async fire(fn) {
|
|
75
|
+
try {
|
|
76
|
+
await fn();
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* best-effort emit — never wedge the probe loop on a callback error. */
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/git-auth/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GIT-AUTH-ALERT: runner git-credential health — classify auth-class transport
|
|
3
|
+
* failures, probe the base clone's credential (masked), and drive a degraded
|
|
4
|
+
* state machine so watch.ts can pause task-lane claiming instead of churning
|
|
5
|
+
* doomed claim→fail→requeue cycles when a token expires.
|
|
6
|
+
*/
|
|
7
|
+
export { classifyGitFetchError, isGitAuthFailure, GIT_AUTH_FAILURE_PATTERNS, type GitFetchFailureClass, } from "./classify.js";
|
|
8
|
+
export { makeGitAuthProbe, maskGitCredentials, type GitAuthProbe, type GitAuthProbeResult, type DefaultProbeOptions, } from "./probe.js";
|
|
9
|
+
export { GitAuthController, DEFAULT_GIT_AUTH_FAILURE_THRESHOLD, type GitAuthControllerDeps, type GitAuthDegradedInfo, type GitAuthRecoveredInfo, type GitAuthSnapshot, } from "./controller.js";
|
|
10
|
+
/** Runner-emitted audit verbs. The alerts tick (api/_lib/alerts-git-auth.ts) */
|
|
11
|
+
/** scans these to derive currently-degraded machines and page the operator. */
|
|
12
|
+
export declare const RUNNER_GIT_AUTH_FAILED_VERB = "runner.git_auth_failed";
|
|
13
|
+
export declare const RUNNER_GIT_AUTH_RECOVERED_VERB = "runner.git_auth_recovered";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/git-auth/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,kCAAkC,EAClC,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,2BAA2B,CAAC;AACpE,eAAO,MAAM,8BAA8B,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GIT-AUTH-ALERT: runner git-credential health — classify auth-class transport
|
|
3
|
+
* failures, probe the base clone's credential (masked), and drive a degraded
|
|
4
|
+
* state machine so watch.ts can pause task-lane claiming instead of churning
|
|
5
|
+
* doomed claim→fail→requeue cycles when a token expires.
|
|
6
|
+
*/
|
|
7
|
+
export { classifyGitFetchError, isGitAuthFailure, GIT_AUTH_FAILURE_PATTERNS, } from "./classify.js";
|
|
8
|
+
export { makeGitAuthProbe, maskGitCredentials, } from "./probe.js";
|
|
9
|
+
export { GitAuthController, DEFAULT_GIT_AUTH_FAILURE_THRESHOLD, } from "./controller.js";
|
|
10
|
+
/** Runner-emitted audit verbs. The alerts tick (api/_lib/alerts-git-auth.ts) */
|
|
11
|
+
/** scans these to derive currently-degraded machines and page the operator. */
|
|
12
|
+
export const RUNNER_GIT_AUTH_FAILED_VERB = "runner.git_auth_failed";
|
|
13
|
+
export const RUNNER_GIT_AUTH_RECOVERED_VERB = "runner.git_auth_recovered";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/git-auth/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,yBAAyB,GAE1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,GAInB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,kCAAkC,GAKnC,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AACpE,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type GitFetchFailureClass } from "./classify.js";
|
|
2
|
+
export interface GitAuthProbeResult {
|
|
3
|
+
/** True when the ls-remote succeeded (the credential is valid). */
|
|
4
|
+
ok: boolean;
|
|
5
|
+
/** null when ok; otherwise how the failure was classified. */
|
|
6
|
+
failureClass: GitFetchFailureClass | null;
|
|
7
|
+
/** Masked, credential-safe one-line summary — safe to log/emit/display. */
|
|
8
|
+
detail: string;
|
|
9
|
+
}
|
|
10
|
+
/** The injectable seam. Production uses `defaultGitAuthProbe`; tests fake it. */
|
|
11
|
+
export type GitAuthProbe = () => Promise<GitAuthProbeResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Redact credential material from arbitrary git output. Covers:
|
|
14
|
+
* - userinfo in URLs: scheme://user:token@host → scheme://***@host
|
|
15
|
+
* - GitHub token shapes anywhere: ghp_/gho_/ghu_/ghs_/ghr_…, github_pat_…
|
|
16
|
+
* Idempotent and never throws; a masked-but-imperfect string is preferred to
|
|
17
|
+
* leaking, so callers can mask defensively at every boundary.
|
|
18
|
+
*/
|
|
19
|
+
export declare function maskGitCredentials(input: string): string;
|
|
20
|
+
export interface DefaultProbeOptions {
|
|
21
|
+
/** The local clone to probe (its `origin` remote carries the credential). */
|
|
22
|
+
repoPath: string;
|
|
23
|
+
/** Test seam — overrides the git invocation. */
|
|
24
|
+
run?: (repoPath: string, args: string[]) => Promise<{
|
|
25
|
+
stdout: string;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build a `GitAuthProbe` bound to a repo path. `GIT_TERMINAL_PROMPT=0` is forced
|
|
30
|
+
* on so a missing credential fails FAST with "terminal prompts disabled" instead
|
|
31
|
+
* of hanging waiting for an interactive username/password.
|
|
32
|
+
*/
|
|
33
|
+
export declare function makeGitAuthProbe(opts: DefaultProbeOptions): GitAuthProbe;
|
|
34
|
+
//# sourceMappingURL=probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/git-auth/probe.ts"],"names":[],"mappings":"AAaA,OAAO,EAAyB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,EAAE,EAAE,OAAO,CAAC;IACZ,8DAA8D;IAC9D,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASxD;AAQD,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE;AAeD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,GAAG,YAAY,CAmBxE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GIT-AUTH-ALERT: a masked, read-only git-credential health probe.
|
|
3
|
+
*
|
|
4
|
+
* Runs `git ls-remote --heads origin` in the runner's base clone — a dry-run
|
|
5
|
+
* that touches the remote (so an expired/revoked token 403s exactly as a real
|
|
6
|
+
* fetch would) but transfers no objects, so it is cheap enough to run every 60s
|
|
7
|
+
* both to DETECT the initial failure and to poll for RECOVERY. The result is a
|
|
8
|
+
* three-way `{ ok, failureClass, detail }` where `detail` is ALWAYS masked so no
|
|
9
|
+
* credential material (a token embedded in the remote URL, a `x-access-token:…`
|
|
10
|
+
* pair, a raw PAT) can reach a log line, an activity event, or `doctor` output.
|
|
11
|
+
*/
|
|
12
|
+
import { execa } from "execa";
|
|
13
|
+
import { buildEnv } from "../bin-resolve.js";
|
|
14
|
+
import { classifyGitFetchError } from "./classify.js";
|
|
15
|
+
/**
|
|
16
|
+
* Redact credential material from arbitrary git output. Covers:
|
|
17
|
+
* - userinfo in URLs: scheme://user:token@host → scheme://***@host
|
|
18
|
+
* - GitHub token shapes anywhere: ghp_/gho_/ghu_/ghs_/ghr_…, github_pat_…
|
|
19
|
+
* Idempotent and never throws; a masked-but-imperfect string is preferred to
|
|
20
|
+
* leaking, so callers can mask defensively at every boundary.
|
|
21
|
+
*/
|
|
22
|
+
export function maskGitCredentials(input) {
|
|
23
|
+
if (!input)
|
|
24
|
+
return input;
|
|
25
|
+
let out = input;
|
|
26
|
+
// scheme://userinfo@host — strip everything between the scheme and the '@'.
|
|
27
|
+
out = out.replace(/([a-z][a-z0-9+.-]*:\/\/)[^\s/@]+@/gi, "$1***@");
|
|
28
|
+
// Bare GitHub token shapes that might appear outside a URL (e.g. in an error).
|
|
29
|
+
out = out.replace(/\bgh[posru]_[A-Za-z0-9]{16,}\b/g, "***");
|
|
30
|
+
out = out.replace(/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g, "***");
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
/** First non-empty line of a message, masked and length-bounded. */
|
|
34
|
+
function summarize(raw) {
|
|
35
|
+
const firstLine = raw.split(/\r?\n/).find((l) => l.trim().length > 0) ?? raw;
|
|
36
|
+
return maskGitCredentials(firstLine.trim()).slice(0, 300);
|
|
37
|
+
}
|
|
38
|
+
async function defaultRun(repoPath, args) {
|
|
39
|
+
// GIT_TERMINAL_PROMPT=0 → a missing credential fails FAST with "terminal
|
|
40
|
+
// prompts disabled" instead of blocking on an interactive username/password.
|
|
41
|
+
const { stdout } = await execa("git", args, {
|
|
42
|
+
cwd: repoPath,
|
|
43
|
+
env: { ...buildEnv(), GIT_TERMINAL_PROMPT: "0" },
|
|
44
|
+
});
|
|
45
|
+
return { stdout };
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Build a `GitAuthProbe` bound to a repo path. `GIT_TERMINAL_PROMPT=0` is forced
|
|
49
|
+
* on so a missing credential fails FAST with "terminal prompts disabled" instead
|
|
50
|
+
* of hanging waiting for an interactive username/password.
|
|
51
|
+
*/
|
|
52
|
+
export function makeGitAuthProbe(opts) {
|
|
53
|
+
const run = opts.run ?? defaultRun;
|
|
54
|
+
return async () => {
|
|
55
|
+
try {
|
|
56
|
+
await run(opts.repoPath, ["ls-remote", "--heads", "origin"]);
|
|
57
|
+
return { ok: true, failureClass: null, detail: "ls-remote origin ok" };
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
const failureClass = classifyGitFetchError(err);
|
|
61
|
+
const message = err?.stderr ??
|
|
62
|
+
err?.message ??
|
|
63
|
+
String(err);
|
|
64
|
+
return {
|
|
65
|
+
ok: false,
|
|
66
|
+
failureClass,
|
|
67
|
+
detail: summarize(typeof message === "string" ? message : String(message)),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/git-auth/probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAA6B,MAAM,eAAe,CAAC;AAcjF;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,4EAA4E;IAC5E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;IACnE,+EAA+E;IAC/E,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;IAC5D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,oEAAoE;AACpE,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;IAC7E,OAAO,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AASD,KAAK,UAAU,UAAU,CACvB,QAAgB,EAChB,IAAc;IAEd,yEAAyE;IACzE,6EAA6E;IAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;QAC1C,GAAG,EAAE,QAAQ;QACb,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,mBAAmB,EAAE,GAAG,EAAE;KACjD,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAyB;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,UAAU,CAAC;IACnC,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC7D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,OAAO,GACV,GAA+C,EAAE,MAAM;gBACvD,GAAa,EAAE,OAAO;gBACvB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,YAAY;gBACZ,MAAM,EAAE,SAAS,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAC3E,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/watch.d.ts
CHANGED
|
@@ -7,9 +7,11 @@ import { runTask, type RunTaskController } from "./task-runner.js";
|
|
|
7
7
|
import { type ReviewAssignment, type ReviewerOutcome } from "./runtime/reviewer.js";
|
|
8
8
|
import { type SingletonLock } from "./runtime/singleton.js";
|
|
9
9
|
import { type SelfUpgradeResult, type SelfUpdate426Result } from "./runtime/self-upgrade.js";
|
|
10
|
+
import { GitAuthController, type GitAuthProbe } from "./git-auth/index.js";
|
|
10
11
|
import { ResumeController, type ResumeControllerDeps } from "./capacity/resume-controller.js";
|
|
11
12
|
import { AccountProbeScheduler } from "./engines/account-probe.js";
|
|
12
13
|
import { type FleetChatServingHandle } from "./watch-chat/wire.js";
|
|
14
|
+
import { ClaimDeadman, type HeartbeatDeadmanFields } from "./claim-deadman/index.js";
|
|
13
15
|
import type { EngineAccountIdentity } from "./engines/types.js";
|
|
14
16
|
import type { StoredSession } from "./types.js";
|
|
15
17
|
import { RefreshReuseDetectedError, classifyHeartbeatError, nextHeartbeatDelayMs, type HeartbeatErrorKind } from "./runtime/auth-lifecycle.js";
|
|
@@ -86,6 +88,37 @@ export interface WatchOptions {
|
|
|
86
88
|
* hook drives it deterministically. Knob: `claim_backstop_interval_ms`.
|
|
87
89
|
*/
|
|
88
90
|
claimBackstopIntervalMs?: number;
|
|
91
|
+
/**
|
|
92
|
+
* CLAIM-DEADMAN: wedge threshold (ms). Work is pending
|
|
93
|
+
* and no claim has landed for this long → the claim channel is wedged; escalate
|
|
94
|
+
* to a full Realtime-client rebuild, then DB-poll fallback. Defaults to 120000
|
|
95
|
+
* (120s, > the 90s claim watchdog so the cheaper resubscribe fires first).
|
|
96
|
+
* Tests set a tiny value to observe the escalation ladder without real waits.
|
|
97
|
+
*/
|
|
98
|
+
claimDeadmanWedgeMs?: number;
|
|
99
|
+
/**
|
|
100
|
+
* CLAIM-DEADMAN: deadman evaluation cadence (ms). How often the watch loop
|
|
101
|
+
* reads its pending-dispatch and runs the deadman tick. Defaults to 30000.
|
|
102
|
+
* Tests set a large value so only the `claimDeadmanOnce()` hook drives it.
|
|
103
|
+
*/
|
|
104
|
+
claimDeadmanCheckMs?: number;
|
|
105
|
+
/**
|
|
106
|
+
* CLAIM-DEADMAN: minimum gap between escalation steps (ms) so a rebuild gets
|
|
107
|
+
* time to take effect before the next step. Defaults to 15000.
|
|
108
|
+
*/
|
|
109
|
+
claimDeadmanRebuildGraceMs?: number;
|
|
110
|
+
/**
|
|
111
|
+
* CLAIM-DEADMAN: full Realtime-client rebuilds attempted before degrading to
|
|
112
|
+
* DB-poll fallback claiming. Defaults to 2.
|
|
113
|
+
*/
|
|
114
|
+
claimDeadmanMaxRebuilds?: number;
|
|
115
|
+
/**
|
|
116
|
+
* CLAIM-DEADMAN: degraded DB-poll fallback cadence (ms). Once the rebuild
|
|
117
|
+
* budget is spent the runner claims by polling the claim path directly at this
|
|
118
|
+
* interval — degraded but functional — until the backlog drains. Defaults to
|
|
119
|
+
* 15000. Tests set a tiny value to observe fallback claiming without real waits.
|
|
120
|
+
*/
|
|
121
|
+
claimDeadmanFallbackPollMs?: number;
|
|
89
122
|
/** Returns a controller for tests; production wiring uses the default. */
|
|
90
123
|
taskRunnerFactory?: typeof runTask;
|
|
91
124
|
/** v0.6.2: review handler injection for tests. Defaults to runReview. */
|
|
@@ -194,6 +227,23 @@ export interface WatchOptions {
|
|
|
194
227
|
* guard.
|
|
195
228
|
*/
|
|
196
229
|
enforceSingleton?: boolean;
|
|
230
|
+
/**
|
|
231
|
+
* GIT-AUTH-ALERT: cadence (ms) of the git-credential health probe. Defaults to
|
|
232
|
+
* 60s. Tests set a large value so only the `gitAuthProbeOnce()` hook drives it.
|
|
233
|
+
*/
|
|
234
|
+
gitAuthProbeIntervalMs?: number;
|
|
235
|
+
/**
|
|
236
|
+
* GIT-AUTH-ALERT: consecutive auth-class probe failures before the runner
|
|
237
|
+
* trips the degraded `git_auth_failed` state. Defaults to 2 (the spec bar).
|
|
238
|
+
*/
|
|
239
|
+
gitAuthFailureThreshold?: number;
|
|
240
|
+
/**
|
|
241
|
+
* GIT-AUTH-ALERT: injectable probe seam. Production builds an `ls-remote`
|
|
242
|
+
* probe bound to the base clone (cfg.worktreeRepoPath ?? cfg.repoPath); tests
|
|
243
|
+
* inject a fake to drive the state machine without shelling out to git. When
|
|
244
|
+
* neither this nor a base repo path is available the probe loop is disabled.
|
|
245
|
+
*/
|
|
246
|
+
gitAuthProbe?: GitAuthProbe;
|
|
197
247
|
}
|
|
198
248
|
/**
|
|
199
249
|
* v0.12.0 (T-52-7): resolve ACC_RUNNER_IDLE_TTL_MIN into ms. Returns null
|
|
@@ -228,6 +278,19 @@ export interface WatchHandle {
|
|
|
228
278
|
* from the backstop timer.
|
|
229
279
|
*/
|
|
230
280
|
claimBackstopOnce(): Promise<void>;
|
|
281
|
+
/**
|
|
282
|
+
* CLAIM-DEADMAN test hook: forces one deadman evaluation
|
|
283
|
+
* (read pending-dispatch → tick → rebuild/fallback/none) and resolves when it
|
|
284
|
+
* finishes. Production drives this from the deadman timer.
|
|
285
|
+
*/
|
|
286
|
+
claimDeadmanOnce(): Promise<void>;
|
|
287
|
+
/**
|
|
288
|
+
* GIT-AUTH-ALERT test hook: forces one git-credential health probe and
|
|
289
|
+
* resolves when it finishes (including any degraded/recovered emit). Resolves
|
|
290
|
+
* to `false` when the probe loop is disabled (no base repo path). Production
|
|
291
|
+
* drives this from the probe timer.
|
|
292
|
+
*/
|
|
293
|
+
gitAuthProbeOnce(): Promise<boolean>;
|
|
231
294
|
/** v0.10 T-49-2: number of tasks currently executing. Useful for tests. */
|
|
232
295
|
runningCount(): number;
|
|
233
296
|
}
|
|
@@ -278,6 +341,38 @@ interface WatchState {
|
|
|
278
341
|
claimBackstopTimer: NodeJS.Timeout;
|
|
279
342
|
claimBackstopIntervalMs: number;
|
|
280
343
|
backstopScanning: boolean;
|
|
344
|
+
/**
|
|
345
|
+
* CLAIM-DEADMAN: dead-man switch for a wedged claim
|
|
346
|
+
* channel. `claimDeadman` is the pure state machine; `claimDeadmanTimer` drives
|
|
347
|
+
* its evaluation every `claimDeadmanCheckMs`; `claimDeadmanChecking` is the
|
|
348
|
+
* single-flight guard. `deadmanRebuilding` guards the full Realtime-client
|
|
349
|
+
* rebuild. `deadmanFallbackTimer` runs the degraded DB-poll claim loop at
|
|
350
|
+
* `deadmanFallbackPollMs` once the rebuild budget is spent (null when not
|
|
351
|
+
* degraded). `lastHeartbeatDeadmanFields` caches the pending-dispatch/suspect
|
|
352
|
+
* the heartbeat response carried (null until the server extension lands, in
|
|
353
|
+
* which case the deadman falls back to the assigned-queued read).
|
|
354
|
+
*/
|
|
355
|
+
claimDeadman: ClaimDeadman;
|
|
356
|
+
claimDeadmanTimer: NodeJS.Timeout;
|
|
357
|
+
claimDeadmanCheckMs: number;
|
|
358
|
+
claimDeadmanChecking: boolean;
|
|
359
|
+
deadmanRebuilding: boolean;
|
|
360
|
+
deadmanFallbackTimer: NodeJS.Timeout | null;
|
|
361
|
+
deadmanFallbackPollMs: number;
|
|
362
|
+
lastHeartbeatDeadmanFields: HeartbeatDeadmanFields | null;
|
|
363
|
+
/**
|
|
364
|
+
* GIT-AUTH-ALERT: the git-credential health state machine + its timer.
|
|
365
|
+
* `gitAuthController` is null when the probe loop is disabled (no base repo
|
|
366
|
+
* path resolvable, or in tests that don't opt in). `gitAuthFailed` mirrors the
|
|
367
|
+
* controller's degraded flag so pump() can read it synchronously (like the
|
|
368
|
+
* capacity flags) to pause task-lane claiming. `gitAuthChecking` is the
|
|
369
|
+
* single-flight guard so a slow probe can't overlap itself.
|
|
370
|
+
*/
|
|
371
|
+
gitAuthController: GitAuthController | null;
|
|
372
|
+
gitAuthTimer: NodeJS.Timeout | null;
|
|
373
|
+
gitAuthProbeIntervalMs: number;
|
|
374
|
+
gitAuthChecking: boolean;
|
|
375
|
+
gitAuthFailed: boolean;
|
|
281
376
|
/**
|
|
282
377
|
* v0.68 (T-68-1): realtime channel-health recovery. The `.subscribe`
|
|
283
378
|
* status callback previously handled ONLY `SUBSCRIBED`; a `CHANNEL_ERROR`
|
|
@@ -481,6 +576,23 @@ interface WatchState {
|
|
|
481
576
|
}
|
|
482
577
|
export declare function resubscribeChannel(state: WatchState, factory: typeof runTask): Promise<void>;
|
|
483
578
|
export declare function reassertRunningClaims(state: WatchState): Promise<void>;
|
|
579
|
+
/**
|
|
580
|
+
* CLAIM-DEADMAN: parse the pending-dispatch fields off a `heartbeat_runner`
|
|
581
|
+
* response. Tolerant of a scalar row, a single-row array, or null (today's
|
|
582
|
+
* void return) — returns null unless a numeric `pending_dispatch` is present, so
|
|
583
|
+
* a pre-extension server leaves the deadman on its assigned-queued read.
|
|
584
|
+
*/
|
|
585
|
+
export declare function parseHeartbeatDeadmanFields(data: unknown): HeartbeatDeadmanFields | null;
|
|
586
|
+
/**
|
|
587
|
+
* CLAIM-DEADMAN: tear down + FULLY REBUILD the Realtime client — not just a
|
|
588
|
+
* resubscribe. The v0.68 resubscribe / v0.73 watchdog both remove+re-add a
|
|
589
|
+
* channel on the SAME Supabase client, so a wedged underlying socket / Realtime
|
|
590
|
+
* instance survives them (the incident's failure mode). This discards the whole
|
|
591
|
+
* client and builds a fresh one around the same JWT + realtime config (mirrors
|
|
592
|
+
* doRefresh/doFailover's client rebuild, minus the token change), then recovers
|
|
593
|
+
* anything the dead channel missed. Single-flight via `deadmanRebuilding`.
|
|
594
|
+
*/
|
|
595
|
+
export declare function rebuildRealtimeClient(state: WatchState, factory: typeof runTask, attempt: number): Promise<void>;
|
|
484
596
|
export declare function watchCommand(options?: WatchOptions): Promise<WatchHandle>;
|
|
485
597
|
/**
|
|
486
598
|
* PA-11C-SIGTERM-REQUEUE: graceful shutdown handler for SIGINT/SIGTERM.
|
package/dist/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG3E,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../src/watch.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAG3E,OAAO,EAAsB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,iBAAiB,EAIjB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAK9F,OAAO,EAAE,qBAAqB,EAAmB,MAAM,4BAA4B,CAAC;AAKpF,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,YAAY,EAQZ,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAGhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAYhD,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EAEtB,oBAAoB,EAEpB,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,CAAC;AAoGF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAMT;AAED,MAAM,WAAW,YAAY;IAC3B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;OAQG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,OAAO,CAAC;IACnC,yEAAyE;IACzE,eAAe,CAAC,EAAE,CAChB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE;QAAE,QAAQ,EAAE,oBAAoB,CAAA;KAAE,KACrC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnF;;;;;OAKG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC;KAClB,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACpD;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,GAAG,IAAI,CAWf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,wEAAwE;IACxE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;;OAGG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;;;OAIG;IACH,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC;;;;OAIG;IACH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC;;;;;OAKG;IACH,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,2EAA2E;IAC3E,YAAY,IAAI,MAAM,CAAC;CACxB;AAED,KAAK,eAAe,GAAG,CACrB,UAAU,EAAE,gBAAgB,EAC5B,IAAI,EAAE;IAAE,QAAQ,EAAE,oBAAoB,CAAA;CAAE,KACrC,OAAO,CAAC,eAAe,CAAC,CAAC;AAE9B,UAAU,UAAU;IAClB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,uEAAuE;IACvE,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;IAC1B,iFAAiF;IACjF,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC;IAC/B,sFAAsF;IACtF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,+EAA+E;IAC/E,aAAa,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC;IAChC,kFAAkF;IAClF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,+EAA+E;IAC/E,cAAc,EAAE,OAAO,CAAC;IACxB;;;;;;;OAOG;IACH,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;;;OAMG;IACH,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;;;;;;;;;OAUG;IACH,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC5C,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0BAA0B,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC1D;;;;;;;OAOG;IACH,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACpC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB;;;;;;;OAOG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxC;;;;;OAKG;IACH,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC;;;;;OAKG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,oFAAoF;IACpF,sBAAsB,EAAE,OAAO,CAAC;IAChC;;;;;OAKG;IACH,iBAAiB,EAAE,iBAAiB,CAAC;IACrC;;;;;;OAMG;IACH,wBAAwB,EAAE,OAAO,CAAC;IAClC;;;;;;;OAOG;IACH,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,4EAA4E;IAC5E,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACpC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,eAAe,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B;;;;;OAKG;IACH,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACjC,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpF,aAAa,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,iBAAiB,EAAE,OAAO,OAAO,CAAC;IAClC;;;;;;OAMG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;;;OAMG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC;;;;;OAKG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;IACnC;;;;;OAKG;IACH,YAAY,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC3C;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC;;;;;OAKG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC;;;;OAIG;IACH,SAAS,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAC1C;AA8ID,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,OAAO,GACtB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAMD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB5E;AA0VD;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,OAAO,GACZ,sBAAsB,GAAG,IAAI,CAS/B;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,OAAO,EACvB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAsDf;AAuUD,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmwBnF;AAwRD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC,EAC/C,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACzB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC9B,MAAM,EAAE,QAAQ,GAAG,SAAS,GAC3B,OAAO,CAAC,IAAI,CAAC,CAwBf;AAkSD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,OAAO,GACtB,IAAI,CACL,oBAAoB,EACpB,gBAAgB,GAAG,YAAY,GAAG,kBAAkB,GAAG,eAAe,GAAG,OAAO,CACjF,CA6GA"}
|