@vibecheckai/cli 3.4.0 → 3.5.1

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 (228) hide show
  1. package/bin/registry.js +154 -338
  2. package/bin/runners/context/generators/mcp.js +13 -15
  3. package/bin/runners/context/proof-context.js +1 -248
  4. package/bin/runners/lib/analysis-core.js +180 -198
  5. package/bin/runners/lib/analyzers.js +223 -1669
  6. package/bin/runners/lib/cli-output.js +210 -242
  7. package/bin/runners/lib/detectors-v2.js +785 -547
  8. package/bin/runners/lib/entitlements-v2.js +458 -96
  9. package/bin/runners/lib/error-handler.js +9 -16
  10. package/bin/runners/lib/global-flags.js +0 -37
  11. package/bin/runners/lib/route-truth.js +322 -1167
  12. package/bin/runners/lib/scan-output.js +469 -448
  13. package/bin/runners/lib/ship-output.js +27 -280
  14. package/bin/runners/lib/terminal-ui.js +733 -231
  15. package/bin/runners/lib/truth.js +321 -1004
  16. package/bin/runners/lib/unified-output.js +158 -162
  17. package/bin/runners/lib/upsell.js +204 -104
  18. package/bin/runners/runAllowlist.js +324 -0
  19. package/bin/runners/runAuth.js +95 -324
  20. package/bin/runners/runCheckpoint.js +21 -39
  21. package/bin/runners/runContext.js +24 -136
  22. package/bin/runners/runDoctor.js +67 -115
  23. package/bin/runners/runEvidencePack.js +219 -0
  24. package/bin/runners/runFix.js +5 -6
  25. package/bin/runners/runGuard.js +118 -212
  26. package/bin/runners/runInit.js +2 -14
  27. package/bin/runners/runInstall.js +281 -0
  28. package/bin/runners/runLabs.js +341 -0
  29. package/bin/runners/runMcp.js +52 -130
  30. package/bin/runners/runPolish.js +20 -43
  31. package/bin/runners/runProve.js +3 -13
  32. package/bin/runners/runReality.js +0 -14
  33. package/bin/runners/runReport.js +2 -3
  34. package/bin/runners/runScan.js +44 -511
  35. package/bin/runners/runShip.js +14 -28
  36. package/bin/runners/runValidate.js +2 -19
  37. package/bin/runners/runWatch.js +54 -118
  38. package/bin/vibecheck.js +41 -148
  39. package/mcp-server/ARCHITECTURE.md +339 -0
  40. package/mcp-server/__tests__/cache.test.ts +313 -0
  41. package/mcp-server/__tests__/executor.test.ts +239 -0
  42. package/mcp-server/__tests__/fixtures/exclusion-test/.cache/webpack/cache.pack +1 -0
  43. package/mcp-server/__tests__/fixtures/exclusion-test/.next/server/chunk.js +3 -0
  44. package/mcp-server/__tests__/fixtures/exclusion-test/.turbo/cache.json +3 -0
  45. package/mcp-server/__tests__/fixtures/exclusion-test/.venv/lib/env.py +3 -0
  46. package/mcp-server/__tests__/fixtures/exclusion-test/dist/bundle.js +3 -0
  47. package/mcp-server/__tests__/fixtures/exclusion-test/package.json +5 -0
  48. package/mcp-server/__tests__/fixtures/exclusion-test/src/app.ts +5 -0
  49. package/mcp-server/__tests__/fixtures/exclusion-test/venv/lib/config.py +4 -0
  50. package/mcp-server/__tests__/ids.test.ts +345 -0
  51. package/mcp-server/__tests__/integration/tools.test.ts +410 -0
  52. package/mcp-server/__tests__/registry.test.ts +365 -0
  53. package/mcp-server/__tests__/sandbox.test.ts +323 -0
  54. package/mcp-server/__tests__/schemas.test.ts +372 -0
  55. package/mcp-server/benchmarks/run-benchmarks.ts +304 -0
  56. package/mcp-server/examples/doctor.request.json +14 -0
  57. package/mcp-server/examples/doctor.response.json +53 -0
  58. package/mcp-server/examples/error.response.json +15 -0
  59. package/mcp-server/examples/scan.request.json +14 -0
  60. package/mcp-server/examples/scan.response.json +108 -0
  61. package/mcp-server/handlers/tool-handler.ts +671 -0
  62. package/mcp-server/index-v3.ts +293 -0
  63. package/mcp-server/index.js +1072 -1573
  64. package/mcp-server/index.old.js +4137 -0
  65. package/mcp-server/lib/cache.ts +341 -0
  66. package/mcp-server/lib/errors.ts +346 -0
  67. package/mcp-server/lib/executor.ts +792 -0
  68. package/mcp-server/lib/ids.ts +238 -0
  69. package/mcp-server/lib/logger.ts +368 -0
  70. package/mcp-server/lib/metrics.ts +365 -0
  71. package/mcp-server/lib/sandbox.ts +337 -0
  72. package/mcp-server/lib/validator.ts +229 -0
  73. package/mcp-server/package-lock.json +165 -0
  74. package/mcp-server/package.json +32 -7
  75. package/mcp-server/premium-tools.js +2 -2
  76. package/mcp-server/registry/tools.json +476 -0
  77. package/mcp-server/schemas/error-envelope.schema.json +125 -0
  78. package/mcp-server/schemas/finding.schema.json +167 -0
  79. package/mcp-server/schemas/report-artifact.schema.json +88 -0
  80. package/mcp-server/schemas/run-request.schema.json +75 -0
  81. package/mcp-server/schemas/verdict.schema.json +168 -0
  82. package/mcp-server/tier-auth.d.ts +71 -0
  83. package/mcp-server/tier-auth.js +371 -183
  84. package/mcp-server/truth-context.js +90 -131
  85. package/mcp-server/truth-firewall-tools.js +1000 -1611
  86. package/mcp-server/tsconfig.json +34 -0
  87. package/mcp-server/vibecheck-tools.js +2 -2
  88. package/mcp-server/vitest.config.ts +16 -0
  89. package/package.json +3 -4
  90. package/bin/runners/lib/agent-firewall/ai/false-positive-analyzer.js +0 -474
  91. package/bin/runners/lib/agent-firewall/change-packet/builder.js +0 -488
  92. package/bin/runners/lib/agent-firewall/change-packet/schema.json +0 -228
  93. package/bin/runners/lib/agent-firewall/change-packet/store.js +0 -200
  94. package/bin/runners/lib/agent-firewall/claims/claim-types.js +0 -21
  95. package/bin/runners/lib/agent-firewall/claims/extractor.js +0 -303
  96. package/bin/runners/lib/agent-firewall/claims/patterns.js +0 -24
  97. package/bin/runners/lib/agent-firewall/critic/index.js +0 -151
  98. package/bin/runners/lib/agent-firewall/critic/judge.js +0 -432
  99. package/bin/runners/lib/agent-firewall/critic/prompts.js +0 -305
  100. package/bin/runners/lib/agent-firewall/evidence/auth-evidence.js +0 -88
  101. package/bin/runners/lib/agent-firewall/evidence/contract-evidence.js +0 -75
  102. package/bin/runners/lib/agent-firewall/evidence/env-evidence.js +0 -127
  103. package/bin/runners/lib/agent-firewall/evidence/resolver.js +0 -102
  104. package/bin/runners/lib/agent-firewall/evidence/route-evidence.js +0 -213
  105. package/bin/runners/lib/agent-firewall/evidence/side-effect-evidence.js +0 -145
  106. package/bin/runners/lib/agent-firewall/fs-hook/daemon.js +0 -19
  107. package/bin/runners/lib/agent-firewall/fs-hook/installer.js +0 -87
  108. package/bin/runners/lib/agent-firewall/fs-hook/watcher.js +0 -184
  109. package/bin/runners/lib/agent-firewall/git-hook/pre-commit.js +0 -163
  110. package/bin/runners/lib/agent-firewall/ide-extension/cursor.js +0 -107
  111. package/bin/runners/lib/agent-firewall/ide-extension/vscode.js +0 -68
  112. package/bin/runners/lib/agent-firewall/ide-extension/windsurf.js +0 -66
  113. package/bin/runners/lib/agent-firewall/interceptor/base.js +0 -304
  114. package/bin/runners/lib/agent-firewall/interceptor/cursor.js +0 -35
  115. package/bin/runners/lib/agent-firewall/interceptor/vscode.js +0 -35
  116. package/bin/runners/lib/agent-firewall/interceptor/windsurf.js +0 -34
  117. package/bin/runners/lib/agent-firewall/lawbook/distributor.js +0 -465
  118. package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +0 -604
  119. package/bin/runners/lib/agent-firewall/lawbook/index.js +0 -304
  120. package/bin/runners/lib/agent-firewall/lawbook/registry.js +0 -514
  121. package/bin/runners/lib/agent-firewall/lawbook/schema.js +0 -420
  122. package/bin/runners/lib/agent-firewall/logger.js +0 -141
  123. package/bin/runners/lib/agent-firewall/policy/default-policy.json +0 -90
  124. package/bin/runners/lib/agent-firewall/policy/engine.js +0 -103
  125. package/bin/runners/lib/agent-firewall/policy/loader.js +0 -451
  126. package/bin/runners/lib/agent-firewall/policy/rules/auth-drift.js +0 -50
  127. package/bin/runners/lib/agent-firewall/policy/rules/contract-drift.js +0 -50
  128. package/bin/runners/lib/agent-firewall/policy/rules/fake-success.js +0 -86
  129. package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +0 -162
  130. package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +0 -189
  131. package/bin/runners/lib/agent-firewall/policy/rules/scope.js +0 -93
  132. package/bin/runners/lib/agent-firewall/policy/rules/unsafe-side-effect.js +0 -57
  133. package/bin/runners/lib/agent-firewall/policy/schema.json +0 -183
  134. package/bin/runners/lib/agent-firewall/policy/verdict.js +0 -54
  135. package/bin/runners/lib/agent-firewall/proposal/extractor.js +0 -394
  136. package/bin/runners/lib/agent-firewall/proposal/index.js +0 -212
  137. package/bin/runners/lib/agent-firewall/proposal/schema.js +0 -251
  138. package/bin/runners/lib/agent-firewall/proposal/validator.js +0 -386
  139. package/bin/runners/lib/agent-firewall/reality/index.js +0 -332
  140. package/bin/runners/lib/agent-firewall/reality/state.js +0 -625
  141. package/bin/runners/lib/agent-firewall/reality/watcher.js +0 -322
  142. package/bin/runners/lib/agent-firewall/risk/index.js +0 -173
  143. package/bin/runners/lib/agent-firewall/risk/scorer.js +0 -328
  144. package/bin/runners/lib/agent-firewall/risk/thresholds.js +0 -321
  145. package/bin/runners/lib/agent-firewall/risk/vectors.js +0 -421
  146. package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +0 -472
  147. package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +0 -346
  148. package/bin/runners/lib/agent-firewall/simulator/index.js +0 -181
  149. package/bin/runners/lib/agent-firewall/simulator/route-validator.js +0 -380
  150. package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +0 -661
  151. package/bin/runners/lib/agent-firewall/time-machine/index.js +0 -267
  152. package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +0 -436
  153. package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +0 -490
  154. package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +0 -530
  155. package/bin/runners/lib/agent-firewall/truthpack/index.js +0 -67
  156. package/bin/runners/lib/agent-firewall/truthpack/loader.js +0 -137
  157. package/bin/runners/lib/agent-firewall/unblock/planner.js +0 -337
  158. package/bin/runners/lib/agent-firewall/utils/ignore-checker.js +0 -118
  159. package/bin/runners/lib/api-client.js +0 -269
  160. package/bin/runners/lib/authority-badge.js +0 -425
  161. package/bin/runners/lib/engines/accessibility-engine.js +0 -190
  162. package/bin/runners/lib/engines/api-consistency-engine.js +0 -162
  163. package/bin/runners/lib/engines/ast-cache.js +0 -99
  164. package/bin/runners/lib/engines/code-quality-engine.js +0 -255
  165. package/bin/runners/lib/engines/console-logs-engine.js +0 -115
  166. package/bin/runners/lib/engines/cross-file-analysis-engine.js +0 -268
  167. package/bin/runners/lib/engines/dead-code-engine.js +0 -198
  168. package/bin/runners/lib/engines/deprecated-api-engine.js +0 -226
  169. package/bin/runners/lib/engines/empty-catch-engine.js +0 -150
  170. package/bin/runners/lib/engines/file-filter.js +0 -131
  171. package/bin/runners/lib/engines/hardcoded-secrets-engine.js +0 -251
  172. package/bin/runners/lib/engines/mock-data-engine.js +0 -272
  173. package/bin/runners/lib/engines/parallel-processor.js +0 -71
  174. package/bin/runners/lib/engines/performance-issues-engine.js +0 -265
  175. package/bin/runners/lib/engines/security-vulnerabilities-engine.js +0 -243
  176. package/bin/runners/lib/engines/todo-fixme-engine.js +0 -115
  177. package/bin/runners/lib/engines/type-aware-engine.js +0 -152
  178. package/bin/runners/lib/engines/unsafe-regex-engine.js +0 -225
  179. package/bin/runners/lib/engines/vibecheck-engines/README.md +0 -53
  180. package/bin/runners/lib/engines/vibecheck-engines/index.js +0 -15
  181. package/bin/runners/lib/engines/vibecheck-engines/lib/ast-cache.js +0 -164
  182. package/bin/runners/lib/engines/vibecheck-engines/lib/code-quality-engine.js +0 -291
  183. package/bin/runners/lib/engines/vibecheck-engines/lib/console-logs-engine.js +0 -83
  184. package/bin/runners/lib/engines/vibecheck-engines/lib/dead-code-engine.js +0 -198
  185. package/bin/runners/lib/engines/vibecheck-engines/lib/deprecated-api-engine.js +0 -275
  186. package/bin/runners/lib/engines/vibecheck-engines/lib/empty-catch-engine.js +0 -167
  187. package/bin/runners/lib/engines/vibecheck-engines/lib/file-filter.js +0 -217
  188. package/bin/runners/lib/engines/vibecheck-engines/lib/hardcoded-secrets-engine.js +0 -139
  189. package/bin/runners/lib/engines/vibecheck-engines/lib/mock-data-engine.js +0 -140
  190. package/bin/runners/lib/engines/vibecheck-engines/lib/parallel-processor.js +0 -164
  191. package/bin/runners/lib/engines/vibecheck-engines/lib/performance-issues-engine.js +0 -234
  192. package/bin/runners/lib/engines/vibecheck-engines/lib/type-aware-engine.js +0 -217
  193. package/bin/runners/lib/engines/vibecheck-engines/lib/unsafe-regex-engine.js +0 -78
  194. package/bin/runners/lib/engines/vibecheck-engines/package.json +0 -13
  195. package/bin/runners/lib/exit-codes.js +0 -275
  196. package/bin/runners/lib/fingerprint.js +0 -377
  197. package/bin/runners/lib/help-formatter.js +0 -413
  198. package/bin/runners/lib/logger.js +0 -38
  199. package/bin/runners/lib/ship-output-enterprise.js +0 -239
  200. package/bin/runners/lib/unified-cli-output.js +0 -604
  201. package/bin/runners/runAgent.d.ts +0 -5
  202. package/bin/runners/runAgent.js +0 -161
  203. package/bin/runners/runApprove.js +0 -1200
  204. package/bin/runners/runClassify.js +0 -859
  205. package/bin/runners/runContext.d.ts +0 -4
  206. package/bin/runners/runFirewall.d.ts +0 -5
  207. package/bin/runners/runFirewall.js +0 -134
  208. package/bin/runners/runFirewallHook.d.ts +0 -5
  209. package/bin/runners/runFirewallHook.js +0 -56
  210. package/bin/runners/runPolish.d.ts +0 -4
  211. package/bin/runners/runProof.zip +0 -0
  212. package/bin/runners/runTruth.d.ts +0 -5
  213. package/bin/runners/runTruth.js +0 -101
  214. package/mcp-server/HARDENING_SUMMARY.md +0 -299
  215. package/mcp-server/agent-firewall-interceptor.js +0 -500
  216. package/mcp-server/authority-tools.js +0 -569
  217. package/mcp-server/conductor/conflict-resolver.js +0 -588
  218. package/mcp-server/conductor/execution-planner.js +0 -544
  219. package/mcp-server/conductor/index.js +0 -377
  220. package/mcp-server/conductor/lock-manager.js +0 -615
  221. package/mcp-server/conductor/request-queue.js +0 -550
  222. package/mcp-server/conductor/session-manager.js +0 -500
  223. package/mcp-server/conductor/tools.js +0 -510
  224. package/mcp-server/lib/api-client.cjs +0 -13
  225. package/mcp-server/lib/logger.cjs +0 -30
  226. package/mcp-server/logger.js +0 -173
  227. package/mcp-server/tools-v3.js +0 -706
  228. package/mcp-server/vibecheck-mcp-server-3.2.0.tgz +0 -0
