@krapht/ork 1.0.0-alpha.20 → 1.0.0-alpha.21

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.
Files changed (52) hide show
  1. package/dist/{__build_info__-D6mXC4cD.mjs → __build_info__-0wqQ-rtf.mjs} +3 -51
  2. package/dist/{attach-C1OnxyMh.mjs → attach-C0-YyNoY.mjs} +6 -6
  3. package/dist/{attach-CEGbRg1D.mjs → attach-CAKNqnUK.mjs} +64 -35
  4. package/dist/bin.mjs +1426 -72
  5. package/dist/{brief-DH66xmj8.mjs → brief-C2hew8cS.mjs} +7 -6
  6. package/dist/{builtin-files-Cf-NZDqM.mjs → builtin-files-YYAnbZGD.mjs} +1 -1
  7. package/dist/{chips-BqcT58qr.mjs → chips-CP_pgKlj.mjs} +7 -2
  8. package/dist/{completion-DS0gCZRm.mjs → completion-K4rAVsrf.mjs} +6 -6
  9. package/dist/{context-CGPh12HV.mjs → context-B-fjPJky.mjs} +4 -4
  10. package/dist/context-DMK0U1w0.mjs +160 -0
  11. package/dist/{detached-Dakw5RZj.mjs → detached-q0AYG0Bs.mjs} +6 -5
  12. package/dist/{find-BTikxc54.mjs → find-Ct5CNl1J.mjs} +1 -1
  13. package/dist/{flags-C8yCq0j5.mjs → flags-C90N4J1i.mjs} +3 -3
  14. package/dist/{follow-ups-CtlhHbwe.mjs → follow-ups-D3HPyNYM.mjs} +14 -9
  15. package/dist/{format-BB4E-T6x.mjs → format-CiPhQqbX.mjs} +24 -13
  16. package/dist/{help-groups-BpRgBSTh.mjs → help-groups-BQvcKQ9H.mjs} +8 -3
  17. package/dist/{in-a-run-CbnKjO7t.mjs → in-a-run-D_wg4iJi.mjs} +2 -2
  18. package/dist/{install-CWcpX5g4.mjs → install-Hji6LIei.mjs} +50 -2
  19. package/dist/{limits-VQqsBoQk.mjs → limits-BD6RZRCS.mjs} +1 -1
  20. package/dist/{mcp-wGfkMCVF.mjs → mcp-CpbDmBLG.mjs} +6 -6
  21. package/dist/{once-BHxSdZz_.mjs → once-J8Qn5fTG.mjs} +4 -4
  22. package/dist/{output-B1kwo0YU.mjs → output-DXZbnFt_.mjs} +61 -42
  23. package/dist/{pause-C_Wxh-KM.mjs → pause-Cl4ZYA35.mjs} +4 -4
  24. package/dist/{print-DNYzq4Rr.mjs → print-DzugGZQB.mjs} +2 -2
  25. package/dist/{project-records-XY3ku95x.mjs → project-records-CtkmlsHN.mjs} +3 -3
  26. package/dist/{relay-BA6tsnpc.mjs → relay-CiP77vga.mjs} +2 -2
  27. package/dist/{run-Bvvg-fiF.mjs → run-CtuNY3mE.mjs} +1 -1
  28. package/dist/{send-nrKtak5F.mjs → send-DRYGks8K.mjs} +3 -4
  29. package/dist/short-flags-DkJLWVqh.mjs +1 -0
  30. package/dist/short-flags-Qf21as0E.mjs +83 -0
  31. package/dist/{src-D4JSymhK.mjs → src-BMFQKHz4.mjs} +32 -14
  32. package/dist/{src-CmEvHdju.mjs → src-BrFfDKux.mjs} +8 -7
  33. package/dist/{src-8cOPOgrT.mjs → src-BuF9Lbow.mjs} +77 -18
  34. package/dist/{src-I_RyKu6_.mjs → src-k0A_QpST.mjs} +5 -3
  35. package/dist/store-rTgRu8xy.mjs +25 -0
  36. package/dist/ui/assets/app-BYxpKJRh.css +1 -0
  37. package/dist/ui/assets/{app-BowhjEAe.js → app-SEFEJLkF.js} +8 -8
  38. package/dist/ui/assets/{index-CrMa2oHB.js → index-Cb6Voq_W.js} +2 -2
  39. package/dist/ui/index.html +1 -1
  40. package/dist/{ui-DY3Dnpho.mjs → ui-C2f37TSb.mjs} +9 -6
  41. package/dist/{usage-1VwSg_Qt.mjs → usage-BuvGcQSk.mjs} +6 -7
  42. package/dist/validate-ObP5lt29.mjs +1 -0
  43. package/dist/{validate-BxayjjkV.mjs → validate-_HjACtk9.mjs} +6 -6
  44. package/dist/{verdict-CMvPCpWC.mjs → verdict-B592j1W3.mjs} +2 -2
  45. package/dist/{watch-CT0EtLPZ.mjs → watch-DV3ixCYj.mjs} +7 -7
  46. package/dist/{workflows-DHHi-APg.mjs → workflows-QLjBhGNS.mjs} +3 -3
  47. package/dist/{worktrees-CZvbHzbN.mjs → worktrees-D3ubG_Qw.mjs} +6 -6
  48. package/dist/yolo-BSH1E_kE.mjs +33 -0
  49. package/package.json +1 -1
  50. package/dist/run-DBUAq-Uu.mjs +0 -1452
  51. package/dist/store-CDpk8Wtz.mjs +0 -16
  52. package/dist/ui/assets/app--FijEXiJ.css +0 -1
@@ -1,5 +1,64 @@
1
1
  import { stripVTControlCharacters, styleText } from "node:util";
2
2
  import { createInterface } from "node:readline/promises";
3
+ // src/term/theme.ts
4
+ /**
5
+ * @file The terminal kit's one theme: a role says what a piece of text means
6
+ * (accent, ok, warn, danger, muted), and the theme gives it a look that reads
7
+ * on dark and light terminals: the 16 ANSI colors only, and a fixed
8
+ * foreground on every chip background. Nothing is said by color alone: a chip
9
+ * carries words and a mark a symbol. In plain mode every call returns the
10
+ * text unstyled.
11
+ */
12
+ /** The text look of each role. */
13
+ const TEXT = {
14
+ accent: "cyan",
15
+ ok: "green",
16
+ warn: "yellow",
17
+ danger: "red",
18
+ muted: "dim"
19
+ };
20
+ /** The chip look of each role: a background and the foreground fixed on it. */
21
+ const CHIP = {
22
+ accent: ["bgCyan", "black"],
23
+ ok: ["bgGreen", "black"],
24
+ warn: ["bgYellow", "black"],
25
+ danger: ["bgRed", "whiteBright"],
26
+ muted: ["bgWhite", "black"]
27
+ };
28
+ /** The backgrounds a node chip takes, by a hash of its id. */
29
+ const NODE_PALETTE = [
30
+ ["bgCyan", "black"],
31
+ ["bgGreen", "black"],
32
+ ["bgYellow", "black"],
33
+ ["bgMagenta", "whiteBright"],
34
+ ["bgBlue", "whiteBright"],
35
+ ["bgWhite", "black"]
36
+ ];
37
+ /** `text` in `format` when the terminal is rich, else as is. */
38
+ const apply = (term, format, text) => term.rich ? styleText(format, text, { validateStream: false }) : text;
39
+ /** `text` in a role's color. */
40
+ const paint = (term, role, text) => apply(term, TEXT[role], text);
41
+ /** `text` in bold. */
42
+ const bold = (term, text) => apply(term, "bold", text);
43
+ /** Where a line's text starts, after its leading color codes (`ESC[…m`). */
44
+ const textStart = (line) => {
45
+ let at = 0;
46
+ while (line.startsWith("\x1B[", at)) {
47
+ const end = line.indexOf("m", at);
48
+ if (end === -1) return at;
49
+ at = end + 1;
50
+ }
51
+ return at;
52
+ };
53
+ /** `lines` with the bar in their first column, on a rich terminal. */
54
+ const barred = (t, lines) => {
55
+ if (!t.rich) return [...lines];
56
+ const bar = apply(t, "greenBright", "▌");
57
+ return lines.map((line) => {
58
+ const at = textStart(line);
59
+ return line[at] === " " ? `${bar}${line.slice(0, at)}${line.slice(at + 1)}` : line;
60
+ });
61
+ };
3
62
  // src/term/keys.ts
