expxagents 0.22.0 → 0.23.1

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 (113) hide show
  1. package/dist/cli/src/runners/__tests__/provider-registry.test.d.ts +1 -0
  2. package/dist/cli/src/runners/__tests__/provider-registry.test.js +31 -0
  3. package/dist/cli/src/runners/provider-registry.d.ts +23 -0
  4. package/dist/cli/src/runners/provider-registry.js +16 -0
  5. package/dist/core/squad-loader.d.ts +3 -0
  6. package/dist/core/squad-loader.js +17 -0
  7. package/dist/dashboard/assets/{BufferResource-BwRgU3wY.js → BufferResource-CtMBKLKd.js} +1 -1
  8. package/dist/dashboard/assets/{CanvasRenderer-DvOWlRqv.js → CanvasRenderer-pxmUW8ME.js} +1 -1
  9. package/dist/dashboard/assets/{JarvisView-C1qo_eqt.js → JarvisView-BbDtWAIa.js} +1 -1
  10. package/dist/dashboard/assets/{RenderTargetSystem-Y0Heftg5.js → RenderTargetSystem-CH2-X-k2.js} +1 -1
  11. package/dist/dashboard/assets/{ThreeBackground-BvFWVFxf.js → ThreeBackground-DBG-4oEk.js} +1 -1
  12. package/dist/dashboard/assets/{WebGLRenderer-z6frYPUX.js → WebGLRenderer-BloYZwrq.js} +1 -1
  13. package/dist/dashboard/assets/{WebGPURenderer-CRtY6gU8.js → WebGPURenderer-DUX9Mvnr.js} +1 -1
  14. package/dist/dashboard/assets/{browserAll-71txjtwY.js → browserAll-CE-RAC5C.js} +1 -1
  15. package/dist/dashboard/assets/index-DeAVK0Qz.js +1193 -0
  16. package/dist/dashboard/assets/{webworkerAll-CyZzgAtl.js → webworkerAll-BPhLjLcx.js} +1 -1
  17. package/dist/dashboard/index.html +1 -1
  18. package/dist/server/api/__tests__/cost-routes.test.d.ts +2 -0
  19. package/dist/server/api/__tests__/cost-routes.test.d.ts.map +1 -0
  20. package/dist/server/api/__tests__/cost-routes.test.js +54 -0
  21. package/dist/server/api/__tests__/cost-routes.test.js.map +1 -0
  22. package/dist/server/api/__tests__/health-routes.test.d.ts +2 -0
  23. package/dist/server/api/__tests__/health-routes.test.d.ts.map +1 -0
  24. package/dist/server/api/__tests__/health-routes.test.js +22 -0
  25. package/dist/server/api/__tests__/health-routes.test.js.map +1 -0
  26. package/dist/server/api/__tests__/log-routes.test.d.ts +2 -0
  27. package/dist/server/api/__tests__/log-routes.test.d.ts.map +1 -0
  28. package/dist/server/api/__tests__/log-routes.test.js +35 -0
  29. package/dist/server/api/__tests__/log-routes.test.js.map +1 -0
  30. package/dist/server/api/cost-routes.d.ts +8 -0
  31. package/dist/server/api/cost-routes.d.ts.map +1 -0
  32. package/dist/server/api/cost-routes.js +39 -0
  33. package/dist/server/api/cost-routes.js.map +1 -0
  34. package/dist/server/api/files-routes.d.ts.map +1 -1
  35. package/dist/server/api/files-routes.js +95 -0
  36. package/dist/server/api/files-routes.js.map +1 -1
  37. package/dist/server/api/health-routes.d.ts +7 -1
  38. package/dist/server/api/health-routes.d.ts.map +1 -1
  39. package/dist/server/api/health-routes.js +42 -2
  40. package/dist/server/api/health-routes.js.map +1 -1
  41. package/dist/server/api/integration-routes.d.ts.map +1 -1
  42. package/dist/server/api/integration-routes.js +5 -0
  43. package/dist/server/api/integration-routes.js.map +1 -1
  44. package/dist/server/api/log-routes.d.ts +8 -0
  45. package/dist/server/api/log-routes.d.ts.map +1 -0
  46. package/dist/server/api/log-routes.js +17 -0
  47. package/dist/server/api/log-routes.js.map +1 -0
  48. package/dist/server/app.d.ts.map +1 -1
  49. package/dist/server/app.js +5 -1
  50. package/dist/server/app.js.map +1 -1
  51. package/dist/server/bridge/__tests__/registry.test.d.ts +2 -0
  52. package/dist/server/bridge/__tests__/registry.test.d.ts.map +1 -0
  53. package/dist/server/bridge/__tests__/registry.test.js +45 -0
  54. package/dist/server/bridge/__tests__/registry.test.js.map +1 -0
  55. package/dist/server/bridge/chat-handler.d.ts.map +1 -1
  56. package/dist/server/bridge/chat-handler.js +3 -0
  57. package/dist/server/bridge/chat-handler.js.map +1 -1
  58. package/dist/server/bridge/claude-bridge.d.ts +6 -0
  59. package/dist/server/bridge/claude-bridge.d.ts.map +1 -1
  60. package/dist/server/bridge/claude-bridge.js +17 -0
  61. package/dist/server/bridge/claude-bridge.js.map +1 -1
  62. package/dist/server/bridge/factory.d.ts.map +1 -1
  63. package/dist/server/bridge/factory.js +12 -52
  64. package/dist/server/bridge/factory.js.map +1 -1
  65. package/dist/server/bridge/opencode-bridge.d.ts +6 -0
  66. package/dist/server/bridge/opencode-bridge.d.ts.map +1 -1
  67. package/dist/server/bridge/opencode-bridge.js +19 -0
  68. package/dist/server/bridge/opencode-bridge.js.map +1 -1
  69. package/dist/server/bridge/registry.d.ts +19 -0
  70. package/dist/server/bridge/registry.d.ts.map +1 -0
  71. package/dist/server/bridge/registry.js +29 -0
  72. package/dist/server/bridge/registry.js.map +1 -0
  73. package/dist/server/db/schema.d.ts +1 -1
  74. package/dist/server/db/schema.d.ts.map +1 -1
  75. package/dist/server/db/schema.js +72 -0
  76. package/dist/server/db/schema.js.map +1 -1
  77. package/dist/server/scheduler/job-runner.d.ts.map +1 -1
  78. package/dist/server/scheduler/job-runner.js +4 -0
  79. package/dist/server/scheduler/job-runner.js.map +1 -1
  80. package/dist/server/services/__tests__/cost-service.test.d.ts +2 -0
  81. package/dist/server/services/__tests__/cost-service.test.d.ts.map +1 -0
  82. package/dist/server/services/__tests__/cost-service.test.js +72 -0
  83. package/dist/server/services/__tests__/cost-service.test.js.map +1 -0
  84. package/dist/server/services/__tests__/integration-registry.test.d.ts +2 -0
  85. package/dist/server/services/__tests__/integration-registry.test.d.ts.map +1 -0
  86. package/dist/server/services/__tests__/integration-registry.test.js +28 -0
  87. package/dist/server/services/__tests__/integration-registry.test.js.map +1 -0
  88. package/dist/server/services/__tests__/log-service.test.d.ts +2 -0
  89. package/dist/server/services/__tests__/log-service.test.d.ts.map +1 -0
  90. package/dist/server/services/__tests__/log-service.test.js +49 -0
  91. package/dist/server/services/__tests__/log-service.test.js.map +1 -0
  92. package/dist/server/services/__tests__/state-service.test.d.ts +2 -0
  93. package/dist/server/services/__tests__/state-service.test.d.ts.map +1 -0
  94. package/dist/server/services/__tests__/state-service.test.js +136 -0
  95. package/dist/server/services/__tests__/state-service.test.js.map +1 -0
  96. package/dist/server/services/cost-service.d.ts +55 -0
  97. package/dist/server/services/cost-service.d.ts.map +1 -0
  98. package/dist/server/services/cost-service.js +59 -0
  99. package/dist/server/services/cost-service.js.map +1 -0
  100. package/dist/server/services/integration-registry.d.ts +9 -0
  101. package/dist/server/services/integration-registry.d.ts.map +1 -0
  102. package/dist/server/services/integration-registry.js +14 -0
  103. package/dist/server/services/integration-registry.js.map +1 -0
  104. package/dist/server/services/log-service.d.ts +28 -0
  105. package/dist/server/services/log-service.d.ts.map +1 -0
  106. package/dist/server/services/log-service.js +34 -0
  107. package/dist/server/services/log-service.js.map +1 -0
  108. package/dist/server/services/state-service.d.ts +22 -0
  109. package/dist/server/services/state-service.d.ts.map +1 -0
  110. package/dist/server/services/state-service.js +114 -0
  111. package/dist/server/services/state-service.js.map +1 -0
  112. package/package.json +1 -1
  113. package/dist/dashboard/assets/index-DvGmJxrV.js +0 -1155
