swarm-engine 1.43.0 → 1.51.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 (125) hide show
  1. package/README.md +145 -42
  2. package/agents/implementer.md +1 -14
  3. package/agents/orchestrator.md +127 -246
  4. package/agents/reviewer.md +3 -18
  5. package/dist/cli/commands/agents.js +13 -1
  6. package/dist/cli/commands/agents.js.map +1 -1
  7. package/dist/cli/commands/dashboard.d.ts +3 -0
  8. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  9. package/dist/cli/commands/dashboard.js +43 -0
  10. package/dist/cli/commands/dashboard.js.map +1 -0
  11. package/dist/cli/commands/orchestrate.d.ts.map +1 -1
  12. package/dist/cli/commands/orchestrate.js +17 -0
  13. package/dist/cli/commands/orchestrate.js.map +1 -1
  14. package/dist/cli/commands/run.d.ts.map +1 -1
  15. package/dist/cli/commands/run.js +20 -1
  16. package/dist/cli/commands/run.js.map +1 -1
  17. package/dist/cli/commands/status.d.ts +1 -0
  18. package/dist/cli/commands/status.d.ts.map +1 -1
  19. package/dist/cli/commands/status.js +5 -2
  20. package/dist/cli/commands/status.js.map +1 -1
  21. package/dist/core/event-bus.d.ts.map +1 -1
  22. package/dist/core/event-bus.js +4 -1
  23. package/dist/core/event-bus.js.map +1 -1
  24. package/dist/core/types.d.ts +24 -1
  25. package/dist/core/types.d.ts.map +1 -1
  26. package/dist/core/types.js +4 -0
  27. package/dist/core/types.js.map +1 -1
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +2 -0
  31. package/dist/index.js.map +1 -1
  32. package/dist/memory/index.js +2 -2
  33. package/dist/memory/index.js.map +1 -1
  34. package/dist/runtime/agent-runner.d.ts +8 -0
  35. package/dist/runtime/agent-runner.d.ts.map +1 -1
  36. package/dist/runtime/agent-runner.js +93 -4
  37. package/dist/runtime/agent-runner.js.map +1 -1
  38. package/dist/runtime/backends/claude.d.ts +1 -0
  39. package/dist/runtime/backends/claude.d.ts.map +1 -1
  40. package/dist/runtime/backends/claude.js +50 -2
  41. package/dist/runtime/backends/claude.js.map +1 -1
  42. package/dist/runtime/backends/codex.d.ts.map +1 -1
  43. package/dist/runtime/backends/codex.js +4 -0
  44. package/dist/runtime/backends/codex.js.map +1 -1
  45. package/dist/runtime/backends/gemini.d.ts.map +1 -1
  46. package/dist/runtime/backends/gemini.js +4 -0
  47. package/dist/runtime/backends/gemini.js.map +1 -1
  48. package/dist/runtime/benefits.d.ts +81 -1
  49. package/dist/runtime/benefits.d.ts.map +1 -1
  50. package/dist/runtime/benefits.js +199 -12
  51. package/dist/runtime/benefits.js.map +1 -1
  52. package/dist/runtime/cache-optimizer.d.ts +7 -3
  53. package/dist/runtime/cache-optimizer.d.ts.map +1 -1
  54. package/dist/runtime/cache-optimizer.js +11 -7
  55. package/dist/runtime/cache-optimizer.js.map +1 -1
  56. package/dist/runtime/compaction.d.ts +6 -1
  57. package/dist/runtime/compaction.d.ts.map +1 -1
  58. package/dist/runtime/compaction.js +39 -2
  59. package/dist/runtime/compaction.js.map +1 -1
  60. package/dist/runtime/cost-model.d.ts.map +1 -1
  61. package/dist/runtime/cost-model.js +20 -17
  62. package/dist/runtime/cost-model.js.map +1 -1
  63. package/dist/runtime/engine.d.ts +1 -0
  64. package/dist/runtime/engine.d.ts.map +1 -1
  65. package/dist/runtime/engine.js +62 -2
  66. package/dist/runtime/engine.js.map +1 -1
  67. package/dist/runtime/graph-discovery.js +2 -2
  68. package/dist/runtime/graph-discovery.js.map +1 -1
  69. package/dist/runtime/graph-trajectory.js +3 -3
  70. package/dist/runtime/graph-trajectory.js.map +1 -1
  71. package/dist/runtime/lsp.d.ts.map +1 -1
  72. package/dist/runtime/lsp.js +4 -0
  73. package/dist/runtime/lsp.js.map +1 -1
  74. package/dist/runtime/mcp.d.ts +1 -0
  75. package/dist/runtime/mcp.d.ts.map +1 -1
  76. package/dist/runtime/mcp.js +38 -0
  77. package/dist/runtime/mcp.js.map +1 -1
  78. package/dist/runtime/output-summarizer.d.ts +45 -0
  79. package/dist/runtime/output-summarizer.d.ts.map +1 -0
  80. package/dist/runtime/output-summarizer.js +171 -0
  81. package/dist/runtime/output-summarizer.js.map +1 -0
  82. package/dist/runtime/plugins.d.ts +5 -1
  83. package/dist/runtime/plugins.d.ts.map +1 -1
  84. package/dist/runtime/plugins.js +14 -2
  85. package/dist/runtime/plugins.js.map +1 -1
  86. package/dist/runtime/prompt-tier.d.ts +33 -0
  87. package/dist/runtime/prompt-tier.d.ts.map +1 -0
  88. package/dist/runtime/prompt-tier.js +105 -0
  89. package/dist/runtime/prompt-tier.js.map +1 -0
  90. package/dist/runtime/sharing.js +2 -1
  91. package/dist/runtime/sharing.js.map +1 -1
  92. package/dist/runtime/stats.d.ts +2 -0
  93. package/dist/runtime/stats.d.ts.map +1 -1
  94. package/dist/runtime/stats.js +17 -3
  95. package/dist/runtime/stats.js.map +1 -1
  96. package/dist/utils/project-config.d.ts +20 -0
  97. package/dist/utils/project-config.d.ts.map +1 -1
  98. package/dist/utils/project-config.js +46 -1
  99. package/dist/utils/project-config.js.map +1 -1
  100. package/dist/utils/redact.d.ts.map +1 -1
  101. package/dist/utils/redact.js +5 -1
  102. package/dist/utils/redact.js.map +1 -1
  103. package/dist/web/bridge.d.ts +47 -0
  104. package/dist/web/bridge.d.ts.map +1 -0
  105. package/dist/web/bridge.js +267 -0
  106. package/dist/web/bridge.js.map +1 -0
  107. package/dist/web/graph-api.d.ts +19 -0
  108. package/dist/web/graph-api.d.ts.map +1 -0
  109. package/dist/web/graph-api.js +157 -0
  110. package/dist/web/graph-api.js.map +1 -0
  111. package/dist/web/index.d.ts +21 -0
  112. package/dist/web/index.d.ts.map +1 -0
  113. package/dist/web/index.js +38 -0
  114. package/dist/web/index.js.map +1 -0
  115. package/dist/web/public/index.html +1304 -0
  116. package/dist/web/public/public/index.html +1307 -0
  117. package/dist/web/server.d.ts +24 -0
  118. package/dist/web/server.d.ts.map +1 -0
  119. package/dist/web/server.js +113 -0
  120. package/dist/web/server.js.map +1 -0
  121. package/dist/web/tray.d.ts +23 -0
  122. package/dist/web/tray.d.ts.map +1 -0
  123. package/dist/web/tray.js +205 -0
  124. package/dist/web/tray.js.map +1 -0
  125. package/package.json +1 -1
