@weavelogic/knowledge-graph-agent 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +972 -303
- package/dist/_virtual/_commonjsHelpers.js +7 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/additionalItems.js +5 -0
- package/dist/_virtual/additionalItems.js.map +1 -0
- package/dist/_virtual/additionalProperties.js +5 -0
- package/dist/_virtual/additionalProperties.js.map +1 -0
- package/dist/_virtual/ajv.js +6 -0
- package/dist/_virtual/ajv.js.map +1 -0
- package/dist/_virtual/ajv2.js +5 -0
- package/dist/_virtual/ajv2.js.map +1 -0
- package/dist/_virtual/allOf.js +5 -0
- package/dist/_virtual/allOf.js.map +1 -0
- package/dist/_virtual/anyOf.js +5 -0
- package/dist/_virtual/anyOf.js.map +1 -0
- package/dist/_virtual/applicability.js +5 -0
- package/dist/_virtual/applicability.js.map +1 -0
- package/dist/_virtual/boolSchema.js +5 -0
- package/dist/_virtual/boolSchema.js.map +1 -0
- package/dist/_virtual/code.js +5 -0
- package/dist/_virtual/code.js.map +1 -0
- package/dist/_virtual/code2.js +5 -0
- package/dist/_virtual/code2.js.map +1 -0
- package/dist/_virtual/const.js +5 -0
- package/dist/_virtual/const.js.map +1 -0
- package/dist/_virtual/contains.js +5 -0
- package/dist/_virtual/contains.js.map +1 -0
- package/dist/_virtual/core.js +5 -0
- package/dist/_virtual/core.js.map +1 -0
- package/dist/_virtual/dataType.js +5 -0
- package/dist/_virtual/dataType.js.map +1 -0
- package/dist/_virtual/defaults.js +5 -0
- package/dist/_virtual/defaults.js.map +1 -0
- package/dist/_virtual/dependencies.js +5 -0
- package/dist/_virtual/dependencies.js.map +1 -0
- package/dist/_virtual/draft7.js +5 -0
- package/dist/_virtual/draft7.js.map +1 -0
- package/dist/_virtual/enum.js +5 -0
- package/dist/_virtual/enum.js.map +1 -0
- package/dist/_virtual/equal.js +5 -0
- package/dist/_virtual/equal.js.map +1 -0
- package/dist/_virtual/errors.js +5 -0
- package/dist/_virtual/errors.js.map +1 -0
- package/dist/_virtual/format.js +5 -0
- package/dist/_virtual/format.js.map +1 -0
- package/dist/_virtual/formats.js +5 -0
- package/dist/_virtual/formats.js.map +1 -0
- package/dist/_virtual/id.js +5 -0
- package/dist/_virtual/id.js.map +1 -0
- package/dist/_virtual/if.js +5 -0
- package/dist/_virtual/if.js.map +1 -0
- package/dist/_virtual/index.js +8 -0
- package/dist/_virtual/index.js.map +1 -0
- package/dist/_virtual/index10.js +5 -0
- package/dist/_virtual/index10.js.map +1 -0
- package/dist/_virtual/index11.js +5 -0
- package/dist/_virtual/index11.js.map +1 -0
- package/dist/_virtual/index12.js +5 -0
- package/dist/_virtual/index12.js.map +1 -0
- package/dist/_virtual/index2.js +5 -0
- package/dist/_virtual/index2.js.map +1 -0
- package/dist/_virtual/index3.js +5 -0
- package/dist/_virtual/index3.js.map +1 -0
- package/dist/_virtual/index4.js +5 -0
- package/dist/_virtual/index4.js.map +1 -0
- package/dist/_virtual/index5.js +5 -0
- package/dist/_virtual/index5.js.map +1 -0
- package/dist/_virtual/index6.js +5 -0
- package/dist/_virtual/index6.js.map +1 -0
- package/dist/_virtual/index7.js +5 -0
- package/dist/_virtual/index7.js.map +1 -0
- package/dist/_virtual/index8.js +5 -0
- package/dist/_virtual/index8.js.map +1 -0
- package/dist/_virtual/index9.js +5 -0
- package/dist/_virtual/index9.js.map +1 -0
- package/dist/_virtual/items.js +5 -0
- package/dist/_virtual/items.js.map +1 -0
- package/dist/_virtual/items2020.js +5 -0
- package/dist/_virtual/items2020.js.map +1 -0
- package/dist/_virtual/keyword.js +5 -0
- package/dist/_virtual/keyword.js.map +1 -0
- package/dist/_virtual/limit.js +5 -0
- package/dist/_virtual/limit.js.map +1 -0
- package/dist/_virtual/limitItems.js +5 -0
- package/dist/_virtual/limitItems.js.map +1 -0
- package/dist/_virtual/limitLength.js +5 -0
- package/dist/_virtual/limitLength.js.map +1 -0
- package/dist/_virtual/limitNumber.js +5 -0
- package/dist/_virtual/limitNumber.js.map +1 -0
- package/dist/_virtual/limitProperties.js +5 -0
- package/dist/_virtual/limitProperties.js.map +1 -0
- package/dist/_virtual/metadata.js +5 -0
- package/dist/_virtual/metadata.js.map +1 -0
- package/dist/_virtual/multipleOf.js +5 -0
- package/dist/_virtual/multipleOf.js.map +1 -0
- package/dist/_virtual/names.js +5 -0
- package/dist/_virtual/names.js.map +1 -0
- package/dist/_virtual/not.js +5 -0
- package/dist/_virtual/not.js.map +1 -0
- package/dist/_virtual/oneOf.js +5 -0
- package/dist/_virtual/oneOf.js.map +1 -0
- package/dist/_virtual/pattern.js +5 -0
- package/dist/_virtual/pattern.js.map +1 -0
- package/dist/_virtual/patternProperties.js +5 -0
- package/dist/_virtual/patternProperties.js.map +1 -0
- package/dist/_virtual/prefixItems.js +5 -0
- package/dist/_virtual/prefixItems.js.map +1 -0
- package/dist/_virtual/properties.js +5 -0
- package/dist/_virtual/properties.js.map +1 -0
- package/dist/_virtual/propertyNames.js +5 -0
- package/dist/_virtual/propertyNames.js.map +1 -0
- package/dist/_virtual/ref.js +5 -0
- package/dist/_virtual/ref.js.map +1 -0
- package/dist/_virtual/ref_error.js +5 -0
- package/dist/_virtual/ref_error.js.map +1 -0
- package/dist/_virtual/required.js +5 -0
- package/dist/_virtual/required.js.map +1 -0
- package/dist/_virtual/resolve.js +5 -0
- package/dist/_virtual/resolve.js.map +1 -0
- package/dist/_virtual/rules.js +5 -0
- package/dist/_virtual/rules.js.map +1 -0
- package/dist/_virtual/scope.js +5 -0
- package/dist/_virtual/scope.js.map +1 -0
- package/dist/_virtual/subschema.js +5 -0
- package/dist/_virtual/subschema.js.map +1 -0
- package/dist/_virtual/thenElse.js +5 -0
- package/dist/_virtual/thenElse.js.map +1 -0
- package/dist/_virtual/types.js +5 -0
- package/dist/_virtual/types.js.map +1 -0
- package/dist/_virtual/ucs2length.js +5 -0
- package/dist/_virtual/ucs2length.js.map +1 -0
- package/dist/_virtual/uniqueItems.js +5 -0
- package/dist/_virtual/uniqueItems.js.map +1 -0
- package/dist/_virtual/uri.js +5 -0
- package/dist/_virtual/uri.js.map +1 -0
- package/dist/_virtual/util.js +5 -0
- package/dist/_virtual/util.js.map +1 -0
- package/dist/_virtual/validation_error.js +5 -0
- package/dist/_virtual/validation_error.js.map +1 -0
- package/dist/agents/analyst-agent.d.ts +230 -0
- package/dist/agents/analyst-agent.d.ts.map +1 -0
- package/dist/agents/analyst-agent.js +793 -0
- package/dist/agents/analyst-agent.js.map +1 -0
- package/dist/agents/architect-agent.d.ts +248 -0
- package/dist/agents/architect-agent.d.ts.map +1 -0
- package/dist/agents/architect-agent.js +685 -0
- package/dist/agents/architect-agent.js.map +1 -0
- package/dist/agents/base-agent.d.ts +169 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +441 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/coder-agent.d.ts +191 -0
- package/dist/agents/coder-agent.d.ts.map +1 -0
- package/dist/agents/coder-agent.js +1008 -0
- package/dist/agents/coder-agent.js.map +1 -0
- package/dist/agents/index.d.ts +18 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +40 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.d.ts +213 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +419 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/researcher-agent.d.ts +226 -0
- package/dist/agents/researcher-agent.d.ts.map +1 -0
- package/dist/agents/researcher-agent.js +572 -0
- package/dist/agents/researcher-agent.js.map +1 -0
- package/dist/agents/rules-engine.d.ts +320 -0
- package/dist/agents/rules-engine.d.ts.map +1 -0
- package/dist/agents/rules-engine.js +552 -0
- package/dist/agents/rules-engine.js.map +1 -0
- package/dist/agents/tester-agent.d.ts +219 -0
- package/dist/agents/tester-agent.d.ts.map +1 -0
- package/dist/agents/tester-agent.js +683 -0
- package/dist/agents/tester-agent.js.map +1 -0
- package/dist/agents/types.d.ts +425 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +57 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/audit/config.d.ts +150 -0
- package/dist/audit/config.d.ts.map +1 -0
- package/dist/audit/config.js +111 -0
- package/dist/audit/config.js.map +1 -0
- package/dist/audit/index.d.ts +38 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/services/audit-chain.d.ts +276 -0
- package/dist/audit/services/audit-chain.d.ts.map +1 -0
- package/dist/audit/services/audit-chain.js +502 -0
- package/dist/audit/services/audit-chain.js.map +1 -0
- package/dist/audit/services/index.d.ts +11 -0
- package/dist/audit/services/index.d.ts.map +1 -0
- package/dist/audit/services/syndication.d.ts +334 -0
- package/dist/audit/services/syndication.d.ts.map +1 -0
- package/dist/audit/services/syndication.js +589 -0
- package/dist/audit/services/syndication.js.map +1 -0
- package/dist/audit/types.d.ts +453 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/caching/index.d.ts +55 -0
- package/dist/caching/index.d.ts.map +1 -0
- package/dist/caching/index.js +206 -0
- package/dist/caching/index.js.map +1 -0
- package/dist/caching/lru-cache.d.ts +254 -0
- package/dist/caching/lru-cache.d.ts.map +1 -0
- package/dist/caching/types.d.ts +95 -0
- package/dist/caching/types.d.ts.map +1 -0
- package/dist/chunking/chunker.d.ts +94 -0
- package/dist/chunking/chunker.d.ts.map +1 -0
- package/dist/chunking/index.d.ts +125 -0
- package/dist/chunking/index.d.ts.map +1 -0
- package/dist/chunking/index.js +283 -0
- package/dist/chunking/index.js.map +1 -0
- package/dist/chunking/types.d.ts +92 -0
- package/dist/chunking/types.d.ts.map +1 -0
- package/dist/cli/commands/audit.d.ts +21 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +621 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/commit.d.ts +11 -0
- package/dist/cli/commands/commit.d.ts.map +1 -0
- package/dist/cli/commands/commit.js +379 -0
- package/dist/cli/commands/commit.js.map +1 -0
- package/dist/cli/commands/config.d.ts +8 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +107 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/cultivate.d.ts +16 -0
- package/dist/cli/commands/cultivate.d.ts.map +1 -0
- package/dist/cli/commands/cultivate.js +254 -0
- package/dist/cli/commands/cultivate.js.map +1 -0
- package/dist/cli/commands/diagnostics.d.ts +8 -0
- package/dist/cli/commands/diagnostics.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics.js +140 -0
- package/dist/cli/commands/diagnostics.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +13 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/init-primitives.d.ts +19 -0
- package/dist/cli/commands/init-primitives.d.ts.map +1 -0
- package/dist/cli/commands/init-primitives.js +208 -0
- package/dist/cli/commands/init-primitives.js.map +1 -0
- package/dist/cli/commands/sop.d.ts +14 -0
- package/dist/cli/commands/sop.d.ts.map +1 -0
- package/dist/cli/commands/sop.js +598 -0
- package/dist/cli/commands/sop.js.map +1 -0
- package/dist/cli/commands/vector.d.ts +14 -0
- package/dist/cli/commands/vector.d.ts.map +1 -0
- package/dist/cli/commands/vector.js +429 -0
- package/dist/cli/commands/vector.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +12 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +471 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +66 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/config/index.d.ts +153 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +141 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/manager.d.ts +136 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/types.d.ts +127 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/core/cache.d.ts +185 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +435 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/cultivation/deep-analyzer.d.ts +129 -0
- package/dist/cultivation/deep-analyzer.d.ts.map +1 -0
- package/dist/cultivation/deep-analyzer.js +322 -0
- package/dist/cultivation/deep-analyzer.js.map +1 -0
- package/dist/cultivation/index.d.ts +13 -0
- package/dist/cultivation/index.d.ts.map +1 -0
- package/dist/cultivation/seed-generator.d.ts +92 -0
- package/dist/cultivation/seed-generator.d.ts.map +1 -0
- package/dist/cultivation/seed-generator.js +1033 -0
- package/dist/cultivation/seed-generator.js.map +1 -0
- package/dist/cultivation/types.d.ts +230 -0
- package/dist/cultivation/types.d.ts.map +1 -0
- package/dist/database/schemas/index.d.ts +85 -0
- package/dist/database/schemas/index.d.ts.map +1 -0
- package/dist/generators/claude-md.d.ts +7 -0
- package/dist/generators/claude-md.d.ts.map +1 -1
- package/dist/generators/claude-md.js.map +1 -1
- package/dist/generators/docs-init.d.ts +6 -0
- package/dist/generators/docs-init.d.ts.map +1 -1
- package/dist/generators/docs-init.js.map +1 -1
- package/dist/health/checks.d.ts +135 -0
- package/dist/health/checks.d.ts.map +1 -0
- package/dist/health/index.d.ts +119 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +191 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/monitor.d.ts +146 -0
- package/dist/health/monitor.d.ts.map +1 -0
- package/dist/health/types.d.ts +135 -0
- package/dist/health/types.d.ts.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +182 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/auto-commit.d.ts +175 -0
- package/dist/integrations/auto-commit.d.ts.map +1 -0
- package/dist/integrations/auto-commit.js +399 -0
- package/dist/integrations/auto-commit.js.map +1 -0
- package/dist/integrations/git.d.ts +299 -0
- package/dist/integrations/git.d.ts.map +1 -0
- package/dist/integrations/git.js +465 -0
- package/dist/integrations/git.js.map +1 -0
- package/dist/mcp-server/bin.d.ts +11 -0
- package/dist/mcp-server/bin.d.ts.map +1 -0
- package/dist/mcp-server/handlers/index.d.ts +57 -0
- package/dist/mcp-server/handlers/index.d.ts.map +1 -0
- package/dist/mcp-server/handlers/index.js +235 -0
- package/dist/mcp-server/handlers/index.js.map +1 -0
- package/dist/mcp-server/index.d.ts +28 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/server.d.ts +133 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +280 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/agents/index.d.ts +10 -0
- package/dist/mcp-server/tools/agents/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/agents/list.d.ts +19 -0
- package/dist/mcp-server/tools/agents/list.d.ts.map +1 -0
- package/dist/mcp-server/tools/agents/spawn.d.ts +19 -0
- package/dist/mcp-server/tools/agents/spawn.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/checkpoint.d.ts +58 -0
- package/dist/mcp-server/tools/audit/checkpoint.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/checkpoint.js +73 -0
- package/dist/mcp-server/tools/audit/checkpoint.js.map +1 -0
- package/dist/mcp-server/tools/audit/index.d.ts +53 -0
- package/dist/mcp-server/tools/audit/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/index.js +12 -0
- package/dist/mcp-server/tools/audit/index.js.map +1 -0
- package/dist/mcp-server/tools/audit/query.d.ts +58 -0
- package/dist/mcp-server/tools/audit/query.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/query.js +125 -0
- package/dist/mcp-server/tools/audit/query.js.map +1 -0
- package/dist/mcp-server/tools/audit/sync.d.ts +58 -0
- package/dist/mcp-server/tools/audit/sync.d.ts.map +1 -0
- package/dist/mcp-server/tools/audit/sync.js +126 -0
- package/dist/mcp-server/tools/audit/sync.js.map +1 -0
- package/dist/mcp-server/tools/graph/generate.d.ts +21 -0
- package/dist/mcp-server/tools/graph/generate.d.ts.map +1 -0
- package/dist/mcp-server/tools/graph/index.d.ts +11 -0
- package/dist/mcp-server/tools/graph/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/graph/query.d.ts +22 -0
- package/dist/mcp-server/tools/graph/query.d.ts.map +1 -0
- package/dist/mcp-server/tools/graph/stats.d.ts +22 -0
- package/dist/mcp-server/tools/graph/stats.d.ts.map +1 -0
- package/dist/mcp-server/tools/health.d.ts +21 -0
- package/dist/mcp-server/tools/health.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +16 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/registry.d.ts +90 -0
- package/dist/mcp-server/tools/registry.d.ts.map +1 -0
- package/dist/mcp-server/tools/registry.js +753 -0
- package/dist/mcp-server/tools/registry.js.map +1 -0
- package/dist/mcp-server/tools/search/index.d.ts +10 -0
- package/dist/mcp-server/tools/search/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/search/nodes.d.ts +22 -0
- package/dist/mcp-server/tools/search/nodes.d.ts.map +1 -0
- package/dist/mcp-server/tools/search/tags.d.ts +22 -0
- package/dist/mcp-server/tools/search/tags.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/index.d.ts +12 -0
- package/dist/mcp-server/tools/vector/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/index.js +12 -0
- package/dist/mcp-server/tools/vector/index.js.map +1 -0
- package/dist/mcp-server/tools/vector/search.d.ts +41 -0
- package/dist/mcp-server/tools/vector/search.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/search.js +224 -0
- package/dist/mcp-server/tools/vector/search.js.map +1 -0
- package/dist/mcp-server/tools/vector/trajectory.d.ts +39 -0
- package/dist/mcp-server/tools/vector/trajectory.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/trajectory.js +170 -0
- package/dist/mcp-server/tools/vector/trajectory.js.map +1 -0
- package/dist/mcp-server/tools/vector/upsert.d.ts +44 -0
- package/dist/mcp-server/tools/vector/upsert.d.ts.map +1 -0
- package/dist/mcp-server/tools/vector/upsert.js +175 -0
- package/dist/mcp-server/tools/vector/upsert.js.map +1 -0
- package/dist/mcp-server/tools/workflow/index.d.ts +29 -0
- package/dist/mcp-server/tools/workflow/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/index.js +12 -0
- package/dist/mcp-server/tools/workflow/index.js.map +1 -0
- package/dist/mcp-server/tools/workflow/list.d.ts +41 -0
- package/dist/mcp-server/tools/workflow/list.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/list.js +195 -0
- package/dist/mcp-server/tools/workflow/list.js.map +1 -0
- package/dist/mcp-server/tools/workflow/start.d.ts +40 -0
- package/dist/mcp-server/tools/workflow/start.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/start.js +165 -0
- package/dist/mcp-server/tools/workflow/start.js.map +1 -0
- package/dist/mcp-server/tools/workflow/status.d.ts +38 -0
- package/dist/mcp-server/tools/workflow/status.d.ts.map +1 -0
- package/dist/mcp-server/tools/workflow/status.js +97 -0
- package/dist/mcp-server/tools/workflow/status.js.map +1 -0
- package/dist/mcp-server/types/index.d.ts +286 -0
- package/dist/mcp-server/types/index.d.ts.map +1 -0
- package/dist/memory/index.d.ts +10 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/vault-sync.d.ts +212 -0
- package/dist/memory/vault-sync.d.ts.map +1 -0
- package/dist/memory/vault-sync.js +463 -0
- package/dist/memory/vault-sync.js.map +1 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +296 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js +71 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-compat.js.map +1 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js +26 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/server/zod-json-schema-compat.js.map +1 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +407 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +1332 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js +71 -0
- package/dist/node_modules/@modelcontextprotocol/sdk/dist/esm/validation/ajv-provider.js.map +1 -0
- package/dist/node_modules/ajv/dist/ajv.js +84 -0
- package/dist/node_modules/ajv/dist/ajv.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/codegen/code.js +160 -0
- package/dist/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/codegen/index.js +728 -0
- package/dist/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/codegen/scope.js +152 -0
- package/dist/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/errors.js +131 -0
- package/dist/node_modules/ajv/dist/compile/errors.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/index.js +234 -0
- package/dist/node_modules/ajv/dist/compile/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/names.js +44 -0
- package/dist/node_modules/ajv/dist/compile/names.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/ref_error.js +22 -0
- package/dist/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/resolve.js +163 -0
- package/dist/node_modules/ajv/dist/compile/resolve.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/rules.js +35 -0
- package/dist/node_modules/ajv/dist/compile/rules.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/util.js +173 -0
- package/dist/node_modules/ajv/dist/compile/util.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/applicability.js +27 -0
- package/dist/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js +58 -0
- package/dist/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/dataType.js +193 -0
- package/dist/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/defaults.js +43 -0
- package/dist/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/index.js +522 -0
- package/dist/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/keyword.js +126 -0
- package/dist/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
- package/dist/node_modules/ajv/dist/compile/validate/subschema.js +89 -0
- package/dist/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
- package/dist/node_modules/ajv/dist/core.js +628 -0
- package/dist/node_modules/ajv/dist/core.js.map +1 -0
- package/dist/node_modules/ajv/dist/refs/data.json.js +24 -0
- package/dist/node_modules/ajv/dist/refs/data.json.js.map +1 -0
- package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js +25 -0
- package/dist/node_modules/ajv/dist/refs/json-schema-draft-07.json.js.map +1 -0
- package/dist/node_modules/ajv/dist/runtime/equal.js +16 -0
- package/dist/node_modules/ajv/dist/runtime/equal.js.map +1 -0
- package/dist/node_modules/ajv/dist/runtime/ucs2length.js +30 -0
- package/dist/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
- package/dist/node_modules/ajv/dist/runtime/uri.js +16 -0
- package/dist/node_modules/ajv/dist/runtime/uri.js.map +1 -0
- package/dist/node_modules/ajv/dist/runtime/validation_error.js +20 -0
- package/dist/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +59 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +114 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js +32 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +22 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js +100 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +103 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js +75 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js +68 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js +64 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js +43 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js +36 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +64 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +81 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +22 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js +66 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +49 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +23 -0
- package/dist/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/code.js +140 -0
- package/dist/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/core/id.js +19 -0
- package/dist/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/core/index.js +27 -0
- package/dist/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/core/ref.js +132 -0
- package/dist/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js +114 -0
- package/dist/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js +18 -0
- package/dist/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/draft7.js +31 -0
- package/dist/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/format/format.js +95 -0
- package/dist/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/format/index.js +16 -0
- package/dist/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/metadata.js +27 -0
- package/dist/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/const.js +36 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js +56 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/index.js +52 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js +34 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js +39 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +37 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +34 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +33 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js +34 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/required.js +89 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +75 -0
- package/dist/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
- package/dist/node_modules/ajv-formats/dist/formats.js +209 -0
- package/dist/node_modules/ajv-formats/dist/formats.js.map +1 -0
- package/dist/node_modules/ajv-formats/dist/index.js +51 -0
- package/dist/node_modules/ajv-formats/dist/index.js.map +1 -0
- package/dist/node_modules/ajv-formats/dist/limit.js +80 -0
- package/dist/node_modules/ajv-formats/dist/limit.js.map +1 -0
- package/dist/node_modules/fast-deep-equal/index.js +39 -0
- package/dist/node_modules/fast-deep-equal/index.js.map +1 -0
- package/dist/node_modules/fast-uri/index.js +261 -0
- package/dist/node_modules/fast-uri/index.js.map +1 -0
- package/dist/node_modules/fast-uri/lib/schemes.js +215 -0
- package/dist/node_modules/fast-uri/lib/schemes.js.map +1 -0
- package/dist/node_modules/fast-uri/lib/utils.js +261 -0
- package/dist/node_modules/fast-uri/lib/utils.js.map +1 -0
- package/dist/node_modules/json-schema-traverse/index.js +92 -0
- package/dist/node_modules/json-schema-traverse/index.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/errors.js +37 -0
- package/dist/node_modules/zod/v4/classic/errors.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/iso.js +43 -0
- package/dist/node_modules/zod/v4/classic/iso.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/parse.js +13 -0
- package/dist/node_modules/zod/v4/classic/parse.js.map +1 -0
- package/dist/node_modules/zod/v4/classic/schemas.js +688 -0
- package/dist/node_modules/zod/v4/classic/schemas.js.map +1 -0
- package/dist/node_modules/zod/v4/core/api.js +492 -0
- package/dist/node_modules/zod/v4/core/api.js.map +1 -0
- package/dist/node_modules/zod/v4/core/checks.js +405 -0
- package/dist/node_modules/zod/v4/core/checks.js.map +1 -0
- package/dist/node_modules/zod/v4/core/core.js +58 -0
- package/dist/node_modules/zod/v4/core/core.js.map +1 -0
- package/dist/node_modules/zod/v4/core/doc.js +38 -0
- package/dist/node_modules/zod/v4/core/doc.js.map +1 -0
- package/dist/node_modules/zod/v4/core/errors.js +82 -0
- package/dist/node_modules/zod/v4/core/errors.js.map +1 -0
- package/dist/node_modules/zod/v4/core/parse.js +60 -0
- package/dist/node_modules/zod/v4/core/parse.js.map +1 -0
- package/dist/node_modules/zod/v4/core/regexes.js +87 -0
- package/dist/node_modules/zod/v4/core/regexes.js.map +1 -0
- package/dist/node_modules/zod/v4/core/registries.js +52 -0
- package/dist/node_modules/zod/v4/core/registries.js.map +1 -0
- package/dist/node_modules/zod/v4/core/schemas.js +1283 -0
- package/dist/node_modules/zod/v4/core/schemas.js.map +1 -0
- package/dist/node_modules/zod/v4/core/util.js +341 -0
- package/dist/node_modules/zod/v4/core/util.js.map +1 -0
- package/dist/node_modules/zod/v4/core/versions.js +9 -0
- package/dist/node_modules/zod/v4/core/versions.js.map +1 -0
- package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +2 -0
- package/dist/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -0
- package/dist/reasoning/index.d.ts +74 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +124 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/tracker.d.ts +210 -0
- package/dist/reasoning/tracker.d.ts.map +1 -0
- package/dist/reasoning/types.d.ts +146 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/recovery/backup.d.ts +110 -0
- package/dist/recovery/backup.d.ts.map +1 -0
- package/dist/recovery/index.d.ts +70 -0
- package/dist/recovery/index.d.ts.map +1 -0
- package/dist/recovery/index.js +186 -0
- package/dist/recovery/index.js.map +1 -0
- package/dist/recovery/integrity.d.ts +74 -0
- package/dist/recovery/integrity.d.ts.map +1 -0
- package/dist/recovery/types.d.ts +94 -0
- package/dist/recovery/types.d.ts.map +1 -0
- package/dist/services/index.d.ts +130 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +134 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/manager.d.ts +140 -0
- package/dist/services/manager.d.ts.map +1 -0
- package/dist/services/types.d.ts +106 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/watchers.d.ts +95 -0
- package/dist/services/watchers.d.ts.map +1 -0
- package/dist/sops/compliance-checker.d.ts +83 -0
- package/dist/sops/compliance-checker.d.ts.map +1 -0
- package/dist/sops/compliance-checker.js +399 -0
- package/dist/sops/compliance-checker.js.map +1 -0
- package/dist/sops/gap-analyzer.d.ts +124 -0
- package/dist/sops/gap-analyzer.d.ts.map +1 -0
- package/dist/sops/gap-analyzer.js +313 -0
- package/dist/sops/gap-analyzer.js.map +1 -0
- package/dist/sops/index.d.ts +14 -0
- package/dist/sops/index.d.ts.map +1 -0
- package/dist/sops/overlay-manager.d.ts +115 -0
- package/dist/sops/overlay-manager.d.ts.map +1 -0
- package/dist/sops/overlay-manager.js +394 -0
- package/dist/sops/overlay-manager.js.map +1 -0
- package/dist/sops/registry.d.ts +73 -0
- package/dist/sops/registry.d.ts.map +1 -0
- package/dist/sops/registry.js +919 -0
- package/dist/sops/registry.js.map +1 -0
- package/dist/sops/types.d.ts +377 -0
- package/dist/sops/types.d.ts.map +1 -0
- package/dist/sops/types.js +46 -0
- package/dist/sops/types.js.map +1 -0
- package/dist/utils/error-recovery.d.ts +230 -0
- package/dist/utils/error-recovery.d.ts.map +1 -0
- package/dist/utils/error-recovery.js +228 -0
- package/dist/utils/error-recovery.js.map +1 -0
- package/dist/utils/error-taxonomy.d.ts +149 -0
- package/dist/utils/error-taxonomy.d.ts.map +1 -0
- package/dist/utils/error-taxonomy.js +260 -0
- package/dist/utils/error-taxonomy.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +139 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +311 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/vector/config.d.ts +300 -0
- package/dist/vector/config.d.ts.map +1 -0
- package/dist/vector/config.js +124 -0
- package/dist/vector/config.js.map +1 -0
- package/dist/vector/index.d.ts +50 -0
- package/dist/vector/index.d.ts.map +1 -0
- package/dist/vector/services/index.d.ts +13 -0
- package/dist/vector/services/index.d.ts.map +1 -0
- package/dist/vector/services/trajectory-tracker.d.ts +405 -0
- package/dist/vector/services/trajectory-tracker.d.ts.map +1 -0
- package/dist/vector/services/trajectory-tracker.js +445 -0
- package/dist/vector/services/trajectory-tracker.js.map +1 -0
- package/dist/vector/services/vector-store.d.ts +339 -0
- package/dist/vector/services/vector-store.d.ts.map +1 -0
- package/dist/vector/services/vector-store.js +748 -0
- package/dist/vector/services/vector-store.js.map +1 -0
- package/dist/vector/types.d.ts +677 -0
- package/dist/vector/types.d.ts.map +1 -0
- package/dist/workflow/adapters/goap-adapter.d.ts +196 -0
- package/dist/workflow/adapters/goap-adapter.d.ts.map +1 -0
- package/dist/workflow/adapters/goap-adapter.js +706 -0
- package/dist/workflow/adapters/goap-adapter.js.map +1 -0
- package/dist/workflow/adapters/index.d.ts +10 -0
- package/dist/workflow/adapters/index.d.ts.map +1 -0
- package/dist/workflow/config.d.ts +135 -0
- package/dist/workflow/config.d.ts.map +1 -0
- package/dist/workflow/config.js +92 -0
- package/dist/workflow/config.js.map +1 -0
- package/dist/workflow/handlers/index.d.ts +9 -0
- package/dist/workflow/handlers/index.d.ts.map +1 -0
- package/dist/workflow/handlers/webhook-handlers.d.ts +397 -0
- package/dist/workflow/handlers/webhook-handlers.d.ts.map +1 -0
- package/dist/workflow/handlers/webhook-handlers.js +454 -0
- package/dist/workflow/handlers/webhook-handlers.js.map +1 -0
- package/dist/workflow/index.d.ts +42 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/services/index.d.ts +9 -0
- package/dist/workflow/services/index.d.ts.map +1 -0
- package/dist/workflow/services/workflow-service.d.ts +318 -0
- package/dist/workflow/services/workflow-service.d.ts.map +1 -0
- package/dist/workflow/services/workflow-service.js +577 -0
- package/dist/workflow/services/workflow-service.js.map +1 -0
- package/dist/workflow/types.d.ts +470 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/workflows/realtime-collab.d.ts +245 -0
- package/dist/workflow/workflows/realtime-collab.d.ts.map +1 -0
- package/dist/workflows/index.d.ts +11 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/registry.d.ts +118 -0
- package/dist/workflows/registry.d.ts.map +1 -0
- package/dist/workflows/registry.js +575 -0
- package/dist/workflows/registry.js.map +1 -0
- package/dist/workflows/types.d.ts +322 -0
- package/dist/workflows/types.d.ts.map +1 -0
- package/dist/workflows/types.js +16 -0
- package/dist/workflows/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SOP Compliance Checker
|
|
3
|
+
*
|
|
4
|
+
* Checks project artifacts against AI-SDLC SOP requirements
|
|
5
|
+
* and determines compliance status.
|
|
6
|
+
*
|
|
7
|
+
* @module sops/compliance-checker
|
|
8
|
+
*/
|
|
9
|
+
import { SOPAssessment, SOPCategory } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Compliance check options
|
|
12
|
+
*/
|
|
13
|
+
export interface ComplianceCheckOptions {
|
|
14
|
+
/** Project root directory */
|
|
15
|
+
projectRoot: string;
|
|
16
|
+
/** Documentation path relative to project root */
|
|
17
|
+
docsPath?: string;
|
|
18
|
+
/** SOPs to check (default: all applicable) */
|
|
19
|
+
sopIds?: string[];
|
|
20
|
+
/** Categories to include */
|
|
21
|
+
categories?: SOPCategory[];
|
|
22
|
+
/** Whether to perform deep analysis */
|
|
23
|
+
deepAnalysis?: boolean;
|
|
24
|
+
/** Assessor name */
|
|
25
|
+
assessor?: string;
|
|
26
|
+
/** Custom artifact patterns */
|
|
27
|
+
artifactPatterns?: Record<string, string[]>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Evidence item found during checking
|
|
31
|
+
*/
|
|
32
|
+
export interface EvidenceItem {
|
|
33
|
+
/** Requirement ID this evidence supports */
|
|
34
|
+
requirementId: string;
|
|
35
|
+
/** File path where evidence was found */
|
|
36
|
+
filePath: string;
|
|
37
|
+
/** Type of evidence */
|
|
38
|
+
type: 'document' | 'code' | 'test' | 'config' | 'artifact';
|
|
39
|
+
/** Description of the evidence */
|
|
40
|
+
description: string;
|
|
41
|
+
/** Confidence score (0-1) */
|
|
42
|
+
confidence: number;
|
|
43
|
+
/** Relevant excerpt from file */
|
|
44
|
+
excerpt?: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Result of a compliance check
|
|
48
|
+
*/
|
|
49
|
+
export interface ComplianceCheckResult {
|
|
50
|
+
/** Whether check completed successfully */
|
|
51
|
+
success: boolean;
|
|
52
|
+
/** Project name */
|
|
53
|
+
projectName: string;
|
|
54
|
+
/** Check timestamp */
|
|
55
|
+
checkedAt: Date;
|
|
56
|
+
/** Assessments by SOP */
|
|
57
|
+
assessments: SOPAssessment[];
|
|
58
|
+
/** Evidence found */
|
|
59
|
+
evidence: EvidenceItem[];
|
|
60
|
+
/** Overall compliance score */
|
|
61
|
+
overallScore: number;
|
|
62
|
+
/** Summary by category */
|
|
63
|
+
categoryScores: Record<SOPCategory, number>;
|
|
64
|
+
/** Errors encountered */
|
|
65
|
+
errors: string[];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Check compliance for a project against AI-SDLC SOPs
|
|
69
|
+
*/
|
|
70
|
+
export declare function checkCompliance(options: ComplianceCheckOptions): Promise<ComplianceCheckResult>;
|
|
71
|
+
/**
|
|
72
|
+
* Quick check for a specific SOP
|
|
73
|
+
*/
|
|
74
|
+
export declare function checkSOPCompliance(sopId: string, projectRoot: string, docsPath?: string): Promise<SOPAssessment | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Check if project meets minimum compliance threshold
|
|
77
|
+
*/
|
|
78
|
+
export declare function meetsMinimumCompliance(projectRoot: string, threshold?: number, categories?: SOPCategory[]): Promise<{
|
|
79
|
+
meets: boolean;
|
|
80
|
+
score: number;
|
|
81
|
+
gaps: string[];
|
|
82
|
+
}>;
|
|
83
|
+
//# sourceMappingURL=compliance-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance-checker.d.ts","sourceRoot":"","sources":["../../src/sops/compliance-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAGL,aAAa,EAGb,WAAW,EAEZ,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IAEpB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAE3B,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,+BAA+B;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAC;IAEtB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAEjB,uBAAuB;IACvB,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAE3D,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IAEpB,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IAEnB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IAEjB,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,sBAAsB;IACtB,SAAS,EAAE,IAAI,CAAC;IAEhB,yBAAyB;IACzB,WAAW,EAAE,aAAa,EAAE,CAAC;IAE7B,qBAAqB;IACrB,QAAQ,EAAE,YAAY,EAAE,CAAC;IAEzB,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IAErB,0BAA0B;IAC1B,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE5C,yBAAyB;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA4CD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAkFhC;AAsaD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,MAAe,GACxB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQ/B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAW,EACtB,UAAU,CAAC,EAAE,WAAW,EAAE,GACzB,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAe5D"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import { existsSync, statSync, readFileSync } from "fs";
|
|
2
|
+
import { basename, join, extname } from "path";
|
|
3
|
+
import { ComplianceStatus, IRBStatus, SOPCategory, SOPPriority } from "./types.js";
|
|
4
|
+
import { getSOPById, getSOPsByCategory, getAllSOPs } from "./registry.js";
|
|
5
|
+
import { createLogger } from "../utils/logger.js";
|
|
6
|
+
const logger = createLogger("compliance-checker");
|
|
7
|
+
const DEFAULT_ARTIFACT_PATTERNS = {
|
|
8
|
+
// Documentation artifacts
|
|
9
|
+
"requirements": ["requirements.md", "requirements.txt", "REQUIREMENTS.md", "specs/", "requirements/"],
|
|
10
|
+
"architecture": ["ARCHITECTURE.md", "architecture/", "design/", "ADR-*.md", "adr/"],
|
|
11
|
+
"testing": ["tests/", "__tests__/", "test/", "*.test.ts", "*.spec.ts", "jest.config.*", "vitest.config.*"],
|
|
12
|
+
"security": ["SECURITY.md", "security/", ".snyk", "security-policy.md"],
|
|
13
|
+
"ethics": ["ETHICS.md", "ethics/", "AI-ETHICS.md", "bias-assessment.md"],
|
|
14
|
+
"changelog": ["CHANGELOG.md", "HISTORY.md", "releases/"],
|
|
15
|
+
"readme": ["README.md", "README.txt", "readme.md"],
|
|
16
|
+
"license": ["LICENSE", "LICENSE.md", "LICENSE.txt"],
|
|
17
|
+
"contributing": ["CONTRIBUTING.md", "CONTRIBUTORS.md"],
|
|
18
|
+
"code-of-conduct": ["CODE_OF_CONDUCT.md"],
|
|
19
|
+
"ci-cd": [".github/workflows/", ".gitlab-ci.yml", "Jenkinsfile", ".circleci/"],
|
|
20
|
+
"docker": ["Dockerfile", "docker-compose.yml", ".dockerignore"],
|
|
21
|
+
"monitoring": ["monitoring/", "observability/", "metrics/", "prometheus.yml"],
|
|
22
|
+
"validation": ["validation/", "schemas/", "*.schema.json", "zod/", "yup/"],
|
|
23
|
+
"config-management": [".env.example", "config/", "settings/", "*.config.js", "*.config.ts"],
|
|
24
|
+
"data-management": ["data/", "datasets/", "migrations/", "seeds/"],
|
|
25
|
+
"model-cards": ["MODEL_CARD.md", "model-card.md", "model-cards/"],
|
|
26
|
+
"api-docs": ["openapi.yaml", "swagger.json", "api/", "API.md"],
|
|
27
|
+
"privacy": ["PRIVACY.md", "privacy-policy.md", "data-protection.md"]
|
|
28
|
+
};
|
|
29
|
+
async function checkCompliance(options) {
|
|
30
|
+
const {
|
|
31
|
+
projectRoot,
|
|
32
|
+
docsPath = "docs",
|
|
33
|
+
sopIds,
|
|
34
|
+
categories,
|
|
35
|
+
deepAnalysis = false,
|
|
36
|
+
assessor = "automated",
|
|
37
|
+
artifactPatterns = DEFAULT_ARTIFACT_PATTERNS
|
|
38
|
+
} = options;
|
|
39
|
+
logger.info("Starting compliance check", { projectRoot, docsPath });
|
|
40
|
+
const result = {
|
|
41
|
+
success: true,
|
|
42
|
+
projectName: basename(projectRoot),
|
|
43
|
+
checkedAt: /* @__PURE__ */ new Date(),
|
|
44
|
+
assessments: [],
|
|
45
|
+
evidence: [],
|
|
46
|
+
overallScore: 0,
|
|
47
|
+
categoryScores: {},
|
|
48
|
+
errors: []
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
let sopsToCheck = [];
|
|
52
|
+
if (sopIds && sopIds.length > 0) {
|
|
53
|
+
for (const id of sopIds) {
|
|
54
|
+
const sop = getSOPById(id);
|
|
55
|
+
if (sop) {
|
|
56
|
+
sopsToCheck.push(sop);
|
|
57
|
+
} else {
|
|
58
|
+
result.errors.push(`SOP not found: ${id}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
} else if (categories && categories.length > 0) {
|
|
62
|
+
for (const category of categories) {
|
|
63
|
+
sopsToCheck.push(...getSOPsByCategory(category));
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
sopsToCheck = getAllSOPs();
|
|
67
|
+
}
|
|
68
|
+
const projectArtifacts = scanProjectArtifacts(projectRoot, docsPath, artifactPatterns);
|
|
69
|
+
logger.debug("Found project artifacts", { count: projectArtifacts.size });
|
|
70
|
+
for (const sop of sopsToCheck) {
|
|
71
|
+
const assessment = await assessSOP(
|
|
72
|
+
sop,
|
|
73
|
+
projectRoot,
|
|
74
|
+
docsPath,
|
|
75
|
+
projectArtifacts,
|
|
76
|
+
result.evidence,
|
|
77
|
+
deepAnalysis,
|
|
78
|
+
assessor
|
|
79
|
+
);
|
|
80
|
+
result.assessments.push(assessment);
|
|
81
|
+
}
|
|
82
|
+
calculateScores(result);
|
|
83
|
+
logger.info("Compliance check complete", {
|
|
84
|
+
overallScore: result.overallScore,
|
|
85
|
+
assessments: result.assessments.length,
|
|
86
|
+
evidence: result.evidence.length
|
|
87
|
+
});
|
|
88
|
+
} catch (error) {
|
|
89
|
+
result.success = false;
|
|
90
|
+
result.errors.push(String(error));
|
|
91
|
+
logger.error(`Compliance check failed: ${String(error)}`);
|
|
92
|
+
}
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
function scanProjectArtifacts(projectRoot, docsPath, patterns) {
|
|
96
|
+
const artifacts = /* @__PURE__ */ new Map();
|
|
97
|
+
for (const [category, filePatterns] of Object.entries(patterns)) {
|
|
98
|
+
const found = [];
|
|
99
|
+
for (const pattern of filePatterns) {
|
|
100
|
+
const rootPath = join(projectRoot, pattern);
|
|
101
|
+
if (existsSync(rootPath)) {
|
|
102
|
+
found.push(rootPath);
|
|
103
|
+
}
|
|
104
|
+
const docsFullPath = join(projectRoot, docsPath, pattern);
|
|
105
|
+
if (existsSync(docsFullPath)) {
|
|
106
|
+
found.push(docsFullPath);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (found.length > 0) {
|
|
110
|
+
artifacts.set(category, found);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return artifacts;
|
|
114
|
+
}
|
|
115
|
+
async function assessSOP(sop, projectRoot, docsPath, projectArtifacts, evidenceList, deepAnalysis, assessor) {
|
|
116
|
+
const requirementsMet = [];
|
|
117
|
+
const requirementsGaps = [];
|
|
118
|
+
const evidence = {};
|
|
119
|
+
for (const requirement of sop.requirements) {
|
|
120
|
+
const { met, evidenceFound } = checkRequirement(
|
|
121
|
+
requirement,
|
|
122
|
+
projectRoot,
|
|
123
|
+
docsPath,
|
|
124
|
+
projectArtifacts,
|
|
125
|
+
deepAnalysis
|
|
126
|
+
);
|
|
127
|
+
if (met) {
|
|
128
|
+
requirementsMet.push(requirement.id);
|
|
129
|
+
if (evidenceFound) {
|
|
130
|
+
evidence[requirement.id] = evidenceFound.filePath;
|
|
131
|
+
evidenceList.push(evidenceFound);
|
|
132
|
+
}
|
|
133
|
+
} else {
|
|
134
|
+
requirementsGaps.push(requirement.id);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
const totalRequirements = sop.requirements.length;
|
|
138
|
+
const mandatoryRequirements = sop.requirements.filter((r) => r.mandatory);
|
|
139
|
+
const mandatoryMet = mandatoryRequirements.filter((r) => requirementsMet.includes(r.id));
|
|
140
|
+
let score = 0;
|
|
141
|
+
if (totalRequirements > 0) {
|
|
142
|
+
const mandatoryWeight = 0.7;
|
|
143
|
+
const optionalWeight = 0.3;
|
|
144
|
+
const mandatoryScore = mandatoryRequirements.length > 0 ? mandatoryMet.length / mandatoryRequirements.length * 100 : 100;
|
|
145
|
+
const optionalRequirements = sop.requirements.filter((r) => !r.mandatory);
|
|
146
|
+
const optionalMet = optionalRequirements.filter((r) => requirementsMet.includes(r.id));
|
|
147
|
+
const optionalScore = optionalRequirements.length > 0 ? optionalMet.length / optionalRequirements.length * 100 : 100;
|
|
148
|
+
score = Math.round(mandatoryScore * mandatoryWeight + optionalScore * optionalWeight);
|
|
149
|
+
}
|
|
150
|
+
let status;
|
|
151
|
+
if (score >= 90) {
|
|
152
|
+
status = ComplianceStatus.COMPLIANT;
|
|
153
|
+
} else if (score >= 50) {
|
|
154
|
+
status = ComplianceStatus.PARTIAL;
|
|
155
|
+
} else if (score > 0) {
|
|
156
|
+
status = ComplianceStatus.NON_COMPLIANT;
|
|
157
|
+
} else {
|
|
158
|
+
status = ComplianceStatus.PENDING;
|
|
159
|
+
}
|
|
160
|
+
let irbStatus = IRBStatus.NOT_REQUIRED;
|
|
161
|
+
if (sop.irbTypicallyRequired) {
|
|
162
|
+
irbStatus = IRBStatus.PENDING;
|
|
163
|
+
const irbArtifacts = projectArtifacts.get("ethics") || [];
|
|
164
|
+
if (irbArtifacts.length > 0) {
|
|
165
|
+
irbStatus = IRBStatus.IN_REVIEW;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
sopId: sop.id,
|
|
170
|
+
status,
|
|
171
|
+
score,
|
|
172
|
+
requirementsMet,
|
|
173
|
+
requirementsGaps,
|
|
174
|
+
evidence,
|
|
175
|
+
irbStatus,
|
|
176
|
+
assessedAt: /* @__PURE__ */ new Date(),
|
|
177
|
+
assessedBy: assessor,
|
|
178
|
+
notes: `Automated assessment: ${requirementsMet.length}/${totalRequirements} requirements met`
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
function checkRequirement(requirement, projectRoot, docsPath, projectArtifacts, deepAnalysis) {
|
|
182
|
+
for (const artifactType of requirement.artifacts || []) {
|
|
183
|
+
const artifacts = projectArtifacts.get(artifactType);
|
|
184
|
+
if (artifacts && artifacts.length > 0) {
|
|
185
|
+
const evidenceItem = {
|
|
186
|
+
requirementId: requirement.id,
|
|
187
|
+
filePath: artifacts[0],
|
|
188
|
+
type: categorizeArtifact(artifacts[0]),
|
|
189
|
+
description: `Found ${artifactType} artifact: ${basename(artifacts[0])}`,
|
|
190
|
+
confidence: 0.8
|
|
191
|
+
};
|
|
192
|
+
if (deepAnalysis) {
|
|
193
|
+
const contentMatch = checkContentForRequirement(artifacts[0], requirement);
|
|
194
|
+
if (contentMatch) {
|
|
195
|
+
evidenceItem.confidence = 0.95;
|
|
196
|
+
evidenceItem.excerpt = contentMatch;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return { met: true, evidenceFound: evidenceItem };
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
switch (requirement.verification) {
|
|
203
|
+
case "document":
|
|
204
|
+
return checkDocumentEvidence(requirement, projectRoot, docsPath, projectArtifacts, deepAnalysis);
|
|
205
|
+
case "test":
|
|
206
|
+
return checkTestEvidence(requirement, projectRoot, projectArtifacts);
|
|
207
|
+
case "automated":
|
|
208
|
+
return checkAutomatedEvidence(requirement, projectRoot, projectArtifacts);
|
|
209
|
+
case "review":
|
|
210
|
+
case "audit":
|
|
211
|
+
return { met: false };
|
|
212
|
+
default:
|
|
213
|
+
return { met: false };
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
function checkDocumentEvidence(requirement, projectRoot, docsPath, projectArtifacts, deepAnalysis) {
|
|
217
|
+
const docPatterns = ["readme", "requirements", "architecture", "api-docs"];
|
|
218
|
+
for (const pattern of docPatterns) {
|
|
219
|
+
const artifacts = projectArtifacts.get(pattern);
|
|
220
|
+
if (artifacts && artifacts.length > 0) {
|
|
221
|
+
for (const artifact of artifacts) {
|
|
222
|
+
if (deepAnalysis) {
|
|
223
|
+
const contentMatch = checkContentForRequirement(artifact, requirement);
|
|
224
|
+
if (contentMatch) {
|
|
225
|
+
return {
|
|
226
|
+
met: true,
|
|
227
|
+
evidenceFound: {
|
|
228
|
+
requirementId: requirement.id,
|
|
229
|
+
filePath: artifact,
|
|
230
|
+
type: "document",
|
|
231
|
+
description: `Found documentation evidence in ${basename(artifact)}`,
|
|
232
|
+
confidence: 0.85,
|
|
233
|
+
excerpt: contentMatch
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return { met: false };
|
|
242
|
+
}
|
|
243
|
+
function checkTestEvidence(requirement, projectRoot, projectArtifacts) {
|
|
244
|
+
const testArtifacts = projectArtifacts.get("testing");
|
|
245
|
+
if (testArtifacts && testArtifacts.length > 0) {
|
|
246
|
+
return {
|
|
247
|
+
met: true,
|
|
248
|
+
evidenceFound: {
|
|
249
|
+
requirementId: requirement.id,
|
|
250
|
+
filePath: testArtifacts[0],
|
|
251
|
+
type: "test",
|
|
252
|
+
description: `Test infrastructure found: ${basename(testArtifacts[0])}`,
|
|
253
|
+
confidence: 0.7
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
return { met: false };
|
|
258
|
+
}
|
|
259
|
+
function checkAutomatedEvidence(requirement, projectRoot, projectArtifacts) {
|
|
260
|
+
const ciArtifacts = projectArtifacts.get("ci-cd");
|
|
261
|
+
if (ciArtifacts && ciArtifacts.length > 0) {
|
|
262
|
+
return {
|
|
263
|
+
met: true,
|
|
264
|
+
evidenceFound: {
|
|
265
|
+
requirementId: requirement.id,
|
|
266
|
+
filePath: ciArtifacts[0],
|
|
267
|
+
type: "config",
|
|
268
|
+
description: `CI/CD configuration found: ${basename(ciArtifacts[0])}`,
|
|
269
|
+
confidence: 0.75
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
return { met: false };
|
|
274
|
+
}
|
|
275
|
+
function checkContentForRequirement(filePath, requirement) {
|
|
276
|
+
try {
|
|
277
|
+
const stat = statSync(filePath);
|
|
278
|
+
if (stat.isDirectory()) return null;
|
|
279
|
+
const ext = extname(filePath).toLowerCase();
|
|
280
|
+
const textExtensions = [".md", ".txt", ".ts", ".js", ".json", ".yaml", ".yml", ".html", ".rst"];
|
|
281
|
+
if (!textExtensions.includes(ext)) return null;
|
|
282
|
+
const content = readFileSync(filePath, "utf-8");
|
|
283
|
+
const lowerContent = content.toLowerCase();
|
|
284
|
+
const lowerDesc = requirement.description.toLowerCase();
|
|
285
|
+
const keywords = lowerDesc.split(/\s+/).filter((w) => w.length > 4);
|
|
286
|
+
let matchCount = 0;
|
|
287
|
+
let matchedLine = "";
|
|
288
|
+
for (const keyword of keywords) {
|
|
289
|
+
if (lowerContent.includes(keyword)) {
|
|
290
|
+
matchCount++;
|
|
291
|
+
const lines = content.split("\n");
|
|
292
|
+
for (const line of lines) {
|
|
293
|
+
if (line.toLowerCase().includes(keyword) && line.length < 200) {
|
|
294
|
+
matchedLine = line.trim();
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (matchCount >= keywords.length * 0.3 && matchedLine) {
|
|
301
|
+
return matchedLine;
|
|
302
|
+
}
|
|
303
|
+
return null;
|
|
304
|
+
} catch {
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
function categorizeArtifact(filePath) {
|
|
309
|
+
const ext = extname(filePath).toLowerCase();
|
|
310
|
+
const name = basename(filePath).toLowerCase();
|
|
311
|
+
if ([".md", ".txt", ".rst", ".html"].includes(ext)) {
|
|
312
|
+
return "document";
|
|
313
|
+
}
|
|
314
|
+
if ([".ts", ".js", ".py", ".java", ".go", ".rs"].includes(ext)) {
|
|
315
|
+
if (name.includes("test") || name.includes("spec")) {
|
|
316
|
+
return "test";
|
|
317
|
+
}
|
|
318
|
+
return "code";
|
|
319
|
+
}
|
|
320
|
+
if ([".json", ".yaml", ".yml", ".toml", ".ini"].includes(ext)) {
|
|
321
|
+
return "config";
|
|
322
|
+
}
|
|
323
|
+
return "artifact";
|
|
324
|
+
}
|
|
325
|
+
function calculateScores(result) {
|
|
326
|
+
if (result.assessments.length === 0) {
|
|
327
|
+
result.overallScore = 0;
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
const categoryTotals = {
|
|
331
|
+
[SOPCategory.PROGRAM_MANAGEMENT]: { sum: 0, count: 0 },
|
|
332
|
+
[SOPCategory.OPERATIONS]: { sum: 0, count: 0 },
|
|
333
|
+
[SOPCategory.DEVELOPMENT]: { sum: 0, count: 0 },
|
|
334
|
+
[SOPCategory.GOVERNANCE]: { sum: 0, count: 0 },
|
|
335
|
+
[SOPCategory.QUALITY]: { sum: 0, count: 0 }
|
|
336
|
+
};
|
|
337
|
+
for (const assessment of result.assessments) {
|
|
338
|
+
const sop = getSOPById(assessment.sopId);
|
|
339
|
+
if (sop) {
|
|
340
|
+
categoryTotals[sop.category].sum += assessment.score;
|
|
341
|
+
categoryTotals[sop.category].count += 1;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
for (const category of Object.values(SOPCategory)) {
|
|
345
|
+
const totals = categoryTotals[category];
|
|
346
|
+
result.categoryScores[category] = totals.count > 0 ? Math.round(totals.sum / totals.count) : 0;
|
|
347
|
+
}
|
|
348
|
+
let weightedSum = 0;
|
|
349
|
+
let totalWeight = 0;
|
|
350
|
+
for (const assessment of result.assessments) {
|
|
351
|
+
const sop = getSOPById(assessment.sopId);
|
|
352
|
+
if (sop) {
|
|
353
|
+
const weight = getPriorityWeight(sop.priority);
|
|
354
|
+
weightedSum += assessment.score * weight;
|
|
355
|
+
totalWeight += weight;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
result.overallScore = totalWeight > 0 ? Math.round(weightedSum / totalWeight) : 0;
|
|
359
|
+
}
|
|
360
|
+
function getPriorityWeight(priority) {
|
|
361
|
+
switch (priority) {
|
|
362
|
+
case SOPPriority.CRITICAL:
|
|
363
|
+
return 4;
|
|
364
|
+
case SOPPriority.HIGH:
|
|
365
|
+
return 3;
|
|
366
|
+
case SOPPriority.MEDIUM:
|
|
367
|
+
return 2;
|
|
368
|
+
case SOPPriority.LOW:
|
|
369
|
+
return 1;
|
|
370
|
+
default:
|
|
371
|
+
return 1;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
async function checkSOPCompliance(sopId, projectRoot, docsPath = "docs") {
|
|
375
|
+
const result = await checkCompliance({
|
|
376
|
+
projectRoot,
|
|
377
|
+
docsPath,
|
|
378
|
+
sopIds: [sopId]
|
|
379
|
+
});
|
|
380
|
+
return result.assessments[0] || null;
|
|
381
|
+
}
|
|
382
|
+
async function meetsMinimumCompliance(projectRoot, threshold = 50, categories) {
|
|
383
|
+
const result = await checkCompliance({
|
|
384
|
+
projectRoot,
|
|
385
|
+
categories
|
|
386
|
+
});
|
|
387
|
+
const gaps = result.assessments.filter((a) => a.score < threshold).map((a) => a.sopId);
|
|
388
|
+
return {
|
|
389
|
+
meets: result.overallScore >= threshold,
|
|
390
|
+
score: result.overallScore,
|
|
391
|
+
gaps
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
export {
|
|
395
|
+
checkCompliance,
|
|
396
|
+
checkSOPCompliance,
|
|
397
|
+
meetsMinimumCompliance
|
|
398
|
+
};
|
|
399
|
+
//# sourceMappingURL=compliance-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compliance-checker.js","sources":["../../src/sops/compliance-checker.ts"],"sourcesContent":["/**\n * SOP Compliance Checker\n *\n * Checks project artifacts against AI-SDLC SOP requirements\n * and determines compliance status.\n *\n * @module sops/compliance-checker\n */\n\nimport { existsSync, readdirSync, readFileSync, statSync } from 'fs';\nimport { join, basename, extname } from 'path';\nimport {\n SOPDefinition,\n SOPRequirement,\n SOPAssessment,\n ComplianceStatus,\n IRBStatus,\n SOPCategory,\n SOPPriority,\n} from './types.js';\nimport { getSOPById, getSOPsByCategory, getAllSOPs } from './registry.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst logger = createLogger('compliance-checker');\n\n/**\n * Compliance check options\n */\nexport interface ComplianceCheckOptions {\n /** Project root directory */\n projectRoot: string;\n\n /** Documentation path relative to project root */\n docsPath?: string;\n\n /** SOPs to check (default: all applicable) */\n sopIds?: string[];\n\n /** Categories to include */\n categories?: SOPCategory[];\n\n /** Whether to perform deep analysis */\n deepAnalysis?: boolean;\n\n /** Assessor name */\n assessor?: string;\n\n /** Custom artifact patterns */\n artifactPatterns?: Record<string, string[]>;\n}\n\n/**\n * Evidence item found during checking\n */\nexport interface EvidenceItem {\n /** Requirement ID this evidence supports */\n requirementId: string;\n\n /** File path where evidence was found */\n filePath: string;\n\n /** Type of evidence */\n type: 'document' | 'code' | 'test' | 'config' | 'artifact';\n\n /** Description of the evidence */\n description: string;\n\n /** Confidence score (0-1) */\n confidence: number;\n\n /** Relevant excerpt from file */\n excerpt?: string;\n}\n\n/**\n * Result of a compliance check\n */\nexport interface ComplianceCheckResult {\n /** Whether check completed successfully */\n success: boolean;\n\n /** Project name */\n projectName: string;\n\n /** Check timestamp */\n checkedAt: Date;\n\n /** Assessments by SOP */\n assessments: SOPAssessment[];\n\n /** Evidence found */\n evidence: EvidenceItem[];\n\n /** Overall compliance score */\n overallScore: number;\n\n /** Summary by category */\n categoryScores: Record<SOPCategory, number>;\n\n /** Errors encountered */\n errors: string[];\n}\n\n/**\n * Default artifact patterns for detecting compliance evidence\n */\nconst DEFAULT_ARTIFACT_PATTERNS: Record<string, string[]> = {\n // Documentation artifacts\n 'requirements': ['requirements.md', 'requirements.txt', 'REQUIREMENTS.md', 'specs/', 'requirements/'],\n 'architecture': ['ARCHITECTURE.md', 'architecture/', 'design/', 'ADR-*.md', 'adr/'],\n 'testing': ['tests/', '__tests__/', 'test/', '*.test.ts', '*.spec.ts', 'jest.config.*', 'vitest.config.*'],\n 'security': ['SECURITY.md', 'security/', '.snyk', 'security-policy.md'],\n 'ethics': ['ETHICS.md', 'ethics/', 'AI-ETHICS.md', 'bias-assessment.md'],\n 'changelog': ['CHANGELOG.md', 'HISTORY.md', 'releases/'],\n 'readme': ['README.md', 'README.txt', 'readme.md'],\n 'license': ['LICENSE', 'LICENSE.md', 'LICENSE.txt'],\n 'contributing': ['CONTRIBUTING.md', 'CONTRIBUTORS.md'],\n 'code-of-conduct': ['CODE_OF_CONDUCT.md'],\n 'ci-cd': ['.github/workflows/', '.gitlab-ci.yml', 'Jenkinsfile', '.circleci/'],\n 'docker': ['Dockerfile', 'docker-compose.yml', '.dockerignore'],\n 'monitoring': ['monitoring/', 'observability/', 'metrics/', 'prometheus.yml'],\n 'validation': ['validation/', 'schemas/', '*.schema.json', 'zod/', 'yup/'],\n 'config-management': ['.env.example', 'config/', 'settings/', '*.config.js', '*.config.ts'],\n 'data-management': ['data/', 'datasets/', 'migrations/', 'seeds/'],\n 'model-cards': ['MODEL_CARD.md', 'model-card.md', 'model-cards/'],\n 'api-docs': ['openapi.yaml', 'swagger.json', 'api/', 'API.md'],\n 'privacy': ['PRIVACY.md', 'privacy-policy.md', 'data-protection.md'],\n};\n\n/**\n * Keyword patterns for detecting compliance in content\n */\nconst COMPLIANCE_KEYWORDS: Record<string, string[]> = {\n 'requirements-definition': ['requirement', 'specification', 'user story', 'acceptance criteria', 'functional', 'non-functional'],\n 'risk-assessment': ['risk', 'mitigation', 'threat', 'vulnerability', 'impact', 'likelihood'],\n 'testing': ['test', 'coverage', 'unit test', 'integration test', 'e2e', 'regression'],\n 'security': ['authentication', 'authorization', 'encryption', 'secure', 'vulnerability', 'audit'],\n 'ethics': ['bias', 'fairness', 'ethical', 'responsible', 'transparency', 'accountability'],\n 'monitoring': ['monitor', 'alert', 'metric', 'observability', 'logging', 'tracing'],\n 'documentation': ['document', 'guide', 'manual', 'tutorial', 'reference'],\n 'validation': ['validate', 'verify', 'check', 'assert', 'schema', 'constraint'],\n 'privacy': ['privacy', 'gdpr', 'pii', 'data protection', 'consent', 'anonymization'],\n 'governance': ['governance', 'policy', 'procedure', 'standard', 'compliance', 'audit'],\n};\n\n/**\n * Check compliance for a project against AI-SDLC SOPs\n */\nexport async function checkCompliance(\n options: ComplianceCheckOptions\n): Promise<ComplianceCheckResult> {\n const {\n projectRoot,\n docsPath = 'docs',\n sopIds,\n categories,\n deepAnalysis = false,\n assessor = 'automated',\n artifactPatterns = DEFAULT_ARTIFACT_PATTERNS,\n } = options;\n\n logger.info('Starting compliance check', { projectRoot, docsPath });\n\n const result: ComplianceCheckResult = {\n success: true,\n projectName: basename(projectRoot),\n checkedAt: new Date(),\n assessments: [],\n evidence: [],\n overallScore: 0,\n categoryScores: {} as Record<SOPCategory, number>,\n errors: [],\n };\n\n try {\n // Determine which SOPs to check\n let sopsToCheck: SOPDefinition[] = [];\n\n if (sopIds && sopIds.length > 0) {\n // Check specific SOPs\n for (const id of sopIds) {\n const sop = getSOPById(id);\n if (sop) {\n sopsToCheck.push(sop);\n } else {\n result.errors.push(`SOP not found: ${id}`);\n }\n }\n } else if (categories && categories.length > 0) {\n // Check SOPs in specified categories\n for (const category of categories) {\n sopsToCheck.push(...getSOPsByCategory(category));\n }\n } else {\n // Check all SOPs\n sopsToCheck = getAllSOPs();\n }\n\n // Scan project for artifacts\n const projectArtifacts = scanProjectArtifacts(projectRoot, docsPath, artifactPatterns);\n logger.debug('Found project artifacts', { count: projectArtifacts.size });\n\n // Check each SOP\n for (const sop of sopsToCheck) {\n const assessment = await assessSOP(\n sop,\n projectRoot,\n docsPath,\n projectArtifacts,\n result.evidence,\n deepAnalysis,\n assessor\n );\n result.assessments.push(assessment);\n }\n\n // Calculate scores\n calculateScores(result);\n\n logger.info('Compliance check complete', {\n overallScore: result.overallScore,\n assessments: result.assessments.length,\n evidence: result.evidence.length,\n });\n\n } catch (error) {\n result.success = false;\n result.errors.push(String(error));\n logger.error(`Compliance check failed: ${String(error)}`);\n }\n\n return result;\n}\n\n/**\n * Scan project for artifacts that may indicate compliance\n */\nfunction scanProjectArtifacts(\n projectRoot: string,\n docsPath: string,\n patterns: Record<string, string[]>\n): Map<string, string[]> {\n const artifacts = new Map<string, string[]>();\n\n for (const [category, filePatterns] of Object.entries(patterns)) {\n const found: string[] = [];\n\n for (const pattern of filePatterns) {\n // Check in project root\n const rootPath = join(projectRoot, pattern);\n if (existsSync(rootPath)) {\n found.push(rootPath);\n }\n\n // Check in docs path\n const docsFullPath = join(projectRoot, docsPath, pattern);\n if (existsSync(docsFullPath)) {\n found.push(docsFullPath);\n }\n }\n\n if (found.length > 0) {\n artifacts.set(category, found);\n }\n }\n\n return artifacts;\n}\n\n/**\n * Assess a single SOP against project\n */\nasync function assessSOP(\n sop: SOPDefinition,\n projectRoot: string,\n docsPath: string,\n projectArtifacts: Map<string, string[]>,\n evidenceList: EvidenceItem[],\n deepAnalysis: boolean,\n assessor: string\n): Promise<SOPAssessment> {\n const requirementsMet: string[] = [];\n const requirementsGaps: string[] = [];\n const evidence: Record<string, string> = {};\n\n // Check each requirement\n for (const requirement of sop.requirements) {\n const { met, evidenceFound } = checkRequirement(\n requirement,\n projectRoot,\n docsPath,\n projectArtifacts,\n deepAnalysis\n );\n\n if (met) {\n requirementsMet.push(requirement.id);\n if (evidenceFound) {\n evidence[requirement.id] = evidenceFound.filePath;\n evidenceList.push(evidenceFound);\n }\n } else {\n requirementsGaps.push(requirement.id);\n }\n }\n\n // Calculate score\n const totalRequirements = sop.requirements.length;\n const mandatoryRequirements = sop.requirements.filter(r => r.mandatory);\n const mandatoryMet = mandatoryRequirements.filter(r => requirementsMet.includes(r.id));\n\n let score = 0;\n if (totalRequirements > 0) {\n // Weight mandatory requirements more heavily\n const mandatoryWeight = 0.7;\n const optionalWeight = 0.3;\n\n const mandatoryScore = mandatoryRequirements.length > 0\n ? (mandatoryMet.length / mandatoryRequirements.length) * 100\n : 100;\n\n const optionalRequirements = sop.requirements.filter(r => !r.mandatory);\n const optionalMet = optionalRequirements.filter(r => requirementsMet.includes(r.id));\n const optionalScore = optionalRequirements.length > 0\n ? (optionalMet.length / optionalRequirements.length) * 100\n : 100;\n\n score = Math.round(mandatoryScore * mandatoryWeight + optionalScore * optionalWeight);\n }\n\n // Determine status\n let status: ComplianceStatus;\n if (score >= 90) {\n status = ComplianceStatus.COMPLIANT;\n } else if (score >= 50) {\n status = ComplianceStatus.PARTIAL;\n } else if (score > 0) {\n status = ComplianceStatus.NON_COMPLIANT;\n } else {\n status = ComplianceStatus.PENDING;\n }\n\n // Determine IRB status\n let irbStatus: IRBStatus = IRBStatus.NOT_REQUIRED;\n if (sop.irbTypicallyRequired) {\n irbStatus = IRBStatus.PENDING;\n // Check for IRB approval artifacts\n const irbArtifacts = projectArtifacts.get('ethics') || [];\n if (irbArtifacts.length > 0) {\n irbStatus = IRBStatus.IN_REVIEW;\n }\n }\n\n return {\n sopId: sop.id,\n status,\n score,\n requirementsMet,\n requirementsGaps,\n evidence,\n irbStatus,\n assessedAt: new Date(),\n assessedBy: assessor,\n notes: `Automated assessment: ${requirementsMet.length}/${totalRequirements} requirements met`,\n };\n}\n\n/**\n * Check if a specific requirement is met\n */\nfunction checkRequirement(\n requirement: SOPRequirement,\n projectRoot: string,\n docsPath: string,\n projectArtifacts: Map<string, string[]>,\n deepAnalysis: boolean\n): { met: boolean; evidenceFound?: EvidenceItem } {\n // Check for artifacts that match the requirement\n for (const artifactType of requirement.artifacts || []) {\n const artifacts = projectArtifacts.get(artifactType);\n if (artifacts && artifacts.length > 0) {\n // Found matching artifact\n const evidenceItem: EvidenceItem = {\n requirementId: requirement.id,\n filePath: artifacts[0],\n type: categorizeArtifact(artifacts[0]),\n description: `Found ${artifactType} artifact: ${basename(artifacts[0])}`,\n confidence: 0.8,\n };\n\n // Deep analysis: check content for keywords\n if (deepAnalysis) {\n const contentMatch = checkContentForRequirement(artifacts[0], requirement);\n if (contentMatch) {\n evidenceItem.confidence = 0.95;\n evidenceItem.excerpt = contentMatch;\n }\n }\n\n return { met: true, evidenceFound: evidenceItem };\n }\n }\n\n // Check based on verification method\n switch (requirement.verification) {\n case 'document':\n return checkDocumentEvidence(requirement, projectRoot, docsPath, projectArtifacts, deepAnalysis);\n case 'test':\n return checkTestEvidence(requirement, projectRoot, projectArtifacts);\n case 'automated':\n return checkAutomatedEvidence(requirement, projectRoot, projectArtifacts);\n case 'review':\n case 'audit':\n // These require manual verification\n return { met: false };\n default:\n return { met: false };\n }\n}\n\n/**\n * Check for document-based evidence\n */\nfunction checkDocumentEvidence(\n requirement: SOPRequirement,\n projectRoot: string,\n docsPath: string,\n projectArtifacts: Map<string, string[]>,\n deepAnalysis: boolean\n): { met: boolean; evidenceFound?: EvidenceItem } {\n // Look for documentation files\n const docPatterns = ['readme', 'requirements', 'architecture', 'api-docs'];\n\n for (const pattern of docPatterns) {\n const artifacts = projectArtifacts.get(pattern);\n if (artifacts && artifacts.length > 0) {\n for (const artifact of artifacts) {\n if (deepAnalysis) {\n const contentMatch = checkContentForRequirement(artifact, requirement);\n if (contentMatch) {\n return {\n met: true,\n evidenceFound: {\n requirementId: requirement.id,\n filePath: artifact,\n type: 'document',\n description: `Found documentation evidence in ${basename(artifact)}`,\n confidence: 0.85,\n excerpt: contentMatch,\n },\n };\n }\n }\n }\n }\n }\n\n return { met: false };\n}\n\n/**\n * Check for test-based evidence\n */\nfunction checkTestEvidence(\n requirement: SOPRequirement,\n projectRoot: string,\n projectArtifacts: Map<string, string[]>\n): { met: boolean; evidenceFound?: EvidenceItem } {\n const testArtifacts = projectArtifacts.get('testing');\n\n if (testArtifacts && testArtifacts.length > 0) {\n return {\n met: true,\n evidenceFound: {\n requirementId: requirement.id,\n filePath: testArtifacts[0],\n type: 'test',\n description: `Test infrastructure found: ${basename(testArtifacts[0])}`,\n confidence: 0.7,\n },\n };\n }\n\n return { met: false };\n}\n\n/**\n * Check for automated/CI evidence\n */\nfunction checkAutomatedEvidence(\n requirement: SOPRequirement,\n projectRoot: string,\n projectArtifacts: Map<string, string[]>\n): { met: boolean; evidenceFound?: EvidenceItem } {\n const ciArtifacts = projectArtifacts.get('ci-cd');\n\n if (ciArtifacts && ciArtifacts.length > 0) {\n return {\n met: true,\n evidenceFound: {\n requirementId: requirement.id,\n filePath: ciArtifacts[0],\n type: 'config',\n description: `CI/CD configuration found: ${basename(ciArtifacts[0])}`,\n confidence: 0.75,\n },\n };\n }\n\n return { met: false };\n}\n\n/**\n * Check file content for requirement keywords\n */\nfunction checkContentForRequirement(\n filePath: string,\n requirement: SOPRequirement\n): string | null {\n try {\n const stat = statSync(filePath);\n if (stat.isDirectory()) return null;\n\n // Only check text files\n const ext = extname(filePath).toLowerCase();\n const textExtensions = ['.md', '.txt', '.ts', '.js', '.json', '.yaml', '.yml', '.html', '.rst'];\n if (!textExtensions.includes(ext)) return null;\n\n const content = readFileSync(filePath, 'utf-8');\n const lowerContent = content.toLowerCase();\n const lowerDesc = requirement.description.toLowerCase();\n\n // Check for keywords from requirement description\n const keywords = lowerDesc.split(/\\s+/).filter(w => w.length > 4);\n let matchCount = 0;\n let matchedLine = '';\n\n for (const keyword of keywords) {\n if (lowerContent.includes(keyword)) {\n matchCount++;\n // Find the line containing this keyword\n const lines = content.split('\\n');\n for (const line of lines) {\n if (line.toLowerCase().includes(keyword) && line.length < 200) {\n matchedLine = line.trim();\n break;\n }\n }\n }\n }\n\n // If at least 30% of keywords match, consider it evidence\n if (matchCount >= keywords.length * 0.3 && matchedLine) {\n return matchedLine;\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Categorize an artifact by its type\n */\nfunction categorizeArtifact(filePath: string): 'document' | 'code' | 'test' | 'config' | 'artifact' {\n const ext = extname(filePath).toLowerCase();\n const name = basename(filePath).toLowerCase();\n\n if (['.md', '.txt', '.rst', '.html'].includes(ext)) {\n return 'document';\n }\n if (['.ts', '.js', '.py', '.java', '.go', '.rs'].includes(ext)) {\n if (name.includes('test') || name.includes('spec')) {\n return 'test';\n }\n return 'code';\n }\n if (['.json', '.yaml', '.yml', '.toml', '.ini'].includes(ext)) {\n return 'config';\n }\n return 'artifact';\n}\n\n/**\n * Calculate overall scores from assessments\n */\nfunction calculateScores(result: ComplianceCheckResult): void {\n if (result.assessments.length === 0) {\n result.overallScore = 0;\n return;\n }\n\n // Calculate category scores\n const categoryTotals: Record<SOPCategory, { sum: number; count: number }> = {\n [SOPCategory.PROGRAM_MANAGEMENT]: { sum: 0, count: 0 },\n [SOPCategory.OPERATIONS]: { sum: 0, count: 0 },\n [SOPCategory.DEVELOPMENT]: { sum: 0, count: 0 },\n [SOPCategory.GOVERNANCE]: { sum: 0, count: 0 },\n [SOPCategory.QUALITY]: { sum: 0, count: 0 },\n };\n\n for (const assessment of result.assessments) {\n const sop = getSOPById(assessment.sopId);\n if (sop) {\n categoryTotals[sop.category].sum += assessment.score;\n categoryTotals[sop.category].count += 1;\n }\n }\n\n // Calculate category averages\n for (const category of Object.values(SOPCategory)) {\n const totals = categoryTotals[category];\n result.categoryScores[category] = totals.count > 0\n ? Math.round(totals.sum / totals.count)\n : 0;\n }\n\n // Calculate overall score (weighted by priority)\n let weightedSum = 0;\n let totalWeight = 0;\n\n for (const assessment of result.assessments) {\n const sop = getSOPById(assessment.sopId);\n if (sop) {\n const weight = getPriorityWeight(sop.priority);\n weightedSum += assessment.score * weight;\n totalWeight += weight;\n }\n }\n\n result.overallScore = totalWeight > 0\n ? Math.round(weightedSum / totalWeight)\n : 0;\n}\n\n/**\n * Get weight for priority level\n */\nfunction getPriorityWeight(priority: SOPPriority): number {\n switch (priority) {\n case SOPPriority.CRITICAL:\n return 4;\n case SOPPriority.HIGH:\n return 3;\n case SOPPriority.MEDIUM:\n return 2;\n case SOPPriority.LOW:\n return 1;\n default:\n return 1;\n }\n}\n\n/**\n * Quick check for a specific SOP\n */\nexport async function checkSOPCompliance(\n sopId: string,\n projectRoot: string,\n docsPath: string = 'docs'\n): Promise<SOPAssessment | null> {\n const result = await checkCompliance({\n projectRoot,\n docsPath,\n sopIds: [sopId],\n });\n\n return result.assessments[0] || null;\n}\n\n/**\n * Check if project meets minimum compliance threshold\n */\nexport async function meetsMinimumCompliance(\n projectRoot: string,\n threshold: number = 50,\n categories?: SOPCategory[]\n): Promise<{ meets: boolean; score: number; gaps: string[] }> {\n const result = await checkCompliance({\n projectRoot,\n categories,\n });\n\n const gaps = result.assessments\n .filter(a => a.score < threshold)\n .map(a => a.sopId);\n\n return {\n meets: result.overallScore >= threshold,\n score: result.overallScore,\n gaps,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SOP Gap Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Analyzes compliance gaps and generates remediation recommendations.
|
|
5
|
+
*
|
|
6
|
+
* @module sops/gap-analyzer
|
|
7
|
+
*/
|
|
8
|
+
import { ComplianceGap, SOPPriority, SOPCategory } from './types.js';
|
|
9
|
+
import { ComplianceCheckResult } from './compliance-checker.js';
|
|
10
|
+
/**
|
|
11
|
+
* Gap analysis options
|
|
12
|
+
*/
|
|
13
|
+
export interface GapAnalysisOptions {
|
|
14
|
+
/** Minimum score threshold to consider compliant */
|
|
15
|
+
complianceThreshold?: number;
|
|
16
|
+
/** Include SOPs with partial compliance */
|
|
17
|
+
includePartial?: boolean;
|
|
18
|
+
/** Filter by priority */
|
|
19
|
+
minPriority?: SOPPriority;
|
|
20
|
+
/** Filter by category */
|
|
21
|
+
categories?: SOPCategory[];
|
|
22
|
+
/** Generate remediation plans */
|
|
23
|
+
generateRemediation?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Gap analysis result
|
|
27
|
+
*/
|
|
28
|
+
export interface GapAnalysisResult {
|
|
29
|
+
/** All identified gaps */
|
|
30
|
+
gaps: ComplianceGap[];
|
|
31
|
+
/** Gaps grouped by priority */
|
|
32
|
+
byPriority: Record<SOPPriority, ComplianceGap[]>;
|
|
33
|
+
/** Gaps grouped by category */
|
|
34
|
+
byCategory: Record<SOPCategory, ComplianceGap[]>;
|
|
35
|
+
/** Total gap count */
|
|
36
|
+
totalGaps: number;
|
|
37
|
+
/** Critical gaps that need immediate attention */
|
|
38
|
+
criticalGaps: ComplianceGap[];
|
|
39
|
+
/** Summary statistics */
|
|
40
|
+
summary: GapSummary;
|
|
41
|
+
/** Remediation roadmap */
|
|
42
|
+
roadmap?: RemediationRoadmap;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gap summary statistics
|
|
46
|
+
*/
|
|
47
|
+
export interface GapSummary {
|
|
48
|
+
/** Total requirements checked */
|
|
49
|
+
totalRequirements: number;
|
|
50
|
+
/** Requirements met */
|
|
51
|
+
requirementsMet: number;
|
|
52
|
+
/** Requirements with gaps */
|
|
53
|
+
requirementsGaps: number;
|
|
54
|
+
/** Compliance percentage */
|
|
55
|
+
compliancePercentage: number;
|
|
56
|
+
/** Effort estimate (total) */
|
|
57
|
+
totalEffort: {
|
|
58
|
+
low: number;
|
|
59
|
+
medium: number;
|
|
60
|
+
high: number;
|
|
61
|
+
};
|
|
62
|
+
/** Estimated remediation complexity */
|
|
63
|
+
overallComplexity: 'low' | 'medium' | 'high';
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Remediation roadmap
|
|
67
|
+
*/
|
|
68
|
+
export interface RemediationRoadmap {
|
|
69
|
+
/** Phases of remediation */
|
|
70
|
+
phases: RemediationPhase[];
|
|
71
|
+
/** Quick wins (low effort, high impact) */
|
|
72
|
+
quickWins: ComplianceGap[];
|
|
73
|
+
/** Dependencies between gaps */
|
|
74
|
+
dependencies: GapDependency[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Remediation phase
|
|
78
|
+
*/
|
|
79
|
+
export interface RemediationPhase {
|
|
80
|
+
/** Phase number */
|
|
81
|
+
phase: number;
|
|
82
|
+
/** Phase name */
|
|
83
|
+
name: string;
|
|
84
|
+
/** Gaps to address in this phase */
|
|
85
|
+
gaps: ComplianceGap[];
|
|
86
|
+
/** Focus area */
|
|
87
|
+
focus: string;
|
|
88
|
+
/** Expected effort */
|
|
89
|
+
effort: 'low' | 'medium' | 'high';
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Gap dependency
|
|
93
|
+
*/
|
|
94
|
+
export interface GapDependency {
|
|
95
|
+
/** Gap that depends on another */
|
|
96
|
+
gapId: string;
|
|
97
|
+
/** Gap that must be addressed first */
|
|
98
|
+
dependsOn: string;
|
|
99
|
+
/** Reason for dependency */
|
|
100
|
+
reason: string;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Analyze compliance gaps from check results
|
|
104
|
+
*/
|
|
105
|
+
export declare function analyzeGaps(checkResult: ComplianceCheckResult, options?: GapAnalysisOptions): GapAnalysisResult;
|
|
106
|
+
/**
|
|
107
|
+
* Get gaps for a specific SOP
|
|
108
|
+
*/
|
|
109
|
+
export declare function getGapsForSOP(analysisResult: GapAnalysisResult, sopId: string): ComplianceGap[];
|
|
110
|
+
/**
|
|
111
|
+
* Get high-impact quick wins
|
|
112
|
+
*/
|
|
113
|
+
export declare function getQuickWins(analysisResult: GapAnalysisResult): ComplianceGap[];
|
|
114
|
+
/**
|
|
115
|
+
* Calculate remediation progress
|
|
116
|
+
*/
|
|
117
|
+
export declare function calculateProgress(gaps: ComplianceGap[]): {
|
|
118
|
+
total: number;
|
|
119
|
+
resolved: number;
|
|
120
|
+
inProgress: number;
|
|
121
|
+
open: number;
|
|
122
|
+
percentage: number;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=gap-analyzer.d.ts.map
|