askvireo 0.1.7 → 0.1.8
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/acp.js +309 -203
- package/dist/acp.js.map +1 -1
- package/dist/actions.js +20 -2
- package/dist/actions.js.map +1 -1
- package/dist/hook.js +211 -4
- package/dist/hook.js.map +1 -1
- package/dist/plugins/agents/index.js +135 -64
- package/dist/plugins/agents/index.js.map +1 -1
- package/dist/plugins/endpoint/index.js +3 -0
- package/dist/plugins/endpoint/index.js.map +1 -1
- package/dist/scheduler.js +1 -0
- package/dist/scheduler.js.map +1 -1
- package/package.json +1 -1
package/dist/acp.js
CHANGED
|
@@ -1,56 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
/**
|
|
5
|
-
* Coding agents over the Agent Client Protocol.
|
|
6
|
-
*
|
|
7
|
-
* `acpx` (openclaw/acpx) is a headless ACP client: it starts a coding agent,
|
|
8
|
-
* keeps its session, and mediates permission requests. Vireo drives it as a
|
|
9
|
-
* child process and reads its JSON-RPC stream, so every agent acpx knows
|
|
10
|
-
* (Claude Code, Codex, opencode, pi, …) works without more code.
|
|
11
|
-
*/
|
|
12
|
-
const require = createRequire(import.meta.url);
|
|
13
|
-
/** acpx's CLI entry, from this package's own dependency: nothing to install globally. */
|
|
14
|
-
export function acpxEntry() {
|
|
15
|
-
return join(dirname(require.resolve("acpx/package.json")), "dist", "cli.js");
|
|
16
|
-
}
|
|
1
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { createAcpRuntime, createAgentRegistry, createFileSessionStore, } from "acpx/runtime";
|
|
17
4
|
const READ_KINDS = ["read", "search", "think", "fetch"];
|
|
18
5
|
const WRITE_KINDS = ["edit", "move"];
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
/**
|
|
7
|
+
* Codex's own approval presets for each mode. Below full it runs in its read-only sandbox and asks
|
|
8
|
+
* before anything else, edits included; Vireo then answers by the mode. Its default ("agent")
|
|
9
|
+
* would run what it judges safe without asking.
|
|
10
|
+
*/
|
|
11
|
+
const CODEX_PRESETS = { "read-only": "read-only", edits: "read-only", full: "agent-full-access" };
|
|
12
|
+
/**
|
|
13
|
+
* What a built-in agent does in `mode` that the mode's name would not suggest: Codex runs shell
|
|
14
|
+
* commands inside the repository without asking whatever it is told, and pi asks about nothing.
|
|
15
|
+
* Undefined when the agent keeps to the mode (or is a command of the owner's, taken at its word).
|
|
16
|
+
*/
|
|
17
|
+
export function unasked(command, mode) {
|
|
21
18
|
if (mode === "full")
|
|
22
|
-
return
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const args = ["--deny-all", "--permission-policy", JSON.stringify(policy), "--non-interactive-permissions", "deny", "--no-terminal"];
|
|
30
|
-
if (mode === "read-only")
|
|
31
|
-
args.push("--no-fs");
|
|
32
|
-
return args;
|
|
33
|
-
}
|
|
34
|
-
/** Global flags, which acpx requires before the agent name. */
|
|
35
|
-
export function globalArgs(o) {
|
|
36
|
-
const args = ["--cwd", o.cwd, "--format", "json", "--json-strict", "--timeout", String(o.timeoutSeconds), "--ttl", String(o.ttlSeconds), ...permissionArgs(o.mode)];
|
|
37
|
-
if (o.agentCommand)
|
|
38
|
-
args.push("--agent", o.agentCommand);
|
|
39
|
-
if (o.model)
|
|
40
|
-
args.push("--model", o.model);
|
|
41
|
-
return args;
|
|
19
|
+
return undefined;
|
|
20
|
+
const agent = command.trim();
|
|
21
|
+
if (agent === "codex")
|
|
22
|
+
return "Codex runs shell commands inside the repository without asking (its sandbox keeps it there, with no network)";
|
|
23
|
+
if (agent === "pi")
|
|
24
|
+
return "pi runs every tool, shell commands included, without asking";
|
|
25
|
+
return undefined;
|
|
42
26
|
}
|
|
43
27
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
28
|
+
* What a mode makes of one permission request: allowed, refused, or (edits) the owner's to decide.
|
|
29
|
+
* A kind the agent did not name counts as the riskiest, so it is never let through unasked.
|
|
46
30
|
*/
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
31
|
+
export function permissionFor(mode, kind) {
|
|
32
|
+
if (mode === "full")
|
|
33
|
+
return "allow";
|
|
34
|
+
if (kind && READ_KINDS.includes(kind))
|
|
35
|
+
return "allow";
|
|
36
|
+
if (mode === "read-only")
|
|
37
|
+
return "deny";
|
|
38
|
+
if (kind && WRITE_KINDS.includes(kind))
|
|
39
|
+
return "allow";
|
|
40
|
+
return "ask";
|
|
41
|
+
}
|
|
54
42
|
/**
|
|
55
43
|
* Vireo's own settings and credentials stay with Vireo; the agent gets the rest of the environment
|
|
56
44
|
* (PATH, HOME, its own provider keys) plus what its setup adds.
|
|
@@ -58,189 +46,107 @@ const OUTPUT_CAP = 4 << 20;
|
|
|
58
46
|
export function agentEnv(base, extra = {}) {
|
|
59
47
|
const env = {};
|
|
60
48
|
for (const [k, v] of Object.entries(base))
|
|
61
|
-
if (
|
|
49
|
+
if (!VIREO_ONLY.test(k))
|
|
62
50
|
env[k] = v;
|
|
63
51
|
return { ...env, ...extra };
|
|
64
52
|
}
|
|
53
|
+
const VIREO_ONLY = /^(VIREO_|GOOGLE_CLIENT_)/;
|
|
65
54
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* Stopping a run kills acpx's whole process group, so the agent it started goes too.
|
|
55
|
+
* acpx builds the agent's environment from this process's own and lays an overlay on top, so
|
|
56
|
+
* Vireo's keys can only be blanked there, not removed.
|
|
69
57
|
*/
|
|
70
|
-
export function
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
detached: process.platform !== "win32",
|
|
77
|
-
});
|
|
78
|
-
let stdout = "";
|
|
79
|
-
let stderr = "";
|
|
80
|
-
let pending = "";
|
|
81
|
-
let timedOut = false;
|
|
82
|
-
let aborted = false;
|
|
83
|
-
let done = false;
|
|
84
|
-
const kill = () => {
|
|
85
|
-
try {
|
|
86
|
-
if (child.pid && process.platform !== "win32")
|
|
87
|
-
process.kill(-child.pid, "SIGKILL");
|
|
88
|
-
else
|
|
89
|
-
child.kill("SIGKILL");
|
|
90
|
-
}
|
|
91
|
-
catch {
|
|
92
|
-
child.kill("SIGKILL");
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
const finish = (code) => {
|
|
96
|
-
if (done)
|
|
97
|
-
return;
|
|
98
|
-
done = true;
|
|
99
|
-
clearTimeout(timer);
|
|
100
|
-
opts.signal?.removeEventListener("abort", onAbort);
|
|
101
|
-
if (pending)
|
|
102
|
-
opts.onLine?.(pending);
|
|
103
|
-
resolve({ code, stdout, stderr, timedOut, aborted });
|
|
104
|
-
};
|
|
105
|
-
const timer = setTimeout(() => {
|
|
106
|
-
timedOut = true;
|
|
107
|
-
kill();
|
|
108
|
-
}, opts.timeoutMs);
|
|
109
|
-
const onAbort = () => {
|
|
110
|
-
aborted = true;
|
|
111
|
-
kill();
|
|
112
|
-
};
|
|
113
|
-
if (opts.signal?.aborted)
|
|
114
|
-
onAbort();
|
|
115
|
-
else
|
|
116
|
-
opts.signal?.addEventListener("abort", onAbort, { once: true });
|
|
117
|
-
child.stdout.on("data", (chunk) => {
|
|
118
|
-
const text = chunk.toString("utf8");
|
|
119
|
-
if (stdout.length < OUTPUT_CAP)
|
|
120
|
-
stdout += text;
|
|
121
|
-
if (!opts.onLine)
|
|
122
|
-
return;
|
|
123
|
-
const lines = (pending + text).split("\n");
|
|
124
|
-
pending = lines.pop() ?? "";
|
|
125
|
-
for (const line of lines)
|
|
126
|
-
opts.onLine(line);
|
|
127
|
-
});
|
|
128
|
-
child.stderr.on("data", (chunk) => {
|
|
129
|
-
stderr += chunk.toString("utf8");
|
|
130
|
-
if (stderr.length > OUTPUT_CAP)
|
|
131
|
-
stderr = stderr.slice(-OUTPUT_CAP / 2);
|
|
132
|
-
});
|
|
133
|
-
child.on("error", (err) => {
|
|
134
|
-
stderr += `${stderr ? "\n" : ""}${err.message}`;
|
|
135
|
-
finish(-1);
|
|
136
|
-
});
|
|
137
|
-
child.on("close", (code) => finish(code ?? -1));
|
|
138
|
-
});
|
|
58
|
+
export function agentOverlay(base, extra = {}) {
|
|
59
|
+
const blank = {};
|
|
60
|
+
for (const k of Object.keys(base))
|
|
61
|
+
if (VIREO_ONLY.test(k))
|
|
62
|
+
blank[k] = "";
|
|
63
|
+
return { ...blank, ...extra };
|
|
139
64
|
}
|
|
140
65
|
const MAX_TOOLS = 60;
|
|
141
66
|
const MAX_TEXT = 200_000;
|
|
142
67
|
const str = (v) => (typeof v === "string" ? v : undefined);
|
|
143
|
-
|
|
144
|
-
|
|
68
|
+
const num = (v) => (typeof v === "number" && Number.isFinite(v) ? v : undefined);
|
|
69
|
+
/** The step's title, unless an update only says "tool call", which would hide the real one. */
|
|
70
|
+
const GENERIC_TITLE = "tool call";
|
|
71
|
+
function toolStep(e, turn) {
|
|
72
|
+
const id = e.toolCallId;
|
|
145
73
|
if (!id)
|
|
146
|
-
return;
|
|
74
|
+
return undefined;
|
|
147
75
|
let step = turn.tools.find((t) => t.id === id);
|
|
148
76
|
if (!step) {
|
|
149
77
|
// Past the cap new calls are left out, but the ones listed still get their updates.
|
|
150
78
|
if (turn.tools.length >= MAX_TOOLS)
|
|
151
|
-
return;
|
|
152
|
-
step = { title:
|
|
79
|
+
return undefined;
|
|
80
|
+
step = { title: e.title ?? id, id };
|
|
153
81
|
turn.tools.push(step);
|
|
154
82
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
if (
|
|
160
|
-
step.
|
|
161
|
-
const
|
|
162
|
-
if (status)
|
|
163
|
-
step.status = status;
|
|
164
|
-
const raw = update.rawInput;
|
|
83
|
+
if (e.title && e.title !== GENERIC_TITLE)
|
|
84
|
+
step.title = e.title;
|
|
85
|
+
if (e.kind)
|
|
86
|
+
step.kind = e.kind;
|
|
87
|
+
if (e.status)
|
|
88
|
+
step.status = e.status;
|
|
89
|
+
const raw = e.rawInput;
|
|
165
90
|
if (raw && typeof raw === "object") {
|
|
166
91
|
const input = raw;
|
|
167
92
|
const detail = str(input.command) ?? str(input.path) ?? str(input.file_path) ?? str(input.pattern);
|
|
168
93
|
if (detail)
|
|
169
94
|
step.detail = detail;
|
|
170
95
|
}
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (c.type === "diff" && typeof c.path === "string" && !turn.files.includes(c.path))
|
|
175
|
-
turn.files.push(c.path);
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
if (Array.isArray(update.locations)) {
|
|
179
|
-
for (const l of update.locations) {
|
|
180
|
-
if (typeof l.path === "string" && !turn.files.includes(l.path))
|
|
181
|
-
turn.files.push(l.path);
|
|
182
|
-
}
|
|
96
|
+
for (const c of (e.content ?? [])) {
|
|
97
|
+
if (c.type === "diff" && typeof c.path === "string")
|
|
98
|
+
turn.files.push(c.path);
|
|
183
99
|
}
|
|
100
|
+
for (const l of e.locations ?? [])
|
|
101
|
+
if (typeof l.path === "string")
|
|
102
|
+
turn.files.push(l.path);
|
|
103
|
+
return step;
|
|
184
104
|
}
|
|
185
|
-
/** Reads acpx's
|
|
105
|
+
/** Reads acpx's events, as they come, into what the owner (and the model) needs to see. */
|
|
186
106
|
export class TurnReader {
|
|
187
|
-
turn = { text: "", tools: [], files: [], plans: [], errors: [], refused: [],
|
|
188
|
-
|
|
107
|
+
turn = { text: "", tools: [], files: [], plans: [], errors: [], refused: [], timedOut: false, aborted: false };
|
|
108
|
+
/** Returns a line saying what the agent is doing now, when that changed. */
|
|
109
|
+
push(e) {
|
|
189
110
|
const turn = this.turn;
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
let msg;
|
|
194
|
-
try {
|
|
195
|
-
msg = JSON.parse(trimmed);
|
|
111
|
+
if (e.type === "text_delta") {
|
|
112
|
+
if (e.stream !== "thought" && turn.text.length < MAX_TEXT)
|
|
113
|
+
turn.text += e.text;
|
|
196
114
|
}
|
|
197
|
-
|
|
198
|
-
|
|
115
|
+
else if (e.type === "tool_call") {
|
|
116
|
+
const step = toolStep(e, turn);
|
|
117
|
+
if (step && step.title !== step.id && (!step.status || step.status === "pending" || step.status === "in_progress"))
|
|
118
|
+
return step.title;
|
|
199
119
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
turn.errors.push(str(error.message) ?? JSON.stringify(error));
|
|
204
|
-
const result = msg.result;
|
|
205
|
-
if (result) {
|
|
206
|
-
const stop = str(result.stopReason);
|
|
207
|
-
if (stop)
|
|
208
|
-
turn.stopReason = stop;
|
|
209
|
-
const outcome = result.outcome;
|
|
210
|
-
if (outcome?.outcome === "selected" && !/allow/i.test(String(outcome.optionId)))
|
|
211
|
-
turn.refused.push("a permission request was declined");
|
|
212
|
-
const meta = result._meta;
|
|
213
|
-
const escalation = meta?.acpx;
|
|
214
|
-
if (escalation?.permissionEscalation)
|
|
215
|
-
turn.refused.push("a permission request was escalated but could not be approved here");
|
|
120
|
+
else if (e.type === "status" && e.tag === "plan" && e.entries) {
|
|
121
|
+
// Each plan update is the whole plan, not an addition to it.
|
|
122
|
+
turn.plans = e.entries.map((p) => `${p.status}: ${p.content}`);
|
|
216
123
|
}
|
|
217
|
-
if (
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
if (
|
|
227
|
-
|
|
124
|
+
else if (e.type === "status" && e.tag === "usage_update" && e.breakdown) {
|
|
125
|
+
// Only a fallback: the result's own count, when there is one, replaces it.
|
|
126
|
+
const usage = {};
|
|
127
|
+
if (e.breakdown.inputTokens !== undefined)
|
|
128
|
+
usage.input = e.breakdown.inputTokens;
|
|
129
|
+
if (e.breakdown.outputTokens !== undefined)
|
|
130
|
+
usage.output = e.breakdown.outputTokens;
|
|
131
|
+
if (e.breakdown.cachedReadTokens !== undefined)
|
|
132
|
+
usage.cached = e.breakdown.cachedReadTokens;
|
|
133
|
+
if (e.breakdown.cachedWriteTokens !== undefined)
|
|
134
|
+
usage.cacheWrite = e.breakdown.cachedWriteTokens;
|
|
135
|
+
turn.usage = usage;
|
|
228
136
|
}
|
|
229
|
-
else if (
|
|
230
|
-
|
|
137
|
+
else if (e.type === "error") {
|
|
138
|
+
turn.errors.push(e.message);
|
|
231
139
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
if (content)
|
|
240
|
-
turn.plans.push(`${str(e.status) ?? "pending"}: ${content}`);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
/** The turn's end: how it stopped, and the tokens on its result, which count the whole turn. */
|
|
143
|
+
end(result) {
|
|
144
|
+
if (result.status === "failed") {
|
|
145
|
+
this.turn.errors.push(result.error.message);
|
|
146
|
+
return;
|
|
243
147
|
}
|
|
148
|
+
this.turn.stopReason = result.stopReason;
|
|
149
|
+
this.turn.usage = turnUsage(result._meta) ?? this.turn.usage;
|
|
244
150
|
}
|
|
245
151
|
finish() {
|
|
246
152
|
this.turn.text = this.turn.text.trim();
|
|
@@ -248,10 +154,210 @@ export class TurnReader {
|
|
|
248
154
|
return this.turn;
|
|
249
155
|
}
|
|
250
156
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
157
|
+
/**
|
|
158
|
+
* The tokens a turn used, from the `_meta.quota` block acpx puts on its prompt result (Claude Code
|
|
159
|
+
* and Codex report it there; pi does not, and then there is nothing to record).
|
|
160
|
+
*/
|
|
161
|
+
export function turnUsage(meta) {
|
|
162
|
+
const quota = meta?.quota;
|
|
163
|
+
const count = (quota?.token_count ?? meta?.usage ?? meta?.token_count);
|
|
164
|
+
if (!count || typeof count !== "object")
|
|
165
|
+
return undefined;
|
|
166
|
+
const models = quota?.model_usage;
|
|
167
|
+
const usage = {
|
|
168
|
+
model: str(models?.[0]?.model),
|
|
169
|
+
input: num(count.inputTokens) ?? num(count.input_tokens),
|
|
170
|
+
output: num(count.outputTokens) ?? num(count.output_tokens),
|
|
171
|
+
cached: num(count.cachedInputTokens) ?? num(count.cache_read_input_tokens),
|
|
172
|
+
cacheWrite: num(count.cachedWriteTokens) ?? num(count.cache_creation_input_tokens),
|
|
173
|
+
};
|
|
174
|
+
if (usage.input === undefined && usage.output === undefined)
|
|
175
|
+
return undefined;
|
|
176
|
+
return usage;
|
|
177
|
+
}
|
|
178
|
+
export function describeRequest(request) {
|
|
179
|
+
const call = request.raw.toolCall;
|
|
180
|
+
const input = call?.rawInput;
|
|
181
|
+
const what = str(input?.command) ?? str(input?.file_path) ?? str(input?.path);
|
|
182
|
+
const title = call?.title?.trim() || "a step";
|
|
183
|
+
return what && what !== title ? `${title} (${what})` : title;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The coding agents of all setups, each in its own acpx runtime. Sessions are kept in the plugin's
|
|
187
|
+
* directory; an agent stays running between the turns of its session until the session is closed
|
|
188
|
+
* or Vireo stops.
|
|
189
|
+
*/
|
|
190
|
+
export class AcpAgents {
|
|
191
|
+
stateDir;
|
|
192
|
+
runtimes = new Map();
|
|
193
|
+
store;
|
|
194
|
+
constructor(stateDir) {
|
|
195
|
+
this.stateDir = stateDir;
|
|
196
|
+
this.store = createFileSessionStore({ stateDir });
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* One runtime per setup and mode, so a call that narrows the mode gets a client with narrower
|
|
200
|
+
* powers without stopping the setup's other calls.
|
|
201
|
+
*/
|
|
202
|
+
runtime(spec) {
|
|
203
|
+
const slot = `${spec.name}\0${spec.mode}`;
|
|
204
|
+
const key = JSON.stringify([spec.command, spec.cwd, spec.env]);
|
|
205
|
+
const known = this.runtimes.get(slot);
|
|
206
|
+
if (known?.key === key)
|
|
207
|
+
return known.runtime;
|
|
208
|
+
// The setup changed: the agents it started under the old settings go, its sessions stay on disk.
|
|
209
|
+
for (const [other, r] of this.runtimes) {
|
|
210
|
+
if (other.startsWith(`${spec.name}\0`) && r.key !== key) {
|
|
211
|
+
this.runtimes.delete(other);
|
|
212
|
+
void r.runtime.shutdown?.().catch(() => { });
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
const runtime = createAcpRuntime({
|
|
216
|
+
cwd: spec.cwd,
|
|
217
|
+
agentProcessEnv: agentOverlay(process.env, spec.env),
|
|
218
|
+
sessionStore: this.store,
|
|
219
|
+
agentRegistry: createAgentRegistry(),
|
|
220
|
+
// Below full the client itself writes nothing, and without its terminal an agent has to ask
|
|
221
|
+
// before it runs a command; what it asks then is decided per turn (`permissionFor`).
|
|
222
|
+
permissionMode: spec.mode === "full" ? "approve-all" : "deny-all",
|
|
223
|
+
nonInteractivePermissions: "deny",
|
|
224
|
+
terminal: spec.mode === "full",
|
|
225
|
+
fs: spec.mode !== "read-only",
|
|
226
|
+
});
|
|
227
|
+
this.runtimes.set(slot, { key, runtime });
|
|
228
|
+
return runtime;
|
|
229
|
+
}
|
|
230
|
+
async ensure(spec, session, oneshot, model) {
|
|
231
|
+
return this.runtime(spec).ensureSession({
|
|
232
|
+
sessionKey: session,
|
|
233
|
+
agent: spec.command,
|
|
234
|
+
mode: oneshot ? "oneshot" : "persistent",
|
|
235
|
+
cwd: spec.cwd,
|
|
236
|
+
sessionOptions: model ? { model } : undefined,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Codex, by default, lets its own reviewer approve a step outside its sandbox. Below full it is put
|
|
241
|
+
* in its preset that asks instead, so such a step reaches the mode's decision (and the owner);
|
|
242
|
+
* inside the sandbox (the repository and /tmp, no network) it runs commands without asking. Codex
|
|
243
|
+
* offers this as its `mode` option; an agent without such an option keeps its own.
|
|
244
|
+
*/
|
|
245
|
+
async gate(spec, handle, mode) {
|
|
246
|
+
const record = await this.store.load(handle.acpxRecordId ?? handle.sessionKey);
|
|
247
|
+
const option = record?.acpx?.config_options?.find((o) => o.id === "mode");
|
|
248
|
+
if (!option || option.type !== "select")
|
|
249
|
+
return;
|
|
250
|
+
const values = new Set(option.options.flatMap((o) => ("value" in o ? [o.value] : o.options.map((g) => g.value))));
|
|
251
|
+
const preset = CODEX_PRESETS[mode];
|
|
252
|
+
if (!values.has(CODEX_PRESETS["read-only"]) || !values.has(CODEX_PRESETS.full))
|
|
253
|
+
return;
|
|
254
|
+
if (option.currentValue === preset)
|
|
255
|
+
return;
|
|
256
|
+
await this.runtime(spec).setConfigOption?.({ handle, key: "mode", value: preset });
|
|
257
|
+
}
|
|
258
|
+
async find(spec, session) {
|
|
259
|
+
return this.runtime(spec).findSession?.({ sessionKey: session, agent: spec.command });
|
|
260
|
+
}
|
|
261
|
+
async close(spec, handle, discard = false) {
|
|
262
|
+
await this.runtime(spec).close({ handle, reason: "closed by Vireo", discardPersistentState: discard });
|
|
263
|
+
}
|
|
264
|
+
/** One prompt turn: its steps as they happen, permission requests decided by the mode (or the owner). */
|
|
265
|
+
async turn(spec, handle, o) {
|
|
266
|
+
const reader = new TurnReader();
|
|
267
|
+
const turn = reader.turn;
|
|
268
|
+
const stop = new AbortController();
|
|
269
|
+
const timer = setTimeout(() => {
|
|
270
|
+
turn.timedOut = true;
|
|
271
|
+
stop.abort();
|
|
272
|
+
}, o.timeoutSeconds * 1000);
|
|
273
|
+
const onAbort = () => {
|
|
274
|
+
turn.aborted = true;
|
|
275
|
+
stop.abort();
|
|
276
|
+
};
|
|
277
|
+
if (o.signal?.aborted)
|
|
278
|
+
onAbort();
|
|
279
|
+
else
|
|
280
|
+
o.signal?.addEventListener("abort", onAbort, { once: true });
|
|
281
|
+
const decide = async (request, ctx) => {
|
|
282
|
+
const verdict = permissionFor(o.mode, request.inferredKind);
|
|
283
|
+
if (verdict === "allow")
|
|
284
|
+
return { outcome: "allow_once" };
|
|
285
|
+
if (verdict === "ask" && o.ask) {
|
|
286
|
+
if (await o.ask(request, ctx.signal))
|
|
287
|
+
return { outcome: "allow_once" };
|
|
288
|
+
turn.refused.push(`the owner declined: ${describeRequest(request)}`);
|
|
289
|
+
return { outcome: "reject_once" };
|
|
290
|
+
}
|
|
291
|
+
turn.refused.push(`not allowed in ${o.mode} mode: ${describeRequest(request)}`);
|
|
292
|
+
return { outcome: "reject_once" };
|
|
293
|
+
};
|
|
294
|
+
try {
|
|
295
|
+
// A failure here stops the turn: the agent would otherwise run with its own, wider defaults.
|
|
296
|
+
await this.gate(spec, handle, o.mode);
|
|
297
|
+
const run = this.runtime(spec).startTurn({
|
|
298
|
+
handle,
|
|
299
|
+
text: o.text,
|
|
300
|
+
mode: "prompt",
|
|
301
|
+
requestId: crypto.randomUUID(),
|
|
302
|
+
signal: stop.signal,
|
|
303
|
+
onPermissionRequest: decide,
|
|
304
|
+
});
|
|
305
|
+
for await (const e of run.events) {
|
|
306
|
+
const line = reader.push(e);
|
|
307
|
+
if (line)
|
|
308
|
+
o.onStep?.(line);
|
|
309
|
+
}
|
|
310
|
+
reader.end(await run.result);
|
|
311
|
+
if (turn.usage && !turn.usage.model) {
|
|
312
|
+
try {
|
|
313
|
+
const status = await this.runtime(spec).getStatus?.({ handle });
|
|
314
|
+
const model = status?.models?.currentModelId;
|
|
315
|
+
if (model)
|
|
316
|
+
turn.usage.model = model;
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
// the session closed before its status could be read; the counts still stand
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
turn.errors.push(err instanceof Error ? err.message : String(err));
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
clearTimeout(timer);
|
|
328
|
+
o.signal?.removeEventListener("abort", onAbort);
|
|
329
|
+
}
|
|
330
|
+
return reader.finish();
|
|
331
|
+
}
|
|
332
|
+
/** The persistent sessions saved here whose name starts with `prefix`, latest first. */
|
|
333
|
+
sessions(prefix) {
|
|
334
|
+
const dir = join(this.stateDir, "sessions");
|
|
335
|
+
let files;
|
|
336
|
+
try {
|
|
337
|
+
files = readdirSync(dir).filter((f) => f.endsWith(".json"));
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
return [];
|
|
341
|
+
}
|
|
342
|
+
const out = [];
|
|
343
|
+
for (const f of files) {
|
|
344
|
+
try {
|
|
345
|
+
const r = JSON.parse(readFileSync(join(dir, f), "utf8"));
|
|
346
|
+
const name = str(r.name);
|
|
347
|
+
if (!name?.startsWith(prefix) || r.closed)
|
|
348
|
+
continue;
|
|
349
|
+
out.push({ name, cwd: str(r.cwd) ?? "", lastUsedAt: str(r.lastUsedAt) ?? str(r.last_used_at) });
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
// a file being written, or not a session
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return out.sort((a, b) => (b.lastUsedAt ?? "").localeCompare(a.lastUsedAt ?? ""));
|
|
356
|
+
}
|
|
357
|
+
async shutdown() {
|
|
358
|
+
const all = [...this.runtimes.values()];
|
|
359
|
+
this.runtimes.clear();
|
|
360
|
+
await Promise.allSettled(all.map((r) => r.runtime.shutdown?.()));
|
|
361
|
+
}
|
|
256
362
|
}
|
|
257
363
|
//# sourceMappingURL=acp.js.map
|
package/dist/acp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acp.js","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GAQvB,MAAM,cAAc,CAAC;AAetB,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACxD,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAErC;;;;GAIG;AACH,MAAM,aAAa,GAAmC,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;AAElI;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,IAAoB;IAC3D,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,8GAA8G,CAAC;IAC7I,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,6DAA6D,CAAC;IACzF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAoB,EAAE,IAAwB;IAC1E,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACtD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAuB,EAAE,KAAK,GAA2B,EAAE;IAClF,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/E,OAAO,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAuB,EAAE,KAAK,GAA2B,EAAE;IACtF,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACzE,OAAO,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC;AAChC,CAAC;AAkCD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,MAAM,GAAG,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACxF,MAAM,GAAG,GAAG,CAAC,CAAU,EAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAE9G,+FAA+F;AAC/F,MAAM,aAAa,GAAG,WAAW,CAAC;AAElC,SAAS,QAAQ,CAAC,CAAkD,EAAE,IAAU;IAC9E,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,oFAAoF;QACpF,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;QACrD,IAAI,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,aAAa;QAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IAC/D,IAAI,CAAC,CAAC,IAAI;QAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IAC/B,IAAI,CAAC,CAAC,MAAM;QAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,GAA8B,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnG,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACnC,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAyC,EAAE,CAAC;QAC1E,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,EAAE;QAAE,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,MAAM,OAAO,UAAU;IACZ,IAAI,GAAS,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAE9H,4EAA4E;IAC5E,IAAI,CAAC,CAAkB;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ;gBAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;QACjF,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,aAAa,CAAC;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACxI,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;YAChE,6DAA6D;YAC7D,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,cAAc,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;YAC1E,2EAA2E;YAC3E,MAAM,KAAK,GAAc,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS;gBAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;YACjF,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,KAAK,SAAS;gBAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;YACpF,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,KAAK,SAAS;gBAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC;YAC5F,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,KAAK,SAAS;gBAAE,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC;YAClG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,gGAAgG;IAChG,GAAG,CAAC,MAA4B;QAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/D,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgD;IACxE,MAAM,KAAK,GAAG,IAAI,EAAE,KAA4C,CAAC;IACjE,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,WAAW,CAAwC,CAAC;IAC9G,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAK,EAAE,WAAoD,CAAC;IAC3E,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;QAC9B,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC;QACxD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;QAC3D,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC;QAC1E,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC;KACnF,CAAC;IACF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AA+BD,MAAM,UAAU,eAAe,CAAC,OAA6B;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,EAAE,QAA+C,CAAC;IACpE,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC;IAC9C,OAAO,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,SAAS;IAIS,QAAQ;IAHpB,QAAQ,GAAG,IAAI,GAAG,EAAgD,CAAC;IACnE,KAAK,CAAkB;IAExC,YAA6B,QAAgB;wBAAhB,QAAQ;QACnC,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,IAAe;QACrB,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,EAAE,GAAG,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC;QAC7C,iGAAiG;QACjG,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACxD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;YACpD,YAAY,EAAE,IAAI,CAAC,KAAK;YACxB,aAAa,EAAE,mBAAmB,EAAE;YACpC,4FAA4F;YAC5F,qFAAqF;YACrF,cAAc,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU;YACjE,yBAAyB,EAAE,MAAM;YACjC,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM;YAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,WAAW;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAe,EAAE,OAAe,EAAE,OAAgB,EAAE,KAAc;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC;YACtC,UAAU,EAAE,OAAO;YACnB,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;YACxC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,IAAI,CAAC,IAAe,EAAE,MAAwB,EAAE,IAAoB;QAChF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO;QAChD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC;YAAE,OAAO;QACvF,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM;YAAE,OAAO;QAC3C,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAe,EAAE,OAAe;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAe,EAAE,MAAwB,EAAE,OAAO,GAAG,KAAK;QACpE,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,OAAO,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,yGAAyG;IACzG,KAAK,CAAC,IAAI,CAAC,IAAe,EAAE,MAAwB,EAAE,CAAc;QAClE,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,CAAC;;YAC5B,CAAC,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,KAAK,EAAE,OAA6B,EAAE,GAA4B,EAAkC,EAAE;YACnH,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;YAC1D,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC/B,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC;oBAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;gBACvE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,UAAU,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAChF,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QACpC,CAAC,CAAC;QAEF,IAAI,CAAC;YACH,6FAA6F;YAC7F,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;gBACvC,MAAM;gBACN,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE;gBAC9B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,mBAAmB,EAAE,MAAM;aAC5B,CAAC,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC5B,IAAI,IAAI;oBAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;oBAChE,MAAM,KAAK,GAAG,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC;oBAC7C,IAAI,KAAK;wBAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,6EAA6E;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;IACzB,CAAC;IAED,wFAAwF;IACxF,QAAQ,CAAC,MAAc;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAA4B,CAAC;gBACpF,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzB,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM;oBAAE,SAAS;gBACpD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAClG,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;CACF"}
|