@@ -0,0 +1,24 @@
1
+ import { IncomingMessage, ServerResponse } from 'http';
2
+ import { WebSocket } from 'ws';
3
+ export interface DashboardServerOptions {
4
+ port?: number;
5
+ onRequest?: (req: IncomingMessage, res: ServerResponse) => boolean;
6
+ }
7
+ export declare class DashboardServer {
8
+ private server;
9
+ private wss;
10
+ private clients;
11
+ private port;
12
+ private onRequest;
13
+ private onConnect;
14
+ constructor(opts?: DashboardServerOptions);
15
+ /** Register a callback for new WebSocket connections. */
16
+ setOnConnect(handler: (ws: WebSocket) => void): void;
17
+ /** Broadcast a message string to all connected clients. */
18
+ broadcast(message: string): void;
19
+ start(): Promise<void>;
20
+ stop(): Promise<void>;
21
+ private handle;
22
+ private serveStatic;
23
+ }
24
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAIrE,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAYhD,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC;CACpE;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,SAAS,CAAkE;IACnF,OAAO,CAAC,SAAS,CAA0C;gBAE/C,IAAI,GAAE,sBAA2B;IAK7C,yDAAyD;IACzD,YAAY,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAIpD,2DAA2D;IAC3D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAoBb,MAAM;YAuBN,WAAW;CAsB1B"}
@@ -0,0 +1,113 @@
1
+ import { createServer } from 'http';
2
+ import { readFile } from 'fs/promises';
3
+ import { join, extname, sep } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { WebSocketServer, WebSocket } from 'ws';
6
+ import { Logger } from '../utils/logger.js';
7
+ const __dirname = fileURLToPath(new URL('.', import.meta.url));
8
+ const CONTENT_TYPES = {
9
+ '.html': 'text/html',
10
+ '.css': 'text/css',
11
+ '.js': 'application/javascript',
12
+ '.svg': 'image/svg+xml',
13
+ };
14
+ export class DashboardServer {
15
+ server = null;
16
+ wss = null;
17
+ clients = new Set();
18
+ port;
19
+ onRequest;
20
+ onConnect = null;
21
+ constructor(opts = {}) {
22
+ this.port = opts.port ?? 3101;
23
+ this.onRequest = opts.onRequest ?? null;
24
+ }
25
+ /** Register a callback for new WebSocket connections. */
26
+ setOnConnect(handler) {
27
+ this.onConnect = handler;
28
+ }
29
+ /** Broadcast a message string to all connected clients. */
30
+ broadcast(message) {
31
+ for (const client of this.clients) {
32
+ if (client.readyState === WebSocket.OPEN) {
33
+ client.send(message);
34
+ }
35
+ }
36
+ }
37
+ async start() {
38
+ this.server = createServer((req, res) => this.handle(req, res));
39
+ this.wss = new WebSocketServer({ server: this.server });
40
+ this.wss.on('connection', (ws) => {
41
+ this.clients.add(ws);
42
+ ws.on('error', () => this.clients.delete(ws));
43
+ ws.on('close', () => this.clients.delete(ws));
44
+ if (this.onConnect)
45
+ this.onConnect(ws);
46
+ });
47
+ return new Promise((resolve, reject) => {
48
+ this.server.on('error', reject);
49
+ this.server.listen(this.port, '127.0.0.1', () => {
50
+ new Logger('dashboard').info(`http://localhost:${this.port}`);
51
+ resolve();
52
+ });
53
+ });
54
+ }
55
+ async stop() {
56
+ // Close all WebSocket clients
57
+ for (const client of this.clients) {
58
+ client.close();
59
+ }
60
+ this.clients.clear();
61
+ // Close WebSocket server
62
+ if (this.wss) {
63
+ await new Promise((resolve) => this.wss.close(() => resolve()));
64
+ this.wss = null;
65
+ }
66
+ // Close HTTP server
67
+ return new Promise((resolve) => {
68
+ this.server ? this.server.close(() => resolve()) : resolve();
69
+ this.server = null;
70
+ });
71
+ }
72
+ async handle(req, res) {
73
+ const url = new URL(req.url ?? '/', `http://${req.headers.host}`);
74
+ const pathname = url.pathname;
75
+ // CORS headers
76
+ res.setHeader('Access-Control-Allow-Origin', `http://localhost:${this.port}`);
77
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
78
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
79
+ if (req.method === 'OPTIONS') {
80
+ res.writeHead(204);
81
+ res.end();
82
+ return;
83
+ }
84
+ // Let custom request handler (API routes) try first
85
+ if (this.onRequest && this.onRequest(req, res)) {
86
+ return;
87
+ }
88
+ // Serve static files from public/
89
+ await this.serveStatic(pathname, res);
90
+ }
91
+ async serveStatic(pathname, res) {
92
+ const publicDir = join(__dirname, 'public');
93
+ const filePath = pathname === '/' ? join(publicDir, 'index.html') : join(publicDir, pathname);
94
+ // Prevent path traversal
95
+ if (!filePath.startsWith(publicDir + sep) && filePath !== join(publicDir, 'index.html')) {
96
+ res.writeHead(403);
97
+ res.end('Forbidden');
98
+ return;
99
+ }
100
+ try {
101
+ const data = await readFile(filePath);
102
+ const ext = extname(filePath);
103
+ const contentType = CONTENT_TYPES[ext] ?? 'application/octet-stream';
104
+ res.writeHead(200, { 'Content-Type': contentType });
105
+ res.end(data);
106
+ }
107
+ catch {
108
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
109
+ res.end('Not found');
110
+ }
111
+ }
112
+ }
113
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmC,MAAM,MAAM,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,aAAa,GAA2B;IAC5C,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,wBAAwB;IAC/B,MAAM,EAAE,eAAe;CACxB,CAAC;AAOF,MAAM,OAAO,eAAe;IAClB,MAAM,GAA2C,IAAI,CAAC;IACtD,GAAG,GAA2B,IAAI,CAAC;IACnC,OAAO,GAAmB,IAAI,GAAG,EAAE,CAAC;IACpC,IAAI,CAAS;IACb,SAAS,CAAkE;IAC3E,SAAS,GAAqC,IAAI,CAAC;IAE3D,YAAY,OAA+B,EAAE;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,yDAAyD;IACzD,YAAY,CAAC,OAAgC;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,2DAA2D;IAC3D,SAAS,CAAC,OAAe;QACvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEhE,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,MAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;gBAC/C,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,8BAA8B;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAErB,yBAAyB;QACzB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,GAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAClB,CAAC;QAED,oBAAoB;QACpB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAC7D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,GAAoB,EAAE,GAAmB;QAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,eAAe;QACf,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;QACpE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,oDAAoD;QACpD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,GAAmB;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE9F,yBAAyB;QACzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,CAAC,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9B,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,0BAA0B,CAAC;YACrE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import { EventBus } from '../core/event-bus.js';
2
+ export declare class DashboardTray {
3
+ private systray;
4
+ private bus;
5
+ private port;
6
+ private handler;
7
+ private state;
8
+ private itemStatus;
9
+ private itemPhase;
10
+ private itemAgents;
11
+ private itemTokens;
12
+ private itemOpen;
13
+ private itemQuit;
14
+ constructor(bus: EventBus, port: number);
15
+ start(): Promise<void>;
16
+ stop(): void;
17
+ private onEvent;
18
+ private updateMenu;
19
+ private formatNum;
20
+ private fixBinaryPermissions;
21
+ private openBrowser;
22
+ }
23
+ //# sourceMappingURL=tray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tray.d.ts","sourceRoot":"","sources":["../../src/web/tray.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAmChD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAA8C;IAC7D,OAAO,CAAC,KAAK,CAOX;IAGF,OAAO,CAAC,UAAU,CAAmF;IACrG,OAAO,CAAC,SAAS,CAAgF;IACjG,OAAO,CAAC,UAAU,CAAmF;IACrG,OAAO,CAAC,UAAU,CAAyF;IAC3G,OAAO,CAAC,QAAQ,CAMd;IACF,OAAO,CAAC,QAAQ,CAKd;gBAEU,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM;IAKjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8D5B,IAAI,IAAI,IAAI;IAaZ,OAAO,CAAC,OAAO;IAsDf,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,205 @@
1
+ import { spawn } from 'child_process';
2
+ import { chmodSync, existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { platform } from 'os';
6
+ // ─── Icons ──────────────────────────────────────────────────────────
7
+ // 16x16 amber diamond (Linux/Windows)
8
+ const ICON_COLOR = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAARElEQVR4nGNgGNTg5nzDBhCmRPN/KCbNEDTNpBmCQzNxhhDQjN8QIjXjNoRiAyj2AlUCkYAhxGnGYQhpmtEMIU8z3QAAOCfTObjduCIAAAAASUVORK5CYII=';
9
+ // 16x16 black diamond on transparent (macOS template)
10
+ const ICON_TEMPLATE = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAPUlEQVR4nGNgGOwgD4rJ1nwHikk2BFkzyYZg00y0Ifg0EzSEGM14DaHYAIq9QIwhFMUERWmBotRItmb6AABdkz3hDh9mHAAAAABJRU5ErkJggg==';
11
+ // ─── DashboardTray ──────────────────────────────────────────────────
12
+ export class DashboardTray {
13
+ systray = null;
14
+ bus;
15
+ port;
16
+ handler = null;
17
+ state = {
18
+ orchestration: 'Idle',
19
+ status: 'idle',
20
+ phase: '-',
21
+ agents: { running: 0, total: 0 },
22
+ tokens: 0,
23
+ cost: 0,
24
+ };
25
+ // Menu items (mutated in place, then pushed via sendAction)
26
+ itemStatus = { title: 'Swarm: Idle', tooltip: '', checked: false, enabled: false };
27
+ itemPhase = { title: 'Phase: -', tooltip: '', checked: false, enabled: false };
28
+ itemAgents = { title: 'Agents: 0/0', tooltip: '', checked: false, enabled: false };
29
+ itemTokens = { title: 'Tokens: 0 | $0.00', tooltip: '', checked: false, enabled: false };
30
+ itemOpen = {
31
+ title: 'Open Dashboard',
32
+ tooltip: 'Open in browser',
33
+ checked: false,
34
+ enabled: true,
35
+ click: () => this.openBrowser(),
36
+ };
37
+ itemQuit = {
38
+ title: 'Quit',
39
+ tooltip: 'Stop dashboard',
40
+ checked: false,
41
+ enabled: true,
42
+ };
43
+ constructor(bus, port) {
44
+ this.bus = bus;
45
+ this.port = port;
46
+ }
47
+ async start() {
48
+ let SysTray;
49
+ try {
50
+ const mod = await import('systray2');
51
+ // Handle CJS-to-ESM interop: can be mod.default.default or mod.default
52
+ SysTray = typeof mod.default === 'function' ? mod.default : mod.default?.default ?? mod.default;
53
+ }
54
+ catch {
55
+ console.warn('[tray] systray2 not available — skipping tray icon');
56
+ return;
57
+ }
58
+ if (typeof SysTray !== 'function') {
59
+ console.warn('[tray] systray2 module loaded but constructor not found — skipping tray icon');
60
+ return;
61
+ }
62
+ // Fix binary permissions (npm doesn't always preserve +x on installed binaries)
63
+ this.fixBinaryPermissions();
64
+ const isMac = platform() === 'darwin';
65
+ this.systray = new SysTray({
66
+ menu: {
67
+ icon: isMac ? ICON_TEMPLATE : ICON_COLOR,
68
+ isTemplateIcon: isMac,
69
+ title: '',
70
+ tooltip: 'Swarm Dashboard',
71
+ items: [
72
+ this.itemStatus,
73
+ this.itemPhase,
74
+ this.itemAgents,
75
+ this.itemTokens,
76
+ { title: '<SEPARATOR>', tooltip: '', checked: false, enabled: true },
77
+ this.itemOpen,
78
+ this.itemQuit,
79
+ ],
80
+ },
81
+ debug: false,
82
+ copyDir: false,
83
+ });
84
+ this.systray.onClick((action) => {
85
+ if (action.item === this.itemQuit) {
86
+ process.emit('SIGINT');
87
+ }
88
+ else if (action.item.click) {
89
+ action.item.click();
90
+ }
91
+ });
92
+ try {
93
+ await this.systray.ready();
94
+ }
95
+ catch (err) {
96
+ console.warn(`[tray] Failed to start: ${err.message}`);
97
+ this.systray = null;
98
+ return;
99
+ }
100
+ // Subscribe to EventBus for live updates
101
+ this.handler = (event) => this.onEvent(event);
102
+ this.bus.on('*', this.handler);
103
+ }
104
+ stop() {
105
+ if (this.handler) {
106
+ this.bus.off('*', this.handler);
107
+ this.handler = null;
108
+ }
109
+ if (this.systray) {
110
+ this.systray.kill(false);
111
+ this.systray = null;
112
+ }
113
+ }
114
+ // ─── Event Handling ─────────────────────────────────────────────
115
+ onEvent(event) {
116
+ const data = event.data;
117
+ switch (event.type) {
118
+ case 'orchestration:start':
119
+ this.state.orchestration = String(data.name ?? 'Orchestration');
120
+ this.state.status = 'running';
121
+ this.state.phase = 'starting';
122
+ this.state.agents = { running: 0, total: 0 };
123
+ this.state.tokens = 0;
124
+ this.state.cost = 0;
125
+ break;
126
+ case 'orchestration:phase-start':
127
+ this.state.phase = String(data.phase ?? '?');
128
+ this.state.agents.total += Number(data.agentCount ?? 0);
129
+ break;
130
+ case 'orchestration:phase-complete': {
131
+ const usage = data.usage;
132
+ if (usage) {
133
+ this.state.tokens += Number(usage.totalTokens ?? 0);
134
+ this.state.cost += Number(usage.costUsd ?? 0);
135
+ }
136
+ break;
137
+ }
138
+ case 'orchestration:complete':
139
+ this.state.status = 'complete';
140
+ this.state.phase = 'done';
141
+ break;
142
+ case 'orchestration:failed':
143
+ this.state.status = 'failed';
144
+ this.state.phase = 'failed';
145
+ break;
146
+ case 'agent:running':
147
+ this.state.agents.running++;
148
+ break;
149
+ case 'agent:idle':
150
+ case 'agent:error':
151
+ case 'agent:timeout':
152
+ this.state.agents.running = Math.max(0, this.state.agents.running - 1);
153
+ break;
154
+ default:
155
+ return; // No menu update needed
156
+ }
157
+ this.updateMenu();
158
+ }
159
+ updateMenu() {
160
+ if (!this.systray)
161
+ return;
162
+ const s = this.state;
163
+ const statusIcon = s.status === 'running' ? '●' : s.status === 'complete' ? '✓' : s.status === 'failed' ? '✗' : '○';
164
+ this.itemStatus.title = `${statusIcon} ${s.orchestration}`;
165
+ this.systray.sendAction({ type: 'update-item', item: this.itemStatus });
166
+ this.itemPhase.title = `Phase: ${s.phase}`;
167
+ this.systray.sendAction({ type: 'update-item', item: this.itemPhase });
168
+ this.itemAgents.title = `Agents: ${s.agents.running} running / ${s.agents.total} total`;
169
+ this.systray.sendAction({ type: 'update-item', item: this.itemAgents });
170
+ this.itemTokens.title = `Tokens: ${this.formatNum(s.tokens)} | $${s.cost.toFixed(2)}`;
171
+ this.systray.sendAction({ type: 'update-item', item: this.itemTokens });
172
+ }
173
+ formatNum(n) {
174
+ if (n >= 1_000_000)
175
+ return `${(n / 1_000_000).toFixed(1)}M`;
176
+ if (n >= 1_000)
177
+ return `${(n / 1_000).toFixed(1)}K`;
178
+ return String(n);
179
+ }
180
+ fixBinaryPermissions() {
181
+ const os = platform();
182
+ if (os === 'win32')
183
+ return; // Windows doesn't need chmod
184
+ const suffix = os === 'darwin' ? 'darwin' : 'linux';
185
+ try {
186
+ // Resolve from systray2's package location
187
+ const systrayDir = fileURLToPath(new URL('.', import.meta.url));
188
+ const binPath = join(systrayDir, '..', '..', 'node_modules', 'systray2', 'traybin', `tray_${suffix}_release`);
189
+ if (existsSync(binPath)) {
190
+ chmodSync(binPath, 0o755);
191
+ }
192
+ }
193
+ catch {
194
+ // Best effort — if it fails, systray.ready() will report the actual error
195
+ }
196
+ }
197
+ openBrowser() {
198
+ const url = `http://localhost:${this.port}`;
199
+ const os = platform();
200
+ const cmd = os === 'darwin' ? 'open' : os === 'win32' ? 'start' : 'xdg-open';
201
+ const args = os === 'win32' ? ['/c', 'start', '', url] : [url];
202
+ spawn(cmd, args, { detached: true, stdio: 'ignore', ...(os === 'win32' ? { shell: true } : {}) }).unref();
203
+ }
204
+ }
205
+ //# sourceMappingURL=tray.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tray.js","sourceRoot":"","sources":["../../src/web/tray.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swarm-engine",
3
- "version": "1.43.0",
3
+ "version": "1.51.0",
4
4
  "description": "Self-aware multi-agent orchestration engine with knowledge graph, causal inference, GNN failure prediction, and self-evolving rules — pure TypeScript",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",