@planu/cli 1.1.1 → 1.2.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 +110 -9
- package/dist/config/spec-cookbook.json +341 -0
- package/dist/engine/asana-sync.d.ts +12 -0
- package/dist/engine/asana-sync.d.ts.map +1 -0
- package/dist/engine/asana-sync.js +72 -0
- package/dist/engine/asana-sync.js.map +1 -0
- package/dist/engine/code-impact-analyzer.d.ts +6 -0
- package/dist/engine/code-impact-analyzer.d.ts.map +1 -0
- package/dist/engine/code-impact-analyzer.js +152 -0
- package/dist/engine/code-impact-analyzer.js.map +1 -0
- package/dist/engine/compliance-reporter.d.ts +11 -0
- package/dist/engine/compliance-reporter.d.ts.map +1 -0
- package/dist/engine/compliance-reporter.js +245 -0
- package/dist/engine/compliance-reporter.js.map +1 -0
- package/dist/engine/context-manager.d.ts +7 -0
- package/dist/engine/context-manager.d.ts.map +1 -0
- package/dist/engine/context-manager.js +76 -0
- package/dist/engine/context-manager.js.map +1 -0
- package/dist/engine/cost-budget-manager.d.ts +10 -0
- package/dist/engine/cost-budget-manager.d.ts.map +1 -0
- package/dist/engine/cost-budget-manager.js +165 -0
- package/dist/engine/cost-budget-manager.js.map +1 -0
- package/dist/engine/dependency-impact-analyzer.d.ts +14 -0
- package/dist/engine/dependency-impact-analyzer.d.ts.map +1 -0
- package/dist/engine/dependency-impact-analyzer.js +133 -0
- package/dist/engine/dependency-impact-analyzer.js.map +1 -0
- package/dist/engine/diff-spec-generator.d.ts +6 -0
- package/dist/engine/diff-spec-generator.d.ts.map +1 -0
- package/dist/engine/diff-spec-generator.js +181 -0
- package/dist/engine/diff-spec-generator.js.map +1 -0
- package/dist/engine/drift-monitor.d.ts +5 -0
- package/dist/engine/drift-monitor.d.ts.map +1 -0
- package/dist/engine/drift-monitor.js +92 -0
- package/dist/engine/drift-monitor.js.map +1 -0
- package/dist/engine/global-rules-manager.d.ts +10 -0
- package/dist/engine/global-rules-manager.d.ts.map +1 -0
- package/dist/engine/global-rules-manager.js +214 -0
- package/dist/engine/global-rules-manager.js.map +1 -0
- package/dist/engine/knowledge-base.d.ts +12 -0
- package/dist/engine/knowledge-base.d.ts.map +1 -0
- package/dist/engine/knowledge-base.js +250 -0
- package/dist/engine/knowledge-base.js.map +1 -0
- package/dist/engine/monday-sync.d.ts +10 -0
- package/dist/engine/monday-sync.d.ts.map +1 -0
- package/dist/engine/monday-sync.js +56 -0
- package/dist/engine/monday-sync.js.map +1 -0
- package/dist/engine/notion-sync.d.ts +13 -0
- package/dist/engine/notion-sync.d.ts.map +1 -0
- package/dist/engine/notion-sync.js +87 -0
- package/dist/engine/notion-sync.js.map +1 -0
- package/dist/engine/onboarding-engine.d.ts +11 -0
- package/dist/engine/onboarding-engine.d.ts.map +1 -0
- package/dist/engine/onboarding-engine.js +575 -0
- package/dist/engine/onboarding-engine.js.map +1 -0
- package/dist/engine/parallel-safety-engine.d.ts +8 -0
- package/dist/engine/parallel-safety-engine.d.ts.map +1 -0
- package/dist/engine/parallel-safety-engine.js +106 -0
- package/dist/engine/parallel-safety-engine.js.map +1 -0
- package/dist/engine/schema-generator.d.ts +6 -0
- package/dist/engine/schema-generator.d.ts.map +1 -0
- package/dist/engine/schema-generator.js +321 -0
- package/dist/engine/schema-generator.js.map +1 -0
- package/dist/engine/spec-cookbook.d.ts +12 -0
- package/dist/engine/spec-cookbook.d.ts.map +1 -0
- package/dist/engine/spec-cookbook.js +176 -0
- package/dist/engine/spec-cookbook.js.map +1 -0
- package/dist/engine/spec-diff-engine.d.ts +8 -0
- package/dist/engine/spec-diff-engine.d.ts.map +1 -0
- package/dist/engine/spec-diff-engine.js +321 -0
- package/dist/engine/spec-diff-engine.js.map +1 -0
- package/dist/engine/spec-hooks-engine.d.ts +12 -0
- package/dist/engine/spec-hooks-engine.d.ts.map +1 -0
- package/dist/engine/spec-hooks-engine.js +79 -0
- package/dist/engine/spec-hooks-engine.js.map +1 -0
- package/dist/engine/spec-lint-engine.d.ts +6 -0
- package/dist/engine/spec-lint-engine.d.ts.map +1 -0
- package/dist/engine/spec-lint-engine.js +164 -0
- package/dist/engine/spec-lint-engine.js.map +1 -0
- package/dist/engine/spec-scheduler.d.ts +13 -0
- package/dist/engine/spec-scheduler.d.ts.map +1 -0
- package/dist/engine/spec-scheduler.js +154 -0
- package/dist/engine/spec-scheduler.js.map +1 -0
- package/dist/engine/spec-source-sync.d.ts +14 -0
- package/dist/engine/spec-source-sync.d.ts.map +1 -0
- package/dist/engine/spec-source-sync.js +148 -0
- package/dist/engine/spec-source-sync.js.map +1 -0
- package/dist/engine/tech-debt-manager.d.ts +12 -0
- package/dist/engine/tech-debt-manager.d.ts.map +1 -0
- package/dist/engine/tech-debt-manager.js +152 -0
- package/dist/engine/tech-debt-manager.js.map +1 -0
- package/dist/engine/validation-loop.d.ts +4 -0
- package/dist/engine/validation-loop.d.ts.map +1 -0
- package/dist/engine/validation-loop.js +133 -0
- package/dist/engine/validation-loop.js.map +1 -0
- package/dist/engine/webhook-server.d.ts +19 -0
- package/dist/engine/webhook-server.d.ts.map +1 -0
- package/dist/engine/webhook-server.js +169 -0
- package/dist/engine/webhook-server.js.map +1 -0
- package/dist/engine/workspace-manager.d.ts +8 -0
- package/dist/engine/workspace-manager.d.ts.map +1 -0
- package/dist/engine/workspace-manager.js +255 -0
- package/dist/engine/workspace-manager.js.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/api-surfaces-store.d.ts +8 -0
- package/dist/storage/api-surfaces-store.d.ts.map +1 -0
- package/dist/storage/api-surfaces-store.js +31 -0
- package/dist/storage/api-surfaces-store.js.map +1 -0
- package/dist/storage/asana-config-store.d.ts +9 -0
- package/dist/storage/asana-config-store.d.ts.map +1 -0
- package/dist/storage/asana-config-store.js +51 -0
- package/dist/storage/asana-config-store.js.map +1 -0
- package/dist/storage/context-config-store.d.ts +4 -0
- package/dist/storage/context-config-store.d.ts.map +1 -0
- package/dist/storage/context-config-store.js +20 -0
- package/dist/storage/context-config-store.js.map +1 -0
- package/dist/storage/cost-budget-store.d.ts +6 -0
- package/dist/storage/cost-budget-store.d.ts.map +1 -0
- package/dist/storage/cost-budget-store.js +42 -0
- package/dist/storage/cost-budget-store.js.map +1 -0
- package/dist/storage/drift-monitor-store.d.ts +9 -0
- package/dist/storage/drift-monitor-store.d.ts.map +1 -0
- package/dist/storage/drift-monitor-store.js +45 -0
- package/dist/storage/drift-monitor-store.js.map +1 -0
- package/dist/storage/monday-config-store.d.ts +9 -0
- package/dist/storage/monday-config-store.d.ts.map +1 -0
- package/dist/storage/monday-config-store.js +51 -0
- package/dist/storage/monday-config-store.js.map +1 -0
- package/dist/storage/notion-config-store.d.ts +9 -0
- package/dist/storage/notion-config-store.d.ts.map +1 -0
- package/dist/storage/notion-config-store.js +51 -0
- package/dist/storage/notion-config-store.js.map +1 -0
- package/dist/storage/onboarding-store.d.ts +4 -0
- package/dist/storage/onboarding-store.d.ts.map +1 -0
- package/dist/storage/onboarding-store.js +14 -0
- package/dist/storage/onboarding-store.js.map +1 -0
- package/dist/storage/retention-policy-store.d.ts +4 -0
- package/dist/storage/retention-policy-store.d.ts.map +1 -0
- package/dist/storage/retention-policy-store.js +20 -0
- package/dist/storage/retention-policy-store.js.map +1 -0
- package/dist/storage/spec-bindings-store.d.ts +8 -0
- package/dist/storage/spec-bindings-store.d.ts.map +1 -0
- package/dist/storage/spec-bindings-store.js +44 -0
- package/dist/storage/spec-bindings-store.js.map +1 -0
- package/dist/storage/spec-hooks-store.d.ts +8 -0
- package/dist/storage/spec-hooks-store.d.ts.map +1 -0
- package/dist/storage/spec-hooks-store.js +56 -0
- package/dist/storage/spec-hooks-store.js.map +1 -0
- package/dist/storage/spec-lint-rules-store.d.ts +5 -0
- package/dist/storage/spec-lint-rules-store.d.ts.map +1 -0
- package/dist/storage/spec-lint-rules-store.js +40 -0
- package/dist/storage/spec-lint-rules-store.js.map +1 -0
- package/dist/storage/tech-debt-store.d.ts +12 -0
- package/dist/storage/tech-debt-store.d.ts.map +1 -0
- package/dist/storage/tech-debt-store.js +51 -0
- package/dist/storage/tech-debt-store.js.map +1 -0
- package/dist/storage/webhook-server-store.d.ts +5 -0
- package/dist/storage/webhook-server-store.d.ts.map +1 -0
- package/dist/storage/webhook-server-store.js +14 -0
- package/dist/storage/webhook-server-store.js.map +1 -0
- package/dist/tools/asana-handler.d.ts +6 -0
- package/dist/tools/asana-handler.d.ts.map +1 -0
- package/dist/tools/asana-handler.js +199 -0
- package/dist/tools/asana-handler.js.map +1 -0
- package/dist/tools/code-impact-handler.d.ts +6 -0
- package/dist/tools/code-impact-handler.d.ts.map +1 -0
- package/dist/tools/code-impact-handler.js +158 -0
- package/dist/tools/code-impact-handler.js.map +1 -0
- package/dist/tools/compliance-audit-handler.d.ts +6 -0
- package/dist/tools/compliance-audit-handler.d.ts.map +1 -0
- package/dist/tools/compliance-audit-handler.js +87 -0
- package/dist/tools/compliance-audit-handler.js.map +1 -0
- package/dist/tools/context-manager-handler.d.ts +8 -0
- package/dist/tools/context-manager-handler.d.ts.map +1 -0
- package/dist/tools/context-manager-handler.js +180 -0
- package/dist/tools/context-manager-handler.js.map +1 -0
- package/dist/tools/cost-budget-handler.d.ts +7 -0
- package/dist/tools/cost-budget-handler.d.ts.map +1 -0
- package/dist/tools/cost-budget-handler.js +242 -0
- package/dist/tools/cost-budget-handler.js.map +1 -0
- package/dist/tools/dependency-impact-handler.d.ts +6 -0
- package/dist/tools/dependency-impact-handler.d.ts.map +1 -0
- package/dist/tools/dependency-impact-handler.js +100 -0
- package/dist/tools/dependency-impact-handler.js.map +1 -0
- package/dist/tools/diff-spec-generator-handler.d.ts +22 -0
- package/dist/tools/diff-spec-generator-handler.d.ts.map +1 -0
- package/dist/tools/diff-spec-generator-handler.js +87 -0
- package/dist/tools/diff-spec-generator-handler.js.map +1 -0
- package/dist/tools/drift-monitor-handler.d.ts +25 -0
- package/dist/tools/drift-monitor-handler.d.ts.map +1 -0
- package/dist/tools/drift-monitor-handler.js +95 -0
- package/dist/tools/drift-monitor-handler.js.map +1 -0
- package/dist/tools/global-rules-handler.d.ts +17 -0
- package/dist/tools/global-rules-handler.d.ts.map +1 -0
- package/dist/tools/global-rules-handler.js +178 -0
- package/dist/tools/global-rules-handler.js.map +1 -0
- package/dist/tools/incoming-webhook-handler.d.ts +6 -0
- package/dist/tools/incoming-webhook-handler.d.ts.map +1 -0
- package/dist/tools/incoming-webhook-handler.js +247 -0
- package/dist/tools/incoming-webhook-handler.js.map +1 -0
- package/dist/tools/knowledge-base-handler.d.ts +7 -0
- package/dist/tools/knowledge-base-handler.d.ts.map +1 -0
- package/dist/tools/knowledge-base-handler.js +137 -0
- package/dist/tools/knowledge-base-handler.js.map +1 -0
- package/dist/tools/monday-handler.d.ts +6 -0
- package/dist/tools/monday-handler.d.ts.map +1 -0
- package/dist/tools/monday-handler.js +190 -0
- package/dist/tools/monday-handler.js.map +1 -0
- package/dist/tools/notion-handler.d.ts +6 -0
- package/dist/tools/notion-handler.d.ts.map +1 -0
- package/dist/tools/notion-handler.js +197 -0
- package/dist/tools/notion-handler.js.map +1 -0
- package/dist/tools/onboarding-handler.d.ts +7 -0
- package/dist/tools/onboarding-handler.d.ts.map +1 -0
- package/dist/tools/onboarding-handler.js +59 -0
- package/dist/tools/onboarding-handler.js.map +1 -0
- package/dist/tools/parallel-safety-handler.d.ts +7 -0
- package/dist/tools/parallel-safety-handler.d.ts.map +1 -0
- package/dist/tools/parallel-safety-handler.js +29 -0
- package/dist/tools/parallel-safety-handler.js.map +1 -0
- package/dist/tools/register-asana-tools.d.ts +3 -0
- package/dist/tools/register-asana-tools.d.ts.map +1 -0
- package/dist/tools/register-asana-tools.js +74 -0
- package/dist/tools/register-asana-tools.js.map +1 -0
- package/dist/tools/register-code-impact-tools.d.ts +3 -0
- package/dist/tools/register-code-impact-tools.d.ts.map +1 -0
- package/dist/tools/register-code-impact-tools.js +58 -0
- package/dist/tools/register-code-impact-tools.js.map +1 -0
- package/dist/tools/register-compliance-audit-tools.d.ts +3 -0
- package/dist/tools/register-compliance-audit-tools.d.ts.map +1 -0
- package/dist/tools/register-compliance-audit-tools.js +106 -0
- package/dist/tools/register-compliance-audit-tools.js.map +1 -0
- package/dist/tools/register-context-manager-tools.d.ts +3 -0
- package/dist/tools/register-context-manager-tools.d.ts.map +1 -0
- package/dist/tools/register-context-manager-tools.js +138 -0
- package/dist/tools/register-context-manager-tools.js.map +1 -0
- package/dist/tools/register-cost-budget-tools.d.ts +3 -0
- package/dist/tools/register-cost-budget-tools.d.ts.map +1 -0
- package/dist/tools/register-cost-budget-tools.js +98 -0
- package/dist/tools/register-cost-budget-tools.js.map +1 -0
- package/dist/tools/register-dependency-impact-tools.d.ts +3 -0
- package/dist/tools/register-dependency-impact-tools.d.ts.map +1 -0
- package/dist/tools/register-dependency-impact-tools.js +63 -0
- package/dist/tools/register-dependency-impact-tools.js.map +1 -0
- package/dist/tools/register-diff-spec-tools.d.ts +3 -0
- package/dist/tools/register-diff-spec-tools.d.ts.map +1 -0
- package/dist/tools/register-diff-spec-tools.js +55 -0
- package/dist/tools/register-diff-spec-tools.js.map +1 -0
- package/dist/tools/register-drift-monitor-tools.d.ts +3 -0
- package/dist/tools/register-drift-monitor-tools.d.ts.map +1 -0
- package/dist/tools/register-drift-monitor-tools.js +64 -0
- package/dist/tools/register-drift-monitor-tools.js.map +1 -0
- package/dist/tools/register-global-rules-tools.d.ts +3 -0
- package/dist/tools/register-global-rules-tools.d.ts.map +1 -0
- package/dist/tools/register-global-rules-tools.js +44 -0
- package/dist/tools/register-global-rules-tools.js.map +1 -0
- package/dist/tools/register-incoming-webhook-tools.d.ts +3 -0
- package/dist/tools/register-incoming-webhook-tools.d.ts.map +1 -0
- package/dist/tools/register-incoming-webhook-tools.js +50 -0
- package/dist/tools/register-incoming-webhook-tools.js.map +1 -0
- package/dist/tools/register-knowledge-base-tools.d.ts +3 -0
- package/dist/tools/register-knowledge-base-tools.d.ts.map +1 -0
- package/dist/tools/register-knowledge-base-tools.js +66 -0
- package/dist/tools/register-knowledge-base-tools.js.map +1 -0
- package/dist/tools/register-monday-tools.d.ts +3 -0
- package/dist/tools/register-monday-tools.d.ts.map +1 -0
- package/dist/tools/register-monday-tools.js +69 -0
- package/dist/tools/register-monday-tools.js.map +1 -0
- package/dist/tools/register-notion-tools.d.ts +3 -0
- package/dist/tools/register-notion-tools.d.ts.map +1 -0
- package/dist/tools/register-notion-tools.js +76 -0
- package/dist/tools/register-notion-tools.js.map +1 -0
- package/dist/tools/register-onboarding-tools.d.ts +3 -0
- package/dist/tools/register-onboarding-tools.d.ts.map +1 -0
- package/dist/tools/register-onboarding-tools.js +70 -0
- package/dist/tools/register-onboarding-tools.js.map +1 -0
- package/dist/tools/register-parallel-safety-tools.d.ts +3 -0
- package/dist/tools/register-parallel-safety-tools.d.ts.map +1 -0
- package/dist/tools/register-parallel-safety-tools.js +18 -0
- package/dist/tools/register-parallel-safety-tools.js.map +1 -0
- package/dist/tools/register-schema-generator-tools.d.ts +3 -0
- package/dist/tools/register-schema-generator-tools.d.ts.map +1 -0
- package/dist/tools/register-schema-generator-tools.js +46 -0
- package/dist/tools/register-schema-generator-tools.js.map +1 -0
- package/dist/tools/register-spec-cookbook-tools.d.ts +3 -0
- package/dist/tools/register-spec-cookbook-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-cookbook-tools.js +90 -0
- package/dist/tools/register-spec-cookbook-tools.js.map +1 -0
- package/dist/tools/register-spec-diff-tools.d.ts +3 -0
- package/dist/tools/register-spec-diff-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-diff-tools.js +67 -0
- package/dist/tools/register-spec-diff-tools.js.map +1 -0
- package/dist/tools/register-spec-hooks-tools.d.ts +3 -0
- package/dist/tools/register-spec-hooks-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-hooks-tools.js +124 -0
- package/dist/tools/register-spec-hooks-tools.js.map +1 -0
- package/dist/tools/register-spec-lint-tools.d.ts +3 -0
- package/dist/tools/register-spec-lint-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-lint-tools.js +79 -0
- package/dist/tools/register-spec-lint-tools.js.map +1 -0
- package/dist/tools/register-spec-scheduler-tools.d.ts +3 -0
- package/dist/tools/register-spec-scheduler-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-scheduler-tools.js +73 -0
- package/dist/tools/register-spec-scheduler-tools.js.map +1 -0
- package/dist/tools/register-spec-source-tools.d.ts +3 -0
- package/dist/tools/register-spec-source-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-source-tools.js +48 -0
- package/dist/tools/register-spec-source-tools.js.map +1 -0
- package/dist/tools/register-tech-debt-tools.d.ts +3 -0
- package/dist/tools/register-tech-debt-tools.d.ts.map +1 -0
- package/dist/tools/register-tech-debt-tools.js +95 -0
- package/dist/tools/register-tech-debt-tools.js.map +1 -0
- package/dist/tools/register-validation-loop-tools.d.ts +3 -0
- package/dist/tools/register-validation-loop-tools.d.ts.map +1 -0
- package/dist/tools/register-validation-loop-tools.js +77 -0
- package/dist/tools/register-validation-loop-tools.js.map +1 -0
- package/dist/tools/register-workspace-dashboard-tools.d.ts +3 -0
- package/dist/tools/register-workspace-dashboard-tools.d.ts.map +1 -0
- package/dist/tools/register-workspace-dashboard-tools.js +98 -0
- package/dist/tools/register-workspace-dashboard-tools.js.map +1 -0
- package/dist/tools/schema-generator-handler.d.ts +4 -0
- package/dist/tools/schema-generator-handler.d.ts.map +1 -0
- package/dist/tools/schema-generator-handler.js +129 -0
- package/dist/tools/schema-generator-handler.js.map +1 -0
- package/dist/tools/spec-cookbook-handler.d.ts +7 -0
- package/dist/tools/spec-cookbook-handler.d.ts.map +1 -0
- package/dist/tools/spec-cookbook-handler.js +83 -0
- package/dist/tools/spec-cookbook-handler.js.map +1 -0
- package/dist/tools/spec-hooks-handler.d.ts +7 -0
- package/dist/tools/spec-hooks-handler.d.ts.map +1 -0
- package/dist/tools/spec-hooks-handler.js +112 -0
- package/dist/tools/spec-hooks-handler.js.map +1 -0
- package/dist/tools/spec-lint-handler.d.ts +6 -0
- package/dist/tools/spec-lint-handler.d.ts.map +1 -0
- package/dist/tools/spec-lint-handler.js +165 -0
- package/dist/tools/spec-lint-handler.js.map +1 -0
- package/dist/tools/spec-scheduler-handler.d.ts +6 -0
- package/dist/tools/spec-scheduler-handler.d.ts.map +1 -0
- package/dist/tools/spec-scheduler-handler.js +108 -0
- package/dist/tools/spec-scheduler-handler.js.map +1 -0
- package/dist/tools/spec-source-handler.d.ts +21 -0
- package/dist/tools/spec-source-handler.d.ts.map +1 -0
- package/dist/tools/spec-source-handler.js +75 -0
- package/dist/tools/spec-source-handler.js.map +1 -0
- package/dist/tools/spec-visual-diff-handler.d.ts +7 -0
- package/dist/tools/spec-visual-diff-handler.d.ts.map +1 -0
- package/dist/tools/spec-visual-diff-handler.js +130 -0
- package/dist/tools/spec-visual-diff-handler.js.map +1 -0
- package/dist/tools/tech-debt-handler.d.ts +8 -0
- package/dist/tools/tech-debt-handler.d.ts.map +1 -0
- package/dist/tools/tech-debt-handler.js +150 -0
- package/dist/tools/tech-debt-handler.js.map +1 -0
- package/dist/tools/validation-loop-handler.d.ts +5 -0
- package/dist/tools/validation-loop-handler.d.ts.map +1 -0
- package/dist/tools/validation-loop-handler.js +59 -0
- package/dist/tools/validation-loop-handler.js.map +1 -0
- package/dist/tools/workspace-dashboard-handler.d.ts +8 -0
- package/dist/tools/workspace-dashboard-handler.d.ts.map +1 -0
- package/dist/tools/workspace-dashboard-handler.js +108 -0
- package/dist/tools/workspace-dashboard-handler.js.map +1 -0
- package/dist/types/code-impact.d.ts +57 -0
- package/dist/types/code-impact.d.ts.map +1 -0
- package/dist/types/code-impact.js +3 -0
- package/dist/types/code-impact.js.map +1 -0
- package/dist/types/compliance-audit.d.ts +55 -0
- package/dist/types/compliance-audit.d.ts.map +1 -0
- package/dist/types/compliance-audit.js +3 -0
- package/dist/types/compliance-audit.js.map +1 -0
- package/dist/types/context-manager.d.ts +57 -0
- package/dist/types/context-manager.d.ts.map +1 -0
- package/dist/types/context-manager.js +3 -0
- package/dist/types/context-manager.js.map +1 -0
- package/dist/types/cost-budget.d.ts +84 -0
- package/dist/types/cost-budget.d.ts.map +1 -0
- package/dist/types/cost-budget.js +3 -0
- package/dist/types/cost-budget.js.map +1 -0
- package/dist/types/dependency-impact.d.ts +45 -0
- package/dist/types/dependency-impact.d.ts.map +1 -0
- package/dist/types/dependency-impact.js +3 -0
- package/dist/types/dependency-impact.js.map +1 -0
- package/dist/types/diff-spec-types.d.ts +39 -0
- package/dist/types/diff-spec-types.d.ts.map +1 -0
- package/dist/types/diff-spec-types.js +3 -0
- package/dist/types/diff-spec-types.js.map +1 -0
- package/dist/types/drift-monitor-types.d.ts +47 -0
- package/dist/types/drift-monitor-types.d.ts.map +1 -0
- package/dist/types/drift-monitor-types.js +3 -0
- package/dist/types/drift-monitor-types.js.map +1 -0
- package/dist/types/global-rules-types.d.ts +31 -0
- package/dist/types/global-rules-types.d.ts.map +1 -0
- package/dist/types/global-rules-types.js +3 -0
- package/dist/types/global-rules-types.js.map +1 -0
- package/dist/types/incoming-webhook.d.ts +40 -0
- package/dist/types/incoming-webhook.d.ts.map +1 -0
- package/dist/types/incoming-webhook.js +3 -0
- package/dist/types/incoming-webhook.js.map +1 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +23 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/knowledge-base.d.ts +57 -0
- package/dist/types/knowledge-base.d.ts.map +1 -0
- package/dist/types/knowledge-base.js +3 -0
- package/dist/types/knowledge-base.js.map +1 -0
- package/dist/types/notion-asana-monday.d.ts +196 -0
- package/dist/types/notion-asana-monday.d.ts.map +1 -0
- package/dist/types/notion-asana-monday.js +3 -0
- package/dist/types/notion-asana-monday.js.map +1 -0
- package/dist/types/onboarding-types.d.ts +69 -0
- package/dist/types/onboarding-types.d.ts.map +1 -0
- package/dist/types/onboarding-types.js +3 -0
- package/dist/types/onboarding-types.js.map +1 -0
- package/dist/types/parallel-safety-types.d.ts +14 -0
- package/dist/types/parallel-safety-types.d.ts.map +1 -0
- package/dist/types/parallel-safety-types.js +3 -0
- package/dist/types/parallel-safety-types.js.map +1 -0
- package/dist/types/schema-generator.d.ts +61 -0
- package/dist/types/schema-generator.d.ts.map +1 -0
- package/dist/types/schema-generator.js +3 -0
- package/dist/types/schema-generator.js.map +1 -0
- package/dist/types/spec-cookbook-types.d.ts +45 -0
- package/dist/types/spec-cookbook-types.d.ts.map +1 -0
- package/dist/types/spec-cookbook-types.js +3 -0
- package/dist/types/spec-cookbook-types.js.map +1 -0
- package/dist/types/spec-diff-visual-types.d.ts +75 -0
- package/dist/types/spec-diff-visual-types.d.ts.map +1 -0
- package/dist/types/spec-diff-visual-types.js +3 -0
- package/dist/types/spec-diff-visual-types.js.map +1 -0
- package/dist/types/spec-hooks.d.ts +62 -0
- package/dist/types/spec-hooks.d.ts.map +1 -0
- package/dist/types/spec-hooks.js +3 -0
- package/dist/types/spec-hooks.js.map +1 -0
- package/dist/types/spec-lint.d.ts +79 -0
- package/dist/types/spec-lint.d.ts.map +1 -0
- package/dist/types/spec-lint.js +3 -0
- package/dist/types/spec-lint.js.map +1 -0
- package/dist/types/spec-scheduler.d.ts +58 -0
- package/dist/types/spec-scheduler.d.ts.map +1 -0
- package/dist/types/spec-scheduler.js +3 -0
- package/dist/types/spec-scheduler.js.map +1 -0
- package/dist/types/spec-source-types.d.ts +37 -0
- package/dist/types/spec-source-types.d.ts.map +1 -0
- package/dist/types/spec-source-types.js +3 -0
- package/dist/types/spec-source-types.js.map +1 -0
- package/dist/types/tech-debt.d.ts +66 -0
- package/dist/types/tech-debt.d.ts.map +1 -0
- package/dist/types/tech-debt.js +3 -0
- package/dist/types/tech-debt.js.map +1 -0
- package/dist/types/validation-loop.d.ts +39 -0
- package/dist/types/validation-loop.d.ts.map +1 -0
- package/dist/types/validation-loop.js +3 -0
- package/dist/types/validation-loop.js.map +1 -0
- package/dist/types/workspace-dashboard-types.d.ts +74 -0
- package/dist/types/workspace-dashboard-types.d.ts.map +1 -0
- package/dist/types/workspace-dashboard-types.js +3 -0
- package/dist/types/workspace-dashboard-types.js.map +1 -0
- package/package.json +2 -1
- package/src/config/license-plans.json +110 -9
- package/src/config/spec-cookbook.json +341 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DriftMonitorConfig, DriftAlertRule, DriftMonitorData } from '../types/index.js';
|
|
2
|
+
export declare function getDriftMonitorData(projectPath: string): Promise<DriftMonitorData>;
|
|
3
|
+
export declare function getDriftMonitorConfig(projectPath: string): Promise<DriftMonitorConfig | null>;
|
|
4
|
+
export declare function saveDriftMonitorConfig(projectPath: string, config: DriftMonitorConfig): Promise<void>;
|
|
5
|
+
export declare function getDriftAlertRules(projectPath: string): Promise<DriftAlertRule[]>;
|
|
6
|
+
export declare function saveDriftAlertRules(projectPath: string, rules: DriftAlertRule[]): Promise<void>;
|
|
7
|
+
export declare function updateLastReportAt(projectPath: string, timestamp: string): Promise<void>;
|
|
8
|
+
export declare function getLastReportAt(projectPath: string): Promise<string | undefined>;
|
|
9
|
+
//# sourceMappingURL=drift-monitor-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift-monitor-store.d.ts","sourceRoot":"","sources":["../../src/storage/drift-monitor-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAiB9F,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAExF;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAGpC;AAED,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAGvF;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,cAAc,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9F;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGtF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// storage/drift-monitor-store.ts — Drift Monitor persistence (SPEC-348)
|
|
2
|
+
// Layout: data/projects/{hash}/drift-monitor.json
|
|
3
|
+
import { readJson, writeJson, projectDataDir, hashProjectPath } from './base-store.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Helpers
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
function dataFile(projectPath) {
|
|
8
|
+
const projectId = hashProjectPath(projectPath);
|
|
9
|
+
return `${projectDataDir(projectId)}/drift-monitor.json`;
|
|
10
|
+
}
|
|
11
|
+
const DEFAULT_DATA = { config: null, rules: [] };
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Store functions
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
export async function getDriftMonitorData(projectPath) {
|
|
16
|
+
return readJson(dataFile(projectPath), DEFAULT_DATA);
|
|
17
|
+
}
|
|
18
|
+
export async function getDriftMonitorConfig(projectPath) {
|
|
19
|
+
const data = await getDriftMonitorData(projectPath);
|
|
20
|
+
return data.config;
|
|
21
|
+
}
|
|
22
|
+
export async function saveDriftMonitorConfig(projectPath, config) {
|
|
23
|
+
const data = await getDriftMonitorData(projectPath);
|
|
24
|
+
data.config = config;
|
|
25
|
+
await writeJson(dataFile(projectPath), data);
|
|
26
|
+
}
|
|
27
|
+
export async function getDriftAlertRules(projectPath) {
|
|
28
|
+
const data = await getDriftMonitorData(projectPath);
|
|
29
|
+
return data.rules;
|
|
30
|
+
}
|
|
31
|
+
export async function saveDriftAlertRules(projectPath, rules) {
|
|
32
|
+
const data = await getDriftMonitorData(projectPath);
|
|
33
|
+
data.rules = rules;
|
|
34
|
+
await writeJson(dataFile(projectPath), data);
|
|
35
|
+
}
|
|
36
|
+
export async function updateLastReportAt(projectPath, timestamp) {
|
|
37
|
+
const data = await getDriftMonitorData(projectPath);
|
|
38
|
+
data.lastReportAt = timestamp;
|
|
39
|
+
await writeJson(dataFile(projectPath), data);
|
|
40
|
+
}
|
|
41
|
+
export async function getLastReportAt(projectPath) {
|
|
42
|
+
const data = await getDriftMonitorData(projectPath);
|
|
43
|
+
return data.lastReportAt;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=drift-monitor-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift-monitor-store.js","sourceRoot":"","sources":["../../src/storage/drift-monitor-store.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,kDAAkD;AAElD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,WAAmB;IACnC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC3D,CAAC;AAED,MAAM,YAAY,GAAqB,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAEnE,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,OAAO,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB;IAEnB,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,MAA0B;IAE1B,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,KAAuB;IAEvB,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,SAAiB;IAC7E,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAC9B,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MondayConfig, MondayDelivery, SyncedMondayItem } from '../types/index.js';
|
|
2
|
+
export declare function getMondayConfig(projectPath: string): Promise<MondayConfig | null>;
|
|
3
|
+
export declare function saveMondayConfig(projectPath: string, config: MondayConfig): Promise<void>;
|
|
4
|
+
export declare function removeMondayConfig(projectPath: string): Promise<void>;
|
|
5
|
+
export declare function getMondaySyncMap(projectPath: string): Promise<Record<string, SyncedMondayItem>>;
|
|
6
|
+
export declare function upsertMondayItem(projectPath: string, item: SyncedMondayItem): Promise<void>;
|
|
7
|
+
export declare function getMondaySyncLog(projectPath: string): Promise<MondayDelivery[]>;
|
|
8
|
+
export declare function appendMondayDelivery(projectPath: string, entry: MondayDelivery): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=monday-config-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monday-config-store.d.ts","sourceRoot":"","sources":["../../src/storage/monday-config-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqBxF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAEvF;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAE3C;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjG;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAErF;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// storage/monday-config-store.ts — Monday.com integration persistence (SPEC-358)
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { hashProjectPath, readJson, writeJson } from './base-store.js';
|
|
4
|
+
import { withFileLock } from './file-mutex.js';
|
|
5
|
+
const MAX_LOG_ENTRIES = 20;
|
|
6
|
+
function projectDir(projectPath) {
|
|
7
|
+
const id = hashProjectPath(projectPath);
|
|
8
|
+
return join('data', 'projects', id);
|
|
9
|
+
}
|
|
10
|
+
function configPath(projectPath) {
|
|
11
|
+
return join(projectDir(projectPath), 'monday-config.json');
|
|
12
|
+
}
|
|
13
|
+
function syncPath(projectPath) {
|
|
14
|
+
return join(projectDir(projectPath), 'monday-sync.json');
|
|
15
|
+
}
|
|
16
|
+
function logPath(projectPath) {
|
|
17
|
+
return join(projectDir(projectPath), 'monday-sync-log.json');
|
|
18
|
+
}
|
|
19
|
+
export async function getMondayConfig(projectPath) {
|
|
20
|
+
return readJson(configPath(projectPath), null);
|
|
21
|
+
}
|
|
22
|
+
export async function saveMondayConfig(projectPath, config) {
|
|
23
|
+
await writeJson(configPath(projectPath), config);
|
|
24
|
+
}
|
|
25
|
+
export async function removeMondayConfig(projectPath) {
|
|
26
|
+
await writeJson(configPath(projectPath), null);
|
|
27
|
+
await writeJson(syncPath(projectPath), {});
|
|
28
|
+
}
|
|
29
|
+
export async function getMondaySyncMap(projectPath) {
|
|
30
|
+
return readJson(syncPath(projectPath), {});
|
|
31
|
+
}
|
|
32
|
+
export async function upsertMondayItem(projectPath, item) {
|
|
33
|
+
const filePath = syncPath(projectPath);
|
|
34
|
+
await withFileLock(filePath, async () => {
|
|
35
|
+
const map = await readJson(filePath, {});
|
|
36
|
+
map[item.specId] = item;
|
|
37
|
+
await writeJson(filePath, map);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export async function getMondaySyncLog(projectPath) {
|
|
41
|
+
return readJson(logPath(projectPath), []);
|
|
42
|
+
}
|
|
43
|
+
export async function appendMondayDelivery(projectPath, entry) {
|
|
44
|
+
const filePath = logPath(projectPath);
|
|
45
|
+
await withFileLock(filePath, async () => {
|
|
46
|
+
const entries = await readJson(filePath, []);
|
|
47
|
+
entries.push(entry);
|
|
48
|
+
await writeJson(filePath, entries.slice(-MAX_LOG_ENTRIES));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=monday-config-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monday-config-store.js","sourceRoot":"","sources":["../../src/storage/monday-config-store.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,SAAS,UAAU,CAAC,WAAmB;IACrC,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,WAAmB;IACnC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,OAAO,CAAC,WAAmB;IAClC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,OAAO,QAAQ,CAAsB,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,MAAoB;IAC9E,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB;IAEnB,OAAO,QAAQ,CAAmC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAsB;IAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAmC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3E,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACxB,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,OAAO,QAAQ,CAAmB,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,KAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAmB,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { NotionConfig, NotionDelivery, SyncedNotionPage } from '../types/index.js';
|
|
2
|
+
export declare function getNotionConfig(projectPath: string): Promise<NotionConfig | null>;
|
|
3
|
+
export declare function saveNotionConfig(projectPath: string, config: NotionConfig): Promise<void>;
|
|
4
|
+
export declare function removeNotionConfig(projectPath: string): Promise<void>;
|
|
5
|
+
export declare function getNotionSyncMap(projectPath: string): Promise<Record<string, SyncedNotionPage>>;
|
|
6
|
+
export declare function upsertNotionPage(projectPath: string, page: SyncedNotionPage): Promise<void>;
|
|
7
|
+
export declare function getNotionSyncLog(projectPath: string): Promise<NotionDelivery[]>;
|
|
8
|
+
export declare function appendNotionDelivery(projectPath: string, entry: NotionDelivery): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=notion-config-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notion-config-store.d.ts","sourceRoot":"","sources":["../../src/storage/notion-config-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAqBxF,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAEvF;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3E;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAE3C;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOjG;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAErF;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// storage/notion-config-store.ts — Notion integration persistence (SPEC-356)
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { hashProjectPath, readJson, writeJson } from './base-store.js';
|
|
4
|
+
import { withFileLock } from './file-mutex.js';
|
|
5
|
+
const MAX_LOG_ENTRIES = 20;
|
|
6
|
+
function projectDir(projectPath) {
|
|
7
|
+
const id = hashProjectPath(projectPath);
|
|
8
|
+
return join('data', 'projects', id);
|
|
9
|
+
}
|
|
10
|
+
function configPath(projectPath) {
|
|
11
|
+
return join(projectDir(projectPath), 'notion-config.json');
|
|
12
|
+
}
|
|
13
|
+
function syncPath(projectPath) {
|
|
14
|
+
return join(projectDir(projectPath), 'notion-sync.json');
|
|
15
|
+
}
|
|
16
|
+
function logPath(projectPath) {
|
|
17
|
+
return join(projectDir(projectPath), 'notion-sync-log.json');
|
|
18
|
+
}
|
|
19
|
+
export async function getNotionConfig(projectPath) {
|
|
20
|
+
return readJson(configPath(projectPath), null);
|
|
21
|
+
}
|
|
22
|
+
export async function saveNotionConfig(projectPath, config) {
|
|
23
|
+
await writeJson(configPath(projectPath), config);
|
|
24
|
+
}
|
|
25
|
+
export async function removeNotionConfig(projectPath) {
|
|
26
|
+
await writeJson(configPath(projectPath), null);
|
|
27
|
+
await writeJson(syncPath(projectPath), {});
|
|
28
|
+
}
|
|
29
|
+
export async function getNotionSyncMap(projectPath) {
|
|
30
|
+
return readJson(syncPath(projectPath), {});
|
|
31
|
+
}
|
|
32
|
+
export async function upsertNotionPage(projectPath, page) {
|
|
33
|
+
const filePath = syncPath(projectPath);
|
|
34
|
+
await withFileLock(filePath, async () => {
|
|
35
|
+
const map = await readJson(filePath, {});
|
|
36
|
+
map[page.specId] = page;
|
|
37
|
+
await writeJson(filePath, map);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
export async function getNotionSyncLog(projectPath) {
|
|
41
|
+
return readJson(logPath(projectPath), []);
|
|
42
|
+
}
|
|
43
|
+
export async function appendNotionDelivery(projectPath, entry) {
|
|
44
|
+
const filePath = logPath(projectPath);
|
|
45
|
+
await withFileLock(filePath, async () => {
|
|
46
|
+
const entries = await readJson(filePath, []);
|
|
47
|
+
entries.push(entry);
|
|
48
|
+
await writeJson(filePath, entries.slice(-MAX_LOG_ENTRIES));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=notion-config-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notion-config-store.js","sourceRoot":"","sources":["../../src/storage/notion-config-store.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,SAAS,UAAU,CAAC,WAAmB;IACrC,MAAM,EAAE,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB;IACrC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,WAAmB;IACnC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,OAAO,CAAC,WAAmB;IAClC,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,OAAO,QAAQ,CAAsB,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,MAAoB;IAC9E,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,WAAmB;IAEnB,OAAO,QAAQ,CAAmC,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAsB;IAChF,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAmC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC3E,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACxB,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,OAAO,QAAQ,CAAmB,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,WAAmB,EACnB,KAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,YAAY,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAmB,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { OnboardingConfig } from '../types/index.js';
|
|
2
|
+
export declare function getOnboardingConfig(projectId: string): Promise<OnboardingConfig | null>;
|
|
3
|
+
export declare function saveOnboardingConfig(projectId: string, config: OnboardingConfig): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=onboarding-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding-store.d.ts","sourceRoot":"","sources":["../../src/storage/onboarding-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAG7F;AAED,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// storage/onboarding-store.ts — SPEC-360: Persist onboarding config per project.
|
|
2
|
+
// Persistence file: data/projects/{hash}/onboarding.json
|
|
3
|
+
import { readJson, writeJson, projectDataDir } from './base-store.js';
|
|
4
|
+
function onboardingFile(projectId) {
|
|
5
|
+
return `${projectDataDir(projectId)}/onboarding.json`;
|
|
6
|
+
}
|
|
7
|
+
export async function getOnboardingConfig(projectId) {
|
|
8
|
+
const result = await readJson(onboardingFile(projectId), null);
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
export async function saveOnboardingConfig(projectId, config) {
|
|
12
|
+
await writeJson(onboardingFile(projectId), config);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=onboarding-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding-store.js","sourceRoot":"","sources":["../../src/storage/onboarding-store.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,yDAAyD;AAGzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtE,SAAS,cAAc,CAAC,SAAiB;IACvC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IACzD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAA0B,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAiB,EACjB,MAAwB;IAExB,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AuditRetentionPolicy } from '../types/index.js';
|
|
2
|
+
export declare function loadRetentionPolicy(projectPath: string): Promise<AuditRetentionPolicy>;
|
|
3
|
+
export declare function saveRetentionPolicy(projectPath: string, policy: AuditRetentionPolicy): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=retention-policy-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention-policy-store.d.ts","sourceRoot":"","sources":["../../src/storage/retention-policy-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAc9D,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAE5F;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// storage/retention-policy-store.ts — SPEC-371: Persists data retention policy
|
|
2
|
+
// Layout: data/projects/{hash}/retention-policy.json
|
|
3
|
+
import { readJson, writeJson, projectDataDir, hashProjectPath } from './base-store.js';
|
|
4
|
+
const DEFAULT_POLICY = {
|
|
5
|
+
retentionDays: 365,
|
|
6
|
+
autoDelete: false,
|
|
7
|
+
notifyBeforeDeleteDays: 7,
|
|
8
|
+
updatedAt: new Date().toISOString(),
|
|
9
|
+
};
|
|
10
|
+
function policyFile(projectPath) {
|
|
11
|
+
const projectId = hashProjectPath(projectPath);
|
|
12
|
+
return `${projectDataDir(projectId)}/retention-policy.json`;
|
|
13
|
+
}
|
|
14
|
+
export async function loadRetentionPolicy(projectPath) {
|
|
15
|
+
return readJson(policyFile(projectPath), { ...DEFAULT_POLICY });
|
|
16
|
+
}
|
|
17
|
+
export async function saveRetentionPolicy(projectPath, policy) {
|
|
18
|
+
await writeJson(policyFile(projectPath), { ...policy, updatedAt: new Date().toISOString() });
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=retention-policy-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retention-policy-store.js","sourceRoot":"","sources":["../../src/storage/retention-policy-store.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qDAAqD;AAErD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvF,MAAM,cAAc,GAAyB;IAC3C,aAAa,EAAE,GAAG;IAClB,UAAU,EAAE,KAAK;IACjB,sBAAsB,EAAE,CAAC;IACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;CACpC,CAAC;AAEF,SAAS,UAAU,CAAC,WAAmB;IACrC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,wBAAwB,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IAC3D,OAAO,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,MAA4B;IAE5B,MAAM,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/F,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SpecBinding } from '../types/index.js';
|
|
2
|
+
export declare function getAllBindings(projectPath: string): Promise<SpecBinding[]>;
|
|
3
|
+
export declare function saveAllBindings(projectPath: string, bindings: SpecBinding[]): Promise<void>;
|
|
4
|
+
export declare function getBinding(projectPath: string, id: string): Promise<SpecBinding | null>;
|
|
5
|
+
export declare function upsertBinding(projectPath: string, binding: SpecBinding): Promise<void>;
|
|
6
|
+
export declare function removeBinding(projectPath: string, id: string): Promise<void>;
|
|
7
|
+
export declare function getBindingsForSpec(projectPath: string, specId: string): Promise<SpecBinding[]>;
|
|
8
|
+
//# sourceMappingURL=spec-bindings-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-bindings-store.d.ts","sourceRoot":"","sources":["../../src/storage/spec-bindings-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAerD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAEhF;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjG;AAED,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAG7F;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5F;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIlF;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,EAAE,CAAC,CAGxB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// storage/spec-bindings-store.ts — Spec bindings persistence (SPEC-349)
|
|
2
|
+
// Layout: data/projects/{hash}/spec-bindings.json
|
|
3
|
+
import { readJson, writeJson, projectDataDir, hashProjectPath } from './base-store.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Helpers
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
function dataFile(projectPath) {
|
|
8
|
+
const projectId = hashProjectPath(projectPath);
|
|
9
|
+
return `${projectDataDir(projectId)}/spec-bindings.json`;
|
|
10
|
+
}
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Store functions
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
export async function getAllBindings(projectPath) {
|
|
15
|
+
return readJson(dataFile(projectPath), []);
|
|
16
|
+
}
|
|
17
|
+
export async function saveAllBindings(projectPath, bindings) {
|
|
18
|
+
await writeJson(dataFile(projectPath), bindings);
|
|
19
|
+
}
|
|
20
|
+
export async function getBinding(projectPath, id) {
|
|
21
|
+
const bindings = await getAllBindings(projectPath);
|
|
22
|
+
return bindings.find((b) => b.id === id) ?? null;
|
|
23
|
+
}
|
|
24
|
+
export async function upsertBinding(projectPath, binding) {
|
|
25
|
+
const bindings = await getAllBindings(projectPath);
|
|
26
|
+
const idx = bindings.findIndex((b) => b.id === binding.id);
|
|
27
|
+
if (idx >= 0) {
|
|
28
|
+
bindings[idx] = binding;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
bindings.push(binding);
|
|
32
|
+
}
|
|
33
|
+
await saveAllBindings(projectPath, bindings);
|
|
34
|
+
}
|
|
35
|
+
export async function removeBinding(projectPath, id) {
|
|
36
|
+
const bindings = await getAllBindings(projectPath);
|
|
37
|
+
const filtered = bindings.filter((b) => b.id !== id);
|
|
38
|
+
await saveAllBindings(projectPath, filtered);
|
|
39
|
+
}
|
|
40
|
+
export async function getBindingsForSpec(projectPath, specId) {
|
|
41
|
+
const bindings = await getAllBindings(projectPath);
|
|
42
|
+
return bindings.filter((b) => b.specId === specId);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=spec-bindings-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-bindings-store.js","sourceRoot":"","sources":["../../src/storage/spec-bindings-store.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,kDAAkD;AAElD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,QAAQ,CAAC,WAAmB;IACnC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,qBAAqB,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,OAAO,QAAQ,CAAgB,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,QAAuB;IAChF,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,EAAU;IAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,OAAoB;IAC3E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,EAAU;IACjE,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,MAAM,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SpecHook, SpecHooksConfig } from '../types/index.js';
|
|
2
|
+
export declare function loadSpecHooks(projectPath: string): Promise<SpecHooksConfig>;
|
|
3
|
+
export declare function saveSpecHooks(projectPath: string, config: SpecHooksConfig): Promise<void>;
|
|
4
|
+
export declare function addSpecHook(projectPath: string, hook: SpecHook): Promise<void>;
|
|
5
|
+
export declare function getSpecHook(projectPath: string, hookName: string): Promise<SpecHook | null>;
|
|
6
|
+
export declare function updateSpecHookEnabled(projectPath: string, hookName: string, enabled: boolean): Promise<boolean>;
|
|
7
|
+
export declare function updateSpecHookStats(projectPath: string, hookName: string, success: boolean): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=spec-hooks-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-hooks-store.d.ts","sourceRoot":"","sources":["../../src/storage/spec-hooks-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOnE,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAKjF;AAED,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpF;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAGjG;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// storage/spec-hooks-store.ts — SPEC-368: Persists spec lifecycle hooks
|
|
2
|
+
// Layout: data/projects/{hash}/spec-hooks.json
|
|
3
|
+
import { readJson, writeJson, projectDataDir, hashProjectPath } from './base-store.js';
|
|
4
|
+
function hooksFile(projectPath) {
|
|
5
|
+
const projectId = hashProjectPath(projectPath);
|
|
6
|
+
return `${projectDataDir(projectId)}/spec-hooks.json`;
|
|
7
|
+
}
|
|
8
|
+
export async function loadSpecHooks(projectPath) {
|
|
9
|
+
return readJson(hooksFile(projectPath), {
|
|
10
|
+
hooks: [],
|
|
11
|
+
updatedAt: new Date().toISOString(),
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export async function saveSpecHooks(projectPath, config) {
|
|
15
|
+
await writeJson(hooksFile(projectPath), { ...config, updatedAt: new Date().toISOString() });
|
|
16
|
+
}
|
|
17
|
+
export async function addSpecHook(projectPath, hook) {
|
|
18
|
+
const config = await loadSpecHooks(projectPath);
|
|
19
|
+
const hooks = [...config.hooks];
|
|
20
|
+
const existing = hooks.findIndex((h) => h.name === hook.name);
|
|
21
|
+
if (existing >= 0) {
|
|
22
|
+
hooks[existing] = hook;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
hooks.push(hook);
|
|
26
|
+
}
|
|
27
|
+
await saveSpecHooks(projectPath, { ...config, hooks });
|
|
28
|
+
}
|
|
29
|
+
export async function getSpecHook(projectPath, hookName) {
|
|
30
|
+
const config = await loadSpecHooks(projectPath);
|
|
31
|
+
return config.hooks.find((h) => h.name === hookName) ?? null;
|
|
32
|
+
}
|
|
33
|
+
export async function updateSpecHookEnabled(projectPath, hookName, enabled) {
|
|
34
|
+
const config = await loadSpecHooks(projectPath);
|
|
35
|
+
const hook = config.hooks.find((h) => h.name === hookName);
|
|
36
|
+
if (!hook) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
hook.enabled = enabled;
|
|
40
|
+
await saveSpecHooks(projectPath, config);
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
export async function updateSpecHookStats(projectPath, hookName, success) {
|
|
44
|
+
const config = await loadSpecHooks(projectPath);
|
|
45
|
+
const hook = config.hooks.find((h) => h.name === hookName);
|
|
46
|
+
if (!hook) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
hook.runCount += 1;
|
|
50
|
+
if (!success) {
|
|
51
|
+
hook.failCount += 1;
|
|
52
|
+
}
|
|
53
|
+
hook.lastRunAt = new Date().toISOString();
|
|
54
|
+
await saveSpecHooks(projectPath, config);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=spec-hooks-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-hooks-store.js","sourceRoot":"","sources":["../../src/storage/spec-hooks-store.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,+CAA+C;AAE/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvF,SAAS,SAAS,CAAC,WAAmB;IACpC,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,OAAO,QAAQ,CAAkB,SAAS,CAAC,WAAW,CAAC,EAAE;QACvD,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,MAAuB;IAC9E,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,IAAc;IACnE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,MAAM,aAAa,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,QAAgB;IACrE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,QAAgB,EAChB,OAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,MAAM,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,QAAgB,EAChB,OAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IACnB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LintRule } from '../types/index.js';
|
|
2
|
+
export declare function loadLintRules(projectPath: string): Promise<LintRule[]>;
|
|
3
|
+
export declare function saveLintRule(projectPath: string, rule: LintRule): Promise<void>;
|
|
4
|
+
export declare function deleteLintRule(projectPath: string, ruleId: string): Promise<boolean>;
|
|
5
|
+
//# sourceMappingURL=spec-lint-rules-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-lint-rules-store.d.ts","sourceRoot":"","sources":["../../src/storage/spec-lint-rules-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,mBAAmB,CAAC;AAQjE,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAI5E;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrF;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAY1F"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// storage/spec-lint-rules-store.ts — Persists custom lint rules (SPEC-364)
|
|
2
|
+
// Layout: data/projects/{hash}/lint-rules.json
|
|
3
|
+
import { readJson, writeJson, projectDataDir, hashProjectPath } from './base-store.js';
|
|
4
|
+
function lintRulesFile(projectId) {
|
|
5
|
+
return `${projectDataDir(projectId)}/lint-rules.json`;
|
|
6
|
+
}
|
|
7
|
+
const DEFAULT_DATA = { rules: [], updatedAt: new Date().toISOString() };
|
|
8
|
+
export async function loadLintRules(projectPath) {
|
|
9
|
+
const projectId = hashProjectPath(projectPath);
|
|
10
|
+
const data = await readJson(lintRulesFile(projectId), DEFAULT_DATA);
|
|
11
|
+
return data.rules;
|
|
12
|
+
}
|
|
13
|
+
export async function saveLintRule(projectPath, rule) {
|
|
14
|
+
const projectId = hashProjectPath(projectPath);
|
|
15
|
+
const filePath = lintRulesFile(projectId);
|
|
16
|
+
const data = await readJson(filePath, DEFAULT_DATA);
|
|
17
|
+
const idx = data.rules.findIndex((r) => r.id === rule.id);
|
|
18
|
+
if (idx >= 0) {
|
|
19
|
+
data.rules[idx] = rule;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
data.rules.push(rule);
|
|
23
|
+
}
|
|
24
|
+
data.updatedAt = new Date().toISOString();
|
|
25
|
+
await writeJson(filePath, data);
|
|
26
|
+
}
|
|
27
|
+
export async function deleteLintRule(projectPath, ruleId) {
|
|
28
|
+
const projectId = hashProjectPath(projectPath);
|
|
29
|
+
const filePath = lintRulesFile(projectId);
|
|
30
|
+
const data = await readJson(filePath, DEFAULT_DATA);
|
|
31
|
+
const before = data.rules.length;
|
|
32
|
+
data.rules = data.rules.filter((r) => r.id !== ruleId);
|
|
33
|
+
if (data.rules.length === before) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
data.updatedAt = new Date().toISOString();
|
|
37
|
+
await writeJson(filePath, data);
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=spec-lint-rules-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-lint-rules-store.js","sourceRoot":"","sources":["../../src/storage/spec-lint-rules-store.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+CAA+C;AAE/C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvF,SAAS,aAAa,CAAC,SAAiB;IACtC,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACxD,CAAC;AAED,MAAM,YAAY,GAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;AAEvF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACrD,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB,EAAE,IAAc;IACpE,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,MAAc;IACtE,MAAM,SAAS,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TechDebtEntry, TechDebtConfig } from '../types/index.js';
|
|
2
|
+
/** Load all tech debt items for a project. */
|
|
3
|
+
export declare function loadTechDebt(projectPath: string): Promise<TechDebtEntry[]>;
|
|
4
|
+
/** Save a new tech debt item (appends). */
|
|
5
|
+
export declare function saveTechDebtEntry(projectPath: string, item: TechDebtEntry): Promise<void>;
|
|
6
|
+
/** Update a single tech debt item by ID. Returns updated item or null. */
|
|
7
|
+
export declare function updateTechDebtEntry(projectPath: string, id: string, patch: Partial<TechDebtEntry>): Promise<TechDebtEntry | null>;
|
|
8
|
+
/** Load tech debt config. */
|
|
9
|
+
export declare function loadTechDebtConfig(projectPath: string): Promise<TechDebtConfig>;
|
|
10
|
+
/** Save tech debt config. */
|
|
11
|
+
export declare function saveTechDebtConfig(projectPath: string, config: TechDebtConfig): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=tech-debt-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-debt-store.d.ts","sourceRoot":"","sources":["../../src/storage/tech-debt-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAcvE,8CAA8C;AAC9C,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAEhF;AAED,2CAA2C;AAC3C,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/F;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAc/B;AAED,6BAA6B;AAC7B,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAErF;AAED,6BAA6B;AAC7B,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readJson, writeJson, hashProjectPath } from './base-store.js';
|
|
2
|
+
import { withFileLock } from './file-mutex.js';
|
|
3
|
+
function debtFile(projectPath) {
|
|
4
|
+
const hash = hashProjectPath(projectPath);
|
|
5
|
+
return `data/projects/${hash}/tech-debt.json`;
|
|
6
|
+
}
|
|
7
|
+
function configFile(projectPath) {
|
|
8
|
+
const hash = hashProjectPath(projectPath);
|
|
9
|
+
return `data/projects/${hash}/tech-debt-config.json`;
|
|
10
|
+
}
|
|
11
|
+
/** Load all tech debt items for a project. */
|
|
12
|
+
export async function loadTechDebt(projectPath) {
|
|
13
|
+
return readJson(debtFile(projectPath), []);
|
|
14
|
+
}
|
|
15
|
+
/** Save a new tech debt item (appends). */
|
|
16
|
+
export async function saveTechDebtEntry(projectPath, item) {
|
|
17
|
+
const file = debtFile(projectPath);
|
|
18
|
+
await withFileLock(file, async () => {
|
|
19
|
+
const existing = await readJson(file, []);
|
|
20
|
+
existing.push(item);
|
|
21
|
+
await writeJson(file, existing);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** Update a single tech debt item by ID. Returns updated item or null. */
|
|
25
|
+
export async function updateTechDebtEntry(projectPath, id, patch) {
|
|
26
|
+
const file = debtFile(projectPath);
|
|
27
|
+
let result = null;
|
|
28
|
+
await withFileLock(file, async () => {
|
|
29
|
+
const existing = await readJson(file, []);
|
|
30
|
+
const idx = existing.findIndex((i) => i.id === id);
|
|
31
|
+
if (idx === -1) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
existing[idx] = { ...existing[idx], ...patch };
|
|
35
|
+
await writeJson(file, existing);
|
|
36
|
+
result = existing[idx] ?? null;
|
|
37
|
+
});
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
/** Load tech debt config. */
|
|
41
|
+
export async function loadTechDebtConfig(projectPath) {
|
|
42
|
+
return readJson(configFile(projectPath), {});
|
|
43
|
+
}
|
|
44
|
+
/** Save tech debt config. */
|
|
45
|
+
export async function saveTechDebtConfig(projectPath, config) {
|
|
46
|
+
const file = configFile(projectPath);
|
|
47
|
+
await withFileLock(file, async () => {
|
|
48
|
+
await writeJson(file, config);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=tech-debt-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tech-debt-store.js","sourceRoot":"","sources":["../../src/storage/tech-debt-store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,SAAS,QAAQ,CAAC,WAAmB;IACnC,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,iBAAiB,IAAI,iBAAiB,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,WAAmB;IACrC,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,iBAAiB,IAAI,wBAAwB,CAAC;AACvD,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,OAAO,QAAQ,CAAkB,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAmB;IAC9E,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,MAAM,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAkB,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3D,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,EAAU,EACV,KAA6B;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IACnC,IAAI,MAAM,GAAyB,IAAI,CAAC;IACxC,MAAM,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAkB,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,EAAmB,CAAC;QAChE,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,OAAO,QAAQ,CAAiB,UAAU,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,6BAA6B;AAC7B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,MAAsB;IAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACrC,MAAM,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QAClC,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WebhookServerConfig } from '../types/index.js';
|
|
2
|
+
export declare function getWebhookServerConfig(): Promise<WebhookServerConfig | null>;
|
|
3
|
+
export declare function saveWebhookServerConfig(config: WebhookServerConfig): Promise<void>;
|
|
4
|
+
export declare function removeWebhookServerConfig(): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=webhook-server-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-server-store.d.ts","sourceRoot":"","sources":["../../src/storage/webhook-server-store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAI7D,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAElF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAExF;AAED,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/D"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// storage/webhook-server-store.ts — Incoming webhook server config persistence (SPEC-359)
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { readJson, writeJson } from './base-store.js';
|
|
4
|
+
const GLOBAL_CONFIG_PATH = join('data', 'global', 'webhook-server.json');
|
|
5
|
+
export async function getWebhookServerConfig() {
|
|
6
|
+
return readJson(GLOBAL_CONFIG_PATH, null);
|
|
7
|
+
}
|
|
8
|
+
export async function saveWebhookServerConfig(config) {
|
|
9
|
+
await writeJson(GLOBAL_CONFIG_PATH, config);
|
|
10
|
+
}
|
|
11
|
+
export async function removeWebhookServerConfig() {
|
|
12
|
+
await writeJson(GLOBAL_CONFIG_PATH, null);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=webhook-server-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-server-store.js","sourceRoot":"","sources":["../../src/storage/webhook-server-store.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,OAAO,QAAQ,CAA6B,kBAAkB,EAAE,IAAI,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAA2B;IACvE,MAAM,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ToolResult, ConfigureAsanaInput, SyncToAsanaInput, AsanaStatusInput, RemoveAsanaInput } from '../types/index.js';
|
|
2
|
+
export declare function handleConfigureAsana(input: ConfigureAsanaInput): Promise<ToolResult>;
|
|
3
|
+
export declare function handleSyncToAsana(input: SyncToAsanaInput): Promise<ToolResult>;
|
|
4
|
+
export declare function handleAsanaStatus(input: AsanaStatusInput): Promise<ToolResult>;
|
|
5
|
+
export declare function handleRemoveAsana(input: RemoveAsanaInput): Promise<ToolResult>;
|
|
6
|
+
//# sourceMappingURL=asana-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asana-handler.d.ts","sourceRoot":"","sources":["../../src/tools/asana-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAGjB,MAAM,mBAAmB,CAAC;AAkB3B,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA+B1F;AAMD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsGpF;AAMD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2CpF;AAMD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAapF"}
|