@melra/cli 0.3.0-alpha.14 → 0.3.0-alpha.16
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/README.md +15 -8
- package/dist/activity.d.ts +6 -0
- package/dist/activity.d.ts.map +1 -1
- package/dist/activity.js +86 -14
- package/dist/activity.js.map +1 -1
- package/dist/approval-console.d.ts +42 -0
- package/dist/approval-console.d.ts.map +1 -0
- package/dist/approval-console.js +130 -0
- package/dist/approval-console.js.map +1 -0
- package/dist/bin.js +14 -2
- package/dist/bin.js.map +1 -1
- package/dist/conformance.d.ts +6 -0
- package/dist/conformance.d.ts.map +1 -1
- package/dist/conformance.js +27 -3
- package/dist/conformance.js.map +1 -1
- package/dist/environment.d.ts +6 -3
- package/dist/environment.d.ts.map +1 -1
- package/dist/environment.js +7 -5
- package/dist/environment.js.map +1 -1
- package/dist/human.d.ts +30 -5
- package/dist/human.d.ts.map +1 -1
- package/dist/human.js +101 -67
- package/dist/human.js.map +1 -1
- package/dist/index.js +295 -83
- package/dist/index.js.map +1 -1
- package/dist/isolation.d.ts.map +1 -1
- package/dist/isolation.js +3 -1
- package/dist/isolation.js.map +1 -1
- package/dist/node-support.d.ts +5 -0
- package/dist/node-support.d.ts.map +1 -0
- package/dist/node-support.js +16 -0
- package/dist/node-support.js.map +1 -0
- package/dist/output.js +1 -1
- package/dist/output.js.map +1 -1
- package/package.json +24 -10
- package/dist/approval-screen.d.ts +0 -35
- package/dist/approval-screen.d.ts.map +0 -1
- package/dist/approval-screen.js +0 -130
- package/dist/approval-screen.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
# MELRA CLI
|
|
2
2
|
|
|
3
|
-
Everything in one command, with nothing installed beforehand
|
|
3
|
+
Everything in one command, with nothing installed beforehand, run from the
|
|
4
|
+
project the agent should work in:
|
|
4
5
|
|
|
5
6
|
```bash
|
|
7
|
+
cd ~/project
|
|
6
8
|
npx @melra/cli@alpha setup
|
|
7
9
|
```
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
That directory becomes the agent's workspace, the boundary for its file and
|
|
12
|
+
command operations; set `MELRA_WORKSPACE` to choose another. `setup` writes a
|
|
13
|
+
safe local policy, produces an MCP client configuration, and runs every
|
|
14
|
+
readiness check (Node, workspace, SQLite, browser, computer-use adapter,
|
|
15
|
+
policy, MCP clients). In a terminal it asks which detected client to set up
|
|
16
|
+
and offers to write MELRA into that client's own config file;
|
|
17
|
+
`--client <name> --write` does the same without asking which, and piped or
|
|
18
|
+
with `--json` it prints JSON. If the workspace would be your home directory, a
|
|
19
|
+
directory holding it, or a filesystem root, `setup` and `init` ask first in a
|
|
20
|
+
terminal and otherwise refuse with `workspace_too_broad`, unless
|
|
21
|
+
`MELRA_WORKSPACE` is set. It exits non-zero if a check fails and never
|
|
15
22
|
overwrites an existing policy.
|
|
16
23
|
|
|
17
24
|
To keep a resolved copy on the machine instead of resolving on every run:
|
|
@@ -43,5 +50,5 @@ task-scoped approval before it runs: a phrase echoed back in developer mode, or
|
|
|
43
50
|
an operator's `melra approve <task-id>` in enforced mode, where the agent is
|
|
44
51
|
given no phrase and one it sends is refused.
|
|
45
52
|
|
|
46
|
-
Requires Node.js 22 or newer. Full documentation:
|
|
53
|
+
Requires Node.js 22.13 or newer, or 23.4 or newer. Full documentation:
|
|
47
54
|
[github.com/XAGI-Lab/melra](https://github.com/XAGI-Lab/melra)
|
package/dist/activity.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { type TaskRecord, type TaskStatus } from "@melra/protocol";
|
|
2
|
+
import { type LocalPolicy } from "@melra/policy-core";
|
|
2
3
|
import type { CliEnvironment } from "./environment.js";
|
|
3
4
|
export declare function taskTarget(task: TaskRecord): string;
|
|
5
|
+
/** The approval window and mode a server started here would decide by. */
|
|
6
|
+
export type ApprovalWindow = Pick<LocalPolicy, "approvalTtlMs" | "mode">;
|
|
4
7
|
export interface TasksOptions {
|
|
5
8
|
limit: number;
|
|
6
9
|
status?: TaskStatus;
|
|
7
10
|
json: boolean;
|
|
11
|
+
window: ApprovalWindow;
|
|
12
|
+
/** Why the policy file did not load, so the approvals were counted by the defaults. */
|
|
13
|
+
policyError?: string;
|
|
8
14
|
}
|
|
9
15
|
export declare function tasksCommand(env: CliEnvironment, options: TasksOptions): number;
|
|
10
16
|
/**
|
package/dist/activity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAYA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA8C,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAElG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAiGvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAenD;AAyBD,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,GAAG,MAAM,CAAC,CAAC;AA4CzE,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,cAAc,CAAC;IACvB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CAwD/E;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuF7F;AAoDD,wBAAsB,aAAa,CACjC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9C,OAAO,CAAC,MAAM,CAAC,CA0GjB"}
|
package/dist/activity.js
CHANGED
|
@@ -9,11 +9,10 @@ import { stat } from "node:fs/promises";
|
|
|
9
9
|
import { connect } from "node:net";
|
|
10
10
|
import { join } from "node:path";
|
|
11
11
|
import { PRODUCT_VERSION, } from "@melra/protocol";
|
|
12
|
-
import { classifyOperation, loadPolicy } from "@melra/policy-core";
|
|
12
|
+
import { approvalTtl, classifyOperation, loadPolicy } from "@melra/policy-core";
|
|
13
13
|
import { SqliteStore } from "@melra/storage-sqlite";
|
|
14
14
|
import { isHuman, paint, table } from "./output.js";
|
|
15
|
-
import { printable } from "
|
|
16
|
-
const DEFAULT_HTTP_PORT = 7457;
|
|
15
|
+
import { DEFAULT_HTTP_PORT, configuredHttpPort, printable, workflowStepJudge } from "@melra/server";
|
|
17
16
|
const POLL_MS = 1_000;
|
|
18
17
|
const APPROVAL_HINT = "approve with `melra approve <task-id>`";
|
|
19
18
|
/**
|
|
@@ -119,16 +118,75 @@ export function taskTarget(task) {
|
|
|
119
118
|
function approvalHint(waiting) {
|
|
120
119
|
return `${waiting} waiting for approval — ${APPROVAL_HINT}`;
|
|
121
120
|
}
|
|
121
|
+
function expiredHints({ expired, expiredSteps }) {
|
|
122
|
+
return [
|
|
123
|
+
...(expired > 0
|
|
124
|
+
? [`${expired} whose approval expired — plan again, or clear with \`melra approve <task-id> --deny\``]
|
|
125
|
+
: []),
|
|
126
|
+
// No deny: where the run still waits on the step, an advance asks again
|
|
127
|
+
// once the challenge has expired (one spent in band, in enforced mode,
|
|
128
|
+
// only then), and a deny would fail it, or for a compensation stall its
|
|
129
|
+
// unwind. Which run a task is from, and whether that run can go on, the
|
|
130
|
+
// task alone cannot say, so the hint points at the run and states what
|
|
131
|
+
// each would do rather than advise.
|
|
132
|
+
...(expiredSteps > 0
|
|
133
|
+
? [
|
|
134
|
+
`${expiredSteps} workflow step(s) whose approval expired — see its run with \`melra workflow inspect <workflow-id>\`: where the run still waits on the step, an advance after its challenge expires asks again, and a deny would fail the run, or for a compensation stall its unwind`,
|
|
135
|
+
]
|
|
136
|
+
: []),
|
|
137
|
+
];
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Tasks waiting for an operator's approval, and those whose challenge expired
|
|
141
|
+
* unanswered, workflow steps apart. An expired one stays
|
|
142
|
+
* awaiting_approval, and counted as waiting it was reported forever and
|
|
143
|
+
* pointed at `melra approve`, which then refused it. An answer given in time
|
|
144
|
+
* is honoured for a TTL after it, as `TaskController` honours it, so that task
|
|
145
|
+
* waits for its agent and counts as neither. In enforced mode an in-band
|
|
146
|
+
* answer is no answer, and the challenge it took cannot be answered again.
|
|
147
|
+
*/
|
|
148
|
+
function approvalCounts(store, window, runs = () => store.listWorkflowRuns()) {
|
|
149
|
+
const now = Date.now();
|
|
150
|
+
let step;
|
|
151
|
+
const counts = { waiting: 0, expired: 0, expiredSteps: 0 };
|
|
152
|
+
for (const task of store.listTasks(100_000, "awaiting_approval")) {
|
|
153
|
+
const expiresAt = task.approval === undefined ? Infinity : Date.parse(task.approval.expiresAt);
|
|
154
|
+
const decision = task.approval === undefined ? undefined : store.getApprovalDecision(task.approval.approvalId);
|
|
155
|
+
const unusable = window.mode === "enforced" && decision !== undefined && decision.channel !== "out_of_band";
|
|
156
|
+
const decidedAt = decision === undefined || unusable ? undefined : Date.parse(decision.decidedAt);
|
|
157
|
+
if (decidedAt !== undefined && decidedAt <= expiresAt) {
|
|
158
|
+
if (now < decidedAt + approvalTtl(window))
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
else if (!unusable && now < expiresAt) {
|
|
162
|
+
counts.waiting += 1;
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
// Judged only once something has expired: a store keeps every run.
|
|
166
|
+
if ((step ??= workflowStepJudge(store, runs))(task)) {
|
|
167
|
+
counts.expiredSteps += 1;
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
counts.expired += 1;
|
|
171
|
+
}
|
|
172
|
+
return counts;
|
|
173
|
+
}
|
|
122
174
|
export function tasksCommand(env, options) {
|
|
123
|
-
const { tasks,
|
|
175
|
+
const { tasks, approvals } = withStore(env, { tasks: [], approvals: { waiting: 0, expired: 0, expiredSteps: 0 } }, (store) => ({
|
|
124
176
|
tasks: store.listTasks(options.limit, options.status),
|
|
125
|
-
|
|
177
|
+
approvals: approvalCounts(store, options.window),
|
|
126
178
|
}));
|
|
127
179
|
if (!humanOutput(options.json)) {
|
|
128
|
-
// The shape `/api/tasks` answers with, minus approvals
|
|
129
|
-
|
|
180
|
+
// The shape `/api/tasks` answers with, minus approvals and the console's
|
|
181
|
+
// attention fields (`approvalPendingIds`, `attentionCount`), plus
|
|
182
|
+
// `policyError` as `status` gives it.
|
|
183
|
+
const { policyError } = options;
|
|
184
|
+
write(printable(JSON.stringify({ tasks: tasks.map(visible), ...(policyError === undefined ? {} : { policyError }) }, null, 2), true));
|
|
130
185
|
return 0;
|
|
131
186
|
}
|
|
187
|
+
if (options.policyError !== undefined) {
|
|
188
|
+
write(paint.warn(printable(`Policy invalid, approvals counted by the defaults: ${options.policyError}`)));
|
|
189
|
+
}
|
|
132
190
|
if (tasks.length === 0) {
|
|
133
191
|
write(options.status === undefined
|
|
134
192
|
? // Not a file under examples/: an npm install has none.
|
|
@@ -150,10 +208,11 @@ export function tasksCommand(env, options) {
|
|
|
150
208
|
header.map((title) => paint.dim(title)),
|
|
151
209
|
...rows.map((row, index) => row.map((cell, column) => (column === 1 ? tone(cell, tasks[index]?.status ?? "") : cell))),
|
|
152
210
|
]));
|
|
153
|
-
|
|
211
|
+
const hints = [...(approvals.waiting > 0 ? [approvalHint(approvals.waiting)] : []), ...expiredHints(approvals)];
|
|
212
|
+
if (hints.length > 0)
|
|
154
213
|
write();
|
|
155
|
-
|
|
156
|
-
|
|
214
|
+
for (const hint of hints)
|
|
215
|
+
write(hint);
|
|
157
216
|
return 0;
|
|
158
217
|
}
|
|
159
218
|
function describe(event) {
|
|
@@ -283,9 +342,10 @@ function reachable(options) {
|
|
|
283
342
|
socket.once("error", () => done(false));
|
|
284
343
|
});
|
|
285
344
|
}
|
|
345
|
+
// Read as `serve` reads it. `0` (any free port) cannot be probed, so it falls
|
|
346
|
+
// back to the default like an unset variable.
|
|
286
347
|
function httpPort() {
|
|
287
|
-
|
|
288
|
-
return Number.isInteger(port) && port > 0 && port < 65_536 ? port : DEFAULT_HTTP_PORT;
|
|
348
|
+
return configuredHttpPort(process.env) || DEFAULT_HTTP_PORT;
|
|
289
349
|
}
|
|
290
350
|
async function sizeOnDisk(path) {
|
|
291
351
|
// The WAL holds committed pages not yet checkpointed into the main file.
|
|
@@ -320,11 +380,13 @@ export async function statusCommand(env, options) {
|
|
|
320
380
|
let policyError;
|
|
321
381
|
let policyMode;
|
|
322
382
|
let policyUnhinged = false;
|
|
383
|
+
let policyTtlMs;
|
|
323
384
|
if (options.policyPath !== undefined) {
|
|
324
385
|
try {
|
|
325
386
|
const loaded = await loadPolicy(options.policyPath, env.workspaceRoot);
|
|
326
387
|
policyMode = loaded.mode;
|
|
327
388
|
policyUnhinged = loaded.unhinged;
|
|
389
|
+
policyTtlMs = loaded.approvalTtlMs;
|
|
328
390
|
}
|
|
329
391
|
catch (error) {
|
|
330
392
|
policyError = error instanceof Error ? error.message : String(error);
|
|
@@ -332,7 +394,12 @@ export async function statusCommand(env, options) {
|
|
|
332
394
|
}
|
|
333
395
|
const mode = env.mode === "enforced" || policyMode === "enforced" ? "enforced" : "developer";
|
|
334
396
|
const path = databasePath(env);
|
|
335
|
-
const { tasks, workflows, lastActivity } = withStore(env, {
|
|
397
|
+
const { tasks, workflows, lastActivity, approvals } = withStore(env, {
|
|
398
|
+
tasks: {},
|
|
399
|
+
workflows: {},
|
|
400
|
+
lastActivity: undefined,
|
|
401
|
+
approvals: { waiting: 0, expired: 0, expiredSteps: 0 },
|
|
402
|
+
}, (store) => {
|
|
336
403
|
const runs = store.listWorkflowRuns();
|
|
337
404
|
const latest = [store.listTasks(1)[0]?.updatedAt, runs.at(-1)?.updatedAt]
|
|
338
405
|
.filter((at) => at !== undefined)
|
|
@@ -342,6 +409,7 @@ export async function statusCommand(env, options) {
|
|
|
342
409
|
tasks: store.taskStatusCounts(),
|
|
343
410
|
workflows: countBy(runs.map((run) => run.status)),
|
|
344
411
|
lastActivity: latest,
|
|
412
|
+
approvals: approvalCounts(store, { mode, ...(policyTtlMs === undefined ? {} : { approvalTtlMs: policyTtlMs }) }, () => runs),
|
|
345
413
|
};
|
|
346
414
|
});
|
|
347
415
|
const port = httpPort();
|
|
@@ -365,7 +433,9 @@ export async function statusCommand(env, options) {
|
|
|
365
433
|
},
|
|
366
434
|
tasks,
|
|
367
435
|
workflows,
|
|
368
|
-
awaitingApproval:
|
|
436
|
+
awaitingApproval: approvals.waiting,
|
|
437
|
+
expiredApprovals: approvals.expired,
|
|
438
|
+
expiredWorkflowSteps: approvals.expiredSteps,
|
|
369
439
|
lastActivity: lastActivity ?? null,
|
|
370
440
|
server: {
|
|
371
441
|
http: { address: `127.0.0.1:${port}`, state: http ? "reachable" : "not running" },
|
|
@@ -390,6 +460,8 @@ export async function statusCommand(env, options) {
|
|
|
390
460
|
row("Workflows", summary(workflows));
|
|
391
461
|
if (report.awaitingApproval > 0)
|
|
392
462
|
row("Waiting", approvalHint(report.awaitingApproval));
|
|
463
|
+
for (const hint of expiredHints(approvals))
|
|
464
|
+
row("Expired", hint);
|
|
393
465
|
row("Last active", lastActivity === undefined ? "never" : ago(lastActivity));
|
|
394
466
|
row("HTTP", `${report.server.http.address} ${report.server.http.state}`);
|
|
395
467
|
if (report.server.socket !== undefined) {
|
package/dist/activity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,gFAAgF;AAChF,6EAA6E;AAC7E,+EAA+E;AAC/E,0EAA0E;AAE1E,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAuB,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,eAAe,GAIhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,OAAO,GAAG,KAAK,CAAC;AACtB,MAAM,aAAa,GAAG,wCAAwC,CAAC;AAE/D;;;;;GAKG;AACH,SAAS,OAAO,CAAC,IAAgB;IAC/B,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,GAAmB;IACvC,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,SAAS,SAAS,CAAC,GAAmB;IACpC,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC;AAED,SAAS,SAAS,CAAI,GAAmB,EAAE,KAAQ,EAAE,IAA+B;IAClF,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,qEAAqE;AACrE,SAAS,WAAW,CAAC,IAAa;IAChC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,KAAK,CAAC,IAAI,GAAG,EAAE;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,kDAAkD;AAClD,MAAM,IAAI,GAAsD;IAC9D,gBAAgB,EAAE,KAAK,CAAC,EAAE;IAC1B,iBAAiB,EAAE,KAAK,CAAC,EAAE;IAC3B,MAAM,EAAE,KAAK,CAAC,IAAI;IAClB,cAAc,EAAE,KAAK,CAAC,IAAI;IAC1B,gBAAgB,EAAE,KAAK,CAAC,IAAI;IAC5B,iBAAiB,EAAE,KAAK,CAAC,IAAI;IAC7B,kBAAkB,EAAE,KAAK,CAAC,IAAI;IAC9B,OAAO,EAAE,KAAK,CAAC,IAAI;IACnB,iBAAiB,EAAE,KAAK,CAAC,IAAI;IAC7B,cAAc,EAAE,KAAK,CAAC,IAAI;IAC1B,YAAY,EAAE,KAAK,CAAC,IAAI;IACxB,SAAS,EAAE,KAAK,CAAC,GAAG;CACrB,CAAC;AAEF,SAAS,IAAI,CAAC,IAAY,EAAE,MAAc;IACxC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,GAAG,CAAC,GAAW,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;AACzE,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,OAAO,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,EAAU;IACzB,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,IAAgB;IACrC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAA8C,CAAC;IACrF,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED,+EAA+E;AAC/E,gFAAgF;AAChF,yEAAyE;AACzE,MAAM,UAAU,UAAU,CAAC,IAAgB;IACzC,kEAAkE;IAClE,4EAA4E;IAC5E,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAgE,CAAC;IAChG,2EAA2E;IAC3E,wDAAwD;IACxD,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,GAAG,OAAO,2BAA2B,aAAa,EAAE,CAAC;AAC9D,CAAC;AAQD,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,OAAqB;IACrE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,SAAS,CAClC,GAAG,EACH,EAAE,KAAK,EAAE,EAAkB,EAAE,OAAO,EAAE,CAAC,EAAE,EACzC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACV,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;QACrD,OAAO,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,iBAAiB,IAAI,CAAC;KACzD,CAAC,CACH,CAAC;IACF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,wDAAwD;QACxD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CACH,OAAO,CAAC,MAAM,KAAK,SAAS;YAC1B,CAAC,CAAC,uDAAuD;gBACvD,kEAAkE;YACpE,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,SAAS,CAClC,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM;QACX,aAAa,CAAC,IAAI,CAAC;QACnB,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;QACzC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;QAC3D,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;KACpB,CAAC,CAAC;IACH,iFAAiF;IACjF,KAAK,CACH,KAAK,CAAC;QACJ,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACzB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC1F;KACF,CAAC,CACH,CAAC;IACF,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAgBD,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,kBAAkB,EAAE,CAAC;IACrD,MAAM,MAAM,GACV,KAAK,CAAC,QAAQ,KAAK,SAAS;QAC1B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QAClC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,cAAc,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,GAAG,IAAI,UAAU,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QACpC,MAAM;QACN,KAAK,CAAC,SAAS;QACf,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;KAChC;SACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;SAC7B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAmB,EAAE,OAA0B;IAC1E,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAChD,IAAI,KAA8B,CAAC;IACnC,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,IAAI,GAAG,CAAC,KAAiB,EAAE,EAAE,CACjC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1E,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,iFAAiF;QACjF,KAAK,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,GAAG,IAAI,CAAC;YACd,OAAO;QACT,CAAC;QACD,6EAA6E;QAC7E,+EAA+E;QAC/E,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAkB,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM;gBAAE,SAAS;YACvC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,0EAA0E;YAC1E,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,CAAC;gBACH,IAAI,EAAE,MAAM;gBACZ,EAAE,EAAE,IAAI,CAAC,SAAS;gBAClB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;gBAC/C,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC;gBAC9B,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;gBACxB,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM;gBAClC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;aAC/B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,QAAQ,KAAK,GAAG,CAAC,MAAM;gBAAE,SAAS;YACtC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,CAAC;gBACH,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,GAAG,CAAC,SAAS;gBACjB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;aAChD,CAAC,CAAC;QACL,CAAC;QACD,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QACjC,IAAI,KAAiC,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;YAC5B,IAAI,KAAK,KAAK,SAAS;gBAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAC9C,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAC/C,KAAK,EAAE,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC;QACF,kEAAkE;QAClE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC;YACT,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACrE,CAAC;gBACF,IAAI,CAAC,CAAC,CAAC,CAAC;YACV,CAAC;QACH,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,yEAAyE;QACzE,gEAAgE;QAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,YAAY,YAAY,CAAC,GAAG,CAAC,mDAAmD,CACjF,CAAC;QACF,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,yEAAyE;AACzE,SAAS,SAAS,CAAC,OAAuB;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,EAAW,EAAE,EAAE;YAC3B,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,yEAAyE;IACzE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAC7E,CAAC;IACF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,IAAI,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED,SAAS,OAAO,CAAC,MAAyB;IACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACrE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,MAA8B;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3E,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAChE,OAAO,GAAG,KAAK,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAmB,EACnB,OAA+C;IAE/C,4EAA4E;IAC5E,uDAAuD;IACvD,IAAI,WAA+B,CAAC;IACpC,IAAI,UAA8B,CAAC;IACnC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;YACvE,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;IAC7F,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,SAAS,CAClD,GAAG,EACH,EAAE,KAAK,EAAE,EAA4B,EAAE,SAAS,EAAE,EAA4B,EAAE,YAAY,EAAE,SAA+B,EAAE,EAC/H,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;aACtE,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;aAC9C,IAAI,EAAE;aACN,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACV,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE;YAC/B,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACjD,YAAY,EAAE,MAAM;SACrB,CAAC;IACJ,CAAC,CACF,CAAC;IACF,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QACtC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;KAC/E,CAAC,CAAC;IACH,MAAM,MAAM,GAAG;QACb,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,eAAe;QACxB,IAAI;QACJ,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,cAAc;QACxC,SAAS,EAAE,GAAG,CAAC,aAAa;QAC5B,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;QAClC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QACrD,QAAQ,EAAE;YACR,IAAI;YACJ,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC;SAC9B;QACD,KAAK;QACL,SAAS;QACT,gBAAgB,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;QAC9C,YAAY,EAAE,YAAY,IAAI,IAAI;QAClC,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,OAAO,EAAE,aAAa,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE;YACjF,GAAG,CAAC,GAAG,CAAC,UAAU,KAAK,SAAS;gBAC9B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;SAChG;KACF,CAAC;IACF,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACtF,KAAK,CAAC,SAAS,eAAe,KAAK,IAAI,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzG,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IACpC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B,GAAG,CACD,QAAQ,EACR,WAAW,KAAK,SAAS;QACvB,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,cAAc,WAAW,GAAG;QACnD,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC,CAChD,CAAC;IACF,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IACpH,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC;QAAE,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACvF,GAAG,CAAC,aAAa,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACvC,GAAG,CAAC,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAC,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type ApprovalScreenView, type MelraHttpServer, type MelraRuntime } from "@melra/server";
|
|
2
|
+
import { type CliEnvironment } from "./environment.js";
|
|
3
|
+
/** What `melra console` needs from the terminal it was started in. */
|
|
4
|
+
export interface ConsoleTerminal {
|
|
5
|
+
/** Both stdin and stderr are a terminal. */
|
|
6
|
+
interactive: boolean;
|
|
7
|
+
/** Hands a URL to the desktop's browser; false when nothing took it. */
|
|
8
|
+
open(url: string): Promise<boolean>;
|
|
9
|
+
/** Writes to the operator, on stderr. */
|
|
10
|
+
say(text: string): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The approval screen on the terminal it is written to, wrapped to that
|
|
14
|
+
* terminal's width: taken from any other stream, a piped stdout say, the
|
|
15
|
+
* width is missing and the terminal wraps the screen itself (#210).
|
|
16
|
+
*/
|
|
17
|
+
export declare function showApprovalScreen(view: ApprovalScreenView, terminal: {
|
|
18
|
+
columns?: number;
|
|
19
|
+
write(text: string): unknown;
|
|
20
|
+
}): void;
|
|
21
|
+
/**
|
|
22
|
+
* `melra run`'s and `melra approve`'s question: the effect as an approver
|
|
23
|
+
* needs to see it, then y/N, on the operator's terminal (stderr, answered on
|
|
24
|
+
* stdin), so nothing an agent reads from stdout carries it. Anything but a
|
|
25
|
+
* yes is answered there with "Not approved.".
|
|
26
|
+
*/
|
|
27
|
+
export declare function confirmInTerminal(view: ApprovalScreenView, input?: NodeJS.ReadableStream, output?: NodeJS.WritableStream & {
|
|
28
|
+
columns?: number;
|
|
29
|
+
}): Promise<boolean>;
|
|
30
|
+
/** Refuses anywhere but an operator's terminal, before anything is opened. */
|
|
31
|
+
export declare function assertConsoleTerminal(interactive: boolean): void;
|
|
32
|
+
/**
|
|
33
|
+
* Starts the approval console: a loopback server with no MCP endpoint, on the
|
|
34
|
+
* same data directory as the agent's server, whose pairing code is never
|
|
35
|
+
* printed. Not stdout, not stderr, not a file: a harness reads what a process
|
|
36
|
+
* it started prints, and pipes are how it would, so this refuses to start
|
|
37
|
+
* anywhere but in an operator's terminal. The code reaches the browser on its
|
|
38
|
+
* opener's command line, where a process that can list processes can read it
|
|
39
|
+
* until the page spends it (THREAT_MODEL.md, "A pairing race").
|
|
40
|
+
*/
|
|
41
|
+
export declare function approvalConsole(env: CliEnvironment, melra: MelraRuntime, terminal: ConsoleTerminal): Promise<MelraHttpServer>;
|
|
42
|
+
//# sourceMappingURL=approval-console.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-console.d.ts","sourceRoot":"","sources":["../src/approval-console.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEtE,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,WAAW,EAAE,OAAO,CAAC;IACrB,wEAAwE;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,yCAAyC;IACzC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,GAAG,IAAI,CAE/H;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,EACxB,KAAK,GAAE,MAAM,CAAC,cAA8B,EAC5C,MAAM,GAAE,MAAM,CAAC,cAAc,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAmB,GACpE,OAAO,CAAC,OAAO,CAAC,CA6BlB;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAMhE;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,eAAe,CAAC,CAqE1B"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Copyright 2026 XAGI Labs Private Limited
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { once } from "node:events";
|
|
4
|
+
import { createInterface } from "node:readline/promises";
|
|
5
|
+
import { approvalScreen, serveHttp, } from "@melra/server";
|
|
6
|
+
import { approverLabel } from "./environment.js";
|
|
7
|
+
/**
|
|
8
|
+
* The approval screen on the terminal it is written to, wrapped to that
|
|
9
|
+
* terminal's width: taken from any other stream, a piped stdout say, the
|
|
10
|
+
* width is missing and the terminal wraps the screen itself (#210).
|
|
11
|
+
*/
|
|
12
|
+
export function showApprovalScreen(view, terminal) {
|
|
13
|
+
terminal.write(approvalScreen(view, true, terminal.columns));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* `melra run`'s and `melra approve`'s question: the effect as an approver
|
|
17
|
+
* needs to see it, then y/N, on the operator's terminal (stderr, answered on
|
|
18
|
+
* stdin), so nothing an agent reads from stdout carries it. Anything but a
|
|
19
|
+
* yes is answered there with "Not approved.".
|
|
20
|
+
*/
|
|
21
|
+
export async function confirmInTerminal(view, input = process.stdin, output = process.stderr) {
|
|
22
|
+
showApprovalScreen(view, output);
|
|
23
|
+
const prompt = createInterface({ input, output });
|
|
24
|
+
try {
|
|
25
|
+
// Input that ends before an answer (Ctrl-D or Ctrl-C, or the end of a
|
|
26
|
+
// stdin that is not a terminal) is a no, never a question left open.
|
|
27
|
+
let answered = false;
|
|
28
|
+
const answer = await Promise.race([
|
|
29
|
+
prompt.question("Approve this effect? [y/N] ").then((said) => {
|
|
30
|
+
answered = true;
|
|
31
|
+
return said;
|
|
32
|
+
}, () => ""),
|
|
33
|
+
once(prompt, "close").then(() => "", () => ""),
|
|
34
|
+
]);
|
|
35
|
+
// Nothing was typed to end the line, so end it here.
|
|
36
|
+
if (!answered)
|
|
37
|
+
output.write("\n");
|
|
38
|
+
const said = answer.trim().toLowerCase();
|
|
39
|
+
const approved = said === "y" || said === "yes";
|
|
40
|
+
if (!approved)
|
|
41
|
+
output.write("Not approved.\n");
|
|
42
|
+
return approved;
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
prompt.close();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Refuses anywhere but an operator's terminal, before anything is opened. */
|
|
49
|
+
export function assertConsoleTerminal(interactive) {
|
|
50
|
+
if (!interactive) {
|
|
51
|
+
throw new Error("console_needs_a_terminal: run 'melra console' yourself, in a terminal; from a script, use 'melra approve <task-id>'");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Starts the approval console: a loopback server with no MCP endpoint, on the
|
|
56
|
+
* same data directory as the agent's server, whose pairing code is never
|
|
57
|
+
* printed. Not stdout, not stderr, not a file: a harness reads what a process
|
|
58
|
+
* it started prints, and pipes are how it would, so this refuses to start
|
|
59
|
+
* anywhere but in an operator's terminal. The code reaches the browser on its
|
|
60
|
+
* opener's command line, where a process that can list processes can read it
|
|
61
|
+
* until the page spends it (THREAT_MODEL.md, "A pairing race").
|
|
62
|
+
*/
|
|
63
|
+
export async function approvalConsole(env, melra, terminal) {
|
|
64
|
+
assertConsoleTerminal(terminal.interactive);
|
|
65
|
+
// A tab can pair before the opener returns. On success its line waits for
|
|
66
|
+
// the address, so the terminal reads address, then pairing; if the opener
|
|
67
|
+
// then fails, the pairing is reported with what it approved, since nothing
|
|
68
|
+
// the operator opened made it.
|
|
69
|
+
// Every approval is printed the moment it is made, the opener still running
|
|
70
|
+
// included, so however the console ends the terminal names what to cancel.
|
|
71
|
+
let pairedAt;
|
|
72
|
+
let addressed = false;
|
|
73
|
+
const approved = [];
|
|
74
|
+
const pairedLine = (at) => `Paired with a browser tab at ${at.toTimeString().slice(0, 5)}. ` +
|
|
75
|
+
`If no console tab just opened for you, press Ctrl-C now.\n`;
|
|
76
|
+
const approvedLine = (taskId, at) => `Approved ${taskId} at ${at.toTimeString().slice(0, 5)} in the paired tab. ` +
|
|
77
|
+
`If that was not you, run 'melra approve ${taskId} --deny', with this console's MELRA_HOME, before the agent runs it.\n`;
|
|
78
|
+
const endpoint = await serveHttp({
|
|
79
|
+
runtime: melra,
|
|
80
|
+
port: 0,
|
|
81
|
+
approver: approverLabel(env, "console"),
|
|
82
|
+
onPaired: (at) => {
|
|
83
|
+
pairedAt = at;
|
|
84
|
+
if (addressed)
|
|
85
|
+
terminal.say(pairedLine(at));
|
|
86
|
+
},
|
|
87
|
+
onApproved: (taskId) => {
|
|
88
|
+
approved.push(taskId);
|
|
89
|
+
terminal.say(approvedLine(taskId, new Date()));
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
// What the operator must hear when the console closes after a tab paired
|
|
93
|
+
// that no opener of theirs is known to have made.
|
|
94
|
+
const unexplained = () => pairedAt === undefined
|
|
95
|
+
? ""
|
|
96
|
+
: `; a browser tab paired at ${pairedAt.toTimeString().slice(0, 5)} while the opener ran, and ` +
|
|
97
|
+
(approved.length === 0
|
|
98
|
+
? "approved nothing before the console closed"
|
|
99
|
+
: `approved ${approved.join(", ")}: cancel any you did not approve with 'melra approve <task-id> --deny', with this console's MELRA_HOME`);
|
|
100
|
+
let opened;
|
|
101
|
+
try {
|
|
102
|
+
opened = await terminal.open(endpoint.url);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
// An opener that throws must not leave the console listening behind it.
|
|
106
|
+
await endpoint.close();
|
|
107
|
+
if (pairedAt === undefined)
|
|
108
|
+
throw error;
|
|
109
|
+
throw new Error(`${error instanceof Error ? error.message : String(error)}${unexplained()}`);
|
|
110
|
+
}
|
|
111
|
+
if (!opened) {
|
|
112
|
+
await endpoint.close();
|
|
113
|
+
throw new Error(pairedAt === undefined
|
|
114
|
+
? "console_needs_a_browser: nothing here opens a browser, and the console's pairing code is never printed; use 'melra approve <task-id>'"
|
|
115
|
+
: `console_needs_a_browser: the browser opener reported failure${unexplained()}`);
|
|
116
|
+
}
|
|
117
|
+
terminal.say(`Approval console on http://${endpoint.host}:${endpoint.port}, opened in your browser.\n` +
|
|
118
|
+
`One page can pair with it, the first to use its code, which should be the one it\n` +
|
|
119
|
+
`opened: if yours says another tab already paired, press Ctrl-C and cancel each\n` +
|
|
120
|
+
`task this terminal lists as approved. Reloading or leaving the page ends the\n` +
|
|
121
|
+
`pairing: run 'melra console' again then. Ctrl-C closes the console.\n` +
|
|
122
|
+
(melra.policy.mode === "enforced"
|
|
123
|
+
? ""
|
|
124
|
+
: `Developer mode: approvals here are recorded in band, and an enforced server will not act on them.\n`));
|
|
125
|
+
addressed = true;
|
|
126
|
+
if (pairedAt !== undefined)
|
|
127
|
+
terminal.say(pairedLine(pairedAt));
|
|
128
|
+
return endpoint;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=approval-console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-console.js","sourceRoot":"","sources":["../src/approval-console.ts"],"names":[],"mappings":"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"}
|
package/dist/bin.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// Copyright 2026 XAGI Labs Private Limited
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
// The `melra` executable.
|
|
5
|
-
//
|
|
4
|
+
// The `melra` executable. Before the rest of the CLI loads it does two things,
|
|
5
|
+
// then hands over to `index.ts`: it silences one Node warning, and it refuses
|
|
6
|
+
// to start, with a one-line cause, when `node:sqlite` cannot be loaded.
|
|
6
7
|
//
|
|
7
8
|
// `node:sqlite` emits an ExperimentalWarning the first time it is linked, which
|
|
8
9
|
// meant two lines of Node noise on every invocation — `melra help` and
|
|
@@ -26,6 +27,17 @@ process.emitWarning = ((warning, ...rest) => {
|
|
|
26
27
|
return;
|
|
27
28
|
emitWarning(warning, ...rest);
|
|
28
29
|
});
|
|
30
|
+
// The CLI links `node:sqlite` statically, and a release where it needs a flag
|
|
31
|
+
// (before 22.13, or 23.0 to 23.3), or a supported one where it was turned off
|
|
32
|
+
// or left out of the build, would otherwise end every command, `doctor`
|
|
33
|
+
// included, at load with a bare ERR_UNKNOWN_BUILTIN_MODULE. `getBuiltinModule`
|
|
34
|
+
// asks without linking anything; it is itself missing before 20.16 and, on
|
|
35
|
+
// the 22 line, before 22.3, where `node:sqlite` is too.
|
|
36
|
+
if (process.getBuiltinModule?.("node:sqlite") === undefined) {
|
|
37
|
+
const { sqliteUnavailable } = await import("./node-support.js");
|
|
38
|
+
process.stderr.write(`${sqliteUnavailable(process.versions.node)}\n`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
29
41
|
await import("./index.js");
|
|
30
42
|
export {};
|
|
31
43
|
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,2CAA2C;AAC3C,sCAAsC;AAEtC,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,2CAA2C;AAC3C,sCAAsC;AAEtC,+EAA+E;AAC/E,8EAA8E;AAC9E,wEAAwE;AACxE,EAAE;AACF,gFAAgF;AAChF,uEAAuE;AACvE,4EAA4E;AAC5E,4EAA4E;AAC5E,gCAAgC;AAChC,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,+EAA+E;AAC/E,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,uDAAuD;AAEvD,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAChE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEtD,+EAA+E;AAC/E,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,OAAuB,EAAE,GAAG,IAAe,EAAQ,EAAE;IAC3E,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACrE,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO;IAC1C,WAA4C,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AAClE,CAAC,CAA+B,CAAC;AAEjC,8EAA8E;AAC9E,8EAA8E;AAC9E,wEAAwE;AACxE,+EAA+E;AAC/E,2EAA2E;AAC3E,wDAAwD;AACxD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE,CAAC;IAC5D,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC"}
|
package/dist/conformance.d.ts
CHANGED
|
@@ -16,6 +16,12 @@ export interface ConformanceOptions {
|
|
|
16
16
|
* no default, and so cannot earn L3 in enforced mode.
|
|
17
17
|
*/
|
|
18
18
|
approve?: (taskId: string) => Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Set on top of the env a server the suite spawns gets: how this process's
|
|
21
|
+
* own flags (`--mode`, `--unsafe-local`) reach it, since it is started
|
|
22
|
+
* without them.
|
|
23
|
+
*/
|
|
24
|
+
serverEnv?: Record<string, string>;
|
|
19
25
|
}
|
|
20
26
|
export declare function runConformance(options?: ConformanceOptions): Promise<{
|
|
21
27
|
report: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AA8EvD,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,iBAAiB,wBAAwB,CAAC;AA8EvD,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAkCD,wBAAsB,cAAc,CAClC,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAqb/D"}
|
package/dist/conformance.js
CHANGED
|
@@ -419,6 +419,16 @@ export async function runConformance(options = {}) {
|
|
|
419
419
|
probeWritten = false;
|
|
420
420
|
return "a destructive effect needed its own approval and verified as absent";
|
|
421
421
|
});
|
|
422
|
+
// Over HTTP the session outlives the client unless it is ended.
|
|
423
|
+
const transport = client.transport;
|
|
424
|
+
if (transport instanceof StreamableHTTPClientTransport) {
|
|
425
|
+
// Bounded: a target that stopped answering would hold the report for
|
|
426
|
+
// minutes. client.close() aborts the DELETE, which shares its signal.
|
|
427
|
+
await Promise.race([
|
|
428
|
+
transport.terminateSession().catch(() => undefined),
|
|
429
|
+
new Promise((settled) => setTimeout(settled, 2_000).unref()),
|
|
430
|
+
]);
|
|
431
|
+
}
|
|
422
432
|
await client.close();
|
|
423
433
|
const failedLevels = new Set(checks.filter((entry) => !entry.passed).map((entry) => entry.level));
|
|
424
434
|
let level = 0;
|
|
@@ -492,8 +502,8 @@ async function connect(client, options) {
|
|
|
492
502
|
// executable is its own entry point and takes the subcommand directly.
|
|
493
503
|
const self = isSea() ? [] : [...process.execArgv, process.argv[1] ?? ""];
|
|
494
504
|
const args = options.args ?? (options.command === undefined ? [...self, "serve"] : ["serve"]);
|
|
495
|
-
const env = options.env ?? inheritedEnvironment();
|
|
496
|
-
|
|
505
|
+
const env = { ...(options.env ?? inheritedEnvironment()), ...options.serverEnv };
|
|
506
|
+
const transport = new StdioClientTransport({
|
|
497
507
|
command,
|
|
498
508
|
args,
|
|
499
509
|
// The SDK forwards a small allowlist by default, which would drop every
|
|
@@ -501,7 +511,21 @@ async function connect(client, options) {
|
|
|
501
511
|
// the one the operator runs. The point is to check *their* endpoint.
|
|
502
512
|
env,
|
|
503
513
|
stderr: "pipe",
|
|
504
|
-
})
|
|
514
|
+
});
|
|
515
|
+
// Read, so a server that writes a lot never blocks on a full pipe, and kept,
|
|
516
|
+
// so one that refuses to start says why rather than "Connection closed".
|
|
517
|
+
let said = "";
|
|
518
|
+
transport.stderr?.on("data", (chunk) => {
|
|
519
|
+
said = (said + chunk.toString("utf8")).slice(-2_000);
|
|
520
|
+
});
|
|
521
|
+
try {
|
|
522
|
+
await client.connect(transport);
|
|
523
|
+
}
|
|
524
|
+
catch (error) {
|
|
525
|
+
// Its last words can land a moment after the transport reports the close.
|
|
526
|
+
await new Promise((settled) => setTimeout(settled, 50));
|
|
527
|
+
throw said.trim() === "" ? error : new Error(`${message(error)}; the server said: ${said.trim()}`);
|
|
528
|
+
}
|
|
505
529
|
// Only a server this suite started is known to share this CLI's data
|
|
506
530
|
// directory, so only then can its own `approve` answer for it. Always in
|
|
507
531
|
// enforced mode, so it can never spend the task's one decision in band, and
|