@weavelogic/knowledge-graph-agent 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +686 -304
- 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/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/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/index.d.ts.map +1 -1
- package/dist/cli/index.js +40 -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/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 +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +173 -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/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 +13 -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 +663 -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/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/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,379 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import ora from "ora";
|
|
4
|
+
import inquirer from "inquirer";
|
|
5
|
+
import { createGitClient } from "../../integrations/git.js";
|
|
6
|
+
import { createAutoCommit } from "../../integrations/auto-commit.js";
|
|
7
|
+
import { validateProjectRoot } from "../../core/security.js";
|
|
8
|
+
function formatStatus(status) {
|
|
9
|
+
console.log();
|
|
10
|
+
console.log(chalk.cyan.bold(" Git Status"));
|
|
11
|
+
console.log();
|
|
12
|
+
console.log(chalk.white(` Branch: ${chalk.green(status.branch)}`));
|
|
13
|
+
if (status.tracking) {
|
|
14
|
+
const ahead = status.tracking.ahead > 0 ? chalk.green(`+${status.tracking.ahead}`) : "";
|
|
15
|
+
const behind = status.tracking.behind > 0 ? chalk.red(`-${status.tracking.behind}`) : "";
|
|
16
|
+
const tracking = [ahead, behind].filter(Boolean).join(" ");
|
|
17
|
+
console.log(chalk.gray(` Tracking: ${status.tracking.remote} ${tracking}`));
|
|
18
|
+
}
|
|
19
|
+
console.log();
|
|
20
|
+
if (status.isClean) {
|
|
21
|
+
console.log(chalk.green(" Working tree is clean"));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const counts = [];
|
|
25
|
+
if (status.staged > 0) counts.push(chalk.green(`${status.staged} staged`));
|
|
26
|
+
if (status.modified > 0) counts.push(chalk.yellow(`${status.modified} modified`));
|
|
27
|
+
if (status.untracked > 0) counts.push(chalk.gray(`${status.untracked} untracked`));
|
|
28
|
+
if (status.deleted > 0) counts.push(chalk.red(`${status.deleted} deleted`));
|
|
29
|
+
if (status.conflicted > 0) counts.push(chalk.red(`${status.conflicted} conflicted`));
|
|
30
|
+
console.log(chalk.white(` Changes: ${counts.join(", ")}`));
|
|
31
|
+
console.log();
|
|
32
|
+
const staged = status.files.filter((f) => f.isStaged);
|
|
33
|
+
const unstaged = status.files.filter((f) => !f.isStaged);
|
|
34
|
+
if (staged.length > 0) {
|
|
35
|
+
console.log(chalk.green(" Staged Changes:"));
|
|
36
|
+
staged.slice(0, 10).forEach((f) => {
|
|
37
|
+
const icon = getStatusIcon(f.indexStatus);
|
|
38
|
+
console.log(chalk.green(` ${icon} ${f.path}`));
|
|
39
|
+
});
|
|
40
|
+
if (staged.length > 10) {
|
|
41
|
+
console.log(chalk.gray(` ... and ${staged.length - 10} more`));
|
|
42
|
+
}
|
|
43
|
+
console.log();
|
|
44
|
+
}
|
|
45
|
+
if (unstaged.length > 0) {
|
|
46
|
+
console.log(chalk.yellow(" Unstaged Changes:"));
|
|
47
|
+
unstaged.slice(0, 10).forEach((f) => {
|
|
48
|
+
const icon = getStatusIcon(f.workingTreeStatus);
|
|
49
|
+
console.log(chalk.yellow(` ${icon} ${f.path}`));
|
|
50
|
+
});
|
|
51
|
+
if (unstaged.length > 10) {
|
|
52
|
+
console.log(chalk.gray(` ... and ${unstaged.length - 10} more`));
|
|
53
|
+
}
|
|
54
|
+
console.log();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function getStatusIcon(status) {
|
|
58
|
+
switch (status) {
|
|
59
|
+
case "M":
|
|
60
|
+
return "modified:";
|
|
61
|
+
case "A":
|
|
62
|
+
return "added: ";
|
|
63
|
+
case "D":
|
|
64
|
+
return "deleted: ";
|
|
65
|
+
case "R":
|
|
66
|
+
return "renamed: ";
|
|
67
|
+
case "?":
|
|
68
|
+
return "new: ";
|
|
69
|
+
case "U":
|
|
70
|
+
return "conflict:";
|
|
71
|
+
default:
|
|
72
|
+
return " ";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function formatAnalysis(analysis) {
|
|
76
|
+
console.log();
|
|
77
|
+
console.log(chalk.cyan.bold(" Change Analysis"));
|
|
78
|
+
console.log();
|
|
79
|
+
console.log(chalk.white(` Type: ${chalk.yellow(analysis.type)}`));
|
|
80
|
+
if (analysis.scope) {
|
|
81
|
+
console.log(chalk.white(` Scope: ${chalk.blue(analysis.scope)}`));
|
|
82
|
+
}
|
|
83
|
+
console.log(chalk.white(` Description: ${analysis.description}`));
|
|
84
|
+
if (analysis.breaking) {
|
|
85
|
+
console.log(chalk.red(` Breaking Change: Yes`));
|
|
86
|
+
}
|
|
87
|
+
console.log();
|
|
88
|
+
}
|
|
89
|
+
async function interactiveCommit(git, autoCommit, status, analysis, options) {
|
|
90
|
+
formatStatus(status);
|
|
91
|
+
formatAnalysis(analysis);
|
|
92
|
+
const suggestedMessage = autoCommit.generateCommitMessage(analysis);
|
|
93
|
+
console.log(chalk.cyan.bold(" Suggested Commit Message:"));
|
|
94
|
+
console.log();
|
|
95
|
+
console.log(chalk.gray(" ---"));
|
|
96
|
+
suggestedMessage.split("\n").forEach((line) => {
|
|
97
|
+
console.log(chalk.white(` ${line}`));
|
|
98
|
+
});
|
|
99
|
+
console.log(chalk.gray(" ---"));
|
|
100
|
+
console.log();
|
|
101
|
+
const { action } = await inquirer.prompt([
|
|
102
|
+
{
|
|
103
|
+
type: "list",
|
|
104
|
+
name: "action",
|
|
105
|
+
message: "What would you like to do?",
|
|
106
|
+
choices: [
|
|
107
|
+
{ name: "Commit with suggested message", value: "commit" },
|
|
108
|
+
{ name: "Edit message", value: "edit" },
|
|
109
|
+
{ name: "Stage all changes first", value: "stage-all" },
|
|
110
|
+
{ name: "Select files to stage", value: "select" },
|
|
111
|
+
{ name: "View diff", value: "diff" },
|
|
112
|
+
{ name: "Cancel", value: "cancel" }
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
]);
|
|
116
|
+
switch (action) {
|
|
117
|
+
case "commit":
|
|
118
|
+
return performCommit(git, autoCommit, suggestedMessage, options);
|
|
119
|
+
case "edit":
|
|
120
|
+
const { editedMessage } = await inquirer.prompt([
|
|
121
|
+
{
|
|
122
|
+
type: "editor",
|
|
123
|
+
name: "editedMessage",
|
|
124
|
+
message: "Edit commit message:",
|
|
125
|
+
default: suggestedMessage
|
|
126
|
+
}
|
|
127
|
+
]);
|
|
128
|
+
return performCommit(git, autoCommit, editedMessage.trim(), options);
|
|
129
|
+
case "stage-all":
|
|
130
|
+
await git.add(".");
|
|
131
|
+
const newStatus = await git.getStatus();
|
|
132
|
+
const newAnalysis = await autoCommit.analyzeChanges(newStatus);
|
|
133
|
+
return interactiveCommit(git, autoCommit, newStatus, newAnalysis, options);
|
|
134
|
+
case "select":
|
|
135
|
+
const unstaged = status.files.filter((f) => !f.isStaged);
|
|
136
|
+
if (unstaged.length === 0) {
|
|
137
|
+
console.log(chalk.yellow("\n No unstaged files to select.\n"));
|
|
138
|
+
return interactiveCommit(git, autoCommit, status, analysis, options);
|
|
139
|
+
}
|
|
140
|
+
const { filesToStage } = await inquirer.prompt([
|
|
141
|
+
{
|
|
142
|
+
type: "checkbox",
|
|
143
|
+
name: "filesToStage",
|
|
144
|
+
message: "Select files to stage:",
|
|
145
|
+
choices: unstaged.map((f) => ({
|
|
146
|
+
name: `${getStatusIcon(f.workingTreeStatus).trim()} ${f.path}`,
|
|
147
|
+
value: f.path
|
|
148
|
+
}))
|
|
149
|
+
}
|
|
150
|
+
]);
|
|
151
|
+
if (filesToStage.length > 0) {
|
|
152
|
+
await git.add(filesToStage);
|
|
153
|
+
}
|
|
154
|
+
const updatedStatus = await git.getStatus();
|
|
155
|
+
const updatedAnalysis = await autoCommit.analyzeChanges(updatedStatus);
|
|
156
|
+
return interactiveCommit(git, autoCommit, updatedStatus, updatedAnalysis, options);
|
|
157
|
+
case "diff":
|
|
158
|
+
const diff = await git.getDiffContent({ staged: true });
|
|
159
|
+
console.log();
|
|
160
|
+
console.log(chalk.cyan.bold(" Staged Diff:"));
|
|
161
|
+
console.log(chalk.gray(" ---"));
|
|
162
|
+
if (diff) {
|
|
163
|
+
diff.split("\n").slice(0, 50).forEach((line) => {
|
|
164
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
165
|
+
console.log(chalk.green(` ${line}`));
|
|
166
|
+
} else if (line.startsWith("-") && !line.startsWith("---")) {
|
|
167
|
+
console.log(chalk.red(` ${line}`));
|
|
168
|
+
} else {
|
|
169
|
+
console.log(chalk.gray(` ${line}`));
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
if (diff.split("\n").length > 50) {
|
|
173
|
+
console.log(chalk.gray(" ... (truncated)"));
|
|
174
|
+
}
|
|
175
|
+
} else {
|
|
176
|
+
console.log(chalk.gray(" No staged changes"));
|
|
177
|
+
}
|
|
178
|
+
console.log(chalk.gray(" ---"));
|
|
179
|
+
console.log();
|
|
180
|
+
return interactiveCommit(git, autoCommit, status, analysis, options);
|
|
181
|
+
case "cancel":
|
|
182
|
+
default:
|
|
183
|
+
console.log(chalk.yellow("\n Commit cancelled.\n"));
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async function performCommit(git, autoCommit, message, options) {
|
|
188
|
+
const spinner = ora("Creating commit...").start();
|
|
189
|
+
try {
|
|
190
|
+
const result = await autoCommit.commit({
|
|
191
|
+
message,
|
|
192
|
+
stageAll: options.all,
|
|
193
|
+
dryRun: options.dryRun
|
|
194
|
+
});
|
|
195
|
+
if (options.dryRun) {
|
|
196
|
+
spinner.info("Dry run - no commit created");
|
|
197
|
+
console.log();
|
|
198
|
+
console.log(chalk.cyan(" Would commit with message:"));
|
|
199
|
+
console.log(chalk.gray(" ---"));
|
|
200
|
+
message.split("\n").forEach((line) => {
|
|
201
|
+
console.log(chalk.white(` ${line}`));
|
|
202
|
+
});
|
|
203
|
+
console.log(chalk.gray(" ---"));
|
|
204
|
+
console.log();
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
if (!result.success) {
|
|
208
|
+
spinner.fail("Commit failed");
|
|
209
|
+
console.error(chalk.red(` Error: ${result.error}`));
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
spinner.succeed("Commit created");
|
|
213
|
+
console.log();
|
|
214
|
+
console.log(chalk.white(` Hash: ${chalk.green(result.hash || "unknown")}`));
|
|
215
|
+
console.log();
|
|
216
|
+
if (options.push) {
|
|
217
|
+
const pushSpinner = ora("Pushing to remote...").start();
|
|
218
|
+
try {
|
|
219
|
+
await git.push();
|
|
220
|
+
pushSpinner.succeed("Pushed to remote");
|
|
221
|
+
} catch (error) {
|
|
222
|
+
pushSpinner.fail("Push failed");
|
|
223
|
+
console.error(chalk.red(` Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return true;
|
|
228
|
+
} catch (error) {
|
|
229
|
+
spinner.fail("Commit failed");
|
|
230
|
+
console.error(chalk.red(` Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function createCommitCommand() {
|
|
235
|
+
const command = new Command("commit");
|
|
236
|
+
command.description("Create a git commit with optional auto-generated message").option("-m, --message <message>", "Commit message (skips auto-generation)").option("-n, --dry-run", "Show what would be committed without committing", false).option("-a, --auto", "Automatically generate commit message", false).option("-p, --push", "Push to remote after committing", false).option("--path <path>", "Repository path", ".").option("-i, --interactive", "Interactive mode for reviewing changes", false).option("-A, --all", "Stage all changes before committing", false).option("--amend", "Amend the previous commit", false).action(async (options) => {
|
|
237
|
+
try {
|
|
238
|
+
const projectRoot = validateProjectRoot(options.path);
|
|
239
|
+
const git = createGitClient({ workingDirectory: projectRoot });
|
|
240
|
+
const autoCommit = createAutoCommit({
|
|
241
|
+
workingDirectory: projectRoot,
|
|
242
|
+
stageAll: options.all
|
|
243
|
+
});
|
|
244
|
+
if (!await git.isRepo()) {
|
|
245
|
+
console.error(chalk.red("\n Error: Not a git repository\n"));
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
const status = await git.getStatus();
|
|
249
|
+
if (status.isClean && !options.amend) {
|
|
250
|
+
console.log(chalk.yellow("\n Nothing to commit, working tree clean\n"));
|
|
251
|
+
process.exit(0);
|
|
252
|
+
}
|
|
253
|
+
const analysis = await autoCommit.analyzeChanges(status);
|
|
254
|
+
if (options.interactive) {
|
|
255
|
+
const success = await interactiveCommit(git, autoCommit, status, analysis, options);
|
|
256
|
+
process.exit(success ? 0 : 1);
|
|
257
|
+
}
|
|
258
|
+
if (options.message) {
|
|
259
|
+
const success = await performCommit(git, autoCommit, options.message, options);
|
|
260
|
+
process.exit(success ? 0 : 1);
|
|
261
|
+
}
|
|
262
|
+
if (options.auto) {
|
|
263
|
+
const message = autoCommit.generateCommitMessage(analysis);
|
|
264
|
+
const success = await performCommit(git, autoCommit, message, options);
|
|
265
|
+
process.exit(success ? 0 : 1);
|
|
266
|
+
}
|
|
267
|
+
formatStatus(status);
|
|
268
|
+
formatAnalysis(analysis);
|
|
269
|
+
const suggestedMessage = autoCommit.generateCommitMessage(analysis);
|
|
270
|
+
console.log(chalk.cyan.bold(" Suggested Commit Message:"));
|
|
271
|
+
console.log();
|
|
272
|
+
console.log(chalk.gray(" ---"));
|
|
273
|
+
suggestedMessage.split("\n").forEach((line) => {
|
|
274
|
+
console.log(chalk.white(` ${line}`));
|
|
275
|
+
});
|
|
276
|
+
console.log(chalk.gray(" ---"));
|
|
277
|
+
console.log();
|
|
278
|
+
console.log(chalk.gray(" Use -a/--auto to commit with this message"));
|
|
279
|
+
console.log(chalk.gray(" Use -i/--interactive for interactive mode"));
|
|
280
|
+
console.log(chalk.gray(" Use -m/--message to provide your own message"));
|
|
281
|
+
console.log();
|
|
282
|
+
} catch (error) {
|
|
283
|
+
console.error(chalk.red(`
|
|
284
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
285
|
+
`));
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
command.command("status").description("Show git status with analysis").option("--path <path>", "Repository path", ".").action(async (opts) => {
|
|
290
|
+
try {
|
|
291
|
+
const projectRoot = validateProjectRoot(opts.path);
|
|
292
|
+
const git = createGitClient({ workingDirectory: projectRoot });
|
|
293
|
+
const autoCommit = createAutoCommit({ workingDirectory: projectRoot });
|
|
294
|
+
if (!await git.isRepo()) {
|
|
295
|
+
console.error(chalk.red("\n Error: Not a git repository\n"));
|
|
296
|
+
process.exit(1);
|
|
297
|
+
}
|
|
298
|
+
const status = await git.getStatus();
|
|
299
|
+
formatStatus(status);
|
|
300
|
+
if (!status.isClean) {
|
|
301
|
+
const analysis = await autoCommit.analyzeChanges(status);
|
|
302
|
+
formatAnalysis(analysis);
|
|
303
|
+
}
|
|
304
|
+
} catch (error) {
|
|
305
|
+
console.error(chalk.red(`
|
|
306
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
307
|
+
`));
|
|
308
|
+
process.exit(1);
|
|
309
|
+
}
|
|
310
|
+
});
|
|
311
|
+
command.command("log").description("Show recent commits").option("--path <path>", "Repository path", ".").option("-n, --count <count>", "Number of commits to show", "10").action(async (opts) => {
|
|
312
|
+
try {
|
|
313
|
+
const projectRoot = validateProjectRoot(opts.path);
|
|
314
|
+
const git = createGitClient({ workingDirectory: projectRoot });
|
|
315
|
+
if (!await git.isRepo()) {
|
|
316
|
+
console.error(chalk.red("\n Error: Not a git repository\n"));
|
|
317
|
+
process.exit(1);
|
|
318
|
+
}
|
|
319
|
+
const log = await git.getLog({ maxCount: parseInt(opts.count, 10) });
|
|
320
|
+
console.log();
|
|
321
|
+
console.log(chalk.cyan.bold(" Recent Commits"));
|
|
322
|
+
console.log();
|
|
323
|
+
log.forEach((commit) => {
|
|
324
|
+
const date = commit.date.toISOString().split("T")[0];
|
|
325
|
+
console.log(chalk.yellow(` ${commit.hashAbbrev}`) + chalk.gray(` (${date})`) + chalk.white(` ${commit.message}`));
|
|
326
|
+
console.log(chalk.gray(` ${commit.author} <${commit.email}>`));
|
|
327
|
+
});
|
|
328
|
+
console.log();
|
|
329
|
+
} catch (error) {
|
|
330
|
+
console.error(chalk.red(`
|
|
331
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
332
|
+
`));
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
command.command("diff").description("Show diff of changes").option("--path <path>", "Repository path", ".").option("-s, --staged", "Show only staged changes", false).option("-f, --file <file>", "Show diff for specific file").action(async (opts) => {
|
|
337
|
+
try {
|
|
338
|
+
const projectRoot = validateProjectRoot(opts.path);
|
|
339
|
+
const git = createGitClient({ workingDirectory: projectRoot });
|
|
340
|
+
if (!await git.isRepo()) {
|
|
341
|
+
console.error(chalk.red("\n Error: Not a git repository\n"));
|
|
342
|
+
process.exit(1);
|
|
343
|
+
}
|
|
344
|
+
const diff = await git.getDiffContent({
|
|
345
|
+
staged: opts.staged,
|
|
346
|
+
file: opts.file
|
|
347
|
+
});
|
|
348
|
+
if (!diff) {
|
|
349
|
+
console.log(chalk.yellow("\n No changes to show\n"));
|
|
350
|
+
process.exit(0);
|
|
351
|
+
}
|
|
352
|
+
console.log();
|
|
353
|
+
diff.split("\n").forEach((line) => {
|
|
354
|
+
if (line.startsWith("+") && !line.startsWith("+++")) {
|
|
355
|
+
console.log(chalk.green(line));
|
|
356
|
+
} else if (line.startsWith("-") && !line.startsWith("---")) {
|
|
357
|
+
console.log(chalk.red(line));
|
|
358
|
+
} else if (line.startsWith("@@")) {
|
|
359
|
+
console.log(chalk.cyan(line));
|
|
360
|
+
} else if (line.startsWith("diff ") || line.startsWith("index ")) {
|
|
361
|
+
console.log(chalk.blue(line));
|
|
362
|
+
} else {
|
|
363
|
+
console.log(line);
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
console.log();
|
|
367
|
+
} catch (error) {
|
|
368
|
+
console.error(chalk.red(`
|
|
369
|
+
Error: ${error instanceof Error ? error.message : String(error)}
|
|
370
|
+
`));
|
|
371
|
+
process.exit(1);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
return command;
|
|
375
|
+
}
|
|
376
|
+
export {
|
|
377
|
+
createCommitCommand
|
|
378
|
+
};
|
|
379
|
+
//# sourceMappingURL=commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit.js","sources":["../../../src/cli/commands/commit.ts"],"sourcesContent":["/**\n * Commit Command\n *\n * CLI command for creating commits with optional AI-powered message generation.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport inquirer from 'inquirer';\nimport { createGitClient, GitClient, GitStatusSummary } from '../../integrations/git.js';\nimport { createAutoCommit, AutoCommit, ChangeAnalysis, ChangeType } from '../../integrations/auto-commit.js';\nimport { validateProjectRoot } from '../../core/security.js';\n\n/**\n * Commit command options\n */\ninterface CommitOptions {\n message?: string;\n dryRun: boolean;\n auto: boolean;\n push: boolean;\n path: string;\n interactive: boolean;\n all: boolean;\n amend: boolean;\n}\n\n/**\n * Format status for display\n */\nfunction formatStatus(status: GitStatusSummary): void {\n console.log();\n console.log(chalk.cyan.bold(' Git Status'));\n console.log();\n console.log(chalk.white(` Branch: ${chalk.green(status.branch)}`));\n\n if (status.tracking) {\n const ahead = status.tracking.ahead > 0 ? chalk.green(`+${status.tracking.ahead}`) : '';\n const behind = status.tracking.behind > 0 ? chalk.red(`-${status.tracking.behind}`) : '';\n const tracking = [ahead, behind].filter(Boolean).join(' ');\n console.log(chalk.gray(` Tracking: ${status.tracking.remote} ${tracking}`));\n }\n\n console.log();\n\n if (status.isClean) {\n console.log(chalk.green(' Working tree is clean'));\n return;\n }\n\n // Show file counts\n const counts: string[] = [];\n if (status.staged > 0) counts.push(chalk.green(`${status.staged} staged`));\n if (status.modified > 0) counts.push(chalk.yellow(`${status.modified} modified`));\n if (status.untracked > 0) counts.push(chalk.gray(`${status.untracked} untracked`));\n if (status.deleted > 0) counts.push(chalk.red(`${status.deleted} deleted`));\n if (status.conflicted > 0) counts.push(chalk.red(`${status.conflicted} conflicted`));\n\n console.log(chalk.white(` Changes: ${counts.join(', ')}`));\n console.log();\n\n // Group files by status\n const staged = status.files.filter(f => f.isStaged);\n const unstaged = status.files.filter(f => !f.isStaged);\n\n if (staged.length > 0) {\n console.log(chalk.green(' Staged Changes:'));\n staged.slice(0, 10).forEach(f => {\n const icon = getStatusIcon(f.indexStatus);\n console.log(chalk.green(` ${icon} ${f.path}`));\n });\n if (staged.length > 10) {\n console.log(chalk.gray(` ... and ${staged.length - 10} more`));\n }\n console.log();\n }\n\n if (unstaged.length > 0) {\n console.log(chalk.yellow(' Unstaged Changes:'));\n unstaged.slice(0, 10).forEach(f => {\n const icon = getStatusIcon(f.workingTreeStatus);\n console.log(chalk.yellow(` ${icon} ${f.path}`));\n });\n if (unstaged.length > 10) {\n console.log(chalk.gray(` ... and ${unstaged.length - 10} more`));\n }\n console.log();\n }\n}\n\n/**\n * Get icon for file status\n */\nfunction getStatusIcon(status: string): string {\n switch (status) {\n case 'M':\n return 'modified:';\n case 'A':\n return 'added: ';\n case 'D':\n return 'deleted: ';\n case 'R':\n return 'renamed: ';\n case '?':\n return 'new: ';\n case 'U':\n return 'conflict:';\n default:\n return ' ';\n }\n}\n\n/**\n * Format analysis for display\n */\nfunction formatAnalysis(analysis: ChangeAnalysis): void {\n console.log();\n console.log(chalk.cyan.bold(' Change Analysis'));\n console.log();\n console.log(chalk.white(` Type: ${chalk.yellow(analysis.type)}`));\n if (analysis.scope) {\n console.log(chalk.white(` Scope: ${chalk.blue(analysis.scope)}`));\n }\n console.log(chalk.white(` Description: ${analysis.description}`));\n if (analysis.breaking) {\n console.log(chalk.red(` Breaking Change: Yes`));\n }\n console.log();\n}\n\n/**\n * Interactive mode for reviewing and editing commit\n */\nasync function interactiveCommit(\n git: GitClient,\n autoCommit: AutoCommit,\n status: GitStatusSummary,\n analysis: ChangeAnalysis,\n options: CommitOptions\n): Promise<boolean> {\n // Show current state\n formatStatus(status);\n formatAnalysis(analysis);\n\n // Generate suggested message\n const suggestedMessage = autoCommit.generateCommitMessage(analysis);\n\n console.log(chalk.cyan.bold(' Suggested Commit Message:'));\n console.log();\n console.log(chalk.gray(' ---'));\n suggestedMessage.split('\\n').forEach(line => {\n console.log(chalk.white(` ${line}`));\n });\n console.log(chalk.gray(' ---'));\n console.log();\n\n // Ask for confirmation\n const { action } = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: 'What would you like to do?',\n choices: [\n { name: 'Commit with suggested message', value: 'commit' },\n { name: 'Edit message', value: 'edit' },\n { name: 'Stage all changes first', value: 'stage-all' },\n { name: 'Select files to stage', value: 'select' },\n { name: 'View diff', value: 'diff' },\n { name: 'Cancel', value: 'cancel' },\n ],\n },\n ]);\n\n switch (action) {\n case 'commit':\n return performCommit(git, autoCommit, suggestedMessage, options);\n\n case 'edit':\n const { editedMessage } = await inquirer.prompt([\n {\n type: 'editor',\n name: 'editedMessage',\n message: 'Edit commit message:',\n default: suggestedMessage,\n },\n ]);\n return performCommit(git, autoCommit, editedMessage.trim(), options);\n\n case 'stage-all':\n await git.add('.');\n const newStatus = await git.getStatus();\n const newAnalysis = await autoCommit.analyzeChanges(newStatus);\n return interactiveCommit(git, autoCommit, newStatus, newAnalysis, options);\n\n case 'select':\n const unstaged = status.files.filter(f => !f.isStaged);\n if (unstaged.length === 0) {\n console.log(chalk.yellow('\\n No unstaged files to select.\\n'));\n return interactiveCommit(git, autoCommit, status, analysis, options);\n }\n\n const { filesToStage } = await inquirer.prompt([\n {\n type: 'checkbox',\n name: 'filesToStage',\n message: 'Select files to stage:',\n choices: unstaged.map(f => ({\n name: `${getStatusIcon(f.workingTreeStatus).trim()} ${f.path}`,\n value: f.path,\n })),\n },\n ]);\n\n if (filesToStage.length > 0) {\n await git.add(filesToStage);\n }\n const updatedStatus = await git.getStatus();\n const updatedAnalysis = await autoCommit.analyzeChanges(updatedStatus);\n return interactiveCommit(git, autoCommit, updatedStatus, updatedAnalysis, options);\n\n case 'diff':\n const diff = await git.getDiffContent({ staged: true });\n console.log();\n console.log(chalk.cyan.bold(' Staged Diff:'));\n console.log(chalk.gray(' ---'));\n if (diff) {\n diff.split('\\n').slice(0, 50).forEach(line => {\n if (line.startsWith('+') && !line.startsWith('+++')) {\n console.log(chalk.green(` ${line}`));\n } else if (line.startsWith('-') && !line.startsWith('---')) {\n console.log(chalk.red(` ${line}`));\n } else {\n console.log(chalk.gray(` ${line}`));\n }\n });\n if (diff.split('\\n').length > 50) {\n console.log(chalk.gray(' ... (truncated)'));\n }\n } else {\n console.log(chalk.gray(' No staged changes'));\n }\n console.log(chalk.gray(' ---'));\n console.log();\n return interactiveCommit(git, autoCommit, status, analysis, options);\n\n case 'cancel':\n default:\n console.log(chalk.yellow('\\n Commit cancelled.\\n'));\n return false;\n }\n}\n\n/**\n * Perform the actual commit\n */\nasync function performCommit(\n git: GitClient,\n autoCommit: AutoCommit,\n message: string,\n options: CommitOptions\n): Promise<boolean> {\n const spinner = ora('Creating commit...').start();\n\n try {\n const result = await autoCommit.commit({\n message,\n stageAll: options.all,\n dryRun: options.dryRun,\n });\n\n if (options.dryRun) {\n spinner.info('Dry run - no commit created');\n console.log();\n console.log(chalk.cyan(' Would commit with message:'));\n console.log(chalk.gray(' ---'));\n message.split('\\n').forEach(line => {\n console.log(chalk.white(` ${line}`));\n });\n console.log(chalk.gray(' ---'));\n console.log();\n return true;\n }\n\n if (!result.success) {\n spinner.fail('Commit failed');\n console.error(chalk.red(` Error: ${result.error}`));\n return false;\n }\n\n spinner.succeed('Commit created');\n console.log();\n console.log(chalk.white(` Hash: ${chalk.green(result.hash || 'unknown')}`));\n console.log();\n\n // Push if requested\n if (options.push) {\n const pushSpinner = ora('Pushing to remote...').start();\n try {\n await git.push();\n pushSpinner.succeed('Pushed to remote');\n } catch (error) {\n pushSpinner.fail('Push failed');\n console.error(chalk.red(` Error: ${error instanceof Error ? error.message : String(error)}`));\n return false;\n }\n }\n\n return true;\n } catch (error) {\n spinner.fail('Commit failed');\n console.error(chalk.red(` Error: ${error instanceof Error ? error.message : String(error)}`));\n return false;\n }\n}\n\n/**\n * Create commit command\n */\nexport function createCommitCommand(): Command {\n const command = new Command('commit');\n\n command\n .description('Create a git commit with optional auto-generated message')\n .option('-m, --message <message>', 'Commit message (skips auto-generation)')\n .option('-n, --dry-run', 'Show what would be committed without committing', false)\n .option('-a, --auto', 'Automatically generate commit message', false)\n .option('-p, --push', 'Push to remote after committing', false)\n .option('--path <path>', 'Repository path', '.')\n .option('-i, --interactive', 'Interactive mode for reviewing changes', false)\n .option('-A, --all', 'Stage all changes before committing', false)\n .option('--amend', 'Amend the previous commit', false)\n .action(async (options: CommitOptions) => {\n try {\n // Validate path\n const projectRoot = validateProjectRoot(options.path);\n\n // Create clients\n const git = createGitClient({ workingDirectory: projectRoot });\n const autoCommit = createAutoCommit({\n workingDirectory: projectRoot,\n stageAll: options.all,\n });\n\n // Check if this is a git repository\n if (!(await git.isRepo())) {\n console.error(chalk.red('\\n Error: Not a git repository\\n'));\n process.exit(1);\n }\n\n // Get current status\n const status = await git.getStatus();\n\n // Handle clean working directory\n if (status.isClean && !options.amend) {\n console.log(chalk.yellow('\\n Nothing to commit, working tree clean\\n'));\n process.exit(0);\n }\n\n // Analyze changes\n const analysis = await autoCommit.analyzeChanges(status);\n\n // Interactive mode\n if (options.interactive) {\n const success = await interactiveCommit(git, autoCommit, status, analysis, options);\n process.exit(success ? 0 : 1);\n }\n\n // If message provided, use it directly\n if (options.message) {\n const success = await performCommit(git, autoCommit, options.message, options);\n process.exit(success ? 0 : 1);\n }\n\n // Auto mode - generate and commit\n if (options.auto) {\n const message = autoCommit.generateCommitMessage(analysis);\n const success = await performCommit(git, autoCommit, message, options);\n process.exit(success ? 0 : 1);\n }\n\n // Default: show status and suggested message\n formatStatus(status);\n formatAnalysis(analysis);\n\n const suggestedMessage = autoCommit.generateCommitMessage(analysis);\n\n console.log(chalk.cyan.bold(' Suggested Commit Message:'));\n console.log();\n console.log(chalk.gray(' ---'));\n suggestedMessage.split('\\n').forEach(line => {\n console.log(chalk.white(` ${line}`));\n });\n console.log(chalk.gray(' ---'));\n console.log();\n\n console.log(chalk.gray(' Use -a/--auto to commit with this message'));\n console.log(chalk.gray(' Use -i/--interactive for interactive mode'));\n console.log(chalk.gray(' Use -m/--message to provide your own message'));\n console.log();\n\n } catch (error) {\n console.error(chalk.red(`\\n Error: ${error instanceof Error ? error.message : String(error)}\\n`));\n process.exit(1);\n }\n });\n\n // Status subcommand\n command\n .command('status')\n .description('Show git status with analysis')\n .option('--path <path>', 'Repository path', '.')\n .action(async (opts) => {\n try {\n const projectRoot = validateProjectRoot(opts.path);\n const git = createGitClient({ workingDirectory: projectRoot });\n const autoCommit = createAutoCommit({ workingDirectory: projectRoot });\n\n if (!(await git.isRepo())) {\n console.error(chalk.red('\\n Error: Not a git repository\\n'));\n process.exit(1);\n }\n\n const status = await git.getStatus();\n formatStatus(status);\n\n if (!status.isClean) {\n const analysis = await autoCommit.analyzeChanges(status);\n formatAnalysis(analysis);\n }\n } catch (error) {\n console.error(chalk.red(`\\n Error: ${error instanceof Error ? error.message : String(error)}\\n`));\n process.exit(1);\n }\n });\n\n // Log subcommand\n command\n .command('log')\n .description('Show recent commits')\n .option('--path <path>', 'Repository path', '.')\n .option('-n, --count <count>', 'Number of commits to show', '10')\n .action(async (opts) => {\n try {\n const projectRoot = validateProjectRoot(opts.path);\n const git = createGitClient({ workingDirectory: projectRoot });\n\n if (!(await git.isRepo())) {\n console.error(chalk.red('\\n Error: Not a git repository\\n'));\n process.exit(1);\n }\n\n const log = await git.getLog({ maxCount: parseInt(opts.count, 10) });\n\n console.log();\n console.log(chalk.cyan.bold(' Recent Commits'));\n console.log();\n\n log.forEach(commit => {\n const date = commit.date.toISOString().split('T')[0];\n console.log(chalk.yellow(` ${commit.hashAbbrev}`) + chalk.gray(` (${date})`) + chalk.white(` ${commit.message}`));\n console.log(chalk.gray(` ${commit.author} <${commit.email}>`));\n });\n\n console.log();\n } catch (error) {\n console.error(chalk.red(`\\n Error: ${error instanceof Error ? error.message : String(error)}\\n`));\n process.exit(1);\n }\n });\n\n // Diff subcommand\n command\n .command('diff')\n .description('Show diff of changes')\n .option('--path <path>', 'Repository path', '.')\n .option('-s, --staged', 'Show only staged changes', false)\n .option('-f, --file <file>', 'Show diff for specific file')\n .action(async (opts) => {\n try {\n const projectRoot = validateProjectRoot(opts.path);\n const git = createGitClient({ workingDirectory: projectRoot });\n\n if (!(await git.isRepo())) {\n console.error(chalk.red('\\n Error: Not a git repository\\n'));\n process.exit(1);\n }\n\n const diff = await git.getDiffContent({\n staged: opts.staged,\n file: opts.file,\n });\n\n if (!diff) {\n console.log(chalk.yellow('\\n No changes to show\\n'));\n process.exit(0);\n }\n\n console.log();\n diff.split('\\n').forEach(line => {\n if (line.startsWith('+') && !line.startsWith('+++')) {\n console.log(chalk.green(line));\n } else if (line.startsWith('-') && !line.startsWith('---')) {\n console.log(chalk.red(line));\n } else if (line.startsWith('@@')) {\n console.log(chalk.cyan(line));\n } else if (line.startsWith('diff ') || line.startsWith('index ')) {\n console.log(chalk.blue(line));\n } else {\n console.log(line);\n }\n });\n console.log();\n } catch (error) {\n console.error(chalk.red(`\\n Error: ${error instanceof Error ? error.message : String(error)}\\n`));\n process.exit(1);\n }\n });\n\n return command;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,IAAI,OAAO,CA8H7C"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { createConfigManager, getDefaultConfig } from "../../config/index.js";
|
|
4
|
+
function createConfigCommand() {
|
|
5
|
+
const config = new Command("config").description("Manage knowledge graph configuration");
|
|
6
|
+
config.command("show").description("Show current configuration").option("--json", "Output as JSON").action(async (options) => {
|
|
7
|
+
try {
|
|
8
|
+
const manager = createConfigManager();
|
|
9
|
+
await manager.load();
|
|
10
|
+
const currentConfig = manager.get();
|
|
11
|
+
if (options.json) {
|
|
12
|
+
console.log(JSON.stringify(currentConfig, null, 2));
|
|
13
|
+
} else {
|
|
14
|
+
console.log(chalk.cyan.bold("\nKnowledge Graph Configuration\n"));
|
|
15
|
+
console.log(chalk.white("Database:"));
|
|
16
|
+
console.log(chalk.gray(` Path: ${currentConfig.database.path}`));
|
|
17
|
+
console.log(chalk.gray(` WAL Mode: ${currentConfig.database.walMode}`));
|
|
18
|
+
console.log(chalk.gray(` Cache Size: ${currentConfig.database.cacheSize} pages`));
|
|
19
|
+
if (currentConfig.cache) {
|
|
20
|
+
console.log(chalk.white("\nCache:"));
|
|
21
|
+
console.log(chalk.gray(` Enabled: ${currentConfig.cache.enabled}`));
|
|
22
|
+
console.log(chalk.gray(` Max Size: ${(currentConfig.cache.maxSize || 0) / (1024 * 1024)}MB`));
|
|
23
|
+
console.log(chalk.gray(` Policy: ${currentConfig.cache.evictionPolicy}`));
|
|
24
|
+
}
|
|
25
|
+
if (currentConfig.logging) {
|
|
26
|
+
console.log(chalk.white("\nLogging:"));
|
|
27
|
+
console.log(chalk.gray(` Level: ${currentConfig.logging.level}`));
|
|
28
|
+
console.log(chalk.gray(` Format: ${currentConfig.logging.format}`));
|
|
29
|
+
}
|
|
30
|
+
console.log("");
|
|
31
|
+
}
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.error(chalk.red("Error reading configuration:"), error);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
config.command("set <key> <value>").description("Set a configuration value").action(async (key, value) => {
|
|
38
|
+
try {
|
|
39
|
+
const manager = createConfigManager();
|
|
40
|
+
await manager.load();
|
|
41
|
+
const parts = key.split(".");
|
|
42
|
+
const updates = {};
|
|
43
|
+
if (parts[0] === "database" && parts[1]) {
|
|
44
|
+
updates.database = { path: "", [parts[1]]: parseValue(value) };
|
|
45
|
+
} else if (parts[0] === "cache" && parts[1]) {
|
|
46
|
+
updates.cache = { enabled: true, [parts[1]]: parseValue(value) };
|
|
47
|
+
} else if (parts[0] === "logging" && parts[1]) {
|
|
48
|
+
updates.logging = { level: "info", [parts[1]]: parseValue(value) };
|
|
49
|
+
} else {
|
|
50
|
+
updates[key] = parseValue(value);
|
|
51
|
+
}
|
|
52
|
+
manager.update(updates);
|
|
53
|
+
await manager.save();
|
|
54
|
+
console.log(chalk.green(`Configuration updated: ${key} = ${value}`));
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error(chalk.red("Error updating configuration:"), error);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
config.command("reset").description("Reset configuration to defaults").option("-y, --yes", "Skip confirmation").action(async (options) => {
|
|
61
|
+
try {
|
|
62
|
+
const manager = createConfigManager();
|
|
63
|
+
manager.reset();
|
|
64
|
+
await manager.save();
|
|
65
|
+
console.log(chalk.green("Configuration reset to defaults"));
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error(chalk.red("Error resetting configuration:"), error);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
config.command("validate").description("Validate current configuration").action(async () => {
|
|
72
|
+
try {
|
|
73
|
+
const manager = createConfigManager();
|
|
74
|
+
await manager.load();
|
|
75
|
+
const result = manager.validate();
|
|
76
|
+
if (result.valid) {
|
|
77
|
+
console.log(chalk.green("Configuration is valid"));
|
|
78
|
+
} else {
|
|
79
|
+
console.log(chalk.red("Configuration has errors:"));
|
|
80
|
+
result.errors.forEach((err) => {
|
|
81
|
+
console.log(chalk.yellow(` - ${err}`));
|
|
82
|
+
});
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.error(chalk.red("Error validating configuration:"), error);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
config.command("defaults").description("Show default configuration values").action(() => {
|
|
91
|
+
const defaults = getDefaultConfig();
|
|
92
|
+
console.log(chalk.cyan.bold("\nDefault Configuration:\n"));
|
|
93
|
+
console.log(JSON.stringify(defaults, null, 2));
|
|
94
|
+
});
|
|
95
|
+
return config;
|
|
96
|
+
}
|
|
97
|
+
function parseValue(value) {
|
|
98
|
+
if (value === "true") return true;
|
|
99
|
+
if (value === "false") return false;
|
|
100
|
+
const num = Number(value);
|
|
101
|
+
if (!isNaN(num)) return num;
|
|
102
|
+
return value;
|
|
103
|
+
}
|
|
104
|
+
export {
|
|
105
|
+
createConfigCommand
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/cli/commands/config.ts"],"sourcesContent":["/**\n * Config Command\n *\n * Manage knowledge graph configuration.\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createConfigManager, getDefaultConfig } from '../../config/index.js';\nimport type { KGConfiguration } from '../../config/index.js';\n\nexport function createConfigCommand(): Command {\n const config = new Command('config')\n .description('Manage knowledge graph configuration');\n\n config\n .command('show')\n .description('Show current configuration')\n .option('--json', 'Output as JSON')\n .action(async (options) => {\n try {\n const manager = createConfigManager();\n await manager.load();\n const currentConfig = manager.get();\n\n if (options.json) {\n console.log(JSON.stringify(currentConfig, null, 2));\n } else {\n console.log(chalk.cyan.bold('\\nKnowledge Graph Configuration\\n'));\n console.log(chalk.white('Database:'));\n console.log(chalk.gray(` Path: ${currentConfig.database.path}`));\n console.log(chalk.gray(` WAL Mode: ${currentConfig.database.walMode}`));\n console.log(chalk.gray(` Cache Size: ${currentConfig.database.cacheSize} pages`));\n\n if (currentConfig.cache) {\n console.log(chalk.white('\\nCache:'));\n console.log(chalk.gray(` Enabled: ${currentConfig.cache.enabled}`));\n console.log(chalk.gray(` Max Size: ${(currentConfig.cache.maxSize || 0) / (1024 * 1024)}MB`));\n console.log(chalk.gray(` Policy: ${currentConfig.cache.evictionPolicy}`));\n }\n\n if (currentConfig.logging) {\n console.log(chalk.white('\\nLogging:'));\n console.log(chalk.gray(` Level: ${currentConfig.logging.level}`));\n console.log(chalk.gray(` Format: ${currentConfig.logging.format}`));\n }\n\n console.log('');\n }\n } catch (error) {\n console.error(chalk.red('Error reading configuration:'), error);\n process.exit(1);\n }\n });\n\n config\n .command('set <key> <value>')\n .description('Set a configuration value')\n .action(async (key: string, value: string) => {\n try {\n const manager = createConfigManager();\n await manager.load();\n\n // Parse the key path (e.g., 'database.path')\n const parts = key.split('.');\n const updates: Partial<KGConfiguration> = {};\n\n if (parts[0] === 'database' && parts[1]) {\n updates.database = { path: '', [parts[1]]: parseValue(value) } as any;\n } else if (parts[0] === 'cache' && parts[1]) {\n updates.cache = { enabled: true, [parts[1]]: parseValue(value) } as any;\n } else if (parts[0] === 'logging' && parts[1]) {\n updates.logging = { level: 'info', [parts[1]]: parseValue(value) } as any;\n } else {\n (updates as any)[key] = parseValue(value);\n }\n\n manager.update(updates);\n await manager.save();\n\n console.log(chalk.green(`Configuration updated: ${key} = ${value}`));\n } catch (error) {\n console.error(chalk.red('Error updating configuration:'), error);\n process.exit(1);\n }\n });\n\n config\n .command('reset')\n .description('Reset configuration to defaults')\n .option('-y, --yes', 'Skip confirmation')\n .action(async (options) => {\n try {\n const manager = createConfigManager();\n manager.reset();\n await manager.save();\n console.log(chalk.green('Configuration reset to defaults'));\n } catch (error) {\n console.error(chalk.red('Error resetting configuration:'), error);\n process.exit(1);\n }\n });\n\n config\n .command('validate')\n .description('Validate current configuration')\n .action(async () => {\n try {\n const manager = createConfigManager();\n await manager.load();\n const result = manager.validate();\n\n if (result.valid) {\n console.log(chalk.green('Configuration is valid'));\n } else {\n console.log(chalk.red('Configuration has errors:'));\n result.errors.forEach((err: string) => {\n console.log(chalk.yellow(` - ${err}`));\n });\n process.exit(1);\n }\n } catch (error) {\n console.error(chalk.red('Error validating configuration:'), error);\n process.exit(1);\n }\n });\n\n config\n .command('defaults')\n .description('Show default configuration values')\n .action(() => {\n const defaults = getDefaultConfig();\n console.log(chalk.cyan.bold('\\nDefault Configuration:\\n'));\n console.log(JSON.stringify(defaults, null, 2));\n });\n\n return config;\n}\n\nfunction parseValue(value: string): string | number | boolean {\n if (value === 'true') return true;\n if (value === 'false') return false;\n const num = Number(value);\n if (!isNaN(num)) return num;\n return value;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cultivate Command - Systematically enhance the knowledge graph
|
|
3
|
+
*
|
|
4
|
+
* This command provides cultivation tasks:
|
|
5
|
+
* - Seed primitives from codebase analysis
|
|
6
|
+
* - Deep analysis with claude-flow integration
|
|
7
|
+
* - Graph enhancement and optimization
|
|
8
|
+
*
|
|
9
|
+
* @module cli/commands/cultivate
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
/**
|
|
13
|
+
* Create cultivate command
|
|
14
|
+
*/
|
|
15
|
+
export declare function createCultivateCommand(): Command;
|
|
16
|
+
//# sourceMappingURL=cultivate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cultivate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cultivate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA4OhD"}
|