@coderifts/agent-guard 1.1.0 → 1.2.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/README.md +27 -2
- package/dist/cjs/artifact-resolver.d.ts +76 -0
- package/dist/cjs/artifact-resolver.d.ts.map +1 -0
- package/dist/cjs/artifact-resolver.js +413 -0
- package/dist/cjs/artifact-resolver.js.map +1 -0
- package/dist/cjs/guard.d.ts.map +1 -1
- package/dist/cjs/guard.js +31 -0
- package/dist/cjs/guard.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +12 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/resolver-glob.d.ts +15 -0
- package/dist/cjs/resolver-glob.d.ts.map +1 -0
- package/dist/cjs/resolver-glob.js +65 -0
- package/dist/cjs/resolver-glob.js.map +1 -0
- package/dist/cjs/resolver-yaml.d.ts +20 -0
- package/dist/cjs/resolver-yaml.d.ts.map +1 -0
- package/dist/cjs/resolver-yaml.js +235 -0
- package/dist/cjs/resolver-yaml.js.map +1 -0
- package/dist/cjs/tool-registry.d.ts +88 -0
- package/dist/cjs/tool-registry.d.ts.map +1 -0
- package/dist/cjs/tool-registry.js +274 -0
- package/dist/cjs/tool-registry.js.map +1 -0
- package/dist/cjs/types.d.ts +2 -2
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/artifact-resolver.d.ts +76 -0
- package/dist/esm/artifact-resolver.d.ts.map +1 -0
- package/dist/esm/artifact-resolver.js +410 -0
- package/dist/esm/artifact-resolver.js.map +1 -0
- package/dist/esm/guard.d.ts.map +1 -1
- package/dist/esm/guard.js +31 -0
- package/dist/esm/guard.js.map +1 -1
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/resolver-glob.d.ts +15 -0
- package/dist/esm/resolver-glob.d.ts.map +1 -0
- package/dist/esm/resolver-glob.js +59 -0
- package/dist/esm/resolver-glob.js.map +1 -0
- package/dist/esm/resolver-yaml.d.ts +20 -0
- package/dist/esm/resolver-yaml.d.ts.map +1 -0
- package/dist/esm/resolver-yaml.js +229 -0
- package/dist/esm/resolver-yaml.js.map +1 -0
- package/dist/esm/tool-registry.d.ts +88 -0
- package/dist/esm/tool-registry.d.ts.map +1 -0
- package/dist/esm/tool-registry.js +269 -0
- package/dist/esm/tool-registry.js.map +1 -0
- package/dist/esm/types.d.ts +2 -2
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver-glob.d.ts","sourceRoot":"","sources":["../../src/resolver-glob.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBjD;AAED,sCAAsC;AACtC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3E;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMjF"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolver-glob — a correct POSIX-path glob matcher for SSOT selection (§5). The naive `fnmatch`
|
|
3
|
+
* fails on the double-star token (which must span zero-or-more path segments); this handles it (plus
|
|
4
|
+
* `*` / `?`) precisely so a `generated` double-star pattern matches `generated/x.json`,
|
|
5
|
+
* `a/generated/b.yaml`, etc., but not `src/x.yaml`.
|
|
6
|
+
*/
|
|
7
|
+
/** Compile a glob to an anchored RegExp. Double-star spans segments; `*`/`?` stay within a segment. */
|
|
8
|
+
export function globToRegExp(glob) {
|
|
9
|
+
let re = '';
|
|
10
|
+
for (let i = 0; i < glob.length; i += 1) {
|
|
11
|
+
const c = glob[i];
|
|
12
|
+
if (c === '*') {
|
|
13
|
+
if (glob[i + 1] === '*') {
|
|
14
|
+
i += 1;
|
|
15
|
+
if (glob[i + 1] === '/') {
|
|
16
|
+
re += '(?:.*/)?';
|
|
17
|
+
i += 1;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
re += '.*';
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
re += '[^/]*';
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else if (c === '?') {
|
|
28
|
+
re += '[^/]';
|
|
29
|
+
}
|
|
30
|
+
else if ('.+^${}()|[]\\'.includes(c)) {
|
|
31
|
+
re += `\\${c}`;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
re += c;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return new RegExp(`^${re}$`);
|
|
38
|
+
}
|
|
39
|
+
/** True iff `path` matches `glob`. */
|
|
40
|
+
export function matchGlob(glob, path) {
|
|
41
|
+
return globToRegExp(glob).test(path);
|
|
42
|
+
}
|
|
43
|
+
/** True iff `path` matches ANY of the globs (also accepts an exact-path equality). */
|
|
44
|
+
export function matchAny(globs, path) {
|
|
45
|
+
if (!Array.isArray(globs))
|
|
46
|
+
return false;
|
|
47
|
+
return globs.some((g) => g === path || matchGlob(g, path));
|
|
48
|
+
}
|
|
49
|
+
/** Index of the FIRST glob matching `path` (exact or glob), else -1 (first-match-wins). */
|
|
50
|
+
export function firstMatchIndex(globs, path) {
|
|
51
|
+
if (!Array.isArray(globs))
|
|
52
|
+
return -1;
|
|
53
|
+
for (let i = 0; i < globs.length; i += 1) {
|
|
54
|
+
if (globs[i] === path || matchGlob(globs[i], path))
|
|
55
|
+
return i;
|
|
56
|
+
}
|
|
57
|
+
return -1;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=resolver-glob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver-glob.js","sourceRoot":"","sources":["../../src/resolver-glob.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uGAAuG;AACvG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACxB,CAAC,IAAI,CAAC,CAAC;gBACP,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,EAAE,IAAI,UAAU,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;qBAAM,CAAC;oBAAC,EAAE,IAAI,IAAI,CAAC;gBAAC,CAAC;YAC7E,CAAC;iBAAM,CAAC;gBACN,EAAE,IAAI,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,MAAM,CAAC;QACf,CAAC;aAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY;IAClD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,QAAQ,CAAC,KAA2B,EAAE,IAAY;IAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,KAA2B,EAAE,IAAY;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolver-yaml — a MINIMAL, deterministic YAML/JSON reader for the artifact resolver's $ref bundler.
|
|
3
|
+
*
|
|
4
|
+
* The guard package has no YAML dependency; the resolver only needs to parse the constrained YAML
|
|
5
|
+
* that appears in OpenAPI/AsyncAPI contract docs (block mappings, flow mappings, quoted keys, scalar
|
|
6
|
+
* values, and `$ref` strings) to inline external file refs into a deterministic JSON bundle (§4.3).
|
|
7
|
+
* It is NOT a general YAML engine — anything outside the supported subset throws, and the resolver
|
|
8
|
+
* turns that into a `parse_error` unresolved entry (never a fabricated document).
|
|
9
|
+
*
|
|
10
|
+
* Determinism: plain scalars are kept as raw strings (no lossy type coercion), so parse→serialize is
|
|
11
|
+
* byte-stable per input.
|
|
12
|
+
*/
|
|
13
|
+
export declare class YamlLiteError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
/** Parse a JSON or (subset) YAML document to a plain JS value. Throws YamlLiteError on unsupported input. */
|
|
17
|
+
export declare function parseDoc(text: string): unknown;
|
|
18
|
+
/** Deterministic JSON serialization with recursively sorted object keys (byte-stable — §4.3, A6). */
|
|
19
|
+
export declare function stableStringify(value: unknown): string;
|
|
20
|
+
//# sourceMappingURL=resolver-yaml.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver-yaml.d.ts","sourceRoot":"","sources":["../../src/resolver-yaml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAC5B;AAID,6GAA6G;AAC7G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAc9C;AAiJD,qGAAqG;AACrG,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolver-yaml — a MINIMAL, deterministic YAML/JSON reader for the artifact resolver's $ref bundler.
|
|
3
|
+
*
|
|
4
|
+
* The guard package has no YAML dependency; the resolver only needs to parse the constrained YAML
|
|
5
|
+
* that appears in OpenAPI/AsyncAPI contract docs (block mappings, flow mappings, quoted keys, scalar
|
|
6
|
+
* values, and `$ref` strings) to inline external file refs into a deterministic JSON bundle (§4.3).
|
|
7
|
+
* It is NOT a general YAML engine — anything outside the supported subset throws, and the resolver
|
|
8
|
+
* turns that into a `parse_error` unresolved entry (never a fabricated document).
|
|
9
|
+
*
|
|
10
|
+
* Determinism: plain scalars are kept as raw strings (no lossy type coercion), so parse→serialize is
|
|
11
|
+
* byte-stable per input.
|
|
12
|
+
*/
|
|
13
|
+
export class YamlLiteError extends Error {
|
|
14
|
+
constructor(message) { super(message); this.name = 'YamlLiteError'; }
|
|
15
|
+
}
|
|
16
|
+
/** Parse a JSON or (subset) YAML document to a plain JS value. Throws YamlLiteError on unsupported input. */
|
|
17
|
+
export function parseDoc(text) {
|
|
18
|
+
const trimmed = text.trimStart();
|
|
19
|
+
if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(text);
|
|
22
|
+
}
|
|
23
|
+
catch (e) {
|
|
24
|
+
throw new YamlLiteError(`invalid JSON: ${e.message}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const lines = [];
|
|
28
|
+
for (const raw of text.split('\n')) {
|
|
29
|
+
const trimmedLine = raw.trim();
|
|
30
|
+
if (trimmedLine === '' || trimmedLine.startsWith('#'))
|
|
31
|
+
continue;
|
|
32
|
+
lines.push({ indent: raw.length - raw.trimStart().length, text: trimmedLine });
|
|
33
|
+
}
|
|
34
|
+
if (lines.length === 0)
|
|
35
|
+
return null;
|
|
36
|
+
const [value] = parseBlock(lines, 0, lines[0].indent);
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
function parseBlock(lines, start, indent) {
|
|
40
|
+
if (start >= lines.length)
|
|
41
|
+
return [null, start];
|
|
42
|
+
const first = lines[start];
|
|
43
|
+
if (first.text === '-' || first.text.startsWith('- '))
|
|
44
|
+
return parseSequence(lines, start, indent);
|
|
45
|
+
return parseMapping(lines, start, indent);
|
|
46
|
+
}
|
|
47
|
+
function parseMapping(lines, start, indent) {
|
|
48
|
+
const obj = {};
|
|
49
|
+
let i = start;
|
|
50
|
+
while (i < lines.length && lines[i].indent === indent) {
|
|
51
|
+
const { key, rest } = splitKeyValue(lines[i].text);
|
|
52
|
+
i += 1;
|
|
53
|
+
if (rest === '') {
|
|
54
|
+
if (i < lines.length && lines[i].indent > indent) {
|
|
55
|
+
const [child, next] = parseBlock(lines, i, lines[i].indent);
|
|
56
|
+
obj[key] = child;
|
|
57
|
+
i = next;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
obj[key] = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
obj[key] = parseScalarOrFlow(rest);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return [obj, i];
|
|
68
|
+
}
|
|
69
|
+
function parseSequence(lines, start, indent) {
|
|
70
|
+
const arr = [];
|
|
71
|
+
let i = start;
|
|
72
|
+
while (i < lines.length && lines[i].indent === indent && (lines[i].text === '-' || lines[i].text.startsWith('- '))) {
|
|
73
|
+
const itemText = lines[i].text.slice(1).trim();
|
|
74
|
+
i += 1;
|
|
75
|
+
if (itemText === '') {
|
|
76
|
+
if (i < lines.length && lines[i].indent > indent) {
|
|
77
|
+
const [child, next] = parseBlock(lines, i, lines[i].indent);
|
|
78
|
+
arr.push(child);
|
|
79
|
+
i = next;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
arr.push(null);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
arr.push(parseScalarOrFlow(itemText));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return [arr, i];
|
|
90
|
+
}
|
|
91
|
+
/** Split "key: rest" honoring a quoted key; the separator is the first top-level colon. */
|
|
92
|
+
function splitKeyValue(text) {
|
|
93
|
+
let key;
|
|
94
|
+
let idx;
|
|
95
|
+
if (text[0] === "'" || text[0] === '"') {
|
|
96
|
+
const q = text[0];
|
|
97
|
+
let j = 1;
|
|
98
|
+
while (j < text.length && text[j] !== q)
|
|
99
|
+
j += 1;
|
|
100
|
+
key = text.slice(1, j);
|
|
101
|
+
idx = text.indexOf(':', j);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
idx = text.indexOf(':');
|
|
105
|
+
key = idx === -1 ? text : text.slice(0, idx);
|
|
106
|
+
}
|
|
107
|
+
if (idx === -1)
|
|
108
|
+
return { key: key.trim(), rest: '' };
|
|
109
|
+
return { key: key.trim(), rest: text.slice(idx + 1).trim() };
|
|
110
|
+
}
|
|
111
|
+
function parseScalarOrFlow(s) {
|
|
112
|
+
const t = s.trim();
|
|
113
|
+
if (t === '' || t === '~' || t === 'null')
|
|
114
|
+
return null;
|
|
115
|
+
if (t[0] === '{' || t[0] === '[')
|
|
116
|
+
return parseFlow(t).value;
|
|
117
|
+
if (t[0] === "'" || t[0] === '"')
|
|
118
|
+
return unquote(t);
|
|
119
|
+
return t;
|
|
120
|
+
}
|
|
121
|
+
function unquote(t) {
|
|
122
|
+
const q = t[0];
|
|
123
|
+
let j = 1;
|
|
124
|
+
let out = '';
|
|
125
|
+
while (j < t.length && t[j] !== q) {
|
|
126
|
+
out += t[j];
|
|
127
|
+
j += 1;
|
|
128
|
+
}
|
|
129
|
+
return out;
|
|
130
|
+
}
|
|
131
|
+
function parseFlow(s) {
|
|
132
|
+
if (s[0] === '{')
|
|
133
|
+
return parseFlowMap(s);
|
|
134
|
+
if (s[0] === '[')
|
|
135
|
+
return parseFlowSeq(s);
|
|
136
|
+
throw new YamlLiteError(`not a flow collection: ${s.slice(0, 20)}`);
|
|
137
|
+
}
|
|
138
|
+
function parseFlowMap(s) {
|
|
139
|
+
const obj = {};
|
|
140
|
+
let i = 1;
|
|
141
|
+
while (i < s.length) {
|
|
142
|
+
while (i < s.length && (s[i] === ' ' || s[i] === ','))
|
|
143
|
+
i += 1;
|
|
144
|
+
if (s[i] === '}')
|
|
145
|
+
return { value: obj, end: i + 1 };
|
|
146
|
+
let key;
|
|
147
|
+
if (s[i] === "'" || s[i] === '"') {
|
|
148
|
+
const q = s[i];
|
|
149
|
+
let j = i + 1;
|
|
150
|
+
let k = '';
|
|
151
|
+
while (j < s.length && s[j] !== q) {
|
|
152
|
+
k += s[j];
|
|
153
|
+
j += 1;
|
|
154
|
+
}
|
|
155
|
+
key = k;
|
|
156
|
+
i = j + 1;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
let k = '';
|
|
160
|
+
while (i < s.length && s[i] !== ':' && s[i] !== '}' && s[i] !== ',') {
|
|
161
|
+
k += s[i];
|
|
162
|
+
i += 1;
|
|
163
|
+
}
|
|
164
|
+
key = k.trim();
|
|
165
|
+
}
|
|
166
|
+
while (i < s.length && (s[i] === ' ' || s[i] === ':'))
|
|
167
|
+
i += 1;
|
|
168
|
+
const [val, next] = readFlowValue(s, i);
|
|
169
|
+
obj[key] = val;
|
|
170
|
+
i = next;
|
|
171
|
+
}
|
|
172
|
+
throw new YamlLiteError(`unterminated flow map: ${s.slice(0, 40)}`);
|
|
173
|
+
}
|
|
174
|
+
function parseFlowSeq(s) {
|
|
175
|
+
const arr = [];
|
|
176
|
+
let i = 1;
|
|
177
|
+
while (i < s.length) {
|
|
178
|
+
while (i < s.length && (s[i] === ' ' || s[i] === ','))
|
|
179
|
+
i += 1;
|
|
180
|
+
if (s[i] === ']')
|
|
181
|
+
return { value: arr, end: i + 1 };
|
|
182
|
+
const [val, next] = readFlowValue(s, i);
|
|
183
|
+
arr.push(val);
|
|
184
|
+
i = next;
|
|
185
|
+
}
|
|
186
|
+
throw new YamlLiteError(`unterminated flow seq: ${s.slice(0, 40)}`);
|
|
187
|
+
}
|
|
188
|
+
function readFlowValue(s, start) {
|
|
189
|
+
let i = start;
|
|
190
|
+
while (i < s.length && s[i] === ' ')
|
|
191
|
+
i += 1;
|
|
192
|
+
if (s[i] === '{' || s[i] === '[') {
|
|
193
|
+
const { value, end } = parseFlow(s.slice(i));
|
|
194
|
+
return [value, i + end];
|
|
195
|
+
}
|
|
196
|
+
if (s[i] === "'" || s[i] === '"') {
|
|
197
|
+
const q = s[i];
|
|
198
|
+
let j = i + 1;
|
|
199
|
+
let out = '';
|
|
200
|
+
while (j < s.length && s[j] !== q) {
|
|
201
|
+
out += s[j];
|
|
202
|
+
j += 1;
|
|
203
|
+
}
|
|
204
|
+
return [out, j + 1];
|
|
205
|
+
}
|
|
206
|
+
let out = '';
|
|
207
|
+
while (i < s.length && s[i] !== ',' && s[i] !== '}' && s[i] !== ']') {
|
|
208
|
+
out += s[i];
|
|
209
|
+
i += 1;
|
|
210
|
+
}
|
|
211
|
+
return [out.trim(), i];
|
|
212
|
+
}
|
|
213
|
+
/** Deterministic JSON serialization with recursively sorted object keys (byte-stable — §4.3, A6). */
|
|
214
|
+
export function stableStringify(value) {
|
|
215
|
+
return JSON.stringify(sortKeys(value));
|
|
216
|
+
}
|
|
217
|
+
function sortKeys(value) {
|
|
218
|
+
if (Array.isArray(value))
|
|
219
|
+
return value.map(sortKeys);
|
|
220
|
+
if (value && typeof value === 'object') {
|
|
221
|
+
const out = {};
|
|
222
|
+
for (const k of Object.keys(value).sort()) {
|
|
223
|
+
out[k] = sortKeys(value[k]);
|
|
224
|
+
}
|
|
225
|
+
return out;
|
|
226
|
+
}
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=resolver-yaml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver-yaml.js","sourceRoot":"","sources":["../../src/resolver-yaml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;CAC9E;AAID,6GAA6G;AAC7G,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IACjC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,aAAa,CAAC,iBAAkB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAAC,CAAC;IAClH,CAAC;IACD,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,WAAW,KAAK,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc;IAC9D,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAClG,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc;IAChE,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACtD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC,IAAI,CAAC,CAAC;QACP,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBACjD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5D,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACjB,CAAC,GAAG,IAAI,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,MAAc;IACjE,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACnH,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC,IAAI,CAAC,CAAC;QACP,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBACjD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC5D,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,GAAG,IAAI,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,2FAA2F;AAC3F,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,GAAW,CAAC;IAChB,IAAI,GAAW,CAAC;IAChB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;QAChD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACrD,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAS;IAClC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IAC1B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YACzD,GAAG,GAAG,CAAC,CAAC;YAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;YAC3F,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;QAC9D,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QACf,CAAC,GAAG,IAAI,CAAC;IACX,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAAE,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,GAAG,IAAI,CAAC;IACX,CAAC;IACD,MAAM,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,aAAa,CAAC,CAAS,EAAE,KAAa;IAC7C,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACjC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,IAAI,GAAG,GAAG,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACrE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAE,KAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* guardToolRegistry — the agent-runtime inescapability layer (guard-tool-registry-SPEC v1.0).
|
|
3
|
+
*
|
|
4
|
+
* The layer ABOVE the shipped `guardToolCall`: it takes the host's raw tool list and returns the ONLY
|
|
5
|
+
* tool table the agent is allowed to see — every mutating capability wrapped so it cannot execute
|
|
6
|
+
* without entering `guardToolCall`, and construction FAILS CLOSED if a mutator would remain raw.
|
|
7
|
+
*
|
|
8
|
+
* Scope honesty (enforcement-architecture §1): this secures **Placement A — the agent-host runtime
|
|
9
|
+
* tool boundary ONLY**. It NEVER claims merge (Placement B / sibling #7) or deploy inescapability;
|
|
10
|
+
* `claim.inescapable_merge` / `claim.inescapable_deploy` are ALWAYS false here.
|
|
11
|
+
*
|
|
12
|
+
* Determinism (§7): same tool names + classes + config flags → same registry, coverage, guarded set.
|
|
13
|
+
* Anti-fabrication: unknown tools default to MUTATING (never a false COMPLETE); never invent a tool.
|
|
14
|
+
* Non-leakage (§1.2): each raw `execute` is captured in a NEW closure, is never a property of the
|
|
15
|
+
* returned ProtectedTool, the tools array + each tool are frozen, and raw executors live only in a
|
|
16
|
+
* WeakMap keyed by the protected object. `result.tools` is the sole return surface.
|
|
17
|
+
*/
|
|
18
|
+
import type { GuardConfig, ToolCallDescriptor } from './types.js';
|
|
19
|
+
export type ToolMutationClass = 'readonly' | 'mutating' | 'mutating_shell' | 'mutating_vcs' | 'mutating_deploy' | 'mutating_publish' | 'mutating_schema';
|
|
20
|
+
export type RawTool = {
|
|
21
|
+
name: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
inputSchema?: unknown;
|
|
24
|
+
execute: (args: unknown) => Promise<unknown> | unknown;
|
|
25
|
+
mutationClass?: ToolMutationClass;
|
|
26
|
+
meta?: Record<string, unknown>;
|
|
27
|
+
};
|
|
28
|
+
export type ProtectedTool = {
|
|
29
|
+
readonly name: string;
|
|
30
|
+
readonly description?: string;
|
|
31
|
+
readonly inputSchema?: unknown;
|
|
32
|
+
readonly meta?: Record<string, unknown>;
|
|
33
|
+
/** The ONLY entry point exposed to the agent runtime (guarded for mutators, direct for readonly). */
|
|
34
|
+
readonly execute: (args: unknown) => Promise<unknown>;
|
|
35
|
+
readonly _coderifts: {
|
|
36
|
+
readonly guarded: boolean;
|
|
37
|
+
readonly mutationClass: ToolMutationClass;
|
|
38
|
+
/** guard operation bound for this tool (diagnostic; mutators only). */
|
|
39
|
+
readonly operation?: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export type EnforcementCoverage = 'COMPLETE' | 'PARTIAL' | 'BYPASSED' | 'UNKNOWN';
|
|
43
|
+
export type RegistryCoverageReport = {
|
|
44
|
+
version: 'guard-tool-registry-report/1.0';
|
|
45
|
+
coverage: EnforcementCoverage;
|
|
46
|
+
protected_tools: string[];
|
|
47
|
+
guarded_mutators: string[];
|
|
48
|
+
readonly_passthrough: string[];
|
|
49
|
+
unguarded_mutators: string[];
|
|
50
|
+
unknown_treated_as: 'mutating' | 'readonly' | 'reject';
|
|
51
|
+
claim: {
|
|
52
|
+
inescapable_runtime: boolean;
|
|
53
|
+
inescapable_merge: false;
|
|
54
|
+
inescapable_deploy: false;
|
|
55
|
+
};
|
|
56
|
+
siblings: {
|
|
57
|
+
merge_gate: 'required_separate_#7';
|
|
58
|
+
artifact_resolver: 'sibling_#4';
|
|
59
|
+
};
|
|
60
|
+
warnings: string[];
|
|
61
|
+
};
|
|
62
|
+
export type ToolBinder = (tool: RawTool, args: unknown, cls: ToolMutationClass) => ToolCallDescriptor;
|
|
63
|
+
export type GuardToolRegistryConfig = {
|
|
64
|
+
guard?: GuardConfig;
|
|
65
|
+
unknownToolPolicy?: 'mutating' | 'readonly' | 'reject';
|
|
66
|
+
classify?: Record<string, ToolMutationClass>;
|
|
67
|
+
failOnUnguardedMutator?: boolean;
|
|
68
|
+
binders?: Record<string, ToolBinder>;
|
|
69
|
+
forceReadonly?: string[];
|
|
70
|
+
};
|
|
71
|
+
export type RegistryResult = {
|
|
72
|
+
tools: ProtectedTool[];
|
|
73
|
+
coverage: EnforcementCoverage;
|
|
74
|
+
report: RegistryCoverageReport;
|
|
75
|
+
};
|
|
76
|
+
export type RegistryConstructionErrorCode = 'GUARD_CONFIG_INVALID' | 'UNKNOWN_TOOL' | 'DUPLICATE_TOOL_NAME' | 'INVALID_TOOL' | 'FORCE_READONLY_MUTATOR';
|
|
77
|
+
/** Fail-closed construction error (§3) — thrown at CONSTRUCTION, never at first agent call. */
|
|
78
|
+
export declare class RegistryConstructionError extends Error {
|
|
79
|
+
readonly code: RegistryConstructionErrorCode;
|
|
80
|
+
readonly toolName?: string;
|
|
81
|
+
constructor(code: RegistryConstructionErrorCode, message: string, toolName?: string);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Construct the frozen, fail-closed protected tool registry (§1.3). Pure + deterministic.
|
|
85
|
+
* @throws {RegistryConstructionError} per §3 (default failOnUnguardedMutator=true).
|
|
86
|
+
*/
|
|
87
|
+
export declare function guardToolRegistry(rawTools: RawTool[], config?: GuardToolRegistryConfig): RegistryResult;
|
|
88
|
+
//# sourceMappingURL=tool-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/tool-registry.ts"],"names":[],"mappings":"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"}
|