@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 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
- `setup` writes a safe local policy, produces an MCP client configuration, and
10
- runs every readiness check (Node, workspace, SQLite, browser, computer-use
11
- adapter, policy, MCP clients). In a terminal it asks which detected client to
12
- set up and offers to write MELRA into that client's own config file;
13
- `--client <name> --write` does the same without asking, and piped or with
14
- `--json` it prints JSON. It exits non-zero if a check fails and never
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)
@@ -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
  /**
@@ -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;AAGzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAkGvD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAenD;AAMD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA8C/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;AAmDD,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,CA2FjB"}
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 "./approval-screen.js";
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, waiting } = withStore(env, { tasks: [], waiting: 0 }, (store) => ({
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
- waiting: store.taskStatusCounts().awaiting_approval ?? 0,
177
+ approvals: approvalCounts(store, options.window),
126
178
  }));
127
179
  if (!humanOutput(options.json)) {
128
- // The shape `/api/tasks` answers with, minus approvals.
129
- write(printable(JSON.stringify({ tasks: tasks.map(visible) }, null, 2), true));
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
- if (waiting > 0) {
211
+ const hints = [...(approvals.waiting > 0 ? [approvalHint(approvals.waiting)] : []), ...expiredHints(approvals)];
212
+ if (hints.length > 0)
154
213
  write();
155
- write(approvalHint(waiting));
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
- const port = Number(process.env.MELRA_HTTP_PORT);
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, { tasks: {}, workflows: {}, lastActivity: undefined }, (store) => {
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: tasks.awaiting_approval ?? 0,
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
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. Its only job is to silence one Node warning before
5
- // the rest of the CLI loads, then hand over to `index.ts`.
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,6EAA6E;AAC7E,2DAA2D;AAC3D,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,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC"}
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"}
@@ -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;CAC7C;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,CA2a/D"}
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"}
@@ -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
- await client.connect(new StdioClientTransport({
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