@krapht/ork 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (43) hide show
  1. package/README.md +3 -4
  2. package/dist/{__build_info__-D9lSlMFy.mjs → __build_info__-CIchF6nr.mjs} +2 -2
  3. package/dist/bin.mjs +1479 -600
  4. package/dist/chips-BA7SrrH5.mjs +43 -0
  5. package/dist/{clean-CA_Oi2Wl.mjs → clean-Di-KT7Mf.mjs} +5 -2
  6. package/dist/{completion-DBGfL-gN.mjs → completion-C5D0sEs5.mjs} +23 -16
  7. package/dist/context-BaNshWr9.mjs +695 -0
  8. package/dist/{decide-CoIJh34e.mjs → decide-B6PnKeqo.mjs} +3 -3
  9. package/dist/{find-rBBk7Jui.mjs → find-BicBbGMg.mjs} +1 -1
  10. package/dist/format-lWhN-jYR.mjs +286 -0
  11. package/dist/{in-a-run-DdAakpRR.mjs → in-a-run-CgkVouyG.mjs} +1 -1
  12. package/dist/{limits-BPM9wUlV.mjs → limits-jZQp9ZJC.mjs} +1 -1
  13. package/dist/{list-Bv5Lxu7z.mjs → list-CEaJ07jd.mjs} +11 -4
  14. package/dist/{mcp-DM30MFBw.mjs → mcp-DYgVA9f5.mjs} +6 -6
  15. package/dist/output-CM95njYt.mjs +421 -0
  16. package/dist/{pause-C7lJkSma.mjs → pause-D6PuSlNl.mjs} +4 -4
  17. package/dist/{relay-BipJYszF.mjs → relay-DNx7be9k.mjs} +2 -2
  18. package/dist/{remove-BDs9isB6.mjs → remove-CpMb4NDl.mjs} +14 -7
  19. package/dist/{report-DK4LGqwF.mjs → report-CEN8VoUb.mjs} +31 -20
  20. package/dist/{send-nbkjf3sc.mjs → send-CLs_fyg7.mjs} +3 -3
  21. package/dist/{src-BxUJPGa5.mjs → src-9iGkjnsy.mjs} +487 -341
  22. package/dist/{src-B0TT7DBi.mjs → src-B6KvTm7B.mjs} +106 -90
  23. package/dist/src-BnZgZGrf.mjs +2697 -0
  24. package/dist/{src-hrj2h0IZ.mjs → src-D6_xjm-x.mjs} +6719 -3389
  25. package/dist/ui/THIRD_PARTY_LICENSES.txt +594 -0
  26. package/dist/ui/assets/app-CxURph7a.js +75 -0
  27. package/dist/ui/assets/app-QoHVi-mb.css +1 -0
  28. package/dist/ui/assets/{index-CPx74lFf.js → index-By_8KKG6.js} +3 -3
  29. package/dist/ui/assets/theme-CdXvqTQ6.js +1 -0
  30. package/dist/ui/index.html +2 -2
  31. package/dist/{ui-B98FSboa.mjs → ui-CIci4UBW.mjs} +4 -4
  32. package/dist/{usage-EW7DI6Z7.mjs → usage-GceBGMjU.mjs} +43 -32
  33. package/dist/{watch-BAkSGaOp.mjs → watch-BmoybMQg.mjs} +28 -16
  34. package/dist/{workflows-vsEohqa7.mjs → workflows-DZvW3i1e.mjs} +4 -3
  35. package/dist/{worktrees-Ahj9rdWK.mjs → worktrees-Be51E2rB.mjs} +84 -24
  36. package/package.json +2 -4
  37. package/dist/context-6x3kXREO.mjs +0 -274
  38. package/dist/format-zMmhqyLE.mjs +0 -427
  39. package/dist/output-TV_j7Ni0.mjs +0 -950
  40. package/dist/src-B9v0lDc6.mjs +0 -1204
  41. package/dist/ui/assets/app-BNT0SuIz.css +0 -1
  42. package/dist/ui/assets/app-CmkynZyW.js +0 -67
  43. package/dist/ui/assets/theme-3xH5jxKs.js +0 -1
@@ -1,4 +1,4 @@
1
- import { An as guardedBase, Mn as writePlainFile, an as wakeRun, bn as placeFiles, ht as liveStatus, jn as plainPathInside, rn as socketPath } from "./src-hrj2h0IZ.mjs";
1
+ import { Bn as placeFiles, Cn as wakeRun, Qn as writePlainFile, Xn as guardedBase, Zn as plainPathInside, xn as socketPath, xt as liveStatus } from "./src-D6_xjm-x.mjs";
2
2
  import path from "node:path";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { createHash } from "node:crypto";
