vigiles 15.4.1 → 16.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.
|
@@ -51,8 +51,31 @@ export interface ClaudeCodeToolVocabulary extends ToolVocabulary {
|
|
|
51
51
|
export declare function agent<const P extends AuthoredPurity | undefined = undefined>(spec: AgentSpecInput<P, ClaudeCodeToolVocabulary>): AgentSpec;
|
|
52
52
|
/**
|
|
53
53
|
* Define a Claude Code skill with the purity floor enforced AT COMPILE TIME
|
|
54
|
-
* against the Claude Code tool catalog. Identical to the core
|
|
55
|
-
* runtime; the typed `tools` constraint is the only
|
|
54
|
+
* against the Claude Code tool catalog. Identical to the core
|
|
55
|
+
* `experimental_skill()` at runtime; the typed `tools` constraint is the only
|
|
56
|
+
* difference.
|
|
57
|
+
*
|
|
58
|
+
* Carries the same `.input` / `.step` helpers as the core builder, and it must:
|
|
59
|
+
* those two stopped being standalone exports when the helper vocabulary moved
|
|
60
|
+
* onto the skill builder, so an author who picked this door would otherwise have
|
|
61
|
+
* no way to reach them. Before the move they came from `vigiles/spec` — a second
|
|
62
|
+
* import for one skill, which is the asymmetry this closes rather than a cost it
|
|
63
|
+
* introduces.
|
|
64
|
+
*
|
|
65
|
+
* @experimental
|
|
66
|
+
*/
|
|
67
|
+
declare function skillSpec<const P extends AuthoredPurity | undefined = undefined>(spec: SkillSpecInput<P, ClaudeCodeToolVocabulary>): SkillSpec;
|
|
68
|
+
/**
|
|
69
|
+
* @experimental
|
|
56
70
|
*/
|
|
57
|
-
export declare
|
|
71
|
+
export declare const experimental_skill: typeof skillSpec & {
|
|
72
|
+
input: (name: string, hint: string, opts?: {
|
|
73
|
+
required?: boolean;
|
|
74
|
+
}) => import("../../core/spec.js").SkillInput;
|
|
75
|
+
step: (instr: string | import("../../core/spec.js").InstructionFragment[], opts?: {
|
|
76
|
+
gate?: import("../../core/spec.js").Gate;
|
|
77
|
+
retry?: number;
|
|
78
|
+
}) => import("../../core/spec.js").SkillStep;
|
|
79
|
+
};
|
|
80
|
+
export {};
|
|
58
81
|
//# sourceMappingURL=typed-spec.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.experimental_skill = void 0;
|
|
3
4
|
exports.agent = agent;
|
|
4
|
-
exports.experimental_skill = experimental_skill;
|
|
5
5
|
/**
|
|
6
6
|
* Typed Claude Code authoring surface — the compile-time half of the purity
|
|
7
7
|
* contract, bound to the Claude Code tool vocabulary.
|
|
@@ -46,10 +46,27 @@ function agent(spec) {
|
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* Define a Claude Code skill with the purity floor enforced AT COMPILE TIME
|
|
49
|
-
* against the Claude Code tool catalog. Identical to the core
|
|
50
|
-
* runtime; the typed `tools` constraint is the only
|
|
49
|
+
* against the Claude Code tool catalog. Identical to the core
|
|
50
|
+
* `experimental_skill()` at runtime; the typed `tools` constraint is the only
|
|
51
|
+
* difference.
|
|
52
|
+
*
|
|
53
|
+
* Carries the same `.input` / `.step` helpers as the core builder, and it must:
|
|
54
|
+
* those two stopped being standalone exports when the helper vocabulary moved
|
|
55
|
+
* onto the skill builder, so an author who picked this door would otherwise have
|
|
56
|
+
* no way to reach them. Before the move they came from `vigiles/spec` — a second
|
|
57
|
+
* import for one skill, which is the asymmetry this closes rather than a cost it
|
|
58
|
+
* introduces.
|
|
59
|
+
*
|
|
60
|
+
* @experimental
|
|
51
61
|
*/
|
|
52
|
-
function
|
|
62
|
+
function skillSpec(spec) {
|
|
53
63
|
return (0, spec_js_1.experimental_skill)(spec);
|
|
54
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* @experimental
|
|
67
|
+
*/
|
|
68
|
+
exports.experimental_skill = Object.assign(skillSpec, {
|
|
69
|
+
input: spec_js_1.experimental_skill.input,
|
|
70
|
+
step: spec_js_1.experimental_skill.step,
|
|
71
|
+
});
|
|
55
72
|
//# sourceMappingURL=typed-spec.js.map
|
package/dist/core/spec.d.ts
CHANGED
|
@@ -399,12 +399,21 @@ export interface SkillStep {
|
|
|
399
399
|
/** Max attempts to satisfy the gate before the step fails (default 1). */
|
|
400
400
|
readonly retry?: number;
|
|
401
401
|
}
|
|
402
|
-
/**
|
|
403
|
-
|
|
402
|
+
/**
|
|
403
|
+
* Declare a skill input (compiles to argument-hint + an Arguments entry).
|
|
404
|
+
*
|
|
405
|
+
* Deliberately NOT a standalone export — reached as `experimental_skill.input`.
|
|
406
|
+
* The reason is on `experimental_skill` below.
|
|
407
|
+
*/
|
|
408
|
+
declare function input(name: string, hint: string, opts?: {
|
|
404
409
|
required?: boolean;
|
|
405
410
|
}): SkillInput;
|
|
406
|
-
/**
|
|
407
|
-
|
|
411
|
+
/**
|
|
412
|
+
* Declare a gated pipeline step.
|
|
413
|
+
*
|
|
414
|
+
* Deliberately NOT a standalone export — reached as `experimental_skill.step`.
|
|
415
|
+
*/
|
|
416
|
+
declare function step(instr: string | InstructionFragment[], opts?: {
|
|
408
417
|
gate?: Gate;
|
|
409
418
|
retry?: number;
|
|
410
419
|
}): SkillStep;
|
|
@@ -504,9 +513,32 @@ export type SkillSpecInput<P extends AuthoredPurity | undefined, V extends ToolV
|
|
|
504
513
|
* DIFFERENT function — a `Check<Trace>` taking an id string, asking whether a
|
|
505
514
|
* skill fired. This one authors a skill; that one observes one.
|
|
506
515
|
*
|
|
516
|
+
* Its helper vocabulary hangs off it — `experimental_skill.input(…)` and
|
|
517
|
+
* `experimental_skill.step(…)` — rather than being exported beside it. Both are
|
|
518
|
+
* used ONLY by skill specs (measured: zero uses in agent/claude specs, against
|
|
519
|
+
* `cmd`/`file`/`ref`/`result`, which are shared and therefore stay top-level).
|
|
520
|
+
* Hanging them here makes the experimental marking STRUCTURAL for the whole
|
|
521
|
+
* family: you cannot reach `input()` without naming `experimental_skill` first.
|
|
522
|
+
* The prefix convention alone could not do that — it is a habit, and it had
|
|
523
|
+
* already leaked once when `skill()` shipped stable-named against its own docs.
|
|
524
|
+
*
|
|
525
|
+
* Honest limit: `const { input } = experimental_skill` strips the marker again
|
|
526
|
+
* inside one file. What the shape actually guarantees is narrower and still
|
|
527
|
+
* worth having — an unmarked name never crosses the package boundary.
|
|
528
|
+
*
|
|
529
|
+
* `Object.assign` rather than `export namespace`: the latter is banned by this
|
|
530
|
+
* repo's own lint (`no-namespace: error`, inherited from strict-type-checked).
|
|
531
|
+
*
|
|
532
|
+
* @experimental
|
|
533
|
+
*/
|
|
534
|
+
declare function skillSpec<const P extends AuthoredPurity | undefined = undefined, V extends ToolVocabulary = OpenToolVocabulary>(spec: SkillSpecInput<P, V>): SkillSpec;
|
|
535
|
+
/**
|
|
507
536
|
* @experimental
|
|
508
537
|
*/
|
|
509
|
-
export declare
|
|
538
|
+
export declare const experimental_skill: typeof skillSpec & {
|
|
539
|
+
input: typeof input;
|
|
540
|
+
step: typeof step;
|
|
541
|
+
};
|
|
510
542
|
/**
|
|
511
543
|
* A subagent definition (compiles to `agents/<name>.md`). Unlike a skill —
|
|
512
544
|
* reference material the model reads on activation — a subagent is a *delegated
|
package/dist/core/spec.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* guidance() — prose only, no mechanical enforcement
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.BUILTIN_LINTERS = void 0;
|
|
13
|
+
exports.experimental_skill = exports.BUILTIN_LINTERS = void 0;
|
|
14
14
|
exports.enforce = enforce;
|
|
15
15
|
exports.guidance = guidance;
|
|
16
16
|
exports.guard = guard;
|
|
@@ -24,9 +24,6 @@ exports.instructions = instructions;
|
|
|
24
24
|
exports.experimental_effect = experimental_effect;
|
|
25
25
|
exports.claude = claude;
|
|
26
26
|
exports.project = project;
|
|
27
|
-
exports.input = input;
|
|
28
|
-
exports.step = step;
|
|
29
|
-
exports.experimental_skill = experimental_skill;
|
|
30
27
|
exports.agent = agent;
|
|
31
28
|
exports.result = result;
|
|
32
29
|
exports.delegate = delegate;
|
|
@@ -222,11 +219,20 @@ function claude(spec) {
|
|
|
222
219
|
function project(role) {
|
|
223
220
|
return { _ref: "role", role };
|
|
224
221
|
}
|
|
225
|
-
/**
|
|
222
|
+
/**
|
|
223
|
+
* Declare a skill input (compiles to argument-hint + an Arguments entry).
|
|
224
|
+
*
|
|
225
|
+
* Deliberately NOT a standalone export — reached as `experimental_skill.input`.
|
|
226
|
+
* The reason is on `experimental_skill` below.
|
|
227
|
+
*/
|
|
226
228
|
function input(name, hint, opts = {}) {
|
|
227
229
|
return { name, hint, required: opts.required };
|
|
228
230
|
}
|
|
229
|
-
/**
|
|
231
|
+
/**
|
|
232
|
+
* Declare a gated pipeline step.
|
|
233
|
+
*
|
|
234
|
+
* Deliberately NOT a standalone export — reached as `experimental_skill.step`.
|
|
235
|
+
*/
|
|
230
236
|
function step(instr, opts = {}) {
|
|
231
237
|
return { do: instr, gate: opts.gate, retry: opts.retry };
|
|
232
238
|
}
|
|
@@ -245,11 +251,31 @@ function step(instr, opts = {}) {
|
|
|
245
251
|
* DIFFERENT function — a `Check<Trace>` taking an id string, asking whether a
|
|
246
252
|
* skill fired. This one authors a skill; that one observes one.
|
|
247
253
|
*
|
|
254
|
+
* Its helper vocabulary hangs off it — `experimental_skill.input(…)` and
|
|
255
|
+
* `experimental_skill.step(…)` — rather than being exported beside it. Both are
|
|
256
|
+
* used ONLY by skill specs (measured: zero uses in agent/claude specs, against
|
|
257
|
+
* `cmd`/`file`/`ref`/`result`, which are shared and therefore stay top-level).
|
|
258
|
+
* Hanging them here makes the experimental marking STRUCTURAL for the whole
|
|
259
|
+
* family: you cannot reach `input()` without naming `experimental_skill` first.
|
|
260
|
+
* The prefix convention alone could not do that — it is a habit, and it had
|
|
261
|
+
* already leaked once when `skill()` shipped stable-named against its own docs.
|
|
262
|
+
*
|
|
263
|
+
* Honest limit: `const { input } = experimental_skill` strips the marker again
|
|
264
|
+
* inside one file. What the shape actually guarantees is narrower and still
|
|
265
|
+
* worth having — an unmarked name never crosses the package boundary.
|
|
266
|
+
*
|
|
267
|
+
* `Object.assign` rather than `export namespace`: the latter is banned by this
|
|
268
|
+
* repo's own lint (`no-namespace: error`, inherited from strict-type-checked).
|
|
269
|
+
*
|
|
248
270
|
* @experimental
|
|
249
271
|
*/
|
|
250
|
-
function
|
|
272
|
+
function skillSpec(spec) {
|
|
251
273
|
return { _specType: "skill", ...spec };
|
|
252
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* @experimental
|
|
277
|
+
*/
|
|
278
|
+
exports.experimental_skill = Object.assign(skillSpec, { input, step });
|
|
253
279
|
/**
|
|
254
280
|
* Define a subagent specification (compiles to `agents/<name>.md`).
|
|
255
281
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vigiles",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "16.0.0",
|
|
4
4
|
"description": "Audit, test and measure the harness your AI agent runs on — grade your CLAUDE.md / AGENTS.md, skills, subagents and hooks, run them against a scripted model, and measure whether they actually fire.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"test:types": "npm run build && tsc --noEmit -p test/types/tsconfig.json",
|
|
90
90
|
"api:report": "npm run build && node scripts/api-extractor.mjs --local",
|
|
91
91
|
"api:check": "npm run build && node scripts/api-extractor.mjs",
|
|
92
|
+
"check": "node scripts/check.mjs",
|
|
92
93
|
"docs:check": "npm run build && node scripts/check-doc-imports.mjs . docs README.md",
|
|
93
94
|
"exports:check": "npm run build && node scripts/check-export-prefixes.mjs .",
|
|
94
95
|
"experimental:check": "npm run api:check && node scripts/check-experimental-naming.mjs",
|
|
@@ -98,6 +99,7 @@
|
|
|
98
99
|
"@eslint/js": "^10.0.1",
|
|
99
100
|
"@jackchuka/mdschema": "^0.12.8",
|
|
100
101
|
"@microsoft/api-extractor": "^7.58.9",
|
|
102
|
+
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
101
103
|
"@types/js-yaml": "^4.0.9",
|
|
102
104
|
"@types/markdown-it": "^14.1.2",
|
|
103
105
|
"@types/minimatch": "^5.1.2",
|
|
@@ -105,6 +107,7 @@
|
|
|
105
107
|
"@typescript-eslint/eslint-plugin": "^8.58.0",
|
|
106
108
|
"@typescript-eslint/parser": "^8.58.0",
|
|
107
109
|
"@vitest/coverage-v8": "^4.1.8",
|
|
110
|
+
"conventional-changelog-conventionalcommits": "^10.3.0",
|
|
108
111
|
"eslint": "^10.1.0",
|
|
109
112
|
"eslint-import-resolver-typescript": "^4.4.5",
|
|
110
113
|
"eslint-plugin-boundaries": "^6.0.2",
|