@orygn/opa-mcp 0.1.14 → 0.1.16
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/CHANGELOG.md +82 -0
- package/README.md +3 -2
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/lib/opa-cli.d.ts +23 -0
- package/dist/lib/opa-cli.d.ts.map +1 -1
- package/dist/lib/opa-cli.js +8 -0
- package/dist/lib/opa-cli.js.map +1 -1
- package/dist/lib/rego-ast-walker.d.ts.map +1 -1
- package/dist/lib/rego-ast-walker.js +15 -0
- package/dist/lib/rego-ast-walker.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/authoring/format.d.ts.map +1 -1
- package/dist/tools/authoring/format.js +55 -5
- package/dist/tools/authoring/format.js.map +1 -1
- package/dist/tools/evaluation/index.d.ts.map +1 -1
- package/dist/tools/evaluation/index.js +2 -0
- package/dist/tools/evaluation/index.js.map +1 -1
- package/dist/tools/evaluation/test-multiroot.d.ts +37 -0
- package/dist/tools/evaluation/test-multiroot.d.ts.map +1 -0
- package/dist/tools/evaluation/test-multiroot.js +454 -0
- package/dist/tools/evaluation/test-multiroot.js.map +1 -0
- package/dist/tools/evaluation/test.d.ts +10 -1
- package/dist/tools/evaluation/test.d.ts.map +1 -1
- package/dist/tools/evaluation/test.js +47 -5
- package/dist/tools/evaluation/test.js.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.d.ts +2 -0
- package/dist/tools/helpers/generate-test-skeleton.d.ts.map +1 -1
- package/dist/tools/helpers/generate-test-skeleton.js +90 -14
- package/dist/tools/helpers/generate-test-skeleton.js.map +1 -1
- package/dist/tools/helpers/index.d.ts.map +1 -1
- package/dist/tools/helpers/index.js +2 -0
- package/dist/tools/helpers/index.js.map +1 -1
- package/dist/tools/helpers/playground-share.d.ts +25 -0
- package/dist/tools/helpers/playground-share.d.ts.map +1 -0
- package/dist/tools/helpers/playground-share.js +117 -0
- package/dist/tools/helpers/playground-share.js.map +1 -0
- package/dist/tools/index.d.ts +5 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/tools/evaluation/test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,CAAC;SACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,yFAAyF,CAC1F;IACH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC5E,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,uKAAuK,CACxK;IACH,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,6KAA6K,CAC9K;IACH,SAAS,EAAE,CAAC;SACT,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wRAAwR,CACzR;CACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/tools/evaluation/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import type { Config } from '../../config.js';
|
|
|
3
3
|
export interface RegoGenerateTestSkeletonOutput {
|
|
4
4
|
testFile: string;
|
|
5
5
|
ruleNames: string[];
|
|
6
|
+
/** Inferred input shape derived from field accesses in the policy body. */
|
|
7
|
+
inferredInputShape: Record<string, unknown>;
|
|
6
8
|
}
|
|
7
9
|
export declare function registerRegoGenerateTestSkeleton(server: McpServer, config: Config): void;
|
|
8
10
|
//# sourceMappingURL=generate-test-skeleton.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-test-skeleton.d.ts","sourceRoot":"","sources":["../../../src/tools/helpers/generate-test-skeleton.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA4B9C,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-test-skeleton.d.ts","sourceRoot":"","sources":["../../../src/tools/helpers/generate-test-skeleton.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AA4B9C,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,2EAA2E;IAC3E,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAgKD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqExF"}
|
|
@@ -36,7 +36,75 @@ function ruleNameFromAst(rule) {
|
|
|
36
36
|
}
|
|
37
37
|
return undefined;
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Recursively walk any JSON value and record every `input.<field>...` path
|
|
41
|
+
* found in OPA AST ref nodes. Builds a nested shape object where leaves are
|
|
42
|
+
* `null` (placeholder to be filled in by the developer). Deeper paths take
|
|
43
|
+
* precedence: a parent leaf is upgraded to an object if a deeper access is
|
|
44
|
+
* found for the same key.
|
|
45
|
+
*/
|
|
46
|
+
function walkForInputRefs(value, shape) {
|
|
47
|
+
if (value === null || typeof value !== 'object')
|
|
48
|
+
return;
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
for (const item of value)
|
|
51
|
+
walkForInputRefs(item, shape);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const obj = value;
|
|
55
|
+
// Detect an OPA AST ref node starting with `input`.
|
|
56
|
+
// Shape: { type: "ref", value: [{type:"var", value:"input"}, {type:"string", value:"field"}, ...] }
|
|
57
|
+
if (obj['type'] === 'ref' &&
|
|
58
|
+
Array.isArray(obj['value']) &&
|
|
59
|
+
obj['value'].length >= 2) {
|
|
60
|
+
const parts = obj['value'];
|
|
61
|
+
const head = parts[0];
|
|
62
|
+
if (head?.type === 'var' && head?.value === 'input') {
|
|
63
|
+
let current = shape;
|
|
64
|
+
for (let i = 1; i < parts.length; i++) {
|
|
65
|
+
const part = parts[i];
|
|
66
|
+
// Only follow string-keyed accesses; var/number keys are dynamic.
|
|
67
|
+
if (part.type !== 'string' || typeof part.value !== 'string')
|
|
68
|
+
break;
|
|
69
|
+
const key = part.value;
|
|
70
|
+
const isLast = i === parts.length - 1;
|
|
71
|
+
if (isLast) {
|
|
72
|
+
// Don't downgrade an existing object to null (deeper access wins).
|
|
73
|
+
if (!(key in current))
|
|
74
|
+
current[key] = null;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Upgrade an existing null leaf to an object so we can go deeper.
|
|
78
|
+
if (!(key in current) || current[key] === null)
|
|
79
|
+
current[key] = {};
|
|
80
|
+
const next = current[key];
|
|
81
|
+
if (typeof next !== 'object' || next === null)
|
|
82
|
+
break;
|
|
83
|
+
current = next;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
for (const v of Object.values(obj)) {
|
|
89
|
+
walkForInputRefs(v, shape);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function inferInputShape(ast) {
|
|
93
|
+
const shape = {};
|
|
94
|
+
walkForInputRefs(ast, shape);
|
|
95
|
+
return shape;
|
|
96
|
+
}
|
|
97
|
+
/** Serialize an InputShape to an inline Rego object literal. */
|
|
98
|
+
function shapeToRegoLiteral(shape) {
|
|
99
|
+
const entries = Object.entries(shape);
|
|
100
|
+
if (entries.length === 0)
|
|
101
|
+
return '{}';
|
|
102
|
+
const inner = entries
|
|
103
|
+
.map(([k, v]) => `"${k}": ${v === null ? 'null' : shapeToRegoLiteral(v)}`)
|
|
104
|
+
.join(', ');
|
|
105
|
+
return `{${inner}}`;
|
|
106
|
+
}
|
|
107
|
+
function makeTableSkeleton(packageName, ruleNames, inputShape) {
|
|
40
108
|
const lines = [];
|
|
41
109
|
const testPackage = packageName ? `${packageName}_test` : 'main_test';
|
|
42
110
|
lines.push(`package ${testPackage}`);
|
|
@@ -46,6 +114,7 @@ function makeTableSkeleton(packageName, ruleNames) {
|
|
|
46
114
|
lines.push(`import data.${packageName}`);
|
|
47
115
|
}
|
|
48
116
|
lines.push('');
|
|
117
|
+
const inputLiteral = shapeToRegoLiteral(inputShape);
|
|
49
118
|
for (const name of ruleNames) {
|
|
50
119
|
const safeName = name.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
51
120
|
const testName = `test_${safeName}`;
|
|
@@ -55,7 +124,7 @@ function makeTableSkeleton(packageName, ruleNames) {
|
|
|
55
124
|
lines.push(`${casesVar} := [`);
|
|
56
125
|
lines.push(`\t{`);
|
|
57
126
|
lines.push(`\t\t"description": "TODO: describe what this case tests",`);
|
|
58
|
-
lines.push(`\t\t"input": {},`);
|
|
127
|
+
lines.push(`\t\t"input": ${inputLiteral},`);
|
|
59
128
|
lines.push(`\t\t"expected": true,`);
|
|
60
129
|
lines.push(`\t},`);
|
|
61
130
|
lines.push(`]`);
|
|
@@ -70,7 +139,7 @@ function makeTableSkeleton(packageName, ruleNames) {
|
|
|
70
139
|
}
|
|
71
140
|
return lines.join('\n');
|
|
72
141
|
}
|
|
73
|
-
function makeSkeleton(packageName, ruleNames) {
|
|
142
|
+
function makeSkeleton(packageName, ruleNames, inputShape) {
|
|
74
143
|
const lines = [];
|
|
75
144
|
const testPackage = packageName ? `${packageName}_test` : 'main_test';
|
|
76
145
|
lines.push(`package ${testPackage}`);
|
|
@@ -80,16 +149,13 @@ function makeSkeleton(packageName, ruleNames) {
|
|
|
80
149
|
lines.push(`import data.${packageName}`);
|
|
81
150
|
}
|
|
82
151
|
lines.push('');
|
|
152
|
+
const inputLiteral = shapeToRegoLiteral(inputShape);
|
|
83
153
|
for (const name of ruleNames) {
|
|
84
154
|
const testName = `test_${name.replace(/[^a-zA-Z0-9_]/g, '_')}`;
|
|
85
155
|
const ruleRef = packageName ? `${packageName}.${name}` : name;
|
|
86
156
|
lines.push(`# TODO: replace placeholder input with a realistic case.`);
|
|
87
157
|
lines.push(`${testName} if {`);
|
|
88
|
-
lines.push(`\
|
|
89
|
-
lines.push(`\tinput := {}`);
|
|
90
|
-
lines.push('');
|
|
91
|
-
lines.push(`\t# Act / Assert`);
|
|
92
|
-
lines.push(`\tdata.${ruleRef} with input as input`);
|
|
158
|
+
lines.push(`\tdata.${ruleRef} with input as ${inputLiteral}`);
|
|
93
159
|
lines.push(`}`);
|
|
94
160
|
lines.push('');
|
|
95
161
|
}
|
|
@@ -99,7 +165,7 @@ export function registerRegoGenerateTestSkeleton(server, config) {
|
|
|
99
165
|
const opa = new OpaCli(config);
|
|
100
166
|
server.registerTool('rego_generate_test_skeleton', {
|
|
101
167
|
title: 'Generate Rego test skeleton',
|
|
102
|
-
description: 'Generate a `*_test.rego` skeleton from a policy. Parses the AST, finds each rule, and emits one stub test per rule. The
|
|
168
|
+
description: 'Generate a `*_test.rego` skeleton from a policy. Parses the AST, finds each non-test rule, and emits one stub test per rule. Existing `test_*` and `todo_test_*` rules are skipped automatically -- only testable production rules get stubs. The AST is walked to infer which `input.*` fields the policy accesses; the inferred shape is used as the placeholder `with input as {...}` in each stub, so the developer only needs to fill in realistic values rather than guess the structure. With `tableStyle: true`, each stub uses an `every tc in cases { ... }` loop so you can add multiple input/expected pairs without duplicating assertion code. The `inferredInputShape` field in the response shows the detected shape for reference.',
|
|
103
169
|
inputSchema: RegoGenerateTestSkeletonInput,
|
|
104
170
|
annotations: {
|
|
105
171
|
readOnlyHint: true,
|
|
@@ -123,16 +189,26 @@ export function registerRegoGenerateTestSkeleton(server, config) {
|
|
|
123
189
|
return err('UNKNOWN_ERROR', 'opa parse produced no parseable JSON.');
|
|
124
190
|
}
|
|
125
191
|
const packageName = packageNameFromAst(ast);
|
|
192
|
+
// Skip existing test rules -- they should not get test stubs generated for them.
|
|
126
193
|
const ruleNames = Array.from(new Set((ast.rules ?? [])
|
|
127
194
|
.map(ruleNameFromAst)
|
|
128
|
-
.filter((n) => typeof n === 'string' &&
|
|
195
|
+
.filter((n) => typeof n === 'string' &&
|
|
196
|
+
n.length > 0 &&
|
|
197
|
+
!n.startsWith('test_') &&
|
|
198
|
+
!n.startsWith('todo_test_'))));
|
|
129
199
|
if (ruleNames.length === 0) {
|
|
130
|
-
return err('INVALID_INPUT', 'No rules found in the source -- nothing to test.');
|
|
200
|
+
return err('INVALID_INPUT', 'No testable rules found in the source -- nothing to test.');
|
|
131
201
|
}
|
|
202
|
+
// Infer input shape from AST ref accesses.
|
|
203
|
+
const inputShape = inferInputShape(ast);
|
|
132
204
|
const testFile = tableStyle
|
|
133
|
-
? makeTableSkeleton(packageName, ruleNames)
|
|
134
|
-
: makeSkeleton(packageName, ruleNames);
|
|
135
|
-
return ok({
|
|
205
|
+
? makeTableSkeleton(packageName, ruleNames, inputShape)
|
|
206
|
+
: makeSkeleton(packageName, ruleNames, inputShape);
|
|
207
|
+
return ok({
|
|
208
|
+
testFile,
|
|
209
|
+
ruleNames,
|
|
210
|
+
inferredInputShape: inputShape,
|
|
211
|
+
});
|
|
136
212
|
});
|
|
137
213
|
});
|
|
138
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-test-skeleton.js","sourceRoot":"","sources":["../../../src/tools/helpers/generate-test-skeleton.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAEjG,MAAM,6BAA6B,GAAG;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACxE,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,kNAAkN,CACnN;CACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-test-skeleton.js","sourceRoot":"","sources":["../../../src/tools/helpers/generate-test-skeleton.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAe9C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAc3E"}
|
|
@@ -9,6 +9,7 @@ import { registerRegoInferInputSchema } from './infer-input-schema.js';
|
|
|
9
9
|
import { registerRegoPolicyDiff } from './policy-diff.js';
|
|
10
10
|
import { registerRegoSecurityAudit } from './security-audit.js';
|
|
11
11
|
import { registerRegoSuggestFix } from './suggest-fix.js';
|
|
12
|
+
import { registerRegoPlaygroundShare } from './playground-share.js';
|
|
12
13
|
import { registerRegoVerify } from './verify.js';
|
|
13
14
|
export function registerHelperTools(server, config) {
|
|
14
15
|
registerRegoExplainDecision(server, config);
|
|
@@ -23,5 +24,6 @@ export function registerHelperTools(server, config) {
|
|
|
23
24
|
registerRegoFormatWrite(server, config);
|
|
24
25
|
registerRegoPolicyDiff(server, config);
|
|
25
26
|
registerRegoVerify(server, config);
|
|
27
|
+
registerRegoPlaygroundShare(server, config);
|
|
26
28
|
}
|
|
27
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/helpers/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAc;IACnE,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/helpers/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAc;IACnE,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,gCAAgC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,0BAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,yBAAyB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rego_playground_share` -- publish a Rego policy as a public GitHub Gist
|
|
3
|
+
* and return a shareable URL.
|
|
4
|
+
*
|
|
5
|
+
* Why Gist and not the OPA playground? Every endpoint on
|
|
6
|
+
* play.openpolicyagent.org requires a GitHub OAuth session cookie -- there is
|
|
7
|
+
* no public API key path. Gists are a natural substitute: they render Rego
|
|
8
|
+
* with syntax highlighting, are forkable, and the raw URL is directly loadable
|
|
9
|
+
* by OPA or Conftest.
|
|
10
|
+
*
|
|
11
|
+
* Requires a GitHub personal access token with the `gist` scope, supplied via
|
|
12
|
+
* the GITHUB_TOKEN environment variable.
|
|
13
|
+
*/
|
|
14
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
15
|
+
import type { Config } from '../../config.js';
|
|
16
|
+
export interface RegoPlaygroundShareOutput {
|
|
17
|
+
/** URL to the Gist page on github.com -- the primary shareable link. */
|
|
18
|
+
gistUrl: string;
|
|
19
|
+
/** Direct raw URL to the policy.rego file inside the Gist. */
|
|
20
|
+
rawPolicyUrl: string;
|
|
21
|
+
/** GitHub Gist ID. */
|
|
22
|
+
id: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function registerRegoPlaygroundShare(server: McpServer, _config: Config): void;
|
|
25
|
+
//# sourceMappingURL=playground-share.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground-share.d.ts","sourceRoot":"","sources":["../../../src/tools/helpers/playground-share.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAiC9C,MAAM,WAAW,yBAAyB;IACxC,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,EAAE,EAAE,MAAM,CAAC;CACZ;AAsBD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA2GpF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { err, ok } from '../../lib/errors.js';
|
|
3
|
+
import { withToolEnvelope } from '../../lib/tool-helpers.js';
|
|
4
|
+
// ─── Input schema ─────────────────────────────────────────────────────────────
|
|
5
|
+
const RegoPlaygroundShareInput = {
|
|
6
|
+
policy: z.string().min(1).describe('Rego source code to share (the contents of a .rego file).'),
|
|
7
|
+
query: z
|
|
8
|
+
.string()
|
|
9
|
+
.optional()
|
|
10
|
+
.describe('Default query to evaluate against the policy, e.g. "data.authz.allow". ' +
|
|
11
|
+
'Stored in metadata.json alongside the policy file.'),
|
|
12
|
+
input: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Input document as a JSON string. Stored in metadata.json alongside the policy file.'),
|
|
16
|
+
data: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Data document as a JSON string. Stored in metadata.json alongside the policy file.'),
|
|
20
|
+
description: z
|
|
21
|
+
.string()
|
|
22
|
+
.optional()
|
|
23
|
+
.describe('Short description for the Gist (shown on github.com/gists).'),
|
|
24
|
+
};
|
|
25
|
+
// ─── Tool registration ────────────────────────────────────────────────────────
|
|
26
|
+
export function registerRegoPlaygroundShare(server, _config) {
|
|
27
|
+
server.registerTool('rego_playground_share', {
|
|
28
|
+
title: 'Share Rego policy as a GitHub Gist',
|
|
29
|
+
description: 'Share a Rego policy with teammates or create a reproducible example by publishing it ' +
|
|
30
|
+
'as a public GitHub Gist. Returns { gistUrl, rawPolicyUrl, id }: the gistUrl renders ' +
|
|
31
|
+
'the policy with syntax highlighting on github.com; the rawPolicyUrl can be passed ' +
|
|
32
|
+
'directly to OPA (`opa eval -d <rawPolicyUrl> <query>`) or used as a data source in ' +
|
|
33
|
+
'Conftest. When query, input, or data are supplied, a metadata.json file is bundled ' +
|
|
34
|
+
'into the Gist so recipients have the full evaluation context to reproduce results. ' +
|
|
35
|
+
'Each call creates a new Gist -- use the returned id to reference it later. ' +
|
|
36
|
+
'Requires GITHUB_TOKEN in the environment (GitHub personal access token with the ' +
|
|
37
|
+
'"gist" scope); returns GITHUB_TOKEN_MISSING with setup instructions if unset.',
|
|
38
|
+
inputSchema: RegoPlaygroundShareInput,
|
|
39
|
+
annotations: {
|
|
40
|
+
readOnlyHint: false,
|
|
41
|
+
destructiveHint: false,
|
|
42
|
+
idempotentHint: false,
|
|
43
|
+
openWorldHint: true,
|
|
44
|
+
},
|
|
45
|
+
}, async ({ policy, query, input, data, description }, { signal }) => {
|
|
46
|
+
return withToolEnvelope(_config, async () => {
|
|
47
|
+
// ── Token check ────────────────────────────────────────────────────
|
|
48
|
+
const token = process.env['GITHUB_TOKEN'];
|
|
49
|
+
if (!token) {
|
|
50
|
+
return err('GITHUB_TOKEN_MISSING', 'GITHUB_TOKEN environment variable is not set. ' +
|
|
51
|
+
'A GitHub personal access token with the "gist" scope is required to create Gists.', {
|
|
52
|
+
hint: 'Create a token at https://github.com/settings/tokens (select "gist" scope), ' +
|
|
53
|
+
'then set GITHUB_TOKEN in your shell or in the "env" block of your MCP client config.',
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// ── Build Gist files ───────────────────────────────────────────────
|
|
57
|
+
const files = {
|
|
58
|
+
'policy.rego': { content: policy },
|
|
59
|
+
};
|
|
60
|
+
// Attach supplementary context as a second file only when at least
|
|
61
|
+
// one optional field was provided -- keeps single-file Gists clean.
|
|
62
|
+
const metadata = {};
|
|
63
|
+
if (query !== undefined)
|
|
64
|
+
metadata['query'] = query;
|
|
65
|
+
if (input !== undefined)
|
|
66
|
+
metadata['input'] = input;
|
|
67
|
+
if (data !== undefined)
|
|
68
|
+
metadata['data'] = data;
|
|
69
|
+
if (Object.keys(metadata).length > 0) {
|
|
70
|
+
files['metadata.json'] = { content: JSON.stringify(metadata, null, 2) };
|
|
71
|
+
}
|
|
72
|
+
const body = {
|
|
73
|
+
description: description ?? 'OPA Rego policy',
|
|
74
|
+
public: true,
|
|
75
|
+
files,
|
|
76
|
+
};
|
|
77
|
+
// ── POST to GitHub Gist API ────────────────────────────────────────
|
|
78
|
+
let response;
|
|
79
|
+
try {
|
|
80
|
+
response = await fetch('https://api.github.com/gists', {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: {
|
|
83
|
+
Authorization: `Bearer ${token}`,
|
|
84
|
+
Accept: 'application/vnd.github+json',
|
|
85
|
+
'Content-Type': 'application/json',
|
|
86
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
87
|
+
},
|
|
88
|
+
body: JSON.stringify(body),
|
|
89
|
+
signal,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
const message = e instanceof Error ? e.message : String(e);
|
|
94
|
+
return err('UNKNOWN_ERROR', `GitHub Gist API request failed: ${message}`);
|
|
95
|
+
}
|
|
96
|
+
if (!response.ok) {
|
|
97
|
+
const text = await response.text().catch(() => '');
|
|
98
|
+
return err('GIST_CREATE_FAILED', `GitHub Gist creation failed with HTTP ${response.status.toString()}.`, { details: { status: response.status, body: text } });
|
|
99
|
+
}
|
|
100
|
+
// ── Parse response ─────────────────────────────────────────────────
|
|
101
|
+
let gist;
|
|
102
|
+
try {
|
|
103
|
+
gist = (await response.json());
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return err('GIST_CREATE_FAILED', 'GitHub returned an unparseable response body.');
|
|
107
|
+
}
|
|
108
|
+
const rawPolicyUrl = gist.files['policy.rego']?.raw_url ?? '';
|
|
109
|
+
return ok({
|
|
110
|
+
gistUrl: gist.html_url,
|
|
111
|
+
rawPolicyUrl,
|
|
112
|
+
id: gist.id,
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=playground-share.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground-share.js","sourceRoot":"","sources":["../../../src/tools/helpers/playground-share.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* here in order; ordering doesn't affect behavior but keeps the
|
|
6
6
|
* declaration site tidy.
|
|
7
7
|
*
|
|
8
|
-
* Tools (
|
|
8
|
+
* Tools (52 total):
|
|
9
9
|
* Category A -- Authoring: rego_format, rego_check,
|
|
10
10
|
* rego_check_schema, rego_lint,
|
|
11
11
|
* rego_parse_ast, rego_inspect,
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
* Category B -- Evaluation: rego_eval, rego_eval_with_explain,
|
|
15
15
|
* rego_eval_with_profile,
|
|
16
16
|
* rego_eval_with_coverage, rego_test,
|
|
17
|
-
* rego_bench,
|
|
17
|
+
* rego_test_multiroot, rego_bench,
|
|
18
|
+
* rego_compile_query
|
|
18
19
|
* Category C -- Bundles: opa_bundle_build, opa_bundle_sign,
|
|
19
20
|
* opa_bundle_verify, opa_exec
|
|
20
21
|
* Category D -- Server mgmt: opa_list_policies, opa_get_policy,
|
|
@@ -32,7 +33,8 @@
|
|
|
32
33
|
* rego_security_audit,
|
|
33
34
|
* rego_infer_input_schema,
|
|
34
35
|
* rego_fix, rego_format_write,
|
|
35
|
-
* rego_policy_diff, rego_verify
|
|
36
|
+
* rego_policy_diff, rego_verify,
|
|
37
|
+
* rego_playground_share
|
|
36
38
|
* Category F -- Conftest: conftest_test, conftest_verify,
|
|
37
39
|
* conftest_pull, conftest_push
|
|
38
40
|
* Category G -- Meta: mcp_server_info
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAS3C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAQrE"}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAc;IAC7D,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Shared types used across tools, prompts, and resources.
|
|
3
3
|
*/
|
|
4
4
|
/** Standard error codes returned by tools. */
|
|
5
|
-
export type ToolErrorCode = 'INVALID_INPUT' | 'OPA_BINARY_NOT_FOUND' | 'REGAL_NOT_FOUND' | 'REGAL_VERSION_TOO_OLD' | 'CONFTEST_NOT_FOUND' | 'INVALID_REGO' | 'INVALID_BUNDLE' | 'EVAL_ERROR' | 'PATH_NOT_ALLOWED' | 'PATH_NOT_FOUND' | 'OPA_UNREACHABLE' | 'OPA_AUTH_FAILED' | 'POLICY_NOT_FOUND' | 'DATA_NOT_FOUND' | 'DEPENDENCY_CONFLICT' | 'NO_TESTS_FOUND' | 'COVERAGE_BELOW_THRESHOLD' | 'HTTP_SEND_BLOCKED' | 'TIMEOUT' | 'CANCELLED' | 'VERIFY_INCONCLUSIVE' | 'Z3_INIT_ERROR' | 'UNKNOWN_ERROR';
|
|
5
|
+
export type ToolErrorCode = 'INVALID_INPUT' | 'OPA_BINARY_NOT_FOUND' | 'REGAL_NOT_FOUND' | 'REGAL_VERSION_TOO_OLD' | 'CONFTEST_NOT_FOUND' | 'INVALID_REGO' | 'INVALID_BUNDLE' | 'EVAL_ERROR' | 'PATH_NOT_ALLOWED' | 'PATH_NOT_FOUND' | 'OPA_UNREACHABLE' | 'OPA_AUTH_FAILED' | 'POLICY_NOT_FOUND' | 'DATA_NOT_FOUND' | 'DEPENDENCY_CONFLICT' | 'NO_TESTS_FOUND' | 'COVERAGE_BELOW_THRESHOLD' | 'HTTP_SEND_BLOCKED' | 'TIMEOUT' | 'CANCELLED' | 'VERIFY_INCONCLUSIVE' | 'Z3_INIT_ERROR' | 'OPA_VERSION_UNSUPPORTED' | 'GITHUB_TOKEN_MISSING' | 'GIST_CREATE_FAILED' | 'UNKNOWN_ERROR';
|
|
6
6
|
/** Structured error payload. */
|
|
7
7
|
export interface ToolError {
|
|
8
8
|
code: ToolErrorCode;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,0BAA0B,GAC1B,mBAAmB,GACnB,SAAS,GACT,WAAW,GACX,qBAAqB,GACrB,eAAe,GACf,eAAe,CAAC;AAEpB,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,0BAA0B,GAC1B,mBAAmB,GACnB,SAAS,GACT,WAAW,GACX,qBAAqB,GACrB,eAAe,GACf,yBAAyB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,eAAe,CAAC;AAEpB,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orygn/opa-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"mcpName": "io.github.OrygnsCode/opa-mcp",
|
|
5
5
|
"description": "Model Context Protocol server for Open Policy Agent (OPA). Author, validate, debug, and explain Rego policies through any MCP-compatible client.",
|
|
6
6
|
"type": "module",
|