@krapht/ork 1.0.0-alpha.5 → 1.0.0-alpha.7
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__-Dl8yTEu-.mjs → __build_info__-BGoaUwLd.mjs} +72 -3
- package/dist/bin.mjs +149 -44
- package/dist/{clean-DYVmLkd4.mjs → clean-BPITM-6p.mjs} +1 -1
- package/dist/{completion-BVx917Yr.mjs → completion-CCn8xWmO.mjs} +5 -5
- package/dist/{context-CepHRoj9.mjs → context-CZNM454F.mjs} +3 -3
- package/dist/{decide-CK_-lI5V.mjs → decide-DsA6kOT7.mjs} +1 -1
- package/dist/{find-DWiDJ5Lc.mjs → find-ntyniv2E.mjs} +1 -1
- package/dist/{format-yBEAXZhk.mjs → format-DaROJUgG.mjs} +34 -5
- package/dist/{in-a-run-CKFIeMpU.mjs → in-a-run-D_fnj1Mw.mjs} +1 -1
- package/dist/{limits-CwzPe9wZ.mjs → limits-BKzVMwkt.mjs} +1 -1
- package/dist/{list-BE02pCZ9.mjs → list-D9HPWLPH.mjs} +1 -1
- package/dist/{mcp-DMuBbUHU.mjs → mcp-BFl3cIDp.mjs} +6 -6
- package/dist/{output-BhYkshYq.mjs → output-CwqlG1Le.mjs} +11 -2
- package/dist/{pause-C_Q0W6iX.mjs → pause-DhgKQORW.mjs} +4 -4
- package/dist/{relay-COCvG-0I.mjs → relay-Cp8JGrdv.mjs} +2 -2
- package/dist/{remove-RVcX1KqP.mjs → remove-CSpT_nJH.mjs} +3 -3
- package/dist/{send-OVpRei_5.mjs → send-CHiYkM6X.mjs} +3 -3
- package/dist/{src-Do_MhwiV.mjs → src-BsLHKQRc.mjs} +3903 -3204
- package/dist/{src-QEycKJWk.mjs → src-BwnitlJh.mjs} +8 -77
- package/dist/{src-HxtJOMRr.mjs → src-CUeMUVwW.mjs} +40 -23
- package/dist/{src-CxZr4Bp2.mjs → src-DhGLtYR-.mjs} +54 -21
- package/dist/ui/assets/{app-DzI77WV9.js → app-D4CoH-lh.js} +8 -8
- package/dist/ui/assets/app-Dt_tjFj6.css +1 -0
- package/dist/ui/assets/{index-2G_6XIIv.js → index-DxDGdEwz.js} +2 -2
- package/dist/ui/index.html +1 -1
- package/dist/{ui-Dz_qfUOz.mjs → ui-BxE0L7V0.mjs} +4 -4
- package/dist/{usage-BcLUZ1xw.mjs → usage-BuzDsEhq.mjs} +5 -5
- package/dist/{watch-Buyn0Mhz.mjs → watch-CCj0vU3B.mjs} +6 -6
- package/dist/{workflows-1sntXqSd.mjs → workflows-BNCDD6J-.mjs} +3 -3
- package/dist/{worktrees-B_Go_A9w.mjs → worktrees-DBBcaimX.mjs} +10 -4
- package/package.json +1 -1
- package/dist/ui/assets/app-pTYGrAbI.css +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Cn as placeFiles, Fn as writePlainFile, Ht as FEEDBACK_SEVERITIES, Jt as publishPost, Mn as estimateTokens, Nn as guardedBase, Pn as plainPathInside, Qt as targetOf, Vt as FEEDBACK_KINDS, Xt as fingerprint, cn as maskSecrets, g as parseVersion, h as isNewer, jn as LESSON_CAP_TOKENS, kn as inside, m as compareVersions, wn as placeFor } from "./src-
|
|
1
|
+
import { Cn as placeFiles, Ct as runTree, Fn as writePlainFile, Ht as FEEDBACK_SEVERITIES, Jt as publishPost, Mn as estimateTokens, Nn as guardedBase, Pn as plainPathInside, Qt as targetOf, Vt as FEEDBACK_KINDS, Xt as fingerprint, cn as maskSecrets, g as parseVersion, h as isNewer, jn as LESSON_CAP_TOKENS, kn as inside, m as compareVersions, wn as placeFor } from "./src-BsLHKQRc.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, writeFileSync } from "node:fs";
|
|
4
4
|
import { homedir } from "node:os";
|
|
@@ -410,6 +410,75 @@ const nodeSession = (events, node) => {
|
|
|
410
410
|
outputs
|
|
411
411
|
};
|
|
412
412
|
};
|
|
413
|
+
// ../core/src/store/activity.ts
|
|
414
|
+
const LONGEST_LINE = 120;
|
|
415
|
+
/**
|
|
416
|
+
* The fields of a tool's input that say what it's working on, best first. Only
|
|
417
|
+
* these are shown, so what else a tool was given stays in the logs.
|
|
418
|
+
*/
|
|
419
|
+
const TARGETS = [
|
|
420
|
+
"file_path",
|
|
421
|
+
"notebook_path",
|
|
422
|
+
"path",
|
|
423
|
+
"url",
|
|
424
|
+
"pattern",
|
|
425
|
+
"query",
|
|
426
|
+
"command"
|
|
427
|
+
];
|
|
428
|
+
const oneLine = (text) => {
|
|
429
|
+
const line = text.replaceAll(/\s+/gu, " ").trim();
|
|
430
|
+
return line.length > LONGEST_LINE ? `${line.slice(0, 119)}…` : line;
|
|
431
|
+
};
|
|
432
|
+
const toolLine = ({ name, input }) => {
|
|
433
|
+
const target = TARGETS.map((field) => input[field]).find((value) => typeof value === "string" && value.trim() !== "");
|
|
434
|
+
if (typeof target !== "string") return name;
|
|
435
|
+
return oneLine(target.startsWith(`${name} `) ? target : `${name} ${target}`);
|
|
436
|
+
};
|
|
437
|
+
/** What a finished node said, or why it failed. */
|
|
438
|
+
const finishedNow = (ok, error, summary) => {
|
|
439
|
+
if (!ok) return error === void 0 ? void 0 : oneLine(error);
|
|
440
|
+
return typeof summary === "string" && summary.trim() !== "" ? oneLine(summary) : void 0;
|
|
441
|
+
};
|
|
442
|
+
/** Each node's activity, by id; a node that never started has none. */
|
|
443
|
+
const runActivity = (stored) => {
|
|
444
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
445
|
+
const of = (id) => {
|
|
446
|
+
const found = nodes.get(id);
|
|
447
|
+
if (found !== void 0) return found;
|
|
448
|
+
const fresh = {};
|
|
449
|
+
nodes.set(id, fresh);
|
|
450
|
+
return fresh;
|
|
451
|
+
};
|
|
452
|
+
for (const { at, event } of stored) if (event.type === "node.started") {
|
|
453
|
+
const node = of(event.id);
|
|
454
|
+
node.startedAt ??= at;
|
|
455
|
+
delete node.finishedAt;
|
|
456
|
+
delete node.now;
|
|
457
|
+
} else if (event.type === "node.event") {
|
|
458
|
+
if (event.event.type === "tool.called") of(event.id).now = toolLine(event.event);
|
|
459
|
+
} else if (event.type === "decision.opened") of(event.node).now = oneLine(`Asked: ${event.question}`);
|
|
460
|
+
else if (event.type === "decision.answered") of(event.node).now = oneLine(`Answered: ${event.answer}`);
|
|
461
|
+
else if (event.type === "decision.withdrawn") delete of(event.node).now;
|
|
462
|
+
else if (event.type === "node.finished") {
|
|
463
|
+
const node = of(event.id);
|
|
464
|
+
node.finishedAt = at;
|
|
465
|
+
const now = finishedNow(event.ok, event.error, event.output["summary"]);
|
|
466
|
+
if (now === void 0) delete node.now;
|
|
467
|
+
else node.now = now;
|
|
468
|
+
}
|
|
469
|
+
return nodes;
|
|
470
|
+
};
|
|
471
|
+
/** The ownership tree, with what each node is doing and when it ran. */
|
|
472
|
+
const activeTree = (stored) => {
|
|
473
|
+
const activity = runActivity(stored);
|
|
474
|
+
const dress = (node) => {
|
|
475
|
+
Object.assign(node, activity.get(node.id));
|
|
476
|
+
for (const child of node.children) dress(child);
|
|
477
|
+
};
|
|
478
|
+
const roots = runTree(stored.map(({ event }) => event));
|
|
479
|
+
for (const root of roots) dress(root);
|
|
480
|
+
return roots;
|
|
481
|
+
};
|
|
413
482
|
/** The dist-tags every install follows, toward and after 1.0.0. */
|
|
414
483
|
const CHANNEL_TAGS = [
|
|
415
484
|
"latest",
|
|
@@ -611,5 +680,5 @@ const registryShown = (registry) => {
|
|
|
611
680
|
* fails when it is stale.
|
|
612
681
|
*/
|
|
613
682
|
const ORK_NAME = "@krapht/ork";
|
|
614
|
-
const ORK_VERSION = "1.0.0-alpha.
|
|
615
|
-
export {
|
|
683
|
+
const ORK_VERSION = "1.0.0-alpha.7";
|
|
684
|
+
export { placeOf as C, lessonPlaceOf as S, openFixRun as T, nodeSession as _, registryShown as a, recordNote as b, checkDue as c, pendingNotice as d, readUpdateCache as f, activeTree as g, writeUpdateCache as h, registryOf as i, fetchLatest as l, updateCachePath as m, ORK_VERSION as n, updateSwitchOff as o, refreshUpdateCache as p, isSwitchedOn as r, runInstall as s, ORK_NAME as t, newerVersion as u, previewPost as v, feedbackActions as w, acceptItem as x, checkNote as y };
|
package/dist/bin.mjs
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { An as projectRootOf, Cn as placeFiles, D as inspectProject, Dn as shownPath,
|
|
3
|
-
import { a as
|
|
4
|
-
import { C as
|
|
5
|
-
import { i as builtinWorkflowFile, n as pendingDecisions, r as builtinProblem, t as answerDecision } from "./decide-
|
|
6
|
-
import { n as newRunId, t as findRun } from "./find-
|
|
7
|
-
import { a as write, c as openStore, i as style, l as storePath, n as cost, o as writeErr, s as
|
|
8
|
-
import { n as listOrkWorktrees, t as createdWorktrees } from "./list-
|
|
9
|
-
import { a as planClean, t as applyClean } from "./clean-
|
|
2
|
+
import { $ as adoptedCalls, $n as isClaudeNode, An as projectRootOf, B as peerOf, Cn as placeFiles, Ct as runTree, D as inspectProject, Dn as shownPath, En as runDirOf, F as createCalls, Ft as PROJECT_FILE, Gn as serializeWorkflow, Gt as planPost, Ht as FEEDBACK_SEVERITIES, I as addressOf, It as gitRulesOf, Jn as WorkflowSchema, K as requestStop, L as endLink, Lt as loadProject, M as clearGitLocalEnv, N as parseInputPairs, P as resolveInputs, R as endLinksOf, Sn as newProjectId, St as runStatus, Tn as projectsHome, U as flattenTree, Ut as FEEDBACK_TARGETS, V as tellNode, Vn as beforeOf, Vt as FEEDBACK_KINDS, Xt as fingerprint, Yt as createFeedback, Zn as settingsOf, Zt as normalizeTitle, _ as lateTriggers, _n as catalogAgent, an as socketRoom, at as followEvents, bn as hasInRepoFiles, bt as liveStatus, cr as CLAUDE_DRIVERS, ct as planNodeSession, d as runningRunIds, dn as planMoveInto, dr as experimentsOn, et as detachResume, f as runningScript, fn as linkTools, fr as knownExperiments, gn as deleteAgent, gt as startRun, h as isNewer, hn as createAgent, ht as walkSummary, i as NOT_STARTED, in as socketPath, it as detachRun, kn as inside, l as planUpgrade, ln as planAgentMigration, lr as firstLine, lt as namingNoDriver, mn as toolsInUse, n as resolveBase, nt as listKey, on as wakeRun, or as AGENT_TOOL_LAYOUTS, pn as toolLinks, q as tellLiveRun, qt as sendPost, rn as serveRun, rr as INTEGRATIONS, sn as maskReplacer, sr as ORK_LAYOUT, t as createWorkspace, tt as resumable, u as releaseNotes, un as applySteps, ur as EXPERIMENTS, ut as sessionDriver, v as triggersReport, vn as loadAgents, vt as userMessageText, wn as placeFor, wt as templateOf, xn as inRepoPlace } from "./src-BsLHKQRc.mjs";
|
|
3
|
+
import { a as formatEvent, c as createDecisionQueue, i as nestItems, n as formatRuns, o as formatRunEvent, r as formatTree, s as createTerminalHuman, t as ago } from "./format-DaROJUgG.mjs";
|
|
4
|
+
import { C as placeOf, T as openFixRun, _ as nodeSession, b as recordNote, c as checkDue, d as pendingNotice, f as readUpdateCache, g as activeTree, h as writeUpdateCache, i as registryOf, l as fetchLatest, m as updateCachePath, n as ORK_VERSION, o as updateSwitchOff, p as refreshUpdateCache, r as isSwitchedOn, s as runInstall, t as ORK_NAME, u as newerVersion$1, v as previewPost, w as feedbackActions, x as acceptItem, y as checkNote } from "./__build_info__-BGoaUwLd.mjs";
|
|
5
|
+
import { i as builtinWorkflowFile, n as pendingDecisions, r as builtinProblem, t as answerDecision } from "./decide-DsA6kOT7.mjs";
|
|
6
|
+
import { n as newRunId, t as findRun } from "./find-ntyniv2E.mjs";
|
|
7
|
+
import { a as write, c as openStore, i as style, l as storePath, n as cost, o as writeErr, s as isNodeEvent, t as confirm } from "./output-CwqlG1Le.mjs";
|
|
8
|
+
import { n as listOrkWorktrees, t as createdWorktrees } from "./list-D9HPWLPH.mjs";
|
|
9
|
+
import { a as planClean, t as applyClean } from "./clean-BPITM-6p.mjs";
|
|
10
10
|
import { c as subcommandsOf, i as argsOf, n as groupedEntries, o as publicArgs, s as resolved, t as groupOf } from "./help-groups-BwYoAWsh.mjs";
|
|
11
|
-
import { _ as namedMcpEntries, a as builtinExecutors, d as maskedEnv, f as maskedNamesOfRun, g as clearOutputFiles, h as sessionEnv, i as onPath, l as clearStateFiles, m as runScrubber, n as missingProgramMessage, r as missingPrograms, t as envProblems, v as resultOf } from "./src-
|
|
12
|
-
import { c as registeredProjects, i as refusedBuiltin, n as WORKFLOW_SUFFIX, o as workflowArg, s as projectAt, t as WORKFLOW_DIR } from "./workflows-
|
|
13
|
-
import { a as validate, c as warningLines, i as loadWorkflow, o as validateFile, r as formatReport, s as walkLoaded, t as context } from "./context-
|
|
14
|
-
import { i as runLimits, r as limitsRefusal, t as chatNotice } from "./limits-
|
|
15
|
-
import { i as decideRefusal, n as chatRefusal } from "./in-a-run-
|
|
11
|
+
import { _ as namedMcpEntries, a as builtinExecutors, d as maskedEnv, f as maskedNamesOfRun, g as clearOutputFiles, h as sessionEnv, i as onPath, l as clearStateFiles, m as runScrubber, n as missingProgramMessage, r as missingPrograms, t as envProblems, v as resultOf } from "./src-CUeMUVwW.mjs";
|
|
12
|
+
import { c as registeredProjects, i as refusedBuiltin, n as WORKFLOW_SUFFIX, o as workflowArg, s as projectAt, t as WORKFLOW_DIR } from "./workflows-BNCDD6J-.mjs";
|
|
13
|
+
import { a as validate, c as warningLines, i as loadWorkflow, o as validateFile, r as formatReport, s as walkLoaded, t as context } from "./context-CZNM454F.mjs";
|
|
14
|
+
import { i as runLimits, r as limitsRefusal, t as chatNotice } from "./limits-BKzVMwkt.mjs";
|
|
15
|
+
import { i as decideRefusal, n as chatRefusal } from "./in-a-run-D_fnj1Mw.mjs";
|
|
16
16
|
import path from "node:path";
|
|
17
17
|
import { stringify } from "yaml";
|
|
18
18
|
import { z } from "zod";
|
|
@@ -421,6 +421,88 @@ const createRelay = (options) => {
|
|
|
421
421
|
}
|
|
422
422
|
};
|
|
423
423
|
};
|
|
424
|
+
// ../core/src/run/replay.ts
|
|
425
|
+
const NO_FAN_OUTS = {
|
|
426
|
+
lists: /* @__PURE__ */ new Map(),
|
|
427
|
+
items: /* @__PURE__ */ new Map()
|
|
428
|
+
};
|
|
429
|
+
/** Whether an activation's input carries a result this run made anew. */
|
|
430
|
+
const carries = (fresh, input) => {
|
|
431
|
+
if (input === void 0) return false;
|
|
432
|
+
if (fresh.has(input)) return true;
|
|
433
|
+
const results = input["results"];
|
|
434
|
+
if (results === null || typeof results !== "object") return false;
|
|
435
|
+
return Object.values(results).some((value) => value !== null && typeof value === "object" && fresh.has(value));
|
|
436
|
+
};
|
|
437
|
+
/**
|
|
438
|
+
* Hands each node's recorded results back in order, until the node runs anew
|
|
439
|
+
* once (it failed or never finished last time, or its input is new); from then
|
|
440
|
+
* on it always runs. A node cut off mid-session continues that session, once.
|
|
441
|
+
*/
|
|
442
|
+
const createReplay = (history, cutOff = /* @__PURE__ */ new Map(), mail, earlier, fanOuts = NO_FAN_OUTS) => {
|
|
443
|
+
const sessions = new Map(cutOff);
|
|
444
|
+
const used = /* @__PURE__ */ new Map();
|
|
445
|
+
const anew = /* @__PURE__ */ new Set();
|
|
446
|
+
const fresh = /* @__PURE__ */ new WeakSet();
|
|
447
|
+
/** Fanned nodes whose list was resolved anew: their items can't be replayed. */
|
|
448
|
+
const renewed = /* @__PURE__ */ new Set();
|
|
449
|
+
const takeItem = (activation, of) => {
|
|
450
|
+
const recorded = fanOuts.items.get(activation.id)?.get(activation.round ?? 0);
|
|
451
|
+
if (recorded !== void 0 && !renewed.has(of) && !carries(fresh, activation.input)) return recorded;
|
|
452
|
+
anew.add(activation.id);
|
|
453
|
+
return null;
|
|
454
|
+
};
|
|
455
|
+
return {
|
|
456
|
+
take: (activation) => {
|
|
457
|
+
const { id } = activation;
|
|
458
|
+
if (activation.brief !== void 0 || anew.has(id)) return null;
|
|
459
|
+
if (activation.item !== void 0) return takeItem(activation, activation.item.of);
|
|
460
|
+
const index = used.get(id) ?? 0;
|
|
461
|
+
const recorded = history.get(id)?.[index];
|
|
462
|
+
if (recorded === void 0 || carries(fresh, activation.input)) {
|
|
463
|
+
anew.add(id);
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
used.set(id, index + 1);
|
|
467
|
+
return recorded;
|
|
468
|
+
},
|
|
469
|
+
ran: (result) => {
|
|
470
|
+
fresh.add(result.output);
|
|
471
|
+
},
|
|
472
|
+
cutOff: (activation) => {
|
|
473
|
+
const session = activation.brief === void 0 && (activation.item === void 0 || !renewed.has(activation.item.of)) ? sessions.get(activation.id) : void 0;
|
|
474
|
+
sessions.delete(activation.id);
|
|
475
|
+
return session;
|
|
476
|
+
},
|
|
477
|
+
listed: (id, round, source) => {
|
|
478
|
+
const list = fanOuts.lists.get(listKey(id, round));
|
|
479
|
+
const ranAnew = typeof source === "object" && source !== null && fresh.has(source);
|
|
480
|
+
if (list !== void 0 && !ranAnew) return list;
|
|
481
|
+
renewed.add(id);
|
|
482
|
+
return null;
|
|
483
|
+
},
|
|
484
|
+
previousSession: ({ id, item, round = 0 }) => item === void 0 || renewed.has(item.of) ? void 0 : [...fanOuts.items.get(id) ?? []].findLast(([before]) => before < round)?.[1].sessionId,
|
|
485
|
+
kept: () => [...history.keys(), ...fanOuts.items.keys()],
|
|
486
|
+
...mail === void 0 ? {} : { mail },
|
|
487
|
+
...earlier === void 0 ? {} : { earlier }
|
|
488
|
+
};
|
|
489
|
+
};
|
|
490
|
+
/**
|
|
491
|
+
* The run's `HumanChannel`, answering questions about loops out of rounds as
|
|
492
|
+
* they were answered last time, in order; anything else goes to `human`.
|
|
493
|
+
*/
|
|
494
|
+
const replayLoopAnswers = (human, answers) => {
|
|
495
|
+
const left = [...answers];
|
|
496
|
+
return {
|
|
497
|
+
permit: (request) => human.permit(request),
|
|
498
|
+
...human.settled === void 0 ? {} : { settled: human.settled },
|
|
499
|
+
ask: (question) => {
|
|
500
|
+
const index = left.findIndex((a) => a.question === question.question);
|
|
501
|
+
const [given] = index === -1 ? [] : left.splice(index, 1);
|
|
502
|
+
return given === void 0 ? human.ask(question) : Promise.resolve(given.answer);
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
};
|
|
424
506
|
// ../core/src/store/recorder.ts
|
|
425
507
|
/**
|
|
426
508
|
* @file Records a run as it happens: each event appended to the store and
|
|
@@ -831,12 +913,11 @@ const runReadyDriver = async (workflow, options) => {
|
|
|
831
913
|
* where it ran, as the run's sessions were set up (ADR-065), and the exchange
|
|
832
914
|
* is added to the run's record.
|
|
833
915
|
*/
|
|
834
|
-
/**
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
};
|
|
916
|
+
/**
|
|
917
|
+
* The declared node a spawned worker or an item of a fanned node is an instance
|
|
918
|
+
* of.
|
|
919
|
+
*/
|
|
920
|
+
const instanceOf = (nodes, id) => id in nodes ? void 0 : templateOf(id, new Set(Object.keys(nodes)));
|
|
840
921
|
/** The run's sessions loaded the machine's Claude setup, so this one does. */
|
|
841
922
|
const machineClaudeOf = (events) => events.some(({ event }) => event.type === "run.started" && event.settings?.machineClaude === true) ? { machineClaude: true } : {};
|
|
842
923
|
/**
|
|
@@ -857,7 +938,7 @@ const resumeChat = async (options) => {
|
|
|
857
938
|
const notice = chatNotice(store, place, options.home);
|
|
858
939
|
if (notice !== null) options.out(notice);
|
|
859
940
|
const runDir = runDirOf(place, run.id);
|
|
860
|
-
const template =
|
|
941
|
+
const template = instanceOf(workflow.nodes, node);
|
|
861
942
|
const plan = planNodeSession(workflow, node, {
|
|
862
943
|
cwd,
|
|
863
944
|
inputs: {},
|
|
@@ -924,7 +1005,7 @@ const createLogPrinter = (options) => {
|
|
|
924
1005
|
return (stored) => {
|
|
925
1006
|
const { event } = stored;
|
|
926
1007
|
if (event.type === "run.started") width = Math.max(...event.nodes.map((n) => n.id.length), 1);
|
|
927
|
-
if (options.node !== void 0 &&
|
|
1008
|
+
if (options.node !== void 0 && !isNodeEvent(event, options.node)) return [];
|
|
928
1009
|
if (options.json) return [JSON.stringify(stored)];
|
|
929
1010
|
return formatRunEvent(event, width, tools);
|
|
930
1011
|
};
|
|
@@ -947,6 +1028,31 @@ const followRun = async (store, run, out, options) => {
|
|
|
947
1028
|
...options.signal === void 0 ? {} : { signal: options.signal }
|
|
948
1029
|
}) === "crashed") out(style("red", `run ${run.id} stopped without finishing (its process is gone)`));
|
|
949
1030
|
};
|
|
1031
|
+
// src/run/node-notes.ts
|
|
1032
|
+
/**
|
|
1033
|
+
* @file What a run of one node (`ork run --node`) leaves out, said before its
|
|
1034
|
+
* session starts: the messages, steps and `forEach` it does not run. A node
|
|
1035
|
+
* with `forEach` (RFC-013) runs once with no item when it has `items`, and is
|
|
1036
|
+
* refused when it has `from`, as the node that reports its list is not run.
|
|
1037
|
+
*/
|
|
1038
|
+
/** A warning line, as the run prints it. */
|
|
1039
|
+
const noteLines = (lines) => lines.map((line) => `${style(["yellow", "bold"], "warning")} ${line}`);
|
|
1040
|
+
/** Why a node can't run alone, or what a run of it leaves out. */
|
|
1041
|
+
const oneNodeNotes = (workflow, id) => {
|
|
1042
|
+
const node = workflow.nodes[id];
|
|
1043
|
+
if (node === void 0) return { warnings: [] };
|
|
1044
|
+
const each = "forEach" in node ? node.forEach : void 0;
|
|
1045
|
+
if (each !== void 0 && "from" in each) return {
|
|
1046
|
+
error: `\`${id}\` runs once for each item of ${each.from}, a list another node reports, and a run of one node does not run that node; run the whole workflow, or give it \`items\` of its own`,
|
|
1047
|
+
warnings: []
|
|
1048
|
+
};
|
|
1049
|
+
const steps = [...beforeOf(node, workflow.defaults) === void 0 ? [] : ["before"], ..."verify" in node && node.verify !== void 0 ? ["verify"] : []];
|
|
1050
|
+
return { warnings: [
|
|
1051
|
+
..."notify" in node && node.notify ? [`${id}'s notify: does nothing here: a run of one node has no message bus.`] : [],
|
|
1052
|
+
...each === void 0 ? [] : [`${id}'s forEach: does not fan out in a run of one node: it runs once, with no item.`],
|
|
1053
|
+
...steps.map((step) => `${id}'s ${step}: does not run in a run of one node.`)
|
|
1054
|
+
] };
|
|
1055
|
+
};
|
|
950
1056
|
// src/run/origin.ts
|
|
951
1057
|
/**
|
|
952
1058
|
* @file Where a run's feedback comes from, beyond what its events say: Ork's
|
|
@@ -987,6 +1093,8 @@ const runNode = async (options) => {
|
|
|
987
1093
|
if (!pairs.ok) return failed([`--input: ${pairs.error}`]);
|
|
988
1094
|
const inputs = resolveInputs(workflow, pairs.raw);
|
|
989
1095
|
if (!inputs.ok) return failed(inputs.errors);
|
|
1096
|
+
const notes = oneNodeNotes(workflow, options.nodeId);
|
|
1097
|
+
if (notes.error !== void 0) return failed([notes.error]);
|
|
990
1098
|
const limits = runLimits(options.store, place, options.home);
|
|
991
1099
|
const refused = limitsRefusal(limits, workflow);
|
|
992
1100
|
if (refused.length > 0) return failed(refused);
|
|
@@ -1017,11 +1125,7 @@ const runNode = async (options) => {
|
|
|
1017
1125
|
if (ready?.line !== void 0) options.err(ready.line);
|
|
1018
1126
|
const driver = named ?? ready?.driver;
|
|
1019
1127
|
if (driver === void 0) return failed(["No Claude driver is ready here."]);
|
|
1020
|
-
const
|
|
1021
|
-
if (planned !== void 0 && "notify" in planned && planned.notify) options.err(`${style(["yellow", "bold"], "warning")} ${options.nodeId}'s notify: does nothing here: a run of one node has no message bus.`);
|
|
1022
|
-
const skipped = planned === void 0 ? [] : [...beforeOf(planned, workflow.defaults) === void 0 ? [] : ["before"], ..."verify" in planned && planned.verify !== void 0 ? ["verify"] : []];
|
|
1023
|
-
for (const step of skipped) options.err(`${style(["yellow", "bold"], "warning")} ${options.nodeId}'s ${step}: does not run in a run of one node.`);
|
|
1024
|
-
for (const warning of plan.warnings) options.err(`${style(["yellow", "bold"], "warning")} ${warning}`);
|
|
1128
|
+
for (const line of noteLines([...notes.warnings, ...plan.warnings])) options.err(line);
|
|
1025
1129
|
const id = options.nodeId;
|
|
1026
1130
|
const recorder = createRecorder(options.store, {
|
|
1027
1131
|
id: runId,
|
|
@@ -1459,7 +1563,7 @@ const runWorkflowFile = async (options) => {
|
|
|
1459
1563
|
if (options.tools !== void 0) executorOptions.tools = options.tools;
|
|
1460
1564
|
const script = process.argv[1];
|
|
1461
1565
|
if (script !== void 0 && onPath(script)) executorOptions.orkBin = script;
|
|
1462
|
-
const replay = options.resume === void 0 ? void 0 : createReplay(options.resume.history, options.resume.cutOff, options.resume.mail, options.resume.earlier);
|
|
1566
|
+
const replay = options.resume === void 0 ? void 0 : createReplay(options.resume.history, options.resume.cutOff, options.resume.mail, options.resume.earlier, options.resume.fanOuts);
|
|
1463
1567
|
if (replay !== void 0) onEvent({
|
|
1464
1568
|
type: "run.resumed",
|
|
1465
1569
|
kept: replay.kept()
|
|
@@ -1530,7 +1634,7 @@ const flagValues = (rawArgs, flag) => {
|
|
|
1530
1634
|
};
|
|
1531
1635
|
const isDriver = (value) => CLAUDE_DRIVERS.some((d) => d.id === value);
|
|
1532
1636
|
/** Loads the drivers only when a run starts, so other commands stay fast. */
|
|
1533
|
-
const loadRuntime = async (driver) => (await import("./src-
|
|
1637
|
+
const loadRuntime = async (driver) => (await import("./src-DhGLtYR-.mjs")).createRuntime(driver, sessionEnv(process.env));
|
|
1534
1638
|
/**
|
|
1535
1639
|
* Ctrl-C asks the run to stop, and so does a terminal closing or a polite kill,
|
|
1536
1640
|
* so that the run ends tidily and leaves no result unscrubbed.
|
|
@@ -4117,8 +4221,9 @@ const tree = defineCommand({
|
|
|
4117
4221
|
return;
|
|
4118
4222
|
}
|
|
4119
4223
|
const { run } = found;
|
|
4120
|
-
const
|
|
4121
|
-
const
|
|
4224
|
+
const stored = store.events(run.id);
|
|
4225
|
+
const events = stored.map((s) => s.event);
|
|
4226
|
+
const roots = nestItems(activeTree(stored));
|
|
4122
4227
|
if (args.json) {
|
|
4123
4228
|
write(JSON.stringify(roots, void 0, 2));
|
|
4124
4229
|
return;
|
|
@@ -4445,27 +4550,27 @@ const main = defineCommand({
|
|
|
4445
4550
|
ps,
|
|
4446
4551
|
logs,
|
|
4447
4552
|
tree,
|
|
4448
|
-
usage: () => import("./usage-
|
|
4449
|
-
prune: () => import("./usage-
|
|
4553
|
+
usage: () => import("./usage-BuzDsEhq.mjs").then((module) => module.usage),
|
|
4554
|
+
prune: () => import("./usage-BuzDsEhq.mjs").then((module) => module.prune),
|
|
4450
4555
|
decide,
|
|
4451
|
-
relay: () => import("./relay-
|
|
4452
|
-
pause: () => import("./pause-
|
|
4453
|
-
continue: () => import("./pause-
|
|
4556
|
+
relay: () => import("./relay-Cp8JGrdv.mjs").then((module) => module.relay),
|
|
4557
|
+
pause: () => import("./pause-DhgKQORW.mjs").then((module) => module.pause),
|
|
4558
|
+
continue: () => import("./pause-DhgKQORW.mjs").then((module) => module.continueRun),
|
|
4454
4559
|
stop,
|
|
4455
4560
|
chat,
|
|
4456
|
-
send: () => import("./send-
|
|
4561
|
+
send: () => import("./send-CHiYkM6X.mjs").then((module) => module.send),
|
|
4457
4562
|
resume,
|
|
4458
4563
|
feedback,
|
|
4459
4564
|
context,
|
|
4460
|
-
worktrees: () => import("./worktrees-
|
|
4461
|
-
wt: () => import("./worktrees-
|
|
4462
|
-
watch: () => import("./watch-
|
|
4463
|
-
mcp: () => import("./mcp-
|
|
4464
|
-
ui: () => import("./ui-
|
|
4565
|
+
worktrees: () => import("./worktrees-DBBcaimX.mjs").then((module) => module.worktrees),
|
|
4566
|
+
wt: () => import("./worktrees-DBBcaimX.mjs").then((module) => module.worktrees),
|
|
4567
|
+
watch: () => import("./watch-CCj0vU3B.mjs").then((module) => module.watch),
|
|
4568
|
+
mcp: () => import("./mcp-BFl3cIDp.mjs").then((module) => module.mcp),
|
|
4569
|
+
ui: () => import("./ui-BxE0L7V0.mjs").then((module) => module.ui),
|
|
4465
4570
|
doctor,
|
|
4466
4571
|
upgrade,
|
|
4467
|
-
completion: () => import("./completion-
|
|
4468
|
-
__complete: () => import("./completion-
|
|
4572
|
+
completion: () => import("./completion-CCn8xWmO.mjs").then((module) => module.completion),
|
|
4573
|
+
__complete: () => import("./completion-CCn8xWmO.mjs").then((module) => module.completeCommand(main))
|
|
4469
4574
|
}
|
|
4470
4575
|
});
|
|
4471
4576
|
// src/bin.ts
|
|
@@ -4483,7 +4588,7 @@ const main = defineCommand({
|
|
|
4483
4588
|
clearGitLocalEnv();
|
|
4484
4589
|
const argv = process.argv.slice(2);
|
|
4485
4590
|
if (argv[0] === "__complete") {
|
|
4486
|
-
const { printCompletions } = await import("./completion-
|
|
4591
|
+
const { printCompletions } = await import("./completion-CCn8xWmO.mjs");
|
|
4487
4592
|
await printCompletions(main, argv.slice(1));
|
|
4488
4593
|
} else if (process.env["ORK_UPDATE_CHECK_CHILD"] === "1") await runUpdateChild();
|
|
4489
4594
|
else {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Cn as placeFiles,
|
|
2
|
-
import { a as builtinWorkflowNames, n as pendingDecisions, o as builtinWorkflowText, s as isBuiltinArg } from "./decide-
|
|
3
|
-
import { t as findRun } from "./find-
|
|
4
|
-
import { c as openStore, l as storePath, o as writeErr } from "./output-
|
|
1
|
+
import { Cn as placeFiles, bt as liveStatus, cr as CLAUDE_DRIVERS, tr as NodeIdSchema, wn as placeFor } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { a as builtinWorkflowNames, n as pendingDecisions, o as builtinWorkflowText, s as isBuiltinArg } from "./decide-DsA6kOT7.mjs";
|
|
3
|
+
import { t as findRun } from "./find-ntyniv2E.mjs";
|
|
4
|
+
import { c as openStore, l as storePath, o as writeErr } from "./output-CwqlG1Le.mjs";
|
|
5
5
|
import { a as findEntry, c as subcommandsOf, d as SHELL_SCRIPTS, l as COMPLETE_COMMAND, n as groupedEntries, r as argInfoOf, t as groupOf, u as SHELLS } from "./help-groups-BwYoAWsh.mjs";
|
|
6
|
-
import { a as resolveWorkflowArg, n as WORKFLOW_SUFFIX } from "./workflows-
|
|
6
|
+
import { a as resolveWorkflowArg, n as WORKFLOW_SUFFIX } from "./workflows-BNCDD6J-.mjs";
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import { parse } from "yaml";
|
|
9
9
|
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { C as workflowTextHash, Cn as placeFiles,
|
|
2
|
-
import { a as write, i as style, r as plain } from "./output-
|
|
3
|
-
import { c as registeredProjects, i as refusedBuiltin, o as workflowArg, r as findWorkflowFiles, s as projectAt } from "./workflows-
|
|
1
|
+
import { C as workflowTextHash, Cn as placeFiles, On as workflowDirOf, S as readProjectTriggers, ht as walkSummary, jn as LESSON_CAP_TOKENS, mt as walkChecks, pt as checkWorkflowText, st as explainSession, wn as placeFor } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { a as write, i as style, r as plain } from "./output-CwqlG1Le.mjs";
|
|
3
|
+
import { c as registeredProjects, i as refusedBuiltin, o as workflowArg, r as findWorkflowFiles, s as projectAt } from "./workflows-BNCDD6J-.mjs";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { readFileSync } from "node:fs";
|
|
6
6
|
import { defineCommand } from "citty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Cn as placeFiles, Fn as writePlainFile, Nn as guardedBase, Pn as plainPathInside,
|
|
1
|
+
import { Cn as placeFiles, Fn as writePlainFile, Nn as guardedBase, Pn as plainPathInside, bt as liveStatus, in as socketPath, on as wakeRun } from "./src-BsLHKQRc.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
4
4
|
import { createHash } from "node:crypto";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { i as style, n as cost } from "./output-
|
|
1
|
+
import { bt as liveStatus, cn as maskSecrets } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { i as style, n as cost } from "./output-CwqlG1Le.mjs";
|
|
3
3
|
import { createInterface } from "node:readline/promises";
|
|
4
4
|
// ../core/src/control/queue.ts
|
|
5
5
|
const PERMISSION_OPTIONS = [{
|
|
@@ -436,6 +436,7 @@ const nodeVerdict = (output) => {
|
|
|
436
436
|
if (typeof count === "number") return `${String(count)} ran`;
|
|
437
437
|
return "done";
|
|
438
438
|
};
|
|
439
|
+
const items = (count) => `${String(count)} ${count === 1 ? "item" : "items"}`;
|
|
439
440
|
/** Transcript lines for one run event, prefixed with the node they are from. */
|
|
440
441
|
const formatRunEvent = (event, width, tools) => {
|
|
441
442
|
const tag = (id) => style("cyan", `${id.padEnd(width)} │`);
|
|
@@ -492,6 +493,14 @@ const formatRunEvent = (event, width, tools) => {
|
|
|
492
493
|
return [`${tag(event.id)} ${style("yellow", `‖ paused: ${at}`)}`];
|
|
493
494
|
}
|
|
494
495
|
if (event.type === "node.released") return [`${tag(event.id)} ${style("dim", "▸ continues")}`];
|
|
496
|
+
if (event.type === "each.listed") {
|
|
497
|
+
const round = event.round > 1 ? ` (round ${String(event.round)})` : "";
|
|
498
|
+
return [`${tag(event.node)} ${style("dim", `${items(event.count)}${round}`)}`];
|
|
499
|
+
}
|
|
500
|
+
if (event.type === "each.exceeded") {
|
|
501
|
+
const over = `${items(event.count)}, over maxItems ${String(event.maxItems)}`;
|
|
502
|
+
return [`${tag(event.node)} ${style("yellow", `! ${over}`)}`];
|
|
503
|
+
}
|
|
495
504
|
if (event.type === "run.finished") return formatRunResult(event.result);
|
|
496
505
|
if (event.type === "run.resumed") {
|
|
497
506
|
const [one] = event.kept;
|
|
@@ -608,8 +617,27 @@ const stateText = (node) => {
|
|
|
608
617
|
}
|
|
609
618
|
return node.state;
|
|
610
619
|
};
|
|
620
|
+
const isItem = (node) => node.template !== void 0 && /\.\d+$/u.test(node.id);
|
|
621
|
+
/**
|
|
622
|
+
* Moves each item of a node with `forEach` (`build.2`) under its node, in list
|
|
623
|
+
* order, from beside it or under its owner, where the events put it.
|
|
624
|
+
*/
|
|
625
|
+
const nestItems = (roots) => {
|
|
626
|
+
const all = [];
|
|
627
|
+
const collect = (node) => {
|
|
628
|
+
all.push(node);
|
|
629
|
+
for (const child of node.children) collect(child);
|
|
630
|
+
};
|
|
631
|
+
for (const root of roots) collect(root);
|
|
632
|
+
const items = all.filter((node) => isItem(node));
|
|
633
|
+
const home = new Map(all.map((node) => [node.id, node]));
|
|
634
|
+
const isMoved = (node) => items.includes(node) && home.has(node.template ?? "");
|
|
635
|
+
for (const node of all) node.children = node.children.filter((c) => !isMoved(c));
|
|
636
|
+
for (const item of items) home.get(item.template ?? "")?.children.push(item);
|
|
637
|
+
return roots.filter((root) => !isMoved(root));
|
|
638
|
+
};
|
|
611
639
|
/** The ownership tree, one line per node, children under their owner. */
|
|
612
|
-
const formatTree = (roots) => {
|
|
640
|
+
const formatTree = (roots, now = Date.now()) => {
|
|
613
641
|
const lines = [];
|
|
614
642
|
const walk = (node, lead, branch) => {
|
|
615
643
|
lines.push({
|
|
@@ -627,7 +655,8 @@ const formatTree = (roots) => {
|
|
|
627
655
|
return lines.map(({ label: text, node }) => {
|
|
628
656
|
const usage = node.inputTokens + node.outputTokens === 0 ? "" : style("dim", ` ${count(node.inputTokens)} in / ${count(node.outputTokens)} out · ${cost(node.costUsd)}`);
|
|
629
657
|
const state = node.held === true ? `${style("yellow", "‖")} paused` : `${STATE_MARK[node.state]} ${stateText(node)}`;
|
|
630
|
-
|
|
658
|
+
const spent = isItem(node) && node.startedAt !== void 0 ? style("dim", ` ${duration((node.finishedAt === void 0 ? now : Date.parse(node.finishedAt)) - Date.parse(node.startedAt))}`) : "";
|
|
659
|
+
return `${text.padEnd(label)} ${style("dim", node.type.padEnd(type))} ${state}${spent}${usage}`;
|
|
631
660
|
});
|
|
632
661
|
};
|
|
633
|
-
export {
|
|
662
|
+
export { formatEvent as a, createDecisionQueue as c, nestItems as i, formatRuns as n, formatRunEvent as o, formatTree as r, createTerminalHuman as s, ago as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as limitsNow, i as NOT_STARTED, o as limitsReport, r as capsHere } from "./src-
|
|
1
|
+
import { a as limitsNow, i as NOT_STARTED, o as limitsReport, r as capsHere } from "./src-BsLHKQRc.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,8 +1,8 @@
|
|
|
1
|
-
import { h as isNewer } from "./src-
|
|
2
|
-
import { n as ORK_VERSION } from "./__build_info__-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { h as isNewer } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { n as ORK_VERSION } from "./__build_info__-BGoaUwLd.mjs";
|
|
3
|
+
import { p as runMarkerIn } from "./src-CUeMUVwW.mjs";
|
|
4
|
+
import { n as explainNode } from "./context-CZNM454F.mjs";
|
|
5
|
+
import { a as openMcp, c as refused, o as tool, s as answer } from "./src-BwnitlJh.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.
|
|
46
|
+
const tools = options.expects !== void 0 && isNewer(options.expects, "1.0.0-alpha.7") ? tooOld(all, options.expects) : all;
|
|
47
47
|
const server = new McpServer({
|
|
48
48
|
name: "ork",
|
|
49
49
|
version: ORK_VERSION
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Ht as FEEDBACK_SEVERITIES, J as backfillUsage, Q as text, Tt as ownProcessStart, Ut as FEEDBACK_TARGETS, Vt as FEEDBACK_KINDS, X as eventOf, Y as usageQueries, Z as inTransaction, cn as maskSecrets, sn as maskReplacer, yn as PROJECT_MODES } from "./src-BsLHKQRc.mjs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { mkdirSync } from "node:fs";
|
|
4
4
|
import { homedir } from "node:os";
|
|
@@ -809,6 +809,15 @@ const nodeOf = (event) => {
|
|
|
809
809
|
if ("node" in event && typeof event.node === "string") return event.node;
|
|
810
810
|
return null;
|
|
811
811
|
};
|
|
812
|
+
/**
|
|
813
|
+
* Whether an event is about `node`, or about one of its items when it has
|
|
814
|
+
* `forEach` (`build` matches `build.2`; an item's id has a `.`, a declared
|
|
815
|
+
* node's never does).
|
|
816
|
+
*/
|
|
817
|
+
const isNodeEvent = (event, node) => {
|
|
818
|
+
const id = nodeOf(event);
|
|
819
|
+
return id === node || id !== null && id.startsWith(`${node}.`);
|
|
820
|
+
};
|
|
812
821
|
/** A database opened for reading only, refused unless it is current. */
|
|
813
822
|
const openReadOnly = (file) => {
|
|
814
823
|
const db = new DatabaseSync(file, { readOnly: true });
|
|
@@ -950,4 +959,4 @@ const confirm = async (question) => {
|
|
|
950
959
|
rl.close();
|
|
951
960
|
}
|
|
952
961
|
};
|
|
953
|
-
export { write as a, openStore as c, style as i, storePath as l, cost as n, writeErr as o, plain as r,
|
|
962
|
+
export { write as a, openStore as c, style as i, storePath as l, cost as n, writeErr as o, plain as r, isNodeEvent as s, confirm as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { G as
|
|
2
|
-
import { t as findRun } from "./find-
|
|
3
|
-
import { a as write, c as openStore, i as style, o as writeErr } from "./output-
|
|
4
|
-
import { r as continueRefusal } from "./in-a-run-
|
|
1
|
+
import { G as requestPause, W as requestContinue } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { t as findRun } from "./find-ntyniv2E.mjs";
|
|
3
|
+
import { a as write, c as openStore, i as style, o as writeErr } from "./output-CwqlG1Le.mjs";
|
|
4
|
+
import { r as continueRefusal } from "./in-a-run-D_fnj1Mw.mjs";
|
|
5
5
|
import { defineCommand } from "citty";
|
|
6
6
|
// src/commands/pause.ts
|
|
7
7
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as write, c as openStore, i as style, o as writeErr } from "./output-
|
|
1
|
+
import { H as unlinkNodes, I as addressOf, z as linkNodes } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { a as write, c as openStore, i as style, o as writeErr } from "./output-CwqlG1Le.mjs";
|
|
3
3
|
import { defineCommand } from "citty";
|
|
4
4
|
// src/commands/relay.ts
|
|
5
5
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as listOrkWorktrees, t as createdWorktrees } from "./list-
|
|
3
|
-
import { i as keyOf, n as applyStep, r as cleanStep, s as stepPrunes } from "./clean-
|
|
1
|
+
import { bt as liveStatus, j as lines, k as git } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { n as listOrkWorktrees, t as createdWorktrees } from "./list-D9HPWLPH.mjs";
|
|
3
|
+
import { i as keyOf, n as applyStep, r as cleanStep, s as stepPrunes } from "./clean-BPITM-6p.mjs";
|
|
4
4
|
// ../core/src/worktree/words.ts
|
|
5
5
|
/**
|
|
6
6
|
* @file The plain words for what `ork worktrees` shows, in one place, so the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as openStore, o as writeErr } from "./output-
|
|
3
|
-
import { u as inheritedScrubber } from "./src-
|
|
1
|
+
import { bt as liveStatus, in as socketPath, kt as scriptContactsOf, on as wakeRun } from "./src-BsLHKQRc.mjs";
|
|
2
|
+
import { c as openStore, o as writeErr } from "./output-CwqlG1Le.mjs";
|
|
3
|
+
import { u as inheritedScrubber } from "./src-CUeMUVwW.mjs";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
// ../core/src/remote/send.ts
|
|
6
6
|
/**
|