@@ -0,0 +1,59 @@
1
+ export function persistCostEntry(db, entry) {
2
+ const now = new Date().toISOString();
3
+ const result = db.prepare(`INSERT INTO cost_entries (squad_code, activity_id, agent_id, agent_name, step_index, model, input_chars, output_chars, estimated_tokens_in, estimated_tokens_out, estimated_cost_usd, created_at)
4
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(entry.squadCode, entry.activityId ?? null, entry.agentId, entry.agentName ?? null, entry.stepIndex ?? null, entry.model, entry.inputChars, entry.outputChars, entry.estimatedTokensIn, entry.estimatedTokensOut, entry.estimatedCostUsd, now);
5
+ return Number(result.lastInsertRowid);
6
+ }
7
+ export function getSquadCosts(db, squadCode, opts) {
8
+ let sql = 'SELECT * FROM cost_entries WHERE squad_code = ?';
9
+ const params = [squadCode];
10
+ if (opts?.agentId) {
11
+ sql += ' AND agent_id = ?';
12
+ params.push(opts.agentId);
13
+ }
14
+ if (opts?.since) {
15
+ sql += ' AND created_at >= ?';
16
+ params.push(opts.since);
17
+ }
18
+ sql += ' ORDER BY created_at DESC';
19
+ return db.prepare(sql).all(...params);
20
+ }
21
+ export function getSquadCostSummary(db, squadCode, since) {
22
+ const costs = getSquadCosts(db, squadCode, { since });
23
+ const byAgent = {};
24
+ const byModel = {};
25
+ let totalCostUsd = 0;
26
+ for (const row of costs) {
27
+ totalCostUsd += row.estimated_cost_usd;
28
+ byAgent[row.agent_id] = (byAgent[row.agent_id] ?? 0) + row.estimated_cost_usd;
29
+ byModel[row.model] = (byModel[row.model] ?? 0) + row.estimated_cost_usd;
30
+ }
31
+ return { totalCostUsd, entryCount: costs.length, byAgent, byModel };
32
+ }
33
+ export function checkBudget(db, squadCode, budget, agentId) {
34
+ const now = new Date();
35
+ const monthStart = new Date(now.getFullYear(), now.getMonth(), 1).toISOString();
36
+ if (agentId && budget.agentBudgets?.[agentId] !== undefined) {
37
+ const agentCosts = getSquadCosts(db, squadCode, { agentId, since: monthStart });
38
+ const used = agentCosts.reduce((sum, c) => sum + c.estimated_cost_usd, 0);
39
+ const limit = budget.agentBudgets[agentId];
40
+ if (used >= limit)
41
+ return { status: 'blocked', usedUsd: used, limitUsd: limit, message: `Agent "${agentId}" exceeded monthly budget` };
42
+ const threshold = budget.alertThreshold ?? 0.8;
43
+ if (used >= limit * threshold)
44
+ return { status: 'warn', usedUsd: used, limitUsd: limit, message: `Agent "${agentId}" at ${Math.round((used / limit) * 100)}% of budget` };
45
+ }
46
+ if (budget.monthlyBudget !== undefined) {
47
+ const allCosts = getSquadCosts(db, squadCode, { since: monthStart });
48
+ const used = allCosts.reduce((sum, c) => sum + c.estimated_cost_usd, 0);
49
+ const limit = budget.monthlyBudget;
50
+ if (used >= limit)
51
+ return { status: 'blocked', usedUsd: used, limitUsd: limit, message: 'Squad exceeded monthly budget' };
52
+ const threshold = budget.alertThreshold ?? 0.8;
53
+ if (used >= limit * threshold)
54
+ return { status: 'warn', usedUsd: used, limitUsd: limit, message: `Squad at ${Math.round((used / limit) * 100)}% of budget` };
55
+ return { status: 'ok', usedUsd: used, limitUsd: limit };
56
+ }
57
+ return { status: 'ok', usedUsd: 0, limitUsd: null };
58
+ }
59
+ //# sourceMappingURL=cost-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-service.js","sourceRoot":"","sources":["../../src/services/cost-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ProviderDefinition } from '../api/integration-routes.js';
2
+ export declare class IntegrationRegistry {
3
+ private definitions;
4
+ register(def: ProviderDefinition): void;
5
+ list(): ProviderDefinition[];
6
+ get(key: string): ProviderDefinition | undefined;
7
+ }
8
+ export declare const integrationRegistry: IntegrationRegistry;
9
+ //# sourceMappingURL=integration-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-registry.d.ts","sourceRoot":"","sources":["../../src/services/integration-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAyC;IAE5D,QAAQ,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI;IAIvC,IAAI,IAAI,kBAAkB,EAAE;IAI5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;CAGjD;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
@@ -0,0 +1,14 @@
1
+ export class IntegrationRegistry {
2
+ definitions = new Map();
3
+ register(def) {
4
+ this.definitions.set(def.key, def);
5
+ }
6
+ list() {
7
+ return [...this.definitions.values()];
8
+ }
9
+ get(key) {
10
+ return this.definitions.get(key);
11
+ }
12
+ }
13
+ export const integrationRegistry = new IntegrationRegistry();
14
+ //# sourceMappingURL=integration-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration-registry.js","sourceRoot":"","sources":["../../src/services/integration-registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IACtB,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAC;IAE5D,QAAQ,CAAC,GAAuB;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type Database from 'better-sqlite3';
2
+ export type LogLevel = 'info' | 'warn' | 'error';
3
+ export interface LogEntry {
4
+ level: LogLevel;
5
+ squadCode?: string;
6
+ source: string;
7
+ message: string;
8
+ detail?: string;
9
+ }
10
+ export interface LogRow {
11
+ id: number;
12
+ level: string;
13
+ squad_code: string | null;
14
+ source: string;
15
+ message: string;
16
+ detail: string | null;
17
+ created_at: string;
18
+ }
19
+ export declare function persistLog(db: Database.Database, entry: LogEntry): number;
20
+ export declare function getLogs(db: Database.Database, opts?: {
21
+ level?: LogLevel;
22
+ squadCode?: string;
23
+ since?: string;
24
+ limit?: number;
25
+ search?: string;
26
+ }): LogRow[];
27
+ export declare function pruneOldLogs(db: Database.Database, keepDays?: number): number;
28
+ //# sourceMappingURL=log-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-service.d.ts","sourceRoot":"","sources":["../../src/services/log-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAMzE;AAED,wBAAgB,OAAO,CACrB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/F,MAAM,EAAE,CAyBV;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,CAIhF"}
@@ -0,0 +1,34 @@
1
+ export function persistLog(db, entry) {
2
+ const now = new Date().toISOString();
3
+ const result = db.prepare('INSERT INTO event_log (level, squad_code, source, message, detail, created_at) VALUES (?, ?, ?, ?, ?, ?)').run(entry.level, entry.squadCode ?? null, entry.source, entry.message, entry.detail ?? null, now);
4
+ return Number(result.lastInsertRowid);
5
+ }
6
+ export function getLogs(db, opts) {
7
+ let sql = 'SELECT * FROM event_log WHERE 1=1';
8
+ const params = [];
9
+ if (opts?.level) {
10
+ sql += ' AND level = ?';
11
+ params.push(opts.level);
12
+ }
13
+ if (opts?.squadCode) {
14
+ sql += ' AND squad_code = ?';
15
+ params.push(opts.squadCode);
16
+ }
17
+ if (opts?.since) {
18
+ sql += ' AND created_at >= ?';
19
+ params.push(opts.since);
20
+ }
21
+ if (opts?.search) {
22
+ sql += ' AND (message LIKE ? OR detail LIKE ?)';
23
+ params.push(`%${opts.search}%`, `%${opts.search}%`);
24
+ }
25
+ sql += ' ORDER BY created_at DESC LIMIT ?';
26
+ params.push(opts?.limit ?? 200);
27
+ return db.prepare(sql).all(...params);
28
+ }
29
+ export function pruneOldLogs(db, keepDays = 7) {
30
+ const cutoff = new Date(Date.now() - keepDays * 24 * 60 * 60 * 1000).toISOString();
31
+ const result = db.prepare('DELETE FROM event_log WHERE created_at < ?').run(cutoff);
32
+ return result.changes;
33
+ }
34
+ //# sourceMappingURL=log-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-service.js","sourceRoot":"","sources":["../../src/services/log-service.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,KAAe;IAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB,0GAA0G,CAC3G,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC;IACpG,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,EAAqB,EACrB,IAAgG;IAEhG,IAAI,GAAG,GAAG,mCAAmC,CAAC;IAC9C,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,GAAG,IAAI,gBAAgB,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACpB,GAAG,IAAI,qBAAqB,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,GAAG,IAAI,sBAAsB,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,GAAG,IAAI,wCAAwC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,GAAG,IAAI,mCAAmC,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;IAEhC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAa,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAqB,EAAE,WAAmB,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { AgentStatus, SquadStatus, SquadState, AgentDesk } from '../watcher/state-parser.js';
3
+ interface InitAgent {
4
+ id: string;
5
+ name: string;
6
+ icon: string;
7
+ desk: AgentDesk;
8
+ }
9
+ interface InitSquadOpts {
10
+ squadCode: string;
11
+ totalSteps: number;
12
+ agents: InitAgent[];
13
+ }
14
+ export declare function initSquadState(db: Database.Database, opts: InitSquadOpts): void;
15
+ export declare function getSquadState(db: Database.Database, squadCode: string): SquadState | null;
16
+ export declare function updateAgentStatusDb(db: Database.Database, squadCode: string, agentId: string, status: AgentStatus): void;
17
+ export declare function setHandoffDb(db: Database.Database, squadCode: string, fromId: string, toId: string, message: string): void;
18
+ export declare function setSquadStatusDb(db: Database.Database, squadCode: string, status: SquadStatus): void;
19
+ export declare function updateStepDb(db: Database.Database, squadCode: string, current: number, label: string): void;
20
+ export declare function syncStateToFile(db: Database.Database, squadCode: string, squadDir: string): void;
21
+ export {};
22
+ //# sourceMappingURL=state-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-service.d.ts","sourceRoot":"","sources":["../../src/services/state-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAW,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE3G,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAUD,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAe/E;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAqCzF;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAexH;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAY1H;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAapG;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAM3G;AAED,wBAAgB,eAAe,CAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,IAAI,CAQN"}
@@ -0,0 +1,114 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ const VALID_TRANSITIONS = {
4
+ idle: ['working', 'idle'],
5
+ working: ['delivering', 'checkpoint', 'done', 'idle'],
6
+ delivering: ['done', 'idle'],
7
+ done: ['idle'],
8
+ checkpoint: ['idle', 'working'],
9
+ };
10
+ export function initSquadState(db, opts) {
11
+ const now = new Date().toISOString();
12
+ const tx = db.transaction(() => {
13
+ db.prepare('INSERT OR REPLACE INTO squad_states (squad_code, status, current_step, total_steps, step_label, started_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)').run(opts.squadCode, 'idle', 0, opts.totalSteps, '', null, now);
14
+ const insertAgent = db.prepare('INSERT OR REPLACE INTO agent_states (id, squad_code, name, icon, status, step_index, step_label, deliver_to, desk_col, desk_row, message, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
15
+ for (const a of opts.agents) {
16
+ insertAgent.run(a.id, opts.squadCode, a.name, a.icon, 'idle', 0, '', null, a.desk.col, a.desk.row, null, now);
17
+ }
18
+ });
19
+ tx();
20
+ }
21
+ export function getSquadState(db, squadCode) {
22
+ const squad = db.prepare('SELECT * FROM squad_states WHERE squad_code = ?').get(squadCode);
23
+ if (!squad)
24
+ return null;
25
+ const agents = db.prepare('SELECT * FROM agent_states WHERE squad_code = ? ORDER BY id').all(squadCode);
26
+ const handoffRow = db.prepare('SELECT * FROM handoffs WHERE squad_code = ? ORDER BY completed_at DESC LIMIT 1').get(squadCode);
27
+ const handoff = handoffRow
28
+ ? { from: handoffRow.from_agent, to: handoffRow.to_agent, message: handoffRow.message, completedAt: handoffRow.completed_at }
29
+ : null;
30
+ return {
31
+ squad: squadCode,
32
+ status: squad.status,
33
+ step: {
34
+ current: squad.current_step,
35
+ total: squad.total_steps,
36
+ label: squad.step_label ?? '',
37
+ },
38
+ agents: agents.map((a) => ({
39
+ id: a.id,
40
+ name: a.name,
41
+ icon: a.icon,
42
+ status: a.status,
43
+ deliverTo: a.deliver_to ?? null,
44
+ desk: { col: a.desk_col, row: a.desk_row },
45
+ message: a.message,
46
+ stepIndex: a.step_index,
47
+ stepLabel: a.step_label,
48
+ })),
49
+ handoff,
50
+ startedAt: squad.started_at ?? null,
51
+ updatedAt: squad.updated_at,
52
+ };
53
+ }
54
+ export function updateAgentStatusDb(db, squadCode, agentId, status) {
55
+ const tx = db.transaction(() => {
56
+ const agent = db.prepare('SELECT status FROM agent_states WHERE squad_code = ? AND id = ?').get(squadCode, agentId);
57
+ if (!agent)
58
+ throw new Error(`Agent "${agentId}" not found in squad "${squadCode}"`);
59
+ const current = agent.status;
60
+ const allowed = VALID_TRANSITIONS[current];
61
+ if (!allowed.includes(status)) {
62
+ throw new Error(`Invalid transition: ${current} → ${status}`);
63
+ }
64
+ db.prepare('UPDATE agent_states SET status = ?, updated_at = ? WHERE squad_code = ? AND id = ?')
65
+ .run(status, new Date().toISOString(), squadCode, agentId);
66
+ });
67
+ tx();
68
+ }
69
+ export function setHandoffDb(db, squadCode, fromId, toId, message) {
70
+ const tx = db.transaction(() => {
71
+ const fromAgent = db.prepare('SELECT id FROM agent_states WHERE squad_code = ? AND id = ?').get(squadCode, fromId);
72
+ if (!fromAgent)
73
+ throw new Error(`Agent "${fromId}" not found in squad "${squadCode}"`);
74
+ const toAgent = db.prepare('SELECT id FROM agent_states WHERE squad_code = ? AND id = ?').get(squadCode, toId);
75
+ if (!toAgent)
76
+ throw new Error(`Agent "${toId}" not found in squad "${squadCode}"`);
77
+ db.prepare('INSERT INTO handoffs (squad_code, from_agent, to_agent, message, completed_at) VALUES (?, ?, ?, ?, ?)')
78
+ .run(squadCode, fromId, toId, message, new Date().toISOString());
79
+ });
80
+ tx();
81
+ }
82
+ export function setSquadStatusDb(db, squadCode, status) {
83
+ const tx = db.transaction(() => {
84
+ const now = new Date().toISOString();
85
+ const startedAt = status === 'running' ? now : undefined;
86
+ if (startedAt) {
87
+ db.prepare('UPDATE squad_states SET status = ?, started_at = ?, updated_at = ? WHERE squad_code = ?')
88
+ .run(status, startedAt, now, squadCode);
89
+ }
90
+ else {
91
+ db.prepare('UPDATE squad_states SET status = ?, updated_at = ? WHERE squad_code = ?')
92
+ .run(status, now, squadCode);
93
+ }
94
+ });
95
+ tx();
96
+ }
97
+ export function updateStepDb(db, squadCode, current, label) {
98
+ const tx = db.transaction(() => {
99
+ db.prepare('UPDATE squad_states SET current_step = ?, step_label = ?, updated_at = ? WHERE squad_code = ?')
100
+ .run(current, label, new Date().toISOString(), squadCode);
101
+ });
102
+ tx();
103
+ }
104
+ export function syncStateToFile(db, squadCode, squadDir) {
105
+ const state = getSquadState(db, squadCode);
106
+ if (!state)
107
+ return;
108
+ const statePath = path.join(squadDir, 'state.json');
109
+ const tmpPath = path.join(squadDir, 'state.json.tmp');
110
+ const data = JSON.stringify(state, null, 2);
111
+ fs.writeFileSync(tmpPath, data, 'utf-8');
112
+ fs.renameSync(tmpPath, statePath);
113
+ }
114
+ //# sourceMappingURL=state-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-service.js","sourceRoot":"","sources":["../../src/services/state-service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "expxagents",
3
- "version": "0.22.0",
3
+ "version": "0.23.1",
4
4
  "description": "Multi-agent orchestration platform for AI squads",
5
5
  "author": "ExpxAgents",
6
6
  "license": "MIT",