@blackms/aistack 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +244 -0
- package/dist/agents/definitions/analyst.d.ts +6 -0
- package/dist/agents/definitions/analyst.d.ts.map +1 -0
- package/dist/agents/definitions/analyst.js +53 -0
- package/dist/agents/definitions/analyst.js.map +1 -0
- package/dist/agents/definitions/architect.d.ts +6 -0
- package/dist/agents/definitions/architect.d.ts.map +1 -0
- package/dist/agents/definitions/architect.js +46 -0
- package/dist/agents/definitions/architect.js.map +1 -0
- package/dist/agents/definitions/coder.d.ts +6 -0
- package/dist/agents/definitions/coder.d.ts.map +1 -0
- package/dist/agents/definitions/coder.js +39 -0
- package/dist/agents/definitions/coder.js.map +1 -0
- package/dist/agents/definitions/coordinator.d.ts +6 -0
- package/dist/agents/definitions/coordinator.d.ts.map +1 -0
- package/dist/agents/definitions/coordinator.js +54 -0
- package/dist/agents/definitions/coordinator.js.map +1 -0
- package/dist/agents/definitions/index.d.ts +11 -0
- package/dist/agents/definitions/index.d.ts.map +1 -0
- package/dist/agents/definitions/index.js +11 -0
- package/dist/agents/definitions/index.js.map +1 -0
- package/dist/agents/definitions/researcher.d.ts +6 -0
- package/dist/agents/definitions/researcher.d.ts.map +1 -0
- package/dist/agents/definitions/researcher.js +39 -0
- package/dist/agents/definitions/researcher.js.map +1 -0
- package/dist/agents/definitions/reviewer.d.ts +6 -0
- package/dist/agents/definitions/reviewer.d.ts.map +1 -0
- package/dist/agents/definitions/reviewer.js +46 -0
- package/dist/agents/definitions/reviewer.js.map +1 -0
- package/dist/agents/definitions/tester.d.ts +6 -0
- package/dist/agents/definitions/tester.d.ts.map +1 -0
- package/dist/agents/definitions/tester.js +44 -0
- package/dist/agents/definitions/tester.js.map +1 -0
- package/dist/agents/index.d.ts +7 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +7 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.d.ts +41 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +107 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/spawner.d.ts +62 -0
- package/dist/agents/spawner.d.ts.map +1 -0
- package/dist/agents/spawner.js +169 -0
- package/dist/agents/spawner.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +6 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +144 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/index.d.ts +10 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +10 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +50 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +6 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +82 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +6 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +157 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +6 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +146 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/status.d.ts +6 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +115 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +41 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/coordination/index.d.ts +7 -0
- package/dist/coordination/index.d.ts.map +1 -0
- package/dist/coordination/index.js +7 -0
- package/dist/coordination/index.js.map +1 -0
- package/dist/coordination/message-bus.d.ts +64 -0
- package/dist/coordination/message-bus.d.ts.map +1 -0
- package/dist/coordination/message-bus.js +148 -0
- package/dist/coordination/message-bus.js.map +1 -0
- package/dist/coordination/task-queue.d.ts +71 -0
- package/dist/coordination/task-queue.d.ts.map +1 -0
- package/dist/coordination/task-queue.js +140 -0
- package/dist/coordination/task-queue.js.map +1 -0
- package/dist/coordination/topology.d.ts +68 -0
- package/dist/coordination/topology.d.ts.map +1 -0
- package/dist/coordination/topology.js +195 -0
- package/dist/coordination/topology.js.map +1 -0
- package/dist/github/client.d.ts +56 -0
- package/dist/github/client.d.ts.map +1 -0
- package/dist/github/client.js +179 -0
- package/dist/github/client.js.map +1 -0
- package/dist/github/index.d.ts +5 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +5 -0
- package/dist/github/index.js.map +1 -0
- package/dist/hooks/index.d.ts +29 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +112 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/session.d.ts +16 -0
- package/dist/hooks/session.d.ts.map +1 -0
- package/dist/hooks/session.js +60 -0
- package/dist/hooks/session.js.map +1 -0
- package/dist/hooks/task.d.ts +16 -0
- package/dist/hooks/task.d.ts.map +1 -0
- package/dist/hooks/task.js +82 -0
- package/dist/hooks/task.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +6 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +128 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/agent-tools.d.ts +174 -0
- package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
- package/dist/mcp/tools/agent-tools.js +214 -0
- package/dist/mcp/tools/agent-tools.js.map +1 -0
- package/dist/mcp/tools/github-tools.d.ts +229 -0
- package/dist/mcp/tools/github-tools.d.ts.map +1 -0
- package/dist/mcp/tools/github-tools.js +286 -0
- package/dist/mcp/tools/github-tools.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +10 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +10 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/memory-tools.d.ts +190 -0
- package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
- package/dist/mcp/tools/memory-tools.js +207 -0
- package/dist/mcp/tools/memory-tools.js.map +1 -0
- package/dist/mcp/tools/session-tools.d.ts +116 -0
- package/dist/mcp/tools/session-tools.d.ts.map +1 -0
- package/dist/mcp/tools/session-tools.js +151 -0
- package/dist/mcp/tools/session-tools.js.map +1 -0
- package/dist/mcp/tools/system-tools.d.ts +98 -0
- package/dist/mcp/tools/system-tools.d.ts.map +1 -0
- package/dist/mcp/tools/system-tools.js +165 -0
- package/dist/mcp/tools/system-tools.js.map +1 -0
- package/dist/mcp/tools/task-tools.d.ts +170 -0
- package/dist/mcp/tools/task-tools.d.ts.map +1 -0
- package/dist/mcp/tools/task-tools.js +188 -0
- package/dist/mcp/tools/task-tools.js.map +1 -0
- package/dist/memory/fts-search.d.ts +46 -0
- package/dist/memory/fts-search.d.ts.map +1 -0
- package/dist/memory/fts-search.js +136 -0
- package/dist/memory/fts-search.js.map +1 -0
- package/dist/memory/index.d.ts +77 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +203 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/sqlite-store.d.ts +36 -0
- package/dist/memory/sqlite-store.d.ts.map +1 -0
- package/dist/memory/sqlite-store.js +371 -0
- package/dist/memory/sqlite-store.js.map +1 -0
- package/dist/memory/vector-search.d.ts +43 -0
- package/dist/memory/vector-search.d.ts.map +1 -0
- package/dist/memory/vector-search.js +179 -0
- package/dist/memory/vector-search.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +7 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +33 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +147 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +48 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +72 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/types.d.ts +5 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +5 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/index.d.ts +49 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +254 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/types.d.ts +189 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +32 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +194 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/embeddings.d.ts +23 -0
- package/dist/utils/embeddings.d.ts.map +1 -0
- package/dist/utils/embeddings.js +151 -0
- package/dist/utils/embeddings.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +96 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +264 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +144 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* status command - System status
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { getConfig } from '../../utils/config.js';
|
|
6
|
+
import { getMemoryManager } from '../../memory/index.js';
|
|
7
|
+
import { getAgentCount as getActiveAgentCount, listAgents } from '../../agents/spawner.js';
|
|
8
|
+
import { getAgentCount as getRegisteredAgentCount } from '../../agents/registry.js';
|
|
9
|
+
export function createStatusCommand() {
|
|
10
|
+
const command = new Command('status')
|
|
11
|
+
.description('Show system status')
|
|
12
|
+
.option('--json', 'Output as JSON')
|
|
13
|
+
.action((options) => {
|
|
14
|
+
const { json } = options;
|
|
15
|
+
try {
|
|
16
|
+
const config = getConfig();
|
|
17
|
+
const memory = getMemoryManager(config);
|
|
18
|
+
const vectorStats = memory.getVectorStats();
|
|
19
|
+
const registeredAgents = getRegisteredAgentCount();
|
|
20
|
+
const activeAgentCount = getActiveAgentCount();
|
|
21
|
+
const activeAgents = listAgents();
|
|
22
|
+
const session = memory.getActiveSession();
|
|
23
|
+
const status = {
|
|
24
|
+
version: config.version,
|
|
25
|
+
session: session
|
|
26
|
+
? {
|
|
27
|
+
id: session.id,
|
|
28
|
+
status: session.status,
|
|
29
|
+
startedAt: session.startedAt.toISOString(),
|
|
30
|
+
}
|
|
31
|
+
: null,
|
|
32
|
+
agents: {
|
|
33
|
+
registered: {
|
|
34
|
+
core: registeredAgents.core,
|
|
35
|
+
custom: registeredAgents.custom,
|
|
36
|
+
total: registeredAgents.total,
|
|
37
|
+
},
|
|
38
|
+
active: activeAgentCount,
|
|
39
|
+
running: activeAgents.filter(a => a.status === 'running').length,
|
|
40
|
+
},
|
|
41
|
+
memory: {
|
|
42
|
+
entries: vectorStats.total,
|
|
43
|
+
indexed: vectorStats.indexed,
|
|
44
|
+
coverage: `${vectorStats.coverage}%`,
|
|
45
|
+
vectorEnabled: config.memory.vectorSearch.enabled,
|
|
46
|
+
},
|
|
47
|
+
providers: {
|
|
48
|
+
default: config.providers.default,
|
|
49
|
+
configured: [
|
|
50
|
+
config.providers.anthropic ? 'anthropic' : null,
|
|
51
|
+
config.providers.openai ? 'openai' : null,
|
|
52
|
+
config.providers.ollama ? 'ollama' : null,
|
|
53
|
+
].filter(Boolean),
|
|
54
|
+
},
|
|
55
|
+
github: {
|
|
56
|
+
enabled: config.github.enabled,
|
|
57
|
+
useGhCli: config.github.useGhCli,
|
|
58
|
+
},
|
|
59
|
+
plugins: {
|
|
60
|
+
enabled: config.plugins.enabled,
|
|
61
|
+
directory: config.plugins.directory,
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
if (json) {
|
|
65
|
+
console.log(JSON.stringify(status, null, 2));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
console.log('agentstack status\n');
|
|
69
|
+
console.log('─'.repeat(50));
|
|
70
|
+
// Version
|
|
71
|
+
console.log(`Version: ${status.version}`);
|
|
72
|
+
// Session
|
|
73
|
+
if (status.session) {
|
|
74
|
+
console.log(`\nSession:`);
|
|
75
|
+
console.log(` ID: ${status.session.id}`);
|
|
76
|
+
console.log(` Status: ${status.session.status}`);
|
|
77
|
+
console.log(` Started: ${status.session.startedAt}`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(`\nSession: none`);
|
|
81
|
+
}
|
|
82
|
+
// Agents
|
|
83
|
+
console.log(`\nAgents:`);
|
|
84
|
+
console.log(` Registered: ${status.agents.registered.total} (${status.agents.registered.core} core, ${status.agents.registered.custom} custom)`);
|
|
85
|
+
console.log(` Active: ${status.agents.active}`);
|
|
86
|
+
console.log(` Running: ${status.agents.running}`);
|
|
87
|
+
// Memory
|
|
88
|
+
console.log(`\nMemory:`);
|
|
89
|
+
console.log(` Entries: ${status.memory.entries}`);
|
|
90
|
+
console.log(` Indexed: ${status.memory.indexed} (${status.memory.coverage})`);
|
|
91
|
+
console.log(` Vector: ${status.memory.vectorEnabled ? 'enabled' : 'disabled'}`);
|
|
92
|
+
// Providers
|
|
93
|
+
console.log(`\nProviders:`);
|
|
94
|
+
console.log(` Default: ${status.providers.default}`);
|
|
95
|
+
console.log(` Configured: ${status.providers.configured.join(', ') || 'none'}`);
|
|
96
|
+
// GitHub
|
|
97
|
+
console.log(`\nGitHub:`);
|
|
98
|
+
console.log(` Enabled: ${status.github.enabled ? 'yes' : 'no'}`);
|
|
99
|
+
if (status.github.enabled) {
|
|
100
|
+
console.log(` Auth: ${status.github.useGhCli ? 'gh CLI' : 'token'}`);
|
|
101
|
+
}
|
|
102
|
+
// Plugins
|
|
103
|
+
console.log(`\nPlugins:`);
|
|
104
|
+
console.log(` Enabled: ${status.plugins.enabled ? 'yes' : 'no'}`);
|
|
105
|
+
console.log(` Directory: ${status.plugins.directory}`);
|
|
106
|
+
console.log('\n' + '─'.repeat(50));
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return command;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* agentstack CLI - Clean agent orchestration
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { createInitCommand, createAgentCommand, createMemoryCommand, createMcpCommand, createPluginCommand, createStatusCommand, } from './commands/index.js';
|
|
8
|
+
// Read version from package.json would be ideal, but for now hardcode
|
|
9
|
+
const VERSION = '1.0.0';
|
|
10
|
+
async function main() {
|
|
11
|
+
const program = new Command();
|
|
12
|
+
program
|
|
13
|
+
.name('agentstack')
|
|
14
|
+
.description('Clean agent orchestration for Claude Code')
|
|
15
|
+
.version(VERSION)
|
|
16
|
+
.option('-v, --verbose', 'Enable verbose logging')
|
|
17
|
+
.option('-q, --quiet', 'Suppress output')
|
|
18
|
+
.hook('preAction', (thisCommand) => {
|
|
19
|
+
const opts = thisCommand.opts();
|
|
20
|
+
if (opts.verbose) {
|
|
21
|
+
logger.setLevel('debug');
|
|
22
|
+
}
|
|
23
|
+
else if (opts.quiet) {
|
|
24
|
+
logger.setLevel('error');
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// Add commands
|
|
28
|
+
program.addCommand(createInitCommand());
|
|
29
|
+
program.addCommand(createAgentCommand());
|
|
30
|
+
program.addCommand(createMemoryCommand());
|
|
31
|
+
program.addCommand(createMcpCommand());
|
|
32
|
+
program.addCommand(createPluginCommand());
|
|
33
|
+
program.addCommand(createStatusCommand());
|
|
34
|
+
// Parse arguments
|
|
35
|
+
await program.parseAsync(process.argv);
|
|
36
|
+
}
|
|
37
|
+
main().catch((error) => {
|
|
38
|
+
console.error('Fatal error:', error instanceof Error ? error.message : String(error));
|
|
39
|
+
process.exit(1);
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,sEAAsE;AACtE,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,2CAA2C,CAAC;SACxD,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;SACjD,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC;SACxC,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAA4C,CAAC;QAE1E,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,eAAe;IACf,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE1C,kBAAkB;IAClB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordination module exports
|
|
3
|
+
*/
|
|
4
|
+
export { TaskQueue, type QueuedTask } from './task-queue.js';
|
|
5
|
+
export { MessageBus, getMessageBus, resetMessageBus, type Message } from './message-bus.js';
|
|
6
|
+
export { HierarchicalCoordinator, type CoordinatorOptions } from './topology.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordination/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAmB,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAgB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,uBAAuB,EAA2B,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message bus - EventEmitter-based inter-agent messaging
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
export interface Message {
|
|
6
|
+
id: string;
|
|
7
|
+
from: string;
|
|
8
|
+
to?: string;
|
|
9
|
+
type: string;
|
|
10
|
+
payload: unknown;
|
|
11
|
+
timestamp: Date;
|
|
12
|
+
}
|
|
13
|
+
export interface MessageBusEvents {
|
|
14
|
+
'message': (message: Message) => void;
|
|
15
|
+
'broadcast': (message: Message) => void;
|
|
16
|
+
'direct': (message: Message) => void;
|
|
17
|
+
'error': (error: Error, message?: Message) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare class MessageBus extends EventEmitter {
|
|
20
|
+
private messageCount;
|
|
21
|
+
private subscribers;
|
|
22
|
+
constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Send a message to a specific agent
|
|
25
|
+
*/
|
|
26
|
+
send(from: string, to: string, type: string, payload: unknown): Message;
|
|
27
|
+
/**
|
|
28
|
+
* Broadcast a message to all agents
|
|
29
|
+
*/
|
|
30
|
+
broadcast(from: string, type: string, payload: unknown): Message;
|
|
31
|
+
/**
|
|
32
|
+
* Subscribe to messages for an agent
|
|
33
|
+
*/
|
|
34
|
+
subscribe(agentId: string, callback: (message: Message) => void): () => void;
|
|
35
|
+
/**
|
|
36
|
+
* Subscribe to all messages
|
|
37
|
+
*/
|
|
38
|
+
subscribeAll(callback: (message: Message) => void): () => void;
|
|
39
|
+
/**
|
|
40
|
+
* Unsubscribe an agent
|
|
41
|
+
*/
|
|
42
|
+
unsubscribe(agentId: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Get subscriber count
|
|
45
|
+
*/
|
|
46
|
+
getSubscriberCount(): number;
|
|
47
|
+
/**
|
|
48
|
+
* Get message count
|
|
49
|
+
*/
|
|
50
|
+
getMessageCount(): number;
|
|
51
|
+
/**
|
|
52
|
+
* Clear all subscriptions
|
|
53
|
+
*/
|
|
54
|
+
clear(): void;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get or create the message bus
|
|
58
|
+
*/
|
|
59
|
+
export declare function getMessageBus(): MessageBus;
|
|
60
|
+
/**
|
|
61
|
+
* Reset the message bus
|
|
62
|
+
*/
|
|
63
|
+
export declare function resetMessageBus(): void;
|
|
64
|
+
//# sourceMappingURL=message-bus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-bus.d.ts","sourceRoot":"","sources":["../../src/coordination/message-bus.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpD;AAED,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAA2D;;IAM9E;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IA8BvE;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IA4BhE;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAmB5E;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAK9D;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQrC;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd;AAKD;;GAEG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message bus - EventEmitter-based inter-agent messaging
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
const log = logger.child('bus');
|
|
7
|
+
export class MessageBus extends EventEmitter {
|
|
8
|
+
messageCount = 0;
|
|
9
|
+
subscribers = new Map();
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Send a message to a specific agent
|
|
15
|
+
*/
|
|
16
|
+
send(from, to, type, payload) {
|
|
17
|
+
const message = {
|
|
18
|
+
id: `msg-${++this.messageCount}`,
|
|
19
|
+
from,
|
|
20
|
+
to,
|
|
21
|
+
type,
|
|
22
|
+
payload,
|
|
23
|
+
timestamp: new Date(),
|
|
24
|
+
};
|
|
25
|
+
// Emit direct message event
|
|
26
|
+
this.emit('direct', message);
|
|
27
|
+
this.emit('message', message);
|
|
28
|
+
// Notify direct subscribers
|
|
29
|
+
const subs = this.subscribers.get(to);
|
|
30
|
+
if (subs) {
|
|
31
|
+
for (const callback of subs) {
|
|
32
|
+
try {
|
|
33
|
+
callback(message);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
this.emit('error', error instanceof Error ? error : new Error(String(error)), message);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
log.debug('Message sent', { id: message.id, from, to, type });
|
|
41
|
+
return message;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Broadcast a message to all agents
|
|
45
|
+
*/
|
|
46
|
+
broadcast(from, type, payload) {
|
|
47
|
+
const message = {
|
|
48
|
+
id: `msg-${++this.messageCount}`,
|
|
49
|
+
from,
|
|
50
|
+
type,
|
|
51
|
+
payload,
|
|
52
|
+
timestamp: new Date(),
|
|
53
|
+
};
|
|
54
|
+
// Emit broadcast event
|
|
55
|
+
this.emit('broadcast', message);
|
|
56
|
+
this.emit('message', message);
|
|
57
|
+
// Notify all subscribers
|
|
58
|
+
for (const subs of this.subscribers.values()) {
|
|
59
|
+
for (const callback of subs) {
|
|
60
|
+
try {
|
|
61
|
+
callback(message);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
this.emit('error', error instanceof Error ? error : new Error(String(error)), message);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
log.debug('Message broadcast', { id: message.id, from, type });
|
|
69
|
+
return message;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Subscribe to messages for an agent
|
|
73
|
+
*/
|
|
74
|
+
subscribe(agentId, callback) {
|
|
75
|
+
let subs = this.subscribers.get(agentId);
|
|
76
|
+
if (!subs) {
|
|
77
|
+
subs = new Set();
|
|
78
|
+
this.subscribers.set(agentId, subs);
|
|
79
|
+
}
|
|
80
|
+
subs.add(callback);
|
|
81
|
+
log.debug('Agent subscribed', { agentId });
|
|
82
|
+
// Return unsubscribe function
|
|
83
|
+
return () => {
|
|
84
|
+
subs?.delete(callback);
|
|
85
|
+
if (subs?.size === 0) {
|
|
86
|
+
this.subscribers.delete(agentId);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Subscribe to all messages
|
|
92
|
+
*/
|
|
93
|
+
subscribeAll(callback) {
|
|
94
|
+
this.on('message', callback);
|
|
95
|
+
return () => this.off('message', callback);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Unsubscribe an agent
|
|
99
|
+
*/
|
|
100
|
+
unsubscribe(agentId) {
|
|
101
|
+
const deleted = this.subscribers.delete(agentId);
|
|
102
|
+
if (deleted) {
|
|
103
|
+
log.debug('Agent unsubscribed', { agentId });
|
|
104
|
+
}
|
|
105
|
+
return deleted;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get subscriber count
|
|
109
|
+
*/
|
|
110
|
+
getSubscriberCount() {
|
|
111
|
+
return this.subscribers.size;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get message count
|
|
115
|
+
*/
|
|
116
|
+
getMessageCount() {
|
|
117
|
+
return this.messageCount;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Clear all subscriptions
|
|
121
|
+
*/
|
|
122
|
+
clear() {
|
|
123
|
+
this.subscribers.clear();
|
|
124
|
+
this.removeAllListeners();
|
|
125
|
+
log.debug('Bus cleared');
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Singleton instance
|
|
129
|
+
let busInstance = null;
|
|
130
|
+
/**
|
|
131
|
+
* Get or create the message bus
|
|
132
|
+
*/
|
|
133
|
+
export function getMessageBus() {
|
|
134
|
+
if (!busInstance) {
|
|
135
|
+
busInstance = new MessageBus();
|
|
136
|
+
}
|
|
137
|
+
return busInstance;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Reset the message bus
|
|
141
|
+
*/
|
|
142
|
+
export function resetMessageBus() {
|
|
143
|
+
if (busInstance) {
|
|
144
|
+
busInstance.clear();
|
|
145
|
+
busInstance = null;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=message-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-bus.js","sourceRoot":"","sources":["../../src/coordination/message-bus.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task queue - priority-based task scheduling
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
import type { Task, AgentType } from '../types.js';
|
|
6
|
+
export interface QueuedTask {
|
|
7
|
+
task: Task;
|
|
8
|
+
priority: number;
|
|
9
|
+
addedAt: Date;
|
|
10
|
+
assignedTo?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface TaskQueueEvents {
|
|
13
|
+
'task:added': (task: QueuedTask) => void;
|
|
14
|
+
'task:assigned': (task: QueuedTask, agentId: string) => void;
|
|
15
|
+
'task:completed': (task: QueuedTask) => void;
|
|
16
|
+
'queue:empty': () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare class TaskQueue extends EventEmitter {
|
|
19
|
+
private queue;
|
|
20
|
+
private processing;
|
|
21
|
+
constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Add a task to the queue
|
|
24
|
+
*/
|
|
25
|
+
enqueue(task: Task, priority?: number): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get the next task for a specific agent type
|
|
28
|
+
*/
|
|
29
|
+
dequeue(agentType?: AgentType | string): QueuedTask | null;
|
|
30
|
+
/**
|
|
31
|
+
* Assign a task to an agent
|
|
32
|
+
*/
|
|
33
|
+
assign(taskId: string, agentId: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Mark a task as completed
|
|
36
|
+
*/
|
|
37
|
+
complete(taskId: string): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Return a task to the queue (e.g., on failure)
|
|
40
|
+
*/
|
|
41
|
+
requeue(taskId: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get queue status
|
|
44
|
+
*/
|
|
45
|
+
getStatus(): {
|
|
46
|
+
queued: number;
|
|
47
|
+
processing: number;
|
|
48
|
+
total: number;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Peek at tasks in queue
|
|
52
|
+
*/
|
|
53
|
+
peek(limit?: number): QueuedTask[];
|
|
54
|
+
/**
|
|
55
|
+
* Get processing tasks
|
|
56
|
+
*/
|
|
57
|
+
getProcessing(): QueuedTask[];
|
|
58
|
+
/**
|
|
59
|
+
* Clear the queue
|
|
60
|
+
*/
|
|
61
|
+
clear(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Get queue length
|
|
64
|
+
*/
|
|
65
|
+
get length(): number;
|
|
66
|
+
/**
|
|
67
|
+
* Check if queue is empty
|
|
68
|
+
*/
|
|
69
|
+
get isEmpty(): boolean;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=task-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../src/coordination/task-queue.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKnD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,eAAe,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,gBAAgB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAsC;;IAMxD;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,GAAE,MAAU,GAAG,IAAI;IAmB/C;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,IAAI;IAwB1D;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAWhD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAejC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAchC;;OAEG;IACH,SAAS,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAQlE;;OAEG;IACH,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU,EAAE;IAItC;;OAEG;IACH,aAAa,IAAI,UAAU,EAAE;IAI7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task queue - priority-based task scheduling
|
|
3
|
+
*/
|
|
4
|
+
import { EventEmitter } from 'node:events';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
const log = logger.child('queue');
|
|
7
|
+
export class TaskQueue extends EventEmitter {
|
|
8
|
+
queue = [];
|
|
9
|
+
processing = new Map();
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Add a task to the queue
|
|
15
|
+
*/
|
|
16
|
+
enqueue(task, priority = 5) {
|
|
17
|
+
const queuedTask = {
|
|
18
|
+
task,
|
|
19
|
+
priority,
|
|
20
|
+
addedAt: new Date(),
|
|
21
|
+
};
|
|
22
|
+
// Insert by priority (higher priority = earlier in queue)
|
|
23
|
+
const insertIndex = this.queue.findIndex(t => t.priority < priority);
|
|
24
|
+
if (insertIndex === -1) {
|
|
25
|
+
this.queue.push(queuedTask);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.queue.splice(insertIndex, 0, queuedTask);
|
|
29
|
+
}
|
|
30
|
+
this.emit('task:added', queuedTask);
|
|
31
|
+
log.debug('Task enqueued', { taskId: task.id, priority, queueSize: this.queue.length });
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the next task for a specific agent type
|
|
35
|
+
*/
|
|
36
|
+
dequeue(agentType) {
|
|
37
|
+
let index = -1;
|
|
38
|
+
if (agentType) {
|
|
39
|
+
// Find first task matching agent type
|
|
40
|
+
index = this.queue.findIndex(t => t.task.agentType === agentType);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Get highest priority task
|
|
44
|
+
index = 0;
|
|
45
|
+
}
|
|
46
|
+
if (index === -1 || this.queue.length === 0) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const [queuedTask] = this.queue.splice(index, 1);
|
|
50
|
+
if (!queuedTask)
|
|
51
|
+
return null;
|
|
52
|
+
this.processing.set(queuedTask.task.id, queuedTask);
|
|
53
|
+
log.debug('Task dequeued', { taskId: queuedTask.task.id });
|
|
54
|
+
return queuedTask;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Assign a task to an agent
|
|
58
|
+
*/
|
|
59
|
+
assign(taskId, agentId) {
|
|
60
|
+
const queuedTask = this.processing.get(taskId);
|
|
61
|
+
if (!queuedTask)
|
|
62
|
+
return false;
|
|
63
|
+
queuedTask.assignedTo = agentId;
|
|
64
|
+
this.emit('task:assigned', queuedTask, agentId);
|
|
65
|
+
log.debug('Task assigned', { taskId, agentId });
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Mark a task as completed
|
|
70
|
+
*/
|
|
71
|
+
complete(taskId) {
|
|
72
|
+
const queuedTask = this.processing.get(taskId);
|
|
73
|
+
if (!queuedTask)
|
|
74
|
+
return false;
|
|
75
|
+
this.processing.delete(taskId);
|
|
76
|
+
this.emit('task:completed', queuedTask);
|
|
77
|
+
log.debug('Task completed', { taskId });
|
|
78
|
+
if (this.queue.length === 0 && this.processing.size === 0) {
|
|
79
|
+
this.emit('queue:empty');
|
|
80
|
+
}
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Return a task to the queue (e.g., on failure)
|
|
85
|
+
*/
|
|
86
|
+
requeue(taskId) {
|
|
87
|
+
const queuedTask = this.processing.get(taskId);
|
|
88
|
+
if (!queuedTask)
|
|
89
|
+
return false;
|
|
90
|
+
this.processing.delete(taskId);
|
|
91
|
+
queuedTask.assignedTo = undefined;
|
|
92
|
+
// Re-add with slightly lower priority
|
|
93
|
+
this.enqueue(queuedTask.task, queuedTask.priority - 1);
|
|
94
|
+
log.debug('Task requeued', { taskId });
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get queue status
|
|
99
|
+
*/
|
|
100
|
+
getStatus() {
|
|
101
|
+
return {
|
|
102
|
+
queued: this.queue.length,
|
|
103
|
+
processing: this.processing.size,
|
|
104
|
+
total: this.queue.length + this.processing.size,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Peek at tasks in queue
|
|
109
|
+
*/
|
|
110
|
+
peek(limit = 10) {
|
|
111
|
+
return this.queue.slice(0, limit);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get processing tasks
|
|
115
|
+
*/
|
|
116
|
+
getProcessing() {
|
|
117
|
+
return Array.from(this.processing.values());
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Clear the queue
|
|
121
|
+
*/
|
|
122
|
+
clear() {
|
|
123
|
+
this.queue = [];
|
|
124
|
+
this.processing.clear();
|
|
125
|
+
log.debug('Queue cleared');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get queue length
|
|
129
|
+
*/
|
|
130
|
+
get length() {
|
|
131
|
+
return this.queue.length;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Check if queue is empty
|
|
135
|
+
*/
|
|
136
|
+
get isEmpty() {
|
|
137
|
+
return this.queue.length === 0 && this.processing.size === 0;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=task-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/coordination/task-queue.ts"],"names":[],"mappings":"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"}
|