@planu/cli 1.10.0 → 1.12.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/dist/config/license-plans.json +32 -2
- package/dist/engine/api-compat/compatibility-checker.d.ts +4 -0
- package/dist/engine/api-compat/compatibility-checker.d.ts.map +1 -0
- package/dist/engine/api-compat/compatibility-checker.js +118 -0
- package/dist/engine/api-compat/compatibility-checker.js.map +1 -0
- package/dist/engine/checkpoint/checkpoint-manager.d.ts +22 -0
- package/dist/engine/checkpoint/checkpoint-manager.d.ts.map +1 -0
- package/dist/engine/checkpoint/checkpoint-manager.js +76 -0
- package/dist/engine/checkpoint/checkpoint-manager.js.map +1 -0
- package/dist/engine/checkpoint/policy-engine.d.ts +10 -0
- package/dist/engine/checkpoint/policy-engine.d.ts.map +1 -0
- package/dist/engine/checkpoint/policy-engine.js +87 -0
- package/dist/engine/checkpoint/policy-engine.js.map +1 -0
- package/dist/engine/compliance/auto-remediator.d.ts +9 -0
- package/dist/engine/compliance/auto-remediator.d.ts.map +1 -0
- package/dist/engine/compliance/auto-remediator.js +118 -0
- package/dist/engine/compliance/auto-remediator.js.map +1 -0
- package/dist/engine/compliance/evidence-builder.d.ts +19 -0
- package/dist/engine/compliance/evidence-builder.d.ts.map +1 -0
- package/dist/engine/compliance/evidence-builder.js +36 -0
- package/dist/engine/compliance/evidence-builder.js.map +1 -0
- package/dist/engine/compliance/framework-catalog.d.ts +15 -0
- package/dist/engine/compliance/framework-catalog.d.ts.map +1 -0
- package/dist/engine/compliance/framework-catalog.js +134 -0
- package/dist/engine/compliance/framework-catalog.js.map +1 -0
- package/dist/engine/compliance/gap-analyzer.d.ts +11 -0
- package/dist/engine/compliance/gap-analyzer.d.ts.map +1 -0
- package/dist/engine/compliance/gap-analyzer.js +39 -0
- package/dist/engine/compliance/gap-analyzer.js.map +1 -0
- package/dist/engine/context-profile/profile-catalog.d.ts +5 -0
- package/dist/engine/context-profile/profile-catalog.d.ts.map +1 -0
- package/dist/engine/context-profile/profile-catalog.js +145 -0
- package/dist/engine/context-profile/profile-catalog.js.map +1 -0
- package/dist/engine/critical-path/path-analyzer.d.ts +3 -0
- package/dist/engine/critical-path/path-analyzer.d.ts.map +1 -0
- package/dist/engine/critical-path/path-analyzer.js +145 -0
- package/dist/engine/critical-path/path-analyzer.js.map +1 -0
- package/dist/engine/distribution/cost-estimator.d.ts +8 -0
- package/dist/engine/distribution/cost-estimator.d.ts.map +1 -0
- package/dist/engine/distribution/cost-estimator.js +113 -0
- package/dist/engine/distribution/cost-estimator.js.map +1 -0
- package/dist/engine/distribution/diagram-generator.d.ts +12 -0
- package/dist/engine/distribution/diagram-generator.d.ts.map +1 -0
- package/dist/engine/distribution/diagram-generator.js +59 -0
- package/dist/engine/distribution/diagram-generator.js.map +1 -0
- package/dist/engine/distribution/readiness-analyzer.d.ts +4 -0
- package/dist/engine/distribution/readiness-analyzer.d.ts.map +1 -0
- package/dist/engine/distribution/readiness-analyzer.js +61 -0
- package/dist/engine/distribution/readiness-analyzer.js.map +1 -0
- package/dist/engine/distribution/runbook-generator.d.ts +7 -0
- package/dist/engine/distribution/runbook-generator.d.ts.map +1 -0
- package/dist/engine/distribution/runbook-generator.js +42 -0
- package/dist/engine/distribution/runbook-generator.js.map +1 -0
- package/dist/engine/drift/violation-resolver.d.ts +9 -0
- package/dist/engine/drift/violation-resolver.d.ts.map +1 -0
- package/dist/engine/drift/violation-resolver.js +128 -0
- package/dist/engine/drift/violation-resolver.js.map +1 -0
- package/dist/engine/ears/criterion-scorer.d.ts +7 -0
- package/dist/engine/ears/criterion-scorer.d.ts.map +1 -0
- package/dist/engine/ears/criterion-scorer.js +87 -0
- package/dist/engine/ears/criterion-scorer.js.map +1 -0
- package/dist/engine/ears/pattern-matcher.d.ts +5 -0
- package/dist/engine/ears/pattern-matcher.d.ts.map +1 -0
- package/dist/engine/ears/pattern-matcher.js +48 -0
- package/dist/engine/ears/pattern-matcher.js.map +1 -0
- package/dist/engine/ears/rewriter.d.ts +7 -0
- package/dist/engine/ears/rewriter.d.ts.map +1 -0
- package/dist/engine/ears/rewriter.js +45 -0
- package/dist/engine/ears/rewriter.js.map +1 -0
- package/dist/engine/ears/spec-linter.d.ts +7 -0
- package/dist/engine/ears/spec-linter.d.ts.map +1 -0
- package/dist/engine/ears/spec-linter.js +127 -0
- package/dist/engine/ears/spec-linter.js.map +1 -0
- package/dist/engine/health/auto-fixer.d.ts +7 -0
- package/dist/engine/health/auto-fixer.d.ts.map +1 -0
- package/dist/engine/health/auto-fixer.js +130 -0
- package/dist/engine/health/auto-fixer.js.map +1 -0
- package/dist/engine/mcp-catalog/catalog-advisor.d.ts +3 -0
- package/dist/engine/mcp-catalog/catalog-advisor.d.ts.map +1 -0
- package/dist/engine/mcp-catalog/catalog-advisor.js +180 -0
- package/dist/engine/mcp-catalog/catalog-advisor.js.map +1 -0
- package/dist/engine/mcp-hub/adapter-registry.d.ts +23 -0
- package/dist/engine/mcp-hub/adapter-registry.d.ts.map +1 -0
- package/dist/engine/mcp-hub/adapter-registry.js +19 -0
- package/dist/engine/mcp-hub/adapter-registry.js.map +1 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.d.ts +4 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.d.ts.map +1 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.js +44 -0
- package/dist/engine/mcp-hub/adapters/github-adapter.js.map +1 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.d.ts +4 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.d.ts.map +1 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.js +41 -0
- package/dist/engine/mcp-hub/adapters/supabase-adapter.js.map +1 -0
- package/dist/engine/mcp-hub/event-router.d.ts +19 -0
- package/dist/engine/mcp-hub/event-router.d.ts.map +1 -0
- package/dist/engine/mcp-hub/event-router.js +47 -0
- package/dist/engine/mcp-hub/event-router.js.map +1 -0
- package/dist/engine/productivity/calibration-engine.d.ts +17 -0
- package/dist/engine/productivity/calibration-engine.d.ts.map +1 -0
- package/dist/engine/productivity/calibration-engine.js +49 -0
- package/dist/engine/productivity/calibration-engine.js.map +1 -0
- package/dist/engine/productivity/time-tracker.d.ts +6 -0
- package/dist/engine/productivity/time-tracker.d.ts.map +1 -0
- package/dist/engine/productivity/time-tracker.js +28 -0
- package/dist/engine/productivity/time-tracker.js.map +1 -0
- package/dist/engine/productivity/vibe-tax-calculator.d.ts +14 -0
- package/dist/engine/productivity/vibe-tax-calculator.d.ts.map +1 -0
- package/dist/engine/productivity/vibe-tax-calculator.js +63 -0
- package/dist/engine/productivity/vibe-tax-calculator.js.map +1 -0
- package/dist/engine/quality-gates/gate-catalog.d.ts +6 -0
- package/dist/engine/quality-gates/gate-catalog.d.ts.map +1 -0
- package/dist/engine/quality-gates/gate-catalog.js +351 -0
- package/dist/engine/quality-gates/gate-catalog.js.map +1 -0
- package/dist/engine/quality-gates/gate-evaluator.d.ts +3 -0
- package/dist/engine/quality-gates/gate-evaluator.d.ts.map +1 -0
- package/dist/engine/quality-gates/gate-evaluator.js +25 -0
- package/dist/engine/quality-gates/gate-evaluator.js.map +1 -0
- package/dist/engine/quality-gates/gate-injector.d.ts +20 -0
- package/dist/engine/quality-gates/gate-injector.d.ts.map +1 -0
- package/dist/engine/quality-gates/gate-injector.js +75 -0
- package/dist/engine/quality-gates/gate-injector.js.map +1 -0
- package/dist/engine/similar-problems/similarity-finder.d.ts +3 -0
- package/dist/engine/similar-problems/similarity-finder.d.ts.map +1 -0
- package/dist/engine/similar-problems/similarity-finder.js +144 -0
- package/dist/engine/similar-problems/similarity-finder.js.map +1 -0
- package/dist/engine/sync/asana-puller.d.ts +9 -0
- package/dist/engine/sync/asana-puller.d.ts.map +1 -0
- package/dist/engine/sync/asana-puller.js +91 -0
- package/dist/engine/sync/asana-puller.js.map +1 -0
- package/dist/engine/sync/conflict-resolver.d.ts +17 -0
- package/dist/engine/sync/conflict-resolver.d.ts.map +1 -0
- package/dist/engine/sync/conflict-resolver.js +58 -0
- package/dist/engine/sync/conflict-resolver.js.map +1 -0
- package/dist/engine/sync/monday-puller.d.ts +9 -0
- package/dist/engine/sync/monday-puller.d.ts.map +1 -0
- package/dist/engine/sync/monday-puller.js +110 -0
- package/dist/engine/sync/monday-puller.js.map +1 -0
- package/dist/engine/sync/notion-puller.d.ts +15 -0
- package/dist/engine/sync/notion-puller.d.ts.map +1 -0
- package/dist/engine/sync/notion-puller.js +101 -0
- package/dist/engine/sync/notion-puller.js.map +1 -0
- package/dist/engine/verifier/code-scanner.d.ts +8 -0
- package/dist/engine/verifier/code-scanner.d.ts.map +1 -0
- package/dist/engine/verifier/code-scanner.js +73 -0
- package/dist/engine/verifier/code-scanner.js.map +1 -0
- package/dist/engine/verifier/compliance-scorer.d.ts +17 -0
- package/dist/engine/verifier/compliance-scorer.d.ts.map +1 -0
- package/dist/engine/verifier/compliance-scorer.js +131 -0
- package/dist/engine/verifier/compliance-scorer.js.map +1 -0
- package/dist/engine/verifier/criterion-matcher.d.ts +15 -0
- package/dist/engine/verifier/criterion-matcher.d.ts.map +1 -0
- package/dist/engine/verifier/criterion-matcher.js +210 -0
- package/dist/engine/verifier/criterion-matcher.js.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/compliance-audit-store.d.ts +12 -0
- package/dist/storage/compliance-audit-store.d.ts.map +1 -0
- package/dist/storage/compliance-audit-store.js +40 -0
- package/dist/storage/compliance-audit-store.js.map +1 -0
- package/dist/storage/compliance-score-store.d.ts +16 -0
- package/dist/storage/compliance-score-store.d.ts.map +1 -0
- package/dist/storage/compliance-score-store.js +30 -0
- package/dist/storage/compliance-score-store.js.map +1 -0
- package/dist/storage/context-profile-store.d.ts +14 -0
- package/dist/storage/context-profile-store.d.ts.map +1 -0
- package/dist/storage/context-profile-store.js +34 -0
- package/dist/storage/context-profile-store.js.map +1 -0
- package/dist/storage/mcp-hub-store.d.ts +9 -0
- package/dist/storage/mcp-hub-store.d.ts.map +1 -0
- package/dist/storage/mcp-hub-store.js +28 -0
- package/dist/storage/mcp-hub-store.js.map +1 -0
- package/dist/storage/time-tracking-store.d.ts +6 -0
- package/dist/storage/time-tracking-store.d.ts.map +1 -0
- package/dist/storage/time-tracking-store.js +34 -0
- package/dist/storage/time-tracking-store.js.map +1 -0
- package/dist/storage/workflow-checkpoint-store.d.ts +16 -0
- package/dist/storage/workflow-checkpoint-store.d.ts.map +1 -0
- package/dist/storage/workflow-checkpoint-store.js +71 -0
- package/dist/storage/workflow-checkpoint-store.js.map +1 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.js +32 -0
- package/dist/tools/checkpoint/approve-checkpoint-handler.js.map +1 -0
- package/dist/tools/checkpoint/configure-policy-handler.d.ts +3 -0
- package/dist/tools/checkpoint/configure-policy-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/configure-policy-handler.js +60 -0
- package/dist/tools/checkpoint/configure-policy-handler.js.map +1 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.d.ts +3 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.js +25 -0
- package/dist/tools/checkpoint/list-checkpoints-handler.js.map +1 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.js +32 -0
- package/dist/tools/checkpoint/reject-checkpoint-handler.js.map +1 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.d.ts +3 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.d.ts.map +1 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.js +44 -0
- package/dist/tools/checkpoint/require-checkpoint-handler.js.map +1 -0
- package/dist/tools/compliance-gap-handler.d.ts +5 -0
- package/dist/tools/compliance-gap-handler.d.ts.map +1 -0
- package/dist/tools/compliance-gap-handler.js +64 -0
- package/dist/tools/compliance-gap-handler.js.map +1 -0
- package/dist/tools/distribution-readiness-handler.d.ts +3 -0
- package/dist/tools/distribution-readiness-handler.d.ts.map +1 -0
- package/dist/tools/distribution-readiness-handler.js +24 -0
- package/dist/tools/distribution-readiness-handler.js.map +1 -0
- package/dist/tools/generate-cost-estimate-handler.d.ts +3 -0
- package/dist/tools/generate-cost-estimate-handler.d.ts.map +1 -0
- package/dist/tools/generate-cost-estimate-handler.js +29 -0
- package/dist/tools/generate-cost-estimate-handler.js.map +1 -0
- package/dist/tools/generate-deployment-diagram-handler.d.ts +3 -0
- package/dist/tools/generate-deployment-diagram-handler.d.ts.map +1 -0
- package/dist/tools/generate-deployment-diagram-handler.js +26 -0
- package/dist/tools/generate-deployment-diagram-handler.js.map +1 -0
- package/dist/tools/generate-runbook-handler.d.ts +3 -0
- package/dist/tools/generate-runbook-handler.d.ts.map +1 -0
- package/dist/tools/generate-runbook-handler.js +18 -0
- package/dist/tools/generate-runbook-handler.js.map +1 -0
- package/dist/tools/inject-quality-gates-handler.d.ts +7 -0
- package/dist/tools/inject-quality-gates-handler.d.ts.map +1 -0
- package/dist/tools/inject-quality-gates-handler.js +59 -0
- package/dist/tools/inject-quality-gates-handler.js.map +1 -0
- package/dist/tools/mcp-hub-handler.d.ts +7 -0
- package/dist/tools/mcp-hub-handler.d.ts.map +1 -0
- package/dist/tools/mcp-hub-handler.js +73 -0
- package/dist/tools/mcp-hub-handler.js.map +1 -0
- package/dist/tools/productivity-report-handler.d.ts +4 -0
- package/dist/tools/productivity-report-handler.d.ts.map +1 -0
- package/dist/tools/productivity-report-handler.js +98 -0
- package/dist/tools/productivity-report-handler.js.map +1 -0
- package/dist/tools/pull-sync-handler.d.ts +25 -0
- package/dist/tools/pull-sync-handler.d.ts.map +1 -0
- package/dist/tools/pull-sync-handler.js +161 -0
- package/dist/tools/pull-sync-handler.js.map +1 -0
- package/dist/tools/register-auto-remediation.d.ts +3 -0
- package/dist/tools/register-auto-remediation.d.ts.map +1 -0
- package/dist/tools/register-auto-remediation.js +174 -0
- package/dist/tools/register-auto-remediation.js.map +1 -0
- package/dist/tools/register-checkpoints.d.ts +3 -0
- package/dist/tools/register-checkpoints.d.ts.map +1 -0
- package/dist/tools/register-checkpoints.js +134 -0
- package/dist/tools/register-checkpoints.js.map +1 -0
- package/dist/tools/register-context-profile.d.ts +3 -0
- package/dist/tools/register-context-profile.d.ts.map +1 -0
- package/dist/tools/register-context-profile.js +106 -0
- package/dist/tools/register-context-profile.js.map +1 -0
- package/dist/tools/register-distribution.d.ts +3 -0
- package/dist/tools/register-distribution.d.ts.map +1 -0
- package/dist/tools/register-distribution.js +103 -0
- package/dist/tools/register-distribution.js.map +1 -0
- package/dist/tools/register-ears.d.ts +3 -0
- package/dist/tools/register-ears.d.ts.map +1 -0
- package/dist/tools/register-ears.js +148 -0
- package/dist/tools/register-ears.js.map +1 -0
- package/dist/tools/register-enterprise-compliance.d.ts +3 -0
- package/dist/tools/register-enterprise-compliance.d.ts.map +1 -0
- package/dist/tools/register-enterprise-compliance.js +30 -0
- package/dist/tools/register-enterprise-compliance.js.map +1 -0
- package/dist/tools/register-mcp-hub.d.ts +3 -0
- package/dist/tools/register-mcp-hub.d.ts.map +1 -0
- package/dist/tools/register-mcp-hub.js +47 -0
- package/dist/tools/register-mcp-hub.js.map +1 -0
- package/dist/tools/register-productivity.d.ts +3 -0
- package/dist/tools/register-productivity.d.ts.map +1 -0
- package/dist/tools/register-productivity.js +25 -0
- package/dist/tools/register-productivity.js.map +1 -0
- package/dist/tools/register-pull-sync.d.ts +3 -0
- package/dist/tools/register-pull-sync.d.ts.map +1 -0
- package/dist/tools/register-pull-sync.js +71 -0
- package/dist/tools/register-pull-sync.js.map +1 -0
- package/dist/tools/register-quality-gates.d.ts +3 -0
- package/dist/tools/register-quality-gates.d.ts.map +1 -0
- package/dist/tools/register-quality-gates.js +47 -0
- package/dist/tools/register-quality-gates.js.map +1 -0
- package/dist/tools/register-spec405-tools.d.ts +7 -0
- package/dist/tools/register-spec405-tools.d.ts.map +1 -0
- package/dist/tools/register-spec405-tools.js +194 -0
- package/dist/tools/register-spec405-tools.js.map +1 -0
- package/dist/tools/register-verifier.d.ts +3 -0
- package/dist/tools/register-verifier.d.ts.map +1 -0
- package/dist/tools/register-verifier.js +141 -0
- package/dist/tools/register-verifier.js.map +1 -0
- package/dist/types/analysis.d.ts +128 -0
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/context-profile.d.ts +22 -0
- package/dist/types/context-profile.d.ts.map +1 -0
- package/dist/types/context-profile.js +2 -0
- package/dist/types/context-profile.js.map +1 -0
- package/dist/types/docs.d.ts +43 -0
- package/dist/types/docs.d.ts.map +1 -1
- package/dist/types/ears.d.ts +34 -0
- package/dist/types/ears.d.ts.map +1 -0
- package/dist/types/ears.js +3 -0
- package/dist/types/ears.js.map +1 -0
- package/dist/types/env.d.ts +23 -0
- package/dist/types/env.d.ts.map +1 -1
- package/dist/types/estimation.d.ts +30 -0
- package/dist/types/estimation.d.ts.map +1 -1
- package/dist/types/health.d.ts +40 -0
- package/dist/types/health.d.ts.map +1 -0
- package/dist/types/health.js +3 -0
- package/dist/types/health.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/notion-asana-monday.d.ts +38 -0
- package/dist/types/notion-asana-monday.d.ts.map +1 -1
- package/dist/types/orchestration/index.d.ts +1 -0
- package/dist/types/orchestration/index.d.ts.map +1 -1
- package/dist/types/orchestration/mcp-hub.d.ts +29 -0
- package/dist/types/orchestration/mcp-hub.d.ts.map +1 -0
- package/dist/types/orchestration/mcp-hub.js +3 -0
- package/dist/types/orchestration/mcp-hub.js.map +1 -0
- package/dist/types/orchestration.d.ts +1 -1
- package/dist/types/orchestration.d.ts.map +1 -1
- package/dist/types/workflow-checkpoint.d.ts +66 -0
- package/dist/types/workflow-checkpoint.d.ts.map +1 -0
- package/dist/types/workflow-checkpoint.js +4 -0
- package/dist/types/workflow-checkpoint.js.map +1 -0
- package/package.json +1 -1
- package/src/config/license-plans.json +32 -2
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EnterpriseComplianceFramework } from '../../types/index.js';
|
|
2
|
+
/** Local alias for the enterprise compliance framework union type. */
|
|
3
|
+
export type ComplianceFramework = EnterpriseComplianceFramework;
|
|
4
|
+
export interface ComplianceControl {
|
|
5
|
+
id: string;
|
|
6
|
+
framework: ComplianceFramework;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
specPatterns: string[];
|
|
10
|
+
requiredCriteria: string[];
|
|
11
|
+
}
|
|
12
|
+
export declare const COMPLIANCE_CATALOG: ComplianceControl[];
|
|
13
|
+
export declare function getControlsForFramework(framework: ComplianceFramework): ComplianceControl[];
|
|
14
|
+
export declare function findMatchingControls(framework: ComplianceFramework, specTitle: string, specDescription: string): ComplianceControl[];
|
|
15
|
+
//# sourceMappingURL=framework-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-catalog.d.ts","sourceRoot":"","sources":["../../../src/engine/compliance/framework-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAE1E,sEAAsE;AAEtE,MAAM,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AAGhE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,mBAAmB,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,kBAAkB,EAAE,iBAAiB,EA6HjD,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,GAAG,iBAAiB,EAAE,CAE3F;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,mBAAmB,EAC9B,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,iBAAiB,EAAE,CAKrB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// Planu — Compliance framework catalog (SPEC-402)
|
|
2
|
+
export const COMPLIANCE_CATALOG = [
|
|
3
|
+
// SOC2 Type II controls
|
|
4
|
+
{
|
|
5
|
+
id: 'SOC2-CC6.1',
|
|
6
|
+
framework: 'soc2-type2',
|
|
7
|
+
name: 'Logical Access Controls',
|
|
8
|
+
description: 'The entity implements logical access security software, infrastructure, and architectures',
|
|
9
|
+
specPatterns: ['auth', 'login', 'access control', 'rbac', 'permission', 'role'],
|
|
10
|
+
requiredCriteria: [
|
|
11
|
+
'Role-based access control implemented',
|
|
12
|
+
'Principle of least privilege enforced',
|
|
13
|
+
'Access logs maintained',
|
|
14
|
+
],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: 'SOC2-CC6.2',
|
|
18
|
+
framework: 'soc2-type2',
|
|
19
|
+
name: 'User Registration & Authorization',
|
|
20
|
+
description: 'Prior to issuing system credentials, entity registers authorized users',
|
|
21
|
+
specPatterns: ['user registration', 'signup', 'onboarding', 'invite'],
|
|
22
|
+
requiredCriteria: [
|
|
23
|
+
'Email verification required',
|
|
24
|
+
'Account approval workflow defined',
|
|
25
|
+
'Deactivation process documented',
|
|
26
|
+
],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'SOC2-CC6.6',
|
|
30
|
+
framework: 'soc2-type2',
|
|
31
|
+
name: 'Logical Access Restrictions',
|
|
32
|
+
description: 'The entity implements controls to prevent or detect unauthorized access',
|
|
33
|
+
specPatterns: ['authentication', 'mfa', 'multi-factor', 'password', 'session'],
|
|
34
|
+
requiredCriteria: [
|
|
35
|
+
'MFA available for all users',
|
|
36
|
+
'Session timeout configured',
|
|
37
|
+
'Password complexity requirements enforced',
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'SOC2-CC7.1',
|
|
42
|
+
framework: 'soc2-type2',
|
|
43
|
+
name: 'System Monitoring',
|
|
44
|
+
description: 'The entity uses detection and monitoring procedures',
|
|
45
|
+
specPatterns: ['monitoring', 'logging', 'alerting', 'observability', 'metrics'],
|
|
46
|
+
requiredCriteria: [
|
|
47
|
+
'All system events logged',
|
|
48
|
+
'Alerting configured for anomalies',
|
|
49
|
+
'Log retention ≥90 days',
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'SOC2-CC8.1',
|
|
54
|
+
framework: 'soc2-type2',
|
|
55
|
+
name: 'Change Management',
|
|
56
|
+
description: 'The entity authorizes, designs, develops or acquires system changes',
|
|
57
|
+
specPatterns: ['deployment', 'release', 'change', 'migration', 'upgrade'],
|
|
58
|
+
requiredCriteria: [
|
|
59
|
+
'Change reviewed and approved before deployment',
|
|
60
|
+
'Rollback plan documented',
|
|
61
|
+
'Testing required before production',
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
// GDPR controls
|
|
65
|
+
{
|
|
66
|
+
id: 'GDPR-Art5',
|
|
67
|
+
framework: 'gdpr',
|
|
68
|
+
name: 'Data Processing Principles',
|
|
69
|
+
description: 'Personal data shall be processed lawfully, fairly and transparently',
|
|
70
|
+
specPatterns: ['user data', 'personal data', 'pii', 'privacy', 'profile'],
|
|
71
|
+
requiredCriteria: [
|
|
72
|
+
'Legal basis for data processing documented',
|
|
73
|
+
'Data minimization applied',
|
|
74
|
+
'Retention period defined',
|
|
75
|
+
],
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
id: 'GDPR-Art17',
|
|
79
|
+
framework: 'gdpr',
|
|
80
|
+
name: 'Right to Erasure',
|
|
81
|
+
description: 'Data subjects have the right to obtain erasure of personal data',
|
|
82
|
+
specPatterns: ['delete account', 'data deletion', 'erasure', 'forget me', 'gdpr'],
|
|
83
|
+
requiredCriteria: [
|
|
84
|
+
'Account deletion removes all PII',
|
|
85
|
+
'Deletion confirmed within 30 days',
|
|
86
|
+
'Cascading deletion across all data stores',
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'GDPR-Art32',
|
|
91
|
+
framework: 'gdpr',
|
|
92
|
+
name: 'Security of Processing',
|
|
93
|
+
description: 'Appropriate technical and organisational measures to ensure data security',
|
|
94
|
+
specPatterns: ['encryption', 'security', 'data protection'],
|
|
95
|
+
requiredCriteria: [
|
|
96
|
+
'PII encrypted at rest',
|
|
97
|
+
'PII encrypted in transit (TLS 1.2+)',
|
|
98
|
+
'Access to PII logged and audited',
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
// HIPAA controls
|
|
102
|
+
{
|
|
103
|
+
id: 'HIPAA-164.312a',
|
|
104
|
+
framework: 'hipaa',
|
|
105
|
+
name: 'Access Control',
|
|
106
|
+
description: 'Implement technical policies and procedures for accessing ePHI',
|
|
107
|
+
specPatterns: ['patient', 'health', 'phi', 'medical', 'clinical', 'hipaa'],
|
|
108
|
+
requiredCriteria: [
|
|
109
|
+
'Unique user ID required',
|
|
110
|
+
'Automatic logoff after inactivity',
|
|
111
|
+
'PHI access logged with user ID and timestamp',
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'HIPAA-164.312b',
|
|
116
|
+
framework: 'hipaa',
|
|
117
|
+
name: 'Audit Controls',
|
|
118
|
+
description: 'Implement hardware, software, and procedural mechanisms to record access to ePHI',
|
|
119
|
+
specPatterns: ['audit', 'logging', 'access log', 'hipaa'],
|
|
120
|
+
requiredCriteria: [
|
|
121
|
+
'All PHI access events recorded',
|
|
122
|
+
'Audit logs tamper-evident',
|
|
123
|
+
'Log retention ≥6 years',
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
export function getControlsForFramework(framework) {
|
|
128
|
+
return COMPLIANCE_CATALOG.filter((c) => c.framework === framework);
|
|
129
|
+
}
|
|
130
|
+
export function findMatchingControls(framework, specTitle, specDescription) {
|
|
131
|
+
const text = (specTitle + ' ' + specDescription).toLowerCase();
|
|
132
|
+
return COMPLIANCE_CATALOG.filter((c) => c.framework === framework).filter((c) => c.specPatterns.some((p) => text.includes(p)));
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=framework-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"framework-catalog.js","sourceRoot":"","sources":["../../../src/engine/compliance/framework-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ComplianceGapResult } from '../../types/index.js';
|
|
2
|
+
import { type ComplianceFramework } from './framework-catalog.js';
|
|
3
|
+
interface SpecInput {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
status: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function analyzeComplianceGaps(framework: ComplianceFramework, specs: SpecInput[]): ComplianceGapResult;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=gap-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gap-analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/compliance/gap-analyzer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAmB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,wBAAwB,CAAC;AAGhC,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,SAAS,EAAE,GACjB,mBAAmB,CAyCrB"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Planu — Compliance gap analyzer (SPEC-402)
|
|
2
|
+
import { getControlsForFramework, findMatchingControls, } from './framework-catalog.js';
|
|
3
|
+
export function analyzeComplianceGaps(framework, specs) {
|
|
4
|
+
const controls = getControlsForFramework(framework);
|
|
5
|
+
const coverageMap = [];
|
|
6
|
+
for (const control of controls) {
|
|
7
|
+
const matchingSpecs = specs.filter((s) => {
|
|
8
|
+
const matches = findMatchingControls(framework, s.title, s.description ?? '');
|
|
9
|
+
return matches.some((m) => m.id === control.id);
|
|
10
|
+
});
|
|
11
|
+
const status = matchingSpecs.length === 0
|
|
12
|
+
? 'missing'
|
|
13
|
+
: matchingSpecs.some((s) => s.status === 'done')
|
|
14
|
+
? 'passing'
|
|
15
|
+
: 'partial';
|
|
16
|
+
coverageMap.push({
|
|
17
|
+
controlId: control.id,
|
|
18
|
+
controlName: control.name,
|
|
19
|
+
status,
|
|
20
|
+
coveringSpecIds: matchingSpecs.map((s) => s.id),
|
|
21
|
+
requiredCriteria: control.requiredCriteria,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const passing = coverageMap.filter((c) => c.status === 'passing').length;
|
|
25
|
+
const score = controls.length === 0 ? 100 : Math.round((passing / controls.length) * 100);
|
|
26
|
+
return {
|
|
27
|
+
framework,
|
|
28
|
+
score,
|
|
29
|
+
totalControls: controls.length,
|
|
30
|
+
passing,
|
|
31
|
+
partial: coverageMap.filter((c) => c.status === 'partial').length,
|
|
32
|
+
missing: coverageMap.filter((c) => c.status === 'missing').length,
|
|
33
|
+
coverage: coverageMap,
|
|
34
|
+
recommendations: coverageMap
|
|
35
|
+
.filter((c) => c.status === 'missing')
|
|
36
|
+
.map((c) => `Create spec addressing: ${c.controlName} (${c.controlId})`),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=gap-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gap-analyzer.js","sourceRoot":"","sources":["../../../src/engine/compliance/gap-analyzer.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAG7C,OAAO,EAEL,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAUhC,MAAM,UAAU,qBAAqB,CACnC,SAA8B,EAC9B,KAAkB;IAElB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,WAAW,GAAsB,EAAE,CAAC;IAE1C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACvC,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YAC9E,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GACV,aAAa,CAAC,MAAM,KAAK,CAAC;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;gBAC9C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,SAAS,CAAC;QAElB,WAAW,CAAC,IAAI,CAAC;YACf,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,MAAM;YACN,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;IAE1F,OAAO;QACL,SAAS;QACT,KAAK;QACL,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,OAAO;QACP,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACjE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACjE,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,WAAW;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,2BAA2B,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC;KAC3E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ContextProfile, WorkPhase } from '../../types/context-profile.js';
|
|
2
|
+
export declare const PROFILE_CATALOG: Record<WorkPhase, ContextProfile>;
|
|
3
|
+
export declare function getProfile(phase: WorkPhase): ContextProfile;
|
|
4
|
+
export declare function getAllProfiles(): ContextProfile[];
|
|
5
|
+
//# sourceMappingURL=profile-catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-catalog.d.ts","sourceRoot":"","sources":["../../../src/engine/context-profile/profile-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEhF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAyI7D,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,cAAc,CAE3D;AAED,wBAAgB,cAAc,IAAI,cAAc,EAAE,CAEjD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
export const PROFILE_CATALOG = {
|
|
2
|
+
brainstorm: {
|
|
3
|
+
phase: 'brainstorm',
|
|
4
|
+
name: 'Brainstorm Mode',
|
|
5
|
+
description: 'Explore ideas, capture requirements, define scope',
|
|
6
|
+
focusTools: [
|
|
7
|
+
'capture_idea',
|
|
8
|
+
'clarify_requirements',
|
|
9
|
+
'elicit_requirements',
|
|
10
|
+
'suggest_stack',
|
|
11
|
+
'create_spec',
|
|
12
|
+
'list_backlog',
|
|
13
|
+
'promote_idea',
|
|
14
|
+
'discard_idea',
|
|
15
|
+
'search_suggestions',
|
|
16
|
+
'suggest_criteria',
|
|
17
|
+
],
|
|
18
|
+
avoidTools: ['validate', 'lock_spec', 'approve_spec', 'create_release', 'generate_changelog'],
|
|
19
|
+
tips: [
|
|
20
|
+
'Use capture_idea for rough thoughts before formalizing',
|
|
21
|
+
'Use clarify_requirements to interview stakeholders',
|
|
22
|
+
'Use elicit_requirements for structured requirement gathering',
|
|
23
|
+
'Use create_spec only when ready to commit to a feature',
|
|
24
|
+
],
|
|
25
|
+
estimatedTokensSaved: 85,
|
|
26
|
+
},
|
|
27
|
+
plan: {
|
|
28
|
+
phase: 'plan',
|
|
29
|
+
name: 'Planning Mode',
|
|
30
|
+
description: 'Design specs, estimate effort, check readiness',
|
|
31
|
+
focusTools: [
|
|
32
|
+
'create_spec',
|
|
33
|
+
'decompose_spec',
|
|
34
|
+
'estimate',
|
|
35
|
+
'check_readiness',
|
|
36
|
+
'challenge_spec',
|
|
37
|
+
'inject_quality_gates',
|
|
38
|
+
'suggest_criteria',
|
|
39
|
+
'clarify_requirements',
|
|
40
|
+
'analyze_spec_dependencies',
|
|
41
|
+
'critical_path_analyzer',
|
|
42
|
+
],
|
|
43
|
+
avoidTools: ['lock_spec', 'create_release', 'generate_changelog', 'tdd_scaffold'],
|
|
44
|
+
tips: [
|
|
45
|
+
'Use challenge_spec to stress-test before approving',
|
|
46
|
+
'Use check_readiness to verify sufficient detail',
|
|
47
|
+
'Use inject_quality_gates to add quality checklist automatically',
|
|
48
|
+
'Use decompose_spec for large specs that should be split',
|
|
49
|
+
],
|
|
50
|
+
estimatedTokensSaved: 82,
|
|
51
|
+
},
|
|
52
|
+
implement: {
|
|
53
|
+
phase: 'implement',
|
|
54
|
+
name: 'Implementation Mode',
|
|
55
|
+
description: 'Build features, track progress, manage sessions',
|
|
56
|
+
focusTools: [
|
|
57
|
+
'list_specs',
|
|
58
|
+
'update_status',
|
|
59
|
+
'lock_spec',
|
|
60
|
+
'unlock_spec',
|
|
61
|
+
'tdd_scaffold',
|
|
62
|
+
'validate',
|
|
63
|
+
'session_checkpoint',
|
|
64
|
+
'session_handoff',
|
|
65
|
+
'planu_status',
|
|
66
|
+
'generate_tests',
|
|
67
|
+
'verify_spec_compliance',
|
|
68
|
+
],
|
|
69
|
+
avoidTools: [
|
|
70
|
+
'create_spec',
|
|
71
|
+
'elicit_requirements',
|
|
72
|
+
'create_release',
|
|
73
|
+
'generate_changelog',
|
|
74
|
+
'team_analytics',
|
|
75
|
+
],
|
|
76
|
+
tips: [
|
|
77
|
+
'Use lock_spec before starting to prevent conflicts',
|
|
78
|
+
'Use session_checkpoint before context resets',
|
|
79
|
+
'Use validate after implementing to check compliance',
|
|
80
|
+
'Use update_status to track progress through lifecycle',
|
|
81
|
+
],
|
|
82
|
+
estimatedTokensSaved: 88,
|
|
83
|
+
},
|
|
84
|
+
review: {
|
|
85
|
+
phase: 'review',
|
|
86
|
+
name: 'Review Mode',
|
|
87
|
+
description: 'Validate, approve, request changes, verify quality',
|
|
88
|
+
focusTools: [
|
|
89
|
+
'validate',
|
|
90
|
+
'verify_spec_compliance',
|
|
91
|
+
'spec_quality_score',
|
|
92
|
+
'approve_spec',
|
|
93
|
+
'request_changes',
|
|
94
|
+
'challenge_spec',
|
|
95
|
+
'check_readiness',
|
|
96
|
+
'review_pr',
|
|
97
|
+
'ears_lint',
|
|
98
|
+
'validate_criteria_quality',
|
|
99
|
+
],
|
|
100
|
+
avoidTools: ['lock_spec', 'create_release', 'tdd_scaffold', 'capture_idea'],
|
|
101
|
+
tips: [
|
|
102
|
+
'Use validate to check acceptance criteria compliance',
|
|
103
|
+
'Use verify_spec_compliance to score code coverage',
|
|
104
|
+
'Use ears_lint to check criteria quality',
|
|
105
|
+
'Use approve_spec only when all criteria are verified',
|
|
106
|
+
],
|
|
107
|
+
estimatedTokensSaved: 87,
|
|
108
|
+
},
|
|
109
|
+
release: {
|
|
110
|
+
phase: 'release',
|
|
111
|
+
name: 'Release Mode',
|
|
112
|
+
description: 'Prepare releases, generate changelogs, version specs',
|
|
113
|
+
focusTools: [
|
|
114
|
+
'generate_changelog',
|
|
115
|
+
'create_release',
|
|
116
|
+
'version_spec',
|
|
117
|
+
'export_specs_markdown',
|
|
118
|
+
'generate_docs_site',
|
|
119
|
+
'spec_usage_report',
|
|
120
|
+
'velocity_report',
|
|
121
|
+
'update_status',
|
|
122
|
+
],
|
|
123
|
+
avoidTools: [
|
|
124
|
+
'create_spec',
|
|
125
|
+
'lock_spec',
|
|
126
|
+
'tdd_scaffold',
|
|
127
|
+
'capture_idea',
|
|
128
|
+
'clarify_requirements',
|
|
129
|
+
],
|
|
130
|
+
tips: [
|
|
131
|
+
'Use generate_changelog to compile release notes from done specs',
|
|
132
|
+
'Use create_release to tag and publish the version',
|
|
133
|
+
'Use velocity_report to measure team performance this cycle',
|
|
134
|
+
'Mark all specs done before creating the release',
|
|
135
|
+
],
|
|
136
|
+
estimatedTokensSaved: 90,
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
export function getProfile(phase) {
|
|
140
|
+
return PROFILE_CATALOG[phase];
|
|
141
|
+
}
|
|
142
|
+
export function getAllProfiles() {
|
|
143
|
+
return Object.values(PROFILE_CATALOG);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=profile-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-catalog.js","sourceRoot":"","sources":["../../../src/engine/context-profile/profile-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-analyzer.d.ts","sourceRoot":"","sources":["../../../src/engine/critical-path/path-analyzer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,yBAAyB,EAAmB,MAAM,sBAAsB,CAAC;AA8FvF,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAyEjG"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// engine/critical-path/path-analyzer.ts — SPEC-405
|
|
2
|
+
// Build a dependency graph from spec frontmatter and compute the critical path.
|
|
3
|
+
import { readFile } from 'node:fs/promises';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { glob } from 'glob';
|
|
6
|
+
import { parseFrontmatter } from '../frontmatter-parser.js';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// File reading helpers
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
async function readAllSpecMeta(projectPath) {
|
|
11
|
+
const pattern = join(projectPath, 'planu', 'specs', '*', 'spec.md');
|
|
12
|
+
const files = await glob(pattern, { nodir: true });
|
|
13
|
+
const results = [];
|
|
14
|
+
await Promise.all(files.map(async (filePath) => {
|
|
15
|
+
try {
|
|
16
|
+
const content = await readFile(filePath, 'utf-8');
|
|
17
|
+
const { metadata } = parseFrontmatter(content);
|
|
18
|
+
const id = typeof metadata.id === 'string' ? metadata.id : '';
|
|
19
|
+
if (!id) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const estimatedHours = typeof metadata.estimatedHours === 'number' ? metadata.estimatedHours : 0;
|
|
23
|
+
const rawDeps = metadata.dependencies;
|
|
24
|
+
const dependencies = Array.isArray(rawDeps)
|
|
25
|
+
? rawDeps.filter((d) => typeof d === 'string')
|
|
26
|
+
: [];
|
|
27
|
+
const status = typeof metadata.status === 'string' ? metadata.status : 'pending';
|
|
28
|
+
results.push({ id, estimatedHours, dependencies, status });
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// skip unreadable files
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
return results;
|
|
35
|
+
}
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// DAG critical path (longest path in hours)
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
/**
|
|
40
|
+
* Compute the longest-duration path through the spec dependency DAG.
|
|
41
|
+
* Uses memoized DFS. Returns the spec IDs in topological order.
|
|
42
|
+
*/
|
|
43
|
+
function longestPath(specId, adjacency, hours, memo) {
|
|
44
|
+
const cached = memo.get(specId);
|
|
45
|
+
if (cached) {
|
|
46
|
+
return cached;
|
|
47
|
+
}
|
|
48
|
+
const children = adjacency.get(specId) ?? [];
|
|
49
|
+
let best = {
|
|
50
|
+
length: hours.get(specId) ?? 0,
|
|
51
|
+
path: [specId],
|
|
52
|
+
};
|
|
53
|
+
for (const child of children) {
|
|
54
|
+
const sub = longestPath(child, adjacency, hours, memo);
|
|
55
|
+
const total = (hours.get(specId) ?? 0) + sub.length;
|
|
56
|
+
if (total > best.length) {
|
|
57
|
+
best = { length: total, path: [specId, ...sub.path] };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
memo.set(specId, best);
|
|
61
|
+
return best;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Count how many specs depend on each spec (in-degree of reverse graph).
|
|
65
|
+
*/
|
|
66
|
+
function countDependents(specs) {
|
|
67
|
+
const count = new Map();
|
|
68
|
+
for (const spec of specs) {
|
|
69
|
+
if (!count.has(spec.id)) {
|
|
70
|
+
count.set(spec.id, 0);
|
|
71
|
+
}
|
|
72
|
+
for (const dep of spec.dependencies) {
|
|
73
|
+
count.set(dep, (count.get(dep) ?? 0) + 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return count;
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Public function
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
export async function analyzeCriticalPath(projectPath) {
|
|
82
|
+
const specs = await readAllSpecMeta(projectPath);
|
|
83
|
+
if (specs.length === 0) {
|
|
84
|
+
return { criticalPath: [], totalHours: 0, parallelizableSpecs: [], bottlenecks: [] };
|
|
85
|
+
}
|
|
86
|
+
// Build adjacency list (spec → its dependents, i.e. specs that depend on it)
|
|
87
|
+
const adjacency = new Map();
|
|
88
|
+
const hours = new Map();
|
|
89
|
+
const allIds = new Set(specs.map((s) => s.id));
|
|
90
|
+
for (const spec of specs) {
|
|
91
|
+
hours.set(spec.id, spec.estimatedHours);
|
|
92
|
+
if (!adjacency.has(spec.id)) {
|
|
93
|
+
adjacency.set(spec.id, []);
|
|
94
|
+
}
|
|
95
|
+
for (const dep of spec.dependencies) {
|
|
96
|
+
if (allIds.has(dep)) {
|
|
97
|
+
const list = adjacency.get(dep) ?? [];
|
|
98
|
+
list.push(spec.id);
|
|
99
|
+
adjacency.set(dep, list);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Find root nodes (no dependencies pointing to them from known specs)
|
|
104
|
+
const hasIncoming = new Set();
|
|
105
|
+
for (const spec of specs) {
|
|
106
|
+
for (const dep of spec.dependencies) {
|
|
107
|
+
if (allIds.has(dep)) {
|
|
108
|
+
hasIncoming.add(spec.id);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const roots = specs.filter((s) => !hasIncoming.has(s.id));
|
|
113
|
+
// Compute longest path from each root
|
|
114
|
+
const memo = new Map();
|
|
115
|
+
let bestPath = [];
|
|
116
|
+
let bestLength = 0;
|
|
117
|
+
for (const root of roots) {
|
|
118
|
+
const result = longestPath(root.id, adjacency, hours, memo);
|
|
119
|
+
if (result.length > bestLength) {
|
|
120
|
+
bestLength = result.length;
|
|
121
|
+
bestPath = result.path;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const totalHours = specs.reduce((acc, s) => acc + s.estimatedHours, 0);
|
|
125
|
+
// Parallelizable: specs NOT on the critical path
|
|
126
|
+
const criticalSet = new Set(bestPath);
|
|
127
|
+
const parallelizableSpecs = specs
|
|
128
|
+
.filter((s) => !criticalSet.has(s.id))
|
|
129
|
+
.map((s) => s.id)
|
|
130
|
+
.slice(0, 20);
|
|
131
|
+
// Bottlenecks: top 3 specs with most dependents
|
|
132
|
+
const dependentCount = countDependents(specs);
|
|
133
|
+
const bottlenecks = [...dependentCount.entries()]
|
|
134
|
+
.filter(([, count]) => count > 0)
|
|
135
|
+
.sort((a, b) => b[1] - a[1])
|
|
136
|
+
.slice(0, 3)
|
|
137
|
+
.map(([id]) => id);
|
|
138
|
+
return {
|
|
139
|
+
criticalPath: bestPath,
|
|
140
|
+
totalHours,
|
|
141
|
+
parallelizableSpecs,
|
|
142
|
+
bottlenecks,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=path-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-analyzer.js","sourceRoot":"","sources":["../../../src/engine/critical-path/path-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CloudProvider, InfraResourceType, ResourceCostEntry, DistributionCostEstimate } from '../../types/index.js';
|
|
2
|
+
export type { CloudProvider };
|
|
3
|
+
export type ResourceType = InfraResourceType;
|
|
4
|
+
export type ResourceCost = ResourceCostEntry;
|
|
5
|
+
export type CostEstimate = DistributionCostEstimate;
|
|
6
|
+
export declare function estimateCost(provider: CloudProvider, resources: ResourceType[]): CostEstimate;
|
|
7
|
+
export declare function detectProvider(stack?: string, framework?: string): CloudProvider;
|
|
8
|
+
//# sourceMappingURL=cost-estimator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost-estimator.d.ts","sourceRoot":"","sources":["../../../src/engine/distribution/cost-estimator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,wBAAwB,CAAC;AAqEpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,CA8B7F;AAED,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,CAmBhF"}
|