@krapht/ork 1.0.0-alpha.3 → 1.0.0-alpha.4

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 (30) hide show
  1. package/dist/{__build_info__-BwrKe6yz.mjs → __build_info__-1i1IwLg7.mjs} +2 -2
  2. package/dist/bin.mjs +37 -29
  3. package/dist/{clean-hXSaN8BT.mjs → clean-B1zPxq6A.mjs} +1 -1
  4. package/dist/{completion-Cga01yQP.mjs → completion-BY-frez8.mjs} +5 -5
  5. package/dist/{context-mCAwzFFM.mjs → context-CD5TCD1D.mjs} +3 -3
  6. package/dist/{decide-BvZnKErW.mjs → decide-CBhYcjwI.mjs} +1 -1
  7. package/dist/{find-CbetS8I2.mjs → find-BgZjVKhv.mjs} +1 -1
  8. package/dist/{format-D87bY6Ud.mjs → format-Creyq4U3.mjs} +2 -2
  9. package/dist/{in-a-run-Bs4Wv-Cz.mjs → in-a-run-CsSBQQ2q.mjs} +1 -1
  10. package/dist/{limits-RzKQ_zPk.mjs → limits-D_HxH0CK.mjs} +1 -1
  11. package/dist/{list-DX65Sbu7.mjs → list-CzzpVEpM.mjs} +1 -1
  12. package/dist/{mcp-DKrrxowo.mjs → mcp-DYmQt372.mjs} +6 -6
  13. package/dist/{output-Q3TZ-Ave.mjs → output-CuivUcDa.mjs} +1 -1
  14. package/dist/{pause-B5Z41lR3.mjs → pause-W6MzQqg8.mjs} +4 -4
  15. package/dist/{relay-BLnjMdjT.mjs → relay-CsdoZUXJ.mjs} +2 -2
  16. package/dist/{remove-IbcZOemm.mjs → remove-DLfDjBdF.mjs} +3 -3
  17. package/dist/{send-CJKEhBL1.mjs → send-Bw2FI_Sv.mjs} +3 -3
  18. package/dist/{src-DnETlJ1r.mjs → src-BRB5EQyC.mjs} +133 -11
  19. package/dist/{src-XDSRnAZV.mjs → src-Bc9yaAiZ.mjs} +159 -161
  20. package/dist/{src-LSxjnWDH.mjs → src-CrYCkU9J.mjs} +16 -8
  21. package/dist/{src-BTDzibW3.mjs → src-CsjumY1t.mjs} +7 -7
  22. package/dist/ui/assets/{app-BNElhp7Z.js → app-m9Gfrg_S.js} +1 -1
  23. package/dist/ui/assets/{index-BkI68sr5.js → index-UEC5ZLYw.js} +2 -2
  24. package/dist/ui/index.html +1 -1
  25. package/dist/{ui-fvrO7Gxd.mjs → ui-wX050aH1.mjs} +4 -4
  26. package/dist/{usage-bNdcBcj9.mjs → usage-C96RDH-G.mjs} +5 -5
  27. package/dist/{watch-EhlO304A.mjs → watch-vdRobJil.mjs} +6 -6
  28. package/dist/{workflows-C5hYAVcE.mjs → workflows-B28q8zMY.mjs} +3 -3
  29. package/dist/{worktrees-BQFcpYz1.mjs → worktrees-CKDRkl6b.mjs} +4 -4
  30. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { An as guardedBase, En as inside, Gt as publishPost, Mn as writePlainFile, On as LESSON_CAP_TOKENS, Rt as FEEDBACK_KINDS, Yt as targetOf, Zt as maskSecrets, bn as placeFiles, g as parseVersion, h as isNewer, jn as plainPathInside, kn as estimateTokens, m as compareVersions, qt as fingerprint, xn as placeFor, zt as FEEDBACK_SEVERITIES } from "./src-DnETlJ1r.mjs";
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, en as maskSecrets, g as parseVersion, h as isNewer, jn as LESSON_CAP_TOKENS, kn as inside, m as compareVersions, wn as placeFor } from "./src-BRB5EQyC.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";
@@ -611,5 +611,5 @@ const registryShown = (registry) => {
611
611
  * fails when it is stale.
612
612
  */
613
613
  const ORK_NAME = "@krapht/ork";
614
- const ORK_VERSION = "1.0.0-alpha.3";
614
+ const ORK_VERSION = "1.0.0-alpha.4";
615
615
  export { feedbackActions as C, placeOf as S, previewPost as _, registryShown as a, acceptItem as b, checkDue as c, pendingNotice as d, readUpdateCache as f, nodeSession 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, checkNote as v, openFixRun as w, lessonPlaceOf as x, recordNote as y };
package/dist/bin.mjs CHANGED
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env node
2
- import { Bn as serializeWorkflow, Bt as FEEDBACK_TARGETS, Cn as runDirOf, D as inspectProject, Dn as projectRootOf, Dt as userMessageText, En as inside, Ft as PROJECT_FILE, H as tellNode, Ht as planPost, I as createCalls, It as gitRulesOf, J as tellLiveRun, Jn as beforeOf, Jt as normalizeTitle, Kn as settingsOf, Kt as createFeedback, L as addressOf, Lt as loadProject, M as clearGitLocalEnv, N as parseInputPairs, P as resolveInputs, R as endLink, Rt as FEEDBACK_KINDS, Sn as projectsHome, Tt as startRun, Un as WorkflowSchema, V as peerOf, W as flattenTree, Wt as sendPost, Xt as maskReplacer, Yn as isClaudeNode, _ as lateTriggers, _n as hasInRepoFiles, _t as runStatus, an as wakeRun, ar as CLAUDE_DRIVERS, bn as placeFiles, cn as planMoveInto, cr as experimentsOn, d as runningRunIds, dn as toolsInUse, dt as namingNoDriver, er as INTEGRATIONS, et as adoptedCalls, f as runningScript, fn as createAgent, ft as sessionDriver, h as isNewer, hn as loadAgents, ht as liveStatus, i as NOT_STARTED, in as socketRoom, ir as ORK_LAYOUT, it as replayLoopAnswers, l as planUpgrade, ln as linkTools, lr as knownExperiments, mn as catalogAgent, n as resolveBase, nn as serveRun, nt as resumable, on as planAgentMigration, or as firstLine, ot as detachRun, pn as deleteAgent, q as requestStop, qt as fingerprint, rn as socketPath, rr as AGENT_TOOL_LAYOUTS, rt as createReplay, sn as applySteps, sr as EXPERIMENTS, st as followEvents, t as createWorkspace, tt as detachResume, u as releaseNotes, un as toolLinks, ut as planNodeSession, v as triggersReport, vn as inRepoPlace, vt as runTree, wn as shownPath, wt as walkSummary, xn as placeFor, yn as newProjectId, z as endLinksOf, zt as FEEDBACK_SEVERITIES } from "./src-DnETlJ1r.mjs";
3
- import { C as feedbackActions, S as placeOf, _ as previewPost, b as acceptItem, c as checkDue, d as pendingNotice, f as readUpdateCache, g as nodeSession, 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 checkNote, w as openFixRun, y as recordNote } from "./__build_info__-BwrKe6yz.mjs";
4
- import { i as builtinWorkflowFile, n as pendingDecisions, r as builtinProblem, t as answerDecision } from "./decide-BvZnKErW.mjs";
5
- import { n as newRunId, t as findRun } from "./find-CbetS8I2.mjs";
6
- import { a as write, c as openStore, i as style, l as storePath, n as cost, o as writeErr, s as nodeOf, t as confirm } from "./output-Q3TZ-Ave.mjs";
7
- import { n as listOrkWorktrees, t as createdWorktrees } from "./list-DX65Sbu7.mjs";
8
- import { a as planClean, t as applyClean } from "./clean-hXSaN8BT.mjs";
2
+ import { $t as maskReplacer, An as projectRootOf, Cn as placeFiles, D as inspectProject, Dn as shownPath, Dt as userMessageText, En as runDirOf, Ft as PROJECT_FILE, Gt as planPost, H as tellNode, Ht as FEEDBACK_SEVERITIES, I as createCalls, It as gitRulesOf, J as tellLiveRun, Kn as WorkflowSchema, L as addressOf, Lt as loadProject, M as clearGitLocalEnv, N as parseInputPairs, P as resolveInputs, Qn as isClaudeNode, R as endLink, Sn as newProjectId, Tn as projectsHome, Tt as startRun, Un as serializeWorkflow, Ut as FEEDBACK_TARGETS, V as peerOf, Vt as FEEDBACK_KINDS, W as flattenTree, Xt as fingerprint, Yn as settingsOf, Yt as createFeedback, Zn as beforeOf, Zt as normalizeTitle, _ as lateTriggers, _n as catalogAgent, _t as runStatus, an as serveRun, bn as hasInRepoFiles, cn as wakeRun, cr as CLAUDE_DRIVERS, d as runningRunIds, dn as planMoveInto, dr as experimentsOn, dt as namingNoDriver, et as adoptedCalls, f as runningScript, fn as linkTools, fr as knownExperiments, ft as sessionDriver, gn as deleteAgent, h as isNewer, hn as createAgent, ht as liveStatus, i as NOT_STARTED, it as replayLoopAnswers, kn as inside, l as planUpgrade, ln as planAgentMigration, lr as firstLine, mn as toolsInUse, n as resolveBase, nt as resumable, on as socketPath, or as AGENT_TOOL_LAYOUTS, ot as detachRun, pn as toolLinks, q as requestStop, qt as sendPost, rr as INTEGRATIONS, rt as createReplay, sn as socketRoom, sr as ORK_LAYOUT, st as followEvents, t as createWorkspace, tt as detachResume, u as releaseNotes, un as applySteps, ur as EXPERIMENTS, ut as planNodeSession, v as triggersReport, vn as loadAgents, vt as runTree, wn as placeFor, wt as walkSummary, xn as inRepoPlace, z as endLinksOf } from "./src-BRB5EQyC.mjs";
3
+ import { C as feedbackActions, S as placeOf, _ as previewPost, b as acceptItem, c as checkDue, d as pendingNotice, f as readUpdateCache, g as nodeSession, 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 checkNote, w as openFixRun, y as recordNote } from "./__build_info__-1i1IwLg7.mjs";
4
+ import { i as builtinWorkflowFile, n as pendingDecisions, r as builtinProblem, t as answerDecision } from "./decide-CBhYcjwI.mjs";
5
+ import { n as newRunId, t as findRun } from "./find-BgZjVKhv.mjs";
6
+ import { a as write, c as openStore, i as style, l as storePath, n as cost, o as writeErr, s as nodeOf, t as confirm } from "./output-CuivUcDa.mjs";
7
+ import { n as listOrkWorktrees, t as createdWorktrees } from "./list-CzzpVEpM.mjs";
8
+ import { a as planClean, t as applyClean } from "./clean-B1zPxq6A.mjs";
9
9
  import { c as subcommandsOf, i as argsOf, n as groupedEntries, o as publicArgs, s as resolved, t as groupOf } from "./help-groups-BwYoAWsh.mjs";
10
- import { a as formatRunEvent, i as formatEvent, n as formatRuns, o as createTerminalHuman, r as formatTree, t as ago } from "./format-D87bY6Ud.mjs";
11
- import { c as registeredProjects, i as refusedBuiltin, n as WORKFLOW_SUFFIX, o as workflowArg, s as projectAt, t as WORKFLOW_DIR } from "./workflows-C5hYAVcE.mjs";
12
- import { a as validate, c as warningLines, i as loadWorkflow, o as validateFile, r as formatReport, s as walkLoaded, t as context } from "./context-mCAwzFFM.mjs";
13
- import { i as runLimits, r as limitsRefusal, t as chatNotice } from "./limits-RzKQ_zPk.mjs";
14
- import { _ as resultOf, 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 } from "./src-XDSRnAZV.mjs";
15
- import { i as decideRefusal, n as chatRefusal } from "./in-a-run-Bs4Wv-Cz.mjs";
10
+ import { a as formatRunEvent, i as formatEvent, n as formatRuns, o as createTerminalHuman, r as formatTree, t as ago } from "./format-Creyq4U3.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-Bc9yaAiZ.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-B28q8zMY.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-CD5TCD1D.mjs";
14
+ import { i as runLimits, r as limitsRefusal, t as chatNotice } from "./limits-D_HxH0CK.mjs";
15
+ import { i as decideRefusal, n as chatRefusal } from "./in-a-run-CsSBQQ2q.mjs";
16
16
  import path from "node:path";
17
17
  import { stringify } from "yaml";
18
18
  import { z } from "zod";
@@ -1064,6 +1064,8 @@ const resumeChat = async (options) => {
1064
1064
  ...template === void 0 ? {} : { template }
1065
1065
  });
