opensquid 0.5.396 → 0.5.401
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/cli.js +43 -0
- package/dist/cli.js.map +1 -1
- package/dist/functions/handoff_session_start.d.ts.map +1 -1
- package/dist/functions/handoff_session_start.js +12 -0
- package/dist/functions/handoff_session_start.js.map +1 -1
- package/dist/mcp/tools/workgraph.d.ts +4 -4
- package/dist/models/strategies/subscription_cli.d.ts +10 -21
- package/dist/models/strategies/subscription_cli.d.ts.map +1 -1
- package/dist/models/strategies/subscription_cli.js +24 -80
- package/dist/models/strategies/subscription_cli.js.map +1 -1
- package/dist/runtime/agent_bridge/agent_loop_subscription.d.ts +1 -1
- package/dist/runtime/agent_bridge/agent_loop_subscription.d.ts.map +1 -1
- package/dist/runtime/agent_bridge/agent_loop_subscription.js +20 -56
- package/dist/runtime/agent_bridge/agent_loop_subscription.js.map +1 -1
- package/dist/runtime/hooks/post-tool-use.js +2 -0
- package/dist/runtime/hooks/post-tool-use.js.map +1 -1
- package/dist/runtime/hooks/pre-tool-use.js +2 -0
- package/dist/runtime/hooks/pre-tool-use.js.map +1 -1
- package/dist/runtime/hooks/session-end.js +2 -0
- package/dist/runtime/hooks/session-end.js.map +1 -1
- package/dist/runtime/hooks/session-start.js +2 -0
- package/dist/runtime/hooks/session-start.js.map +1 -1
- package/dist/runtime/hooks/stop.js +2 -0
- package/dist/runtime/hooks/stop.js.map +1 -1
- package/dist/runtime/hooks/subagent_guard.d.ts +26 -0
- package/dist/runtime/hooks/subagent_guard.d.ts.map +1 -0
- package/dist/runtime/hooks/subagent_guard.js +33 -0
- package/dist/runtime/hooks/subagent_guard.js.map +1 -0
- package/dist/runtime/hooks/user-prompt-submit.d.ts.map +1 -1
- package/dist/runtime/hooks/user-prompt-submit.js +2 -0
- package/dist/runtime/hooks/user-prompt-submit.js.map +1 -1
- package/dist/runtime/spawn_lifecycle.d.ts +61 -0
- package/dist/runtime/spawn_lifecycle.d.ts.map +1 -0
- package/dist/runtime/spawn_lifecycle.js +137 -0
- package/dist/runtime/spawn_lifecycle.js.map +1 -0
- package/dist/runtime/update_check.d.ts +52 -0
- package/dist/runtime/update_check.d.ts.map +1 -0
- package/dist/runtime/update_check.js +115 -0
- package/dist/runtime/update_check.js.map +1 -0
- package/dist/setup/cli/doctor.d.ts.map +1 -1
- package/dist/setup/cli/doctor.js +29 -0
- package/dist/setup/cli/doctor.js.map +1 -1
- package/dist/setup/cli/update.d.ts +63 -0
- package/dist/setup/cli/update.d.ts.map +1 -0
- package/dist/setup/cli/update.js +133 -0
- package/dist/setup/cli/update.js.map +1 -0
- package/docs/pack-runtime.md +12 -0
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* Fail-open on any internal error.
|
|
19
19
|
*/
|
|
20
20
|
import { buildRegistry, loadActivePacks } from '../bootstrap.js';
|
|
21
|
+
import { exitIfSubagent } from './subagent_guard.js';
|
|
21
22
|
import { clearFsmState } from '../fsm_state.js';
|
|
22
23
|
import { runCompression } from '../compression_orchestrator.js';
|
|
23
24
|
import { makeConsolidateRunner } from '../wedge/compression_deps.js';
|
|
@@ -40,6 +41,7 @@ async function readStdin() {
|
|
|
40
41
|
return data;
|
|
41
42
|
}
|
|
42
43
|
async function main() {
|
|
44
|
+
exitIfSubagent('session-end'); // SUB.1: before stdin read / any state write
|
|
43
45
|
const raw = await readStdin();
|
|
44
46
|
if (!raw.trim()) {
|
|
45
47
|
process.stderr.write('opensquid: empty SessionEnd payload — proceeding\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/runtime/hooks/session-end.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-end.js","sourceRoot":"","sources":["../../../src/runtime/hooks/session-end.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
* inject_context on `session_start`, this bin produces no stdout.
|
|
32
32
|
*/
|
|
33
33
|
import { buildRegistry, loadActivePacks } from '../bootstrap.js';
|
|
34
|
+
import { exitIfSubagent } from './subagent_guard.js';
|
|
34
35
|
import { claimUmbrellaLeaseForSession } from '../chat/claim_lease.js';
|
|
35
36
|
import { Event } from '../types.js';
|
|
36
37
|
import { dispatchEvent } from './dispatch.js';
|
|
@@ -53,6 +54,7 @@ async function readStdin() {
|
|
|
53
54
|
return data;
|
|
54
55
|
}
|
|
55
56
|
async function main() {
|
|
57
|
+
exitIfSubagent('session-start'); // SUB.1: before stdin read / any state write
|
|
56
58
|
const raw = await readStdin();
|
|
57
59
|
if (!raw.trim()) {
|
|
58
60
|
process.stderr.write('opensquid: empty SessionStart payload — proceeding\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../src/runtime/hooks/session-start.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-start.js","sourceRoot":"","sources":["../../../src/runtime/hooks/session-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* Fail-open on any internal error — see `main().catch()` below.
|
|
19
19
|
*/
|
|
20
20
|
import { buildRegistry, loadActivePacks } from '../bootstrap.js';
|
|
21
|
+
import { exitIfSubagent } from './subagent_guard.js';
|
|
21
22
|
import { Event } from '../types.js';
|
|
22
23
|
import { dispatchEvent } from './dispatch.js';
|
|
23
24
|
import { extractSessionId } from './session_id.js';
|
|
@@ -53,6 +54,7 @@ async function readStdin() {
|
|
|
53
54
|
return data;
|
|
54
55
|
}
|
|
55
56
|
async function main() {
|
|
57
|
+
exitIfSubagent('stop'); // SUB.1: before stdin read / any state write
|
|
56
58
|
const raw = await readStdin();
|
|
57
59
|
if (!raw.trim()) {
|
|
58
60
|
process.stderr.write('opensquid: empty Stop payload — proceeding\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/runtime/hooks/stop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/runtime/hooks/stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T-handoff-nested-session-spam SUB.1 — opensquid-spawned reviewer subagents
|
|
3
|
+
* (subscription_cli sets OPENSQUID_SUBAGENT=1 at the spawn boundary) must
|
|
4
|
+
* never run the hook pipeline: no FSM mint, no tool-ledger, no SessionEnd
|
|
5
|
+
* handoff dump, no nested cached_audit (the observed recursion class —
|
|
6
|
+
* wg-627effbb2c38: a timed-out audit child re-ran the coding flow on the
|
|
7
|
+
* artifact embedded in its prompt and spawned its own grandchild audit).
|
|
8
|
+
*
|
|
9
|
+
* Pure read of process.env — no I/O, no side effects. NOTE: this is the
|
|
10
|
+
* HOOK-POLICY marker; the kill-tree marker (OPENSQUID_SUPERVISED, SUB.2) is
|
|
11
|
+
* deliberately separate — agent-bridge children are supervised but fully
|
|
12
|
+
* hooked (GDC lock: working agents stay gated).
|
|
13
|
+
*
|
|
14
|
+
* Imports from: (none — node globals only).
|
|
15
|
+
* Imported by: the six hook bins (pre-tool-use, post-tool-use,
|
|
16
|
+
* session-start, session-end, stop, user-prompt-submit).
|
|
17
|
+
*/
|
|
18
|
+
export declare function isOpensquidSubagent(env?: NodeJS.ProcessEnv): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Exit-0 short-circuit for hook bins — called BEFORE stdin is read so a
|
|
21
|
+
* marked child's hook performs zero reads and zero state writes. Exit 0 is
|
|
22
|
+
* the "allow" code for every Claude Code hook type, so the ordering is safe
|
|
23
|
+
* across all six bins. Returns only when NOT a subagent.
|
|
24
|
+
*/
|
|
25
|
+
export declare function exitIfSubagent(hookName: string): void;
|
|
26
|
+
//# sourceMappingURL=subagent_guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent_guard.d.ts","sourceRoot":"","sources":["../../../src/runtime/hooks/subagent_guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEjF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKrD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T-handoff-nested-session-spam SUB.1 — opensquid-spawned reviewer subagents
|
|
3
|
+
* (subscription_cli sets OPENSQUID_SUBAGENT=1 at the spawn boundary) must
|
|
4
|
+
* never run the hook pipeline: no FSM mint, no tool-ledger, no SessionEnd
|
|
5
|
+
* handoff dump, no nested cached_audit (the observed recursion class —
|
|
6
|
+
* wg-627effbb2c38: a timed-out audit child re-ran the coding flow on the
|
|
7
|
+
* artifact embedded in its prompt and spawned its own grandchild audit).
|
|
8
|
+
*
|
|
9
|
+
* Pure read of process.env — no I/O, no side effects. NOTE: this is the
|
|
10
|
+
* HOOK-POLICY marker; the kill-tree marker (OPENSQUID_SUPERVISED, SUB.2) is
|
|
11
|
+
* deliberately separate — agent-bridge children are supervised but fully
|
|
12
|
+
* hooked (GDC lock: working agents stay gated).
|
|
13
|
+
*
|
|
14
|
+
* Imports from: (none — node globals only).
|
|
15
|
+
* Imported by: the six hook bins (pre-tool-use, post-tool-use,
|
|
16
|
+
* session-start, session-end, stop, user-prompt-submit).
|
|
17
|
+
*/
|
|
18
|
+
export function isOpensquidSubagent(env = process.env) {
|
|
19
|
+
return env.OPENSQUID_SUBAGENT === '1';
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Exit-0 short-circuit for hook bins — called BEFORE stdin is read so a
|
|
23
|
+
* marked child's hook performs zero reads and zero state writes. Exit 0 is
|
|
24
|
+
* the "allow" code for every Claude Code hook type, so the ordering is safe
|
|
25
|
+
* across all six bins. Returns only when NOT a subagent.
|
|
26
|
+
*/
|
|
27
|
+
export function exitIfSubagent(hookName) {
|
|
28
|
+
if (isOpensquidSubagent()) {
|
|
29
|
+
process.stderr.write(`opensquid: ${hookName} skipped (OPENSQUID_SUBAGENT)\n`);
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=subagent_guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent_guard.js","sourceRoot":"","sources":["../../../src/runtime/hooks/subagent_guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,OAAO,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,QAAQ,iCAAiC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt-submit.d.ts","sourceRoot":"","sources":["../../../src/runtime/hooks/user-prompt-submit.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.d.ts","sourceRoot":"","sources":["../../../src/runtime/hooks/user-prompt-submit.ts"],"names":[],"mappings":";AAmDA,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQhE"}
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* Fail-open on any internal error.
|
|
18
18
|
*/
|
|
19
19
|
import { buildRegistry, loadActivePacks } from '../bootstrap.js';
|
|
20
|
+
import { exitIfSubagent } from './subagent_guard.js';
|
|
20
21
|
import { claimUmbrellaLeaseForSession } from '../chat/claim_lease.js';
|
|
21
22
|
import { drainUmbrellaInbox } from '../chat/inbox_drain.js';
|
|
22
23
|
import { resetTurnLedger } from '../session_state.js';
|
|
@@ -55,6 +56,7 @@ async function readStdin() {
|
|
|
55
56
|
return data;
|
|
56
57
|
}
|
|
57
58
|
async function main() {
|
|
59
|
+
exitIfSubagent('user-prompt-submit'); // SUB.1: before stdin read / any state write
|
|
58
60
|
const raw = await readStdin();
|
|
59
61
|
if (!raw.trim()) {
|
|
60
62
|
process.stderr.write('opensquid: empty UserPromptSubmit payload — proceeding\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../../src/runtime/hooks/user-prompt-submit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"user-prompt-submit.js","sourceRoot":"","sources":["../../../src/runtime/hooks/user-prompt-submit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T-handoff-nested-session-spam SUB.2 (wg-627effbb2c38) — the ONE spawn
|
|
3
|
+
* lifecycle for one-shot CLI children, shared by both spawn sites
|
|
4
|
+
* (models/strategies/subscription_cli.ts — the audit reviewer — and
|
|
5
|
+
* runtime/agent_bridge/agent_loop_subscription.ts — the chat working
|
|
6
|
+
* agent), replacing their deliberately-mirrored copies.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle FSM (lexicon: explicit total transitions; the promise settles
|
|
9
|
+
* exactly once, on the FIRST transition out of `running`):
|
|
10
|
+
*
|
|
11
|
+
* running ──close──────────────► closed (resolve/reject by exit code)
|
|
12
|
+
* running ──spawn 'error'──────► spawn_failed (reject)
|
|
13
|
+
* running ──timeout────────────► term_sent (reject NOW; grace timer armed, REF'D)
|
|
14
|
+
* term_sent ──close────────────► closed_late (clear grace; child obeyed SIGTERM)
|
|
15
|
+
* term_sent ──grace expiry─────► group_killed (kill(-pid) sweep; ESRCH = already gone)
|
|
16
|
+
*
|
|
17
|
+
* `term_sent → supervisor SIGKILLed externally` leaks the child by design —
|
|
18
|
+
* enumerated residual: the REF'D grace timer holds the supervisor alive
|
|
19
|
+
* through grace in every non-forced teardown (an unref'd timer dies when a
|
|
20
|
+
* hook bin exits right after the rejection — observed live as SIGTERM-
|
|
21
|
+
* ignoring `claude -p` orphans piling up on the subscription bucket), and a
|
|
22
|
+
* forced external SIGKILL of the supervisor is outside any in-process
|
|
23
|
+
* guarantee.
|
|
24
|
+
*
|
|
25
|
+
* Two ORTHOGONAL env markers — never merge them:
|
|
26
|
+
* - OPENSQUID_SUBAGENT (hook policy, SUB.1): set only when
|
|
27
|
+
* `markSubagent: true` (reviewer spawns). Hook bins short-circuit.
|
|
28
|
+
* - OPENSQUID_SUPERVISED (kill-tree, THIS module): set on EVERY helper
|
|
29
|
+
* spawn. The OUTERMOST helper spawn in a tree detaches as group leader;
|
|
30
|
+
* every deeper helper spawn joins the ancestor's group — a reviewer
|
|
31
|
+
* spawned from a bridge child's hooks must NOT escape the bridge
|
|
32
|
+
* group's sweep (spec-audit finding 1).
|
|
33
|
+
*
|
|
34
|
+
* Phase-1 limitation carried over verbatim from subscription_cli.ts: pipe
|
|
35
|
+
* stdio can mutually deadlock on prompts >64KB (kernel pipe buffer); the
|
|
36
|
+
* temp-file fallback is Phase-2 scope — do NOT bolt on a partial drain
|
|
37
|
+
* handler here.
|
|
38
|
+
*
|
|
39
|
+
* Imports from: node:child_process.
|
|
40
|
+
* Imported by: models/strategies/subscription_cli.ts,
|
|
41
|
+
* runtime/agent_bridge/agent_loop_subscription.ts.
|
|
42
|
+
*/
|
|
43
|
+
export interface OneShotOpts {
|
|
44
|
+
cli: string;
|
|
45
|
+
args: string[];
|
|
46
|
+
/** Prompt body written to the child's stdin then EOF. */
|
|
47
|
+
prompt: string;
|
|
48
|
+
timeoutMs: number;
|
|
49
|
+
/** SUB.1 hook-policy marker: reviewer spawns mark the child tree; bridge spawns do not. */
|
|
50
|
+
markSubagent: boolean;
|
|
51
|
+
/** Typed rejection factory — each site keeps its own timeout error contract. */
|
|
52
|
+
timeoutError: (timeoutMs: number) => Error;
|
|
53
|
+
/** Prefix for spawn/exit/stdin error messages (bridge: 'subscription cli '). */
|
|
54
|
+
errorPrefix?: string;
|
|
55
|
+
/** Grace before the group SIGKILL. Default 5_000. */
|
|
56
|
+
graceMs?: number;
|
|
57
|
+
}
|
|
58
|
+
/** Kill-tree marker: true when THIS process already runs under a helper-supervised tree. */
|
|
59
|
+
export declare const insideSupervisedTree: (env?: NodeJS.ProcessEnv) => boolean;
|
|
60
|
+
export declare function runOneShotCli(opts: OneShotOpts): Promise<string>;
|
|
61
|
+
//# sourceMappingURL=spawn_lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn_lifecycle.d.ts","sourceRoot":"","sources":["../../src/runtime/spawn_lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAIH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,2FAA2F;IAC3F,YAAY,EAAE,OAAO,CAAC;IACtB,gFAAgF;IAChF,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;IAC3C,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,GAAI,MAAK,MAAM,CAAC,UAAwB,KAAG,OAC1C,CAAC;AAEnC,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAwFhE"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T-handoff-nested-session-spam SUB.2 (wg-627effbb2c38) — the ONE spawn
|
|
3
|
+
* lifecycle for one-shot CLI children, shared by both spawn sites
|
|
4
|
+
* (models/strategies/subscription_cli.ts — the audit reviewer — and
|
|
5
|
+
* runtime/agent_bridge/agent_loop_subscription.ts — the chat working
|
|
6
|
+
* agent), replacing their deliberately-mirrored copies.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle FSM (lexicon: explicit total transitions; the promise settles
|
|
9
|
+
* exactly once, on the FIRST transition out of `running`):
|
|
10
|
+
*
|
|
11
|
+
* running ──close──────────────► closed (resolve/reject by exit code)
|
|
12
|
+
* running ──spawn 'error'──────► spawn_failed (reject)
|
|
13
|
+
* running ──timeout────────────► term_sent (reject NOW; grace timer armed, REF'D)
|
|
14
|
+
* term_sent ──close────────────► closed_late (clear grace; child obeyed SIGTERM)
|
|
15
|
+
* term_sent ──grace expiry─────► group_killed (kill(-pid) sweep; ESRCH = already gone)
|
|
16
|
+
*
|
|
17
|
+
* `term_sent → supervisor SIGKILLed externally` leaks the child by design —
|
|
18
|
+
* enumerated residual: the REF'D grace timer holds the supervisor alive
|
|
19
|
+
* through grace in every non-forced teardown (an unref'd timer dies when a
|
|
20
|
+
* hook bin exits right after the rejection — observed live as SIGTERM-
|
|
21
|
+
* ignoring `claude -p` orphans piling up on the subscription bucket), and a
|
|
22
|
+
* forced external SIGKILL of the supervisor is outside any in-process
|
|
23
|
+
* guarantee.
|
|
24
|
+
*
|
|
25
|
+
* Two ORTHOGONAL env markers — never merge them:
|
|
26
|
+
* - OPENSQUID_SUBAGENT (hook policy, SUB.1): set only when
|
|
27
|
+
* `markSubagent: true` (reviewer spawns). Hook bins short-circuit.
|
|
28
|
+
* - OPENSQUID_SUPERVISED (kill-tree, THIS module): set on EVERY helper
|
|
29
|
+
* spawn. The OUTERMOST helper spawn in a tree detaches as group leader;
|
|
30
|
+
* every deeper helper spawn joins the ancestor's group — a reviewer
|
|
31
|
+
* spawned from a bridge child's hooks must NOT escape the bridge
|
|
32
|
+
* group's sweep (spec-audit finding 1).
|
|
33
|
+
*
|
|
34
|
+
* Phase-1 limitation carried over verbatim from subscription_cli.ts: pipe
|
|
35
|
+
* stdio can mutually deadlock on prompts >64KB (kernel pipe buffer); the
|
|
36
|
+
* temp-file fallback is Phase-2 scope — do NOT bolt on a partial drain
|
|
37
|
+
* handler here.
|
|
38
|
+
*
|
|
39
|
+
* Imports from: node:child_process.
|
|
40
|
+
* Imported by: models/strategies/subscription_cli.ts,
|
|
41
|
+
* runtime/agent_bridge/agent_loop_subscription.ts.
|
|
42
|
+
*/
|
|
43
|
+
import { spawn } from 'node:child_process';
|
|
44
|
+
/** Kill-tree marker: true when THIS process already runs under a helper-supervised tree. */
|
|
45
|
+
export const insideSupervisedTree = (env = process.env) => env.OPENSQUID_SUPERVISED === '1';
|
|
46
|
+
export function runOneShotCli(opts) {
|
|
47
|
+
const prefix = opts.errorPrefix ?? '';
|
|
48
|
+
return new Promise((resolve, reject) => {
|
|
49
|
+
// Detach predicate = the SUPERVISED marker, NOT the hook-policy marker
|
|
50
|
+
// (spec-audit finding 1): a reviewer spawned from an UNMARKED bridge
|
|
51
|
+
// tree must still join the bridge group, or it escapes the sweep. Every
|
|
52
|
+
// helper spawn sets SUPERVISED; only the outermost detaches.
|
|
53
|
+
const detached = !insideSupervisedTree();
|
|
54
|
+
const env = {
|
|
55
|
+
...process.env,
|
|
56
|
+
OPENSQUID_SUPERVISED: '1',
|
|
57
|
+
...(opts.markSubagent ? { OPENSQUID_SUBAGENT: '1' } : {}),
|
|
58
|
+
};
|
|
59
|
+
const proc = spawn(opts.cli, opts.args, {
|
|
60
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
61
|
+
detached,
|
|
62
|
+
env,
|
|
63
|
+
});
|
|
64
|
+
let state = { phase: 'running' };
|
|
65
|
+
let stdout = '';
|
|
66
|
+
let stderr = '';
|
|
67
|
+
let graceTimer;
|
|
68
|
+
const groupKill = () => {
|
|
69
|
+
state = { phase: 'group_killed' };
|
|
70
|
+
try {
|
|
71
|
+
if (detached && typeof proc.pid === 'number') {
|
|
72
|
+
process.kill(-proc.pid, 'SIGKILL');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
proc.kill('SIGKILL'); // nested: the ancestor's group sweep covers the rest
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* ESRCH — already reaped */
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const timer = setTimeout(() => {
|
|
83
|
+
if (state.phase !== 'running')
|
|
84
|
+
return;
|
|
85
|
+
state = { phase: 'term_sent' };
|
|
86
|
+
proc.kill('SIGTERM');
|
|
87
|
+
// REF'D on purpose: an unref'd timer is destroyed when the hook bin
|
|
88
|
+
// exits right after this rejection — SIGKILL would never fire exactly
|
|
89
|
+
// where SIGTERM-ignoring orphans were observed. The ≤graceMs tail
|
|
90
|
+
// sits far inside the 360s outer hook cap; 'closed_late' clears it
|
|
91
|
+
// for well-behaved children.
|
|
92
|
+
graceTimer = setTimeout(groupKill, opts.graceMs ?? 5_000);
|
|
93
|
+
reject(opts.timeoutError(opts.timeoutMs));
|
|
94
|
+
}, opts.timeoutMs);
|
|
95
|
+
proc.stdout.on('data', (d) => {
|
|
96
|
+
stdout += d.toString('utf8');
|
|
97
|
+
});
|
|
98
|
+
proc.stderr.on('data', (d) => {
|
|
99
|
+
stderr += d.toString('utf8');
|
|
100
|
+
});
|
|
101
|
+
proc.on('error', (e) => {
|
|
102
|
+
if (state.phase !== 'running')
|
|
103
|
+
return;
|
|
104
|
+
state = { phase: 'spawn_failed' };
|
|
105
|
+
clearTimeout(timer);
|
|
106
|
+
reject(new Error(`${prefix}spawn failed: ${e.message}`));
|
|
107
|
+
});
|
|
108
|
+
proc.on('close', (code) => {
|
|
109
|
+
if (state.phase === 'running') {
|
|
110
|
+
state = { phase: 'closed' };
|
|
111
|
+
clearTimeout(timer);
|
|
112
|
+
if (code === 0)
|
|
113
|
+
resolve(stdout);
|
|
114
|
+
else
|
|
115
|
+
reject(new Error(`${prefix}exit ${code}: ${stderr.trim()}`));
|
|
116
|
+
}
|
|
117
|
+
else if (state.phase === 'term_sent') {
|
|
118
|
+
state = { phase: 'closed_late' }; // child obeyed SIGTERM inside grace
|
|
119
|
+
if (graceTimer !== undefined)
|
|
120
|
+
clearTimeout(graceTimer);
|
|
121
|
+
}
|
|
122
|
+
// closed / spawn_failed / group_killed: terminal — nothing to do.
|
|
123
|
+
});
|
|
124
|
+
try {
|
|
125
|
+
proc.stdin.write(opts.prompt);
|
|
126
|
+
proc.stdin.end();
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
if (state.phase === 'running') {
|
|
130
|
+
state = { phase: 'spawn_failed' };
|
|
131
|
+
clearTimeout(timer);
|
|
132
|
+
reject(new Error(`${prefix}stdin write failed: ${String(e)}`));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=spawn_lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn_lifecycle.js","sourceRoot":"","sources":["../../src/runtime/spawn_lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T-npm-auto-update UPD.1 (wg-7091e922881b) — the check layer for the npm
|
|
3
|
+
* rollout: a cached, fail-quiet version probe surfaced as a once-per-day
|
|
4
|
+
* CLI notice and an `opensquid doctor` section.
|
|
5
|
+
*
|
|
6
|
+
* Design locks (per the track pre-research):
|
|
7
|
+
* - The CLI hot path does ZERO network — it reads the cache file only;
|
|
8
|
+
* a stale cache spawns a DETACHED refresher (`opensquid update
|
|
9
|
+
* --check-only`) that writes the cache for the NEXT invocation.
|
|
10
|
+
* - Hook bins / MCP server / chat-daemon worker NEVER import this module
|
|
11
|
+
* (a hook must never pay a network call; grep-pinned in the suite).
|
|
12
|
+
* - `refreshCache` is the refresher's ONLY write path and is
|
|
13
|
+
* READ-MERGE-WRITE: the cache carries two fields with two writers (the
|
|
14
|
+
* notice closure stamps `notified_at`; the refresher updates
|
|
15
|
+
* `latest`/`checked_at`) — a blind refresher write would drop a
|
|
16
|
+
* concurrent notice stamp and break the 24h throttle.
|
|
17
|
+
* - Probe failures are SILENT (offline / firewalled / custom registry →
|
|
18
|
+
* no notice, no harm). Auto-apply is deliberately NOT here — the
|
|
19
|
+
* update only ever runs as a foreground user-invoked command.
|
|
20
|
+
*
|
|
21
|
+
* Imports from: node:fs/promises, node:path, semver, ./atomic_write.js,
|
|
22
|
+
* ./paths.js.
|
|
23
|
+
* Imported by: src/cli.ts (notice + doctor), src/setup/cli/update.ts
|
|
24
|
+
* (--check-only), src/setup/cli/doctor.ts (update section).
|
|
25
|
+
*/
|
|
26
|
+
export interface UpdateCache {
|
|
27
|
+
/** Latest version seen on the registry. */
|
|
28
|
+
latest: string;
|
|
29
|
+
/** ISO timestamp of the successful probe that wrote this. */
|
|
30
|
+
checked_at: string;
|
|
31
|
+
/** ISO timestamp of the last time the NOTICE was printed (24h throttle). */
|
|
32
|
+
notified_at?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare const updateCachePath: () => string;
|
|
35
|
+
export declare const CHANGELOG_URL = "https://github.com/smlee/opensquid/blob/main/CHANGELOG.md";
|
|
36
|
+
export declare function readUpdateCache(): Promise<UpdateCache | null>;
|
|
37
|
+
export declare function writeUpdateCache(cache: UpdateCache): Promise<void>;
|
|
38
|
+
export declare function isStale(cache: UpdateCache | null, nowMs: number): boolean;
|
|
39
|
+
/** The notice line, or null (not newer / bad semver / throttled <24h). */
|
|
40
|
+
export declare function noticeLine(cache: UpdateCache | null, current: string, nowMs: number): string | null;
|
|
41
|
+
/**
|
|
42
|
+
* The refresher's ONLY write path — READ-MERGE-WRITE so a concurrent
|
|
43
|
+
* notice's `notified_at` stamp survives the refresh (the 24h-throttle race
|
|
44
|
+
* the spec-audit caught).
|
|
45
|
+
*/
|
|
46
|
+
export declare function refreshCache(latest: string, nowIso: string): Promise<void>;
|
|
47
|
+
/** The running package's version — this file lives at <root>/{dist,src}/runtime/,
|
|
48
|
+
* so package.json is two levels up (same idiom as mcp/server.ts). */
|
|
49
|
+
export declare function readCurrentVersion(): Promise<string>;
|
|
50
|
+
/** Fail-quiet registry probe: the latest published version, or null. */
|
|
51
|
+
export declare function probeLatest(timeoutMs?: number): Promise<string | null>;
|
|
52
|
+
//# sourceMappingURL=update_check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_check.d.ts","sourceRoot":"","sources":["../../src/runtime/update_check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAUH,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,eAAe,QAAO,MAAqD,CAAC;AAGzF,eAAO,MAAM,aAAa,8DAA8D,CAAC;AAEzF,wBAAsB,eAAe,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CASnE;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAMxE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CACxB,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAUf;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAED;sEACsE;AACtE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAQ1D;AAED,wEAAwE;AACxE,wBAAsB,WAAW,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa3E"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* T-npm-auto-update UPD.1 (wg-7091e922881b) — the check layer for the npm
|
|
3
|
+
* rollout: a cached, fail-quiet version probe surfaced as a once-per-day
|
|
4
|
+
* CLI notice and an `opensquid doctor` section.
|
|
5
|
+
*
|
|
6
|
+
* Design locks (per the track pre-research):
|
|
7
|
+
* - The CLI hot path does ZERO network — it reads the cache file only;
|
|
8
|
+
* a stale cache spawns a DETACHED refresher (`opensquid update
|
|
9
|
+
* --check-only`) that writes the cache for the NEXT invocation.
|
|
10
|
+
* - Hook bins / MCP server / chat-daemon worker NEVER import this module
|
|
11
|
+
* (a hook must never pay a network call; grep-pinned in the suite).
|
|
12
|
+
* - `refreshCache` is the refresher's ONLY write path and is
|
|
13
|
+
* READ-MERGE-WRITE: the cache carries two fields with two writers (the
|
|
14
|
+
* notice closure stamps `notified_at`; the refresher updates
|
|
15
|
+
* `latest`/`checked_at`) — a blind refresher write would drop a
|
|
16
|
+
* concurrent notice stamp and break the 24h throttle.
|
|
17
|
+
* - Probe failures are SILENT (offline / firewalled / custom registry →
|
|
18
|
+
* no notice, no harm). Auto-apply is deliberately NOT here — the
|
|
19
|
+
* update only ever runs as a foreground user-invoked command.
|
|
20
|
+
*
|
|
21
|
+
* Imports from: node:fs/promises, node:path, semver, ./atomic_write.js,
|
|
22
|
+
* ./paths.js.
|
|
23
|
+
* Imported by: src/cli.ts (notice + doctor), src/setup/cli/update.ts
|
|
24
|
+
* (--check-only), src/setup/cli/doctor.ts (update section).
|
|
25
|
+
*/
|
|
26
|
+
import { readFile } from 'node:fs/promises';
|
|
27
|
+
import { join } from 'node:path';
|
|
28
|
+
import semver from 'semver';
|
|
29
|
+
import { atomicWriteFile } from './atomic_write.js';
|
|
30
|
+
import { OPENSQUID_HOME } from './paths.js';
|
|
31
|
+
export const updateCachePath = () => join(OPENSQUID_HOME(), 'update-check.json');
|
|
32
|
+
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
33
|
+
export const CHANGELOG_URL = 'https://github.com/smlee/opensquid/blob/main/CHANGELOG.md';
|
|
34
|
+
export async function readUpdateCache() {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(await readFile(updateCachePath(), 'utf8'));
|
|
37
|
+
return typeof parsed.latest === 'string' && typeof parsed.checked_at === 'string'
|
|
38
|
+
? parsed
|
|
39
|
+
: null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null; // ENOENT / corrupt → treated as absent
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function writeUpdateCache(cache) {
|
|
46
|
+
try {
|
|
47
|
+
await atomicWriteFile(updateCachePath(), JSON.stringify(cache, null, 2));
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* best-effort — a cache failure must never break a CLI command */
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function isStale(cache, nowMs) {
|
|
54
|
+
if (cache === null)
|
|
55
|
+
return true;
|
|
56
|
+
const t = Date.parse(cache.checked_at);
|
|
57
|
+
return !Number.isFinite(t) || nowMs - t > DAY_MS;
|
|
58
|
+
}
|
|
59
|
+
/** The notice line, or null (not newer / bad semver / throttled <24h). */
|
|
60
|
+
export function noticeLine(cache, current, nowMs) {
|
|
61
|
+
if (cache === null)
|
|
62
|
+
return null;
|
|
63
|
+
if (semver.valid(cache.latest) === null || semver.valid(current) === null)
|
|
64
|
+
return null;
|
|
65
|
+
if (!semver.gt(cache.latest, current))
|
|
66
|
+
return null;
|
|
67
|
+
const last = cache.notified_at === undefined ? NaN : Date.parse(cache.notified_at);
|
|
68
|
+
if (Number.isFinite(last) && nowMs - last < DAY_MS)
|
|
69
|
+
return null;
|
|
70
|
+
return (`opensquid ${current} → ${cache.latest} available — run \`opensquid update\`. ` +
|
|
71
|
+
`Changelog: ${CHANGELOG_URL}`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The refresher's ONLY write path — READ-MERGE-WRITE so a concurrent
|
|
75
|
+
* notice's `notified_at` stamp survives the refresh (the 24h-throttle race
|
|
76
|
+
* the spec-audit caught).
|
|
77
|
+
*/
|
|
78
|
+
export async function refreshCache(latest, nowIso) {
|
|
79
|
+
const prior = await readUpdateCache();
|
|
80
|
+
await writeUpdateCache({
|
|
81
|
+
latest,
|
|
82
|
+
checked_at: nowIso,
|
|
83
|
+
...(prior?.notified_at !== undefined ? { notified_at: prior.notified_at } : {}),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** The running package's version — this file lives at <root>/{dist,src}/runtime/,
|
|
87
|
+
* so package.json is two levels up (same idiom as mcp/server.ts). */
|
|
88
|
+
export async function readCurrentVersion() {
|
|
89
|
+
try {
|
|
90
|
+
const raw = await readFile(new URL('../../package.json', import.meta.url), 'utf8');
|
|
91
|
+
const parsed = JSON.parse(raw);
|
|
92
|
+
return parsed.version ?? '0.0.0';
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return '0.0.0';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** Fail-quiet registry probe: the latest published version, or null. */
|
|
99
|
+
export async function probeLatest(timeoutMs = 3_000) {
|
|
100
|
+
try {
|
|
101
|
+
const res = await fetch('https://registry.npmjs.org/opensquid/latest', {
|
|
102
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
103
|
+
});
|
|
104
|
+
if (!res.ok)
|
|
105
|
+
return null;
|
|
106
|
+
const body = (await res.json());
|
|
107
|
+
return typeof body.version === 'string' && semver.valid(body.version) !== null
|
|
108
|
+
? body.version
|
|
109
|
+
: null;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return null; // offline / firewalled / slow — no notice, no harm
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=update_check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_check.js","sourceRoot":"","sources":["../../src/runtime/update_check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/setup/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEzC,KAAK,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AAED,yEAAyE;AACzE,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BrE;AAED,uDAAuD;AACvD,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA+CjF;AA+FD;yBACyB;AACzB,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAa3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/setup/cli/doctor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgEzC,KAAK,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1C,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wEAAwE;IACxE,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AAED,yEAAyE;AACzE,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA8BrE;AAED,uDAAuD;AACvD,wBAAsB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA+CjF;AA+FD;yBACyB;AACzB,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAa3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2HrD"}
|