@jigyasudham/veto 2.1.2 → 2.6.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/.mcp-tools/LICENSE +216 -0
- package/.mcp-tools/README.md +153 -0
- package/.mcp-tools/mcp-publisher.exe +0 -0
- package/LAUNCH-KIT.md +226 -0
- package/README.md +106 -14
- package/VETO-MCP-DIAGNOSTIC.md +73 -0
- package/dist/agents/security/dep-verify.d.ts +23 -0
- package/dist/agents/security/dep-verify.d.ts.map +1 -0
- package/dist/agents/security/dep-verify.js +229 -0
- package/dist/agents/security/dep-verify.js.map +1 -0
- package/dist/cli/statusline.d.ts +31 -0
- package/dist/cli/statusline.d.ts.map +1 -0
- package/dist/cli/statusline.js +307 -0
- package/dist/cli/statusline.js.map +1 -0
- package/dist/cli.js +63 -5
- package/dist/cli.js.map +1 -1
- package/dist/council/decision-engine.d.ts.map +1 -1
- package/dist/council/decision-engine.js +11 -2
- package/dist/council/decision-engine.js.map +1 -1
- package/dist/council/lead-developer.js +2 -2
- package/dist/council/lead-developer.js.map +1 -1
- package/dist/council/product-manager.js +2 -2
- package/dist/council/product-manager.js.map +1 -1
- package/dist/council/security.js +2 -2
- package/dist/council/security.js.map +1 -1
- package/dist/council/ux-designer.js +2 -2
- package/dist/council/ux-designer.js.map +1 -1
- package/dist/memory/config.d.ts +1 -0
- package/dist/memory/config.d.ts.map +1 -1
- package/dist/memory/config.js +6 -2
- package/dist/memory/config.js.map +1 -1
- package/dist/memory/decisions.d.ts +33 -0
- package/dist/memory/decisions.d.ts.map +1 -0
- package/dist/memory/decisions.js +125 -0
- package/dist/memory/decisions.js.map +1 -0
- package/dist/memory/local.d.ts +7 -0
- package/dist/memory/local.d.ts.map +1 -1
- package/dist/memory/local.js +17 -1
- package/dist/memory/local.js.map +1 -1
- package/dist/memory/schema.d.ts +2 -1
- package/dist/memory/schema.d.ts.map +1 -1
- package/dist/memory/schema.js +30 -0
- package/dist/memory/schema.js.map +1 -1
- package/dist/router/implicit-outcomes.d.ts +7 -0
- package/dist/router/implicit-outcomes.d.ts.map +1 -0
- package/dist/router/implicit-outcomes.js +88 -0
- package/dist/router/implicit-outcomes.js.map +1 -0
- package/dist/router/learning-updater.d.ts.map +1 -1
- package/dist/router/learning-updater.js +15 -6
- package/dist/router/learning-updater.js.map +1 -1
- package/dist/router/model-selector.d.ts.map +1 -1
- package/dist/router/model-selector.js +33 -5
- package/dist/router/model-selector.js.map +1 -1
- package/dist/router/rate-monitor.d.ts +1 -0
- package/dist/router/rate-monitor.d.ts.map +1 -1
- package/dist/router/rate-monitor.js +1 -0
- package/dist/router/rate-monitor.js.map +1 -1
- package/dist/server/handlers/advisors.d.ts.map +1 -1
- package/dist/server/handlers/advisors.js +214 -0
- package/dist/server/handlers/advisors.js.map +1 -1
- package/dist/server/handlers/devtools.d.ts.map +1 -1
- package/dist/server/handlers/devtools.js +20 -3
- package/dist/server/handlers/devtools.js.map +1 -1
- package/dist/server/handlers/learning.d.ts.map +1 -1
- package/dist/server/handlers/learning.js +15 -0
- package/dist/server/handlers/learning.js.map +1 -1
- package/dist/server/handlers/memory.d.ts.map +1 -1
- package/dist/server/handlers/memory.js +47 -0
- package/dist/server/handlers/memory.js.map +1 -1
- package/dist/server/handlers/observability.d.ts.map +1 -1
- package/dist/server/handlers/observability.js +60 -1
- package/dist/server/handlers/observability.js.map +1 -1
- package/dist/server/handlers/review.d.ts.map +1 -1
- package/dist/server/handlers/review.js +22 -4
- package/dist/server/handlers/review.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +95 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/compact.d.ts +12 -0
- package/dist/tools/compact.d.ts.map +1 -0
- package/dist/tools/compact.js +98 -0
- package/dist/tools/compact.js.map +1 -0
- package/dist/tools/definitions.d.ts +111 -2
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +62 -3
- package/dist/tools/definitions.js.map +1 -1
- package/package.json +2 -2
- package/server.json +3 -3
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Mines quality signals from the tool-call trace log so the learning loop gets
|
|
2
|
+
// feedback without the host AI manually calling veto_record_outcome. Handlers
|
|
3
|
+
// already record optimistic outcomes at call time; what they can't see is
|
|
4
|
+
// failure after the fact. Two negative signals are mined here:
|
|
5
|
+
// errors — a traced call that returned an error result
|
|
6
|
+
// retries — the same analysis tool re-run in the same session within a short
|
|
7
|
+
// window, which usually means the first answer didn't satisfy
|
|
8
|
+
// A watermark in the patterns table keeps mining incremental and idempotent.
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { getDb } from '../memory/local.js';
|
|
11
|
+
import { recordOutcome } from './learning-updater.js';
|
|
12
|
+
const WATERMARK_KEY = 'learning.mine_watermark';
|
|
13
|
+
const RETRY_WINDOW_MS = 10 * 60 * 1000;
|
|
14
|
+
const ERROR_QUALITY = 30;
|
|
15
|
+
const RETRY_QUALITY = 55;
|
|
16
|
+
const BATCH_LIMIT = 500;
|
|
17
|
+
// Only agent-backed analysis tools, where an error or a rapid re-run reflects
|
|
18
|
+
// on the agent's output quality. Status/memory/session tools are excluded —
|
|
19
|
+
// they are legitimately called repeatedly.
|
|
20
|
+
const TOOL_AGENT_MAP = {
|
|
21
|
+
veto_code_review: 'reviewer',
|
|
22
|
+
veto_diff_review: 'reviewer',
|
|
23
|
+
veto_full_review: 'code-quality',
|
|
24
|
+
veto_security_scan: 'security-scanner',
|
|
25
|
+
veto_secrets_scan: 'secrets',
|
|
26
|
+
veto_council_debate: 'council',
|
|
27
|
+
veto_rca: 'debugger',
|
|
28
|
+
veto_dead_code: 'code-quality',
|
|
29
|
+
veto_dep_advisor: 'dependency-audit',
|
|
30
|
+
veto_test_gaps: 'tester',
|
|
31
|
+
veto_clone_detector: 'code-quality',
|
|
32
|
+
};
|
|
33
|
+
export function mineImplicitOutcomes() {
|
|
34
|
+
const db = getDb();
|
|
35
|
+
const toolNames = Object.keys(TOOL_AGENT_MAP);
|
|
36
|
+
const wmRow = db.prepare('SELECT pattern_val FROM patterns WHERE pattern_key = ?').get(WATERMARK_KEY);
|
|
37
|
+
const since = wmRow?.pattern_val ?? '1970-01-01 00:00:00';
|
|
38
|
+
const placeholders = toolNames.map(() => '?').join(',');
|
|
39
|
+
const rows = db.prepare(`SELECT id, session_id, tool_name, result_status, recorded_at
|
|
40
|
+
FROM tool_call_trace_log
|
|
41
|
+
WHERE recorded_at > ? AND tool_name IN (${placeholders})
|
|
42
|
+
ORDER BY recorded_at ASC
|
|
43
|
+
LIMIT ${BATCH_LIMIT}`).all(since, ...toolNames);
|
|
44
|
+
if (rows.length === 0)
|
|
45
|
+
return { mined: 0, errors: 0, retries: 0 };
|
|
46
|
+
let errors = 0;
|
|
47
|
+
let retries = 0;
|
|
48
|
+
// Error signal — every traced failure of an agent-backed tool.
|
|
49
|
+
for (const row of rows) {
|
|
50
|
+
if (row.result_status === 'error') {
|
|
51
|
+
recordOutcome(row.tool_name, 50, 2, TOOL_AGENT_MAP[row.tool_name], ERROR_QUALITY);
|
|
52
|
+
errors++;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Retry signal — successive successful runs of the same tool in the same
|
|
56
|
+
// session inside the window: every run except the last gets marked down.
|
|
57
|
+
const groups = new Map();
|
|
58
|
+
for (const row of rows) {
|
|
59
|
+
if (row.result_status !== 'success')
|
|
60
|
+
continue;
|
|
61
|
+
const key = `${row.session_id ?? 'no-session'}::${row.tool_name}`;
|
|
62
|
+
const group = groups.get(key) ?? [];
|
|
63
|
+
group.push(row);
|
|
64
|
+
groups.set(key, group);
|
|
65
|
+
}
|
|
66
|
+
for (const group of groups.values()) {
|
|
67
|
+
for (let i = 0; i < group.length - 1; i++) {
|
|
68
|
+
const gap = new Date(group[i + 1].recorded_at + 'Z').getTime() - new Date(group[i].recorded_at + 'Z').getTime();
|
|
69
|
+
if (gap >= 0 && gap <= RETRY_WINDOW_MS) {
|
|
70
|
+
recordOutcome(group[i].tool_name, 50, 2, TOOL_AGENT_MAP[group[i].tool_name], RETRY_QUALITY);
|
|
71
|
+
retries++;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Advance the watermark to the newest processed row.
|
|
76
|
+
const newest = rows[rows.length - 1].recorded_at;
|
|
77
|
+
const now = new Date().toISOString();
|
|
78
|
+
const existing = db.prepare('SELECT id FROM patterns WHERE pattern_key = ?').get(WATERMARK_KEY);
|
|
79
|
+
if (existing) {
|
|
80
|
+
db.prepare('UPDATE patterns SET pattern_val = ?, updated_at = ? WHERE pattern_key = ?').run(newest, now, WATERMARK_KEY);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
db.prepare('INSERT INTO patterns (id, pattern_key, pattern_val, confidence, seen_count, updated_at) VALUES (?, ?, ?, 1, 1, ?)')
|
|
84
|
+
.run(randomUUID(), WATERMARK_KEY, newest, now);
|
|
85
|
+
}
|
|
86
|
+
return { mined: errors + retries, errors, retries };
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=implicit-outcomes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implicit-outcomes.js","sourceRoot":"","sources":["../../src/router/implicit-outcomes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-updater.d.ts","sourceRoot":"","sources":["../../src/router/learning-updater.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,oBAAoB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAIF,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EACpB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,UAAU,SAAI,EACd,OAAO,CAAC,EAAE,MAAM,GACf;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"learning-updater.d.ts","sourceRoot":"","sources":["../../src/router/learning-updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,11 +31,17 @@ export function recordOutcome(taskType, complexity, modelTier, agent, outputQual
|
|
|
31
31
|
}
|
|
32
32
|
// Auto-apply learned thresholds every 20 outcomes (default on; disable via
|
|
33
33
|
// config auto_apply_learning=false). Closes the learning loop so no manual
|
|
34
|
-
// veto_learning_apply is required.
|
|
34
|
+
// veto_learning_apply is required. A watermark (count at last apply) is used
|
|
35
|
+
// instead of `total % 20` — the modulo never fires when the DB already held
|
|
36
|
+
// outcomes before this feature existed, or after a manual apply desyncs the cadence.
|
|
35
37
|
const total = db.prepare('SELECT COUNT(*) as c FROM learning_data').get().c;
|
|
36
38
|
let auto_applied = false;
|
|
37
|
-
if (total >= 20 &&
|
|
38
|
-
|
|
39
|
+
if (total >= 20 && getConfig().auto_apply_learning !== false) {
|
|
40
|
+
const row = db.prepare('SELECT pattern_val FROM patterns WHERE pattern_key = ?').get('router.last_apply_count');
|
|
41
|
+
const lastApplied = row ? parseInt(row.pattern_val, 10) : 0;
|
|
42
|
+
if (total - lastApplied >= 20) {
|
|
43
|
+
auto_applied = applyLearnedThresholds().applied;
|
|
44
|
+
}
|
|
39
45
|
}
|
|
40
46
|
return { auto_applied, total };
|
|
41
47
|
}
|
|
@@ -201,12 +207,14 @@ export function applyLearnedThresholds() {
|
|
|
201
207
|
}
|
|
202
208
|
const stats = getLearningStats();
|
|
203
209
|
const { tier1_max, tier2_max } = stats.suggested_thresholds;
|
|
204
|
-
// Persist to patterns table so the router picks them up on next call
|
|
210
|
+
// Persist to patterns table so the router picks them up on next call.
|
|
211
|
+
// seen_count tracks data_points at apply time; the watermark key records
|
|
212
|
+
// the outcome count so recordOutcome knows when 20 new outcomes have landed.
|
|
205
213
|
const now = new Date().toISOString();
|
|
206
|
-
for (const [key, val] of [['router.tier1_max', String(tier1_max)], ['router.tier2_max', String(tier2_max)]]) {
|
|
214
|
+
for (const [key, val] of [['router.tier1_max', String(tier1_max)], ['router.tier2_max', String(tier2_max)], ['router.last_apply_count', String(total)]]) {
|
|
207
215
|
const existing = db.prepare('SELECT id FROM patterns WHERE pattern_key = ?').get(key);
|
|
208
216
|
if (existing) {
|
|
209
|
-
db.prepare('UPDATE patterns SET pattern_val = ?, updated_at = ? WHERE pattern_key = ?').run(val, now, key);
|
|
217
|
+
db.prepare('UPDATE patterns SET pattern_val = ?, seen_count = ?, updated_at = ? WHERE pattern_key = ?').run(val, total, now, key);
|
|
210
218
|
}
|
|
211
219
|
else {
|
|
212
220
|
db.prepare('INSERT INTO patterns (id, pattern_key, pattern_val, confidence, seen_count, updated_at) VALUES (?, ?, ?, ?, ?, ?)')
|
|
@@ -293,6 +301,7 @@ export function resetRoutingFeedback() {
|
|
|
293
301
|
const fbResult = db.prepare('DELETE FROM routing_feedback').run();
|
|
294
302
|
const t1 = db.prepare("DELETE FROM patterns WHERE pattern_key = 'router.tier1_max'").run();
|
|
295
303
|
const t2 = db.prepare("DELETE FROM patterns WHERE pattern_key = 'router.tier2_max'").run();
|
|
304
|
+
db.prepare("DELETE FROM patterns WHERE pattern_key = 'router.last_apply_count'").run();
|
|
296
305
|
return { deleted_feedback: fbResult.changes, reset_thresholds: t1.changes > 0 || t2.changes > 0 };
|
|
297
306
|
}
|
|
298
307
|
export function listRoutingFeedback(limit = 20) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learning-updater.js","sourceRoot":"","sources":["../../src/router/learning-updater.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"learning-updater.js","sourceRoot":"","sources":["../../src/router/learning-updater.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../src/router/model-selector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-selector.d.ts","sourceRoot":"","sources":["../../src/router/model-selector.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,SAAS,GAEjB,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,GAC1D,gBAAgB,GAAG,iBAAiB,GAAG,eAAe,GAEtD,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,eAAe,GAE9D,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,UAAU,GAEtE,SAAS,CAAC;AAEd,MAAM,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7B,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAiDF,wBAAgB,WAAW,CACzB,eAAe,EAAE,MAAM,EACvB,SAAS,GAAE,SAAqB,EAChC,SAAS,GAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GAClE,mBAAmB,CA4BrB"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
// Assigns Tier 1/2/3 and specific model recommendations
|
|
2
2
|
// Some agents are permanently locked to a tier regardless of complexity score
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
3
6
|
const TIER3_LOCKED = new Set([
|
|
4
7
|
'lead-developer', 'system-architect', 'security-scanner',
|
|
5
8
|
'devil-advocate', 'decision-engine', 'risk-assessor',
|
|
@@ -10,11 +13,36 @@ const TIER2_LOCKED = new Set([
|
|
|
10
13
|
const TIER1_LOCKED = new Set([
|
|
11
14
|
'file-manager', 'git-agent', 'search-agent', 'secrets', 'reporter',
|
|
12
15
|
]);
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
// Bundled defaults (current as of June 2026). Model names rot fast — any of
|
|
17
|
+
// these can be overridden per-tier via ~/.veto/models.json without waiting
|
|
18
|
+
// for a package update, e.g. { "3": { "gemini": "gemini-3.5-pro" } }.
|
|
19
|
+
const DEFAULT_TIER_MODELS = {
|
|
20
|
+
1: { claude: 'claude-haiku-4-5', gemini: 'gemini-3.5-flash', codex: 'gpt-5.1-codex-mini' },
|
|
21
|
+
2: { claude: 'claude-sonnet-4-6', gemini: 'gemini-3.5-flash', codex: 'gpt-5.1-codex' },
|
|
22
|
+
3: { claude: 'claude-opus-4-8', gemini: 'gemini-3-pro', codex: 'gpt-5.1' },
|
|
17
23
|
};
|
|
24
|
+
const MODELS_PATH = join(homedir(), '.veto', 'models.json');
|
|
25
|
+
let cachedTierModels = null;
|
|
26
|
+
function getTierModels() {
|
|
27
|
+
if (cachedTierModels)
|
|
28
|
+
return cachedTierModels;
|
|
29
|
+
let models = DEFAULT_TIER_MODELS;
|
|
30
|
+
if (existsSync(MODELS_PATH)) {
|
|
31
|
+
try {
|
|
32
|
+
const raw = JSON.parse(readFileSync(MODELS_PATH, 'utf8'));
|
|
33
|
+
models = {
|
|
34
|
+
1: { ...DEFAULT_TIER_MODELS[1], ...raw['1'] },
|
|
35
|
+
2: { ...DEFAULT_TIER_MODELS[2], ...raw['2'] },
|
|
36
|
+
3: { ...DEFAULT_TIER_MODELS[3], ...raw['3'] },
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Malformed override file — fall back to bundled defaults
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
cachedTierModels = models;
|
|
44
|
+
return models;
|
|
45
|
+
}
|
|
18
46
|
export function selectModel(complexityScore, agentType = 'dynamic', overrides = {}) {
|
|
19
47
|
let tier;
|
|
20
48
|
let agent_locked = true;
|
|
@@ -31,7 +59,7 @@ export function selectModel(complexityScore, agentType = 'dynamic', overrides =
|
|
|
31
59
|
tier = complexityScore <= 30 ? 1 : complexityScore <= 70 ? 2 : 3;
|
|
32
60
|
agent_locked = false;
|
|
33
61
|
}
|
|
34
|
-
const models = { ...
|
|
62
|
+
const models = { ...getTierModels()[tier] };
|
|
35
63
|
const reason = agent_locked
|
|
36
64
|
? `${agentType} is locked to Tier ${tier}`
|
|
37
65
|
: `Complexity score ${complexityScore}/100 assigned to Tier ${tier}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selector.js","sourceRoot":"","sources":["../../src/router/model-selector.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,8EAA8E;
|
|
1
|
+
{"version":3,"file":"model-selector.js","sourceRoot":"","sources":["../../src/router/model-selector.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export type RateStatus = {
|
|
|
14
14
|
codex: RateLimitEntry;
|
|
15
15
|
antigravity: RateLimitEntry;
|
|
16
16
|
updated_at: string;
|
|
17
|
+
budget_source: string;
|
|
17
18
|
};
|
|
18
19
|
export declare function trackRequest(platform: Platform, count?: number): void;
|
|
19
20
|
export declare function trackTokens(platform: Platform, tokens: number): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-monitor.d.ts","sourceRoot":"","sources":["../../src/router/rate-monitor.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-monitor.d.ts","sourceRoot":"","sources":["../../src/router/rate-monitor.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;AAErE,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,cAAc,CAAC;IACtB,WAAW,EAAE,cAAc,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAaF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,SAAI,GAAG,IAAI,CAehE;AAID,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBpE;AA6BD,wBAAgB,aAAa,IAAI,UAAU,CAS1C;AAGD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAa9D"}
|
|
@@ -72,6 +72,7 @@ export function getRateStatus() {
|
|
|
72
72
|
codex: buildEntry('codex'),
|
|
73
73
|
antigravity: buildEntry('antigravity'),
|
|
74
74
|
updated_at: new Date().toISOString(),
|
|
75
|
+
budget_source: 'Budgets are local planning estimates (set in ~/.veto/config.json), not provider quotas. Token counts come from the host AI\'s self-reports.',
|
|
75
76
|
};
|
|
76
77
|
}
|
|
77
78
|
// Returns a fallback platform when the preferred one is at warning/critical level
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-monitor.js","sourceRoot":"","sources":["../../src/router/rate-monitor.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,iFAAiF;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-monitor.js","sourceRoot":"","sources":["../../src/router/rate-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"advisors.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/advisors.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"advisors.d.ts","sourceRoot":"","sources":["../../../src/server/handlers/advisors.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKjD,eAAO,MAAM,eAAe,EAAE,UAkjB7B,CAAC"}
|
|
@@ -9,7 +9,34 @@ import { execSync } from 'node:child_process';
|
|
|
9
9
|
import { executeOne } from '../../agents/executor.js';
|
|
10
10
|
import { recordOutcome } from '../../router/index.js';
|
|
11
11
|
import { buildContextString } from '../../context/reader.js';
|
|
12
|
+
import { verifyPackages } from '../../agents/security/dep-verify.js';
|
|
13
|
+
import { getSessionReplay, listSessions } from '../../memory/local.js';
|
|
14
|
+
import { autoSave } from '../runtime.js';
|
|
12
15
|
export const advisorHandlers = {
|
|
16
|
+
veto_dep_verify: async ({ args }) => {
|
|
17
|
+
const names = Array.isArray(args?.packages) ? args.packages.map(String).map((s) => s.trim()).filter(Boolean) : [];
|
|
18
|
+
if (names.length === 0) {
|
|
19
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'packages (non-empty array of names) is required.' }) }], isError: true };
|
|
20
|
+
}
|
|
21
|
+
if (names.length > 30) {
|
|
22
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'Max 30 packages per call.' }) }], isError: true };
|
|
23
|
+
}
|
|
24
|
+
const eco = String(args?.ecosystem ?? 'npm');
|
|
25
|
+
if (!['npm', 'pypi', 'crates'].includes(eco)) {
|
|
26
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: false, message: "ecosystem must be 'npm', 'pypi', or 'crates'." }) }], isError: true };
|
|
27
|
+
}
|
|
28
|
+
const results = await verifyPackages(names, eco);
|
|
29
|
+
const counts = {};
|
|
30
|
+
for (const r of results)
|
|
31
|
+
counts[r.verdict] = (counts[r.verdict] ?? 0) + 1;
|
|
32
|
+
const worst = results.some(r => r.verdict === 'not_found' || r.verdict === 'high_risk') ? 'BLOCK' :
|
|
33
|
+
results.some(r => r.verdict === 'caution' || r.verdict === 'unverifiable') ? 'REVIEW' : 'CLEAR';
|
|
34
|
+
const guidance = worst === 'BLOCK' ? 'Do not install the flagged packages. not_found = likely hallucinated name (and a slopsquatting target); high_risk = squat-profile package.' :
|
|
35
|
+
worst === 'REVIEW' ? 'Installable, but review the flagged signals first.' :
|
|
36
|
+
'All packages verified against the registry.';
|
|
37
|
+
recordOutcome('dep_verify', 40, 2, 'dependency-audit', results.some(r => r.verdict === 'unverifiable') ? 60 : 90);
|
|
38
|
+
return { content: [{ type: 'text', text: JSON.stringify({ success: true, ecosystem: eco, overall: worst, guidance, counts, results }, null, 2) }] };
|
|
39
|
+
},
|
|
13
40
|
veto_dep_advisor: async ({ args }) => {
|
|
14
41
|
const projectDir = String(args?.project_dir ?? '').trim();
|
|
15
42
|
let ecosystem = String(args?.ecosystem ?? 'auto');
|
|
@@ -327,5 +354,192 @@ export const advisorHandlers = {
|
|
|
327
354
|
council_note: 'Run veto_council_debate before removing any flags to assess downstream risk.',
|
|
328
355
|
}, null, 2) }] };
|
|
329
356
|
},
|
|
357
|
+
veto_drift_check: async ({ args }) => {
|
|
358
|
+
let sessionId = args?.session_id ? String(args.session_id).trim() : null;
|
|
359
|
+
if (!sessionId) {
|
|
360
|
+
sessionId = autoSave.last_session_id;
|
|
361
|
+
}
|
|
362
|
+
if (!sessionId) {
|
|
363
|
+
const recent = listSessions(1);
|
|
364
|
+
if (recent.length > 0)
|
|
365
|
+
sessionId = recent[0].id;
|
|
366
|
+
}
|
|
367
|
+
if (!sessionId) {
|
|
368
|
+
return {
|
|
369
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, message: 'No active or saved sessions found. Save a session first.' }, null, 2) }],
|
|
370
|
+
isError: true
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
const limit = typeof args?.limit === 'number' ? Math.max(1, args.limit) : 50;
|
|
374
|
+
const projectDir = args?.project_dir ? String(args.project_dir).trim() : undefined;
|
|
375
|
+
const allTraces = getSessionReplay(sessionId);
|
|
376
|
+
const traces = allTraces.slice(-limit);
|
|
377
|
+
const total_calls = traces.length;
|
|
378
|
+
const failed_calls = traces.filter(t => t.result_status === 'error').length;
|
|
379
|
+
const error_rate = total_calls > 0 ? Math.round((failed_calls / total_calls) * 100) : 0;
|
|
380
|
+
// Consecutive failures (from the end)
|
|
381
|
+
let consecutive_failures = 0;
|
|
382
|
+
for (let i = traces.length - 1; i >= 0; i--) {
|
|
383
|
+
if (traces[i].result_status === 'error') {
|
|
384
|
+
consecutive_failures++;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// Repeated error messages
|
|
391
|
+
const errorCounts = {};
|
|
392
|
+
for (const t of traces) {
|
|
393
|
+
if (t.result_status === 'error' && t.error_message) {
|
|
394
|
+
const msg = t.error_message.trim();
|
|
395
|
+
errorCounts[msg] = (errorCounts[msg] ?? 0) + 1;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
const repeated_errors = Object.entries(errorCounts)
|
|
399
|
+
.map(([error_message, count]) => ({ error_message, count }))
|
|
400
|
+
.filter(item => item.count >= 2)
|
|
401
|
+
.sort((a, b) => b.count - a.count);
|
|
402
|
+
// Tool repetition and max consecutive tool calls
|
|
403
|
+
const toolCounts = {};
|
|
404
|
+
let max_consecutive_tool = '';
|
|
405
|
+
let max_consecutive_tool_count = 0;
|
|
406
|
+
let current_tool = '';
|
|
407
|
+
let current_consecutive_count = 0;
|
|
408
|
+
for (const t of traces) {
|
|
409
|
+
toolCounts[t.tool_name] = (toolCounts[t.tool_name] ?? 0) + 1;
|
|
410
|
+
if (t.tool_name === current_tool) {
|
|
411
|
+
current_consecutive_count++;
|
|
412
|
+
}
|
|
413
|
+
else {
|
|
414
|
+
if (current_consecutive_count > max_consecutive_tool_count) {
|
|
415
|
+
max_consecutive_tool_count = current_consecutive_count;
|
|
416
|
+
max_consecutive_tool = current_tool;
|
|
417
|
+
}
|
|
418
|
+
current_tool = t.tool_name;
|
|
419
|
+
current_consecutive_count = 1;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (current_consecutive_count > max_consecutive_tool_count) {
|
|
423
|
+
max_consecutive_tool_count = current_consecutive_count;
|
|
424
|
+
max_consecutive_tool = current_tool;
|
|
425
|
+
}
|
|
426
|
+
const repeated_tools = Object.entries(toolCounts)
|
|
427
|
+
.map(([tool_name, count]) => ({ tool_name, count }))
|
|
428
|
+
.filter(item => item.count >= 3)
|
|
429
|
+
.sort((a, b) => b.count - a.count);
|
|
430
|
+
// Command repetition check
|
|
431
|
+
const commandCounts = {};
|
|
432
|
+
for (const t of traces) {
|
|
433
|
+
if (t.tool_name === 'run_command' && t.args_json) {
|
|
434
|
+
try {
|
|
435
|
+
const parsed = JSON.parse(t.args_json);
|
|
436
|
+
const cmd = String(parsed.CommandLine ?? '').trim();
|
|
437
|
+
if (cmd) {
|
|
438
|
+
commandCounts[cmd] = (commandCounts[cmd] ?? 0) + 1;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
catch { /* skip */ }
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
const repeated_commands = Object.entries(commandCounts)
|
|
445
|
+
.map(([command, count]) => ({ command, count }))
|
|
446
|
+
.filter(item => item.count >= 2)
|
|
447
|
+
.sort((a, b) => b.count - a.count);
|
|
448
|
+
// Loop detection flag
|
|
449
|
+
const hasRepeatedError = repeated_errors.some(e => e.count >= 3);
|
|
450
|
+
const hasRepeatedCommand = repeated_commands.some(c => c.count >= 3);
|
|
451
|
+
const loop_detected = consecutive_failures >= 3 || hasRepeatedError || hasRepeatedCommand || max_consecutive_tool_count >= 4;
|
|
452
|
+
// Determine verdict
|
|
453
|
+
let verdict = 'GREEN';
|
|
454
|
+
if (consecutive_failures >= 5 || repeated_errors.some(e => e.count >= 4) || max_consecutive_tool_count >= 5) {
|
|
455
|
+
verdict = 'RED';
|
|
456
|
+
}
|
|
457
|
+
else if (consecutive_failures >= 3 || repeated_errors.some(e => e.count >= 2) || max_consecutive_tool_count >= 3) {
|
|
458
|
+
verdict = 'YELLOW';
|
|
459
|
+
}
|
|
460
|
+
let agentOut = '';
|
|
461
|
+
let recommendations = 'No compounding-error loops detected. Proceed with your current task.';
|
|
462
|
+
if (loop_detected || verdict !== 'GREEN' || total_calls > 0) {
|
|
463
|
+
const formattedTraces = traces.map(t => {
|
|
464
|
+
let cmdStr = '';
|
|
465
|
+
if (t.tool_name === 'run_command' && t.args_json) {
|
|
466
|
+
try {
|
|
467
|
+
cmdStr = ` (cmd: ${JSON.parse(t.args_json).CommandLine})`;
|
|
468
|
+
}
|
|
469
|
+
catch { }
|
|
470
|
+
}
|
|
471
|
+
return `- ${t.recorded_at.slice(11, 19)}: ${t.tool_name}${cmdStr} -> ${t.result_status.toUpperCase()}${t.error_message ? ` (error: ${t.error_message})` : ''}`;
|
|
472
|
+
}).join('\n');
|
|
473
|
+
const analysisPayload = {
|
|
474
|
+
session_id: sessionId,
|
|
475
|
+
heuristics: {
|
|
476
|
+
total_calls,
|
|
477
|
+
failed_calls,
|
|
478
|
+
error_rate_pct: error_rate,
|
|
479
|
+
consecutive_failures,
|
|
480
|
+
max_consecutive_tool: max_consecutive_tool ? `${max_consecutive_tool} (${max_consecutive_tool_count}x)` : 'none',
|
|
481
|
+
repeated_errors,
|
|
482
|
+
repeated_tools,
|
|
483
|
+
repeated_commands,
|
|
484
|
+
},
|
|
485
|
+
recent_timeline: formattedTraces,
|
|
486
|
+
};
|
|
487
|
+
const agentResult = await executeOne({
|
|
488
|
+
id: `drift-${Date.now().toString(36)}`,
|
|
489
|
+
agent: 'debugger',
|
|
490
|
+
task: `The AI coding assistant is verifying its session for compounding errors or loops. Analyze this trace. Under 'Remediation Plan', list 2-3 specific actions the AI should take to break the loop (e.g. read a specific file, check for syntax errors, check if a mock server is down, revert a commit).`,
|
|
491
|
+
code: JSON.stringify(analysisPayload, null, 2),
|
|
492
|
+
project_dir: projectDir,
|
|
493
|
+
});
|
|
494
|
+
agentOut = agentResult.plan?.approach ?? agentResult.output.recommendation ?? '';
|
|
495
|
+
recommendations = agentOut;
|
|
496
|
+
}
|
|
497
|
+
recordOutcome('drift_check', 30, 2, 'debugger', verdict === 'RED' ? 30 : verdict === 'YELLOW' ? 60 : 95);
|
|
498
|
+
const verdictEmoji = verdict === 'RED' ? '🔴 RED' : verdict === 'YELLOW' ? '🟡 YELLOW' : '🟢 GREEN';
|
|
499
|
+
const formatted = [
|
|
500
|
+
`## 🔄 Compounding-Error Circuit Breaker (Drift Check)`,
|
|
501
|
+
``,
|
|
502
|
+
`**Verdict:** ${verdictEmoji}`,
|
|
503
|
+
`**Session ID:** \`${sessionId}\``,
|
|
504
|
+
``,
|
|
505
|
+
`### Heuristics Snapshot`,
|
|
506
|
+
`- Total tool calls checked: ${total_calls}`,
|
|
507
|
+
`- Consecutive failures: ${consecutive_failures}`,
|
|
508
|
+
`- Error rate: ${error_rate}%`,
|
|
509
|
+
max_consecutive_tool ? `- Max consecutive tool calls: ${max_consecutive_tool} (${max_consecutive_tool_count}x)` : '',
|
|
510
|
+
``,
|
|
511
|
+
`### Loop Indicators`,
|
|
512
|
+
`- Repeated errors: ${repeated_errors.length === 0 ? 'None' : repeated_errors.map(e => `\`${e.error_message}\` (${e.count}x)`).join(', ')}`,
|
|
513
|
+
`- Repeated tools: ${repeated_tools.length === 0 ? 'None' : repeated_tools.map(t => `\`${t.tool_name}\` (${t.count}x)`).join(', ')}`,
|
|
514
|
+
`- Repeated commands: ${repeated_commands.length === 0 ? 'None' : repeated_commands.map(c => `\`${c.command}\` (${c.count}x)`).join(', ')}`,
|
|
515
|
+
``,
|
|
516
|
+
`### 🛠️ Remediation Recommendations`,
|
|
517
|
+
recommendations,
|
|
518
|
+
].filter(l => l !== '').join('\n');
|
|
519
|
+
return {
|
|
520
|
+
content: [{
|
|
521
|
+
type: 'text',
|
|
522
|
+
text: JSON.stringify({
|
|
523
|
+
success: true,
|
|
524
|
+
session_id: sessionId,
|
|
525
|
+
verdict,
|
|
526
|
+
loop_detected,
|
|
527
|
+
heuristics: {
|
|
528
|
+
total_calls,
|
|
529
|
+
failed_calls,
|
|
530
|
+
error_rate,
|
|
531
|
+
consecutive_failures,
|
|
532
|
+
max_consecutive_tool: max_consecutive_tool || null,
|
|
533
|
+
max_consecutive_tool_count,
|
|
534
|
+
repeated_errors,
|
|
535
|
+
repeated_tools,
|
|
536
|
+
repeated_commands,
|
|
537
|
+
},
|
|
538
|
+
remediation_plan: agentOut || null,
|
|
539
|
+
formatted_report: formatted,
|
|
540
|
+
}, null, 2),
|
|
541
|
+
}],
|
|
542
|
+
};
|
|
543
|
+
},
|
|
330
544
|
};
|
|
331
545
|
//# sourceMappingURL=advisors.js.map
|