@vornrun/mcp 0.7.0-beta.17 → 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.
- package/dist/index.js +66 -6
- 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
|
|
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)
|
|
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.
|
|
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.
|
|
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.
|
|
42
|
-
"@vornrun/shared": "0.7.0-beta.
|
|
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"
|