@webpresso/agent-kit 0.28.0 → 0.29.1
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-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -3
- package/README.md +2 -2
- package/bin/_run.js +6 -0
- package/bin/wp +5 -0
- package/catalog/base-kit/.github/actions/setup-webpresso/action.yml.tmpl +21 -0
- package/catalog/base-kit/.github/workflows/{ci.webpresso.yml.tmpl → ci.yml.tmpl} +17 -7
- package/catalog/base-kit/tsconfig.json.tmpl +1 -1
- package/catalog/docs/templates/blueprint.yaml +1 -1
- package/dist/esm/audit/_budgets.d.ts +9 -1
- package/dist/esm/audit/_budgets.js +8 -1
- package/dist/esm/audit/blueprint-db-consistency.js +2 -2
- package/dist/esm/audit/blueprint-lifecycle-sql.d.ts +17 -7
- package/dist/esm/audit/blueprint-lifecycle-sql.js +298 -48
- package/dist/esm/audit/blueprint-readme-drift.d.ts +6 -0
- package/dist/esm/audit/blueprint-readme-drift.js +110 -0
- package/dist/esm/audit/no-first-party-mjs.js +5 -4
- package/dist/esm/audit/package-surface.js +79 -10
- package/dist/esm/audit/repo-guardrails.d.ts +1 -1
- package/dist/esm/audit/repo-guardrails.js +43 -3
- package/dist/esm/audit/tech-debt-cadence.js +2 -3
- package/dist/esm/audit/toolchain-isolation.js +2 -3
- package/dist/esm/blueprint/core/parser.js +3 -2
- package/dist/esm/blueprint/core/schema.d.ts +3 -2
- package/dist/esm/blueprint/core/schema.js +1 -1
- package/dist/esm/blueprint/cross-repo/audit.js +3 -4
- package/dist/esm/blueprint/db/cold-start.js +2 -3
- package/dist/esm/blueprint/db/enums.d.ts +1 -1
- package/dist/esm/blueprint/db/ephemeral-projection.d.ts +25 -0
- package/dist/esm/blueprint/db/ephemeral-projection.js +36 -0
- package/dist/esm/blueprint/db/gc.d.ts +11 -0
- package/dist/esm/blueprint/db/gc.js +55 -0
- package/dist/esm/blueprint/db/ingester.js +39 -1
- package/dist/esm/blueprint/db/migrations/run.js +5 -3
- package/dist/esm/blueprint/db/paths.d.ts +13 -24
- package/dist/esm/blueprint/db/paths.js +25 -33
- package/dist/esm/blueprint/execution/progress-bridge.js +5 -4
- package/dist/esm/blueprint/freshness.d.ts +2 -0
- package/dist/esm/blueprint/freshness.js +3 -1
- package/dist/esm/blueprint/lifecycle/audit.js +6 -6
- package/dist/esm/blueprint/lifecycle/engine.d.ts +1 -1
- package/dist/esm/blueprint/lifecycle/engine.js +13 -9
- package/dist/esm/blueprint/lifecycle/transition-matrix.d.ts +5 -0
- package/dist/esm/blueprint/lifecycle/transition-matrix.js +20 -0
- package/dist/esm/blueprint/markdown/helpers.d.ts +1 -1
- package/dist/esm/blueprint/projection-ready.js +2 -0
- package/dist/esm/blueprint/service/BlueprintService.js +1 -1
- package/dist/esm/blueprint/service/blueprint-records.js +1 -1
- package/dist/esm/blueprint/tracked-document/parser.js +1 -1
- package/dist/esm/blueprint/utils/archive.d.ts +2 -2
- package/dist/esm/blueprint/utils/archive.js +5 -2
- package/dist/esm/blueprint/utils/package-assets.d.ts +13 -0
- package/dist/esm/blueprint/utils/package-assets.js +38 -6
- package/dist/esm/build/normalize-tsconfig-json-exports.d.ts +13 -0
- package/dist/esm/build/normalize-tsconfig-json-exports.js +39 -0
- package/dist/esm/build/package-manifest.js +12 -4
- package/dist/esm/build/release-policy.d.ts +9 -18
- package/dist/esm/build/release-policy.js +10 -19
- package/dist/esm/build/runtime-surface-policy.d.ts +14 -0
- package/dist/esm/build/runtime-surface-policy.js +13 -0
- package/dist/esm/cli/commands/audit-core.d.ts +2 -2
- package/dist/esm/cli/commands/audit.js +7 -3
- package/dist/esm/cli/commands/blueprint/db-commands.js +0 -3
- package/dist/esm/cli/commands/blueprint/mutations.d.ts +3 -2
- package/dist/esm/cli/commands/blueprint/mutations.js +45 -39
- package/dist/esm/cli/commands/blueprint/router-output.js +2 -2
- package/dist/esm/cli/commands/doctor.d.ts +1 -1
- package/dist/esm/cli/commands/doctor.js +4 -5
- package/dist/esm/cli/commands/init/config.d.ts +6 -10
- package/dist/esm/cli/commands/init/config.js +36 -20
- package/dist/esm/cli/commands/init/gitignore-patcher.js +0 -1
- package/dist/esm/cli/commands/init/index.d.ts +8 -1
- package/dist/esm/cli/commands/init/index.js +17 -19
- package/dist/esm/cli/commands/init/package-root.d.ts +20 -0
- package/dist/esm/cli/commands/init/package-root.js +110 -0
- package/dist/esm/cli/commands/init/scaffold-base-kit.js +5 -1
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/index.d.ts +3 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/index.js +8 -24
- package/dist/esm/cli/commands/init/scaffolders/agent-kit-global/index.d.ts +9 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-kit-global/index.js +79 -1
- package/dist/esm/cli/commands/init/scaffolders/claude-rules/index.js +2 -12
- package/dist/esm/cli/commands/init/scaffolders/subagents/index.js +2 -12
- package/dist/esm/config/tsconfig/cloudflare.json +1 -1
- package/dist/esm/config/tsconfig/library.json +1 -1
- package/dist/esm/config/tsconfig/react-library.json +3 -2
- package/dist/esm/config/tsconfig/react-router.json +1 -1
- package/dist/esm/dev/restore-dev-links/index.js +3 -4
- package/dist/esm/docs-linter/blueprint-plan.js +46 -4
- package/dist/esm/hooks/check-dev-link/index.js +3 -4
- package/dist/esm/hooks/doctor.d.ts +11 -0
- package/dist/esm/hooks/doctor.js +174 -30
- package/dist/esm/hooks/guard-switch/index.js +3 -5
- package/dist/esm/hooks/post-tool/lint-after-edit.js +4 -5
- package/dist/esm/hooks/pretool-guard/index.js +2 -4
- package/dist/esm/hooks/pretool-guard/runner.js +2 -4
- package/dist/esm/hooks/pretool-guard/validators/forbidden-commands.js +47 -6
- package/dist/esm/hooks/sessionstart/index.js +3 -4
- package/dist/esm/hooks/shared/direct-entrypoint.d.ts +10 -0
- package/dist/esm/hooks/shared/direct-entrypoint.js +21 -0
- package/dist/esm/hooks/stop/qa-changed-files.js +3 -5
- package/dist/esm/hooks/test-quality-check.js +3 -4
- package/dist/esm/mcp/blueprint-server.js +26 -3
- package/dist/esm/mcp/cli.js +2 -6
- package/dist/esm/mcp/server.d.ts +2 -0
- package/dist/esm/mcp/server.js +18 -3
- package/dist/esm/mcp/tools/_shared/audit-kinds.d.ts +1 -1
- package/dist/esm/mcp/tools/_shared/audit-kinds.js +1 -0
- package/dist/esm/mcp/tools/audit.d.ts +2 -1
- package/dist/esm/mcp/tools/audit.js +13 -3
- package/dist/esm/package.json +2 -0
- package/package.json +24 -15
- package/tsconfig/cloudflare.json +1 -1
- package/tsconfig/library.json +1 -1
- package/tsconfig/react-library.json +3 -2
- package/tsconfig/react-router.json +1 -1
- package/dist/esm/blueprint/db/legacy-migration.d.ts +0 -41
- package/dist/esm/blueprint/db/legacy-migration.js +0 -122
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Webpresso agent-kit Claude Code plugin: blueprints, skills, hooks, MCP server",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.29.1"
|
|
10
10
|
},
|
|
11
11
|
"plugins": [
|
|
12
12
|
{
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
]
|
|
24
24
|
}
|
|
25
25
|
],
|
|
26
|
-
"version": "0.
|
|
26
|
+
"version": "0.29.1"
|
|
27
27
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webpresso",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.1",
|
|
4
4
|
"description": "Webpresso agent-kit: blueprints, skills, lore commit protocol, tech-debt lifecycle",
|
|
5
5
|
"skills": "./skills",
|
|
6
6
|
"commands": "./commands",
|
|
7
7
|
"mcpServers": {
|
|
8
8
|
"webpresso": {
|
|
9
|
-
"command": "
|
|
9
|
+
"command": "${CLAUDE_PLUGIN_ROOT}/bin/wp",
|
|
10
10
|
"args": [
|
|
11
|
-
"${CLAUDE_PLUGIN_ROOT}/bin/wp.js",
|
|
12
11
|
"mcp"
|
|
13
12
|
]
|
|
14
13
|
}
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @webpresso/agent-kit
|
|
2
2
|
|
|
3
3
|
[](./LICENSE)
|
|
4
|
-
[](https://github.com/webpresso/agent-kit/actions/workflows/ci.agent-kit.yml)
|
|
5
5
|
|
|
6
6
|
> TypeScript infrastructure for AI-agent-driven development. One `wp` runtime
|
|
7
7
|
> gives agents planning, tests, mutation, e2e, CI, docs, and debt tracking —
|
|
@@ -74,7 +74,7 @@ vp run public:consumer-smoke -- --setup-only
|
|
|
74
74
|
| **Summary-first `wp_*` MCP tools** | `wp_test` / `wp_typecheck` / `wp_lint` / `wp_qa` / `wp_e2e` / `wp_format` / `wp_ci_act` / `wp_audit` return JSON with `bytes` / `tokensSaved` budget metadata | [`src/mcp/tools/`](src/mcp/tools/) (each with co-located `.test.ts`), [`src/mcp/server.integration.test.ts`](src/mcp/server.integration.test.ts) |
|
|
75
75
|
| **MCP server + CLI surface** | Registers the tool set and exposes it to agents | [`src/mcp/server.ts`](src/mcp/server.ts), [`src/mcp/cli.ts`](src/mcp/cli.ts), [`src/mcp/cli.integration.test.ts`](src/mcp/cli.integration.test.ts) |
|
|
76
76
|
| **Blueprint runtime** | Lifecycle states, dependency-aware task graph, structured authoring control plane (`wp_blueprint_depgraph` / `put` / `transition`) | [`src/mcp/blueprint-server.ts`](src/mcp/blueprint-server.ts), [`docs/lifecycle.md`](docs/lifecycle.md), [`docs/blueprint-format.md`](docs/blueprint-format.md) |
|
|
77
|
-
| **Audit contract family** | `blueprint-lifecycle`, `docs-frontmatter`, `catalog-drift`, `vision`, `architecture-drift`, `bundle-budget`, `commit-message` (Lore), `tech-debt`, `absolute-path-policy`, `open-source-licenses`, … — each runs as a `wp_audit` MCP tool **and** a pre-commit/CI gate | [`src/audit/`](src/audit/), [`src/mcp/tools/audit.ts`](src/mcp/tools/audit.ts), [`.github/workflows/ci.
|
|
77
|
+
| **Audit contract family** | `blueprint-lifecycle`, `docs-frontmatter`, `catalog-drift`, `vision`, `architecture-drift`, `bundle-budget`, `commit-message` (Lore), `tech-debt`, `absolute-path-policy`, `open-source-licenses`, … — each runs as a `wp_audit` MCP tool **and** a pre-commit/CI gate | [`src/audit/`](src/audit/), [`src/mcp/tools/audit.ts`](src/mcp/tools/audit.ts), [`.github/workflows/ci.agent-kit.yml`](.github/workflows/ci.agent-kit.yml) |
|
|
78
78
|
| **Symlinker** | Syncs canonical `.agent/` to per-IDE surfaces (Codex/Amp skills, Gemini TOML commands) via rulesync | [`src/symlinker/index.ts`](src/symlinker/index.ts), [`src/symlinker/symlinker.integration.test.ts`](src/symlinker/symlinker.integration.test.ts), [`docs/symlinker.md`](docs/symlinker.md) |
|
|
79
79
|
| **Mutation testing** | `wp audit mutation` (Stryker) catches tests that pass without asserting | [`src/config/stryker/`](src/config/stryker/), `./stryker` + `./mutation` exports |
|
|
80
80
|
| **Tech-debt lifecycle** | `accepted → needs-remediation → monitoring → resolved`, auto-filed from failing audits | [`src/blueprint/tech-debt/`](src/blueprint/tech-debt/), [`src/cli/commands/tech-debt/`](src/cli/commands/tech-debt/) |
|
package/bin/_run.js
CHANGED
|
@@ -41,6 +41,8 @@ const RUNTIME_BIN_ARGS = {
|
|
|
41
41
|
'wp-sessionstart-routing': ['hook', 'sessionstart-routing'],
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
+
const RUNTIME_WP_SUBCOMMANDS = new Set(['mcp'])
|
|
45
|
+
|
|
44
46
|
function resolvePackageRoot() {
|
|
45
47
|
return join(dirname(fileURLToPath(import.meta.url)), '..')
|
|
46
48
|
}
|
|
@@ -158,6 +160,10 @@ function buildRuntimeLaunchPlan({
|
|
|
158
160
|
}) {
|
|
159
161
|
const selectorArgs = RUNTIME_BIN_ARGS[binName]
|
|
160
162
|
if (!selectorArgs) return null
|
|
163
|
+
if (binName === 'wp') {
|
|
164
|
+
const subcommand = forwardedArgs[0]
|
|
165
|
+
if (!RUNTIME_WP_SUBCOMMANDS.has(subcommand) && !forceCompiledRuntime) return null
|
|
166
|
+
}
|
|
161
167
|
|
|
162
168
|
const manifest = runtimeManifest ?? readRuntimeManifest(repoRoot)
|
|
163
169
|
if (!manifest) return null
|
package/bin/wp
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Set up Webpresso tooling
|
|
2
|
+
description: >
|
|
3
|
+
Install shared Webpresso CLIs needed by the base-kit workflow surface.
|
|
4
|
+
Resolves @webpresso/agent-kit from package.json and installs vite-plus only
|
|
5
|
+
when the consumer repo explicitly catalogs it.
|
|
6
|
+
runs:
|
|
7
|
+
using: composite
|
|
8
|
+
steps:
|
|
9
|
+
- name: Install shared Webpresso CLIs
|
|
10
|
+
shell: bash
|
|
11
|
+
run: |
|
|
12
|
+
set -euo pipefail
|
|
13
|
+
|
|
14
|
+
AGENT_KIT_VERSION="$(node -e "const pkg=require('./package.json'); console.log(pkg.devDependencies?.['@webpresso/agent-kit'] || pkg.dependencies?.['@webpresso/agent-kit'] || 'latest')")"
|
|
15
|
+
VITE_PLUS_VERSION="$(node -e "const fs=require('fs'); const text=fs.existsSync('pnpm-workspace.yaml') ? fs.readFileSync('pnpm-workspace.yaml','utf8') : ''; const match=text.match(/^\\s*vite-plus:\\s*(.+)$/m); console.log(match ? match[1].trim() : '')")"
|
|
16
|
+
|
|
17
|
+
if [[ -n "${VITE_PLUS_VERSION}" ]]; then
|
|
18
|
+
npm install -g "vite-plus@${VITE_PLUS_VERSION}" "@webpresso/agent-kit@${AGENT_KIT_VERSION}"
|
|
19
|
+
else
|
|
20
|
+
npm install -g "@webpresso/agent-kit@${AGENT_KIT_VERSION}"
|
|
21
|
+
fi
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: CI
|
|
1
|
+
name: CI
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
@@ -22,16 +22,23 @@ jobs:
|
|
|
22
22
|
with:
|
|
23
23
|
node-version: '24.16.0'
|
|
24
24
|
cache: pnpm
|
|
25
|
+
- uses: ./.github/actions/setup-webpresso
|
|
25
26
|
- uses: oven-sh/setup-bun@v2
|
|
26
27
|
with:
|
|
27
28
|
bun-version: latest
|
|
28
29
|
- run: pnpm install --frozen-lockfile
|
|
29
30
|
- run: pnpm run verify:secrets
|
|
30
31
|
- run: pnpm run audit:secret-provider-quarantine
|
|
32
|
+
- name: Run wp audit guardrails
|
|
33
|
+
run: |
|
|
34
|
+
WP="$(pwd)/node_modules/.bin/wp"
|
|
35
|
+
[ -x "$WP" ] || WP=wp
|
|
36
|
+
"$WP" audit guardrails
|
|
31
37
|
- run: pnpm run typecheck
|
|
32
38
|
- run: pnpm run lint
|
|
39
|
+
- run: pnpm run test
|
|
33
40
|
|
|
34
|
-
|
|
41
|
+
e2e:
|
|
35
42
|
runs-on: ubuntu-latest
|
|
36
43
|
steps:
|
|
37
44
|
- uses: actions/checkout@v5
|
|
@@ -40,13 +47,14 @@ jobs:
|
|
|
40
47
|
with:
|
|
41
48
|
node-version: '24.16.0'
|
|
42
49
|
cache: pnpm
|
|
50
|
+
- uses: ./.github/actions/setup-webpresso
|
|
43
51
|
- uses: oven-sh/setup-bun@v2
|
|
44
52
|
with:
|
|
45
53
|
bun-version: latest
|
|
46
54
|
- run: pnpm install --frozen-lockfile
|
|
47
|
-
- run: pnpm run
|
|
55
|
+
- run: pnpm run e2e
|
|
48
56
|
|
|
49
|
-
|
|
57
|
+
architecture-drift:
|
|
50
58
|
runs-on: ubuntu-latest
|
|
51
59
|
steps:
|
|
52
60
|
- uses: actions/checkout@v5
|
|
@@ -55,17 +63,18 @@ jobs:
|
|
|
55
63
|
with:
|
|
56
64
|
node-version: '24.16.0'
|
|
57
65
|
cache: pnpm
|
|
66
|
+
- uses: ./.github/actions/setup-webpresso
|
|
58
67
|
- uses: oven-sh/setup-bun@v2
|
|
59
68
|
with:
|
|
60
69
|
bun-version: latest
|
|
61
70
|
- run: pnpm install --frozen-lockfile
|
|
62
|
-
- name:
|
|
71
|
+
- name: Check architecture drift contract
|
|
63
72
|
run: |
|
|
64
73
|
WP="$(pwd)/node_modules/.bin/wp"
|
|
65
74
|
[ -x "$WP" ] || WP=wp
|
|
66
|
-
"$WP" audit
|
|
75
|
+
"$WP" audit architecture-drift --root .
|
|
67
76
|
|
|
68
|
-
deploy-
|
|
77
|
+
deploy-verify:
|
|
69
78
|
runs-on: ubuntu-latest
|
|
70
79
|
steps:
|
|
71
80
|
- uses: actions/checkout@v5
|
|
@@ -74,6 +83,7 @@ jobs:
|
|
|
74
83
|
with:
|
|
75
84
|
node-version: '24.16.0'
|
|
76
85
|
cache: pnpm
|
|
86
|
+
- uses: ./.github/actions/setup-webpresso
|
|
77
87
|
- uses: oven-sh/setup-bun@v2
|
|
78
88
|
with:
|
|
79
89
|
bun-version: latest
|
|
@@ -104,7 +104,7 @@ task_format:
|
|
|
104
104
|
- 'These are the current accepted task-heading forms enforced by the validator.'
|
|
105
105
|
- 'Lane prefix is optional but recommended. Common lanes: [schema], [backend], [ui], [infra], [docs], [qa].'
|
|
106
106
|
required_metadata:
|
|
107
|
-
- '**Status:** todo|
|
|
107
|
+
- '**Status:** todo|in-progress|blocked|done|dropped'
|
|
108
108
|
notes:
|
|
109
109
|
- 'Task metadata rules here reflect the current validator contract.'
|
|
110
110
|
- 'Acceptance checkboxes are evidence, not the lifecycle source of truth.'
|
|
@@ -12,10 +12,18 @@ export declare const DEFAULT_BUDGETS: {
|
|
|
12
12
|
readonly 'skill-md-total-each': {
|
|
13
13
|
readonly max_bytes: 16384;
|
|
14
14
|
};
|
|
15
|
+
readonly 'blueprint-wip-in-progress-max': {
|
|
16
|
+
readonly max: 3;
|
|
17
|
+
};
|
|
18
|
+
readonly 'blueprint-stale-in-progress-days': {
|
|
19
|
+
readonly max_days: 14;
|
|
20
|
+
};
|
|
15
21
|
};
|
|
16
22
|
export type BudgetKey = keyof typeof DEFAULT_BUDGETS;
|
|
17
23
|
export type BudgetEntry = {
|
|
18
|
-
max_bytes
|
|
24
|
+
max_bytes?: number;
|
|
25
|
+
max?: number;
|
|
26
|
+
max_days?: number;
|
|
19
27
|
suggest_compact_at?: number;
|
|
20
28
|
warn_pct?: number;
|
|
21
29
|
};
|
|
@@ -8,9 +8,14 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
8
8
|
import path from 'node:path';
|
|
9
9
|
import { z } from 'zod';
|
|
10
10
|
const budgetEntrySchema = z.object({
|
|
11
|
-
max_bytes: z.number().int().positive(),
|
|
11
|
+
max_bytes: z.number().int().positive().optional(),
|
|
12
|
+
max: z.number().int().positive().optional(),
|
|
13
|
+
max_days: z.number().int().positive().optional(),
|
|
12
14
|
suggest_compact_at: z.number().min(0).max(1).optional(),
|
|
13
15
|
warn_pct: z.number().min(1).optional(),
|
|
16
|
+
})
|
|
17
|
+
.refine((entry) => entry.max_bytes !== undefined || entry.max !== undefined || entry.max_days !== undefined, {
|
|
18
|
+
message: 'budget entry must define at least one of max_bytes, max, or max_days',
|
|
14
19
|
});
|
|
15
20
|
const budgetFileSchema = z.object({
|
|
16
21
|
budgets: z.record(z.string(), budgetEntrySchema),
|
|
@@ -20,6 +25,8 @@ export const DEFAULT_BUDGETS = {
|
|
|
20
25
|
'claude-skill-description-each': { max_bytes: 800 },
|
|
21
26
|
'agents-md-section-each': { max_bytes: 4096, suggest_compact_at: 0.75 },
|
|
22
27
|
'skill-md-total-each': { max_bytes: 16384 },
|
|
28
|
+
'blueprint-wip-in-progress-max': { max: 3 },
|
|
29
|
+
'blueprint-stale-in-progress-days': { max_days: 14 },
|
|
23
30
|
};
|
|
24
31
|
/**
|
|
25
32
|
* Load budgets from `.agent/.audit-budgets.yaml` if present, merging with defaults.
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
import { createHash } from 'node:crypto';
|
|
14
14
|
import { existsSync, readFileSync } from 'node:fs';
|
|
15
15
|
import path from 'node:path';
|
|
16
|
+
import { resolveBlueprintProjectionDbPath } from '#db/paths.js';
|
|
16
17
|
import { scanBlueprintDirectory } from '#service/scanner.js';
|
|
17
|
-
const DB_PATH = path.join('.agent', '.blueprints.db');
|
|
18
18
|
const _DISABLED_RESULT = {
|
|
19
19
|
ok: true,
|
|
20
20
|
title: 'Blueprint DB consistency (SQL)',
|
|
@@ -34,7 +34,7 @@ export async function auditBlueprintDbConsistency(cwd) {
|
|
|
34
34
|
violations: [],
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
const dbFile =
|
|
37
|
+
const dbFile = resolveBlueprintProjectionDbPath(cwd);
|
|
38
38
|
if (!existsSync(dbFile)) {
|
|
39
39
|
return {
|
|
40
40
|
ok: true,
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `wp audit blueprint-lifecycle
|
|
3
|
-
*
|
|
2
|
+
* `wp audit blueprint-lifecycle` — the single, deterministic blueprint-lifecycle
|
|
3
|
+
* audit.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* The verdict is a pure function of `markdown@HEAD`: this builds an EPHEMERAL
|
|
6
|
+
* in-memory SQLite projection from the repo's blueprint markdown
|
|
7
|
+
* (`buildEphemeralProjection`), runs the relational checks against it, and
|
|
8
|
+
* discards it. It also runs the structural markdown checks
|
|
9
|
+
* (`auditBlueprintLifecycle` — type / status-vs-folder / `_overview.md` presence /
|
|
10
|
+
* linking-frontmatter) and merges both result sets. No persistent on-disk
|
|
11
|
+
* projection is read, so the audit can never hit a stale/missing/locked DB and
|
|
12
|
+
* is identical across CLI, the `wp_audit` MCP tool, `wp doctor`, and CI.
|
|
7
13
|
*
|
|
8
|
-
*
|
|
14
|
+
* Relational checks (against the in-memory projection):
|
|
9
15
|
* 1. Blueprints with status='in-progress' that have 0 tasks (invalid).
|
|
10
16
|
* 2. Blueprints whose `status` column doesn't match the directory segment
|
|
11
|
-
* derived from `file_path
|
|
17
|
+
* derived from `file_path`.
|
|
12
18
|
* 3. Tasks in state 'in-progress' whose dependencies are not all done.
|
|
13
19
|
* 4. Blueprints with progress_pct < 100 but status='completed'.
|
|
14
20
|
*/
|
|
15
21
|
import type { RepoAuditResult } from './repo-guardrails.js';
|
|
16
|
-
export
|
|
22
|
+
export interface BlueprintLifecycleAuditOptions {
|
|
23
|
+
/** Opt-in: also audit `.omx/plans/` derived-handoff governance (`--legacy-omx`). */
|
|
24
|
+
readonly includeOmxPlans?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function auditBlueprintLifecycleSql(cwd?: string, options?: BlueprintLifecycleAuditOptions): Promise<RepoAuditResult>;
|
|
17
27
|
//# sourceMappingURL=blueprint-lifecycle-sql.d.ts.map
|