@honeybee-ai/incubator 1.1.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 (245) hide show
  1. package/README.md +586 -0
  2. package/dashboard/dist/assets/index-DFb8p7xI.js +9 -0
  3. package/dashboard/dist/assets/index-RKiEoHEo.css +1 -0
  4. package/dashboard/dist/index.html +13 -0
  5. package/dist/agent/acp/claim-manager.d.ts +24 -0
  6. package/dist/agent/acp/claim-manager.js +64 -0
  7. package/dist/agent/acp/claim-manager.js.map +1 -0
  8. package/dist/agent/acp/direct-runtime.d.ts +90 -0
  9. package/dist/agent/acp/direct-runtime.js +364 -0
  10. package/dist/agent/acp/direct-runtime.js.map +1 -0
  11. package/dist/agent/acp/event-client.d.ts +20 -0
  12. package/dist/agent/acp/event-client.js +60 -0
  13. package/dist/agent/acp/event-client.js.map +1 -0
  14. package/dist/agent/acp/event-matcher.d.ts +13 -0
  15. package/dist/agent/acp/event-matcher.js +31 -0
  16. package/dist/agent/acp/event-matcher.js.map +1 -0
  17. package/dist/agent/acp/progress.d.ts +23 -0
  18. package/dist/agent/acp/progress.js +54 -0
  19. package/dist/agent/acp/progress.js.map +1 -0
  20. package/dist/agent/acp/runtime.d.ts +156 -0
  21. package/dist/agent/acp/runtime.js +337 -0
  22. package/dist/agent/acp/runtime.js.map +1 -0
  23. package/dist/agent/acp/ws-event-client.d.ts +64 -0
  24. package/dist/agent/acp/ws-event-client.js +263 -0
  25. package/dist/agent/acp/ws-event-client.js.map +1 -0
  26. package/dist/agent/agent.d.ts +60 -0
  27. package/dist/agent/agent.js +121 -0
  28. package/dist/agent/agent.js.map +1 -0
  29. package/dist/agent/cli.d.ts +2 -0
  30. package/dist/agent/cli.js +311 -0
  31. package/dist/agent/cli.js.map +1 -0
  32. package/dist/agent/mcp-client.d.ts +37 -0
  33. package/dist/agent/mcp-client.js +92 -0
  34. package/dist/agent/mcp-client.js.map +1 -0
  35. package/dist/agent/mock-runner.d.ts +14 -0
  36. package/dist/agent/mock-runner.js +159 -0
  37. package/dist/agent/mock-runner.js.map +1 -0
  38. package/dist/agent/native-client.d.ts +18 -0
  39. package/dist/agent/native-client.js +42 -0
  40. package/dist/agent/native-client.js.map +1 -0
  41. package/dist/agent/prompt.d.ts +45 -0
  42. package/dist/agent/prompt.js +115 -0
  43. package/dist/agent/prompt.js.map +1 -0
  44. package/dist/agent/providers.d.ts +25 -0
  45. package/dist/agent/providers.js +696 -0
  46. package/dist/agent/providers.js.map +1 -0
  47. package/dist/agent/runner.d.ts +15 -0
  48. package/dist/agent/runner.js +625 -0
  49. package/dist/agent/runner.js.map +1 -0
  50. package/dist/agent/tool-client.d.ts +12 -0
  51. package/dist/agent/tool-client.js +2 -0
  52. package/dist/agent/tool-client.js.map +1 -0
  53. package/dist/agent/types.d.ts +116 -0
  54. package/dist/agent/types.js +2 -0
  55. package/dist/agent/types.js.map +1 -0
  56. package/dist/agent-pool.d.ts +44 -0
  57. package/dist/agent-pool.js +228 -0
  58. package/dist/agent-pool.js.map +1 -0
  59. package/dist/bin.d.ts +2 -0
  60. package/dist/bin.js +7 -0
  61. package/dist/bin.js.map +1 -0
  62. package/dist/bus.d.ts +24 -0
  63. package/dist/bus.js +79 -0
  64. package/dist/bus.js.map +1 -0
  65. package/dist/dances.d.ts +73 -0
  66. package/dist/dances.js +122 -0
  67. package/dist/dances.js.map +1 -0
  68. package/dist/guard.d.ts +52 -0
  69. package/dist/guard.js +210 -0
  70. package/dist/guard.js.map +1 -0
  71. package/dist/heartbeat.d.ts +41 -0
  72. package/dist/heartbeat.js +104 -0
  73. package/dist/heartbeat.js.map +1 -0
  74. package/dist/honeycomb.d.ts +63 -0
  75. package/dist/honeycomb.js +222 -0
  76. package/dist/honeycomb.js.map +1 -0
  77. package/dist/index.d.ts +2 -0
  78. package/dist/index.js +601 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/integrations/config.d.ts +15 -0
  81. package/dist/integrations/config.js +62 -0
  82. package/dist/integrations/config.js.map +1 -0
  83. package/dist/integrations/index.d.ts +4 -0
  84. package/dist/integrations/index.js +4 -0
  85. package/dist/integrations/index.js.map +1 -0
  86. package/dist/integrations/loader.d.ts +8 -0
  87. package/dist/integrations/loader.js +27 -0
  88. package/dist/integrations/loader.js.map +1 -0
  89. package/dist/integrations/manager.d.ts +29 -0
  90. package/dist/integrations/manager.js +108 -0
  91. package/dist/integrations/manager.js.map +1 -0
  92. package/dist/log.d.ts +25 -0
  93. package/dist/log.js +67 -0
  94. package/dist/log.js.map +1 -0
  95. package/dist/namespaces.d.ts +28 -0
  96. package/dist/namespaces.js +100 -0
  97. package/dist/namespaces.js.map +1 -0
  98. package/dist/orchestrator.d.ts +119 -0
  99. package/dist/orchestrator.js +463 -0
  100. package/dist/orchestrator.js.map +1 -0
  101. package/dist/persistence.d.ts +7 -0
  102. package/dist/persistence.js +62 -0
  103. package/dist/persistence.js.map +1 -0
  104. package/dist/plugins/index.d.ts +2 -0
  105. package/dist/plugins/index.js +3 -0
  106. package/dist/plugins/index.js.map +1 -0
  107. package/dist/plugins/loader.d.ts +12 -0
  108. package/dist/plugins/loader.js +122 -0
  109. package/dist/plugins/loader.js.map +1 -0
  110. package/dist/plugins/manager.d.ts +76 -0
  111. package/dist/plugins/manager.js +238 -0
  112. package/dist/plugins/manager.js.map +1 -0
  113. package/dist/propolis/guard.d.ts +23 -0
  114. package/dist/propolis/guard.js +49 -0
  115. package/dist/propolis/guard.js.map +1 -0
  116. package/dist/propolis/tools/types.d.ts +9 -0
  117. package/dist/propolis/tools/types.js +9 -0
  118. package/dist/propolis/tools/types.js.map +1 -0
  119. package/dist/rest.d.ts +4 -0
  120. package/dist/rest.js +962 -0
  121. package/dist/rest.js.map +1 -0
  122. package/dist/run-watcher.d.ts +20 -0
  123. package/dist/run-watcher.js +74 -0
  124. package/dist/run-watcher.js.map +1 -0
  125. package/dist/server.d.ts +17 -0
  126. package/dist/server.js +412 -0
  127. package/dist/server.js.map +1 -0
  128. package/dist/stores/backend.d.ts +15 -0
  129. package/dist/stores/backend.js +28 -0
  130. package/dist/stores/backend.js.map +1 -0
  131. package/dist/stores/claims.d.ts +14 -0
  132. package/dist/stores/claims.js +77 -0
  133. package/dist/stores/claims.js.map +1 -0
  134. package/dist/stores/conflicts.d.ts +10 -0
  135. package/dist/stores/conflicts.js +39 -0
  136. package/dist/stores/conflicts.js.map +1 -0
  137. package/dist/stores/control.d.ts +37 -0
  138. package/dist/stores/control.js +105 -0
  139. package/dist/stores/control.js.map +1 -0
  140. package/dist/stores/discoveries.d.ts +11 -0
  141. package/dist/stores/discoveries.js +45 -0
  142. package/dist/stores/discoveries.js.map +1 -0
  143. package/dist/stores/events.d.ts +14 -0
  144. package/dist/stores/events.js +42 -0
  145. package/dist/stores/events.js.map +1 -0
  146. package/dist/stores/help.d.ts +11 -0
  147. package/dist/stores/help.js +46 -0
  148. package/dist/stores/help.js.map +1 -0
  149. package/dist/stores/interfaces.d.ts +125 -0
  150. package/dist/stores/interfaces.js +2 -0
  151. package/dist/stores/interfaces.js.map +1 -0
  152. package/dist/stores/messages.d.ts +8 -0
  153. package/dist/stores/messages.js +29 -0
  154. package/dist/stores/messages.js.map +1 -0
  155. package/dist/stores/progress.d.ts +8 -0
  156. package/dist/stores/progress.js +21 -0
  157. package/dist/stores/progress.js.map +1 -0
  158. package/dist/stores/proposals.d.ts +11 -0
  159. package/dist/stores/proposals.js +46 -0
  160. package/dist/stores/proposals.js.map +1 -0
  161. package/dist/stores/redis/claims.d.ts +16 -0
  162. package/dist/stores/redis/claims.js +126 -0
  163. package/dist/stores/redis/claims.js.map +1 -0
  164. package/dist/stores/redis/db.d.ts +39 -0
  165. package/dist/stores/redis/db.js +34 -0
  166. package/dist/stores/redis/db.js.map +1 -0
  167. package/dist/stores/redis/discoveries.d.ts +13 -0
  168. package/dist/stores/redis/discoveries.js +54 -0
  169. package/dist/stores/redis/discoveries.js.map +1 -0
  170. package/dist/stores/redis/events.d.ts +17 -0
  171. package/dist/stores/redis/events.js +57 -0
  172. package/dist/stores/redis/events.js.map +1 -0
  173. package/dist/stores/redis/index.d.ts +3 -0
  174. package/dist/stores/redis/index.js +31 -0
  175. package/dist/stores/redis/index.js.map +1 -0
  176. package/dist/stores/redis/state.d.ts +14 -0
  177. package/dist/stores/redis/state.js +83 -0
  178. package/dist/stores/redis/state.js.map +1 -0
  179. package/dist/stores/reinforcements.d.ts +11 -0
  180. package/dist/stores/reinforcements.js +42 -0
  181. package/dist/stores/reinforcements.js.map +1 -0
  182. package/dist/stores/roles.d.ts +9 -0
  183. package/dist/stores/roles.js +22 -0
  184. package/dist/stores/roles.js.map +1 -0
  185. package/dist/stores/runs.d.ts +15 -0
  186. package/dist/stores/runs.js +50 -0
  187. package/dist/stores/runs.js.map +1 -0
  188. package/dist/stores/sqlite/claims.d.ts +17 -0
  189. package/dist/stores/sqlite/claims.js +121 -0
  190. package/dist/stores/sqlite/claims.js.map +1 -0
  191. package/dist/stores/sqlite/db.d.ts +16 -0
  192. package/dist/stores/sqlite/db.js +77 -0
  193. package/dist/stores/sqlite/db.js.map +1 -0
  194. package/dist/stores/sqlite/discoveries.d.ts +14 -0
  195. package/dist/stores/sqlite/discoveries.js +66 -0
  196. package/dist/stores/sqlite/discoveries.js.map +1 -0
  197. package/dist/stores/sqlite/events.d.ts +16 -0
  198. package/dist/stores/sqlite/events.js +75 -0
  199. package/dist/stores/sqlite/events.js.map +1 -0
  200. package/dist/stores/sqlite/index.d.ts +2 -0
  201. package/dist/stores/sqlite/index.js +33 -0
  202. package/dist/stores/sqlite/index.js.map +1 -0
  203. package/dist/stores/sqlite/state.d.ts +15 -0
  204. package/dist/stores/sqlite/state.js +99 -0
  205. package/dist/stores/sqlite/state.js.map +1 -0
  206. package/dist/stores/state.d.ts +11 -0
  207. package/dist/stores/state.js +67 -0
  208. package/dist/stores/state.js.map +1 -0
  209. package/dist/transports/broker.d.ts +20 -0
  210. package/dist/transports/broker.js +102 -0
  211. package/dist/transports/broker.js.map +1 -0
  212. package/dist/transports/index.d.ts +3 -0
  213. package/dist/transports/index.js +3 -0
  214. package/dist/transports/index.js.map +1 -0
  215. package/dist/transports/ipc.d.ts +26 -0
  216. package/dist/transports/ipc.js +93 -0
  217. package/dist/transports/ipc.js.map +1 -0
  218. package/dist/transports/types.d.ts +39 -0
  219. package/dist/transports/types.js +8 -0
  220. package/dist/transports/types.js.map +1 -0
  221. package/dist/types.d.ts +45 -0
  222. package/dist/types.js +2 -0
  223. package/dist/types.js.map +1 -0
  224. package/dist/utils.d.ts +3 -0
  225. package/dist/utils.js +36 -0
  226. package/dist/utils.js.map +1 -0
  227. package/dist/waggle/client.d.ts +16 -0
  228. package/dist/waggle/client.js +28 -0
  229. package/dist/waggle/client.js.map +1 -0
  230. package/dist/waggle/compound.d.ts +22 -0
  231. package/dist/waggle/compound.js +194 -0
  232. package/dist/waggle/compound.js.map +1 -0
  233. package/dist/waggle/index.d.ts +25 -0
  234. package/dist/waggle/index.js +77 -0
  235. package/dist/waggle/index.js.map +1 -0
  236. package/dist/waggle/types.d.ts +54 -0
  237. package/dist/waggle/types.js +2 -0
  238. package/dist/waggle/types.js.map +1 -0
  239. package/dist/webhooks.d.ts +26 -0
  240. package/dist/webhooks.js +79 -0
  241. package/dist/webhooks.js.map +1 -0
  242. package/dist/ws.d.ts +33 -0
  243. package/dist/ws.js +195 -0
  244. package/dist/ws.js.map +1 -0
  245. package/package.json +122 -0