4
63
  /** What a `ESC [ …` or `ESC O …` sequence names. */
5
64
  const SEQUENCES = {
@@ -264,46 +323,6 @@ const createRegion = (out, term) => {
264
323
  };
265
324
  return region;
266
325
  };
267
- // src/term/theme.ts
268
- /**
269
- * @file The terminal kit's one theme: a role says what a piece of text means
270
- * (accent, ok, warn, danger, muted), and the theme gives it a look that reads
271
- * on dark and light terminals: the 16 ANSI colors only, and a fixed
272
- * foreground on every chip background. Nothing is said by color alone: a chip
273
- * carries words and a mark a symbol. In plain mode every call returns the
274
- * text unstyled.
275
- */
276
- /** The text look of each role. */
277
- const TEXT = {
278
- accent: "cyan",
279
- ok: "green",
280
- warn: "yellow",
281
- danger: "red",
282
- muted: "dim"
283
- };
284
- /** The chip look of each role: a background and the foreground fixed on it. */
285
- const CHIP = {
286
- accent: ["bgCyan", "black"],
287
- ok: ["bgGreen", "black"],
288
- warn: ["bgYellow", "black"],
289
- danger: ["bgRed", "whiteBright"],
290
- muted: ["bgWhite", "black"]
291
- };
292
- /** The backgrounds a node chip takes, by a hash of its id. */
293
- const NODE_PALETTE = [
294
- ["bgCyan", "black"],
295
- ["bgGreen", "black"],
296
- ["bgYellow", "black"],
297
- ["bgMagenta", "whiteBright"],
298
- ["bgBlue", "whiteBright"],
299
- ["bgWhite", "black"]
300
- ];
301
- /** `text` in `format` when the terminal is rich, else as is. */
302
- const apply = (term, format, text) => term.rich ? styleText(format, text, { validateStream: false }) : text;
303
- /** `text` in a role's color. */
304
- const paint = (term, role, text) => apply(term, TEXT[role], text);
305
- /** `text` in bold. */
306
- const bold = (term, text) => apply(term, "bold", text);
307
326
  // src/term/confirm.ts
