claude-flow-novice 1.6.1 → 1.6.2
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/agents/cfn-loop/product-owner.md +54 -4
- package/.claude/commands/cfn-claude-sync.md +303 -0
- package/.claude/commands/cfn-loop-epic.md +290 -0
- package/.claude/commands/cfn-loop-single.md +168 -0
- package/.claude/commands/cfn-loop-sprints.md +384 -0
- package/.claude/commands/cfn-loop.md +180 -0
- package/.claude/commands/metrics-summary.md +58 -0
- package/.claude/commands/parse-epic.md +357 -0
- package/.claude/settings.json +4 -4
- package/.claude/settings.local.json +9 -2
- package/.claude-flow-novice/.claude/agents/cfn-loop/product-owner.md +792 -0
- package/.claude-flow-novice/dist/mcp/server.js +21 -2
- package/.claude-flow-novice/dist/src/api/claude-client.js +138 -3
- package/.claude-flow-novice/dist/src/api/claude-client.js.map +1 -1
- package/.claude-flow-novice/dist/src/cfn-loop/phase-orchestrator-example.js +1 -1
- package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js +247 -0
- package/.claude-flow-novice/dist/src/cfn-loop/scope-control.js.map +1 -0
- package/.claude-flow-novice/dist/src/cli/commands/swarm.js +32 -15
- package/.claude-flow-novice/dist/src/cli/commands/swarm.js.map +1 -1
- package/.claude-flow-novice/dist/src/cli/commands/transparency.js +455 -0
- package/.claude-flow-novice/dist/src/cli/commands/transparency.js.map +1 -0
- package/.claude-flow-novice/dist/src/cli/simple-commands/init/templates/CLAUDE.md +129 -13
- package/.claude-flow-novice/dist/src/components/visualizations/index.js +9 -0
- package/.claude-flow-novice/dist/src/components/visualizations/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js +462 -0
- package/.claude-flow-novice/dist/src/coordination/adapters/v1-coordinator-adapter.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/config-translator.js +248 -0
- package/.claude-flow-novice/dist/src/coordination/config-translator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js +287 -0
- package/.claude-flow-novice/dist/src/coordination/coordination-toggle.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js +68 -9
- package/.claude-flow-novice/dist/src/coordination/distributed-consensus.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/feature-flags.js +166 -0
- package/.claude-flow-novice/dist/src/coordination/feature-flags.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/queen-agent.js +18 -4
- package/.claude-flow-novice/dist/src/coordination/queen-agent.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/role-assignment.js +6 -110
- package/.claude-flow-novice/dist/src/coordination/role-assignment.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js +632 -0
- package/.claude-flow-novice/dist/src/coordination/v2/cache/artifact-cache-optimizer.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js +11 -0
- package/.claude-flow-novice/dist/src/coordination/v2/cache/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js +318 -0
- package/.claude-flow-novice/dist/src/coordination/v2/checkpoints/checkpoint-compressor.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js +364 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.example.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js +492 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/cascading-shutdown.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js +786 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/hierarchical-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js +16 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js +342 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/parent-child-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js +601 -0
- package/.claude-flow-novice/dist/src/coordination/v2/coordinators/swarm-coordinator-v2.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js +211 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/help-request-metrics.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/index.js +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js +365 -6
- package/.claude-flow-novice/dist/src/coordination/v2/core/message-broker.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js +478 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/resource-manager-safe.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js +5 -2
- package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine-config.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js +189 -0
- package/.claude-flow-novice/dist/src/coordination/v2/core/state-machine.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js +424 -0
- package/.claude-flow-novice/dist/src/coordination/v2/deadlock/deadlock-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js +9 -0
- package/.claude-flow-novice/dist/src/coordination/v2/deadlock/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js +669 -0
- package/.claude-flow-novice/dist/src/coordination/v2/deadlock/resource-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js +451 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/artifact-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js +271 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/cycle-detector.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js +335 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-graph.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js +439 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-manager.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js +92 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/dependency-request.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js +21 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js +223 -0
- package/.claude-flow-novice/dist/src/coordination/v2/dependency/topological-sort.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js +436 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js +278 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-matcher.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js +317 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request-handler.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js +273 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/help-request.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js +15 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js +512 -0
- package/.claude-flow-novice/dist/src/coordination/v2/help-system/waiting-agent-pool.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/index.js +6 -0
- package/.claude-flow-novice/dist/src/coordination/v2/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js +557 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/help-deadlock-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js +14 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js +212 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.example.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js +552 -0
- package/.claude-flow-novice/dist/src/coordination/v2/integration/message-bus-completion-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js +367 -0
- package/.claude-flow-novice/dist/src/coordination/v2/memory/dependency-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/memory/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js +371 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js +355 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/dependency-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js +424 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/help-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js +16 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js +295 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/state-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js +411 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/channels/task-channel.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js +14 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js +387 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-bus.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js +589 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-persistence.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js +444 -0
- package/.claude-flow-novice/dist/src/coordination/v2/messaging/message-router.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js +29 -8
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/checkpoint-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js +470 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/help-coordinator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js +450 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/hierarchical-background-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js +5 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/index.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js +545 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/multi-level-control.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js +44 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-controller.js.map +1 -1
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js +415 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/query-message-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js +615 -0
- package/.claude-flow-novice/dist/src/coordination/v2/sdk/session-pool-optimizer.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js +259 -0
- package/.claude-flow-novice/dist/src/coordination/v2/security/payload-validator.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js +17 -0
- package/.claude-flow-novice/dist/src/coordination/v2/transparency/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js +357 -0
- package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-integration.js.map +1 -0
- package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js +679 -0
- package/.claude-flow-novice/dist/src/coordination/v2/transparency/transparency-system.js.map +1 -0
- package/.claude-flow-novice/dist/src/core/agent-manager.js +30 -0
- package/.claude-flow-novice/dist/src/core/agent-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/mcp/server.js +21 -2
- package/.claude-flow-novice/dist/src/mcp/server.js.map +1 -1
- package/.claude-flow-novice/dist/src/observability/metrics-counter.js +268 -0
- package/.claude-flow-novice/dist/src/observability/metrics-counter.js.map +1 -0
- package/.claude-flow-novice/dist/src/observability/metrics-storage.js +265 -0
- package/.claude-flow-novice/dist/src/observability/metrics-storage.js.map +1 -0
- package/.claude-flow-novice/dist/src/observability/telemetry.js +26 -0
- package/.claude-flow-novice/dist/src/observability/telemetry.js.map +1 -1
- package/.claude-flow-novice/dist/src/providers/tiered-router.js +64 -10
- package/.claude-flow-novice/dist/src/providers/tiered-router.js.map +1 -1
- package/.claude-flow-novice/dist/src/providers/zai-provider.js +196 -97
- package/.claude-flow-novice/dist/src/providers/zai-provider.js.map +1 -1
- package/.claude-flow-novice/dist/src/slash-commands/cfn-claude-sync.js +533 -0
- package/.claude-flow-novice/dist/src/slash-commands/index.js +5 -0
- package/.claude-flow-novice/dist/src/slash-commands/metrics-summary-class.js +74 -0
- package/.claude-flow-novice/dist/src/slash-commands/metrics-summary.js +335 -0
- package/.claude-flow-novice/dist/src/slash-commands/register-all-commands.js +12 -0
- package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js +96 -0
- package/.claude-flow-novice/dist/src/verification/checkpoint-compression-demo.js.map +1 -0
- package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js +406 -0
- package/.claude-flow-novice/dist/src/verification/checkpoint-compression.js.map +1 -0
- package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js +35 -5
- package/.claude-flow-novice/dist/src/verification/checkpoint-manager.js.map +1 -1
- package/.claude-flow-novice/dist/src/web/api/config/api-config.js +186 -0
- package/.claude-flow-novice/dist/src/web/api/config/api-config.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/auth.js +205 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/auth.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/cache.js +262 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/cache.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js +250 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/error-handler.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js +217 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/request-logger.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/validation.js +325 -0
- package/.claude-flow-novice/dist/src/web/api/middleware/validation.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/routes/events.js +465 -0
- package/.claude-flow-novice/dist/src/web/api/routes/events.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js +302 -0
- package/.claude-flow-novice/dist/src/web/api/routes/hierarchy.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/routes/index.js +14 -0
- package/.claude-flow-novice/dist/src/web/api/routes/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/routes/metrics.js +561 -0
- package/.claude-flow-novice/dist/src/web/api/routes/metrics.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/routes/status.js +450 -0
- package/.claude-flow-novice/dist/src/web/api/routes/status.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/api/server.js +451 -0
- package/.claude-flow-novice/dist/src/web/api/server.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js +385 -0
- package/.claude-flow-novice/dist/src/web/dashboard/hooks/useWebSocket.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/dashboard/index.js +87 -0
- package/.claude-flow-novice/dist/src/web/dashboard/index.js.map +1 -0
- package/.claude-flow-novice/dist/src/web/dashboard/types.js +6 -0
- package/.claude-flow-novice/dist/src/web/dashboard/types.js.map +1 -0
- package/.claude-flow-novice/metrics.db +0 -0
- package/.claude-flow-novice/metrics.db-shm +0 -0
- package/.claude-flow-novice/metrics.db-wal +0 -0
- package/CLAUDE.md +29 -0
- package/README.md +27 -0
- package/config/hooks/post-edit-pipeline.js +36 -2
- package/examples/metrics-counter-demo.ts +106 -0
- package/examples/persistent-metrics-demo.ts +83 -0
- package/examples/phase-5-multi-level-control.ts +282 -0
- package/examples/session-pool-optimizer-example.ts +311 -0
- package/package.json +15 -3
- package/scripts/check-routing-stats.cjs +122 -0
- package/scripts/pre-publish-validation.cjs +212 -0
- package/scripts/test-provider-routing.cjs +228 -0
- package/scripts/test-routing-telemetry.cjs +147 -0
- package/scripts/test-zai-10k.cjs +81 -0
- package/scripts/test-zai-api.cjs +191 -0
- package/scripts/test-zai-diagnostic.cjs +151 -0
- package/scripts/test-zai-final.cjs +128 -0
- package/scripts/test-zai-with-env.cjs +85 -0
- package/scripts/validate-coordination-cli.js +69 -0
- package/scripts/validate-coordination-toggle-integration.cjs +501 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md +29 -0
- package/src/observability/metrics-counter.ts +347 -0
- package/src/observability/metrics-storage.ts +356 -0
- package/src/observability/telemetry.ts +658 -0
- package/src/slash-commands/cfn-claude-sync.js +533 -0
- package/src/slash-commands/index.js +5 -0
- package/src/slash-commands/metrics-summary-class.js +74 -0
- package/src/slash-commands/metrics-summary.js +335 -0
- package/src/slash-commands/register-all-commands.js +12 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Coordination V2 - State Channel
|
|
3
|
+
*
|
|
4
|
+
* Specialized channel for broadcasting agent state change events.
|
|
5
|
+
* Integrates with Phase 1 state machine to publish state transitions
|
|
6
|
+
* across the coordination system.
|
|
7
|
+
*
|
|
8
|
+
* @module coordination/v2/messaging/channels/state-channel
|
|
9
|
+
*/ import { AgentState, AGENT_STATE_METADATA } from '../../core/agent-state.js';
|
|
10
|
+
import { MessagePriority } from '../../core/message.js';
|
|
11
|
+
/**
|
|
12
|
+
* State channel validation error.
|
|
13
|
+
*/ export class StateChannelError extends Error {
|
|
14
|
+
constructor(message){
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = 'StateChannelError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* State Channel Implementation.
|
|
21
|
+
*
|
|
22
|
+
* Specialized messaging channel for agent state transitions with:
|
|
23
|
+
* - Type-safe state change payloads
|
|
24
|
+
* - Automatic priority assignment based on state criticality
|
|
25
|
+
* - Integration with Phase 1 state machine
|
|
26
|
+
* - Validation of state transitions
|
|
27
|
+
* - Monitoring and observability hooks
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const stateChannel = new StateChannel(messageBroker);
|
|
32
|
+
*
|
|
33
|
+
* // Subscribe to all state changes
|
|
34
|
+
* await stateChannel.subscribeToStateChanges(async (payload) => {
|
|
35
|
+
* console.log(`Agent ${payload.agentId}: ${payload.fromState} -> ${payload.toState}`);
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* // Publish state change
|
|
39
|
+
* await stateChannel.publishStateChange({
|
|
40
|
+
* agentId: 'agent-1',
|
|
41
|
+
* fromState: AgentState.IDLE,
|
|
42
|
+
* toState: AgentState.WORKING
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*/ export class StateChannel {
|
|
46
|
+
/** Base topic for all state change messages */ static BASE_TOPIC = 'agent.state';
|
|
47
|
+
broker;
|
|
48
|
+
/**
|
|
49
|
+
* Creates a new state channel instance.
|
|
50
|
+
*
|
|
51
|
+
* @param broker - Message broker for publishing/subscribing
|
|
52
|
+
*/ constructor(broker){
|
|
53
|
+
if (!broker) {
|
|
54
|
+
throw new StateChannelError('Message broker is required');
|
|
55
|
+
}
|
|
56
|
+
this.broker = broker;
|
|
57
|
+
}
|
|
58
|
+
// ============================================
|
|
59
|
+
// Publishing
|
|
60
|
+
// ============================================
|
|
61
|
+
/**
|
|
62
|
+
* Publishes an agent state change event.
|
|
63
|
+
*
|
|
64
|
+
* @param config - State change configuration
|
|
65
|
+
* @returns Promise resolving to published message
|
|
66
|
+
* @throws {StateChannelError} If validation fails
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* await stateChannel.publishStateChange({
|
|
71
|
+
* agentId: 'agent-1',
|
|
72
|
+
* fromState: AgentState.WORKING,
|
|
73
|
+
* toState: AgentState.COMPLETED,
|
|
74
|
+
* reason: 'Task finished successfully'
|
|
75
|
+
* });
|
|
76
|
+
* ```
|
|
77
|
+
*/ async publishStateChange(config) {
|
|
78
|
+
this.validateStateChange(config);
|
|
79
|
+
const payload = {
|
|
80
|
+
agentId: config.agentId,
|
|
81
|
+
fromState: config.fromState,
|
|
82
|
+
toState: config.toState,
|
|
83
|
+
timestamp: Date.now(),
|
|
84
|
+
reason: config.reason,
|
|
85
|
+
metadata: config.metadata,
|
|
86
|
+
durationInPreviousState: config.durationInPreviousState
|
|
87
|
+
};
|
|
88
|
+
const priority = this.calculatePriority(config.toState);
|
|
89
|
+
const topic = this.buildTopic(config.agentId, config.toState);
|
|
90
|
+
const messageConfig = {
|
|
91
|
+
topic,
|
|
92
|
+
payload,
|
|
93
|
+
priority,
|
|
94
|
+
senderId: config.agentId,
|
|
95
|
+
metadata: {
|
|
96
|
+
channel: 'state',
|
|
97
|
+
stateChange: true,
|
|
98
|
+
fromState: config.fromState,
|
|
99
|
+
toState: config.toState
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
return this.broker.publish(messageConfig);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Publishes a batch of state changes (for efficiency).
|
|
106
|
+
*
|
|
107
|
+
* @param changes - Array of state change configurations
|
|
108
|
+
* @returns Promise resolving to array of published messages
|
|
109
|
+
*/ async publishBatchStateChanges(changes) {
|
|
110
|
+
const results = [];
|
|
111
|
+
for (const change of changes){
|
|
112
|
+
const message = await this.publishStateChange(change);
|
|
113
|
+
results.push(message);
|
|
114
|
+
}
|
|
115
|
+
return results;
|
|
116
|
+
}
|
|
117
|
+
// ============================================
|
|
118
|
+
// Subscribing
|
|
119
|
+
// ============================================
|
|
120
|
+
/**
|
|
121
|
+
* Subscribes to all state change events.
|
|
122
|
+
*
|
|
123
|
+
* @param handler - Callback function for state changes
|
|
124
|
+
* @returns Subscription handle
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* const sub = await stateChannel.subscribeToStateChanges(async (payload) => {
|
|
129
|
+
* console.log(`State change: ${payload.agentId} ${payload.fromState} -> ${payload.toState}`);
|
|
130
|
+
* });
|
|
131
|
+
* ```
|
|
132
|
+
*/ async subscribeToStateChanges(handler) {
|
|
133
|
+
return this.broker.subscribe({
|
|
134
|
+
topic: `${StateChannel.BASE_TOPIC}.*.*`,
|
|
135
|
+
handler: async (message)=>{
|
|
136
|
+
await handler(message.payload);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Subscribes to state changes for a specific agent.
|
|
142
|
+
*
|
|
143
|
+
* @param agentId - Agent ID to monitor
|
|
144
|
+
* @param handler - Callback function for state changes
|
|
145
|
+
* @returns Subscription handle
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* const sub = await stateChannel.subscribeToAgent('agent-1', async (payload) => {
|
|
150
|
+
* console.log(`Agent 1 state: ${payload.toState}`);
|
|
151
|
+
* });
|
|
152
|
+
* ```
|
|
153
|
+
*/ async subscribeToAgent(agentId, handler) {
|
|
154
|
+
this.validateAgentId(agentId);
|
|
155
|
+
return this.broker.subscribe({
|
|
156
|
+
topic: `${StateChannel.BASE_TOPIC}.${agentId}.*`,
|
|
157
|
+
handler: async (message)=>{
|
|
158
|
+
await handler(message.payload);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Subscribes to a specific state across all agents.
|
|
164
|
+
*
|
|
165
|
+
* @param state - Agent state to monitor
|
|
166
|
+
* @param handler - Callback function for state changes
|
|
167
|
+
* @returns Subscription handle
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* const sub = await stateChannel.subscribeToState(AgentState.ERROR, async (payload) => {
|
|
172
|
+
* console.error(`Agent ${payload.agentId} entered ERROR state`);
|
|
173
|
+
* });
|
|
174
|
+
* ```
|
|
175
|
+
*/ async subscribeToState(state, handler) {
|
|
176
|
+
return this.broker.subscribe({
|
|
177
|
+
topic: `${StateChannel.BASE_TOPIC}.*.${state}`,
|
|
178
|
+
handler: async (message)=>{
|
|
179
|
+
await handler(message.payload);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Subscribes to error states (ERROR, BLOCKED).
|
|
185
|
+
*
|
|
186
|
+
* @param handler - Callback function for error state changes
|
|
187
|
+
* @returns Subscription handle
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* const sub = await stateChannel.subscribeToErrors(async (payload) => {
|
|
192
|
+
* console.error(`Agent ${payload.agentId} error: ${payload.reason}`);
|
|
193
|
+
* });
|
|
194
|
+
* ```
|
|
195
|
+
*/ async subscribeToErrors(handler) {
|
|
196
|
+
return this.broker.subscribe({
|
|
197
|
+
topic: `${StateChannel.BASE_TOPIC}.*.*`,
|
|
198
|
+
handler: async (message)=>{
|
|
199
|
+
const payload = message.payload;
|
|
200
|
+
const metadata = AGENT_STATE_METADATA[payload.toState];
|
|
201
|
+
if (metadata.isError) {
|
|
202
|
+
await handler(payload);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// ============================================
|
|
208
|
+
// Validation
|
|
209
|
+
// ============================================
|
|
210
|
+
/**
|
|
211
|
+
* Validates state change configuration.
|
|
212
|
+
*
|
|
213
|
+
* @param config - State change to validate
|
|
214
|
+
* @throws {StateChannelError} If validation fails
|
|
215
|
+
*/ validateStateChange(config) {
|
|
216
|
+
this.validateAgentId(config.agentId);
|
|
217
|
+
if (!config.fromState || !Object.values(AgentState).includes(config.fromState)) {
|
|
218
|
+
throw new StateChannelError(`Invalid fromState: ${config.fromState}`);
|
|
219
|
+
}
|
|
220
|
+
if (!config.toState || !Object.values(AgentState).includes(config.toState)) {
|
|
221
|
+
throw new StateChannelError(`Invalid toState: ${config.toState}`);
|
|
222
|
+
}
|
|
223
|
+
if (config.fromState === config.toState) {
|
|
224
|
+
throw new StateChannelError(`Cannot transition to same state: ${config.fromState} -> ${config.toState}`);
|
|
225
|
+
}
|
|
226
|
+
if (config.reason !== undefined && typeof config.reason !== 'string') {
|
|
227
|
+
throw new StateChannelError('Reason must be a string');
|
|
228
|
+
}
|
|
229
|
+
if (config.durationInPreviousState !== undefined) {
|
|
230
|
+
if (typeof config.durationInPreviousState !== 'number' || config.durationInPreviousState < 0) {
|
|
231
|
+
throw new StateChannelError('Duration must be a non-negative number');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Validates agent ID.
|
|
237
|
+
*
|
|
238
|
+
* @param agentId - Agent ID to validate
|
|
239
|
+
* @throws {StateChannelError} If validation fails
|
|
240
|
+
*/ validateAgentId(agentId) {
|
|
241
|
+
if (!agentId || typeof agentId !== 'string') {
|
|
242
|
+
throw new StateChannelError('Agent ID must be a non-empty string');
|
|
243
|
+
}
|
|
244
|
+
if (agentId.length > 256) {
|
|
245
|
+
throw new StateChannelError('Agent ID exceeds 256 characters');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// ============================================
|
|
249
|
+
// Utility Methods
|
|
250
|
+
// ============================================
|
|
251
|
+
/**
|
|
252
|
+
* Builds topic string for state change message.
|
|
253
|
+
*
|
|
254
|
+
* Format: agent.state.{agentId}.{toState}
|
|
255
|
+
*
|
|
256
|
+
* @param agentId - Agent identifier
|
|
257
|
+
* @param state - Target state
|
|
258
|
+
* @returns Topic string
|
|
259
|
+
*/ buildTopic(agentId, state) {
|
|
260
|
+
return `${StateChannel.BASE_TOPIC}.${agentId}.${state}`;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Calculates message priority based on state criticality.
|
|
264
|
+
*
|
|
265
|
+
* Priority mapping:
|
|
266
|
+
* - CRITICAL (10): ERROR, BLOCKED
|
|
267
|
+
* - HIGH (8): COMPLETED, TERMINATED
|
|
268
|
+
* - NORMAL (5): WORKING, HELPING
|
|
269
|
+
* - LOW (2): IDLE, WAITING, PAUSED
|
|
270
|
+
*
|
|
271
|
+
* @param state - Target state
|
|
272
|
+
* @returns Priority level (0-10)
|
|
273
|
+
*/ calculatePriority(state) {
|
|
274
|
+
const metadata = AGENT_STATE_METADATA[state];
|
|
275
|
+
if (metadata.isError) {
|
|
276
|
+
return MessagePriority.CRITICAL; // ERROR, BLOCKED
|
|
277
|
+
}
|
|
278
|
+
if (metadata.isTerminal) {
|
|
279
|
+
return MessagePriority.HIGH; // COMPLETED, TERMINATED
|
|
280
|
+
}
|
|
281
|
+
if (metadata.isActive) {
|
|
282
|
+
return MessagePriority.NORMAL; // WORKING, HELPING
|
|
283
|
+
}
|
|
284
|
+
return MessagePriority.LOW; // IDLE, WAITING, PAUSED
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Gets the base topic for all state changes.
|
|
288
|
+
*
|
|
289
|
+
* @returns Base topic string
|
|
290
|
+
*/ static getBaseTopic() {
|
|
291
|
+
return StateChannel.BASE_TOPIC;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
//# sourceMappingURL=state-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../../../src/coordination/v2/messaging/channels/state-channel.ts"],"names":["AgentState","AGENT_STATE_METADATA","MessagePriority","StateChannelError","Error","message","name","StateChannel","BASE_TOPIC","broker","publishStateChange","config","validateStateChange","payload","agentId","fromState","toState","timestamp","Date","now","reason","metadata","durationInPreviousState","priority","calculatePriority","topic","buildTopic","messageConfig","senderId","channel","stateChange","publish","publishBatchStateChanges","changes","results","change","push","subscribeToStateChanges","handler","subscribe","subscribeToAgent","validateAgentId","subscribeToState","state","subscribeToErrors","isError","Object","values","includes","undefined","length","CRITICAL","isTerminal","HIGH","isActive","NORMAL","LOW","getBaseTopic"],"mappings":"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"}
|