@vornrun/mcp 0.7.0-beta.16 → 0.7.0-beta.18

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 (2) hide show
  1. package/dist/index.js +66 -6
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -508,6 +508,10 @@ function createSchema() {
508
508
  output TEXT,
509
509
  structured_output TEXT,
510
510
  iteration INTEGER,
511
+ worktree_path TEXT,
512
+ worktree_name TEXT,
513
+ worktree_origin TEXT,
514
+ waiting_for TEXT,
511
515
  FOREIGN KEY (run_id) REFERENCES workflow_runs(id) ON DELETE CASCADE
512
516
  );
513
517
 
@@ -748,7 +752,9 @@ function migrateSchema(d) {
748
752
  last_sync_at TEXT,
749
753
  last_sync_error TEXT,
750
754
  sync_cursor TEXT,
751
- created_at TEXT NOT NULL
755
+ created_at TEXT NOT NULL,
756
+ signed_in_as TEXT,
757
+ signed_in_at TEXT
752
758
  )
753
759
  `);
754
760
  d.exec(`
@@ -1006,6 +1012,34 @@ function migrateSchema(d) {
1006
1012
  })();
1007
1013
  logger_default.info("[database] migrated schema to version 18 (session groups)");
1008
1014
  }
1015
+ if (version < 19) {
1016
+ d.transaction(() => {
1017
+ const cols = d.prepare("PRAGMA table_info(workflow_run_nodes)").all();
1018
+ for (const column of ["worktree_path", "worktree_name", "worktree_origin"]) {
1019
+ if (!cols.some((c) => c.name === column)) {
1020
+ d.exec(`ALTER TABLE workflow_run_nodes ADD COLUMN ${column} TEXT`);
1021
+ }
1022
+ }
1023
+ d.prepare(
1024
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '19')"
1025
+ ).run();
1026
+ })();
1027
+ logger_default.info("[database] migrated schema to version 19 (worktrees on run steps)");
1028
+ }
1029
+ if (version < 20) {
1030
+ d.transaction(() => {
1031
+ const cols = d.prepare("PRAGMA table_info(source_connections)").all();
1032
+ for (const column of ["signed_in_as", "signed_in_at"]) {
1033
+ if (!cols.some((c) => c.name === column)) {
1034
+ d.exec(`ALTER TABLE source_connections ADD COLUMN ${column} TEXT`);
1035
+ }
1036
+ }
1037
+ d.prepare(
1038
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '20')"
1039
+ ).run();
1040
+ })();
1041
+ logger_default.info("[database] migrated schema to version 20 (who a connection is signed in as)");
1042
+ }
1009
1043
  }
1010
1044
  var REVISIONED_TABLES = [
1011
1045
  "projects",
@@ -1090,6 +1124,7 @@ function verifySchema(d) {
1090
1124
  }
1091
1125
  ],