308
327
  /**
309
328
  * @file The yes-or-no prompt: on a terminal, `Yes` and `No` that ←/→ (or `h`
@@ -334,7 +353,7 @@ const confirmOrStop = async (io, options) => {
334
353
  const asked = hang(" ? ", question, t.width).map((line, i) => i === 0 ? ` ${paint(t, "accent", "?")} ${bold(t, line.slice(3))}` : line);
335
354
  const pick = (label, on) => on ? apply(t, "inverse", ` ${label} `) : ` ${label} `;
336
355
  const keys = paint(t, "muted", "y/n · ←/→ · Enter");
337
- region.draw([...asked, ` ${pick("Yes", yes)} ${pick("No", !yes)} ${keys}`]);
356
+ region.draw(barred(t, [...asked, ` ${pick("Yes", yes)} ${pick("No", !yes)} ${keys}`]));
338
357
  };
339
358
  const finish = (answer) => {
340
359
  stop();
@@ -436,4 +455,4 @@ const confirm = (question) => confirm$1({
436
455
  input: process.stdin,
437
456
  output: process.stderr
438
457
  }, { question: question.replace(/\s*\[y\/N\]\s*$/u, "") });
439
- export { termOf as C, wrap as D, widthOf as E, readKeys as O, takePlainFlag as S, hang as T, interrupt as _, plain as a, canKey as b, write as c, CHIP as d, NODE_PALETTE as f, createRegion as g, paint as h, detachHint as i, writeErr as l, bold as m, cost as n, shortCount as o, apply as p, costOf as r, style as s, confirm as t, confirmOrStop as u, readLine as v, cut as w, plainEnv as x, withdrawn as y };
458
+ export { readKeys as C, apply as D, NODE_PALETTE as E, bold as O, wrap as S, CHIP as T, takePlainFlag as _, plain as a, hang as b, write as c, createRegion as d, interrupt as f, plainEnv as g, canKey as h, detachHint as i, paint as k, writeErr as l, withdrawn as m, cost as n, shortCount as o, readLine as p, costOf as r, style as s, confirm as t, confirmOrStop as u, termOf as v, barred as w, widthOf as x, cut as y };
@@ -1,7 +1,7 @@
1
- import { An as requestContinue, R as openStore, jn as requestPause } from "./src-8cOPOgrT.mjs";
2
- import { t as findRun } from "./find-BTikxc54.mjs";
3
- import { c as write, l as writeErr, s as style } from "./output-B1kwo0YU.mjs";
4
- import { i as continueRefusal } from "./in-a-run-CbnKjO7t.mjs";
1
+ import { An as requestContinue, R as openStore, jn as requestPause } from "./src-BuF9Lbow.mjs";
2
+ import { t as findRun } from "./find-Ct5CNl1J.mjs";
3
+ import { c as write, l as writeErr, s as style } from "./output-DXZbnFt_.mjs";
4
+ import { i as continueRefusal } from "./in-a-run-D_wg4iJi.mjs";
5
5
  import { t as refuseExtraArguments } from "./extra-arguments-BxQMXARO.mjs";
6
6
  import { defineCommand } from "citty";
7
7
  // src/commands/pause.ts
@@ -1,5 +1,5 @@
1
- import { c as write } from "./output-B1kwo0YU.mjs";
2
- import { a as refuseIdsWithJson } from "./flags-C8yCq0j5.mjs";
1
+ import { c as write } from "./output-DXZbnFt_.mjs";
2
+ import { a as refuseIdsWithJson } from "./flags-C90N4J1i.mjs";
3
3
  // src/list/print.ts
4
4
  /**
5
5
  * Prints `rows`: `--ids` their ids (`table.id`) comma-separated; `--json` the
@@ -1,6 +1,6 @@
1
- import { Hr as inRepoPlace, Jr as shownPath, Kr as projectsHome, R as openStore, Ur as newProjectId, Vr as hasInRepoFiles, Wr as placeFiles, Zr as projectRootOf } from "./src-8cOPOgrT.mjs";
2
- import { C as termOf, c as write, l as writeErr, s as style, w as cut } from "./output-B1kwo0YU.mjs";
3
- import { n as chip } from "./chips-BqcT58qr.mjs";
1
+ import { $r as projectRootOf, Gr as newProjectId, Jr as projectsHome, Kr as placeFiles, R as openStore, Ur as hasInRepoFiles, Wr as inRepoPlace, Xr as shownPath } from "./src-BuF9Lbow.mjs";
2
+ import { c as write, l as writeErr, s as style, v as termOf, y as cut } from "./output-DXZbnFt_.mjs";
3
+ import { r as chip } from "./chips-CP_pgKlj.mjs";
4
4
  import { t as refuseExtraArguments } from "./extra-arguments-BxQMXARO.mjs";
5
5
  import path from "node:path";
6
6
  import { existsSync, mkdirSync, realpathSync, statSync } from "node:fs";
@@ -1,5 +1,5 @@
1
- import { En as addressOf, On as linkNodes, R as openStore, kn as unlinkNodes } from "./src-8cOPOgrT.mjs";
2
- import { c as write, l as writeErr, s as style } from "./output-B1kwo0YU.mjs";
1
+ import { En as addressOf, On as linkNodes, R as openStore, kn as unlinkNodes } from "./src-BuF9Lbow.mjs";
2
+ import { c as write, l as writeErr, s as style } from "./output-DXZbnFt_.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  // src/commands/relay.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { in as gitOk, rn as git } from "./src-8cOPOgrT.mjs";
1
+ import { in as gitOk, rn as git } from "./src-BuF9Lbow.mjs";
2
2
  import path from "node:path";
3
3
  import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
4
4
  import { createHash, randomUUID } from "node:crypto";
@@ -1,6 +1,6 @@
1
- import { R as openStore, et as TOO_LONG, nt as sendFromScript, tt as scriptRefusal } from "./src-8cOPOgrT.mjs";
2
- import { u as inheritedScrubber } from "./src-I_RyKu6_.mjs";
3
- import { l as writeErr } from "./output-B1kwo0YU.mjs";
1
+ import { R as openStore, et as TOO_LONG, nt as sendFromScript, tt as scriptRefusal } from "./src-BuF9Lbow.mjs";
2
+ import { u as inheritedScrubber } from "./src-k0A_QpST.mjs";
3
+ import { l as writeErr } from "./output-DXZbnFt_.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  // src/commands/send.ts
6
6
  /**
@@ -76,7 +76,6 @@ const send = defineCommand({
76
76
  },
77
77
  message: {
78
78
  type: "string",
79
- alias: "m",
80
79
  description: "The message"
81
80
  },
82
81
  stdin: {
@@ -0,0 +1 @@
1
+ export { a as withShortFlags } from "./short-flags-Qf21as0E.mjs";
@@ -0,0 +1,83 @@
1
+ import { a as resolved } from "./command-tree-CEkzWNy6.mjs";
2
+ // src/short-flags.ts
3
+ /**
4
+ * Each flag's short form. A letter is given only where a well-known CLI uses it
5
+ * for the same thing (`tail -f`, `git commit -m`, `head -n`); `-h` and `-v` are
6
+ * help and version, and `-s` is no one's, as `--since`, `--status` and
7
+ * `--severity` would all want it.
8
+ */
9
+ const SHORT_FLAGS = {
10
+ all: "a",
11
+ detach: "d",
12
+ follow: "f",
13
+ input: "i",
14
+ limit: "n",
15
+ message: "m",
16
+ output: "o",
17
+ project: "p",
18
+ yes: "y"
19
+ };
20
+ /** `def` with `short` first among its aliases. */
21
+ const withAlias = (def, short) => {
22
+ if (def.type === "positional") return def;
23
+ const given = "alias" in def ? [def.alias ?? []].flat() : [];
24
+ return {
25
+ ...def,
26
+ alias: [short, ...given.filter((alias) => alias !== short)]
27
+ };
28
+ };
29
+ /** `args` with each flag's short form from {@link SHORT_FLAGS}. */
30
+ const shortFlagsOf = (args) => {
31
+ const out = { ...args };
32
+ for (const [name, def] of Object.entries(args)) {
33
+ const short = SHORT_FLAGS[name];
34
+ if (short !== void 0) Reflect.set(out, name, withAlias(def, short));
35
+ }
36
+ return out;
37
+ };
38
+ /** Each subcommand wrapped once, so `worktrees` and `wt` stay one command. */
39
+ const wrapped = /* @__PURE__ */ new WeakMap();
40
+ const wrappedOnce = (cmd) => {
41
+ const known = wrapped.get(cmd);
42
+ if (known !== void 0) return known;
43
+ const out = withShortFlags(cmd);
44
+ wrapped.set(cmd, out);
45
+ return out;
46
+ };
47
+ /**
48
+ * `cmd` and every command under it, loaded on use or not, with their flags'
49
+ * short forms.
50
+ */
51
+ const withShortFlags = (cmd) => {
52
+ const { args, subCommands } = cmd;
53
+ return {
54
+ ...cmd,
55
+ ...args === void 0 ? {} : { args: async () => shortFlagsOf(await resolved(args)) },
56
+ ...subCommands === void 0 ? {} : { subCommands: async () => Object.fromEntries(Object.entries(await resolved(subCommands)).map(([name, sub]) => [name, async () => wrappedOnce(await resolved(sub))])) }
57
+ };
58
+ };
59
+ /** The spellings of the flag `--name` on a command line. */
60
+ const spellingsOf = (name) => {
61
+ const short = SHORT_FLAGS[name];
62
+ return short === void 0 ? [`--${name}`] : [`--${name}`, `-${short}`];
63
+ };
64
+ /** Whether `arg` is the flag `--name` (a boolean), in either spelling. */
65
+ const isFlag = (arg, name) => spellingsOf(name).includes(arg);
66
+ /**
67
+ * Every value given to the flag `--name` in `rawArgs`, in order: `--name v`,
68
+ * `--name=v`, `-x v` and `-x=v` for its short form `-x`.
69
+ */
70
+ const flagValues = (rawArgs, name) => {
71
+ const spellings = spellingsOf(name);
72
+ const values = [];
73
+ for (const [index, arg] of rawArgs.entries()) {
74
+ const joined = spellings.find((flag) => arg.startsWith(`${flag}=`));
75
+ if (joined !== void 0) values.push(arg.slice(joined.length + 1));
76
+ else if (spellings.includes(arg)) {
77
+ const value = rawArgs[index + 1];
78
+ if (value !== void 0) values.push(value);
79
+ }
80
+ }
81
+ return values;
82
+ };
83
+ export { withShortFlags as a, shortFlagsOf as i, flagValues as n, isFlag as r, SHORT_FLAGS as t };
@@ -1,4 +1,4 @@
1
- import { Bt as lowerChild, Dr as MASK, Fi as AGENT_DRIVERS, Ht as startAt, St as parseReport, Vt as programFound, Wn as countedTokens, ar as endFor, dr as FEEDBACK_TARGETS, hn as FOLLOW_UP_KINDS, ir as END_KINDS, kr as maskSecrets, lr as FEEDBACK_KINDS, nr as outcomeEnd, ur as FEEDBACK_SEVERITIES } from "./src-8cOPOgrT.mjs";
1
+ import { Bt as lowerChild, Ht as startAt, Kn as countedTokens, Ri as AGENT_DRIVERS, St as parseReport, Vt as programFound, dr as FEEDBACK_KINDS, fr as FEEDBACK_SEVERITIES, hn as FOLLOW_UP_KINDS, ir as outcomeEnd, jr as maskSecrets, kr as MASK, or as END_KINDS, pr as FEEDBACK_TARGETS, sr as endFor } from "./src-BuF9Lbow.mjs";
2
2
  import { n as holdGuard, r as orphanGuard } from "./orphan-guard-BFKg8VSd.mjs";
