agentic-qe 3.6.0 → 3.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/v3/qe-devils-advocate.md +218 -0
- package/.claude/agents/v3/qe-quality-criteria-recommender.md +2 -2
- package/.claude/skills/qe-iterative-loop/SKILL.md +1 -1
- package/.claude/skills/release/SKILL.md +17 -31
- package/.claude/skills/skills-manifest.json +1 -1
- package/README.md +38 -35
- package/package.json +1 -1
- package/scripts/cloud-db-config.json +1 -1
- package/v3/CHANGELOG.md +44 -0
- package/v3/README.md +7 -7
- package/v3/assets/agents/v3/qe-devils-advocate.md +218 -0
- package/v3/assets/agents/v3/qe-quality-criteria-recommender.md +2 -2
- package/v3/assets/skills/qe-iterative-loop/SKILL.md +1 -1
- package/v3/dist/agents/devils-advocate/agent.d.ts +103 -0
- package/v3/dist/agents/devils-advocate/agent.d.ts.map +1 -0
- package/v3/dist/agents/devils-advocate/agent.js +240 -0
- package/v3/dist/agents/devils-advocate/agent.js.map +1 -0
- package/v3/dist/agents/devils-advocate/index.d.ts +60 -0
- package/v3/dist/agents/devils-advocate/index.d.ts.map +1 -0
- package/v3/dist/agents/devils-advocate/index.js +72 -0
- package/v3/dist/agents/devils-advocate/index.js.map +1 -0
- package/v3/dist/agents/devils-advocate/strategies.d.ts +59 -0
- package/v3/dist/agents/devils-advocate/strategies.d.ts.map +1 -0
- package/v3/dist/agents/devils-advocate/strategies.js +438 -0
- package/v3/dist/agents/devils-advocate/strategies.js.map +1 -0
- package/v3/dist/agents/devils-advocate/types.d.ts +182 -0
- package/v3/dist/agents/devils-advocate/types.d.ts.map +1 -0
- package/v3/dist/agents/devils-advocate/types.js +96 -0
- package/v3/dist/agents/devils-advocate/types.js.map +1 -0
- package/v3/dist/agents/index.d.ts +20 -0
- package/v3/dist/agents/index.d.ts.map +1 -0
- package/v3/dist/agents/index.js +20 -0
- package/v3/dist/agents/index.js.map +1 -0
- package/v3/dist/cli/bundle.js +4489 -119
- package/v3/dist/coordination/agent-teams/adapter.d.ts +108 -0
- package/v3/dist/coordination/agent-teams/adapter.d.ts.map +1 -0
- package/v3/dist/coordination/agent-teams/adapter.js +316 -0
- package/v3/dist/coordination/agent-teams/adapter.js.map +1 -0
- package/v3/dist/coordination/agent-teams/domain-team-manager.d.ts +164 -0
- package/v3/dist/coordination/agent-teams/domain-team-manager.d.ts.map +1 -0
- package/v3/dist/coordination/agent-teams/domain-team-manager.js +342 -0
- package/v3/dist/coordination/agent-teams/domain-team-manager.js.map +1 -0
- package/v3/dist/coordination/agent-teams/index.d.ts +53 -0
- package/v3/dist/coordination/agent-teams/index.d.ts.map +1 -0
- package/v3/dist/coordination/agent-teams/index.js +61 -0
- package/v3/dist/coordination/agent-teams/index.js.map +1 -0
- package/v3/dist/coordination/agent-teams/mailbox.d.ts +142 -0
- package/v3/dist/coordination/agent-teams/mailbox.d.ts.map +1 -0
- package/v3/dist/coordination/agent-teams/mailbox.js +395 -0
- package/v3/dist/coordination/agent-teams/mailbox.js.map +1 -0
- package/v3/dist/coordination/agent-teams/tracing.d.ts +199 -0
- package/v3/dist/coordination/agent-teams/tracing.d.ts.map +1 -0
- package/v3/dist/coordination/agent-teams/tracing.js +308 -0
- package/v3/dist/coordination/agent-teams/tracing.js.map +1 -0
- package/v3/dist/coordination/agent-teams/types.d.ts +121 -0
- package/v3/dist/coordination/agent-teams/types.d.ts.map +1 -0
- package/v3/dist/coordination/agent-teams/types.js +17 -0
- package/v3/dist/coordination/agent-teams/types.js.map +1 -0
- package/v3/dist/coordination/circuit-breaker/breaker-registry.d.ts +146 -0
- package/v3/dist/coordination/circuit-breaker/breaker-registry.d.ts.map +1 -0
- package/v3/dist/coordination/circuit-breaker/breaker-registry.js +368 -0
- package/v3/dist/coordination/circuit-breaker/breaker-registry.js.map +1 -0
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.d.ts +134 -0
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.d.ts.map +1 -0
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.js +337 -0
- package/v3/dist/coordination/circuit-breaker/domain-circuit-breaker.js.map +1 -0
- package/v3/dist/coordination/circuit-breaker/index.d.ts +46 -0
- package/v3/dist/coordination/circuit-breaker/index.d.ts.map +1 -0
- package/v3/dist/coordination/circuit-breaker/index.js +51 -0
- package/v3/dist/coordination/circuit-breaker/index.js.map +1 -0
- package/v3/dist/coordination/circuit-breaker/types.d.ts +112 -0
- package/v3/dist/coordination/circuit-breaker/types.d.ts.map +1 -0
- package/v3/dist/coordination/circuit-breaker/types.js +10 -0
- package/v3/dist/coordination/circuit-breaker/types.js.map +1 -0
- package/v3/dist/coordination/competing-hypotheses/hypothesis-manager.d.ts +122 -0
- package/v3/dist/coordination/competing-hypotheses/hypothesis-manager.d.ts.map +1 -0
- package/v3/dist/coordination/competing-hypotheses/hypothesis-manager.js +377 -0
- package/v3/dist/coordination/competing-hypotheses/hypothesis-manager.js.map +1 -0
- package/v3/dist/coordination/competing-hypotheses/index.d.ts +34 -0
- package/v3/dist/coordination/competing-hypotheses/index.d.ts.map +1 -0
- package/v3/dist/coordination/competing-hypotheses/index.js +39 -0
- package/v3/dist/coordination/competing-hypotheses/index.js.map +1 -0
- package/v3/dist/coordination/competing-hypotheses/types.d.ts +134 -0
- package/v3/dist/coordination/competing-hypotheses/types.d.ts.map +1 -0
- package/v3/dist/coordination/competing-hypotheses/types.js +20 -0
- package/v3/dist/coordination/competing-hypotheses/types.js.map +1 -0
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.d.ts +173 -0
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.d.ts.map +1 -0
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.js +368 -0
- package/v3/dist/coordination/dynamic-scaling/dynamic-scaler.js.map +1 -0
- package/v3/dist/coordination/dynamic-scaling/index.d.ts +38 -0
- package/v3/dist/coordination/dynamic-scaling/index.d.ts.map +1 -0
- package/v3/dist/coordination/dynamic-scaling/index.js +39 -0
- package/v3/dist/coordination/dynamic-scaling/index.js.map +1 -0
- package/v3/dist/coordination/dynamic-scaling/types.d.ts +147 -0
- package/v3/dist/coordination/dynamic-scaling/types.d.ts.map +1 -0
- package/v3/dist/coordination/dynamic-scaling/types.js +40 -0
- package/v3/dist/coordination/dynamic-scaling/types.js.map +1 -0
- package/v3/dist/coordination/federation/federation-mailbox.d.ts +215 -0
- package/v3/dist/coordination/federation/federation-mailbox.d.ts.map +1 -0
- package/v3/dist/coordination/federation/federation-mailbox.js +442 -0
- package/v3/dist/coordination/federation/federation-mailbox.js.map +1 -0
- package/v3/dist/coordination/federation/index.d.ts +38 -0
- package/v3/dist/coordination/federation/index.d.ts.map +1 -0
- package/v3/dist/coordination/federation/index.js +39 -0
- package/v3/dist/coordination/federation/index.js.map +1 -0
- package/v3/dist/coordination/federation/types.d.ts +103 -0
- package/v3/dist/coordination/federation/types.d.ts.map +1 -0
- package/v3/dist/coordination/federation/types.js +20 -0
- package/v3/dist/coordination/federation/types.js.map +1 -0
- package/v3/dist/coordination/fleet-tiers/index.d.ts +39 -0
- package/v3/dist/coordination/fleet-tiers/index.d.ts.map +1 -0
- package/v3/dist/coordination/fleet-tiers/index.js +44 -0
- package/v3/dist/coordination/fleet-tiers/index.js.map +1 -0
- package/v3/dist/coordination/fleet-tiers/tier-config.d.ts +60 -0
- package/v3/dist/coordination/fleet-tiers/tier-config.d.ts.map +1 -0
- package/v3/dist/coordination/fleet-tiers/tier-config.js +242 -0
- package/v3/dist/coordination/fleet-tiers/tier-config.js.map +1 -0
- package/v3/dist/coordination/fleet-tiers/tier-selector.d.ts +134 -0
- package/v3/dist/coordination/fleet-tiers/tier-selector.d.ts.map +1 -0
- package/v3/dist/coordination/fleet-tiers/tier-selector.js +373 -0
- package/v3/dist/coordination/fleet-tiers/tier-selector.js.map +1 -0
- package/v3/dist/coordination/fleet-tiers/types.d.ts +137 -0
- package/v3/dist/coordination/fleet-tiers/types.d.ts.map +1 -0
- package/v3/dist/coordination/fleet-tiers/types.js +20 -0
- package/v3/dist/coordination/fleet-tiers/types.js.map +1 -0
- package/v3/dist/coordination/index.d.ts +16 -0
- package/v3/dist/coordination/index.d.ts.map +1 -1
- package/v3/dist/coordination/index.js +29 -0
- package/v3/dist/coordination/index.js.map +1 -1
- package/v3/dist/coordination/queen-coordinator.d.ts +79 -0
- package/v3/dist/coordination/queen-coordinator.d.ts.map +1 -1
- package/v3/dist/coordination/queen-coordinator.js +363 -0
- package/v3/dist/coordination/queen-coordinator.js.map +1 -1
- package/v3/dist/coordination/task-dag/dag.d.ts +93 -0
- package/v3/dist/coordination/task-dag/dag.d.ts.map +1 -0
- package/v3/dist/coordination/task-dag/dag.js +496 -0
- package/v3/dist/coordination/task-dag/dag.js.map +1 -0
- package/v3/dist/coordination/task-dag/index.d.ts +54 -0
- package/v3/dist/coordination/task-dag/index.d.ts.map +1 -0
- package/v3/dist/coordination/task-dag/index.js +62 -0
- package/v3/dist/coordination/task-dag/index.js.map +1 -0
- package/v3/dist/coordination/task-dag/scheduler.d.ts +123 -0
- package/v3/dist/coordination/task-dag/scheduler.d.ts.map +1 -0
- package/v3/dist/coordination/task-dag/scheduler.js +262 -0
- package/v3/dist/coordination/task-dag/scheduler.js.map +1 -0
- package/v3/dist/coordination/task-dag/types.d.ts +103 -0
- package/v3/dist/coordination/task-dag/types.d.ts.map +1 -0
- package/v3/dist/coordination/task-dag/types.js +9 -0
- package/v3/dist/coordination/task-dag/types.js.map +1 -0
- package/v3/dist/domains/enterprise-integration/services/odata-service.js +3 -3
- package/v3/dist/domains/enterprise-integration/services/odata-service.js.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.d.ts.map +1 -1
- package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.js +9 -4
- package/v3/dist/domains/enterprise-integration/services/soap-wsdl-service.js.map +1 -1
- package/v3/dist/domains/requirements-validation/services/quality-criteria/quality-criteria-service.js +1 -1
- package/v3/dist/domains/requirements-validation/services/quality-criteria/quality-criteria-service.js.map +1 -1
- package/v3/dist/hooks/index.d.ts +8 -1
- package/v3/dist/hooks/index.d.ts.map +1 -1
- package/v3/dist/hooks/index.js +8 -1
- package/v3/dist/hooks/index.js.map +1 -1
- package/v3/dist/hooks/quality-gate-enforcer.d.ts +134 -0
- package/v3/dist/hooks/quality-gate-enforcer.d.ts.map +1 -0
- package/v3/dist/hooks/quality-gate-enforcer.js +265 -0
- package/v3/dist/hooks/quality-gate-enforcer.js.map +1 -0
- package/v3/dist/hooks/reasoning-bank-pattern-store.d.ts +60 -0
- package/v3/dist/hooks/reasoning-bank-pattern-store.d.ts.map +1 -0
- package/v3/dist/hooks/reasoning-bank-pattern-store.js +179 -0
- package/v3/dist/hooks/reasoning-bank-pattern-store.js.map +1 -0
- package/v3/dist/hooks/task-completed-hook.d.ts +174 -0
- package/v3/dist/hooks/task-completed-hook.d.ts.map +1 -0
- package/v3/dist/hooks/task-completed-hook.js +330 -0
- package/v3/dist/hooks/task-completed-hook.js.map +1 -0
- package/v3/dist/hooks/teammate-idle-hook.d.ts +167 -0
- package/v3/dist/hooks/teammate-idle-hook.d.ts.map +1 -0
- package/v3/dist/hooks/teammate-idle-hook.js +332 -0
- package/v3/dist/hooks/teammate-idle-hook.js.map +1 -0
- package/v3/dist/index.d.ts +3 -0
- package/v3/dist/index.d.ts.map +1 -1
- package/v3/dist/index.js +4 -0
- package/v3/dist/index.js.map +1 -1
- package/v3/dist/init/agents-installer.d.ts +5 -1
- package/v3/dist/init/agents-installer.d.ts.map +1 -1
- package/v3/dist/init/agents-installer.js +13 -5
- package/v3/dist/init/agents-installer.js.map +1 -1
- package/v3/dist/init/phases/12-verification.d.ts.map +1 -1
- package/v3/dist/init/phases/12-verification.js +13 -1
- package/v3/dist/init/phases/12-verification.js.map +1 -1
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +303 -18
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/learning/pattern-store.js +1 -1
- package/v3/dist/learning/pattern-store.js.map +1 -1
- package/v3/dist/learning/qe-patterns.d.ts +2 -0
- package/v3/dist/learning/qe-patterns.d.ts.map +1 -1
- package/v3/dist/learning/qe-patterns.js.map +1 -1
- package/v3/dist/learning/qe-reasoning-bank.d.ts.map +1 -1
- package/v3/dist/learning/qe-reasoning-bank.js +16 -3
- package/v3/dist/learning/qe-reasoning-bank.js.map +1 -1
- package/v3/dist/mcp/bundle.js +4473 -133
- package/v3/dist/sync/cloud/tunnel-manager.d.ts.map +1 -1
- package/v3/dist/sync/cloud/tunnel-manager.js +11 -0
- package/v3/dist/sync/cloud/tunnel-manager.js.map +1 -1
- package/v3/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Cross-Fleet Federation Module
|
|
3
|
+
* ADR-064 Phase 4B: Multi-Service Communication
|
|
4
|
+
*
|
|
5
|
+
* Enables multiple fleet instances (e.g., running in different services or
|
|
6
|
+
* repositories) to exchange messages through a federation layer. Services
|
|
7
|
+
* register with the FederationMailbox, which handles routing, health
|
|
8
|
+
* monitoring, and queue management.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import {
|
|
13
|
+
* createFederationMailbox,
|
|
14
|
+
* FederationMailbox,
|
|
15
|
+
* } from '@agentic-qe/v3/coordination/federation';
|
|
16
|
+
*
|
|
17
|
+
* const mailbox = createFederationMailbox({ localFleetId: 'fleet-a' });
|
|
18
|
+
*
|
|
19
|
+
* // Register a remote fleet service
|
|
20
|
+
* mailbox.registerService('fleet-b', 'Coverage Service', ['coverage-analysis']);
|
|
21
|
+
*
|
|
22
|
+
* // Route and send messages
|
|
23
|
+
* mailbox.addRoute('test-generation', 'coverage-analysis', 'fleet-b', 10);
|
|
24
|
+
* mailbox.send('fleet-b', 'test-generation', 'coverage-analysis',
|
|
25
|
+
* 'task-request', { spec: 'auth-module' });
|
|
26
|
+
*
|
|
27
|
+
* // Transport layer drains outbox
|
|
28
|
+
* const pending = mailbox.drainOutbox();
|
|
29
|
+
*
|
|
30
|
+
* // Cleanup
|
|
31
|
+
* mailbox.dispose();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export { FederationMailbox, createFederationMailbox, } from './federation-mailbox.js';
|
|
35
|
+
export type { FederatedMessageHandler } from './federation-mailbox.js';
|
|
36
|
+
export type { FleetId, FederatedService, FederatedMessage, FederatedMessageType, FederationRoute, FederationHealth, FederationConfig, ServiceStatus, } from './types.js';
|
|
37
|
+
export { DEFAULT_FEDERATION_CONFIG } from './types.js';
|
|
38
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/coordination/federation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAMH,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAMvE,YAAY,EACV,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Cross-Fleet Federation Module
|
|
3
|
+
* ADR-064 Phase 4B: Multi-Service Communication
|
|
4
|
+
*
|
|
5
|
+
* Enables multiple fleet instances (e.g., running in different services or
|
|
6
|
+
* repositories) to exchange messages through a federation layer. Services
|
|
7
|
+
* register with the FederationMailbox, which handles routing, health
|
|
8
|
+
* monitoring, and queue management.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import {
|
|
13
|
+
* createFederationMailbox,
|
|
14
|
+
* FederationMailbox,
|
|
15
|
+
* } from '@agentic-qe/v3/coordination/federation';
|
|
16
|
+
*
|
|
17
|
+
* const mailbox = createFederationMailbox({ localFleetId: 'fleet-a' });
|
|
18
|
+
*
|
|
19
|
+
* // Register a remote fleet service
|
|
20
|
+
* mailbox.registerService('fleet-b', 'Coverage Service', ['coverage-analysis']);
|
|
21
|
+
*
|
|
22
|
+
* // Route and send messages
|
|
23
|
+
* mailbox.addRoute('test-generation', 'coverage-analysis', 'fleet-b', 10);
|
|
24
|
+
* mailbox.send('fleet-b', 'test-generation', 'coverage-analysis',
|
|
25
|
+
* 'task-request', { spec: 'auth-module' });
|
|
26
|
+
*
|
|
27
|
+
* // Transport layer drains outbox
|
|
28
|
+
* const pending = mailbox.drainOutbox();
|
|
29
|
+
*
|
|
30
|
+
* // Cleanup
|
|
31
|
+
* mailbox.dispose();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// Federation Mailbox
|
|
36
|
+
// ============================================================================
|
|
37
|
+
export { FederationMailbox, createFederationMailbox, } from './federation-mailbox.js';
|
|
38
|
+
export { DEFAULT_FEDERATION_CONFIG } from './types.js';
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/coordination/federation/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,+EAA+E;AAC/E,qBAAqB;AACrB,+EAA+E;AAE/E,OAAO,EACL,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAmBjC,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Cross-Fleet Federation Types
|
|
3
|
+
* ADR-064 Phase 4B: Multi-Service Communication
|
|
4
|
+
*
|
|
5
|
+
* Defines the type contracts for cross-fleet federation, enabling multiple
|
|
6
|
+
* fleet instances (e.g., running in different services/repos) to exchange
|
|
7
|
+
* messages through a federation layer.
|
|
8
|
+
*
|
|
9
|
+
* Types are intentionally readonly to enforce immutability at public API
|
|
10
|
+
* boundaries. Mutable counterparts live inside the FederationMailbox class.
|
|
11
|
+
*/
|
|
12
|
+
/** Unique identifier for a fleet instance in the federation */
|
|
13
|
+
export type FleetId = string;
|
|
14
|
+
/** Service registration in the federation */
|
|
15
|
+
export interface FederatedService {
|
|
16
|
+
/** Unique fleet identifier for this service */
|
|
17
|
+
readonly fleetId: FleetId;
|
|
18
|
+
/** Human-readable service name */
|
|
19
|
+
readonly name: string;
|
|
20
|
+
/** QE domains this service handles (e.g., 'test-generation', 'coverage-analysis') */
|
|
21
|
+
readonly domains: string[];
|
|
22
|
+
/** Optional transport endpoint for remote communication */
|
|
23
|
+
readonly endpoint?: string;
|
|
24
|
+
/** Current health status of the service */
|
|
25
|
+
readonly status: ServiceStatus;
|
|
26
|
+
/** Epoch timestamp when the service was registered */
|
|
27
|
+
readonly registeredAt: number;
|
|
28
|
+
/** Epoch timestamp of the last heartbeat received */
|
|
29
|
+
readonly lastHeartbeat: number;
|
|
30
|
+
/** Arbitrary metadata attached to the service */
|
|
31
|
+
readonly metadata?: Record<string, string>;
|
|
32
|
+
}
|
|
33
|
+
/** Health status of a federated service */
|
|
34
|
+
export type ServiceStatus = 'active' | 'degraded' | 'unreachable' | 'deregistered';
|
|
35
|
+
/** Message routed between fleet instances */
|
|
36
|
+
export interface FederatedMessage {
|
|
37
|
+
/** Unique message identifier */
|
|
38
|
+
readonly id: string;
|
|
39
|
+
/** Fleet that originated this message */
|
|
40
|
+
readonly sourceFleetId: FleetId;
|
|
41
|
+
/** Target fleet ID, or 'any' for route-based resolution */
|
|
42
|
+
readonly targetFleetId: FleetId | 'any';
|
|
43
|
+
/** Domain context of the sender */
|
|
44
|
+
readonly sourceDomain: string;
|
|
45
|
+
/** Domain context the message is intended for */
|
|
46
|
+
readonly targetDomain: string;
|
|
47
|
+
/** Classification of the message */
|
|
48
|
+
readonly type: FederatedMessageType;
|
|
49
|
+
/** Message payload (type depends on message type) */
|
|
50
|
+
readonly payload: unknown;
|
|
51
|
+
/** Epoch timestamp when the message was created */
|
|
52
|
+
readonly timestamp: number;
|
|
53
|
+
/** Time-to-live in milliseconds (message expires after this duration) */
|
|
54
|
+
readonly ttl?: number;
|
|
55
|
+
/** Correlation ID for tracking related messages across fleets */
|
|
56
|
+
readonly correlationId?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Types of messages exchanged between federated fleets */
|
|
59
|
+
export type FederatedMessageType = 'task-request' | 'task-response' | 'finding-share' | 'pattern-share' | 'health-report' | 'capability-query' | 'capability-response';
|
|
60
|
+
/** Route definition for cross-fleet message routing */
|
|
61
|
+
export interface FederationRoute {
|
|
62
|
+
/** Source domain that sends messages via this route */
|
|
63
|
+
readonly sourceDomain: string;
|
|
64
|
+
/** Target domain that receives messages via this route */
|
|
65
|
+
readonly targetDomain: string;
|
|
66
|
+
/** Fleet ID this route delivers to */
|
|
67
|
+
readonly targetFleetId: FleetId;
|
|
68
|
+
/** Priority for route selection (higher = preferred) */
|
|
69
|
+
readonly priority: number;
|
|
70
|
+
/** Whether this route is currently active */
|
|
71
|
+
readonly active: boolean;
|
|
72
|
+
}
|
|
73
|
+
/** Federation health summary */
|
|
74
|
+
export interface FederationHealth {
|
|
75
|
+
/** This fleet's identifier */
|
|
76
|
+
readonly localFleetId: FleetId;
|
|
77
|
+
/** Number of services currently in 'active' status */
|
|
78
|
+
readonly connectedServices: number;
|
|
79
|
+
/** Number of active routing rules */
|
|
80
|
+
readonly activeRoutes: number;
|
|
81
|
+
/** Total pending messages in inbox + outbox */
|
|
82
|
+
readonly pendingMessages: number;
|
|
83
|
+
/** Total messages sent since creation */
|
|
84
|
+
readonly messagesSent: number;
|
|
85
|
+
/** Total messages received since creation */
|
|
86
|
+
readonly messagesReceived: number;
|
|
87
|
+
}
|
|
88
|
+
/** Configuration for the federation mailbox */
|
|
89
|
+
export interface FederationConfig {
|
|
90
|
+
/** This fleet's unique identifier in the federation */
|
|
91
|
+
readonly localFleetId: FleetId;
|
|
92
|
+
/** Interval between heartbeat checks in milliseconds */
|
|
93
|
+
readonly heartbeatIntervalMs: number;
|
|
94
|
+
/** Time after last heartbeat before a service is marked unreachable */
|
|
95
|
+
readonly serviceTimeoutMs: number;
|
|
96
|
+
/** Maximum number of pending messages (inbox + outbox each) */
|
|
97
|
+
readonly maxPendingMessages: number;
|
|
98
|
+
/** Maximum number of routing rules */
|
|
99
|
+
readonly maxRoutes: number;
|
|
100
|
+
}
|
|
101
|
+
/** Sensible defaults for federation configuration */
|
|
102
|
+
export declare const DEFAULT_FEDERATION_CONFIG: FederationConfig;
|
|
103
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/coordination/federation/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Cross-Fleet Federation Types
|
|
3
|
+
* ADR-064 Phase 4B: Multi-Service Communication
|
|
4
|
+
*
|
|
5
|
+
* Defines the type contracts for cross-fleet federation, enabling multiple
|
|
6
|
+
* fleet instances (e.g., running in different services/repos) to exchange
|
|
7
|
+
* messages through a federation layer.
|
|
8
|
+
*
|
|
9
|
+
* Types are intentionally readonly to enforce immutability at public API
|
|
10
|
+
* boundaries. Mutable counterparts live inside the FederationMailbox class.
|
|
11
|
+
*/
|
|
12
|
+
/** Sensible defaults for federation configuration */
|
|
13
|
+
export const DEFAULT_FEDERATION_CONFIG = {
|
|
14
|
+
localFleetId: 'local',
|
|
15
|
+
heartbeatIntervalMs: 30_000,
|
|
16
|
+
serviceTimeoutMs: 90_000,
|
|
17
|
+
maxPendingMessages: 5000,
|
|
18
|
+
maxRoutes: 100,
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/coordination/federation/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA+JH,qDAAqD;AACrD,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD,YAAY,EAAE,OAAO;IACrB,mBAAmB,EAAE,MAAM;IAC3B,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,IAAI;IACxB,SAAS,EAAE,GAAG;CACf,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Fleet Tier Activation System
|
|
3
|
+
* ADR-064 Phase 1D: Tiered Fleet Activation Configuration
|
|
4
|
+
*
|
|
5
|
+
* Controls how many agents activate based on task complexity, balancing
|
|
6
|
+
* cost against validation thoroughness. Four tiers from lightweight smoke
|
|
7
|
+
* runs (every commit) through full crisis mode (production incidents).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import {
|
|
12
|
+
* createTierSelector,
|
|
13
|
+
* getDefaultTierConfig,
|
|
14
|
+
* DEFAULT_TIER_CONFIGS,
|
|
15
|
+
* } from './coordination/fleet-tiers';
|
|
16
|
+
*
|
|
17
|
+
* // Create a selector with default configs
|
|
18
|
+
* const selector = createTierSelector();
|
|
19
|
+
*
|
|
20
|
+
* // Select tier based on context
|
|
21
|
+
* const result = selector.selectTier({
|
|
22
|
+
* trigger: 'pr',
|
|
23
|
+
* changedFiles: 5,
|
|
24
|
+
* affectedDomains: ['test-generation', 'coverage-analysis'],
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* console.log(result.selectedTier); // 'standard'
|
|
28
|
+
* console.log(result.agentAllocation);
|
|
29
|
+
*
|
|
30
|
+
* // Escalate if needed
|
|
31
|
+
* const escalated = selector.escalate('standard', 'Flaky test detected');
|
|
32
|
+
* console.log(escalated.selectedTier); // 'deep'
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export type { FleetTier, TierCostLevel, TierTriggerType, TierTrigger, TierConfig, TierSelectionContext, AgentAllocation, TierSelectionResult, TierSelectionRecord, TierSelectionStats, } from './types';
|
|
36
|
+
export { FLEET_TIER_ORDER } from './types';
|
|
37
|
+
export { ALL_USER_FACING_DOMAINS, CORE_PRIORITY_DOMAINS, DEFAULT_DOMAIN_AGENT_MAP, DEFAULT_TIER_CONFIGS, getDefaultTierConfig, validateTierConfig, } from './tier-config';
|
|
38
|
+
export { TierSelector, createTierSelector } from './tier-selector';
|
|
39
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/coordination/fleet-tiers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAMH,YAAY,EACV,SAAS,EACT,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAM3C,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Fleet Tier Activation System
|
|
3
|
+
* ADR-064 Phase 1D: Tiered Fleet Activation Configuration
|
|
4
|
+
*
|
|
5
|
+
* Controls how many agents activate based on task complexity, balancing
|
|
6
|
+
* cost against validation thoroughness. Four tiers from lightweight smoke
|
|
7
|
+
* runs (every commit) through full crisis mode (production incidents).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import {
|
|
12
|
+
* createTierSelector,
|
|
13
|
+
* getDefaultTierConfig,
|
|
14
|
+
* DEFAULT_TIER_CONFIGS,
|
|
15
|
+
* } from './coordination/fleet-tiers';
|
|
16
|
+
*
|
|
17
|
+
* // Create a selector with default configs
|
|
18
|
+
* const selector = createTierSelector();
|
|
19
|
+
*
|
|
20
|
+
* // Select tier based on context
|
|
21
|
+
* const result = selector.selectTier({
|
|
22
|
+
* trigger: 'pr',
|
|
23
|
+
* changedFiles: 5,
|
|
24
|
+
* affectedDomains: ['test-generation', 'coverage-analysis'],
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* console.log(result.selectedTier); // 'standard'
|
|
28
|
+
* console.log(result.agentAllocation);
|
|
29
|
+
*
|
|
30
|
+
* // Escalate if needed
|
|
31
|
+
* const escalated = selector.escalate('standard', 'Flaky test detected');
|
|
32
|
+
* console.log(escalated.selectedTier); // 'deep'
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export { FLEET_TIER_ORDER } from './types';
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// Configuration
|
|
38
|
+
// ============================================================================
|
|
39
|
+
export { ALL_USER_FACING_DOMAINS, CORE_PRIORITY_DOMAINS, DEFAULT_DOMAIN_AGENT_MAP, DEFAULT_TIER_CONFIGS, getDefaultTierConfig, validateTierConfig, } from './tier-config';
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Selector
|
|
42
|
+
// ============================================================================
|
|
43
|
+
export { TierSelector, createTierSelector } from './tier-selector';
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/coordination/fleet-tiers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Fleet Tier Configuration Defaults
|
|
3
|
+
* ADR-064 Phase 1D: Tiered Fleet Activation Configuration
|
|
4
|
+
*
|
|
5
|
+
* Provides the default tier configurations for all four fleet tiers.
|
|
6
|
+
* These defaults can be overridden by passing custom configs to the
|
|
7
|
+
* TierSelector constructor.
|
|
8
|
+
*/
|
|
9
|
+
import type { DomainName } from '../../shared/types';
|
|
10
|
+
import type { FleetTier, TierConfig } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* All 13 user-facing domain names (excludes 'coordination' which is internal).
|
|
13
|
+
* Used when a tier specifies `['all']` or needs the full domain list.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ALL_USER_FACING_DOMAINS: readonly DomainName[];
|
|
16
|
+
/**
|
|
17
|
+
* Core domains that receive priority allocation when agents are limited.
|
|
18
|
+
* These domains cover the most critical quality engineering activities.
|
|
19
|
+
*/
|
|
20
|
+
export declare const CORE_PRIORITY_DOMAINS: readonly DomainName[];
|
|
21
|
+
/**
|
|
22
|
+
* Maps each domain to the agent types that operate within it.
|
|
23
|
+
* Used by the TierSelector when allocating agents to domains.
|
|
24
|
+
*/
|
|
25
|
+
export declare const DEFAULT_DOMAIN_AGENT_MAP: Readonly<Record<string, readonly string[]>>;
|
|
26
|
+
/**
|
|
27
|
+
* Default configurations for all four fleet tiers.
|
|
28
|
+
* Keyed by FleetTier for O(1) lookup.
|
|
29
|
+
*/
|
|
30
|
+
export declare const DEFAULT_TIER_CONFIGS: Readonly<Record<FleetTier, TierConfig>>;
|
|
31
|
+
/**
|
|
32
|
+
* Retrieve the default configuration for a given fleet tier.
|
|
33
|
+
*
|
|
34
|
+
* @param tier - The fleet tier to look up
|
|
35
|
+
* @returns The default TierConfig for the requested tier
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const config = getDefaultTierConfig('standard');
|
|
40
|
+
* console.log(config.maxAgents); // 7
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function getDefaultTierConfig(tier: FleetTier): TierConfig;
|
|
44
|
+
/**
|
|
45
|
+
* Validate a tier configuration and return a list of validation errors.
|
|
46
|
+
* Returns an empty array if the configuration is valid.
|
|
47
|
+
*
|
|
48
|
+
* @param config - The TierConfig to validate
|
|
49
|
+
* @returns Array of human-readable validation error strings
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const errors = validateTierConfig(myConfig);
|
|
54
|
+
* if (errors.length > 0) {
|
|
55
|
+
* console.error('Invalid tier config:', errors);
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function validateTierConfig(config: TierConfig): string[];
|
|
60
|
+
//# sourceMappingURL=tier-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-config.d.ts","sourceRoot":"","sources":["../../../src/coordination/fleet-tiers/tier-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAiB,MAAM,SAAS,CAAC;AAMpE;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,UAAU,EAc/C,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,UAAU,EAI7C,CAAC;AAMX;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAcvE,CAAC;AAyFX;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAK/D,CAAC;AAMX;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAEhE;AAwBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAwD/D"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Fleet Tier Configuration Defaults
|
|
3
|
+
* ADR-064 Phase 1D: Tiered Fleet Activation Configuration
|
|
4
|
+
*
|
|
5
|
+
* Provides the default tier configurations for all four fleet tiers.
|
|
6
|
+
* These defaults can be overridden by passing custom configs to the
|
|
7
|
+
* TierSelector constructor.
|
|
8
|
+
*/
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Domain Constants
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* All 13 user-facing domain names (excludes 'coordination' which is internal).
|
|
14
|
+
* Used when a tier specifies `['all']` or needs the full domain list.
|
|
15
|
+
*/
|
|
16
|
+
export const ALL_USER_FACING_DOMAINS = [
|
|
17
|
+
'test-generation',
|
|
18
|
+
'test-execution',
|
|
19
|
+
'coverage-analysis',
|
|
20
|
+
'quality-assessment',
|
|
21
|
+
'defect-intelligence',
|
|
22
|
+
'requirements-validation',
|
|
23
|
+
'code-intelligence',
|
|
24
|
+
'security-compliance',
|
|
25
|
+
'contract-testing',
|
|
26
|
+
'visual-accessibility',
|
|
27
|
+
'chaos-resilience',
|
|
28
|
+
'learning-optimization',
|
|
29
|
+
'enterprise-integration',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Core domains that receive priority allocation when agents are limited.
|
|
33
|
+
* These domains cover the most critical quality engineering activities.
|
|
34
|
+
*/
|
|
35
|
+
export const CORE_PRIORITY_DOMAINS = [
|
|
36
|
+
'test-generation',
|
|
37
|
+
'coverage-analysis',
|
|
38
|
+
'quality-assessment',
|
|
39
|
+
];
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Domain-to-Agent-Type Mapping
|
|
42
|
+
// ============================================================================
|
|
43
|
+
/**
|
|
44
|
+
* Maps each domain to the agent types that operate within it.
|
|
45
|
+
* Used by the TierSelector when allocating agents to domains.
|
|
46
|
+
*/
|
|
47
|
+
export const DEFAULT_DOMAIN_AGENT_MAP = {
|
|
48
|
+
'test-generation': ['generator', 'specialist'],
|
|
49
|
+
'test-execution': ['tester', 'coordinator'],
|
|
50
|
+
'coverage-analysis': ['analyzer', 'specialist'],
|
|
51
|
+
'quality-assessment': ['analyzer', 'validator'],
|
|
52
|
+
'defect-intelligence': ['analyzer', 'specialist'],
|
|
53
|
+
'requirements-validation': ['validator', 'reviewer'],
|
|
54
|
+
'code-intelligence': ['analyzer', 'specialist'],
|
|
55
|
+
'security-compliance': ['analyzer', 'validator'],
|
|
56
|
+
'contract-testing': ['tester', 'validator'],
|
|
57
|
+
'visual-accessibility': ['tester', 'validator'],
|
|
58
|
+
'chaos-resilience': ['tester', 'specialist'],
|
|
59
|
+
'learning-optimization': ['optimizer', 'specialist'],
|
|
60
|
+
'enterprise-integration': ['coordinator', 'validator'],
|
|
61
|
+
};
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Smoke Tier (every commit)
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/** Smoke tier: lightweight validation on every commit */
|
|
66
|
+
const SMOKE_TIER_CONFIG = {
|
|
67
|
+
tier: 'smoke',
|
|
68
|
+
maxAgents: 3,
|
|
69
|
+
agentTeamsEnabled: false,
|
|
70
|
+
domains: ['test-execution', 'quality-assessment'],
|
|
71
|
+
estimatedCost: 'minimal',
|
|
72
|
+
description: 'Lightweight smoke test on every commit. Runs core test execution and quality assessment with minimal agent count to catch obvious regressions quickly.',
|
|
73
|
+
triggers: [
|
|
74
|
+
{ type: 'commit' },
|
|
75
|
+
{ type: 'schedule', conditions: { interval: 'hourly' } },
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
// ============================================================================
|
|
79
|
+
// Standard Tier (PR opened)
|
|
80
|
+
// ============================================================================
|
|
81
|
+
/** Standard tier: comprehensive PR validation */
|
|
82
|
+
const STANDARD_TIER_CONFIG = {
|
|
83
|
+
tier: 'standard',
|
|
84
|
+
maxAgents: 7,
|
|
85
|
+
agentTeamsEnabled: false,
|
|
86
|
+
domains: [
|
|
87
|
+
'test-generation',
|
|
88
|
+
'test-execution',
|
|
89
|
+
'coverage-analysis',
|
|
90
|
+
'quality-assessment',
|
|
91
|
+
'security-compliance',
|
|
92
|
+
],
|
|
93
|
+
estimatedCost: 'moderate',
|
|
94
|
+
description: 'Standard validation for pull requests. Covers test generation, execution, coverage, quality, and security across up to 7 agents. Agent teams are optional.',
|
|
95
|
+
triggers: [
|
|
96
|
+
{ type: 'pr' },
|
|
97
|
+
{ type: 'manual' },
|
|
98
|
+
],
|
|
99
|
+
};
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Deep Tier (pre-release, critical path)
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/** Deep tier: thorough pre-release validation across all domains */
|
|
104
|
+
const DEEP_TIER_CONFIG = {
|
|
105
|
+
tier: 'deep',
|
|
106
|
+
maxAgents: 15,
|
|
107
|
+
agentTeamsEnabled: true,
|
|
108
|
+
domains: [...ALL_USER_FACING_DOMAINS],
|
|
109
|
+
estimatedCost: 'high',
|
|
110
|
+
description: 'Deep validation for pre-release and critical path changes. Activates all 13 domains with up to 15 agents and full agent team collaboration.',
|
|
111
|
+
triggers: [
|
|
112
|
+
{ type: 'release' },
|
|
113
|
+
{ type: 'pr', conditions: { criticalPath: true } },
|
|
114
|
+
{ type: 'manual', conditions: { requestedTier: 'deep' } },
|
|
115
|
+
],
|
|
116
|
+
};
|
|
117
|
+
// ============================================================================
|
|
118
|
+
// Crisis Tier (production incident)
|
|
119
|
+
// ============================================================================
|
|
120
|
+
/** Crisis tier: full activation with competing hypotheses for incidents */
|
|
121
|
+
const CRISIS_TIER_CONFIG = {
|
|
122
|
+
tier: 'crisis',
|
|
123
|
+
maxAgents: 15,
|
|
124
|
+
agentTeamsEnabled: true,
|
|
125
|
+
domains: [...ALL_USER_FACING_DOMAINS],
|
|
126
|
+
estimatedCost: 'unlimited',
|
|
127
|
+
description: 'Crisis response for production incidents. All domains active with competing hypotheses enabled. Unlimited cost budget to resolve incidents as fast as possible.',
|
|
128
|
+
triggers: [
|
|
129
|
+
{ type: 'incident' },
|
|
130
|
+
{ type: 'manual', conditions: { requestedTier: 'crisis' } },
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
// ============================================================================
|
|
134
|
+
// Default Tier Config Map
|
|
135
|
+
// ============================================================================
|
|
136
|
+
/**
|
|
137
|
+
* Default configurations for all four fleet tiers.
|
|
138
|
+
* Keyed by FleetTier for O(1) lookup.
|
|
139
|
+
*/
|
|
140
|
+
export const DEFAULT_TIER_CONFIGS = {
|
|
141
|
+
smoke: SMOKE_TIER_CONFIG,
|
|
142
|
+
standard: STANDARD_TIER_CONFIG,
|
|
143
|
+
deep: DEEP_TIER_CONFIG,
|
|
144
|
+
crisis: CRISIS_TIER_CONFIG,
|
|
145
|
+
};
|
|
146
|
+
// ============================================================================
|
|
147
|
+
// Accessor Functions
|
|
148
|
+
// ============================================================================
|
|
149
|
+
/**
|
|
150
|
+
* Retrieve the default configuration for a given fleet tier.
|
|
151
|
+
*
|
|
152
|
+
* @param tier - The fleet tier to look up
|
|
153
|
+
* @returns The default TierConfig for the requested tier
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const config = getDefaultTierConfig('standard');
|
|
158
|
+
* console.log(config.maxAgents); // 7
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
export function getDefaultTierConfig(tier) {
|
|
162
|
+
return DEFAULT_TIER_CONFIGS[tier];
|
|
163
|
+
}
|
|
164
|
+
// ============================================================================
|
|
165
|
+
// Validation
|
|
166
|
+
// ============================================================================
|
|
167
|
+
/** Valid cost levels for validation */
|
|
168
|
+
const VALID_COST_LEVELS = [
|
|
169
|
+
'minimal',
|
|
170
|
+
'moderate',
|
|
171
|
+
'high',
|
|
172
|
+
'unlimited',
|
|
173
|
+
];
|
|
174
|
+
/** Valid trigger types for validation */
|
|
175
|
+
const VALID_TRIGGER_TYPES = new Set([
|
|
176
|
+
'commit',
|
|
177
|
+
'pr',
|
|
178
|
+
'release',
|
|
179
|
+
'incident',
|
|
180
|
+
'manual',
|
|
181
|
+
'schedule',
|
|
182
|
+
]);
|
|
183
|
+
/**
|
|
184
|
+
* Validate a tier configuration and return a list of validation errors.
|
|
185
|
+
* Returns an empty array if the configuration is valid.
|
|
186
|
+
*
|
|
187
|
+
* @param config - The TierConfig to validate
|
|
188
|
+
* @returns Array of human-readable validation error strings
|
|
189
|
+
*
|
|
190
|
+
* @example
|
|
191
|
+
* ```typescript
|
|
192
|
+
* const errors = validateTierConfig(myConfig);
|
|
193
|
+
* if (errors.length > 0) {
|
|
194
|
+
* console.error('Invalid tier config:', errors);
|
|
195
|
+
* }
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
export function validateTierConfig(config) {
|
|
199
|
+
const errors = [];
|
|
200
|
+
// Validate tier name
|
|
201
|
+
const validTiers = ['smoke', 'standard', 'deep', 'crisis'];
|
|
202
|
+
if (!validTiers.includes(config.tier)) {
|
|
203
|
+
errors.push(`Invalid tier name: "${config.tier}". Must be one of: ${validTiers.join(', ')}`);
|
|
204
|
+
}
|
|
205
|
+
// Validate maxAgents
|
|
206
|
+
if (!Number.isInteger(config.maxAgents) || config.maxAgents < 1) {
|
|
207
|
+
errors.push(`maxAgents must be a positive integer, got: ${config.maxAgents}`);
|
|
208
|
+
}
|
|
209
|
+
if (config.maxAgents > 15) {
|
|
210
|
+
errors.push(`maxAgents exceeds fleet maximum of 15, got: ${config.maxAgents}`);
|
|
211
|
+
}
|
|
212
|
+
// Validate domains
|
|
213
|
+
if (!Array.isArray(config.domains) || config.domains.length === 0) {
|
|
214
|
+
errors.push('domains must be a non-empty array');
|
|
215
|
+
}
|
|
216
|
+
// Validate estimatedCost
|
|
217
|
+
if (!VALID_COST_LEVELS.includes(config.estimatedCost)) {
|
|
218
|
+
errors.push(`Invalid estimatedCost: "${config.estimatedCost}". Must be one of: ${VALID_COST_LEVELS.join(', ')}`);
|
|
219
|
+
}
|
|
220
|
+
// Validate description
|
|
221
|
+
if (!config.description || config.description.trim().length === 0) {
|
|
222
|
+
errors.push('description must be a non-empty string');
|
|
223
|
+
}
|
|
224
|
+
// Validate triggers
|
|
225
|
+
if (!Array.isArray(config.triggers) || config.triggers.length === 0) {
|
|
226
|
+
errors.push('triggers must be a non-empty array');
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
for (let i = 0; i < config.triggers.length; i++) {
|
|
230
|
+
const trigger = config.triggers[i];
|
|
231
|
+
if (!trigger || !VALID_TRIGGER_TYPES.has(trigger.type)) {
|
|
232
|
+
errors.push(`triggers[${i}] has invalid type: "${trigger?.type}". Must be one of: ${[...VALID_TRIGGER_TYPES].join(', ')}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Validate agentTeamsEnabled consistency
|
|
237
|
+
if (config.agentTeamsEnabled && config.maxAgents < 3) {
|
|
238
|
+
errors.push('agentTeamsEnabled requires maxAgents >= 3 for meaningful team collaboration');
|
|
239
|
+
}
|
|
240
|
+
return errors;
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=tier-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-config.js","sourceRoot":"","sources":["../../../src/coordination/fleet-tiers/tier-config.ts"],"names":[],"mappings":"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"}
|