codingbuddy 5.1.3 → 5.3.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/README.md +9 -0
- package/dist/src/agent/agent-prompt.builder.js +135 -2
- package/dist/src/agent/agent-stack.loader.d.ts +3 -0
- package/dist/src/agent/agent-stack.loader.js +38 -0
- package/dist/src/agent/agent-stack.schema.d.ts +14 -0
- package/dist/src/agent/agent-stack.schema.js +19 -0
- package/dist/src/agent/agent-stack.service.d.ts +15 -0
- package/dist/src/agent/agent-stack.service.js +112 -0
- package/dist/src/agent/agent.module.js +5 -2
- package/dist/src/agent/agent.service.d.ts +8 -1
- package/dist/src/agent/agent.service.js +126 -40
- package/dist/src/agent/agent.types.d.ts +26 -46
- package/dist/src/agent/council-preset.service.d.ts +6 -0
- package/dist/src/agent/council-preset.service.js +46 -0
- package/dist/src/agent/council-preset.types.d.ts +6 -0
- package/dist/src/agent/council-preset.types.js +3 -0
- package/dist/src/agent/execution-plan.d.ts +8 -0
- package/dist/src/agent/execution-plan.js +73 -0
- package/dist/src/agent/execution-plan.types.d.ts +74 -0
- package/dist/src/agent/execution-plan.types.js +3 -0
- package/dist/src/agent/index.d.ts +8 -0
- package/dist/src/agent/index.js +8 -0
- package/dist/src/agent/teams-capability.service.d.ts +11 -0
- package/dist/src/agent/teams-capability.service.js +74 -0
- package/dist/src/agent/teams-capability.types.d.ts +6 -0
- package/dist/src/agent/teams-capability.types.js +3 -0
- package/dist/src/app.module.js +2 -0
- package/dist/src/cli/cli.d.ts +4 -3
- package/dist/src/cli/cli.js +172 -1
- package/dist/src/cli/cli.types.d.ts +18 -0
- package/dist/src/cli/completion/completion.d.ts +16 -0
- package/dist/src/cli/completion/completion.js +276 -0
- package/dist/src/cli/completion/index.d.ts +2 -0
- package/dist/src/cli/completion/index.js +7 -0
- package/dist/src/cli/init/init.constants.js +0 -1
- package/dist/src/cli/plugin/create-plugin.command.d.ts +21 -0
- package/dist/src/cli/plugin/create-plugin.command.js +151 -0
- package/dist/src/cli/plugin/install.command.d.ts +10 -0
- package/dist/src/cli/plugin/install.command.js +31 -0
- package/dist/src/cli/plugin/plugins.command.d.ts +9 -0
- package/dist/src/cli/plugin/plugins.command.js +51 -0
- package/dist/src/cli/plugin/search.command.d.ts +9 -0
- package/dist/src/cli/plugin/search.command.js +53 -0
- package/dist/src/cli/plugin/uninstall.command.d.ts +12 -0
- package/dist/src/cli/plugin/uninstall.command.js +79 -0
- package/dist/src/cli/plugin/update.command.d.ts +11 -0
- package/dist/src/cli/plugin/update.command.js +103 -0
- package/dist/src/cli/run-tui.d.ts +1 -0
- package/dist/src/cli/run-tui.js +7 -1
- package/dist/src/collaboration/council-summary.service.d.ts +2 -0
- package/dist/src/collaboration/council-summary.service.js +114 -0
- package/dist/src/collaboration/council-summary.types.d.ts +24 -0
- package/dist/src/collaboration/council-summary.types.js +3 -0
- package/dist/src/collaboration/index.d.ts +2 -0
- package/dist/src/collaboration/index.js +3 -1
- package/dist/src/config/config.schema.d.ts +3 -0
- package/dist/src/config/config.schema.js +5 -0
- package/dist/src/context/briefing-loader.service.d.ts +27 -0
- package/dist/src/context/briefing-loader.service.js +124 -0
- package/dist/src/context/briefing.service.d.ts +27 -0
- package/dist/src/context/briefing.service.js +181 -0
- package/dist/src/context/briefing.types.d.ts +13 -0
- package/dist/src/context/briefing.types.js +6 -0
- package/dist/src/context/context.module.js +16 -2
- package/dist/src/context/index.d.ts +2 -0
- package/dist/src/context/index.js +2 -0
- package/dist/src/keyword/keyword.types.d.ts +8 -0
- package/dist/src/main.js +0 -17
- package/dist/src/mcp/handlers/agent.handler.d.ts +6 -1
- package/dist/src/mcp/handlers/agent.handler.js +81 -8
- package/dist/src/mcp/handlers/briefing.handler.d.ts +12 -0
- package/dist/src/mcp/handlers/briefing.handler.js +71 -0
- package/dist/src/mcp/handlers/checklist-context.handler.d.ts +3 -1
- package/dist/src/mcp/handlers/checklist-context.handler.js +17 -2
- package/dist/src/mcp/handlers/discussion.handler.d.ts +3 -0
- package/dist/src/mcp/handlers/discussion.handler.js +22 -1
- package/dist/src/mcp/handlers/index.d.ts +4 -0
- package/dist/src/mcp/handlers/index.js +9 -1
- package/dist/src/mcp/handlers/mode.handler.d.ts +9 -1
- package/dist/src/mcp/handlers/mode.handler.js +79 -2
- package/dist/src/mcp/handlers/quality-report.handler.d.ts +14 -0
- package/dist/src/mcp/handlers/quality-report.handler.js +93 -0
- package/dist/src/mcp/handlers/resume.handler.d.ts +12 -0
- package/dist/src/mcp/handlers/resume.handler.js +63 -0
- package/dist/src/mcp/handlers/rule-impact.handler.d.ts +23 -0
- package/dist/src/mcp/handlers/rule-impact.handler.js +241 -0
- package/dist/src/mcp/handlers/skill.handler.js +2 -2
- package/dist/src/mcp/mcp.module.js +6 -0
- package/dist/src/plugin/plugin-installer.service.d.ts +41 -0
- package/dist/src/plugin/plugin-installer.service.js +183 -0
- package/dist/src/plugin/plugin-manifest.schema.d.ts +21 -0
- package/dist/src/plugin/plugin-manifest.schema.js +45 -0
- package/dist/src/plugin/plugin.module.d.ts +2 -0
- package/dist/src/plugin/plugin.module.js +17 -0
- package/dist/src/plugin/plugin.types.d.ts +7 -0
- package/dist/src/plugin/plugin.types.js +3 -0
- package/dist/src/plugin/registry-client.d.ts +24 -0
- package/dist/src/plugin/registry-client.js +45 -0
- package/dist/src/rules/rule-event-collector.d.ts +7 -0
- package/dist/src/rules/rule-event-collector.js +38 -0
- package/dist/src/rules/rule-event.types.d.ts +9 -0
- package/dist/src/rules/rule-event.types.js +10 -0
- package/dist/src/rules/rule-stats-writer.d.ts +23 -0
- package/dist/src/rules/rule-stats-writer.js +138 -0
- package/dist/src/rules/rules.module.js +4 -2
- package/dist/src/rules/rules.service.d.ts +8 -1
- package/dist/src/rules/rules.service.js +3 -0
- package/dist/src/rules/skill.schema.d.ts +10 -0
- package/dist/src/rules/skill.schema.js +42 -0
- package/dist/src/shared/rules-core.d.ts +7 -1
- package/dist/src/shared/rules-core.js +6 -0
- package/dist/src/shared/version.d.ts +1 -1
- package/dist/src/shared/version.js +1 -1
- package/dist/src/ship/file-specialist-mapper.d.ts +9 -0
- package/dist/src/ship/file-specialist-mapper.js +56 -0
- package/dist/src/ship/quality-report.service.d.ts +6 -0
- package/dist/src/ship/quality-report.service.js +56 -0
- package/dist/src/ship/quality-report.types.d.ts +20 -0
- package/dist/src/ship/quality-report.types.js +3 -0
- package/dist/src/ship/ship.module.d.ts +2 -0
- package/dist/src/ship/ship.module.js +21 -0
- package/dist/src/skill/i18n/keywords.js +921 -0
- package/dist/src/skill/skill-recommendation.service.d.ts +10 -2
- package/dist/src/skill/skill-recommendation.service.js +120 -16
- package/dist/src/skill/skill-recommendation.types.d.ts +5 -0
- package/dist/src/skill/skill.module.js +2 -0
- package/dist/src/tui/events/hud-file-bridge.d.ts +4 -0
- package/dist/src/tui/events/hud-file-bridge.js +36 -0
- package/dist/src/tui/testing/tui-test-utils.d.ts +2 -0
- package/dist/src/tui/testing/tui-test-utils.js +25 -0
- package/dist/src/tui-bundle.mjs +239 -36
- package/package.json +7 -2
- package/dist/api/mcp.js.map +0 -1
- package/dist/src/agent/agent-prompt.builder.js.map +0 -1
- package/dist/src/agent/agent-summary.utils.js.map +0 -1
- package/dist/src/agent/agent.module.js.map +0 -1
- package/dist/src/agent/agent.service.js.map +0 -1
- package/dist/src/agent/agent.types.js.map +0 -1
- package/dist/src/agent/index.js.map +0 -1
- package/dist/src/analyzer/analyzer.module.js.map +0 -1
- package/dist/src/analyzer/analyzer.service.js.map +0 -1
- package/dist/src/analyzer/analyzer.types.js.map +0 -1
- package/dist/src/analyzer/code.sampler.js.map +0 -1
- package/dist/src/analyzer/config.analyzer.js.map +0 -1
- package/dist/src/analyzer/conventions.analyzer.js.map +0 -1
- package/dist/src/analyzer/conventions.schemas.js.map +0 -1
- package/dist/src/analyzer/conventions.types.js.map +0 -1
- package/dist/src/analyzer/directory.analyzer.js.map +0 -1
- package/dist/src/analyzer/index.js.map +0 -1
- package/dist/src/analyzer/package.analyzer.js.map +0 -1
- package/dist/src/app.module.js.map +0 -1
- package/dist/src/checklist/checklist.module.js.map +0 -1
- package/dist/src/checklist/checklist.schema.js.map +0 -1
- package/dist/src/checklist/checklist.service.js.map +0 -1
- package/dist/src/checklist/checklist.types.js.map +0 -1
- package/dist/src/checklist/index.js.map +0 -1
- package/dist/src/cli/cli.js.map +0 -1
- package/dist/src/cli/cli.types.js.map +0 -1
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cli/init/claude-settings.utils.js.map +0 -1
- package/dist/src/cli/init/config.generator.js.map +0 -1
- package/dist/src/cli/init/config.writer.js.map +0 -1
- package/dist/src/cli/init/gitignore.utils.js.map +0 -1
- package/dist/src/cli/init/index.js.map +0 -1
- package/dist/src/cli/init/init.command.js.map +0 -1
- package/dist/src/cli/init/init.constants.js.map +0 -1
- package/dist/src/cli/init/init.wizard.js.map +0 -1
- package/dist/src/cli/init/prompt.builder.js.map +0 -1
- package/dist/src/cli/init/prompts/agent-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/architecture-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/basic-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/conventions-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/index.js.map +0 -1
- package/dist/src/cli/init/prompts/language-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/model-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +0 -1
- package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +0 -1
- package/dist/src/cli/init/summary/index.js.map +0 -1
- package/dist/src/cli/init/summary/summary.prompt.js.map +0 -1
- package/dist/src/cli/init/summary/summary.renderer.js.map +0 -1
- package/dist/src/cli/init/templates/config-renderer.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/default.template.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/express.template.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/index.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/nestjs.template.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/nextjs.template.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/node.template.js.map +0 -1
- package/dist/src/cli/init/templates/frameworks/react.template.js.map +0 -1
- package/dist/src/cli/init/templates/index.js.map +0 -1
- package/dist/src/cli/init/templates/template.renderer.js.map +0 -1
- package/dist/src/cli/init/templates/template.selector.js.map +0 -1
- package/dist/src/cli/init/templates/template.types.js.map +0 -1
- package/dist/src/cli/restart-tui.js.map +0 -1
- package/dist/src/cli/run-tui.js.map +0 -1
- package/dist/src/cli/utils/console.js.map +0 -1
- package/dist/src/cli/utils/index.js.map +0 -1
- package/dist/src/collaboration/discussion-engine.js.map +0 -1
- package/dist/src/collaboration/index.js.map +0 -1
- package/dist/src/collaboration/opinion-adapter.js.map +0 -1
- package/dist/src/collaboration/terminal-formatter.js.map +0 -1
- package/dist/src/collaboration/types.js.map +0 -1
- package/dist/src/config/config-diff.service.js.map +0 -1
- package/dist/src/config/config.loader.js.map +0 -1
- package/dist/src/config/config.module.js.map +0 -1
- package/dist/src/config/config.schema.js.map +0 -1
- package/dist/src/config/config.service.js.map +0 -1
- package/dist/src/config/context.loader.js.map +0 -1
- package/dist/src/config/ignore.parser.js.map +0 -1
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/context/context-archive.service.js.map +0 -1
- package/dist/src/context/context-archive.types.js.map +0 -1
- package/dist/src/context/context-document.service.js.map +0 -1
- package/dist/src/context/context-document.types.js.map +0 -1
- package/dist/src/context/context-parser.utils.js.map +0 -1
- package/dist/src/context/context-serializer.utils.js.map +0 -1
- package/dist/src/context/context.module.js.map +0 -1
- package/dist/src/context/context.service.js.map +0 -1
- package/dist/src/context/context.types.js.map +0 -1
- package/dist/src/context/index.js.map +0 -1
- package/dist/src/context/intent-patterns.js.map +0 -1
- package/dist/src/custom/custom.module.js.map +0 -1
- package/dist/src/custom/custom.service.js.map +0 -1
- package/dist/src/custom/custom.types.js.map +0 -1
- package/dist/src/custom/index.js.map +0 -1
- package/dist/src/diagnostic/diagnostic-log.service.js.map +0 -1
- package/dist/src/diagnostic/diagnostic.module.js.map +0 -1
- package/dist/src/diagnostic/diagnostic.types.js.map +0 -1
- package/dist/src/diagnostic/index.js.map +0 -1
- package/dist/src/impact/impact-event.service.js.map +0 -1
- package/dist/src/impact/impact-report.service.js.map +0 -1
- package/dist/src/impact/impact.module.js.map +0 -1
- package/dist/src/impact/impact.types.js.map +0 -1
- package/dist/src/impact/index.js.map +0 -1
- package/dist/src/keyword/activation-message.builder.js.map +0 -1
- package/dist/src/keyword/auto-executor.js.map +0 -1
- package/dist/src/keyword/auto-executor.types.js.map +0 -1
- package/dist/src/keyword/auto-formatter.js.map +0 -1
- package/dist/src/keyword/auto-prompt-builder.js.map +0 -1
- package/dist/src/keyword/complexity-classifier.js.map +0 -1
- package/dist/src/keyword/complexity-indicators.js.map +0 -1
- package/dist/src/keyword/diff-analyzer.js.map +0 -1
- package/dist/src/keyword/explicit-pattern-matcher.js.map +0 -1
- package/dist/src/keyword/index.js.map +0 -1
- package/dist/src/keyword/keyword.module.js.map +0 -1
- package/dist/src/keyword/keyword.service.js.map +0 -1
- package/dist/src/keyword/keyword.types.js.map +0 -1
- package/dist/src/keyword/patterns/agent.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/ai-ml.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/backend.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/context.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/data-science.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/data.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/devops.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/explicit.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/frontend.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/index.js.map +0 -1
- package/dist/src/keyword/patterns/intent-pattern-checks.js.map +0 -1
- package/dist/src/keyword/patterns/intent-patterns.types.js.map +0 -1
- package/dist/src/keyword/patterns/meta-discussion.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/mobile.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/platform.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/security.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/systems.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/test.patterns.js.map +0 -1
- package/dist/src/keyword/patterns/tooling.patterns.js.map +0 -1
- package/dist/src/keyword/primary-agent-resolver.js.map +0 -1
- package/dist/src/keyword/rule-filter.js.map +0 -1
- package/dist/src/keyword/srp-template.js.map +0 -1
- package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js.map +0 -1
- package/dist/src/keyword/strategies/act-agent.strategy.js.map +0 -1
- package/dist/src/keyword/strategies/eval-agent.strategy.js.map +0 -1
- package/dist/src/keyword/strategies/index.js.map +0 -1
- package/dist/src/keyword/strategies/plan-agent.strategy.js.map +0 -1
- package/dist/src/keyword/strategies/resolution-strategy.interface.js.map +0 -1
- package/dist/src/keyword/taskmaestro-detector.js.map +0 -1
- package/dist/src/keyword/visual-data.builder.js.map +0 -1
- package/dist/src/main.js.map +0 -1
- package/dist/src/mcp/handlers/abstract-handler.js.map +0 -1
- package/dist/src/mcp/handlers/agent.handler.js.map +0 -1
- package/dist/src/mcp/handlers/base.handler.js.map +0 -1
- package/dist/src/mcp/handlers/checklist-context.handler.js.map +0 -1
- package/dist/src/mcp/handlers/config.handler.js.map +0 -1
- package/dist/src/mcp/handlers/context-archive.handler.js.map +0 -1
- package/dist/src/mcp/handlers/context-document.handler.js.map +0 -1
- package/dist/src/mcp/handlers/conventions.handler.js.map +0 -1
- package/dist/src/mcp/handlers/discussion.handler.js.map +0 -1
- package/dist/src/mcp/handlers/discussion.types.js.map +0 -1
- package/dist/src/mcp/handlers/impact.handler.js.map +0 -1
- package/dist/src/mcp/handlers/index.js.map +0 -1
- package/dist/src/mcp/handlers/mode.handler.js.map +0 -1
- package/dist/src/mcp/handlers/pipeline.handler.js.map +0 -1
- package/dist/src/mcp/handlers/plugin-validation.handler.js.map +0 -1
- package/dist/src/mcp/handlers/release-check.handler.js.map +0 -1
- package/dist/src/mcp/handlers/rule-insights.handler.js.map +0 -1
- package/dist/src/mcp/handlers/rules.handler.js.map +0 -1
- package/dist/src/mcp/handlers/skill.handler.js.map +0 -1
- package/dist/src/mcp/handlers/tui.handler.js.map +0 -1
- package/dist/src/mcp/mcp-serverless.js.map +0 -1
- package/dist/src/mcp/mcp.controller.js.map +0 -1
- package/dist/src/mcp/mcp.module.js.map +0 -1
- package/dist/src/mcp/mcp.service.js.map +0 -1
- package/dist/src/mcp/response.utils.js.map +0 -1
- package/dist/src/mcp/sse-auth.guard.js.map +0 -1
- package/dist/src/model/index.js.map +0 -1
- package/dist/src/model/model-resolver.service.js.map +0 -1
- package/dist/src/model/model.constants.js.map +0 -1
- package/dist/src/model/model.resolver.js.map +0 -1
- package/dist/src/model/model.types.js.map +0 -1
- package/dist/src/parallel-validation/extract-file-paths.js.map +0 -1
- package/dist/src/parallel-validation/index.js.map +0 -1
- package/dist/src/parallel-validation/overlap-matrix.js.map +0 -1
- package/dist/src/parallel-validation/parallel-validation.handler.js.map +0 -1
- package/dist/src/parallel-validation/parallel-validation.types.js.map +0 -1
- package/dist/src/parallel-validation/wave-splitter.js.map +0 -1
- package/dist/src/pipeline/index.js.map +0 -1
- package/dist/src/pipeline/pipeline.executors.js.map +0 -1
- package/dist/src/pipeline/pipeline.module.js.map +0 -1
- package/dist/src/pipeline/pipeline.service.js.map +0 -1
- package/dist/src/pipeline/pipeline.types.js.map +0 -1
- package/dist/src/rules/agent.schema.js.map +0 -1
- package/dist/src/rules/rule-insights.service.js.map +0 -1
- package/dist/src/rules/rule-tracker.js.map +0 -1
- package/dist/src/rules/rules-content.utils.js.map +0 -1
- package/dist/src/rules/rules.module.js.map +0 -1
- package/dist/src/rules/rules.service.js.map +0 -1
- package/dist/src/rules/rules.types.js.map +0 -1
- package/dist/src/rules/skill.schema.js.map +0 -1
- package/dist/src/shared/agent.utils.js.map +0 -1
- package/dist/src/shared/async.utils.js.map +0 -1
- package/dist/src/shared/client-type.js.map +0 -1
- package/dist/src/shared/error.utils.js.map +0 -1
- package/dist/src/shared/esm-import.js.map +0 -1
- package/dist/src/shared/event-bridge-reader.js.map +0 -1
- package/dist/src/shared/file.utils.js.map +0 -1
- package/dist/src/shared/filesystem.interface.js.map +0 -1
- package/dist/src/shared/format.utils.js.map +0 -1
- package/dist/src/shared/keyword-core.js.map +0 -1
- package/dist/src/shared/language.service.js.map +0 -1
- package/dist/src/shared/language.types.js.map +0 -1
- package/dist/src/shared/lru-cache.js.map +0 -1
- package/dist/src/shared/node-filesystem.service.js.map +0 -1
- package/dist/src/shared/path.utils.js.map +0 -1
- package/dist/src/shared/pattern-matcher.js.map +0 -1
- package/dist/src/shared/rules-core.js.map +0 -1
- package/dist/src/shared/security.utils.js.map +0 -1
- package/dist/src/shared/slug.utils.js.map +0 -1
- package/dist/src/shared/tui-bundle-path.js.map +0 -1
- package/dist/src/shared/validation.constants.js.map +0 -1
- package/dist/src/shared/verbosity.types.js.map +0 -1
- package/dist/src/shared/version.js.map +0 -1
- package/dist/src/shared/version.utils.js.map +0 -1
- package/dist/src/skill/i18n/index.js.map +0 -1
- package/dist/src/skill/i18n/keywords.js.map +0 -1
- package/dist/src/skill/i18n/keywords.types.js.map +0 -1
- package/dist/src/skill/index.js.map +0 -1
- package/dist/src/skill/skill-content.utils.js.map +0 -1
- package/dist/src/skill/skill-recommendation.service.js.map +0 -1
- package/dist/src/skill/skill-recommendation.types.js.map +0 -1
- package/dist/src/skill/skill-triggers.js.map +0 -1
- package/dist/src/skill/skill.module.js.map +0 -1
- package/dist/src/state/index.js.map +0 -1
- package/dist/src/state/state.module.js.map +0 -1
- package/dist/src/state/state.service.js.map +0 -1
- package/dist/src/state/state.types.js.map +0 -1
- package/dist/src/tui/__perf__/memory-stability.spec.d.ts +0 -1
- package/dist/src/tui/__perf__/memory-stability.spec.js +0 -105
- package/dist/src/tui/__perf__/memory-stability.spec.js.map +0 -1
- package/dist/src/tui/__perf__/rendering-performance.spec.d.ts +0 -1
- package/dist/src/tui/__perf__/rendering-performance.spec.js +0 -166
- package/dist/src/tui/__perf__/rendering-performance.spec.js.map +0 -1
- package/dist/src/tui/cli-flags.js.map +0 -1
- package/dist/src/tui/components/ActModeScreen.js.map +0 -1
- package/dist/src/tui/components/ActivityVisualizer.js.map +0 -1
- package/dist/src/tui/components/ActivityVisualizer.spec.d.ts +0 -1
- package/dist/src/tui/components/ActivityVisualizer.spec.js +0 -91
- package/dist/src/tui/components/ActivityVisualizer.spec.js.map +0 -1
- package/dist/src/tui/components/AgentDiscussionPanel.js.map +0 -1
- package/dist/src/tui/components/AgentDiscussionPanel.spec.d.ts +0 -1
- package/dist/src/tui/components/AgentDiscussionPanel.spec.js +0 -229
- package/dist/src/tui/components/AgentDiscussionPanel.spec.js.map +0 -1
- package/dist/src/tui/components/ChecklistPanel.js.map +0 -1
- package/dist/src/tui/components/ChecklistPanel.spec.d.ts +0 -1
- package/dist/src/tui/components/ChecklistPanel.spec.js +0 -45
- package/dist/src/tui/components/ChecklistPanel.spec.js.map +0 -1
- package/dist/src/tui/components/ContextSection.js.map +0 -1
- package/dist/src/tui/components/EvalModeScreen.js.map +0 -1
- package/dist/src/tui/components/FlowMap.js.map +0 -1
- package/dist/src/tui/components/FlowMap.spec.d.ts +0 -1
- package/dist/src/tui/components/FlowMap.spec.js +0 -147
- package/dist/src/tui/components/FlowMap.spec.js.map +0 -1
- package/dist/src/tui/components/FocusedAgentPanel.js.map +0 -1
- package/dist/src/tui/components/FocusedAgentPanel.spec.d.ts +0 -1
- package/dist/src/tui/components/FocusedAgentPanel.spec.js +0 -183
- package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +0 -1
- package/dist/src/tui/components/HeaderBar.js.map +0 -1
- package/dist/src/tui/components/HeaderBar.spec.d.ts +0 -1
- package/dist/src/tui/components/HeaderBar.spec.js +0 -96
- package/dist/src/tui/components/HeaderBar.spec.js.map +0 -1
- package/dist/src/tui/components/ModeScreenRouter.js.map +0 -1
- package/dist/src/tui/components/PlanModeScreen.js.map +0 -1
- package/dist/src/tui/components/SessionDashboard.js.map +0 -1
- package/dist/src/tui/components/SessionTabBar.js.map +0 -1
- package/dist/src/tui/components/SessionTabBar.spec.d.ts +0 -1
- package/dist/src/tui/components/SessionTabBar.spec.js +0 -59
- package/dist/src/tui/components/SessionTabBar.spec.js.map +0 -1
- package/dist/src/tui/components/StageHealthBar.js.map +0 -1
- package/dist/src/tui/components/StageHealthBar.spec.d.ts +0 -1
- package/dist/src/tui/components/StageHealthBar.spec.js +0 -99
- package/dist/src/tui/components/StageHealthBar.spec.js.map +0 -1
- package/dist/src/tui/components/act-screen.pure.js.map +0 -1
- package/dist/src/tui/components/activity-visualizer.pure.js.map +0 -1
- package/dist/src/tui/components/agent-discussion-panel.pure.js.map +0 -1
- package/dist/src/tui/components/checklist-panel.pure.js.map +0 -1
- package/dist/src/tui/components/context-section.pure.js.map +0 -1
- package/dist/src/tui/components/eval-screen.pure.js.map +0 -1
- package/dist/src/tui/components/flow-map.pure.js.map +0 -1
- package/dist/src/tui/components/focused-agent.pure.js.map +0 -1
- package/dist/src/tui/components/grid-layout.pure.js.map +0 -1
- package/dist/src/tui/components/index.js.map +0 -1
- package/dist/src/tui/components/live.pure.js.map +0 -1
- package/dist/src/tui/components/plan-screen.pure.js.map +0 -1
- package/dist/src/tui/components/session-dashboard.pure.js.map +0 -1
- package/dist/src/tui/components/session-tab-bar.pure.js.map +0 -1
- package/dist/src/tui/components/stage-health.pure.js.map +0 -1
- package/dist/src/tui/dashboard-app.js.map +0 -1
- package/dist/src/tui/dashboard-app.spec.d.ts +0 -1
- package/dist/src/tui/dashboard-app.spec.js +0 -158
- package/dist/src/tui/dashboard-app.spec.js.map +0 -1
- package/dist/src/tui/dashboard-types.js.map +0 -1
- package/dist/src/tui/ensure-tui-ready.js.map +0 -1
- package/dist/src/tui/eventbus-ui.integration.spec.d.ts +0 -1
- package/dist/src/tui/eventbus-ui.integration.spec.js +0 -577
- package/dist/src/tui/eventbus-ui.integration.spec.js.map +0 -1
- package/dist/src/tui/events/agent-metadata.service.js.map +0 -1
- package/dist/src/tui/events/agent-metadata.types.js.map +0 -1
- package/dist/src/tui/events/event-bus.js.map +0 -1
- package/dist/src/tui/events/events.module.js.map +0 -1
- package/dist/src/tui/events/hud-file-bridge.js.map +0 -1
- package/dist/src/tui/events/index.js.map +0 -1
- package/dist/src/tui/events/parse-agent.js.map +0 -1
- package/dist/src/tui/events/parse-tool-response.js.map +0 -1
- package/dist/src/tui/events/response-event-extractor.js.map +0 -1
- package/dist/src/tui/events/tui-interceptor.js.map +0 -1
- package/dist/src/tui/events/types.js.map +0 -1
- package/dist/src/tui/hooks/index.js.map +0 -1
- package/dist/src/tui/hooks/use-dashboard-state.js.map +0 -1
- package/dist/src/tui/hooks/use-focus-agent.js.map +0 -1
- package/dist/src/tui/hooks/use-multi-session-state.js.map +0 -1
- package/dist/src/tui/hooks/use-terminal-size.js.map +0 -1
- package/dist/src/tui/hooks/use-tick.js.map +0 -1
- package/dist/src/tui/hooks/use-tick.spec.d.ts +0 -1
- package/dist/src/tui/hooks/use-tick.spec.js +0 -70
- package/dist/src/tui/hooks/use-tick.spec.js.map +0 -1
- package/dist/src/tui/index.js.map +0 -1
- package/dist/src/tui/ipc/index.js.map +0 -1
- package/dist/src/tui/ipc/instance-registry.js.map +0 -1
- package/dist/src/tui/ipc/ipc-bridge.js.map +0 -1
- package/dist/src/tui/ipc/ipc-client.js.map +0 -1
- package/dist/src/tui/ipc/ipc-debug.js.map +0 -1
- package/dist/src/tui/ipc/ipc-server.js.map +0 -1
- package/dist/src/tui/ipc/ipc-state-cache.js.map +0 -1
- package/dist/src/tui/ipc/ipc.types.js.map +0 -1
- package/dist/src/tui/ipc/multi-session-manager.js.map +0 -1
- package/dist/src/tui/ipc/shutdown-manager.js.map +0 -1
- package/dist/src/tui/ipc/test-utils.js.map +0 -1
- package/dist/src/tui/ipc/tui-auto-launcher.js.map +0 -1
- package/dist/src/tui/multi-session-app.js.map +0 -1
- package/dist/src/tui/multi-session-app.spec.d.ts +0 -1
- package/dist/src/tui/multi-session-app.spec.js +0 -95
- package/dist/src/tui/multi-session-app.spec.js.map +0 -1
- package/dist/src/tui/transport-tui.integration.spec.d.ts +0 -1
- package/dist/src/tui/transport-tui.integration.spec.js +0 -189
- package/dist/src/tui/transport-tui.integration.spec.js.map +0 -1
- package/dist/src/tui/tui-config.js.map +0 -1
- package/dist/src/tui/types.js.map +0 -1
- package/dist/src/tui/utils/color-buffer.js.map +0 -1
- package/dist/src/tui/utils/colors.js.map +0 -1
- package/dist/src/tui/utils/display-width.js.map +0 -1
- package/dist/src/tui/utils/edge-router.js.map +0 -1
- package/dist/src/tui/utils/icons.js.map +0 -1
- package/dist/src/tui/utils/index.js.map +0 -1
- package/dist/src/tui/utils/theme.js.map +0 -1
- package/dist/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var QualityReportHandler_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.QualityReportHandler = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const abstract_handler_1 = require("./abstract-handler");
|
|
16
|
+
const quality_report_service_1 = require("../../ship/quality-report.service");
|
|
17
|
+
const response_utils_1 = require("../response.utils");
|
|
18
|
+
const validation_constants_1 = require("../../shared/validation.constants");
|
|
19
|
+
const rule_event_collector_1 = require("../../rules/rule-event-collector");
|
|
20
|
+
let QualityReportHandler = QualityReportHandler_1 = class QualityReportHandler extends abstract_handler_1.AbstractHandler {
|
|
21
|
+
constructor(qualityReportService, ruleEventCollector) {
|
|
22
|
+
super();
|
|
23
|
+
this.qualityReportService = qualityReportService;
|
|
24
|
+
this.ruleEventCollector = ruleEventCollector;
|
|
25
|
+
this.logger = new common_1.Logger(QualityReportHandler_1.name);
|
|
26
|
+
}
|
|
27
|
+
getHandledTools() {
|
|
28
|
+
return ['pr_quality_report'];
|
|
29
|
+
}
|
|
30
|
+
async handleTool(_toolName, args) {
|
|
31
|
+
try {
|
|
32
|
+
const changedFiles = (0, validation_constants_1.extractStringArray)(args, 'changedFiles');
|
|
33
|
+
if (!changedFiles || changedFiles.length === 0) {
|
|
34
|
+
return (0, response_utils_1.createJsonResponse)(await this.qualityReportService.generateReport({ changedFiles: [] }));
|
|
35
|
+
}
|
|
36
|
+
const timeout = typeof args?.timeout === 'number' && args.timeout > 0 ? args.timeout : 30000;
|
|
37
|
+
const result = await this.qualityReportService.generateReport({
|
|
38
|
+
changedFiles,
|
|
39
|
+
timeout,
|
|
40
|
+
});
|
|
41
|
+
try {
|
|
42
|
+
const domains = result.domains;
|
|
43
|
+
if (domains?.length) {
|
|
44
|
+
const timestamp = new Date().toISOString();
|
|
45
|
+
for (const d of domains) {
|
|
46
|
+
this.ruleEventCollector.record({
|
|
47
|
+
type: 'specialist_dispatched',
|
|
48
|
+
timestamp,
|
|
49
|
+
domain: d.domain,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
}
|
|
56
|
+
return (0, response_utils_1.createJsonResponse)(result);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
this.logger.error(`Quality report failed: ${error}`);
|
|
60
|
+
return (0, response_utils_1.createErrorResponse)(`Quality report failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getToolDefinitions() {
|
|
64
|
+
return [
|
|
65
|
+
{
|
|
66
|
+
name: 'pr_quality_report',
|
|
67
|
+
description: 'Run specialist agents on changed files and generate a Quality Report for PR description',
|
|
68
|
+
inputSchema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
properties: {
|
|
71
|
+
changedFiles: {
|
|
72
|
+
type: 'array',
|
|
73
|
+
items: { type: 'string' },
|
|
74
|
+
description: 'List of changed file paths to analyze',
|
|
75
|
+
},
|
|
76
|
+
timeout: {
|
|
77
|
+
type: 'number',
|
|
78
|
+
description: 'Timeout in milliseconds (default: 30000)',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ['changedFiles'],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
exports.QualityReportHandler = QualityReportHandler;
|
|
88
|
+
exports.QualityReportHandler = QualityReportHandler = QualityReportHandler_1 = __decorate([
|
|
89
|
+
(0, common_1.Injectable)(),
|
|
90
|
+
__metadata("design:paramtypes", [quality_report_service_1.QualityReportService,
|
|
91
|
+
rule_event_collector_1.RuleEventCollector])
|
|
92
|
+
], QualityReportHandler);
|
|
93
|
+
//# sourceMappingURL=quality-report.handler.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ToolDefinition } from './base.handler';
|
|
2
|
+
import type { ToolResponse } from '../response.utils';
|
|
3
|
+
import { AbstractHandler } from './abstract-handler';
|
|
4
|
+
import { BriefingLoaderService } from '../../context/briefing-loader.service';
|
|
5
|
+
export declare class ResumeHandler extends AbstractHandler {
|
|
6
|
+
private readonly briefingLoaderService;
|
|
7
|
+
private readonly logger;
|
|
8
|
+
constructor(briefingLoaderService: BriefingLoaderService);
|
|
9
|
+
protected getHandledTools(): string[];
|
|
10
|
+
protected handleTool(_toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResponse>;
|
|
11
|
+
getToolDefinitions(): ToolDefinition[];
|
|
12
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var ResumeHandler_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ResumeHandler = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const abstract_handler_1 = require("./abstract-handler");
|
|
16
|
+
const briefing_loader_service_1 = require("../../context/briefing-loader.service");
|
|
17
|
+
const response_utils_1 = require("../response.utils");
|
|
18
|
+
const validation_constants_1 = require("../../shared/validation.constants");
|
|
19
|
+
let ResumeHandler = ResumeHandler_1 = class ResumeHandler extends abstract_handler_1.AbstractHandler {
|
|
20
|
+
constructor(briefingLoaderService) {
|
|
21
|
+
super();
|
|
22
|
+
this.briefingLoaderService = briefingLoaderService;
|
|
23
|
+
this.logger = new common_1.Logger(ResumeHandler_1.name);
|
|
24
|
+
}
|
|
25
|
+
getHandledTools() {
|
|
26
|
+
return ['resume_session'];
|
|
27
|
+
}
|
|
28
|
+
async handleTool(_toolName, args) {
|
|
29
|
+
try {
|
|
30
|
+
const briefingPath = (0, validation_constants_1.extractOptionalString)(args, 'briefingPath');
|
|
31
|
+
const result = await this.briefingLoaderService.restoreContext(briefingPath);
|
|
32
|
+
return (0, response_utils_1.createJsonResponse)(result);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
this.logger.error(`Session resume failed: ${error}`);
|
|
36
|
+
return (0, response_utils_1.createErrorResponse)(`Session resume failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
getToolDefinitions() {
|
|
40
|
+
return [
|
|
41
|
+
{
|
|
42
|
+
name: 'resume_session',
|
|
43
|
+
description: 'Load a previous session briefing to restore context and continue work',
|
|
44
|
+
inputSchema: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
briefingPath: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
description: 'Path to a specific briefing file. If omitted, loads the most recent briefing from docs/codingbuddy/briefings/',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: [],
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.ResumeHandler = ResumeHandler;
|
|
59
|
+
exports.ResumeHandler = ResumeHandler = ResumeHandler_1 = __decorate([
|
|
60
|
+
(0, common_1.Injectable)(),
|
|
61
|
+
__metadata("design:paramtypes", [briefing_loader_service_1.BriefingLoaderService])
|
|
62
|
+
], ResumeHandler);
|
|
63
|
+
//# sourceMappingURL=resume.handler.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AbstractHandler } from './abstract-handler';
|
|
2
|
+
import type { ToolDefinition } from './base.handler';
|
|
3
|
+
import type { ToolResponse } from '../response.utils';
|
|
4
|
+
import { RuleInsightsService } from '../../rules/rule-insights.service';
|
|
5
|
+
import { RulesService } from '../../rules/rules.service';
|
|
6
|
+
export declare class RuleImpactHandler extends AbstractHandler {
|
|
7
|
+
private readonly insightsService;
|
|
8
|
+
private readonly rulesService;
|
|
9
|
+
constructor(insightsService: RuleInsightsService, rulesService: RulesService);
|
|
10
|
+
protected getHandledTools(): string[];
|
|
11
|
+
protected handleTool(_toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResponse>;
|
|
12
|
+
getToolDefinitions(): ToolDefinition[];
|
|
13
|
+
private extractPeriod;
|
|
14
|
+
private getAllRuleNames;
|
|
15
|
+
private formatReport;
|
|
16
|
+
private appendSummary;
|
|
17
|
+
private appendTopRules;
|
|
18
|
+
private appendDomainCoverage;
|
|
19
|
+
private appendUnusedRules;
|
|
20
|
+
private appendTrends;
|
|
21
|
+
private appendSuggestions;
|
|
22
|
+
private inferDomain;
|
|
23
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RuleImpactHandler = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const path_1 = require("path");
|
|
15
|
+
const abstract_handler_1 = require("./abstract-handler");
|
|
16
|
+
const rule_insights_service_1 = require("../../rules/rule-insights.service");
|
|
17
|
+
const rule_tracker_1 = require("../../rules/rule-tracker");
|
|
18
|
+
const rules_service_1 = require("../../rules/rules.service");
|
|
19
|
+
const validation_constants_1 = require("../../shared/validation.constants");
|
|
20
|
+
const DEFAULT_STATS_PATH = (0, path_1.join)(process.cwd(), 'docs', 'codingbuddy', 'rule-stats.json');
|
|
21
|
+
const MINUTES_PER_VIOLATION = 15;
|
|
22
|
+
const MINUTES_PER_CHECK = 5;
|
|
23
|
+
const VALID_PERIODS = new Set(['week', 'month', 'all']);
|
|
24
|
+
let RuleImpactHandler = class RuleImpactHandler extends abstract_handler_1.AbstractHandler {
|
|
25
|
+
constructor(insightsService, rulesService) {
|
|
26
|
+
super();
|
|
27
|
+
this.insightsService = insightsService;
|
|
28
|
+
this.rulesService = rulesService;
|
|
29
|
+
}
|
|
30
|
+
getHandledTools() {
|
|
31
|
+
return ['get_rule_impact_report'];
|
|
32
|
+
}
|
|
33
|
+
async handleTool(_toolName, args) {
|
|
34
|
+
const statsPath = (0, validation_constants_1.extractOptionalString)(args, 'statsPath') ?? DEFAULT_STATS_PATH;
|
|
35
|
+
const period = this.extractPeriod(args);
|
|
36
|
+
let stats = {};
|
|
37
|
+
try {
|
|
38
|
+
const tracker = await rule_tracker_1.RuleTracker.fromFile(statsPath);
|
|
39
|
+
stats = tracker.getStats();
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
}
|
|
43
|
+
const allRuleNames = await this.getAllRuleNames();
|
|
44
|
+
const insights = this.insightsService.generateInsights(stats, allRuleNames);
|
|
45
|
+
if (insights.summary.totalRulesTracked === 0) {
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: 'text',
|
|
50
|
+
text: 'No data collected yet. Run some sessions to populate stats.',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const report = this.formatReport(insights, period);
|
|
56
|
+
return {
|
|
57
|
+
content: [{ type: 'text', text: report }],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
getToolDefinitions() {
|
|
61
|
+
return [
|
|
62
|
+
{
|
|
63
|
+
name: 'get_rule_impact_report',
|
|
64
|
+
description: 'Generate a formatted markdown impact report showing rule effectiveness: top rules by usage, unused rules, domain coverage, estimated time saved, and trend analysis',
|
|
65
|
+
inputSchema: {
|
|
66
|
+
type: 'object',
|
|
67
|
+
properties: {
|
|
68
|
+
period: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
description: 'Report period: "week", "month", or "all" (default: "all")',
|
|
71
|
+
enum: ['week', 'month', 'all'],
|
|
72
|
+
},
|
|
73
|
+
statsPath: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
description: 'Path to rule-stats.json file. Defaults to docs/codingbuddy/rule-stats.json',
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
required: [],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
extractPeriod(args) {
|
|
84
|
+
const raw = (0, validation_constants_1.extractOptionalString)(args, 'period');
|
|
85
|
+
if (raw && VALID_PERIODS.has(raw))
|
|
86
|
+
return raw;
|
|
87
|
+
return 'all';
|
|
88
|
+
}
|
|
89
|
+
async getAllRuleNames() {
|
|
90
|
+
try {
|
|
91
|
+
const results = await this.rulesService.searchRules('*');
|
|
92
|
+
return results.map(r => r.file.replace(/^rules\//, '').replace(/\.md$/, ''));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return [];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
formatReport(insights, period) {
|
|
99
|
+
const lines = [];
|
|
100
|
+
lines.push('# Rule Impact Report');
|
|
101
|
+
lines.push('');
|
|
102
|
+
lines.push(`> Period: **${period}** | Generated: ${new Date(insights.generatedAt).toISOString()}`);
|
|
103
|
+
lines.push('');
|
|
104
|
+
this.appendSummary(lines, insights);
|
|
105
|
+
this.appendTopRules(lines, insights);
|
|
106
|
+
this.appendDomainCoverage(lines, insights);
|
|
107
|
+
this.appendUnusedRules(lines, insights);
|
|
108
|
+
this.appendTrends(lines, insights);
|
|
109
|
+
this.appendSuggestions(lines, insights);
|
|
110
|
+
return lines.join('\n');
|
|
111
|
+
}
|
|
112
|
+
appendSummary(lines, insights) {
|
|
113
|
+
const { summary } = insights;
|
|
114
|
+
const timeSavedMin = summary.totalUsageCount * MINUTES_PER_VIOLATION +
|
|
115
|
+
summary.totalRulesTracked * MINUTES_PER_CHECK;
|
|
116
|
+
const timeSavedHours = (timeSavedMin / 60).toFixed(1);
|
|
117
|
+
lines.push('## Summary');
|
|
118
|
+
lines.push('');
|
|
119
|
+
lines.push(`| Metric | Value |`);
|
|
120
|
+
lines.push(`| --- | --- |`);
|
|
121
|
+
lines.push(`| Total Rule Applications | ${summary.totalUsageCount} |`);
|
|
122
|
+
lines.push(`| Rules Tracked | ${summary.totalRulesTracked} |`);
|
|
123
|
+
lines.push(`| Active Rules (last 7d) | ${summary.activeRules} |`);
|
|
124
|
+
lines.push(`| Stale Rules (>30d) | ${summary.staleRules} |`);
|
|
125
|
+
lines.push(`| **Estimated Time Saved** | **~${timeSavedHours} hours** (~${timeSavedMin} min) |`);
|
|
126
|
+
lines.push('');
|
|
127
|
+
}
|
|
128
|
+
appendTopRules(lines, insights) {
|
|
129
|
+
lines.push('## Top Rules');
|
|
130
|
+
lines.push('');
|
|
131
|
+
if (insights.topRules.length === 0) {
|
|
132
|
+
lines.push('_No rule usage data yet._');
|
|
133
|
+
lines.push('');
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
lines.push('| Rule | Applications | Classification |');
|
|
137
|
+
lines.push('| --- | ---: | --- |');
|
|
138
|
+
for (const rule of insights.topRules) {
|
|
139
|
+
const badge = rule.classification === 'high'
|
|
140
|
+
? '**HIGH**'
|
|
141
|
+
: rule.classification === 'medium'
|
|
142
|
+
? 'medium'
|
|
143
|
+
: 'low';
|
|
144
|
+
lines.push(`| ${rule.name} | ${rule.count} | ${badge} |`);
|
|
145
|
+
}
|
|
146
|
+
lines.push('');
|
|
147
|
+
}
|
|
148
|
+
appendDomainCoverage(lines, insights) {
|
|
149
|
+
lines.push('## Domain Coverage');
|
|
150
|
+
lines.push('');
|
|
151
|
+
const domainMap = new Map();
|
|
152
|
+
for (const rule of insights.topRules) {
|
|
153
|
+
const domain = this.inferDomain(rule.name);
|
|
154
|
+
const entry = domainMap.get(domain) ?? { checks: 0, rules: [] };
|
|
155
|
+
entry.checks += rule.count;
|
|
156
|
+
entry.rules.push(rule.name);
|
|
157
|
+
domainMap.set(domain, entry);
|
|
158
|
+
}
|
|
159
|
+
if (domainMap.size === 0) {
|
|
160
|
+
lines.push('_No domain coverage data yet._');
|
|
161
|
+
lines.push('');
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
lines.push('| Domain | Checks | Rules |');
|
|
165
|
+
lines.push('| --- | ---: | --- |');
|
|
166
|
+
const sorted = [...domainMap.entries()].sort((a, b) => b[1].checks - a[1].checks);
|
|
167
|
+
for (const [domain, data] of sorted) {
|
|
168
|
+
lines.push(`| ${domain} | ${data.checks} | ${data.rules.join(', ')} |`);
|
|
169
|
+
}
|
|
170
|
+
lines.push('');
|
|
171
|
+
}
|
|
172
|
+
appendUnusedRules(lines, insights) {
|
|
173
|
+
lines.push('## Unused Rules');
|
|
174
|
+
lines.push('');
|
|
175
|
+
if (insights.unusedRules.length === 0) {
|
|
176
|
+
lines.push('All rules are actively used.');
|
|
177
|
+
lines.push('');
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
lines.push(`${insights.unusedRules.length} rule(s) with 0 applications — consider removing or promoting:`);
|
|
181
|
+
lines.push('');
|
|
182
|
+
for (const rule of insights.unusedRules) {
|
|
183
|
+
lines.push(`- \`${rule}\``);
|
|
184
|
+
}
|
|
185
|
+
lines.push('');
|
|
186
|
+
}
|
|
187
|
+
appendTrends(lines, insights) {
|
|
188
|
+
lines.push('## Trend');
|
|
189
|
+
lines.push('');
|
|
190
|
+
const { trends } = insights;
|
|
191
|
+
if (trends.recentlyActive.length > 0) {
|
|
192
|
+
lines.push(`**Recently Active:** ${trends.recentlyActive.join(', ')}`);
|
|
193
|
+
lines.push('');
|
|
194
|
+
}
|
|
195
|
+
if (trends.emerging.length > 0) {
|
|
196
|
+
lines.push(`**Emerging:** ${trends.emerging.join(', ')}`);
|
|
197
|
+
lines.push('');
|
|
198
|
+
}
|
|
199
|
+
if (trends.declining.length > 0) {
|
|
200
|
+
lines.push(`**Declining:** ${trends.declining.join(', ')}`);
|
|
201
|
+
lines.push('');
|
|
202
|
+
}
|
|
203
|
+
if (trends.recentlyActive.length === 0 &&
|
|
204
|
+
trends.emerging.length === 0 &&
|
|
205
|
+
trends.declining.length === 0) {
|
|
206
|
+
lines.push('_No trend data available._');
|
|
207
|
+
lines.push('');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
appendSuggestions(lines, insights) {
|
|
211
|
+
if (insights.suggestions.length === 0)
|
|
212
|
+
return;
|
|
213
|
+
lines.push('## Suggestions');
|
|
214
|
+
lines.push('');
|
|
215
|
+
for (const s of insights.suggestions) {
|
|
216
|
+
lines.push(`- ${s}`);
|
|
217
|
+
}
|
|
218
|
+
lines.push('');
|
|
219
|
+
}
|
|
220
|
+
inferDomain(ruleName) {
|
|
221
|
+
const lower = ruleName.toLowerCase();
|
|
222
|
+
if (lower.includes('security') || lower.includes('auth'))
|
|
223
|
+
return 'security';
|
|
224
|
+
if (lower.includes('test') || lower.includes('tdd'))
|
|
225
|
+
return 'testing';
|
|
226
|
+
if (lower.includes('perf') || lower.includes('bundle'))
|
|
227
|
+
return 'performance';
|
|
228
|
+
if (lower.includes('access') || lower.includes('a11y') || lower.includes('aria'))
|
|
229
|
+
return 'accessibility';
|
|
230
|
+
if (lower.includes('seo') || lower.includes('meta'))
|
|
231
|
+
return 'seo';
|
|
232
|
+
return 'general';
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
exports.RuleImpactHandler = RuleImpactHandler;
|
|
236
|
+
exports.RuleImpactHandler = RuleImpactHandler = __decorate([
|
|
237
|
+
(0, common_1.Injectable)(),
|
|
238
|
+
__metadata("design:paramtypes", [rule_insights_service_1.RuleInsightsService,
|
|
239
|
+
rules_service_1.RulesService])
|
|
240
|
+
], RuleImpactHandler);
|
|
241
|
+
//# sourceMappingURL=rule-impact.handler.js.map
|
|
@@ -107,7 +107,7 @@ let SkillHandler = class SkillHandler extends abstract_handler_1.AbstractHandler
|
|
|
107
107
|
return (0, response_utils_1.createErrorResponse)(`Failed to recommend skills: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
handleListSkills(args) {
|
|
110
|
+
async handleListSkills(args) {
|
|
111
111
|
try {
|
|
112
112
|
const options = {};
|
|
113
113
|
if (typeof args?.minPriority === 'number') {
|
|
@@ -116,7 +116,7 @@ let SkillHandler = class SkillHandler extends abstract_handler_1.AbstractHandler
|
|
|
116
116
|
if (typeof args?.maxPriority === 'number') {
|
|
117
117
|
options.maxPriority = args.maxPriority;
|
|
118
118
|
}
|
|
119
|
-
const result = this.skillRecommendationService.listSkills(options);
|
|
119
|
+
const result = await this.skillRecommendationService.listSkills(options);
|
|
120
120
|
return (0, response_utils_1.createJsonResponse)(result);
|
|
121
121
|
}
|
|
122
122
|
catch (error) {
|
|
@@ -22,6 +22,7 @@ const diagnostic_module_1 = require("../diagnostic/diagnostic.module");
|
|
|
22
22
|
const events_1 = require("../tui/events");
|
|
23
23
|
const pipeline_module_1 = require("../pipeline/pipeline.module");
|
|
24
24
|
const impact_1 = require("../impact");
|
|
25
|
+
const ship_module_1 = require("../ship/ship.module");
|
|
25
26
|
const skill_recommendation_service_1 = require("../skill/skill-recommendation.service");
|
|
26
27
|
const language_service_1 = require("../shared/language.service");
|
|
27
28
|
const model_1 = require("../model");
|
|
@@ -44,6 +45,10 @@ const handlers = [
|
|
|
44
45
|
handlers_1.ImpactHandler,
|
|
45
46
|
handlers_1.PluginValidationHandler,
|
|
46
47
|
handlers_1.ReleaseCheckHandler,
|
|
48
|
+
handlers_1.QualityReportHandler,
|
|
49
|
+
handlers_1.BriefingHandler,
|
|
50
|
+
handlers_1.ResumeHandler,
|
|
51
|
+
handlers_1.RuleImpactHandler,
|
|
47
52
|
];
|
|
48
53
|
let McpModule = class McpModule {
|
|
49
54
|
};
|
|
@@ -63,6 +68,7 @@ exports.McpModule = McpModule = __decorate([
|
|
|
63
68
|
events_1.TuiEventsModule,
|
|
64
69
|
pipeline_module_1.PipelineModule,
|
|
65
70
|
impact_1.ImpactModule,
|
|
71
|
+
ship_module_1.ShipModule,
|
|
66
72
|
],
|
|
67
73
|
controllers: [mcp_controller_1.McpController],
|
|
68
74
|
providers: [
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface InstallOptions {
|
|
2
|
+
source: string;
|
|
3
|
+
targetRoot: string;
|
|
4
|
+
force: boolean;
|
|
5
|
+
version?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ResolvedSource {
|
|
8
|
+
source: string;
|
|
9
|
+
version?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InstallResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
pluginName?: string;
|
|
14
|
+
summary?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface PluginRecord {
|
|
18
|
+
name: string;
|
|
19
|
+
version: string;
|
|
20
|
+
source: string;
|
|
21
|
+
installedAt: string;
|
|
22
|
+
provides: {
|
|
23
|
+
agents: string[];
|
|
24
|
+
rules: string[];
|
|
25
|
+
skills: string[];
|
|
26
|
+
checklists: string[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export declare class PluginInstallerService {
|
|
30
|
+
resolveSource(nameOrUrl: string): Promise<ResolvedSource>;
|
|
31
|
+
private parseNameVersion;
|
|
32
|
+
resolveGitUrl(source: string): string;
|
|
33
|
+
install(options: InstallOptions): Promise<InstallResult>;
|
|
34
|
+
private isCompatible;
|
|
35
|
+
private compareVersions;
|
|
36
|
+
private detectConflicts;
|
|
37
|
+
private copyAssets;
|
|
38
|
+
private recordInstallation;
|
|
39
|
+
private cleanup;
|
|
40
|
+
private fail;
|
|
41
|
+
}
|