3
3
  import path from "node:path";
4
4
  import { z } from "zod";
@@ -2352,14 +2352,16 @@ const commandCodeUsage = {
2352
2352
  * (`Bash(git:*)`, `Read`, `mcp__github`); a specifier Ork does not read never
2353
2353
  * allows a call and always denies one. A shell line is checked command by
2354
2354
  * command: each must be allowed, and one with a substitution Ork can't read
2355
- * is allowed only by a plain `Bash` rule.
2355
+ * is allowed only by a plain `Bash` rule. A yolo run (`ork run --yolo`)
2356
+ * allows every call the node's `deny` and `only` don't refuse.
2356
2357
  */
2357
2358
  /** The rules of a session: an `acceptEdits` node may edit without a rule. */
2358
2359
  const modRules = (spec) => ({
2359
2360
  cwd: spec.cwd,
2360
2361
  allow: [...spec.tools.allow, ...spec.permissionMode === "acceptEdits" ? ["Edit"] : []],
2361
2362
  deny: spec.tools.deny,
2362
- ...spec.tools.only === void 0 ? {} : { only: spec.tools.only }
2363
+ ...spec.tools.only === void 0 ? {} : { only: spec.tools.only },
2364
+ ...spec.yolo === true ? { yolo: true } : {}
2363
2365
  });
2364
2366
  /**
2365
2367
  * The mod's source. It is plain JavaScript that Command Code loads (a default
@@ -2522,6 +2524,7 @@ export const decide = (name, input) => {
2522
2524
  if (RULES.only !== undefined && !allCovered(RULES.only, name, calls)) {
2523
2525
  return "not one of this node's tools";
2524
2526
  }
2527
+ if (RULES.yolo === true) return undefined;
2525
2528
  if (READS.has(name) && inside(input)) return undefined;
2526
2529
  if (allCovered(RULES.allow, name, calls)) return undefined;
2527
2530
  return "not allowed for this node";
@@ -2706,26 +2709,41 @@ const worktree = (action) => ({
2706
2709
  effect: "allow"
2707
2710
  });
2708
2711
  /**
2709
- * The session's rules, in order: deny everything; read in the worktree (as
2710
- * Claude Code reads without asking); edits there under `acceptEdits`; the
2711
- * node's allows (only its `only` tools, if it names them); Ork's tools; then
2712
- * `.env` reads, plan mode's edits and shell, and the node's denies, refused.
2712
+ * A yolo session's refusals of the built-in tools its `only` leaves out, as
2713
+ * `--tools` would; none without `only`.
2714
+ */
2715
+ const outsideOnly = (only) => only === void 0 ? [] : [...BUILT_IN].filter((action) => !only.has(action)).map((action) => ({
2716
+ action,
2717
+ resource: "*",
2718
+ effect: "deny"
2719
+ }));
2720
+ /**
2721
+ * The session's rules, in order: deny everything (a yolo run: allow it, then
2722
+ * refuse the built-ins its `only` leaves out); read in the worktree (as Claude
2723
+ * Code reads without asking); edits there under `acceptEdits`; the node's
2724
+ * allows (only its `only` tools, if it names them); Ork's tools; then `.env`
2725
+ * reads, plan mode's edits and shell, and the node's denies, refused.
2713
2726
  */
2714
2727
  const permissionRules = (spec) => {
2715
2728
  const { cwd, tools } = spec;
2716
2729
  const only = tools.only === void 0 ? void 0 : new Set(rulesOf(tools.only, "allow", cwd).map((r) => r.action));
2717
2730
  const inOnly = (rule) => only === void 0 || only.has(rule.action) || !BUILT_IN.has(rule.action);
2731
+ const allows = [
2732
+ worktree("read"),
2733
+ ...spec.permissionMode === "acceptEdits" ? [worktree("edit")] : [],
2734
+ ...rulesOf(tools.allow, "allow", cwd)
2735
+ ].filter((rule) => inOnly(rule));
2718
2736
  return [
2719
- {
2737
+ ...spec.yolo === true ? [{
2738
+ action: "*",
2739
+ resource: "*",
2740
+ effect: "allow"
2741
+ }, ...outsideOnly(only)] : [{
2720
2742
  action: "*",
2721
2743
  resource: "*",
2722
2744
  effect: "deny"
2723
- },
2724
- ...[
2725
- worktree("read"),
2726
- ...spec.permissionMode === "acceptEdits" ? [worktree("edit")] : [],
2727
- ...rulesOf(tools.allow, "allow", cwd)
2728
- ].filter((rule) => inOnly(rule)),
2745
+ }],
2746
+ ...allows,
2729
2747
  ...ORK_TOOLS.map((tool) => ({
2730
2748
  action: mcpAction("ork", tool.name),
2731
2749
  resource: "*",
@@ -1,11 +1,11 @@
1
- import { $t as planClean, An as requestContinue, Bn as processAlive, Br as loadAgents, C as detectInstaller, Cr as readCondition, Et as walkSummary, Gr as placeFor, Gt as feedbackListTable, I as activeTree, In as pausedOf, Jt as usageListTable, Kt as followUpListTable, L as isNodeEvent, Ln as runStatus, Mn as requestStop, Nn as tellLiveRun, O as triggersReport, On as linkNodes, Pn as liveStatus, Qn as followUpActions, Qr as LESSON_CAP_TOKENS, Qt as keyOf, R as openStore, S as runningScript, Tn as DEFAULT_FOLLOW_UPS_RULE, Tt as walkChecks, Un as nestItems, Ut as LIST_TABLES, Wr as placeFiles, Wt as decisionListTable, Xn as dueCause, Xr as inside, Xt as applyClean, Yn as changeFollowUp, Yr as workflowDirOf, Yt as worktreeListTable, Zn as findFollowUp, Zt as cleanStep, _ as usageReport, _n as postFollowUpMessage, _t as limitsReport, a as planRemove, ai as applyEdits, b as releaseNotes, bi as NodeSchema, cr as recordNote, d as mergeStateOf, di as renderJsonSchema, dt as resumable, en as stepActs, f as planLine, fi as parseWorkflow, fr as DISCUSSIONS, hi as EdgeInputSchema, hr as sendPost, i as lostWork, ii as WorkflowEditSchema, ir as END_KINDS, jn as requestPause, kn as unlinkNodes, m as stateParts, mr as runGh, mt as followEvents, o as projectHead, oi as newWorkflowText, or as previewPost, ot as answerDecision, p as removeRefusal, pr as planPost, pt as detachRun, qn as loadProject, qr as runDirOf, qt as runListTable, r as applyRemove, ri as skillsIn, s as readWorktrees, si as readDocument, st as pendingDecisions, tn as stepPrunes, tr as endOf, u as labelOf, un as nodeSays, ut as detachResume, v as capsHere, vi as expandEdge, vn as checkFollowUpsDue, vr as feedbackActions, wn as liveSessionOf, wt as checkWorkflowText, x as runningRunIds, xn as startFollowUpChecks, y as planUpgrade, yr as openFixRun, yt as explainWorkflowText, z as storePath } from "./src-8cOPOgrT.mjs";
2
- import { i as placeOf$1, n as acceptItem, r as lessonPlaceOf, t as runInstall } from "./install-CWcpX5g4.mjs";
1
+ import { $n as findFollowUp, $t as planClean, An as requestContinue, C as detectInstaller, Et as walkSummary, Gn as nestItems, Gt as feedbackListTable, Hn as processAlive, Hr as loadAgents, I as activeTree, In as pausedOf, Jt as usageListTable, Kr as placeFiles, Kt as followUpListTable, L as isNodeEvent, Ln as runStatus, Mn as requestStop, Nn as tellLiveRun, O as triggersReport, On as linkNodes, Pn as liveStatus, Qn as dueCause, Qr as inside, Qt as keyOf, R as openStore, S as runningScript, Si as NodeSchema, Tn as DEFAULT_FOLLOW_UPS_RULE, Tr as readCondition, Tt as walkChecks, Ut as LIST_TABLES, Vn as yoloOf, Wt as decisionListTable, Xt as applyClean, Yn as loadProject, Yr as runDirOf, Yt as worktreeListTable, Zn as changeFollowUp, Zr as workflowDirOf, Zt as cleanStep, _ as usageReport, _i as EdgeInputSchema, _n as postFollowUpMessage, _r as sendPost, _t as limitsReport, a as planRemove, ai as skillsIn, b as releaseNotes, bi as expandEdge, br as feedbackActions, ci as newWorkflowText, cr as previewPost, d as mergeStateOf, dt as resumable, ei as LESSON_CAP_TOKENS, en as stepActs, er as followUpActions, f as planLine, gr as runGh, hr as planPost, i as lostWork, jn as requestPause, kn as unlinkNodes, li as readDocument, m as stateParts, mi as parseWorkflow, mr as DISCUSSIONS, mt as followEvents, o as projectHead, oi as WorkflowEditSchema, or as END_KINDS, ot as answerDecision, p as removeRefusal, pi as renderJsonSchema, pt as detachRun, qr as placeFor, qt as runListTable, r as applyRemove, rr as endOf, s as readWorktrees, si as applyEdits, st as pendingDecisions, tn as stepPrunes, u as labelOf, un as nodeSays, ur as recordNote, ut as detachResume, v as capsHere, vn as checkFollowUpsDue, wn as liveSessionOf, wt as checkWorkflowText, x as runningRunIds, xn as startFollowUpChecks, xr as openFixRun, y as planUpgrade, yt as explainWorkflowText, z as storePath } from "./src-BuF9Lbow.mjs";
2
+ import { a as placeOf$1, i as lessonPlaceOf, n as nodeSession, r as acceptItem, t as runInstall } from "./install-Hji6LIei.mjs";
3
3
  import { t as applyFilters } from "./apply-Mb0fNpCX.mjs";
4
4
  import { i as parseLimit, n as unknownProjectRefusal, r as parseFilters, t as limitRefusal } from "./refusals-DQQX3AIb.mjs";
5
- import { t as builtinProblem } from "./builtin-files-Cf-NZDqM.mjs";
6
- import { n as newRunId, t as findRun } from "./find-BTikxc54.mjs";
7
- import { a as registryShown, c as fetchLatest, d as readUpdateCache, f as refreshUpdateCache, h as nodeSession, i as registryOf, l as newerVersion, m as writeUpdateCache, o as updateSwitchOff, p as updateCachePath, s as checkDue } from "./__build_info__-D6mXC4cD.mjs";
5
+ import { t as builtinProblem } from "./builtin-files-YYAnbZGD.mjs";
6
+ import { n as newRunId, t as findRun } from "./find-Ct5CNl1J.mjs";
8
7
  import { t as outputsText } from "./outputs-text-CNTJ7Qq_.mjs";
8
+ import { a as registryShown, c as fetchLatest, d as readUpdateCache, f as refreshUpdateCache, i as registryOf, l as newerVersion, m as writeUpdateCache, o as updateSwitchOff, p as updateCachePath, s as checkDue } from "./__build_info__-0wqQ-rtf.mjs";
9
9
  import path from "node:path";
10
10
  import { z } from "zod";
11
11
  import { chmodSync, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1000,7 +1000,8 @@ const viewOf$2 = (context, run) => {
1000
1000
  return {
1001
1001
  ...run,
1002
1002
  live: runStatus(run, events),
1003
- paused: pausedOf(events)
1003
+ paused: pausedOf(events),
1004
+ ...yoloOf(events) ? { yolo: true } : {}
1004
1005
  };
1005
1006
  };
1006
1007
  /** The run's view plus its last finish's declared outputs, when it has any. */
@@ -1952,7 +1953,7 @@ const readRoutes = (context) => ({
1952
1953
  }));
1953
1954
  }
1954
1955
  const found = runOf(context, run);
1955
- if (!found.ok) return found.refusal;
1956
+ if (!found.ok) return fail(400, `--run finds no run: ${found.refusal.error}`);
1956
1957
  return ok(pendingDecisions(context.store, {
1957
1958
  ...workflow,
1958
1959
  runId: found.run.id
@@ -455,6 +455,15 @@ const readyDriver = (checks) => {
455
455
  ready: ready.length
456
456
  };
457
457
  };
458
+ /**
459
+ * Why the ready driver was taken, in a few words: the only one ready (its
460
+ * detail), the preferred one of several, or the next when the preferred one
461
+ * isn't ready, so a run never reads as if it put another before it.
462
+ */
463
+ const whyReady = (ready) => {
464
+ if (ready.ready === 1) return ready.detail;
465
+ return ready.driver === "claude-code" ? `more than one is ready, and ${PREFERRED_DRIVER} comes first` : `${PREFERRED_DRIVER} isn't ready, so ${ready.driver} is next (\`ork doctor\` says why)`;
466
+ };
458
467
  // ../integrations/src/registry.ts
459
468
  /**
460
469
  * @file The registry of tool integrations (ADR-022): every user CLI Ork can
@@ -4002,7 +4011,7 @@ const MASK = "[masked]";
4002
4011
  const maskSecrets = (text) => PATTERNS.reduce((out, pattern) => out.replaceAll(pattern, MASK), text);
4003
4012
  /** A `JSON.stringify` replacer that masks every string. */
4004
4013
  const maskReplacer = (_key, value) => typeof value === "string" ? maskSecrets(value) : value;
4005
- // ../core/src/control/queue.ts
4014
+ // ../core/src/control/permission-prompt.ts
4006
4015
  const PERMISSION_OPTIONS = [{
4007
4016
  id: "allow",
4008
4017
  label: "Allow"
@@ -4027,6 +4036,38 @@ const inputContext = (input, max = 4e3) => {
4027
4036
  const text = key === void 0 ? JSON.stringify(input, void 0, 2) : String(input[key]);
4028
4037
  return text.length > max ? `${text.slice(0, max - 1)}…` : text;
4029
4038
  };
4039
+ /** The decision a permission prompt opens. */
4040
+ const permissionDecision = (ask) => ({
4041
+ node: ask.nodeId,
4042
+ kind: "permission",
4043
+ question: `Allow ${ask.toolName}?`,
4044
+ options: PERMISSION_OPTIONS,
4045
+ context: inputContext(ask.input)
4046
+ });
4047
+ /** Records the decision `id` of a yolo run, opened and allowed at once. */
4048
+ const allowedByYolo = (store, emit, decision, ask) => {
4049
+ const record = store.openDecision({
4050
+ ...permissionDecision(ask),
4051
+ ...decision
4052
+ });
4053
+ emit({
4054
+ type: "decision.opened",
4055
+ node: record.node,
4056
+ decision: decision.id,
4057
+ kind: "permission",
4058
+ question: record.question,
4059
+ options: record.options
4060
+ });
4061
+ store.answerDecision(decision.id, "allow", "yolo");
4062
+ emit({
4063
+ type: "decision.answered",
4064
+ node: record.node,
4065
+ decision: decision.id,
4066
+ answer: "allow",
4067
+ by: "yolo"
4068
+ });
4069
+ };
4070
+ // ../core/src/control/queue.ts
4030
4071
  const createDecisionQueue = (options) => {
4031
4072
  const { store, runId, emit } = options;
4032
4073
  const earlier = store.decisions({ runId });
@@ -4184,15 +4225,17 @@ const createDecisionQueue = (options) => {
4184
4225
  });
4185
4226
  },
4186
4227
  permit: async (request) => {
4228
+ if (options.yolo === true) {
4229
+ count += 1;
4230
+ allowedByYolo(store, emit, {
4231
+ id: `${runId}-${String(count)}`,
4232
+ runId
4233
+ }, request);
4234
+ return { allow: true };
4235
+ }
4187
4236
  const { local } = options;
4188
4237
  let localMessage = DENIED;
4189
- const { answer, note } = await decide({
4190
- node: request.nodeId,
4191
- kind: "permission",
4192
- question: `Allow ${request.toolName}?`,
4193
- options: PERMISSION_OPTIONS,
4194
- context: inputContext(request.input)
4195
- }, local === void 0 ? void 0 : (signal) => {
4238
+ const { answer, note } = await decide(permissionDecision(request), local === void 0 ? void 0 : (signal) => {
4196
4239
  let said;
4197
4240
  return local.permit({
4198
4241
  ...request,
@@ -4415,7 +4458,8 @@ const startControl = async (options) => {
4415
4458
  check();
4416
4459
  return promise;
4417
4460
  },
4418
- ...options.local === void 0 ? {} : { local: options.local }
4461
+ ...options.local === void 0 ? {} : { local: options.local },
4462
+ ...options.yolo === true ? { yolo: true } : {}
4419
4463
  }),
4420
4464
  publish: (stored) => {
4421
4465
  socket?.publish(stored);
@@ -5859,6 +5903,10 @@ const findFollowUp = (rows, project, prefix) => {
5859
5903
  };
5860
5904
  const matches = prefix === "" ? [] : rows.followUps(project).filter((f) => f.id.startsWith(prefix));
5861
5905
  const [only, other] = matches;
5906
+ if (only === void 0 && /[\s,]/u.test(prefix)) return {
5907
+ ok: false,
5908
+ error: `\`${prefix}\` is several ids; this command takes one.`
5909
+ };
5862
5910
  if (only === void 0) return {
5863
5911
  ok: false,
5864
5912
  error: `No follow-up \`${prefix}\` in this project.`
@@ -6585,11 +6633,16 @@ const runTree = (events) => {
6585
6633
  return roots;
6586
6634
  };
6587
6635
  /** The nodes of a run waiting for a machine-wide slot now. */
6588
- const slotWaitsOf = (events) => {
6589
- const waiting = /* @__PURE__ */ new Set();
6590
- for (const event of events) if (event.type === "slot.waiting") waiting.add(event.id);
6636
+ const slotWaitsOf = (events) => slotWaitingOf(events).map(({ id }) => id);
6637
+ /** The nodes of a run waiting for a check slot now, with the holders. */
6638
+ const slotWaitingOf = (events) => {
6639
+ const waiting = /* @__PURE__ */ new Map();
6640
+ for (const event of events) if (event.type === "slot.waiting") waiting.set(event.id, {
6641
+ id: event.id,
6642
+ holders: event.holders
6643
+ });
6591
6644
  else if (event.type === "slot.taken" || event.type === "node.finished") waiting.delete(event.id);
6592
- return [...waiting];
6645
+ return [...waiting.values()];
6593
6646
  };
6594
6647
  /** The nodes of a run waiting for a lock now (RFC-016). */
6595
6648
  const lockWaitsOf = (events) => {
@@ -6604,6 +6657,11 @@ const lockWaitsOf = (events) => {
6604
6657
  } else if (event.type === "lock.taken" || event.type === "node.finished") waiting.delete(event.id);
6605
6658
  return [...waiting.values()];
6606
6659
  };
6660
+ /** Whether the run's latest start had `--yolo` (each start records its own). */
6661
+ const yoloOf = (events) => {
6662
+ const started = events.findLast((event) => event.type === "run.started");
6663
+ return started?.type === "run.started" && started.settings?.yolo === true;
6664
+ };
6607
6665
  /** Folds a run's `ork pause` and `ork continue` commands (ADR-041). */
6608
6666
  const pausedOf = (events) => {
6609
6667
  let run = false;
@@ -15605,7 +15663,7 @@ const adoptedCalls = (store, runId) => {
15605
15663
  return adopted;
15606
15664
  };
15607
15665
  /** What the called run's own `limits.budgetUsd` is capped to, and so on. */
15608
- const argsOf = (file, id, caller, request, machineClaude) => [
15666
+ const argsOf = (file, id, caller, request, machineClaude, yolo) => [
15609
15667
  "run",
15610
15668
  file,
15611
15669
  "--run-id",
@@ -15615,7 +15673,8 @@ const argsOf = (file, id, caller, request, machineClaude) => [
15615
15673
  ...Object.entries(request.inputs).flatMap(([name, value]) => ["--input", `${name}=${value}`]),
15616
15674
  ...request.budgetLeftUsd === void 0 ? [] : ["--budget-cap", String(request.budgetLeftUsd)],
15617
15675
  ...request.ref === void 0 ? [] : ["--base-ref", request.ref],
15618
- ...machineClaude ? ["--machine-claude"] : []
15676
+ ...machineClaude ? ["--machine-claude"] : [],
15677
+ ...yolo ? ["--yolo", "--yes"] : []
15619
15678
  ];
15620
15679
  /** Why the target's `calls.accept` shuts this project out, or `null`. */
15621
15680
  const notAccepted = (options, request, target) => {
@@ -15659,7 +15718,7 @@ const startCall = async (options, request) => {
15659
15718
  const detached = await (options.detach ?? detachRun)({
15660
15719
  store,
15661
15720
  runId: id,
15662
- args: argsOf(file, id, `${runId}/${request.callId}`, request, options.machineClaude === true),
15721
+ args: argsOf(file, id, `${runId}/${request.callId}`, request, options.machineClaude === true, options.yolo === true),
15663
15722
  cwd: target.root,
15664
15723
  runDir: runDirOf(target, id),
15665
15724
  env: options.env
@@ -17252,7 +17311,7 @@ const decisionOf = (row) => {
17252
17311
  };
17253
17312
  for (const [key, value] of Object.entries(optional)) if (value !== "") Object.assign(record, { [key]: value });
17254
17313
  const by = text(row, "answered_by");
17255
- if (by === "terminal" || by === "decide" || by === "ui" || by === "owner") record.answeredBy = by;
17314
+ if (by === "terminal" || by === "decide" || by === "ui" || by === "owner" || by === "yolo") record.answeredBy = by;
17256
17315
  return record;
17257
17316
  };
17258
17317
  const decisionQueries = (db) => {
@@ -19953,4 +20012,4 @@ const createWorkspace = (options) => {
19953
20012
  close
19954
20013
  };
19955
20014
  };
19956
- export { driverQueues as $, isGithubIssueUrl as $n, estimateTokens as $r, planClean as $t, triggerStanding as A, PREFERRED_DRIVER as Ai, requestContinue as An, planAgentMigration as Ar, heldTimeout as At, appendRecorder as B, knownExperiments as Bi, processAlive as Bn, loadAgents as Br, lowerChild as Bt, detectInstaller as C, DriverSchema as Ci, followUpProblem as Cn, readCondition as Cr, reportSchemaFor as Ct, lateTriggers as D, INTEGRATIONS as Di, endLinksOf as Dn, MASK as Dr, startRun as Dt, parseVersion as E, timeoutMs as Ei, addressOf as En, TOOL_INPUT_KEYS as Er, walkSummary as Et, watchingPid as F, AGENT_DRIVERS as Fi, lockWaitsOf as Fn, toolsInUse as Fr, failedWith as Ft, listOrkWorktrees as G, PROJECT_FILE as Gn, placeFor as Gr, feedbackListTable as Gt, applyPrune as H, isItem as Hn, inRepoPlace as Hr, startAt as Ht, activeTree as I, DRIVER_IDS as Ii, pausedOf as In, createAgent as Ir, stoppedEnd as It, parseInputPairs as J, machineRulesOf as Jn, shownPath as Jr, usageListTable as Jt, createReplay as K, gitRulesOf as Kn, projectsHome as Kr, followUpListTable as Kt, isNodeEvent as L, firstLine as Li, runStatus as Ln, deleteAgent as Lr, declaredProblem as Lt, readProjectTriggers as M, readyDriver as Mi, requestStop as Mn, planMoveInto as Mr, calledWorkflows as Mt, workflowTextHash as N, AGENT_TOOL_LAYOUTS as Ni, tellLiveRun as Nn, linkTools as Nr, lockWaitLine as Nt, triggersReport as O, TOOL_PREFIX as Oi, linkNodes as On, maskReplacer as Or, MESSAGE_LIMIT as Ot, takeWatchLock as P, ORK_LAYOUT as Pi, liveStatus as Pn, toolLinks as Pr, endedWith as Pt, sessionRefusals as Q, followUpActions as Qn, LESSON_CAP_TOKENS as Qr, keyOf as Qt, openStore as R, EXPERIMENTS as Ri, slotWaitsOf as Rn, AGENT_SOURCES as Rr, slotClock as Rt, runningScript as S, isToolNode as Si, deliverFollowUp as Sn, renderTemplate as Sr, parseReport as St, isNewer as T, retiredDriverHint as Ti, DEFAULT_FOLLOW_UPS_RULE as Tn, socketRoom as Tr, walkChecks as Tt, planPrune as U, nestItems as Un, newProjectId as Ur, LIST_TABLES as Ut, createRecorder as V, stillTheSameProcess as Vn, hasInRepoFiles as Vr, programFound as Vt, createdWorktrees as W, countedTokens as Wn, placeFiles as Wr, decisionListTable as Wt, budgetWarnings as X, dueCause as Xn, inside as Xr, applyClean as Xt, resolveInputs as Y, changeFollowUp as Yn, workflowDirOf as Yr, worktreeListTable as Yt, driverRefusals as Z, findFollowUp as Zn, projectRootOf as Zr, cleanStep as Zt, usageReport as _, CheckReportSchema as _i, postFollowUpMessage as _n, normalizeTitle as _r, limitsReport as _t, planRemove as a, applyEdits as ai, clearGitLocalEnv as an, endFor as ar, followRunTree as at, releaseNotes as b, NodeSchema as bi, recordPublished as bn, evaluate as br, explainSession as bt, repoRoot as c, renameNodeTypes as ci, namingNoDriver as cn, recordNote as cr, createCalls as ct, mergeStateOf as d, renderJsonSchema as di, declaredOutputOf as dn, FEEDBACK_TARGETS as dr, resumable as dt, guardedBase as ei, stepActs as en, createSignals as er, TOO_LONG as et, planLine as f, parseWorkflow as fi, MCP_FILE as fn, DISCUSSIONS as fr, DETACHED_ENV as ft, USAGE_DIMENSIONS as g, WorkflowSchema as gi, createFollowUps as gn, createFeedback as gr, limitsNow as gt, resolveBase as h, EdgeInputSchema as hi, FOLLOW_UP_KINDS as hn, sendPost as hr, NOT_STARTED as ht, lostWork as i, WorkflowEditSchema as ii, gitOk as in, END_KINDS as ir, followRuns as it, declaredTriggers as j, driverChecks as ji, requestPause as jn, applySteps as jr, runScope as jt, createWatcher as k, integrationFor as ki, unlinkNodes as kn, maskSecrets as kr, userMessageText as kt, isDetached as l, beforeOf as li, sessionDriver as ln, FEEDBACK_KINDS as lr, adoptedCalls as lt, stateParts as m, markValue as mi, serversIn as mn, runGh as mr, followEvents as mt, resumedOptions as n, writePlainFile as ni, inspectProject as nn, outcomeEnd as nr, sendFromScript as nt, projectHead as o, newWorkflowText as oi, envReadsOf as on, previewPost as or, answerDecision as ot, removeRefusal as p, serializeWorkflow as pi, mcpNotText as pn, planPost as pr, detachRun as pt, replayLoopAnswers as q, loadProject as qn, runDirOf as qr, runListTable as qt, applyRemove as r, skillsIn as ri, git as rn, END_DETAIL_LIMIT as rr, createRelay as rt, readWorktrees as s, readDocument as si, modelDriver as sn, checkNote as sr, pendingDecisions as st, createWorkspace as t, plainPathInside as ti, stepPrunes as tn, endOf as tr, scriptRefusal as tt, labelOf as u, programsRunBy as ui, nodeSays as un, FEEDBACK_SEVERITIES as ur, detachResume as ut, capsHere as v, expandEdge as vi, checkFollowUpsDue as vn, feedbackActions as vr, planReason as vt, compareVersions as w, NodeIdSchema as wi, liveSessionOf as wn, startControl as wr, checkWorkflowText as wt, runningRunIds as x, isClaudeNode as xi, startFollowUpChecks as xn, parseTemplate as xr, planNodeSession as xt, planUpgrade as y, settingsOf as yi, markDue as yn, openFixRun as yr, explainWorkflowText as yt, storePath as z, experimentsOn as zi, templateOf$1 as zn, catalogAgent as zr, slotWaitLine as zt };
20015
+ export { driverQueues as $, findFollowUp as $n, projectRootOf as $r, planClean as $t, triggerStanding as A, TOOL_PREFIX as Ai, requestContinue as An, maskReplacer as Ar, heldTimeout as At, appendRecorder as B, firstLine as Bi, templateOf$1 as Bn, AGENT_SOURCES as Br, lowerChild as Bt, detectInstaller as C, isClaudeNode as Ci, followUpProblem as Cn, parseTemplate as Cr, reportSchemaFor as Ct, lateTriggers as D, retiredDriverHint as Di, endLinksOf as Dn, socketRoom as Dr, startRun as Dt, parseVersion as E, NodeIdSchema as Ei, addressOf as En, startControl as Er, walkSummary as Et, watchingPid as F, whyReady as Fi, lockWaitsOf as Fn, linkTools as Fr, failedWith as Ft, listOrkWorktrees as G, nestItems as Gn, newProjectId as Gr, feedbackListTable as Gt, applyPrune as H, experimentsOn as Hi, processAlive as Hn, loadAgents as Hr, startAt as Ht, activeTree as I, AGENT_TOOL_LAYOUTS as Ii, pausedOf as In, toolLinks as Ir, stoppedEnd as It, parseInputPairs as J, gitRulesOf as Jn, projectsHome as Jr, usageListTable as Jt, createReplay as K, countedTokens as Kn, placeFiles as Kr, followUpListTable as Kt, isNodeEvent as L, ORK_LAYOUT as Li, runStatus as Ln, toolsInUse as Lr, declaredProblem as Lt, readProjectTriggers as M, PREFERRED_DRIVER as Mi, requestStop as Mn, planAgentMigration as Mr, calledWorkflows as Mt, workflowTextHash as N, driverChecks as Ni, tellLiveRun as Nn, applySteps as Nr, lockWaitLine as Nt, triggersReport as O, timeoutMs as Oi, linkNodes as On, TOOL_INPUT_KEYS as Or, MESSAGE_LIMIT as Ot, takeWatchLock as P, readyDriver as Pi, liveStatus as Pn, planMoveInto as Pr, endedWith as Pt, sessionRefusals as Q, dueCause as Qn, inside as Qr, keyOf as Qt, openStore as R, AGENT_DRIVERS as Ri, slotWaitingOf as Rn, createAgent as Rr, slotClock as Rt, runningScript as S, NodeSchema as Si, deliverFollowUp as Sn, evaluate as Sr, parseReport as St, isNewer as T, DriverSchema as Ti, DEFAULT_FOLLOW_UPS_RULE as Tn, readCondition as Tr, walkChecks as Tt, planPrune as U, knownExperiments as Ui, stillTheSameProcess as Un, hasInRepoFiles as Ur, LIST_TABLES as Ut, createRecorder as V, EXPERIMENTS as Vi, yoloOf as Vn, catalogAgent as Vr, programFound as Vt, createdWorktrees as W, isItem as Wn, inRepoPlace as Wr, decisionListTable as Wt, budgetWarnings as X, machineRulesOf as Xn, shownPath as Xr, applyClean as Xt, resolveInputs as Y, loadProject as Yn, runDirOf as Yr, worktreeListTable as Yt, driverRefusals as Z, changeFollowUp as Zn, workflowDirOf as Zr, cleanStep as Zt, usageReport as _, EdgeInputSchema as _i, postFollowUpMessage as _n, sendPost as _r, limitsReport as _t, planRemove as a, skillsIn as ai, clearGitLocalEnv as an, END_DETAIL_LIMIT as ar, followRunTree as at, releaseNotes as b, expandEdge as bi, recordPublished as bn, feedbackActions as br, explainSession as bt, repoRoot as c, newWorkflowText as ci, namingNoDriver as cn, previewPost as cr, createCalls as ct, mergeStateOf as d, beforeOf as di, declaredOutputOf as dn, FEEDBACK_KINDS as dr, resumable as dt, LESSON_CAP_TOKENS as ei, stepActs as en, followUpActions as er, TOO_LONG as et, planLine as f, programsRunBy as fi, MCP_FILE as fn, FEEDBACK_SEVERITIES as fr, DETACHED_ENV as ft, USAGE_DIMENSIONS as g, markValue as gi, createFollowUps as gn, runGh as gr, limitsNow as gt, resolveBase as h, serializeWorkflow as hi, FOLLOW_UP_KINDS as hn, planPost as hr, NOT_STARTED as ht, lostWork as i, writePlainFile as ii, gitOk as in, outcomeEnd as ir, followRuns as it, declaredTriggers as j, integrationFor as ji, requestPause as jn, maskSecrets as jr, runScope as jt, createWatcher as k, INTEGRATIONS as ki, unlinkNodes as kn, MASK as kr, userMessageText as kt, isDetached as l, readDocument as li, sessionDriver as ln, checkNote as lr, adoptedCalls as lt, stateParts as m, parseWorkflow as mi, serversIn as mn, DISCUSSIONS as mr, followEvents as mt, resumedOptions as n, guardedBase as ni, inspectProject as nn, createSignals as nr, sendFromScript as nt, projectHead as o, WorkflowEditSchema as oi, envReadsOf as on, END_KINDS as or, answerDecision as ot, removeRefusal as p, renderJsonSchema as pi, mcpNotText as pn, FEEDBACK_TARGETS as pr, detachRun as pt, replayLoopAnswers as q, PROJECT_FILE as qn, placeFor as qr, runListTable as qt, applyRemove as r, plainPathInside as ri, git as rn, endOf as rr, createRelay as rt, readWorktrees as s, applyEdits as si, modelDriver as sn, endFor as sr, pendingDecisions as st, createWorkspace as t, estimateTokens as ti, stepPrunes as tn, isGithubIssueUrl as tr, scriptRefusal as tt, labelOf as u, renameNodeTypes as ui, nodeSays as un, recordNote as ur, detachResume as ut, capsHere as v, WorkflowSchema as vi, checkFollowUpsDue as vn, createFeedback as vr, planReason as vt, compareVersions as w, isToolNode as wi, liveSessionOf as wn, renderTemplate as wr, checkWorkflowText as wt, runningRunIds as x, settingsOf as xi, startFollowUpChecks as xn, openFixRun as xr, planNodeSession as xt, planUpgrade as y, CheckReportSchema as yi, markDue as yn, normalizeTitle as yr, explainWorkflowText as yt, storePath as z, DRIVER_IDS as zi, slotWaitsOf as zn, deleteAgent as zr, slotWaitLine as zt };