@@ -69,7 +69,7 @@ const builtinWorkflowFile = (place, arg) => {
69
69
  * An answer goes to the store (the first one wins), then the run is woken on
70
70
  * its socket so it picks the answer up at once (specs/messaging.md).
71
71
  */
72
- /** Open decisions whose run is still live, oldest first. */
72
+ /** Open decisions whose run is still live, oldest first, ANDing the filter. */
73
73
  const pendingDecisions = (store, filter) => {
74
74
  const live = /* @__PURE__ */ new Map();
75
75
  return store.decisions({
@@ -78,7 +78,7 @@ const pendingDecisions = (store, filter) => {
78
78
  }).filter((decision) => {
79
79
  if (!live.has(decision.runId)) {
80
80
  const [run] = store.lookup(decision.runId);
81
- live.set(decision.runId, run !== void 0 && liveStatus(run) === "running");
81
+ live.set(decision.runId, run !== void 0 && liveStatus(run) === "running" && (filter.workflow === void 0 || run.workflow === filter.workflow));
82
82
  }
83
83
  return live.get(decision.runId) === true;
84
84
  });
@@ -1,4 +1,4 @@
1
- import { xn as placeFor } from "./src-hrj2h0IZ.mjs";
1
+ import { Vn as placeFor } from "./src-D6_xjm-x.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  // ../core/src/remote/find.ts
4
4
  /**
@@ -0,0 +1,286 @@
1
+ import { Ct as runStatus, Tt as slotWaitsOf, kt as isItem, xt as liveStatus } from "./src-D6_xjm-x.mjs";
2
+ import { C as widthOf, b as termOf, i as style, n as cost, u as apply, x as cut } from "./output-CM95njYt.mjs";
3
+ import { i as statusChip, n as chip, t as CHIP_LABELS } from "./chips-BA7SrrH5.mjs";
4
+ // src/run/view.ts
5
+ /**
6
+ * @file How a run's lines are drawn: the terminal kit's {@link Term} for the
7
+ * stream they go to, and what a transcript has to remember between events (a
8
+ * node's worktree, to show its paths relative to it). Plain, a view draws
9
+ * today's line-based transcript; rich, it draws chips and cuts to the width.
10
+ */
11
+ /** A view for `stream` (stdout when not given), as `env` sets it. */
12
+ const createView = (stream = process.stdout, env = process.env) => ({
13
+ term: termOf(stream, env),
14
+ roots: /* @__PURE__ */ new Map()
15
+ });
16
+ /** Styles text for `term`: no escape codes when it is plain. */
17
+ const styler = (term) => (format, text) => apply(term, format, text);
18
+ // src/run/format-bus.ts
19
+ /** The first line of a message body, cut to fit one terminal line. */
20
+ const firstLine = (body) => {
21
+ const [line = ""] = body.trim().split("\n");
22
+ return line.length > 100 ? `${line.slice(0, 99)}…` : line;
23
+ };
24
+ /** Messages, owner questions and claims, without the node prefix. */
25
+ const formatBusEvent = (event, term = createView().term) => {
26
+ const style = styler(term);
27
+ if (event.type === "claim.taken") return [style("dim", `⚑ claimed ${event.resource}`)];
28
+ if (event.type === "claim.refused") {
29
+ const held = event.held === event.resource ? "" : ` (it holds ${event.held})`;
30
+ return [style("yellow", `⚑ ${event.resource} is ${event.holder}'s${held}`)];
31
+ }
32
+ if (event.type === "claim.released") return [style("dim", `⚑ released ${event.resource}`)];
33
+ if (event.type === "message.sent") {
34
+ const how = event.via === void 0 ? "" : ` (${event.via})`;
35
+ return [style("dim", `✉ to ${event.to}${how}: ${firstLine(event.body)}`)];
36
+ }
37
+ if (event.type === "message.received") {
38
+ const how = event.via === void 0 ? "" : ` (${event.via})`;
39
+ return [style("dim", `✉ from ${event.from}${how}: ${firstLine(event.body)}`)];
40
+ }
41
+ if (event.type === "call.started") return [style("dim", `↳ started ${event.workflow} as run ${event.run}`)];
42
+ if (event.type === "link.notice") return [style("dim", `↔ ${event.text}`)];
43
+ if (event.type === "message.read") return [];
44
+ if (event.type === "owner.asked") return [`${term.rich ? chip(term, CHIP_LABELS.ask, "accent") : style(["yellow", "bold"], "?")} asked as the owner of ${event.about}: ${event.text} ${style("dim", `(${event.question})`)}`];
45
+ if (event.type === "owner.answered") return [style("dim", `→ ${event.answer} (owner)`)];
46
+ return [style("dim", "→ its session ended first; asking you")];
47
+ };
48
+ // src/run/items-ran.ts
49
+ /**
50
+ * @file How a fan-out's finished line counts its items: only the ones that
51
+ * started.
52
+ */
53
+ /** How many of a fan-out's items started; a skipped one never did. */
54
+ const itemsRan = (count, statuses) => {
55
+ const ran = Array.isArray(statuses) ? statuses.filter((status) => status !== "skipped").length : count;
56
+ return ran === count ? `${String(count)} ran` : `${String(ran)} of ${String(count)} ran`;
57
+ };
58
+ // src/run/verdict.ts
59
+ /**
60
+ * @file The one-line verdict of a finished node: its report's status, unless
61
+ * the node failed or its work did not merge.
62
+ */
63
+ /** Whether a finished node's work did not merge into its owner. */
64
+ const hasConflict = (output) => {
65
+ const { merge } = output;
66
+ return typeof merge === "object" && merge !== null && "ok" in merge && merge.ok === false;
67
+ };
68
+ /**
69
+ * A one-line verdict for a finished node, by what its type outputs. A node that
70
+ * failed reads `fail` even when its report said `pass` (a hook refused its
71
+ * commit); a child that did not merge says so.
72
+ */
73
+ const nodeVerdict = (output, ok = true, error) => {
74
+ const { status, summary, exitCode, choice, answeredBy, count } = output;
75
+ if (typeof status === "string") {
76
+ if (!ok && (status === "pass" || status === "done")) return error === void 0 ? "fail" : `fail: ${firstLine(error)}`;
77
+ const label = hasConflict(output) ? `${status}, merge conflict` : status;
78
+ return typeof summary === "string" && summary !== "" ? `${label}: ${summary}` : label;
79
+ }
80
+ if (typeof exitCode === "number") return `exit ${String(exitCode)}`;
81
+ if (typeof choice === "string") return `${choice} (${String(answeredBy)})`;
82
+ if (typeof count === "number") return itemsRan(count, output["statuses"]);
83
+ return "done";
84
+ };
85
+ // src/term/table.ts
86
+ /**
87
+ * @file Aligned columns for the listing commands: each column as wide as its
88
+ * widest cell, a two-space gap, the last column left unpadded. Rich, a cell
89
+ * may be a chip and a table wider than the screen cuts its flexible columns
90
+ * with `…`; plain, nothing is cut or styled, as the listings always printed.
91
+ */
92
+ /** A dimmed header cell. */
93
+ const header = (text) => ({
94
+ text,
95
+ look: (s) => style("dim", s)
96
+ });
97
+ const GAP = " ";
98
+ /** A flexible column is never cut under this many columns. */
99
+ const MIN_FLEX = 8;
100
+ /** The text a cell shows, and its columns. */
101
+ const shown = (term, cell) => term.rich && cell.chip !== void 0 ? cell.chip.label : cell.text;
102
+ const widthOfCell = (term, cell) => widthOf(shown(term, cell)) + (term.rich && cell.chip !== void 0 ? 2 : 0);
103
+ /** The lines of a table, one per row (a header is a row the caller passes). */
104
+ const table = (term, columns, rows, indent = "") => {
105
+ const widths = columns.map((_, c) => Math.max(0, ...rows.map((row) => widthOfCell(term, row[c] ?? { text: "" }))));
106
+ if (term.rich) {
107
+ const gaps = 2 * (columns.length - 1);
108
+ let over = indent.length + widths.reduce((a, b) => a + b, 0) + gaps - term.width;
109
+ columns.forEach((column, c) => {
110
+ const width = widths[c] ?? 0;
111
+ if (over <= 0 || column.flex !== true || width <= MIN_FLEX) return;
112
+ const next = Math.max(MIN_FLEX, width - over);
113
+ over -= width - next;
114
+ widths[c] = next;
115
+ });
116
+ }
117
+ const last = columns.length - 1;
118
+ return rows.map((row) => indent + columns.map((column, c) => {
119
+ const cell = row[c] ?? { text: "" };
120
+ const width = widths[c] ?? 0;
121
+ const look = cell.look ?? ((s) => s);
122
+ if (term.rich && cell.chip !== void 0) {
123
+ const used = widthOfCell(term, cell);
124
+ const pad = " ".repeat(Math.max(0, width - used));
125
+ return column.align === "right" ? pad + chip(term, cell.chip.label, cell.chip.role) : chip(term, cell.chip.label, cell.chip.role) + (c === last ? "" : pad);
126
+ }
127
+ const text = cut(shown(term, cell), width);
128
+ const pad = " ".repeat(Math.max(0, width - widthOf(text)));
129
+ if (column.align === "right") return look(pad + text);
130
+ return c === last ? look(text) : look(text + pad);
131
+ }).join(GAP));
132
+ };
133
+ // src/runs/format.ts
134
+ /**
135
+ * @file How stored runs read on the terminal: the `ork ps` table and the `ork
136
+ * tree` ownership tree with each node's state, tokens and cost, and what is
137
+ * paused (ADR-041).
138
+ */
139
+ const STATUS_STYLE = {
140
+ running: "cyan",
141
+ paused: "yellow",
142
+ succeeded: "green",
143
+ failed: "red",
144
+ crashed: "red",
145
+ budget_exhausted: "yellow",
146
+ quota_exhausted: "yellow",
147
+ timed_out: "yellow",
148
+ interrupted: "yellow"
149
+ };
150
+ /** `just now`, `5m ago`, `3h ago`, `2d ago`, then the date. */
151
+ const ago = (iso, now = Date.now()) => {
152
+ const minutes = Math.floor((now - Date.parse(iso)) / 6e4);
153
+ if (minutes < 1) return "just now";
154
+ if (minutes < 60) return `${String(minutes)}m ago`;
155
+ if (minutes < 1440) return `${String(Math.floor(minutes / 60))}h ago`;
156
+ if (minutes < 10080) return `${String(Math.floor(minutes / 1440))}d ago`;
157
+ return iso.slice(0, 10);
158
+ };
159
+ /** `42s`, `3m12s`, `1h05m`. */
160
+ const duration = (ms) => {
161
+ const s = Math.max(0, Math.round(ms / 1e3));
162
+ if (s < 60) return `${String(s)}s`;
163
+ if (s < 3600) return `${String(Math.floor(s / 60))}m${String(s % 60).padStart(2, "0")}s`;
164
+ return `${String(Math.floor(s / 3600))}h${String(Math.floor(s % 3600 / 60)).padStart(2, "0")}m`;
165
+ };
166
+ const dim = (s) => style("dim", s);
167
+ /**
168
+ * A run's status as `ork ps` reads it: `waiting for slot` for a running run
169
+ * with a command waiting for a machine-wide slot; `events` are a running
170
+ * run's.
171
+ */
172
+ const listedStatus = (run, events) => {
173
+ const status = runStatus(run, events);
174
+ return status === "running" && slotWaitsOf(events).length > 0 ? "waiting for slot" : status;
175
+ };
176
+ /**
177
+ * The `ork ps` table; `withProject` adds each run's project. A called run's
178
+ * cost is dimmed and says its caller's, whose cost already counts it.
179
+ */
180
+ const formatRuns = (runs, withProject, now = Date.now(), statusOf = liveStatus, term = termOf(process.stdout)) => {
181
+ if (runs.length === 0) return ["No runs."];
182
+ const rows = runs.map((run) => {
183
+ const status = statusOf(run);
184
+ const end = run.finishedAt === void 0 ? now : Date.parse(run.finishedAt);
185
+ return {
186
+ id: run.id,
187
+ workflow: run.workflow,
188
+ status,
189
+ when: `${ago(run.startedAt, now)} · ${duration(end - Date.parse(run.startedAt))}`,
190
+ cost: run.parent === void 0 ? cost(run.costUsd) : `${cost(run.costUsd)} in ${run.parent}`,
191
+ called: run.parent !== void 0,
192
+ project: run.project
193
+ };
194
+ });
195
+ const rowOf = (r) => {
196
+ const cells = [
197
+ {
198
+ text: r.id,
199
+ look: (s) => style("bold", s)
200
+ },
201
+ { text: r.workflow },
202
+ {
203
+ text: r.status,
204
+ chip: statusChip(r.status),
205
+ look: (s) => style(STATUS_STYLE[r.status] ?? "reset", s)
206
+ },
207
+ {
208
+ text: r.when,
209
+ look: dim
210
+ },
211
+ r.called ? {
212
+ text: r.cost,
213
+ look: dim
214
+ } : { text: r.cost }
215
+ ];
216
+ if (withProject) cells.push({
217
+ text: r.project,
218
+ look: dim
219
+ });
220
+ return cells;
221
+ };
222
+ const heads = [
223
+ "RUN",
224
+ "WORKFLOW",
225
+ "STATUS",
226
+ "STARTED",
227
+ "COST"
228
+ ].map((text) => header(text));
229
+ if (withProject) heads.push(header("PROJECT"));
230
+ const columns = [
231
+ {},
232
+ { flex: true },
233
+ {},
234
+ {},
235
+ { align: "right" }
236
+ ];
237
+ if (withProject) columns.push({ flex: true });
238
+ return table(term, columns, [heads, ...rows.map((row) => rowOf(row))]);
239
+ };
240
+ /** Marks are made when used, so `--plain` (set after load) is read. */
241
+ const STATE_MARK = {
242
+ waiting: () => style("dim", "·"),
243
+ running: () => style("cyan", "●"),
244
+ ok: () => style("green", "✓"),
245
+ failed: () => style("red", "✗"),
246
+ skipped: () => style("dim", "-")
247
+ };
248
+ /** `950`, `12.3k`, `1.2M`. */
249
+ const count = (n) => {
250
+ if (n < 1e3) return String(n);
251
+ if (n < 1e6) return `${(n / 1e3).toFixed(1)}k`;
252
+ return `${(n / 1e6).toFixed(1)}M`;
253
+ };
254
+ const stateText = (node) => {
255
+ if (node.state === "running") return node.runs > 1 ? `running (round ${String(node.runs)})` : "running";
256
+ if (node.state === "ok" || node.state === "failed") {
257
+ const verdict = nodeVerdict(node.output ?? {}, node.state === "ok");
258
+ const line = verdict.length > 60 ? `${verdict.slice(0, 59)}…` : verdict;
259
+ return node.runs > 1 ? `${line} (${String(node.runs)} runs)` : line;
260
+ }
261
+ return node.state;
262
+ };
263
+ /** The ownership tree, one line per node, children under their owner. */
264
+ const formatTree = (roots, now = Date.now()) => {
265
+ const lines = [];
266
+ const walk = (node, lead, branch) => {
267
+ lines.push({
268
+ label: `${lead}${branch}${node.id}`,
269
+ node
270
+ });
271
+ const next = lead + (branch === "├─ " ? "│ " : branch === "" ? "" : " ");
272
+ node.children.forEach((child, index) => {
273
+ walk(child, next, index === node.children.length - 1 ? "└─ " : "├─ ");
274
+ });
275
+ };
276
+ for (const root of roots) walk(root, "", "");
277
+ const label = Math.max(...lines.map((l) => l.label.length));
278
+ const type = Math.max(...lines.map((l) => l.node.type.length));
279
+ return lines.map(({ label: text, node }) => {
280
+ const usage = node.inputTokens + node.outputTokens === 0 ? "" : style("dim", ` ${count(node.inputTokens)} in / ${count(node.outputTokens)} out · ${cost(node.costUsd)}`);
281
+ const state = node.held === true ? `${style("yellow", "‖")} paused` : `${STATE_MARK[node.state]()} ${stateText(node)}`;
282
+ const spent = isItem(node) && node.startedAt !== void 0 ? style("dim", ` ${duration((node.finishedAt === void 0 ? now : Date.parse(node.finishedAt)) - Date.parse(node.startedAt))}`) : "";
283
+ return `${text.padEnd(label)} ${style("dim", node.type.padEnd(type))} ${state}${spent}${usage}`;
284
+ });
285
+ };
286
+ export { header as a, nodeVerdict as c, createView as d, styler as f, listedStatus as i, firstLine as l, formatRuns as n, table as o, formatTree as r, hasConflict as s, ago as t, formatBusEvent as u };
@@ -1,4 +1,4 @@
1
- import { p as runMarkerIn } from "./src-BxUJPGa5.mjs";
1
+ import { p as runMarkerIn } from "./src-9iGkjnsy.mjs";
2
2
  // src/commands/in-a-run.ts
3
3
  /**
4
4
  * @file The commands that act as the user refuse a program or an agent in a run
@@ -1,4 +1,4 @@
1
- import { a as limitsNow, i as NOT_STARTED, o as limitsReport, r as capsHere } from "./src-hrj2h0IZ.mjs";
1
+ import { it as limitsReport, nt as NOT_STARTED, r as capsHere, rt as limitsNow } from "./src-D6_xjm-x.mjs";
2
2
  // src/run/limits.ts
3
3
  /**
4
4
  * @file The limits across runs that apply here (RFC-007): the user's settings
@@ -1,4 +1,4 @@
1
- import { A as gitOk, j as lines, k as git } from "./src-hrj2h0IZ.mjs";
1
+ import { A as lines, O as git, k as gitOk } from "./src-D6_xjm-x.mjs";
2
2
  import { existsSync } from "node:fs";
3
3
  // ../core/src/worktree/list.ts
4
4
  /**
@@ -56,7 +56,7 @@ const onNoBranch = async (entry) => entry === void 0 ? "0" : (await git(entry.pa
56
56
  "--remotes"
57
57
  ])).stdout;
58
58
  /** One created worktree or branch, with its state read from git. */
59
- const stateOf = async (root, entries, item) => {
59
+ const stateOf = async (root, entries, item, recorded) => {
60
60
  const { branch } = item;
61
61
  const entry = branch === void 0 || item.path !== "" ? entries.find((e) => e.path === item.path) : entries.find((e) => e.branch === branch);
62
62
  const holder = branch === void 0 ? void 0 : entries.find((e) => e.branch === branch && e.path !== entry?.path);
@@ -76,6 +76,7 @@ const stateOf = async (root, entries, item) => {
76
76
  ...checkedOut === void 0 ? {} : { checkedOut },
77
77
  runId: item.runId,
78
78
  nodeId: item.nodeId,
79
+ recorded,
79
80
  path: entry?.path ?? null,
80
81
  missing,
81
82
  dirty: changes > 0,
@@ -104,7 +105,13 @@ const listOrkWorktrees = async (root, created = []) => {
104
105
  "refs/heads/"
105
106
  ]));
106
107
  const recordedBranches = new Set(created.flatMap((c) => c.branch ?? []));
107
- const items = [...created.filter((c) => c.branch === void 0 ? entries.some((e) => e.path === c.path) : branches.includes(c.branch)), ...branches.filter((b) => b.startsWith("ork/") && !recordedBranches.has(b)).map((b) => prefixed(b))];
108
- return Promise.all(items.map((item) => stateOf(root, entries, item)));
108
+ const items = [...created.filter((c) => c.branch === void 0 ? entries.some((e) => e.path === c.path) : branches.includes(c.branch)).map((item) => ({
109
+ item,
110
+ recorded: true
111
+ })), ...branches.filter((b) => b.startsWith("ork/") && !recordedBranches.has(b)).map((b) => ({
112
+ item: prefixed(b),
113
+ recorded: false
114
+ }))];
115
+ return Promise.all(items.map(({ item, recorded }) => stateOf(root, entries, item, recorded)));
109
116
  };
110
117
  export { listOrkWorktrees as n, createdWorktrees as t };
@@ -1,8 +1,8 @@
1
- import { h as isNewer } from "./src-hrj2h0IZ.mjs";
2
- import { n as ORK_VERSION } from "./__build_info__-D9lSlMFy.mjs";
3
- import { a as openMcp, c as refused, o as tool, s as answer } from "./src-B0TT7DBi.mjs";
4
- import { n as explainNode } from "./context-6x3kXREO.mjs";
5
- import { p as runMarkerIn } from "./src-BxUJPGa5.mjs";
1
+ import { u as isNewer } from "./src-D6_xjm-x.mjs";
2
+ import { n as ORK_VERSION } from "./__build_info__-CIchF6nr.mjs";
3
+ import { p as runMarkerIn } from "./src-9iGkjnsy.mjs";
4
+ import { n as explainNode } from "./context-BaNshWr9.mjs";
5
+ import { a as openMcp, c as refused, o as tool, s as answer } from "./src-B6KvTm7B.mjs";
6
6
  import { z } from "zod";
7
7
  import { defineCommand } from "citty";
8
8
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -43,7 +43,7 @@ const orkMcpServer = (options = {}) => {
43
43
  ...options.script === void 0 ? {} : { script: options.script }
44
44
  });
45
45
  const all = [...opened.tools, explainTool(opened, options.home)];
46
- const tools = options.expects !== void 0 && isNewer(options.expects, "1.0.0-alpha.1") ? tooOld(all, options.expects) : all;
46
+ const tools = options.expects !== void 0 && isNewer(options.expects, "1.0.0-alpha.11") ? tooOld(all, options.expects) : all;
47
47
  const server = new McpServer({
48
48
  name: "ork",
49
49
  version: ORK_VERSION