@cotal-ai/manager 0.58.0 → 0.59.0
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/commands.d.ts.map +1 -1
- package/dist/commands.js +41 -12
- package/dist/commands.js.map +1 -1
- package/dist/endpoint-evict.d.ts +9 -4
- package/dist/endpoint-evict.d.ts.map +1 -1
- package/dist/endpoint-evict.js +82 -26
- package/dist/endpoint-evict.js.map +1 -1
- package/dist/holder-liveness.d.ts +4 -0
- package/dist/holder-liveness.d.ts.map +1 -1
- package/dist/holder-liveness.js +95 -3
- package/dist/holder-liveness.js.map +1 -1
- package/dist/manager-service-contract.d.ts +15 -6
- package/dist/manager-service-contract.d.ts.map +1 -1
- package/dist/manager-service-contract.js +84 -13
- package/dist/manager-service-contract.js.map +1 -1
- package/dist/manager.d.ts +117 -51
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +355 -105
- package/dist/manager.js.map +1 -1
- package/dist/remote-authority.d.ts +12 -1
- package/dist/remote-authority.d.ts.map +1 -1
- package/dist/remote-authority.js +29 -2
- package/dist/remote-authority.js.map +1 -1
- package/dist/resume.d.ts.map +1 -1
- package/dist/resume.js +3 -0
- package/dist/resume.js.map +1 -1
- package/dist/run-hosting.d.ts +12 -1
- package/dist/run-hosting.d.ts.map +1 -1
- package/dist/run-hosting.js +28 -0
- package/dist/run-hosting.js.map +1 -1
- package/dist/runtime/custodial-pty.d.ts +8 -5
- package/dist/runtime/custodial-pty.d.ts.map +1 -1
- package/dist/runtime/custodial-pty.js +23 -12
- package/dist/runtime/custodial-pty.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +148 -5
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/pty.d.ts +3 -4
- package/dist/runtime/pty.d.ts.map +1 -1
- package/dist/runtime/pty.js +9 -6
- package/dist/runtime/pty.js.map +1 -1
- package/package.json +12 -12
- package/dist/ui.d.ts +0 -10
- package/dist/ui.d.ts.map +0 -1
- package/dist/ui.js +0 -10
- package/dist/ui.js.map +0 -1
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { mkdirSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
+
import { discardLaunchArtifacts } from "@cotal-ai/core";
|
|
4
5
|
import { adoptSeatSync, launchSeat, loadSeat, reapSeat, seatId, unsupportedTransport } from "@cotal-ai/seat";
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
/** Where custodial pty seats keep their records: `COTAL_SEAT_ROOT`, else `~/.cotal/seats`. */
|
|
7
|
+
export function custodyRoot() {
|
|
8
|
+
return process.env.COTAL_SEAT_ROOT ?? join(homedir(), ".cotal", "seats");
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* `createRuntime("pty")`
|
|
12
|
-
*
|
|
11
|
+
* Linux custodial pty: a one-shot launcher starts a detached per-seat
|
|
12
|
+
* custodian, then this process holds only a proxy AgentHandle.
|
|
13
|
+
* `createRuntime("pty")` no longer spawns through this class (#1391); it uses
|
|
14
|
+
* it only to adopt and reap seats a pre-repair manager left running. Spawn and
|
|
15
|
+
* adopt throw the named transport error off Linux.
|
|
13
16
|
*/
|
|
14
17
|
export class CustodialPtyRuntime {
|
|
15
18
|
root;
|
|
@@ -23,7 +26,7 @@ export class CustodialPtyRuntime {
|
|
|
23
26
|
* to fail-closed absent handling (RuntimeReapUnproven).
|
|
24
27
|
*/
|
|
25
28
|
records = new Map();
|
|
26
|
-
constructor(root =
|
|
29
|
+
constructor(root = custodyRoot()) {
|
|
27
30
|
this.root = root;
|
|
28
31
|
mkdirSync(this.root, { recursive: true, mode: 0o700 });
|
|
29
32
|
}
|
|
@@ -36,14 +39,22 @@ export class CustodialPtyRuntime {
|
|
|
36
39
|
return { kind: this.kind, id: seatId() };
|
|
37
40
|
}
|
|
38
41
|
spawn(name, spec, cwd, reference) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
try {
|
|
43
|
+
if (process.platform !== "linux")
|
|
44
|
+
throw unsupportedTransport();
|
|
45
|
+
if (reference !== undefined && reference.kind !== "pty")
|
|
46
|
+
throw new Error(`cannot spawn under runtime kind "${reference.kind}" with pty`);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// Refused before any process exists, so no child will read the launch's files (core
|
|
50
|
+
// launch-artifacts). Every later refusal is launchSeat's, which removes them the same way.
|
|
51
|
+
discardLaunchArtifacts(spec.artifacts);
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
43
54
|
const rec = launchSeat({
|
|
44
55
|
root: this.root,
|
|
45
56
|
name,
|
|
46
|
-
spec: { command: spec.command, args: spec.args, env: spec.env ?? {}, confirm: spec.confirm },
|
|
57
|
+
spec: { command: spec.command, args: spec.args, env: spec.env ?? {}, confirm: spec.confirm, artifacts: spec.artifacts },
|
|
47
58
|
cwd,
|
|
48
59
|
...(reference ? { id: reference.id } : {}),
|
|
49
60
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custodial-pty.js","sourceRoot":"","sources":["../../src/runtime/custodial-pty.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"custodial-pty.js","sourceRoot":"","sources":["../../src/runtime/custodial-pty.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ export declare class RuntimeReapUnproven extends Error {
|
|
|
39
39
|
*/
|
|
40
40
|
export interface CustodialRuntime extends Runtime {
|
|
41
41
|
reserve(): RuntimeReference;
|
|
42
|
+
/** Also removes the launch artifacts (core launch-artifacts) the custody record still lists, once
|
|
43
|
+
* the seat is proved gone, even when another manager launched it. */
|
|
42
44
|
reap(reference: RuntimeReference): Promise<RuntimeReapEvidence>;
|
|
43
45
|
}
|
|
44
46
|
/** Whether this backend custodies its own processes. Both methods are required together: a runtime
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,WAAW,EAEhB,KAAK,OAAO,EACZ,KAAK,WAAW,EAEhB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAC;AAKxB,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEvF,uFAAuF;AACvF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,GAAG,WAAW,CAI9F;AAED;;;;;qFAKqF;AACrF,MAAM,MAAM,mBAAmB,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhG;;6EAE6E;AAC7E,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;gBACzB,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB;CAQ7D;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,OAAO,IAAI,gBAAgB,CAAC;IAC5B;0EACsE;IACtE,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACjE;AAED;;gEAEgE;AAChE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAGhF;AAED;;iCAEiC;AACjC,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhD;AAyBD;;2FAE2F;AAC3F,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,MAAM,CAAC;AAE/C;;qFAEqF;AACrF,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzE;AA4ID,wFAAwF;AACxF,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAQ1E"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { dirname, join, resolve } from "node:path";
|
|
3
|
-
import { registry } from "@cotal-ai/core";
|
|
3
|
+
import { discardLaunchArtifacts, reclaimWithChild, registry, SpawnRefused, } from "@cotal-ai/core";
|
|
4
4
|
import { CustodialPtyRuntime } from "./custodial-pty.js";
|
|
5
5
|
import { LegacyPtyRuntime } from "./pty.js";
|
|
6
|
+
import { unsupportedTransport } from "@cotal-ai/seat";
|
|
6
7
|
/** Adopt a durable handle, or refuse by name when this runtime has no adopt method. */
|
|
7
8
|
export function requireRuntimeAdopt(runtime, reference) {
|
|
8
9
|
if (typeof runtime.adopt !== "function")
|
|
@@ -32,7 +33,7 @@ export function isCustodialRuntime(runtime) {
|
|
|
32
33
|
* own processes. Absent means REFUSE, never "assume gone": the lifecycle stays held rather than
|
|
33
34
|
* retiring over a live seat. */
|
|
34
35
|
export async function requireRuntimeReap(runtime, reference) {
|
|
35
|
-
if (
|
|
36
|
+
if (typeof runtime.reap !== "function")
|
|
36
37
|
throw new Error(`runtime "${runtime.kind}" does not support reap; the orphaned process for ${reference.kind}:${reference.id} cannot be proved gone`);
|
|
37
38
|
const evidence = await runtime.reap(reference);
|
|
38
39
|
// The refusal this function's contract promises, made structural: `absent` never leaves here, so
|
|
@@ -43,10 +44,33 @@ export async function requireRuntimeReap(runtime, reference) {
|
|
|
43
44
|
throw new RuntimeReapUnproven(runtime.kind, reference);
|
|
44
45
|
return evidence;
|
|
45
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* The built-in `pty` runtime on every platform. It spawns in-process and never starts a custodian
|
|
49
|
+
* (#1391). On Linux it still adopts and reaps seats that an earlier `CustodialPtyRuntime` launched,
|
|
50
|
+
* so a manager can drain custody records left by a pre-repair manager. It has no `reserve`, so the
|
|
51
|
+
* manager records no custody reference for a new spawn.
|
|
52
|
+
*/
|
|
53
|
+
class PtyRuntime extends LegacyPtyRuntime {
|
|
54
|
+
custodial;
|
|
55
|
+
legacyCustody() {
|
|
56
|
+
if (process.platform !== "linux")
|
|
57
|
+
throw unsupportedTransport();
|
|
58
|
+
return (this.custodial ??= new CustodialPtyRuntime());
|
|
59
|
+
}
|
|
60
|
+
adopt(reference) {
|
|
61
|
+
return this.legacyCustody().adopt(reference);
|
|
62
|
+
}
|
|
63
|
+
reap(reference) {
|
|
64
|
+
return this.legacyCustody().reap(reference);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
46
67
|
/** Build the runtime a manager will spawn through. `pty` ships with the manager and is what `auto`
|
|
47
68
|
* resolves to. Every other name resolves a self-registered {@link RuntimeProvider}; an explicit
|
|
48
69
|
* provider that is absent or unreachable throws, never a silent fallback to pty. */
|
|
49
70
|
export function createRuntime(mode, session) {
|
|
71
|
+
return ownLaunchArtifacts(createBackend(mode, session));
|
|
72
|
+
}
|
|
73
|
+
function createBackend(mode, session) {
|
|
50
74
|
const kind = mode === "auto" ? "pty" : mode;
|
|
51
75
|
if (kind === "pty") {
|
|
52
76
|
// node-pty's native spawn-helper hangs before exec under Bun — it never becomes the child, so
|
|
@@ -56,9 +80,7 @@ export function createRuntime(mode, session) {
|
|
|
56
80
|
throw new Error(`the pty runtime requires Node.js - the manager is running under Bun (v${process.versions.bun}), ` +
|
|
57
81
|
`where @lydell/node-pty's spawn-helper hangs before exec and every agent wedges at "starting…". ` +
|
|
58
82
|
`Run the manager under node, or install and select an external runtime.`);
|
|
59
|
-
|
|
60
|
-
return new CustodialPtyRuntime();
|
|
61
|
-
return new LegacyPtyRuntime();
|
|
83
|
+
return new PtyRuntime();
|
|
62
84
|
}
|
|
63
85
|
let provider;
|
|
64
86
|
try {
|
|
@@ -71,6 +93,127 @@ export function createRuntime(mode, session) {
|
|
|
71
93
|
throw new Error(`${kind} runtime requested but it is not reachable`);
|
|
72
94
|
return provider.create({ session });
|
|
73
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* The launcher's half of core launch-artifacts, installed on every runtime this module creates so it
|
|
98
|
+
* holds for every backend: a spec's private files are removed only once the runtime has proved its
|
|
99
|
+
* child gone.
|
|
100
|
+
*
|
|
101
|
+
* - A custodial runtime (one with `reserve` and `reap`; the built-in pty is not one) hands the files
|
|
102
|
+
* to the seat's custodian, the parent of the child: it removes them when it sees that child exit,
|
|
103
|
+
* so they go on exit, stop and the custodian's own unattended timeout whether or not any manager
|
|
104
|
+
* is still alive. The runtime removes them on a refusal made before any process existed. The end
|
|
105
|
+
* of this manager's attach stream proves nothing, since a custodian that dies leaves its child
|
|
106
|
+
* running, so nothing here listens to it. Its reap, once it proves the seat gone, removes what the
|
|
107
|
+
* custody record still lists, which covers a custodian killed before its child exited and a
|
|
108
|
+
* removal that failed.
|
|
109
|
+
* - Any other runtime, the built-in pty included, gets the spec through core `reclaimWithChild`, so
|
|
110
|
+
* a watcher beside the child removes the files once the child is gone even when this manager was
|
|
111
|
+
* killed. This manager also discards on the exit its attach session streams (the in-process pty).
|
|
112
|
+
* One that cannot attach (tmux, cmux, orca, herdr) is polled through `status()`, and its
|
|
113
|
+
* `waitForExit`, the proof every stop already awaits, confirms the exit before the files go.
|
|
114
|
+
* - A spawn that throws {@link SpawnRefused} failed before it handed the spec's command to anything
|
|
115
|
+
* that could start it, so its files go at once. Any other throw is not proof that nothing
|
|
116
|
+
* started (a backend can fail after its child is up), so its files stay for the child's watcher,
|
|
117
|
+
* or for the OS temp reaper when no child started.
|
|
118
|
+
* - A removal that fails is tried again every few seconds until it succeeds.
|
|
119
|
+
*/
|
|
120
|
+
function ownLaunchArtifacts(runtime) {
|
|
121
|
+
if (isCustodialRuntime(runtime))
|
|
122
|
+
return runtime;
|
|
123
|
+
const spawn = runtime.spawn.bind(runtime);
|
|
124
|
+
runtime.spawn = (name, spec, cwd, reference) => {
|
|
125
|
+
let handle;
|
|
126
|
+
try {
|
|
127
|
+
handle = spawn(name, reclaimWithChild(spec), cwd, reference);
|
|
128
|
+
}
|
|
129
|
+
catch (e) {
|
|
130
|
+
if (e instanceof SpawnRefused)
|
|
131
|
+
removeOwned(name, spec.artifacts);
|
|
132
|
+
throw e;
|
|
133
|
+
}
|
|
134
|
+
if (spec.artifacts?.length)
|
|
135
|
+
discardOnExit(name, handle, spec.artifacts);
|
|
136
|
+
return handle;
|
|
137
|
+
};
|
|
138
|
+
return runtime;
|
|
139
|
+
}
|
|
140
|
+
/** How often a handle with no exit stream is asked whether its child has exited, and how often a
|
|
141
|
+
* failed removal is tried again. */
|
|
142
|
+
const EXIT_POLL_MS = 5_000;
|
|
143
|
+
/** Remove artifacts whose child is proved gone or never started. Ownership ends when the removal
|
|
144
|
+
* succeeds, not when it is tried: a failure keeps a timer retrying it. */
|
|
145
|
+
function removeOwned(name, artifacts) {
|
|
146
|
+
if (!artifacts?.length)
|
|
147
|
+
return;
|
|
148
|
+
let retry;
|
|
149
|
+
const attempt = () => {
|
|
150
|
+
try {
|
|
151
|
+
discardLaunchArtifacts(artifacts);
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
if (!retry) {
|
|
155
|
+
console.error(`! ${name}: ${e.message}; trying again every ${EXIT_POLL_MS / 1000}s`);
|
|
156
|
+
retry = setInterval(attempt, EXIT_POLL_MS);
|
|
157
|
+
retry.unref();
|
|
158
|
+
}
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
clearInterval(retry);
|
|
162
|
+
};
|
|
163
|
+
attempt();
|
|
164
|
+
}
|
|
165
|
+
function discardOnExit(name, handle, artifacts) {
|
|
166
|
+
let done = false;
|
|
167
|
+
let poll;
|
|
168
|
+
// Runs only once the exit is proved.
|
|
169
|
+
const finish = () => {
|
|
170
|
+
if (done)
|
|
171
|
+
return;
|
|
172
|
+
done = true;
|
|
173
|
+
clearInterval(poll);
|
|
174
|
+
removeOwned(name, artifacts);
|
|
175
|
+
};
|
|
176
|
+
// Wrapped, never called at spawn: a runtime bounds its wait for a stop (tmux gives up after
|
|
177
|
+
// seconds), so a wait started at spawn would give up on every seat that outlives that bound.
|
|
178
|
+
const wait = handle.waitForExit?.bind(handle);
|
|
179
|
+
if (wait)
|
|
180
|
+
handle.waitForExit = () => wait().then(finish);
|
|
181
|
+
let session;
|
|
182
|
+
try {
|
|
183
|
+
session = handle.attach();
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// No exit stream. Poll the runtime's own status and let its wait prove the exit, so a seat that
|
|
187
|
+
// ends on its own is cleaned up as well as one that is stopped.
|
|
188
|
+
if (!wait)
|
|
189
|
+
return;
|
|
190
|
+
let waiting = false;
|
|
191
|
+
poll = setInterval(() => {
|
|
192
|
+
if (waiting)
|
|
193
|
+
return;
|
|
194
|
+
let exited;
|
|
195
|
+
try {
|
|
196
|
+
exited = handle.status() === "exited";
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (!exited)
|
|
202
|
+
return;
|
|
203
|
+
waiting = true;
|
|
204
|
+
wait()
|
|
205
|
+
.then(finish, () => { })
|
|
206
|
+
.then(() => {
|
|
207
|
+
waiting = false;
|
|
208
|
+
});
|
|
209
|
+
}, EXIT_POLL_MS);
|
|
210
|
+
poll.unref();
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
session.onExit(finish);
|
|
214
|
+
if (handle.status() === "exited")
|
|
215
|
+
finish();
|
|
216
|
+
}
|
|
74
217
|
/** Walk up from `startDir` to the pnpm workspace root (for spawning `pnpm cotal …`). */
|
|
75
218
|
export function findWorkspaceRoot(startDir = process.cwd()) {
|
|
76
219
|
let dir = resolve(startDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,QAAQ,EACR,YAAY,GAOb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAItD,uFAAuF;AACvF,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,SAA2B;IAC/E,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;QACrC,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,0BAA0B,CAAC,CAAC;IACtE,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAUD;;6EAE6E;AAC7E,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACnC,SAAS,CAAmB;IACrC,YAAY,WAAmB,EAAE,SAA2B;QAC1D,KAAK,CACH,YAAY,WAAW,iCAAiC,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,iDAAiD;YACrI,6FAA6F,CAChG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAyBD;;gEAEgE;AAChE,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,CAAC,GAAG,OAAoC,CAAC;IAC/C,OAAO,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AACzE,CAAC;AAED;;iCAEiC;AACjC,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAgB,EAChB,SAA2B;IAE3B,IAAI,OAAQ,OAAqC,CAAC,IAAI,KAAK,UAAU;QACnE,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,qDAAqD,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,wBAAwB,CAAC,CAAC;IACvJ,MAAM,QAAQ,GAAG,MAAO,OAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,iGAAiG;IACjG,kGAAkG;IAClG,kGAAkG;IAClG,eAAe;IACf,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1F,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAW,SAAQ,gBAAgB;IAC/B,SAAS,CAAuB;IAEhC,aAAa;QACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,oBAAoB,EAAE,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,mBAAmB,EAAE,CAAC,CAAC;IACxD,CAAC;IAEQ,KAAK,CAAC,SAA2B;QACxC,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,SAA2B;QAC9B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF;AAOD;;qFAEqF;AACrF,MAAM,UAAU,aAAa,CAAC,IAAiB,EAAE,OAAe;IAC9D,OAAO,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB,EAAE,OAAe;IACvD,MAAM,IAAI,GAAgB,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,8FAA8F;QAC9F,kGAAkG;QAClG,uGAAuG;QACvG,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG;YACtB,MAAM,IAAI,KAAK,CACb,yEAAyE,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK;gBAChG,iGAAiG;gBACjG,wEAAwE,CAC3E,CAAC;QACJ,OAAO,IAAI,UAAU,EAAE,CAAC;IAC1B,CAAC;IACD,IAAI,QAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAkB,SAAS,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,oBAAoB,IAAI,yGAAyG,CAClI,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,4CAA4C,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAS,kBAAkB,CAAC,OAAgB;IAC1C,IAAI,kBAAkB,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,OAAO,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE;QAC7C,IAAI,MAAmB,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,YAAY;gBAAE,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACjE,MAAM,CAAC,CAAC;QACV,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,EAAE,MAAM;YAAE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;qCACqC;AACrC,MAAM,YAAY,GAAG,KAAK,CAAC;AAE3B;2EAC2E;AAC3E,SAAS,WAAW,CAAC,IAAY,EAAE,SAAwC;IACzE,IAAI,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO;IAC/B,IAAI,KAAiD,CAAC;IACtD,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,CAAC;YACH,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAM,CAAW,CAAC,OAAO,wBAAwB,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC;gBAChG,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAC3C,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC;YACD,OAAO;QACT,CAAC;QACD,aAAa,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IACF,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,MAAmB,EAAE,SAA4B;IACpF,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,IAAgD,CAAC;IACrD,qCAAqC;IACrC,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,IAAI;YAAE,OAAO;QACjB,IAAI,GAAG,IAAI,CAAC;QACZ,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/B,CAAC,CAAC;IACF,4FAA4F;IAC5F,6FAA6F;IAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,IAAI;QAAE,MAAM,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,OAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,gGAAgG;QAChG,gEAAgE;QAChE,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;YACtB,IAAI,OAAO;gBAAE,OAAO;YACpB,IAAI,MAAe,CAAC;YACpB,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,QAAQ,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,EAAE;iBACH,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC;iBACtB,IAAI,CAAC,GAAG,EAAE;gBACT,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,YAAY,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,QAAQ;QAAE,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IAChE,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,SAAS,CAAC;QACR,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7C,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
|
package/dist/runtime/pty.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { AgentHandle, LaunchSpec, Runtime, RuntimeReference } from "@cotal-ai/core";
|
|
2
2
|
/**
|
|
3
3
|
* In-process node-pty ownership. The worker is the child's parent, so killing
|
|
4
|
-
* the worker kills the seat.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* also instantiates this class on Linux as the honest M1 residual.
|
|
4
|
+
* the worker kills the seat. `createRuntime("pty")` spawns here on every
|
|
5
|
+
* platform; on Linux its subclass still adopts seats an earlier custodial
|
|
6
|
+
* manager launched. This class's own `adopt` throws.
|
|
8
7
|
*/
|
|
9
8
|
export declare class LegacyPtyRuntime implements Runtime {
|
|
10
9
|
readonly kind: "pty";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../src/runtime/pty.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAiB,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAcxG
|
|
1
|
+
{"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../src/runtime/pty.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAiB,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAcxG;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAE/B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW;IA+L/D,KAAK,CAAC,UAAU,EAAE,gBAAgB,GAAG,WAAW;CAGjD;AAED,2FAA2F;AAC3F,OAAO,EAAE,gBAAgB,IAAI,UAAU,EAAE,CAAC"}
|
package/dist/runtime/pty.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as pty from "@lydell/node-pty";
|
|
2
2
|
import Headless from "@xterm/headless";
|
|
3
3
|
import { SerializeAddon } from "@xterm/addon-serialize";
|
|
4
|
-
import { StartupConfirmMatcher, unmatchedConfirmMessage, unsupportedTransport, preferSeatForOomKill } from "@cotal-ai/seat";
|
|
4
|
+
import { ConnectorDiagnosticReader, StartupConfirmMatcher, unmatchedConfirmMessage, unsupportedTransport, preferSeatForOomKill } from "@cotal-ai/seat";
|
|
5
5
|
import { preparePtyLaunch } from "./windows-launch.js";
|
|
6
6
|
const DEFAULT_COLS = 120;
|
|
7
7
|
const DEFAULT_ROWS = 32;
|
|
@@ -14,10 +14,9 @@ const CONFIRM_TIMEOUT_MS = 15_000;
|
|
|
14
14
|
const GRACE_MS = 3_000;
|
|
15
15
|
/**
|
|
16
16
|
* In-process node-pty ownership. The worker is the child's parent, so killing
|
|
17
|
-
* the worker kills the seat.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* also instantiates this class on Linux as the honest M1 residual.
|
|
17
|
+
* the worker kills the seat. `createRuntime("pty")` spawns here on every
|
|
18
|
+
* platform; on Linux its subclass still adopts seats an earlier custodial
|
|
19
|
+
* manager launched. This class's own `adopt` throws.
|
|
21
20
|
*/
|
|
22
21
|
export class LegacyPtyRuntime {
|
|
23
22
|
kind = "pty";
|
|
@@ -64,6 +63,8 @@ export class LegacyPtyRuntime {
|
|
|
64
63
|
// Retained here so `exitInfo` can answer after the fact; stays undefined while the child lives,
|
|
65
64
|
// because "not exited yet" and "exited cleanly" must never read the same.
|
|
66
65
|
let exit;
|
|
66
|
+
// The child's last connector diagnostic, carried on `exit` so the reap line can name it.
|
|
67
|
+
const diagnostic = new ConnectorDiagnosticReader();
|
|
67
68
|
// Honor LaunchSpec.confirm literally: match the connector-owned text in normalized early output,
|
|
68
69
|
// press Enter exactly once when it appears, and fail loud if the declared gate never materializes.
|
|
69
70
|
const confirmMatcher = spec.confirm ? new StartupConfirmMatcher(spec.confirm) : undefined;
|
|
@@ -82,6 +83,7 @@ export class LegacyPtyRuntime {
|
|
|
82
83
|
}
|
|
83
84
|
proc.onData((d) => {
|
|
84
85
|
term.write(d); // mirror into the screen model for attach-time reconstruction
|
|
86
|
+
diagnostic.push(d);
|
|
85
87
|
const b = Buffer.from(d, "utf8");
|
|
86
88
|
for (const fn of dataSubs)
|
|
87
89
|
fn(b);
|
|
@@ -96,7 +98,8 @@ export class LegacyPtyRuntime {
|
|
|
96
98
|
alive = false;
|
|
97
99
|
// `signal` is absent on an ordinary exit and 0 is a real exit code, so both are recorded as
|
|
98
100
|
// present-or-absent rather than coalesced into one number.
|
|
99
|
-
|
|
101
|
+
const last = diagnostic.read();
|
|
102
|
+
exit = { code: exitCode, ...(signal === undefined ? {} : { signal }), ...(last ? { diagnostic: last } : {}) };
|
|
100
103
|
if (confirmTimer)
|
|
101
104
|
clearTimeout(confirmTimer);
|
|
102
105
|
for (const fn of exitSubs)
|
package/dist/runtime/pty.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/runtime/pty.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/runtime/pty.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cotal-ai/manager",
|
|
3
3
|
"description": "Cotal agent supervisor: spawns and manages mesh nodes via a pluggable runtime (pty/tmux/cmux/orca/herdr).",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.59.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@cotal-ai/core": "0.
|
|
22
|
-
"@cotal-ai/seat": "0.
|
|
23
|
-
"@cotal-ai/workspace": "0.
|
|
21
|
+
"@cotal-ai/core": "0.59.0",
|
|
22
|
+
"@cotal-ai/seat": "0.59.0",
|
|
23
|
+
"@cotal-ai/workspace": "0.59.0",
|
|
24
24
|
"@lydell/node-pty": "1.2.0-beta.12",
|
|
25
25
|
"@nats-io/jetstream": "^3.4.0",
|
|
26
26
|
"@nats-io/kv": "^3.4.0",
|
|
@@ -35,15 +35,15 @@
|
|
|
35
35
|
"zod": "^4.4.3"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@cotal-ai/auth": "0.
|
|
39
|
-
"@cotal-ai/connector-claude-code": "0.
|
|
40
|
-
"@cotal-ai/connector-codex": "0.
|
|
38
|
+
"@cotal-ai/auth": "0.59.0",
|
|
39
|
+
"@cotal-ai/connector-claude-code": "0.59.0",
|
|
40
|
+
"@cotal-ai/connector-codex": "0.59.0",
|
|
41
41
|
"@cotal-ai/smoke-kit": "0.0.0",
|
|
42
|
-
"@cotal-ai/connector-core": "0.
|
|
43
|
-
"@cotal-ai/connector-hermes": "0.
|
|
44
|
-
"@cotal-ai/connector-opencode": "0.
|
|
45
|
-
"@cotal-ai/delivery": "0.
|
|
46
|
-
"@cotal-ai/runtime": "0.
|
|
42
|
+
"@cotal-ai/connector-core": "0.59.0",
|
|
43
|
+
"@cotal-ai/connector-hermes": "0.59.0",
|
|
44
|
+
"@cotal-ai/connector-opencode": "0.59.0",
|
|
45
|
+
"@cotal-ai/delivery": "0.59.0",
|
|
46
|
+
"@cotal-ai/runtime": "0.59.0",
|
|
47
47
|
"@nats-io/nats-core": "^3.4.0",
|
|
48
48
|
"@types/ws": "^8.18.1",
|
|
49
49
|
"esbuild": "^0.28.1"
|
package/dist/ui.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Minimal ANSI helpers — local to the manager so it never imports the CLI. */
|
|
2
|
-
export declare const c: {
|
|
3
|
-
dim: (s: string) => string;
|
|
4
|
-
bold: (s: string) => string;
|
|
5
|
-
green: (s: string) => string;
|
|
6
|
-
cyan: (s: string) => string;
|
|
7
|
-
yellow: (s: string) => string;
|
|
8
|
-
red: (s: string) => string;
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,CAAC;aACH,MAAM;cACL,MAAM;eACL,MAAM;cACP,MAAM;gBACJ,MAAM;aACT,MAAM;CAChB,CAAC"}
|
package/dist/ui.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Minimal ANSI helpers — local to the manager so it never imports the CLI. */
|
|
2
|
-
export const c = {
|
|
3
|
-
dim: (s) => `\x1b[2m${s}\x1b[0m`,
|
|
4
|
-
bold: (s) => `\x1b[1m${s}\x1b[0m`,
|
|
5
|
-
green: (s) => `\x1b[32m${s}\x1b[0m`,
|
|
6
|
-
cyan: (s) => `\x1b[36m${s}\x1b[0m`,
|
|
7
|
-
yellow: (s) => `\x1b[33m${s}\x1b[0m`,
|
|
8
|
-
red: (s) => `\x1b[31m${s}\x1b[0m`,
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=ui.js.map
|
package/dist/ui.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS;IACxC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS;IACzC,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC3C,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC1C,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;IAC5C,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS;CAC1C,CAAC"}
|