@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.
Files changed (214) hide show
  1. package/README.md +244 -0
  2. package/dist/agents/definitions/analyst.d.ts +6 -0
  3. package/dist/agents/definitions/analyst.d.ts.map +1 -0
  4. package/dist/agents/definitions/analyst.js +53 -0
  5. package/dist/agents/definitions/analyst.js.map +1 -0
  6. package/dist/agents/definitions/architect.d.ts +6 -0
  7. package/dist/agents/definitions/architect.d.ts.map +1 -0
  8. package/dist/agents/definitions/architect.js +46 -0
  9. package/dist/agents/definitions/architect.js.map +1 -0
  10. package/dist/agents/definitions/coder.d.ts +6 -0
  11. package/dist/agents/definitions/coder.d.ts.map +1 -0
  12. package/dist/agents/definitions/coder.js +39 -0
  13. package/dist/agents/definitions/coder.js.map +1 -0
  14. package/dist/agents/definitions/coordinator.d.ts +6 -0
  15. package/dist/agents/definitions/coordinator.d.ts.map +1 -0
  16. package/dist/agents/definitions/coordinator.js +54 -0
  17. package/dist/agents/definitions/coordinator.js.map +1 -0
  18. package/dist/agents/definitions/index.d.ts +11 -0
  19. package/dist/agents/definitions/index.d.ts.map +1 -0
  20. package/dist/agents/definitions/index.js +11 -0
  21. package/dist/agents/definitions/index.js.map +1 -0
  22. package/dist/agents/definitions/researcher.d.ts +6 -0
  23. package/dist/agents/definitions/researcher.d.ts.map +1 -0
  24. package/dist/agents/definitions/researcher.js +39 -0
  25. package/dist/agents/definitions/researcher.js.map +1 -0
  26. package/dist/agents/definitions/reviewer.d.ts +6 -0
  27. package/dist/agents/definitions/reviewer.d.ts.map +1 -0
  28. package/dist/agents/definitions/reviewer.js +46 -0
  29. package/dist/agents/definitions/reviewer.js.map +1 -0
  30. package/dist/agents/definitions/tester.d.ts +6 -0
  31. package/dist/agents/definitions/tester.d.ts.map +1 -0
  32. package/dist/agents/definitions/tester.js +44 -0
  33. package/dist/agents/definitions/tester.js.map +1 -0
  34. package/dist/agents/index.d.ts +7 -0
  35. package/dist/agents/index.d.ts.map +1 -0
  36. package/dist/agents/index.js +7 -0
  37. package/dist/agents/index.js.map +1 -0
  38. package/dist/agents/registry.d.ts +41 -0
  39. package/dist/agents/registry.d.ts.map +1 -0
  40. package/dist/agents/registry.js +107 -0
  41. package/dist/agents/registry.js.map +1 -0
  42. package/dist/agents/spawner.d.ts +62 -0
  43. package/dist/agents/spawner.d.ts.map +1 -0
  44. package/dist/agents/spawner.js +169 -0
  45. package/dist/agents/spawner.js.map +1 -0
  46. package/dist/cli/commands/agent.d.ts +6 -0
  47. package/dist/cli/commands/agent.d.ts.map +1 -0
  48. package/dist/cli/commands/agent.js +144 -0
  49. package/dist/cli/commands/agent.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +10 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +10 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +50 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/mcp.d.ts +6 -0
  59. package/dist/cli/commands/mcp.d.ts.map +1 -0
  60. package/dist/cli/commands/mcp.js +82 -0
  61. package/dist/cli/commands/mcp.js.map +1 -0
  62. package/dist/cli/commands/memory.d.ts +6 -0
  63. package/dist/cli/commands/memory.d.ts.map +1 -0
  64. package/dist/cli/commands/memory.js +157 -0
  65. package/dist/cli/commands/memory.js.map +1 -0
  66. package/dist/cli/commands/plugin.d.ts +6 -0
  67. package/dist/cli/commands/plugin.d.ts.map +1 -0
  68. package/dist/cli/commands/plugin.js +146 -0
  69. package/dist/cli/commands/plugin.js.map +1 -0
  70. package/dist/cli/commands/status.d.ts +6 -0
  71. package/dist/cli/commands/status.d.ts.map +1 -0
  72. package/dist/cli/commands/status.js +115 -0
  73. package/dist/cli/commands/status.js.map +1 -0
  74. package/dist/cli/index.d.ts +6 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +41 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/coordination/index.d.ts +7 -0
  79. package/dist/coordination/index.d.ts.map +1 -0
  80. package/dist/coordination/index.js +7 -0
  81. package/dist/coordination/index.js.map +1 -0
  82. package/dist/coordination/message-bus.d.ts +64 -0
  83. package/dist/coordination/message-bus.d.ts.map +1 -0
  84. package/dist/coordination/message-bus.js +148 -0
  85. package/dist/coordination/message-bus.js.map +1 -0
  86. package/dist/coordination/task-queue.d.ts +71 -0
  87. package/dist/coordination/task-queue.d.ts.map +1 -0
  88. package/dist/coordination/task-queue.js +140 -0
  89. package/dist/coordination/task-queue.js.map +1 -0
  90. package/dist/coordination/topology.d.ts +68 -0
  91. package/dist/coordination/topology.d.ts.map +1 -0
  92. package/dist/coordination/topology.js +195 -0
  93. package/dist/coordination/topology.js.map +1 -0
  94. package/dist/github/client.d.ts +56 -0
  95. package/dist/github/client.d.ts.map +1 -0
  96. package/dist/github/client.js +179 -0
  97. package/dist/github/client.js.map +1 -0
  98. package/dist/github/index.d.ts +5 -0
  99. package/dist/github/index.d.ts.map +1 -0
  100. package/dist/github/index.js +5 -0
  101. package/dist/github/index.js.map +1 -0
  102. package/dist/hooks/index.d.ts +29 -0
  103. package/dist/hooks/index.d.ts.map +1 -0
  104. package/dist/hooks/index.js +112 -0
  105. package/dist/hooks/index.js.map +1 -0
  106. package/dist/hooks/session.d.ts +16 -0
  107. package/dist/hooks/session.d.ts.map +1 -0
  108. package/dist/hooks/session.js +60 -0
  109. package/dist/hooks/session.js.map +1 -0
  110. package/dist/hooks/task.d.ts +16 -0
  111. package/dist/hooks/task.d.ts.map +1 -0
  112. package/dist/hooks/task.js +82 -0
  113. package/dist/hooks/task.js.map +1 -0
  114. package/dist/index.d.ts +16 -0
  115. package/dist/index.d.ts.map +1 -0
  116. package/dist/index.js +32 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/mcp/index.d.ts +6 -0
  119. package/dist/mcp/index.d.ts.map +1 -0
  120. package/dist/mcp/index.js +6 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/server.d.ts +22 -0
  123. package/dist/mcp/server.d.ts.map +1 -0
  124. package/dist/mcp/server.js +128 -0
  125. package/dist/mcp/server.js.map +1 -0
  126. package/dist/mcp/tools/agent-tools.d.ts +174 -0
  127. package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
  128. package/dist/mcp/tools/agent-tools.js +214 -0
  129. package/dist/mcp/tools/agent-tools.js.map +1 -0
  130. package/dist/mcp/tools/github-tools.d.ts +229 -0
  131. package/dist/mcp/tools/github-tools.d.ts.map +1 -0
  132. package/dist/mcp/tools/github-tools.js +286 -0
  133. package/dist/mcp/tools/github-tools.js.map +1 -0
  134. package/dist/mcp/tools/index.d.ts +10 -0
  135. package/dist/mcp/tools/index.d.ts.map +1 -0
  136. package/dist/mcp/tools/index.js +10 -0
  137. package/dist/mcp/tools/index.js.map +1 -0
  138. package/dist/mcp/tools/memory-tools.d.ts +190 -0
  139. package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
  140. package/dist/mcp/tools/memory-tools.js +207 -0
  141. package/dist/mcp/tools/memory-tools.js.map +1 -0
  142. package/dist/mcp/tools/session-tools.d.ts +116 -0
  143. package/dist/mcp/tools/session-tools.d.ts.map +1 -0
  144. package/dist/mcp/tools/session-tools.js +151 -0
  145. package/dist/mcp/tools/session-tools.js.map +1 -0
  146. package/dist/mcp/tools/system-tools.d.ts +98 -0
  147. package/dist/mcp/tools/system-tools.d.ts.map +1 -0
  148. package/dist/mcp/tools/system-tools.js +165 -0
  149. package/dist/mcp/tools/system-tools.js.map +1 -0
  150. package/dist/mcp/tools/task-tools.d.ts +170 -0
  151. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  152. package/dist/mcp/tools/task-tools.js +188 -0
  153. package/dist/mcp/tools/task-tools.js.map +1 -0
  154. package/dist/memory/fts-search.d.ts +46 -0
  155. package/dist/memory/fts-search.d.ts.map +1 -0
  156. package/dist/memory/fts-search.js +136 -0
  157. package/dist/memory/fts-search.js.map +1 -0
  158. package/dist/memory/index.d.ts +77 -0
  159. package/dist/memory/index.d.ts.map +1 -0
  160. package/dist/memory/index.js +203 -0
  161. package/dist/memory/index.js.map +1 -0
  162. package/dist/memory/sqlite-store.d.ts +36 -0
  163. package/dist/memory/sqlite-store.d.ts.map +1 -0
  164. package/dist/memory/sqlite-store.js +371 -0
  165. package/dist/memory/sqlite-store.js.map +1 -0
  166. package/dist/memory/vector-search.d.ts +43 -0
  167. package/dist/memory/vector-search.d.ts.map +1 -0
  168. package/dist/memory/vector-search.js +179 -0
  169. package/dist/memory/vector-search.js.map +1 -0
  170. package/dist/plugins/index.d.ts +7 -0
  171. package/dist/plugins/index.d.ts.map +1 -0
  172. package/dist/plugins/index.js +7 -0
  173. package/dist/plugins/index.js.map +1 -0
  174. package/dist/plugins/loader.d.ts +33 -0
  175. package/dist/plugins/loader.d.ts.map +1 -0
  176. package/dist/plugins/loader.js +147 -0
  177. package/dist/plugins/loader.js.map +1 -0
  178. package/dist/plugins/registry.d.ts +48 -0
  179. package/dist/plugins/registry.d.ts.map +1 -0
  180. package/dist/plugins/registry.js +72 -0
  181. package/dist/plugins/registry.js.map +1 -0
  182. package/dist/plugins/types.d.ts +5 -0
  183. package/dist/plugins/types.d.ts.map +1 -0
  184. package/dist/plugins/types.js +5 -0
  185. package/dist/plugins/types.js.map +1 -0
  186. package/dist/providers/index.d.ts +49 -0
  187. package/dist/providers/index.d.ts.map +1 -0
  188. package/dist/providers/index.js +254 -0
  189. package/dist/providers/index.js.map +1 -0
  190. package/dist/types.d.ts +189 -0
  191. package/dist/types.d.ts.map +1 -0
  192. package/dist/types.js +10 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/config.d.ts +32 -0
  195. package/dist/utils/config.d.ts.map +1 -0
  196. package/dist/utils/config.js +194 -0
  197. package/dist/utils/config.js.map +1 -0
  198. package/dist/utils/embeddings.d.ts +23 -0
  199. package/dist/utils/embeddings.d.ts.map +1 -0
  200. package/dist/utils/embeddings.js +151 -0
  201. package/dist/utils/embeddings.js.map +1 -0
  202. package/dist/utils/index.d.ts +8 -0
  203. package/dist/utils/index.d.ts.map +1 -0
  204. package/dist/utils/index.js +8 -0
  205. package/dist/utils/index.js.map +1 -0
  206. package/dist/utils/logger.d.ts +24 -0
  207. package/dist/utils/logger.d.ts.map +1 -0
  208. package/dist/utils/logger.js +96 -0
  209. package/dist/utils/logger.js.map +1 -0
  210. package/dist/utils/validation.d.ts +264 -0
  211. package/dist/utils/validation.d.ts.map +1 -0
  212. package/dist/utils/validation.js +144 -0
  213. package/dist/utils/validation.js.map +1 -0
  214. 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,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * agentstack CLI - Clean agent orchestration
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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,7 @@
1
+ /**
2
+ * Coordination module exports
3
+ */
4
+ export { TaskQueue } from './task-queue.js';
5
+ export { MessageBus, getMessageBus, resetMessageBus } from './message-bus.js';
6
+ export { HierarchicalCoordinator } from './topology.js';
7
+ //# sourceMappingURL=index.js.map
@@ -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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"}