1066
1066
  if (!plan.ok) return plan.error;
1067
+ const servers = namedMcpEntries(run.project, plan.mcp);
1068
+ if (!servers.ok) return servers.error;
1067
1069
  let driver = options.driver ?? session.driver ?? plan.driver;
1068
1070
  if (driver === void 0) {
1069
1071
  const ready = readyDriver(await (options.driverChecks ?? checksHere)());
@@ -1079,6 +1081,7 @@ const resumeChat = async (options) => {
1079
1081
  });
1080
1082
  const started = (await options.runtime(driver)).start({
1081
1083
  ...plan.spec,
1084
+ ...servers.value,
1082
1085
  resume: session.sessionId,
1083
1086
  prompt: options.body,
1084
1087
  ...machineClaudeOf(events)
@@ -1195,6 +1198,8 @@ const runNode = async (options) => {
1195
1198
  pluginDir: path.join(runDir, "plugins", options.nodeId)
1196
1199
  });
1197
1200
  if (!plan.ok) return failed([plan.error]);
1201
+ const servers = namedMcpEntries(projectRoot, plan.mcp);
1202
+ if (!servers.ok) return failed([servers.error]);
1198
1203
  const named = sessionDriver({
1199
1204
  override: options.driver,
1200
1205
  named: plan.driver
@@ -1268,7 +1273,10 @@ const runNode = async (options) => {
1268
1273
  });
1269
1274
  const runtime = await options.runtime(driver);
1270
1275
  if (options.machineClaude === true) plan.spec.machineClaude = true;
1271
- const session = runtime.start(plan.spec, {
1276
+ const session = runtime.start({
1277
+ ...plan.spec,
1278
+ ...servers.value
1279
+ }, {
1272
1280
  human: control.human,
1273
1281
  ...graph === null ? {} : { feedback: createFeedback({
1274
1282
  graph,
@@ -1714,7 +1722,7 @@ const flagValues = (rawArgs, flag) => {
1714
1722
  };
1715
1723
  const isDriver = (value) => CLAUDE_DRIVERS.some((d) => d.id === value);
1716
1724
  /** Loads the drivers only when a run starts, so other commands stay fast. */
1717
- const loadRuntime = async (driver) => (await import("./src-LSxjnWDH.mjs")).createRuntime(driver, sessionEnv(process.env));
1725
+ const loadRuntime = async (driver) => (await import("./src-CrYCkU9J.mjs")).createRuntime(driver, sessionEnv(process.env));
1718
1726
  /**
1719
1727
  * Ctrl-C asks the run to stop, and so does a terminal closing or a polite kill,
1720
1728
  * so that the run ends tidily and leaves no result unscrubbed.
@@ -4607,27 +4615,27 @@ const main = defineCommand({
4607
4615
  ps,
4608
4616
  logs,
4609
4617
  tree,
4610
- usage: () => import("./usage-bNdcBcj9.mjs").then((module) => module.usage),
4611
- prune: () => import("./usage-bNdcBcj9.mjs").then((module) => module.prune),
4618
+ usage: () => import("./usage-C96RDH-G.mjs").then((module) => module.usage),
4619
+ prune: () => import("./usage-C96RDH-G.mjs").then((module) => module.prune),
4612
4620
  decide,
4613
- relay: () => import("./relay-BLnjMdjT.mjs").then((module) => module.relay),
4614
- pause: () => import("./pause-B5Z41lR3.mjs").then((module) => module.pause),
4615
- continue: () => import("./pause-B5Z41lR3.mjs").then((module) => module.continueRun),
4621
+ relay: () => import("./relay-CsdoZUXJ.mjs").then((module) => module.relay),
4622
+ pause: () => import("./pause-W6MzQqg8.mjs").then((module) => module.pause),
4623
+ continue: () => import("./pause-W6MzQqg8.mjs").then((module) => module.continueRun),
4616
4624
  stop,
4617
4625
  chat,
4618
- send: () => import("./send-CJKEhBL1.mjs").then((module) => module.send),
4626
+ send: () => import("./send-Bw2FI_Sv.mjs").then((module) => module.send),
4619
4627
  resume,
4620
4628
  feedback,
4621
4629
  context,
4622
- worktrees: () => import("./worktrees-BQFcpYz1.mjs").then((module) => module.worktrees),
4623
- wt: () => import("./worktrees-BQFcpYz1.mjs").then((module) => module.worktrees),
4624
- watch: () => import("./watch-EhlO304A.mjs").then((module) => module.watch),
4625
- mcp: () => import("./mcp-DKrrxowo.mjs").then((module) => module.mcp),
4626
- ui: () => import("./ui-fvrO7Gxd.mjs").then((module) => module.ui),
4630
+ worktrees: () => import("./worktrees-CKDRkl6b.mjs").then((module) => module.worktrees),
4631
+ wt: () => import("./worktrees-CKDRkl6b.mjs").then((module) => module.worktrees),
4632
+ watch: () => import("./watch-vdRobJil.mjs").then((module) => module.watch),
4633
+ mcp: () => import("./mcp-DYmQt372.mjs").then((module) => module.mcp),
4634
+ ui: () => import("./ui-wX050aH1.mjs").then((module) => module.ui),
4627
4635
  doctor,
4628
4636
  upgrade,
4629
- completion: () => import("./completion-Cga01yQP.mjs").then((module) => module.completion),
4630
- __complete: () => import("./completion-Cga01yQP.mjs").then((module) => module.completeCommand(main))
4637
+ completion: () => import("./completion-BY-frez8.mjs").then((module) => module.completion),
4638
+ __complete: () => import("./completion-BY-frez8.mjs").then((module) => module.completeCommand(main))
4631
4639
  }
4632
4640
  });
4633
4641
  // src/bin.ts
@@ -4645,7 +4653,7 @@ const main = defineCommand({
4645
4653
  clearGitLocalEnv();
4646
4654
  const argv = process.argv.slice(2);
4647
4655
  if (argv[0] === "__complete") {
4648
- const { printCompletions } = await import("./completion-Cga01yQP.mjs");
4656
+ const { printCompletions } = await import("./completion-BY-frez8.mjs");
4649
4657
  await printCompletions(main, argv.slice(1));
4650
4658
  } else if (process.env["ORK_UPDATE_CHECK_CHILD"] === "1") await runUpdateChild();
4651
4659
  else {
@@ -1,4 +1,4 @@
1
- import { A as gitOk, O as removeWorktree } from "./src-DnETlJ1r.mjs";
1
+ import { A as gitOk, O as removeWorktree } from "./src-BRB5EQyC.mjs";
2
2
  // ../core/src/worktree/clean.ts
3
3
  /**
4
4
  * @file What `ork worktrees clean` and `ork worktrees remove` do with what
@@ -1,9 +1,9 @@
1
- import { Qn as NodeIdSchema, ar as CLAUDE_DRIVERS, bn as placeFiles, ht as liveStatus, xn as placeFor } from "./src-DnETlJ1r.mjs";
2
- import { a as builtinWorkflowNames, n as pendingDecisions, o as builtinWorkflowText, s as isBuiltinArg } from "./decide-BvZnKErW.mjs";
3
- import { t as findRun } from "./find-CbetS8I2.mjs";
4
- import { c as openStore, l as storePath, o as writeErr } from "./output-Q3TZ-Ave.mjs";
1
+ import { Cn as placeFiles, cr as CLAUDE_DRIVERS, ht as liveStatus, tr as NodeIdSchema, wn as placeFor } from "./src-BRB5EQyC.mjs";
2
+ import { a as builtinWorkflowNames, n as pendingDecisions, o as builtinWorkflowText, s as isBuiltinArg } from "./decide-CBhYcjwI.mjs";
3
+ import { t as findRun } from "./find-BgZjVKhv.mjs";
4
+ import { c as openStore, l as storePath, o as writeErr } from "./output-CuivUcDa.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-C5hYAVcE.mjs";
6
+ import { a as resolveWorkflowArg, n as WORKFLOW_SUFFIX } from "./workflows-B28q8zMY.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, Ct as walkChecks, On as LESSON_CAP_TOKENS, S as readProjectTriggers, St as checkWorkflowText, Tn as workflowDirOf, bn as placeFiles, lt as explainSession, wt as walkSummary, xn as placeFor } from "./src-DnETlJ1r.mjs";
2
- import { a as write, i as style, r as plain } from "./output-Q3TZ-Ave.mjs";
3
- import { c as registeredProjects, i as refusedBuiltin, o as workflowArg, r as findWorkflowFiles, s as projectAt } from "./workflows-C5hYAVcE.mjs";
1
+ import { C as workflowTextHash, Cn as placeFiles, Ct as walkChecks, On as workflowDirOf, S as readProjectTriggers, St as checkWorkflowText, jn as LESSON_CAP_TOKENS, lt as explainSession, wn as placeFor, wt as walkSummary } from "./src-BRB5EQyC.mjs";
2
+ import { a as write, i as style, r as plain } from "./output-CuivUcDa.mjs";
3
+ import { c as registeredProjects, i as refusedBuiltin, o as workflowArg, r as findWorkflowFiles, s as projectAt } from "./workflows-B28q8zMY.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 { An as guardedBase, Mn as writePlainFile, an as wakeRun, bn as placeFiles, ht as liveStatus, jn as plainPathInside, rn as socketPath } from "./src-DnETlJ1r.mjs";
1
+ import { Cn as placeFiles, Fn as writePlainFile, Nn as guardedBase, Pn as plainPathInside, cn as wakeRun, ht as liveStatus, on as socketPath } from "./src-BRB5EQyC.mjs";
2
2
  import path from "node:path";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { createHash } from "node:crypto";
@@ -1,4 +1,4 @@
1
- import { xn as placeFor } from "./src-DnETlJ1r.mjs";
1
+ import { wn as placeFor } from "./src-BRB5EQyC.mjs";
2
2
  import { randomUUID } from "node:crypto";
3
3
  // ../core/src/remote/find.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { ht as liveStatus } from "./src-DnETlJ1r.mjs";
2
- import { i as style, n as cost } from "./output-Q3TZ-Ave.mjs";
1
+ import { ht as liveStatus } from "./src-BRB5EQyC.mjs";
2
+ import { i as style, n as cost } from "./output-CuivUcDa.mjs";
3
3
  import { createInterface } from "node:readline/promises";
4
4
  // src/human.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { p as runMarkerIn } from "./src-XDSRnAZV.mjs";
1
+ import { p as runMarkerIn } from "./src-Bc9yaAiZ.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-DnETlJ1r.mjs";
1
+ import { a as limitsNow, i as NOT_STARTED, o as limitsReport, r as capsHere } from "./src-BRB5EQyC.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-DnETlJ1r.mjs";
1
+ import { A as gitOk, j as lines, k as git } from "./src-BRB5EQyC.mjs";
2
2
  import { existsSync } from "node:fs";
3
3
  // ../core/src/worktree/list.ts
4
4
  /**
@@ -1,8 +1,8 @@
1
- import { h as isNewer } from "./src-DnETlJ1r.mjs";
2
- import { n as ORK_VERSION } from "./__build_info__-BwrKe6yz.mjs";
3
- import { a as openMcp, c as refused, o as tool, s as answer } from "./src-BTDzibW3.mjs";
4
- import { n as explainNode } from "./context-mCAwzFFM.mjs";
5
- import { p as runMarkerIn } from "./src-XDSRnAZV.mjs";
1
+ import { h as isNewer } from "./src-BRB5EQyC.mjs";
2
+ import { n as ORK_VERSION } from "./__build_info__-1i1IwLg7.mjs";
3
+ import { a as openMcp, c as refused, o as tool, s as answer } from "./src-CsjumY1t.mjs";
4
+ import { p as runMarkerIn } from "./src-Bc9yaAiZ.mjs";
5
+ import { n as explainNode } from "./context-CD5TCD1D.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.3") ? tooOld(all, options.expects) : all;
46
+ const tools = options.expects !== void 0 && isNewer(options.expects, "1.0.0-alpha.4") ? 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 { $ as text, Bt as FEEDBACK_TARGETS, Q as inTransaction, Rt as FEEDBACK_KINDS, X as usageQueries, Xt as maskReplacer, Y as backfillUsage, Z as eventOf, Zt as maskSecrets, gn as PROJECT_MODES, yt as ownProcessStart, zt as FEEDBACK_SEVERITIES } from "./src-DnETlJ1r.mjs";
1
+ import { $ as text, $t as maskReplacer, Ht as FEEDBACK_SEVERITIES, Q as inTransaction, Ut as FEEDBACK_TARGETS, Vt as FEEDBACK_KINDS, X as usageQueries, Y as backfillUsage, Z as eventOf, en as maskSecrets, yn as PROJECT_MODES, yt as ownProcessStart } from "./src-BRB5EQyC.mjs";
2
2
  import path from "node:path";
3
3
  import { mkdirSync } from "node:fs";
4
4
  import { homedir } from "node:os";
@@ -1,7 +1,7 @@
1
- import { G as requestContinue, K as requestPause } from "./src-DnETlJ1r.mjs";
2
- import { t as findRun } from "./find-CbetS8I2.mjs";
3
- import { a as write, c as openStore, i as style, o as writeErr } from "./output-Q3TZ-Ave.mjs";
4
- import { r as continueRefusal } from "./in-a-run-Bs4Wv-Cz.mjs";
1
+ import { G as requestContinue, K as requestPause } from "./src-BRB5EQyC.mjs";
2
+ import { t as findRun } from "./find-BgZjVKhv.mjs";
3
+ import { a as write, c as openStore, i as style, o as writeErr } from "./output-CuivUcDa.mjs";
4
+ import { r as continueRefusal } from "./in-a-run-CsSBQQ2q.mjs";
5
5
  import { defineCommand } from "citty";
6
6
  // src/commands/pause.ts
7
7
  /**
@@ -1,5 +1,5 @@
1
- import { B as linkNodes, L as addressOf, U as unlinkNodes } from "./src-DnETlJ1r.mjs";
2
- import { a as write, c as openStore, i as style, o as writeErr } from "./output-Q3TZ-Ave.mjs";
1
+ import { B as linkNodes, L as addressOf, U as unlinkNodes } from "./src-BRB5EQyC.mjs";
2
+ import { a as write, c as openStore, i as style, o as writeErr } from "./output-CuivUcDa.mjs";
3
3
  import { defineCommand } from "citty";
4
4
  // src/commands/relay.ts
5
5
  /**
@@ -1,6 +1,6 @@
1
- import { ht as liveStatus, j as lines, k as git } from "./src-DnETlJ1r.mjs";
2
- import { n as listOrkWorktrees, t as createdWorktrees } from "./list-DX65Sbu7.mjs";
3
- import { i as keyOf, n as applyStep, r as cleanStep, s as stepPrunes } from "./clean-hXSaN8BT.mjs";
1
+ import { ht as liveStatus, j as lines, k as git } from "./src-BRB5EQyC.mjs";
2
+ import { n as listOrkWorktrees, t as createdWorktrees } from "./list-CzzpVEpM.mjs";
3
+ import { i as keyOf, n as applyStep, r as cleanStep, s as stepPrunes } from "./clean-B1zPxq6A.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 { an as wakeRun, ht as liveStatus, kt as scriptContactsOf, rn as socketPath } from "./src-DnETlJ1r.mjs";
2
- import { c as openStore, o as writeErr } from "./output-Q3TZ-Ave.mjs";
3
- import { u as inheritedScrubber } from "./src-XDSRnAZV.mjs";
1
+ import { cn as wakeRun, ht as liveStatus, kt as scriptContactsOf, on as socketPath } from "./src-BRB5EQyC.mjs";
2
+ import { c as openStore, o as writeErr } from "./output-CuivUcDa.mjs";
3
+ import { u as inheritedScrubber } from "./src-Bc9yaAiZ.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  // ../core/src/remote/send.ts
6
6
  /**
@@ -459,6 +459,7 @@ const PracticesSchema = z.strictObject({
459
459
  ])]).optional().describe("Smallest complete change. `true` is `full`. Default: `full`.")
460
460
  });
461
461
  const TurnsSchema = z.number().int().positive();
462
+ const McpNamesSchema = z.array(z.string().min(1)).optional().describe("MCP servers from the project's `.mcp.json` this node's sessions load, beside Ork's own. Default: none.");
462
463
  const ToolRulesSchema = z.strictObject({
463
464
  allow: z.array(z.string()).optional(),
464
465
  deny: z.array(z.string()).optional(),
@@ -612,6 +613,7 @@ const claudeFields = {
612
613
  const ClaudeLeaderNodeSchema = z.strictObject({
613
614
  type: z.literal("claude.leader"),
614
615
  ...claudeFields,
616
+ mcp: McpNamesSchema,
615
617
  ...notifyFields,
616
618
  ...stepFields,
617
619
  maxWorkers: z.number().int().nonnegative().optional().describe("Cap on dynamically spawned workers."),
@@ -620,6 +622,7 @@ const ClaudeLeaderNodeSchema = z.strictObject({
620
622
  const ClaudeWorkerNodeSchema = z.strictObject({
621
623
  type: z.literal("claude.worker"),
622
624
  ...claudeFields,
625
+ mcp: McpNamesSchema,
623
626
  ...notifyFields,
624
627
  ...stepFields
625
628
  });
@@ -922,6 +925,7 @@ const DefaultsSchema = z.strictObject({
922
925
  maxTurns: TurnsSchema.optional(),
923
926
  timeout: TimeoutSchema.optional().describe("For tool and Claude nodes that set none; a gate's own timeout is separate."),
924
927
  practices: PracticesSchema.optional(),
928
+ mcp: McpNamesSchema,
925
929
  before: stepFields.before
926
930
  });
927
931
  /** What the placeholders in a git template may name. */
@@ -1283,7 +1287,7 @@ const renderJsonSchema = () => {
1283
1287
  * model the serializer follows, so that a document edit puts a new key where
1284
1288
  * the serializer would and a canonical file stays canonical (RFC-008).
1285
1289
  */
1286
- const isRecord$2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1290
+ const isRecord$3 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
1287
1291
  const unwrapped = (schema) => {
1288
1292
  let current = schema;
1289
1293
  while (current instanceof z.ZodOptional || current instanceof z.ZodNullable || current instanceof z.ZodDefault) current = current.unwrap();
@@ -1304,8 +1308,8 @@ const declaresType = (object, type) => {
1304
1308
  /** The object `value` is, among those `schema` allows. */
1305
1309
  const objectFor = (schema, value) => {
1306
1310
  const objects = objectsIn(schema);
1307
- const keys = isRecord$2(value) ? Object.keys(value) : [];
1308
- const type = isRecord$2(value) ? value["type"] : void 0;
1311
+ const keys = isRecord$3(value) ? Object.keys(value) : [];
1312
+ const type = isRecord$3(value) ? value["type"] : void 0;
1309
1313
  return objects.find((object) => declaresType(object, type)) ?? objects.find((object) => keys.every((key) => key in object.shape)) ?? objects[0];
1310
1314
  };
1311
1315
  /** The keys `schema` declares for `value`, in canonical order. */
@@ -1321,14 +1325,14 @@ const childOf = (schema, key, value) => {
1321
1325
  /** `value` with every object's keys in canonical order and no undefined. */
1322
1326
  const inCanonicalOrder = (value, schema) => {
1323
1327
  if (Array.isArray(value)) return value.map((item, index) => inCanonicalOrder(item, childOf(schema, index, value)));
1324
- if (!isRecord$2(value)) return value;
1328
+ if (!isRecord$3(value)) return value;
1325
1329
  const order = keysOf(schema, value);
1326
1330
  return Object.fromEntries([...order.filter((known) => known in value), ...Object.keys(value).filter((other) => !order.includes(other))].filter((key) => value[key] !== void 0).map((key) => [key, inCanonicalOrder(value[key], childOf(schema, key, value))]));
1327
1331
  };
1328
1332
  /** Two plain values alike, whatever the order of their keys. */
1329
1333
  const sameValue$1 = (a, b) => {
1330
1334
  if (Array.isArray(a) && Array.isArray(b)) return a.length === b.length && a.every((x, i) => sameValue$1(x, b[i]));
1331
- if (isRecord$2(a) && isRecord$2(b)) {
1335
+ if (isRecord$3(a) && isRecord$3(b)) {
1332
1336
  const left = Object.entries(a);
1333
1337
  return left.length === Object.keys(b).length && left.every(([key, value]) => sameValue$1(value, b[key]));
1334
1338
  }
@@ -1495,7 +1499,7 @@ const entryOf = (doc, raw) => {
1495
1499
  }
1496
1500
  if (!isMap(item)) return void 0;
1497
1501
  const value = item.toJS(doc);
1498
- if (!isRecord$2(value)) return void 0;
1502
+ if (!isRecord$3(value)) return void 0;
1499
1503
  const { from, to, when, maxRounds, ...rest } = value;
1500
1504
  const whenIsText = typeof when === "string";
1501
1505
  const roundsIsNumber = typeof maxRounds === "number";
@@ -1713,7 +1717,7 @@ const withOptions = (doc, item, next) => {
1713
1717
  const custom = Object.keys(next.extra).length > 0;
1714
1718
  if (!isMap(item) || !hasOptions && !custom && !hasComment(item)) return authored(next);
1715
1719
  const value = item.toJS(doc);
1716
- const { when: _when, maxRounds: _rounds, ...rest } = isRecord$2(value) ? value : {};
1720
+ const { when: _when, maxRounds: _rounds, ...rest } = isRecord$3(value) ? value : {};
1717
1721
  return {
1718
1722
  ...rest,
1719
1723
  ...next.when === void 0 ? {} : { when: next.when },
@@ -4563,6 +4567,119 @@ const FEEDBACK_SEVERITIES = [
4563
4567
  "medium",
4564
4568
  "high"
4565
4569
  ];
4570
+ // ../core/src/project/mcp-file.ts
4571
+ /**
4572
+ * @file The project's `.mcp.json`, the file Claude Code reads too, so a server
4573
+ * is defined in one place: reading its servers, and the compiler's check of
4574
+ * the servers a Claude node names (`mcp:`, ADR-067). A session's servers are
4575
+ * read with the file's text left as written, so no value leaves the file.
4576
+ */
4577
+ const MCP_FILE = ".mcp.json";
4578
+ /** Ork's own MCP server: a project can't redefine it. */
4579
+ const ORK_MCP_NAME = "ork";
4580
+ const isRecord$2 = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
4581
+ /** The file's `mcpServers`; `{}` when there is no file. */
4582
+ const serversIn = (root) => {
4583
+ const file = path.join(root, MCP_FILE);
4584
+ if (!existsSync(file)) return {
4585
+ ok: true,
4586
+ value: {}
4587
+ };
4588
+ try {
4589
+ const parsed = JSON.parse(readFileSync(file, "utf8"));
4590
+ const servers = isRecord$2(parsed) ? parsed["mcpServers"] : void 0;
4591
+ return {
4592
+ ok: true,
4593
+ value: isRecord$2(servers) ? servers : {}
4594
+ };
4595
+ } catch (error) {
4596
+ const reason = error instanceof SyntaxError ? "it is not valid JSON" : error instanceof Error ? error.message : String(error);
4597
+ return {
4598
+ ok: false,
4599
+ error: `${MCP_FILE} can't be read: ${reason}`
4600
+ };
4601
+ }
4602
+ };
4603
+ /** A server's field that holds something other than text: it would be dropped. */
4604
+ const mcpNotText = (server) => [
4605
+ "args",
4606
+ "env",
4607
+ "headers"
4608
+ ].find((field) => {
4609
+ const value = server[field];
4610
+ return (Array.isArray(value) ? value : isRecord$2(value) ? Object.values(value) : []).some((item) => typeof item !== "string");
4611
+ });
4612
+ /** Why an entry can't be loaded, whatever its name; its values aren't quoted. */
4613
+ const entryProblem = (server) => {
4614
+ if (!isRecord$2(server)) return "it is not an object";
4615
+ if (server["args"] !== void 0 && !Array.isArray(server["args"])) return "its args is not a list";
4616
+ const notRecord = ["env", "headers"].find((field) => server[field] !== void 0 && !isRecord$2(server[field]));
4617
+ if (notRecord !== void 0) return `its ${notRecord} is not an object`;
4618
+ const field = mcpNotText(server);
4619
+ if (field !== void 0) return `its ${field} holds a value that isn't text`;
4620
+ return typeof server["command"] === "string" || typeof server["url"] === "string" ? void 0 : "it has neither a command nor a url";
4621
+ };
4622
+ /** What the compiler checks a workflow's `mcp:` names against. */
4623
+ const mcpFileOptions = (root) => {
4624
+ const read = serversIn(root);
4625
+ if (!read.ok) return {
4626
+ mcpServers: [],
4627
+ mcpFileProblem: read.error
4628
+ };
4629
+ if (!existsSync(path.join(root, ".mcp.json"))) return {
4630
+ mcpServers: [],
4631
+ mcpFileProblem: `there is no ${MCP_FILE}`
4632
+ };
4633
+ return {
4634
+ mcpServers: Object.keys(read.value),
4635
+ mcpMalformed: Object.fromEntries(Object.entries(read.value).flatMap(([name, server]) => {
4636
+ const problem = entryProblem(server);
4637
+ return problem === void 0 ? [] : [[name, problem]];
4638
+ }))
4639
+ };
4640
+ };
4641
+ /** The error for one name a node gave, or nothing when it can load. */
4642
+ const nameProblem = (id, name, options, known) => {
4643
+ if (name === ORK_MCP_NAME) return {
4644
+ code: "mcp.reserved",
4645
+ message: `\`${id}\`: \`${ORK_MCP_NAME}\` is Ork's own server, name another`
4646
+ };
4647
+ if (!known.includes(name)) return {
4648
+ code: "mcp.unknown",
4649
+ message: `\`${id}\`: no MCP server \`${name}\`${options.mcpFileProblem === void 0 ? ` in ${MCP_FILE}, which has ${known.length === 0 ? "none" : known.join(", ")}` : `: ${options.mcpFileProblem}`}`
4650
+ };
4651
+ const problem = Object.hasOwn(options.mcpMalformed ?? {}, name) ? options.mcpMalformed?.[name] : void 0;
4652
+ return problem === void 0 ? void 0 : {
4653
+ code: "mcp.malformed",
4654
+ message: `\`${id}\`: MCP server \`${name}\` in ${MCP_FILE} is malformed: ${problem}`
4655
+ };
4656
+ };
4657
+ /** Every server a Claude node's sessions would load exists and can load. */
4658
+ const checkMcpServers = (workflow, options) => {
4659
+ const known = options.mcpServers;
4660
+ if (known === void 0) return [];
4661
+ return Object.entries(workflow.nodes).flatMap(([id, node]) => {
4662
+ if (node.type !== "claude.leader" && node.type !== "claude.worker") return [];
4663
+ const own = node.mcp !== void 0;
4664
+ return (node.mcp ?? workflow.defaults?.mcp ?? []).flatMap((name, index) => {
4665
+ const problem = nameProblem(id, name, options, known);
4666
+ return problem === void 0 ? [] : [{
4667
+ severity: "error",
4668
+ ...problem,
4669
+ path: own ? [
4670
+ "nodes",
4671
+ id,
4672
+ "mcp",
4673
+ index
4674
+ ] : [
4675
+ "defaults",
4676
+ "mcp",
4677
+ index
4678
+ ]
4679
+ }];
4680
+ });
4681
+ });
4682
+ };
4566
4683
  // ../core/src/project/templates.ts
4567
4684
  /**
4568
4685
  * @file Git name templates (`ork/{run}/{node}`, `{inputs.type}/{inputs.slug}`):
@@ -5942,6 +6059,7 @@ const compileWorkflow = (authored, options = {}) => {
5942
6059
  ...rules.diagnostics,
5943
6060
  ...channels.diagnostics,
5944
6061
  ...checkRules(workflow),
6062
+ ...checkMcpServers(workflow, options),
5945
6063
  ...checkReach(workflow, edges, entries)
5946
6064
  ];
5947
6065
  diagnostics.sort((a, b) => SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity]);
@@ -9073,7 +9191,8 @@ const checkWorkflowText = (text, { place, workflowDir, registered, home }) => {
9073
9191
  catalog,
9074
9192
  workflowDir,
9075
9193
  projectRoot,
9076
- ...loaded.project === void 0 ? {} : { project: loaded.project }
9194
+ ...loaded.project === void 0 ? {} : { project: loaded.project },
9195
+ ...mcpFileOptions(projectRoot)
9077
9196
  });
9078
9197
  const { graph } = compiled;
9079
9198
  const diagnostics = [];
@@ -9667,10 +9786,11 @@ const roleSection = (workflow, node) => {
9667
9786
  return role === void 0 || role === "" ? [] : [`# Your role: ${node.agent}\n\n${role}`];
9668
9787
  };
9669
9788
  /** The node's own tool rules, the project's and workflow's, and isolation's. */
9670
- const toolRules = (node, readonly, rules) => ({
9789
+ const toolRules = (node, readonly, rules, mcp) => ({
9671
9790
  allow: [.../* @__PURE__ */ new Set([
9672
9791
  ...rules?.permissions?.allow ?? [],
9673
9792
  ...node.tools?.allow ?? [],
9793
+ ...mcp.map((server) => `mcp__${server.replaceAll(/[^\w-]/gu, "_")}`),
9674
9794
  ...readonly ? READ_ONLY_COMMANDS : []
9675
9795
  ])],
9676
9796
  deny: [.../* @__PURE__ */ new Set([
@@ -9700,6 +9820,7 @@ const planNodeSession = (workflow, id, options) => {
9700
9820
  error: `\`${id}\` is a sub-agent; it runs inside \`${node.parent}\`'s session`
9701
9821
  };
9702
9822
  const defaults = workflow.defaults ?? {};
9823
+ const mcp = node.mcp ?? defaults.mcp ?? [];
9703
9824
  const isolation = node.isolation ?? defaults.isolation ?? "worktree";
9704
9825
  const ownWorktree = options.checkout?.own === true;
9705
9826
  if ((isolation === "worktree" && !ownWorktree || isolation === "continue" && options.checkout === void 0) && options.inPlace !== true) return {
@@ -9743,7 +9864,7 @@ const planNodeSession = (workflow, id, options) => {
9743
9864
  ...contextSections(context.files, "node")
9744
9865
  ].join("\n\n"),
9745
9866
  settingSources: ["project", "local"],
9746
- tools: toolRules(node, isolation === "readonly", workflow.rules),
9867
+ tools: toolRules(node, isolation === "readonly", workflow.rules, mcp),
9747
9868
  permissionMode: "default",
9748
9869
  reportSchema: reportSchemaFor(node)
9749
9870
  };
@@ -9769,6 +9890,7 @@ const planNodeSession = (workflow, id, options) => {
9769
9890
  ok: true,
9770
9891
  spec,
9771
9892
  driver: namedDriver(node, workflow),
9893
+ mcp,
9772
9894
  warnings,
9773
9895
  context
9774
9896
  };
@@ -13018,4 +13140,4 @@ const createWorkspace = (options) => {
13018
13140
  close
13019
13141
  };
13020
13142
  };
13021
- export { text as $, timeoutMs as $n, parseTemplate as $t, gitOk as A, guardedBase as An, runScope as At, linkNodes as B, serializeWorkflow as Bn, FEEDBACK_TARGETS as Bt, workflowTextHash as C, runDirOf as Cn, walkChecks as Ct, inspectProject as D, projectRootOf as Dn, userMessageText as Dt, BRANCH_PREFIX as E, inside as En, MESSAGE_LIMIT as Et, declaredProblem as F, applyEdits as Fn, PROJECT_FILE as Ft, requestContinue as G, expandEdge as Gn, publishPost as Gt, tellNode as H, EdgeInputSchema as Hn, planPost as Ht, createCalls as I, newWorkflowText as In, gitRulesOf as It, tellLiveRun as J, beforeOf as Jn, normalizeTitle as Jt, requestPause as K, settingsOf as Kn, createFeedback as Kt, addressOf as L, readDocument as Ln, loadProject as Lt, clearGitLocalEnv as M, writePlainFile as Mn, envReadsOf as Mt, parseInputPairs as N, skillsIn as Nn, nodeSays as Nt, removeWorktree as O, LESSON_CAP_TOKENS as On, heldTimeout as Ot, resolveInputs as P, WorkflowEditSchema as Pn, declaredOutputOf as Pt, inTransaction as Q, NodeIdSchema as Qn, evaluate as Qt, endLink as R, renderJsonSchema as Rn, FEEDBACK_KINDS as Rt, readProjectTriggers as S, projectsHome as Sn, checkWorkflowText as St, watchingPid as T, workflowDirOf as Tn, startRun as Tt, unlinkNodes as U, WorkflowSchema as Un, runGh as Ut, peerOf as V, markValue as Vn, DISCUSSIONS as Vt, flattenTree as W, CheckReportSchema as Wn, sendPost as Wt, usageQueries as X, isToolNode as Xn, maskReplacer as Xt, backfillUsage as Y, isClaudeNode as Yn, targetOf as Yt, eventOf as Z, programsRunBy as Zn, maskSecrets as Zt, lateTriggers as _, hasInRepoFiles as _n, runStatus as _t, limitsNow as a, wakeRun as an, CLAUDE_DRIVERS as ar, DETACHED_ENV as at, triggerStanding as b, placeFiles as bn, processAlive as bt, usd as c, planMoveInto as cn, experimentsOn as cr, explainWorkflowText as ct, runningRunIds as d, toolsInUse as dn, namingNoDriver as dt, renderTemplate as en, INTEGRATIONS as er, adoptedCalls as et, runningScript as f, createAgent as fn, sessionDriver as ft, parseVersion as g, PROJECT_MODES as gn, pausedOf as gt, isNewer as h, loadAgents as hn, liveStatus as ht, NOT_STARTED as i, socketRoom as in, ORK_LAYOUT as ir, replayLoopAnswers as it, lines as j, plainPathInside as jn, calledWorkflows as jt, git as k, estimateTokens as kn, scriptContactsOf as kt, planUpgrade as l, linkTools as ln, knownExperiments as lr, explainSession as lt, compareVersions as m, catalogAgent as mn, reportSchemaFor as mt, resolveBase as n, serveRun as nn, integrationFor as nr, resumable as nt, limitsReport as o, planAgentMigration as on, firstLine as or, detachRun as ot, detectInstaller as p, deleteAgent as pn, parseReport as pt, requestStop as q, NodeSchema as qn, fingerprint as qt, capsHere as r, socketPath as rn, AGENT_TOOL_LAYOUTS as rr, createReplay as rt, planReason as s, applySteps as sn, EXPERIMENTS as sr, followEvents as st, createWorkspace as t, readCondition as tn, TOOL_PREFIX as tr, detachResume as tt, releaseNotes as u, toolLinks as un, planNodeSession as ut, triggersReport as v, inRepoPlace as vn, runTree as vt, takeWatchLock as w, shownPath as wn, walkSummary as wt, declaredTriggers as x, placeFor as xn, stillTheSameProcess as xt, createWatcher as y, newProjectId as yn, ownProcessStart as yt, endLinksOf as z, parseWorkflow as zn, FEEDBACK_SEVERITIES as zt };
13143
+ export { text as $, isToolNode as $n, maskReplacer as $t, gitOk as A, projectRootOf as An, runScope as At, linkNodes as B, readDocument as Bn, serversIn as Bt, workflowTextHash as C, placeFiles as Cn, walkChecks as Ct, inspectProject as D, shownPath as Dn, userMessageText as Dt, BRANCH_PREFIX as E, runDirOf as En, MESSAGE_LIMIT as Et, declaredProblem as F, writePlainFile as Fn, PROJECT_FILE as Ft, requestContinue as G, EdgeInputSchema as Gn, planPost as Gt, tellNode as H, parseWorkflow as Hn, FEEDBACK_SEVERITIES as Ht, createCalls as I, skillsIn as In, gitRulesOf as It, tellLiveRun as J, expandEdge as Jn, publishPost as Jt, requestPause as K, WorkflowSchema as Kn, runGh as Kt, addressOf as L, WorkflowEditSchema as Ln, loadProject as Lt, clearGitLocalEnv as M, estimateTokens as Mn, envReadsOf as Mt, parseInputPairs as N, guardedBase as Nn, nodeSays as Nt, removeWorktree as O, workflowDirOf as On, heldTimeout as Ot, resolveInputs as P, plainPathInside as Pn, declaredOutputOf as Pt, inTransaction as Q, isClaudeNode as Qn, targetOf as Qt, endLink as R, applyEdits as Rn, MCP_FILE as Rt, readProjectTriggers as S, newProjectId as Sn, checkWorkflowText as St, watchingPid as T, projectsHome as Tn, startRun as Tt, unlinkNodes as U, serializeWorkflow as Un, FEEDBACK_TARGETS as Ut, peerOf as V, renderJsonSchema as Vn, FEEDBACK_KINDS as Vt, flattenTree as W, markValue as Wn, DISCUSSIONS as Wt, usageQueries as X, NodeSchema as Xn, fingerprint as Xt, backfillUsage as Y, settingsOf as Yn, createFeedback as Yt, eventOf as Z, beforeOf as Zn, normalizeTitle as Zt, lateTriggers as _, catalogAgent as _n, runStatus as _t, limitsNow as a, serveRun as an, integrationFor as ar, DETACHED_ENV as at, triggerStanding as b, hasInRepoFiles as bn, processAlive as bt, usd as c, wakeRun as cn, CLAUDE_DRIVERS as cr, explainWorkflowText as ct, runningRunIds as d, planMoveInto as dn, experimentsOn as dr, namingNoDriver as dt, maskSecrets as en, programsRunBy as er, adoptedCalls as et, runningScript as f, linkTools as fn, knownExperiments as fr, sessionDriver as ft, parseVersion as g, deleteAgent as gn, pausedOf as gt, isNewer as h, createAgent as hn, liveStatus as ht, NOT_STARTED as i, readCondition as in, TOOL_PREFIX as ir, replayLoopAnswers as it, lines as j, LESSON_CAP_TOKENS as jn, calledWorkflows as jt, git as k, inside as kn, scriptContactsOf as kt, planUpgrade as l, planAgentMigration as ln, firstLine as lr, explainSession as lt, compareVersions as m, toolsInUse as mn, reportSchemaFor as mt, resolveBase as n, parseTemplate as nn, timeoutMs as nr, resumable as nt, limitsReport as o, socketPath as on, AGENT_TOOL_LAYOUTS as or, detachRun as ot, detectInstaller as p, toolLinks as pn, parseReport as pt, requestStop as q, CheckReportSchema as qn, sendPost as qt, capsHere as r, renderTemplate as rn, INTEGRATIONS as rr, createReplay as rt, planReason as s, socketRoom as sn, ORK_LAYOUT as sr, followEvents as st, createWorkspace as t, evaluate as tn, NodeIdSchema as tr, detachResume as tt, releaseNotes as u, applySteps as un, EXPERIMENTS as ur, planNodeSession as ut, triggersReport as v, loadAgents as vn, runTree as vt, takeWatchLock as w, placeFor as wn, walkSummary as wt, declaredTriggers as x, inRepoPlace as xn, stillTheSameProcess as xt, createWatcher as y, PROJECT_MODES as yn, ownProcessStart as yt, endLinksOf as z, newWorkflowText as zn, mcpNotText as zt };