@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.
- package/dist/{__build_info__-D6mXC4cD.mjs → __build_info__-0wqQ-rtf.mjs} +3 -51
- package/dist/{attach-C1OnxyMh.mjs → attach-C0-YyNoY.mjs} +6 -6
- package/dist/{attach-CEGbRg1D.mjs → attach-CAKNqnUK.mjs} +64 -35
- package/dist/bin.mjs +1426 -72
- package/dist/{brief-DH66xmj8.mjs → brief-C2hew8cS.mjs} +7 -6
- package/dist/{builtin-files-Cf-NZDqM.mjs → builtin-files-YYAnbZGD.mjs} +1 -1
- package/dist/{chips-BqcT58qr.mjs → chips-CP_pgKlj.mjs} +7 -2
- package/dist/{completion-DS0gCZRm.mjs → completion-K4rAVsrf.mjs} +6 -6
- package/dist/{context-CGPh12HV.mjs → context-B-fjPJky.mjs} +4 -4
- package/dist/context-DMK0U1w0.mjs +160 -0
- package/dist/{detached-Dakw5RZj.mjs → detached-q0AYG0Bs.mjs} +6 -5
- package/dist/{find-BTikxc54.mjs → find-Ct5CNl1J.mjs} +1 -1
- package/dist/{flags-C8yCq0j5.mjs → flags-C90N4J1i.mjs} +3 -3
- package/dist/{follow-ups-CtlhHbwe.mjs → follow-ups-D3HPyNYM.mjs} +14 -9
- package/dist/{format-BB4E-T6x.mjs → format-CiPhQqbX.mjs} +24 -13
- package/dist/{help-groups-BpRgBSTh.mjs → help-groups-BQvcKQ9H.mjs} +8 -3
- package/dist/{in-a-run-CbnKjO7t.mjs → in-a-run-D_wg4iJi.mjs} +2 -2
- package/dist/{install-CWcpX5g4.mjs → install-Hji6LIei.mjs} +50 -2
- package/dist/{limits-VQqsBoQk.mjs → limits-BD6RZRCS.mjs} +1 -1
- package/dist/{mcp-wGfkMCVF.mjs → mcp-CpbDmBLG.mjs} +6 -6
- package/dist/{once-BHxSdZz_.mjs → once-J8Qn5fTG.mjs} +4 -4
- package/dist/{output-B1kwo0YU.mjs → output-DXZbnFt_.mjs} +61 -42
- package/dist/{pause-C_Wxh-KM.mjs → pause-Cl4ZYA35.mjs} +4 -4
- package/dist/{print-DNYzq4Rr.mjs → print-DzugGZQB.mjs} +2 -2
- package/dist/{project-records-XY3ku95x.mjs → project-records-CtkmlsHN.mjs} +3 -3
- package/dist/{relay-BA6tsnpc.mjs → relay-CiP77vga.mjs} +2 -2
- package/dist/{run-Bvvg-fiF.mjs → run-CtuNY3mE.mjs} +1 -1
- package/dist/{send-nrKtak5F.mjs → send-DRYGks8K.mjs} +3 -4
- package/dist/short-flags-DkJLWVqh.mjs +1 -0
- package/dist/short-flags-Qf21as0E.mjs +83 -0
- package/dist/{src-D4JSymhK.mjs → src-BMFQKHz4.mjs} +32 -14
- package/dist/{src-CmEvHdju.mjs → src-BrFfDKux.mjs} +8 -7
- package/dist/{src-8cOPOgrT.mjs → src-BuF9Lbow.mjs} +77 -18
- package/dist/{src-I_RyKu6_.mjs → src-k0A_QpST.mjs} +5 -3
- package/dist/store-rTgRu8xy.mjs +25 -0
- package/dist/ui/assets/app-BYxpKJRh.css +1 -0
- package/dist/ui/assets/{app-BowhjEAe.js → app-SEFEJLkF.js} +8 -8
- package/dist/ui/assets/{index-CrMa2oHB.js → index-Cb6Voq_W.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/dist/{ui-DY3Dnpho.mjs → ui-C2f37TSb.mjs} +9 -6
- package/dist/{usage-1VwSg_Qt.mjs → usage-BuvGcQSk.mjs} +6 -7
- package/dist/validate-ObP5lt29.mjs +1 -0
- package/dist/{validate-BxayjjkV.mjs → validate-_HjACtk9.mjs} +6 -6
- package/dist/{verdict-CMvPCpWC.mjs → verdict-B592j1W3.mjs} +2 -2
- package/dist/{watch-CT0EtLPZ.mjs → watch-DV3ixCYj.mjs} +7 -7
- package/dist/{workflows-DHHi-APg.mjs → workflows-QLjBhGNS.mjs} +3 -3
- package/dist/{worktrees-CZvbHzbN.mjs → worktrees-D3ubG_Qw.mjs} +6 -6
- package/dist/yolo-BSH1E_kE.mjs +33 -0
- package/package.json +1 -1
- package/dist/run-DBUAq-Uu.mjs +0 -1452
- package/dist/store-CDpk8Wtz.mjs +0 -16
- 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 {
|
|
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-
|
|
2
|
-
import { t as findRun } from "./find-
|
|
3
|
-
import { c as write, l as writeErr, s as style } from "./output-
|
|
4
|
-
import { i as continueRefusal } from "./in-a-run-
|
|
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-
|
|
2
|
-
import { a as refuseIdsWithJson } from "./flags-
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
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-
|
|
2
|
-
import { c as write, l as writeErr, s as style } from "./output-
|
|
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-
|
|
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-
|
|
2
|
-
import { u as inheritedScrubber } from "./src-
|
|
3
|
-
import { l as writeErr } from "./output-
|
|
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,
|
|
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
|
-
*
|
|
2710
|
-
*
|
|
2711
|
-
|
|
2712
|
-
|
|
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 { $
|
|
2
|
-
import {
|
|
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-
|
|
6
|
-
import { n as newRunId, t as findRun } from "./find-
|
|
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/
|
|
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
|
-
|
|
6590
|
-
|
|
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 $,
|
|
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 };
|