@contractspec/bundle.workspace 0.0.0-canary-20260113162409
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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/_virtual/rolldown_runtime.mjs +20 -0
- package/dist/adapters/ai.d.mts +12 -0
- package/dist/adapters/ai.d.mts.map +1 -0
- package/dist/adapters/ai.mjs +83 -0
- package/dist/adapters/ai.mjs.map +1 -0
- package/dist/adapters/factory.d.mts +29 -0
- package/dist/adapters/factory.d.mts.map +1 -0
- package/dist/adapters/factory.mjs +37 -0
- package/dist/adapters/factory.mjs.map +1 -0
- package/dist/adapters/fs.d.mts +12 -0
- package/dist/adapters/fs.d.mts.map +1 -0
- package/dist/adapters/fs.mjs +133 -0
- package/dist/adapters/fs.mjs.map +1 -0
- package/dist/adapters/git.d.mts +11 -0
- package/dist/adapters/git.d.mts.map +1 -0
- package/dist/adapters/git.mjs +84 -0
- package/dist/adapters/git.mjs.map +1 -0
- package/dist/adapters/index.d.mts +7 -0
- package/dist/adapters/index.mjs +9 -0
- package/dist/adapters/logger.d.mts +18 -0
- package/dist/adapters/logger.d.mts.map +1 -0
- package/dist/adapters/logger.mjs +81 -0
- package/dist/adapters/logger.mjs.map +1 -0
- package/dist/adapters/watcher.d.mts +11 -0
- package/dist/adapters/watcher.d.mts.map +1 -0
- package/dist/adapters/watcher.mjs +74 -0
- package/dist/adapters/watcher.mjs.map +1 -0
- package/dist/adapters/workspace.d.mts +148 -0
- package/dist/adapters/workspace.d.mts.map +1 -0
- package/dist/adapters/workspace.mjs +275 -0
- package/dist/adapters/workspace.mjs.map +1 -0
- package/dist/ai/agents/claude-code-agent.d.mts +22 -0
- package/dist/ai/agents/claude-code-agent.d.mts.map +1 -0
- package/dist/ai/agents/claude-code-agent.mjs +182 -0
- package/dist/ai/agents/claude-code-agent.mjs.map +1 -0
- package/dist/ai/agents/cursor-agent.d.mts +68 -0
- package/dist/ai/agents/cursor-agent.d.mts.map +1 -0
- package/dist/ai/agents/cursor-agent.mjs +436 -0
- package/dist/ai/agents/cursor-agent.mjs.map +1 -0
- package/dist/ai/agents/index.mjs +7 -0
- package/dist/ai/agents/openai-codex-agent.d.mts +22 -0
- package/dist/ai/agents/openai-codex-agent.d.mts.map +1 -0
- package/dist/ai/agents/openai-codex-agent.mjs +167 -0
- package/dist/ai/agents/openai-codex-agent.mjs.map +1 -0
- package/dist/ai/agents/orchestrator.d.mts +50 -0
- package/dist/ai/agents/orchestrator.d.mts.map +1 -0
- package/dist/ai/agents/orchestrator.mjs +143 -0
- package/dist/ai/agents/orchestrator.mjs.map +1 -0
- package/dist/ai/agents/simple-agent.d.mts +17 -0
- package/dist/ai/agents/simple-agent.d.mts.map +1 -0
- package/dist/ai/agents/simple-agent.mjs +92 -0
- package/dist/ai/agents/simple-agent.mjs.map +1 -0
- package/dist/ai/agents/types.d.mts +36 -0
- package/dist/ai/agents/types.d.mts.map +1 -0
- package/dist/ai/client.d.mts +97 -0
- package/dist/ai/client.d.mts.map +1 -0
- package/dist/ai/client.mjs +189 -0
- package/dist/ai/client.mjs.map +1 -0
- package/dist/ai/index.d.mts +9 -0
- package/dist/ai/index.mjs +11 -0
- package/dist/ai/prompts/code-generation.d.mts +26 -0
- package/dist/ai/prompts/code-generation.d.mts.map +1 -0
- package/dist/ai/prompts/code-generation.mjs +143 -0
- package/dist/ai/prompts/code-generation.mjs.map +1 -0
- package/dist/ai/prompts/index.d.mts +10 -0
- package/dist/ai/prompts/index.d.mts.map +1 -0
- package/dist/ai/prompts/index.mjs +13 -0
- package/dist/ai/prompts/index.mjs.map +1 -0
- package/dist/ai/prompts/spec-creation.d.mts +29 -0
- package/dist/ai/prompts/spec-creation.d.mts.map +1 -0
- package/dist/ai/prompts/spec-creation.mjs +111 -0
- package/dist/ai/prompts/spec-creation.mjs.map +1 -0
- package/dist/ai/providers.d.mts +29 -0
- package/dist/ai/providers.d.mts.map +1 -0
- package/dist/ai/providers.mjs +39 -0
- package/dist/ai/providers.mjs.map +1 -0
- package/dist/formatters/index.d.mts +11 -0
- package/dist/formatters/index.d.mts.map +1 -0
- package/dist/formatters/index.mjs +17 -0
- package/dist/formatters/index.mjs.map +1 -0
- package/dist/formatters/json.d.mts +56 -0
- package/dist/formatters/json.d.mts.map +1 -0
- package/dist/formatters/json.mjs +43 -0
- package/dist/formatters/json.mjs.map +1 -0
- package/dist/formatters/sarif.d.mts +101 -0
- package/dist/formatters/sarif.d.mts.map +1 -0
- package/dist/formatters/sarif.mjs +163 -0
- package/dist/formatters/sarif.mjs.map +1 -0
- package/dist/formatters/text.d.mts +35 -0
- package/dist/formatters/text.d.mts.map +1 -0
- package/dist/formatters/text.mjs +209 -0
- package/dist/formatters/text.mjs.map +1 -0
- package/dist/index.d.mts +125 -0
- package/dist/index.mjs +110 -0
- package/dist/ports/ai.d.mts +59 -0
- package/dist/ports/ai.d.mts.map +1 -0
- package/dist/ports/fs.d.mts +81 -0
- package/dist/ports/fs.d.mts.map +1 -0
- package/dist/ports/git.d.mts +46 -0
- package/dist/ports/git.d.mts.map +1 -0
- package/dist/ports/index.d.mts +6 -0
- package/dist/ports/logger.d.mts +88 -0
- package/dist/ports/logger.d.mts.map +1 -0
- package/dist/ports/rulesync.d.mts +38 -0
- package/dist/ports/rulesync.d.mts.map +1 -0
- package/dist/ports/watcher.d.mts +52 -0
- package/dist/ports/watcher.d.mts.map +1 -0
- package/dist/services/agent-guide/adapters/claude-code.d.mts +35 -0
- package/dist/services/agent-guide/adapters/claude-code.d.mts.map +1 -0
- package/dist/services/agent-guide/adapters/claude-code.mjs +144 -0
- package/dist/services/agent-guide/adapters/claude-code.mjs.map +1 -0
- package/dist/services/agent-guide/adapters/cursor-cli.d.mts +39 -0
- package/dist/services/agent-guide/adapters/cursor-cli.d.mts.map +1 -0
- package/dist/services/agent-guide/adapters/cursor-cli.mjs +135 -0
- package/dist/services/agent-guide/adapters/cursor-cli.mjs.map +1 -0
- package/dist/services/agent-guide/adapters/generic-mcp.d.mts +53 -0
- package/dist/services/agent-guide/adapters/generic-mcp.d.mts.map +1 -0
- package/dist/services/agent-guide/adapters/generic-mcp.mjs +159 -0
- package/dist/services/agent-guide/adapters/generic-mcp.mjs.map +1 -0
- package/dist/services/agent-guide/adapters/index.d.mts +23 -0
- package/dist/services/agent-guide/adapters/index.d.mts.map +1 -0
- package/dist/services/agent-guide/adapters/index.mjs +31 -0
- package/dist/services/agent-guide/adapters/index.mjs.map +1 -0
- package/dist/services/agent-guide/agent-guide-service.d.mts +56 -0
- package/dist/services/agent-guide/agent-guide-service.d.mts.map +1 -0
- package/dist/services/agent-guide/agent-guide-service.mjs +147 -0
- package/dist/services/agent-guide/agent-guide-service.mjs.map +1 -0
- package/dist/services/agent-guide/index.d.mts +6 -0
- package/dist/services/agent-guide/index.mjs +7 -0
- package/dist/services/agent-guide/types.d.mts +58 -0
- package/dist/services/agent-guide/types.d.mts.map +1 -0
- package/dist/services/build.d.mts +61 -0
- package/dist/services/build.d.mts.map +1 -0
- package/dist/services/build.mjs +151 -0
- package/dist/services/build.mjs.map +1 -0
- package/dist/services/ci-check/checks/coverage.mjs +77 -0
- package/dist/services/ci-check/checks/coverage.mjs.map +1 -0
- package/dist/services/ci-check/checks/deps.mjs +32 -0
- package/dist/services/ci-check/checks/deps.mjs.map +1 -0
- package/dist/services/ci-check/checks/doctor.mjs +38 -0
- package/dist/services/ci-check/checks/doctor.mjs.map +1 -0
- package/dist/services/ci-check/checks/drift.mjs +40 -0
- package/dist/services/ci-check/checks/drift.mjs.map +1 -0
- package/dist/services/ci-check/checks/handlers.mjs +38 -0
- package/dist/services/ci-check/checks/handlers.mjs.map +1 -0
- package/dist/services/ci-check/checks/implementation.mjs +73 -0
- package/dist/services/ci-check/checks/implementation.mjs.map +1 -0
- package/dist/services/ci-check/checks/index.mjs +13 -0
- package/dist/services/ci-check/checks/integrity.mjs +31 -0
- package/dist/services/ci-check/checks/integrity.mjs.map +1 -0
- package/dist/services/ci-check/checks/layers.mjs +66 -0
- package/dist/services/ci-check/checks/layers.mjs.map +1 -0
- package/dist/services/ci-check/checks/structure.mjs +35 -0
- package/dist/services/ci-check/checks/structure.mjs.map +1 -0
- package/dist/services/ci-check/checks/test-refs.mjs +63 -0
- package/dist/services/ci-check/checks/test-refs.mjs.map +1 -0
- package/dist/services/ci-check/checks/tests.mjs +38 -0
- package/dist/services/ci-check/checks/tests.mjs.map +1 -0
- package/dist/services/ci-check/ci-check-service.d.mts +16 -0
- package/dist/services/ci-check/ci-check-service.d.mts.map +1 -0
- package/dist/services/ci-check/ci-check-service.mjs +129 -0
- package/dist/services/ci-check/ci-check-service.mjs.map +1 -0
- package/dist/services/ci-check/index.d.mts +2 -0
- package/dist/services/ci-check/index.mjs +4 -0
- package/dist/services/ci-check/types.d.mts +147 -0
- package/dist/services/ci-check/types.d.mts.map +1 -0
- package/dist/services/ci-check/types.mjs +37 -0
- package/dist/services/ci-check/types.mjs.map +1 -0
- package/dist/services/ci-check/utils.mjs +76 -0
- package/dist/services/ci-check/utils.mjs.map +1 -0
- package/dist/services/clean.d.mts +41 -0
- package/dist/services/clean.d.mts.map +1 -0
- package/dist/services/clean.mjs +72 -0
- package/dist/services/clean.mjs.map +1 -0
- package/dist/services/config.d.mts +16 -0
- package/dist/services/config.d.mts.map +1 -0
- package/dist/services/config.mjs +63 -0
- package/dist/services/config.mjs.map +1 -0
- package/dist/services/coverage/parsers/index.mjs +34 -0
- package/dist/services/coverage/parsers/index.mjs.map +1 -0
- package/dist/services/coverage/parsers/istanbul-parser.mjs +108 -0
- package/dist/services/coverage/parsers/istanbul-parser.mjs.map +1 -0
- package/dist/services/coverage/validator.mjs +55 -0
- package/dist/services/coverage/validator.mjs.map +1 -0
- package/dist/services/create/ai-generator.d.mts +84 -0
- package/dist/services/create/ai-generator.d.mts.map +1 -0
- package/dist/services/create/ai-generator.mjs +178 -0
- package/dist/services/create/ai-generator.mjs.map +1 -0
- package/dist/services/create/index.d.mts +28 -0
- package/dist/services/create/index.d.mts.map +1 -0
- package/dist/services/create/index.mjs +37 -0
- package/dist/services/create/index.mjs.map +1 -0
- package/dist/services/create/templates.d.mts +22 -0
- package/dist/services/create/templates.d.mts.map +1 -0
- package/dist/services/create/templates.mjs +39 -0
- package/dist/services/create/templates.mjs.map +1 -0
- package/dist/services/deps.d.mts +53 -0
- package/dist/services/deps.d.mts.map +1 -0
- package/dist/services/deps.mjs +62 -0
- package/dist/services/deps.mjs.map +1 -0
- package/dist/services/diff.d.mts +34 -0
- package/dist/services/diff.d.mts.map +1 -0
- package/dist/services/diff.mjs +34 -0
- package/dist/services/diff.mjs.map +1 -0
- package/dist/services/docs/docs-service.d.mts +20 -0
- package/dist/services/docs/docs-service.d.mts.map +1 -0
- package/dist/services/docs/docs-service.mjs +59 -0
- package/dist/services/docs/docs-service.mjs.map +1 -0
- package/dist/services/docs/index.d.mts +1 -0
- package/dist/services/docs/index.mjs +3 -0
- package/dist/services/doctor/checks/ai.mjs +119 -0
- package/dist/services/doctor/checks/ai.mjs.map +1 -0
- package/dist/services/doctor/checks/cli.mjs +156 -0
- package/dist/services/doctor/checks/cli.mjs.map +1 -0
- package/dist/services/doctor/checks/config.mjs +303 -0
- package/dist/services/doctor/checks/config.mjs.map +1 -0
- package/dist/services/doctor/checks/deps.mjs +267 -0
- package/dist/services/doctor/checks/deps.mjs.map +1 -0
- package/dist/services/doctor/checks/index.mjs +9 -0
- package/dist/services/doctor/checks/layers.mjs +139 -0
- package/dist/services/doctor/checks/layers.mjs.map +1 -0
- package/dist/services/doctor/checks/mcp.mjs +145 -0
- package/dist/services/doctor/checks/mcp.mjs.map +1 -0
- package/dist/services/doctor/checks/workspace.mjs +263 -0
- package/dist/services/doctor/checks/workspace.mjs.map +1 -0
- package/dist/services/doctor/doctor-service.d.mts +24 -0
- package/dist/services/doctor/doctor-service.d.mts.map +1 -0
- package/dist/services/doctor/doctor-service.mjs +118 -0
- package/dist/services/doctor/doctor-service.mjs.map +1 -0
- package/dist/services/doctor/index.d.mts +2 -0
- package/dist/services/doctor/index.mjs +4 -0
- package/dist/services/doctor/types.d.mts +118 -0
- package/dist/services/doctor/types.d.mts.map +1 -0
- package/dist/services/doctor/types.mjs +29 -0
- package/dist/services/doctor/types.mjs.map +1 -0
- package/dist/services/drift.mjs +73 -0
- package/dist/services/drift.mjs.map +1 -0
- package/dist/services/extract.d.mts +12 -0
- package/dist/services/extract.d.mts.map +1 -0
- package/dist/services/extract.mjs +33 -0
- package/dist/services/extract.mjs.map +1 -0
- package/dist/services/features/completion.d.mts +21 -0
- package/dist/services/features/completion.d.mts.map +1 -0
- package/dist/services/features/completion.mjs +70 -0
- package/dist/services/features/completion.mjs.map +1 -0
- package/dist/services/features/feature-editor.d.mts +27 -0
- package/dist/services/features/feature-editor.d.mts.map +1 -0
- package/dist/services/features/feature-editor.mjs +37 -0
- package/dist/services/features/feature-editor.mjs.map +1 -0
- package/dist/services/features/index.d.mts +11 -0
- package/dist/services/features/index.d.mts.map +1 -0
- package/dist/services/features/index.mjs +16 -0
- package/dist/services/features/index.mjs.map +1 -0
- package/dist/services/features/validation.d.mts +21 -0
- package/dist/services/features/validation.d.mts.map +1 -0
- package/dist/services/features/validation.mjs +27 -0
- package/dist/services/features/validation.mjs.map +1 -0
- package/dist/services/fix/fix-link-formatter.d.mts +12 -0
- package/dist/services/fix/fix-link-formatter.d.mts.map +1 -0
- package/dist/services/fix/fix-link-formatter.mjs +38 -0
- package/dist/services/fix/fix-link-formatter.mjs.map +1 -0
- package/dist/services/fix/fix-service.d.mts +74 -0
- package/dist/services/fix/fix-service.d.mts.map +1 -0
- package/dist/services/fix/fix-service.mjs +169 -0
- package/dist/services/fix/fix-service.mjs.map +1 -0
- package/dist/services/fix/index.d.mts +16 -0
- package/dist/services/fix/index.d.mts.map +1 -0
- package/dist/services/fix/index.mjs +24 -0
- package/dist/services/fix/index.mjs.map +1 -0
- package/dist/services/fix/path-resolver.mjs +83 -0
- package/dist/services/fix/path-resolver.mjs.map +1 -0
- package/dist/services/fix/schemas.d.mts +17 -0
- package/dist/services/fix/schemas.d.mts.map +1 -0
- package/dist/services/fix/schemas.mjs +12 -0
- package/dist/services/fix/schemas.mjs.map +1 -0
- package/dist/services/fix/strategies/implement-ai.d.mts +18 -0
- package/dist/services/fix/strategies/implement-ai.d.mts.map +1 -0
- package/dist/services/fix/strategies/implement-ai.mjs +139 -0
- package/dist/services/fix/strategies/implement-ai.mjs.map +1 -0
- package/dist/services/fix/strategies/implement-skeleton.d.mts +14 -0
- package/dist/services/fix/strategies/implement-skeleton.d.mts.map +1 -0
- package/dist/services/fix/strategies/implement-skeleton.mjs +77 -0
- package/dist/services/fix/strategies/implement-skeleton.mjs.map +1 -0
- package/dist/services/fix/strategies/index.d.mts +3 -0
- package/dist/services/fix/strategies/remove-reference.d.mts +17 -0
- package/dist/services/fix/strategies/remove-reference.d.mts.map +1 -0
- package/dist/services/fix/strategies/remove-reference.mjs +98 -0
- package/dist/services/fix/strategies/remove-reference.mjs.map +1 -0
- package/dist/services/fix/types.d.mts +207 -0
- package/dist/services/fix/types.d.mts.map +1 -0
- package/dist/services/fix/types.mjs +20 -0
- package/dist/services/fix/types.mjs.map +1 -0
- package/dist/services/formatter.d.mts +15 -0
- package/dist/services/formatter.d.mts.map +1 -0
- package/dist/services/formatter.mjs +26 -0
- package/dist/services/formatter.mjs.map +1 -0
- package/dist/services/gap.d.mts +18 -0
- package/dist/services/gap.d.mts.map +1 -0
- package/dist/services/gap.mjs +44 -0
- package/dist/services/gap.mjs.map +1 -0
- package/dist/services/generate-artifacts.d.mts +11 -0
- package/dist/services/generate-artifacts.d.mts.map +1 -0
- package/dist/services/generate-artifacts.mjs +27 -0
- package/dist/services/generate-artifacts.mjs.map +1 -0
- package/dist/services/hooks/hooks-service.d.mts +24 -0
- package/dist/services/hooks/hooks-service.d.mts.map +1 -0
- package/dist/services/hooks/hooks-service.mjs +126 -0
- package/dist/services/hooks/hooks-service.mjs.map +1 -0
- package/dist/services/hooks/index.d.mts +10 -0
- package/dist/services/hooks/index.d.mts.map +1 -0
- package/dist/services/hooks/index.mjs +12 -0
- package/dist/services/hooks/index.mjs.map +1 -0
- package/dist/services/hooks/types.d.mts +56 -0
- package/dist/services/hooks/types.d.mts.map +1 -0
- package/dist/services/impact/formatters.d.mts +27 -0
- package/dist/services/impact/formatters.d.mts.map +1 -0
- package/dist/services/impact/formatters.mjs +139 -0
- package/dist/services/impact/formatters.mjs.map +1 -0
- package/dist/services/impact/impact-detection-service.d.mts +22 -0
- package/dist/services/impact/impact-detection-service.d.mts.map +1 -0
- package/dist/services/impact/impact-detection-service.mjs +96 -0
- package/dist/services/impact/impact-detection-service.mjs.map +1 -0
- package/dist/services/impact/index.d.mts +11 -0
- package/dist/services/impact/index.d.mts.map +1 -0
- package/dist/services/impact/index.mjs +16 -0
- package/dist/services/impact/index.mjs.map +1 -0
- package/dist/services/impact/types.d.mts +63 -0
- package/dist/services/impact/types.d.mts.map +1 -0
- package/dist/services/implementation/discovery.d.mts +30 -0
- package/dist/services/implementation/discovery.d.mts.map +1 -0
- package/dist/services/implementation/discovery.mjs +144 -0
- package/dist/services/implementation/discovery.mjs.map +1 -0
- package/dist/services/implementation/index.d.mts +6 -0
- package/dist/services/implementation/index.mjs +7 -0
- package/dist/services/implementation/resolver/conventions.d.mts +18 -0
- package/dist/services/implementation/resolver/conventions.d.mts.map +1 -0
- package/dist/services/implementation/resolver/conventions.mjs +59 -0
- package/dist/services/implementation/resolver/conventions.mjs.map +1 -0
- package/dist/services/implementation/resolver/index.d.mts +24 -0
- package/dist/services/implementation/resolver/index.d.mts.map +1 -0
- package/dist/services/implementation/resolver/index.mjs +111 -0
- package/dist/services/implementation/resolver/index.mjs.map +1 -0
- package/dist/services/implementation/resolver/parsers.d.mts +16 -0
- package/dist/services/implementation/resolver/parsers.d.mts.map +1 -0
- package/dist/services/implementation/resolver/parsers.mjs +100 -0
- package/dist/services/implementation/resolver/parsers.mjs.map +1 -0
- package/dist/services/implementation/resolver/status.d.mts +21 -0
- package/dist/services/implementation/resolver/status.d.mts.map +1 -0
- package/dist/services/implementation/resolver/status.mjs +31 -0
- package/dist/services/implementation/resolver/status.mjs.map +1 -0
- package/dist/services/implementation/types.d.mts +89 -0
- package/dist/services/implementation/types.d.mts.map +1 -0
- package/dist/services/index.d.mts +103 -0
- package/dist/services/index.mjs +100 -0
- package/dist/services/integrity-diagram.d.mts +36 -0
- package/dist/services/integrity-diagram.d.mts.map +1 -0
- package/dist/services/integrity-diagram.mjs +275 -0
- package/dist/services/integrity-diagram.mjs.map +1 -0
- package/dist/services/integrity.d.mts +152 -0
- package/dist/services/integrity.d.mts.map +1 -0
- package/dist/services/integrity.mjs +361 -0
- package/dist/services/integrity.mjs.map +1 -0
- package/dist/services/layer-discovery.d.mts +77 -0
- package/dist/services/layer-discovery.d.mts.map +1 -0
- package/dist/services/layer-discovery.mjs +121 -0
- package/dist/services/layer-discovery.mjs.map +1 -0
- package/dist/services/list.d.mts +37 -0
- package/dist/services/list.d.mts.map +1 -0
- package/dist/services/list.mjs +46 -0
- package/dist/services/list.mjs.map +1 -0
- package/dist/services/llm/index.d.mts +28 -0
- package/dist/services/llm/index.d.mts.map +1 -0
- package/dist/services/llm/index.mjs +187 -0
- package/dist/services/llm/index.mjs.map +1 -0
- package/dist/services/llm/verify-static.d.mts +26 -0
- package/dist/services/llm/verify-static.d.mts.map +1 -0
- package/dist/services/llm/verify-static.mjs +82 -0
- package/dist/services/llm/verify-static.mjs.map +1 -0
- package/dist/services/modules/module-resolver.mjs +61 -0
- package/dist/services/modules/module-resolver.mjs.map +1 -0
- package/dist/services/openapi/export-service.d.mts +53 -0
- package/dist/services/openapi/export-service.d.mts.map +1 -0
- package/dist/services/openapi/export-service.mjs +50 -0
- package/dist/services/openapi/export-service.mjs.map +1 -0
- package/dist/services/openapi/import-service.d.mts +17 -0
- package/dist/services/openapi/import-service.d.mts.map +1 -0
- package/dist/services/openapi/import-service.mjs +168 -0
- package/dist/services/openapi/import-service.mjs.map +1 -0
- package/dist/services/openapi/index.d.mts +5 -0
- package/dist/services/openapi/index.mjs +6 -0
- package/dist/services/openapi/sync-service.d.mts +17 -0
- package/dist/services/openapi/sync-service.d.mts.map +1 -0
- package/dist/services/openapi/sync-service.mjs +120 -0
- package/dist/services/openapi/sync-service.mjs.map +1 -0
- package/dist/services/openapi/types.d.mts +162 -0
- package/dist/services/openapi/types.d.mts.map +1 -0
- package/dist/services/openapi/validate-service.d.mts +16 -0
- package/dist/services/openapi/validate-service.d.mts.map +1 -0
- package/dist/services/openapi/validate-service.mjs +130 -0
- package/dist/services/openapi/validate-service.mjs.map +1 -0
- package/dist/services/quickstart/dependencies.d.mts +31 -0
- package/dist/services/quickstart/dependencies.d.mts.map +1 -0
- package/dist/services/quickstart/dependencies.mjs +57 -0
- package/dist/services/quickstart/dependencies.mjs.map +1 -0
- package/dist/services/quickstart/index.mjs +4 -0
- package/dist/services/quickstart/quickstart-service.d.mts +20 -0
- package/dist/services/quickstart/quickstart-service.d.mts.map +1 -0
- package/dist/services/quickstart/quickstart-service.mjs +196 -0
- package/dist/services/quickstart/quickstart-service.mjs.map +1 -0
- package/dist/services/quickstart/types.d.mts +81 -0
- package/dist/services/quickstart/types.d.mts.map +1 -0
- package/dist/services/regenerator.d.mts +18 -0
- package/dist/services/regenerator.d.mts.map +1 -0
- package/dist/services/regenerator.mjs +23 -0
- package/dist/services/regenerator.mjs.map +1 -0
- package/dist/services/registry.d.mts +53 -0
- package/dist/services/registry.d.mts.map +1 -0
- package/dist/services/registry.mjs +74 -0
- package/dist/services/registry.mjs.map +1 -0
- package/dist/services/rulesync.d.mts +17 -0
- package/dist/services/rulesync.d.mts.map +1 -0
- package/dist/services/rulesync.mjs +71 -0
- package/dist/services/rulesync.mjs.map +1 -0
- package/dist/services/setup/config-generators.d.mts +42 -0
- package/dist/services/setup/config-generators.d.mts.map +1 -0
- package/dist/services/setup/config-generators.mjs +252 -0
- package/dist/services/setup/config-generators.mjs.map +1 -0
- package/dist/services/setup/file-merger.d.mts +27 -0
- package/dist/services/setup/file-merger.d.mts.map +1 -0
- package/dist/services/setup/file-merger.mjs +61 -0
- package/dist/services/setup/file-merger.mjs.map +1 -0
- package/dist/services/setup/setup-service.d.mts +12 -0
- package/dist/services/setup/setup-service.d.mts.map +1 -0
- package/dist/services/setup/setup-service.mjs +96 -0
- package/dist/services/setup/setup-service.mjs.map +1 -0
- package/dist/services/setup/targets/agents-md.mjs +47 -0
- package/dist/services/setup/targets/agents-md.mjs.map +1 -0
- package/dist/services/setup/targets/cli-config.mjs +60 -0
- package/dist/services/setup/targets/cli-config.mjs.map +1 -0
- package/dist/services/setup/targets/cursor-rules.mjs +48 -0
- package/dist/services/setup/targets/cursor-rules.mjs.map +1 -0
- package/dist/services/setup/targets/mcp-claude.mjs +60 -0
- package/dist/services/setup/targets/mcp-claude.mjs.map +1 -0
- package/dist/services/setup/targets/mcp-cursor.mjs +59 -0
- package/dist/services/setup/targets/mcp-cursor.mjs.map +1 -0
- package/dist/services/setup/targets/vscode-settings.mjs +63 -0
- package/dist/services/setup/targets/vscode-settings.mjs.map +1 -0
- package/dist/services/setup/types.d.mts +85 -0
- package/dist/services/setup/types.d.mts.map +1 -0
- package/dist/services/setup/types.mjs +27 -0
- package/dist/services/setup/types.mjs.map +1 -0
- package/dist/services/sync.d.mts +42 -0
- package/dist/services/sync.d.mts.map +1 -0
- package/dist/services/sync.mjs +64 -0
- package/dist/services/sync.mjs.map +1 -0
- package/dist/services/test/index.d.mts +2 -0
- package/dist/services/test/index.mjs +4 -0
- package/dist/services/test/test-generator-service.d.mts +24 -0
- package/dist/services/test/test-generator-service.d.mts.map +1 -0
- package/dist/services/test/test-generator-service.mjs +92 -0
- package/dist/services/test/test-generator-service.mjs.map +1 -0
- package/dist/services/test/test-service.d.mts +27 -0
- package/dist/services/test/test-service.d.mts.map +1 -0
- package/dist/services/test/test-service.mjs +94 -0
- package/dist/services/test/test-service.mjs.map +1 -0
- package/dist/services/test-link/index.d.mts +18 -0
- package/dist/services/test-link/index.d.mts.map +1 -0
- package/dist/services/test-link/index.mjs +60 -0
- package/dist/services/test-link/index.mjs.map +1 -0
- package/dist/services/test-link/test-ref-validator.d.mts +2 -0
- package/dist/services/test-link/test-ref-validator.mjs +50 -0
- package/dist/services/test-link/test-ref-validator.mjs.map +1 -0
- package/dist/services/upgrade/index.d.mts +10 -0
- package/dist/services/upgrade/index.d.mts.map +1 -0
- package/dist/services/upgrade/index.mjs +15 -0
- package/dist/services/upgrade/index.mjs.map +1 -0
- package/dist/services/upgrade/types.d.mts +78 -0
- package/dist/services/upgrade/types.d.mts.map +1 -0
- package/dist/services/upgrade/upgrade-service.d.mts +38 -0
- package/dist/services/upgrade/upgrade-service.d.mts.map +1 -0
- package/dist/services/upgrade/upgrade-service.mjs +201 -0
- package/dist/services/upgrade/upgrade-service.mjs.map +1 -0
- package/dist/services/validate/blueprint-validator.d.mts +23 -0
- package/dist/services/validate/blueprint-validator.d.mts.map +1 -0
- package/dist/services/validate/blueprint-validator.mjs +50 -0
- package/dist/services/validate/blueprint-validator.mjs.map +1 -0
- package/dist/services/validate/implementation-agent-validator.d.mts +20 -0
- package/dist/services/validate/implementation-agent-validator.d.mts.map +1 -0
- package/dist/services/validate/implementation-agent-validator.mjs +42 -0
- package/dist/services/validate/implementation-agent-validator.mjs.map +1 -0
- package/dist/services/validate/implementation-validator.d.mts +32 -0
- package/dist/services/validate/implementation-validator.d.mts.map +1 -0
- package/dist/services/validate/implementation-validator.mjs +64 -0
- package/dist/services/validate/implementation-validator.mjs.map +1 -0
- package/dist/services/validate/index.d.mts +5 -0
- package/dist/services/validate/index.mjs +7 -0
- package/dist/services/validate/spec-validator.d.mts +42 -0
- package/dist/services/validate/spec-validator.d.mts.map +1 -0
- package/dist/services/validate/spec-validator.mjs +49 -0
- package/dist/services/validate/spec-validator.mjs.map +1 -0
- package/dist/services/validate/tenant-validator.d.mts +21 -0
- package/dist/services/validate/tenant-validator.d.mts.map +1 -0
- package/dist/services/validate/tenant-validator.mjs +165 -0
- package/dist/services/validate/tenant-validator.mjs.map +1 -0
- package/dist/services/verification-cache/adapters/filesystem.d.mts +46 -0
- package/dist/services/verification-cache/adapters/filesystem.d.mts.map +1 -0
- package/dist/services/verification-cache/adapters/filesystem.mjs +120 -0
- package/dist/services/verification-cache/adapters/filesystem.mjs.map +1 -0
- package/dist/services/verification-cache/adapters/in-memory.d.mts +27 -0
- package/dist/services/verification-cache/adapters/in-memory.d.mts.map +1 -0
- package/dist/services/verification-cache/adapters/in-memory.mjs +46 -0
- package/dist/services/verification-cache/adapters/in-memory.mjs.map +1 -0
- package/dist/services/verification-cache/adapters/index.d.mts +3 -0
- package/dist/services/verification-cache/adapters/index.mjs +5 -0
- package/dist/services/verification-cache/adapters/workspace-state.d.mts +49 -0
- package/dist/services/verification-cache/adapters/workspace-state.d.mts.map +1 -0
- package/dist/services/verification-cache/adapters/workspace-state.mjs +91 -0
- package/dist/services/verification-cache/adapters/workspace-state.mjs.map +1 -0
- package/dist/services/verification-cache/cache-service.d.mts +70 -0
- package/dist/services/verification-cache/cache-service.d.mts.map +1 -0
- package/dist/services/verification-cache/cache-service.mjs +256 -0
- package/dist/services/verification-cache/cache-service.mjs.map +1 -0
- package/dist/services/verification-cache/index.d.mts +6 -0
- package/dist/services/verification-cache/index.mjs +8 -0
- package/dist/services/verification-cache/types.d.mts +124 -0
- package/dist/services/verification-cache/types.d.mts.map +1 -0
- package/dist/services/verification-cache/types.mjs +16 -0
- package/dist/services/verification-cache/types.mjs.map +1 -0
- package/dist/services/verify/ai-verifier.d.mts +25 -0
- package/dist/services/verify/ai-verifier.d.mts.map +1 -0
- package/dist/services/verify/ai-verifier.mjs +403 -0
- package/dist/services/verify/ai-verifier.mjs.map +1 -0
- package/dist/services/verify/behavior-verifier.d.mts +12 -0
- package/dist/services/verify/behavior-verifier.d.mts.map +1 -0
- package/dist/services/verify/behavior-verifier.mjs +186 -0
- package/dist/services/verify/behavior-verifier.mjs.map +1 -0
- package/dist/services/verify/index.d.mts +5 -0
- package/dist/services/verify/index.mjs +6 -0
- package/dist/services/verify/structure-verifier.d.mts +12 -0
- package/dist/services/verify/structure-verifier.d.mts.map +1 -0
- package/dist/services/verify/structure-verifier.mjs +196 -0
- package/dist/services/verify/structure-verifier.mjs.map +1 -0
- package/dist/services/verify/types.d.mts +137 -0
- package/dist/services/verify/types.d.mts.map +1 -0
- package/dist/services/verify/verify-service.d.mts +60 -0
- package/dist/services/verify/verify-service.d.mts.map +1 -0
- package/dist/services/verify/verify-service.mjs +204 -0
- package/dist/services/verify/verify-service.mjs.map +1 -0
- package/dist/services/versioning/changelog-formatter.d.mts +24 -0
- package/dist/services/versioning/changelog-formatter.d.mts.map +1 -0
- package/dist/services/versioning/changelog-formatter.mjs +155 -0
- package/dist/services/versioning/changelog-formatter.mjs.map +1 -0
- package/dist/services/versioning/conventional-commits.d.mts +95 -0
- package/dist/services/versioning/conventional-commits.d.mts.map +1 -0
- package/dist/services/versioning/conventional-commits.mjs +184 -0
- package/dist/services/versioning/conventional-commits.mjs.map +1 -0
- package/dist/services/versioning/index.d.mts +12 -0
- package/dist/services/versioning/index.d.mts.map +1 -0
- package/dist/services/versioning/index.mjs +28 -0
- package/dist/services/versioning/index.mjs.map +1 -0
- package/dist/services/versioning/types.d.mts +135 -0
- package/dist/services/versioning/types.d.mts.map +1 -0
- package/dist/services/versioning/versioning-service.d.mts +74 -0
- package/dist/services/versioning/versioning-service.d.mts.map +1 -0
- package/dist/services/versioning/versioning-service.mjs +501 -0
- package/dist/services/versioning/versioning-service.mjs.map +1 -0
- package/dist/services/vibe/config.d.mts +12 -0
- package/dist/services/vibe/config.d.mts.map +1 -0
- package/dist/services/vibe/config.mjs +43 -0
- package/dist/services/vibe/config.mjs.map +1 -0
- package/dist/services/vibe/context.d.mts +19 -0
- package/dist/services/vibe/context.d.mts.map +1 -0
- package/dist/services/vibe/context.mjs +92 -0
- package/dist/services/vibe/context.mjs.map +1 -0
- package/dist/services/vibe/definitions.d.mts +8 -0
- package/dist/services/vibe/definitions.d.mts.map +1 -0
- package/dist/services/vibe/definitions.mjs +129 -0
- package/dist/services/vibe/definitions.mjs.map +1 -0
- package/dist/services/vibe/engine.d.mts +44 -0
- package/dist/services/vibe/engine.d.mts.map +1 -0
- package/dist/services/vibe/engine.mjs +147 -0
- package/dist/services/vibe/engine.mjs.map +1 -0
- package/dist/services/vibe/index.d.mts +15 -0
- package/dist/services/vibe/index.d.mts.map +1 -0
- package/dist/services/vibe/index.mjs +26 -0
- package/dist/services/vibe/index.mjs.map +1 -0
- package/dist/services/vibe/loader.d.mts +15 -0
- package/dist/services/vibe/loader.d.mts.map +1 -0
- package/dist/services/vibe/loader.mjs +48 -0
- package/dist/services/vibe/loader.mjs.map +1 -0
- package/dist/services/vibe/pack.d.mts +19 -0
- package/dist/services/vibe/pack.d.mts.map +1 -0
- package/dist/services/vibe/pack.mjs +66 -0
- package/dist/services/vibe/pack.mjs.map +1 -0
- package/dist/services/vibe/types.d.mts +59 -0
- package/dist/services/vibe/types.d.mts.map +1 -0
- package/dist/services/vibe/types.mjs +12 -0
- package/dist/services/vibe/types.mjs.map +1 -0
- package/dist/services/view/index.d.mts +11 -0
- package/dist/services/view/index.d.mts.map +1 -0
- package/dist/services/view/index.mjs +119 -0
- package/dist/services/view/index.mjs.map +1 -0
- package/dist/services/watch.d.mts +25 -0
- package/dist/services/watch.d.mts.map +1 -0
- package/dist/services/watch.mjs +33 -0
- package/dist/services/watch.mjs.map +1 -0
- package/dist/services/workspace-info.d.mts +62 -0
- package/dist/services/workspace-info.d.mts.map +1 -0
- package/dist/services/workspace-info.mjs +103 -0
- package/dist/services/workspace-info.mjs.map +1 -0
- package/dist/templates/app-config.template.d.mts +7 -0
- package/dist/templates/app-config.template.d.mts.map +1 -0
- package/dist/templates/app-config.template.mjs +107 -0
- package/dist/templates/app-config.template.mjs.map +1 -0
- package/dist/templates/data-view.template.d.mts +7 -0
- package/dist/templates/data-view.template.d.mts.map +1 -0
- package/dist/templates/data-view.template.mjs +70 -0
- package/dist/templates/data-view.template.mjs.map +1 -0
- package/dist/templates/event.template.d.mts +11 -0
- package/dist/templates/event.template.d.mts.map +1 -0
- package/dist/templates/event.template.mjs +42 -0
- package/dist/templates/event.template.mjs.map +1 -0
- package/dist/templates/experiment.template.d.mts +7 -0
- package/dist/templates/experiment.template.d.mts.map +1 -0
- package/dist/templates/experiment.template.mjs +89 -0
- package/dist/templates/experiment.template.mjs.map +1 -0
- package/dist/templates/feature.template.d.mts +33 -0
- package/dist/templates/feature.template.d.mts.map +1 -0
- package/dist/templates/feature.template.mjs +52 -0
- package/dist/templates/feature.template.mjs.map +1 -0
- package/dist/templates/fix/skeleton-capability.mjs +49 -0
- package/dist/templates/fix/skeleton-capability.mjs.map +1 -0
- package/dist/templates/fix/skeleton-event.mjs +56 -0
- package/dist/templates/fix/skeleton-event.mjs.map +1 -0
- package/dist/templates/fix/skeleton-operation.mjs +122 -0
- package/dist/templates/fix/skeleton-operation.mjs.map +1 -0
- package/dist/templates/fix/skeleton-presentation.mjs +65 -0
- package/dist/templates/fix/skeleton-presentation.mjs.map +1 -0
- package/dist/templates/fix/utils.mjs +34 -0
- package/dist/templates/fix/utils.mjs.map +1 -0
- package/dist/templates/handler.template.d.mts +16 -0
- package/dist/templates/handler.template.d.mts.map +1 -0
- package/dist/templates/handler.template.mjs +100 -0
- package/dist/templates/handler.template.mjs.map +1 -0
- package/dist/templates/index.d.mts +22 -0
- package/dist/templates/index.d.mts.map +1 -0
- package/dist/templates/index.mjs +39 -0
- package/dist/templates/index.mjs.map +1 -0
- package/dist/templates/integration.template.d.mts +7 -0
- package/dist/templates/integration.template.d.mts.map +1 -0
- package/dist/templates/integration.template.mjs +160 -0
- package/dist/templates/integration.template.mjs.map +1 -0
- package/dist/templates/knowledge.template.d.mts +7 -0
- package/dist/templates/knowledge.template.d.mts.map +1 -0
- package/dist/templates/knowledge.template.mjs +75 -0
- package/dist/templates/knowledge.template.mjs.map +1 -0
- package/dist/templates/migration.template.d.mts +7 -0
- package/dist/templates/migration.template.d.mts.map +1 -0
- package/dist/templates/migration.template.mjs +62 -0
- package/dist/templates/migration.template.mjs.map +1 -0
- package/dist/templates/operation.template.d.mts +11 -0
- package/dist/templates/operation.template.d.mts.map +1 -0
- package/dist/templates/operation.template.mjs +107 -0
- package/dist/templates/operation.template.mjs.map +1 -0
- package/dist/templates/presentation.template.d.mts +11 -0
- package/dist/templates/presentation.template.d.mts.map +1 -0
- package/dist/templates/presentation.template.mjs +80 -0
- package/dist/templates/presentation.template.mjs.map +1 -0
- package/dist/templates/telemetry.template.d.mts +7 -0
- package/dist/templates/telemetry.template.d.mts.map +1 -0
- package/dist/templates/telemetry.template.mjs +91 -0
- package/dist/templates/telemetry.template.mjs.map +1 -0
- package/dist/templates/workflow-runner.template.d.mts +16 -0
- package/dist/templates/workflow-runner.template.d.mts.map +1 -0
- package/dist/templates/workflow-runner.template.mjs +50 -0
- package/dist/templates/workflow-runner.template.mjs.map +1 -0
- package/dist/templates/workflow.template.d.mts +7 -0
- package/dist/templates/workflow.template.d.mts.map +1 -0
- package/dist/templates/workflow.template.mjs +69 -0
- package/dist/templates/workflow.template.mjs.map +1 -0
- package/dist/types/config.d.mts +34 -0
- package/dist/types/config.d.mts.map +1 -0
- package/dist/types.d.mts +324 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/utils/filter.d.mts +16 -0
- package/dist/utils/filter.d.mts.map +1 -0
- package/dist/utils/filter.mjs +22 -0
- package/dist/utils/filter.mjs.map +1 -0
- package/dist/utils/index.d.mts +11 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +20 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/module-loader.d.mts +5 -0
- package/dist/utils/module-loader.d.mts.map +1 -0
- package/dist/utils/module-loader.mjs +41 -0
- package/dist/utils/module-loader.mjs.map +1 -0
- package/dist/utils/validation.d.mts +37 -0
- package/dist/utils/validation.d.mts.map +1 -0
- package/dist/utils/validation.mjs +43 -0
- package/dist/utils/validation.mjs.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { discoverLayers } from "../../layer-discovery.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/ci-check/checks/layers.ts
|
|
4
|
+
/**
|
|
5
|
+
* Run layer validation checks.
|
|
6
|
+
*/
|
|
7
|
+
async function runLayerChecks(adapters, _options) {
|
|
8
|
+
const issues = [];
|
|
9
|
+
const result = await discoverLayers(adapters, {});
|
|
10
|
+
for (const [key, feature] of result.inventory.features) {
|
|
11
|
+
if (!feature.key) issues.push({
|
|
12
|
+
ruleId: "layer-feature-missing-key",
|
|
13
|
+
severity: "error",
|
|
14
|
+
message: `Feature missing required 'key' field`,
|
|
15
|
+
category: "layers",
|
|
16
|
+
file: feature.filePath,
|
|
17
|
+
context: { key }
|
|
18
|
+
});
|
|
19
|
+
if (!feature.owners?.length) issues.push({
|
|
20
|
+
ruleId: "layer-feature-missing-owners",
|
|
21
|
+
severity: "warning",
|
|
22
|
+
message: `Feature '${key}' missing 'owners' field`,
|
|
23
|
+
category: "layers",
|
|
24
|
+
file: feature.filePath,
|
|
25
|
+
context: { key }
|
|
26
|
+
});
|
|
27
|
+
if (feature.operations.length === 0 && feature.events.length === 0 && feature.presentations.length === 0) issues.push({
|
|
28
|
+
ruleId: "layer-feature-empty",
|
|
29
|
+
severity: "warning",
|
|
30
|
+
message: `Feature '${key}' has no operations, events, or presentations`,
|
|
31
|
+
category: "layers",
|
|
32
|
+
file: feature.filePath,
|
|
33
|
+
context: { key }
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
for (const [key, example] of result.inventory.examples) {
|
|
37
|
+
if (!example.entrypoints.packageName) issues.push({
|
|
38
|
+
ruleId: "layer-example-missing-package",
|
|
39
|
+
severity: "error",
|
|
40
|
+
message: `Example '${key}' missing 'packageName' in entrypoints`,
|
|
41
|
+
category: "layers",
|
|
42
|
+
file: example.filePath,
|
|
43
|
+
context: { key }
|
|
44
|
+
});
|
|
45
|
+
if (!example.surfaces.templates && !example.surfaces.sandbox.enabled && !example.surfaces.studio.enabled && !example.surfaces.mcp.enabled) issues.push({
|
|
46
|
+
ruleId: "layer-example-no-surfaces",
|
|
47
|
+
severity: "warning",
|
|
48
|
+
message: `Example '${key}' has no enabled surfaces`,
|
|
49
|
+
category: "layers",
|
|
50
|
+
file: example.filePath,
|
|
51
|
+
context: { key }
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
for (const config of result.inventory.workspaceConfigs.values()) if (!config.valid) for (const error of config.errors) issues.push({
|
|
55
|
+
ruleId: "layer-workspace-config-invalid",
|
|
56
|
+
severity: "error",
|
|
57
|
+
message: `Invalid workspace config: ${error}`,
|
|
58
|
+
category: "layers",
|
|
59
|
+
file: config.file
|
|
60
|
+
});
|
|
61
|
+
return issues;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
65
|
+
export { runLayerChecks };
|
|
66
|
+
//# sourceMappingURL=layers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layers.mjs","names":[],"sources":["../../../../src/services/ci-check/checks/layers.ts"],"sourcesContent":["/**\n * Layer validation checks.\n */\n\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { LoggerAdapter } from '../../../ports/logger';\nimport { discoverLayers } from '../../layer-discovery';\nimport type { CICheckOptions, CIIssue } from '../types';\n\n/**\n * Run layer validation checks.\n */\nexport async function runLayerChecks(\n adapters: { fs: FsAdapter; logger: LoggerAdapter },\n _options: CICheckOptions\n): Promise<CIIssue[]> {\n const issues: CIIssue[] = [];\n\n // Discover all layers\n const result = await discoverLayers(adapters, {});\n\n // Validate features\n for (const [key, feature] of result.inventory.features) {\n // Check required meta fields\n if (!feature.key) {\n issues.push({\n ruleId: 'layer-feature-missing-key',\n severity: 'error',\n message: `Feature missing required 'key' field`,\n category: 'layers',\n file: feature.filePath,\n context: { key },\n });\n }\n\n if (!feature.owners?.length) {\n issues.push({\n ruleId: 'layer-feature-missing-owners',\n severity: 'warning',\n message: `Feature '${key}' missing 'owners' field`,\n category: 'layers',\n file: feature.filePath,\n context: { key },\n });\n }\n\n // Check for empty features\n if (\n feature.operations.length === 0 &&\n feature.events.length === 0 &&\n feature.presentations.length === 0\n ) {\n issues.push({\n ruleId: 'layer-feature-empty',\n severity: 'warning',\n message: `Feature '${key}' has no operations, events, or presentations`,\n category: 'layers',\n file: feature.filePath,\n context: { key },\n });\n }\n }\n\n // Validate examples\n for (const [key, example] of result.inventory.examples) {\n // Check required entrypoints\n if (!example.entrypoints.packageName) {\n issues.push({\n ruleId: 'layer-example-missing-package',\n severity: 'error',\n message: `Example '${key}' missing 'packageName' in entrypoints`,\n category: 'layers',\n file: example.filePath,\n context: { key },\n });\n }\n\n // Check required surfaces\n if (\n !example.surfaces.templates &&\n !example.surfaces.sandbox.enabled &&\n !example.surfaces.studio.enabled &&\n !example.surfaces.mcp.enabled\n ) {\n issues.push({\n ruleId: 'layer-example-no-surfaces',\n severity: 'warning',\n message: `Example '${key}' has no enabled surfaces`,\n category: 'layers',\n file: example.filePath,\n context: { key },\n });\n }\n }\n\n // Validate workspace configs\n for (const config of result.inventory.workspaceConfigs.values()) {\n if (!config.valid) {\n for (const error of config.errors) {\n issues.push({\n ruleId: 'layer-workspace-config-invalid',\n severity: 'error',\n message: `Invalid workspace config: ${error}`,\n category: 'layers',\n file: config.file,\n });\n }\n }\n }\n\n return issues;\n}\n"],"mappings":";;;;;;AAYA,eAAsB,eACpB,UACA,UACoB;CACpB,MAAM,SAAoB,EAAE;CAG5B,MAAM,SAAS,MAAM,eAAe,UAAU,EAAE,CAAC;AAGjD,MAAK,MAAM,CAAC,KAAK,YAAY,OAAO,UAAU,UAAU;AAEtD,MAAI,CAAC,QAAQ,IACX,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV,MAAM,QAAQ;GACd,SAAS,EAAE,KAAK;GACjB,CAAC;AAGJ,MAAI,CAAC,QAAQ,QAAQ,OACnB,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS,YAAY,IAAI;GACzB,UAAU;GACV,MAAM,QAAQ;GACd,SAAS,EAAE,KAAK;GACjB,CAAC;AAIJ,MACE,QAAQ,WAAW,WAAW,KAC9B,QAAQ,OAAO,WAAW,KAC1B,QAAQ,cAAc,WAAW,EAEjC,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS,YAAY,IAAI;GACzB,UAAU;GACV,MAAM,QAAQ;GACd,SAAS,EAAE,KAAK;GACjB,CAAC;;AAKN,MAAK,MAAM,CAAC,KAAK,YAAY,OAAO,UAAU,UAAU;AAEtD,MAAI,CAAC,QAAQ,YAAY,YACvB,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS,YAAY,IAAI;GACzB,UAAU;GACV,MAAM,QAAQ;GACd,SAAS,EAAE,KAAK;GACjB,CAAC;AAIJ,MACE,CAAC,QAAQ,SAAS,aAClB,CAAC,QAAQ,SAAS,QAAQ,WAC1B,CAAC,QAAQ,SAAS,OAAO,WACzB,CAAC,QAAQ,SAAS,IAAI,QAEtB,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS,YAAY,IAAI;GACzB,UAAU;GACV,MAAM,QAAQ;GACd,SAAS,EAAE,KAAK;GACjB,CAAC;;AAKN,MAAK,MAAM,UAAU,OAAO,UAAU,iBAAiB,QAAQ,CAC7D,KAAI,CAAC,OAAO,MACV,MAAK,MAAM,SAAS,OAAO,OACzB,QAAO,KAAK;EACV,QAAQ;EACR,UAAU;EACV,SAAS,6BAA6B;EACtC,UAAU;EACV,MAAM,OAAO;EACd,CAAC;AAKR,QAAO"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { validateSpecStructure } from "@contractspec/module.workspace";
|
|
2
|
+
|
|
3
|
+
//#region src/services/ci-check/checks/structure.ts
|
|
4
|
+
/**
|
|
5
|
+
* Structure validation checks.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Run spec structure validation checks.
|
|
9
|
+
*/
|
|
10
|
+
async function runStructureChecks(adapters, specFiles) {
|
|
11
|
+
const { fs } = adapters;
|
|
12
|
+
const issues = [];
|
|
13
|
+
for (const file of specFiles) {
|
|
14
|
+
const result = validateSpecStructure(await fs.readFile(file), file);
|
|
15
|
+
for (const error of result.errors) issues.push({
|
|
16
|
+
ruleId: "spec-structure-error",
|
|
17
|
+
severity: "error",
|
|
18
|
+
message: error,
|
|
19
|
+
category: "structure",
|
|
20
|
+
file
|
|
21
|
+
});
|
|
22
|
+
for (const warning of result.warnings) issues.push({
|
|
23
|
+
ruleId: "spec-structure-warning",
|
|
24
|
+
severity: "warning",
|
|
25
|
+
message: warning,
|
|
26
|
+
category: "structure",
|
|
27
|
+
file
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return issues;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { runStructureChecks };
|
|
35
|
+
//# sourceMappingURL=structure.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure.mjs","names":[],"sources":["../../../../src/services/ci-check/checks/structure.ts"],"sourcesContent":["/**\n * Structure validation checks.\n */\n\nimport { validateSpecStructure } from '@contractspec/module.workspace';\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { LoggerAdapter } from '../../../ports/logger';\nimport type { CIIssue } from '../types';\n\n/**\n * Run spec structure validation checks.\n */\nexport async function runStructureChecks(\n adapters: { fs: FsAdapter; logger: LoggerAdapter },\n specFiles: string[]\n): Promise<CIIssue[]> {\n const { fs } = adapters;\n const issues: CIIssue[] = [];\n\n for (const file of specFiles) {\n const content = await fs.readFile(file);\n const result = validateSpecStructure(content, file);\n\n for (const error of result.errors) {\n issues.push({\n ruleId: 'spec-structure-error',\n severity: 'error',\n message: error,\n category: 'structure',\n file,\n });\n }\n\n for (const warning of result.warnings) {\n issues.push({\n ruleId: 'spec-structure-warning',\n severity: 'warning',\n message: warning,\n category: 'structure',\n file,\n });\n }\n }\n\n return issues;\n}\n"],"mappings":";;;;;;;;;AAYA,eAAsB,mBACpB,UACA,WACoB;CACpB,MAAM,EAAE,OAAO;CACf,MAAM,SAAoB,EAAE;AAE5B,MAAK,MAAM,QAAQ,WAAW;EAE5B,MAAM,SAAS,sBADC,MAAM,GAAG,SAAS,KAAK,EACO,KAAK;AAEnD,OAAK,MAAM,SAAS,OAAO,OACzB,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV;GACD,CAAC;AAGJ,OAAK,MAAM,WAAW,OAAO,SAC3B,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV;GACD,CAAC;;AAIN,QAAO"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { validateTestRefs } from "../../test-link/test-ref-validator.mjs";
|
|
2
|
+
import { scanAllSpecsFromSource } from "@contractspec/module.workspace";
|
|
3
|
+
|
|
4
|
+
//#region src/services/ci-check/checks/test-refs.ts
|
|
5
|
+
/**
|
|
6
|
+
* Test reference validation checks.
|
|
7
|
+
*
|
|
8
|
+
* Validates that all tests referenced in OperationSpec.tests actually exist.
|
|
9
|
+
* Missing references are reported as ERRORS (blocking CI) to enforce contract integrity.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Run test reference validation checks.
|
|
13
|
+
*/
|
|
14
|
+
async function runTestRefsChecks(adapters, specFiles) {
|
|
15
|
+
const { fs } = adapters;
|
|
16
|
+
const issues = [];
|
|
17
|
+
const testSpecIndex = /* @__PURE__ */ new Map();
|
|
18
|
+
const specsByFile = /* @__PURE__ */ new Map();
|
|
19
|
+
for (const specFile of specFiles) {
|
|
20
|
+
const scans = scanAllSpecsFromSource(await fs.readFile(specFile), specFile);
|
|
21
|
+
for (const scan of scans) {
|
|
22
|
+
if (!scan.key || !scan.version) continue;
|
|
23
|
+
if (scan.specType === "test-spec") {
|
|
24
|
+
const testKey = `${scan.key}.v${scan.version}`;
|
|
25
|
+
testSpecIndex.set(testKey, {
|
|
26
|
+
key: scan.key,
|
|
27
|
+
version: scan.version,
|
|
28
|
+
file: specFile,
|
|
29
|
+
type: "test-spec"
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
if (scan.testRefs && scan.testRefs.length > 0) {
|
|
33
|
+
if (!specsByFile.has(specFile)) specsByFile.set(specFile, []);
|
|
34
|
+
specsByFile.get(specFile)?.push({
|
|
35
|
+
key: scan.key,
|
|
36
|
+
version: scan.version,
|
|
37
|
+
testRefs: scan.testRefs
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const [specFile, specs] of specsByFile) for (const spec of specs) {
|
|
43
|
+
if (!spec.testRefs) continue;
|
|
44
|
+
const result = validateTestRefs(specFile, spec.key, spec.version, spec.testRefs, testSpecIndex, { treatMissingAsError: true });
|
|
45
|
+
for (const error of result.errors) issues.push({
|
|
46
|
+
ruleId: "test-ref-missing",
|
|
47
|
+
severity: "error",
|
|
48
|
+
message: error,
|
|
49
|
+
category: "test-refs",
|
|
50
|
+
file: specFile,
|
|
51
|
+
context: {
|
|
52
|
+
specKey: spec.key,
|
|
53
|
+
specVersion: spec.version,
|
|
54
|
+
missingTests: result.missingTests
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return issues;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
export { runTestRefsChecks };
|
|
63
|
+
//# sourceMappingURL=test-refs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-refs.mjs","names":[],"sources":["../../../../src/services/ci-check/checks/test-refs.ts"],"sourcesContent":["/**\n * Test reference validation checks.\n *\n * Validates that all tests referenced in OperationSpec.tests actually exist.\n * Missing references are reported as ERRORS (blocking CI) to enforce contract integrity.\n */\n\nimport { scanAllSpecsFromSource } from '@contractspec/module.workspace';\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { LoggerAdapter } from '../../../ports/logger';\nimport type { SpecLocation } from '../../integrity';\nimport { validateTestRefs } from '../../test-link';\nimport type { CIIssue } from '../types';\n\n/**\n * Run test reference validation checks.\n */\nexport async function runTestRefsChecks(\n adapters: { fs: FsAdapter; logger: LoggerAdapter },\n specFiles: string[]\n): Promise<CIIssue[]> {\n const { fs } = adapters;\n const issues: CIIssue[] = [];\n\n // Build inventory of test specs\n const testSpecIndex = new Map<string, SpecLocation>();\n const specsByFile = new Map<\n string,\n {\n key: string;\n version: string;\n testRefs?: { key: string; version: string }[];\n }[]\n >();\n\n // Scan all spec files to build inventory\n for (const specFile of specFiles) {\n const content = await fs.readFile(specFile);\n const scans = scanAllSpecsFromSource(content, specFile);\n\n for (const scan of scans) {\n if (!scan.key || !scan.version) continue;\n\n // Build test spec index\n if (scan.specType === 'test-spec') {\n const testKey = `${scan.key}.v${scan.version}`;\n testSpecIndex.set(testKey, {\n key: scan.key,\n version: scan.version,\n file: specFile,\n type: 'test-spec',\n });\n }\n\n // Track specs with test refs for validation\n if (scan.testRefs && scan.testRefs.length > 0) {\n if (!specsByFile.has(specFile)) {\n specsByFile.set(specFile, []);\n }\n specsByFile.get(specFile)?.push({\n key: scan.key,\n version: scan.version,\n testRefs: scan.testRefs,\n });\n }\n }\n }\n\n // Validate test references for each spec\n for (const [specFile, specs] of specsByFile) {\n for (const spec of specs) {\n if (!spec.testRefs) continue;\n\n const result = validateTestRefs(\n specFile,\n spec.key,\n spec.version,\n spec.testRefs,\n testSpecIndex,\n { treatMissingAsError: true }\n );\n\n // Report errors for missing test references\n for (const error of result.errors) {\n issues.push({\n ruleId: 'test-ref-missing',\n severity: 'error', // ERRORS - block CI for contract integrity\n message: error,\n category: 'test-refs',\n file: specFile,\n context: {\n specKey: spec.key,\n specVersion: spec.version,\n missingTests: result.missingTests,\n },\n });\n }\n }\n }\n\n return issues;\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,eAAsB,kBACpB,UACA,WACoB;CACpB,MAAM,EAAE,OAAO;CACf,MAAM,SAAoB,EAAE;CAG5B,MAAM,gCAAgB,IAAI,KAA2B;CACrD,MAAM,8BAAc,IAAI,KAOrB;AAGH,MAAK,MAAM,YAAY,WAAW;EAEhC,MAAM,QAAQ,uBADE,MAAM,GAAG,SAAS,SAAS,EACG,SAAS;AAEvD,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,CAAC,KAAK,OAAO,CAAC,KAAK,QAAS;AAGhC,OAAI,KAAK,aAAa,aAAa;IACjC,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,KAAK;AACrC,kBAAc,IAAI,SAAS;KACzB,KAAK,KAAK;KACV,SAAS,KAAK;KACd,MAAM;KACN,MAAM;KACP,CAAC;;AAIJ,OAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,QAAI,CAAC,YAAY,IAAI,SAAS,CAC5B,aAAY,IAAI,UAAU,EAAE,CAAC;AAE/B,gBAAY,IAAI,SAAS,EAAE,KAAK;KAC9B,KAAK,KAAK;KACV,SAAS,KAAK;KACd,UAAU,KAAK;KAChB,CAAC;;;;AAMR,MAAK,MAAM,CAAC,UAAU,UAAU,YAC9B,MAAK,MAAM,QAAQ,OAAO;AACxB,MAAI,CAAC,KAAK,SAAU;EAEpB,MAAM,SAAS,iBACb,UACA,KAAK,KACL,KAAK,SACL,KAAK,UACL,eACA,EAAE,qBAAqB,MAAM,CAC9B;AAGD,OAAK,MAAM,SAAS,OAAO,OACzB,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV,MAAM;GACN,SAAS;IACP,SAAS,KAAK;IACd,aAAa,KAAK;IAClB,cAAc,OAAO;IACtB;GACF,CAAC;;AAKR,QAAO"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { validateImplementationFiles } from "../../validate/implementation-validator.mjs";
|
|
2
|
+
import { loadWorkspaceConfig } from "../../config.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/services/ci-check/checks/tests.ts
|
|
5
|
+
/**
|
|
6
|
+
* Run test coverage checks.
|
|
7
|
+
*/
|
|
8
|
+
async function runTestChecks(adapters, specFiles) {
|
|
9
|
+
const { fs } = adapters;
|
|
10
|
+
const issues = [];
|
|
11
|
+
const config = await loadWorkspaceConfig(fs);
|
|
12
|
+
for (const specFile of specFiles) {
|
|
13
|
+
if (!specFile.includes(".operation.")) continue;
|
|
14
|
+
const result = await validateImplementationFiles(specFile, { fs }, config, {
|
|
15
|
+
checkTests: true,
|
|
16
|
+
outputDir: config.outputDir
|
|
17
|
+
});
|
|
18
|
+
for (const error of result.errors) issues.push({
|
|
19
|
+
ruleId: "test-missing",
|
|
20
|
+
severity: "warning",
|
|
21
|
+
message: error,
|
|
22
|
+
category: "tests",
|
|
23
|
+
file: specFile
|
|
24
|
+
});
|
|
25
|
+
for (const warning of result.warnings) issues.push({
|
|
26
|
+
ruleId: "test-warning",
|
|
27
|
+
severity: "warning",
|
|
28
|
+
message: warning,
|
|
29
|
+
category: "tests",
|
|
30
|
+
file: specFile
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return issues;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { runTestChecks };
|
|
38
|
+
//# sourceMappingURL=tests.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.mjs","names":[],"sources":["../../../../src/services/ci-check/checks/tests.ts"],"sourcesContent":["/**\n * Test coverage checks.\n */\n\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { LoggerAdapter } from '../../../ports/logger';\nimport { loadWorkspaceConfig } from '../../config';\nimport { validateImplementationFiles } from '../../validate/implementation-validator';\nimport type { CIIssue } from '../types';\n\n/**\n * Run test coverage checks.\n */\nexport async function runTestChecks(\n adapters: { fs: FsAdapter; logger: LoggerAdapter },\n specFiles: string[]\n): Promise<CIIssue[]> {\n const { fs } = adapters;\n const issues: CIIssue[] = [];\n\n const config = await loadWorkspaceConfig(fs);\n\n for (const specFile of specFiles) {\n // Only check operation specs\n if (!specFile.includes('.operation.')) continue;\n\n const result = await validateImplementationFiles(specFile, { fs }, config, {\n checkTests: true,\n outputDir: config.outputDir,\n });\n\n for (const error of result.errors) {\n issues.push({\n ruleId: 'test-missing',\n severity: 'warning', // Test missing is a warning, not error\n message: error,\n category: 'tests',\n file: specFile,\n });\n }\n\n for (const warning of result.warnings) {\n issues.push({\n ruleId: 'test-warning',\n severity: 'warning',\n message: warning,\n category: 'tests',\n file: specFile,\n });\n }\n }\n\n return issues;\n}\n"],"mappings":";;;;;;;AAaA,eAAsB,cACpB,UACA,WACoB;CACpB,MAAM,EAAE,OAAO;CACf,MAAM,SAAoB,EAAE;CAE5B,MAAM,SAAS,MAAM,oBAAoB,GAAG;AAE5C,MAAK,MAAM,YAAY,WAAW;AAEhC,MAAI,CAAC,SAAS,SAAS,cAAc,CAAE;EAEvC,MAAM,SAAS,MAAM,4BAA4B,UAAU,EAAE,IAAI,EAAE,QAAQ;GACzE,YAAY;GACZ,WAAW,OAAO;GACnB,CAAC;AAEF,OAAK,MAAM,SAAS,OAAO,OACzB,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV,MAAM;GACP,CAAC;AAGJ,OAAK,MAAM,WAAW,OAAO,SAC3B,QAAO,KAAK;GACV,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV,MAAM;GACP,CAAC;;AAIN,QAAO"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FsAdapter } from "../../ports/fs.mjs";
|
|
2
|
+
import { LoggerAdapter } from "../../ports/logger.mjs";
|
|
3
|
+
import { CICheckOptions, CICheckResult } from "./types.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/services/ci-check/ci-check-service.d.ts
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Run all CI checks and return structured results.
|
|
9
|
+
*/
|
|
10
|
+
declare function runCIChecks(adapters: {
|
|
11
|
+
fs: FsAdapter;
|
|
12
|
+
logger: LoggerAdapter;
|
|
13
|
+
}, options?: CICheckOptions): Promise<CICheckResult>;
|
|
14
|
+
//#endregion
|
|
15
|
+
export { runCIChecks };
|
|
16
|
+
//# sourceMappingURL=ci-check-service.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-check-service.d.mts","names":[],"sources":["../../../src/services/ci-check/ci-check-service.ts"],"sourcesContent":[],"mappings":";;;;;;;;;iBAsCsB,WAAA;MACJ;UAAmB;aAC1B,iBACR,QAAQ"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { isTestFile } from "../../utils/filter.mjs";
|
|
2
|
+
import "../../utils/index.mjs";
|
|
3
|
+
import { runStructureChecks } from "./checks/structure.mjs";
|
|
4
|
+
import { runIntegrityChecks } from "./checks/integrity.mjs";
|
|
5
|
+
import { runDepsChecks } from "./checks/deps.mjs";
|
|
6
|
+
import { runDoctorChecks } from "./checks/doctor.mjs";
|
|
7
|
+
import { runHandlerChecks } from "./checks/handlers.mjs";
|
|
8
|
+
import { runTestChecks } from "./checks/tests.mjs";
|
|
9
|
+
import { runTestRefsChecks } from "./checks/test-refs.mjs";
|
|
10
|
+
import { runCoverageChecks } from "./checks/coverage.mjs";
|
|
11
|
+
import { runImplementationChecks } from "./checks/implementation.mjs";
|
|
12
|
+
import { runLayerChecks } from "./checks/layers.mjs";
|
|
13
|
+
import { runDriftChecks } from "./checks/drift.mjs";
|
|
14
|
+
import "./checks/index.mjs";
|
|
15
|
+
import { createCategorySummary, getChecksToRun, getGitInfo } from "./utils.mjs";
|
|
16
|
+
import { isFeatureFile } from "@contractspec/module.workspace";
|
|
17
|
+
|
|
18
|
+
//#region src/services/ci-check/ci-check-service.ts
|
|
19
|
+
/**
|
|
20
|
+
* CI Check service.
|
|
21
|
+
*
|
|
22
|
+
* Orchestrates all validation checks for CI/CD pipelines.
|
|
23
|
+
* Returns structured results suitable for multiple output formats.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Run all CI checks and return structured results.
|
|
27
|
+
*/
|
|
28
|
+
async function runCIChecks(adapters, options = {}) {
|
|
29
|
+
const startTime = Date.now();
|
|
30
|
+
const { fs, logger } = adapters;
|
|
31
|
+
const issues = [];
|
|
32
|
+
const categorySummaries = [];
|
|
33
|
+
const checksToRun = getChecksToRun(options);
|
|
34
|
+
logger.info("Starting CI checks...", { checks: checksToRun });
|
|
35
|
+
const specFiles = (await fs.glob({ pattern: options.pattern })).filter((f) => !isFeatureFile(f) && !isTestFile(f, options.config));
|
|
36
|
+
if (checksToRun.includes("structure")) {
|
|
37
|
+
const categoryStart = Date.now();
|
|
38
|
+
const structureIssues = await runStructureChecks(adapters, specFiles);
|
|
39
|
+
issues.push(...structureIssues);
|
|
40
|
+
categorySummaries.push(createCategorySummary("structure", structureIssues, Date.now() - categoryStart));
|
|
41
|
+
}
|
|
42
|
+
if (checksToRun.includes("integrity")) {
|
|
43
|
+
const categoryStart = Date.now();
|
|
44
|
+
const integrityIssues = await runIntegrityChecks(adapters, options);
|
|
45
|
+
issues.push(...integrityIssues);
|
|
46
|
+
categorySummaries.push(createCategorySummary("integrity", integrityIssues, Date.now() - categoryStart));
|
|
47
|
+
}
|
|
48
|
+
if (checksToRun.includes("deps")) {
|
|
49
|
+
const categoryStart = Date.now();
|
|
50
|
+
const depsIssues = await runDepsChecks(adapters, options);
|
|
51
|
+
issues.push(...depsIssues);
|
|
52
|
+
categorySummaries.push(createCategorySummary("deps", depsIssues, Date.now() - categoryStart));
|
|
53
|
+
}
|
|
54
|
+
if (checksToRun.includes("doctor")) {
|
|
55
|
+
const categoryStart = Date.now();
|
|
56
|
+
const doctorIssues = await runDoctorChecks(adapters, options);
|
|
57
|
+
issues.push(...doctorIssues);
|
|
58
|
+
categorySummaries.push(createCategorySummary("doctor", doctorIssues, Date.now() - categoryStart));
|
|
59
|
+
}
|
|
60
|
+
if (checksToRun.includes("handlers") || options.checkHandlers) {
|
|
61
|
+
const categoryStart = Date.now();
|
|
62
|
+
const handlerIssues = await runHandlerChecks(adapters, specFiles);
|
|
63
|
+
issues.push(...handlerIssues);
|
|
64
|
+
categorySummaries.push(createCategorySummary("handlers", handlerIssues, Date.now() - categoryStart));
|
|
65
|
+
}
|
|
66
|
+
if (checksToRun.includes("tests") || options.checkTests) {
|
|
67
|
+
const categoryStart = Date.now();
|
|
68
|
+
const testIssues = await runTestChecks(adapters, specFiles);
|
|
69
|
+
issues.push(...testIssues);
|
|
70
|
+
categorySummaries.push(createCategorySummary("tests", testIssues, Date.now() - categoryStart));
|
|
71
|
+
}
|
|
72
|
+
if (checksToRun.includes("test-refs")) {
|
|
73
|
+
const categoryStart = Date.now();
|
|
74
|
+
const testRefIssues = await runTestRefsChecks(adapters, specFiles);
|
|
75
|
+
issues.push(...testRefIssues);
|
|
76
|
+
categorySummaries.push(createCategorySummary("test-refs", testRefIssues, Date.now() - categoryStart));
|
|
77
|
+
}
|
|
78
|
+
if (checksToRun.includes("coverage")) {
|
|
79
|
+
const categoryStart = Date.now();
|
|
80
|
+
const coverageIssues = await runCoverageChecks(adapters, specFiles, options);
|
|
81
|
+
issues.push(...coverageIssues);
|
|
82
|
+
categorySummaries.push(createCategorySummary("coverage", coverageIssues, Date.now() - categoryStart));
|
|
83
|
+
}
|
|
84
|
+
if (checksToRun.includes("implementation")) {
|
|
85
|
+
const categoryStart = Date.now();
|
|
86
|
+
const implIssues = await runImplementationChecks(adapters, specFiles, options);
|
|
87
|
+
issues.push(...implIssues);
|
|
88
|
+
categorySummaries.push(createCategorySummary("implementation", implIssues, Date.now() - categoryStart));
|
|
89
|
+
}
|
|
90
|
+
if (checksToRun.includes("layers")) {
|
|
91
|
+
const categoryStart = Date.now();
|
|
92
|
+
const layerIssues = await runLayerChecks(adapters, options);
|
|
93
|
+
issues.push(...layerIssues);
|
|
94
|
+
categorySummaries.push(createCategorySummary("layers", layerIssues, Date.now() - categoryStart));
|
|
95
|
+
}
|
|
96
|
+
if (checksToRun.includes("drift")) {
|
|
97
|
+
const categoryStart = Date.now();
|
|
98
|
+
const driftIssues = await runDriftChecks(adapters, options);
|
|
99
|
+
issues.push(...driftIssues);
|
|
100
|
+
categorySummaries.push(createCategorySummary("drift", driftIssues, Date.now() - categoryStart));
|
|
101
|
+
}
|
|
102
|
+
const totalErrors = issues.filter((i) => i.severity === "error").length;
|
|
103
|
+
const totalWarnings = issues.filter((i) => i.severity === "warning").length;
|
|
104
|
+
const totalNotes = issues.filter((i) => i.severity === "note").length;
|
|
105
|
+
const success = options.failOnWarnings ? totalErrors === 0 && totalWarnings === 0 : totalErrors === 0;
|
|
106
|
+
const gitInfo = await getGitInfo(fs);
|
|
107
|
+
const result = {
|
|
108
|
+
success,
|
|
109
|
+
totalErrors,
|
|
110
|
+
totalWarnings,
|
|
111
|
+
totalNotes,
|
|
112
|
+
issues,
|
|
113
|
+
categories: categorySummaries,
|
|
114
|
+
durationMs: Date.now() - startTime,
|
|
115
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
116
|
+
...gitInfo
|
|
117
|
+
};
|
|
118
|
+
logger.info("CI checks complete", {
|
|
119
|
+
success,
|
|
120
|
+
errors: totalErrors,
|
|
121
|
+
warnings: totalWarnings,
|
|
122
|
+
durationMs: result.durationMs
|
|
123
|
+
});
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//#endregion
|
|
128
|
+
export { runCIChecks };
|
|
129
|
+
//# sourceMappingURL=ci-check-service.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-check-service.mjs","names":[],"sources":["../../../src/services/ci-check/ci-check-service.ts"],"sourcesContent":["/**\n * CI Check service.\n *\n * Orchestrates all validation checks for CI/CD pipelines.\n * Returns structured results suitable for multiple output formats.\n */\n\nimport { isFeatureFile } from '@contractspec/module.workspace';\nimport type { FsAdapter } from '../../ports/fs';\nimport type { LoggerAdapter } from '../../ports/logger';\n\nimport type {\n CICheckCategorySummary,\n CICheckOptions,\n CICheckResult,\n CIIssue,\n} from './types';\n\nimport {\n runStructureChecks,\n runIntegrityChecks,\n runDepsChecks,\n runDoctorChecks,\n runHandlerChecks,\n runTestChecks,\n runTestRefsChecks,\n runCoverageChecks,\n runImplementationChecks,\n runLayerChecks,\n runDriftChecks,\n} from './checks';\n\nimport { createCategorySummary, getChecksToRun, getGitInfo } from './utils';\nimport { isTestFile } from '../../utils';\n\n/**\n * Run all CI checks and return structured results.\n */\nexport async function runCIChecks(\n adapters: { fs: FsAdapter; logger: LoggerAdapter },\n options: CICheckOptions = {}\n): Promise<CICheckResult> {\n const startTime = Date.now();\n const { fs, logger } = adapters;\n\n const issues: CIIssue[] = [];\n const categorySummaries: CICheckCategorySummary[] = [];\n\n // Determine which checks to run\n const checksToRun = getChecksToRun(options);\n\n logger.info('Starting CI checks...', { checks: checksToRun });\n\n // Discover spec files\n const files = await fs.glob({ pattern: options.pattern });\n const specFiles = files.filter(\n (f) => !isFeatureFile(f) && !isTestFile(f, options.config)\n );\n\n // Run spec structure validation\n if (checksToRun.includes('structure')) {\n const categoryStart = Date.now();\n const structureIssues = await runStructureChecks(adapters, specFiles);\n issues.push(...structureIssues);\n categorySummaries.push(\n createCategorySummary(\n 'structure',\n structureIssues,\n Date.now() - categoryStart\n )\n );\n }\n\n // Run integrity analysis\n if (checksToRun.includes('integrity')) {\n const categoryStart = Date.now();\n const integrityIssues = await runIntegrityChecks(adapters, options);\n issues.push(...integrityIssues);\n categorySummaries.push(\n createCategorySummary(\n 'integrity',\n integrityIssues,\n Date.now() - categoryStart\n )\n );\n }\n\n // Run dependency analysis\n if (checksToRun.includes('deps')) {\n const categoryStart = Date.now();\n const depsIssues = await runDepsChecks(adapters, options);\n issues.push(...depsIssues);\n categorySummaries.push(\n createCategorySummary('deps', depsIssues, Date.now() - categoryStart)\n );\n }\n\n // Run doctor checks (skip AI in CI)\n if (checksToRun.includes('doctor')) {\n const categoryStart = Date.now();\n const doctorIssues = await runDoctorChecks(adapters, options);\n issues.push(...doctorIssues);\n categorySummaries.push(\n createCategorySummary('doctor', doctorIssues, Date.now() - categoryStart)\n );\n }\n\n // Run handler checks\n if (checksToRun.includes('handlers') || options.checkHandlers) {\n const categoryStart = Date.now();\n const handlerIssues = await runHandlerChecks(adapters, specFiles);\n issues.push(...handlerIssues);\n categorySummaries.push(\n createCategorySummary(\n 'handlers',\n handlerIssues,\n Date.now() - categoryStart\n )\n );\n }\n\n // Run test checks\n if (checksToRun.includes('tests') || options.checkTests) {\n const categoryStart = Date.now();\n const testIssues = await runTestChecks(adapters, specFiles);\n issues.push(...testIssues);\n categorySummaries.push(\n createCategorySummary('tests', testIssues, Date.now() - categoryStart)\n );\n }\n\n // Run test-refs checks (validate OperationSpec.tests references)\n if (checksToRun.includes('test-refs')) {\n const categoryStart = Date.now();\n const testRefIssues = await runTestRefsChecks(adapters, specFiles);\n issues.push(...testRefIssues);\n categorySummaries.push(\n createCategorySummary(\n 'test-refs',\n testRefIssues,\n Date.now() - categoryStart\n )\n );\n }\n\n // Run coverage checks (validate TestSpec.coverage requirements)\n if (checksToRun.includes('coverage')) {\n const categoryStart = Date.now();\n const coverageIssues = await runCoverageChecks(\n adapters,\n specFiles,\n options\n );\n issues.push(...coverageIssues);\n categorySummaries.push(\n createCategorySummary(\n 'coverage',\n coverageIssues,\n Date.now() - categoryStart\n )\n );\n }\n\n // Run implementation checks\n if (checksToRun.includes('implementation')) {\n const categoryStart = Date.now();\n const implIssues = await runImplementationChecks(\n adapters,\n specFiles,\n options\n );\n issues.push(...implIssues);\n categorySummaries.push(\n createCategorySummary(\n 'implementation',\n implIssues,\n Date.now() - categoryStart\n )\n );\n }\n\n // Run layers checks\n if (checksToRun.includes('layers')) {\n const categoryStart = Date.now();\n const layerIssues = await runLayerChecks(adapters, options);\n issues.push(...layerIssues);\n categorySummaries.push(\n createCategorySummary('layers', layerIssues, Date.now() - categoryStart)\n );\n }\n\n // Run drift checks\n if (checksToRun.includes('drift')) {\n const categoryStart = Date.now();\n const driftIssues = await runDriftChecks(adapters, options);\n issues.push(...driftIssues);\n categorySummaries.push(\n createCategorySummary('drift', driftIssues, Date.now() - categoryStart)\n );\n }\n\n // Calculate totals\n const totalErrors = issues.filter((i) => i.severity === 'error').length;\n const totalWarnings = issues.filter((i) => i.severity === 'warning').length;\n const totalNotes = issues.filter((i) => i.severity === 'note').length;\n\n // Determine success (no errors, or no warnings if failOnWarnings)\n const success = options.failOnWarnings\n ? totalErrors === 0 && totalWarnings === 0\n : totalErrors === 0;\n\n // Try to get git info\n const gitInfo = await getGitInfo(fs);\n\n const result: CICheckResult = {\n success,\n totalErrors,\n totalWarnings,\n totalNotes,\n issues,\n categories: categorySummaries,\n durationMs: Date.now() - startTime,\n timestamp: new Date().toISOString(),\n ...gitInfo,\n };\n\n logger.info('CI checks complete', {\n success,\n errors: totalErrors,\n warnings: totalWarnings,\n durationMs: result.durationMs,\n });\n\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,eAAsB,YACpB,UACA,UAA0B,EAAE,EACJ;CACxB,MAAM,YAAY,KAAK,KAAK;CAC5B,MAAM,EAAE,IAAI,WAAW;CAEvB,MAAM,SAAoB,EAAE;CAC5B,MAAM,oBAA8C,EAAE;CAGtD,MAAM,cAAc,eAAe,QAAQ;AAE3C,QAAO,KAAK,yBAAyB,EAAE,QAAQ,aAAa,CAAC;CAI7D,MAAM,aADQ,MAAM,GAAG,KAAK,EAAE,SAAS,QAAQ,SAAS,CAAC,EACjC,QACrB,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,OAAO,CAC3D;AAGD,KAAI,YAAY,SAAS,YAAY,EAAE;EACrC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,kBAAkB,MAAM,mBAAmB,UAAU,UAAU;AACrE,SAAO,KAAK,GAAG,gBAAgB;AAC/B,oBAAkB,KAChB,sBACE,aACA,iBACA,KAAK,KAAK,GAAG,cACd,CACF;;AAIH,KAAI,YAAY,SAAS,YAAY,EAAE;EACrC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,kBAAkB,MAAM,mBAAmB,UAAU,QAAQ;AACnE,SAAO,KAAK,GAAG,gBAAgB;AAC/B,oBAAkB,KAChB,sBACE,aACA,iBACA,KAAK,KAAK,GAAG,cACd,CACF;;AAIH,KAAI,YAAY,SAAS,OAAO,EAAE;EAChC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,aAAa,MAAM,cAAc,UAAU,QAAQ;AACzD,SAAO,KAAK,GAAG,WAAW;AAC1B,oBAAkB,KAChB,sBAAsB,QAAQ,YAAY,KAAK,KAAK,GAAG,cAAc,CACtE;;AAIH,KAAI,YAAY,SAAS,SAAS,EAAE;EAClC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,eAAe,MAAM,gBAAgB,UAAU,QAAQ;AAC7D,SAAO,KAAK,GAAG,aAAa;AAC5B,oBAAkB,KAChB,sBAAsB,UAAU,cAAc,KAAK,KAAK,GAAG,cAAc,CAC1E;;AAIH,KAAI,YAAY,SAAS,WAAW,IAAI,QAAQ,eAAe;EAC7D,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,gBAAgB,MAAM,iBAAiB,UAAU,UAAU;AACjE,SAAO,KAAK,GAAG,cAAc;AAC7B,oBAAkB,KAChB,sBACE,YACA,eACA,KAAK,KAAK,GAAG,cACd,CACF;;AAIH,KAAI,YAAY,SAAS,QAAQ,IAAI,QAAQ,YAAY;EACvD,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,aAAa,MAAM,cAAc,UAAU,UAAU;AAC3D,SAAO,KAAK,GAAG,WAAW;AAC1B,oBAAkB,KAChB,sBAAsB,SAAS,YAAY,KAAK,KAAK,GAAG,cAAc,CACvE;;AAIH,KAAI,YAAY,SAAS,YAAY,EAAE;EACrC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,gBAAgB,MAAM,kBAAkB,UAAU,UAAU;AAClE,SAAO,KAAK,GAAG,cAAc;AAC7B,oBAAkB,KAChB,sBACE,aACA,eACA,KAAK,KAAK,GAAG,cACd,CACF;;AAIH,KAAI,YAAY,SAAS,WAAW,EAAE;EACpC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,iBAAiB,MAAM,kBAC3B,UACA,WACA,QACD;AACD,SAAO,KAAK,GAAG,eAAe;AAC9B,oBAAkB,KAChB,sBACE,YACA,gBACA,KAAK,KAAK,GAAG,cACd,CACF;;AAIH,KAAI,YAAY,SAAS,iBAAiB,EAAE;EAC1C,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,aAAa,MAAM,wBACvB,UACA,WACA,QACD;AACD,SAAO,KAAK,GAAG,WAAW;AAC1B,oBAAkB,KAChB,sBACE,kBACA,YACA,KAAK,KAAK,GAAG,cACd,CACF;;AAIH,KAAI,YAAY,SAAS,SAAS,EAAE;EAClC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,cAAc,MAAM,eAAe,UAAU,QAAQ;AAC3D,SAAO,KAAK,GAAG,YAAY;AAC3B,oBAAkB,KAChB,sBAAsB,UAAU,aAAa,KAAK,KAAK,GAAG,cAAc,CACzE;;AAIH,KAAI,YAAY,SAAS,QAAQ,EAAE;EACjC,MAAM,gBAAgB,KAAK,KAAK;EAChC,MAAM,cAAc,MAAM,eAAe,UAAU,QAAQ;AAC3D,SAAO,KAAK,GAAG,YAAY;AAC3B,oBAAkB,KAChB,sBAAsB,SAAS,aAAa,KAAK,KAAK,GAAG,cAAc,CACxE;;CAIH,MAAM,cAAc,OAAO,QAAQ,MAAM,EAAE,aAAa,QAAQ,CAAC;CACjE,MAAM,gBAAgB,OAAO,QAAQ,MAAM,EAAE,aAAa,UAAU,CAAC;CACrE,MAAM,aAAa,OAAO,QAAQ,MAAM,EAAE,aAAa,OAAO,CAAC;CAG/D,MAAM,UAAU,QAAQ,iBACpB,gBAAgB,KAAK,kBAAkB,IACvC,gBAAgB;CAGpB,MAAM,UAAU,MAAM,WAAW,GAAG;CAEpC,MAAM,SAAwB;EAC5B;EACA;EACA;EACA;EACA;EACA,YAAY;EACZ,YAAY,KAAK,KAAK,GAAG;EACzB,4BAAW,IAAI,MAAM,EAAC,aAAa;EACnC,GAAG;EACJ;AAED,QAAO,KAAK,sBAAsB;EAChC;EACA,QAAQ;EACR,UAAU;EACV,YAAY,OAAO;EACpB,CAAC;AAEF,QAAO"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { ContractsrcConfig } from "@contractspec/lib.contracts/workspace-config";
|
|
2
|
+
|
|
3
|
+
//#region src/services/ci-check/types.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Categories of CI checks.
|
|
7
|
+
*/
|
|
8
|
+
type CICheckCategory = 'structure' | 'integrity' | 'deps' | 'doctor' | 'handlers' | 'tests' | 'test-refs' | 'coverage' | 'implementation' | 'layers' | 'drift';
|
|
9
|
+
/**
|
|
10
|
+
* All available CI check categories.
|
|
11
|
+
*/
|
|
12
|
+
declare const ALL_CI_CHECK_CATEGORIES: CICheckCategory[];
|
|
13
|
+
/**
|
|
14
|
+
* Human-readable labels for CI check categories.
|
|
15
|
+
*/
|
|
16
|
+
declare const CI_CHECK_CATEGORY_LABELS: Record<CICheckCategory, string>;
|
|
17
|
+
/**
|
|
18
|
+
* Severity of a CI check issue.
|
|
19
|
+
*/
|
|
20
|
+
type CIIssueSeverity = 'error' | 'warning' | 'note';
|
|
21
|
+
/**
|
|
22
|
+
* A single issue found during CI checks.
|
|
23
|
+
*/
|
|
24
|
+
interface CIIssue {
|
|
25
|
+
/** Unique ID for the issue type. */
|
|
26
|
+
ruleId: string;
|
|
27
|
+
/** Severity level. */
|
|
28
|
+
severity: CIIssueSeverity;
|
|
29
|
+
/** Human-readable message. */
|
|
30
|
+
message: string;
|
|
31
|
+
/** Category of the check. */
|
|
32
|
+
category: CICheckCategory;
|
|
33
|
+
/** File path where the issue was found. */
|
|
34
|
+
file?: string;
|
|
35
|
+
/** Line number (1-based). */
|
|
36
|
+
line?: number;
|
|
37
|
+
/** Column number (1-based). */
|
|
38
|
+
column?: number;
|
|
39
|
+
/** End line number (1-based). */
|
|
40
|
+
endLine?: number;
|
|
41
|
+
/** End column number (1-based). */
|
|
42
|
+
endColumn?: number;
|
|
43
|
+
/** Additional context. */
|
|
44
|
+
context?: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Summary statistics for a CI check category.
|
|
48
|
+
*/
|
|
49
|
+
interface CICheckCategorySummary {
|
|
50
|
+
/** Category name. */
|
|
51
|
+
category: CICheckCategory;
|
|
52
|
+
/** Human-readable label. */
|
|
53
|
+
label: string;
|
|
54
|
+
/** Number of errors. */
|
|
55
|
+
errors: number;
|
|
56
|
+
/** Number of warnings. */
|
|
57
|
+
warnings: number;
|
|
58
|
+
/** Number of notes. */
|
|
59
|
+
notes: number;
|
|
60
|
+
/** Whether this category passed. */
|
|
61
|
+
passed: boolean;
|
|
62
|
+
/** Duration in milliseconds. */
|
|
63
|
+
durationMs: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Overall CI check result.
|
|
67
|
+
*/
|
|
68
|
+
interface CICheckResult {
|
|
69
|
+
/** Whether all checks passed (no errors). */
|
|
70
|
+
success: boolean;
|
|
71
|
+
/** Total number of errors. */
|
|
72
|
+
totalErrors: number;
|
|
73
|
+
/** Total number of warnings. */
|
|
74
|
+
totalWarnings: number;
|
|
75
|
+
/** Total number of notes. */
|
|
76
|
+
totalNotes: number;
|
|
77
|
+
/** All issues found. */
|
|
78
|
+
issues: CIIssue[];
|
|
79
|
+
/** Summary by category. */
|
|
80
|
+
categories: CICheckCategorySummary[];
|
|
81
|
+
/** Total duration in milliseconds. */
|
|
82
|
+
durationMs: number;
|
|
83
|
+
/** Timestamp when the check was run. */
|
|
84
|
+
timestamp: string;
|
|
85
|
+
/** Git commit SHA if available. */
|
|
86
|
+
commitSha?: string;
|
|
87
|
+
/** Git branch if available. */
|
|
88
|
+
branch?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Options for running CI checks.
|
|
92
|
+
*/
|
|
93
|
+
interface CICheckOptions {
|
|
94
|
+
/** Glob pattern for spec discovery. */
|
|
95
|
+
pattern?: string;
|
|
96
|
+
/** Check categories to run (defaults to all). */
|
|
97
|
+
checks?: CICheckCategory[];
|
|
98
|
+
/** Skip specific categories. */
|
|
99
|
+
skip?: CICheckCategory[];
|
|
100
|
+
/** Include handler existence checks. */
|
|
101
|
+
checkHandlers?: boolean;
|
|
102
|
+
/** Include test coverage checks. */
|
|
103
|
+
checkTests?: boolean;
|
|
104
|
+
/** Include drift detection checks. */
|
|
105
|
+
checkDrift?: boolean;
|
|
106
|
+
/** Fail on warnings (treat warnings as errors). */
|
|
107
|
+
failOnWarnings?: boolean;
|
|
108
|
+
/** Workspace root directory. */
|
|
109
|
+
workspaceRoot?: string;
|
|
110
|
+
/** Implementation check options. */
|
|
111
|
+
implementation?: {
|
|
112
|
+
/** Require all specs to be implemented. */
|
|
113
|
+
requireImplemented?: boolean;
|
|
114
|
+
/** Verification tier to run. */
|
|
115
|
+
verificationTier?: 'structure' | 'behavior' | 'ai';
|
|
116
|
+
/** Use cache for verification results. */
|
|
117
|
+
useCache?: boolean;
|
|
118
|
+
/** Allow partial implementations. */
|
|
119
|
+
allowPartial?: boolean;
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Workspace configuration
|
|
123
|
+
*/
|
|
124
|
+
config?: ContractsrcConfig;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Output format for CI check results.
|
|
128
|
+
*/
|
|
129
|
+
type CIOutputFormat = 'text' | 'json' | 'sarif';
|
|
130
|
+
/**
|
|
131
|
+
* Options for formatting CI check output.
|
|
132
|
+
*/
|
|
133
|
+
interface CIFormatOptions {
|
|
134
|
+
/** Output format. */
|
|
135
|
+
format: CIOutputFormat;
|
|
136
|
+
/** Whether to use colors (for text format). */
|
|
137
|
+
colors?: boolean;
|
|
138
|
+
/** Tool name for SARIF output. */
|
|
139
|
+
toolName?: string;
|
|
140
|
+
/** Tool version for SARIF output. */
|
|
141
|
+
toolVersion?: string;
|
|
142
|
+
/** Repository URI for SARIF output. */
|
|
143
|
+
repositoryUri?: string;
|
|
144
|
+
}
|
|
145
|
+
//#endregion
|
|
146
|
+
export { ALL_CI_CHECK_CATEGORIES, CICheckCategory, CICheckCategorySummary, CICheckOptions, CICheckResult, CIFormatOptions, CIIssue, CIIssueSeverity, CIOutputFormat, CI_CHECK_CATEGORY_LABELS };
|
|
147
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/services/ci-check/types.ts"],"sourcesContent":[],"mappings":";;;;AA6DA;AAKA;;AAQY,KA/DA,eAAA,GA+DA,WAAA,GAAA,WAAA,GAAA,MAAA,GAAA,QAAA,GAAA,UAAA,GAAA,OAAA,GAAA,WAAA,GAAA,UAAA,GAAA,gBAAA,GAAA,QAAA,GAAA,OAAA;;;AAkBZ;AAoBiB,cArFJ,uBAiGC,EAjGwB,eAiGxB,EAAA;AAcd;;;AA+BW,cA7HE,wBA6HF,EA7H4B,MA6H5B,CA7HmC,eA6HnC,EAAA,MAAA,CAAA;;AAMX;AAKA;KAvHY,eAAA;;;;UAKK,OAAA;;;;YAIL;;;;YAIA;;;;;;;;;;;;YAYA;;;;;UAMK,sBAAA;;YAEL;;;;;;;;;;;;;;;;;UAkBK,aAAA;;;;;;;;;;UAUP;;cAEI;;;;;;;;;;;;;UAcG,cAAA;;;;WAIN;;SAEF;;;;;;;;;;;;;;;;;;;;;;;;;WAyBE;;;;;KAMC,cAAA;;;;UAKK,eAAA;;UAEP"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//#region src/services/ci-check/types.ts
|
|
2
|
+
/**
|
|
3
|
+
* All available CI check categories.
|
|
4
|
+
*/
|
|
5
|
+
const ALL_CI_CHECK_CATEGORIES = [
|
|
6
|
+
"structure",
|
|
7
|
+
"integrity",
|
|
8
|
+
"deps",
|
|
9
|
+
"doctor",
|
|
10
|
+
"handlers",
|
|
11
|
+
"tests",
|
|
12
|
+
"test-refs",
|
|
13
|
+
"coverage",
|
|
14
|
+
"implementation",
|
|
15
|
+
"layers",
|
|
16
|
+
"drift"
|
|
17
|
+
];
|
|
18
|
+
/**
|
|
19
|
+
* Human-readable labels for CI check categories.
|
|
20
|
+
*/
|
|
21
|
+
const CI_CHECK_CATEGORY_LABELS = {
|
|
22
|
+
structure: "Spec Structure Validation",
|
|
23
|
+
integrity: "Contract Integrity Analysis",
|
|
24
|
+
deps: "Dependency Analysis",
|
|
25
|
+
doctor: "Installation Health",
|
|
26
|
+
handlers: "Handler Implementation",
|
|
27
|
+
tests: "Test Coverage",
|
|
28
|
+
"test-refs": "Test Reference Validation",
|
|
29
|
+
coverage: "Coverage Goal Enforcement",
|
|
30
|
+
implementation: "Implementation Verification",
|
|
31
|
+
layers: "Contract Layers Validation",
|
|
32
|
+
drift: "Drift Detection"
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
export { ALL_CI_CHECK_CATEGORIES, CI_CHECK_CATEGORY_LABELS };
|
|
37
|
+
//# sourceMappingURL=types.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","names":[],"sources":["../../../src/services/ci-check/types.ts"],"sourcesContent":["/**\n * CI Check service types.\n *\n * Types for CI/CD validation checks with support for multiple output formats.\n */\n\nimport type { ContractsrcConfig } from '@contractspec/lib.contracts/workspace-config';\n\n/**\n * Categories of CI checks.\n */\nexport type CICheckCategory =\n | 'structure'\n | 'integrity'\n | 'deps'\n | 'doctor'\n | 'handlers'\n | 'tests'\n | 'test-refs'\n | 'coverage'\n | 'implementation'\n | 'layers'\n | 'drift';\n\n/**\n * All available CI check categories.\n */\nexport const ALL_CI_CHECK_CATEGORIES: CICheckCategory[] = [\n 'structure',\n 'integrity',\n 'deps',\n 'doctor',\n 'handlers',\n 'tests',\n 'test-refs',\n 'coverage',\n 'implementation',\n 'layers',\n 'drift',\n];\n\n/**\n * Human-readable labels for CI check categories.\n */\nexport const CI_CHECK_CATEGORY_LABELS: Record<CICheckCategory, string> = {\n structure: 'Spec Structure Validation',\n integrity: 'Contract Integrity Analysis',\n deps: 'Dependency Analysis',\n doctor: 'Installation Health',\n handlers: 'Handler Implementation',\n tests: 'Test Coverage',\n 'test-refs': 'Test Reference Validation',\n coverage: 'Coverage Goal Enforcement',\n implementation: 'Implementation Verification',\n layers: 'Contract Layers Validation',\n drift: 'Drift Detection',\n};\n\n/**\n * Severity of a CI check issue.\n */\nexport type CIIssueSeverity = 'error' | 'warning' | 'note';\n\n/**\n * A single issue found during CI checks.\n */\nexport interface CIIssue {\n /** Unique ID for the issue type. */\n ruleId: string;\n /** Severity level. */\n severity: CIIssueSeverity;\n /** Human-readable message. */\n message: string;\n /** Category of the check. */\n category: CICheckCategory;\n /** File path where the issue was found. */\n file?: string;\n /** Line number (1-based). */\n line?: number;\n /** Column number (1-based). */\n column?: number;\n /** End line number (1-based). */\n endLine?: number;\n /** End column number (1-based). */\n endColumn?: number;\n /** Additional context. */\n context?: Record<string, unknown>;\n}\n\n/**\n * Summary statistics for a CI check category.\n */\nexport interface CICheckCategorySummary {\n /** Category name. */\n category: CICheckCategory;\n /** Human-readable label. */\n label: string;\n /** Number of errors. */\n errors: number;\n /** Number of warnings. */\n warnings: number;\n /** Number of notes. */\n notes: number;\n /** Whether this category passed. */\n passed: boolean;\n /** Duration in milliseconds. */\n durationMs: number;\n}\n\n/**\n * Overall CI check result.\n */\nexport interface CICheckResult {\n /** Whether all checks passed (no errors). */\n success: boolean;\n /** Total number of errors. */\n totalErrors: number;\n /** Total number of warnings. */\n totalWarnings: number;\n /** Total number of notes. */\n totalNotes: number;\n /** All issues found. */\n issues: CIIssue[];\n /** Summary by category. */\n categories: CICheckCategorySummary[];\n /** Total duration in milliseconds. */\n durationMs: number;\n /** Timestamp when the check was run. */\n timestamp: string;\n /** Git commit SHA if available. */\n commitSha?: string;\n /** Git branch if available. */\n branch?: string;\n}\n\n/**\n * Options for running CI checks.\n */\nexport interface CICheckOptions {\n /** Glob pattern for spec discovery. */\n pattern?: string;\n /** Check categories to run (defaults to all). */\n checks?: CICheckCategory[];\n /** Skip specific categories. */\n skip?: CICheckCategory[];\n /** Include handler existence checks. */\n checkHandlers?: boolean;\n /** Include test coverage checks. */\n checkTests?: boolean;\n /** Include drift detection checks. */\n checkDrift?: boolean;\n /** Fail on warnings (treat warnings as errors). */\n failOnWarnings?: boolean;\n /** Workspace root directory. */\n workspaceRoot?: string;\n /** Implementation check options. */\n implementation?: {\n /** Require all specs to be implemented. */\n requireImplemented?: boolean;\n /** Verification tier to run. */\n verificationTier?: 'structure' | 'behavior' | 'ai';\n /** Use cache for verification results. */\n useCache?: boolean;\n /** Allow partial implementations. */\n allowPartial?: boolean;\n };\n /**\n * Workspace configuration\n */\n config?: ContractsrcConfig;\n}\n\n/**\n * Output format for CI check results.\n */\nexport type CIOutputFormat = 'text' | 'json' | 'sarif';\n\n/**\n * Options for formatting CI check output.\n */\nexport interface CIFormatOptions {\n /** Output format. */\n format: CIOutputFormat;\n /** Whether to use colors (for text format). */\n colors?: boolean;\n /** Tool name for SARIF output. */\n toolName?: string;\n /** Tool version for SARIF output. */\n toolVersion?: string;\n /** Repository URI for SARIF output. */\n repositoryUri?: string;\n}\n"],"mappings":";;;;AA2BA,MAAa,0BAA6C;CACxD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;AAKD,MAAa,2BAA4D;CACvE,WAAW;CACX,WAAW;CACX,MAAM;CACN,QAAQ;CACR,UAAU;CACV,OAAO;CACP,aAAa;CACb,UAAU;CACV,gBAAgB;CAChB,QAAQ;CACR,OAAO;CACR"}
|