1092
1126
  workflow_run_nodes: [
1127
+ { column: "waiting_for", ddl: "ALTER TABLE workflow_run_nodes ADD COLUMN waiting_for TEXT" },
1093
1128
  { column: "agent_type", ddl: "ALTER TABLE workflow_run_nodes ADD COLUMN agent_type TEXT" },
1094
1129
  {
1095
1130
  column: "project_name",
@@ -2923,6 +2958,13 @@ function registerSessionTools(server) {
2923
2958
 
2924
2959
  // src/tools/workflows.ts
2925
2960
  import crypto3 from "crypto";
2961
+
2962
+ // ../shared/src/workflow-graph.ts
2963
+ function isSignInWait(state) {
2964
+ return state.status === "waiting" && state.waitingFor === "signIn";
2965
+ }
2966
+
2967
+ // src/tools/workflows.ts
2926
2968
  import { z as z5 } from "zod";
2927
2969
 
2928
2970
  // ../shared/src/workflow-portability.ts
@@ -3395,6 +3437,12 @@ function annotateWaitingGates(runs, workflows) {
3395
3437
  ...run,
3396
3438
  nodeStates: run.nodeStates.map((state) => {
3397
3439
  if (state.status !== "waiting") return state;
3440
+ if (isSignInWait(state)) {
3441
+ return {
3442
+ ...state,
3443
+ asks: "Sign in to its connection in the Vorn app, and this step runs again"
3444
+ };
3445
+ }
3398
3446
  const asks = gateMessage(workflow, state.nodeId);
3399
3447
  return asks ? { ...state, asks } : state;
3400
3448
  })
@@ -3406,16 +3454,28 @@ async function runById(runId) {
3406
3454
  if (recent) return recent;
3407
3455
  return (await listRunsWithWaitingGates()).find((r) => r.runId === runId);
3408
3456
  }
3409
- function resolveGateTarget(run, nodeId) {
3410
- const waiting = run.nodeStates.filter((n) => n.status === "waiting").map((n) => n.nodeId);
3457
+ function resolveGateTarget(run, nodeId, decision = "approve") {
3458
+ const parked = run.nodeStates.filter((n) => n.status === "waiting");
3459
+ const answerable = parked.filter((n) => decision === "reject" || !isSignInWait(n));
3460
+ const waiting = answerable.map((n) => n.nodeId);
3461
+ const signIns = parked.filter((n) => !answerable.includes(n)).map((n) => n.nodeId);
3411
3462
  if (nodeId) {
3463
+ if (signIns.includes(nodeId)) {
3464
+ return {
3465
+ error: `node "${nodeId}" is waiting for a sign-in in the Vorn app, not for an approval`
3466
+ };
3467
+ }
3412
3468
  if (waiting.includes(nodeId)) return { nodeId };
3413
3469
  return {
3414
3470
  error: waiting.length ? `node "${nodeId}" is not waiting. Waiting: ${waiting.join(", ")}` : `node "${nodeId}" is not waiting, and neither is any other node in this run`
3415
3471
  };
3416
3472
  }
3417
3473
  if (waiting.length === 1) return { nodeId: waiting[0] };
3418
- if (waiting.length === 0) return { error: "no node in this run is waiting on a gate" };
3474
+ if (waiting.length === 0) {
3475
+ return {
3476
+ error: signIns.length ? "this run is waiting for a sign-in in the Vorn app, not for an approval" : "no node in this run is waiting on a gate"
3477
+ };
3478
+ }
3419
3479
  return { error: `${waiting.length} nodes are waiting \u2014 pass node_id: ${waiting.join(", ")}` };
3420
3480
  }
3421
3481
  async function listPortableConnections() {
@@ -3681,7 +3741,7 @@ The run is stopped by the instance holding it, so confirm with list_workflow_run
3681
3741
  ]
3682
3742
  };
3683
3743
  }
3684
- const target = resolveGateTarget(run, args.node_id);
3744
+ const target = resolveGateTarget(run, args.node_id, args.decision);
3685
3745
  if ("error" in target) {
3686
3746
  return {
3687
3747
  content: [{ type: "text", text: `Error: ${target.error}` }],
@@ -4882,7 +4942,7 @@ console.warn = (...args) => _origError("[mcp:warn]", ...args);
4882
4942
  console.error = (...args) => _origError("[mcp:error]", ...args);
4883
4943
  async function main() {
4884
4944
  configManager.init();
4885
- const version = true ? "0.7.0-beta.16" : createRequire(import.meta.url)("../package.json").version;
4945
+ const version = true ? "0.7.0-beta.18" : createRequire(import.meta.url)("../package.json").version;
4886
4946
  const server = createMcpServer(version);
4887
4947
  const transport = new StdioServerTransport();
4888
4948
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vornrun/mcp",
3
- "version": "0.7.0-beta.16",
3
+ "version": "0.7.0-beta.18",
4
4
  "description": "Vorn MCP server — task management, git, and workflow tools for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -38,8 +38,8 @@
38
38
  "zod": "^4.5.4"
39
39
  },
40
40
  "devDependencies": {
41
- "@vornrun/server": "0.7.0-beta.16",
42
- "@vornrun/shared": "0.7.0-beta.16",
41
+ "@vornrun/server": "0.7.0-beta.18",
42
+ "@vornrun/shared": "0.7.0-beta.18",
43
43
  "tsup": "^8.5.1",
44
44
  "tsx": "^4.23.1",
45
45
  "typescript": "^6.0.3"