@planu/cli 0.91.0 → 0.92.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/domain-best-practices.json +413 -0
- package/dist/config/ide-registry.json +25 -0
- package/dist/config/license-plans.json +59 -2
- package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.d.ts +11 -0
- package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.d.ts.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.js +52 -0
- package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.js.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.d.ts +11 -0
- package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.d.ts.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.js +89 -0
- package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.js.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/index.d.ts +4 -0
- package/dist/engine/ai-integration/agent-frameworks/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/index.js +5 -0
- package/dist/engine/ai-integration/agent-frameworks/index.js.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.d.ts +11 -0
- package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.d.ts.map +1 -0
- package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.js +71 -0
- package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.js.map +1 -0
- package/dist/engine/ai-integration/agents-md/generator.d.ts +11 -0
- package/dist/engine/ai-integration/agents-md/generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/agents-md/generator.js +139 -0
- package/dist/engine/ai-integration/agents-md/generator.js.map +1 -0
- package/dist/engine/ai-integration/agents-md/index.d.ts +3 -0
- package/dist/engine/ai-integration/agents-md/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/agents-md/index.js +4 -0
- package/dist/engine/ai-integration/agents-md/index.js.map +1 -0
- package/dist/engine/ai-integration/agents-md/updater.d.ts +10 -0
- package/dist/engine/ai-integration/agents-md/updater.d.ts.map +1 -0
- package/dist/engine/ai-integration/agents-md/updater.js +33 -0
- package/dist/engine/ai-integration/agents-md/updater.js.map +1 -0
- package/dist/engine/ai-integration/aider/aider-config-generator.d.ts +5 -0
- package/dist/engine/ai-integration/aider/aider-config-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/aider/aider-config-generator.js +34 -0
- package/dist/engine/ai-integration/aider/aider-config-generator.js.map +1 -0
- package/dist/engine/ai-integration/cline/clinerules-generator.d.ts +5 -0
- package/dist/engine/ai-integration/cline/clinerules-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/cline/clinerules-generator.js +86 -0
- package/dist/engine/ai-integration/cline/clinerules-generator.js.map +1 -0
- package/dist/engine/ai-integration/cline/index.d.ts +3 -0
- package/dist/engine/ai-integration/cline/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/cline/index.js +3 -0
- package/dist/engine/ai-integration/cline/index.js.map +1 -0
- package/dist/engine/ai-integration/codex/agent-roles-generator.d.ts +12 -0
- package/dist/engine/ai-integration/codex/agent-roles-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/codex/agent-roles-generator.js +62 -0
- package/dist/engine/ai-integration/codex/agent-roles-generator.js.map +1 -0
- package/dist/engine/ai-integration/codex/agents-md-generator.d.ts +10 -0
- package/dist/engine/ai-integration/codex/agents-md-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/codex/agents-md-generator.js +114 -0
- package/dist/engine/ai-integration/codex/agents-md-generator.js.map +1 -0
- package/dist/engine/ai-integration/codex/config-generator.d.ts +9 -0
- package/dist/engine/ai-integration/codex/config-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/codex/config-generator.js +66 -0
- package/dist/engine/ai-integration/codex/config-generator.js.map +1 -0
- package/dist/engine/ai-integration/codex/hooks-generator.d.ts +6 -0
- package/dist/engine/ai-integration/codex/hooks-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/codex/hooks-generator.js +55 -0
- package/dist/engine/ai-integration/codex/hooks-generator.js.map +1 -0
- package/dist/engine/ai-integration/codex/index.d.ts +5 -0
- package/dist/engine/ai-integration/codex/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/codex/index.js +6 -0
- package/dist/engine/ai-integration/codex/index.js.map +1 -0
- package/dist/engine/ai-integration/continue/ai-checks-generator.d.ts +12 -0
- package/dist/engine/ai-integration/continue/ai-checks-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/continue/ai-checks-generator.js +63 -0
- package/dist/engine/ai-integration/continue/ai-checks-generator.js.map +1 -0
- package/dist/engine/ai-integration/continue/config-generator.d.ts +5 -0
- package/dist/engine/ai-integration/continue/config-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/continue/config-generator.js +56 -0
- package/dist/engine/ai-integration/continue/config-generator.js.map +1 -0
- package/dist/engine/ai-integration/continue/index.d.ts +5 -0
- package/dist/engine/ai-integration/continue/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/continue/index.js +4 -0
- package/dist/engine/ai-integration/continue/index.js.map +1 -0
- package/dist/engine/ai-integration/cursor/cursorrules-generator.d.ts +5 -0
- package/dist/engine/ai-integration/cursor/cursorrules-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/cursor/cursorrules-generator.js +75 -0
- package/dist/engine/ai-integration/cursor/cursorrules-generator.js.map +1 -0
- package/dist/engine/ai-integration/detector.d.ts +5 -0
- package/dist/engine/ai-integration/detector.d.ts.map +1 -0
- package/dist/engine/ai-integration/detector.js +127 -0
- package/dist/engine/ai-integration/detector.js.map +1 -0
- package/dist/engine/ai-integration/gemini/extensions-advisor.d.ts +4 -0
- package/dist/engine/ai-integration/gemini/extensions-advisor.d.ts.map +1 -0
- package/dist/engine/ai-integration/gemini/extensions-advisor.js +64 -0
- package/dist/engine/ai-integration/gemini/extensions-advisor.js.map +1 -0
- package/dist/engine/ai-integration/gemini/gemini-md-generator.d.ts +4 -0
- package/dist/engine/ai-integration/gemini/gemini-md-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/gemini/gemini-md-generator.js +94 -0
- package/dist/engine/ai-integration/gemini/gemini-md-generator.js.map +1 -0
- package/dist/engine/ai-integration/gemini/index.d.ts +5 -0
- package/dist/engine/ai-integration/gemini/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/gemini/index.js +6 -0
- package/dist/engine/ai-integration/gemini/index.js.map +1 -0
- package/dist/engine/ai-integration/gemini/policy-generator.d.ts +6 -0
- package/dist/engine/ai-integration/gemini/policy-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/gemini/policy-generator.js +63 -0
- package/dist/engine/ai-integration/gemini/policy-generator.js.map +1 -0
- package/dist/engine/ai-integration/gemini/settings-generator.d.ts +4 -0
- package/dist/engine/ai-integration/gemini/settings-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/gemini/settings-generator.js +191 -0
- package/dist/engine/ai-integration/gemini/settings-generator.js.map +1 -0
- package/dist/engine/ai-integration/github-copilot/index.d.ts +4 -0
- package/dist/engine/ai-integration/github-copilot/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/github-copilot/index.js +5 -0
- package/dist/engine/ai-integration/github-copilot/index.js.map +1 -0
- package/dist/engine/ai-integration/github-copilot/instructions-generator.d.ts +5 -0
- package/dist/engine/ai-integration/github-copilot/instructions-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/github-copilot/instructions-generator.js +102 -0
- package/dist/engine/ai-integration/github-copilot/instructions-generator.js.map +1 -0
- package/dist/engine/ai-integration/github-copilot/prompt-files-generator.d.ts +11 -0
- package/dist/engine/ai-integration/github-copilot/prompt-files-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/github-copilot/prompt-files-generator.js +86 -0
- package/dist/engine/ai-integration/github-copilot/prompt-files-generator.js.map +1 -0
- package/dist/engine/ai-integration/github-copilot/workspace-bridge.d.ts +3 -0
- package/dist/engine/ai-integration/github-copilot/workspace-bridge.d.ts.map +1 -0
- package/dist/engine/ai-integration/github-copilot/workspace-bridge.js +39 -0
- package/dist/engine/ai-integration/github-copilot/workspace-bridge.js.map +1 -0
- package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +6 -0
- package/dist/engine/ai-integration/kiro/hooks-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/kiro/hooks-generator.js +74 -0
- package/dist/engine/ai-integration/kiro/hooks-generator.js.map +1 -0
- package/dist/engine/ai-integration/kiro/index.d.ts +4 -0
- package/dist/engine/ai-integration/kiro/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/kiro/index.js +5 -0
- package/dist/engine/ai-integration/kiro/index.js.map +1 -0
- package/dist/engine/ai-integration/kiro/spec-exporter.d.ts +6 -0
- package/dist/engine/ai-integration/kiro/spec-exporter.d.ts.map +1 -0
- package/dist/engine/ai-integration/kiro/spec-exporter.js +57 -0
- package/dist/engine/ai-integration/kiro/spec-exporter.js.map +1 -0
- package/dist/engine/ai-integration/kiro/steering-generator.d.ts +6 -0
- package/dist/engine/ai-integration/kiro/steering-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/kiro/steering-generator.js +112 -0
- package/dist/engine/ai-integration/kiro/steering-generator.js.map +1 -0
- package/dist/engine/ai-integration/mastra/agent-scaffold.d.ts +16 -0
- package/dist/engine/ai-integration/mastra/agent-scaffold.d.ts.map +1 -0
- package/dist/engine/ai-integration/mastra/agent-scaffold.js +111 -0
- package/dist/engine/ai-integration/mastra/agent-scaffold.js.map +1 -0
- package/dist/engine/ai-integration/mastra/config-generator.d.ts +12 -0
- package/dist/engine/ai-integration/mastra/config-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/mastra/config-generator.js +64 -0
- package/dist/engine/ai-integration/mastra/config-generator.js.map +1 -0
- package/dist/engine/ai-integration/mastra/index.d.ts +3 -0
- package/dist/engine/ai-integration/mastra/index.d.ts.map +1 -0
- package/dist/engine/ai-integration/mastra/index.js +4 -0
- package/dist/engine/ai-integration/mastra/index.js.map +1 -0
- package/dist/engine/ai-integration/universal-config-generator.d.ts +4 -0
- package/dist/engine/ai-integration/universal-config-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/universal-config-generator.js +87 -0
- package/dist/engine/ai-integration/universal-config-generator.js.map +1 -0
- package/dist/engine/ai-integration/windsurf/windsurfrules-generator.d.ts +5 -0
- package/dist/engine/ai-integration/windsurf/windsurfrules-generator.d.ts.map +1 -0
- package/dist/engine/ai-integration/windsurf/windsurfrules-generator.js +75 -0
- package/dist/engine/ai-integration/windsurf/windsurfrules-generator.js.map +1 -0
- package/dist/engine/api-spec-generator/ac-builder.d.ts +5 -0
- package/dist/engine/api-spec-generator/ac-builder.d.ts.map +1 -0
- package/dist/engine/api-spec-generator/ac-builder.js +114 -0
- package/dist/engine/api-spec-generator/ac-builder.js.map +1 -0
- package/dist/engine/api-spec-generator/graphql-parser.d.ts +3 -0
- package/dist/engine/api-spec-generator/graphql-parser.d.ts.map +1 -0
- package/dist/engine/api-spec-generator/graphql-parser.js +166 -0
- package/dist/engine/api-spec-generator/graphql-parser.js.map +1 -0
- package/dist/engine/api-spec-generator/openapi-parser.d.ts +3 -0
- package/dist/engine/api-spec-generator/openapi-parser.d.ts.map +1 -0
- package/dist/engine/api-spec-generator/openapi-parser.js +161 -0
- package/dist/engine/api-spec-generator/openapi-parser.js.map +1 -0
- package/dist/engine/approval-workflow.d.ts +21 -0
- package/dist/engine/approval-workflow.d.ts.map +1 -0
- package/dist/engine/approval-workflow.js +82 -0
- package/dist/engine/approval-workflow.js.map +1 -0
- package/dist/engine/best-practices-library.d.ts +31 -0
- package/dist/engine/best-practices-library.d.ts.map +1 -0
- package/dist/engine/best-practices-library.js +111 -0
- package/dist/engine/best-practices-library.js.map +1 -0
- package/dist/engine/confluence-exporter.d.ts +27 -0
- package/dist/engine/confluence-exporter.d.ts.map +1 -0
- package/dist/engine/confluence-exporter.js +238 -0
- package/dist/engine/confluence-exporter.js.map +1 -0
- package/dist/engine/cross-repo-searcher.d.ts +13 -0
- package/dist/engine/cross-repo-searcher.d.ts.map +1 -0
- package/dist/engine/cross-repo-searcher.js +51 -0
- package/dist/engine/cross-repo-searcher.js.map +1 -0
- package/dist/engine/desktop-notifier.d.ts +16 -0
- package/dist/engine/desktop-notifier.d.ts.map +1 -0
- package/dist/engine/desktop-notifier.js +64 -0
- package/dist/engine/desktop-notifier.js.map +1 -0
- package/dist/engine/domain-detector.d.ts +12 -0
- package/dist/engine/domain-detector.d.ts.map +1 -0
- package/dist/engine/domain-detector.js +286 -0
- package/dist/engine/domain-detector.js.map +1 -0
- package/dist/engine/email-digest-generator.d.ts +8 -0
- package/dist/engine/email-digest-generator.d.ts.map +1 -0
- package/dist/engine/email-digest-generator.js +192 -0
- package/dist/engine/email-digest-generator.js.map +1 -0
- package/dist/engine/email-sender.d.ts +22 -0
- package/dist/engine/email-sender.d.ts.map +1 -0
- package/dist/engine/email-sender.js +78 -0
- package/dist/engine/email-sender.js.map +1 -0
- package/dist/engine/estimation-calibrator.d.ts +19 -0
- package/dist/engine/estimation-calibrator.d.ts.map +1 -0
- package/dist/engine/estimation-calibrator.js +176 -0
- package/dist/engine/estimation-calibrator.js.map +1 -0
- package/dist/engine/hooks/custom-commands-generator.d.ts +11 -0
- package/dist/engine/hooks/custom-commands-generator.d.ts.map +1 -0
- package/dist/engine/hooks/custom-commands-generator.js +88 -0
- package/dist/engine/hooks/custom-commands-generator.js.map +1 -0
- package/dist/engine/hooks/effort-configurator.d.ts +13 -0
- package/dist/engine/hooks/effort-configurator.d.ts.map +1 -0
- package/dist/engine/hooks/effort-configurator.js +54 -0
- package/dist/engine/hooks/effort-configurator.js.map +1 -0
- package/dist/engine/hooks/full-spectrum-generator.d.ts +31 -0
- package/dist/engine/hooks/full-spectrum-generator.d.ts.map +1 -0
- package/dist/engine/hooks/full-spectrum-generator.js +115 -0
- package/dist/engine/hooks/full-spectrum-generator.js.map +1 -0
- package/dist/engine/hooks/profile-generator.d.ts +21 -0
- package/dist/engine/hooks/profile-generator.d.ts.map +1 -0
- package/dist/engine/hooks/profile-generator.js +90 -0
- package/dist/engine/hooks/profile-generator.js.map +1 -0
- package/dist/engine/ide-config/generators.d.ts.map +1 -1
- package/dist/engine/ide-config/generators.js +28 -1
- package/dist/engine/ide-config/generators.js.map +1 -1
- package/dist/engine/importers/csv-importer.d.ts +9 -0
- package/dist/engine/importers/csv-importer.d.ts.map +1 -0
- package/dist/engine/importers/csv-importer.js +116 -0
- package/dist/engine/importers/csv-importer.js.map +1 -0
- package/dist/engine/importers/jira-importer.d.ts +7 -0
- package/dist/engine/importers/jira-importer.d.ts.map +1 -0
- package/dist/engine/importers/jira-importer.js +57 -0
- package/dist/engine/importers/jira-importer.js.map +1 -0
- package/dist/engine/importers/linear-importer.d.ts +6 -0
- package/dist/engine/importers/linear-importer.d.ts.map +1 -0
- package/dist/engine/importers/linear-importer.js +59 -0
- package/dist/engine/importers/linear-importer.js.map +1 -0
- package/dist/engine/importers/markdown-importer.d.ts +7 -0
- package/dist/engine/importers/markdown-importer.d.ts.map +1 -0
- package/dist/engine/importers/markdown-importer.js +74 -0
- package/dist/engine/importers/markdown-importer.js.map +1 -0
- package/dist/engine/outbound-webhook-dispatcher.d.ts +4 -0
- package/dist/engine/outbound-webhook-dispatcher.d.ts.map +1 -0
- package/dist/engine/outbound-webhook-dispatcher.js +94 -0
- package/dist/engine/outbound-webhook-dispatcher.js.map +1 -0
- package/dist/engine/performance-analyzer.d.ts +18 -0
- package/dist/engine/performance-analyzer.d.ts.map +1 -0
- package/dist/engine/performance-analyzer.js +152 -0
- package/dist/engine/performance-analyzer.js.map +1 -0
- package/dist/engine/registry/composio-publisher.d.ts +17 -0
- package/dist/engine/registry/composio-publisher.d.ts.map +1 -0
- package/dist/engine/registry/composio-publisher.js +51 -0
- package/dist/engine/registry/composio-publisher.js.map +1 -0
- package/dist/engine/registry/glama-publisher.d.ts +17 -0
- package/dist/engine/registry/glama-publisher.d.ts.map +1 -0
- package/dist/engine/registry/glama-publisher.js +43 -0
- package/dist/engine/registry/glama-publisher.js.map +1 -0
- package/dist/engine/registry/index.d.ts +4 -0
- package/dist/engine/registry/index.d.ts.map +1 -1
- package/dist/engine/registry/index.js +5 -0
- package/dist/engine/registry/index.js.map +1 -1
- package/dist/engine/registry/mcp-official-publisher.d.ts +16 -0
- package/dist/engine/registry/mcp-official-publisher.d.ts.map +1 -0
- package/dist/engine/registry/mcp-official-publisher.js +44 -0
- package/dist/engine/registry/mcp-official-publisher.js.map +1 -0
- package/dist/engine/registry/smithery-generator.d.ts +16 -0
- package/dist/engine/registry/smithery-generator.d.ts.map +1 -0
- package/dist/engine/registry/smithery-generator.js +71 -0
- package/dist/engine/registry/smithery-generator.js.map +1 -0
- package/dist/engine/reverse-engineer/test-file-parser.d.ts +26 -0
- package/dist/engine/reverse-engineer/test-file-parser.d.ts.map +1 -0
- package/dist/engine/reverse-engineer/test-file-parser.js +165 -0
- package/dist/engine/reverse-engineer/test-file-parser.js.map +1 -0
- package/dist/engine/slack-dispatcher.d.ts +15 -0
- package/dist/engine/slack-dispatcher.d.ts.map +1 -0
- package/dist/engine/slack-dispatcher.js +73 -0
- package/dist/engine/slack-dispatcher.js.map +1 -0
- package/dist/engine/spec-differ.d.ts +15 -0
- package/dist/engine/spec-differ.d.ts.map +1 -0
- package/dist/engine/spec-differ.js +115 -0
- package/dist/engine/spec-differ.js.map +1 -0
- package/dist/engine/spec-exporter.d.ts +27 -0
- package/dist/engine/spec-exporter.d.ts.map +1 -0
- package/dist/engine/spec-exporter.js +122 -0
- package/dist/engine/spec-exporter.js.map +1 -0
- package/dist/engine/spec-searcher.d.ts +31 -0
- package/dist/engine/spec-searcher.d.ts.map +1 -0
- package/dist/engine/spec-searcher.js +240 -0
- package/dist/engine/spec-searcher.js.map +1 -0
- package/dist/engine/spec-splitter.d.ts +11 -1
- package/dist/engine/spec-splitter.d.ts.map +1 -1
- package/dist/engine/spec-splitter.js +178 -0
- package/dist/engine/spec-splitter.js.map +1 -1
- package/dist/engine/team-analytics-calculator.d.ts +14 -0
- package/dist/engine/team-analytics-calculator.d.ts.map +1 -0
- package/dist/engine/team-analytics-calculator.js +114 -0
- package/dist/engine/team-analytics-calculator.js.map +1 -0
- package/dist/engine/telemetry/error-reporter.d.ts +16 -0
- package/dist/engine/telemetry/error-reporter.d.ts.map +1 -0
- package/dist/engine/telemetry/error-reporter.js +46 -0
- package/dist/engine/telemetry/error-reporter.js.map +1 -0
- package/dist/engine/velocity-calculator.d.ts +44 -0
- package/dist/engine/velocity-calculator.d.ts.map +1 -0
- package/dist/engine/velocity-calculator.js +425 -0
- package/dist/engine/velocity-calculator.js.map +1 -0
- package/dist/index.js +44 -2
- package/dist/index.js.map +1 -1
- package/dist/storage/actuals-store.d.ts +8 -0
- package/dist/storage/actuals-store.d.ts.map +1 -0
- package/dist/storage/actuals-store.js +57 -0
- package/dist/storage/actuals-store.js.map +1 -0
- package/dist/storage/approval-store.d.ts +12 -0
- package/dist/storage/approval-store.d.ts.map +1 -0
- package/dist/storage/approval-store.js +46 -0
- package/dist/storage/approval-store.js.map +1 -0
- package/dist/storage/comments-store.d.ts +38 -0
- package/dist/storage/comments-store.d.ts.map +1 -0
- package/dist/storage/comments-store.js +167 -0
- package/dist/storage/comments-store.js.map +1 -0
- package/dist/storage/confluence-store.d.ts +35 -0
- package/dist/storage/confluence-store.d.ts.map +1 -0
- package/dist/storage/confluence-store.js +85 -0
- package/dist/storage/confluence-store.js.map +1 -0
- package/dist/storage/desktop-notification-store.d.ts +19 -0
- package/dist/storage/desktop-notification-store.d.ts.map +1 -0
- package/dist/storage/desktop-notification-store.js +44 -0
- package/dist/storage/desktop-notification-store.js.map +1 -0
- package/dist/storage/email-digest-store.d.ts +19 -0
- package/dist/storage/email-digest-store.d.ts.map +1 -0
- package/dist/storage/email-digest-store.js +51 -0
- package/dist/storage/email-digest-store.js.map +1 -0
- package/dist/storage/global-projects-store.d.ts +27 -0
- package/dist/storage/global-projects-store.d.ts.map +1 -0
- package/dist/storage/global-projects-store.js +78 -0
- package/dist/storage/global-projects-store.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/outbound-webhook-store.d.ts +9 -0
- package/dist/storage/outbound-webhook-store.d.ts.map +1 -0
- package/dist/storage/outbound-webhook-store.js +105 -0
- package/dist/storage/outbound-webhook-store.js.map +1 -0
- package/dist/storage/slack-store.d.ts +22 -0
- package/dist/storage/slack-store.d.ts.map +1 -0
- package/dist/storage/slack-store.js +55 -0
- package/dist/storage/slack-store.js.map +1 -0
- package/dist/storage/spec-lock-store.d.ts +22 -0
- package/dist/storage/spec-lock-store.d.ts.map +1 -0
- package/dist/storage/spec-lock-store.js +99 -0
- package/dist/storage/spec-lock-store.js.map +1 -0
- package/dist/tools/ai-ecosystem-status.d.ts +13 -0
- package/dist/tools/ai-ecosystem-status.d.ts.map +1 -0
- package/dist/tools/ai-ecosystem-status.js +219 -0
- package/dist/tools/ai-ecosystem-status.js.map +1 -0
- package/dist/tools/api-spec-generator-handler.d.ts +3 -0
- package/dist/tools/api-spec-generator-handler.d.ts.map +1 -0
- package/dist/tools/api-spec-generator-handler.js +193 -0
- package/dist/tools/api-spec-generator-handler.js.map +1 -0
- package/dist/tools/approval-handler.d.ts +6 -0
- package/dist/tools/approval-handler.d.ts.map +1 -0
- package/dist/tools/approval-handler.js +193 -0
- package/dist/tools/approval-handler.js.map +1 -0
- package/dist/tools/checkpoint-handler.d.ts.map +1 -1
- package/dist/tools/checkpoint-handler.js +20 -0
- package/dist/tools/checkpoint-handler.js.map +1 -1
- package/dist/tools/comments-handler.d.ts +6 -0
- package/dist/tools/comments-handler.d.ts.map +1 -0
- package/dist/tools/comments-handler.js +137 -0
- package/dist/tools/comments-handler.js.map +1 -0
- package/dist/tools/confluence-handler.d.ts +6 -0
- package/dist/tools/confluence-handler.d.ts.map +1 -0
- package/dist/tools/confluence-handler.js +220 -0
- package/dist/tools/confluence-handler.js.map +1 -0
- package/dist/tools/cross-repo-search-handler.d.ts +19 -0
- package/dist/tools/cross-repo-search-handler.d.ts.map +1 -0
- package/dist/tools/cross-repo-search-handler.js +151 -0
- package/dist/tools/cross-repo-search-handler.js.map +1 -0
- package/dist/tools/desktop-notification-handler.d.ts +17 -0
- package/dist/tools/desktop-notification-handler.d.ts.map +1 -0
- package/dist/tools/desktop-notification-handler.js +90 -0
- package/dist/tools/desktop-notification-handler.js.map +1 -0
- package/dist/tools/domain-criteria-handler.d.ts +16 -0
- package/dist/tools/domain-criteria-handler.d.ts.map +1 -0
- package/dist/tools/domain-criteria-handler.js +216 -0
- package/dist/tools/domain-criteria-handler.js.map +1 -0
- package/dist/tools/email-digest-handler.d.ts +6 -0
- package/dist/tools/email-digest-handler.d.ts.map +1 -0
- package/dist/tools/email-digest-handler.js +198 -0
- package/dist/tools/email-digest-handler.js.map +1 -0
- package/dist/tools/estimate.d.ts.map +1 -1
- package/dist/tools/estimate.js +22 -0
- package/dist/tools/estimate.js.map +1 -1
- package/dist/tools/estimation-accuracy-handler.d.ts +5 -0
- package/dist/tools/estimation-accuracy-handler.d.ts.map +1 -0
- package/dist/tools/estimation-accuracy-handler.js +171 -0
- package/dist/tools/estimation-accuracy-handler.js.map +1 -0
- package/dist/tools/generate-automation-guide.d.ts.map +1 -1
- package/dist/tools/generate-automation-guide.js +44 -0
- package/dist/tools/generate-automation-guide.js.map +1 -1
- package/dist/tools/import-spec-handler.d.ts +10 -0
- package/dist/tools/import-spec-handler.d.ts.map +1 -0
- package/dist/tools/import-spec-handler.js +242 -0
- package/dist/tools/import-spec-handler.js.map +1 -0
- package/dist/tools/init-project/claude-md-generator.d.ts +1 -0
- package/dist/tools/init-project/claude-md-generator.d.ts.map +1 -1
- package/dist/tools/init-project/claude-md-generator.js +35 -0
- package/dist/tools/init-project/claude-md-generator.js.map +1 -1
- package/dist/tools/init-project/planu-workflow-generator.d.ts.map +1 -1
- package/dist/tools/init-project/planu-workflow-generator.js +11 -0
- package/dist/tools/init-project/planu-workflow-generator.js.map +1 -1
- package/dist/tools/init-project/rules-generator.d.ts +11 -0
- package/dist/tools/init-project/rules-generator.d.ts.map +1 -1
- package/dist/tools/init-project/rules-generator.js +79 -0
- package/dist/tools/init-project/rules-generator.js.map +1 -1
- package/dist/tools/init-project/scaffold-writer.d.ts +1 -0
- package/dist/tools/init-project/scaffold-writer.d.ts.map +1 -1
- package/dist/tools/init-project/scaffold-writer.js +10 -1
- package/dist/tools/init-project/scaffold-writer.js.map +1 -1
- package/dist/tools/list-specs.d.ts.map +1 -1
- package/dist/tools/list-specs.js +11 -1
- package/dist/tools/list-specs.js.map +1 -1
- package/dist/tools/outbound-webhook-handler.d.ts +13 -0
- package/dist/tools/outbound-webhook-handler.d.ts.map +1 -0
- package/dist/tools/outbound-webhook-handler.js +161 -0
- package/dist/tools/outbound-webhook-handler.js.map +1 -0
- package/dist/tools/performance-analysis-handler.d.ts +3 -0
- package/dist/tools/performance-analysis-handler.d.ts.map +1 -0
- package/dist/tools/performance-analysis-handler.js +95 -0
- package/dist/tools/performance-analysis-handler.js.map +1 -0
- package/dist/tools/register-api-spec-generator.d.ts +3 -0
- package/dist/tools/register-api-spec-generator.d.ts.map +1 -0
- package/dist/tools/register-api-spec-generator.js +49 -0
- package/dist/tools/register-api-spec-generator.js.map +1 -0
- package/dist/tools/register-approval-tools.d.ts +3 -0
- package/dist/tools/register-approval-tools.d.ts.map +1 -0
- package/dist/tools/register-approval-tools.js +87 -0
- package/dist/tools/register-approval-tools.js.map +1 -0
- package/dist/tools/register-comments-tools.d.ts +3 -0
- package/dist/tools/register-comments-tools.d.ts.map +1 -0
- package/dist/tools/register-comments-tools.js +79 -0
- package/dist/tools/register-comments-tools.js.map +1 -0
- package/dist/tools/register-confluence-tools.d.ts +3 -0
- package/dist/tools/register-confluence-tools.d.ts.map +1 -0
- package/dist/tools/register-confluence-tools.js +62 -0
- package/dist/tools/register-confluence-tools.js.map +1 -0
- package/dist/tools/register-cross-repo-search-tools.d.ts +10 -0
- package/dist/tools/register-cross-repo-search-tools.d.ts.map +1 -0
- package/dist/tools/register-cross-repo-search-tools.js +82 -0
- package/dist/tools/register-cross-repo-search-tools.js.map +1 -0
- package/dist/tools/register-desktop-notification-tools.d.ts +3 -0
- package/dist/tools/register-desktop-notification-tools.d.ts.map +1 -0
- package/dist/tools/register-desktop-notification-tools.js +56 -0
- package/dist/tools/register-desktop-notification-tools.js.map +1 -0
- package/dist/tools/register-domain-criteria-tools.d.ts +3 -0
- package/dist/tools/register-domain-criteria-tools.d.ts.map +1 -0
- package/dist/tools/register-domain-criteria-tools.js +46 -0
- package/dist/tools/register-domain-criteria-tools.js.map +1 -0
- package/dist/tools/register-email-digest-tools.d.ts +3 -0
- package/dist/tools/register-email-digest-tools.d.ts.map +1 -0
- package/dist/tools/register-email-digest-tools.js +109 -0
- package/dist/tools/register-email-digest-tools.js.map +1 -0
- package/dist/tools/register-estimation-accuracy-tools.d.ts +3 -0
- package/dist/tools/register-estimation-accuracy-tools.d.ts.map +1 -0
- package/dist/tools/register-estimation-accuracy-tools.js +71 -0
- package/dist/tools/register-estimation-accuracy-tools.js.map +1 -0
- package/dist/tools/register-import-tools.d.ts +3 -0
- package/dist/tools/register-import-tools.d.ts.map +1 -0
- package/dist/tools/register-import-tools.js +63 -0
- package/dist/tools/register-import-tools.js.map +1 -0
- package/dist/tools/register-outbound-webhook-tools.d.ts +3 -0
- package/dist/tools/register-outbound-webhook-tools.d.ts.map +1 -0
- package/dist/tools/register-outbound-webhook-tools.js +79 -0
- package/dist/tools/register-outbound-webhook-tools.js.map +1 -0
- package/dist/tools/register-performance-analysis-tools.d.ts +3 -0
- package/dist/tools/register-performance-analysis-tools.d.ts.map +1 -0
- package/dist/tools/register-performance-analysis-tools.js +24 -0
- package/dist/tools/register-performance-analysis-tools.js.map +1 -0
- package/dist/tools/register-slack-tools.d.ts +3 -0
- package/dist/tools/register-slack-tools.d.ts.map +1 -0
- package/dist/tools/register-slack-tools.js +55 -0
- package/dist/tools/register-slack-tools.js.map +1 -0
- package/dist/tools/register-spec-export-tools.d.ts +3 -0
- package/dist/tools/register-spec-export-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-export-tools.js +67 -0
- package/dist/tools/register-spec-export-tools.js.map +1 -0
- package/dist/tools/register-spec-lock-tools.d.ts +3 -0
- package/dist/tools/register-spec-lock-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-lock-tools.js +72 -0
- package/dist/tools/register-spec-lock-tools.js.map +1 -0
- package/dist/tools/register-spec-search-tools.d.ts +3 -0
- package/dist/tools/register-spec-search-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-search-tools.js +122 -0
- package/dist/tools/register-spec-search-tools.js.map +1 -0
- package/dist/tools/register-spec-split-tools.d.ts +3 -0
- package/dist/tools/register-spec-split-tools.d.ts.map +1 -0
- package/dist/tools/register-spec-split-tools.js +51 -0
- package/dist/tools/register-spec-split-tools.js.map +1 -0
- package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
- package/dist/tools/register-spec-tools/core-spec-tools.js +20 -2
- package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
- package/dist/tools/register-team-analytics-tools.d.ts +3 -0
- package/dist/tools/register-team-analytics-tools.d.ts.map +1 -0
- package/dist/tools/register-team-analytics-tools.js +37 -0
- package/dist/tools/register-team-analytics-tools.js.map +1 -0
- package/dist/tools/register-test-reverse-engineer-tools.d.ts +3 -0
- package/dist/tools/register-test-reverse-engineer-tools.d.ts.map +1 -0
- package/dist/tools/register-test-reverse-engineer-tools.js +10 -0
- package/dist/tools/register-test-reverse-engineer-tools.js.map +1 -0
- package/dist/tools/register-velocity-tools.d.ts +3 -0
- package/dist/tools/register-velocity-tools.d.ts.map +1 -0
- package/dist/tools/register-velocity-tools.js +72 -0
- package/dist/tools/register-velocity-tools.js.map +1 -0
- package/dist/tools/register-versioning-tools.d.ts.map +1 -1
- package/dist/tools/register-versioning-tools.js +55 -0
- package/dist/tools/register-versioning-tools.js.map +1 -1
- package/dist/tools/safe-handler.d.ts.map +1 -1
- package/dist/tools/safe-handler.js +5 -0
- package/dist/tools/safe-handler.js.map +1 -1
- package/dist/tools/schemas/ide-config.d.ts +2 -0
- package/dist/tools/schemas/ide-config.d.ts.map +1 -1
- package/dist/tools/schemas/ide-config.js +2 -1
- package/dist/tools/schemas/ide-config.js.map +1 -1
- package/dist/tools/schemas/output-schemas.d.ts +24 -0
- package/dist/tools/schemas/output-schemas.d.ts.map +1 -1
- package/dist/tools/schemas/output-schemas.js +30 -0
- package/dist/tools/schemas/output-schemas.js.map +1 -1
- package/dist/tools/search-handler.d.ts +4 -0
- package/dist/tools/search-handler.d.ts.map +1 -0
- package/dist/tools/search-handler.js +62 -0
- package/dist/tools/search-handler.js.map +1 -0
- package/dist/tools/slack-handler.d.ts +6 -0
- package/dist/tools/slack-handler.d.ts.map +1 -0
- package/dist/tools/slack-handler.js +162 -0
- package/dist/tools/slack-handler.js.map +1 -0
- package/dist/tools/spec-diff-handler.d.ts +6 -0
- package/dist/tools/spec-diff-handler.d.ts.map +1 -0
- package/dist/tools/spec-diff-handler.js +94 -0
- package/dist/tools/spec-diff-handler.js.map +1 -0
- package/dist/tools/spec-export-handler.d.ts +5 -0
- package/dist/tools/spec-export-handler.d.ts.map +1 -0
- package/dist/tools/spec-export-handler.js +64 -0
- package/dist/tools/spec-export-handler.js.map +1 -0
- package/dist/tools/spec-lock-handler.d.ts +10 -0
- package/dist/tools/spec-lock-handler.d.ts.map +1 -0
- package/dist/tools/spec-lock-handler.js +163 -0
- package/dist/tools/spec-lock-handler.js.map +1 -0
- package/dist/tools/spec-split-handler.d.ts +4 -0
- package/dist/tools/spec-split-handler.d.ts.map +1 -0
- package/dist/tools/spec-split-handler.js +250 -0
- package/dist/tools/spec-split-handler.js.map +1 -0
- package/dist/tools/status-handler.d.ts.map +1 -1
- package/dist/tools/status-handler.js +40 -3
- package/dist/tools/status-handler.js.map +1 -1
- package/dist/tools/sync-ai-configs.d.ts +15 -0
- package/dist/tools/sync-ai-configs.d.ts.map +1 -0
- package/dist/tools/sync-ai-configs.js +86 -0
- package/dist/tools/sync-ai-configs.js.map +1 -0
- package/dist/tools/team-analytics-handler.d.ts +5 -0
- package/dist/tools/team-analytics-handler.d.ts.map +1 -0
- package/dist/tools/team-analytics-handler.js +67 -0
- package/dist/tools/team-analytics-handler.js.map +1 -0
- package/dist/tools/test-reverse-engineer-handler.d.ts +15 -0
- package/dist/tools/test-reverse-engineer-handler.d.ts.map +1 -0
- package/dist/tools/test-reverse-engineer-handler.js +94 -0
- package/dist/tools/test-reverse-engineer-handler.js.map +1 -0
- package/dist/tools/update-status/index.d.ts.map +1 -1
- package/dist/tools/update-status/index.js +135 -20
- package/dist/tools/update-status/index.js.map +1 -1
- package/dist/tools/update-status/response-builder.d.ts +1 -1
- package/dist/tools/update-status/response-builder.d.ts.map +1 -1
- package/dist/tools/update-status/response-builder.js +4 -1
- package/dist/tools/update-status/response-builder.js.map +1 -1
- package/dist/tools/update-status/side-effects.d.ts.map +1 -1
- package/dist/tools/update-status/side-effects.js +71 -0
- package/dist/tools/update-status/side-effects.js.map +1 -1
- package/dist/tools/update-status/transition-guard.d.ts +8 -0
- package/dist/tools/update-status/transition-guard.d.ts.map +1 -1
- package/dist/tools/update-status/transition-guard.js +23 -0
- package/dist/tools/update-status/transition-guard.js.map +1 -1
- package/dist/tools/update-status-actions.d.ts +1 -0
- package/dist/tools/update-status-actions.d.ts.map +1 -1
- package/dist/tools/update-status-actions.js +15 -1
- package/dist/tools/update-status-actions.js.map +1 -1
- package/dist/tools/velocity-handler.d.ts +4 -0
- package/dist/tools/velocity-handler.d.ts.map +1 -0
- package/dist/tools/velocity-handler.js +103 -0
- package/dist/tools/velocity-handler.js.map +1 -0
- package/dist/types/actuals.d.ts +100 -0
- package/dist/types/actuals.d.ts.map +1 -0
- package/dist/types/actuals.js +2 -0
- package/dist/types/actuals.js.map +1 -0
- package/dist/types/agent-frameworks.d.ts +62 -0
- package/dist/types/agent-frameworks.d.ts.map +1 -0
- package/dist/types/agent-frameworks.js +3 -0
- package/dist/types/agent-frameworks.js.map +1 -0
- package/dist/types/agents-md.d.ts +20 -0
- package/dist/types/agents-md.d.ts.map +1 -0
- package/dist/types/agents-md.js +3 -0
- package/dist/types/agents-md.js.map +1 -0
- package/dist/types/ai-integration.d.ts +65 -0
- package/dist/types/ai-integration.d.ts.map +1 -0
- package/dist/types/ai-integration.js +3 -0
- package/dist/types/ai-integration.js.map +1 -0
- package/dist/types/api-contract.d.ts +154 -0
- package/dist/types/api-contract.d.ts.map +1 -0
- package/dist/types/api-contract.js +3 -0
- package/dist/types/api-contract.js.map +1 -0
- package/dist/types/approval.d.ts +82 -0
- package/dist/types/approval.d.ts.map +1 -0
- package/dist/types/approval.js +3 -0
- package/dist/types/approval.js.map +1 -0
- package/dist/types/cline-integration.d.ts +30 -0
- package/dist/types/cline-integration.d.ts.map +1 -0
- package/dist/types/cline-integration.js +3 -0
- package/dist/types/cline-integration.js.map +1 -0
- package/dist/types/codex-integration.d.ts +55 -0
- package/dist/types/codex-integration.d.ts.map +1 -0
- package/dist/types/codex-integration.js +3 -0
- package/dist/types/codex-integration.js.map +1 -0
- package/dist/types/comments.d.ts +68 -0
- package/dist/types/comments.d.ts.map +1 -0
- package/dist/types/comments.js +3 -0
- package/dist/types/comments.js.map +1 -0
- package/dist/types/confluence.d.ts +102 -0
- package/dist/types/confluence.d.ts.map +1 -0
- package/dist/types/confluence.js +3 -0
- package/dist/types/confluence.js.map +1 -0
- package/dist/types/cross-repo-search.d.ts +104 -0
- package/dist/types/cross-repo-search.d.ts.map +1 -0
- package/dist/types/cross-repo-search.js +2 -0
- package/dist/types/cross-repo-search.js.map +1 -0
- package/dist/types/desktop-notification.d.ts +38 -0
- package/dist/types/desktop-notification.d.ts.map +1 -0
- package/dist/types/desktop-notification.js +3 -0
- package/dist/types/desktop-notification.js.map +1 -0
- package/dist/types/domain-criteria.d.ts +62 -0
- package/dist/types/domain-criteria.d.ts.map +1 -0
- package/dist/types/domain-criteria.js +3 -0
- package/dist/types/domain-criteria.js.map +1 -0
- package/dist/types/email-digest.d.ts +119 -0
- package/dist/types/email-digest.d.ts.map +1 -0
- package/dist/types/email-digest.js +3 -0
- package/dist/types/email-digest.js.map +1 -0
- package/dist/types/gemini-integration.d.ts +40 -0
- package/dist/types/gemini-integration.d.ts.map +1 -0
- package/dist/types/gemini-integration.js +3 -0
- package/dist/types/gemini-integration.js.map +1 -0
- package/dist/types/github-copilot-integration.d.ts +30 -0
- package/dist/types/github-copilot-integration.d.ts.map +1 -0
- package/dist/types/github-copilot-integration.js +3 -0
- package/dist/types/github-copilot-integration.js.map +1 -0
- package/dist/types/hooks-advanced.d.ts +34 -0
- package/dist/types/hooks-advanced.d.ts.map +1 -0
- package/dist/types/hooks-advanced.js +3 -0
- package/dist/types/hooks-advanced.js.map +1 -0
- package/dist/types/ide.d.ts +1 -1
- package/dist/types/ide.d.ts.map +1 -1
- package/dist/types/import-spec.d.ts +123 -0
- package/dist/types/import-spec.d.ts.map +1 -0
- package/dist/types/import-spec.js +3 -0
- package/dist/types/import-spec.js.map +1 -0
- package/dist/types/index.d.ts +29 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +29 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/kiro-integration.d.ts +44 -0
- package/dist/types/kiro-integration.d.ts.map +1 -0
- package/dist/types/kiro-integration.js +3 -0
- package/dist/types/kiro-integration.js.map +1 -0
- package/dist/types/outbound-webhook.d.ts +51 -0
- package/dist/types/outbound-webhook.d.ts.map +1 -0
- package/dist/types/outbound-webhook.js +3 -0
- package/dist/types/outbound-webhook.js.map +1 -0
- package/dist/types/performance-analysis.d.ts +33 -0
- package/dist/types/performance-analysis.d.ts.map +1 -0
- package/dist/types/performance-analysis.js +3 -0
- package/dist/types/performance-analysis.js.map +1 -0
- package/dist/types/registry-publishers.d.ts +63 -0
- package/dist/types/registry-publishers.d.ts.map +1 -0
- package/dist/types/registry-publishers.js +4 -0
- package/dist/types/registry-publishers.js.map +1 -0
- package/dist/types/search.d.ts +49 -0
- package/dist/types/search.d.ts.map +1 -0
- package/dist/types/search.js +3 -0
- package/dist/types/search.js.map +1 -0
- package/dist/types/slack.d.ts +41 -0
- package/dist/types/slack.d.ts.map +1 -0
- package/dist/types/slack.js +3 -0
- package/dist/types/slack.js.map +1 -0
- package/dist/types/spec/inputs.d.ts +46 -2
- package/dist/types/spec/inputs.d.ts.map +1 -1
- package/dist/types/spec-export.d.ts +18 -0
- package/dist/types/spec-export.d.ts.map +1 -0
- package/dist/types/spec-export.js +3 -0
- package/dist/types/spec-export.js.map +1 -0
- package/dist/types/spec-lock.d.ts +42 -0
- package/dist/types/spec-lock.d.ts.map +1 -0
- package/dist/types/spec-lock.js +3 -0
- package/dist/types/spec-lock.js.map +1 -0
- package/dist/types/spec-versioning.d.ts +35 -0
- package/dist/types/spec-versioning.d.ts.map +1 -1
- package/dist/types/team-analytics.d.ts +52 -0
- package/dist/types/team-analytics.d.ts.map +1 -0
- package/dist/types/team-analytics.js +3 -0
- package/dist/types/team-analytics.js.map +1 -0
- package/dist/types/telemetry.d.ts +1 -1
- package/dist/types/telemetry.d.ts.map +1 -1
- package/dist/types/test-reverse-engineer.d.ts +32 -0
- package/dist/types/test-reverse-engineer.d.ts.map +1 -0
- package/dist/types/test-reverse-engineer.js +3 -0
- package/dist/types/test-reverse-engineer.js.map +1 -0
- package/dist/types/velocity.d.ts +147 -0
- package/dist/types/velocity.d.ts.map +1 -0
- package/dist/types/velocity.js +4 -0
- package/dist/types/velocity.js.map +1 -0
- package/package.json +1 -1
- package/src/config/domain-best-practices.json +413 -0
- package/src/config/ide-registry.json +25 -0
- package/src/config/license-plans.json +59 -2
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Deviation calculation
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Compute deviation percentage: positive = over estimate, negative = under estimate.
|
|
6
|
+
* Returns 0 when estimatedHours is 0 to avoid division by zero.
|
|
7
|
+
*/
|
|
8
|
+
export function computeDeviationPct(estimatedHours, actualHours) {
|
|
9
|
+
if (estimatedHours === 0) {
|
|
10
|
+
return 0;
|
|
11
|
+
}
|
|
12
|
+
return ((actualHours - estimatedHours) / estimatedHours) * 100;
|
|
13
|
+
}
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Median helper
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
function median(values) {
|
|
18
|
+
if (values.length === 0) {
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
const sorted = [...values].sort((a, b) => a - b);
|
|
22
|
+
const mid = Math.floor(sorted.length / 2);
|
|
23
|
+
if (sorted.length % 2 === 0) {
|
|
24
|
+
const lo = sorted.at(mid - 1) ?? 0;
|
|
25
|
+
const hi = sorted.at(mid) ?? 0;
|
|
26
|
+
return (lo + hi) / 2;
|
|
27
|
+
}
|
|
28
|
+
return sorted.at(mid) ?? 0;
|
|
29
|
+
}
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
// Scope breakdown
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
function buildScopeBreakdown(records) {
|
|
34
|
+
const grouped = new Map();
|
|
35
|
+
for (const r of records) {
|
|
36
|
+
const existing = grouped.get(r.specScope) ?? [];
|
|
37
|
+
existing.push(r.deviationPct);
|
|
38
|
+
grouped.set(r.specScope, existing);
|
|
39
|
+
}
|
|
40
|
+
const result = [];
|
|
41
|
+
for (const [scope, deviations] of grouped) {
|
|
42
|
+
const avg = deviations.reduce((s, v) => s + v, 0) / deviations.length;
|
|
43
|
+
// If consistently over by more than 20%, suggest increasing multiplier
|
|
44
|
+
const suggestedMultiplier = avg > 20 ? 1 + avg / 100 : 1;
|
|
45
|
+
result.push({
|
|
46
|
+
scope,
|
|
47
|
+
count: deviations.length,
|
|
48
|
+
avgDeviationPct: Math.round(avg * 10) / 10,
|
|
49
|
+
suggestedMultiplier: Math.round(suggestedMultiplier * 100) / 100,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return result.sort((a, b) => a.scope.localeCompare(b.scope));
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Type breakdown
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
function buildTypeBreakdown(records) {
|
|
58
|
+
const grouped = new Map();
|
|
59
|
+
for (const r of records) {
|
|
60
|
+
const existing = grouped.get(r.specType) ?? [];
|
|
61
|
+
existing.push(r.deviationPct);
|
|
62
|
+
grouped.set(r.specType, existing);
|
|
63
|
+
}
|
|
64
|
+
const result = [];
|
|
65
|
+
for (const [type, deviations] of grouped) {
|
|
66
|
+
const avg = deviations.reduce((s, v) => s + v, 0) / deviations.length;
|
|
67
|
+
result.push({
|
|
68
|
+
type,
|
|
69
|
+
count: deviations.length,
|
|
70
|
+
avgDeviationPct: Math.round(avg * 10) / 10,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return result.sort((a, b) => a.type.localeCompare(b.type));
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Report generation
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
export function generateAccuracyReport(projectId, records) {
|
|
79
|
+
const deviations = records.map((r) => r.deviationPct);
|
|
80
|
+
const avgDeviationPct = records.length > 0 ? deviations.reduce((s, v) => s + v, 0) / records.length : 0;
|
|
81
|
+
const outliers = records
|
|
82
|
+
.filter((r) => Math.abs(r.deviationPct) > 50)
|
|
83
|
+
.map((r) => ({ specId: r.specId, deviationPct: r.deviationPct }));
|
|
84
|
+
const chronological = [...records].sort((a, b) => a.recordedAt.localeCompare(b.recordedAt));
|
|
85
|
+
const trend = chronological.map((r) => ({
|
|
86
|
+
specId: r.specId,
|
|
87
|
+
recordedAt: r.recordedAt,
|
|
88
|
+
deviationPct: r.deviationPct,
|
|
89
|
+
}));
|
|
90
|
+
return {
|
|
91
|
+
projectId,
|
|
92
|
+
generatedAt: new Date().toISOString(),
|
|
93
|
+
totalRecords: records.length,
|
|
94
|
+
perSpec: chronological,
|
|
95
|
+
aggregate: {
|
|
96
|
+
avgDeviationPct: Math.round(avgDeviationPct * 10) / 10,
|
|
97
|
+
medianDeviationPct: Math.round(median(deviations) * 10) / 10,
|
|
98
|
+
outlierCount: outliers.length,
|
|
99
|
+
outliers,
|
|
100
|
+
},
|
|
101
|
+
byScope: buildScopeBreakdown(records),
|
|
102
|
+
byType: buildTypeBreakdown(records),
|
|
103
|
+
trend,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// Calibration factor computation
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
/**
|
|
110
|
+
* Compute calibration factors from historical actuals.
|
|
111
|
+
* Only creates a multiplier when sample size >= minSamples.
|
|
112
|
+
* A positive avg deviation means we historically underestimate → multiplier > 1.
|
|
113
|
+
*/
|
|
114
|
+
export function computeCalibrationFactors(projectId, records, minSamples) {
|
|
115
|
+
const scopeGroups = new Map();
|
|
116
|
+
const typeGroups = new Map();
|
|
117
|
+
for (const r of records) {
|
|
118
|
+
const scopeList = scopeGroups.get(r.specScope) ?? [];
|
|
119
|
+
scopeList.push(r.deviationPct);
|
|
120
|
+
scopeGroups.set(r.specScope, scopeList);
|
|
121
|
+
const typeList = typeGroups.get(r.specType) ?? [];
|
|
122
|
+
typeList.push(r.deviationPct);
|
|
123
|
+
typeGroups.set(r.specType, typeList);
|
|
124
|
+
}
|
|
125
|
+
const scopeMultipliers = {};
|
|
126
|
+
const typeMultipliers = {};
|
|
127
|
+
const sampleSize = {};
|
|
128
|
+
for (const [scope, deviations] of scopeGroups) {
|
|
129
|
+
sampleSize[`scope:${scope}`] = deviations.length;
|
|
130
|
+
if (deviations.length >= minSamples) {
|
|
131
|
+
const avg = deviations.reduce((s, v) => s + v, 0) / deviations.length;
|
|
132
|
+
if (Math.abs(avg) > 20) {
|
|
133
|
+
scopeMultipliers[scope] = Math.round((1 + avg / 100) * 100) / 100;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (const [type, deviations] of typeGroups) {
|
|
138
|
+
sampleSize[`type:${type}`] = deviations.length;
|
|
139
|
+
if (deviations.length >= minSamples) {
|
|
140
|
+
const avg = deviations.reduce((s, v) => s + v, 0) / deviations.length;
|
|
141
|
+
if (Math.abs(avg) > 20) {
|
|
142
|
+
typeMultipliers[type] = Math.round((1 + avg / 100) * 100) / 100;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
projectId,
|
|
148
|
+
updatedAt: new Date().toISOString(),
|
|
149
|
+
scopeMultipliers,
|
|
150
|
+
typeMultipliers,
|
|
151
|
+
sampleSize,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Apply calibration to an estimation
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
157
|
+
/**
|
|
158
|
+
* Apply stored calibration factors to a base estimation hours value.
|
|
159
|
+
* Returns the adjusted hours (or the original if no factor found).
|
|
160
|
+
*/
|
|
161
|
+
export function applyCalibration(baseHours, scope, type, factors) {
|
|
162
|
+
if (!factors) {
|
|
163
|
+
return baseHours;
|
|
164
|
+
}
|
|
165
|
+
let adjusted = baseHours;
|
|
166
|
+
const scopeFactor = factors.scopeMultipliers[scope];
|
|
167
|
+
if (scopeFactor !== undefined) {
|
|
168
|
+
adjusted *= scopeFactor;
|
|
169
|
+
}
|
|
170
|
+
const typeFactor = factors.typeMultipliers[type];
|
|
171
|
+
if (typeFactor !== undefined) {
|
|
172
|
+
adjusted *= typeFactor;
|
|
173
|
+
}
|
|
174
|
+
return Math.round(adjusted * 10) / 10;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=estimation-calibrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimation-calibrator.js","sourceRoot":"","sources":["../../src/engine/estimation-calibrator.ts"],"names":[],"mappings":"AAYA,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,cAAsB,EAAE,WAAmB;IAC7E,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC;AACjE,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,MAAM,CAAC,MAAgB;IAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,mBAAmB,CAAC,OAAuB;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QACtE,uEAAuE;QACvE,MAAM,mBAAmB,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK;YACL,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE;YAC1C,mBAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,GAAG,CAAC,GAAG,GAAG;SACjE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,kBAAkB,CAAC,OAAuB;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE;SAC3C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,OAAuB;IAEvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,eAAe,GACnB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,MAAM,QAAQ,GAAG,OAAO;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAEpE,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAE5F,MAAM,KAAK,GAAiB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,YAAY,EAAE,CAAC,CAAC,YAAY;KAC7B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,SAAS;QACT,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,YAAY,EAAE,OAAO,CAAC,MAAM;QAC5B,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE;YACT,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,EAAE;YACtD,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;YAC5D,YAAY,EAAE,QAAQ,CAAC,MAAM;YAC7B,QAAQ;SACT;QACD,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;QACrC,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC;QACnC,KAAK;KACN,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,OAAuB,EACvB,UAAkB;IAElB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEjD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACrD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/B,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAExC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,gBAAgB,GAAuC,EAAE,CAAC;IAChE,MAAM,eAAe,GAAsC,EAAE,CAAC;IAC9D,MAAM,UAAU,GAA2B,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE,CAAC;QAC9C,UAAU,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QACjD,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YACtE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;gBACvB,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,UAAU,EAAE,CAAC;QAC5C,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/C,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YACtE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;gBACvB,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,gBAAgB;QAChB,eAAe;QACf,UAAU;KACX,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAiB,EACjB,KAAgB,EAChB,IAAc,EACd,OAAkC;IAElC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,MAAM,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,QAAQ,IAAI,WAAW,CAAC;IAC1B,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,QAAQ,IAAI,UAAU,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CustomCommand } from '../../types/hooks-advanced.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns the four standard Planu slash commands for .claude/commands/.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateCustomCommands(projectPath: string): CustomCommand[];
|
|
6
|
+
/**
|
|
7
|
+
* Writes command markdown files to <projectPath>/.claude/commands/.
|
|
8
|
+
* Creates the directory if it does not exist. Idempotent.
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeCustomCommands(projectPath: string): void;
|
|
11
|
+
//# sourceMappingURL=custom-commands-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-commands-generator.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/custom-commands-generator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAoEnE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CAO3E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAS7D"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// engine/hooks/custom-commands-generator.ts — .claude/commands/ generator (SPEC-265)
|
|
2
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Command content builders
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
function buildSpecCommand(projectPath) {
|
|
8
|
+
return {
|
|
9
|
+
name: 'spec',
|
|
10
|
+
description: 'Create a Planu spec for the described feature',
|
|
11
|
+
content: `---
|
|
12
|
+
description: Create a Planu spec for the described feature
|
|
13
|
+
---
|
|
14
|
+
Use the mcp__planu__create_spec tool with projectPath: ${projectPath}
|
|
15
|
+
and the user's description as the description parameter.
|
|
16
|
+
Always wait for user approval before implementing.
|
|
17
|
+
`,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function buildValidateCommand() {
|
|
21
|
+
return {
|
|
22
|
+
name: 'validate',
|
|
23
|
+
description: 'Validate the active Planu spec',
|
|
24
|
+
content: `---
|
|
25
|
+
description: Validate the active Planu spec
|
|
26
|
+
---
|
|
27
|
+
Use the mcp__planu__validate tool with the current project path.
|
|
28
|
+
Report any compliance gaps found.
|
|
29
|
+
`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function buildStatusCommand() {
|
|
33
|
+
return {
|
|
34
|
+
name: 'status',
|
|
35
|
+
description: 'Show Planu project status snapshot',
|
|
36
|
+
content: `---
|
|
37
|
+
description: Show Planu project status snapshot
|
|
38
|
+
---
|
|
39
|
+
Use the mcp__planu__planu_status tool with the current project path.
|
|
40
|
+
Show the active spec, git state, and pending queue in a concise summary.
|
|
41
|
+
`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function buildPlanuCommand() {
|
|
45
|
+
return {
|
|
46
|
+
name: 'planu',
|
|
47
|
+
description: 'Quick reference for the Planu SDD workflow',
|
|
48
|
+
content: `---
|
|
49
|
+
description: Quick reference for the Planu SDD workflow
|
|
50
|
+
---
|
|
51
|
+
Explain the Spec Driven Development workflow:
|
|
52
|
+
1. /spec <description> — create a spec and get approval
|
|
53
|
+
2. Implement only after approval
|
|
54
|
+
3. /validate — check implementation against spec
|
|
55
|
+
4. /status — see what is active and pending
|
|
56
|
+
|
|
57
|
+
Always use mcp__planu__* tools. Never write code without an approved spec.
|
|
58
|
+
`,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// Public API
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
/**
|
|
65
|
+
* Returns the four standard Planu slash commands for .claude/commands/.
|
|
66
|
+
*/
|
|
67
|
+
export function generateCustomCommands(projectPath) {
|
|
68
|
+
return [
|
|
69
|
+
buildSpecCommand(projectPath),
|
|
70
|
+
buildValidateCommand(),
|
|
71
|
+
buildStatusCommand(),
|
|
72
|
+
buildPlanuCommand(),
|
|
73
|
+
];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Writes command markdown files to <projectPath>/.claude/commands/.
|
|
77
|
+
* Creates the directory if it does not exist. Idempotent.
|
|
78
|
+
*/
|
|
79
|
+
export function writeCustomCommands(projectPath) {
|
|
80
|
+
const commandsDir = join(projectPath, '.claude', 'commands');
|
|
81
|
+
mkdirSync(commandsDir, { recursive: true });
|
|
82
|
+
const commands = generateCustomCommands(projectPath);
|
|
83
|
+
for (const cmd of commands) {
|
|
84
|
+
const filePath = join(commandsDir, `${cmd.name}.md`);
|
|
85
|
+
writeFileSync(filePath, cmd.content, 'utf8');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=custom-commands-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-commands-generator.js","sourceRoot":"","sources":["../../../src/engine/hooks/custom-commands-generator.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,+CAA+C;QAC5D,OAAO,EAAE;;;yDAG4C,WAAW;;;CAGnE;KACE,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,gCAAgC;QAC7C,OAAO,EAAE;;;;;CAKZ;KACE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE;;;;;CAKZ;KACE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;QACL,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE;;;;;;;;;;CAUZ;KACE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,OAAO;QACL,gBAAgB,CAAC,WAAW,CAAC;QAC7B,oBAAoB,EAAE;QACtB,kBAAkB,EAAE;QACpB,iBAAiB,EAAE;KACpB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC7D,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC;QACrD,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { EffortLevel, EffortRule } from '../../types/hooks-advanced.js';
|
|
2
|
+
export declare const DEFAULT_EFFORT_RULES: EffortRule[];
|
|
3
|
+
/**
|
|
4
|
+
* Returns the effort level for a given tool name by matching against rules.
|
|
5
|
+
* Uses the first matching rule. Falls back to 'medium' if no rule matches.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getEffortForTool(toolName: string, rules?: EffortRule[]): EffortLevel;
|
|
8
|
+
/**
|
|
9
|
+
* Builds a Record<toolNamePattern, EffortLevel> suitable for Claude Code settings.json.
|
|
10
|
+
* Keys are the raw pattern strings from the rules.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildEffortConfig(rules?: EffortRule[]): Record<string, EffortLevel>;
|
|
13
|
+
//# sourceMappingURL=effort-configurator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effort-configurator.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/effort-configurator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAM7E,eAAO,MAAM,oBAAoB,EAAE,UAAU,EAqB5C,CAAC;AAMF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,UAAU,EAAyB,GACzC,WAAW,CAQb;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,GAAE,UAAU,EAAyB,GACzC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAM7B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// engine/hooks/effort-configurator.ts — Effort level configuration for Claude Code tools (SPEC-265)
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Default rules
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
export const DEFAULT_EFFORT_RULES = [
|
|
6
|
+
{
|
|
7
|
+
pattern: 'list_specs|usage_stats|license_status',
|
|
8
|
+
effort: 'low',
|
|
9
|
+
reason: 'read-only queries',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
pattern: 'create_spec|update_status|validate',
|
|
13
|
+
effort: 'medium',
|
|
14
|
+
reason: 'standard operations',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
pattern: 'challenge_spec|red_team|check_readiness',
|
|
18
|
+
effort: 'high',
|
|
19
|
+
reason: 'analysis tasks',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
pattern: 'init_project|init_constitution|config_health',
|
|
23
|
+
effort: 'max',
|
|
24
|
+
reason: 'architectural decisions',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Public API
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/**
|
|
31
|
+
* Returns the effort level for a given tool name by matching against rules.
|
|
32
|
+
* Uses the first matching rule. Falls back to 'medium' if no rule matches.
|
|
33
|
+
*/
|
|
34
|
+
export function getEffortForTool(toolName, rules = DEFAULT_EFFORT_RULES) {
|
|
35
|
+
for (const rule of rules) {
|
|
36
|
+
const regex = new RegExp(rule.pattern);
|
|
37
|
+
if (regex.test(toolName)) {
|
|
38
|
+
return rule.effort;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return 'medium';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Builds a Record<toolNamePattern, EffortLevel> suitable for Claude Code settings.json.
|
|
45
|
+
* Keys are the raw pattern strings from the rules.
|
|
46
|
+
*/
|
|
47
|
+
export function buildEffortConfig(rules = DEFAULT_EFFORT_RULES) {
|
|
48
|
+
const config = {};
|
|
49
|
+
for (const rule of rules) {
|
|
50
|
+
config[rule.pattern] = rule.effort;
|
|
51
|
+
}
|
|
52
|
+
return config;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=effort-configurator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effort-configurator.js","sourceRoot":"","sources":["../../../src/engine/hooks/effort-configurator.ts"],"names":[],"mappings":"AAAA,oGAAoG;AAIpG,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD;QACE,OAAO,EAAE,uCAAuC;QAChD,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,mBAAmB;KAC5B;IACD;QACE,OAAO,EAAE,oCAAoC;QAC7C,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,qBAAqB;KAC9B;IACD;QACE,OAAO,EAAE,yCAAyC;QAClD,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,gBAAgB;KACzB;IACD;QACE,OAAO,EAAE,8CAA8C;QACvD,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,yBAAyB;KAClC;CACF,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAgB,EAChB,QAAsB,oBAAoB;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAsB,oBAAoB;IAE1C,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { FullSpectrumHookConfig, HookScript } from '../../types/hooks-advanced.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the Stop hook script — auto-commits planu/ on session end.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateStopHookScript(projectPath: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Generates the PreCompact hook script — queues a session_checkpoint action.
|
|
8
|
+
*/
|
|
9
|
+
export declare function generatePreCompactHookScript(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generates the UserPromptSubmit hook script — injects active spec context.
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateUserPromptSubmitHookScript(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Generates the Notification hook script — shown when Claude is idle.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateNotificationHookScript(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Generates WorktreeCreate and WorktreeRemove hook scripts.
|
|
20
|
+
*/
|
|
21
|
+
export declare function generateWorktreeHookScripts(): {
|
|
22
|
+
create: string;
|
|
23
|
+
remove: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Generates all requested hook scripts based on the supplied config.
|
|
27
|
+
* Returns an array of HookScript objects, one per enabled hook type.
|
|
28
|
+
* The projectPath is used only for the Stop hook script.
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateFullSpectrumHooks(config: FullSpectrumHookConfig, projectPath?: string): HookScript[];
|
|
31
|
+
//# sourceMappingURL=full-spectrum-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-spectrum-generator.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/full-spectrum-generator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAMxF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAOlE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,CAKrD;AAED;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,MAAM,CAS3D;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,MAAM,CAMvD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAYhF;AAMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,sBAAsB,EAC9B,WAAW,SAAyB,GACnC,UAAU,EAAE,CAkDd"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// engine/hooks/full-spectrum-generator.ts — Full-spectrum Claude Code hook generator (SPEC-265)
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Individual script builders
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
/**
|
|
6
|
+
* Generates the Stop hook script — auto-commits planu/ on session end.
|
|
7
|
+
*/
|
|
8
|
+
export function generateStopHookScript(projectPath) {
|
|
9
|
+
return `#!/bin/bash
|
|
10
|
+
# Auto-commit planu/ if there are changes (Planu Stop hook)
|
|
11
|
+
cd "${projectPath}"
|
|
12
|
+
if git diff --quiet planu/ 2>/dev/null; then exit 0; fi
|
|
13
|
+
git add planu/ && git commit -m "chore(planu): auto-commit session state [skip ci]" --no-verify
|
|
14
|
+
`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Generates the PreCompact hook script — queues a session_checkpoint action.
|
|
18
|
+
*/
|
|
19
|
+
export function generatePreCompactHookScript() {
|
|
20
|
+
return `#!/bin/bash
|
|
21
|
+
# Queue session_checkpoint before context compression (Planu PreCompact hook)
|
|
22
|
+
echo '{"tool":"session_checkpoint","note":"auto-checkpoint before context compression"}' >> /tmp/planu-pending-actions.json
|
|
23
|
+
`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Generates the UserPromptSubmit hook script — injects active spec context.
|
|
27
|
+
*/
|
|
28
|
+
export function generateUserPromptSubmitHookScript() {
|
|
29
|
+
return `#!/bin/bash
|
|
30
|
+
# Inject active spec context on each prompt (Planu UserPromptSubmit hook)
|
|
31
|
+
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
|
|
32
|
+
SPEC_ID=$(echo "$BRANCH" | grep -oE 'SPEC-[0-9]+' | head -1)
|
|
33
|
+
if [ -n "$SPEC_ID" ]; then
|
|
34
|
+
echo "## Active spec: $SPEC_ID | Branch: $BRANCH"
|
|
35
|
+
fi
|
|
36
|
+
`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Generates the Notification hook script — shown when Claude is idle.
|
|
40
|
+
*/
|
|
41
|
+
export function generateNotificationHookScript() {
|
|
42
|
+
return `#!/bin/bash
|
|
43
|
+
# Show pending approved specs when Claude is idle (Planu Notification hook)
|
|
44
|
+
# Non-blocking: only outputs if there are pending specs
|
|
45
|
+
true
|
|
46
|
+
`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generates WorktreeCreate and WorktreeRemove hook scripts.
|
|
50
|
+
*/
|
|
51
|
+
export function generateWorktreeHookScripts() {
|
|
52
|
+
const create = `#!/bin/bash
|
|
53
|
+
# Log worktree creation in shared-context (Planu WorktreeCreate hook)
|
|
54
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Worktree created: $CLAUDE_WORKTREE_PATH" >> .claude/shared-context.md 2>/dev/null || true
|
|
55
|
+
`;
|
|
56
|
+
const remove = `#!/bin/bash
|
|
57
|
+
# Log worktree removal in shared-context (Planu WorktreeRemove hook)
|
|
58
|
+
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] Worktree removed: $CLAUDE_WORKTREE_PATH" >> .claude/shared-context.md 2>/dev/null || true
|
|
59
|
+
`;
|
|
60
|
+
return { create, remove };
|
|
61
|
+
}
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Public aggregator
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
/**
|
|
66
|
+
* Generates all requested hook scripts based on the supplied config.
|
|
67
|
+
* Returns an array of HookScript objects, one per enabled hook type.
|
|
68
|
+
* The projectPath is used only for the Stop hook script.
|
|
69
|
+
*/
|
|
70
|
+
export function generateFullSpectrumHooks(config, projectPath = '$CLAUDE_PROJECT_PATH') {
|
|
71
|
+
const scripts = [];
|
|
72
|
+
if (config.stopHook) {
|
|
73
|
+
scripts.push({
|
|
74
|
+
eventType: 'Stop',
|
|
75
|
+
scriptContent: generateStopHookScript(projectPath),
|
|
76
|
+
description: 'Auto-commits planu/ changes at session end.',
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
if (config.preCompactHook) {
|
|
80
|
+
scripts.push({
|
|
81
|
+
eventType: 'PreCompact',
|
|
82
|
+
scriptContent: generatePreCompactHookScript(),
|
|
83
|
+
description: 'Queues a session_checkpoint before context compression.',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
if (config.userPromptSubmitHook) {
|
|
87
|
+
scripts.push({
|
|
88
|
+
eventType: 'UserPromptSubmit',
|
|
89
|
+
scriptContent: generateUserPromptSubmitHookScript(),
|
|
90
|
+
description: 'Injects active spec/branch context into each prompt.',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (config.notificationHook) {
|
|
94
|
+
scripts.push({
|
|
95
|
+
eventType: 'Notification',
|
|
96
|
+
scriptContent: generateNotificationHookScript(),
|
|
97
|
+
description: 'Shows pending approved specs when Claude is idle.',
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (config.worktreeHooks) {
|
|
101
|
+
const { create, remove } = generateWorktreeHookScripts();
|
|
102
|
+
scripts.push({
|
|
103
|
+
eventType: 'WorktreeCreate',
|
|
104
|
+
scriptContent: create,
|
|
105
|
+
description: 'Logs worktree creation in .claude/shared-context.md.',
|
|
106
|
+
});
|
|
107
|
+
scripts.push({
|
|
108
|
+
eventType: 'WorktreeRemove',
|
|
109
|
+
scriptContent: remove,
|
|
110
|
+
description: 'Logs worktree removal in .claude/shared-context.md.',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return scripts;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=full-spectrum-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-spectrum-generator.js","sourceRoot":"","sources":["../../../src/engine/hooks/full-spectrum-generator.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAIhG,8EAA8E;AAC9E,6BAA6B;AAC7B,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,OAAO;;MAEH,WAAW;;;CAGhB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;;;CAGR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO;;;;;;;CAOR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B;IAC5C,OAAO;;;;CAIR,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,MAAM,MAAM,GAAG;;;CAGhB,CAAC;IAEA,MAAM,MAAM,GAAG;;;CAGhB,CAAC;IAEA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAA8B,EAC9B,WAAW,GAAG,sBAAsB;IAEpC,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,MAAM;YACjB,aAAa,EAAE,sBAAsB,CAAC,WAAW,CAAC;YAClD,WAAW,EAAE,6CAA6C;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,YAAY;YACvB,aAAa,EAAE,4BAA4B,EAAE;YAC7C,WAAW,EAAE,yDAAyD;SACvE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,kBAAkB;YAC7B,aAAa,EAAE,kCAAkC,EAAE;YACnD,WAAW,EAAE,sDAAsD;SACpE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,cAAc;YACzB,aAAa,EAAE,8BAA8B,EAAE;YAC/C,WAAW,EAAE,mDAAmD;SACjE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,2BAA2B,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,gBAAgB;YAC3B,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,sDAAsD;SACpE,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,gBAAgB;YAC3B,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,qDAAqD;SACnE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ClaudeProfile } from '../../types/hooks-advanced.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates the "planu-safe" profile:
|
|
4
|
+
* - Approval on-request for mutations
|
|
5
|
+
* - Medium effort default
|
|
6
|
+
* - Allows common read/edit tools; denies destructive git ops without spec
|
|
7
|
+
*/
|
|
8
|
+
export declare function generatePlanuSafeProfile(): ClaudeProfile;
|
|
9
|
+
/**
|
|
10
|
+
* Generates the "planu-fast" profile:
|
|
11
|
+
* - Auto-approve all Planu tools and read ops
|
|
12
|
+
* - Low effort for reads, medium for writes
|
|
13
|
+
* - Allows all Planu tools without interruption
|
|
14
|
+
*/
|
|
15
|
+
export declare function generatePlanuFastProfile(): ClaudeProfile;
|
|
16
|
+
/**
|
|
17
|
+
* Reads .claude/settings.json at settingsPath, merges profiles into it,
|
|
18
|
+
* and writes it back. Idempotent: profiles with the same name are replaced.
|
|
19
|
+
*/
|
|
20
|
+
export declare function mergeProfilesIntoSettings(settingsPath: string, profiles: ClaudeProfile[]): void;
|
|
21
|
+
//# sourceMappingURL=profile-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-generator.d.ts","sourceRoot":"","sources":["../../../src/engine/hooks/profile-generator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMnE;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,aAAa,CAwBxD;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,aAAa,CAYxD;AAMD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CA4B/F"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// engine/hooks/profile-generator.ts — Claude Code profile generator (SPEC-265)
|
|
2
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Profile builders
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
/**
|
|
7
|
+
* Generates the "planu-safe" profile:
|
|
8
|
+
* - Approval on-request for mutations
|
|
9
|
+
* - Medium effort default
|
|
10
|
+
* - Allows common read/edit tools; denies destructive git ops without spec
|
|
11
|
+
*/
|
|
12
|
+
export function generatePlanuSafeProfile() {
|
|
13
|
+
return {
|
|
14
|
+
name: 'planu-safe',
|
|
15
|
+
permissions: {
|
|
16
|
+
allow: [
|
|
17
|
+
'mcp__planu__*',
|
|
18
|
+
'Read',
|
|
19
|
+
'Glob',
|
|
20
|
+
'Grep',
|
|
21
|
+
'Edit',
|
|
22
|
+
'Write',
|
|
23
|
+
'Bash(git status:*)',
|
|
24
|
+
'Bash(git log:*)',
|
|
25
|
+
'Bash(git diff:*)',
|
|
26
|
+
'Bash(pnpm typecheck:*)',
|
|
27
|
+
'Bash(pnpm lint:*)',
|
|
28
|
+
'Bash(pnpm test:*)',
|
|
29
|
+
],
|
|
30
|
+
deny: ['Bash(git push --force:*)', 'Bash(git reset --hard:*)', 'Bash(git clean -f:*)'],
|
|
31
|
+
},
|
|
32
|
+
env: {
|
|
33
|
+
PLANU_EFFORT_DEFAULT: 'medium',
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generates the "planu-fast" profile:
|
|
39
|
+
* - Auto-approve all Planu tools and read ops
|
|
40
|
+
* - Low effort for reads, medium for writes
|
|
41
|
+
* - Allows all Planu tools without interruption
|
|
42
|
+
*/
|
|
43
|
+
export function generatePlanuFastProfile() {
|
|
44
|
+
return {
|
|
45
|
+
name: 'planu-fast',
|
|
46
|
+
permissions: {
|
|
47
|
+
allow: ['mcp__planu__*', 'Read', 'Glob', 'Grep', 'Edit', 'Write', 'Bash(*)'],
|
|
48
|
+
deny: [],
|
|
49
|
+
},
|
|
50
|
+
env: {
|
|
51
|
+
PLANU_EFFORT_DEFAULT: 'low',
|
|
52
|
+
PLANU_AUTO_APPROVE: '1',
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Settings merge
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
/**
|
|
60
|
+
* Reads .claude/settings.json at settingsPath, merges profiles into it,
|
|
61
|
+
* and writes it back. Idempotent: profiles with the same name are replaced.
|
|
62
|
+
*/
|
|
63
|
+
export function mergeProfilesIntoSettings(settingsPath, profiles) {
|
|
64
|
+
let settings = {};
|
|
65
|
+
/* v8 ignore start */
|
|
66
|
+
if (existsSync(settingsPath)) {
|
|
67
|
+
try {
|
|
68
|
+
const raw = readFileSync(settingsPath, 'utf8');
|
|
69
|
+
settings = JSON.parse(raw);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
settings = {};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/* v8 ignore stop */
|
|
76
|
+
const existing = (settings.profiles ?? []);
|
|
77
|
+
const merged = [...existing];
|
|
78
|
+
for (const profile of profiles) {
|
|
79
|
+
const idx = merged.findIndex((p) => p.name === profile.name);
|
|
80
|
+
if (idx >= 0) {
|
|
81
|
+
merged[idx] = profile;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
merged.push(profile);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
settings.profiles = merged;
|
|
88
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=profile-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-generator.js","sourceRoot":"","sources":["../../../src/engine/hooks/profile-generator.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIlE,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE;YACX,KAAK,EAAE;gBACL,eAAe;gBACf,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,MAAM;gBACN,OAAO;gBACP,oBAAoB;gBACpB,iBAAiB;gBACjB,kBAAkB;gBAClB,wBAAwB;gBACxB,mBAAmB;gBACnB,mBAAmB;aACpB;YACD,IAAI,EAAE,CAAC,0BAA0B,EAAE,0BAA0B,EAAE,sBAAsB,CAAC;SACvF;QACD,GAAG,EAAE;YACH,oBAAoB,EAAE,QAAQ;SAC/B;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;YAC5E,IAAI,EAAE,EAAE;SACT;QACD,GAAG,EAAE;YACH,oBAAoB,EAAE,KAAK;YAC3B,kBAAkB,EAAE,GAAG;SACxB;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,YAAoB,EAAE,QAAyB;IACvF,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAE3C,qBAAqB;IACrB,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC/C,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IACD,oBAAoB;IAEpB,MAAM,QAAQ,GAAG,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAoB,CAAC;IAC9D,MAAM,MAAM,GAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC;IAE9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC3B,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACzE,CAAC"}
|