@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,577 @@
|
|
|
1
|
+
import { createWorkflowConfig } from "../config.js";
|
|
2
|
+
import { createGOAPAdapter } from "../adapters/goap-adapter.js";
|
|
3
|
+
import { createWebhookRegistry, createFileWatcherIntegration } from "../handlers/webhook-handlers.js";
|
|
4
|
+
import { createLogger } from "../../utils/logger.js";
|
|
5
|
+
const logger = createLogger("workflow-service");
|
|
6
|
+
class WorkflowService {
|
|
7
|
+
config;
|
|
8
|
+
goapAdapter;
|
|
9
|
+
webhookRegistry;
|
|
10
|
+
fileWatcher;
|
|
11
|
+
isRunning = false;
|
|
12
|
+
activeWorkflows = /* @__PURE__ */ new Map();
|
|
13
|
+
lastActivity;
|
|
14
|
+
executionStats = {
|
|
15
|
+
totalExecutions: 0,
|
|
16
|
+
successfulExecutions: 0,
|
|
17
|
+
failedExecutions: 0,
|
|
18
|
+
totalDuration: 0
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Create a new workflow service
|
|
22
|
+
*
|
|
23
|
+
* @param config - Service configuration options
|
|
24
|
+
*/
|
|
25
|
+
constructor(config = {}) {
|
|
26
|
+
this.config = this.resolveConfig(config);
|
|
27
|
+
this.goapAdapter = createGOAPAdapter();
|
|
28
|
+
this.webhookRegistry = createWebhookRegistry({
|
|
29
|
+
secret: this.config.webhookSecret,
|
|
30
|
+
maxPayloadSize: this.config.maxPayloadSize
|
|
31
|
+
});
|
|
32
|
+
this.fileWatcher = createFileWatcherIntegration(this.webhookRegistry, {
|
|
33
|
+
inactivityThreshold: this.config.inactivityTimeout
|
|
34
|
+
});
|
|
35
|
+
this.setupEventHandlers();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve configuration with defaults
|
|
39
|
+
*/
|
|
40
|
+
resolveConfig(config) {
|
|
41
|
+
return {
|
|
42
|
+
workflow: config.workflow ?? createWorkflowConfig(),
|
|
43
|
+
inactivityTimeout: config.inactivityTimeout ?? 5 * 60 * 1e3,
|
|
44
|
+
autoStartThreshold: config.autoStartThreshold ?? 0.7,
|
|
45
|
+
watchPaths: config.watchPaths ?? [],
|
|
46
|
+
debug: config.debug ?? false,
|
|
47
|
+
webhookSecret: config.webhookSecret,
|
|
48
|
+
maxPayloadSize: config.maxPayloadSize ?? 1024 * 1024
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Setup event handlers for workflow triggers
|
|
53
|
+
*/
|
|
54
|
+
setupEventHandlers() {
|
|
55
|
+
this.webhookRegistry.on("file:changed", async (event) => {
|
|
56
|
+
if (event.type === "file:changed") {
|
|
57
|
+
logger.debug("File changed event received", { path: event.path });
|
|
58
|
+
this.lastActivity = /* @__PURE__ */ new Date();
|
|
59
|
+
await this.onDocumentChange(event.path);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
this.webhookRegistry.on("file:created", async (event) => {
|
|
63
|
+
if (event.type === "file:created") {
|
|
64
|
+
logger.debug("File created event received", { path: event.path });
|
|
65
|
+
this.lastActivity = /* @__PURE__ */ new Date();
|
|
66
|
+
await this.onDocumentChange(event.path);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
this.webhookRegistry.on("file:deleted", async (event) => {
|
|
70
|
+
if (event.type === "file:deleted") {
|
|
71
|
+
logger.debug("File deleted event received", { path: event.path });
|
|
72
|
+
this.lastActivity = /* @__PURE__ */ new Date();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
this.webhookRegistry.on("timeout:inactivity", async (event) => {
|
|
76
|
+
if (event.type === "timeout:inactivity") {
|
|
77
|
+
logger.info("Inactivity timeout triggered", {
|
|
78
|
+
lastActivity: event.lastActivity,
|
|
79
|
+
threshold: event.threshold
|
|
80
|
+
});
|
|
81
|
+
await this.onInactivityTimeout();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// ==========================================================================
|
|
86
|
+
// Lifecycle Methods
|
|
87
|
+
// ==========================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Start the workflow service
|
|
90
|
+
*
|
|
91
|
+
* Begins watching configured paths and processing events.
|
|
92
|
+
*/
|
|
93
|
+
async start() {
|
|
94
|
+
if (this.isRunning) {
|
|
95
|
+
logger.warn("Workflow service is already running");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
logger.info("Starting workflow service", {
|
|
99
|
+
world: this.config.workflow.world,
|
|
100
|
+
watchPaths: this.config.watchPaths,
|
|
101
|
+
inactivityTimeout: this.config.inactivityTimeout
|
|
102
|
+
});
|
|
103
|
+
for (const path of this.config.watchPaths) {
|
|
104
|
+
this.fileWatcher.watch(path);
|
|
105
|
+
}
|
|
106
|
+
this.isRunning = true;
|
|
107
|
+
this.lastActivity = /* @__PURE__ */ new Date();
|
|
108
|
+
logger.info("Workflow service started");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Stop the workflow service
|
|
112
|
+
*
|
|
113
|
+
* Stops watching all paths and cleans up resources.
|
|
114
|
+
*/
|
|
115
|
+
async stop() {
|
|
116
|
+
if (!this.isRunning) {
|
|
117
|
+
logger.warn("Workflow service is not running");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
logger.info("Stopping workflow service");
|
|
121
|
+
this.fileWatcher.unwatchAll();
|
|
122
|
+
this.webhookRegistry.clear();
|
|
123
|
+
this.isRunning = false;
|
|
124
|
+
logger.info("Workflow service stopped");
|
|
125
|
+
}
|
|
126
|
+
// ==========================================================================
|
|
127
|
+
// Event Handlers
|
|
128
|
+
// ==========================================================================
|
|
129
|
+
/**
|
|
130
|
+
* Handle document change event
|
|
131
|
+
*
|
|
132
|
+
* Analyzes the changed document for gaps and potentially
|
|
133
|
+
* starts development if completeness threshold is met.
|
|
134
|
+
*/
|
|
135
|
+
async onDocumentChange(docPath) {
|
|
136
|
+
logger.debug("Processing document change", { docPath });
|
|
137
|
+
try {
|
|
138
|
+
const analysis = await this.analyzeGaps(docPath);
|
|
139
|
+
if (analysis.completeness >= this.config.autoStartThreshold) {
|
|
140
|
+
logger.info("Completeness threshold met, generating task spec", {
|
|
141
|
+
completeness: analysis.completeness,
|
|
142
|
+
threshold: this.config.autoStartThreshold
|
|
143
|
+
});
|
|
144
|
+
await this.generateTaskSpec(docPath, analysis);
|
|
145
|
+
} else {
|
|
146
|
+
logger.debug("Waiting for more documentation", {
|
|
147
|
+
completeness: analysis.completeness,
|
|
148
|
+
threshold: this.config.autoStartThreshold,
|
|
149
|
+
gaps: analysis.gaps.length
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
} catch (err) {
|
|
153
|
+
const actualError = err instanceof Error ? err : new Error(String(err));
|
|
154
|
+
logger.error(`Failed to process document change: ${docPath}`, actualError);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Handle inactivity timeout
|
|
159
|
+
*
|
|
160
|
+
* Checks for incomplete documentation and generates
|
|
161
|
+
* missing content when idle.
|
|
162
|
+
*/
|
|
163
|
+
async onInactivityTimeout() {
|
|
164
|
+
logger.info("Inactivity timeout - checking for incomplete documentation");
|
|
165
|
+
const watchedPaths = this.fileWatcher.getWatchedPaths();
|
|
166
|
+
for (const path of watchedPaths) {
|
|
167
|
+
try {
|
|
168
|
+
const analysis = await this.analyzeGaps(path);
|
|
169
|
+
if (analysis.gaps.length > 0) {
|
|
170
|
+
logger.info("Found documentation gaps during inactivity", {
|
|
171
|
+
path,
|
|
172
|
+
gapCount: analysis.gaps.length
|
|
173
|
+
});
|
|
174
|
+
await this.generateMissingDocs(path, analysis);
|
|
175
|
+
}
|
|
176
|
+
} catch (err) {
|
|
177
|
+
const actualError = err instanceof Error ? err : new Error(String(err));
|
|
178
|
+
logger.error(`Failed to analyze path during inactivity: ${path}`, actualError);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// ==========================================================================
|
|
183
|
+
// Workflow Execution
|
|
184
|
+
// ==========================================================================
|
|
185
|
+
/**
|
|
186
|
+
* Start a collaboration workflow for a graph/document
|
|
187
|
+
*
|
|
188
|
+
* @param graphId - Knowledge graph identifier
|
|
189
|
+
* @param docPath - Path to the document
|
|
190
|
+
* @returns Workflow execution result
|
|
191
|
+
*/
|
|
192
|
+
async startCollaborationWorkflow(graphId, docPath) {
|
|
193
|
+
const workflowId = this.generateWorkflowId("collab");
|
|
194
|
+
const startedAt = /* @__PURE__ */ new Date();
|
|
195
|
+
logger.info("Starting collaboration workflow", { workflowId, graphId, docPath });
|
|
196
|
+
const metadata = {
|
|
197
|
+
id: workflowId,
|
|
198
|
+
type: "realtime-collab",
|
|
199
|
+
startedAt,
|
|
200
|
+
status: "running",
|
|
201
|
+
currentStep: "initialize",
|
|
202
|
+
lastEventAt: startedAt
|
|
203
|
+
};
|
|
204
|
+
this.activeWorkflows.set(workflowId, metadata);
|
|
205
|
+
this.executionStats.totalExecutions++;
|
|
206
|
+
try {
|
|
207
|
+
const worldState = await this.initializeWorldState(docPath);
|
|
208
|
+
const plan = this.goapAdapter.createPlan(worldState, "start-development");
|
|
209
|
+
if (!plan.achievable) {
|
|
210
|
+
logger.warn("Goal not achievable with current state", {
|
|
211
|
+
worldState,
|
|
212
|
+
reason: plan.goal
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
metadata.currentStep = "executing-plan";
|
|
216
|
+
metadata.lastEventAt = /* @__PURE__ */ new Date();
|
|
217
|
+
const execution = await this.goapAdapter.executePlan(plan, worldState);
|
|
218
|
+
const completedAt = /* @__PURE__ */ new Date();
|
|
219
|
+
const duration = completedAt.getTime() - startedAt.getTime();
|
|
220
|
+
if (execution.success) {
|
|
221
|
+
this.executionStats.successfulExecutions++;
|
|
222
|
+
metadata.status = "completed";
|
|
223
|
+
} else {
|
|
224
|
+
this.executionStats.failedExecutions++;
|
|
225
|
+
metadata.status = "failed";
|
|
226
|
+
}
|
|
227
|
+
this.executionStats.totalDuration += duration;
|
|
228
|
+
metadata.lastEventAt = completedAt;
|
|
229
|
+
logger.info("Collaboration workflow completed", {
|
|
230
|
+
workflowId,
|
|
231
|
+
success: execution.success,
|
|
232
|
+
duration,
|
|
233
|
+
completedSteps: execution.completedSteps.length
|
|
234
|
+
});
|
|
235
|
+
return {
|
|
236
|
+
success: execution.success,
|
|
237
|
+
workflowId,
|
|
238
|
+
startedAt,
|
|
239
|
+
completedAt,
|
|
240
|
+
outcome: execution.success ? "completed" : "failed",
|
|
241
|
+
artifacts: execution.completedSteps,
|
|
242
|
+
error: execution.error
|
|
243
|
+
};
|
|
244
|
+
} catch (error) {
|
|
245
|
+
const completedAt = /* @__PURE__ */ new Date();
|
|
246
|
+
const duration = completedAt.getTime() - startedAt.getTime();
|
|
247
|
+
metadata.status = "failed";
|
|
248
|
+
metadata.lastEventAt = completedAt;
|
|
249
|
+
this.executionStats.failedExecutions++;
|
|
250
|
+
this.executionStats.totalDuration += duration;
|
|
251
|
+
const actualError = error instanceof Error ? error : new Error(String(error));
|
|
252
|
+
logger.error(`Workflow execution failed: ${workflowId}`, actualError);
|
|
253
|
+
return {
|
|
254
|
+
success: false,
|
|
255
|
+
workflowId,
|
|
256
|
+
startedAt,
|
|
257
|
+
completedAt,
|
|
258
|
+
outcome: "failed",
|
|
259
|
+
error: actualError.message
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// ==========================================================================
|
|
264
|
+
// World State & Planning
|
|
265
|
+
// ==========================================================================
|
|
266
|
+
/**
|
|
267
|
+
* Initialize world state from a document
|
|
268
|
+
*
|
|
269
|
+
* @param docPath - Path to the document
|
|
270
|
+
* @returns Initial world state for planning
|
|
271
|
+
*/
|
|
272
|
+
async initializeWorldState(docPath) {
|
|
273
|
+
return {
|
|
274
|
+
hasSpecification: true,
|
|
275
|
+
specCompleteness: 0,
|
|
276
|
+
hasAcceptanceCriteria: false,
|
|
277
|
+
taskDefined: false,
|
|
278
|
+
blockersFree: true,
|
|
279
|
+
developmentStarted: false,
|
|
280
|
+
timeSinceLastChange: 0,
|
|
281
|
+
lastChangeTimestamp: Date.now(),
|
|
282
|
+
activeCollaborators: [],
|
|
283
|
+
pendingGaps: []
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Create a GOAP plan for a goal
|
|
288
|
+
*
|
|
289
|
+
* @param goal - Goal identifier
|
|
290
|
+
* @returns Generated plan
|
|
291
|
+
*/
|
|
292
|
+
async createPlan(goal) {
|
|
293
|
+
const worldState = await this.initializeWorldState("");
|
|
294
|
+
return this.goapAdapter.createPlan(worldState, goal);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Evaluate readiness for development
|
|
298
|
+
*
|
|
299
|
+
* @param docPath - Path to the document
|
|
300
|
+
* @returns Readiness evaluation
|
|
301
|
+
*/
|
|
302
|
+
async evaluateReadiness(docPath) {
|
|
303
|
+
const worldState = await this.initializeWorldState(docPath);
|
|
304
|
+
const analysis = await this.analyzeGaps(docPath);
|
|
305
|
+
worldState.specCompleteness = analysis.completeness;
|
|
306
|
+
worldState.hasAcceptanceCriteria = analysis.completeness >= 0.5;
|
|
307
|
+
worldState.pendingGaps = analysis.gaps.map((g) => g.description);
|
|
308
|
+
return this.goapAdapter.evaluateReadiness(worldState);
|
|
309
|
+
}
|
|
310
|
+
// ==========================================================================
|
|
311
|
+
// Gap Analysis & Documentation
|
|
312
|
+
// ==========================================================================
|
|
313
|
+
/**
|
|
314
|
+
* Analyze document for gaps
|
|
315
|
+
*
|
|
316
|
+
* @param docPath - Path to analyze
|
|
317
|
+
* @returns Gap analysis result
|
|
318
|
+
*/
|
|
319
|
+
async analyzeGaps(docPath) {
|
|
320
|
+
logger.debug("Analyzing gaps", { docPath });
|
|
321
|
+
const requiredSections = [
|
|
322
|
+
"overview",
|
|
323
|
+
"requirements",
|
|
324
|
+
"acceptance-criteria",
|
|
325
|
+
"technical-spec"
|
|
326
|
+
];
|
|
327
|
+
const foundCount = Math.floor(Math.random() * requiredSections.length) + 1;
|
|
328
|
+
const completeness = foundCount / requiredSections.length;
|
|
329
|
+
const gaps = [];
|
|
330
|
+
for (let i = foundCount; i < requiredSections.length; i++) {
|
|
331
|
+
gaps.push({
|
|
332
|
+
type: "missing_section",
|
|
333
|
+
description: `Missing ${requiredSections[i]} section`,
|
|
334
|
+
severity: "high",
|
|
335
|
+
suggestedContent: `# ${requiredSections[i]}
|
|
336
|
+
|
|
337
|
+
Content to be filled in.`
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
const recommendations = gaps.map(
|
|
341
|
+
(g) => `Add ${g.description.toLowerCase()}`
|
|
342
|
+
);
|
|
343
|
+
return {
|
|
344
|
+
docPath,
|
|
345
|
+
completeness,
|
|
346
|
+
gaps,
|
|
347
|
+
recommendations,
|
|
348
|
+
analyzedAt: /* @__PURE__ */ new Date()
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Generate task specification from documentation
|
|
353
|
+
*
|
|
354
|
+
* @param docPath - Path to the source document
|
|
355
|
+
* @param analysis - Gap analysis results
|
|
356
|
+
* @returns Generated task specification
|
|
357
|
+
*/
|
|
358
|
+
async generateTaskSpec(docPath, analysis) {
|
|
359
|
+
logger.info("Generating task spec", { docPath, completeness: analysis.completeness });
|
|
360
|
+
const priority = this.determinePriority(analysis.completeness);
|
|
361
|
+
const complexity = this.estimateComplexity(analysis);
|
|
362
|
+
const spec = {
|
|
363
|
+
id: `task-${Date.now()}`,
|
|
364
|
+
version: "1.0.0",
|
|
365
|
+
title: `Task from ${this.extractFilename(docPath)}`,
|
|
366
|
+
description: "Auto-generated task specification from documentation analysis",
|
|
367
|
+
priority,
|
|
368
|
+
requirements: this.extractRequirements(analysis),
|
|
369
|
+
acceptanceCriteria: this.generateAcceptanceCriteria(analysis),
|
|
370
|
+
estimatedComplexity: complexity,
|
|
371
|
+
sourceDoc: docPath,
|
|
372
|
+
generatedAt: /* @__PURE__ */ new Date(),
|
|
373
|
+
confidence: analysis.completeness
|
|
374
|
+
};
|
|
375
|
+
logger.debug("Task spec generated", { specId: spec.id, priority, complexity });
|
|
376
|
+
return spec;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Generate missing documentation
|
|
380
|
+
*
|
|
381
|
+
* @param docPath - Path to the document
|
|
382
|
+
* @param analysis - Gap analysis results
|
|
383
|
+
* @returns List of generated content
|
|
384
|
+
*/
|
|
385
|
+
async generateMissingDocs(docPath, analysis) {
|
|
386
|
+
logger.info("Generating missing docs", {
|
|
387
|
+
docPath,
|
|
388
|
+
gapCount: analysis.gaps.length
|
|
389
|
+
});
|
|
390
|
+
const generatedDocs = [];
|
|
391
|
+
for (const gap of analysis.gaps) {
|
|
392
|
+
const content = gap.suggestedContent || `# ${gap.description}
|
|
393
|
+
|
|
394
|
+
This section needs to be completed.
|
|
395
|
+
`;
|
|
396
|
+
generatedDocs.push(content);
|
|
397
|
+
}
|
|
398
|
+
return generatedDocs;
|
|
399
|
+
}
|
|
400
|
+
// ==========================================================================
|
|
401
|
+
// Helper Methods
|
|
402
|
+
// ==========================================================================
|
|
403
|
+
/**
|
|
404
|
+
* Generate a unique workflow ID
|
|
405
|
+
*/
|
|
406
|
+
generateWorkflowId(prefix) {
|
|
407
|
+
const timestamp = Date.now();
|
|
408
|
+
const random = Math.random().toString(36).substring(2, 11);
|
|
409
|
+
return `${prefix}-${timestamp}-${random}`;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Extract filename from path
|
|
413
|
+
*/
|
|
414
|
+
extractFilename(path) {
|
|
415
|
+
const parts = path.split("/");
|
|
416
|
+
return parts[parts.length - 1] || "unknown";
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Determine priority based on completeness
|
|
420
|
+
*/
|
|
421
|
+
determinePriority(completeness) {
|
|
422
|
+
if (completeness >= 0.9) return "high";
|
|
423
|
+
if (completeness >= 0.7) return "medium";
|
|
424
|
+
if (completeness >= 0.5) return "low";
|
|
425
|
+
return "critical";
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Estimate complexity from analysis
|
|
429
|
+
*/
|
|
430
|
+
estimateComplexity(analysis) {
|
|
431
|
+
const baseComplexity = Math.ceil((1 - analysis.completeness) * 10);
|
|
432
|
+
const gapComplexity = analysis.gaps.length;
|
|
433
|
+
return Math.min(10, Math.max(1, baseComplexity + gapComplexity));
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Extract requirements from analysis
|
|
437
|
+
*/
|
|
438
|
+
extractRequirements(analysis) {
|
|
439
|
+
const requirements = analysis.recommendations.slice();
|
|
440
|
+
if (requirements.length === 0) {
|
|
441
|
+
requirements.push("Complete specification document");
|
|
442
|
+
}
|
|
443
|
+
return requirements;
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Generate acceptance criteria from analysis
|
|
447
|
+
*/
|
|
448
|
+
generateAcceptanceCriteria(analysis) {
|
|
449
|
+
const criteria = [
|
|
450
|
+
"Documentation is complete",
|
|
451
|
+
"All tests pass",
|
|
452
|
+
`Completeness score >= ${this.config.autoStartThreshold}`
|
|
453
|
+
];
|
|
454
|
+
if (analysis.gaps.length > 0) {
|
|
455
|
+
criteria.push(`All ${analysis.gaps.length} gaps are addressed`);
|
|
456
|
+
}
|
|
457
|
+
return criteria;
|
|
458
|
+
}
|
|
459
|
+
// ==========================================================================
|
|
460
|
+
// Public API
|
|
461
|
+
// ==========================================================================
|
|
462
|
+
/**
|
|
463
|
+
* Add a path to watch
|
|
464
|
+
*
|
|
465
|
+
* @param path - Path to watch for changes
|
|
466
|
+
*/
|
|
467
|
+
watch(path) {
|
|
468
|
+
this.fileWatcher.watch(path);
|
|
469
|
+
this.config.watchPaths.push(path);
|
|
470
|
+
logger.debug("Added watch path", { path });
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Stop watching a path
|
|
474
|
+
*
|
|
475
|
+
* @param path - Path to stop watching
|
|
476
|
+
*/
|
|
477
|
+
unwatch(path) {
|
|
478
|
+
this.fileWatcher.unwatch(path);
|
|
479
|
+
const index = this.config.watchPaths.indexOf(path);
|
|
480
|
+
if (index > -1) {
|
|
481
|
+
this.config.watchPaths.splice(index, 1);
|
|
482
|
+
}
|
|
483
|
+
logger.debug("Removed watch path", { path });
|
|
484
|
+
}
|
|
485
|
+
/**
|
|
486
|
+
* Get the webhook registry for external event handling
|
|
487
|
+
*
|
|
488
|
+
* @returns Webhook registry instance
|
|
489
|
+
*/
|
|
490
|
+
getWebhookRegistry() {
|
|
491
|
+
return this.webhookRegistry;
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Get the GOAP adapter for direct planning access
|
|
495
|
+
*
|
|
496
|
+
* @returns GOAP adapter instance
|
|
497
|
+
*/
|
|
498
|
+
getGOAPAdapter() {
|
|
499
|
+
return this.goapAdapter;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Emit a workflow trigger event
|
|
503
|
+
*
|
|
504
|
+
* @param event - Event to emit
|
|
505
|
+
*/
|
|
506
|
+
async emitEvent(event) {
|
|
507
|
+
await this.webhookRegistry.emit(event);
|
|
508
|
+
this.lastActivity = /* @__PURE__ */ new Date();
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Get service status
|
|
512
|
+
*
|
|
513
|
+
* @returns Current service status
|
|
514
|
+
*/
|
|
515
|
+
getStatus() {
|
|
516
|
+
const avgDuration = this.executionStats.totalExecutions > 0 ? this.executionStats.totalDuration / this.executionStats.totalExecutions : 0;
|
|
517
|
+
return {
|
|
518
|
+
isRunning: this.isRunning,
|
|
519
|
+
activeWorkflows: Array.from(this.activeWorkflows.values()),
|
|
520
|
+
watchedPaths: this.fileWatcher.getWatchedPaths(),
|
|
521
|
+
lastActivity: this.lastActivity,
|
|
522
|
+
stats: {
|
|
523
|
+
totalExecutions: this.executionStats.totalExecutions,
|
|
524
|
+
successfulExecutions: this.executionStats.successfulExecutions,
|
|
525
|
+
failedExecutions: this.executionStats.failedExecutions,
|
|
526
|
+
averageDuration: avgDuration
|
|
527
|
+
}
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Get workflow configuration
|
|
532
|
+
*
|
|
533
|
+
* @returns Copy of the current configuration
|
|
534
|
+
*/
|
|
535
|
+
getConfig() {
|
|
536
|
+
return {
|
|
537
|
+
workflow: this.config.workflow,
|
|
538
|
+
inactivityTimeout: this.config.inactivityTimeout,
|
|
539
|
+
autoStartThreshold: this.config.autoStartThreshold,
|
|
540
|
+
watchPaths: [...this.config.watchPaths],
|
|
541
|
+
debug: this.config.debug
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Get a specific workflow run by ID
|
|
546
|
+
*
|
|
547
|
+
* @param workflowId - Workflow run identifier
|
|
548
|
+
* @returns Workflow metadata or undefined
|
|
549
|
+
*/
|
|
550
|
+
getWorkflow(workflowId) {
|
|
551
|
+
return this.activeWorkflows.get(workflowId);
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Cancel a running workflow
|
|
555
|
+
*
|
|
556
|
+
* @param workflowId - Workflow to cancel
|
|
557
|
+
* @returns Whether the workflow was cancelled
|
|
558
|
+
*/
|
|
559
|
+
cancelWorkflow(workflowId) {
|
|
560
|
+
const workflow = this.activeWorkflows.get(workflowId);
|
|
561
|
+
if (workflow && workflow.status === "running") {
|
|
562
|
+
workflow.status = "failed";
|
|
563
|
+
workflow.lastEventAt = /* @__PURE__ */ new Date();
|
|
564
|
+
logger.info("Workflow cancelled", { workflowId });
|
|
565
|
+
return true;
|
|
566
|
+
}
|
|
567
|
+
return false;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
function createWorkflowService(config) {
|
|
571
|
+
return new WorkflowService(config);
|
|
572
|
+
}
|
|
573
|
+
export {
|
|
574
|
+
WorkflowService,
|
|
575
|
+
createWorkflowService
|
|
576
|
+
};
|
|
577
|
+
//# sourceMappingURL=workflow-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-service.js","sources":["../../../src/workflow/services/workflow-service.ts"],"sourcesContent":["/**\n * Workflow Service\n *\n * Main service that orchestrates workflow execution with\n * Workflow DevKit, GOAP planning, and webhook handling.\n *\n * This service provides a unified interface for:\n * - Starting and managing workflows\n * - GOAP-based planning for task generation\n * - File watching and webhook handling\n * - Status monitoring and metrics\n *\n * @module workflow/services/workflow-service\n *\n * @example\n * ```typescript\n * import { createWorkflowService } from './workflow-service.js';\n *\n * const service = createWorkflowService({\n * inactivityTimeout: 5 * 60 * 1000,\n * autoStartThreshold: 0.7,\n * watchPaths: ['./docs'],\n * });\n *\n * await service.start();\n *\n * // Start a collaboration workflow\n * const result = await service.startCollaborationWorkflow(\n * 'graph-123',\n * './docs/spec.md'\n * );\n *\n * // Get service status\n * const status = service.getStatus();\n * console.log(`Active workflows: ${status.activeWorkflows.length}`);\n *\n * await service.stop();\n * ```\n */\n\nimport { createWorkflowConfig, type WorkflowConfig } from '../config.js';\nimport type {\n WorldState,\n GOAPPlan,\n TaskSpec,\n GapAnalysis,\n DocumentGap,\n WorkflowRunMetadata,\n ReadinessEvaluation,\n} from '../types.js';\nimport { GOAPAdapter, createGOAPAdapter } from '../adapters/goap-adapter.js';\nimport {\n createWebhookRegistry,\n createFileWatcherIntegration,\n type WebhookRegistry,\n type FileWatcherIntegration,\n type WorkflowTriggerEvent,\n} from '../handlers/webhook-handlers.js';\nimport { createLogger } from '../../utils/index.js';\n\nconst logger = createLogger('workflow-service');\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Workflow service configuration options\n */\nexport interface WorkflowServiceConfig {\n /** Workflow DevKit configuration */\n workflow?: WorkflowConfig;\n /** Inactivity timeout in ms (default: 5 minutes) */\n inactivityTimeout?: number;\n /** Auto-start development threshold (default: 0.7) */\n autoStartThreshold?: number;\n /** Paths to watch for changes */\n watchPaths?: string[];\n /** Enable debug logging */\n debug?: boolean;\n /** Webhook secret for validation */\n webhookSecret?: string;\n /** Maximum payload size for webhooks */\n maxPayloadSize?: number;\n}\n\n/**\n * Resolved configuration with defaults applied\n */\ninterface ResolvedConfig {\n workflow: WorkflowConfig;\n inactivityTimeout: number;\n autoStartThreshold: number;\n watchPaths: string[];\n debug: boolean;\n webhookSecret?: string;\n maxPayloadSize: number;\n}\n\n// ============================================================================\n// Result Types\n// ============================================================================\n\n/**\n * Workflow execution result\n */\nexport interface WorkflowExecutionResult {\n /** Whether workflow completed successfully */\n success: boolean;\n /** Unique workflow run identifier */\n workflowId: string;\n /** When the workflow started */\n startedAt: Date;\n /** When the workflow completed (if finished) */\n completedAt?: Date;\n /** Outcome of the workflow */\n outcome?: 'completed' | 'failed' | 'timeout' | 'cancelled';\n /** Artifacts produced by the workflow */\n artifacts?: string[];\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Service status information\n */\nexport interface WorkflowServiceStatus {\n /** Whether the service is currently running */\n isRunning: boolean;\n /** List of active workflow runs */\n activeWorkflows: WorkflowRunMetadata[];\n /** Paths being watched for changes */\n watchedPaths: string[];\n /** Timestamp of last activity */\n lastActivity?: Date;\n /** Execution statistics */\n stats: WorkflowExecutionStats;\n}\n\n/**\n * Execution statistics\n */\nexport interface WorkflowExecutionStats {\n /** Total number of workflow executions */\n totalExecutions: number;\n /** Number of successful executions */\n successfulExecutions: number;\n /** Number of failed executions */\n failedExecutions: number;\n /** Average execution duration in ms */\n averageDuration: number;\n}\n\n// ============================================================================\n// Workflow Service Class\n// ============================================================================\n\n/**\n * Workflow Service\n *\n * Orchestrates the entire workflow system including:\n * - GOAP planning for intelligent task generation\n * - File watching for automatic workflow triggers\n * - Webhook handling for external integrations\n * - Execution tracking and metrics collection\n */\nexport class WorkflowService {\n private config: ResolvedConfig;\n private goapAdapter: GOAPAdapter;\n private webhookRegistry: WebhookRegistry;\n private fileWatcher: FileWatcherIntegration;\n\n private isRunning = false;\n private activeWorkflows: Map<string, WorkflowRunMetadata> = new Map();\n private lastActivity?: Date;\n private executionStats = {\n totalExecutions: 0,\n successfulExecutions: 0,\n failedExecutions: 0,\n totalDuration: 0,\n };\n\n /**\n * Create a new workflow service\n *\n * @param config - Service configuration options\n */\n constructor(config: WorkflowServiceConfig = {}) {\n this.config = this.resolveConfig(config);\n this.goapAdapter = createGOAPAdapter();\n this.webhookRegistry = createWebhookRegistry({\n secret: this.config.webhookSecret,\n maxPayloadSize: this.config.maxPayloadSize,\n });\n this.fileWatcher = createFileWatcherIntegration(this.webhookRegistry, {\n inactivityThreshold: this.config.inactivityTimeout,\n });\n\n this.setupEventHandlers();\n }\n\n /**\n * Resolve configuration with defaults\n */\n private resolveConfig(config: WorkflowServiceConfig): ResolvedConfig {\n return {\n workflow: config.workflow ?? createWorkflowConfig(),\n inactivityTimeout: config.inactivityTimeout ?? 5 * 60 * 1000,\n autoStartThreshold: config.autoStartThreshold ?? 0.7,\n watchPaths: config.watchPaths ?? [],\n debug: config.debug ?? false,\n webhookSecret: config.webhookSecret,\n maxPayloadSize: config.maxPayloadSize ?? 1024 * 1024,\n };\n }\n\n /**\n * Setup event handlers for workflow triggers\n */\n private setupEventHandlers(): void {\n // Handle file changes\n this.webhookRegistry.on('file:changed', async (event) => {\n if (event.type === 'file:changed') {\n logger.debug('File changed event received', { path: event.path });\n this.lastActivity = new Date();\n await this.onDocumentChange(event.path);\n }\n });\n\n // Handle file creation\n this.webhookRegistry.on('file:created', async (event) => {\n if (event.type === 'file:created') {\n logger.debug('File created event received', { path: event.path });\n this.lastActivity = new Date();\n await this.onDocumentChange(event.path);\n }\n });\n\n // Handle file deletion\n this.webhookRegistry.on('file:deleted', async (event) => {\n if (event.type === 'file:deleted') {\n logger.debug('File deleted event received', { path: event.path });\n this.lastActivity = new Date();\n }\n });\n\n // Handle inactivity timeout\n this.webhookRegistry.on('timeout:inactivity', async (event) => {\n if (event.type === 'timeout:inactivity') {\n logger.info('Inactivity timeout triggered', {\n lastActivity: event.lastActivity,\n threshold: event.threshold,\n });\n await this.onInactivityTimeout();\n }\n });\n }\n\n // ==========================================================================\n // Lifecycle Methods\n // ==========================================================================\n\n /**\n * Start the workflow service\n *\n * Begins watching configured paths and processing events.\n */\n async start(): Promise<void> {\n if (this.isRunning) {\n logger.warn('Workflow service is already running');\n return;\n }\n\n logger.info('Starting workflow service', {\n world: this.config.workflow.world,\n watchPaths: this.config.watchPaths,\n inactivityTimeout: this.config.inactivityTimeout,\n });\n\n // Start watching configured paths\n for (const path of this.config.watchPaths) {\n this.fileWatcher.watch(path);\n }\n\n this.isRunning = true;\n this.lastActivity = new Date();\n logger.info('Workflow service started');\n }\n\n /**\n * Stop the workflow service\n *\n * Stops watching all paths and cleans up resources.\n */\n async stop(): Promise<void> {\n if (!this.isRunning) {\n logger.warn('Workflow service is not running');\n return;\n }\n\n logger.info('Stopping workflow service');\n\n // Stop watching all paths\n this.fileWatcher.unwatchAll();\n\n // Clear all webhook handlers\n this.webhookRegistry.clear();\n\n this.isRunning = false;\n logger.info('Workflow service stopped');\n }\n\n // ==========================================================================\n // Event Handlers\n // ==========================================================================\n\n /**\n * Handle document change event\n *\n * Analyzes the changed document for gaps and potentially\n * starts development if completeness threshold is met.\n */\n private async onDocumentChange(docPath: string): Promise<void> {\n logger.debug('Processing document change', { docPath });\n\n try {\n // Analyze gaps\n const analysis = await this.analyzeGaps(docPath);\n\n if (analysis.completeness >= this.config.autoStartThreshold) {\n // Generate task spec if completeness threshold met\n logger.info('Completeness threshold met, generating task spec', {\n completeness: analysis.completeness,\n threshold: this.config.autoStartThreshold,\n });\n\n await this.generateTaskSpec(docPath, analysis);\n } else {\n logger.debug('Waiting for more documentation', {\n completeness: analysis.completeness,\n threshold: this.config.autoStartThreshold,\n gaps: analysis.gaps.length,\n });\n }\n } catch (err) {\n const actualError = err instanceof Error ? err : new Error(String(err));\n logger.error(`Failed to process document change: ${docPath}`, actualError);\n }\n }\n\n /**\n * Handle inactivity timeout\n *\n * Checks for incomplete documentation and generates\n * missing content when idle.\n */\n private async onInactivityTimeout(): Promise<void> {\n logger.info('Inactivity timeout - checking for incomplete documentation');\n\n // Get all watched paths and check for gaps\n const watchedPaths = this.fileWatcher.getWatchedPaths();\n\n for (const path of watchedPaths) {\n try {\n const analysis = await this.analyzeGaps(path);\n\n if (analysis.gaps.length > 0) {\n logger.info('Found documentation gaps during inactivity', {\n path,\n gapCount: analysis.gaps.length,\n });\n\n await this.generateMissingDocs(path, analysis);\n }\n } catch (err) {\n const actualError = err instanceof Error ? err : new Error(String(err));\n logger.error(`Failed to analyze path during inactivity: ${path}`, actualError);\n }\n }\n }\n\n // ==========================================================================\n // Workflow Execution\n // ==========================================================================\n\n /**\n * Start a collaboration workflow for a graph/document\n *\n * @param graphId - Knowledge graph identifier\n * @param docPath - Path to the document\n * @returns Workflow execution result\n */\n async startCollaborationWorkflow(\n graphId: string,\n docPath: string\n ): Promise<WorkflowExecutionResult> {\n const workflowId = this.generateWorkflowId('collab');\n const startedAt = new Date();\n\n logger.info('Starting collaboration workflow', { workflowId, graphId, docPath });\n\n const metadata: WorkflowRunMetadata = {\n id: workflowId,\n type: 'realtime-collab',\n startedAt,\n status: 'running',\n currentStep: 'initialize',\n lastEventAt: startedAt,\n };\n\n this.activeWorkflows.set(workflowId, metadata);\n this.executionStats.totalExecutions++;\n\n try {\n // Initialize world state from document\n const worldState = await this.initializeWorldState(docPath);\n\n // Create GOAP plan\n const plan = this.goapAdapter.createPlan(worldState, 'start-development');\n\n if (!plan.achievable) {\n logger.warn('Goal not achievable with current state', {\n worldState,\n reason: plan.goal,\n });\n }\n\n // Update metadata\n metadata.currentStep = 'executing-plan';\n metadata.lastEventAt = new Date();\n\n // Execute plan\n const execution = await this.goapAdapter.executePlan(plan, worldState);\n\n const completedAt = new Date();\n const duration = completedAt.getTime() - startedAt.getTime();\n\n // Update stats\n if (execution.success) {\n this.executionStats.successfulExecutions++;\n metadata.status = 'completed';\n } else {\n this.executionStats.failedExecutions++;\n metadata.status = 'failed';\n }\n this.executionStats.totalDuration += duration;\n metadata.lastEventAt = completedAt;\n\n logger.info('Collaboration workflow completed', {\n workflowId,\n success: execution.success,\n duration,\n completedSteps: execution.completedSteps.length,\n });\n\n return {\n success: execution.success,\n workflowId,\n startedAt,\n completedAt,\n outcome: execution.success ? 'completed' : 'failed',\n artifacts: execution.completedSteps,\n error: execution.error,\n };\n } catch (error) {\n const completedAt = new Date();\n const duration = completedAt.getTime() - startedAt.getTime();\n\n metadata.status = 'failed';\n metadata.lastEventAt = completedAt;\n this.executionStats.failedExecutions++;\n this.executionStats.totalDuration += duration;\n\n const actualError = error instanceof Error ? error : new Error(String(error));\n logger.error(`Workflow execution failed: ${workflowId}`, actualError);\n\n return {\n success: false,\n workflowId,\n startedAt,\n completedAt,\n outcome: 'failed',\n error: actualError.message,\n };\n }\n }\n\n // ==========================================================================\n // World State & Planning\n // ==========================================================================\n\n /**\n * Initialize world state from a document\n *\n * @param docPath - Path to the document\n * @returns Initial world state for planning\n */\n private async initializeWorldState(docPath: string): Promise<WorldState> {\n // TODO: Integrate with actual document analysis\n // For now, return a basic initial state\n return {\n hasSpecification: true,\n specCompleteness: 0,\n hasAcceptanceCriteria: false,\n taskDefined: false,\n blockersFree: true,\n developmentStarted: false,\n timeSinceLastChange: 0,\n lastChangeTimestamp: Date.now(),\n activeCollaborators: [],\n pendingGaps: [],\n };\n }\n\n /**\n * Create a GOAP plan for a goal\n *\n * @param goal - Goal identifier\n * @returns Generated plan\n */\n async createPlan(goal: string): Promise<GOAPPlan> {\n const worldState = await this.initializeWorldState('');\n return this.goapAdapter.createPlan(worldState, goal);\n }\n\n /**\n * Evaluate readiness for development\n *\n * @param docPath - Path to the document\n * @returns Readiness evaluation\n */\n async evaluateReadiness(docPath: string): Promise<ReadinessEvaluation> {\n const worldState = await this.initializeWorldState(docPath);\n const analysis = await this.analyzeGaps(docPath);\n\n // Update world state with analysis results\n worldState.specCompleteness = analysis.completeness;\n worldState.hasAcceptanceCriteria = analysis.completeness >= 0.5;\n worldState.pendingGaps = analysis.gaps.map((g) => g.description);\n\n return this.goapAdapter.evaluateReadiness(worldState);\n }\n\n // ==========================================================================\n // Gap Analysis & Documentation\n // ==========================================================================\n\n /**\n * Analyze document for gaps\n *\n * @param docPath - Path to analyze\n * @returns Gap analysis result\n */\n async analyzeGaps(docPath: string): Promise<GapAnalysis> {\n logger.debug('Analyzing gaps', { docPath });\n\n // Required sections for a complete specification\n const requiredSections = [\n 'overview',\n 'requirements',\n 'acceptance-criteria',\n 'technical-spec',\n ];\n\n // TODO: Integrate with actual document analysis\n // For now, simulate finding some sections\n const foundCount = Math.floor(Math.random() * requiredSections.length) + 1;\n const completeness = foundCount / requiredSections.length;\n\n const gaps: DocumentGap[] = [];\n for (let i = foundCount; i < requiredSections.length; i++) {\n gaps.push({\n type: 'missing_section',\n description: `Missing ${requiredSections[i]} section`,\n severity: 'high',\n suggestedContent: `# ${requiredSections[i]}\\n\\nContent to be filled in.`,\n });\n }\n\n const recommendations = gaps.map(\n (g) => `Add ${g.description.toLowerCase()}`\n );\n\n return {\n docPath,\n completeness,\n gaps,\n recommendations,\n analyzedAt: new Date(),\n };\n }\n\n /**\n * Generate task specification from documentation\n *\n * @param docPath - Path to the source document\n * @param analysis - Gap analysis results\n * @returns Generated task specification\n */\n async generateTaskSpec(docPath: string, analysis: GapAnalysis): Promise<TaskSpec> {\n logger.info('Generating task spec', { docPath, completeness: analysis.completeness });\n\n const priority = this.determinePriority(analysis.completeness);\n const complexity = this.estimateComplexity(analysis);\n\n const spec: TaskSpec = {\n id: `task-${Date.now()}`,\n version: '1.0.0',\n title: `Task from ${this.extractFilename(docPath)}`,\n description: 'Auto-generated task specification from documentation analysis',\n priority,\n requirements: this.extractRequirements(analysis),\n acceptanceCriteria: this.generateAcceptanceCriteria(analysis),\n estimatedComplexity: complexity,\n sourceDoc: docPath,\n generatedAt: new Date(),\n confidence: analysis.completeness,\n };\n\n logger.debug('Task spec generated', { specId: spec.id, priority, complexity });\n return spec;\n }\n\n /**\n * Generate missing documentation\n *\n * @param docPath - Path to the document\n * @param analysis - Gap analysis results\n * @returns List of generated content\n */\n async generateMissingDocs(docPath: string, analysis: GapAnalysis): Promise<string[]> {\n logger.info('Generating missing docs', {\n docPath,\n gapCount: analysis.gaps.length,\n });\n\n const generatedDocs: string[] = [];\n\n for (const gap of analysis.gaps) {\n const content =\n gap.suggestedContent ||\n `# ${gap.description}\\n\\nThis section needs to be completed.\\n`;\n generatedDocs.push(content);\n }\n\n return generatedDocs;\n }\n\n // ==========================================================================\n // Helper Methods\n // ==========================================================================\n\n /**\n * Generate a unique workflow ID\n */\n private generateWorkflowId(prefix: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 11);\n return `${prefix}-${timestamp}-${random}`;\n }\n\n /**\n * Extract filename from path\n */\n private extractFilename(path: string): string {\n const parts = path.split('/');\n return parts[parts.length - 1] || 'unknown';\n }\n\n /**\n * Determine priority based on completeness\n */\n private determinePriority(\n completeness: number\n ): 'low' | 'medium' | 'high' | 'critical' {\n if (completeness >= 0.9) return 'high';\n if (completeness >= 0.7) return 'medium';\n if (completeness >= 0.5) return 'low';\n return 'critical'; // Needs more work before starting\n }\n\n /**\n * Estimate complexity from analysis\n */\n private estimateComplexity(analysis: GapAnalysis): number {\n // Base complexity on inverse of completeness\n const baseComplexity = Math.ceil((1 - analysis.completeness) * 10);\n // Add complexity for each gap\n const gapComplexity = analysis.gaps.length;\n return Math.min(10, Math.max(1, baseComplexity + gapComplexity));\n }\n\n /**\n * Extract requirements from analysis\n */\n private extractRequirements(analysis: GapAnalysis): string[] {\n const requirements = analysis.recommendations.slice();\n if (requirements.length === 0) {\n requirements.push('Complete specification document');\n }\n return requirements;\n }\n\n /**\n * Generate acceptance criteria from analysis\n */\n private generateAcceptanceCriteria(analysis: GapAnalysis): string[] {\n const criteria = [\n 'Documentation is complete',\n 'All tests pass',\n `Completeness score >= ${this.config.autoStartThreshold}`,\n ];\n\n if (analysis.gaps.length > 0) {\n criteria.push(`All ${analysis.gaps.length} gaps are addressed`);\n }\n\n return criteria;\n }\n\n // ==========================================================================\n // Public API\n // ==========================================================================\n\n /**\n * Add a path to watch\n *\n * @param path - Path to watch for changes\n */\n watch(path: string): void {\n this.fileWatcher.watch(path);\n this.config.watchPaths.push(path);\n logger.debug('Added watch path', { path });\n }\n\n /**\n * Stop watching a path\n *\n * @param path - Path to stop watching\n */\n unwatch(path: string): void {\n this.fileWatcher.unwatch(path);\n const index = this.config.watchPaths.indexOf(path);\n if (index > -1) {\n this.config.watchPaths.splice(index, 1);\n }\n logger.debug('Removed watch path', { path });\n }\n\n /**\n * Get the webhook registry for external event handling\n *\n * @returns Webhook registry instance\n */\n getWebhookRegistry(): WebhookRegistry {\n return this.webhookRegistry;\n }\n\n /**\n * Get the GOAP adapter for direct planning access\n *\n * @returns GOAP adapter instance\n */\n getGOAPAdapter(): GOAPAdapter {\n return this.goapAdapter;\n }\n\n /**\n * Emit a workflow trigger event\n *\n * @param event - Event to emit\n */\n async emitEvent(event: WorkflowTriggerEvent): Promise<void> {\n await this.webhookRegistry.emit(event);\n this.lastActivity = new Date();\n }\n\n /**\n * Get service status\n *\n * @returns Current service status\n */\n getStatus(): WorkflowServiceStatus {\n const avgDuration =\n this.executionStats.totalExecutions > 0\n ? this.executionStats.totalDuration / this.executionStats.totalExecutions\n : 0;\n\n return {\n isRunning: this.isRunning,\n activeWorkflows: Array.from(this.activeWorkflows.values()),\n watchedPaths: this.fileWatcher.getWatchedPaths(),\n lastActivity: this.lastActivity,\n stats: {\n totalExecutions: this.executionStats.totalExecutions,\n successfulExecutions: this.executionStats.successfulExecutions,\n failedExecutions: this.executionStats.failedExecutions,\n averageDuration: avgDuration,\n },\n };\n }\n\n /**\n * Get workflow configuration\n *\n * @returns Copy of the current configuration\n */\n getConfig(): WorkflowServiceConfig {\n return {\n workflow: this.config.workflow,\n inactivityTimeout: this.config.inactivityTimeout,\n autoStartThreshold: this.config.autoStartThreshold,\n watchPaths: [...this.config.watchPaths],\n debug: this.config.debug,\n };\n }\n\n /**\n * Get a specific workflow run by ID\n *\n * @param workflowId - Workflow run identifier\n * @returns Workflow metadata or undefined\n */\n getWorkflow(workflowId: string): WorkflowRunMetadata | undefined {\n return this.activeWorkflows.get(workflowId);\n }\n\n /**\n * Cancel a running workflow\n *\n * @param workflowId - Workflow to cancel\n * @returns Whether the workflow was cancelled\n */\n cancelWorkflow(workflowId: string): boolean {\n const workflow = this.activeWorkflows.get(workflowId);\n if (workflow && workflow.status === 'running') {\n workflow.status = 'failed';\n workflow.lastEventAt = new Date();\n logger.info('Workflow cancelled', { workflowId });\n return true;\n }\n return false;\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a workflow service instance\n *\n * @param config - Service configuration options\n * @returns Configured workflow service\n *\n * @example\n * ```typescript\n * const service = createWorkflowService({\n * watchPaths: ['./docs', './specs'],\n * autoStartThreshold: 0.8,\n * });\n *\n * await service.start();\n * ```\n */\nexport function createWorkflowService(config?: WorkflowServiceConfig): WorkflowService {\n return new WorkflowService(config);\n}\n"],"names":[],"mappings":"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"}
|