decibel-tools-mcp 1.0.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/LICENSE +21 -0
- package/README.md +335 -0
- package/dist/agentic/compiler.d.ts +21 -0
- package/dist/agentic/compiler.d.ts.map +1 -0
- package/dist/agentic/compiler.js +267 -0
- package/dist/agentic/compiler.js.map +1 -0
- package/dist/agentic/golden.d.ts +25 -0
- package/dist/agentic/golden.d.ts.map +1 -0
- package/dist/agentic/golden.js +255 -0
- package/dist/agentic/golden.js.map +1 -0
- package/dist/agentic/index.d.ts +17 -0
- package/dist/agentic/index.d.ts.map +1 -0
- package/dist/agentic/index.js +153 -0
- package/dist/agentic/index.js.map +1 -0
- package/dist/agentic/linter.d.ts +20 -0
- package/dist/agentic/linter.d.ts.map +1 -0
- package/dist/agentic/linter.js +340 -0
- package/dist/agentic/linter.js.map +1 -0
- package/dist/agentic/renderer.d.ts +17 -0
- package/dist/agentic/renderer.d.ts.map +1 -0
- package/dist/agentic/renderer.js +277 -0
- package/dist/agentic/renderer.js.map +1 -0
- package/dist/agentic/types.d.ts +199 -0
- package/dist/agentic/types.d.ts.map +1 -0
- package/dist/agentic/types.js +8 -0
- package/dist/agentic/types.js.map +1 -0
- package/dist/architectAdrs.d.ts +19 -0
- package/dist/architectAdrs.d.ts.map +1 -0
- package/dist/architectAdrs.js +123 -0
- package/dist/architectAdrs.js.map +1 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/dataRoot.d.ts +45 -0
- package/dist/dataRoot.d.ts.map +1 -0
- package/dist/dataRoot.js +201 -0
- package/dist/dataRoot.js.map +1 -0
- package/dist/decibelPaths.d.ts +42 -0
- package/dist/decibelPaths.d.ts.map +1 -0
- package/dist/decibelPaths.js +150 -0
- package/dist/decibelPaths.js.map +1 -0
- package/dist/httpServer.d.ts +49 -0
- package/dist/httpServer.d.ts.map +1 -0
- package/dist/httpServer.js +1472 -0
- package/dist/httpServer.js.map +1 -0
- package/dist/lib/benchmark.d.ts +110 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +338 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/supabase.d.ts +123 -0
- package/dist/lib/supabase.d.ts.map +1 -0
- package/dist/lib/supabase.js +91 -0
- package/dist/lib/supabase.js.map +1 -0
- package/dist/projectPaths.d.ts +27 -0
- package/dist/projectPaths.d.ts.map +1 -0
- package/dist/projectPaths.js +86 -0
- package/dist/projectPaths.js.map +1 -0
- package/dist/projectRegistry.d.ts +97 -0
- package/dist/projectRegistry.d.ts.map +1 -0
- package/dist/projectRegistry.js +362 -0
- package/dist/projectRegistry.js.map +1 -0
- package/dist/sentinelIssues.d.ts +44 -0
- package/dist/sentinelIssues.d.ts.map +1 -0
- package/dist/sentinelIssues.js +213 -0
- package/dist/sentinelIssues.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +93 -0
- package/dist/server.js.map +1 -0
- package/dist/test.d.ts +7 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +77 -0
- package/dist/test.js.map +1 -0
- package/dist/tools/agentic/index.d.ts +7 -0
- package/dist/tools/agentic/index.d.ts.map +1 -0
- package/dist/tools/agentic/index.js +180 -0
- package/dist/tools/agentic/index.js.map +1 -0
- package/dist/tools/architect/index.d.ts +9 -0
- package/dist/tools/architect/index.d.ts.map +1 -0
- package/dist/tools/architect/index.js +383 -0
- package/dist/tools/architect/index.js.map +1 -0
- package/dist/tools/architect.d.ts +19 -0
- package/dist/tools/architect.d.ts.map +1 -0
- package/dist/tools/architect.js +88 -0
- package/dist/tools/architect.js.map +1 -0
- package/dist/tools/bench.d.ts +89 -0
- package/dist/tools/bench.d.ts.map +1 -0
- package/dist/tools/bench.js +826 -0
- package/dist/tools/bench.js.map +1 -0
- package/dist/tools/context/index.d.ts +11 -0
- package/dist/tools/context/index.d.ts.map +1 -0
- package/dist/tools/context/index.js +439 -0
- package/dist/tools/context/index.js.map +1 -0
- package/dist/tools/context.d.ts +146 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +481 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/crit.d.ts +63 -0
- package/dist/tools/crit.d.ts.map +1 -0
- package/dist/tools/crit.js +159 -0
- package/dist/tools/crit.js.map +1 -0
- package/dist/tools/data-inspector.d.ts +188 -0
- package/dist/tools/data-inspector.d.ts.map +1 -0
- package/dist/tools/data-inspector.js +650 -0
- package/dist/tools/data-inspector.js.map +1 -0
- package/dist/tools/deck.d.ts +11 -0
- package/dist/tools/deck.d.ts.map +1 -0
- package/dist/tools/deck.js +170 -0
- package/dist/tools/deck.js.map +1 -0
- package/dist/tools/designer/index.d.ts +6 -0
- package/dist/tools/designer/index.d.ts.map +1 -0
- package/dist/tools/designer/index.js +177 -0
- package/dist/tools/designer/index.js.map +1 -0
- package/dist/tools/designer.d.ts +20 -0
- package/dist/tools/designer.d.ts.map +1 -0
- package/dist/tools/designer.js +75 -0
- package/dist/tools/designer.js.map +1 -0
- package/dist/tools/dojo/index.d.ts +13 -0
- package/dist/tools/dojo/index.d.ts.map +1 -0
- package/dist/tools/dojo/index.js +547 -0
- package/dist/tools/dojo/index.js.map +1 -0
- package/dist/tools/dojo.d.ts +254 -0
- package/dist/tools/dojo.d.ts.map +1 -0
- package/dist/tools/dojo.js +933 -0
- package/dist/tools/dojo.js.map +1 -0
- package/dist/tools/dojoBench.d.ts +49 -0
- package/dist/tools/dojoBench.d.ts.map +1 -0
- package/dist/tools/dojoBench.js +205 -0
- package/dist/tools/dojoBench.js.map +1 -0
- package/dist/tools/dojoGraduated.d.ts +50 -0
- package/dist/tools/dojoGraduated.d.ts.map +1 -0
- package/dist/tools/dojoGraduated.js +174 -0
- package/dist/tools/dojoGraduated.js.map +1 -0
- package/dist/tools/dojoPolicy.d.ts +65 -0
- package/dist/tools/dojoPolicy.d.ts.map +1 -0
- package/dist/tools/dojoPolicy.js +263 -0
- package/dist/tools/dojoPolicy.js.map +1 -0
- package/dist/tools/friction/index.d.ts +7 -0
- package/dist/tools/friction/index.d.ts.map +1 -0
- package/dist/tools/friction/index.js +239 -0
- package/dist/tools/friction/index.js.map +1 -0
- package/dist/tools/friction.d.ts +82 -0
- package/dist/tools/friction.d.ts.map +1 -0
- package/dist/tools/friction.js +331 -0
- package/dist/tools/friction.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/learnings/index.d.ts +5 -0
- package/dist/tools/learnings/index.d.ts.map +1 -0
- package/dist/tools/learnings/index.js +123 -0
- package/dist/tools/learnings/index.js.map +1 -0
- package/dist/tools/learnings.d.ts +41 -0
- package/dist/tools/learnings.d.ts.map +1 -0
- package/dist/tools/learnings.js +149 -0
- package/dist/tools/learnings.js.map +1 -0
- package/dist/tools/oracle/index.d.ts +5 -0
- package/dist/tools/oracle/index.d.ts.map +1 -0
- package/dist/tools/oracle/index.js +97 -0
- package/dist/tools/oracle/index.js.map +1 -0
- package/dist/tools/oracle.d.ts +90 -0
- package/dist/tools/oracle.d.ts.map +1 -0
- package/dist/tools/oracle.js +529 -0
- package/dist/tools/oracle.js.map +1 -0
- package/dist/tools/policy.d.ts +119 -0
- package/dist/tools/policy.d.ts.map +1 -0
- package/dist/tools/policy.js +406 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/provenance/index.d.ts +4 -0
- package/dist/tools/provenance/index.d.ts.map +1 -0
- package/dist/tools/provenance/index.js +58 -0
- package/dist/tools/provenance/index.js.map +1 -0
- package/dist/tools/provenance.d.ts +75 -0
- package/dist/tools/provenance.d.ts.map +1 -0
- package/dist/tools/provenance.js +197 -0
- package/dist/tools/provenance.js.map +1 -0
- package/dist/tools/rateLimiter.d.ts +45 -0
- package/dist/tools/rateLimiter.d.ts.map +1 -0
- package/dist/tools/rateLimiter.js +91 -0
- package/dist/tools/rateLimiter.js.map +1 -0
- package/dist/tools/registry/index.d.ts +10 -0
- package/dist/tools/registry/index.d.ts.map +1 -0
- package/dist/tools/registry/index.js +467 -0
- package/dist/tools/registry/index.js.map +1 -0
- package/dist/tools/registry.d.ts +3 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +189 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/roadmap/index.d.ts +9 -0
- package/dist/tools/roadmap/index.d.ts.map +1 -0
- package/dist/tools/roadmap/index.js +250 -0
- package/dist/tools/roadmap/index.js.map +1 -0
- package/dist/tools/roadmap.d.ts +88 -0
- package/dist/tools/roadmap.d.ts.map +1 -0
- package/dist/tools/roadmap.js +365 -0
- package/dist/tools/roadmap.js.map +1 -0
- package/dist/tools/sentinel/index.d.ts +19 -0
- package/dist/tools/sentinel/index.d.ts.map +1 -0
- package/dist/tools/sentinel/index.js +832 -0
- package/dist/tools/sentinel/index.js.map +1 -0
- package/dist/tools/sentinel-scan-data.d.ts +90 -0
- package/dist/tools/sentinel-scan-data.d.ts.map +1 -0
- package/dist/tools/sentinel-scan-data.js +122 -0
- package/dist/tools/sentinel-scan-data.js.map +1 -0
- package/dist/tools/sentinel.d.ts +156 -0
- package/dist/tools/sentinel.d.ts.map +1 -0
- package/dist/tools/sentinel.js +603 -0
- package/dist/tools/sentinel.js.map +1 -0
- package/dist/tools/shared/index.d.ts +4 -0
- package/dist/tools/shared/index.d.ts.map +1 -0
- package/dist/tools/shared/index.js +7 -0
- package/dist/tools/shared/index.js.map +1 -0
- package/dist/tools/shared/project.d.ts +17 -0
- package/dist/tools/shared/project.d.ts.map +1 -0
- package/dist/tools/shared/project.js +36 -0
- package/dist/tools/shared/project.js.map +1 -0
- package/dist/tools/shared/response.d.ts +10 -0
- package/dist/tools/shared/response.d.ts.map +1 -0
- package/dist/tools/shared/response.js +36 -0
- package/dist/tools/shared/response.js.map +1 -0
- package/dist/tools/shared/validation.d.ts +10 -0
- package/dist/tools/shared/validation.d.ts.map +1 -0
- package/dist/tools/shared/validation.js +26 -0
- package/dist/tools/shared/validation.js.map +1 -0
- package/dist/tools/studio/cloud-spine.d.ts +27 -0
- package/dist/tools/studio/cloud-spine.d.ts.map +1 -0
- package/dist/tools/studio/cloud-spine.js +773 -0
- package/dist/tools/studio/cloud-spine.js.map +1 -0
- package/dist/tools/studio/index.d.ts +154 -0
- package/dist/tools/studio/index.d.ts.map +1 -0
- package/dist/tools/studio/index.js +525 -0
- package/dist/tools/studio/index.js.map +1 -0
- package/dist/tools/testSpec.d.ts +122 -0
- package/dist/tools/testSpec.d.ts.map +1 -0
- package/dist/tools/testSpec.js +525 -0
- package/dist/tools/testSpec.js.map +1 -0
- package/dist/tools/toolsIndex.d.ts +5 -0
- package/dist/tools/toolsIndex.d.ts.map +1 -0
- package/dist/tools/toolsIndex.js +37 -0
- package/dist/tools/toolsIndex.js.map +1 -0
- package/dist/tools/types.d.ts +30 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +7 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/voice/index.d.ts +8 -0
- package/dist/tools/voice/index.d.ts.map +1 -0
- package/dist/tools/voice/index.js +176 -0
- package/dist/tools/voice/index.js.map +1 -0
- package/dist/tools/voice.d.ts +291 -0
- package/dist/tools/voice.d.ts.map +1 -0
- package/dist/tools/voice.js +734 -0
- package/dist/tools/voice.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic Pack Golden Eval
|
|
3
|
+
*
|
|
4
|
+
* Regression testing harness for semiotic clarity.
|
|
5
|
+
* Compares rendered outputs against known-good golden files.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs/promises';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import { log } from '../config.js';
|
|
10
|
+
import { resolveProjectPaths } from '../projectRegistry.js';
|
|
11
|
+
import { getOrCompilePack } from './compiler.js';
|
|
12
|
+
import { render } from './renderer.js';
|
|
13
|
+
import { lintWithPack } from './linter.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Golden File Loading
|
|
16
|
+
// ============================================================================
|
|
17
|
+
async function fileExists(filePath) {
|
|
18
|
+
try {
|
|
19
|
+
await fs.access(filePath);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async function loadGoldenCases(goldenDir) {
|
|
27
|
+
const cases = [];
|
|
28
|
+
try {
|
|
29
|
+
const entries = await fs.readdir(goldenDir, { withFileTypes: true });
|
|
30
|
+
for (const entry of entries) {
|
|
31
|
+
if (entry.isDirectory()) {
|
|
32
|
+
const caseDir = path.join(goldenDir, entry.name);
|
|
33
|
+
const payloadPath = path.join(caseDir, 'payload.json');
|
|
34
|
+
if (await fileExists(payloadPath)) {
|
|
35
|
+
// Find expected output files
|
|
36
|
+
const expectedOutputs = {};
|
|
37
|
+
const files = await fs.readdir(caseDir);
|
|
38
|
+
for (const file of files) {
|
|
39
|
+
if (file.startsWith('expected-') && file.endsWith('.txt')) {
|
|
40
|
+
const rendererId = file.replace('expected-', '').replace('.txt', '');
|
|
41
|
+
expectedOutputs[rendererId] = path.join(caseDir, file);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (Object.keys(expectedOutputs).length > 0) {
|
|
45
|
+
cases.push({
|
|
46
|
+
name: entry.name,
|
|
47
|
+
payload_file: payloadPath,
|
|
48
|
+
expected_outputs: expectedOutputs,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error.code !== 'ENOENT') {
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return cases;
|
|
61
|
+
}
|
|
62
|
+
async function loadPayload(payloadPath) {
|
|
63
|
+
const content = await fs.readFile(payloadPath, 'utf-8');
|
|
64
|
+
return JSON.parse(content);
|
|
65
|
+
}
|
|
66
|
+
async function loadExpectedOutput(expectedPath) {
|
|
67
|
+
return await fs.readFile(expectedPath, 'utf-8');
|
|
68
|
+
}
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Diff Generation
|
|
71
|
+
// ============================================================================
|
|
72
|
+
function generateDiff(expected, actual) {
|
|
73
|
+
const expectedLines = expected.split('\n');
|
|
74
|
+
const actualLines = actual.split('\n');
|
|
75
|
+
const diff = [];
|
|
76
|
+
const maxLen = Math.max(expectedLines.length, actualLines.length);
|
|
77
|
+
for (let i = 0; i < maxLen; i++) {
|
|
78
|
+
const exp = expectedLines[i] ?? '';
|
|
79
|
+
const act = actualLines[i] ?? '';
|
|
80
|
+
if (exp !== act) {
|
|
81
|
+
diff.push(`Line ${i + 1}:`);
|
|
82
|
+
if (exp)
|
|
83
|
+
diff.push(` - ${exp}`);
|
|
84
|
+
if (act)
|
|
85
|
+
diff.push(` + ${act}`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return diff;
|
|
89
|
+
}
|
|
90
|
+
function normalizeWhitespace(text) {
|
|
91
|
+
return text
|
|
92
|
+
.split('\n')
|
|
93
|
+
.map((line) => line.trimEnd())
|
|
94
|
+
.join('\n')
|
|
95
|
+
.trim();
|
|
96
|
+
}
|
|
97
|
+
// ============================================================================
|
|
98
|
+
// Core Golden Eval Function
|
|
99
|
+
// ============================================================================
|
|
100
|
+
/**
|
|
101
|
+
* Run golden eval for a single case
|
|
102
|
+
*/
|
|
103
|
+
async function runGoldenCase(goldenCase, pack, strict) {
|
|
104
|
+
const results = [];
|
|
105
|
+
// Load payload
|
|
106
|
+
const payload = await loadPayload(goldenCase.payload_file);
|
|
107
|
+
// Test each expected output
|
|
108
|
+
for (const [rendererId, expectedPath] of Object.entries(goldenCase.expected_outputs)) {
|
|
109
|
+
try {
|
|
110
|
+
// Load expected
|
|
111
|
+
const expected = await loadExpectedOutput(expectedPath);
|
|
112
|
+
// Render actual
|
|
113
|
+
const renderOutput = render(payload, rendererId, pack, 'plain');
|
|
114
|
+
const actual = renderOutput.rendered;
|
|
115
|
+
// Compare (normalize whitespace for comparison)
|
|
116
|
+
const normalizedExpected = normalizeWhitespace(expected);
|
|
117
|
+
const normalizedActual = normalizeWhitespace(actual);
|
|
118
|
+
const passed = normalizedExpected === normalizedActual;
|
|
119
|
+
// Run lint if strict mode
|
|
120
|
+
let lintResult;
|
|
121
|
+
if (strict) {
|
|
122
|
+
lintResult = lintWithPack(actual, rendererId, pack, payload);
|
|
123
|
+
}
|
|
124
|
+
const testResult = {
|
|
125
|
+
case_name: goldenCase.name,
|
|
126
|
+
renderer_id: rendererId,
|
|
127
|
+
passed: passed && (!strict || (lintResult?.valid ?? true)),
|
|
128
|
+
expected_file: expectedPath,
|
|
129
|
+
};
|
|
130
|
+
if (!passed) {
|
|
131
|
+
testResult.expected = normalizedExpected;
|
|
132
|
+
testResult.actual = normalizedActual;
|
|
133
|
+
testResult.diff = generateDiff(normalizedExpected, normalizedActual);
|
|
134
|
+
}
|
|
135
|
+
if (lintResult) {
|
|
136
|
+
testResult.lint_result = lintResult;
|
|
137
|
+
}
|
|
138
|
+
results.push(testResult);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
results.push({
|
|
142
|
+
case_name: goldenCase.name,
|
|
143
|
+
renderer_id: rendererId,
|
|
144
|
+
passed: false,
|
|
145
|
+
expected_file: expectedPath,
|
|
146
|
+
diff: [`Error: ${error instanceof Error ? error.message : String(error)}`],
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return results;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Run all golden eval cases
|
|
154
|
+
*/
|
|
155
|
+
export async function runGoldenEval(resolved, caseName, strict = false) {
|
|
156
|
+
const goldenDir = resolved.subPath('architect', 'agentic', 'golden');
|
|
157
|
+
const pack = await getOrCompilePack(resolved);
|
|
158
|
+
log(`agentic-golden: Running golden eval from ${goldenDir}`);
|
|
159
|
+
// Load cases
|
|
160
|
+
let cases = await loadGoldenCases(goldenDir);
|
|
161
|
+
// Filter by case name if specified
|
|
162
|
+
if (caseName) {
|
|
163
|
+
cases = cases.filter((c) => c.name === caseName);
|
|
164
|
+
if (cases.length === 0) {
|
|
165
|
+
throw new Error(`Golden case '${caseName}' not found`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
log(`agentic-golden: Found ${cases.length} test cases`);
|
|
169
|
+
// Run all cases
|
|
170
|
+
const allResults = [];
|
|
171
|
+
for (const goldenCase of cases) {
|
|
172
|
+
const caseResults = await runGoldenCase(goldenCase, pack.content, strict);
|
|
173
|
+
allResults.push(...caseResults);
|
|
174
|
+
}
|
|
175
|
+
// Summarize
|
|
176
|
+
const passedCount = allResults.filter((r) => r.passed).length;
|
|
177
|
+
const failedCount = allResults.length - passedCount;
|
|
178
|
+
const result = {
|
|
179
|
+
passed: failedCount === 0,
|
|
180
|
+
total_cases: allResults.length,
|
|
181
|
+
passed_cases: passedCount,
|
|
182
|
+
failed_cases: failedCount,
|
|
183
|
+
results: allResults,
|
|
184
|
+
run_at: new Date().toISOString(),
|
|
185
|
+
};
|
|
186
|
+
log(`agentic-golden: ${result.passed ? 'PASS' : 'FAIL'} - ${passedCount}/${allResults.length} tests passed`);
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
// ============================================================================
|
|
190
|
+
// Golden File Management
|
|
191
|
+
// ============================================================================
|
|
192
|
+
/**
|
|
193
|
+
* Update golden files with current output (for updating baselines)
|
|
194
|
+
*/
|
|
195
|
+
export async function updateGoldenFile(resolved, caseName, rendererId) {
|
|
196
|
+
const goldenDir = resolved.subPath('architect', 'agentic', 'golden');
|
|
197
|
+
const caseDir = path.join(goldenDir, caseName);
|
|
198
|
+
const payloadPath = path.join(caseDir, 'payload.json');
|
|
199
|
+
const expectedPath = path.join(caseDir, `expected-${rendererId}.txt`);
|
|
200
|
+
// Load payload
|
|
201
|
+
const payload = await loadPayload(payloadPath);
|
|
202
|
+
// Get pack and render
|
|
203
|
+
const pack = await getOrCompilePack(resolved);
|
|
204
|
+
const renderOutput = render(payload, rendererId, pack.content, 'plain');
|
|
205
|
+
// Write new expected file
|
|
206
|
+
await fs.writeFile(expectedPath, renderOutput.rendered, 'utf-8');
|
|
207
|
+
log(`agentic-golden: Updated ${expectedPath}`);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Create a new golden case from a payload
|
|
211
|
+
*/
|
|
212
|
+
export async function createGoldenCase(resolved, caseName, payload, rendererIds) {
|
|
213
|
+
const goldenDir = resolved.subPath('architect', 'agentic', 'golden');
|
|
214
|
+
const caseDir = path.join(goldenDir, caseName);
|
|
215
|
+
// Create case directory
|
|
216
|
+
await fs.mkdir(caseDir, { recursive: true });
|
|
217
|
+
// Write payload
|
|
218
|
+
const payloadPath = path.join(caseDir, 'payload.json');
|
|
219
|
+
await fs.writeFile(payloadPath, JSON.stringify(payload, null, 2), 'utf-8');
|
|
220
|
+
// Get pack
|
|
221
|
+
const pack = await getOrCompilePack(resolved);
|
|
222
|
+
// Generate expected outputs for each renderer
|
|
223
|
+
for (const rendererId of rendererIds) {
|
|
224
|
+
const renderOutput = render(payload, rendererId, pack.content, 'plain');
|
|
225
|
+
const expectedPath = path.join(caseDir, `expected-${rendererId}.txt`);
|
|
226
|
+
await fs.writeFile(expectedPath, renderOutput.rendered, 'utf-8');
|
|
227
|
+
}
|
|
228
|
+
log(`agentic-golden: Created golden case '${caseName}' with ${rendererIds.length} renderers`);
|
|
229
|
+
}
|
|
230
|
+
// ============================================================================
|
|
231
|
+
// MCP Tool Handler
|
|
232
|
+
// ============================================================================
|
|
233
|
+
/**
|
|
234
|
+
* MCP tool handler for running golden eval
|
|
235
|
+
*/
|
|
236
|
+
export async function runGolden(input) {
|
|
237
|
+
try {
|
|
238
|
+
const resolved = resolveProjectPaths(input.projectId);
|
|
239
|
+
log(`agentic-golden: Running golden eval${input.case_name ? ` for case '${input.case_name}'` : ''}`);
|
|
240
|
+
const result = await runGoldenEval(resolved, input.case_name, input.strict ?? false);
|
|
241
|
+
return {
|
|
242
|
+
status: 'executed',
|
|
243
|
+
result,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
248
|
+
log(`agentic-golden: Error: ${message}`);
|
|
249
|
+
return {
|
|
250
|
+
status: 'error',
|
|
251
|
+
error: message,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=golden.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"golden.js","sourceRoot":"","sources":["../../src/agentic/golden.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic Pack Engine - MCP Tool Registration
|
|
3
|
+
*
|
|
4
|
+
* Exposes the 4 core agentic tools via MCP:
|
|
5
|
+
* 1. agentic.compile_pack - Compile configuration into versioned pack
|
|
6
|
+
* 2. agentic.render - Transform payload to text
|
|
7
|
+
* 3. agentic.lint - Validate output against constraints
|
|
8
|
+
* 4. agentic.golden_eval - Run regression tests
|
|
9
|
+
*/
|
|
10
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
11
|
+
export declare function registerAgenticTools(server: McpServer): void;
|
|
12
|
+
export * from './types.js';
|
|
13
|
+
export { compilePack, loadCompiledPack, getOrCompilePack } from './compiler.js';
|
|
14
|
+
export { render, renderPayload } from './renderer.js';
|
|
15
|
+
export { lint, lintWithPack, lintOutput } from './linter.js';
|
|
16
|
+
export { runGoldenEval, updateGoldenFile, createGoldenCase, runGolden } from './golden.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agentic/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0EpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8G5D;AAGD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic Pack Engine - MCP Tool Registration
|
|
3
|
+
*
|
|
4
|
+
* Exposes the 4 core agentic tools via MCP:
|
|
5
|
+
* 1. agentic.compile_pack - Compile configuration into versioned pack
|
|
6
|
+
* 2. agentic.render - Transform payload to text
|
|
7
|
+
* 3. agentic.lint - Validate output against constraints
|
|
8
|
+
* 4. agentic.golden_eval - Run regression tests
|
|
9
|
+
*/
|
|
10
|
+
import { z } from 'zod';
|
|
11
|
+
import { compilePack } from './compiler.js';
|
|
12
|
+
import { renderPayload } from './renderer.js';
|
|
13
|
+
import { lintOutput } from './linter.js';
|
|
14
|
+
import { runGolden } from './golden.js';
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Zod Schemas
|
|
17
|
+
// ============================================================================
|
|
18
|
+
const EvidenceSchema = z.object({
|
|
19
|
+
source: z.string(),
|
|
20
|
+
value: z.unknown(),
|
|
21
|
+
confidence: z.number().min(0).max(1).optional(),
|
|
22
|
+
timestamp: z.string().optional(),
|
|
23
|
+
});
|
|
24
|
+
const MissingDataSchema = z.object({
|
|
25
|
+
field: z.string(),
|
|
26
|
+
reason: z.string(),
|
|
27
|
+
severity: z.enum(['blocking', 'degraded', 'informational']),
|
|
28
|
+
});
|
|
29
|
+
const GuardrailSchema = z.object({
|
|
30
|
+
id: z.string(),
|
|
31
|
+
description: z.string(),
|
|
32
|
+
status: z.enum(['active', 'triggered', 'disabled']),
|
|
33
|
+
});
|
|
34
|
+
const DissentSummarySchema = z.object({
|
|
35
|
+
agent_id: z.string(),
|
|
36
|
+
position: z.string(),
|
|
37
|
+
confidence: z.number().min(0).max(1),
|
|
38
|
+
});
|
|
39
|
+
const PayloadMetadataSchema = z.object({
|
|
40
|
+
pack_id: z.string(),
|
|
41
|
+
pack_hash: z.string(),
|
|
42
|
+
renderer_id: z.string().optional(),
|
|
43
|
+
specialist_id: z.string().optional(),
|
|
44
|
+
created_at: z.string(),
|
|
45
|
+
});
|
|
46
|
+
const CanonicalPayloadSchema = z.object({
|
|
47
|
+
role: z.enum(['Sensor', 'Analyst', 'Overmind', 'Specialist']),
|
|
48
|
+
status: z.enum(['OK', 'DEGRADED', 'BLOCKED', 'ALERT']),
|
|
49
|
+
load: z.enum(['GREEN', 'YELLOW', 'RED']),
|
|
50
|
+
summary: z.string(),
|
|
51
|
+
evidence: z.array(EvidenceSchema),
|
|
52
|
+
missing_data: z.array(MissingDataSchema),
|
|
53
|
+
decision: z.string().optional(),
|
|
54
|
+
guardrails: z.array(GuardrailSchema).optional(),
|
|
55
|
+
dissent_summary: z.array(DissentSummarySchema).optional(),
|
|
56
|
+
specialist_id: z.string().optional(),
|
|
57
|
+
specialist_name: z.string().optional(),
|
|
58
|
+
metadata: PayloadMetadataSchema,
|
|
59
|
+
});
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Tool Registration
|
|
62
|
+
// ============================================================================
|
|
63
|
+
export function registerAgenticTools(server) {
|
|
64
|
+
// Tool 1: Compile Pack
|
|
65
|
+
server.tool('agentic.compile_pack', 'Compile agentic configuration files into a versioned, hashed pack. Reads from .decibel/architect/agentic/ and outputs compiled_agentic_pack.json', {
|
|
66
|
+
projectId: z.string().optional().describe('Project identifier (optional, uses default if not specified)'),
|
|
67
|
+
}, async ({ projectId }) => {
|
|
68
|
+
const result = await compilePack({ projectId });
|
|
69
|
+
return {
|
|
70
|
+
content: [
|
|
71
|
+
{
|
|
72
|
+
type: 'text',
|
|
73
|
+
text: JSON.stringify(result, null, 2),
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
isError: result.status === 'error',
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
// Tool 2: Render Payload
|
|
80
|
+
server.tool('agentic.render', 'Transform a canonical payload into rendered text using a specified renderer. Pure function - no side effects.', {
|
|
81
|
+
projectId: z.string().optional().describe('Project identifier (optional)'),
|
|
82
|
+
payload: CanonicalPayloadSchema.describe('The canonical payload to render'),
|
|
83
|
+
renderer_id: z.string().describe('ID of the renderer to use'),
|
|
84
|
+
target: z.enum(['plain', 'markdown', 'ansi']).optional().describe('Output target format (default: plain)'),
|
|
85
|
+
}, async ({ projectId, payload, renderer_id, target }) => {
|
|
86
|
+
const result = await renderPayload({
|
|
87
|
+
projectId,
|
|
88
|
+
payload: payload,
|
|
89
|
+
renderer_id,
|
|
90
|
+
target: target,
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
content: [
|
|
94
|
+
{
|
|
95
|
+
type: 'text',
|
|
96
|
+
text: JSON.stringify(result, null, 2),
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
isError: result.status === 'error',
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
// Tool 3: Lint Output
|
|
103
|
+
server.tool('agentic.lint', 'Validate rendered output against renderer constraints. Checks emoji count, banned words, line limits, and other dialect rules.', {
|
|
104
|
+
projectId: z.string().optional().describe('Project identifier (optional)'),
|
|
105
|
+
rendered: z.string().describe('The rendered text to lint'),
|
|
106
|
+
renderer_id: z.string().describe('ID of the renderer whose constraints to check'),
|
|
107
|
+
payload: CanonicalPayloadSchema.optional().describe('Original payload for consistency checks (optional)'),
|
|
108
|
+
}, async ({ projectId, rendered, renderer_id, payload }) => {
|
|
109
|
+
const result = await lintOutput({
|
|
110
|
+
projectId,
|
|
111
|
+
rendered,
|
|
112
|
+
renderer_id,
|
|
113
|
+
payload: payload,
|
|
114
|
+
});
|
|
115
|
+
return {
|
|
116
|
+
content: [
|
|
117
|
+
{
|
|
118
|
+
type: 'text',
|
|
119
|
+
text: JSON.stringify(result, null, 2),
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
isError: result.status === 'error',
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
// Tool 4: Golden Eval
|
|
126
|
+
server.tool('agentic.golden_eval', 'Run golden eval regression tests. Compares rendered outputs against known-good baseline files.', {
|
|
127
|
+
projectId: z.string().optional().describe('Project identifier (optional)'),
|
|
128
|
+
case_name: z.string().optional().describe('Run only this specific test case'),
|
|
129
|
+
strict: z.boolean().optional().describe('Also run lint checks on all outputs'),
|
|
130
|
+
}, async ({ projectId, case_name, strict }) => {
|
|
131
|
+
const result = await runGolden({
|
|
132
|
+
projectId,
|
|
133
|
+
case_name,
|
|
134
|
+
strict,
|
|
135
|
+
});
|
|
136
|
+
return {
|
|
137
|
+
content: [
|
|
138
|
+
{
|
|
139
|
+
type: 'text',
|
|
140
|
+
text: JSON.stringify(result, null, 2),
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
isError: result.status === 'error',
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Re-export types and functions for direct use
|
|
148
|
+
export * from './types.js';
|
|
149
|
+
export { compilePack, loadCompiledPack, getOrCompilePack } from './compiler.js';
|
|
150
|
+
export { render, renderPayload } from './renderer.js';
|
|
151
|
+
export { lint, lintWithPack, lintOutput } from './linter.js';
|
|
152
|
+
export { runGoldenEval, updateGoldenFile, createGoldenCase, runGolden } from './golden.js';
|
|
153
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agentic/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic Pack Linter
|
|
3
|
+
*
|
|
4
|
+
* Validates rendered output against dialect constraints.
|
|
5
|
+
* Ensures semiotic clarity and consistency.
|
|
6
|
+
*/
|
|
7
|
+
import { LintResult, RendererConfig, CanonicalPayload, CompiledPack, LintInput, LintOutputResult } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Lint rendered output against renderer constraints.
|
|
10
|
+
*/
|
|
11
|
+
export declare function lint(rendered: string, renderer: RendererConfig, payload?: CanonicalPayload): LintResult;
|
|
12
|
+
/**
|
|
13
|
+
* Lint with just the renderer ID (loads from pack)
|
|
14
|
+
*/
|
|
15
|
+
export declare function lintWithPack(rendered: string, rendererId: string, pack: CompiledPack, payload?: CanonicalPayload): LintResult;
|
|
16
|
+
/**
|
|
17
|
+
* MCP tool handler for linting rendered output
|
|
18
|
+
*/
|
|
19
|
+
export declare function lintOutput(input: LintInput): Promise<LintOutputResult>;
|
|
20
|
+
//# sourceMappingURL=linter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/agentic/linter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,UAAU,EAGV,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA8SpB;;GAEG;AACH,wBAAgB,IAAI,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,CAgBZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,YAAY,EAClB,OAAO,CAAC,EAAE,gBAAgB,GACzB,UAAU,CAkBZ;AAMD;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiC5E"}
|