@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,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shadow Cache - File Metadata Caching
|
|
3
|
+
*
|
|
4
|
+
* Provides a caching layer for file metadata to enable incremental updates
|
|
5
|
+
* and improve performance when analyzing large codebases.
|
|
6
|
+
*
|
|
7
|
+
* @module core/cache
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* File metadata stored in cache
|
|
11
|
+
*/
|
|
12
|
+
export interface FileMetadata {
|
|
13
|
+
/** Relative path from project root */
|
|
14
|
+
path: string;
|
|
15
|
+
/** File size in bytes */
|
|
16
|
+
size: number;
|
|
17
|
+
/** Modification time (Unix timestamp) */
|
|
18
|
+
mtime: number;
|
|
19
|
+
/** Content hash (MD5) */
|
|
20
|
+
hash: string;
|
|
21
|
+
/** File type inferred from extension */
|
|
22
|
+
type: FileType;
|
|
23
|
+
/** When this entry was cached */
|
|
24
|
+
cachedAt: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* File types for classification
|
|
28
|
+
*/
|
|
29
|
+
export type FileType = 'markdown' | 'typescript' | 'javascript' | 'python' | 'rust' | 'go' | 'java' | 'php' | 'ruby' | 'yaml' | 'json' | 'toml' | 'config' | 'docker' | 'other';
|
|
30
|
+
/**
|
|
31
|
+
* Cache entry change type
|
|
32
|
+
*/
|
|
33
|
+
export type ChangeType = 'added' | 'modified' | 'deleted' | 'unchanged';
|
|
34
|
+
/**
|
|
35
|
+
* File change information
|
|
36
|
+
*/
|
|
37
|
+
export interface FileChange {
|
|
38
|
+
path: string;
|
|
39
|
+
change: ChangeType;
|
|
40
|
+
oldMeta?: FileMetadata;
|
|
41
|
+
newMeta?: FileMetadata;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Cache statistics
|
|
45
|
+
*/
|
|
46
|
+
export interface CacheStats {
|
|
47
|
+
totalEntries: number;
|
|
48
|
+
hitCount: number;
|
|
49
|
+
missCount: number;
|
|
50
|
+
hitRate: number;
|
|
51
|
+
sizeBytes: number;
|
|
52
|
+
lastUpdated: number | null;
|
|
53
|
+
staleEntries: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Shadow Cache options
|
|
57
|
+
*/
|
|
58
|
+
export interface ShadowCacheOptions {
|
|
59
|
+
/** Project root directory */
|
|
60
|
+
projectRoot: string;
|
|
61
|
+
/** Cache directory (relative to .kg) */
|
|
62
|
+
cacheDir?: string;
|
|
63
|
+
/** Default TTL in milliseconds (default: 1 hour) */
|
|
64
|
+
defaultTTL?: number;
|
|
65
|
+
/** Maximum entries before pruning (default: 10000) */
|
|
66
|
+
maxEntries?: number;
|
|
67
|
+
/** Enable persistence to disk (default: true) */
|
|
68
|
+
persist?: boolean;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Shadow Cache for file metadata
|
|
72
|
+
*
|
|
73
|
+
* Provides efficient caching of file metadata to enable:
|
|
74
|
+
* - Incremental graph updates (only process changed files)
|
|
75
|
+
* - Fast file existence/modification checks
|
|
76
|
+
* - Content hash comparison
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const cache = new ShadowCache({ projectRoot: '/my/project' });
|
|
81
|
+
* await cache.load();
|
|
82
|
+
*
|
|
83
|
+
* // Check for changes
|
|
84
|
+
* const changes = await cache.detectChanges(['docs/**\/*.md']);
|
|
85
|
+
*
|
|
86
|
+
* // Process only changed files
|
|
87
|
+
* for (const change of changes) {
|
|
88
|
+
* if (change.change !== 'unchanged') {
|
|
89
|
+
* console.log(`${change.path}: ${change.change}`);
|
|
90
|
+
* }
|
|
91
|
+
* }
|
|
92
|
+
*
|
|
93
|
+
* // Update cache with processed files
|
|
94
|
+
* await cache.save();
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
export declare class ShadowCache {
|
|
98
|
+
private projectRoot;
|
|
99
|
+
private cacheDir;
|
|
100
|
+
private cachePath;
|
|
101
|
+
private defaultTTL;
|
|
102
|
+
private maxEntries;
|
|
103
|
+
private persist;
|
|
104
|
+
private entries;
|
|
105
|
+
private hitCount;
|
|
106
|
+
private missCount;
|
|
107
|
+
private loaded;
|
|
108
|
+
private dirty;
|
|
109
|
+
private createdAt;
|
|
110
|
+
private updatedAt;
|
|
111
|
+
constructor(options: ShadowCacheOptions);
|
|
112
|
+
/**
|
|
113
|
+
* Load cache from disk
|
|
114
|
+
*/
|
|
115
|
+
load(): Promise<boolean>;
|
|
116
|
+
/**
|
|
117
|
+
* Save cache to disk
|
|
118
|
+
*/
|
|
119
|
+
save(): Promise<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* Get cached metadata for a file
|
|
122
|
+
*/
|
|
123
|
+
get(filePath: string): FileMetadata | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* Set cached metadata for a file
|
|
126
|
+
*/
|
|
127
|
+
set(filePath: string, metadata: Partial<FileMetadata>): FileMetadata;
|
|
128
|
+
/**
|
|
129
|
+
* Remove a file from cache
|
|
130
|
+
*/
|
|
131
|
+
delete(filePath: string): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Check if a file exists in cache
|
|
134
|
+
*/
|
|
135
|
+
has(filePath: string): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Check if a file has changed since caching
|
|
138
|
+
*/
|
|
139
|
+
hasChanged(filePath: string): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* Detect changes for a list of files
|
|
142
|
+
*/
|
|
143
|
+
detectChanges(filePaths: string[]): Promise<FileChange[]>;
|
|
144
|
+
/**
|
|
145
|
+
* Update cache with detected changes
|
|
146
|
+
*/
|
|
147
|
+
applyChanges(changes: FileChange[]): void;
|
|
148
|
+
/**
|
|
149
|
+
* Get cache statistics
|
|
150
|
+
*/
|
|
151
|
+
getStats(): CacheStats;
|
|
152
|
+
/**
|
|
153
|
+
* Clear all cache entries
|
|
154
|
+
*/
|
|
155
|
+
clear(): void;
|
|
156
|
+
/**
|
|
157
|
+
* Prune stale entries
|
|
158
|
+
*/
|
|
159
|
+
prune(): Promise<number>;
|
|
160
|
+
/**
|
|
161
|
+
* Get all cached file paths
|
|
162
|
+
*/
|
|
163
|
+
getAllPaths(): string[];
|
|
164
|
+
/**
|
|
165
|
+
* Get files by type
|
|
166
|
+
*/
|
|
167
|
+
getByType(type: FileType): FileMetadata[];
|
|
168
|
+
/**
|
|
169
|
+
* Invalidate entries matching a pattern
|
|
170
|
+
*/
|
|
171
|
+
invalidate(pattern: RegExp): number;
|
|
172
|
+
private normalizePath;
|
|
173
|
+
private computeMetadata;
|
|
174
|
+
private inferFileType;
|
|
175
|
+
private estimateSize;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Create a shadow cache for a project
|
|
179
|
+
*/
|
|
180
|
+
export declare function createShadowCache(options: ShadowCacheOptions): ShadowCache;
|
|
181
|
+
/**
|
|
182
|
+
* Load or create shadow cache for a project
|
|
183
|
+
*/
|
|
184
|
+
export declare function loadShadowCache(projectRoot: string): Promise<ShadowCache>;
|
|
185
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/core/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync, statSync } from "fs";
|
|
2
|
+
import { join, dirname, relative } from "path";
|
|
3
|
+
import { createHash } from "crypto";
|
|
4
|
+
import { createLogger } from "../utils/logger.js";
|
|
5
|
+
const logger = createLogger("shadow-cache");
|
|
6
|
+
const CACHE_VERSION = 1;
|
|
7
|
+
const CACHE_FILENAME = "shadow-cache.json";
|
|
8
|
+
class ShadowCache {
|
|
9
|
+
projectRoot;
|
|
10
|
+
cacheDir;
|
|
11
|
+
cachePath;
|
|
12
|
+
defaultTTL;
|
|
13
|
+
maxEntries;
|
|
14
|
+
persist;
|
|
15
|
+
entries = /* @__PURE__ */ new Map();
|
|
16
|
+
hitCount = 0;
|
|
17
|
+
missCount = 0;
|
|
18
|
+
loaded = false;
|
|
19
|
+
dirty = false;
|
|
20
|
+
createdAt;
|
|
21
|
+
updatedAt;
|
|
22
|
+
constructor(options) {
|
|
23
|
+
this.projectRoot = options.projectRoot;
|
|
24
|
+
this.cacheDir = options.cacheDir || ".kg";
|
|
25
|
+
this.cachePath = join(this.projectRoot, this.cacheDir, CACHE_FILENAME);
|
|
26
|
+
this.defaultTTL = options.defaultTTL || 60 * 60 * 1e3;
|
|
27
|
+
this.maxEntries = options.maxEntries || 1e4;
|
|
28
|
+
this.persist = options.persist !== false;
|
|
29
|
+
this.createdAt = Date.now();
|
|
30
|
+
this.updatedAt = Date.now();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load cache from disk
|
|
34
|
+
*/
|
|
35
|
+
async load() {
|
|
36
|
+
if (!this.persist) {
|
|
37
|
+
this.loaded = true;
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
if (existsSync(this.cachePath)) {
|
|
42
|
+
const data = JSON.parse(readFileSync(this.cachePath, "utf-8"));
|
|
43
|
+
if (data.projectRoot !== this.projectRoot) {
|
|
44
|
+
logger.warn("Cache project root mismatch, starting fresh");
|
|
45
|
+
this.loaded = true;
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
if (data.version !== CACHE_VERSION) {
|
|
49
|
+
logger.warn("Cache version mismatch, starting fresh", {
|
|
50
|
+
cacheVersion: data.version,
|
|
51
|
+
expectedVersion: CACHE_VERSION
|
|
52
|
+
});
|
|
53
|
+
this.loaded = true;
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
this.entries = new Map(Object.entries(data.entries));
|
|
57
|
+
this.createdAt = data.createdAt;
|
|
58
|
+
this.updatedAt = data.updatedAt;
|
|
59
|
+
this.loaded = true;
|
|
60
|
+
logger.info("Cache loaded", { entries: this.entries.size });
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
logger.error("Failed to load cache", error instanceof Error ? error : new Error(String(error)));
|
|
65
|
+
}
|
|
66
|
+
this.loaded = true;
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Save cache to disk
|
|
71
|
+
*/
|
|
72
|
+
async save() {
|
|
73
|
+
if (!this.persist || !this.dirty) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const cacheDir = dirname(this.cachePath);
|
|
78
|
+
if (!existsSync(cacheDir)) {
|
|
79
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
80
|
+
}
|
|
81
|
+
await this.prune();
|
|
82
|
+
const data = {
|
|
83
|
+
version: CACHE_VERSION,
|
|
84
|
+
projectRoot: this.projectRoot,
|
|
85
|
+
createdAt: this.createdAt,
|
|
86
|
+
updatedAt: Date.now(),
|
|
87
|
+
entries: Object.fromEntries(this.entries)
|
|
88
|
+
};
|
|
89
|
+
writeFileSync(this.cachePath, JSON.stringify(data, null, 2));
|
|
90
|
+
this.updatedAt = data.updatedAt;
|
|
91
|
+
this.dirty = false;
|
|
92
|
+
logger.info("Cache saved", { entries: this.entries.size });
|
|
93
|
+
return true;
|
|
94
|
+
} catch (error) {
|
|
95
|
+
logger.error("Failed to save cache", error instanceof Error ? error : new Error(String(error)));
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get cached metadata for a file
|
|
101
|
+
*/
|
|
102
|
+
get(filePath) {
|
|
103
|
+
const relativePath = this.normalizePath(filePath);
|
|
104
|
+
const entry = this.entries.get(relativePath);
|
|
105
|
+
if (entry) {
|
|
106
|
+
this.hitCount++;
|
|
107
|
+
return entry;
|
|
108
|
+
}
|
|
109
|
+
this.missCount++;
|
|
110
|
+
return void 0;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Set cached metadata for a file
|
|
114
|
+
*/
|
|
115
|
+
set(filePath, metadata) {
|
|
116
|
+
const relativePath = this.normalizePath(filePath);
|
|
117
|
+
const fullPath = join(this.projectRoot, relativePath);
|
|
118
|
+
let entry;
|
|
119
|
+
if (metadata.hash && metadata.size !== void 0 && metadata.mtime !== void 0) {
|
|
120
|
+
entry = {
|
|
121
|
+
path: relativePath,
|
|
122
|
+
size: metadata.size,
|
|
123
|
+
mtime: metadata.mtime,
|
|
124
|
+
hash: metadata.hash,
|
|
125
|
+
type: metadata.type || this.inferFileType(relativePath),
|
|
126
|
+
cachedAt: Date.now()
|
|
127
|
+
};
|
|
128
|
+
} else {
|
|
129
|
+
entry = this.computeMetadata(fullPath, relativePath);
|
|
130
|
+
}
|
|
131
|
+
this.entries.set(relativePath, entry);
|
|
132
|
+
this.dirty = true;
|
|
133
|
+
return entry;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Remove a file from cache
|
|
137
|
+
*/
|
|
138
|
+
delete(filePath) {
|
|
139
|
+
const relativePath = this.normalizePath(filePath);
|
|
140
|
+
const deleted = this.entries.delete(relativePath);
|
|
141
|
+
if (deleted) {
|
|
142
|
+
this.dirty = true;
|
|
143
|
+
}
|
|
144
|
+
return deleted;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if a file exists in cache
|
|
148
|
+
*/
|
|
149
|
+
has(filePath) {
|
|
150
|
+
const relativePath = this.normalizePath(filePath);
|
|
151
|
+
return this.entries.has(relativePath);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if a file has changed since caching
|
|
155
|
+
*/
|
|
156
|
+
hasChanged(filePath) {
|
|
157
|
+
const relativePath = this.normalizePath(filePath);
|
|
158
|
+
const fullPath = join(this.projectRoot, relativePath);
|
|
159
|
+
const cached = this.entries.get(relativePath);
|
|
160
|
+
if (!cached) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const stats = statSync(fullPath);
|
|
165
|
+
if (stats.mtimeMs !== cached.mtime || stats.size !== cached.size) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
} catch {
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Detect changes for a list of files
|
|
175
|
+
*/
|
|
176
|
+
async detectChanges(filePaths) {
|
|
177
|
+
const changes = [];
|
|
178
|
+
const currentFiles = /* @__PURE__ */ new Set();
|
|
179
|
+
for (const filePath of filePaths) {
|
|
180
|
+
const relativePath = this.normalizePath(filePath);
|
|
181
|
+
const fullPath = join(this.projectRoot, relativePath);
|
|
182
|
+
currentFiles.add(relativePath);
|
|
183
|
+
const cached = this.entries.get(relativePath);
|
|
184
|
+
try {
|
|
185
|
+
const stats = statSync(fullPath);
|
|
186
|
+
const newMeta = this.computeMetadata(fullPath, relativePath);
|
|
187
|
+
if (!cached) {
|
|
188
|
+
changes.push({
|
|
189
|
+
path: relativePath,
|
|
190
|
+
change: "added",
|
|
191
|
+
newMeta
|
|
192
|
+
});
|
|
193
|
+
} else if (cached.mtime !== stats.mtimeMs || cached.size !== stats.size) {
|
|
194
|
+
if (cached.hash !== newMeta.hash) {
|
|
195
|
+
changes.push({
|
|
196
|
+
path: relativePath,
|
|
197
|
+
change: "modified",
|
|
198
|
+
oldMeta: cached,
|
|
199
|
+
newMeta
|
|
200
|
+
});
|
|
201
|
+
} else {
|
|
202
|
+
changes.push({
|
|
203
|
+
path: relativePath,
|
|
204
|
+
change: "unchanged",
|
|
205
|
+
oldMeta: cached,
|
|
206
|
+
newMeta
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
} else {
|
|
210
|
+
changes.push({
|
|
211
|
+
path: relativePath,
|
|
212
|
+
change: "unchanged",
|
|
213
|
+
oldMeta: cached,
|
|
214
|
+
newMeta: cached
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
} catch {
|
|
218
|
+
if (cached) {
|
|
219
|
+
changes.push({
|
|
220
|
+
path: relativePath,
|
|
221
|
+
change: "deleted",
|
|
222
|
+
oldMeta: cached
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
for (const [path, meta] of this.entries) {
|
|
228
|
+
if (!currentFiles.has(path)) {
|
|
229
|
+
changes.push({
|
|
230
|
+
path,
|
|
231
|
+
change: "deleted",
|
|
232
|
+
oldMeta: meta
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return changes;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Update cache with detected changes
|
|
240
|
+
*/
|
|
241
|
+
applyChanges(changes) {
|
|
242
|
+
for (const change of changes) {
|
|
243
|
+
switch (change.change) {
|
|
244
|
+
case "added":
|
|
245
|
+
case "modified":
|
|
246
|
+
if (change.newMeta) {
|
|
247
|
+
this.entries.set(change.path, change.newMeta);
|
|
248
|
+
}
|
|
249
|
+
break;
|
|
250
|
+
case "deleted":
|
|
251
|
+
this.entries.delete(change.path);
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
this.dirty = true;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get cache statistics
|
|
259
|
+
*/
|
|
260
|
+
getStats() {
|
|
261
|
+
let staleCount = 0;
|
|
262
|
+
const now = Date.now();
|
|
263
|
+
for (const entry of this.entries.values()) {
|
|
264
|
+
if (now - entry.cachedAt > this.defaultTTL) {
|
|
265
|
+
staleCount++;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
const totalRequests = this.hitCount + this.missCount;
|
|
269
|
+
return {
|
|
270
|
+
totalEntries: this.entries.size,
|
|
271
|
+
hitCount: this.hitCount,
|
|
272
|
+
missCount: this.missCount,
|
|
273
|
+
hitRate: totalRequests > 0 ? this.hitCount / totalRequests : 0,
|
|
274
|
+
sizeBytes: this.estimateSize(),
|
|
275
|
+
lastUpdated: this.updatedAt,
|
|
276
|
+
staleEntries: staleCount
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Clear all cache entries
|
|
281
|
+
*/
|
|
282
|
+
clear() {
|
|
283
|
+
this.entries.clear();
|
|
284
|
+
this.hitCount = 0;
|
|
285
|
+
this.missCount = 0;
|
|
286
|
+
this.dirty = true;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Prune stale entries
|
|
290
|
+
*/
|
|
291
|
+
async prune() {
|
|
292
|
+
const now = Date.now();
|
|
293
|
+
let prunedCount = 0;
|
|
294
|
+
for (const [path, entry] of this.entries) {
|
|
295
|
+
if (now - entry.cachedAt > this.defaultTTL) {
|
|
296
|
+
this.entries.delete(path);
|
|
297
|
+
prunedCount++;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (this.entries.size > this.maxEntries) {
|
|
301
|
+
const entries = Array.from(this.entries.entries()).sort((a, b) => a[1].cachedAt - b[1].cachedAt);
|
|
302
|
+
const toRemove = entries.slice(0, entries.length - this.maxEntries);
|
|
303
|
+
for (const [path] of toRemove) {
|
|
304
|
+
this.entries.delete(path);
|
|
305
|
+
prunedCount++;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (prunedCount > 0) {
|
|
309
|
+
this.dirty = true;
|
|
310
|
+
logger.info("Pruned cache entries", { count: prunedCount });
|
|
311
|
+
}
|
|
312
|
+
return prunedCount;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get all cached file paths
|
|
316
|
+
*/
|
|
317
|
+
getAllPaths() {
|
|
318
|
+
return Array.from(this.entries.keys());
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Get files by type
|
|
322
|
+
*/
|
|
323
|
+
getByType(type) {
|
|
324
|
+
return Array.from(this.entries.values()).filter((e) => e.type === type);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Invalidate entries matching a pattern
|
|
328
|
+
*/
|
|
329
|
+
invalidate(pattern) {
|
|
330
|
+
let count = 0;
|
|
331
|
+
for (const path of this.entries.keys()) {
|
|
332
|
+
if (pattern.test(path)) {
|
|
333
|
+
this.entries.delete(path);
|
|
334
|
+
count++;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
if (count > 0) {
|
|
338
|
+
this.dirty = true;
|
|
339
|
+
}
|
|
340
|
+
return count;
|
|
341
|
+
}
|
|
342
|
+
// Private helpers
|
|
343
|
+
normalizePath(filePath) {
|
|
344
|
+
if (filePath.startsWith(this.projectRoot)) {
|
|
345
|
+
return relative(this.projectRoot, filePath);
|
|
346
|
+
}
|
|
347
|
+
return filePath;
|
|
348
|
+
}
|
|
349
|
+
computeMetadata(fullPath, relativePath) {
|
|
350
|
+
const stats = statSync(fullPath);
|
|
351
|
+
const content = readFileSync(fullPath);
|
|
352
|
+
const hash = createHash("md5").update(content).digest("hex");
|
|
353
|
+
return {
|
|
354
|
+
path: relativePath,
|
|
355
|
+
size: stats.size,
|
|
356
|
+
mtime: stats.mtimeMs,
|
|
357
|
+
hash,
|
|
358
|
+
type: this.inferFileType(relativePath),
|
|
359
|
+
cachedAt: Date.now()
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
inferFileType(filePath) {
|
|
363
|
+
const ext = filePath.split(".").pop()?.toLowerCase() || "";
|
|
364
|
+
const filename = filePath.split("/").pop()?.toLowerCase() || "";
|
|
365
|
+
if (filename === "dockerfile" || filename.startsWith("dockerfile.")) {
|
|
366
|
+
return "docker";
|
|
367
|
+
}
|
|
368
|
+
if (filename.includes("docker-compose") || filename === "compose.yml" || filename === "compose.yaml") {
|
|
369
|
+
return "docker";
|
|
370
|
+
}
|
|
371
|
+
switch (ext) {
|
|
372
|
+
case "md":
|
|
373
|
+
case "mdx":
|
|
374
|
+
return "markdown";
|
|
375
|
+
case "ts":
|
|
376
|
+
case "tsx":
|
|
377
|
+
case "mts":
|
|
378
|
+
case "cts":
|
|
379
|
+
return "typescript";
|
|
380
|
+
case "js":
|
|
381
|
+
case "jsx":
|
|
382
|
+
case "mjs":
|
|
383
|
+
case "cjs":
|
|
384
|
+
return "javascript";
|
|
385
|
+
case "py":
|
|
386
|
+
case "pyw":
|
|
387
|
+
return "python";
|
|
388
|
+
case "rs":
|
|
389
|
+
return "rust";
|
|
390
|
+
case "go":
|
|
391
|
+
return "go";
|
|
392
|
+
case "java":
|
|
393
|
+
return "java";
|
|
394
|
+
case "php":
|
|
395
|
+
return "php";
|
|
396
|
+
case "rb":
|
|
397
|
+
return "ruby";
|
|
398
|
+
case "yml":
|
|
399
|
+
case "yaml":
|
|
400
|
+
return "yaml";
|
|
401
|
+
case "json":
|
|
402
|
+
return "json";
|
|
403
|
+
case "toml":
|
|
404
|
+
return "toml";
|
|
405
|
+
case "ini":
|
|
406
|
+
case "env":
|
|
407
|
+
case "conf":
|
|
408
|
+
case "config":
|
|
409
|
+
return "config";
|
|
410
|
+
default:
|
|
411
|
+
return "other";
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
estimateSize() {
|
|
415
|
+
let size = 0;
|
|
416
|
+
for (const entry of this.entries.values()) {
|
|
417
|
+
size += entry.path.length + entry.hash.length + 100;
|
|
418
|
+
}
|
|
419
|
+
return size;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
function createShadowCache(options) {
|
|
423
|
+
return new ShadowCache(options);
|
|
424
|
+
}
|
|
425
|
+
async function loadShadowCache(projectRoot) {
|
|
426
|
+
const cache = new ShadowCache({ projectRoot });
|
|
427
|
+
await cache.load();
|
|
428
|
+
return cache;
|
|
429
|
+
}
|
|
430
|
+
export {
|
|
431
|
+
ShadowCache,
|
|
432
|
+
createShadowCache,
|
|
433
|
+
loadShadowCache
|
|
434
|
+
};
|
|
435
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sources":["../../src/core/cache.ts"],"sourcesContent":["/**\n * Shadow Cache - File Metadata Caching\n *\n * Provides a caching layer for file metadata to enable incremental updates\n * and improve performance when analyzing large codebases.\n *\n * @module core/cache\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync, statSync } from 'fs';\nimport { join, relative, dirname } from 'path';\nimport { createHash } from 'crypto';\nimport { createLogger } from '../utils/index.js';\n\nconst logger = createLogger('shadow-cache');\n\n/**\n * File metadata stored in cache\n */\nexport interface FileMetadata {\n /** Relative path from project root */\n path: string;\n /** File size in bytes */\n size: number;\n /** Modification time (Unix timestamp) */\n mtime: number;\n /** Content hash (MD5) */\n hash: string;\n /** File type inferred from extension */\n type: FileType;\n /** When this entry was cached */\n cachedAt: number;\n}\n\n/**\n * File types for classification\n */\nexport type FileType =\n | 'markdown'\n | 'typescript'\n | 'javascript'\n | 'python'\n | 'rust'\n | 'go'\n | 'java'\n | 'php'\n | 'ruby'\n | 'yaml'\n | 'json'\n | 'toml'\n | 'config'\n | 'docker'\n | 'other';\n\n/**\n * Cache entry change type\n */\nexport type ChangeType = 'added' | 'modified' | 'deleted' | 'unchanged';\n\n/**\n * File change information\n */\nexport interface FileChange {\n path: string;\n change: ChangeType;\n oldMeta?: FileMetadata;\n newMeta?: FileMetadata;\n}\n\n/**\n * Cache statistics\n */\nexport interface CacheStats {\n totalEntries: number;\n hitCount: number;\n missCount: number;\n hitRate: number;\n sizeBytes: number;\n lastUpdated: number | null;\n staleEntries: number;\n}\n\n/**\n * Shadow Cache options\n */\nexport interface ShadowCacheOptions {\n /** Project root directory */\n projectRoot: string;\n /** Cache directory (relative to .kg) */\n cacheDir?: string;\n /** Default TTL in milliseconds (default: 1 hour) */\n defaultTTL?: number;\n /** Maximum entries before pruning (default: 10000) */\n maxEntries?: number;\n /** Enable persistence to disk (default: true) */\n persist?: boolean;\n}\n\n/**\n * Cache data structure stored on disk\n */\ninterface CacheData {\n version: number;\n projectRoot: string;\n createdAt: number;\n updatedAt: number;\n entries: Record<string, FileMetadata>;\n}\n\nconst CACHE_VERSION = 1;\nconst CACHE_FILENAME = 'shadow-cache.json';\n\n/**\n * Shadow Cache for file metadata\n *\n * Provides efficient caching of file metadata to enable:\n * - Incremental graph updates (only process changed files)\n * - Fast file existence/modification checks\n * - Content hash comparison\n *\n * @example\n * ```typescript\n * const cache = new ShadowCache({ projectRoot: '/my/project' });\n * await cache.load();\n *\n * // Check for changes\n * const changes = await cache.detectChanges(['docs/**\\/*.md']);\n *\n * // Process only changed files\n * for (const change of changes) {\n * if (change.change !== 'unchanged') {\n * console.log(`${change.path}: ${change.change}`);\n * }\n * }\n *\n * // Update cache with processed files\n * await cache.save();\n * ```\n */\nexport class ShadowCache {\n private projectRoot: string;\n private cacheDir: string;\n private cachePath: string;\n private defaultTTL: number;\n private maxEntries: number;\n private persist: boolean;\n\n private entries: Map<string, FileMetadata> = new Map();\n private hitCount = 0;\n private missCount = 0;\n private loaded = false;\n private dirty = false;\n private createdAt: number;\n private updatedAt: number;\n\n constructor(options: ShadowCacheOptions) {\n this.projectRoot = options.projectRoot;\n this.cacheDir = options.cacheDir || '.kg';\n this.cachePath = join(this.projectRoot, this.cacheDir, CACHE_FILENAME);\n this.defaultTTL = options.defaultTTL || 60 * 60 * 1000; // 1 hour\n this.maxEntries = options.maxEntries || 10000;\n this.persist = options.persist !== false;\n this.createdAt = Date.now();\n this.updatedAt = Date.now();\n }\n\n /**\n * Load cache from disk\n */\n async load(): Promise<boolean> {\n if (!this.persist) {\n this.loaded = true;\n return true;\n }\n\n try {\n if (existsSync(this.cachePath)) {\n const data = JSON.parse(readFileSync(this.cachePath, 'utf-8')) as CacheData;\n\n // Verify cache is for this project\n if (data.projectRoot !== this.projectRoot) {\n logger.warn('Cache project root mismatch, starting fresh');\n this.loaded = true;\n return false;\n }\n\n // Check version compatibility\n if (data.version !== CACHE_VERSION) {\n logger.warn('Cache version mismatch, starting fresh', {\n cacheVersion: data.version,\n expectedVersion: CACHE_VERSION,\n });\n this.loaded = true;\n return false;\n }\n\n // Load entries\n this.entries = new Map(Object.entries(data.entries));\n this.createdAt = data.createdAt;\n this.updatedAt = data.updatedAt;\n this.loaded = true;\n\n logger.info('Cache loaded', { entries: this.entries.size });\n return true;\n }\n } catch (error) {\n logger.error('Failed to load cache', error instanceof Error ? error : new Error(String(error)));\n }\n\n this.loaded = true;\n return false;\n }\n\n /**\n * Save cache to disk\n */\n async save(): Promise<boolean> {\n if (!this.persist || !this.dirty) {\n return true;\n }\n\n try {\n // Ensure cache directory exists\n const cacheDir = dirname(this.cachePath);\n if (!existsSync(cacheDir)) {\n mkdirSync(cacheDir, { recursive: true });\n }\n\n // Prune if needed\n await this.prune();\n\n const data: CacheData = {\n version: CACHE_VERSION,\n projectRoot: this.projectRoot,\n createdAt: this.createdAt,\n updatedAt: Date.now(),\n entries: Object.fromEntries(this.entries),\n };\n\n writeFileSync(this.cachePath, JSON.stringify(data, null, 2));\n this.updatedAt = data.updatedAt;\n this.dirty = false;\n\n logger.info('Cache saved', { entries: this.entries.size });\n return true;\n } catch (error) {\n logger.error('Failed to save cache', error instanceof Error ? error : new Error(String(error)));\n return false;\n }\n }\n\n /**\n * Get cached metadata for a file\n */\n get(filePath: string): FileMetadata | undefined {\n const relativePath = this.normalizePath(filePath);\n const entry = this.entries.get(relativePath);\n\n if (entry) {\n this.hitCount++;\n return entry;\n }\n\n this.missCount++;\n return undefined;\n }\n\n /**\n * Set cached metadata for a file\n */\n set(filePath: string, metadata: Partial<FileMetadata>): FileMetadata {\n const relativePath = this.normalizePath(filePath);\n const fullPath = join(this.projectRoot, relativePath);\n\n let entry: FileMetadata;\n\n if (metadata.hash && metadata.size !== undefined && metadata.mtime !== undefined) {\n // Full metadata provided\n entry = {\n path: relativePath,\n size: metadata.size,\n mtime: metadata.mtime,\n hash: metadata.hash,\n type: metadata.type || this.inferFileType(relativePath),\n cachedAt: Date.now(),\n };\n } else {\n // Compute from file\n entry = this.computeMetadata(fullPath, relativePath);\n }\n\n this.entries.set(relativePath, entry);\n this.dirty = true;\n return entry;\n }\n\n /**\n * Remove a file from cache\n */\n delete(filePath: string): boolean {\n const relativePath = this.normalizePath(filePath);\n const deleted = this.entries.delete(relativePath);\n if (deleted) {\n this.dirty = true;\n }\n return deleted;\n }\n\n /**\n * Check if a file exists in cache\n */\n has(filePath: string): boolean {\n const relativePath = this.normalizePath(filePath);\n return this.entries.has(relativePath);\n }\n\n /**\n * Check if a file has changed since caching\n */\n hasChanged(filePath: string): boolean {\n const relativePath = this.normalizePath(filePath);\n const fullPath = join(this.projectRoot, relativePath);\n const cached = this.entries.get(relativePath);\n\n if (!cached) {\n return true; // Not in cache = changed (new file)\n }\n\n try {\n const stats = statSync(fullPath);\n // Quick check: mtime and size\n if (stats.mtimeMs !== cached.mtime || stats.size !== cached.size) {\n return true;\n }\n return false;\n } catch {\n return true; // File doesn't exist = changed (deleted)\n }\n }\n\n /**\n * Detect changes for a list of files\n */\n async detectChanges(filePaths: string[]): Promise<FileChange[]> {\n const changes: FileChange[] = [];\n const currentFiles = new Set<string>();\n\n for (const filePath of filePaths) {\n const relativePath = this.normalizePath(filePath);\n const fullPath = join(this.projectRoot, relativePath);\n currentFiles.add(relativePath);\n\n const cached = this.entries.get(relativePath);\n\n try {\n const stats = statSync(fullPath);\n const newMeta = this.computeMetadata(fullPath, relativePath);\n\n if (!cached) {\n changes.push({\n path: relativePath,\n change: 'added',\n newMeta,\n });\n } else if (cached.mtime !== stats.mtimeMs || cached.size !== stats.size) {\n // Full hash comparison for definitive change detection\n if (cached.hash !== newMeta.hash) {\n changes.push({\n path: relativePath,\n change: 'modified',\n oldMeta: cached,\n newMeta,\n });\n } else {\n // mtime changed but content same (touch, etc.)\n changes.push({\n path: relativePath,\n change: 'unchanged',\n oldMeta: cached,\n newMeta,\n });\n }\n } else {\n changes.push({\n path: relativePath,\n change: 'unchanged',\n oldMeta: cached,\n newMeta: cached,\n });\n }\n } catch {\n if (cached) {\n changes.push({\n path: relativePath,\n change: 'deleted',\n oldMeta: cached,\n });\n }\n }\n }\n\n // Detect deleted files (in cache but not in current list)\n for (const [path, meta] of this.entries) {\n if (!currentFiles.has(path)) {\n changes.push({\n path,\n change: 'deleted',\n oldMeta: meta,\n });\n }\n }\n\n return changes;\n }\n\n /**\n * Update cache with detected changes\n */\n applyChanges(changes: FileChange[]): void {\n for (const change of changes) {\n switch (change.change) {\n case 'added':\n case 'modified':\n if (change.newMeta) {\n this.entries.set(change.path, change.newMeta);\n }\n break;\n case 'deleted':\n this.entries.delete(change.path);\n break;\n }\n }\n this.dirty = true;\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n let staleCount = 0;\n const now = Date.now();\n\n for (const entry of this.entries.values()) {\n if (now - entry.cachedAt > this.defaultTTL) {\n staleCount++;\n }\n }\n\n const totalRequests = this.hitCount + this.missCount;\n\n return {\n totalEntries: this.entries.size,\n hitCount: this.hitCount,\n missCount: this.missCount,\n hitRate: totalRequests > 0 ? this.hitCount / totalRequests : 0,\n sizeBytes: this.estimateSize(),\n lastUpdated: this.updatedAt,\n staleEntries: staleCount,\n };\n }\n\n /**\n * Clear all cache entries\n */\n clear(): void {\n this.entries.clear();\n this.hitCount = 0;\n this.missCount = 0;\n this.dirty = true;\n }\n\n /**\n * Prune stale entries\n */\n async prune(): Promise<number> {\n const now = Date.now();\n let prunedCount = 0;\n\n // Prune by TTL\n for (const [path, entry] of this.entries) {\n if (now - entry.cachedAt > this.defaultTTL) {\n this.entries.delete(path);\n prunedCount++;\n }\n }\n\n // Prune by max entries (LRU-ish: oldest cached first)\n if (this.entries.size > this.maxEntries) {\n const entries = Array.from(this.entries.entries())\n .sort((a, b) => a[1].cachedAt - b[1].cachedAt);\n\n const toRemove = entries.slice(0, entries.length - this.maxEntries);\n for (const [path] of toRemove) {\n this.entries.delete(path);\n prunedCount++;\n }\n }\n\n if (prunedCount > 0) {\n this.dirty = true;\n logger.info('Pruned cache entries', { count: prunedCount });\n }\n\n return prunedCount;\n }\n\n /**\n * Get all cached file paths\n */\n getAllPaths(): string[] {\n return Array.from(this.entries.keys());\n }\n\n /**\n * Get files by type\n */\n getByType(type: FileType): FileMetadata[] {\n return Array.from(this.entries.values()).filter(e => e.type === type);\n }\n\n /**\n * Invalidate entries matching a pattern\n */\n invalidate(pattern: RegExp): number {\n let count = 0;\n for (const path of this.entries.keys()) {\n if (pattern.test(path)) {\n this.entries.delete(path);\n count++;\n }\n }\n if (count > 0) {\n this.dirty = true;\n }\n return count;\n }\n\n // Private helpers\n\n private normalizePath(filePath: string): string {\n // Make path relative to project root\n if (filePath.startsWith(this.projectRoot)) {\n return relative(this.projectRoot, filePath);\n }\n return filePath;\n }\n\n private computeMetadata(fullPath: string, relativePath: string): FileMetadata {\n const stats = statSync(fullPath);\n const content = readFileSync(fullPath);\n const hash = createHash('md5').update(content).digest('hex');\n\n return {\n path: relativePath,\n size: stats.size,\n mtime: stats.mtimeMs,\n hash,\n type: this.inferFileType(relativePath),\n cachedAt: Date.now(),\n };\n }\n\n private inferFileType(filePath: string): FileType {\n const ext = filePath.split('.').pop()?.toLowerCase() || '';\n const filename = filePath.split('/').pop()?.toLowerCase() || '';\n\n // Docker files\n if (filename === 'dockerfile' || filename.startsWith('dockerfile.')) {\n return 'docker';\n }\n if (filename.includes('docker-compose') || filename === 'compose.yml' || filename === 'compose.yaml') {\n return 'docker';\n }\n\n // By extension\n switch (ext) {\n case 'md':\n case 'mdx':\n return 'markdown';\n case 'ts':\n case 'tsx':\n case 'mts':\n case 'cts':\n return 'typescript';\n case 'js':\n case 'jsx':\n case 'mjs':\n case 'cjs':\n return 'javascript';\n case 'py':\n case 'pyw':\n return 'python';\n case 'rs':\n return 'rust';\n case 'go':\n return 'go';\n case 'java':\n return 'java';\n case 'php':\n return 'php';\n case 'rb':\n return 'ruby';\n case 'yml':\n case 'yaml':\n return 'yaml';\n case 'json':\n return 'json';\n case 'toml':\n return 'toml';\n case 'ini':\n case 'env':\n case 'conf':\n case 'config':\n return 'config';\n default:\n return 'other';\n }\n }\n\n private estimateSize(): number {\n // Rough estimate: JSON serialization size\n let size = 0;\n for (const entry of this.entries.values()) {\n size += entry.path.length + entry.hash.length + 100; // ~100 bytes overhead per entry\n }\n return size;\n }\n}\n\n/**\n * Create a shadow cache for a project\n */\nexport function createShadowCache(options: ShadowCacheOptions): ShadowCache {\n return new ShadowCache(options);\n}\n\n/**\n * Load or create shadow cache for a project\n */\nexport async function loadShadowCache(projectRoot: string): Promise<ShadowCache> {\n const cache = new ShadowCache({ projectRoot });\n await cache.load();\n return cache;\n}\n"],"names":[],"mappings":"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"}
|