@@ -0,0 +1,66 @@
1
+ import { generateId } from '../../utils.js';
2
+ export class SqliteDiscoveryStore {
3
+ db;
4
+ ns;
5
+ eventStore;
6
+ constructor(db, namespace, eventStore) {
7
+ this.db = db;
8
+ this.ns = namespace;
9
+ this.eventStore = eventStore;
10
+ }
11
+ async publish(topic, content, agentId, category) {
12
+ const id = generateId();
13
+ const now = new Date().toISOString();
14
+ this.db.prepare('INSERT INTO discoveries (namespace, id, topic, content, category, published_by, published_at) VALUES (?, ?, ?, ?, ?, ?, ?)').run(this.ns, id, topic, content, category ?? null, agentId, now);
15
+ await this.eventStore.publish('discovery.published', { id, topic, category }, agentId);
16
+ return {
17
+ id,
18
+ topic,
19
+ content,
20
+ category,
21
+ publishedBy: agentId,
22
+ publishedAt: now,
23
+ };
24
+ }
25
+ async search(query, category) {
26
+ let sql = 'SELECT id, topic, content, category, published_by, published_at FROM discoveries WHERE namespace = ?';
27
+ const params = [this.ns];
28
+ if (category) {
29
+ sql += ' AND category = ?';
30
+ params.push(category);
31
+ }
32
+ const rows = this.db.prepare(sql).all(...params);
33
+ let results = rows.map(r => this.rowToDiscovery(r));
34
+ if (query) {
35
+ const lower = query.toLowerCase();
36
+ results = results.filter(d => d.topic.toLowerCase().includes(lower) ||
37
+ d.content.toLowerCase().includes(lower));
38
+ }
39
+ return results;
40
+ }
41
+ async getAll() {
42
+ const rows = this.db.prepare('SELECT id, topic, content, category, published_by, published_at FROM discoveries WHERE namespace = ?').all(this.ns);
43
+ return rows.map(r => this.rowToDiscovery(r));
44
+ }
45
+ async load(discoveries) {
46
+ const txn = this.db.transaction(() => {
47
+ this.db.prepare('DELETE FROM discoveries WHERE namespace = ?').run(this.ns);
48
+ const insert = this.db.prepare('INSERT INTO discoveries (namespace, id, topic, content, category, published_by, published_at) VALUES (?, ?, ?, ?, ?, ?, ?)');
49
+ for (const d of discoveries) {
50
+ insert.run(this.ns, d.id, d.topic, d.content, d.category ?? null, d.publishedBy, d.publishedAt);
51
+ }
52
+ });
53
+ txn();
54
+ }
55
+ rowToDiscovery(row) {
56
+ return {
57
+ id: row.id,
58
+ topic: row.topic,
59
+ content: row.content,
60
+ category: row.category ?? undefined,
61
+ publishedBy: row.published_by,
62
+ publishedAt: row.published_at,
63
+ };
64
+ }
65
+ }
66
+ //# sourceMappingURL=discoveries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discoveries.js","sourceRoot":"","sources":["../../../src/stores/sqlite/discoveries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { IncubatorEvent } from '../../types.js';
2
+ import type { IEventStore } from '../interfaces.js';
3
+ import type { Database } from './db.js';
4
+ export declare class SqliteEventStore implements IEventStore {
5
+ private db;
6
+ private ns;
7
+ constructor(db: Database, namespace: string);
8
+ publish(type: string, data: unknown, agentId: string): Promise<IncubatorEvent>;
9
+ getEvents(since?: number, type?: string): Promise<{
10
+ events: IncubatorEvent[];
11
+ cursor: number;
12
+ }>;
13
+ getCursor(): Promise<number>;
14
+ getAll(): Promise<IncubatorEvent[]>;
15
+ load(events: IncubatorEvent[], cursor: number): Promise<void>;
16
+ }
@@ -0,0 +1,75 @@
1
+ export class SqliteEventStore {
2
+ db;
3
+ ns;
4
+ constructor(db, namespace) {
5
+ this.db = db;
6
+ this.ns = namespace;
7
+ // Ensure cursor row exists
8
+ this.db.prepare('INSERT OR IGNORE INTO event_cursors (namespace, cursor) VALUES (?, 0)').run(this.ns);
9
+ }
10
+ async publish(type, data, agentId) {
11
+ const now = new Date().toISOString();
12
+ let event;
13
+ const txn = this.db.transaction(() => {
14
+ // Increment cursor
15
+ this.db.prepare('UPDATE event_cursors SET cursor = cursor + 1 WHERE namespace = ?').run(this.ns);
16
+ const cursorRow = this.db.prepare('SELECT cursor FROM event_cursors WHERE namespace = ?').get(this.ns);
17
+ const id = cursorRow.cursor;
18
+ // Insert event
19
+ this.db.prepare('INSERT INTO events (namespace, id, type, data, published_by, published_at) VALUES (?, ?, ?, ?, ?, ?)').run(this.ns, id, type, JSON.stringify(data), agentId, now);
20
+ event = { id, type, data, publishedBy: agentId, publishedAt: now };
21
+ });
22
+ txn();
23
+ return event;
24
+ }
25
+ async getEvents(since, type) {
26
+ let sql = 'SELECT id, type, data, published_by, published_at FROM events WHERE namespace = ?';
27
+ const params = [this.ns];
28
+ if (since !== undefined) {
29
+ sql += ' AND id > ?';
30
+ params.push(since);
31
+ }
32
+ if (type) {
33
+ sql += ' AND type = ?';
34
+ params.push(type);
35
+ }
36
+ sql += ' ORDER BY id';
37
+ const rows = this.db.prepare(sql).all(...params);
38
+ const events = rows.map(r => ({
39
+ id: r.id,
40
+ type: r.type,
41
+ data: JSON.parse(r.data),
42
+ publishedBy: r.published_by,
43
+ publishedAt: r.published_at,
44
+ }));
45
+ const cursorRow = this.db.prepare('SELECT cursor FROM event_cursors WHERE namespace = ?').get(this.ns);
46
+ const cursor = cursorRow?.cursor ?? 0;
47
+ return { events, cursor };
48
+ }
49
+ async getCursor() {
50
+ const row = this.db.prepare('SELECT cursor FROM event_cursors WHERE namespace = ?').get(this.ns);
51
+ return row?.cursor ?? 0;
52
+ }
53
+ async getAll() {
54
+ const rows = this.db.prepare('SELECT id, type, data, published_by, published_at FROM events WHERE namespace = ? ORDER BY id').all(this.ns);
55
+ return rows.map(r => ({
56
+ id: r.id,
57
+ type: r.type,
58
+ data: JSON.parse(r.data),
59
+ publishedBy: r.published_by,
60
+ publishedAt: r.published_at,
61
+ }));
62
+ }
63
+ async load(events, cursor) {
64
+ const txn = this.db.transaction(() => {
65
+ this.db.prepare('DELETE FROM events WHERE namespace = ?').run(this.ns);
66
+ const insert = this.db.prepare('INSERT INTO events (namespace, id, type, data, published_by, published_at) VALUES (?, ?, ?, ?, ?, ?)');
67
+ for (const event of events) {
68
+ insert.run(this.ns, event.id, event.type, JSON.stringify(event.data), event.publishedBy, event.publishedAt);
69
+ }
70
+ this.db.prepare('INSERT INTO event_cursors (namespace, cursor) VALUES (?, ?) ON CONFLICT(namespace) DO UPDATE SET cursor = excluded.cursor').run(this.ns, cursor);
71
+ });
72
+ txn();
73
+ }
74
+ }
75
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/stores/sqlite/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Stores } from '../interfaces.js';
2
+ export declare function createSqliteStores(dbPath: string, namespace: string): Stores;
@@ -0,0 +1,33 @@
1
+ import { getDatabase } from './db.js';
2
+ import { SqliteStateStore } from './state.js';
3
+ import { SqliteEventStore } from './events.js';
4
+ import { SqliteClaimStore } from './claims.js';
5
+ import { SqliteDiscoveryStore } from './discoveries.js';
6
+ import { MessageStore } from '../messages.js';
7
+ import { HelpStore } from '../help.js';
8
+ import { ProgressStore } from '../progress.js';
9
+ import { ConflictStore } from '../conflicts.js';
10
+ import { RoleStore } from '../roles.js';
11
+ import { ProposalStore } from '../proposals.js';
12
+ import { ReinforcementStore } from '../reinforcements.js';
13
+ import { ControlStore } from '../control.js';
14
+ import { RunStore } from '../runs.js';
15
+ export function createSqliteStores(dbPath, namespace) {
16
+ const db = getDatabase(dbPath);
17
+ const events = new SqliteEventStore(db, namespace);
18
+ const state = new SqliteStateStore(db, namespace);
19
+ const claims = new SqliteClaimStore(db, namespace, events);
20
+ const discoveries = new SqliteDiscoveryStore(db, namespace, events);
21
+ // New coordination stores use in-memory backend for now
22
+ const messages = new MessageStore();
23
+ const help = new HelpStore(events);
24
+ const progress = new ProgressStore();
25
+ const conflicts = new ConflictStore(events);
26
+ const roles = new RoleStore();
27
+ const proposals = new ProposalStore(events);
28
+ const reinforcements = new ReinforcementStore(events);
29
+ const control = new ControlStore(events);
30
+ const runs = new RunStore();
31
+ return { state, events, claims, discoveries, messages, help, progress, conflicts, roles, proposals, reinforcements, control, runs };
32
+ }
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/sqlite/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,SAAiB;IAClE,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACpE,wDAAwD;IACxD,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACtI,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { StateEntry } from '../../types.js';
2
+ import type { IStateStore } from '../interfaces.js';
3
+ import type { Database } from './db.js';
4
+ export declare class SqliteStateStore implements IStateStore {
5
+ private db;
6
+ private ns;
7
+ constructor(db: Database, namespace: string);
8
+ get(key: string): Promise<StateEntry | null>;
9
+ set(key: string, value: unknown, agentId: string, category?: string, ttlMs?: number): Promise<StateEntry>;
10
+ delete(key: string): Promise<boolean>;
11
+ query(pattern?: string, category?: string): Promise<StateEntry[]>;
12
+ getAll(): Promise<StateEntry[]>;
13
+ load(entries: StateEntry[]): Promise<void>;
14
+ private rowToEntry;
15
+ }
@@ -0,0 +1,99 @@
1
+ import { matchGlob, isExpired } from '../../utils.js';
2
+ export class SqliteStateStore {
3
+ db;
4
+ ns;
5
+ constructor(db, namespace) {
6
+ this.db = db;
7
+ this.ns = namespace;
8
+ }
9
+ async get(key) {
10
+ const row = this.db.prepare('SELECT key, value, category, set_by, set_at, updated_at, ttl_ms FROM state WHERE namespace = ? AND key = ?').get(this.ns, key);
11
+ if (!row)
12
+ return null;
13
+ const entry = this.rowToEntry(row);
14
+ if (isExpired(entry.setAt, entry.ttlMs)) {
15
+ this.db.prepare('DELETE FROM state WHERE namespace = ? AND key = ?').run(this.ns, key);
16
+ return null;
17
+ }
18
+ return entry;
19
+ }
20
+ async set(key, value, agentId, category, ttlMs) {
21
+ const now = new Date().toISOString();
22
+ const existing = await this.get(key);
23
+ const setAt = existing?.setAt ?? now;
24
+ this.db.prepare(`
25
+ INSERT INTO state (namespace, key, value, category, set_by, set_at, updated_at, ttl_ms)
26
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
27
+ ON CONFLICT(namespace, key) DO UPDATE SET
28
+ value = excluded.value,
29
+ category = excluded.category,
30
+ set_by = excluded.set_by,
31
+ updated_at = excluded.updated_at,
32
+ ttl_ms = excluded.ttl_ms
33
+ `).run(this.ns, key, JSON.stringify(value), category ?? null, agentId, setAt, now, ttlMs ?? null);
34
+ return {
35
+ key,
36
+ value,
37
+ category,
38
+ setBy: agentId,
39
+ setAt,
40
+ updatedAt: now,
41
+ ttlMs,
42
+ };
43
+ }
44
+ async delete(key) {
45
+ const result = this.db.prepare('DELETE FROM state WHERE namespace = ? AND key = ?').run(this.ns, key);
46
+ return result.changes > 0;
47
+ }
48
+ async query(pattern, category) {
49
+ let sql = 'SELECT key, value, category, set_by, set_at, updated_at, ttl_ms FROM state WHERE namespace = ?';
50
+ const params = [this.ns];
51
+ if (category) {
52
+ sql += ' AND category = ?';
53
+ params.push(category);
54
+ }
55
+ const rows = this.db.prepare(sql).all(...params);
56
+ const results = [];
57
+ for (const row of rows) {
58
+ const entry = this.rowToEntry(row);
59
+ if (isExpired(entry.setAt, entry.ttlMs)) {
60
+ this.db.prepare('DELETE FROM state WHERE namespace = ? AND key = ?').run(this.ns, entry.key);
61
+ continue;
62
+ }
63
+ if (pattern && !matchGlob(pattern, entry.key))
64
+ continue;
65
+ results.push(entry);
66
+ }
67
+ return results;
68
+ }
69
+ async getAll() {
70
+ const rows = this.db.prepare('SELECT key, value, category, set_by, set_at, updated_at, ttl_ms FROM state WHERE namespace = ?').all(this.ns);
71
+ return rows
72
+ .map(r => this.rowToEntry(r))
73
+ .filter(e => !isExpired(e.setAt, e.ttlMs));
74
+ }
75
+ async load(entries) {
76
+ const txn = this.db.transaction(() => {
77
+ this.db.prepare('DELETE FROM state WHERE namespace = ?').run(this.ns);
78
+ const insert = this.db.prepare('INSERT INTO state (namespace, key, value, category, set_by, set_at, updated_at, ttl_ms) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
79
+ for (const entry of entries) {
80
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
81
+ insert.run(this.ns, entry.key, JSON.stringify(entry.value), entry.category ?? null, entry.setBy, entry.setAt, entry.updatedAt, entry.ttlMs ?? null);
82
+ }
83
+ }
84
+ });
85
+ txn();
86
+ }
87
+ rowToEntry(row) {
88
+ return {
89
+ key: row.key,
90
+ value: JSON.parse(row.value),
91
+ category: row.category ?? undefined,
92
+ setBy: row.set_by,
93
+ setAt: row.set_at,
94
+ updatedAt: row.updated_at,
95
+ ttlMs: row.ttl_ms ?? undefined,
96
+ };
97
+ }
98
+ }
99
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/stores/sqlite/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { StateEntry } from '../types.js';
2
+ import type { IStateStore } from './interfaces.js';
3
+ export declare class StateStore implements IStateStore {
4
+ private entries;
5
+ get(key: string): Promise<StateEntry | null>;
6
+ set(key: string, value: unknown, agentId: string, category?: string, ttlMs?: number): Promise<StateEntry>;
7
+ delete(key: string): Promise<boolean>;
8
+ query(pattern?: string, category?: string): Promise<StateEntry[]>;
9
+ getAll(): Promise<StateEntry[]>;
10
+ load(entries: StateEntry[]): Promise<void>;
11
+ }
@@ -0,0 +1,67 @@
1
+ import { matchGlob, isExpired } from '../utils.js';
2
+ export class StateStore {
3
+ entries = new Map();
4
+ async get(key) {
5
+ const entry = this.entries.get(key);
6
+ if (!entry)
7
+ return null;
8
+ if (isExpired(entry.setAt, entry.ttlMs)) {
9
+ this.entries.delete(key);
10
+ return null;
11
+ }
12
+ return entry;
13
+ }
14
+ async set(key, value, agentId, category, ttlMs) {
15
+ const now = new Date().toISOString();
16
+ const existing = this.entries.get(key);
17
+ const entry = {
18
+ key,
19
+ value,
20
+ category,
21
+ setBy: agentId,
22
+ setAt: existing?.setAt ?? now,
23
+ updatedAt: now,
24
+ ttlMs,
25
+ };
26
+ this.entries.set(key, entry);
27
+ return entry;
28
+ }
29
+ async delete(key) {
30
+ return this.entries.delete(key);
31
+ }
32
+ async query(pattern, category) {
33
+ const results = [];
34
+ for (const entry of this.entries.values()) {
35
+ if (isExpired(entry.setAt, entry.ttlMs)) {
36
+ this.entries.delete(entry.key);
37
+ continue;
38
+ }
39
+ if (pattern && !matchGlob(pattern, entry.key))
40
+ continue;
41
+ if (category && entry.category !== category)
42
+ continue;
43
+ results.push(entry);
44
+ }
45
+ return results;
46
+ }
47
+ // For persistence
48
+ async getAll() {
49
+ // Clean expired on export
50
+ const results = [];
51
+ for (const entry of this.entries.values()) {
52
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
53
+ results.push(entry);
54
+ }
55
+ }
56
+ return results;
57
+ }
58
+ async load(entries) {
59
+ this.entries.clear();
60
+ for (const entry of entries) {
61
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
62
+ this.entries.set(entry.key, entry);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/stores/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * IPCBroker — Unix socket server for cross-incubator Honeycomb routing.
3
+ *
4
+ * Accepts connections from IPCTransport clients (one per hive/incubator).
5
+ * Routes topic events between hives based on their pub/sub declarations.
6
+ */
7
+ export declare class IPCBroker {
8
+ private server;
9
+ private hives;
10
+ private socketMap;
11
+ /** Start broker on a Unix domain socket. */
12
+ listen(socketPath: string): Promise<void>;
13
+ /** Stop broker and disconnect all hives. */
14
+ close(): Promise<void>;
15
+ /** Get names of connected hives. */
16
+ getConnectedHives(): string[];
17
+ private onConnection;
18
+ private handleMessage;
19
+ private routeEvent;
20
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * IPCBroker — Unix socket server for cross-incubator Honeycomb routing.
3
+ *
4
+ * Accepts connections from IPCTransport clients (one per hive/incubator).
5
+ * Routes topic events between hives based on their pub/sub declarations.
6
+ */
7
+ import { createServer } from 'node:net';
8
+ export class IPCBroker {
9
+ server = null;
10
+ hives = new Map();
11
+ socketMap = new Map();
12
+ /** Start broker on a Unix domain socket. */
13
+ async listen(socketPath) {
14
+ return new Promise((resolve, reject) => {
15
+ const srv = createServer((socket) => this.onConnection(socket));
16
+ srv.on('error', reject);
17
+ srv.listen(socketPath, () => {
18
+ this.server = srv;
19
+ resolve();
20
+ });
21
+ });
22
+ }
23
+ /** Stop broker and disconnect all hives. */
24
+ async close() {
25
+ for (const conn of this.hives.values()) {
26
+ conn.socket.end();
27
+ }
28
+ this.hives.clear();
29
+ this.socketMap.clear();
30
+ if (this.server) {
31
+ return new Promise((resolve) => {
32
+ this.server.close(() => resolve());
33
+ });
34
+ }
35
+ }
36
+ /** Get names of connected hives. */
37
+ getConnectedHives() {
38
+ return [...this.hives.keys()];
39
+ }
40
+ onConnection(socket) {
41
+ let buffer = '';
42
+ socket.setEncoding('utf8');
43
+ socket.on('data', (chunk) => {
44
+ buffer += chunk;
45
+ const lines = buffer.split('\n');
46
+ buffer = lines.pop();
47
+ for (const line of lines) {
48
+ if (!line)
49
+ continue;
50
+ try {
51
+ const msg = JSON.parse(line);
52
+ this.handleMessage(socket, msg);
53
+ }
54
+ catch {
55
+ // Ignore malformed messages
56
+ }
57
+ }
58
+ });
59
+ socket.on('close', () => {
60
+ const conn = this.socketMap.get(socket);
61
+ if (conn) {
62
+ this.hives.delete(conn.name);
63
+ this.socketMap.delete(socket);
64
+ }
65
+ });
66
+ socket.on('error', () => {
67
+ // Socket errors are handled by 'close'
68
+ });
69
+ }
70
+ handleMessage(socket, msg) {
71
+ switch (msg.type) {
72
+ case 'register': {
73
+ const conn = {
74
+ name: msg.hive,
75
+ socket,
76
+ publishes: new Set(msg.publishes),
77
+ subscribes: new Set(msg.subscribes),
78
+ };
79
+ this.hives.set(msg.hive, conn);
80
+ this.socketMap.set(socket, conn);
81
+ break;
82
+ }
83
+ case 'event': {
84
+ this.routeEvent(msg.hive, msg.topic, msg.event);
85
+ break;
86
+ }
87
+ }
88
+ }
89
+ routeEvent(sourceHive, topic, event) {
90
+ for (const [name, conn] of this.hives) {
91
+ // Don't route back to source
92
+ if (name === sourceHive)
93
+ continue;
94
+ // Only forward if target subscribes to this topic
95
+ if (!conn.subscribes.has(topic))
96
+ continue;
97
+ const forward = { type: 'forward', topic, event };
98
+ conn.socket.write(JSON.stringify(forward) + '\n');
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/transports/broker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type { HoneycombTransport, TopicEvent, BrokerMessage } from './types.js';
2
+ export { IPCTransport, type IPCTransportOptions } from './ipc.js';
3
+ export { IPCBroker } from './broker.js';
@@ -0,0 +1,3 @@
1
+ export { IPCTransport } from './ipc.js';
2
+ export { IPCBroker } from './broker.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transports/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA4B,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * IPCTransport — Unix socket client for cross-incubator Honeycomb events.
3
+ *
4
+ * Connects to the IPCBroker started by `wgl up`. Sends/receives NDJSON
5
+ * messages over a Unix domain socket.
6
+ */
7
+ import type { HoneycombTransport, TopicEvent } from './types.js';
8
+ export interface IPCTransportOptions {
9
+ socketPath: string;
10
+ hiveName: string;
11
+ publishes: string[];
12
+ subscribes: string[];
13
+ }
14
+ export declare class IPCTransport implements HoneycombTransport {
15
+ private socket;
16
+ private handlers;
17
+ private buffer;
18
+ private opts;
19
+ constructor(opts: IPCTransportOptions);
20
+ connect(): Promise<void>;
21
+ publish(topic: string, event: TopicEvent): Promise<void>;
22
+ subscribe(topic: string, handler: (event: TopicEvent) => void): () => void;
23
+ close(): Promise<void>;
24
+ private send;
25
+ private onData;
26
+ }