@@ -1,510 +0,0 @@
1
- /**
2
- * Conductor MCP Tools
3
- *
4
- * MCP tool definitions for multi-agent coordination.
5
- *
6
- * Codename: Conductor
7
- */
8
-
9
- "use strict";
10
-
11
- import conductor from "./index.js";
12
-
13
- /**
14
- * Tool definitions for the Conductor module
15
- */
16
- export const CONDUCTOR_TOOLS = {
17
- // Register an agent session
18
- vibecheck_conductor_register: {
19
- name: "vibecheck_conductor_register",
20
- description: "Register an AI agent session for multi-agent coordination. Call this at the start of any multi-agent workflow.",
21
- inputSchema: {
22
- type: "object",
23
- properties: {
24
- agentId: {
25
- type: "string",
26
- description: "Unique identifier for the agent (e.g., 'cursor', 'copilot', 'custom-agent')",
27
- },
28
- tier: {
29
- type: "string",
30
- enum: ["FREE", "STARTER", "PRO", "ENTERPRISE"],
31
- default: "FREE",
32
- description: "User's subscription tier",
33
- },
34
- projectRoot: {
35
- type: "string",
36
- description: "Project root directory path",
37
- },
38
- workingFiles: {
39
- type: "array",
40
- items: { type: "string" },
41
- description: "Initial list of files this agent plans to work on",
42
- },
43
- },
44
- required: ["agentId", "projectRoot"],
45
- },
46
- },
47
-
48
- // Acquire a lock on a file or folder
49
- vibecheck_conductor_acquire_lock: {
50
- name: "vibecheck_conductor_acquire_lock",
51
- description: "Acquire a lock on a file or folder to prevent concurrent modifications by other agents.",
52
- inputSchema: {
53
- type: "object",
54
- properties: {
55
- sessionId: {
56
- type: "string",
57
- description: "Session ID from vibecheck_conductor_register",
58
- },
59
- path: {
60
- type: "string",
61
- description: "File or folder path to lock",
62
- },
63
- type: {
64
- type: "string",
65
- enum: ["exclusive", "shared"],
66
- default: "exclusive",
67
- description: "Lock type: 'exclusive' for write access, 'shared' for read access",
68
- },
69
- reason: {
70
- type: "string",
71
- description: "Reason for acquiring the lock",
72
- },
73
- },
74
- required: ["sessionId", "path"],
75
- },
76
- },
77
-
78
- // Release a lock
79
- vibecheck_conductor_release_lock: {
80
- name: "vibecheck_conductor_release_lock",
81
- description: "Release a previously acquired lock.",
82
- inputSchema: {
83
- type: "object",
84
- properties: {
85
- lockId: {
86
- type: "string",
87
- description: "Lock ID to release",
88
- },
89
- sessionId: {
90
- type: "string",
91
- description: "Session ID that owns the lock",
92
- },
93
- },
94
- required: ["lockId", "sessionId"],
95
- },
96
- },
97
-
98
- // Submit a coordinated proposal
99
- vibecheck_conductor_propose: {
100
- name: "vibecheck_conductor_propose",
101
- description: "Submit a change proposal for multi-agent coordination. Checks for conflicts with other agents.",
102
- inputSchema: {
103
- type: "object",
104
- properties: {
105
- sessionId: {
106
- type: "string",
107
- description: "Session ID from vibecheck_conductor_register",
108
- },
109
- proposalId: {
110
- type: "string",
111
- description: "Unique proposal ID",
112
- },
113
- intent: {
114
- type: "string",
115
- description: "What you intend to accomplish with this change",
116
- },
117
- operations: {
118
- type: "array",
119
- items: {
120
- type: "object",
121
- properties: {
122
- type: { type: "string", enum: ["create", "modify", "delete", "move"] },
123
- path: { type: "string" },
124
- content: { type: "string" },
125
- },
126
- },
127
- description: "List of file operations in this proposal",
128
- },
129
- assumptions: {
130
- type: "array",
131
- items: {
132
- type: "object",
133
- properties: {
134
- type: { type: "string" },
135
- target: { type: "string" },
136
- expectedValue: {},
137
- },
138
- },
139
- description: "Assumptions this proposal makes about the codebase",
140
- },
141
- projectRoot: {
142
- type: "string",
143
- description: "Project root directory",
144
- },
145
- },
146
- required: ["sessionId", "proposalId", "intent", "operations", "projectRoot"],
147
- },
148
- },
149
-
150
- // Get coordination status
151
- vibecheck_conductor_status: {
152
- name: "vibecheck_conductor_status",
153
- description: "Get the current status of multi-agent coordination including active sessions, locks, and conflicts.",
154
- inputSchema: {
155
- type: "object",
156
- properties: {
157
- projectRoot: {
158
- type: "string",
159
- description: "Project root directory",
160
- },
161
- includeDetails: {
162
- type: "boolean",
163
- default: false,
164
- description: "Include detailed information about each session and lock",
165
- },
166
- },
167
- required: ["projectRoot"],
168
- },
169
- },
170
-
171
- // Terminate a session
172
- vibecheck_conductor_terminate: {
173
- name: "vibecheck_conductor_terminate",
174
- description: "Terminate an agent session and release all its locks.",
175
- inputSchema: {
176
- type: "object",
177
- properties: {
178
- sessionId: {
179
- type: "string",
180
- description: "Session ID to terminate",
181
- },
182
- },
183
- required: ["sessionId"],
184
- },
185
- },
186
- };
187
-
188
- /**
189
- * Handle conductor register tool call
190
- */
191
- export async function handleConductorRegister(args, projectRoot) {
192
- try {
193
- // Input validation
194
- if (!args || typeof args !== 'object') {
195
- return { success: false, error: "Invalid arguments" };
196
- }
197
- if (!args.agentId || typeof args.agentId !== 'string') {
198
- return { success: false, error: "agentId is required and must be a string" };
199
- }
200
-
201
- const resolvedRoot = args.projectRoot || projectRoot;
202
- if (!resolvedRoot) {
203
- return { success: false, error: "projectRoot is required" };
204
- }
205
-
206
- conductor.init(resolvedRoot);
207
-
208
- const session = conductor.registerAgent({
209
- agentId: args.agentId,
210
- tier: args.tier || "FREE",
211
- projectRoot: resolvedRoot,
212
- workingFiles: Array.isArray(args.workingFiles) ? args.workingFiles : [],
213
- });
214
-
215
- return {
216
- success: true,
217
- sessionId: session.sessionId,
218
- agentId: session.agentId,
219
- tier: session.tier,
220
- trust: session.trust,
221
- message: `Agent '${args.agentId}' registered successfully`,
222
- };
223
- } catch (error) {
224
- return {
225
- success: false,
226
- error: getErrorMessage(error),
227
- };
228
- }
229
- }
230
-
231
- /**
232
- * Handle conductor acquire lock tool call
233
- */
234
- export async function handleConductorAcquireLock(args, projectRoot) {
235
- try {
236
- // Input validation
237
- if (!args?.sessionId || !args?.path) {
238
- return { success: false, error: "sessionId and path are required" };
239
- }
240
- if (!projectRoot) {
241
- return { success: false, error: "projectRoot context is required" };
242
- }
243
-
244
- conductor.init(projectRoot);
245
-
246
- const result = conductor.acquireLock({
247
- sessionId: args.sessionId,
248
- path: args.path,
249
- type: args.type || "exclusive",
250
- reason: args.reason || "",
251
- });
252
-
253
- if (result.acquired) {
254
- return {
255
- success: true,
256
- lockId: result.lock.lockId,
257
- path: result.lock.path,
258
- type: result.lock.type,
259
- expiresAt: result.lock.expiresAt,
260
- upgraded: result.upgraded || false,
261
- refreshed: result.refreshed || false,
262
- message: result.upgraded
263
- ? "Lock upgraded to exclusive"
264
- : result.refreshed
265
- ? "Lock refreshed"
266
- : "Lock acquired",
267
- };
268
- } else {
269
- return {
270
- success: false,
271
- conflict: true,
272
- blockedBy: result.conflictingLocks.map(l => ({
273
- lockId: l.lockId,
274
- agentId: l.agentId,
275
- sessionId: l.sessionId,
276
- path: l.path,
277
- reason: l.reason,
278
- })),
279
- message: result.message,
280
- };
281
- }
282
- } catch (error) {
283
- return {
284
- success: false,
285
- error: getErrorMessage(error),
286
- };
287
- }
288
- }
289
-
290
- /**
291
- * Handle conductor release lock tool call
292
- */
293
- export async function handleConductorReleaseLock(args, projectRoot) {
294
- try {
295
- // Input validation
296
- if (!args?.lockId || !args?.sessionId) {
297
- return { success: false, error: "lockId and sessionId are required" };
298
- }
299
- if (!projectRoot) {
300
- return { success: false, error: "projectRoot context is required" };
301
- }
302
-
303
- conductor.init(projectRoot);
304
-
305
- const success = conductor.releaseLock(args.lockId, args.sessionId);
306
-
307
- return {
308
- success,
309
- message: success ? "Lock released" : "Lock not found or not owned by session",
310
- };
311
- } catch (error) {
312
- return {
313
- success: false,
314
- error: getErrorMessage(error),
315
- };
316
- }
317
- }
318
-
319
- /**
320
- * Handle conductor propose tool call
321
- */
322
- export async function handleConductorPropose(args, projectRoot) {
323
- try {
324
- conductor.init(args.projectRoot || projectRoot);
325
-
326
- const session = conductor.sessionManager.getSession(args.sessionId);
327
- if (!session) {
328
- return {
329
- success: false,
330
- error: "Invalid or expired session. Please register first.",
331
- };
332
- }
333
-
334
- const proposal = {
335
- proposalId: args.proposalId,
336
- sessionId: args.sessionId,
337
- agentId: session.agentId,
338
- tier: session.tier,
339
- intent: args.intent,
340
- operations: args.operations || [],
341
- assumptions: args.assumptions || [],
342
- createdAt: new Date(),
343
- };
344
-
345
- const result = conductor.submitProposal(proposal);
346
-
347
- if (result.accepted) {
348
- // Update session with working files
349
- const files = proposal.operations.map(op => op.path).filter(Boolean);
350
- for (const file of files) {
351
- conductor.sessionManager.addWorkingFile(args.sessionId, file);
352
- }
353
-
354
- return {
355
- success: true,
356
- accepted: true,
357
- requestId: result.requestId,
358
- queuePosition: result.position,
359
- warnings: result.warnings.map(w => ({
360
- type: w.type,
361
- severity: w.severity,
362
- description: w.description,
363
- })),
364
- message: `Proposal accepted and queued at position ${result.position}`,
365
- };
366
- } else {
367
- return {
368
- success: false,
369
- accepted: false,
370
- conflicts: result.conflicts.map(c => ({
371
- type: c.type,
372
- severity: c.severity,
373
- description: c.description,
374
- conflictsWith: c.proposalA === args.proposalId ? c.proposalB : c.proposalA,
375
- })),
376
- message: "Proposal blocked by conflicts. Resolve conflicts before proceeding.",
377
- };
378
- }
379
- } catch (error) {
380
- return {
381
- success: false,
382
- error: getErrorMessage(error),
383
- };
384
- }
385
- }
386
-
387
- /**
388
- * Handle conductor status tool call
389
- */
390
- export async function handleConductorStatus(args, projectRoot) {
391
- try {
392
- const resolvedRoot = args?.projectRoot || projectRoot;
393
- if (!resolvedRoot) {
394
- return { success: false, error: "projectRoot is required" };
395
- }
396
-
397
- conductor.init(resolvedRoot);
398
-
399
- const status = conductor.getStatus(resolvedRoot);
400
-
401
- const response = {
402
- success: true,
403
- status: {
404
- totalSessions: status.sessions.totalSessions,
405
- activeAgents: status.sessions.activeAgents,
406
- totalLocks: status.locks.totalLocks,
407
- queueLength: status.queue.queueLength,
408
- processing: status.queue.processing,
409
- unresolvedConflicts: status.conflicts,
410
- deadlocks: status.deadlocks.length,
411
- },
412
- };
413
-
414
- if (args.includeDetails) {
415
- response.details = {
416
- agents: status.activeAgents,
417
- sessionsByTier: status.sessions.byTier,
418
- lockStats: status.locks,
419
- queueByTier: status.queue.byTier,
420
- };
421
-
422
- if (status.deadlocks.length > 0) {
423
- response.details.deadlocks = status.deadlocks;
424
- }
425
- }
426
-
427
- return response;
428
- } catch (error) {
429
- return {
430
- success: false,
431
- error: getErrorMessage(error),
432
- };
433
- }
434
- }
435
-
436
- /**
437
- * Handle conductor terminate tool call
438
- */
439
- export async function handleConductorTerminate(args, projectRoot) {
440
- try {
441
- // Input validation
442
- if (!args?.sessionId) {
443
- return { success: false, error: "sessionId is required" };
444
- }
445
- if (!projectRoot) {
446
- return { success: false, error: "projectRoot context is required" };
447
- }
448
-
449
- conductor.init(projectRoot);
450
-
451
- const result = conductor.terminateSession(args.sessionId);
452
-
453
- return {
454
- success: result.sessionTerminated,
455
- locksReleased: result.locksReleased,
456
- message: result.sessionTerminated
457
- ? `Session terminated, ${result.locksReleased} locks released`
458
- : "Session not found",
459
- };
460
- } catch (error) {
461
- return {
462
- success: false,
463
- error: getErrorMessage(error),
464
- };
465
- }
466
- }
467
-
468
- /**
469
- * Router for conductor tool calls
470
- */
471
- export async function handleConductorToolCall(toolName, args, projectRoot) {
472
- // Top-level safety guard
473
- try {
474
- if (!toolName || typeof toolName !== 'string') {
475
- return { success: false, error: "Invalid tool name" };
476
- }
477
-
478
- switch (toolName) {
479
- case "vibecheck_conductor_register":
480
- return handleConductorRegister(args, projectRoot);
481
- case "vibecheck_conductor_acquire_lock":
482
- return handleConductorAcquireLock(args, projectRoot);
483
- case "vibecheck_conductor_release_lock":
484
- return handleConductorReleaseLock(args, projectRoot);
485
- case "vibecheck_conductor_propose":
486
- return handleConductorPropose(args, projectRoot);
487
- case "vibecheck_conductor_status":
488
- return handleConductorStatus(args, projectRoot);
489
- case "vibecheck_conductor_terminate":
490
- return handleConductorTerminate(args, projectRoot);
491
- default:
492
- return {
493
- success: false,
494
- error: `Unknown conductor tool: ${toolName}`,
495
- };
496
- }
497
- } catch (error) {
498
- return {
499
- success: false,
500
- error: `Conductor error: ${getErrorMessage(error)}`,
501
- };
502
- }
503
- }
504
-
505
- /**
506
- * Get all conductor tool definitions
507
- */
508
- export function getConductorTools() {
509
- return Object.values(CONDUCTOR_TOOLS);
510
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * API Client - MCP Server Re-export
3
- *
4
- * This module re-exports from the canonical bin/runners/lib/api-client.js
5
- * DO NOT add implementation here.
6
- *
7
- * @see ../../../bin/runners/lib/api-client.js for the canonical implementation
8
- */
9
-
10
- "use strict";
11
-
12
- // Re-export everything from the canonical api-client
13
- module.exports = require('../../bin/runners/lib/api-client.js');
@@ -1,30 +0,0 @@
1
- /**
2
- * Simple logger for MCP server
3
- * Outputs to stderr to avoid interfering with MCP stdio protocol
4
- */
5
-
6
- "use strict";
7
-
8
- const DEBUG = process.env.VIBECHECK_DEBUG === "true" || process.env.DEBUG === "true";
9
-
10
- const logger = {
11
- debug(...args) {
12
- if (DEBUG) {
13
- console.error("[DEBUG]", ...args);
14
- }
15
- },
16
-
17
- info(...args) {
18
- console.error("[INFO]", ...args);
19
- },
20
-
21
- warn(...args) {
22
- console.error("[WARN]", ...args);
23
- },
24
-
25
- error(...args) {
26
- console.error("[ERROR]", ...args);
27
- },
28
- };
29
-
30
- module.exports = { logger };