@vornrun/mcp 0.2.0-beta.2 → 0.2.0-beta.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 (2) hide show
  1. package/dist/index.js +93 -8
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -547,6 +547,54 @@ function migrateSchema(d) {
547
547
  })();
548
548
  logger_default.info("[database] migrated schema to version 8 (approval gate timestamp)");
549
549
  }
550
+ if (version < 9) {
551
+ d.transaction(() => {
552
+ d.exec(`
553
+ CREATE TABLE IF NOT EXISTS source_connections (
554
+ id TEXT PRIMARY KEY,
555
+ connector_id TEXT NOT NULL,
556
+ name TEXT NOT NULL,
557
+ filters TEXT NOT NULL DEFAULT '{}',
558
+ sync_interval_minutes INTEGER NOT NULL DEFAULT 5,
559
+ status_mapping TEXT NOT NULL DEFAULT '{}',
560
+ execution_project TEXT,
561
+ last_sync_at TEXT,
562
+ last_sync_error TEXT,
563
+ sync_cursor TEXT,
564
+ created_at TEXT NOT NULL
565
+ )
566
+ `);
567
+ d.exec(`
568
+ CREATE TABLE IF NOT EXISTS task_source_links (
569
+ task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
570
+ connection_id TEXT NOT NULL REFERENCES source_connections(id) ON DELETE CASCADE,
571
+ connector_id TEXT NOT NULL,
572
+ external_id TEXT NOT NULL,
573
+ external_url TEXT NOT NULL,
574
+ source_status_raw TEXT NOT NULL,
575
+ source_updated_at TEXT NOT NULL,
576
+ last_synced_at TEXT NOT NULL,
577
+ conflict_state TEXT NOT NULL DEFAULT 'none',
578
+ PRIMARY KEY (task_id),
579
+ UNIQUE (connection_id, external_id)
580
+ )
581
+ `);
582
+ const taskCols = d.prepare("PRAGMA table_info(tasks)").all();
583
+ if (!taskCols.some((c) => c.name === "source_connector_id")) {
584
+ d.exec("ALTER TABLE tasks ADD COLUMN source_connector_id TEXT");
585
+ }
586
+ if (!taskCols.some((c) => c.name === "source_external_url")) {
587
+ d.exec("ALTER TABLE tasks ADD COLUMN source_external_url TEXT");
588
+ }
589
+ if (!taskCols.some((c) => c.name === "source_external_id")) {
590
+ d.exec("ALTER TABLE tasks ADD COLUMN source_external_id TEXT");
591
+ }
592
+ d.prepare(
593
+ "INSERT OR REPLACE INTO schema_meta (key, value) VALUES ('schema_version', '9')"
594
+ ).run();
595
+ })();
596
+ logger_default.info("[database] migrated schema to version 9 (connector source connections)");
597
+ }
550
598
  }
551
599
  function verifySchema(d) {
552
600
  const expectedByTable = {
@@ -595,6 +643,20 @@ function verifySchema(d) {
595
643
  ddl: "ALTER TABLE workflow_run_nodes ADD COLUMN project_path TEXT"
596
644
  },
597
645
  { column: "approved_at", ddl: "ALTER TABLE workflow_run_nodes ADD COLUMN approved_at TEXT" }
646
+ ],
647
+ tasks: [
648
+ {
649
+ column: "source_connector_id",
650
+ ddl: "ALTER TABLE tasks ADD COLUMN source_connector_id TEXT"
651
+ },
652
+ {
653
+ column: "source_external_url",
654
+ ddl: "ALTER TABLE tasks ADD COLUMN source_external_url TEXT"
655
+ },
656
+ {
657
+ column: "source_external_id",
658
+ ddl: "ALTER TABLE tasks ADD COLUMN source_external_id TEXT"
659
+ }
598
660
  ]
599
661
  };
