vigiles 2.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/.claude/settings.json +46 -0
- package/.claude/settings.local.json +8 -0
- package/.claude-plugin/hooks/post-edit.sh +34 -0
- package/.claude-plugin/hooks/pre-edit.sh +40 -0
- package/.claude-plugin/hooks/session-start.sh +38 -0
- package/.claude-plugin/marketplace.json +14 -0
- package/.claude-plugin/plugin.json +47 -0
- package/.github/workflows/ci.yml +81 -0
- package/.prettierignore +1 -0
- package/.vigiles/generated.d.ts +205 -0
- package/CLAUDE.md +95 -0
- package/CLAUDE.md.spec.ts +142 -0
- package/CONTRIBUTING.md +121 -0
- package/LICENSE +21 -0
- package/README.md +377 -0
- package/action.yml +25 -0
- package/dist/action.d.ts +7 -0
- package/dist/action.d.ts.map +1 -0
- package/dist/action.js +180 -0
- package/dist/action.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1267 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +2 -0
- package/dist/cli.test.d.ts.map +1 -0
- package/dist/cli.test.js +650 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/compile.d.ts +101 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +503 -0
- package/dist/compile.js.map +1 -0
- package/dist/evolve.d.ts +132 -0
- package/dist/evolve.d.ts.map +1 -0
- package/dist/evolve.js +599 -0
- package/dist/evolve.js.map +1 -0
- package/dist/freshness.d.ts +67 -0
- package/dist/freshness.d.ts.map +1 -0
- package/dist/freshness.js +244 -0
- package/dist/freshness.js.map +1 -0
- package/dist/freshness.test.d.ts +2 -0
- package/dist/freshness.test.d.ts.map +1 -0
- package/dist/freshness.test.js +356 -0
- package/dist/freshness.test.js.map +1 -0
- package/dist/generate-types.d.ts +34 -0
- package/dist/generate-types.d.ts.map +1 -0
- package/dist/generate-types.js +381 -0
- package/dist/generate-types.js.map +1 -0
- package/dist/inline.d.ts +58 -0
- package/dist/inline.d.ts.map +1 -0
- package/dist/inline.js +142 -0
- package/dist/inline.js.map +1 -0
- package/dist/inline.test.d.ts +5 -0
- package/dist/inline.test.d.ts.map +1 -0
- package/dist/inline.test.js +152 -0
- package/dist/inline.test.js.map +1 -0
- package/dist/linters.d.ts +38 -0
- package/dist/linters.d.ts.map +1 -0
- package/dist/linters.js +588 -0
- package/dist/linters.js.map +1 -0
- package/dist/proofs.d.ts +272 -0
- package/dist/proofs.d.ts.map +1 -0
- package/dist/proofs.js +622 -0
- package/dist/proofs.js.map +1 -0
- package/dist/proofs.test.d.ts +9 -0
- package/dist/proofs.test.d.ts.map +1 -0
- package/dist/proofs.test.js +952 -0
- package/dist/proofs.test.js.map +1 -0
- package/dist/spec.d.ts +258 -0
- package/dist/spec.d.ts.map +1 -0
- package/dist/spec.js +113 -0
- package/dist/spec.js.map +1 -0
- package/dist/spec.test.d.ts +2 -0
- package/dist/spec.test.d.ts.map +1 -0
- package/dist/spec.test.js +1222 -0
- package/dist/spec.test.js.map +1 -0
- package/dist/types.d.ts +101 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +10 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +286 -0
- package/dist/validate.js.map +1 -0
- package/dist/validate.test.d.ts +2 -0
- package/dist/validate.test.d.ts.map +1 -0
- package/dist/validate.test.js +531 -0
- package/dist/validate.test.js.map +1 -0
- package/docs/agent-setup.md +85 -0
- package/docs/agent-workflows.md +103 -0
- package/docs/comparison.md +71 -0
- package/docs/freshness.md +124 -0
- package/docs/inline-mode.md +119 -0
- package/docs/linter-support.md +166 -0
- package/docs/spec-format.md +194 -0
- package/eslint.config.mjs +79 -0
- package/examples/CLAUDE.md +54 -0
- package/examples/CLAUDE.md.spec.ts +65 -0
- package/examples/SKILL.md +50 -0
- package/examples/SKILL.md.spec.ts +57 -0
- package/fixtures/example-project/CLAUDE.md +11 -0
- package/fixtures/example-project/package.json +9 -0
- package/fixtures/example-project/src/index.ts +3 -0
- package/fixtures/example-project/src/utils.test.ts +2 -0
- package/fixtures/example-project/src/utils.ts +3 -0
- package/logo.png +0 -0
- package/package.json +42 -0
- package/research/adoption-strategy.md +111 -0
- package/research/agent-integration.md +145 -0
- package/research/ai-code-quality.md +197 -0
- package/research/code-search-for-agents.md +313 -0
- package/research/competitive-landscape.md +163 -0
- package/research/doc-freshness.md +516 -0
- package/research/executable-specs.md +368 -0
- package/research/feature-ideas.md +464 -0
- package/research/formal-proofs-for-agents.md +338 -0
- package/research/fp-for-agent-harness.md +150 -0
- package/research/fp-for-deterministic-ai.md +131 -0
- package/research/self-evolving-specs.md +298 -0
- package/schemas/claude-md-strict.yml +18 -0
- package/schemas/claude-md.yml +6 -0
- package/schemas/skill-strict.yml +12 -0
- package/schemas/skill.yml +5 -0
- package/skills/audit-feedback-loop/SKILL.md +76 -0
- package/skills/edit-spec/SKILL.md +131 -0
- package/skills/enforce-rules-format/SKILL.md +71 -0
- package/skills/generate-logo/SKILL.md +102 -0
- package/skills/generate-rule/SKILL.md +90 -0
- package/skills/linter-docs/clippy.md +241 -0
- package/skills/linter-docs/eslint.md +384 -0
- package/skills/linter-docs/pylint.md +288 -0
- package/skills/linter-docs/rubocop.md +277 -0
- package/skills/linter-docs/ruff.md +187 -0
- package/skills/linter-docs/stylelint.md +247 -0
- package/skills/migrate-to-spec/SKILL.md +124 -0
- package/skills/pr-to-lint-rule/SKILL.md +97 -0
- package/skills/strengthen/SKILL.md +168 -0
- package/src/action.ts +214 -0
- package/src/cli.test.ts +914 -0
- package/src/cli.ts +1631 -0
- package/src/compile.ts +691 -0
- package/src/evolve.ts +781 -0
- package/src/freshness.test.ts +449 -0
- package/src/freshness.ts +299 -0
- package/src/generate-types.ts +448 -0
- package/src/inline.test.ts +206 -0
- package/src/inline.ts +164 -0
- package/src/linters.ts +739 -0
- package/src/proofs.test.ts +1314 -0
- package/src/proofs.ts +849 -0
- package/src/spec.test.ts +1471 -0
- package/src/spec.ts +427 -0
- package/src/types.ts +117 -0
- package/src/validate.test.ts +701 -0
- package/src/validate.ts +381 -0
- package/tsconfig.json +23 -0
package/dist/proofs.d.ts
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vigiles — Deterministic proof system for self-evolving specifications.
|
|
3
|
+
*
|
|
4
|
+
* Six algorithms that verify spec mutations without any LLM dependency:
|
|
5
|
+
*
|
|
6
|
+
* 1. MonotonicityLattice — rules can only strengthen over time
|
|
7
|
+
* 2. ncd() — information-theoretic duplicate detection
|
|
8
|
+
* 3. BloomFilter — fast approximate set membership
|
|
9
|
+
* 4. fixedPoint() — compilation convergence detection
|
|
10
|
+
* 5. MerkleHistory — tamper-evident spec evolution audit trail
|
|
11
|
+
* 6. propertyTest() — random mutation + invariant checking
|
|
12
|
+
*/
|
|
13
|
+
import type { Rule, ClaudeSpec } from "./spec.js";
|
|
14
|
+
export interface MonotonicityViolation {
|
|
15
|
+
ruleId: string;
|
|
16
|
+
from: Rule["_kind"];
|
|
17
|
+
to: Rule["_kind"];
|
|
18
|
+
fromStrength: number;
|
|
19
|
+
toStrength: number;
|
|
20
|
+
}
|
|
21
|
+
export interface MonotonicityResult {
|
|
22
|
+
valid: boolean;
|
|
23
|
+
violations: MonotonicityViolation[];
|
|
24
|
+
added: string[];
|
|
25
|
+
removed: string[];
|
|
26
|
+
strengthened: string[];
|
|
27
|
+
unchanged: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Check that a spec mutation is monotonic: existing rules only strengthen.
|
|
31
|
+
*
|
|
32
|
+
* - Adding rules: always allowed
|
|
33
|
+
* - Removing rules: flagged (informational, not a violation by default)
|
|
34
|
+
* - Strengthening (guidance → check → enforce): allowed
|
|
35
|
+
* - Weakening (enforce → guidance): violation unless allowWeaken includes the rule ID
|
|
36
|
+
*/
|
|
37
|
+
export declare function checkMonotonicity(before: Record<string, Rule>, after: Record<string, Rule>, options?: {
|
|
38
|
+
allowWeaken?: Set<string>;
|
|
39
|
+
}): MonotonicityResult;
|
|
40
|
+
/**
|
|
41
|
+
* Compute the join (least upper bound) of two rule kinds in the lattice.
|
|
42
|
+
* join(guidance, enforce) = enforce
|
|
43
|
+
*/
|
|
44
|
+
export declare function latticeJoin(a: Rule["_kind"], b: Rule["_kind"]): Rule["_kind"];
|
|
45
|
+
/**
|
|
46
|
+
* Compute the meet (greatest lower bound) of two rule kinds in the lattice.
|
|
47
|
+
* meet(guidance, enforce) = guidance
|
|
48
|
+
*/
|
|
49
|
+
export declare function latticeMeet(a: Rule["_kind"], b: Rule["_kind"]): Rule["_kind"];
|
|
50
|
+
/** Get the numeric strength of a rule kind. */
|
|
51
|
+
export declare function ruleStrength(kind: Rule["_kind"]): number;
|
|
52
|
+
/**
|
|
53
|
+
* Normalized Compression Distance — information-theoretic similarity.
|
|
54
|
+
*
|
|
55
|
+
* NCD(x, y) = (C(xy) - min(C(x), C(y))) / max(C(x), C(y))
|
|
56
|
+
*
|
|
57
|
+
* Range: [0, 1+ε] where 0 = identical information content.
|
|
58
|
+
* Deterministic. No model dependency. Approximates the universal distance metric.
|
|
59
|
+
*
|
|
60
|
+
* Reference: Li, Chen, Li, Ma, Vitányi (2004) "The Similarity Metric"
|
|
61
|
+
*/
|
|
62
|
+
export declare function ncd(a: string, b: string): number;
|
|
63
|
+
export interface NCDPair {
|
|
64
|
+
idA: string;
|
|
65
|
+
idB: string;
|
|
66
|
+
distance: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Find all rule pairs with NCD below a similarity threshold.
|
|
70
|
+
* Returns pairs sorted by distance (most similar first).
|
|
71
|
+
*/
|
|
72
|
+
export declare function findSimilarRules(rules: Record<string, Rule>, threshold?: number): NCDPair[];
|
|
73
|
+
/**
|
|
74
|
+
* Bloom filter — space-efficient probabilistic set membership.
|
|
75
|
+
*
|
|
76
|
+
* Insert elements, then query "is X possibly in the set?"
|
|
77
|
+
* False positives possible. False negatives impossible.
|
|
78
|
+
*
|
|
79
|
+
* Optimal parameters:
|
|
80
|
+
* m = -(n × ln(p)) / (ln2)² (bit array size)
|
|
81
|
+
* k = (m / n) × ln2 (hash function count)
|
|
82
|
+
*
|
|
83
|
+
* Reference: Bloom (1970) "Space/Time Trade-offs in Hash Coding"
|
|
84
|
+
*/
|
|
85
|
+
export declare class BloomFilter {
|
|
86
|
+
private readonly bits;
|
|
87
|
+
private readonly numHashes;
|
|
88
|
+
readonly size: number;
|
|
89
|
+
private _count;
|
|
90
|
+
/**
|
|
91
|
+
* Create a Bloom filter.
|
|
92
|
+
* @param expectedItems Expected number of items to insert
|
|
93
|
+
* @param falsePositiveRate Desired false positive rate (0-1)
|
|
94
|
+
*/
|
|
95
|
+
constructor(expectedItems: number, falsePositiveRate?: number);
|
|
96
|
+
/** Number of items inserted. */
|
|
97
|
+
get count(): number;
|
|
98
|
+
/** Theoretical false positive rate given current fill. */
|
|
99
|
+
get estimatedFPR(): number;
|
|
100
|
+
/** Insert an element. */
|
|
101
|
+
add(item: string): void;
|
|
102
|
+
/** Query membership. Returns true if the item MIGHT be in the set. */
|
|
103
|
+
has(item: string): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Estimate the Jaccard similarity between two Bloom filters.
|
|
106
|
+
* Uses bit-level comparison — no need to know the original elements.
|
|
107
|
+
*/
|
|
108
|
+
static jaccardSimilarity(a: BloomFilter, b: BloomFilter): number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Build a Bloom filter from a rule's tokens.
|
|
112
|
+
* Tokenizes rule text into words and n-grams for fuzzy matching.
|
|
113
|
+
*/
|
|
114
|
+
export declare function ruleToBloomFilter(rule: Rule, expectedTokens?: number): BloomFilter;
|
|
115
|
+
export interface FixedPointResult {
|
|
116
|
+
converged: boolean;
|
|
117
|
+
iterations: number;
|
|
118
|
+
/** Hash at each iteration. */
|
|
119
|
+
hashes: string[];
|
|
120
|
+
/** If not converged, the cycle length (0 = no cycle detected within maxIterations). */
|
|
121
|
+
cycleLength: number;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Detect whether a compile function reaches a fixed point.
|
|
125
|
+
*
|
|
126
|
+
* A fixed point means: applying the function again produces the same output.
|
|
127
|
+
* compile(compile(spec)) === compile(spec)
|
|
128
|
+
*
|
|
129
|
+
* If the function doesn't converge, detects cycles using Floyd's
|
|
130
|
+
* tortoise-and-hare algorithm adapted for hash sequences.
|
|
131
|
+
*
|
|
132
|
+
* @param compileFn A function that takes content and returns new content
|
|
133
|
+
* @param initialContent Starting content
|
|
134
|
+
* @param maxIterations Maximum iterations before declaring divergence
|
|
135
|
+
*/
|
|
136
|
+
export declare function fixedPoint(compileFn: (content: string) => string, initialContent: string, maxIterations?: number): FixedPointResult;
|
|
137
|
+
export interface Mutation {
|
|
138
|
+
type: "add" | "remove" | "strengthen" | "weaken" | "merge" | "reword";
|
|
139
|
+
ruleIds: string[];
|
|
140
|
+
description: string;
|
|
141
|
+
}
|
|
142
|
+
export interface ProofReceipt {
|
|
143
|
+
name: string;
|
|
144
|
+
passed: boolean;
|
|
145
|
+
detail?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface HistoryNode {
|
|
148
|
+
/** SHA-256 hash of this node (covers all fields except `hash` itself). */
|
|
149
|
+
hash: string;
|
|
150
|
+
/** Hash of the parent node ("genesis" for the first node). */
|
|
151
|
+
parentHash: string;
|
|
152
|
+
/** Hash of the compiled spec content at this version. */
|
|
153
|
+
specHash: string;
|
|
154
|
+
/** What mutation was applied. */
|
|
155
|
+
mutation: Mutation;
|
|
156
|
+
/** Proof receipts — which proofs ran and their results. */
|
|
157
|
+
proofs: ProofReceipt[];
|
|
158
|
+
/** Unix timestamp (ms). */
|
|
159
|
+
timestamp: number;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Merkle history — append-only, tamper-evident spec evolution log.
|
|
163
|
+
*
|
|
164
|
+
* Each node's hash covers its parent hash, creating a chain where
|
|
165
|
+
* tampering with any node invalidates all descendants.
|
|
166
|
+
*/
|
|
167
|
+
/**
|
|
168
|
+
* Read-only view of a MerkleHistory — exposes inspection methods but no
|
|
169
|
+
* append/mutation surface. Callers that only need to read the audit trail
|
|
170
|
+
* should depend on this instead of MerkleHistory to prevent bypassing the
|
|
171
|
+
* engine's validation gates.
|
|
172
|
+
*/
|
|
173
|
+
export interface ReadonlyMerkleHistory {
|
|
174
|
+
readonly length: number;
|
|
175
|
+
head(): HistoryNode | null;
|
|
176
|
+
getNodes(): readonly HistoryNode[];
|
|
177
|
+
verify(): {
|
|
178
|
+
valid: boolean;
|
|
179
|
+
invalidAt: number;
|
|
180
|
+
};
|
|
181
|
+
toJSON(): string;
|
|
182
|
+
}
|
|
183
|
+
export declare class MerkleHistory implements ReadonlyMerkleHistory {
|
|
184
|
+
private nodes;
|
|
185
|
+
/** Number of versions in the history. */
|
|
186
|
+
get length(): number;
|
|
187
|
+
/**
|
|
188
|
+
* Get all nodes as a deep defensive copy. Callers cannot mutate node
|
|
189
|
+
* fields (specHash, mutation, proofs) through this API — that would
|
|
190
|
+
* bypass append/proof gates and weaken the tamper-evident guarantees.
|
|
191
|
+
*/
|
|
192
|
+
getNodes(): readonly HistoryNode[];
|
|
193
|
+
/**
|
|
194
|
+
* Get the latest node, or null if empty. Returned as a deep defensive
|
|
195
|
+
* copy — see getNodes() for rationale.
|
|
196
|
+
*/
|
|
197
|
+
head(): HistoryNode | null;
|
|
198
|
+
/**
|
|
199
|
+
* Append a new version to the history.
|
|
200
|
+
* Returns the hash of the new node.
|
|
201
|
+
*/
|
|
202
|
+
append(specHash: string, mutation: Mutation, proofs: ProofReceipt[]): string;
|
|
203
|
+
/**
|
|
204
|
+
* Verify the entire chain — every node's hash must be correct,
|
|
205
|
+
* and every parent pointer must match the previous node.
|
|
206
|
+
*
|
|
207
|
+
* Returns the index of the first invalid node, or -1 if valid.
|
|
208
|
+
*/
|
|
209
|
+
verify(): {
|
|
210
|
+
valid: boolean;
|
|
211
|
+
invalidAt: number;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Serialize the history to JSON for persistence.
|
|
215
|
+
*/
|
|
216
|
+
toJSON(): string;
|
|
217
|
+
/**
|
|
218
|
+
* Deserialize a history from JSON. Rejects non-array payloads and
|
|
219
|
+
* validates that each entry has the required HistoryNode shape so
|
|
220
|
+
* malformed persisted data can't produce a "valid" history that
|
|
221
|
+
* later crashes on append/verify.
|
|
222
|
+
*/
|
|
223
|
+
static fromJSON(json: string): MerkleHistory;
|
|
224
|
+
}
|
|
225
|
+
export type MutationGenerator<T> = (value: T, seed: number) => T;
|
|
226
|
+
export type Invariant<T> = (value: T) => boolean;
|
|
227
|
+
export interface PropertyTestResult<T> {
|
|
228
|
+
passed: boolean;
|
|
229
|
+
iterations: number;
|
|
230
|
+
/** If failed, the mutation sequence that caused the failure. */
|
|
231
|
+
failingSequence?: T[];
|
|
232
|
+
/** If failed, the minimal shrunk counterexample. */
|
|
233
|
+
shrunk?: T;
|
|
234
|
+
/** Name of the invariant that failed. */
|
|
235
|
+
failedInvariant?: string;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Property-based testing: generate random mutations, check invariants hold.
|
|
239
|
+
*
|
|
240
|
+
* Inspired by QuickCheck/fast-check. Uses a deterministic PRNG for
|
|
241
|
+
* reproducible failures.
|
|
242
|
+
*
|
|
243
|
+
* @param initial Starting value
|
|
244
|
+
* @param mutate Function that produces a random mutation
|
|
245
|
+
* @param invariants Named invariant functions that must all return true
|
|
246
|
+
* @param options Test parameters
|
|
247
|
+
*/
|
|
248
|
+
export declare function propertyTest<T>(initial: T, mutate: MutationGenerator<T>, invariants: Record<string, Invariant<T>>, options?: {
|
|
249
|
+
iterations?: number;
|
|
250
|
+
seed?: number;
|
|
251
|
+
sequenceLength?: number;
|
|
252
|
+
}): PropertyTestResult<T>;
|
|
253
|
+
export interface FitnessResult {
|
|
254
|
+
score: number;
|
|
255
|
+
coverage: number;
|
|
256
|
+
redundancy: number;
|
|
257
|
+
budgetPressure: number;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Compute the fitness of a spec. Higher is better.
|
|
261
|
+
*
|
|
262
|
+
* fitness = coverage × (1 - redundancy) × (1 - budgetPressure)
|
|
263
|
+
*
|
|
264
|
+
* - coverage: fraction of rules with enforcement (check or enforce)
|
|
265
|
+
* - redundancy: fraction of rule pairs that are near-duplicates (NCD < threshold)
|
|
266
|
+
* - budgetPressure: tokens used / max tokens
|
|
267
|
+
*/
|
|
268
|
+
export declare function fitness(spec: ClaudeSpec, options?: {
|
|
269
|
+
maxTokens?: number;
|
|
270
|
+
ncdThreshold?: number;
|
|
271
|
+
}): FitnessResult;
|
|
272
|
+
//# sourceMappingURL=proofs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proofs.d.ts","sourceRoot":"","sources":["../src/proofs.ts"],"names":[],"mappings":"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"}
|