@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,49 @@
|
|
|
1
|
+
import { CacheKeyString, CacheStorageAdapter, VerificationCacheEntry } from "../types.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/services/verification-cache/adapters/workspace-state.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Interface for key-value store (compatible with VSCode's Memento).
|
|
7
|
+
*/
|
|
8
|
+
interface KeyValueStore {
|
|
9
|
+
get<T>(key: string): T | undefined;
|
|
10
|
+
update(key: string, value: unknown): Thenable<void>;
|
|
11
|
+
keys?(): readonly string[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Workspace state storage adapter.
|
|
15
|
+
*/
|
|
16
|
+
declare class WorkspaceStateCacheStorage implements CacheStorageAdapter {
|
|
17
|
+
private store;
|
|
18
|
+
private keyIndex;
|
|
19
|
+
constructor(store: KeyValueStore);
|
|
20
|
+
/**
|
|
21
|
+
* Load the key index from storage.
|
|
22
|
+
*/
|
|
23
|
+
private loadKeyIndex;
|
|
24
|
+
/**
|
|
25
|
+
* Save the key index to storage.
|
|
26
|
+
*/
|
|
27
|
+
private saveKeyIndex;
|
|
28
|
+
/**
|
|
29
|
+
* Get the storage key for a cache key.
|
|
30
|
+
*/
|
|
31
|
+
private getStorageKey;
|
|
32
|
+
get(key: CacheKeyString): Promise<VerificationCacheEntry | null>;
|
|
33
|
+
set(key: CacheKeyString, entry: VerificationCacheEntry): Promise<void>;
|
|
34
|
+
delete(key: CacheKeyString): Promise<boolean>;
|
|
35
|
+
has(key: CacheKeyString): Promise<boolean>;
|
|
36
|
+
keys(): Promise<CacheKeyString[]>;
|
|
37
|
+
clear(): Promise<void>;
|
|
38
|
+
stats(): Promise<{
|
|
39
|
+
entryCount: number;
|
|
40
|
+
memoryUsage?: number;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a workspace state cache storage adapter.
|
|
45
|
+
*/
|
|
46
|
+
declare function createWorkspaceStateCacheStorage(store: KeyValueStore): WorkspaceStateCacheStorage;
|
|
47
|
+
//#endregion
|
|
48
|
+
export { KeyValueStore, WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage };
|
|
49
|
+
//# sourceMappingURL=workspace-state.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-state.d.mts","names":[],"sources":["../../../../src/services/verification-cache/adapters/workspace-state.ts"],"sourcesContent":[],"mappings":";;;;;;;AA4EwC,UA5DvB,aAAA,CA4DuB;EAAyB,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EA3D1C,CA2D0C,GAAA,SAAA;EAU7C,MAAA,CAAA,GAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,CAAA,EApEmB,QAoEnB,CAAA,IAAA,CAAA;EAAiB,IAAA,GAAA,EAAA,SAAA,MAAA,EAAA;;;;;AAqBpB,cAxEJ,0BAAA,YAAsC,mBAwElC,CAAA;EAYA,QAAA,KAAA;EApFkC,QAAA,QAAA;EAAmB,WAAA,CAAA,KAAA,EAIjD,aAJiD;EA8FtD;;;;;;;;;;;;WA3DC,iBAAiB,QAAQ;WAMzB,uBAAuB,yBAAyB;cAU7C,iBAAiB;WAapB,iBAAiB;UAIlB,QAAQ;WAIP;WAYA;;;;;;;;iBAUD,gCAAA,QACP,gBACN"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
//#region src/services/verification-cache/adapters/workspace-state.ts
|
|
2
|
+
/**
|
|
3
|
+
* Cache key prefix to avoid collisions.
|
|
4
|
+
*/
|
|
5
|
+
const CACHE_PREFIX = "contractspec.verification-cache.";
|
|
6
|
+
/**
|
|
7
|
+
* Index key for tracking all cache keys.
|
|
8
|
+
*/
|
|
9
|
+
const INDEX_KEY = `${CACHE_PREFIX}__index__`;
|
|
10
|
+
/**
|
|
11
|
+
* Workspace state storage adapter.
|
|
12
|
+
*/
|
|
13
|
+
var WorkspaceStateCacheStorage = class {
|
|
14
|
+
store;
|
|
15
|
+
keyIndex;
|
|
16
|
+
constructor(store) {
|
|
17
|
+
this.store = store;
|
|
18
|
+
this.keyIndex = new Set(this.loadKeyIndex());
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Load the key index from storage.
|
|
22
|
+
*/
|
|
23
|
+
loadKeyIndex() {
|
|
24
|
+
try {
|
|
25
|
+
return this.store.get(INDEX_KEY) ?? [];
|
|
26
|
+
} catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Save the key index to storage.
|
|
32
|
+
*/
|
|
33
|
+
async saveKeyIndex() {
|
|
34
|
+
await this.store.update(INDEX_KEY, Array.from(this.keyIndex));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the storage key for a cache key.
|
|
38
|
+
*/
|
|
39
|
+
getStorageKey(key) {
|
|
40
|
+
return `${CACHE_PREFIX}${key}`;
|
|
41
|
+
}
|
|
42
|
+
async get(key) {
|
|
43
|
+
const storageKey = this.getStorageKey(key);
|
|
44
|
+
return this.store.get(storageKey) ?? null;
|
|
45
|
+
}
|
|
46
|
+
async set(key, entry) {
|
|
47
|
+
const storageKey = this.getStorageKey(key);
|
|
48
|
+
await this.store.update(storageKey, entry);
|
|
49
|
+
if (!this.keyIndex.has(key)) {
|
|
50
|
+
this.keyIndex.add(key);
|
|
51
|
+
await this.saveKeyIndex();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
async delete(key) {
|
|
55
|
+
const storageKey = this.getStorageKey(key);
|
|
56
|
+
const existed = this.keyIndex.has(key);
|
|
57
|
+
if (existed) {
|
|
58
|
+
await this.store.update(storageKey, void 0);
|
|
59
|
+
this.keyIndex.delete(key);
|
|
60
|
+
await this.saveKeyIndex();
|
|
61
|
+
}
|
|
62
|
+
return existed;
|
|
63
|
+
}
|
|
64
|
+
async has(key) {
|
|
65
|
+
return this.keyIndex.has(key);
|
|
66
|
+
}
|
|
67
|
+
async keys() {
|
|
68
|
+
return Array.from(this.keyIndex);
|
|
69
|
+
}
|
|
70
|
+
async clear() {
|
|
71
|
+
for (const key of this.keyIndex) {
|
|
72
|
+
const storageKey = this.getStorageKey(key);
|
|
73
|
+
await this.store.update(storageKey, void 0);
|
|
74
|
+
}
|
|
75
|
+
this.keyIndex.clear();
|
|
76
|
+
await this.saveKeyIndex();
|
|
77
|
+
}
|
|
78
|
+
async stats() {
|
|
79
|
+
return { entryCount: this.keyIndex.size };
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Create a workspace state cache storage adapter.
|
|
84
|
+
*/
|
|
85
|
+
function createWorkspaceStateCacheStorage(store) {
|
|
86
|
+
return new WorkspaceStateCacheStorage(store);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//#endregion
|
|
90
|
+
export { WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage };
|
|
91
|
+
//# sourceMappingURL=workspace-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-state.mjs","names":[],"sources":["../../../../src/services/verification-cache/adapters/workspace-state.ts"],"sourcesContent":["/**\n * Workspace state cache storage adapter.\n *\n * Generic adapter for key-value stores like VSCode's ExtensionContext.workspaceState.\n * Can also be used with localStorage-like APIs.\n */\n\nimport type {\n CacheKeyString,\n CacheStorageAdapter,\n VerificationCacheEntry,\n} from '../types';\n\n/**\n * Interface for key-value store (compatible with VSCode's Memento).\n */\nexport interface KeyValueStore {\n get<T>(key: string): T | undefined;\n update(key: string, value: unknown): Thenable<void>;\n keys?(): readonly string[];\n}\n\n/**\n * Cache key prefix to avoid collisions.\n */\nconst CACHE_PREFIX = 'contractspec.verification-cache.';\n\n/**\n * Index key for tracking all cache keys.\n */\nconst INDEX_KEY = `${CACHE_PREFIX}__index__`;\n\n/**\n * Workspace state storage adapter.\n */\nexport class WorkspaceStateCacheStorage implements CacheStorageAdapter {\n private store: KeyValueStore;\n private keyIndex: Set<string>;\n\n constructor(store: KeyValueStore) {\n this.store = store;\n this.keyIndex = new Set(this.loadKeyIndex());\n }\n\n /**\n * Load the key index from storage.\n */\n private loadKeyIndex(): string[] {\n try {\n const index = this.store.get<string[]>(INDEX_KEY);\n return index ?? [];\n } catch {\n return [];\n }\n }\n\n /**\n * Save the key index to storage.\n */\n private async saveKeyIndex(): Promise<void> {\n await this.store.update(INDEX_KEY, Array.from(this.keyIndex));\n }\n\n /**\n * Get the storage key for a cache key.\n */\n private getStorageKey(key: CacheKeyString): string {\n return `${CACHE_PREFIX}${key}`;\n }\n\n async get(key: CacheKeyString): Promise<VerificationCacheEntry | null> {\n const storageKey = this.getStorageKey(key);\n const entry = this.store.get<VerificationCacheEntry>(storageKey);\n return entry ?? null;\n }\n\n async set(key: CacheKeyString, entry: VerificationCacheEntry): Promise<void> {\n const storageKey = this.getStorageKey(key);\n await this.store.update(storageKey, entry);\n\n if (!this.keyIndex.has(key)) {\n this.keyIndex.add(key);\n await this.saveKeyIndex();\n }\n }\n\n async delete(key: CacheKeyString): Promise<boolean> {\n const storageKey = this.getStorageKey(key);\n const existed = this.keyIndex.has(key);\n\n if (existed) {\n await this.store.update(storageKey, undefined);\n this.keyIndex.delete(key);\n await this.saveKeyIndex();\n }\n\n return existed;\n }\n\n async has(key: CacheKeyString): Promise<boolean> {\n return this.keyIndex.has(key);\n }\n\n async keys(): Promise<CacheKeyString[]> {\n return Array.from(this.keyIndex);\n }\n\n async clear(): Promise<void> {\n // Delete all entries\n for (const key of this.keyIndex) {\n const storageKey = this.getStorageKey(key);\n await this.store.update(storageKey, undefined);\n }\n\n // Clear index\n this.keyIndex.clear();\n await this.saveKeyIndex();\n }\n\n async stats(): Promise<{ entryCount: number; memoryUsage?: number }> {\n return {\n entryCount: this.keyIndex.size,\n };\n }\n}\n\n/**\n * Create a workspace state cache storage adapter.\n */\nexport function createWorkspaceStateCacheStorage(\n store: KeyValueStore\n): WorkspaceStateCacheStorage {\n return new WorkspaceStateCacheStorage(store);\n}\n"],"mappings":";;;;AAyBA,MAAM,eAAe;;;;AAKrB,MAAM,YAAY,GAAG,aAAa;;;;AAKlC,IAAa,6BAAb,MAAuE;CACrE,AAAQ;CACR,AAAQ;CAER,YAAY,OAAsB;AAChC,OAAK,QAAQ;AACb,OAAK,WAAW,IAAI,IAAI,KAAK,cAAc,CAAC;;;;;CAM9C,AAAQ,eAAyB;AAC/B,MAAI;AAEF,UADc,KAAK,MAAM,IAAc,UAAU,IACjC,EAAE;UACZ;AACN,UAAO,EAAE;;;;;;CAOb,MAAc,eAA8B;AAC1C,QAAM,KAAK,MAAM,OAAO,WAAW,MAAM,KAAK,KAAK,SAAS,CAAC;;;;;CAM/D,AAAQ,cAAc,KAA6B;AACjD,SAAO,GAAG,eAAe;;CAG3B,MAAM,IAAI,KAA6D;EACrE,MAAM,aAAa,KAAK,cAAc,IAAI;AAE1C,SADc,KAAK,MAAM,IAA4B,WAAW,IAChD;;CAGlB,MAAM,IAAI,KAAqB,OAA8C;EAC3E,MAAM,aAAa,KAAK,cAAc,IAAI;AAC1C,QAAM,KAAK,MAAM,OAAO,YAAY,MAAM;AAE1C,MAAI,CAAC,KAAK,SAAS,IAAI,IAAI,EAAE;AAC3B,QAAK,SAAS,IAAI,IAAI;AACtB,SAAM,KAAK,cAAc;;;CAI7B,MAAM,OAAO,KAAuC;EAClD,MAAM,aAAa,KAAK,cAAc,IAAI;EAC1C,MAAM,UAAU,KAAK,SAAS,IAAI,IAAI;AAEtC,MAAI,SAAS;AACX,SAAM,KAAK,MAAM,OAAO,YAAY,OAAU;AAC9C,QAAK,SAAS,OAAO,IAAI;AACzB,SAAM,KAAK,cAAc;;AAG3B,SAAO;;CAGT,MAAM,IAAI,KAAuC;AAC/C,SAAO,KAAK,SAAS,IAAI,IAAI;;CAG/B,MAAM,OAAkC;AACtC,SAAO,MAAM,KAAK,KAAK,SAAS;;CAGlC,MAAM,QAAuB;AAE3B,OAAK,MAAM,OAAO,KAAK,UAAU;GAC/B,MAAM,aAAa,KAAK,cAAc,IAAI;AAC1C,SAAM,KAAK,MAAM,OAAO,YAAY,OAAU;;AAIhD,OAAK,SAAS,OAAO;AACrB,QAAM,KAAK,cAAc;;CAG3B,MAAM,QAA+D;AACnE,SAAO,EACL,YAAY,KAAK,SAAS,MAC3B;;;;;;AAOL,SAAgB,iCACd,OAC4B;AAC5B,QAAO,IAAI,2BAA2B,MAAM"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { CacheKeyString, CacheLookupResult, CacheStats, CacheStorageAdapter, VerificationCacheConfig, VerificationCacheKey } from "./types.mjs";
|
|
2
|
+
import { VerificationReport, VerificationTier } from "@contractspec/lib.contracts/llm";
|
|
3
|
+
|
|
4
|
+
//#region src/services/verification-cache/cache-service.d.ts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Compute SHA256 hash of content.
|
|
8
|
+
*/
|
|
9
|
+
declare function computeContentHash(content: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Convert cache key to string for storage.
|
|
12
|
+
*/
|
|
13
|
+
declare function cacheKeyToString(key: VerificationCacheKey): CacheKeyString;
|
|
14
|
+
/**
|
|
15
|
+
* Parse cache key string back to object.
|
|
16
|
+
*/
|
|
17
|
+
declare function stringToCacheKey(str: CacheKeyString): VerificationCacheKey | null;
|
|
18
|
+
/**
|
|
19
|
+
* Verification cache service.
|
|
20
|
+
*/
|
|
21
|
+
declare class VerificationCacheService {
|
|
22
|
+
private storage;
|
|
23
|
+
private config;
|
|
24
|
+
private stats;
|
|
25
|
+
constructor(storage: CacheStorageAdapter, config?: Partial<VerificationCacheConfig>);
|
|
26
|
+
/**
|
|
27
|
+
* Create a cache key from spec and implementation content.
|
|
28
|
+
*/
|
|
29
|
+
createKey(specContent: string, implContent: string, tier: VerificationTier, aiModelVersion?: string): VerificationCacheKey;
|
|
30
|
+
/**
|
|
31
|
+
* Look up a cached verification result.
|
|
32
|
+
*/
|
|
33
|
+
lookup(key: VerificationCacheKey): Promise<CacheLookupResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Store a verification result in cache.
|
|
36
|
+
*/
|
|
37
|
+
store(key: VerificationCacheKey, result: VerificationReport, options?: {
|
|
38
|
+
dependencies?: string[];
|
|
39
|
+
specName?: string;
|
|
40
|
+
implPath?: string;
|
|
41
|
+
}): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Invalidate cache entries for a specific file.
|
|
44
|
+
* Used when a file changes to invalidate dependent caches.
|
|
45
|
+
*/
|
|
46
|
+
invalidateForFile(filePath: string): Promise<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Invalidate all cache entries for a specific spec.
|
|
49
|
+
*/
|
|
50
|
+
invalidateForSpec(specHash: string): Promise<number>;
|
|
51
|
+
/**
|
|
52
|
+
* Clear all cache entries.
|
|
53
|
+
*/
|
|
54
|
+
clear(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Get cache statistics.
|
|
57
|
+
*/
|
|
58
|
+
getStats(): Promise<CacheStats>;
|
|
59
|
+
/**
|
|
60
|
+
* Prune cache if over the maximum entry limit.
|
|
61
|
+
*/
|
|
62
|
+
private pruneIfNeeded;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a verification cache service with the given storage adapter.
|
|
66
|
+
*/
|
|
67
|
+
declare function createVerificationCacheService(storage: CacheStorageAdapter, config?: Partial<VerificationCacheConfig>): VerificationCacheService;
|
|
68
|
+
//#endregion
|
|
69
|
+
export { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey };
|
|
70
|
+
//# sourceMappingURL=cache-service.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-service.d.mts","names":[],"sources":["../../../src/services/verification-cache/cache-service.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA6HU,iBAnGM,kBAAA,CAmGN,OAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;;AAciC,iBA1G3B,gBAAA,CA0G2B,GAAA,EA1GL,oBA0GK,CAAA,EA1GkB,cA0GlB;;;;AAiFE,iBA1K7B,gBAAA,CA0K6B,GAAA,EAzKtC,cAyKsC,CAAA,EAxK1C,oBAwK0C,GAAA,IAAA;;;;AA4DzB,cA/KP,wBAAA,CA+KO;EAAO,QAAA,OAAA;EA0DX,QAAA,MAAA;EACL,QAAA,KAAA;EACQ,WAAA,CAAA,OAAA,EArON,mBAqOM,EAAA,MAAA,CAAA,EApOP,OAoOO,CApOC,uBAoOD,CAAA;EAAR;;;4DAvND,4CAEL;;;;cAYe,uBAAuB,QAAQ;;;;aAgD1C,8BACG;;;;MAMP;;;;;uCA0BwC;;;;uCAkCA;;;;WAkB5B;;;;cAQG,QAAQ;;;;;;;;;iBA0DZ,8BAAA,UACL,8BACA,QAAQ,2BAChB"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { DEFAULT_CACHE_CONFIG } from "./types.mjs";
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
|
|
4
|
+
//#region src/services/verification-cache/cache-service.ts
|
|
5
|
+
/**
|
|
6
|
+
* Verification cache service.
|
|
7
|
+
*
|
|
8
|
+
* Provides content-hash based caching for verification results
|
|
9
|
+
* to avoid redundant checks and reduce AI costs.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Compute SHA256 hash of content.
|
|
13
|
+
*/
|
|
14
|
+
function computeContentHash(content) {
|
|
15
|
+
return createHash("sha256").update(content).digest("hex");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Convert cache key to string for storage.
|
|
19
|
+
*/
|
|
20
|
+
function cacheKeyToString(key) {
|
|
21
|
+
const parts = [
|
|
22
|
+
`spec:${key.specHash.substring(0, 16)}`,
|
|
23
|
+
`impl:${key.implHash.substring(0, 16)}`,
|
|
24
|
+
`tier:${key.tier}`
|
|
25
|
+
];
|
|
26
|
+
if (key.aiModelVersion) parts.push(`model:${key.aiModelVersion}`);
|
|
27
|
+
return parts.join("|");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parse cache key string back to object.
|
|
31
|
+
*/
|
|
32
|
+
function stringToCacheKey(str) {
|
|
33
|
+
try {
|
|
34
|
+
const parts = str.split("|");
|
|
35
|
+
const keyMap = /* @__PURE__ */ new Map();
|
|
36
|
+
for (const part of parts) {
|
|
37
|
+
const [prefix, value] = part.split(":");
|
|
38
|
+
if (prefix && value) keyMap.set(prefix, value);
|
|
39
|
+
}
|
|
40
|
+
const specHash = keyMap.get("spec");
|
|
41
|
+
const implHash = keyMap.get("impl");
|
|
42
|
+
const tier = keyMap.get("tier");
|
|
43
|
+
if (!specHash || !implHash || !tier) return null;
|
|
44
|
+
return {
|
|
45
|
+
specHash,
|
|
46
|
+
implHash,
|
|
47
|
+
tier,
|
|
48
|
+
aiModelVersion: keyMap.get("model")
|
|
49
|
+
};
|
|
50
|
+
} catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get TTL for a specific tier.
|
|
56
|
+
*/
|
|
57
|
+
function getTtlForTier(tier, config) {
|
|
58
|
+
switch (tier) {
|
|
59
|
+
case "structure": return config.structureTtlMs;
|
|
60
|
+
case "behavior": return config.behaviorTtlMs;
|
|
61
|
+
case "ai_review": return config.aiTtlMs;
|
|
62
|
+
default: return config.defaultTtlMs;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Verification cache service.
|
|
67
|
+
*/
|
|
68
|
+
var VerificationCacheService = class {
|
|
69
|
+
storage;
|
|
70
|
+
config;
|
|
71
|
+
stats;
|
|
72
|
+
constructor(storage, config = {}) {
|
|
73
|
+
this.storage = storage;
|
|
74
|
+
this.config = {
|
|
75
|
+
...DEFAULT_CACHE_CONFIG,
|
|
76
|
+
...config
|
|
77
|
+
};
|
|
78
|
+
this.stats = {
|
|
79
|
+
hits: 0,
|
|
80
|
+
misses: 0
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create a cache key from spec and implementation content.
|
|
85
|
+
*/
|
|
86
|
+
createKey(specContent, implContent, tier, aiModelVersion) {
|
|
87
|
+
return {
|
|
88
|
+
specHash: computeContentHash(specContent),
|
|
89
|
+
implHash: computeContentHash(implContent),
|
|
90
|
+
tier,
|
|
91
|
+
aiModelVersion: tier === "ai_review" ? aiModelVersion : void 0
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Look up a cached verification result.
|
|
96
|
+
*/
|
|
97
|
+
async lookup(key) {
|
|
98
|
+
const keyStr = cacheKeyToString(key);
|
|
99
|
+
const entry = await this.storage.get(keyStr);
|
|
100
|
+
if (!entry) {
|
|
101
|
+
this.stats.misses++;
|
|
102
|
+
return {
|
|
103
|
+
hit: false,
|
|
104
|
+
reason: "not_found"
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (entry.meta.expiresAt) {
|
|
108
|
+
const expiresAt = new Date(entry.meta.expiresAt).getTime();
|
|
109
|
+
if (Date.now() > expiresAt) {
|
|
110
|
+
this.stats.misses++;
|
|
111
|
+
await this.storage.delete(keyStr);
|
|
112
|
+
return {
|
|
113
|
+
hit: false,
|
|
114
|
+
reason: "expired"
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (entry.key.specHash !== key.specHash) {
|
|
119
|
+
this.stats.misses++;
|
|
120
|
+
return {
|
|
121
|
+
hit: false,
|
|
122
|
+
reason: "spec_changed"
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (entry.key.implHash !== key.implHash) {
|
|
126
|
+
this.stats.misses++;
|
|
127
|
+
return {
|
|
128
|
+
hit: false,
|
|
129
|
+
reason: "impl_changed"
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (key.tier === "ai_review" && key.aiModelVersion && entry.key.aiModelVersion !== key.aiModelVersion) {
|
|
133
|
+
this.stats.misses++;
|
|
134
|
+
return {
|
|
135
|
+
hit: false,
|
|
136
|
+
reason: "model_changed"
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
this.stats.hits++;
|
|
140
|
+
return {
|
|
141
|
+
hit: true,
|
|
142
|
+
entry
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Store a verification result in cache.
|
|
147
|
+
*/
|
|
148
|
+
async store(key, result, options = {}) {
|
|
149
|
+
const keyStr = cacheKeyToString(key);
|
|
150
|
+
const ttl = getTtlForTier(key.tier, this.config);
|
|
151
|
+
const entry = {
|
|
152
|
+
key,
|
|
153
|
+
result,
|
|
154
|
+
meta: {
|
|
155
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
156
|
+
expiresAt: new Date(Date.now() + ttl).toISOString(),
|
|
157
|
+
dependencies: options.dependencies ?? [],
|
|
158
|
+
specName: options.specName,
|
|
159
|
+
implPath: options.implPath
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
await this.storage.set(keyStr, entry);
|
|
163
|
+
await this.pruneIfNeeded();
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Invalidate cache entries for a specific file.
|
|
167
|
+
* Used when a file changes to invalidate dependent caches.
|
|
168
|
+
*/
|
|
169
|
+
async invalidateForFile(filePath) {
|
|
170
|
+
if (!this.config.transitiveInvalidation) return 0;
|
|
171
|
+
const keys = await this.storage.keys();
|
|
172
|
+
let invalidated = 0;
|
|
173
|
+
for (const keyStr of keys) {
|
|
174
|
+
const entry = await this.storage.get(keyStr);
|
|
175
|
+
if (!entry) continue;
|
|
176
|
+
if (entry.meta.dependencies.includes(filePath)) {
|
|
177
|
+
await this.storage.delete(keyStr);
|
|
178
|
+
invalidated++;
|
|
179
|
+
}
|
|
180
|
+
if (entry.meta.specName === filePath || entry.meta.implPath === filePath) {
|
|
181
|
+
await this.storage.delete(keyStr);
|
|
182
|
+
invalidated++;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return invalidated;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Invalidate all cache entries for a specific spec.
|
|
189
|
+
*/
|
|
190
|
+
async invalidateForSpec(specHash) {
|
|
191
|
+
const keys = await this.storage.keys();
|
|
192
|
+
let invalidated = 0;
|
|
193
|
+
for (const keyStr of keys) {
|
|
194
|
+
const parsed = stringToCacheKey(keyStr);
|
|
195
|
+
if (parsed && parsed.specHash.startsWith(specHash.substring(0, 16))) {
|
|
196
|
+
await this.storage.delete(keyStr);
|
|
197
|
+
invalidated++;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return invalidated;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Clear all cache entries.
|
|
204
|
+
*/
|
|
205
|
+
async clear() {
|
|
206
|
+
await this.storage.clear();
|
|
207
|
+
this.stats = {
|
|
208
|
+
hits: 0,
|
|
209
|
+
misses: 0
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get cache statistics.
|
|
214
|
+
*/
|
|
215
|
+
async getStats() {
|
|
216
|
+
const storageStats = await this.storage.stats?.();
|
|
217
|
+
return {
|
|
218
|
+
totalEntries: storageStats?.entryCount ?? (await this.storage.keys()).length,
|
|
219
|
+
hits: this.stats.hits,
|
|
220
|
+
misses: this.stats.misses,
|
|
221
|
+
hitRate: this.stats.hits + this.stats.misses > 0 ? Math.round(this.stats.hits / (this.stats.hits + this.stats.misses) * 100) : 0,
|
|
222
|
+
memoryUsage: storageStats?.memoryUsage
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Prune cache if over the maximum entry limit.
|
|
227
|
+
*/
|
|
228
|
+
async pruneIfNeeded() {
|
|
229
|
+
const keys = await this.storage.keys();
|
|
230
|
+
if (keys.length <= this.config.maxEntries) return;
|
|
231
|
+
const entries = [];
|
|
232
|
+
for (const keyStr of keys) {
|
|
233
|
+
const entry = await this.storage.get(keyStr);
|
|
234
|
+
if (entry) entries.push({
|
|
235
|
+
key: keyStr,
|
|
236
|
+
createdAt: new Date(entry.meta.createdAt).getTime()
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
entries.sort((a, b) => a.createdAt - b.createdAt);
|
|
240
|
+
const toRemove = entries.length - this.config.maxEntries;
|
|
241
|
+
for (let i = 0; i < toRemove; i++) {
|
|
242
|
+
const entry = entries[i];
|
|
243
|
+
if (entry) await this.storage.delete(entry.key);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Create a verification cache service with the given storage adapter.
|
|
249
|
+
*/
|
|
250
|
+
function createVerificationCacheService(storage, config) {
|
|
251
|
+
return new VerificationCacheService(storage, config);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
//#endregion
|
|
255
|
+
export { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey };
|
|
256
|
+
//# sourceMappingURL=cache-service.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-service.mjs","names":[],"sources":["../../../src/services/verification-cache/cache-service.ts"],"sourcesContent":["/**\n * Verification cache service.\n *\n * Provides content-hash based caching for verification results\n * to avoid redundant checks and reduce AI costs.\n */\n\nimport { createHash } from 'crypto';\nimport type {\n VerificationReport,\n VerificationTier,\n} from '@contractspec/lib.contracts/llm';\nimport type {\n CacheKeyString,\n CacheLookupResult,\n CacheStats,\n CacheStorageAdapter,\n VerificationCacheConfig,\n VerificationCacheEntry,\n VerificationCacheKey,\n} from './types';\nimport { DEFAULT_CACHE_CONFIG } from './types';\n\n/**\n * Compute SHA256 hash of content.\n */\nexport function computeContentHash(content: string): string {\n return createHash('sha256').update(content).digest('hex');\n}\n\n/**\n * Convert cache key to string for storage.\n */\nexport function cacheKeyToString(key: VerificationCacheKey): CacheKeyString {\n const parts = [\n `spec:${key.specHash.substring(0, 16)}`,\n `impl:${key.implHash.substring(0, 16)}`,\n `tier:${key.tier}`,\n ];\n\n if (key.aiModelVersion) {\n parts.push(`model:${key.aiModelVersion}`);\n }\n\n return parts.join('|');\n}\n\n/**\n * Parse cache key string back to object.\n */\nexport function stringToCacheKey(\n str: CacheKeyString\n): VerificationCacheKey | null {\n try {\n const parts = str.split('|');\n const keyMap = new Map<string, string>();\n\n for (const part of parts) {\n const [prefix, value] = part.split(':');\n if (prefix && value) {\n keyMap.set(prefix, value);\n }\n }\n\n const specHash = keyMap.get('spec');\n const implHash = keyMap.get('impl');\n const tier = keyMap.get('tier') as VerificationTier;\n\n if (!specHash || !implHash || !tier) {\n return null;\n }\n\n return {\n specHash,\n implHash,\n tier,\n aiModelVersion: keyMap.get('model'),\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get TTL for a specific tier.\n */\nfunction getTtlForTier(\n tier: VerificationTier,\n config: Required<VerificationCacheConfig>\n): number {\n switch (tier) {\n case 'structure':\n return config.structureTtlMs;\n case 'behavior':\n return config.behaviorTtlMs;\n case 'ai_review':\n return config.aiTtlMs;\n default:\n return config.defaultTtlMs;\n }\n}\n\n/**\n * Verification cache service.\n */\nexport class VerificationCacheService {\n private storage: CacheStorageAdapter;\n private config: Required<VerificationCacheConfig>;\n private stats: { hits: number; misses: number };\n\n constructor(\n storage: CacheStorageAdapter,\n config: Partial<VerificationCacheConfig> = {}\n ) {\n this.storage = storage;\n this.config = { ...DEFAULT_CACHE_CONFIG, ...config };\n this.stats = { hits: 0, misses: 0 };\n }\n\n /**\n * Create a cache key from spec and implementation content.\n */\n createKey(\n specContent: string,\n implContent: string,\n tier: VerificationTier,\n aiModelVersion?: string\n ): VerificationCacheKey {\n return {\n specHash: computeContentHash(specContent),\n implHash: computeContentHash(implContent),\n tier,\n aiModelVersion: tier === 'ai_review' ? aiModelVersion : undefined,\n };\n }\n\n /**\n * Look up a cached verification result.\n */\n async lookup(key: VerificationCacheKey): Promise<CacheLookupResult> {\n const keyStr = cacheKeyToString(key);\n const entry = await this.storage.get(keyStr);\n\n if (!entry) {\n this.stats.misses++;\n return { hit: false, reason: 'not_found' };\n }\n\n // Check expiration\n if (entry.meta.expiresAt) {\n const expiresAt = new Date(entry.meta.expiresAt).getTime();\n if (Date.now() > expiresAt) {\n this.stats.misses++;\n await this.storage.delete(keyStr);\n return { hit: false, reason: 'expired' };\n }\n }\n\n // Validate hashes still match\n if (entry.key.specHash !== key.specHash) {\n this.stats.misses++;\n return { hit: false, reason: 'spec_changed' };\n }\n\n if (entry.key.implHash !== key.implHash) {\n this.stats.misses++;\n return { hit: false, reason: 'impl_changed' };\n }\n\n // For AI tier, check model version\n if (\n key.tier === 'ai_review' &&\n key.aiModelVersion &&\n entry.key.aiModelVersion !== key.aiModelVersion\n ) {\n this.stats.misses++;\n return { hit: false, reason: 'model_changed' };\n }\n\n this.stats.hits++;\n return { hit: true, entry };\n }\n\n /**\n * Store a verification result in cache.\n */\n async store(\n key: VerificationCacheKey,\n result: VerificationReport,\n options: {\n dependencies?: string[];\n specName?: string;\n implPath?: string;\n } = {}\n ): Promise<void> {\n const keyStr = cacheKeyToString(key);\n const ttl = getTtlForTier(key.tier, this.config);\n\n const entry: VerificationCacheEntry = {\n key,\n result,\n meta: {\n createdAt: new Date().toISOString(),\n expiresAt: new Date(Date.now() + ttl).toISOString(),\n dependencies: options.dependencies ?? [],\n specName: options.specName,\n implPath: options.implPath,\n },\n };\n\n await this.storage.set(keyStr, entry);\n\n // Prune if over limit\n await this.pruneIfNeeded();\n }\n\n /**\n * Invalidate cache entries for a specific file.\n * Used when a file changes to invalidate dependent caches.\n */\n async invalidateForFile(filePath: string): Promise<number> {\n if (!this.config.transitiveInvalidation) {\n return 0;\n }\n\n const keys = await this.storage.keys();\n let invalidated = 0;\n\n for (const keyStr of keys) {\n const entry = await this.storage.get(keyStr);\n if (!entry) continue;\n\n // Check if this file is in dependencies\n if (entry.meta.dependencies.includes(filePath)) {\n await this.storage.delete(keyStr);\n invalidated++;\n }\n\n // Check if file matches spec or impl path\n if (\n entry.meta.specName === filePath ||\n entry.meta.implPath === filePath\n ) {\n await this.storage.delete(keyStr);\n invalidated++;\n }\n }\n\n return invalidated;\n }\n\n /**\n * Invalidate all cache entries for a specific spec.\n */\n async invalidateForSpec(specHash: string): Promise<number> {\n const keys = await this.storage.keys();\n let invalidated = 0;\n\n for (const keyStr of keys) {\n const parsed = stringToCacheKey(keyStr);\n if (parsed && parsed.specHash.startsWith(specHash.substring(0, 16))) {\n await this.storage.delete(keyStr);\n invalidated++;\n }\n }\n\n return invalidated;\n }\n\n /**\n * Clear all cache entries.\n */\n async clear(): Promise<void> {\n await this.storage.clear();\n this.stats = { hits: 0, misses: 0 };\n }\n\n /**\n * Get cache statistics.\n */\n async getStats(): Promise<CacheStats> {\n const storageStats = await this.storage.stats?.();\n\n return {\n totalEntries:\n storageStats?.entryCount ?? (await this.storage.keys()).length,\n hits: this.stats.hits,\n misses: this.stats.misses,\n hitRate:\n this.stats.hits + this.stats.misses > 0\n ? Math.round(\n (this.stats.hits / (this.stats.hits + this.stats.misses)) * 100\n )\n : 0,\n memoryUsage: storageStats?.memoryUsage,\n };\n }\n\n /**\n * Prune cache if over the maximum entry limit.\n */\n private async pruneIfNeeded(): Promise<void> {\n const keys = await this.storage.keys();\n\n if (keys.length <= this.config.maxEntries) {\n return;\n }\n\n // Get all entries with their creation times\n const entries: { key: string; createdAt: number }[] = [];\n\n for (const keyStr of keys) {\n const entry = await this.storage.get(keyStr);\n if (entry) {\n entries.push({\n key: keyStr,\n createdAt: new Date(entry.meta.createdAt).getTime(),\n });\n }\n }\n\n // Sort by creation time (oldest first)\n entries.sort((a, b) => a.createdAt - b.createdAt);\n\n // Remove oldest entries until under limit\n const toRemove = entries.length - this.config.maxEntries;\n for (let i = 0; i < toRemove; i++) {\n const entry = entries[i];\n if (entry) {\n await this.storage.delete(entry.key);\n }\n }\n }\n}\n\n/**\n * Create a verification cache service with the given storage adapter.\n */\nexport function createVerificationCacheService(\n storage: CacheStorageAdapter,\n config?: Partial<VerificationCacheConfig>\n): VerificationCacheService {\n return new VerificationCacheService(storage, config);\n}\n"],"mappings":";;;;;;;;;;;;;AA0BA,SAAgB,mBAAmB,SAAyB;AAC1D,QAAO,WAAW,SAAS,CAAC,OAAO,QAAQ,CAAC,OAAO,MAAM;;;;;AAM3D,SAAgB,iBAAiB,KAA2C;CAC1E,MAAM,QAAQ;EACZ,QAAQ,IAAI,SAAS,UAAU,GAAG,GAAG;EACrC,QAAQ,IAAI,SAAS,UAAU,GAAG,GAAG;EACrC,QAAQ,IAAI;EACb;AAED,KAAI,IAAI,eACN,OAAM,KAAK,SAAS,IAAI,iBAAiB;AAG3C,QAAO,MAAM,KAAK,IAAI;;;;;AAMxB,SAAgB,iBACd,KAC6B;AAC7B,KAAI;EACF,MAAM,QAAQ,IAAI,MAAM,IAAI;EAC5B,MAAM,yBAAS,IAAI,KAAqB;AAExC,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,CAAC,QAAQ,SAAS,KAAK,MAAM,IAAI;AACvC,OAAI,UAAU,MACZ,QAAO,IAAI,QAAQ,MAAM;;EAI7B,MAAM,WAAW,OAAO,IAAI,OAAO;EACnC,MAAM,WAAW,OAAO,IAAI,OAAO;EACnC,MAAM,OAAO,OAAO,IAAI,OAAO;AAE/B,MAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAC7B,QAAO;AAGT,SAAO;GACL;GACA;GACA;GACA,gBAAgB,OAAO,IAAI,QAAQ;GACpC;SACK;AACN,SAAO;;;;;;AAOX,SAAS,cACP,MACA,QACQ;AACR,SAAQ,MAAR;EACE,KAAK,YACH,QAAO,OAAO;EAChB,KAAK,WACH,QAAO,OAAO;EAChB,KAAK,YACH,QAAO,OAAO;EAChB,QACE,QAAO,OAAO;;;;;;AAOpB,IAAa,2BAAb,MAAsC;CACpC,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YACE,SACA,SAA2C,EAAE,EAC7C;AACA,OAAK,UAAU;AACf,OAAK,SAAS;GAAE,GAAG;GAAsB,GAAG;GAAQ;AACpD,OAAK,QAAQ;GAAE,MAAM;GAAG,QAAQ;GAAG;;;;;CAMrC,UACE,aACA,aACA,MACA,gBACsB;AACtB,SAAO;GACL,UAAU,mBAAmB,YAAY;GACzC,UAAU,mBAAmB,YAAY;GACzC;GACA,gBAAgB,SAAS,cAAc,iBAAiB;GACzD;;;;;CAMH,MAAM,OAAO,KAAuD;EAClE,MAAM,SAAS,iBAAiB,IAAI;EACpC,MAAM,QAAQ,MAAM,KAAK,QAAQ,IAAI,OAAO;AAE5C,MAAI,CAAC,OAAO;AACV,QAAK,MAAM;AACX,UAAO;IAAE,KAAK;IAAO,QAAQ;IAAa;;AAI5C,MAAI,MAAM,KAAK,WAAW;GACxB,MAAM,YAAY,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,SAAS;AAC1D,OAAI,KAAK,KAAK,GAAG,WAAW;AAC1B,SAAK,MAAM;AACX,UAAM,KAAK,QAAQ,OAAO,OAAO;AACjC,WAAO;KAAE,KAAK;KAAO,QAAQ;KAAW;;;AAK5C,MAAI,MAAM,IAAI,aAAa,IAAI,UAAU;AACvC,QAAK,MAAM;AACX,UAAO;IAAE,KAAK;IAAO,QAAQ;IAAgB;;AAG/C,MAAI,MAAM,IAAI,aAAa,IAAI,UAAU;AACvC,QAAK,MAAM;AACX,UAAO;IAAE,KAAK;IAAO,QAAQ;IAAgB;;AAI/C,MACE,IAAI,SAAS,eACb,IAAI,kBACJ,MAAM,IAAI,mBAAmB,IAAI,gBACjC;AACA,QAAK,MAAM;AACX,UAAO;IAAE,KAAK;IAAO,QAAQ;IAAiB;;AAGhD,OAAK,MAAM;AACX,SAAO;GAAE,KAAK;GAAM;GAAO;;;;;CAM7B,MAAM,MACJ,KACA,QACA,UAII,EAAE,EACS;EACf,MAAM,SAAS,iBAAiB,IAAI;EACpC,MAAM,MAAM,cAAc,IAAI,MAAM,KAAK,OAAO;EAEhD,MAAM,QAAgC;GACpC;GACA;GACA,MAAM;IACJ,4BAAW,IAAI,MAAM,EAAC,aAAa;IACnC,WAAW,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,CAAC,aAAa;IACnD,cAAc,QAAQ,gBAAgB,EAAE;IACxC,UAAU,QAAQ;IAClB,UAAU,QAAQ;IACnB;GACF;AAED,QAAM,KAAK,QAAQ,IAAI,QAAQ,MAAM;AAGrC,QAAM,KAAK,eAAe;;;;;;CAO5B,MAAM,kBAAkB,UAAmC;AACzD,MAAI,CAAC,KAAK,OAAO,uBACf,QAAO;EAGT,MAAM,OAAO,MAAM,KAAK,QAAQ,MAAM;EACtC,IAAI,cAAc;AAElB,OAAK,MAAM,UAAU,MAAM;GACzB,MAAM,QAAQ,MAAM,KAAK,QAAQ,IAAI,OAAO;AAC5C,OAAI,CAAC,MAAO;AAGZ,OAAI,MAAM,KAAK,aAAa,SAAS,SAAS,EAAE;AAC9C,UAAM,KAAK,QAAQ,OAAO,OAAO;AACjC;;AAIF,OACE,MAAM,KAAK,aAAa,YACxB,MAAM,KAAK,aAAa,UACxB;AACA,UAAM,KAAK,QAAQ,OAAO,OAAO;AACjC;;;AAIJ,SAAO;;;;;CAMT,MAAM,kBAAkB,UAAmC;EACzD,MAAM,OAAO,MAAM,KAAK,QAAQ,MAAM;EACtC,IAAI,cAAc;AAElB,OAAK,MAAM,UAAU,MAAM;GACzB,MAAM,SAAS,iBAAiB,OAAO;AACvC,OAAI,UAAU,OAAO,SAAS,WAAW,SAAS,UAAU,GAAG,GAAG,CAAC,EAAE;AACnE,UAAM,KAAK,QAAQ,OAAO,OAAO;AACjC;;;AAIJ,SAAO;;;;;CAMT,MAAM,QAAuB;AAC3B,QAAM,KAAK,QAAQ,OAAO;AAC1B,OAAK,QAAQ;GAAE,MAAM;GAAG,QAAQ;GAAG;;;;;CAMrC,MAAM,WAAgC;EACpC,MAAM,eAAe,MAAM,KAAK,QAAQ,SAAS;AAEjD,SAAO;GACL,cACE,cAAc,eAAe,MAAM,KAAK,QAAQ,MAAM,EAAE;GAC1D,MAAM,KAAK,MAAM;GACjB,QAAQ,KAAK,MAAM;GACnB,SACE,KAAK,MAAM,OAAO,KAAK,MAAM,SAAS,IAClC,KAAK,MACF,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,KAAK,MAAM,UAAW,IAC7D,GACD;GACN,aAAa,cAAc;GAC5B;;;;;CAMH,MAAc,gBAA+B;EAC3C,MAAM,OAAO,MAAM,KAAK,QAAQ,MAAM;AAEtC,MAAI,KAAK,UAAU,KAAK,OAAO,WAC7B;EAIF,MAAM,UAAgD,EAAE;AAExD,OAAK,MAAM,UAAU,MAAM;GACzB,MAAM,QAAQ,MAAM,KAAK,QAAQ,IAAI,OAAO;AAC5C,OAAI,MACF,SAAQ,KAAK;IACX,KAAK;IACL,WAAW,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,SAAS;IACpD,CAAC;;AAKN,UAAQ,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,UAAU;EAGjD,MAAM,WAAW,QAAQ,SAAS,KAAK,OAAO;AAC9C,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAAK;GACjC,MAAM,QAAQ,QAAQ;AACtB,OAAI,MACF,OAAM,KAAK,QAAQ,OAAO,MAAM,IAAI;;;;;;;AAS5C,SAAgB,+BACd,SACA,QAC0B;AAC1B,QAAO,IAAI,yBAAyB,SAAS,OAAO"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CacheEntryMeta, CacheKeyString, CacheLookupResult, CacheMissReason, CacheStats, CacheStorageAdapter, DEFAULT_CACHE_CONFIG, VerificationCacheConfig, VerificationCacheEntry, VerificationCacheKey } from "./types.mjs";
|
|
2
|
+
import { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey } from "./cache-service.mjs";
|
|
3
|
+
import { InMemoryCacheStorage, createInMemoryCacheStorage } from "./adapters/in-memory.mjs";
|
|
4
|
+
import { FileSystemCacheStorage, createFileSystemCacheStorage } from "./adapters/filesystem.mjs";
|
|
5
|
+
import { KeyValueStore, WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage } from "./adapters/workspace-state.mjs";
|
|
6
|
+
import "./adapters/index.mjs";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DEFAULT_CACHE_CONFIG } from "./types.mjs";
|
|
2
|
+
import { VerificationCacheService, cacheKeyToString, computeContentHash, createVerificationCacheService, stringToCacheKey } from "./cache-service.mjs";
|
|
3
|
+
import { InMemoryCacheStorage, createInMemoryCacheStorage } from "./adapters/in-memory.mjs";
|
|
4
|
+
import { FileSystemCacheStorage, createFileSystemCacheStorage } from "./adapters/filesystem.mjs";
|
|
5
|
+
import { WorkspaceStateCacheStorage, createWorkspaceStateCacheStorage } from "./adapters/workspace-state.mjs";
|
|
6
|
+
import "./adapters/index.mjs";
|
|
7
|
+
|
|
8
|
+
export { };
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { VerificationReport, VerificationTier } from "@contractspec/lib.contracts/llm";
|
|
2
|
+
|
|
3
|
+
//#region src/services/verification-cache/types.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Cache key for verification results.
|
|
7
|
+
*/
|
|
8
|
+
interface VerificationCacheKey {
|
|
9
|
+
/** SHA256 hash of spec file content */
|
|
10
|
+
specHash: string;
|
|
11
|
+
/** SHA256 hash of implementation file content */
|
|
12
|
+
implHash: string;
|
|
13
|
+
/** Verification tier */
|
|
14
|
+
tier: VerificationTier;
|
|
15
|
+
/** AI model version (for AI tier, ensures cache invalidation on model change) */
|
|
16
|
+
aiModelVersion?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Serializable cache key string.
|
|
20
|
+
*/
|
|
21
|
+
type CacheKeyString = string;
|
|
22
|
+
/**
|
|
23
|
+
* Cache entry metadata.
|
|
24
|
+
*/
|
|
25
|
+
interface CacheEntryMeta {
|
|
26
|
+
/** When this entry was created */
|
|
27
|
+
createdAt: string;
|
|
28
|
+
/** When this entry expires (optional TTL) */
|
|
29
|
+
expiresAt?: string;
|
|
30
|
+
/** Paths to files that affect this result (for transitive invalidation) */
|
|
31
|
+
dependencies: string[];
|
|
32
|
+
/** Human-readable spec name for debugging */
|
|
33
|
+
specName?: string;
|
|
34
|
+
/** Human-readable impl path for debugging */
|
|
35
|
+
implPath?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Full cache entry with result.
|
|
39
|
+
*/
|
|
40
|
+
interface VerificationCacheEntry {
|
|
41
|
+
/** The cache key */
|
|
42
|
+
key: VerificationCacheKey;
|
|
43
|
+
/** The verification result */
|
|
44
|
+
result: VerificationReport;
|
|
45
|
+
/** Entry metadata */
|
|
46
|
+
meta: CacheEntryMeta;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Cache lookup result.
|
|
50
|
+
*/
|
|
51
|
+
type CacheLookupResult = {
|
|
52
|
+
hit: true;
|
|
53
|
+
entry: VerificationCacheEntry;
|
|
54
|
+
} | {
|
|
55
|
+
hit: false;
|
|
56
|
+
reason: CacheMissReason;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Reasons for cache miss.
|
|
60
|
+
*/
|
|
61
|
+
type CacheMissReason = 'not_found' | 'expired' | 'spec_changed' | 'impl_changed' | 'dependency_changed' | 'model_changed';
|
|
62
|
+
/**
|
|
63
|
+
* Cache statistics.
|
|
64
|
+
*/
|
|
65
|
+
interface CacheStats {
|
|
66
|
+
/** Total entries in cache */
|
|
67
|
+
totalEntries: number;
|
|
68
|
+
/** Number of cache hits since startup */
|
|
69
|
+
hits: number;
|
|
70
|
+
/** Number of cache misses since startup */
|
|
71
|
+
misses: number;
|
|
72
|
+
/** Hit rate percentage (0-100) */
|
|
73
|
+
hitRate: number;
|
|
74
|
+
/** Estimated memory usage in bytes */
|
|
75
|
+
memoryUsage?: number;
|
|
76
|
+
/** Last time cache was pruned */
|
|
77
|
+
lastPruned?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Cache configuration.
|
|
81
|
+
*/
|
|
82
|
+
interface VerificationCacheConfig {
|
|
83
|
+
/** Maximum number of entries to keep */
|
|
84
|
+
maxEntries?: number;
|
|
85
|
+
/** Default TTL in milliseconds (AI tier uses this) */
|
|
86
|
+
defaultTtlMs?: number;
|
|
87
|
+
/** TTL for structure tier (usually longer) */
|
|
88
|
+
structureTtlMs?: number;
|
|
89
|
+
/** TTL for behavior tier */
|
|
90
|
+
behaviorTtlMs?: number;
|
|
91
|
+
/** TTL for AI tier (usually shorter) */
|
|
92
|
+
aiTtlMs?: number;
|
|
93
|
+
/** Enable transitive invalidation */
|
|
94
|
+
transitiveInvalidation?: boolean;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Default cache configuration.
|
|
98
|
+
*/
|
|
99
|
+
declare const DEFAULT_CACHE_CONFIG: Required<VerificationCacheConfig>;
|
|
100
|
+
/**
|
|
101
|
+
* Storage adapter interface for cache persistence.
|
|
102
|
+
*/
|
|
103
|
+
interface CacheStorageAdapter {
|
|
104
|
+
/** Get an entry by key */
|
|
105
|
+
get(key: CacheKeyString): Promise<VerificationCacheEntry | null>;
|
|
106
|
+
/** Set an entry */
|
|
107
|
+
set(key: CacheKeyString, entry: VerificationCacheEntry): Promise<void>;
|
|
108
|
+
/** Delete an entry */
|
|
109
|
+
delete(key: CacheKeyString): Promise<boolean>;
|
|
110
|
+
/** Check if key exists */
|
|
111
|
+
has(key: CacheKeyString): Promise<boolean>;
|
|
112
|
+
/** List all keys */
|
|
113
|
+
keys(): Promise<CacheKeyString[]>;
|
|
114
|
+
/** Clear all entries */
|
|
115
|
+
clear(): Promise<void>;
|
|
116
|
+
/** Get stats (optional) */
|
|
117
|
+
stats?(): Promise<{
|
|
118
|
+
entryCount: number;
|
|
119
|
+
memoryUsage?: number;
|
|
120
|
+
}>;
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
export { CacheEntryMeta, CacheKeyString, CacheLookupResult, CacheMissReason, CacheStats, CacheStorageAdapter, DEFAULT_CACHE_CONFIG, VerificationCacheConfig, VerificationCacheEntry, VerificationCacheKey };
|
|
124
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/services/verification-cache/types.ts"],"sourcesContent":[],"mappings":";;;;AA0BA;AAKA;AAgBA;AAEO,UArCU,oBAAA,CAqCV;EAEG;EAEF,QAAA,EAAA,MAAA;EAAc;EAMV,QAAA,EAAA,MAAA;EAOA;EAWK,IAAA,EA3DT,gBA2DmB;EAkBV;EAkBJ,cAAA,CAAA,EAAA,MAOZ;AAKD;;;;AAIW,KAvGC,cAAA,GAuGD,MAAA;;;;AAEoB,UApGd,cAAA,CAoGc;EAEpB;EAAiB,SAAA,EAAA,MAAA;EAEV;EAAR,SAAA,CAAA,EAAA,MAAA;EAEC;EAEC,YAAA,EAAA,MAAA,EAAA;EAAO;;;;;;;;UA5FF,sBAAA;;OAEV;;UAEG;;QAEF;;;;;KAMI,iBAAA;;SACY;;;UACE;;;;;KAKd,eAAA;;;;UAWK,UAAA;;;;;;;;;;;;;;;;;UAkBA,uBAAA;;;;;;;;;;;;;;;;;cAkBJ,sBAAsB,SAAS;;;;UAY3B,mBAAA;;WAEN,iBAAiB,QAAQ;;WAEzB,uBAAuB,yBAAyB;;cAE7C,iBAAiB;;WAEpB,iBAAiB;;UAElB,QAAQ;;WAEP;;YAEC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/services/verification-cache/types.ts
|
|
2
|
+
/**
|
|
3
|
+
* Default cache configuration.
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_CACHE_CONFIG = {
|
|
6
|
+
maxEntries: 1e3,
|
|
7
|
+
defaultTtlMs: 1440 * 60 * 1e3,
|
|
8
|
+
structureTtlMs: 10080 * 60 * 1e3,
|
|
9
|
+
behaviorTtlMs: 1440 * 60 * 1e3,
|
|
10
|
+
aiTtlMs: 1440 * 60 * 1e3,
|
|
11
|
+
transitiveInvalidation: true
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { DEFAULT_CACHE_CONFIG };
|
|
16
|
+
//# sourceMappingURL=types.mjs.map
|