600
662
  for (const [table, columns] of Object.entries(expectedByTable)) {
@@ -815,8 +877,8 @@ function saveConfig(config) {
815
877
  }
816
878
  d.prepare("DELETE FROM tasks").run();
817
879
  const insertTask = d.prepare(
818
- `INSERT INTO tasks (id, project_name, title, description, status, "order", assigned_session_id, assigned_agent, agent_session_id, branch, use_worktree, created_at, updated_at, completed_at)
819
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
880
+ `INSERT INTO tasks (id, project_name, title, description, status, "order", assigned_session_id, assigned_agent, agent_session_id, branch, use_worktree, created_at, updated_at, completed_at, source_connector_id, source_external_url, source_external_id)
881
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
820
882
  );
821
883
  for (const t of config.tasks ?? []) {
822
884
  insertTask.run(
@@ -833,7 +895,10 @@ function saveConfig(config) {
833
895
  t.useWorktree ? 1 : 0,
834
896
  t.createdAt,
835
897
  t.updatedAt,
836
- t.completedAt ?? null
898
+ t.completedAt ?? null,
899
+ t.sourceConnectorId ?? null,
900
+ t.sourceExternalUrl ?? null,
901
+ t.sourceExternalId ?? null
837
902
  );
838
903
  }
839
904
  d.prepare("DELETE FROM workspaces").run();
@@ -870,8 +935,8 @@ function dbGetTask(id) {
870
935
  }
871
936
  function dbInsertTask(task) {
872
937
  getDb().prepare(
873
- `INSERT INTO tasks (id, project_name, title, description, status, "order", assigned_session_id, assigned_agent, agent_session_id, branch, use_worktree, created_at, updated_at, completed_at)
874
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
938
+ `INSERT INTO tasks (id, project_name, title, description, status, "order", assigned_session_id, assigned_agent, agent_session_id, branch, use_worktree, created_at, updated_at, completed_at, source_connector_id, source_external_url, source_external_id)
939
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
875
940
  ).run(
876
941
  task.id,
877
942
  task.projectName,
@@ -886,7 +951,10 @@ function dbInsertTask(task) {
886
951
  task.useWorktree ? 1 : 0,
887
952
  task.createdAt,
888
953
  task.updatedAt,
889
- task.completedAt ?? null
954
+ task.completedAt ?? null,
955
+ task.sourceConnectorId ?? null,
956
+ task.sourceExternalUrl ?? null,
957
+ task.sourceExternalId ?? null
890
958
  );
891
959
  }
892
960
  function dbUpdateTask(id, updates) {
@@ -936,6 +1004,18 @@ function dbUpdateTask(id, updates) {
936
1004
  sets.push("completed_at = ?");
937
1005
  params.push(updates.completedAt ?? null);
938
1006
  }
1007
+ if (updates.sourceConnectorId !== void 0) {
1008
+ sets.push("source_connector_id = ?");
1009
+ params.push(updates.sourceConnectorId);
1010
+ }
1011
+ if (updates.sourceExternalUrl !== void 0) {
1012
+ sets.push("source_external_url = ?");
1013
+ params.push(updates.sourceExternalUrl);
1014
+ }
1015
+ if (updates.sourceExternalId !== void 0) {
1016
+ sets.push("source_external_id = ?");
1017
+ params.push(updates.sourceExternalId);
1018
+ }
939
1019
  if (sets.length === 0) return;
940
1020
  params.push(id);
941
1021
  getDb().prepare(`UPDATE tasks SET ${sets.join(", ")} WHERE id = ?`).run(...params);
@@ -1129,7 +1209,12 @@ function rowToTask(r) {
1129
1209
  ...r.use_worktree != null && r.use_worktree !== 0 && { useWorktree: true },
1130
1210
  createdAt: r.created_at,
1131
1211
  updatedAt: r.updated_at,
1132
- ...r.completed_at != null && { completedAt: r.completed_at }
1212
+ ...r.completed_at != null && { completedAt: r.completed_at },
1213
+ ...r.source_connector_id != null && { sourceConnectorId: r.source_connector_id },
1214
+ ...r.source_external_url != null && { sourceExternalUrl: r.source_external_url },
1215
+ ...r.source_external_id != null && {
1216
+ sourceExternalId: r.source_external_id
1217
+ }
1133
1218
  };
1134
1219
  }
1135
1220
  function rowToProject(r) {
@@ -2614,7 +2699,7 @@ console.warn = (...args) => _origError("[mcp:warn]", ...args);
2614
2699
  console.error = (...args) => _origError("[mcp:error]", ...args);
2615
2700
  async function main() {
2616
2701
  configManager.init();
2617
- const version = true ? "0.2.0-beta.2" : createRequire(import.meta.url)("../package.json").version;
2702
+ const version = true ? "0.2.0-beta.4" : createRequire(import.meta.url)("../package.json").version;
2618
2703
  const server = createMcpServer(version);
2619
2704
  const transport = new StdioServerTransport();
2620
2705
  await server.connect(transport);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vornrun/mcp",
3
- "version": "0.2.0-beta.2",
3
+ "version": "0.2.0-beta.4",
4
4
  "description": "Vorn MCP server — task management, git, and workflow tools for AI coding agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -42,6 +42,6 @@
42
42
  "@vornrun/shared": "0.1.2",
43
43
  "tsup": "^8.5.1",
44
44
  "tsx": "^4.21.0",
45
- "typescript": "^6.0.2"
45
+ "typescript": "^6.0.3"
46
46
  }
47
47
  }