@vibecheckai/cli 3.2.6 → 3.3.0
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/bin/registry.js +192 -5
- package/bin/runners/lib/agent-firewall/change-packet/builder.js +280 -6
- package/bin/runners/lib/agent-firewall/critic/index.js +151 -0
- package/bin/runners/lib/agent-firewall/critic/judge.js +432 -0
- package/bin/runners/lib/agent-firewall/critic/prompts.js +305 -0
- package/bin/runners/lib/agent-firewall/lawbook/distributor.js +465 -0
- package/bin/runners/lib/agent-firewall/lawbook/evaluator.js +604 -0
- package/bin/runners/lib/agent-firewall/lawbook/index.js +304 -0
- package/bin/runners/lib/agent-firewall/lawbook/registry.js +514 -0
- package/bin/runners/lib/agent-firewall/lawbook/schema.js +420 -0
- package/bin/runners/lib/agent-firewall/logger.js +141 -0
- package/bin/runners/lib/agent-firewall/policy/loader.js +312 -4
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-env.js +113 -1
- package/bin/runners/lib/agent-firewall/policy/rules/ghost-route.js +133 -6
- package/bin/runners/lib/agent-firewall/proposal/extractor.js +394 -0
- package/bin/runners/lib/agent-firewall/proposal/index.js +212 -0
- package/bin/runners/lib/agent-firewall/proposal/schema.js +251 -0
- package/bin/runners/lib/agent-firewall/proposal/validator.js +386 -0
- package/bin/runners/lib/agent-firewall/reality/index.js +332 -0
- package/bin/runners/lib/agent-firewall/reality/state.js +625 -0
- package/bin/runners/lib/agent-firewall/reality/watcher.js +322 -0
- package/bin/runners/lib/agent-firewall/risk/index.js +173 -0
- package/bin/runners/lib/agent-firewall/risk/scorer.js +328 -0
- package/bin/runners/lib/agent-firewall/risk/thresholds.js +321 -0
- package/bin/runners/lib/agent-firewall/risk/vectors.js +421 -0
- package/bin/runners/lib/agent-firewall/simulator/diff-simulator.js +472 -0
- package/bin/runners/lib/agent-firewall/simulator/import-resolver.js +346 -0
- package/bin/runners/lib/agent-firewall/simulator/index.js +181 -0
- package/bin/runners/lib/agent-firewall/simulator/route-validator.js +380 -0
- package/bin/runners/lib/agent-firewall/time-machine/incident-correlator.js +661 -0
- package/bin/runners/lib/agent-firewall/time-machine/index.js +267 -0
- package/bin/runners/lib/agent-firewall/time-machine/replay-engine.js +436 -0
- package/bin/runners/lib/agent-firewall/time-machine/state-reconstructor.js +490 -0
- package/bin/runners/lib/agent-firewall/time-machine/timeline-builder.js +530 -0
- package/bin/runners/lib/analyzers.js +81 -18
- package/bin/runners/lib/authority-badge.js +425 -0
- package/bin/runners/lib/cli-output.js +7 -1
- package/bin/runners/lib/error-handler.js +16 -9
- package/bin/runners/lib/exit-codes.js +275 -0
- package/bin/runners/lib/global-flags.js +37 -0
- package/bin/runners/lib/help-formatter.js +413 -0
- package/bin/runners/lib/logger.js +38 -0
- package/bin/runners/lib/unified-cli-output.js +604 -0
- package/bin/runners/lib/upsell.js +148 -0
- package/bin/runners/runApprove.js +1200 -0
- package/bin/runners/runAuth.js +324 -95
- package/bin/runners/runCheckpoint.js +39 -21
- package/bin/runners/runClassify.js +859 -0
- package/bin/runners/runContext.js +136 -24
- package/bin/runners/runDoctor.js +108 -68
- package/bin/runners/runFix.js +6 -5
- package/bin/runners/runGuard.js +212 -118
- package/bin/runners/runInit.js +3 -2
- package/bin/runners/runMcp.js +130 -52
- package/bin/runners/runPolish.js +43 -20
- package/bin/runners/runProve.js +1 -2
- package/bin/runners/runReport.js +3 -2
- package/bin/runners/runScan.js +63 -44
- package/bin/runners/runShip.js +3 -4
- package/bin/runners/runValidate.js +19 -2
- package/bin/runners/runWatch.js +104 -53
- package/bin/vibecheck.js +106 -19
- package/mcp-server/HARDENING_SUMMARY.md +299 -0
- package/mcp-server/agent-firewall-interceptor.js +367 -31
- package/mcp-server/authority-tools.js +569 -0
- package/mcp-server/conductor/conflict-resolver.js +588 -0
- package/mcp-server/conductor/execution-planner.js +544 -0
- package/mcp-server/conductor/index.js +377 -0
- package/mcp-server/conductor/lock-manager.js +615 -0
- package/mcp-server/conductor/request-queue.js +550 -0
- package/mcp-server/conductor/session-manager.js +500 -0
- package/mcp-server/conductor/tools.js +510 -0
- package/mcp-server/index.js +1149 -243
- package/mcp-server/lib/{api-client.js → api-client.cjs} +40 -4
- package/mcp-server/lib/logger.cjs +30 -0
- package/mcp-server/logger.js +173 -0
- package/mcp-server/package.json +2 -2
- package/mcp-server/premium-tools.js +2 -2
- package/mcp-server/tier-auth.js +245 -35
- package/mcp-server/truth-firewall-tools.js +145 -15
- package/mcp-server/vibecheck-tools.js +2 -2
- package/package.json +2 -3
- package/mcp-server/index.old.js +0 -4137
- package/mcp-server/package-lock.json +0 -165
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lawbook Module
|
|
3
|
+
*
|
|
4
|
+
* Org-Wide Invariant Libraries
|
|
5
|
+
* Formalize and enforce tribal rules across an organization.
|
|
6
|
+
*
|
|
7
|
+
* Codename: Lawbook
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
"use strict";
|
|
11
|
+
|
|
12
|
+
const fs = require("fs");
|
|
13
|
+
const path = require("path");
|
|
14
|
+
const { lawbookLogger: log, getErrorMessage } = require("../logger.js");
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
INVARIANT_TYPES,
|
|
18
|
+
INVARIANT_SEVERITY,
|
|
19
|
+
LAWBOOK_FILE_SCHEMA,
|
|
20
|
+
validateInvariant,
|
|
21
|
+
parseLawbook,
|
|
22
|
+
serializeLawbook,
|
|
23
|
+
createDefaultLawbook,
|
|
24
|
+
createInvariantTemplate,
|
|
25
|
+
} = require("./schema.js");
|
|
26
|
+
|
|
27
|
+
const {
|
|
28
|
+
InvariantEvaluator,
|
|
29
|
+
createEvaluator,
|
|
30
|
+
} = require("./evaluator.js");
|
|
31
|
+
|
|
32
|
+
const {
|
|
33
|
+
LawbookDistributor,
|
|
34
|
+
createDistributor,
|
|
35
|
+
MERGE_STRATEGIES,
|
|
36
|
+
} = require("./distributor.js");
|
|
37
|
+
|
|
38
|
+
const {
|
|
39
|
+
LawbookRegistry,
|
|
40
|
+
createRegistry,
|
|
41
|
+
INDUSTRY_TEMPLATES,
|
|
42
|
+
} = require("./registry.js");
|
|
43
|
+
|
|
44
|
+
// Default lawbook path
|
|
45
|
+
const DEFAULT_LAWBOOK_PATH = ".vibecheck/invariants.yaml";
|
|
46
|
+
const LEGACY_LAWBOOK_PATH = ".vibecheck/lawbook.yaml";
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Lawbook singleton for managing invariants
|
|
50
|
+
*/
|
|
51
|
+
class Lawbook {
|
|
52
|
+
constructor() {
|
|
53
|
+
this.evaluator = null;
|
|
54
|
+
this.projectRoot = null;
|
|
55
|
+
this.lawbookPath = null;
|
|
56
|
+
this.loaded = false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Initialize the lawbook for a project
|
|
61
|
+
* @param {string} projectRoot - Project root directory
|
|
62
|
+
* @returns {Lawbook} This instance
|
|
63
|
+
*/
|
|
64
|
+
init(projectRoot) {
|
|
65
|
+
this.projectRoot = projectRoot;
|
|
66
|
+
this.evaluator = createEvaluator({ projectRoot });
|
|
67
|
+
|
|
68
|
+
// Try to load existing lawbook
|
|
69
|
+
this.load();
|
|
70
|
+
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Load lawbook from disk
|
|
76
|
+
* @param {string} customPath - Optional custom path
|
|
77
|
+
* @returns {boolean} Success
|
|
78
|
+
*/
|
|
79
|
+
load(customPath = null) {
|
|
80
|
+
const paths = customPath
|
|
81
|
+
? [customPath]
|
|
82
|
+
: [
|
|
83
|
+
path.join(this.projectRoot, DEFAULT_LAWBOOK_PATH),
|
|
84
|
+
path.join(this.projectRoot, LEGACY_LAWBOOK_PATH),
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
for (const lawbookPath of paths) {
|
|
88
|
+
if (fs.existsSync(lawbookPath)) {
|
|
89
|
+
try {
|
|
90
|
+
const content = fs.readFileSync(lawbookPath, "utf-8");
|
|
91
|
+
const lawbook = parseLawbook(content);
|
|
92
|
+
|
|
93
|
+
this.evaluator.clear();
|
|
94
|
+
this.evaluator.loadLawbook(lawbook);
|
|
95
|
+
this.lawbookPath = lawbookPath;
|
|
96
|
+
this.loaded = true;
|
|
97
|
+
|
|
98
|
+
return true;
|
|
99
|
+
} catch (error) {
|
|
100
|
+
log.warn(`Failed to load lawbook from ${lawbookPath}: ${getErrorMessage(error)}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
this.loaded = false;
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Save current invariants to disk
|
|
111
|
+
* @param {string} customPath - Optional custom path
|
|
112
|
+
* @returns {boolean} Success
|
|
113
|
+
*/
|
|
114
|
+
save(customPath = null) {
|
|
115
|
+
const savePath = customPath || this.lawbookPath || path.join(this.projectRoot, DEFAULT_LAWBOOK_PATH);
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
const dir = path.dirname(savePath);
|
|
119
|
+
if (!fs.existsSync(dir)) {
|
|
120
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const lawbook = {
|
|
124
|
+
version: "1.0.0",
|
|
125
|
+
name: "project-invariants",
|
|
126
|
+
invariants: this.evaluator.getInvariants(),
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const content = serializeLawbook(lawbook);
|
|
130
|
+
fs.writeFileSync(savePath, content);
|
|
131
|
+
|
|
132
|
+
this.lawbookPath = savePath;
|
|
133
|
+
return true;
|
|
134
|
+
} catch (error) {
|
|
135
|
+
log.error(`Failed to save lawbook: ${getErrorMessage(error)}`);
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Evaluate a proposal against all invariants
|
|
142
|
+
* @param {Object} proposal - Change proposal
|
|
143
|
+
* @returns {Object} Evaluation result
|
|
144
|
+
*/
|
|
145
|
+
evaluate(proposal) {
|
|
146
|
+
if (!this.evaluator) {
|
|
147
|
+
return {
|
|
148
|
+
passed: true,
|
|
149
|
+
violations: [],
|
|
150
|
+
summary: { total: 0, block: 0, error: 0, warning: 0, info: 0 },
|
|
151
|
+
message: "No lawbook loaded",
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return this.evaluator.evaluate(proposal);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Add an invariant
|
|
160
|
+
* @param {Object} invariant - Invariant to add
|
|
161
|
+
* @returns {boolean} Success
|
|
162
|
+
*/
|
|
163
|
+
addInvariant(invariant) {
|
|
164
|
+
if (!this.evaluator) {
|
|
165
|
+
throw new Error("Lawbook not initialized");
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
this.evaluator.addInvariant(invariant);
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Remove an invariant by ID
|
|
174
|
+
* @param {string} id - Invariant ID
|
|
175
|
+
* @returns {boolean} Success
|
|
176
|
+
*/
|
|
177
|
+
removeInvariant(id) {
|
|
178
|
+
if (!this.evaluator) return false;
|
|
179
|
+
return this.evaluator.removeInvariant(id);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Get an invariant by ID
|
|
184
|
+
* @param {string} id - Invariant ID
|
|
185
|
+
* @returns {Object|null} Invariant or null
|
|
186
|
+
*/
|
|
187
|
+
getInvariant(id) {
|
|
188
|
+
if (!this.evaluator) return null;
|
|
189
|
+
return this.evaluator.getInvariant(id);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Get all invariants
|
|
194
|
+
* @returns {Object[]} All invariants
|
|
195
|
+
*/
|
|
196
|
+
getInvariants() {
|
|
197
|
+
if (!this.evaluator) return [];
|
|
198
|
+
return this.evaluator.getInvariants();
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Create a new invariant from template
|
|
203
|
+
* @param {string} id - Invariant ID
|
|
204
|
+
* @param {string} rule - Rule type
|
|
205
|
+
* @returns {Object} New invariant template
|
|
206
|
+
*/
|
|
207
|
+
createTemplate(id, rule) {
|
|
208
|
+
return createInvariantTemplate(id, rule);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Initialize with default lawbook if none exists
|
|
213
|
+
* @param {string} name - Lawbook name
|
|
214
|
+
* @returns {boolean} Created
|
|
215
|
+
*/
|
|
216
|
+
initDefault(name = "project-invariants") {
|
|
217
|
+
const defaultPath = path.join(this.projectRoot, DEFAULT_LAWBOOK_PATH);
|
|
218
|
+
|
|
219
|
+
if (fs.existsSync(defaultPath)) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const lawbook = createDefaultLawbook(name);
|
|
224
|
+
|
|
225
|
+
try {
|
|
226
|
+
const dir = path.dirname(defaultPath);
|
|
227
|
+
if (!fs.existsSync(dir)) {
|
|
228
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const content = serializeLawbook(lawbook);
|
|
232
|
+
fs.writeFileSync(defaultPath, content);
|
|
233
|
+
|
|
234
|
+
this.evaluator.loadLawbook(lawbook);
|
|
235
|
+
this.lawbookPath = defaultPath;
|
|
236
|
+
this.loaded = true;
|
|
237
|
+
|
|
238
|
+
return true;
|
|
239
|
+
} catch (error) {
|
|
240
|
+
log.error(`Failed to create default lawbook: ${getErrorMessage(error)}`);
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Check if lawbook is loaded
|
|
247
|
+
* @returns {boolean} Is loaded
|
|
248
|
+
*/
|
|
249
|
+
isLoaded() {
|
|
250
|
+
return this.loaded;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Get lawbook statistics
|
|
255
|
+
* @returns {Object} Statistics
|
|
256
|
+
*/
|
|
257
|
+
getStatistics() {
|
|
258
|
+
const invariants = this.getInvariants();
|
|
259
|
+
|
|
260
|
+
const byRule = {};
|
|
261
|
+
const bySeverity = {};
|
|
262
|
+
|
|
263
|
+
for (const inv of invariants) {
|
|
264
|
+
byRule[inv.rule] = (byRule[inv.rule] || 0) + 1;
|
|
265
|
+
bySeverity[inv.severity || "error"] = (bySeverity[inv.severity || "error"] || 0) + 1;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
total: invariants.length,
|
|
270
|
+
loaded: this.loaded,
|
|
271
|
+
path: this.lawbookPath,
|
|
272
|
+
byRule,
|
|
273
|
+
bySeverity,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Singleton instance
|
|
279
|
+
const lawbook = new Lawbook();
|
|
280
|
+
|
|
281
|
+
module.exports = {
|
|
282
|
+
lawbook,
|
|
283
|
+
Lawbook,
|
|
284
|
+
// Schema exports
|
|
285
|
+
INVARIANT_TYPES,
|
|
286
|
+
INVARIANT_SEVERITY,
|
|
287
|
+
LAWBOOK_FILE_SCHEMA,
|
|
288
|
+
validateInvariant,
|
|
289
|
+
parseLawbook,
|
|
290
|
+
serializeLawbook,
|
|
291
|
+
createDefaultLawbook,
|
|
292
|
+
createInvariantTemplate,
|
|
293
|
+
// Evaluator exports
|
|
294
|
+
InvariantEvaluator,
|
|
295
|
+
createEvaluator,
|
|
296
|
+
// Distributor exports
|
|
297
|
+
LawbookDistributor,
|
|
298
|
+
createDistributor,
|
|
299
|
+
MERGE_STRATEGIES,
|
|
300
|
+
// Registry exports
|
|
301
|
+
LawbookRegistry,
|
|
302
|
+
createRegistry,
|
|
303
|
+
INDUSTRY_TEMPLATES,
|
|
304
|
+
};
|