agentic-qe 1.8.4 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/agentic-jujutsu/SKILL.md +645 -0
- package/CHANGELOG.md +375 -0
- package/README.md +86 -18
- package/dist/App.d.ts +5 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +15 -0
- package/dist/App.js.map +1 -0
- package/dist/cli/commands/constitution.d.ts +34 -0
- package/dist/cli/commands/constitution.d.ts.map +1 -0
- package/dist/cli/commands/constitution.js +679 -0
- package/dist/cli/commands/constitution.js.map +1 -0
- package/dist/cli/commands/init.d.ts +8 -75
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +22 -2292
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/telemetry.d.ts +36 -0
- package/dist/cli/commands/telemetry.d.ts.map +1 -0
- package/dist/cli/commands/telemetry.js +364 -0
- package/dist/cli/commands/telemetry.js.map +1 -0
- package/dist/cli/index.js +66 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +22 -0
- package/dist/cli/init/agents.d.ts.map +1 -0
- package/dist/cli/init/agents.js +522 -0
- package/dist/cli/init/agents.js.map +1 -0
- package/dist/cli/init/bash-wrapper.d.ts +14 -0
- package/dist/cli/init/bash-wrapper.d.ts.map +1 -0
- package/dist/cli/init/bash-wrapper.js +47 -0
- package/dist/cli/init/bash-wrapper.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts +24 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -0
- package/dist/cli/init/claude-config.js +275 -0
- package/dist/cli/init/claude-config.js.map +1 -0
- package/dist/cli/init/claude-md.d.ts +19 -0
- package/dist/cli/init/claude-md.d.ts.map +1 -0
- package/dist/cli/init/claude-md.js +153 -0
- package/dist/cli/init/claude-md.js.map +1 -0
- package/dist/cli/init/commands.d.ts +6 -0
- package/dist/cli/init/commands.d.ts.map +1 -0
- package/dist/cli/init/commands.js +83 -0
- package/dist/cli/init/commands.js.map +1 -0
- package/dist/cli/init/database-init.d.ts +15 -0
- package/dist/cli/init/database-init.d.ts.map +1 -0
- package/dist/cli/init/database-init.js +203 -0
- package/dist/cli/init/database-init.js.map +1 -0
- package/dist/cli/init/directory-structure.d.ts +14 -0
- package/dist/cli/init/directory-structure.d.ts.map +1 -0
- package/dist/cli/init/directory-structure.js +107 -0
- package/dist/cli/init/directory-structure.js.map +1 -0
- package/dist/cli/init/documentation.d.ts +14 -0
- package/dist/cli/init/documentation.d.ts.map +1 -0
- package/dist/cli/init/documentation.js +195 -0
- package/dist/cli/init/documentation.js.map +1 -0
- package/dist/cli/init/fleet-config.d.ts +34 -0
- package/dist/cli/init/fleet-config.d.ts.map +1 -0
- package/dist/cli/init/fleet-config.js +269 -0
- package/dist/cli/init/fleet-config.js.map +1 -0
- package/dist/cli/init/helpers.d.ts +6 -0
- package/dist/cli/init/helpers.d.ts.map +1 -0
- package/dist/cli/init/helpers.js +94 -0
- package/dist/cli/init/helpers.js.map +1 -0
- package/dist/cli/init/index.d.ts +32 -0
- package/dist/cli/init/index.d.ts.map +1 -0
- package/dist/cli/init/index.js +294 -0
- package/dist/cli/init/index.js.map +1 -0
- package/dist/cli/init/skills.d.ts +6 -0
- package/dist/cli/init/skills.d.ts.map +1 -0
- package/dist/cli/init/skills.js +138 -0
- package/dist/cli/init/skills.js.map +1 -0
- package/dist/cli/init/utils/file-utils.d.ts +74 -0
- package/dist/cli/init/utils/file-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/file-utils.js +187 -0
- package/dist/cli/init/utils/file-utils.js.map +1 -0
- package/dist/cli/init/utils/index.d.ts +18 -0
- package/dist/cli/init/utils/index.d.ts.map +1 -0
- package/dist/cli/init/utils/index.js +48 -0
- package/dist/cli/init/utils/index.js.map +1 -0
- package/dist/cli/init/utils/log-utils.d.ts +47 -0
- package/dist/cli/init/utils/log-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/log-utils.js +68 -0
- package/dist/cli/init/utils/log-utils.js.map +1 -0
- package/dist/cli/init/utils/path-utils.d.ts +91 -0
- package/dist/cli/init/utils/path-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/path-utils.js +208 -0
- package/dist/cli/init/utils/path-utils.js.map +1 -0
- package/dist/cli/init/utils/validation-utils.d.ts +44 -0
- package/dist/cli/init/utils/validation-utils.d.ts.map +1 -0
- package/dist/cli/init/utils/validation-utils.js +68 -0
- package/dist/cli/init/utils/validation-utils.js.map +1 -0
- package/dist/cli/init/utils.d.ts +183 -0
- package/dist/cli/init/utils.d.ts.map +1 -0
- package/dist/cli/init/utils.js +354 -0
- package/dist/cli/init/utils.js.map +1 -0
- package/dist/components/Dashboard/Dashboard.d.ts +4 -0
- package/dist/components/Dashboard/Dashboard.d.ts.map +1 -0
- package/dist/components/Dashboard/Dashboard.js +148 -0
- package/dist/components/Dashboard/Dashboard.js.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts +4 -0
- package/dist/components/Dashboard/DashboardHeader.d.ts.map +1 -0
- package/dist/components/Dashboard/DashboardHeader.js +138 -0
- package/dist/components/Dashboard/DashboardHeader.js.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts +42 -0
- package/dist/constitution/evaluators/ast-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/ast-evaluator.js +303 -0
- package/dist/constitution/evaluators/ast-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/base.d.ts +144 -0
- package/dist/constitution/evaluators/base.d.ts.map +1 -0
- package/dist/constitution/evaluators/base.js +144 -0
- package/dist/constitution/evaluators/base.js.map +1 -0
- package/dist/constitution/evaluators/index.d.ts +19 -0
- package/dist/constitution/evaluators/index.d.ts.map +1 -0
- package/dist/constitution/evaluators/index.js +56 -0
- package/dist/constitution/evaluators/index.js.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts +59 -0
- package/dist/constitution/evaluators/metric-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/metric-evaluator.js +195 -0
- package/dist/constitution/evaluators/metric-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts +66 -0
- package/dist/constitution/evaluators/pattern-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/pattern-evaluator.js +221 -0
- package/dist/constitution/evaluators/pattern-evaluator.js.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts +68 -0
- package/dist/constitution/evaluators/semantic-evaluator.d.ts.map +1 -0
- package/dist/constitution/evaluators/semantic-evaluator.js +250 -0
- package/dist/constitution/evaluators/semantic-evaluator.js.map +1 -0
- package/dist/contexts/DashboardContext.d.ts +41 -0
- package/dist/contexts/DashboardContext.d.ts.map +1 -0
- package/dist/contexts/DashboardContext.js +187 -0
- package/dist/contexts/DashboardContext.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +40 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +279 -120
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/hooks/useKeyboardShortcuts.d.ts +12 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +69 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/telemetry/instrumentation/agent.d.ts +158 -0
- package/dist/telemetry/instrumentation/agent.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/agent.js +372 -0
- package/dist/telemetry/instrumentation/agent.js.map +1 -0
- package/dist/telemetry/instrumentation/index.d.ts +24 -0
- package/dist/telemetry/instrumentation/index.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/index.js +54 -0
- package/dist/telemetry/instrumentation/index.js.map +1 -0
- package/dist/telemetry/instrumentation/memory.d.ts +313 -0
- package/dist/telemetry/instrumentation/memory.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/memory.js +552 -0
- package/dist/telemetry/instrumentation/memory.js.map +1 -0
- package/dist/telemetry/instrumentation/task.d.ts +146 -0
- package/dist/telemetry/instrumentation/task.d.ts.map +1 -0
- package/dist/telemetry/instrumentation/task.js +305 -0
- package/dist/telemetry/instrumentation/task.js.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts +246 -0
- package/dist/telemetry/metrics/collectors/cost.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/cost.js +526 -0
- package/dist/telemetry/metrics/collectors/cost.js.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts +87 -0
- package/dist/telemetry/metrics/collectors/pricing-config.d.ts.map +1 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js +207 -0
- package/dist/telemetry/metrics/collectors/pricing-config.js.map +1 -0
- package/dist/telemetry/metrics/index.d.ts +4 -1
- package/dist/telemetry/metrics/index.d.ts.map +1 -1
- package/dist/telemetry/metrics/index.js +18 -2
- package/dist/telemetry/metrics/index.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/telemetry/types.d.ts.map +1 -1
- package/dist/visualization/api/RestEndpoints.d.ts +136 -0
- package/dist/visualization/api/RestEndpoints.d.ts.map +1 -0
- package/dist/visualization/api/RestEndpoints.js +428 -0
- package/dist/visualization/api/RestEndpoints.js.map +1 -0
- package/dist/visualization/api/WebSocketServer.d.ts +165 -0
- package/dist/visualization/api/WebSocketServer.d.ts.map +1 -0
- package/dist/visualization/api/WebSocketServer.js +518 -0
- package/dist/visualization/api/WebSocketServer.js.map +1 -0
- package/dist/visualization/core/DataTransformer.d.ts +89 -0
- package/dist/visualization/core/DataTransformer.d.ts.map +1 -0
- package/dist/visualization/core/DataTransformer.js +478 -0
- package/dist/visualization/core/DataTransformer.js.map +1 -0
- package/dist/visualization/index.d.ts +92 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +121 -0
- package/dist/visualization/index.js.map +1 -0
- package/dist/visualization/types.d.ts +148 -0
- package/dist/visualization/types.d.ts.map +1 -0
- package/dist/visualization/types.js +7 -0
- package/dist/visualization/types.js.map +1 -0
- package/dist/voting/consensus.d.ts +87 -0
- package/dist/voting/consensus.d.ts.map +1 -0
- package/dist/voting/consensus.js +568 -0
- package/dist/voting/consensus.js.map +1 -0
- package/dist/voting/index.d.ts +12 -0
- package/dist/voting/index.d.ts.map +1 -0
- package/dist/voting/index.js +36 -0
- package/dist/voting/index.js.map +1 -0
- package/dist/voting/orchestrator.d.ts +65 -0
- package/dist/voting/orchestrator.d.ts.map +1 -0
- package/dist/voting/orchestrator.js +306 -0
- package/dist/voting/orchestrator.js.map +1 -0
- package/dist/voting/panel-assembly.d.ts +54 -0
- package/dist/voting/panel-assembly.d.ts.map +1 -0
- package/dist/voting/panel-assembly.js +192 -0
- package/dist/voting/panel-assembly.js.map +1 -0
- package/dist/voting/protocol.d.ts +119 -0
- package/dist/voting/protocol.d.ts.map +1 -0
- package/dist/voting/protocol.js +18 -0
- package/dist/voting/protocol.js.map +1 -0
- package/dist/voting/types.d.ts +125 -0
- package/dist/voting/types.d.ts.map +1 -0
- package/dist/voting/types.js +7 -0
- package/dist/voting/types.js.map +1 -0
- package/package.json +27 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voting orchestrator for parallel agent coordination
|
|
3
|
+
* Handles timeout, retries, and result aggregation
|
|
4
|
+
*/
|
|
5
|
+
import { VotingAgent, VotingTask, Vote, VotingResult, VotingPanelConfig, VotingOrchestrator as IVotingOrchestrator, PanelAssemblyResult, OrchestrationLog, OrchestrationMetrics, AgentPool, VotingStrategy, ConsensusMethod } from './types';
|
|
6
|
+
export declare class VotingOrchestrator implements IVotingOrchestrator {
|
|
7
|
+
private readonly pool;
|
|
8
|
+
private readonly strategy;
|
|
9
|
+
private readonly voteExecutor;
|
|
10
|
+
private assembler;
|
|
11
|
+
private logs;
|
|
12
|
+
private votes;
|
|
13
|
+
private activeVoting;
|
|
14
|
+
private metrics;
|
|
15
|
+
constructor(pool: AgentPool, strategy: VotingStrategy, voteExecutor: (agent: VotingAgent, task: VotingTask) => Promise<Vote>);
|
|
16
|
+
/**
|
|
17
|
+
* Assemble voting panel for task
|
|
18
|
+
*/
|
|
19
|
+
assemblePanel(config: VotingPanelConfig): Promise<PanelAssemblyResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Distribute task to panel and collect votes in parallel
|
|
22
|
+
*/
|
|
23
|
+
distributeTask(task: VotingTask, panel: VotingAgent[]): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Collect votes with timeout handling
|
|
26
|
+
*/
|
|
27
|
+
collectVotes(taskId: string, timeoutMs: number): Promise<Vote[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Aggregate voting results using consensus algorithm
|
|
30
|
+
*/
|
|
31
|
+
aggregateResults(votes: Vote[], method: ConsensusMethod): VotingResult;
|
|
32
|
+
/**
|
|
33
|
+
* Handle vote timeout
|
|
34
|
+
*/
|
|
35
|
+
handleTimeout(agentId: string, taskId: string): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Handle vote failure
|
|
38
|
+
*/
|
|
39
|
+
handleFailure(agentId: string, taskId: string, error: Error): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Retry failed vote
|
|
42
|
+
*/
|
|
43
|
+
retry(agentId: string, taskId: string, attempt: number): Promise<Vote | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Get orchestration metrics
|
|
46
|
+
*/
|
|
47
|
+
getMetrics(): OrchestrationMetrics;
|
|
48
|
+
/**
|
|
49
|
+
* Get orchestration logs
|
|
50
|
+
*/
|
|
51
|
+
getLogs(taskId?: string): OrchestrationLog[];
|
|
52
|
+
/**
|
|
53
|
+
* Execute vote with timeout and retry handling
|
|
54
|
+
*/
|
|
55
|
+
private executeVote;
|
|
56
|
+
/**
|
|
57
|
+
* Log orchestration event
|
|
58
|
+
*/
|
|
59
|
+
private log;
|
|
60
|
+
/**
|
|
61
|
+
* Update average execution time metric
|
|
62
|
+
*/
|
|
63
|
+
private updateAverageExecutionTime;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/voting/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,IAAI,mBAAmB,EACzC,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EAEpB,SAAS,EACT,cAAc,EACd,eAAe,EAChB,MAAM,SAAS,CAAC;AAIjB,qBAAa,kBAAmB,YAAW,mBAAmB;IAiB1D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAlB/B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,OAAO,CASb;gBAGiB,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC;IAKxF;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAoB5E;;OAEG;IACG,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3E;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAsDtE;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,eAAe,GAAG,YAAY;IA6EtE;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnE;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,IAAI,CAAC;IAYhB;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAuCvB;;OAEG;IACH,UAAU,IAAI,oBAAoB;IAIlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAO5C;;OAEG;YACW,WAAW;IA+CzB;;OAEG;IACH,OAAO,CAAC,GAAG;IAaX;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAMnC"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Voting orchestrator for parallel agent coordination
|
|
4
|
+
* Handles timeout, retries, and result aggregation
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.VotingOrchestrator = void 0;
|
|
8
|
+
const panel_assembly_1 = require("./panel-assembly");
|
|
9
|
+
class VotingOrchestrator {
|
|
10
|
+
constructor(pool, strategy, voteExecutor) {
|
|
11
|
+
this.pool = pool;
|
|
12
|
+
this.strategy = strategy;
|
|
13
|
+
this.voteExecutor = voteExecutor;
|
|
14
|
+
this.logs = [];
|
|
15
|
+
this.votes = new Map();
|
|
16
|
+
this.activeVoting = new Map();
|
|
17
|
+
this.metrics = {
|
|
18
|
+
totalTasks: 0,
|
|
19
|
+
successfulVotes: 0,
|
|
20
|
+
failedVotes: 0,
|
|
21
|
+
timeoutVotes: 0,
|
|
22
|
+
averageExecutionTime: 0,
|
|
23
|
+
consensusRate: 0,
|
|
24
|
+
participationRate: 0,
|
|
25
|
+
retryRate: 0
|
|
26
|
+
};
|
|
27
|
+
this.assembler = new panel_assembly_1.PanelAssembler(pool, strategy);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Assemble voting panel for task
|
|
31
|
+
*/
|
|
32
|
+
async assemblePanel(config) {
|
|
33
|
+
const task = {
|
|
34
|
+
id: `task-${Date.now()}`,
|
|
35
|
+
type: 'panel-assembly',
|
|
36
|
+
description: 'Assemble voting panel',
|
|
37
|
+
context: {},
|
|
38
|
+
priority: 'medium'
|
|
39
|
+
};
|
|
40
|
+
const result = await this.assembler.assemblePanel(task, config);
|
|
41
|
+
this.log(task.id, 'panel-assembled', {
|
|
42
|
+
panelSize: result.panel.length,
|
|
43
|
+
assemblyTime: result.assemblyTime,
|
|
44
|
+
coverage: result.coverage
|
|
45
|
+
});
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Distribute task to panel and collect votes in parallel
|
|
50
|
+
*/
|
|
51
|
+
async distributeTask(task, panel) {
|
|
52
|
+
this.metrics.totalTasks++;
|
|
53
|
+
this.votes.set(task.id, []);
|
|
54
|
+
this.log(task.id, 'voting-started', {
|
|
55
|
+
panelSize: panel.length,
|
|
56
|
+
taskPriority: task.priority
|
|
57
|
+
});
|
|
58
|
+
// Create parallel voting promises
|
|
59
|
+
const votingPromises = panel.map(agent => this.executeVote(agent, task, 1));
|
|
60
|
+
this.activeVoting.set(task.id, votingPromises);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Collect votes with timeout handling
|
|
64
|
+
*/
|
|
65
|
+
async collectVotes(taskId, timeoutMs) {
|
|
66
|
+
const promises = this.activeVoting.get(taskId);
|
|
67
|
+
if (!promises) {
|
|
68
|
+
throw new Error(`No active voting for task ${taskId}`);
|
|
69
|
+
}
|
|
70
|
+
const votes = [];
|
|
71
|
+
const startTime = Date.now();
|
|
72
|
+
// Create timeout promise
|
|
73
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Collection timeout')), timeoutMs));
|
|
74
|
+
try {
|
|
75
|
+
// Race between all votes completing and timeout
|
|
76
|
+
await Promise.race([
|
|
77
|
+
Promise.allSettled(promises),
|
|
78
|
+
timeoutPromise
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
// Timeout occurred, but allSettled is still running
|
|
83
|
+
this.log(taskId, 'vote-timeout', { timeoutMs });
|
|
84
|
+
}
|
|
85
|
+
// Collect results ONCE after race completes or times out
|
|
86
|
+
const results = await Promise.allSettled(promises);
|
|
87
|
+
results.forEach((result, index) => {
|
|
88
|
+
if (result.status === 'fulfilled') {
|
|
89
|
+
votes.push(result.value);
|
|
90
|
+
this.metrics.successfulVotes++;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.metrics.failedVotes++;
|
|
94
|
+
this.log(taskId, 'vote-failed', {
|
|
95
|
+
error: result.reason?.message
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
const executionTime = Date.now() - startTime;
|
|
100
|
+
this.updateAverageExecutionTime(executionTime);
|
|
101
|
+
// Store collected votes
|
|
102
|
+
this.votes.set(taskId, votes);
|
|
103
|
+
this.activeVoting.delete(taskId);
|
|
104
|
+
this.log(taskId, 'result-aggregated', {
|
|
105
|
+
votesCollected: votes.length,
|
|
106
|
+
executionTime
|
|
107
|
+
});
|
|
108
|
+
return votes;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Aggregate voting results using consensus algorithm
|
|
112
|
+
*/
|
|
113
|
+
aggregateResults(votes, method) {
|
|
114
|
+
if (votes.length === 0) {
|
|
115
|
+
throw new Error('No votes to aggregate');
|
|
116
|
+
}
|
|
117
|
+
const taskId = votes[0].taskId;
|
|
118
|
+
// Calculate final score and consensus using simple aggregation
|
|
119
|
+
// NOTE: Direct aggregation used instead of ConsensusFactory due to type compatibility
|
|
120
|
+
let consensusReached = false;
|
|
121
|
+
let finalScore = 0;
|
|
122
|
+
let confidence = 0;
|
|
123
|
+
if (method === 'majority') {
|
|
124
|
+
// Simple majority: average score weighted by confidence
|
|
125
|
+
const weightedSum = votes.reduce((sum, v) => sum + v.score * v.confidence, 0);
|
|
126
|
+
const totalWeight = votes.reduce((sum, v) => sum + v.confidence, 0);
|
|
127
|
+
finalScore = totalWeight > 0 ? weightedSum / totalWeight : 0;
|
|
128
|
+
confidence = totalWeight / votes.length;
|
|
129
|
+
consensusReached = confidence >= 0.6; // 60% confidence threshold
|
|
130
|
+
}
|
|
131
|
+
else if (method === 'weighted-average') {
|
|
132
|
+
// Weighted average: use agent weights (from Vote metadata)
|
|
133
|
+
const weightedSum = votes.reduce((sum, v) => {
|
|
134
|
+
const weight = v.metadata?.weight || 1;
|
|
135
|
+
return sum + v.score * v.confidence * weight;
|
|
136
|
+
}, 0);
|
|
137
|
+
const totalWeight = votes.reduce((sum, v) => {
|
|
138
|
+
const weight = v.metadata?.weight || 1;
|
|
139
|
+
return sum + v.confidence * weight;
|
|
140
|
+
}, 0);
|
|
141
|
+
finalScore = totalWeight > 0 ? weightedSum / totalWeight : 0;
|
|
142
|
+
confidence = totalWeight / votes.length;
|
|
143
|
+
consensusReached = confidence >= 0.6;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Default fallback to majority
|
|
147
|
+
const weightedSum = votes.reduce((sum, v) => sum + v.score * v.confidence, 0);
|
|
148
|
+
const totalWeight = votes.reduce((sum, v) => sum + v.confidence, 0);
|
|
149
|
+
finalScore = totalWeight > 0 ? weightedSum / totalWeight : 0;
|
|
150
|
+
confidence = totalWeight / votes.length;
|
|
151
|
+
consensusReached = confidence >= 0.6;
|
|
152
|
+
}
|
|
153
|
+
if (consensusReached) {
|
|
154
|
+
this.metrics.consensusRate =
|
|
155
|
+
(this.metrics.consensusRate * (this.metrics.totalTasks - 1) + 1) /
|
|
156
|
+
this.metrics.totalTasks;
|
|
157
|
+
}
|
|
158
|
+
const result = {
|
|
159
|
+
taskId,
|
|
160
|
+
consensusReached,
|
|
161
|
+
finalScore,
|
|
162
|
+
votes,
|
|
163
|
+
aggregationMethod: method,
|
|
164
|
+
executionTime: votes.reduce((max, v) => Math.max(max, v.timestamp.getTime()), 0) - Math.min(...votes.map(v => v.timestamp.getTime())),
|
|
165
|
+
participationRate: 1.0, // All collected votes participated (100%)
|
|
166
|
+
metadata: {
|
|
167
|
+
totalAgents: votes.length,
|
|
168
|
+
votingAgents: votes.length,
|
|
169
|
+
timedOut: 0,
|
|
170
|
+
failed: 0,
|
|
171
|
+
averageConfidence: votes.reduce((sum, v) => sum + v.confidence, 0) / votes.length
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
this.log(taskId, consensusReached ? 'consensus-reached' : 'consensus-failed', {
|
|
175
|
+
finalScore,
|
|
176
|
+
confidence,
|
|
177
|
+
votesCount: votes.length
|
|
178
|
+
});
|
|
179
|
+
return result;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Handle vote timeout
|
|
183
|
+
*/
|
|
184
|
+
async handleTimeout(agentId, taskId) {
|
|
185
|
+
this.metrics.timeoutVotes++;
|
|
186
|
+
this.log(taskId, 'vote-timeout', { agentId });
|
|
187
|
+
// Mark agent as potentially slow (don't fail immediately)
|
|
188
|
+
// Could implement adaptive timeouts here
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Handle vote failure
|
|
192
|
+
*/
|
|
193
|
+
async handleFailure(agentId, taskId, error) {
|
|
194
|
+
this.metrics.failedVotes++;
|
|
195
|
+
this.log(taskId, 'vote-failed', {
|
|
196
|
+
agentId,
|
|
197
|
+
error: error.message
|
|
198
|
+
});
|
|
199
|
+
// Mark agent as failed in pool
|
|
200
|
+
this.pool.markFailed(agentId);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Retry failed vote
|
|
204
|
+
*/
|
|
205
|
+
async retry(agentId, taskId, attempt) {
|
|
206
|
+
const task = this.pool.busy.get(agentId);
|
|
207
|
+
if (!task) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
const agent = this.pool.available.find(a => a.id === agentId);
|
|
211
|
+
if (!agent) {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
if (!this.strategy.shouldRetry(agent, task, attempt)) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
this.metrics.retryRate =
|
|
218
|
+
(this.metrics.retryRate * this.metrics.totalTasks + 1) /
|
|
219
|
+
this.metrics.totalTasks;
|
|
220
|
+
this.log(taskId, 'vote-retry', {
|
|
221
|
+
agentId,
|
|
222
|
+
attempt
|
|
223
|
+
});
|
|
224
|
+
try {
|
|
225
|
+
const vote = await this.executeVote(agent, task, attempt);
|
|
226
|
+
this.metrics.successfulVotes++;
|
|
227
|
+
return vote;
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
this.metrics.failedVotes++;
|
|
231
|
+
this.log(taskId, 'vote-failed', {
|
|
232
|
+
agentId,
|
|
233
|
+
attempt,
|
|
234
|
+
error: error instanceof Error ? error.message : String(error)
|
|
235
|
+
});
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Get orchestration metrics
|
|
241
|
+
*/
|
|
242
|
+
getMetrics() {
|
|
243
|
+
return { ...this.metrics };
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get orchestration logs
|
|
247
|
+
*/
|
|
248
|
+
getLogs(taskId) {
|
|
249
|
+
if (taskId) {
|
|
250
|
+
return this.logs.filter(log => log.taskId === taskId);
|
|
251
|
+
}
|
|
252
|
+
return [...this.logs];
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Execute vote with timeout and retry handling
|
|
256
|
+
*/
|
|
257
|
+
async executeVote(agent, task, attempt) {
|
|
258
|
+
const agentLoad = this.pool.busy.size / this.pool.available.length;
|
|
259
|
+
const timeout = this.strategy.adjustTimeout(5000, attempt, agentLoad);
|
|
260
|
+
const votePromise = this.voteExecutor(agent, task);
|
|
261
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Vote timeout after ${timeout}ms`)), timeout));
|
|
262
|
+
try {
|
|
263
|
+
const vote = await Promise.race([votePromise, timeoutPromise]);
|
|
264
|
+
this.log(task.id, 'vote-received', {
|
|
265
|
+
agentId: agent.id,
|
|
266
|
+
score: vote.score,
|
|
267
|
+
confidence: vote.confidence,
|
|
268
|
+
attempt
|
|
269
|
+
});
|
|
270
|
+
return vote;
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
if (error instanceof Error && error.message.includes('timeout')) {
|
|
274
|
+
await this.handleTimeout(agent.id, task.id);
|
|
275
|
+
// Try retry
|
|
276
|
+
if (this.strategy.shouldRetry(agent, task, attempt)) {
|
|
277
|
+
return this.executeVote(agent, task, attempt + 1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
await this.handleFailure(agent.id, task.id, error instanceof Error ? error : new Error(String(error)));
|
|
281
|
+
throw error;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Log orchestration event
|
|
286
|
+
*/
|
|
287
|
+
log(taskId, event, details) {
|
|
288
|
+
this.logs.push({
|
|
289
|
+
taskId,
|
|
290
|
+
timestamp: new Date(),
|
|
291
|
+
event,
|
|
292
|
+
details
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Update average execution time metric
|
|
297
|
+
*/
|
|
298
|
+
updateAverageExecutionTime(executionTime) {
|
|
299
|
+
const totalTasks = this.metrics.totalTasks;
|
|
300
|
+
this.metrics.averageExecutionTime =
|
|
301
|
+
(this.metrics.averageExecutionTime * (totalTasks - 1) + executionTime) /
|
|
302
|
+
totalTasks;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
exports.VotingOrchestrator = VotingOrchestrator;
|
|
306
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/voting/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Panel assembly logic for voting orchestration
|
|
3
|
+
* Selects optimal agents based on expertise, load, and task requirements
|
|
4
|
+
*/
|
|
5
|
+
import { VotingAgent, VotingTask, VotingPanelConfig, PanelAssemblyResult, AgentPool, VotingStrategy } from './types';
|
|
6
|
+
export declare class PanelAssembler {
|
|
7
|
+
private readonly pool;
|
|
8
|
+
private readonly strategy;
|
|
9
|
+
constructor(pool: AgentPool, strategy: VotingStrategy);
|
|
10
|
+
/**
|
|
11
|
+
* Assemble optimal voting panel for a task
|
|
12
|
+
*/
|
|
13
|
+
assemblePanel(task: VotingTask, config: VotingPanelConfig): Promise<PanelAssemblyResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Release panel agents back to pool
|
|
16
|
+
*/
|
|
17
|
+
releasePanel(panel: VotingAgent[]): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get criteria used for panel selection
|
|
20
|
+
*/
|
|
21
|
+
private getSelectionCriteria;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Default voting strategy implementation
|
|
25
|
+
*/
|
|
26
|
+
export declare class DefaultVotingStrategy implements VotingStrategy {
|
|
27
|
+
selectAgents(pool: AgentPool, task: VotingTask, config: VotingPanelConfig): VotingAgent[];
|
|
28
|
+
calculateWeight(agent: VotingAgent, task: VotingTask): number;
|
|
29
|
+
shouldRetry(agent: VotingAgent, task: VotingTask, attempt: number, error?: Error): boolean;
|
|
30
|
+
adjustTimeout(baseTimeout: number, attempt: number, agentLoad: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* Score an agent for task suitability
|
|
33
|
+
*/
|
|
34
|
+
private scoreAgent;
|
|
35
|
+
/**
|
|
36
|
+
* Get bonus score for agent type matching task type
|
|
37
|
+
*/
|
|
38
|
+
private getTypeBonus;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Agent pool implementation
|
|
42
|
+
*/
|
|
43
|
+
export declare class DefaultAgentPool implements AgentPool {
|
|
44
|
+
available: VotingAgent[];
|
|
45
|
+
busy: Map<string, VotingTask>;
|
|
46
|
+
failed: Set<string>;
|
|
47
|
+
constructor(agents: VotingAgent[]);
|
|
48
|
+
getAvailable(expertise?: string[]): VotingAgent[];
|
|
49
|
+
reserve(agentId: string, task: VotingTask): void;
|
|
50
|
+
release(agentId: string): void;
|
|
51
|
+
markFailed(agentId: string): void;
|
|
52
|
+
restore(agentId: string): void;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=panel-assembly.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel-assembly.d.ts","sourceRoot":"","sources":["../../src/voting/panel-assembly.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACT,cAAc,EAEf,MAAM,SAAS,CAAC;AAEjB,qBAAa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,cAAc;IAG3C;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,mBAAmB,CAAC;IAwC/B;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAMxC;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAqB7B;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAC1D,YAAY,CACV,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,iBAAiB,GACxB,WAAW,EAAE;IAqBhB,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM;IAmB7D,WAAW,CACT,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,KAAK,GACZ,OAAO;IAuBV,aAAa,CACX,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM;IAUT;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,YAAY;CAkBrB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,SAAS;IAChD,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAER,MAAM,EAAE,WAAW,EAAE;IAMjC,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAcjD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAIhD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG/B"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Panel assembly logic for voting orchestration
|
|
4
|
+
* Selects optimal agents based on expertise, load, and task requirements
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.DefaultAgentPool = exports.DefaultVotingStrategy = exports.PanelAssembler = void 0;
|
|
8
|
+
class PanelAssembler {
|
|
9
|
+
constructor(pool, strategy) {
|
|
10
|
+
this.pool = pool;
|
|
11
|
+
this.strategy = strategy;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Assemble optimal voting panel for a task
|
|
15
|
+
*/
|
|
16
|
+
async assemblePanel(task, config) {
|
|
17
|
+
const startTime = Date.now();
|
|
18
|
+
// Get available agents matching required expertise
|
|
19
|
+
const candidates = this.pool.getAvailable(task.requiredExpertise);
|
|
20
|
+
if (candidates.length < config.minPanelSize) {
|
|
21
|
+
throw new Error(`Insufficient agents: need ${config.minPanelSize}, have ${candidates.length}`);
|
|
22
|
+
}
|
|
23
|
+
// Select agents using strategy
|
|
24
|
+
const panel = this.strategy.selectAgents(this.pool, task, config);
|
|
25
|
+
// Calculate weights for selected agents
|
|
26
|
+
const weightedPanel = panel.map(agent => ({
|
|
27
|
+
...agent,
|
|
28
|
+
weight: this.strategy.calculateWeight(agent, task)
|
|
29
|
+
}));
|
|
30
|
+
// Reserve agents in pool
|
|
31
|
+
weightedPanel.forEach(agent => {
|
|
32
|
+
this.pool.reserve(agent.id, task);
|
|
33
|
+
});
|
|
34
|
+
const assemblyTime = Date.now() - startTime;
|
|
35
|
+
return {
|
|
36
|
+
panel: weightedPanel,
|
|
37
|
+
assemblyTime,
|
|
38
|
+
selectionCriteria: this.getSelectionCriteria(task, config),
|
|
39
|
+
coverage: {
|
|
40
|
+
expertise: [...new Set(weightedPanel.flatMap(a => a.expertise))],
|
|
41
|
+
types: [...new Set(weightedPanel.map(a => a.type))],
|
|
42
|
+
totalWeight: weightedPanel.reduce((sum, a) => sum + a.weight, 0)
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Release panel agents back to pool
|
|
48
|
+
*/
|
|
49
|
+
releasePanel(panel) {
|
|
50
|
+
panel.forEach(agent => {
|
|
51
|
+
this.pool.release(agent.id);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get criteria used for panel selection
|
|
56
|
+
*/
|
|
57
|
+
getSelectionCriteria(task, config) {
|
|
58
|
+
const criteria = [];
|
|
59
|
+
if (task.requiredExpertise && task.requiredExpertise.length > 0) {
|
|
60
|
+
criteria.push(`expertise: ${task.requiredExpertise.join(', ')}`);
|
|
61
|
+
}
|
|
62
|
+
criteria.push(`panel size: ${config.minPanelSize}-${config.maxPanelSize}`);
|
|
63
|
+
criteria.push(`consensus: ${config.consensusMethod}`);
|
|
64
|
+
if (config.quorumThreshold) {
|
|
65
|
+
criteria.push(`quorum: ${config.quorumThreshold * 100}%`);
|
|
66
|
+
}
|
|
67
|
+
criteria.push(`priority: ${task.priority}`);
|
|
68
|
+
return criteria;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.PanelAssembler = PanelAssembler;
|
|
72
|
+
/**
|
|
73
|
+
* Default voting strategy implementation
|
|
74
|
+
*/
|
|
75
|
+
class DefaultVotingStrategy {
|
|
76
|
+
selectAgents(pool, task, config) {
|
|
77
|
+
const candidates = pool.getAvailable(task.requiredExpertise);
|
|
78
|
+
// Score each candidate
|
|
79
|
+
const scored = candidates.map(agent => ({
|
|
80
|
+
agent,
|
|
81
|
+
score: this.scoreAgent(agent, task)
|
|
82
|
+
}));
|
|
83
|
+
// Sort by score descending
|
|
84
|
+
scored.sort((a, b) => b.score - a.score);
|
|
85
|
+
// Select top N agents within panel size limits
|
|
86
|
+
const panelSize = Math.min(Math.max(config.minPanelSize, scored.length), config.maxPanelSize);
|
|
87
|
+
return scored.slice(0, panelSize).map(s => s.agent);
|
|
88
|
+
}
|
|
89
|
+
calculateWeight(agent, task) {
|
|
90
|
+
let weight = 1.0;
|
|
91
|
+
// Increase weight for matching expertise
|
|
92
|
+
const matchingExpertise = agent.expertise.filter(e => task.requiredExpertise?.includes(e));
|
|
93
|
+
weight += matchingExpertise.length * 0.2;
|
|
94
|
+
// Adjust for agent type relevance
|
|
95
|
+
const typeBonus = this.getTypeBonus(agent.type, task.type);
|
|
96
|
+
weight *= (1 + typeBonus);
|
|
97
|
+
// Apply base agent weight
|
|
98
|
+
weight *= agent.weight;
|
|
99
|
+
return Math.max(0.1, Math.min(5.0, weight)); // Clamp 0.1-5.0
|
|
100
|
+
}
|
|
101
|
+
shouldRetry(agent, task, attempt, error) {
|
|
102
|
+
// Don't retry if max attempts reached
|
|
103
|
+
if (attempt >= 3) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
// Retry on transient errors
|
|
107
|
+
if (error) {
|
|
108
|
+
const transientErrors = ['ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED'];
|
|
109
|
+
const isTransient = transientErrors.some(code => error.message.includes(code));
|
|
110
|
+
return isTransient;
|
|
111
|
+
}
|
|
112
|
+
// Retry low priority tasks less aggressively
|
|
113
|
+
if (task.priority === 'low' && attempt > 1) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
adjustTimeout(baseTimeout, attempt, agentLoad) {
|
|
119
|
+
// Exponential backoff
|
|
120
|
+
const backoff = Math.pow(1.5, attempt - 1);
|
|
121
|
+
// Adjust for agent load (0-1 scale)
|
|
122
|
+
const loadMultiplier = 1 + (agentLoad * 0.5);
|
|
123
|
+
return baseTimeout * backoff * loadMultiplier;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Score an agent for task suitability
|
|
127
|
+
*/
|
|
128
|
+
scoreAgent(agent, task) {
|
|
129
|
+
let score = 0;
|
|
130
|
+
// Expertise match
|
|
131
|
+
const matchingExpertise = agent.expertise.filter(e => task.requiredExpertise?.includes(e));
|
|
132
|
+
score += matchingExpertise.length * 10;
|
|
133
|
+
// Type relevance
|
|
134
|
+
score += this.getTypeBonus(agent.type, task.type) * 20;
|
|
135
|
+
// Agent weight
|
|
136
|
+
score += agent.weight * 5;
|
|
137
|
+
return score;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get bonus score for agent type matching task type
|
|
141
|
+
*/
|
|
142
|
+
getTypeBonus(agentType, taskType) {
|
|
143
|
+
const bonusMap = {
|
|
144
|
+
'test-generation': ['test-generator', 'mutation-tester'],
|
|
145
|
+
'coverage-analysis': ['coverage-analyzer', 'test-generator'],
|
|
146
|
+
'quality-gate': ['quality-gate', 'coverage-analyzer'],
|
|
147
|
+
'performance': ['performance-tester', 'quality-gate'],
|
|
148
|
+
'security': ['security-scanner', 'quality-gate'],
|
|
149
|
+
'flaky-detection': ['flaky-detector', 'test-generator'],
|
|
150
|
+
'visual-testing': ['visual-tester', 'test-generator'],
|
|
151
|
+
'api-testing': ['api-tester', 'test-generator'],
|
|
152
|
+
'requirements': ['requirements-validator', 'test-generator'],
|
|
153
|
+
'data-generation': ['data-generator', 'test-generator'],
|
|
154
|
+
'regression': ['regression-analyzer', 'coverage-analyzer']
|
|
155
|
+
};
|
|
156
|
+
const relevantTypes = bonusMap[taskType] || [];
|
|
157
|
+
return relevantTypes.includes(agentType) ? 1.0 : 0.0;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.DefaultVotingStrategy = DefaultVotingStrategy;
|
|
161
|
+
/**
|
|
162
|
+
* Agent pool implementation
|
|
163
|
+
*/
|
|
164
|
+
class DefaultAgentPool {
|
|
165
|
+
constructor(agents) {
|
|
166
|
+
this.available = [...agents];
|
|
167
|
+
this.busy = new Map();
|
|
168
|
+
this.failed = new Set();
|
|
169
|
+
}
|
|
170
|
+
getAvailable(expertise) {
|
|
171
|
+
let candidates = this.available.filter(agent => !this.busy.has(agent.id) && !this.failed.has(agent.id));
|
|
172
|
+
if (expertise && expertise.length > 0) {
|
|
173
|
+
candidates = candidates.filter(agent => expertise.some(e => agent.expertise.includes(e)));
|
|
174
|
+
}
|
|
175
|
+
return candidates;
|
|
176
|
+
}
|
|
177
|
+
reserve(agentId, task) {
|
|
178
|
+
this.busy.set(agentId, task);
|
|
179
|
+
}
|
|
180
|
+
release(agentId) {
|
|
181
|
+
this.busy.delete(agentId);
|
|
182
|
+
}
|
|
183
|
+
markFailed(agentId) {
|
|
184
|
+
this.failed.add(agentId);
|
|
185
|
+
this.busy.delete(agentId);
|
|
186
|
+
}
|
|
187
|
+
restore(agentId) {
|
|
188
|
+
this.failed.delete(agentId);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
exports.DefaultAgentPool = DefaultAgentPool;
|
|
192
|
+
//# sourceMappingURL=panel-assembly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"panel-assembly.js","sourceRoot":"","sources":["../../src/voting/panel-assembly.ts"],"names":[],"mappings":"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"}
|