@webpresso/agent-kit 0.21.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-plugin/marketplace.json +27 -0
- package/.claude-plugin/plugin.json +73 -0
- package/LICENSE +21 -0
- package/README.md +106 -0
- package/THIRD-PARTY-NOTICES.md +60 -0
- package/bin/_run.js +201 -0
- package/bin/docs-check-internal-links.js +5 -0
- package/bin/docs-check-refs.js +5 -0
- package/bin/docs-check-stale.js +5 -0
- package/bin/docs-lint.js +5 -0
- package/bin/docs-migrate.js +5 -0
- package/bin/wp-check-dev-link.js +5 -0
- package/bin/wp-guard-switch.js +5 -0
- package/bin/wp-post-tool.js +5 -0
- package/bin/wp-pretool-guard.js +5 -0
- package/bin/wp-restore-dev-links.js +5 -0
- package/bin/wp-sessionstart-routing.js +5 -0
- package/bin/wp-stop-qa.js +5 -0
- package/bin/wp-test-quality-check.js +5 -0
- package/bin/wp.js +5 -0
- package/catalog/AGENTS.md.tpl +202 -0
- package/catalog/agent/.audit-budgets.yaml +12 -0
- package/catalog/agent/agents/README.md +22 -0
- package/catalog/agent/agents/code-reviewer.md +34 -0
- package/catalog/agent/agents/doc-writer.md +35 -0
- package/catalog/agent/agents/explorer.md +33 -0
- package/catalog/agent/agents/security-auditor.md +34 -0
- package/catalog/agent/commands/audit-duplication.md +34 -0
- package/catalog/agent/commands/audit.md +219 -0
- package/catalog/agent/commands/brainstorm.md +115 -0
- package/catalog/agent/commands/decide.md +132 -0
- package/catalog/agent/commands/fix-all.md +160 -0
- package/catalog/agent/commands/fix.md +109 -0
- package/catalog/agent/commands/plan-refine.md +103 -0
- package/catalog/agent/commands/pll.md +174 -0
- package/catalog/agent/commands/tph.md +380 -0
- package/catalog/agent/commands/verify.md +9 -0
- package/catalog/agent/correlate.allow.yaml +5 -0
- package/catalog/agent/guides/agent-guardrails.md +116 -0
- package/catalog/agent/guides/parallel-execution.md +79 -0
- package/catalog/agent/guides/plan-audit-checklist.md +189 -0
- package/catalog/agent/guides/skills.md +32 -0
- package/catalog/agent/rules/README.md +30 -0
- package/catalog/agent/rules/agent-guide.md +464 -0
- package/catalog/agent/rules/blueprint-scoping.md +69 -0
- package/catalog/agent/rules/changeset-release.md +161 -0
- package/catalog/agent/rules/cmd-execution.md +121 -0
- package/catalog/agent/rules/context-mode-routing.md +64 -0
- package/catalog/agent/rules/engineering-principles.md +42 -0
- package/catalog/agent/rules/extraction-parity.md +157 -0
- package/catalog/agent/rules/generated-code-governance.md +87 -0
- package/catalog/agent/rules/gstack-routing.md +90 -0
- package/catalog/agent/rules/no-timeout-as-fix.md +90 -0
- package/catalog/agent/rules/package-conventions.md +80 -0
- package/catalog/agent/rules/pre-implementation.md +44 -0
- package/catalog/agent/rules/public-package-safety.md +56 -0
- package/catalog/agent/rules/repo-restrictions.md +175 -0
- package/catalog/agent/rules/rtk-routing.md +50 -0
- package/catalog/agent/rules/supported-agent-clis.md +80 -0
- package/catalog/agent/rules/ts-coding-conventions.md +68 -0
- package/catalog/agent/skills/better-auth-best-practices/SKILL.md +212 -0
- package/catalog/agent/skills/deep-research/SKILL.md +240 -0
- package/catalog/agent/skills/fix/SKILL.md +120 -0
- package/catalog/agent/skills/frontend-design/LICENSE.txt +177 -0
- package/catalog/agent/skills/frontend-design/SKILL.md +189 -0
- package/catalog/agent/skills/hooks-doctor/SKILL.md +77 -0
- package/catalog/agent/skills/logging-best-practices/SKILL.md +145 -0
- package/catalog/agent/skills/logging-best-practices/rules/context.md +157 -0
- package/catalog/agent/skills/logging-best-practices/rules/pitfalls.md +118 -0
- package/catalog/agent/skills/logging-best-practices/rules/structure.md +195 -0
- package/catalog/agent/skills/logging-best-practices/rules/wide-events.md +113 -0
- package/catalog/agent/skills/lore-protocol/SKILL.md +93 -0
- package/catalog/agent/skills/monorepo-navigation/SKILL.md.tpl +57 -0
- package/catalog/agent/skills/monorepo-navigation/examples/webpresso.md +240 -0
- package/catalog/agent/skills/plan-refine/SKILL.md +645 -0
- package/catalog/agent/skills/pll/SKILL.md +85 -0
- package/catalog/agent/skills/react-doctor/SKILL.md +54 -0
- package/catalog/agent/skills/systematic-debugging/CREATION-LOG.md +133 -0
- package/catalog/agent/skills/systematic-debugging/SKILL.md +322 -0
- package/catalog/agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/catalog/agent/skills/systematic-debugging/condition-based-waiting.md +120 -0
- package/catalog/agent/skills/systematic-debugging/defense-in-depth.md +128 -0
- package/catalog/agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/catalog/agent/skills/systematic-debugging/root-cause-tracing.md +183 -0
- package/catalog/agent/skills/systematic-debugging/test-academic.md +14 -0
- package/catalog/agent/skills/systematic-debugging/test-pressure-1.md +65 -0
- package/catalog/agent/skills/systematic-debugging/test-pressure-2.md +75 -0
- package/catalog/agent/skills/systematic-debugging/test-pressure-3.md +75 -0
- package/catalog/agent/skills/tanstack-query/.claude-plugin/plugin.json +12 -0
- package/catalog/agent/skills/tanstack-query/README.md +59 -0
- package/catalog/agent/skills/tanstack-query/SKILL.md +175 -0
- package/catalog/agent/skills/tanstack-query/references/best-practices.md +63 -0
- package/catalog/agent/skills/tanstack-query/references/common-patterns.md +43 -0
- package/catalog/agent/skills/tanstack-query/references/testing.md +44 -0
- package/catalog/agent/skills/tanstack-query/references/top-errors.md +19 -0
- package/catalog/agent/skills/tanstack-query/references/typescript-patterns.md +36 -0
- package/catalog/agent/skills/tanstack-query/rules/tanstack-query.md +41 -0
- package/catalog/agent/skills/tanstack-query/templates/custom-hooks-pattern.tsx +26 -0
- package/catalog/agent/skills/tanstack-query/templates/devtools-setup.tsx +13 -0
- package/catalog/agent/skills/tanstack-query/templates/error-boundary.tsx +52 -0
- package/catalog/agent/skills/tanstack-query/templates/package.json +24 -0
- package/catalog/agent/skills/tanstack-query/templates/provider-setup.tsx +19 -0
- package/catalog/agent/skills/tanstack-query/templates/query-client-config.ts +43 -0
- package/catalog/agent/skills/tanstack-query/templates/use-infinite-query.tsx +61 -0
- package/catalog/agent/skills/tanstack-query/templates/use-mutation-basic.tsx +52 -0
- package/catalog/agent/skills/tanstack-query/templates/use-mutation-optimistic.tsx +48 -0
- package/catalog/agent/skills/tanstack-query/templates/use-query-basic.tsx +77 -0
- package/catalog/agent/skills/tech-debt/SKILL.md +79 -0
- package/catalog/agent/skills/test-driven-development/SKILL.md +403 -0
- package/catalog/agent/skills/test-driven-development/testing-anti-patterns.md +317 -0
- package/catalog/agent/skills/testing-philosophy/SKILL.md +530 -0
- package/catalog/agent/skills/third-party-manifest.json +30 -0
- package/catalog/agent/skills/vercel-react-best-practices/AGENTS.md +2672 -0
- package/catalog/agent/skills/vercel-react-best-practices/README.md +127 -0
- package/catalog/agent/skills/vercel-react-best-practices/SKILL.md +212 -0
- package/catalog/agent/skills/vercel-react-best-practices/metadata.json +15 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/async-api-routes.md +35 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/async-dependencies.md +48 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/async-parallel.md +24 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/bundle-conditional.md +37 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +48 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +34 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/bundle-preload.md +44 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/client-event-listeners.md +78 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +74 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +110 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-cache-storage.md +68 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-length-check-first.md +50 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +38 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +32 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +36 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +72 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +77 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +56 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +36 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/catalog/agent/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/catalog/agent/skills/verify/SKILL.md +133 -0
- package/catalog/agent/skills/web-design-guidelines/SKILL.md +53 -0
- package/catalog/agent/workflows/README.md +20 -0
- package/catalog/agent/workflows/conf.md +18 -0
- package/catalog/agent/workflows/debug.md +20 -0
- package/catalog/agent/workflows/docs.md +9 -0
- package/catalog/agent/workflows/execute-plan.md +15 -0
- package/catalog/agent/workflows/fix-all-md-warnings.md +13 -0
- package/catalog/agent/workflows/test.md +14 -0
- package/catalog/agent/workflows/write-plan.md +16 -0
- package/catalog/base-kit/.actrc.tmpl +2 -0
- package/catalog/base-kit/.editorconfig.tmpl +23 -0
- package/catalog/base-kit/.github/workflows/ci.webpresso.yml.tmpl +66 -0
- package/catalog/base-kit/.gitignore.tmpl +82 -0
- package/catalog/base-kit/.husky/commit-msg.tmpl +7 -0
- package/catalog/base-kit/.husky/pre-commit.tmpl +10 -0
- package/catalog/base-kit/.secretlintrc.json.tmpl +5 -0
- package/catalog/base-kit/commitlint.config.ts.tmpl +7 -0
- package/catalog/base-kit/e2e/.gitkeep.tmpl +0 -0
- package/catalog/base-kit/pnpm-workspace.yaml.tmpl +49 -0
- package/catalog/base-kit/scripts/audit-secret-provider-quarantine.ts.tmpl +91 -0
- package/catalog/base-kit/scripts/check-no-dev-vars.ts.tmpl +56 -0
- package/catalog/base-kit/test/.gitkeep.tmpl +0 -0
- package/catalog/blueprints/archived/.gitkeep +0 -0
- package/catalog/blueprints/completed/.gitkeep +0 -0
- package/catalog/blueprints/in-progress/.gitkeep +0 -0
- package/catalog/blueprints/parked/.gitkeep +0 -0
- package/catalog/blueprints/planned/.gitkeep +0 -0
- package/catalog/docs/templates/adr.md +38 -0
- package/catalog/docs/templates/blueprint.md +149 -0
- package/catalog/docs/templates/blueprint.yaml +110 -0
- package/catalog/docs/templates/core-doc.yaml +28 -0
- package/catalog/docs/templates/guide.md +31 -0
- package/catalog/docs/templates/guide.yaml +31 -0
- package/catalog/docs/templates/postmortem.md +60 -0
- package/catalog/docs/templates/research.md +37 -0
- package/catalog/docs/templates/runbook.md +39 -0
- package/catalog/docs/templates/system.md +44 -0
- package/catalog/docs/templates/tech-debt.md +78 -0
- package/catalog/vision/VISION.md.tmpl +33 -0
- package/commands/audit.md +13 -0
- package/commands/blueprint.md +28 -0
- package/commands/qa.md +4 -0
- package/commands/test.md +4 -0
- package/dist/esm/ai-memory/checkpoint/saver.d.ts +14 -0
- package/dist/esm/ai-memory/checkpoint/saver.js +28 -0
- package/dist/esm/ai-memory/checkpoint/types.d.ts +75 -0
- package/dist/esm/ai-memory/checkpoint/types.js +2 -0
- package/dist/esm/ai-memory/facts/consolidator.d.ts +23 -0
- package/dist/esm/ai-memory/facts/consolidator.js +134 -0
- package/dist/esm/ai-memory/facts/extractor.d.ts +28 -0
- package/dist/esm/ai-memory/facts/extractor.js +119 -0
- package/dist/esm/ai-memory/facts/types.d.ts +61 -0
- package/dist/esm/ai-memory/facts/types.js +2 -0
- package/dist/esm/ai-memory/hierarchy/retriever.d.ts +47 -0
- package/dist/esm/ai-memory/hierarchy/retriever.js +139 -0
- package/dist/esm/ai-memory/index.d.ts +11 -0
- package/dist/esm/ai-memory/index.js +6 -0
- package/dist/esm/ai-memory/store/sqlite-store.d.ts +28 -0
- package/dist/esm/ai-memory/store/sqlite-store.js +213 -0
- package/dist/esm/ai-prompts/business-canvas.d.ts +52 -0
- package/dist/esm/ai-prompts/business-canvas.js +292 -0
- package/dist/esm/ai-prompts/circuit-breaker.d.ts +35 -0
- package/dist/esm/ai-prompts/circuit-breaker.js +171 -0
- package/dist/esm/ai-prompts/experiment-draft.d.ts +86 -0
- package/dist/esm/ai-prompts/experiment-draft.js +188 -0
- package/dist/esm/ai-prompts/index.d.ts +12 -0
- package/dist/esm/ai-prompts/index.js +11 -0
- package/dist/esm/ai-prompts/persona-context.d.ts +70 -0
- package/dist/esm/ai-prompts/persona-context.js +158 -0
- package/dist/esm/ai-prompts/persona-debate.d.ts +67 -0
- package/dist/esm/ai-prompts/persona-debate.js +172 -0
- package/dist/esm/ai-prompts/persona-tools.d.ts +26 -0
- package/dist/esm/ai-prompts/persona-tools.js +172 -0
- package/dist/esm/ai-prompts/personas.d.ts +16 -0
- package/dist/esm/ai-prompts/personas.js +492 -0
- package/dist/esm/ai-prompts/rachel-planning.d.ts +28 -0
- package/dist/esm/ai-prompts/rachel-planning.js +217 -0
- package/dist/esm/ai-prompts/task-analysis.d.ts +49 -0
- package/dist/esm/ai-prompts/task-analysis.js +434 -0
- package/dist/esm/ai-prompts/types.d.ts +3 -0
- package/dist/esm/ai-prompts/types.js +2 -0
- package/dist/esm/ai-tools/index.d.ts +7 -0
- package/dist/esm/ai-tools/index.js +6 -0
- package/dist/esm/ai-tools/list-files.d.ts +3 -0
- package/dist/esm/ai-tools/list-files.js +93 -0
- package/dist/esm/ai-tools/read-file.d.ts +3 -0
- package/dist/esm/ai-tools/read-file.js +108 -0
- package/dist/esm/ai-tools/search-files.d.ts +3 -0
- package/dist/esm/ai-tools/search-files.js +166 -0
- package/dist/esm/ai-tools/shared/validate-path.d.ts +11 -0
- package/dist/esm/ai-tools/shared/validate-path.js +25 -0
- package/dist/esm/ai-tools/types.d.ts +370 -0
- package/dist/esm/ai-tools/types.js +2 -0
- package/dist/esm/ai-tools/write-file.d.ts +3 -0
- package/dist/esm/ai-tools/write-file.js +165 -0
- package/dist/esm/audit/_budgets.d.ts +28 -0
- package/dist/esm/audit/_budgets.js +60 -0
- package/dist/esm/audit/absolute-path-policy.d.ts +5 -0
- package/dist/esm/audit/absolute-path-policy.js +97 -0
- package/dist/esm/audit/agent-cost.d.ts +3 -0
- package/dist/esm/audit/agent-cost.js +111 -0
- package/dist/esm/audit/agents.d.ts +3 -0
- package/dist/esm/audit/agents.js +331 -0
- package/dist/esm/audit/ai-contracts.d.ts +3 -0
- package/dist/esm/audit/ai-contracts.js +238 -0
- package/dist/esm/audit/architecture-drift.d.ts +33 -0
- package/dist/esm/audit/architecture-drift.js +364 -0
- package/dist/esm/audit/audit-mutation-score.d.ts +43 -0
- package/dist/esm/audit/audit-mutation-score.js +92 -0
- package/dist/esm/audit/audit-no-ambient-root.d.ts +29 -0
- package/dist/esm/audit/audit-no-ambient-root.js +83 -0
- package/dist/esm/audit/audit-tph-detect.d.ts +49 -0
- package/dist/esm/audit/audit-tph-detect.js +248 -0
- package/dist/esm/audit/audit-tph-e2e-detect.d.ts +27 -0
- package/dist/esm/audit/audit-tph-e2e-detect.js +84 -0
- package/dist/esm/audit/audit-tph-e2e-runner.d.ts +8 -0
- package/dist/esm/audit/audit-tph-e2e-runner.js +106 -0
- package/dist/esm/audit/audit-tph-e2e.d.ts +16 -0
- package/dist/esm/audit/audit-tph-e2e.js +17 -0
- package/dist/esm/audit/audit-tph-runner.d.ts +10 -0
- package/dist/esm/audit/audit-tph-runner.js +115 -0
- package/dist/esm/audit/audit-tph.d.ts +17 -0
- package/dist/esm/audit/audit-tph.js +38 -0
- package/dist/esm/audit/blueprint-db-consistency.d.ts +15 -0
- package/dist/esm/audit/blueprint-db-consistency.js +109 -0
- package/dist/esm/audit/blueprint-lifecycle-sql.d.ts +17 -0
- package/dist/esm/audit/blueprint-lifecycle-sql.js +136 -0
- package/dist/esm/audit/broken-refs.d.ts +26 -0
- package/dist/esm/audit/broken-refs.js +181 -0
- package/dist/esm/audit/bucket-boundary.d.ts +21 -0
- package/dist/esm/audit/bucket-boundary.js +330 -0
- package/dist/esm/audit/commit-message-lore.d.ts +41 -0
- package/dist/esm/audit/commit-message-lore.js +113 -0
- package/dist/esm/audit/compile-drift.d.ts +3 -0
- package/dist/esm/audit/compile-drift.js +42 -0
- package/dist/esm/audit/cross-repo-correlation.d.ts +14 -0
- package/dist/esm/audit/cross-repo-correlation.js +50 -0
- package/dist/esm/audit/gitignore-agent-surfaces.d.ts +3 -0
- package/dist/esm/audit/gitignore-agent-surfaces.js +68 -0
- package/dist/esm/audit/hook-surface.d.ts +82 -0
- package/dist/esm/audit/hook-surface.js +251 -0
- package/dist/esm/audit/memory-rotation.d.ts +31 -0
- package/dist/esm/audit/memory-rotation.js +137 -0
- package/dist/esm/audit/memory-unified.d.ts +3 -0
- package/dist/esm/audit/memory-unified.js +46 -0
- package/dist/esm/audit/open-source-licenses.d.ts +4 -0
- package/dist/esm/audit/open-source-licenses.js +224 -0
- package/dist/esm/audit/package-surface.d.ts +7 -0
- package/dist/esm/audit/package-surface.js +674 -0
- package/dist/esm/audit/repo-guardrails.d.ts +89 -0
- package/dist/esm/audit/repo-guardrails.js +875 -0
- package/dist/esm/audit/roadmap-links.d.ts +7 -0
- package/dist/esm/audit/roadmap-links.js +235 -0
- package/dist/esm/audit/run-stryker.d.ts +9 -0
- package/dist/esm/audit/run-stryker.js +24 -0
- package/dist/esm/audit/shell.d.ts +17 -0
- package/dist/esm/audit/shell.js +32 -0
- package/dist/esm/audit/skill-sizes.d.ts +25 -0
- package/dist/esm/audit/skill-sizes.js +153 -0
- package/dist/esm/audit/tech-debt-cadence.d.ts +16 -0
- package/dist/esm/audit/tech-debt-cadence.js +101 -0
- package/dist/esm/audit/tech-debt.d.ts +9 -0
- package/dist/esm/audit/tech-debt.js +107 -0
- package/dist/esm/audit/vision-doc.d.ts +21 -0
- package/dist/esm/audit/vision-doc.js +136 -0
- package/dist/esm/blueprint/aggregate.d.ts +146 -0
- package/dist/esm/blueprint/aggregate.js +217 -0
- package/dist/esm/blueprint/context.d.ts +70 -0
- package/dist/esm/blueprint/context.js +301 -0
- package/dist/esm/blueprint/core/parser.d.ts +53 -0
- package/dist/esm/blueprint/core/parser.js +281 -0
- package/dist/esm/blueprint/core/schema.d.ts +163 -0
- package/dist/esm/blueprint/core/schema.js +98 -0
- package/dist/esm/blueprint/core/types.d.ts +13 -0
- package/dist/esm/blueprint/core/types.js +5 -0
- package/dist/esm/blueprint/core/validation/criteria.d.ts +6 -0
- package/dist/esm/blueprint/core/validation/criteria.js +15 -0
- package/dist/esm/blueprint/core/validation/dependencies.d.ts +19 -0
- package/dist/esm/blueprint/core/validation/dependencies.js +113 -0
- package/dist/esm/blueprint/core/validation/index.d.ts +13 -0
- package/dist/esm/blueprint/core/validation/index.js +11 -0
- package/dist/esm/blueprint/core/validation/links.d.ts +18 -0
- package/dist/esm/blueprint/core/validation/links.js +47 -0
- package/dist/esm/blueprint/core/validation/phases.d.ts +12 -0
- package/dist/esm/blueprint/core/validation/phases.js +18 -0
- package/dist/esm/blueprint/core/validation/state.d.ts +9 -0
- package/dist/esm/blueprint/core/validation/state.js +123 -0
- package/dist/esm/blueprint/core/validation/task-blocks.d.ts +27 -0
- package/dist/esm/blueprint/core/validation/task-blocks.js +48 -0
- package/dist/esm/blueprint/core/validation/task-sections.d.ts +14 -0
- package/dist/esm/blueprint/core/validation/task-sections.js +60 -0
- package/dist/esm/blueprint/core/validation/template.d.ts +9 -0
- package/dist/esm/blueprint/core/validation/template.js +65 -0
- package/dist/esm/blueprint/cross-repo/allowlist.d.ts +28 -0
- package/dist/esm/blueprint/cross-repo/allowlist.js +87 -0
- package/dist/esm/blueprint/cross-repo/audit.d.ts +49 -0
- package/dist/esm/blueprint/cross-repo/audit.js +161 -0
- package/dist/esm/blueprint/cross-repo/resolver.d.ts +28 -0
- package/dist/esm/blueprint/cross-repo/resolver.js +32 -0
- package/dist/esm/blueprint/dag/cycle-detector.d.ts +12 -0
- package/dist/esm/blueprint/dag/cycle-detector.js +46 -0
- package/dist/esm/blueprint/dag/executor.d.ts +140 -0
- package/dist/esm/blueprint/dag/executor.js +292 -0
- package/dist/esm/blueprint/dag/index.d.ts +20 -0
- package/dist/esm/blueprint/dag/index.js +17 -0
- package/dist/esm/blueprint/dag/interfaces.d.ts +56 -0
- package/dist/esm/blueprint/dag/interfaces.js +13 -0
- package/dist/esm/blueprint/dag/local/independence.d.ts +107 -0
- package/dist/esm/blueprint/dag/local/independence.js +231 -0
- package/dist/esm/blueprint/dag/local/index.d.ts +14 -0
- package/dist/esm/blueprint/dag/local/index.js +14 -0
- package/dist/esm/blueprint/dag/local/package-graph.d.ts +66 -0
- package/dist/esm/blueprint/dag/local/package-graph.js +148 -0
- package/dist/esm/blueprint/dag/plan-parser.d.ts +54 -0
- package/dist/esm/blueprint/dag/plan-parser.js +236 -0
- package/dist/esm/blueprint/dag/task-graph-algorithms.d.ts +13 -0
- package/dist/esm/blueprint/dag/task-graph-algorithms.js +236 -0
- package/dist/esm/blueprint/dag/task-graph.d.ts +171 -0
- package/dist/esm/blueprint/dag/task-graph.js +370 -0
- package/dist/esm/blueprint/dag/types.d.ts +17 -0
- package/dist/esm/blueprint/dag/types.js +2 -0
- package/dist/esm/blueprint/db/cold-start.d.ts +8 -0
- package/dist/esm/blueprint/db/cold-start.js +45 -0
- package/dist/esm/blueprint/db/connection.d.ts +8 -0
- package/dist/esm/blueprint/db/connection.js +45 -0
- package/dist/esm/blueprint/db/enums.d.ts +76 -0
- package/dist/esm/blueprint/db/enums.js +37 -0
- package/dist/esm/blueprint/db/ingester.d.ts +25 -0
- package/dist/esm/blueprint/db/ingester.js +307 -0
- package/dist/esm/blueprint/db/legacy-migration.d.ts +41 -0
- package/dist/esm/blueprint/db/legacy-migration.js +122 -0
- package/dist/esm/blueprint/db/migrations/run.d.ts +3 -0
- package/dist/esm/blueprint/db/migrations/run.js +53 -0
- package/dist/esm/blueprint/db/parser/blueprint-db-parser.d.ts +69 -0
- package/dist/esm/blueprint/db/parser/blueprint-db-parser.js +408 -0
- package/dist/esm/blueprint/db/parser/tech-debt-db-parser.d.ts +33 -0
- package/dist/esm/blueprint/db/parser/tech-debt-db-parser.js +134 -0
- package/dist/esm/blueprint/db/paths.d.ts +104 -0
- package/dist/esm/blueprint/db/paths.js +192 -0
- package/dist/esm/blueprint/db/sqlite.d.ts +32 -0
- package/dist/esm/blueprint/db/sqlite.js +46 -0
- package/dist/esm/blueprint/db/template-runner.d.ts +8 -0
- package/dist/esm/blueprint/db/template-runner.js +65 -0
- package/dist/esm/blueprint/db/templates.d.ts +11 -0
- package/dist/esm/blueprint/db/templates.js +226 -0
- package/dist/esm/blueprint/db/workspace-config.d.ts +38 -0
- package/dist/esm/blueprint/db/workspace-config.js +150 -0
- package/dist/esm/blueprint/evidence.d.ts +140 -0
- package/dist/esm/blueprint/evidence.js +152 -0
- package/dist/esm/blueprint/execution/artifacts.d.ts +9 -0
- package/dist/esm/blueprint/execution/artifacts.js +45 -0
- package/dist/esm/blueprint/execution/metadata.d.ts +11 -0
- package/dist/esm/blueprint/execution/metadata.js +46 -0
- package/dist/esm/blueprint/execution/progress-bridge.d.ts +117 -0
- package/dist/esm/blueprint/execution/progress-bridge.js +302 -0
- package/dist/esm/blueprint/execution/types.d.ts +233 -0
- package/dist/esm/blueprint/execution/types.js +99 -0
- package/dist/esm/blueprint/export/spec-kit/_field-map.d.ts +12 -0
- package/dist/esm/blueprint/export/spec-kit/_field-map.js +33 -0
- package/dist/esm/blueprint/export/spec-kit/constitution.d.ts +7 -0
- package/dist/esm/blueprint/export/spec-kit/constitution.js +61 -0
- package/dist/esm/blueprint/export/spec-kit/index.d.ts +13 -0
- package/dist/esm/blueprint/export/spec-kit/index.js +17 -0
- package/dist/esm/blueprint/export/spec-kit/plan.d.ts +7 -0
- package/dist/esm/blueprint/export/spec-kit/plan.js +43 -0
- package/dist/esm/blueprint/export/spec-kit/spec.d.ts +7 -0
- package/dist/esm/blueprint/export/spec-kit/spec.js +35 -0
- package/dist/esm/blueprint/export/spec-kit/tasks.d.ts +3 -0
- package/dist/esm/blueprint/export/spec-kit/tasks.js +32 -0
- package/dist/esm/blueprint/freshness.d.ts +78 -0
- package/dist/esm/blueprint/freshness.js +127 -0
- package/dist/esm/blueprint/graph/index.d.ts +5 -0
- package/dist/esm/blueprint/graph/index.js +5 -0
- package/dist/esm/blueprint/graph/mermaid-parser.d.ts +3 -0
- package/dist/esm/blueprint/graph/mermaid-parser.js +93 -0
- package/dist/esm/blueprint/graph/mermaid-serializer.d.ts +3 -0
- package/dist/esm/blueprint/graph/mermaid-serializer.js +20 -0
- package/dist/esm/blueprint/graph/schema.d.ts +89 -0
- package/dist/esm/blueprint/graph/schema.js +104 -0
- package/dist/esm/blueprint/graph/task-graph-adapter.d.ts +6 -0
- package/dist/esm/blueprint/graph/task-graph-adapter.js +30 -0
- package/dist/esm/blueprint/history/diff.d.ts +36 -0
- package/dist/esm/blueprint/history/diff.js +122 -0
- package/dist/esm/blueprint/index.d.ts +37 -0
- package/dist/esm/blueprint/index.js +46 -0
- package/dist/esm/blueprint/lifecycle/audit.d.ts +17 -0
- package/dist/esm/blueprint/lifecycle/audit.js +423 -0
- package/dist/esm/blueprint/lifecycle/engine.d.ts +38 -0
- package/dist/esm/blueprint/lifecycle/engine.js +157 -0
- package/dist/esm/blueprint/lifecycle/local.d.ts +15 -0
- package/dist/esm/blueprint/lifecycle/local.js +92 -0
- package/dist/esm/blueprint/local.d.ts +21 -0
- package/dist/esm/blueprint/local.js +25 -0
- package/dist/esm/blueprint/markdown/helpers.d.ts +17 -0
- package/dist/esm/blueprint/markdown/helpers.js +92 -0
- package/dist/esm/blueprint/markdown/task-heading.d.ts +8 -0
- package/dist/esm/blueprint/markdown/task-heading.js +19 -0
- package/dist/esm/blueprint/next-action.d.ts +27 -0
- package/dist/esm/blueprint/next-action.js +45 -0
- package/dist/esm/blueprint/project-resolver.d.ts +31 -0
- package/dist/esm/blueprint/project-resolver.js +142 -0
- package/dist/esm/blueprint/projection-ready.d.ts +3 -0
- package/dist/esm/blueprint/projection-ready.js +29 -0
- package/dist/esm/blueprint/projects.d.ts +96 -0
- package/dist/esm/blueprint/projects.js +383 -0
- package/dist/esm/blueprint/query/types.d.ts +53 -0
- package/dist/esm/blueprint/query/types.js +16 -0
- package/dist/esm/blueprint/roadmap.d.ts +24 -0
- package/dist/esm/blueprint/roadmap.js +82 -0
- package/dist/esm/blueprint/service/BlueprintCreationService.d.ts +47 -0
- package/dist/esm/blueprint/service/BlueprintCreationService.js +260 -0
- package/dist/esm/blueprint/service/BlueprintService.d.ts +70 -0
- package/dist/esm/blueprint/service/BlueprintService.js +190 -0
- package/dist/esm/blueprint/service/TechDebtService.d.ts +102 -0
- package/dist/esm/blueprint/service/TechDebtService.js +337 -0
- package/dist/esm/blueprint/service/TrackedDocumentService.d.ts +198 -0
- package/dist/esm/blueprint/service/TrackedDocumentService.js +162 -0
- package/dist/esm/blueprint/service/blueprint-records.d.ts +8 -0
- package/dist/esm/blueprint/service/blueprint-records.js +124 -0
- package/dist/esm/blueprint/service/blueprint-tech-debt-links.d.ts +3 -0
- package/dist/esm/blueprint/service/blueprint-tech-debt-links.js +35 -0
- package/dist/esm/blueprint/service/priority-scoring.d.ts +21 -0
- package/dist/esm/blueprint/service/priority-scoring.js +85 -0
- package/dist/esm/blueprint/service/scanner.d.ts +56 -0
- package/dist/esm/blueprint/service/scanner.js +212 -0
- package/dist/esm/blueprint/sync/auth.d.ts +27 -0
- package/dist/esm/blueprint/sync/auth.js +59 -0
- package/dist/esm/blueprint/sync/client.d.ts +64 -0
- package/dist/esm/blueprint/sync/client.js +232 -0
- package/dist/esm/blueprint/sync/replica.d.ts +55 -0
- package/dist/esm/blueprint/sync/replica.js +139 -0
- package/dist/esm/blueprint/sync/types.d.ts +178 -0
- package/dist/esm/blueprint/sync/types.js +18 -0
- package/dist/esm/blueprint/tech-debt/index.d.ts +9 -0
- package/dist/esm/blueprint/tech-debt/index.js +9 -0
- package/dist/esm/blueprint/tech-debt/parser.d.ts +56 -0
- package/dist/esm/blueprint/tech-debt/parser.js +133 -0
- package/dist/esm/blueprint/tech-debt/query-types.d.ts +130 -0
- package/dist/esm/blueprint/tech-debt/query-types.js +37 -0
- package/dist/esm/blueprint/tech-debt/schema.d.ts +151 -0
- package/dist/esm/blueprint/tech-debt/schema.js +145 -0
- package/dist/esm/blueprint/test-utils/blueprint-mocks.d.ts +31 -0
- package/dist/esm/blueprint/test-utils/blueprint-mocks.js +63 -0
- package/dist/esm/blueprint/tracked-document/index.d.ts +11 -0
- package/dist/esm/blueprint/tracked-document/index.js +11 -0
- package/dist/esm/blueprint/tracked-document/parser.d.ts +113 -0
- package/dist/esm/blueprint/tracked-document/parser.js +197 -0
- package/dist/esm/blueprint/tracked-document/query-types.d.ts +43 -0
- package/dist/esm/blueprint/tracked-document/query-types.js +8 -0
- package/dist/esm/blueprint/tracked-document/schema.d.ts +80 -0
- package/dist/esm/blueprint/tracked-document/schema.js +89 -0
- package/dist/esm/blueprint/types/execution-backend.d.ts +17 -0
- package/dist/esm/blueprint/types/execution-backend.js +16 -0
- package/dist/esm/blueprint/utils/archive.d.ts +69 -0
- package/dist/esm/blueprint/utils/archive.js +209 -0
- package/dist/esm/blueprint/utils/blueprint-root.d.ts +9 -0
- package/dist/esm/blueprint/utils/blueprint-root.js +77 -0
- package/dist/esm/blueprint/utils/conflict.d.ts +125 -0
- package/dist/esm/blueprint/utils/conflict.js +111 -0
- package/dist/esm/blueprint/utils/decision-trace-artifacts.d.ts +16 -0
- package/dist/esm/blueprint/utils/decision-trace-artifacts.js +37 -0
- package/dist/esm/blueprint/utils/errors.d.ts +14 -0
- package/dist/esm/blueprint/utils/errors.js +44 -0
- package/dist/esm/blueprint/utils/freshness.d.ts +21 -0
- package/dist/esm/blueprint/utils/freshness.js +66 -0
- package/dist/esm/blueprint/utils/package-assets.d.ts +6 -0
- package/dist/esm/blueprint/utils/package-assets.js +20 -0
- package/dist/esm/blueprint/utils/string.d.ts +8 -0
- package/dist/esm/blueprint/utils/string.js +10 -0
- package/dist/esm/blueprint/utils/tech-debt-root.d.ts +4 -0
- package/dist/esm/blueprint/utils/tech-debt-root.js +18 -0
- package/dist/esm/blueprint/verification.d.ts +116 -0
- package/dist/esm/blueprint/verification.js +246 -0
- package/dist/esm/build/generate-skills-dir.d.ts +14 -0
- package/dist/esm/build/generate-skills-dir.js +56 -0
- package/dist/esm/ci/act-helper.d.ts +29 -0
- package/dist/esm/ci/act-helper.js +106 -0
- package/dist/esm/ci/act-runner.d.ts +24 -0
- package/dist/esm/ci/act-runner.js +71 -0
- package/dist/esm/cli/auto-update/detect-pm.d.ts +76 -0
- package/dist/esm/cli/auto-update/detect-pm.js +237 -0
- package/dist/esm/cli/auto-update/installer.d.ts +65 -0
- package/dist/esm/cli/auto-update/installer.js +171 -0
- package/dist/esm/cli/auto-update/log.d.ts +46 -0
- package/dist/esm/cli/auto-update/log.js +107 -0
- package/dist/esm/cli/auto-update/run.d.ts +23 -0
- package/dist/esm/cli/auto-update/run.js +116 -0
- package/dist/esm/cli/auto-update/skip.d.ts +34 -0
- package/dist/esm/cli/auto-update/skip.js +84 -0
- package/dist/esm/cli/bootstrap.d.ts +28 -0
- package/dist/esm/cli/bootstrap.js +55 -0
- package/dist/esm/cli/cli.d.ts +11 -0
- package/dist/esm/cli/cli.js +310 -0
- package/dist/esm/cli/commands/audit-core.d.ts +61 -0
- package/dist/esm/cli/commands/audit-core.js +87 -0
- package/dist/esm/cli/commands/audit.d.ts +10 -0
- package/dist/esm/cli/commands/audit.js +273 -0
- package/dist/esm/cli/commands/bench/index.d.ts +6 -0
- package/dist/esm/cli/commands/bench/index.js +54 -0
- package/dist/esm/cli/commands/bench/session-memory.d.ts +129 -0
- package/dist/esm/cli/commands/bench/session-memory.js +242 -0
- package/dist/esm/cli/commands/blueprint/db-commands.d.ts +60 -0
- package/dist/esm/cli/commands/blueprint/db-commands.js +244 -0
- package/dist/esm/cli/commands/blueprint/execution-io.d.ts +80 -0
- package/dist/esm/cli/commands/blueprint/execution-io.js +78 -0
- package/dist/esm/cli/commands/blueprint/execution-spec.d.ts +45 -0
- package/dist/esm/cli/commands/blueprint/execution-spec.js +177 -0
- package/dist/esm/cli/commands/blueprint/execution-state.d.ts +17 -0
- package/dist/esm/cli/commands/blueprint/execution-state.js +38 -0
- package/dist/esm/cli/commands/blueprint/execution.d.ts +74 -0
- package/dist/esm/cli/commands/blueprint/execution.js +256 -0
- package/dist/esm/cli/commands/blueprint/mutations.d.ts +109 -0
- package/dist/esm/cli/commands/blueprint/mutations.js +357 -0
- package/dist/esm/cli/commands/blueprint/router-dispatch.d.ts +50 -0
- package/dist/esm/cli/commands/blueprint/router-dispatch.js +358 -0
- package/dist/esm/cli/commands/blueprint/router-output.d.ts +25 -0
- package/dist/esm/cli/commands/blueprint/router-output.js +190 -0
- package/dist/esm/cli/commands/blueprint/router.d.ts +117 -0
- package/dist/esm/cli/commands/blueprint/router.js +480 -0
- package/dist/esm/cli/commands/blueprint/template-resolver.d.ts +19 -0
- package/dist/esm/cli/commands/blueprint/template-resolver.js +55 -0
- package/dist/esm/cli/commands/ci.d.ts +31 -0
- package/dist/esm/cli/commands/ci.js +76 -0
- package/dist/esm/cli/commands/compile.d.ts +21 -0
- package/dist/esm/cli/commands/compile.js +329 -0
- package/dist/esm/cli/commands/config.d.ts +55 -0
- package/dist/esm/cli/commands/config.js +272 -0
- package/dist/esm/cli/commands/dev.d.ts +17 -0
- package/dist/esm/cli/commands/dev.js +56 -0
- package/dist/esm/cli/commands/docs-core.d.ts +26 -0
- package/dist/esm/cli/commands/docs-core.js +88 -0
- package/dist/esm/cli/commands/docs.d.ts +9 -0
- package/dist/esm/cli/commands/docs.js +46 -0
- package/dist/esm/cli/commands/doctor.d.ts +10 -0
- package/dist/esm/cli/commands/doctor.js +53 -0
- package/dist/esm/cli/commands/e2e.d.ts +22 -0
- package/dist/esm/cli/commands/e2e.js +99 -0
- package/dist/esm/cli/commands/err.d.ts +11 -0
- package/dist/esm/cli/commands/err.js +73 -0
- package/dist/esm/cli/commands/format.d.ts +4 -0
- package/dist/esm/cli/commands/format.js +48 -0
- package/dist/esm/cli/commands/gain/index.d.ts +10 -0
- package/dist/esm/cli/commands/gain/index.js +83 -0
- package/dist/esm/cli/commands/hooks.d.ts +3 -0
- package/dist/esm/cli/commands/hooks.js +21 -0
- package/dist/esm/cli/commands/init/config.d.ts +36 -0
- package/dist/esm/cli/commands/init/config.js +116 -0
- package/dist/esm/cli/commands/init/detect-consumer.d.ts +49 -0
- package/dist/esm/cli/commands/init/detect-consumer.js +279 -0
- package/dist/esm/cli/commands/init/gitignore-patcher.d.ts +9 -0
- package/dist/esm/cli/commands/init/gitignore-patcher.js +133 -0
- package/dist/esm/cli/commands/init/host-visibility.d.ts +37 -0
- package/dist/esm/cli/commands/init/host-visibility.js +105 -0
- package/dist/esm/cli/commands/init/index.d.ts +23 -0
- package/dist/esm/cli/commands/init/index.js +751 -0
- package/dist/esm/cli/commands/init/merge.d.ts +33 -0
- package/dist/esm/cli/commands/init/merge.js +111 -0
- package/dist/esm/cli/commands/init/preflight.d.ts +15 -0
- package/dist/esm/cli/commands/init/preflight.js +87 -0
- package/dist/esm/cli/commands/init/prompts.d.ts +24 -0
- package/dist/esm/cli/commands/init/prompts.js +126 -0
- package/dist/esm/cli/commands/init/scaffold-agent-rules.d.ts +11 -0
- package/dist/esm/cli/commands/init/scaffold-agent-rules.js +58 -0
- package/dist/esm/cli/commands/init/scaffold-agent-skills.d.ts +11 -0
- package/dist/esm/cli/commands/init/scaffold-agent-skills.js +58 -0
- package/dist/esm/cli/commands/init/scaffold-agent.d.ts +15 -0
- package/dist/esm/cli/commands/init/scaffold-agent.js +63 -0
- package/dist/esm/cli/commands/init/scaffold-agents-md.d.ts +16 -0
- package/dist/esm/cli/commands/init/scaffold-agents-md.js +182 -0
- package/dist/esm/cli/commands/init/scaffold-base-kit.d.ts +9 -0
- package/dist/esm/cli/commands/init/scaffold-base-kit.js +183 -0
- package/dist/esm/cli/commands/init/scaffold-blueprints.d.ts +8 -0
- package/dist/esm/cli/commands/init/scaffold-blueprints.js +84 -0
- package/dist/esm/cli/commands/init/scaffold-catalog-ignore.d.ts +14 -0
- package/dist/esm/cli/commands/init/scaffold-catalog-ignore.js +48 -0
- package/dist/esm/cli/commands/init/scaffold-docs.d.ts +8 -0
- package/dist/esm/cli/commands/init/scaffold-docs.js +15 -0
- package/dist/esm/cli/commands/init/scaffold-monorepo-nav.d.ts +19 -0
- package/dist/esm/cli/commands/init/scaffold-monorepo-nav.js +101 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-global-normalize.d.ts +20 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-global-normalize.js +258 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-global-ownership.d.ts +3 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-global-ownership.js +36 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-ownership.d.ts +11 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-ownership.js +62 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-trust-sync.d.ts +24 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/codex-trust-sync.js +101 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/index.d.ts +68 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/index.js +585 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/skill-hooks.d.ts +21 -0
- package/dist/esm/cli/commands/init/scaffolders/agent-hooks/skill-hooks.js +123 -0
- package/dist/esm/cli/commands/init/scaffolders/audit-hooks/index.d.ts +16 -0
- package/dist/esm/cli/commands/init/scaffolders/audit-hooks/index.js +65 -0
- package/dist/esm/cli/commands/init/scaffolders/claude-plugin/index.d.ts +33 -0
- package/dist/esm/cli/commands/init/scaffolders/claude-plugin/index.js +67 -0
- package/dist/esm/cli/commands/init/scaffolders/claude-rules/index.d.ts +7 -0
- package/dist/esm/cli/commands/init/scaffolders/claude-rules/index.js +127 -0
- package/dist/esm/cli/commands/init/scaffolders/codex-cli/index.d.ts +17 -0
- package/dist/esm/cli/commands/init/scaffolders/codex-cli/index.js +27 -0
- package/dist/esm/cli/commands/init/scaffolders/codex-mcp/index.d.ts +79 -0
- package/dist/esm/cli/commands/init/scaffolders/codex-mcp/index.js +189 -0
- package/dist/esm/cli/commands/init/scaffolders/context-mode/index.d.ts +24 -0
- package/dist/esm/cli/commands/init/scaffolders/context-mode/index.js +165 -0
- package/dist/esm/cli/commands/init/scaffolders/example-skill/index.d.ts +15 -0
- package/dist/esm/cli/commands/init/scaffolders/example-skill/index.js +31 -0
- package/dist/esm/cli/commands/init/scaffolders/gstack/index.d.ts +92 -0
- package/dist/esm/cli/commands/init/scaffolders/gstack/index.js +228 -0
- package/dist/esm/cli/commands/init/scaffolders/lore-commits/index.d.ts +12 -0
- package/dist/esm/cli/commands/init/scaffolders/lore-commits/index.js +24 -0
- package/dist/esm/cli/commands/init/scaffolders/omc/index.d.ts +41 -0
- package/dist/esm/cli/commands/init/scaffolders/omc/index.js +54 -0
- package/dist/esm/cli/commands/init/scaffolders/omx/index.d.ts +63 -0
- package/dist/esm/cli/commands/init/scaffolders/omx/index.js +251 -0
- package/dist/esm/cli/commands/init/scaffolders/opencode-plugin/index.d.ts +9 -0
- package/dist/esm/cli/commands/init/scaffolders/opencode-plugin/index.js +86 -0
- package/dist/esm/cli/commands/init/scaffolders/rtk/index.d.ts +25 -0
- package/dist/esm/cli/commands/init/scaffolders/rtk/index.js +55 -0
- package/dist/esm/cli/commands/init/scaffolders/runtime-check/index.d.ts +15 -0
- package/dist/esm/cli/commands/init/scaffolders/runtime-check/index.js +37 -0
- package/dist/esm/cli/commands/init/scaffolders/spinner.d.ts +23 -0
- package/dist/esm/cli/commands/init/scaffolders/spinner.js +32 -0
- package/dist/esm/cli/commands/init/scaffolders/subagents/index.d.ts +7 -0
- package/dist/esm/cli/commands/init/scaffolders/subagents/index.js +88 -0
- package/dist/esm/cli/commands/init/scaffolders/version-pin.d.ts +19 -0
- package/dist/esm/cli/commands/init/scaffolders/version-pin.js +95 -0
- package/dist/esm/cli/commands/init/scaffolders/vision/index.d.ts +10 -0
- package/dist/esm/cli/commands/init/scaffolders/vision/index.js +67 -0
- package/dist/esm/cli/commands/init/scaffolders/vision/interview.d.ts +22 -0
- package/dist/esm/cli/commands/init/scaffolders/vision/interview.js +73 -0
- package/dist/esm/cli/commands/init/scaffolders/workspace-config/index.d.ts +28 -0
- package/dist/esm/cli/commands/init/scaffolders/workspace-config/index.js +40 -0
- package/dist/esm/cli/commands/lint.d.ts +4 -0
- package/dist/esm/cli/commands/lint.js +40 -0
- package/dist/esm/cli/commands/mcp.d.ts +4 -0
- package/dist/esm/cli/commands/mcp.js +18 -0
- package/dist/esm/cli/commands/roadmap.d.ts +7 -0
- package/dist/esm/cli/commands/roadmap.js +79 -0
- package/dist/esm/cli/commands/rule.d.ts +8 -0
- package/dist/esm/cli/commands/rule.js +59 -0
- package/dist/esm/cli/commands/skill.d.ts +20 -0
- package/dist/esm/cli/commands/skill.js +160 -0
- package/dist/esm/cli/commands/sync.d.ts +14 -0
- package/dist/esm/cli/commands/sync.js +132 -0
- package/dist/esm/cli/commands/tech-debt/index.d.ts +5 -0
- package/dist/esm/cli/commands/tech-debt/index.js +5 -0
- package/dist/esm/cli/commands/tech-debt/router-dispatch.d.ts +22 -0
- package/dist/esm/cli/commands/tech-debt/router-dispatch.js +436 -0
- package/dist/esm/cli/commands/tech-debt/router.d.ts +10 -0
- package/dist/esm/cli/commands/tech-debt/router.js +30 -0
- package/dist/esm/cli/commands/test.d.ts +12 -0
- package/dist/esm/cli/commands/test.js +88 -0
- package/dist/esm/cli/commands/typecheck.d.ts +18 -0
- package/dist/esm/cli/commands/typecheck.js +57 -0
- package/dist/esm/cli/commands/worktree/router-dispatch.d.ts +39 -0
- package/dist/esm/cli/commands/worktree/router-dispatch.js +217 -0
- package/dist/esm/cli/commands/worktree/router.d.ts +10 -0
- package/dist/esm/cli/commands/worktree/router.js +34 -0
- package/dist/esm/cli/utils.d.ts +45 -0
- package/dist/esm/cli/utils.js +156 -0
- package/dist/esm/codex/app-server/client.d.ts +50 -0
- package/dist/esm/codex/app-server/client.js +202 -0
- package/dist/esm/codex/app-server/types.d.ts +240 -0
- package/dist/esm/codex/app-server/types.js +103 -0
- package/dist/esm/compiler/flatten.d.ts +10 -0
- package/dist/esm/compiler/flatten.js +71 -0
- package/dist/esm/compiler/manifests/_versions.d.ts +7 -0
- package/dist/esm/compiler/manifests/_versions.js +7 -0
- package/dist/esm/compiler/manifests/claude.d.ts +9 -0
- package/dist/esm/compiler/manifests/claude.js +36 -0
- package/dist/esm/compiler/manifests/codex.d.ts +9 -0
- package/dist/esm/compiler/manifests/codex.js +23 -0
- package/dist/esm/compiler/manifests/cursor.d.ts +9 -0
- package/dist/esm/compiler/manifests/cursor.js +28 -0
- package/dist/esm/compiler/manifests/gemini.d.ts +9 -0
- package/dist/esm/compiler/manifests/gemini.js +20 -0
- package/dist/esm/compiler/memory/directives.d.ts +23 -0
- package/dist/esm/compiler/memory/directives.js +108 -0
- package/dist/esm/compiler/memory/directives.schema.d.ts +55 -0
- package/dist/esm/compiler/memory/directives.schema.js +32 -0
- package/dist/esm/compiler/memory/merger.d.ts +17 -0
- package/dist/esm/compiler/memory/merger.js +122 -0
- package/dist/esm/compiler/memory/precedence.d.ts +15 -0
- package/dist/esm/compiler/memory/precedence.js +40 -0
- package/dist/esm/compiler/memory/provenance.d.ts +13 -0
- package/dist/esm/compiler/memory/provenance.js +8 -0
- package/dist/esm/compiler/orphans.d.ts +8 -0
- package/dist/esm/compiler/orphans.js +58 -0
- package/dist/esm/compiler/schema.d.ts +47 -0
- package/dist/esm/compiler/schema.js +49 -0
- package/dist/esm/config/docs-lint/cli/check-internal-links.d.ts +13 -0
- package/dist/esm/config/docs-lint/cli/check-internal-links.js +161 -0
- package/dist/esm/config/docs-lint/cli/check-refs.d.ts +9 -0
- package/dist/esm/config/docs-lint/cli/check-refs.js +165 -0
- package/dist/esm/config/docs-lint/cli/check-stale.d.ts +9 -0
- package/dist/esm/config/docs-lint/cli/check-stale.js +116 -0
- package/dist/esm/config/docs-lint/cli/commands/migrate-command.d.ts +22 -0
- package/dist/esm/config/docs-lint/cli/commands/migrate-command.js +254 -0
- package/dist/esm/config/docs-lint/cli/commands/validate-command.d.ts +28 -0
- package/dist/esm/config/docs-lint/cli/commands/validate-command.js +363 -0
- package/dist/esm/config/docs-lint/cli/factories.d.ts +54 -0
- package/dist/esm/config/docs-lint/cli/factories.js +85 -0
- package/dist/esm/config/docs-lint/cli/fixers/code-language.d.ts +34 -0
- package/dist/esm/config/docs-lint/cli/fixers/code-language.js +277 -0
- package/dist/esm/config/docs-lint/cli/interfaces.d.ts +55 -0
- package/dist/esm/config/docs-lint/cli/interfaces.js +6 -0
- package/dist/esm/config/docs-lint/cli/migrate.d.ts +3 -0
- package/dist/esm/config/docs-lint/cli/migrate.js +53 -0
- package/dist/esm/config/docs-lint/cli/planning-path.d.ts +2 -0
- package/dist/esm/config/docs-lint/cli/planning-path.js +29 -0
- package/dist/esm/config/docs-lint/cli/validate.d.ts +3 -0
- package/dist/esm/config/docs-lint/cli/validate.js +47 -0
- package/dist/esm/config/docs-lint/cli/validators/code-density.d.ts +7 -0
- package/dist/esm/config/docs-lint/cli/validators/code-density.js +15 -0
- package/dist/esm/config/docs-lint/cli/validators/command-safety.d.ts +19 -0
- package/dist/esm/config/docs-lint/cli/validators/command-safety.js +195 -0
- package/dist/esm/config/docs-lint/cli/validators/context-limits.d.ts +58 -0
- package/dist/esm/config/docs-lint/cli/validators/context-limits.js +212 -0
- package/dist/esm/config/docs-lint/cli/validators/deprecated-commands.d.ts +9 -0
- package/dist/esm/config/docs-lint/cli/validators/deprecated-commands.js +112 -0
- package/dist/esm/config/docs-lint/cli/validators/filename.d.ts +12 -0
- package/dist/esm/config/docs-lint/cli/validators/filename.js +128 -0
- package/dist/esm/config/docs-lint/cli/validators/imports.d.ts +30 -0
- package/dist/esm/config/docs-lint/cli/validators/imports.js +163 -0
- package/dist/esm/config/docs-lint/cli/validators/index.d.ts +8 -0
- package/dist/esm/config/docs-lint/cli/validators/index.js +8 -0
- package/dist/esm/config/docs-lint/cli/validators/links.d.ts +30 -0
- package/dist/esm/config/docs-lint/cli/validators/links.js +134 -0
- package/dist/esm/config/docs-lint/cli/validators/markdownlint.d.ts +11 -0
- package/dist/esm/config/docs-lint/cli/validators/markdownlint.js +17 -0
- package/dist/esm/config/docs-lint/cli/validators/structure.d.ts +10 -0
- package/dist/esm/config/docs-lint/cli/validators/structure.js +75 -0
- package/dist/esm/config/docs-lint/generator/frontmatter-validator.d.ts +6 -0
- package/dist/esm/config/docs-lint/generator/frontmatter-validator.js +72 -0
- package/dist/esm/config/docs-lint/generator/index.d.ts +11 -0
- package/dist/esm/config/docs-lint/generator/index.js +10 -0
- package/dist/esm/config/docs-lint/generator/markdown-generator.d.ts +6 -0
- package/dist/esm/config/docs-lint/generator/markdown-generator.js +78 -0
- package/dist/esm/config/docs-lint/generator/template-loader.d.ts +18 -0
- package/dist/esm/config/docs-lint/generator/template-loader.js +66 -0
- package/dist/esm/config/docs-lint/generator/types.d.ts +100 -0
- package/dist/esm/config/docs-lint/generator/types.js +2 -0
- package/dist/esm/config/docs-lint/index.d.ts +34 -0
- package/dist/esm/config/docs-lint/index.js +3 -0
- package/dist/esm/config/docs-lint/parsers/bold-metadata.d.ts +28 -0
- package/dist/esm/config/docs-lint/parsers/bold-metadata.js +176 -0
- package/dist/esm/config/docs-lint/parsers/frontmatter.d.ts +20 -0
- package/dist/esm/config/docs-lint/parsers/frontmatter.js +67 -0
- package/dist/esm/config/docs-lint/parsers/index.d.ts +3 -0
- package/dist/esm/config/docs-lint/parsers/index.js +3 -0
- package/dist/esm/config/docs-lint/schemas/adaptation.d.ts +28 -0
- package/dist/esm/config/docs-lint/schemas/adaptation.js +18 -0
- package/dist/esm/config/docs-lint/schemas/agents.d.ts +76 -0
- package/dist/esm/config/docs-lint/schemas/agents.js +29 -0
- package/dist/esm/config/docs-lint/schemas/audit.d.ts +52 -0
- package/dist/esm/config/docs-lint/schemas/audit.js +20 -0
- package/dist/esm/config/docs-lint/schemas/common.d.ts +68 -0
- package/dist/esm/config/docs-lint/schemas/common.js +73 -0
- package/dist/esm/config/docs-lint/schemas/cookbook.d.ts +48 -0
- package/dist/esm/config/docs-lint/schemas/cookbook.js +21 -0
- package/dist/esm/config/docs-lint/schemas/core.d.ts +189 -0
- package/dist/esm/config/docs-lint/schemas/core.js +54 -0
- package/dist/esm/config/docs-lint/schemas/decision.d.ts +18 -0
- package/dist/esm/config/docs-lint/schemas/decision.js +9 -0
- package/dist/esm/config/docs-lint/schemas/draft.d.ts +36 -0
- package/dist/esm/config/docs-lint/schemas/draft.js +35 -0
- package/dist/esm/config/docs-lint/schemas/evaluation.d.ts +43 -0
- package/dist/esm/config/docs-lint/schemas/evaluation.js +22 -0
- package/dist/esm/config/docs-lint/schemas/implementation-plan.d.ts +62 -0
- package/dist/esm/config/docs-lint/schemas/implementation-plan.js +34 -0
- package/dist/esm/config/docs-lint/schemas/index.d.ts +51 -0
- package/dist/esm/config/docs-lint/schemas/index.js +109 -0
- package/dist/esm/config/docs-lint/schemas/ongoing-initiative.d.ts +99 -0
- package/dist/esm/config/docs-lint/schemas/ongoing-initiative.js +31 -0
- package/dist/esm/config/docs-lint/schemas/parent-roadmap.d.ts +39 -0
- package/dist/esm/config/docs-lint/schemas/parent-roadmap.js +24 -0
- package/dist/esm/config/docs-lint/schemas/research.d.ts +26 -0
- package/dist/esm/config/docs-lint/schemas/research.js +20 -0
- package/dist/esm/config/docs-lint/schemas/rule.d.ts +48 -0
- package/dist/esm/config/docs-lint/schemas/rule.js +12 -0
- package/dist/esm/config/e2e-preset/index.d.ts +17 -0
- package/dist/esm/config/e2e-preset/index.js +29 -0
- package/dist/esm/config/e2e-preset/playwright.d.ts +17 -0
- package/dist/esm/config/e2e-preset/playwright.js +12 -0
- package/dist/esm/config/launch/contracts.d.ts +100 -0
- package/dist/esm/config/launch/contracts.js +13 -0
- package/dist/esm/config/launch/dev-contracts.d.ts +47 -0
- package/dist/esm/config/launch/dev-contracts.js +8 -0
- package/dist/esm/config/launch/dev-manifest.d.ts +42 -0
- package/dist/esm/config/launch/dev-manifest.js +196 -0
- package/dist/esm/config/launch/index.d.ts +14 -0
- package/dist/esm/config/launch/index.js +12 -0
- package/dist/esm/config/launch/launch-profile.d.ts +47 -0
- package/dist/esm/config/launch/launch-profile.js +39 -0
- package/dist/esm/config/launch/provision-stack.d.ts +64 -0
- package/dist/esm/config/launch/provision-stack.js +45 -0
- package/dist/esm/config/oxlint/code-safety.d.ts +19 -0
- package/dist/esm/config/oxlint/code-safety.js +90 -0
- package/dist/esm/config/oxlint/foundation-purity.d.ts +22 -0
- package/dist/esm/config/oxlint/foundation-purity.js +53 -0
- package/dist/esm/config/oxlint/graphql-conventions.d.ts +24 -0
- package/dist/esm/config/oxlint/graphql-conventions.js +204 -0
- package/dist/esm/config/oxlint/import-hygiene.d.ts +35 -0
- package/dist/esm/config/oxlint/import-hygiene.js +208 -0
- package/dist/esm/config/oxlint/index.d.ts +23 -0
- package/dist/esm/config/oxlint/index.js +29 -0
- package/dist/esm/config/oxlint/monorepo-paths.d.ts +19 -0
- package/dist/esm/config/oxlint/monorepo-paths.js +129 -0
- package/dist/esm/config/oxlint/oxlint-config.fixture.d.ts +3 -0
- package/dist/esm/config/oxlint/oxlint-config.fixture.js +5 -0
- package/dist/esm/config/oxlint/query-patterns.d.ts +25 -0
- package/dist/esm/config/oxlint/query-patterns.js +126 -0
- package/dist/esm/config/oxlint/testing-quality.d.ts +36 -0
- package/dist/esm/config/oxlint/testing-quality.js +187 -0
- package/dist/esm/config/oxlint/tier-boundaries.d.ts +36 -0
- package/dist/esm/config/oxlint/tier-boundaries.js +134 -0
- package/dist/esm/config/stryker/index.d.ts +44 -0
- package/dist/esm/config/stryker/index.js +79 -0
- package/dist/esm/config/test-preset/index.d.ts +2 -0
- package/dist/esm/config/test-preset/index.js +2 -0
- package/dist/esm/config/test-preset/vitest.d.ts +26 -0
- package/dist/esm/config/test-preset/vitest.js +31 -0
- package/dist/esm/config/tsconfig/base.json +37 -0
- package/dist/esm/config/tsconfig/cloudflare.json +10 -0
- package/dist/esm/config/tsconfig/library.json +16 -0
- package/dist/esm/config/tsconfig/react-library.json +9 -0
- package/dist/esm/config/tsconfig/react-router.json +10 -0
- package/dist/esm/config/vitest/bun-sqlite-shim.d.ts +14 -0
- package/dist/esm/config/vitest/bun-sqlite-shim.js +14 -0
- package/dist/esm/config/vitest/consumer-package.d.ts +4 -0
- package/dist/esm/config/vitest/consumer-package.js +63 -0
- package/dist/esm/config/vitest/flakiness-reporter.d.ts +7 -0
- package/dist/esm/config/vitest/flakiness-reporter.js +53 -0
- package/dist/esm/config/vitest/generated-runtime-aliases.d.ts +6 -0
- package/dist/esm/config/vitest/generated-runtime-aliases.js +3 -0
- package/dist/esm/config/vitest/node-setup.d.ts +6 -0
- package/dist/esm/config/vitest/node-setup.js +16 -0
- package/dist/esm/config/vitest/node.d.ts +43 -0
- package/dist/esm/config/vitest/node.js +180 -0
- package/dist/esm/config/vitest/pool-defaults.d.ts +11 -0
- package/dist/esm/config/vitest/pool-defaults.js +43 -0
- package/dist/esm/config/vitest/react-router.d.ts +22 -0
- package/dist/esm/config/vitest/react-router.js +83 -0
- package/dist/esm/config/vitest/react-setup.d.ts +13 -0
- package/dist/esm/config/vitest/react-setup.js +27 -0
- package/dist/esm/config/vitest/react.d.ts +22 -0
- package/dist/esm/config/vitest/react.js +85 -0
- package/dist/esm/config/vitest/version-guard.d.ts +7 -0
- package/dist/esm/config/vitest/version-guard.js +42 -0
- package/dist/esm/config/vitest/workers.d.ts +28 -0
- package/dist/esm/config/vitest/workers.js +44 -0
- package/dist/esm/config/workers-test/cloudflare-types.d.ts +30 -0
- package/dist/esm/config/workers-test/cloudflare-types.js +2 -0
- package/dist/esm/config/workers-test/durable-objects.d.ts +60 -0
- package/dist/esm/config/workers-test/durable-objects.js +73 -0
- package/dist/esm/config/workers-test/env.d.ts +58 -0
- package/dist/esm/config/workers-test/env.js +74 -0
- package/dist/esm/config/workers-test/execution-context.d.ts +21 -0
- package/dist/esm/config/workers-test/execution-context.js +22 -0
- package/dist/esm/config/workers-test/index.d.ts +16 -0
- package/dist/esm/config/workers-test/index.js +15 -0
- package/dist/esm/config/workers-test/requests.d.ts +44 -0
- package/dist/esm/config/workers-test/requests.js +71 -0
- package/dist/esm/config/workers-test/setup.d.ts +63 -0
- package/dist/esm/config/workers-test/setup.js +86 -0
- package/dist/esm/content/audit.d.ts +20 -0
- package/dist/esm/content/audit.js +164 -0
- package/dist/esm/content/dispatch.d.ts +32 -0
- package/dist/esm/content/dispatch.js +204 -0
- package/dist/esm/content/loader.d.ts +50 -0
- package/dist/esm/content/loader.js +166 -0
- package/dist/esm/content/schema.d.ts +123 -0
- package/dist/esm/content/schema.js +125 -0
- package/dist/esm/dev/dev-link-state.d.ts +22 -0
- package/dist/esm/dev/dev-link-state.js +51 -0
- package/dist/esm/dev/index.d.ts +2 -0
- package/dist/esm/dev/index.js +2 -0
- package/dist/esm/dev/load-manifest.d.ts +35 -0
- package/dist/esm/dev/load-manifest.js +182 -0
- package/dist/esm/dev/restore-dev-links/index.d.ts +30 -0
- package/dist/esm/dev/restore-dev-links/index.js +103 -0
- package/dist/esm/docs-linter/blueprint-plan.d.ts +80 -0
- package/dist/esm/docs-linter/blueprint-plan.js +427 -0
- package/dist/esm/docs-linter/index.d.ts +8 -0
- package/dist/esm/docs-linter/index.js +7 -0
- package/dist/esm/docs-linter/types.d.ts +16 -0
- package/dist/esm/docs-linter/types.js +8 -0
- package/dist/esm/e2e/command-builder.d.ts +3 -0
- package/dist/esm/e2e/command-builder.js +98 -0
- package/dist/esm/e2e/command-host-adapter.d.ts +30 -0
- package/dist/esm/e2e/command-host-adapter.js +70 -0
- package/dist/esm/e2e/config.d.ts +26 -0
- package/dist/esm/e2e/config.js +39 -0
- package/dist/esm/e2e/execution.d.ts +14 -0
- package/dist/esm/e2e/execution.js +148 -0
- package/dist/esm/e2e/host-adapter.d.ts +6 -0
- package/dist/esm/e2e/host-adapter.js +22 -0
- package/dist/esm/e2e/index.d.ts +9 -0
- package/dist/esm/e2e/index.js +8 -0
- package/dist/esm/e2e/load-host-adapter.d.ts +43 -0
- package/dist/esm/e2e/load-host-adapter.js +150 -0
- package/dist/esm/e2e/run-planner.d.ts +11 -0
- package/dist/esm/e2e/run-planner.js +186 -0
- package/dist/esm/e2e/suite-registry.d.ts +9 -0
- package/dist/esm/e2e/suite-registry.js +30 -0
- package/dist/esm/e2e/types.d.ts +81 -0
- package/dist/esm/e2e/types.js +2 -0
- package/dist/esm/format/errors.d.ts +2 -0
- package/dist/esm/format/errors.js +15 -0
- package/dist/esm/format/format.d.ts +2 -0
- package/dist/esm/format/format.js +16 -0
- package/dist/esm/format/index.d.ts +35 -0
- package/dist/esm/format/index.js +67 -0
- package/dist/esm/hooks/check-dev-link/index.d.ts +19 -0
- package/dist/esm/hooks/check-dev-link/index.js +87 -0
- package/dist/esm/hooks/doctor.d.ts +34 -0
- package/dist/esm/hooks/doctor.js +699 -0
- package/dist/esm/hooks/guard-switch/index.d.ts +3 -0
- package/dist/esm/hooks/guard-switch/index.js +18 -0
- package/dist/esm/hooks/guard-switch/state.d.ts +4 -0
- package/dist/esm/hooks/guard-switch/state.js +30 -0
- package/dist/esm/hooks/post-tool/lint-after-edit.d.ts +17 -0
- package/dist/esm/hooks/post-tool/lint-after-edit.js +57 -0
- package/dist/esm/hooks/pretool-guard/dev-routing.d.ts +21 -0
- package/dist/esm/hooks/pretool-guard/dev-routing.js +658 -0
- package/dist/esm/hooks/pretool-guard/index.d.ts +5 -0
- package/dist/esm/hooks/pretool-guard/index.js +11 -0
- package/dist/esm/hooks/pretool-guard/logger.d.ts +32 -0
- package/dist/esm/hooks/pretool-guard/logger.js +82 -0
- package/dist/esm/hooks/pretool-guard/runner.d.ts +16 -0
- package/dist/esm/hooks/pretool-guard/runner.js +149 -0
- package/dist/esm/hooks/pretool-guard/validators/blueprint.d.ts +3 -0
- package/dist/esm/hooks/pretool-guard/validators/blueprint.js +16 -0
- package/dist/esm/hooks/pretool-guard/validators/command-file.d.ts +3 -0
- package/dist/esm/hooks/pretool-guard/validators/command-file.js +36 -0
- package/dist/esm/hooks/pretool-guard/validators/complexity.d.ts +3 -0
- package/dist/esm/hooks/pretool-guard/validators/complexity.js +24 -0
- package/dist/esm/hooks/pretool-guard/validators/dangerous-commands.d.ts +4 -0
- package/dist/esm/hooks/pretool-guard/validators/dangerous-commands.js +60 -0
- package/dist/esm/hooks/pretool-guard/validators/docs-governance.d.ts +2 -0
- package/dist/esm/hooks/pretool-guard/validators/docs-governance.js +2 -0
- package/dist/esm/hooks/pretool-guard/validators/file-conventions.d.ts +3 -0
- package/dist/esm/hooks/pretool-guard/validators/file-conventions.js +67 -0
- package/dist/esm/hooks/pretool-guard/validators/forbidden-commands.d.ts +66 -0
- package/dist/esm/hooks/pretool-guard/validators/forbidden-commands.js +439 -0
- package/dist/esm/hooks/pretool-guard/validators/index.d.ts +14 -0
- package/dist/esm/hooks/pretool-guard/validators/index.js +26 -0
- package/dist/esm/hooks/pretool-guard/validators/mcp-redirect.d.ts +16 -0
- package/dist/esm/hooks/pretool-guard/validators/mcp-redirect.js +50 -0
- package/dist/esm/hooks/pretool-guard/validators/package-imports.d.ts +10 -0
- package/dist/esm/hooks/pretool-guard/validators/package-imports.js +36 -0
- package/dist/esm/hooks/pretool-guard/validators/package-imports.types.d.ts +8 -0
- package/dist/esm/hooks/pretool-guard/validators/package-imports.types.js +2 -0
- package/dist/esm/hooks/pretool-guard/validators/path-contract.d.ts +15 -0
- package/dist/esm/hooks/pretool-guard/validators/path-contract.js +105 -0
- package/dist/esm/hooks/pretool-guard/validators/plan-frontmatter.d.ts +13 -0
- package/dist/esm/hooks/pretool-guard/validators/plan-frontmatter.js +121 -0
- package/dist/esm/hooks/pretool-guard/validators/skip-result.d.ts +3 -0
- package/dist/esm/hooks/pretool-guard/validators/skip-result.js +4 -0
- package/dist/esm/hooks/pretool-guard/validators/test-quality.d.ts +22 -0
- package/dist/esm/hooks/pretool-guard/validators/test-quality.js +218 -0
- package/dist/esm/hooks/pretool-guard/validators/ux-quality.d.ts +3 -0
- package/dist/esm/hooks/pretool-guard/validators/ux-quality.js +80 -0
- package/dist/esm/hooks/sessionstart/index.d.ts +16 -0
- package/dist/esm/hooks/sessionstart/index.js +122 -0
- package/dist/esm/hooks/sessionstart/update-banner.d.ts +2 -0
- package/dist/esm/hooks/sessionstart/update-banner.js +66 -0
- package/dist/esm/hooks/shared/hook-bootstrap.d.ts +28 -0
- package/dist/esm/hooks/shared/hook-bootstrap.js +62 -0
- package/dist/esm/hooks/shared/mcp-sentinel.d.ts +10 -0
- package/dist/esm/hooks/shared/mcp-sentinel.js +106 -0
- package/dist/esm/hooks/shared/routing-block.d.ts +8 -0
- package/dist/esm/hooks/shared/routing-block.js +140 -0
- package/dist/esm/hooks/shared/types.d.ts +24 -0
- package/dist/esm/hooks/shared/types.js +48 -0
- package/dist/esm/hooks/shared/validators/blueprint.d.ts +17 -0
- package/dist/esm/hooks/shared/validators/blueprint.js +98 -0
- package/dist/esm/hooks/shared/validators/docs-governance.d.ts +3 -0
- package/dist/esm/hooks/shared/validators/docs-governance.js +30 -0
- package/dist/esm/hooks/shared/worktree-root.d.ts +2 -0
- package/dist/esm/hooks/shared/worktree-root.js +46 -0
- package/dist/esm/hooks/stop/qa-changed-files.d.ts +14 -0
- package/dist/esm/hooks/stop/qa-changed-files.js +96 -0
- package/dist/esm/hooks/test-quality-check.d.ts +5 -0
- package/dist/esm/hooks/test-quality-check.js +61 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/lint/index.d.ts +53 -0
- package/dist/esm/lint/index.js +115 -0
- package/dist/esm/local.d.ts +19 -0
- package/dist/esm/local.js +14 -0
- package/dist/esm/mcp/_tail-hints.d.ts +31 -0
- package/dist/esm/mcp/_tail-hints.js +86 -0
- package/dist/esm/mcp/auto-discover.d.ts +65 -0
- package/dist/esm/mcp/auto-discover.js +108 -0
- package/dist/esm/mcp/blueprint-server.d.ts +137 -0
- package/dist/esm/mcp/blueprint-server.js +2131 -0
- package/dist/esm/mcp/blueprint-server.platform-first.test-harness.d.ts +31 -0
- package/dist/esm/mcp/blueprint-server.platform-first.test-harness.js +216 -0
- package/dist/esm/mcp/blueprint-server.test-harness.d.ts +49 -0
- package/dist/esm/mcp/blueprint-server.test-harness.js +195 -0
- package/dist/esm/mcp/cli.d.ts +10 -0
- package/dist/esm/mcp/cli.js +48 -0
- package/dist/esm/mcp/runners/test.d.ts +36 -0
- package/dist/esm/mcp/runners/test.js +330 -0
- package/dist/esm/mcp/server.d.ts +24 -0
- package/dist/esm/mcp/server.js +142 -0
- package/dist/esm/mcp/tools/_shared/project-root.d.ts +29 -0
- package/dist/esm/mcp/tools/_shared/project-root.js +61 -0
- package/dist/esm/mcp/tools/_shared/redact.d.ts +2 -0
- package/dist/esm/mcp/tools/_shared/redact.js +29 -0
- package/dist/esm/mcp/tools/_shared/result.d.ts +79 -0
- package/dist/esm/mcp/tools/_shared/result.js +85 -0
- package/dist/esm/mcp/tools/_shared/run-command.d.ts +37 -0
- package/dist/esm/mcp/tools/_shared/run-command.js +122 -0
- package/dist/esm/mcp/tools/_shared/test-budget-contract.d.ts +18 -0
- package/dist/esm/mcp/tools/_shared/test-budget-contract.js +24 -0
- package/dist/esm/mcp/tools/_shared/ui-detection.d.ts +2 -0
- package/dist/esm/mcp/tools/_shared/ui-detection.js +19 -0
- package/dist/esm/mcp/tools/audit.d.ts +45 -0
- package/dist/esm/mcp/tools/audit.js +345 -0
- package/dist/esm/mcp/tools/ci-act.d.ts +4 -0
- package/dist/esm/mcp/tools/ci-act.js +91 -0
- package/dist/esm/mcp/tools/e2e.d.ts +31 -0
- package/dist/esm/mcp/tools/e2e.js +116 -0
- package/dist/esm/mcp/tools/format.d.ts +27 -0
- package/dist/esm/mcp/tools/format.js +107 -0
- package/dist/esm/mcp/tools/lint.d.ts +26 -0
- package/dist/esm/mcp/tools/lint.js +229 -0
- package/dist/esm/mcp/tools/qa.d.ts +39 -0
- package/dist/esm/mcp/tools/qa.js +218 -0
- package/dist/esm/mcp/tools/test.d.ts +25 -0
- package/dist/esm/mcp/tools/test.js +112 -0
- package/dist/esm/mcp/tools/typecheck.d.ts +27 -0
- package/dist/esm/mcp/tools/typecheck.js +186 -0
- package/dist/esm/mcp/tools/worker-tail.d.ts +4 -0
- package/dist/esm/mcp/tools/worker-tail.js +121 -0
- package/dist/esm/output-transforms/generic.d.ts +3 -0
- package/dist/esm/output-transforms/generic.js +20 -0
- package/dist/esm/output-transforms/index.d.ts +34 -0
- package/dist/esm/output-transforms/index.js +41 -0
- package/dist/esm/output-transforms/metadata.d.ts +8 -0
- package/dist/esm/output-transforms/metadata.js +24 -0
- package/dist/esm/output-transforms/oxlint.d.ts +3 -0
- package/dist/esm/output-transforms/oxlint.js +85 -0
- package/dist/esm/output-transforms/passthrough.d.ts +3 -0
- package/dist/esm/output-transforms/passthrough.js +11 -0
- package/dist/esm/output-transforms/rulesync.d.ts +3 -0
- package/dist/esm/output-transforms/rulesync.js +80 -0
- package/dist/esm/output-transforms/should-compact.d.ts +7 -0
- package/dist/esm/output-transforms/should-compact.js +14 -0
- package/dist/esm/output-transforms/tsc.d.ts +3 -0
- package/dist/esm/output-transforms/tsc.js +45 -0
- package/dist/esm/output-transforms/vitest.d.ts +3 -0
- package/dist/esm/output-transforms/vitest.js +120 -0
- package/dist/esm/package.json +92 -0
- package/dist/esm/paths/state-root.d.ts +23 -0
- package/dist/esm/paths/state-root.js +121 -0
- package/dist/esm/quality-engine/command-builder.d.ts +141 -0
- package/dist/esm/quality-engine/command-builder.js +285 -0
- package/dist/esm/quality-engine/index.d.ts +15 -0
- package/dist/esm/quality-engine/index.js +16 -0
- package/dist/esm/quality-engine/log-paths.d.ts +44 -0
- package/dist/esm/quality-engine/log-paths.js +73 -0
- package/dist/esm/quality-engine/package-import-rules.d.ts +69 -0
- package/dist/esm/quality-engine/package-import-rules.js +491 -0
- package/dist/esm/quality-engine/target-resolver.d.ts +187 -0
- package/dist/esm/quality-engine/target-resolver.js +552 -0
- package/dist/esm/quality-engine/test-classification.d.ts +7 -0
- package/dist/esm/quality-engine/test-classification.js +85 -0
- package/dist/esm/quality-engine/workspace-config.d.ts +68 -0
- package/dist/esm/quality-engine/workspace-config.js +131 -0
- package/dist/esm/runners/claude-subagent/index.d.ts +11 -0
- package/dist/esm/runners/claude-subagent/index.js +114 -0
- package/dist/esm/runners/claude-subagent/types.d.ts +7 -0
- package/dist/esm/runners/claude-subagent/types.js +5 -0
- package/dist/esm/runners/codex-exec/index.d.ts +16 -0
- package/dist/esm/runners/codex-exec/index.js +105 -0
- package/dist/esm/runners/index.d.ts +3 -0
- package/dist/esm/runners/index.js +2 -0
- package/dist/esm/runners/local-worktree/index.d.ts +19 -0
- package/dist/esm/runners/local-worktree/index.js +85 -0
- package/dist/esm/runners/local-worktree/path.d.ts +10 -0
- package/dist/esm/runners/local-worktree/path.js +14 -0
- package/dist/esm/runners/select.d.ts +12 -0
- package/dist/esm/runners/select.js +38 -0
- package/dist/esm/runners/types.d.ts +70 -0
- package/dist/esm/runners/types.js +62 -0
- package/dist/esm/secret-gate/runner.d.ts +25 -0
- package/dist/esm/secret-gate/runner.js +106 -0
- package/dist/esm/session-memory/fetch-index.d.ts +13 -0
- package/dist/esm/session-memory/fetch-index.js +80 -0
- package/dist/esm/session-memory/repo-hash.d.ts +3 -0
- package/dist/esm/session-memory/repo-hash.js +20 -0
- package/dist/esm/session-memory/session.d.ts +10 -0
- package/dist/esm/session-memory/session.js +105 -0
- package/dist/esm/session-memory/store.d.ts +17 -0
- package/dist/esm/session-memory/store.js +168 -0
- package/dist/esm/session-memory/types.d.ts +58 -0
- package/dist/esm/session-memory/types.js +2 -0
- package/dist/esm/symlinker/consumers.d.ts +97 -0
- package/dist/esm/symlinker/consumers.js +87 -0
- package/dist/esm/symlinker/frontmatter.d.ts +15 -0
- package/dist/esm/symlinker/frontmatter.js +20 -0
- package/dist/esm/symlinker/index.d.ts +84 -0
- package/dist/esm/symlinker/index.js +496 -0
- package/dist/esm/symlinker/test-utils/assert-symlink-resolves.d.ts +12 -0
- package/dist/esm/symlinker/test-utils/assert-symlink-resolves.js +24 -0
- package/dist/esm/symlinker/toml.d.ts +11 -0
- package/dist/esm/symlinker/toml.js +16 -0
- package/dist/esm/symlinker/unified-sync.d.ts +64 -0
- package/dist/esm/symlinker/unified-sync.js +362 -0
- package/dist/esm/telemetry/_endpoint.d.ts +3 -0
- package/dist/esm/telemetry/_endpoint.js +4 -0
- package/dist/esm/telemetry/setup-tthw.d.ts +10 -0
- package/dist/esm/telemetry/setup-tthw.js +34 -0
- package/dist/esm/test/command-builder.d.ts +25 -0
- package/dist/esm/test/command-builder.js +98 -0
- package/dist/esm/test/index.d.ts +3 -0
- package/dist/esm/test/index.js +3 -0
- package/dist/esm/test/target-resolver.d.ts +13 -0
- package/dist/esm/test/target-resolver.js +53 -0
- package/dist/esm/typecheck/index.d.ts +52 -0
- package/dist/esm/typecheck/index.js +135 -0
- package/dist/esm/vite/bundle-budget.d.ts +37 -0
- package/dist/esm/vite/bundle-budget.js +151 -0
- package/dist/esm/vite/chunk-load-recovery.d.ts +18 -0
- package/dist/esm/vite/chunk-load-recovery.js +62 -0
- package/dist/esm/vite/index.d.ts +3 -0
- package/dist/esm/vite/index.js +3 -0
- package/dist/esm/vite/local.d.ts +16 -0
- package/dist/esm/vite/local.js +164 -0
- package/just/dev-kit.just +24 -0
- package/just/e2e-kit.just +13 -0
- package/just/test-kit.just +10 -0
- package/package.json +675 -0
- package/skills/better-auth-best-practices/SKILL.md +212 -0
- package/skills/deep-research/SKILL.md +240 -0
- package/skills/fix/SKILL.md +120 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +189 -0
- package/skills/hooks-doctor/SKILL.md +77 -0
- package/skills/logging-best-practices/SKILL.md +145 -0
- package/skills/lore-protocol/SKILL.md +93 -0
- package/skills/plan-refine/SKILL.md +645 -0
- package/skills/pll/SKILL.md +85 -0
- package/skills/react-doctor/SKILL.md +54 -0
- package/skills/systematic-debugging/SKILL.md +322 -0
- package/skills/tanstack-query/SKILL.md +175 -0
- package/skills/tech-debt/SKILL.md +79 -0
- package/skills/test-driven-development/SKILL.md +403 -0
- package/skills/testing-philosophy/SKILL.md +530 -0
- package/skills/vercel-react-best-practices/SKILL.md +212 -0
- package/skills/verify/SKILL.md +133 -0
- package/skills/web-design-guidelines/SKILL.md +53 -0
- package/tsconfig/base.json +37 -0
- package/tsconfig/cloudflare.json +10 -0
- package/tsconfig/library.json +16 -0
- package/tsconfig/react-library.json +9 -0
- package/tsconfig/react-router.json +10 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TechDebtService
|
|
3
|
+
*
|
|
4
|
+
* Manages technical debt items stored in git.
|
|
5
|
+
* Scans tech-debt documents recursively from the resolved repo layout.
|
|
6
|
+
* Extends TrackedDocumentService to provide filtering, sorting, and query capabilities.
|
|
7
|
+
*/
|
|
8
|
+
import matter from 'gray-matter';
|
|
9
|
+
import * as fs from 'node:fs/promises';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import { isCategory, isSeverity, isTechDebtStatus, parseTechDebt, } from '#tech-debt/index';
|
|
12
|
+
import { resolveBlueprintRoot } from '#utils/blueprint-root';
|
|
13
|
+
import { resolveTechDebtRoot } from '#utils/tech-debt-root';
|
|
14
|
+
import { calculateFreshness } from '#utils/freshness';
|
|
15
|
+
import { toBlueprintRecord } from './blueprint-records.js';
|
|
16
|
+
import { linkBlueprintToTechDebt, unlinkBlueprintFromTechDebt, } from './blueprint-tech-debt-links.js';
|
|
17
|
+
import { computePriorityScore as computePriorityScoreAlgorithm } from './priority-scoring.js';
|
|
18
|
+
import { scanBlueprintDirectory, scanDocumentDirectory } from './scanner.js';
|
|
19
|
+
import { TrackedDocumentService } from './TrackedDocumentService.js';
|
|
20
|
+
export class TechDebtService extends TrackedDocumentService {
|
|
21
|
+
constructor(projectPath) {
|
|
22
|
+
// Resolve generic consumer layout first, with Webpresso's legacy layout as fallback.
|
|
23
|
+
const techDebtDir = resolveTechDebtRoot(projectPath);
|
|
24
|
+
super(techDebtDir, 'README.md', projectPath);
|
|
25
|
+
}
|
|
26
|
+
// Implementation of abstract list() method
|
|
27
|
+
list() {
|
|
28
|
+
return this.listTechDebt();
|
|
29
|
+
}
|
|
30
|
+
async listTechDebt() {
|
|
31
|
+
const scannedItems = scanDocumentDirectory({
|
|
32
|
+
baseDir: this.baseDir,
|
|
33
|
+
filePattern: this.filePattern,
|
|
34
|
+
includeSpecialFolders: true,
|
|
35
|
+
});
|
|
36
|
+
const items = [];
|
|
37
|
+
for (const scanned of scannedItems) {
|
|
38
|
+
const summary = await this.tryParseTechDebtSummary(scanned);
|
|
39
|
+
if (summary) {
|
|
40
|
+
items.push(summary);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return items;
|
|
44
|
+
}
|
|
45
|
+
async tryParseTechDebtSummary(scanned) {
|
|
46
|
+
try {
|
|
47
|
+
const content = await fs.readFile(scanned.path, 'utf-8');
|
|
48
|
+
return this.parseSummary(content, scanned.slug);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
return this.handleParseSummaryError(error, scanned);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
parseSummary(content, slug) {
|
|
55
|
+
const item = parseTechDebt(content, slug);
|
|
56
|
+
return {
|
|
57
|
+
slug: item.slug,
|
|
58
|
+
title: item.title,
|
|
59
|
+
status: item.status,
|
|
60
|
+
severity: item.severity,
|
|
61
|
+
category: item.category,
|
|
62
|
+
priorityScore: item.basePriority,
|
|
63
|
+
nextReview: item.nextReview,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
buildMalformedSummary(scanned, data, errorMessage) {
|
|
67
|
+
return {
|
|
68
|
+
slug: scanned.slug,
|
|
69
|
+
title: data.title || scanned.slug,
|
|
70
|
+
status: data.status || 'unknown',
|
|
71
|
+
severity: data.severity || 'unknown',
|
|
72
|
+
category: data.category,
|
|
73
|
+
priorityScore: 0,
|
|
74
|
+
malformed: errorMessage,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// Implementation of abstract get() method
|
|
78
|
+
get(slug) {
|
|
79
|
+
return this.getTechDebt(slug);
|
|
80
|
+
}
|
|
81
|
+
async getTechDebt(slug) {
|
|
82
|
+
// Try direct path first (supports both 'category/item' and 'item')
|
|
83
|
+
const itemPath = path.join(this.baseDir, slug, 'README.md');
|
|
84
|
+
try {
|
|
85
|
+
await fs.access(itemPath);
|
|
86
|
+
const content = await fs.readFile(itemPath, 'utf-8');
|
|
87
|
+
return parseTechDebt(content, slug);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
// Scan all items to find a match by slug
|
|
91
|
+
const scannedItems = scanDocumentDirectory({
|
|
92
|
+
baseDir: this.baseDir,
|
|
93
|
+
filePattern: this.filePattern,
|
|
94
|
+
includeSpecialFolders: true,
|
|
95
|
+
});
|
|
96
|
+
const found = scannedItems.find((p) => p.slug === slug || p.slug.endsWith(`/${slug}`));
|
|
97
|
+
if (!found) {
|
|
98
|
+
throw new Error(`TechDebt item not found: ${slug}\nAvailable items:\n${scannedItems.map((p) => ` - ${p.slug}`).join('\n')}`);
|
|
99
|
+
}
|
|
100
|
+
const content = await fs.readFile(found.path, 'utf-8');
|
|
101
|
+
return parseTechDebt(content, found.slug);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async query(options) {
|
|
105
|
+
const scannedItems = scanDocumentDirectory({
|
|
106
|
+
baseDir: this.baseDir,
|
|
107
|
+
filePattern: this.filePattern,
|
|
108
|
+
});
|
|
109
|
+
const itemRecords = await this.buildRecords(scannedItems);
|
|
110
|
+
const { records, totalFiltered } = this.processQueryPipeline(itemRecords, options);
|
|
111
|
+
return {
|
|
112
|
+
items: records,
|
|
113
|
+
summary: this.computeQuerySummary(itemRecords, totalFiltered),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get tech debt items that are past their review date
|
|
118
|
+
*/
|
|
119
|
+
async getOverdueReviews() {
|
|
120
|
+
const result = await this.query({
|
|
121
|
+
filters: { overdue: true },
|
|
122
|
+
});
|
|
123
|
+
return result.items;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get tech debt items by category
|
|
127
|
+
*/
|
|
128
|
+
async getByCategory(category) {
|
|
129
|
+
if (!isCategory(category)) {
|
|
130
|
+
throw new Error(`Invalid category: ${category}`);
|
|
131
|
+
}
|
|
132
|
+
const result = await this.query({
|
|
133
|
+
filters: { category },
|
|
134
|
+
});
|
|
135
|
+
return result.items;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get tech debt items by severity
|
|
139
|
+
*/
|
|
140
|
+
async getBySeverity(severity) {
|
|
141
|
+
if (!isSeverity(severity)) {
|
|
142
|
+
throw new Error(`Invalid severity: ${severity}`);
|
|
143
|
+
}
|
|
144
|
+
const result = await this.query({
|
|
145
|
+
filters: { severity },
|
|
146
|
+
});
|
|
147
|
+
return result.items;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Link a tech debt item to a blueprint (bidirectional)
|
|
151
|
+
* Updates both the tech debt document and blueprint frontmatter
|
|
152
|
+
* @param tdSlug - TechDebt slug
|
|
153
|
+
* @param bpSlug - Blueprint slug
|
|
154
|
+
* @throws Error if either document doesn't exist
|
|
155
|
+
*/
|
|
156
|
+
async linkToBlueprint(tdSlug, bpSlug) {
|
|
157
|
+
// Verify both documents exist
|
|
158
|
+
const itemPath = path.join(this.baseDir, tdSlug, 'README.md');
|
|
159
|
+
await fs.access(itemPath); // Throws if tech debt not found
|
|
160
|
+
await linkBlueprintToTechDebt(resolveBlueprintRoot(this.projectPath), this.projectPath, bpSlug, tdSlug);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Unlink a tech debt item from a blueprint (bidirectional)
|
|
164
|
+
* Updates both the tech debt document and blueprint frontmatter
|
|
165
|
+
* @param tdSlug - TechDebt slug
|
|
166
|
+
* @param bpSlug - Blueprint slug
|
|
167
|
+
*/
|
|
168
|
+
async unlinkFromBlueprint(tdSlug, bpSlug) {
|
|
169
|
+
await unlinkBlueprintFromTechDebt(resolveBlueprintRoot(this.projectPath), this.projectPath, bpSlug, tdSlug);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Get all blueprints linked to a tech debt item
|
|
173
|
+
* @param tdSlug - TechDebt slug
|
|
174
|
+
* @returns Array of BlueprintRecord objects
|
|
175
|
+
*/
|
|
176
|
+
async getLinkedBlueprints(tdSlug) {
|
|
177
|
+
// Read fresh from disk and deep-clone to avoid gray-matter shared state issues
|
|
178
|
+
const itemPath = path.join(this.baseDir, tdSlug, 'README.md');
|
|
179
|
+
const content = await fs.readFile(itemPath, 'utf-8');
|
|
180
|
+
const parsed = matter(content);
|
|
181
|
+
const data = JSON.parse(JSON.stringify(parsed.data));
|
|
182
|
+
const linkedBlueprints = data.linked_blueprints ?? [];
|
|
183
|
+
if (!linkedBlueprints.length) {
|
|
184
|
+
return [];
|
|
185
|
+
}
|
|
186
|
+
const blueprintsDir = resolveBlueprintRoot(this.projectPath);
|
|
187
|
+
const scannedBlueprints = scanBlueprintDirectory({
|
|
188
|
+
baseDir: blueprintsDir,
|
|
189
|
+
includeSpecialFolders: true,
|
|
190
|
+
});
|
|
191
|
+
const matchingBlueprints = scannedBlueprints.filter((blueprint) => linkedBlueprints.includes(blueprint.slug) ||
|
|
192
|
+
linkedBlueprints.some((linked) => blueprint.slug.endsWith(`/${linked}`)));
|
|
193
|
+
const records = await Promise.all(matchingBlueprints.map((blueprint) => toBlueprintRecord(blueprint.path, blueprint.slug, blueprint.group)));
|
|
194
|
+
return records.filter((record) => record !== null);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Compute priority score for a tech debt item
|
|
198
|
+
*
|
|
199
|
+
* Calculates a 0-100 priority score based on:
|
|
200
|
+
* - Severity (10-40 points)
|
|
201
|
+
* - Staleness (0-30 points) - days since last review
|
|
202
|
+
* - Overdue review (0-20 points)
|
|
203
|
+
* - Active blueprint link (0-10 points)
|
|
204
|
+
* - Category urgency (0-5 points) - security=5, testing=3
|
|
205
|
+
*
|
|
206
|
+
* @param item - The tech debt record to score
|
|
207
|
+
* @param linkedBlueprints - Blueprints that reference this tech debt item
|
|
208
|
+
* @returns Priority score from 0-100 (higher = more urgent)
|
|
209
|
+
*/
|
|
210
|
+
computePriorityScore(item, linkedBlueprints) {
|
|
211
|
+
return computePriorityScoreAlgorithm(item, linkedBlueprints);
|
|
212
|
+
}
|
|
213
|
+
static FRESHNESS_STATUS_MAP = {
|
|
214
|
+
accepted: 'planned',
|
|
215
|
+
'needs-remediation': 'in-progress',
|
|
216
|
+
monitoring: 'planned',
|
|
217
|
+
resolved: 'completed',
|
|
218
|
+
};
|
|
219
|
+
static computeFreshness(lastReviewed, status) {
|
|
220
|
+
const freshnessStatus = TechDebtService.FRESHNESS_STATUS_MAP[status] ?? 'in-progress';
|
|
221
|
+
return lastReviewed
|
|
222
|
+
? calculateFreshness(lastReviewed, freshnessStatus)
|
|
223
|
+
: { score: 0.5, daysSinceUpdate: 0, status: 'aging' };
|
|
224
|
+
}
|
|
225
|
+
async toRecord(filePath, slug, group) {
|
|
226
|
+
try {
|
|
227
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
228
|
+
const item = parseTechDebt(content, slug);
|
|
229
|
+
const lastReviewed = item.lastReviewed ? new Date(item.lastReviewed) : undefined;
|
|
230
|
+
const validCategory = item.category && isCategory(item.category) ? item.category : undefined;
|
|
231
|
+
return {
|
|
232
|
+
slug,
|
|
233
|
+
title: item.title,
|
|
234
|
+
status: isTechDebtStatus(item.status) ? item.status : 'needs-remediation',
|
|
235
|
+
severity: isSeverity(item.severity) ? item.severity : 'medium',
|
|
236
|
+
category: validCategory,
|
|
237
|
+
priorityScore: item.basePriority,
|
|
238
|
+
nextReview: item.nextReview,
|
|
239
|
+
group,
|
|
240
|
+
path: filePath,
|
|
241
|
+
lastReviewed,
|
|
242
|
+
freshness: TechDebtService.computeFreshness(lastReviewed, item.status),
|
|
243
|
+
linkedBlueprints: item.linkedBlueprints ?? [],
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return null;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
matchesAllFilters(item, filters) {
|
|
251
|
+
return (this.matchesStatusFilter(item.status, filters.status) &&
|
|
252
|
+
this.matchesSeverityFilter(item, filters) &&
|
|
253
|
+
this.matchesCategoryFilter(item, filters) &&
|
|
254
|
+
this.matchesOverdueFilter(item, filters) &&
|
|
255
|
+
this.matchesStaleDaysFilter(item, filters));
|
|
256
|
+
}
|
|
257
|
+
matchesSeverityFilter(item, filters) {
|
|
258
|
+
return this.matchesFilter(item.severity, filters.severity);
|
|
259
|
+
}
|
|
260
|
+
matchesCategoryFilter(item, filters) {
|
|
261
|
+
if (!filters.category)
|
|
262
|
+
return true;
|
|
263
|
+
return item.category !== undefined && this.matchesFilter(item.category, filters.category);
|
|
264
|
+
}
|
|
265
|
+
matchesOverdueFilter(item, filters) {
|
|
266
|
+
if (!filters.overdue)
|
|
267
|
+
return true;
|
|
268
|
+
if (!item.nextReview)
|
|
269
|
+
return false;
|
|
270
|
+
const nextReviewDate = new Date(item.nextReview);
|
|
271
|
+
return nextReviewDate < new Date();
|
|
272
|
+
}
|
|
273
|
+
matchesStaleDaysFilter(item, filters) {
|
|
274
|
+
if (filters.staleDays === undefined)
|
|
275
|
+
return true;
|
|
276
|
+
if (!item.lastReviewed)
|
|
277
|
+
return false;
|
|
278
|
+
const daysSinceReview = Math.floor((Date.now() - item.lastReviewed.getTime()) / (1000 * 60 * 60 * 24));
|
|
279
|
+
return daysSinceReview >= filters.staleDays;
|
|
280
|
+
}
|
|
281
|
+
static SEVERITY_ORDER = { critical: 4, high: 3, medium: 2, low: 1 };
|
|
282
|
+
static compareOptionalDates(a, b) {
|
|
283
|
+
if (!a && !b)
|
|
284
|
+
return 0;
|
|
285
|
+
if (!a)
|
|
286
|
+
return 1;
|
|
287
|
+
if (!b)
|
|
288
|
+
return -1;
|
|
289
|
+
const aTime = a instanceof Date ? a.getTime() : new Date(a).getTime();
|
|
290
|
+
const bTime = b instanceof Date ? b.getTime() : new Date(b).getTime();
|
|
291
|
+
return aTime - bTime;
|
|
292
|
+
}
|
|
293
|
+
static compareField(a, b, field) {
|
|
294
|
+
switch (field) {
|
|
295
|
+
case 'priorityScore':
|
|
296
|
+
return a.priorityScore - b.priorityScore;
|
|
297
|
+
case 'nextReview':
|
|
298
|
+
return TechDebtService.compareOptionalDates(a.nextReview, b.nextReview);
|
|
299
|
+
case 'lastReviewed':
|
|
300
|
+
return TechDebtService.compareOptionalDates(a.lastReviewed, b.lastReviewed);
|
|
301
|
+
case 'slug':
|
|
302
|
+
return a.slug.localeCompare(b.slug);
|
|
303
|
+
case 'severity':
|
|
304
|
+
return ((TechDebtService.SEVERITY_ORDER[a.severity] ?? 0) -
|
|
305
|
+
(TechDebtService.SEVERITY_ORDER[b.severity] ?? 0));
|
|
306
|
+
default:
|
|
307
|
+
return 0;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
applySorting(items, sort) {
|
|
311
|
+
const sorted = [...items];
|
|
312
|
+
const direction = sort.direction === 'asc' ? 1 : -1;
|
|
313
|
+
sorted.sort((a, b) => TechDebtService.compareField(a, b, sort.field) * direction);
|
|
314
|
+
return sorted;
|
|
315
|
+
}
|
|
316
|
+
// Compute query summary
|
|
317
|
+
computeQuerySummary(allItems, totalFiltered) {
|
|
318
|
+
const byStatus = this.countByField(allItems, (i) => i.status);
|
|
319
|
+
const bySeverity = this.countByField(allItems, (i) => i.severity);
|
|
320
|
+
const now = new Date();
|
|
321
|
+
const overdueCount = allItems.filter((i) => {
|
|
322
|
+
if (!i.nextReview)
|
|
323
|
+
return false;
|
|
324
|
+
const nextReviewDate = new Date(i.nextReview);
|
|
325
|
+
return nextReviewDate < now;
|
|
326
|
+
}).length;
|
|
327
|
+
const totalPriority = allItems.reduce((sum, i) => sum + i.priorityScore, 0);
|
|
328
|
+
return {
|
|
329
|
+
total: totalFiltered,
|
|
330
|
+
byStatus,
|
|
331
|
+
bySeverity,
|
|
332
|
+
overdueCount,
|
|
333
|
+
avgPriority: allItems.length > 0 ? totalPriority / allItems.length : 0,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
//# sourceMappingURL=TechDebtService.js.map
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackedDocumentService - Abstract base class for tracked document services
|
|
3
|
+
*
|
|
4
|
+
* This base class provides shared functionality for services that manage
|
|
5
|
+
* tracked documents stored in git (e.g., blueprints, tech debt items).
|
|
6
|
+
*
|
|
7
|
+
* Uses the Template Method pattern:
|
|
8
|
+
* - Base class provides skeleton operations (list, get, query, filter, sort)
|
|
9
|
+
* - Subclasses implement document-specific logic (parseSummary, toRecord)
|
|
10
|
+
*
|
|
11
|
+
* @template TSummary - Lightweight summary type for list views
|
|
12
|
+
* @template TRecord - Extended record type with query/filter fields
|
|
13
|
+
* @template TFilters - Filter criteria specific to the document type
|
|
14
|
+
* @template TSortOptions - Sorting options specific to the document type
|
|
15
|
+
*/
|
|
16
|
+
import type { FreshnessScore } from '#query/types';
|
|
17
|
+
import type { ScannedBlueprint } from './scanner.js';
|
|
18
|
+
/**
|
|
19
|
+
* Base query options that all tracked document services support
|
|
20
|
+
*/
|
|
21
|
+
export interface BaseQueryOptions<TFilters, TSortOptions> {
|
|
22
|
+
filters?: TFilters;
|
|
23
|
+
sort?: TSortOptions;
|
|
24
|
+
limit?: number;
|
|
25
|
+
offset?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Base query result structure returned by all tracked document services.
|
|
29
|
+
* Subclasses define their own result shape with domain-specific field names
|
|
30
|
+
* (e.g., 'plans' for blueprints, 'items' for tech debt).
|
|
31
|
+
*/
|
|
32
|
+
export interface BaseQueryResult<TSummary> {
|
|
33
|
+
/** Aggregate summary statistics */
|
|
34
|
+
summary: TSummary;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Abstract base class for services that manage tracked documents.
|
|
38
|
+
*
|
|
39
|
+
* Provides:
|
|
40
|
+
* - Directory scanning and file discovery
|
|
41
|
+
* - Filtering and sorting operations
|
|
42
|
+
* - Summary computation helpers
|
|
43
|
+
* - Template methods for subclass-specific logic
|
|
44
|
+
*/
|
|
45
|
+
export declare abstract class TrackedDocumentService<TSummary, TRecord extends {
|
|
46
|
+
freshness: FreshnessScore;
|
|
47
|
+
}, TFilters, TSortOptions, TQueryResult extends BaseQueryResult<unknown> = BaseQueryResult<unknown>> {
|
|
48
|
+
/**
|
|
49
|
+
* Base directory containing tracked documents (absolute or relative to repo root)
|
|
50
|
+
*/
|
|
51
|
+
protected readonly baseDir: string;
|
|
52
|
+
/**
|
|
53
|
+
* File pattern to match (e.g., '_overview.md', 'README.md')
|
|
54
|
+
*/
|
|
55
|
+
protected readonly filePattern: string;
|
|
56
|
+
/**
|
|
57
|
+
* Project root path for cross-service references (e.g., cross-linking).
|
|
58
|
+
* When provided, used to construct sibling service instances.
|
|
59
|
+
*/
|
|
60
|
+
protected readonly projectPath: string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* @param baseDir - Directory containing tracked documents
|
|
63
|
+
* @param filePattern - Filename pattern to scan for
|
|
64
|
+
* @param projectPath - Optional project root path for cross-service references
|
|
65
|
+
*/
|
|
66
|
+
constructor(baseDir: string, filePattern: string, projectPath?: string);
|
|
67
|
+
/**
|
|
68
|
+
* List all documents as lightweight summaries.
|
|
69
|
+
* Subclasses must implement parseSummary() to extract summary data.
|
|
70
|
+
*
|
|
71
|
+
* @returns Array of document summaries
|
|
72
|
+
*/
|
|
73
|
+
abstract list(): Promise<TSummary[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Get a single document by its unique identifier.
|
|
76
|
+
* Subclasses must implement document-specific retrieval logic.
|
|
77
|
+
*
|
|
78
|
+
* @param id - Unique identifier (e.g., slug, path)
|
|
79
|
+
* @returns Full document data
|
|
80
|
+
*/
|
|
81
|
+
abstract get(id: string): Promise<unknown>;
|
|
82
|
+
/**
|
|
83
|
+
* Query documents with filtering, sorting, and pagination.
|
|
84
|
+
* Subclasses must implement toRecord() to convert documents to queryable records.
|
|
85
|
+
*
|
|
86
|
+
* @param options - Query options (filters, sort, pagination)
|
|
87
|
+
* @returns Query result with records and summary
|
|
88
|
+
*/
|
|
89
|
+
abstract query(options?: BaseQueryOptions<TFilters, TSortOptions>): Promise<TQueryResult>;
|
|
90
|
+
/**
|
|
91
|
+
* Parse document content into a summary record.
|
|
92
|
+
* Subclasses implement document-specific parsing logic.
|
|
93
|
+
*
|
|
94
|
+
* @param content - Raw file content
|
|
95
|
+
* @param id - Document identifier
|
|
96
|
+
* @returns Parsed summary or null if parsing fails
|
|
97
|
+
*/
|
|
98
|
+
protected abstract parseSummary(content: string, id: string): TSummary | null;
|
|
99
|
+
/**
|
|
100
|
+
* Convert document to a full record with query fields.
|
|
101
|
+
* Subclasses implement document-specific transformation logic.
|
|
102
|
+
*
|
|
103
|
+
* @param filePath - Path to document file
|
|
104
|
+
* @param id - Document identifier
|
|
105
|
+
* @param group - Parent group/category (if applicable)
|
|
106
|
+
* @returns Record with query fields or null if conversion fails
|
|
107
|
+
*/
|
|
108
|
+
protected abstract toRecord(filePath: string, id: string, group: string | null): Promise<TRecord | null>;
|
|
109
|
+
/**
|
|
110
|
+
* Apply filters to a list of records.
|
|
111
|
+
* Uses matchesAllFilters() which subclasses must implement.
|
|
112
|
+
*
|
|
113
|
+
* @param records - Records to filter
|
|
114
|
+
* @param filters - Filter criteria
|
|
115
|
+
* @returns Filtered records
|
|
116
|
+
*/
|
|
117
|
+
protected applyFilters(records: TRecord[], filters: TFilters): TRecord[];
|
|
118
|
+
/**
|
|
119
|
+
* Check if a record matches all filter criteria.
|
|
120
|
+
* Subclasses implement document-specific filter logic.
|
|
121
|
+
*
|
|
122
|
+
* @param record - Record to check
|
|
123
|
+
* @param filters - Filter criteria
|
|
124
|
+
* @returns True if record matches all filters
|
|
125
|
+
*/
|
|
126
|
+
protected abstract matchesAllFilters(record: TRecord, filters: TFilters): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Apply sorting to a list of records.
|
|
129
|
+
* Subclasses implement document-specific sort logic.
|
|
130
|
+
*
|
|
131
|
+
* @param records - Records to sort
|
|
132
|
+
* @param sort - Sort options
|
|
133
|
+
* @returns Sorted records
|
|
134
|
+
*/
|
|
135
|
+
protected abstract applySorting(records: TRecord[], sort: TSortOptions): TRecord[];
|
|
136
|
+
/**
|
|
137
|
+
* Helper: Count records by a field value.
|
|
138
|
+
* Useful for computing summary statistics (e.g., byStatus, byGroup).
|
|
139
|
+
*
|
|
140
|
+
* @param records - Records to count
|
|
141
|
+
* @param getField - Function to extract field value from record
|
|
142
|
+
* @returns Map of field values to counts
|
|
143
|
+
*/
|
|
144
|
+
protected countByField<T extends TRecord>(records: T[], getField: (record: T) => string): Record<string, number>;
|
|
145
|
+
/**
|
|
146
|
+
* Helper: Check if a record is stale based on freshness score.
|
|
147
|
+
* Common logic shared across all tracked document types.
|
|
148
|
+
*
|
|
149
|
+
* @param record - Record with freshness score
|
|
150
|
+
* @returns True if record is stale or critical
|
|
151
|
+
*/
|
|
152
|
+
protected isStale(record: TRecord): boolean;
|
|
153
|
+
/**
|
|
154
|
+
* Helper: Check if a value matches a filter (single or array).
|
|
155
|
+
* Handles both single values and arrays with OR logic.
|
|
156
|
+
*
|
|
157
|
+
* @param value - Value to check
|
|
158
|
+
* @param filter - Filter value (single or array)
|
|
159
|
+
* @returns True if value matches filter
|
|
160
|
+
*/
|
|
161
|
+
protected matchesFilter<T>(value: T, filter: T | T[] | undefined): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Check if a record's status matches the status filter.
|
|
164
|
+
* Uses matchesFilter for single/array value handling.
|
|
165
|
+
*/
|
|
166
|
+
protected matchesStatusFilter(status: string, filter: string | string[] | undefined): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* Build a malformed summary from frontmatter data and error message.
|
|
169
|
+
* Subclasses implement document-specific summary construction.
|
|
170
|
+
*/
|
|
171
|
+
protected abstract buildMalformedSummary(scanned: {
|
|
172
|
+
path: string;
|
|
173
|
+
slug: string;
|
|
174
|
+
}, data: Record<string, unknown>, errorMessage: string): TSummary;
|
|
175
|
+
/**
|
|
176
|
+
* Handle parse errors when building summaries.
|
|
177
|
+
* Provides graceful degradation for ZodError and generic Error types.
|
|
178
|
+
* Returns a malformed summary with error indicator, or null for unknown errors.
|
|
179
|
+
*/
|
|
180
|
+
protected handleParseSummaryError(error: unknown, scanned: {
|
|
181
|
+
path: string;
|
|
182
|
+
slug: string;
|
|
183
|
+
}): Promise<TSummary | null>;
|
|
184
|
+
/**
|
|
185
|
+
* Build records from scanned documents by iterating and calling toRecord.
|
|
186
|
+
* Extracts the common scan→iterate→toRecord pattern from query methods.
|
|
187
|
+
*/
|
|
188
|
+
protected buildRecords(scannedDocs: ScannedBlueprint[]): Promise<TRecord[]>;
|
|
189
|
+
/**
|
|
190
|
+
* Common query pipeline: filter, sort, and paginate records.
|
|
191
|
+
* Subclasses scan and build records, then pass them to this method.
|
|
192
|
+
*/
|
|
193
|
+
protected processQueryPipeline(allRecords: TRecord[], options?: BaseQueryOptions<TFilters, TSortOptions>): {
|
|
194
|
+
records: TRecord[];
|
|
195
|
+
totalFiltered: number;
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=TrackedDocumentService.d.ts.map
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackedDocumentService - Abstract base class for tracked document services
|
|
3
|
+
*
|
|
4
|
+
* This base class provides shared functionality for services that manage
|
|
5
|
+
* tracked documents stored in git (e.g., blueprints, tech debt items).
|
|
6
|
+
*
|
|
7
|
+
* Uses the Template Method pattern:
|
|
8
|
+
* - Base class provides skeleton operations (list, get, query, filter, sort)
|
|
9
|
+
* - Subclasses implement document-specific logic (parseSummary, toRecord)
|
|
10
|
+
*
|
|
11
|
+
* @template TSummary - Lightweight summary type for list views
|
|
12
|
+
* @template TRecord - Extended record type with query/filter fields
|
|
13
|
+
* @template TFilters - Filter criteria specific to the document type
|
|
14
|
+
* @template TSortOptions - Sorting options specific to the document type
|
|
15
|
+
*/
|
|
16
|
+
import matter from 'gray-matter';
|
|
17
|
+
import * as fs from 'node:fs/promises';
|
|
18
|
+
import { ZodError } from 'zod';
|
|
19
|
+
/**
|
|
20
|
+
* Abstract base class for services that manage tracked documents.
|
|
21
|
+
*
|
|
22
|
+
* Provides:
|
|
23
|
+
* - Directory scanning and file discovery
|
|
24
|
+
* - Filtering and sorting operations
|
|
25
|
+
* - Summary computation helpers
|
|
26
|
+
* - Template methods for subclass-specific logic
|
|
27
|
+
*/
|
|
28
|
+
export class TrackedDocumentService {
|
|
29
|
+
/**
|
|
30
|
+
* Base directory containing tracked documents (absolute or relative to repo root)
|
|
31
|
+
*/
|
|
32
|
+
baseDir;
|
|
33
|
+
/**
|
|
34
|
+
* File pattern to match (e.g., '_overview.md', 'README.md')
|
|
35
|
+
*/
|
|
36
|
+
filePattern;
|
|
37
|
+
/**
|
|
38
|
+
* Project root path for cross-service references (e.g., cross-linking).
|
|
39
|
+
* When provided, used to construct sibling service instances.
|
|
40
|
+
*/
|
|
41
|
+
projectPath;
|
|
42
|
+
/**
|
|
43
|
+
* @param baseDir - Directory containing tracked documents
|
|
44
|
+
* @param filePattern - Filename pattern to scan for
|
|
45
|
+
* @param projectPath - Optional project root path for cross-service references
|
|
46
|
+
*/
|
|
47
|
+
constructor(baseDir, filePattern, projectPath) {
|
|
48
|
+
this.baseDir = baseDir;
|
|
49
|
+
this.filePattern = filePattern;
|
|
50
|
+
this.projectPath = projectPath;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Apply filters to a list of records.
|
|
54
|
+
* Uses matchesAllFilters() which subclasses must implement.
|
|
55
|
+
*
|
|
56
|
+
* @param records - Records to filter
|
|
57
|
+
* @param filters - Filter criteria
|
|
58
|
+
* @returns Filtered records
|
|
59
|
+
*/
|
|
60
|
+
applyFilters(records, filters) {
|
|
61
|
+
return records.filter((record) => this.matchesAllFilters(record, filters));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Helper: Count records by a field value.
|
|
65
|
+
* Useful for computing summary statistics (e.g., byStatus, byGroup).
|
|
66
|
+
*
|
|
67
|
+
* @param records - Records to count
|
|
68
|
+
* @param getField - Function to extract field value from record
|
|
69
|
+
* @returns Map of field values to counts
|
|
70
|
+
*/
|
|
71
|
+
countByField(records, getField) {
|
|
72
|
+
const counts = {};
|
|
73
|
+
for (const record of records) {
|
|
74
|
+
const field = getField(record);
|
|
75
|
+
counts[field] = (counts[field] ?? 0) + 1;
|
|
76
|
+
}
|
|
77
|
+
return counts;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Helper: Check if a record is stale based on freshness score.
|
|
81
|
+
* Common logic shared across all tracked document types.
|
|
82
|
+
*
|
|
83
|
+
* @param record - Record with freshness score
|
|
84
|
+
* @returns True if record is stale or critical
|
|
85
|
+
*/
|
|
86
|
+
isStale(record) {
|
|
87
|
+
return record.freshness.status === 'stale' || record.freshness.status === 'critical';
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Helper: Check if a value matches a filter (single or array).
|
|
91
|
+
* Handles both single values and arrays with OR logic.
|
|
92
|
+
*
|
|
93
|
+
* @param value - Value to check
|
|
94
|
+
* @param filter - Filter value (single or array)
|
|
95
|
+
* @returns True if value matches filter
|
|
96
|
+
*/
|
|
97
|
+
matchesFilter(value, filter) {
|
|
98
|
+
if (filter === undefined)
|
|
99
|
+
return true;
|
|
100
|
+
const filters = Array.isArray(filter) ? filter : [filter];
|
|
101
|
+
return filters.includes(value);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if a record's status matches the status filter.
|
|
105
|
+
* Uses matchesFilter for single/array value handling.
|
|
106
|
+
*/
|
|
107
|
+
matchesStatusFilter(status, filter) {
|
|
108
|
+
return this.matchesFilter(status, filter);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Handle parse errors when building summaries.
|
|
112
|
+
* Provides graceful degradation for ZodError and generic Error types.
|
|
113
|
+
* Returns a malformed summary with error indicator, or null for unknown errors.
|
|
114
|
+
*/
|
|
115
|
+
async handleParseSummaryError(error, scanned) {
|
|
116
|
+
if (error instanceof ZodError) {
|
|
117
|
+
const content = await fs.readFile(scanned.path, 'utf-8');
|
|
118
|
+
const { data } = matter(content);
|
|
119
|
+
const errorMessage = `Invalid frontmatter:\n${error.issues.map((e) => ` - ${e.path.join('.')}: ${e.message}`).join('\n')}`;
|
|
120
|
+
return this.buildMalformedSummary(scanned, data, errorMessage);
|
|
121
|
+
}
|
|
122
|
+
if (error instanceof Error) {
|
|
123
|
+
const content = await fs.readFile(scanned.path, 'utf-8');
|
|
124
|
+
const { data } = matter(content);
|
|
125
|
+
return this.buildMalformedSummary(scanned, data, error.message);
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Build records from scanned documents by iterating and calling toRecord.
|
|
131
|
+
* Extracts the common scan→iterate→toRecord pattern from query methods.
|
|
132
|
+
*/
|
|
133
|
+
async buildRecords(scannedDocs) {
|
|
134
|
+
const records = [];
|
|
135
|
+
for (const scanned of scannedDocs) {
|
|
136
|
+
const record = await this.toRecord(scanned.path, scanned.slug, scanned.group);
|
|
137
|
+
if (record) {
|
|
138
|
+
records.push(record);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return records;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Common query pipeline: filter, sort, and paginate records.
|
|
145
|
+
* Subclasses scan and build records, then pass them to this method.
|
|
146
|
+
*/
|
|
147
|
+
processQueryPipeline(allRecords, options) {
|
|
148
|
+
let filtered = options?.filters ? this.applyFilters(allRecords, options.filters) : allRecords;
|
|
149
|
+
if (options?.sort) {
|
|
150
|
+
filtered = this.applySorting(filtered, options.sort);
|
|
151
|
+
}
|
|
152
|
+
const totalFiltered = filtered.length;
|
|
153
|
+
if (options?.offset) {
|
|
154
|
+
filtered = filtered.slice(options.offset);
|
|
155
|
+
}
|
|
156
|
+
if (options?.limit) {
|
|
157
|
+
filtered = filtered.slice(0, options.limit);
|
|
158
|
+
}
|
|
159
|
+
return { records: filtered, totalFiltered };
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=TrackedDocumentService.js.map
|