claude-flow-novice 1.6.4 → 1.6.5
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/.claude/commands/parse-epic.js +180 -0
- package/.claude/settings.local.json +2 -1
- package/.claude-flow-novice/dist/mcp/mcp-server-novice.js +37 -2
- package/.claude-flow-novice/dist/mcp/transports/base.js +5 -0
- package/.claude-flow-novice/dist/mcp/transports/base.js.map +1 -0
- package/.claude-flow-novice/dist/mcp/transports/http.js +414 -0
- package/.claude-flow-novice/dist/mcp/transports/http.js.map +1 -0
- package/.claude-flow-novice/dist/mcp/transports/stdio.js +217 -0
- package/.claude-flow-novice/dist/mcp/transports/stdio.js.map +1 -0
- package/.claude-flow-novice/dist/src/cli/commands/parse-epic.js +129 -0
- package/.claude-flow-novice/dist/src/cli/commands/parse-epic.js.map +1 -0
- package/.claude-flow-novice/dist/src/cli/index.js +3 -0
- package/.claude-flow-novice/dist/src/cli/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/utils/epic-parser.js +266 -0
- package/.claude-flow-novice/dist/src/cli/utils/epic-parser.js.map +1 -0
- package/.claude-flow-novice/dist/src/communication/message-bus.js +105 -2
- package/.claude-flow-novice/dist/src/communication/message-bus.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js +1 -1
- package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/cache/artifact-cache-optimizer.js +632 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/cache/artifact-cache-optimizer.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/cache/index.js +11 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/cache/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/checkpoints/checkpoint-compressor.js +318 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/checkpoints/checkpoint-compressor.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/completion-detector.js +234 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/completion-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/hierarchical-detector.js +347 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/hierarchical-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/index.js +13 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/lamport-clock.js +173 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/lamport-clock.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/mesh-detector.js +526 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/mesh-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/sdk-completion-detector.js +443 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/sdk-completion-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/swarm-shutdown.js +366 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/completion/swarm-shutdown.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinator-factory.js +287 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinator-factory.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/cascading-shutdown.example.js +364 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/cascading-shutdown.example.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/cascading-shutdown.js +492 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/cascading-shutdown.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/hierarchical-coordinator.js +786 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/hierarchical-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/index.js +16 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/parent-child-manager.js +342 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/parent-child-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/swarm-coordinator-v2.js +601 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/coordinators/swarm-coordinator-v2.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/agent-state.js +9 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/agent-state.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dead-letter-queue.js +413 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dead-letter-queue.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dependency-graph.js +471 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dependency-graph.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dependency-node.js +379 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dependency-node.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dependency-resolver.js +335 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/dependency-resolver.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/help-request-metrics.js +211 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/help-request-metrics.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/index.js +33 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/message-broker.js +920 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/message-broker.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/message-router.js +385 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/message-router.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/message.js +138 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/message.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/resource-manager-safe.js +478 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/resource-manager-safe.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/state-machine-config.js +358 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/state-machine-config.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/state-machine.js +588 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/state-machine.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/state-transition.js +153 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/state-transition.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/task-scheduler.js +360 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/task-scheduler.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/topic-manager.js +337 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/core/topic-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/deadlock/deadlock-detector.js +424 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/deadlock/deadlock-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/deadlock/index.js +9 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/deadlock/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/deadlock/resource-manager.js +669 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/deadlock/resource-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/artifact-storage.js +451 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/artifact-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/cycle-detector.js +271 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/cycle-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/dependency-graph.js +335 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/dependency-graph.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/dependency-manager.js +439 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/dependency-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/dependency-request.js +92 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/dependency-request.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/index.js +21 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/topological-sort.js +223 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/dependency/topological-sort.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-coordinator.js +436 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-matcher.js +278 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-matcher.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-request-handler.js +317 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-request-handler.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-request.js +273 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/help-request.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/index.js +15 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/waiting-agent-pool.js +512 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/help-system/waiting-agent-pool.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/index.js +67 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/help-deadlock-integration.js +557 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/help-deadlock-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/index.js +14 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/message-bus-completion-integration.example.js +212 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/message-bus-completion-integration.example.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/message-bus-completion-integration.js +552 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/message-bus-completion-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/state-machine-integration.js +635 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/integration/state-machine-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/IArtifactStorage.js +28 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/IArtifactStorage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/ICoordinator.js +9 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/ICoordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/ISessionStore.js +25 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/ISessionStore.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/index.js +14 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/interfaces/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/artifact-adapter.js +308 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/artifact-adapter.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/completion-storage.js +439 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/completion-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/dependency-graph-storage.js +540 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/dependency-graph-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/dependency-storage.js +367 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/dependency-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/index.js +14 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/message-storage.js +518 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/message-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/state-storage.js +377 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/memory/state-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channel.js +371 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/dependency-channel.js +355 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/dependency-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/help-channel.js +424 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/help-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/index.js +16 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/state-channel.js +295 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/state-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/task-channel.js +411 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/channels/task-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/index.js +14 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/message-bus.js +387 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/message-bus.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/message-persistence.js +589 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/message-persistence.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/message-router.js +444 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/messaging/message-router.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/artifact-storage.js +560 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/artifact-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/background-orchestrator.js +335 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/background-orchestrator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/bash-output-monitor.js +104 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/bash-output-monitor.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/checkpoint-manager.js +847 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/checkpoint-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/help-coordinator.js +470 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/help-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/hierarchical-background-integration.js +450 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/hierarchical-background-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/index.js +13 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/message-bus-integration.js +625 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/message-bus-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/multi-level-control.js +545 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/multi-level-control.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/query-controller.js +740 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/query-controller.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/query-message-integration.js +415 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/query-message-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/session-pool-optimizer.js +615 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/session-pool-optimizer.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/state-machine-integration.js +547 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/state-machine-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/state-sdk-integration.js +342 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/sdk/state-sdk-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/security/payload-validator.js +259 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/security/payload-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/framework-registry.js +273 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/framework-registry.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/index.js +8 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/truth-config-manager.js +310 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/truth-config-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/truth-validator.js +218 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/truth/truth-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/types/sdk.js +9 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/types/sdk.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/utils/index.js +6 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/utils/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/utils/priority-queue.js +145 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/utils/priority-queue.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/utils/sdk-helpers.js +122 -0
- package/.claude-flow-novice/dist/src/coordination/archives/v2-sdk-typescript/v2/utils/sdk-helpers.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/config-translator.js +17 -43
- package/.claude-flow-novice/dist/src/coordination/config-translator.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js +34 -76
- package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/shared/core/agent-state.js +172 -0
- package/.claude-flow-novice/dist/src/coordination/shared/core/agent-state.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/core/index.js +7 -0
- package/.claude-flow-novice/dist/src/coordination/shared/core/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/index.js +19 -0
- package/.claude-flow-novice/dist/src/coordination/shared/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/interfaces/ICoordinator.js +24 -0
- package/.claude-flow-novice/dist/src/coordination/shared/interfaces/ICoordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/interfaces/index.js +7 -0
- package/.claude-flow-novice/dist/src/coordination/shared/interfaces/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/message-broker.js +920 -0
- package/.claude-flow-novice/dist/src/coordination/shared/message-broker.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/message.js +138 -0
- package/.claude-flow-novice/dist/src/coordination/shared/message.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/security/payload-validator.js +259 -0
- package/.claude-flow-novice/dist/src/coordination/shared/security/payload-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/index.js +17 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/interfaces/transparency-system.js +19 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/interfaces/transparency-system.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/transparency-integration.js +357 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/transparency-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/transparency-system.js +679 -0
- package/.claude-flow-novice/dist/src/coordination/shared/transparency/transparency-system.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/types/index.js +7 -0
- package/.claude-flow-novice/dist/src/coordination/shared/types/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/shared/types/sdk.js +10 -0
- package/.claude-flow-novice/dist/src/coordination/shared/types/sdk.js.map +1 -0
- package/.claude-flow-novice/dist/src/feature-flags/core/FeatureFlagManager.js +52 -2
- package/.claude-flow-novice/dist/src/feature-flags/core/FeatureFlagManager.js.map +1 -1
- package/.claude-flow-novice/dist/src/mcp/mcp-server-novice.js +37 -2
- package/.claude-flow-novice/dist/src/mcp/session-manager.js +3 -1
- package/.claude-flow-novice/dist/src/mcp/session-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/providers/provider-manager.js +36 -3
- package/.claude-flow-novice/dist/src/providers/provider-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/utils/markdown-sanitizer.js +65 -41
- package/.claude-flow-novice/dist/src/utils/markdown-sanitizer.js.map +1 -1
- package/.claude-flow-novice/dist/src/web/api/server.js +1 -1
- package/.claude-flow-novice/dist/src/web/api/server.js.map +1 -1
- package/.claude-flow-novice/dist/src/workflows/progressive-rollout-manager.js +30 -0
- package/.claude-flow-novice/dist/src/workflows/progressive-rollout-manager.js.map +1 -1
- package/.claude-flow-novice/metrics.db-shm +0 -0
- package/.claude-flow-novice/metrics.db-wal +0 -0
- package/package.json +2 -2
- package/scripts/monitoring/alert-monitor.sh +220 -0
- package/scripts/monitoring/view-alerts.sh +307 -0
- package/scripts/test-zai-api.cjs +2 -2
- package/src/slash-commands/parse-epic.js +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Coordination V2 - State Transition System
|
|
3
|
+
*
|
|
4
|
+
* Defines event structures and transition validation logic for the state machine.
|
|
5
|
+
* Ensures type-safe state transitions with runtime validation.
|
|
6
|
+
*
|
|
7
|
+
* @module coordination/v2/core/state-transition
|
|
8
|
+
*/ import { AgentState } from './agent-state.js';
|
|
9
|
+
/**
|
|
10
|
+
* State transition event types.
|
|
11
|
+
* Maps to specific agent lifecycle events from SDK sessions.
|
|
12
|
+
*/ export var TransitionEventType = /*#__PURE__*/ function(TransitionEventType) {
|
|
13
|
+
/** Task assigned to agent */ TransitionEventType["TASK_ASSIGNED"] = "task_assigned";
|
|
14
|
+
/** Agent started execution */ TransitionEventType["EXECUTION_STARTED"] = "execution_started";
|
|
15
|
+
/** Agent completed task successfully */ TransitionEventType["EXECUTION_COMPLETED"] = "execution_completed";
|
|
16
|
+
/** Agent encountered error */ TransitionEventType["EXECUTION_FAILED"] = "execution_failed";
|
|
17
|
+
/** Agent waiting on dependency */ TransitionEventType["DEPENDENCY_BLOCKED"] = "dependency_blocked";
|
|
18
|
+
/** Dependency resolved, agent can resume */ TransitionEventType["DEPENDENCY_RESOLVED"] = "dependency_resolved";
|
|
19
|
+
/** Agent requested to help another agent */ TransitionEventType["HELP_REQUESTED"] = "help_requested";
|
|
20
|
+
/** Agent finished helping and returning to own work */ TransitionEventType["HELP_COMPLETED"] = "help_completed";
|
|
21
|
+
/** Agent deadlocked or requires intervention */ TransitionEventType["DEADLOCK_DETECTED"] = "deadlock_detected";
|
|
22
|
+
/** Agent recovered from error and ready to retry */ TransitionEventType["ERROR_RECOVERED"] = "error_recovered";
|
|
23
|
+
return TransitionEventType;
|
|
24
|
+
}({});
|
|
25
|
+
/**
|
|
26
|
+
* Validates a state transition against allowed transitions.
|
|
27
|
+
*
|
|
28
|
+
* @param fromState - Current agent state
|
|
29
|
+
* @param toState - Target agent state
|
|
30
|
+
* @param allowedTransitions - Map of allowed state transitions
|
|
31
|
+
* @returns Validation result with error details if invalid
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const result = validateTransition(
|
|
36
|
+
* AgentState.IDLE,
|
|
37
|
+
* AgentState.WORKING,
|
|
38
|
+
* STATE_TRANSITIONS
|
|
39
|
+
* );
|
|
40
|
+
* if (!result.isValid) {
|
|
41
|
+
* throw new Error(result.error);
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/ export function validateTransition(fromState, toState, allowedTransitions) {
|
|
45
|
+
const startTime = Date.now();
|
|
46
|
+
// Check if fromState exists in transition map
|
|
47
|
+
const allowedStates = allowedTransitions[fromState];
|
|
48
|
+
if (!allowedStates) {
|
|
49
|
+
return {
|
|
50
|
+
isValid: false,
|
|
51
|
+
error: `Invalid source state: ${fromState}`
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Check if transition to toState is allowed
|
|
55
|
+
if (!allowedStates.includes(toState)) {
|
|
56
|
+
return {
|
|
57
|
+
isValid: false,
|
|
58
|
+
error: `Invalid transition from ${fromState} to ${toState}. Allowed: ${allowedStates.join(', ')}`
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Validate performance requirement: <1ms
|
|
62
|
+
const duration = Date.now() - startTime;
|
|
63
|
+
const warnings = [];
|
|
64
|
+
if (duration >= 1) {
|
|
65
|
+
warnings.push(`Transition validation took ${duration}ms (target: <1ms)`);
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
isValid: true,
|
|
69
|
+
warnings: warnings.length > 0 ? warnings : undefined
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Creates a state transition event with proper timestamp and validation.
|
|
74
|
+
*
|
|
75
|
+
* @param type - Event type
|
|
76
|
+
* @param agentId - Agent triggering the transition
|
|
77
|
+
* @param fromState - Current state
|
|
78
|
+
* @param toState - Target state
|
|
79
|
+
* @param metadata - Optional event-specific metadata
|
|
80
|
+
* @returns Validated transition event
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const event = createTransitionEvent(
|
|
85
|
+
* TransitionEventType.TASK_ASSIGNED,
|
|
86
|
+
* 'agent-123',
|
|
87
|
+
* AgentState.IDLE,
|
|
88
|
+
* AgentState.WORKING,
|
|
89
|
+
* { taskId: 'task-456', taskType: 'coder' }
|
|
90
|
+
* );
|
|
91
|
+
* ```
|
|
92
|
+
*/ export function createTransitionEvent(type, agentId, fromState, toState, metadata) {
|
|
93
|
+
if (!agentId || agentId.trim().length === 0) {
|
|
94
|
+
throw new Error('agentId is required and cannot be empty');
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
type,
|
|
98
|
+
agentId,
|
|
99
|
+
timestamp: new Date().toISOString(),
|
|
100
|
+
fromState,
|
|
101
|
+
toState,
|
|
102
|
+
metadata
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Type guard to check if an event is a specific transition event type.
|
|
107
|
+
*
|
|
108
|
+
* @param event - Event to check
|
|
109
|
+
* @param type - Expected event type
|
|
110
|
+
* @returns True if event matches the specified type
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* if (isEventType(event, TransitionEventType.TASK_ASSIGNED)) {
|
|
115
|
+
* // TypeScript knows event is TaskAssignedEvent
|
|
116
|
+
* console.log(event.metadata.taskId);
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/ export function isEventType(event, type) {
|
|
120
|
+
return event.type === type;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Checks if a transition event represents an error condition.
|
|
124
|
+
*
|
|
125
|
+
* @param event - Transition event to check
|
|
126
|
+
* @returns True if event represents an error
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* if (isErrorEvent(event)) {
|
|
131
|
+
* handleError(event);
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*/ export function isErrorEvent(event) {
|
|
135
|
+
return event.type === "execution_failed" || event.type === "deadlock_detected" || event.toState === AgentState.ERROR || event.toState === AgentState.BLOCKED;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Checks if a transition event represents a terminal state change.
|
|
139
|
+
*
|
|
140
|
+
* @param event - Transition event to check
|
|
141
|
+
* @returns True if event leads to terminal state
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* if (isTerminalEvent(event)) {
|
|
146
|
+
* finalizeAgent(event.agentId);
|
|
147
|
+
* }
|
|
148
|
+
* ```
|
|
149
|
+
*/ export function isTerminalEvent(event) {
|
|
150
|
+
return event.toState === AgentState.COMPLETED || event.toState === AgentState.TERMINATED || event.toState === AgentState.ERROR;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
//# sourceMappingURL=state-transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/coordination/archives/v2-sdk-typescript/v2/core/state-transition.ts"],"names":["AgentState","TransitionEventType","validateTransition","fromState","toState","allowedTransitions","startTime","Date","now","allowedStates","isValid","error","includes","join","duration","warnings","push","length","undefined","createTransitionEvent","type","agentId","metadata","trim","Error","timestamp","toISOString","isEventType","event","isErrorEvent","ERROR","BLOCKED","isTerminalEvent","COMPLETED","TERMINATED"],"mappings":"AAAA;;;;;;;CAOC,GAED,SAASA,UAAU,QAAQ,mBAAmB;AAE9C;;;CAGC,GACD,OAAO,IAAA,AAAKC,6CAAAA;IACV,2BAA2B;IAG3B,4BAA4B;IAG5B,sCAAsC;IAGtC,4BAA4B;IAG5B,gCAAgC;IAGhC,0CAA0C;IAG1C,0CAA0C;IAG1C,qDAAqD;IAGrD,8CAA8C;IAG9C,kDAAkD;WA5BxCA;MA8BX;AAgHD;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,SAASC,mBACdC,SAAqB,EACrBC,OAAmB,EACnBC,kBAAoD;IAEpD,MAAMC,YAAYC,KAAKC,GAAG;IAE1B,8CAA8C;IAC9C,MAAMC,gBAAgBJ,kBAAkB,CAACF,UAAU;IACnD,IAAI,CAACM,eAAe;QAClB,OAAO;YACLC,SAAS;YACTC,OAAO,CAAC,sBAAsB,EAAER,WAAW;QAC7C;IACF;IAEA,4CAA4C;IAC5C,IAAI,CAACM,cAAcG,QAAQ,CAACR,UAAU;QACpC,OAAO;YACLM,SAAS;YACTC,OAAO,CAAC,wBAAwB,EAAER,UAAU,IAAI,EAAEC,QAAQ,WAAW,EAAEK,cAAcI,IAAI,CAAC,OAAO;QACnG;IACF;IAEA,yCAAyC;IACzC,MAAMC,WAAWP,KAAKC,GAAG,KAAKF;IAC9B,MAAMS,WAAqB,EAAE;IAC7B,IAAID,YAAY,GAAG;QACjBC,SAASC,IAAI,CAAC,CAAC,2BAA2B,EAAEF,SAAS,iBAAiB,CAAC;IACzE;IAEA,OAAO;QACLJ,SAAS;QACTK,UAAUA,SAASE,MAAM,GAAG,IAAIF,WAAWG;IAC7C;AACF;AAEA;;;;;;;;;;;;;;;;;;;;CAoBC,GACD,OAAO,SAASC,sBACdC,IAAyB,EACzBC,OAAe,EACflB,SAAqB,EACrBC,OAAmB,EACnBkB,QAAkC;IAElC,IAAI,CAACD,WAAWA,QAAQE,IAAI,GAAGN,MAAM,KAAK,GAAG;QAC3C,MAAM,IAAIO,MAAM;IAClB;IAEA,OAAO;QACLJ;QACAC;QACAI,WAAW,IAAIlB,OAAOmB,WAAW;QACjCvB;QACAC;QACAkB;IACF;AACF;AAEA;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASK,YACdC,KAA2B,EAC3BR,IAAO;IAEP,OAAOQ,MAAMR,IAAI,KAAKA;AACxB;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASS,aAAaD,KAA2B;IACtD,OACEA,MAAMR,IAAI,2BACVQ,MAAMR,IAAI,4BACVQ,MAAMxB,OAAO,KAAKJ,WAAW8B,KAAK,IAClCF,MAAMxB,OAAO,KAAKJ,WAAW+B,OAAO;AAExC;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASC,gBAAgBJ,KAA2B;IACzD,OACEA,MAAMxB,OAAO,KAAKJ,WAAWiC,SAAS,IACtCL,MAAMxB,OAAO,KAAKJ,WAAWkC,UAAU,IACvCN,MAAMxB,OAAO,KAAKJ,WAAW8B,KAAK;AAEtC"}
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Coordination V2 - Task Scheduler Implementation
|
|
3
|
+
*
|
|
4
|
+
* Priority-based task scheduler with:
|
|
5
|
+
* - Event-driven architecture (task:assigned, task:completed, task:failed)
|
|
6
|
+
* - 3 priority strategies: strict, balanced, loose
|
|
7
|
+
* - Configurable retry logic with retry limits
|
|
8
|
+
* - Comprehensive metrics tracking
|
|
9
|
+
* - Polling-based task assignment
|
|
10
|
+
*
|
|
11
|
+
* @module coordination/v2/core/task-scheduler
|
|
12
|
+
*/ import { EventEmitter } from 'events';
|
|
13
|
+
import { DependencyResolver } from './dependency-resolver.js';
|
|
14
|
+
import { DependencyNodeStatus } from './dependency-node.js';
|
|
15
|
+
/**
|
|
16
|
+
* Task Scheduler - Priority-based scheduling with dependency resolution.
|
|
17
|
+
*
|
|
18
|
+
* Provides:
|
|
19
|
+
* - Automatic task assignment based on dependency readiness
|
|
20
|
+
* - Three priority weighting strategies
|
|
21
|
+
* - Event-driven notifications for task lifecycle
|
|
22
|
+
* - Retry logic with configurable limits
|
|
23
|
+
* - Real-time metrics tracking
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const scheduler = new TaskScheduler(graph, {
|
|
28
|
+
* maxConcurrency: 5,
|
|
29
|
+
* pollInterval: 100,
|
|
30
|
+
* retryLimit: 3,
|
|
31
|
+
* priorityWeighting: 'balanced'
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* scheduler.on('task:assigned', ({ taskId, task }) => {
|
|
35
|
+
* console.log(`Task ${taskId} assigned for execution`);
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* scheduler.on('task:completed', ({ taskId }) => {
|
|
39
|
+
* console.log(`Task ${taskId} completed`);
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* scheduler.start();
|
|
43
|
+
* ```
|
|
44
|
+
*/ export class TaskScheduler extends EventEmitter {
|
|
45
|
+
graph;
|
|
46
|
+
config;
|
|
47
|
+
resolver;
|
|
48
|
+
runningTasks;
|
|
49
|
+
schedulerInterval;
|
|
50
|
+
retryCounters;
|
|
51
|
+
taskOwners;
|
|
52
|
+
/**
|
|
53
|
+
* Creates a new task scheduler.
|
|
54
|
+
*
|
|
55
|
+
* @param graph - Dependency graph containing tasks
|
|
56
|
+
* @param config - Scheduler configuration
|
|
57
|
+
*/ constructor(graph, config){
|
|
58
|
+
super(), this.graph = graph, this.config = config;
|
|
59
|
+
this.resolver = new DependencyResolver(graph);
|
|
60
|
+
this.runningTasks = new Set();
|
|
61
|
+
this.retryCounters = new Map();
|
|
62
|
+
this.taskOwners = new Map(); // SEC-005: Initialize ownership map
|
|
63
|
+
}
|
|
64
|
+
// ============================================
|
|
65
|
+
// Lifecycle Management
|
|
66
|
+
// ============================================
|
|
67
|
+
/**
|
|
68
|
+
* Starts the task scheduler.
|
|
69
|
+
*
|
|
70
|
+
* Begins polling for ready tasks at the configured interval.
|
|
71
|
+
*/ start() {
|
|
72
|
+
if (this.schedulerInterval) {
|
|
73
|
+
throw new Error('Scheduler is already running');
|
|
74
|
+
}
|
|
75
|
+
this.schedulerInterval = setInterval(()=>{
|
|
76
|
+
this.scheduleTasks();
|
|
77
|
+
}, this.config.pollInterval);
|
|
78
|
+
// Run initial scheduling immediately
|
|
79
|
+
this.scheduleTasks();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Stops the task scheduler.
|
|
83
|
+
*
|
|
84
|
+
* Cancels the polling interval but does not affect running tasks.
|
|
85
|
+
*/ stop() {
|
|
86
|
+
if (this.schedulerInterval) {
|
|
87
|
+
clearInterval(this.schedulerInterval);
|
|
88
|
+
this.schedulerInterval = undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// ============================================
|
|
92
|
+
// Task Scheduling
|
|
93
|
+
// ============================================
|
|
94
|
+
/**
|
|
95
|
+
* Adds a task to the scheduler queue.
|
|
96
|
+
*
|
|
97
|
+
* The task is added to the dependency graph and scheduling is triggered immediately.
|
|
98
|
+
* If the scheduler is running, the task will be picked up in the next polling cycle.
|
|
99
|
+
*
|
|
100
|
+
* @param task - Task to schedule
|
|
101
|
+
*/ scheduleTask(task) {
|
|
102
|
+
// Normalize task: ensure taskId is set (use id if taskId not provided)
|
|
103
|
+
const normalizedTask = {
|
|
104
|
+
...task,
|
|
105
|
+
taskId: task.taskId || task.id || task.id
|
|
106
|
+
};
|
|
107
|
+
this.graph.addNode(normalizedTask);
|
|
108
|
+
this.scheduleTasks(); // Trigger immediate scheduling check
|
|
109
|
+
this.emit('task:queued', {
|
|
110
|
+
taskId: normalizedTask.taskId
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Schedules tasks based on dependency readiness and concurrency limits.
|
|
115
|
+
*
|
|
116
|
+
* Called automatically at each poll interval.
|
|
117
|
+
* @private
|
|
118
|
+
*/ scheduleTasks() {
|
|
119
|
+
const tasks = this.selectNextTasks();
|
|
120
|
+
for (const task of tasks){
|
|
121
|
+
this.assignTask(task);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Selects next tasks to run based on priority strategy.
|
|
126
|
+
*
|
|
127
|
+
* @returns Array of tasks to assign
|
|
128
|
+
* @private
|
|
129
|
+
*/ selectNextTasks() {
|
|
130
|
+
// Get ready tasks from resolver
|
|
131
|
+
const ready = this.resolver.getNextBatch(this.config.maxConcurrency - this.runningTasks.size);
|
|
132
|
+
if (ready.length === 0) {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
// Apply priority weighting strategy
|
|
136
|
+
switch(this.config.priorityWeighting){
|
|
137
|
+
case 'strict':
|
|
138
|
+
return this.strictPrioritySelection(ready);
|
|
139
|
+
case 'balanced':
|
|
140
|
+
return this.balancedSelection(ready);
|
|
141
|
+
case 'loose':
|
|
142
|
+
return this.loosePrioritySelection(ready);
|
|
143
|
+
default:
|
|
144
|
+
return ready;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Strict priority selection: Always choose highest priority tasks.
|
|
149
|
+
*
|
|
150
|
+
* @param ready - Array of ready tasks
|
|
151
|
+
* @returns Selected tasks
|
|
152
|
+
* @private
|
|
153
|
+
*/ strictPrioritySelection(ready) {
|
|
154
|
+
// Tasks are already sorted by priority (highest first) from graph.getReadyTasks()
|
|
155
|
+
return ready;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Balanced selection: Mix high priority with longest-waiting tasks.
|
|
159
|
+
*
|
|
160
|
+
* Algorithm:
|
|
161
|
+
* - 70% high priority tasks
|
|
162
|
+
* - 30% longest waiting tasks (by createdAt timestamp)
|
|
163
|
+
*
|
|
164
|
+
* @param ready - Array of ready tasks
|
|
165
|
+
* @returns Selected tasks
|
|
166
|
+
* @private
|
|
167
|
+
*/ balancedSelection(ready) {
|
|
168
|
+
if (ready.length <= 2) {
|
|
169
|
+
return ready; // Too few to balance
|
|
170
|
+
}
|
|
171
|
+
const available = this.config.maxConcurrency - this.runningTasks.size;
|
|
172
|
+
const highPriorityCount = Math.ceil(available * 0.7);
|
|
173
|
+
const longWaitingCount = available - highPriorityCount;
|
|
174
|
+
// Get high priority tasks (already sorted)
|
|
175
|
+
const highPriority = ready.slice(0, highPriorityCount);
|
|
176
|
+
// Get longest waiting tasks (sort by createdAt)
|
|
177
|
+
const remaining = ready.slice(highPriorityCount);
|
|
178
|
+
const longWaiting = remaining.sort((a, b)=>a.createdAt - b.createdAt).slice(0, longWaitingCount);
|
|
179
|
+
return [
|
|
180
|
+
...highPriority,
|
|
181
|
+
...longWaiting
|
|
182
|
+
];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Loose priority selection: Favor fairness over strict priority.
|
|
186
|
+
*
|
|
187
|
+
* Algorithm:
|
|
188
|
+
* - Round-robin selection across priority levels
|
|
189
|
+
* - Prevents high-priority task monopolization
|
|
190
|
+
*
|
|
191
|
+
* @param ready - Array of ready tasks
|
|
192
|
+
* @returns Selected tasks
|
|
193
|
+
* @private
|
|
194
|
+
*/ loosePrioritySelection(ready) {
|
|
195
|
+
// Group tasks by priority level
|
|
196
|
+
const priorityGroups = new Map();
|
|
197
|
+
for (const task of ready){
|
|
198
|
+
const priority = task.priority;
|
|
199
|
+
if (!priorityGroups.has(priority)) {
|
|
200
|
+
priorityGroups.set(priority, []);
|
|
201
|
+
}
|
|
202
|
+
priorityGroups.get(priority).push(task);
|
|
203
|
+
}
|
|
204
|
+
// Round-robin selection across priority groups
|
|
205
|
+
const selected = [];
|
|
206
|
+
const available = this.config.maxConcurrency - this.runningTasks.size;
|
|
207
|
+
const priorities = Array.from(priorityGroups.keys()).sort((a, b)=>b - a);
|
|
208
|
+
let index = 0;
|
|
209
|
+
while(selected.length < available && selected.length < ready.length){
|
|
210
|
+
const priority = priorities[index % priorities.length];
|
|
211
|
+
const group = priorityGroups.get(priority);
|
|
212
|
+
if (group.length > 0) {
|
|
213
|
+
selected.push(group.shift());
|
|
214
|
+
}
|
|
215
|
+
index++;
|
|
216
|
+
// Remove empty groups
|
|
217
|
+
if (group.length === 0) {
|
|
218
|
+
priorityGroups.delete(priority);
|
|
219
|
+
priorities.splice(priorities.indexOf(priority), 1);
|
|
220
|
+
}
|
|
221
|
+
if (priorities.length === 0) {
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return selected;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Assigns a task for execution.
|
|
229
|
+
*
|
|
230
|
+
* @param task - Task to assign
|
|
231
|
+
* @private
|
|
232
|
+
*/ assignTask(task) {
|
|
233
|
+
// Mark as running
|
|
234
|
+
this.runningTasks.add(task.taskId);
|
|
235
|
+
this.taskOwners.set(task.taskId, task.agentId); // SEC-005: Track ownership
|
|
236
|
+
this.graph.updateStatus(task.taskId, DependencyNodeStatus.EXECUTING);
|
|
237
|
+
// Emit assignment event
|
|
238
|
+
this.emit('task:assigned', {
|
|
239
|
+
taskId: task.taskId,
|
|
240
|
+
task
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
// ============================================
|
|
244
|
+
// Task Lifecycle Handlers
|
|
245
|
+
// ============================================
|
|
246
|
+
/**
|
|
247
|
+
* Handles task completion.
|
|
248
|
+
*
|
|
249
|
+
* Called by external execution system when a task finishes successfully.
|
|
250
|
+
*
|
|
251
|
+
* @param taskId - ID of the completed task
|
|
252
|
+
* @param callerId - Optional caller ID for authorization (SEC-005)
|
|
253
|
+
*/ onTaskCompleted(taskId, callerId) {
|
|
254
|
+
if (!this.runningTasks.has(taskId)) {
|
|
255
|
+
console.warn(`Task ${taskId} completed but was not tracked as running`);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// SEC-005: Validate caller is task owner
|
|
259
|
+
const owner = this.taskOwners.get(taskId);
|
|
260
|
+
if (callerId && callerId !== owner) {
|
|
261
|
+
throw new Error(`Unauthorized task completion: ${callerId} is not owner of ${taskId} (owner: ${owner})`);
|
|
262
|
+
}
|
|
263
|
+
// Remove from running set
|
|
264
|
+
this.runningTasks.delete(taskId);
|
|
265
|
+
this.taskOwners.delete(taskId); // SEC-005: Cleanup ownership
|
|
266
|
+
// Update graph status
|
|
267
|
+
this.graph.updateStatus(taskId, DependencyNodeStatus.COMPLETED);
|
|
268
|
+
// Clear retry counter
|
|
269
|
+
this.retryCounters.delete(taskId);
|
|
270
|
+
// Emit completion event
|
|
271
|
+
this.emit('task:completed', {
|
|
272
|
+
taskId
|
|
273
|
+
});
|
|
274
|
+
// Trigger immediate scheduling check (dependent tasks may now be ready)
|
|
275
|
+
this.scheduleTasks();
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Handles task failure.
|
|
279
|
+
*
|
|
280
|
+
* Implements retry logic with configurable retry limit.
|
|
281
|
+
* If retries exhausted, marks task as FAILED.
|
|
282
|
+
*
|
|
283
|
+
* @param taskId - ID of the failed task
|
|
284
|
+
* @param error - Error that caused the failure
|
|
285
|
+
* @param callerId - Optional caller ID for authorization (SEC-005)
|
|
286
|
+
*/ onTaskFailed(taskId, error, callerId) {
|
|
287
|
+
if (!this.runningTasks.has(taskId)) {
|
|
288
|
+
console.warn(`Task ${taskId} failed but was not tracked as running`);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// SEC-005: Validate caller is task owner
|
|
292
|
+
const owner = this.taskOwners.get(taskId);
|
|
293
|
+
if (callerId && callerId !== owner) {
|
|
294
|
+
throw new Error(`Unauthorized task failure report: ${callerId} is not owner of ${taskId} (owner: ${owner})`);
|
|
295
|
+
}
|
|
296
|
+
// Remove from running set
|
|
297
|
+
this.runningTasks.delete(taskId);
|
|
298
|
+
this.taskOwners.delete(taskId); // SEC-005: Cleanup ownership
|
|
299
|
+
// Get/increment retry counter
|
|
300
|
+
const retryCount = (this.retryCounters.get(taskId) ?? 0) + 1;
|
|
301
|
+
this.retryCounters.set(taskId, retryCount);
|
|
302
|
+
// Check retry limit
|
|
303
|
+
if (retryCount < this.config.retryLimit) {
|
|
304
|
+
// Retry: reset to READY status
|
|
305
|
+
this.graph.updateStatus(taskId, DependencyNodeStatus.READY);
|
|
306
|
+
// Emit failure event with retry indication
|
|
307
|
+
this.emit('task:failed', {
|
|
308
|
+
taskId,
|
|
309
|
+
error,
|
|
310
|
+
retryCount
|
|
311
|
+
});
|
|
312
|
+
// Schedule retry on next poll
|
|
313
|
+
// (task will be picked up automatically as READY)
|
|
314
|
+
} else {
|
|
315
|
+
// Retries exhausted: mark as FAILED
|
|
316
|
+
this.graph.updateStatus(taskId, DependencyNodeStatus.FAILED);
|
|
317
|
+
// Emit failure event
|
|
318
|
+
this.emit('task:failed', {
|
|
319
|
+
taskId,
|
|
320
|
+
error,
|
|
321
|
+
retryCount
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
// ============================================
|
|
326
|
+
// Metrics
|
|
327
|
+
// ============================================
|
|
328
|
+
/**
|
|
329
|
+
* Gets current scheduler metrics.
|
|
330
|
+
*
|
|
331
|
+
* @returns Scheduler metrics snapshot
|
|
332
|
+
*/ getMetrics() {
|
|
333
|
+
const readyTasks = this.graph.getReadyTasks();
|
|
334
|
+
const blockedTasks = this.graph.getBlockedTasks();
|
|
335
|
+
return {
|
|
336
|
+
totalTasks: this.graph.size(),
|
|
337
|
+
completed: this.graph.completedTasks.size,
|
|
338
|
+
running: this.runningTasks.size,
|
|
339
|
+
ready: readyTasks.length,
|
|
340
|
+
blocked: blockedTasks.length
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Gets the set of currently running task IDs.
|
|
345
|
+
*
|
|
346
|
+
* @returns Set of running task IDs
|
|
347
|
+
*/ getRunningTasks() {
|
|
348
|
+
return new Set(this.runningTasks);
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Gets the retry count for a specific task.
|
|
352
|
+
*
|
|
353
|
+
* @param taskId - Task ID
|
|
354
|
+
* @returns Retry count (0 if no retries)
|
|
355
|
+
*/ getRetryCount(taskId) {
|
|
356
|
+
return this.retryCounters.get(taskId) ?? 0;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
//# sourceMappingURL=task-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../../src/coordination/archives/v2-sdk-typescript/v2/core/task-scheduler.ts"],"names":["EventEmitter","DependencyResolver","DependencyNodeStatus","TaskScheduler","resolver","runningTasks","schedulerInterval","retryCounters","taskOwners","graph","config","Set","Map","start","Error","setInterval","scheduleTasks","pollInterval","stop","clearInterval","undefined","scheduleTask","task","normalizedTask","taskId","id","addNode","emit","tasks","selectNextTasks","assignTask","ready","getNextBatch","maxConcurrency","size","length","priorityWeighting","strictPrioritySelection","balancedSelection","loosePrioritySelection","available","highPriorityCount","Math","ceil","longWaitingCount","highPriority","slice","remaining","longWaiting","sort","a","b","createdAt","priorityGroups","priority","has","set","get","push","selected","priorities","Array","from","keys","index","group","shift","delete","splice","indexOf","add","agentId","updateStatus","EXECUTING","onTaskCompleted","callerId","console","warn","owner","COMPLETED","onTaskFailed","error","retryCount","retryLimit","READY","FAILED","getMetrics","readyTasks","getReadyTasks","blockedTasks","getBlockedTasks","totalTasks","completed","completedTasks","running","blocked","getRunningTasks","getRetryCount"],"mappings":"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"}
|