Files
zernie__vigiles/package.json
T
zernie 900dc7e06a refactor(spec)!: name things for what they are; retire the vigiles/experimental subpath (#169)
Three exported symbols were named for something other than what they are, and
two mechanisms were doing one job.

RENAMES (old names kept one major, @deprecated, removed one major AFTER this one):
  claude()          → instructionFile()     compiles CLAUDE.md AND AGENTS.md, so a
                                            name from one harness was never right
  instructions``    → prose``               builds a prose FRAGMENT; the plural read
                                            as "the instruction file", which is what
                                            instructionFile() builds
  agent()           → experimental_agent()  the shape is not settled, and the tag was
                                            never there (git log -S empty)
  SkillSpec.result: → postcondition:        `result` already meant the subagent output
                                            contract one screen down; the doc comment
                                            had to spend a line disambiguating them

The alias window is not politeness. Measured: the previous rename shipped with
ZERO overlap (18.1.1 old names only, 19.0.0 new only). A container rollback put
the old node_modules under new sources, PreToolUse stopped loading, and a
PreToolUse that does not load denies EVERY Bash command — including the one that
fixes it. One window per major makes that pair unrepresentable.

SUBPATH RETIRED. vigiles/experimental is gone; its members moved to the door
their feature already uses. Of two mechanisms for one promise the subpath was the
weaker: it marks the import line, out of view by the time anyone reads the call.
Measured on the only user-facing example — with the prefix aliased away at
import, the marker survived at 0 of 5 call sites. So the prefix stays, the advice
to alias it away became an explicit prohibition, and the six define* entry points
are DECLARED prefixed rather than gaining it at re-export.

That de-aliasing is what unblocked moving the naming check into ESLint, and the
ORDER was load-bearing: measured before it, dropping the public/internal
exemption produced 14 findings, all from the re-export indirection. Measured
after, across all of src/ with no exemption: 22 tagged declarations, 0
unprefixed. The rule turns on silent.

EXPORT CLEANUP. vigiles/linting export * → curated, 103 → 79 symbols; its header
claimed to be curated with an `export *` one line below, and claimed the builders
were also at the package root (191 exports there, zero matches). ClaudeTool and
HookEvent deleted — zero references, and both had drifted off the dialect they
claimed to mirror; HookEvent listed 5 events, two of which do not exist, against
the 31 the vendor documents.

DOCS. experimental.md deleted and distributed per feature: the skill half into
skills.md §Status, the hook half into a new compiled-hooks.md §Status, and the
emit half — 111 of its 177 lines, a topic doc wearing a stability page's clothes
— into docs/emit-channel.md, which gains the "which channel when" comparison it
never had. The one cross-cutting sentence went to the README.

TWO GATES WERE GREEN AND WRONG, both found by this work:
  - api:check reported "verified for 11 entries — no drift" while reading
    dist/experimental.d.ts from a PREVIOUS build (tsc does not clean dist/) for a
    source file that no longer existed. Now asserted against package.json
    exports, with a mutation proving exit 1 on a phantom entry.
  - check-export-prefixes caught MY error: the R3 services first landed on
    vigiles/eval, where `paid_` means "this call can bill you" — and
    startServices takes a ContainerRuntime and calls no model. Naming it
    paid_experimental_startServices would have redefined paid_ as "expensive in
    some sense". They went to the package root.

SEVENTEEN review findings landed on this branch, all real. Two mechanical
closures came out of them: src/example-imports.test.ts resolves every relative
import under examples/ instead of matching a string, and the naming rule now
ENUMERATES the three export paths it visits rather than describing its coverage
in the abstract. One attempt is recorded as REFUTED: teaching the doc gate to
flag our own exports as free variables measured 66 findings across 93 blocks, so
that gate's original scoping was right.

BREAKING CHANGE: vigiles/experimental is removed. Its exports are unchanged in
name and behaviour and are now reached from `vigiles` (the emit channel, the R3
disposable-service tier). Every renamed symbol keeps a working @deprecated alias
for this major.
2026-08-21 07:54:51 +05:00

151 lines
4.4 KiB
JSON

{
"name": "vigiles",
"version": "0.0.0-semantically-released",
"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.",
"keywords": [
"claude-code",
"codex",
"agents",
"agentic",
"ai",
"llm",
"harness",
"hooks",
"skills",
"claude",
"agents-md",
"eval",
"testing",
"linter"
],
"homepage": "https://github.com/zernie/vigiles#readme",
"repository": {
"type": "git",
"url": "git+https://github.com/zernie/vigiles.git"
},
"bugs": {
"url": "https://github.com/zernie/vigiles/issues"
},
"license": "MIT",
"workspaces": [
"packages/*",
"report",
"site"
],
"bin": {
"vigiles": "dist/cli.js"
},
"main": "./dist/test.js",
"types": "./dist/test.d.ts",
"exports": {
".": "./dist/test.js",
"./spec": "./dist/core/spec.js",
"./eval": "./dist/eval-surface.js",
"./linting": "./dist/linting.js",
"./hook": "./dist/hook.js",
"./claude-code": "./dist/claude-code.js",
"./codex": "./dist/codex.js",
"./adapter": "./dist/adapter.js",
"./vitest": {
"types": "./dist/vitest.d.mts",
"default": "./dist/vitest.mjs"
},
"./jest": "./dist/jest.js"
},
"files": [
"dist/**/*.js",
"dist/**/*.mjs",
"dist/**/*.d.ts",
"dist/**/*.d.mts",
"dist/audit-report.template.html",
"!dist/**/*.test.js",
"!dist/**/*.test.d.ts",
"action.yml",
"plugin.json",
".claude-plugin",
"hooks",
"skills",
"!skills/**/*.spec.ts",
"README.md",
"LICENSE"
],
"scripts": {
"build": "tsc && node scripts/build-report.mjs",
"build:core": "tsc",
"test": "npm run build && vitest run",
"coverage": "npm run build && vitest run --coverage",
"lint": "eslint src/",
"fmt": "prettier --write .",
"fmt:check": "prettier --check .",
"test:unit": "npm run build && vitest run --project unit",
"test:integration": "npm run build && vitest run --project integration",
"test:e2e": "npm run build && vitest run --project e2e",
"test:cli-e2e": "bash test/e2e/run.sh",
"test:harness": "npm run build && node dist/cli.js test",
"test:eval": "npm run build && node dist/cli.js eval --all",
"test:vitest": "npm run build && vitest run --project runners",
"test:jest": "npm run build && jest",
"test:types": "npm run build && tsc --noEmit -p test/types/tsconfig.json",
"api:report": "npm run build && node scripts/api-extractor.mjs --local",
"api:check": "npm run build && node scripts/api-extractor.mjs",
"check": "node scripts/check.mjs",
"docs:check": "npm run build && node scripts/check-doc-imports.mjs . docs README.md",
"exports:check": "npm run build && node scripts/check-export-prefixes.mjs .",
"internal:check": "npm run api:check && node scripts/check-internal-tag.mjs",
"docs:api": "typedoc"
},
"devDependencies": {
"@eslint/js": "^10.0.1",
"@jackchuka/mdschema": "^0.12.8",
"@microsoft/api-extractor": "^7.58.9",
"@semantic-release/commit-analyzer": "^13.0.1",
"@types/js-yaml": "^4.0.9",
"@types/markdown-it": "^14.1.2",
"@types/minimatch": "^5.1.2",
"@types/node": "^20.19.39",
"@typescript-eslint/eslint-plugin": "^8.58.0",
"@typescript-eslint/parser": "^8.58.0",
"@vitest/coverage-v8": "^4.1.8",
"conventional-changelog-conventionalcommits": "^10.3.0",
"eslint": "^10.1.0",
"eslint-import-resolver-typescript": "^4.4.5",
"eslint-plugin-boundaries": "^6.0.2",
"eslint-plugin-sonarjs": "^4.0.2",
"globals": "^17.4.0",
"jest": "^30.4.2",
"prettier": "^3.8.1",
"tsx": "^4.21.0",
"typedoc": "^0.28.19",
"typescript": "^5.9.3",
"vitest": "^4.1.8"
},
"peerDependencies": {
"jest": ">=28",
"vitest": ">=1"
},
"peerDependenciesMeta": {
"jest": {
"optional": true
},
"vitest": {
"optional": true
}
},
"dependencies": {
"@ast-grep/lang-python": "^0.0.6",
"@ast-grep/lang-ruby": "^0.0.7",
"@ast-grep/lang-rust": "^0.0.7",
"@ast-grep/napi": "^0.43.0",
"@iarna/toml": "^2.2.5",
"ci-info": "^4.4.0",
"cosmiconfig": "^9.0.1",
"glob": "^13.0.6",
"js-yaml": "^4.1.0",
"markdown-it": "^14.3.0",
"minimatch": "^10.0.1",
"mvdan-sh": "^0.10.1",
"ts-essentials": "^10.2.1",
"typescript": "^5.9.3"
}
}