@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,57 @@
1
+ export class RedisEventStore {
2
+ client;
3
+ eventsKey;
4
+ cursorKey;
5
+ constructor(client, namespace) {
6
+ this.client = client;
7
+ this.eventsKey = `incubator:${namespace}:events`;
8
+ this.cursorKey = `incubator:${namespace}:cursor`;
9
+ }
10
+ async publish(type, data, agentId) {
11
+ const now = new Date().toISOString();
12
+ // Atomic: increment cursor, then add event with cursor as score
13
+ const pipeline = this.client.multi();
14
+ pipeline.incr(this.cursorKey);
15
+ const results = await pipeline.exec();
16
+ if (!results)
17
+ throw new Error('Redis MULTI/EXEC failed');
18
+ const id = results[0][1];
19
+ const event = {
20
+ id,
21
+ type,
22
+ data,
23
+ publishedBy: agentId,
24
+ publishedAt: now,
25
+ };
26
+ await this.client.zadd(this.eventsKey, id, JSON.stringify(event));
27
+ return event;
28
+ }
29
+ async getEvents(since, type) {
30
+ const min = since !== undefined ? since + 1 : '-inf';
31
+ const raws = await this.client.zrangebyscore(this.eventsKey, min, '+inf');
32
+ let events = raws.map(raw => JSON.parse(raw));
33
+ if (type) {
34
+ events = events.filter(e => e.type === type);
35
+ }
36
+ const cursor = await this.getCursor();
37
+ return { events, cursor };
38
+ }
39
+ async getCursor() {
40
+ const raw = await this.client.get(this.cursorKey);
41
+ return raw ? parseInt(raw, 10) : 0;
42
+ }
43
+ async getAll() {
44
+ const raws = await this.client.zrange(this.eventsKey, 0, -1);
45
+ return raws.map(raw => JSON.parse(raw));
46
+ }
47
+ async load(events, cursor) {
48
+ const pipeline = this.client.multi();
49
+ pipeline.del(this.eventsKey);
50
+ for (const event of events) {
51
+ pipeline.zadd(this.eventsKey, event.id, JSON.stringify(event));
52
+ }
53
+ pipeline.set(this.cursorKey, String(cursor));
54
+ await pipeline.exec();
55
+ }
56
+ }
57
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/stores/redis/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Stores } from '../interfaces.js';
2
+ import type { Redis } from './db.js';
3
+ export declare function createRedisStores(client: Redis, namespace: string): Stores;
@@ -0,0 +1,31 @@
1
+ import { RedisStateStore } from './state.js';
2
+ import { RedisEventStore } from './events.js';
3
+ import { RedisClaimStore } from './claims.js';
4
+ import { RedisDiscoveryStore } from './discoveries.js';
5
+ import { MessageStore } from '../messages.js';
6
+ import { HelpStore } from '../help.js';
7
+ import { ProgressStore } from '../progress.js';
8
+ import { ConflictStore } from '../conflicts.js';
9
+ import { RoleStore } from '../roles.js';
10
+ import { ProposalStore } from '../proposals.js';
11
+ import { ReinforcementStore } from '../reinforcements.js';
12
+ import { ControlStore } from '../control.js';
13
+ import { RunStore } from '../runs.js';
14
+ export function createRedisStores(client, namespace) {
15
+ const events = new RedisEventStore(client, namespace);
16
+ const state = new RedisStateStore(client, namespace);
17
+ const claims = new RedisClaimStore(client, namespace, events);
18
+ const discoveries = new RedisDiscoveryStore(client, namespace, events);
19
+ // New coordination stores use in-memory backend for now
20
+ const messages = new MessageStore();
21
+ const help = new HelpStore(events);
22
+ const progress = new ProgressStore();
23
+ const conflicts = new ConflictStore(events);
24
+ const roles = new RoleStore();
25
+ const proposals = new ProposalStore(events);
26
+ const reinforcements = new ReinforcementStore(events);
27
+ const control = new ControlStore(events);
28
+ const runs = new RunStore();
29
+ return { state, events, claims, discoveries, messages, help, progress, conflicts, roles, proposals, reinforcements, control, runs };
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stores/redis/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,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,iBAAiB,CAAC,MAAa,EAAE,SAAiB;IAChE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACvE,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,14 @@
1
+ import type { StateEntry } from '../../types.js';
2
+ import type { IStateStore } from '../interfaces.js';
3
+ import type { Redis } from './db.js';
4
+ export declare class RedisStateStore implements IStateStore {
5
+ private client;
6
+ private hashKey;
7
+ constructor(client: Redis, 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
+ }
@@ -0,0 +1,83 @@
1
+ import { matchGlob, isExpired } from '../../utils.js';
2
+ export class RedisStateStore {
3
+ client;
4
+ hashKey;
5
+ constructor(client, namespace) {
6
+ this.client = client;
7
+ this.hashKey = `incubator:${namespace}:state`;
8
+ }
9
+ async get(key) {
10
+ const raw = await this.client.hget(this.hashKey, key);
11
+ if (!raw)
12
+ return null;
13
+ const entry = JSON.parse(raw);
14
+ if (isExpired(entry.setAt, entry.ttlMs)) {
15
+ await this.client.hdel(this.hashKey, 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
+ const entry = {
25
+ key,
26
+ value,
27
+ category,
28
+ setBy: agentId,
29
+ setAt,
30
+ updatedAt: now,
31
+ ttlMs,
32
+ };
33
+ await this.client.hset(this.hashKey, key, JSON.stringify(entry));
34
+ return entry;
35
+ }
36
+ async delete(key) {
37
+ const count = await this.client.hdel(this.hashKey, key);
38
+ return count > 0;
39
+ }
40
+ async query(pattern, category) {
41
+ const all = await this.client.hgetall(this.hashKey);
42
+ const results = [];
43
+ for (const [, raw] of Object.entries(all)) {
44
+ const entry = JSON.parse(raw);
45
+ if (isExpired(entry.setAt, entry.ttlMs)) {
46
+ await this.client.hdel(this.hashKey, entry.key);
47
+ continue;
48
+ }
49
+ if (pattern && !matchGlob(pattern, entry.key))
50
+ continue;
51
+ if (category && entry.category !== category)
52
+ continue;
53
+ results.push(entry);
54
+ }
55
+ return results;
56
+ }
57
+ async getAll() {
58
+ const all = await this.client.hgetall(this.hashKey);
59
+ const results = [];
60
+ for (const [, raw] of Object.entries(all)) {
61
+ const entry = JSON.parse(raw);
62
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
63
+ results.push(entry);
64
+ }
65
+ }
66
+ return results;
67
+ }
68
+ async load(entries) {
69
+ await this.client.del(this.hashKey);
70
+ if (entries.length === 0)
71
+ return;
72
+ const data = {};
73
+ for (const entry of entries) {
74
+ if (!isExpired(entry.setAt, entry.ttlMs)) {
75
+ data[entry.key] = JSON.stringify(entry);
76
+ }
77
+ }
78
+ if (Object.keys(data).length > 0) {
79
+ await this.client.hset(this.hashKey, data);
80
+ }
81
+ }
82
+ }
83
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/stores/redis/state.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,OAAO,eAAe;IAClB,MAAM,CAAQ;IACd,OAAO,CAAS;IAExB,YAAY,MAAa,EAAE,SAAiB;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,aAAa,SAAS,QAAQ,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAc,EAAE,OAAe,EAAE,QAAiB,EAAE,KAAc;QACvF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,EAAE,KAAK,IAAI,GAAG,CAAC;QAErC,MAAM,KAAK,GAAe;YACxB,GAAG;YACH,KAAK;YACL,QAAQ;YACR,KAAK,EAAE,OAAO;YACd,KAAK;YACL,SAAS,EAAE,GAAG;YACd,KAAK;SACN,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,QAAiB;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,SAAS;YACX,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC;gBAAE,SAAS;YACxD,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;gBAAE,SAAS;YACtD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,OAAO,GAAiB,EAAE,CAAC;QAEjC,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAqB;QAC9B,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjC,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { ReinforcementRequest } from '../types.js';
2
+ import type { IReinforcementStore, IEventStore } from './interfaces.js';
3
+ export declare class ReinforcementStore implements IReinforcementStore {
4
+ private requests;
5
+ private eventStore;
6
+ constructor(eventStore: IEventStore);
7
+ request(agentId: string, role: string, count: number, reason?: string): Promise<ReinforcementRequest>;
8
+ approve(requestId: string): Promise<ReinforcementRequest | null>;
9
+ deny(requestId: string, reason: string): Promise<ReinforcementRequest | null>;
10
+ list(): Promise<ReinforcementRequest[]>;
11
+ }
@@ -0,0 +1,42 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ export class ReinforcementStore {
3
+ requests = new Map();
4
+ eventStore;
5
+ constructor(eventStore) {
6
+ this.eventStore = eventStore;
7
+ }
8
+ async request(agentId, role, count, reason) {
9
+ const req = {
10
+ id: randomBytes(8).toString('hex'),
11
+ requestedBy: agentId,
12
+ role,
13
+ count: Math.max(1, count),
14
+ reason,
15
+ status: 'pending',
16
+ createdAt: new Date().toISOString(),
17
+ };
18
+ this.requests.set(req.id, req);
19
+ return req;
20
+ }
21
+ async approve(requestId) {
22
+ const req = this.requests.get(requestId);
23
+ if (!req || req.status !== 'pending')
24
+ return null;
25
+ req.status = 'approved';
26
+ await this.eventStore.publish('reinforcement.approved', { request_id: requestId, role: req.role, count: req.count }, 'server');
27
+ return req;
28
+ }
29
+ async deny(requestId, reason) {
30
+ const req = this.requests.get(requestId);
31
+ if (!req || req.status !== 'pending')
32
+ return null;
33
+ req.status = 'denied';
34
+ req.denialReason = reason;
35
+ await this.eventStore.publish('reinforcement.denied', { request_id: requestId, role: req.role, reason }, 'server');
36
+ return req;
37
+ }
38
+ async list() {
39
+ return [...this.requests.values()];
40
+ }
41
+ }
42
+ //# sourceMappingURL=reinforcements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reinforcements.js","sourceRoot":"","sources":["../../src/stores/reinforcements.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,OAAO,kBAAkB;IACrB,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;IACnD,UAAU,CAAc;IAEhC,YAAY,UAAuB;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,IAAY,EAAE,KAAa,EAAE,MAAe;QACzE,MAAM,GAAG,GAAyB;YAChC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAClC,WAAW,EAAE,OAAO;YACpB,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;YACzB,MAAM;YACN,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAClD,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC;QACxB,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/H,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,MAAc;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAClD,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;QACtB,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC;QAC1B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnH,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { RoleAssignment } from '../types.js';
2
+ import type { IRoleStore } from './interfaces.js';
3
+ export declare class RoleStore implements IRoleStore {
4
+ private assignments;
5
+ assign(agentId: string, role: string): Promise<RoleAssignment>;
6
+ getAssignments(): Promise<RoleAssignment[]>;
7
+ getByAgent(agentId: string): Promise<RoleAssignment | null>;
8
+ remove(agentId: string): Promise<boolean>;
9
+ }
@@ -0,0 +1,22 @@
1
+ export class RoleStore {
2
+ assignments = new Map();
3
+ async assign(agentId, role) {
4
+ const assignment = {
5
+ agent: agentId,
6
+ role,
7
+ assignedAt: new Date().toISOString(),
8
+ };
9
+ this.assignments.set(agentId, assignment);
10
+ return assignment;
11
+ }
12
+ async getAssignments() {
13
+ return [...this.assignments.values()];
14
+ }
15
+ async getByAgent(agentId) {
16
+ return this.assignments.get(agentId) ?? null;
17
+ }
18
+ async remove(agentId) {
19
+ return this.assignments.delete(agentId);
20
+ }
21
+ }
22
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/stores/roles.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACZ,WAAW,GAAG,IAAI,GAAG,EAA0B,CAAC;IAExD,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,IAAY;QACxC,MAAM,UAAU,GAAmB;YACjC,KAAK,EAAE,OAAO;YACd,IAAI;YACJ,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACrC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { AgentRun, IRunStore } from './interfaces.js';
2
+ export declare class RunStore implements IRunStore {
3
+ private runs;
4
+ start(agentId: string, role: string): Promise<AgentRun>;
5
+ complete(agentId: string, data: Partial<AgentRun>): Promise<AgentRun | null>;
6
+ get(agentId: string): Promise<AgentRun | null>;
7
+ list(status?: string): Promise<AgentRun[]>;
8
+ summary(): Promise<{
9
+ agents: number;
10
+ completed: number;
11
+ errors: number;
12
+ totalTokens: number;
13
+ totalDuration: number;
14
+ }>;
15
+ }
@@ -0,0 +1,50 @@
1
+ export class RunStore {
2
+ runs = new Map();
3
+ async start(agentId, role) {
4
+ const run = {
5
+ agentId,
6
+ role,
7
+ status: 'running',
8
+ startedAt: new Date().toISOString(),
9
+ };
10
+ this.runs.set(agentId, run);
11
+ return run;
12
+ }
13
+ async complete(agentId, data) {
14
+ const run = this.runs.get(agentId);
15
+ if (!run)
16
+ return null;
17
+ Object.assign(run, data, { completedAt: new Date().toISOString() });
18
+ if (!run.status || run.status === 'running') {
19
+ run.status = 'completed';
20
+ }
21
+ return run;
22
+ }
23
+ async get(agentId) {
24
+ return this.runs.get(agentId) ?? null;
25
+ }
26
+ async list(status) {
27
+ const all = [...this.runs.values()];
28
+ if (!status)
29
+ return all;
30
+ return all.filter(r => r.status === status);
31
+ }
32
+ async summary() {
33
+ let completed = 0;
34
+ let errors = 0;
35
+ let totalTokens = 0;
36
+ let totalDuration = 0;
37
+ for (const run of this.runs.values()) {
38
+ if (run.status === 'completed' || run.status === 'halted')
39
+ completed++;
40
+ if (run.status === 'error')
41
+ errors++;
42
+ if (run.usage)
43
+ totalTokens += run.usage.totalTokens;
44
+ if (run.elapsed)
45
+ totalDuration += run.elapsed;
46
+ }
47
+ return { agents: this.runs.size, completed, errors, totalTokens, totalDuration };
48
+ }
49
+ }
50
+ //# sourceMappingURL=runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/stores/runs.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IACX,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,IAAY;QACvC,MAAM,GAAG,GAAa;YACpB,OAAO;YACP,IAAI;YACJ,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,IAAuB;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;QAC3B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAe;QACxB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO,GAAG,CAAC;QACxB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS,EAAE,CAAC;YACvE,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;gBAAE,MAAM,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,KAAK;gBAAE,WAAW,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;YACpD,IAAI,GAAG,CAAC,OAAO;gBAAE,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC;QAChD,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;IACnF,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { Claim, ClaimResult } from '../../types.js';
2
+ import type { IClaimStore, IEventStore } from '../interfaces.js';
3
+ import type { Database } from './db.js';
4
+ export declare class SqliteClaimStore implements IClaimStore {
5
+ private db;
6
+ private ns;
7
+ private eventStore;
8
+ constructor(db: Database, namespace: string, eventStore: IEventStore);
9
+ claim(resource: string, value: string, agentId: string, ttlMs?: number): Promise<ClaimResult>;
10
+ release(resource: string, agentId: string): Promise<Claim | null>;
11
+ check(resource: string): Promise<Claim | null>;
12
+ list(pattern?: string): Promise<Claim[]>;
13
+ getAll(): Promise<Claim[]>;
14
+ load(claims: Claim[]): Promise<void>;
15
+ private getClaimRow;
16
+ private rowToClaim;
17
+ }
@@ -0,0 +1,121 @@
1
+ import { matchGlob, isExpired } from '../../utils.js';
2
+ export class SqliteClaimStore {
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 claim(resource, value, agentId, ttlMs) {
12
+ let result;
13
+ let shouldPublishAcquired = false;
14
+ const txn = this.db.transaction(() => {
15
+ const existing = this.getClaimRow(resource);
16
+ // If there's an active, non-expired claim by someone else, reject
17
+ if (existing && existing.status === 'active' && !isExpired(existing.claimed_at, existing.ttl_ms ?? undefined)) {
18
+ if (existing.owner !== agentId) {
19
+ result = { status: 'rejected', claim: this.rowToClaim(existing) };
20
+ return;
21
+ }
22
+ // Same owner re-claiming: update value/ttl
23
+ this.db.prepare('UPDATE claims SET value = ?, ttl_ms = ? WHERE namespace = ? AND resource = ?').run(value, ttlMs ?? null, this.ns, resource);
24
+ result = {
25
+ status: 'approved',
26
+ claim: { ...this.rowToClaim(existing), value, ttlMs },
27
+ };
28
+ return;
29
+ }
30
+ // Create new claim
31
+ const now = new Date().toISOString();
32
+ this.db.prepare(`
33
+ INSERT INTO claims (namespace, resource, value, owner, status, claimed_at, ttl_ms)
34
+ VALUES (?, ?, ?, ?, 'active', ?, ?)
35
+ ON CONFLICT(namespace, resource) DO UPDATE SET
36
+ value = excluded.value,
37
+ owner = excluded.owner,
38
+ status = excluded.status,
39
+ claimed_at = excluded.claimed_at,
40
+ ttl_ms = excluded.ttl_ms
41
+ `).run(this.ns, resource, value, agentId, now, ttlMs ?? null);
42
+ const claim = {
43
+ resource,
44
+ value,
45
+ owner: agentId,
46
+ status: 'active',
47
+ claimedAt: now,
48
+ ttlMs,
49
+ };
50
+ shouldPublishAcquired = true;
51
+ result = { status: 'approved', claim };
52
+ });
53
+ txn();
54
+ if (shouldPublishAcquired) {
55
+ await this.eventStore.publish('claim.acquired', { resource, value, owner: agentId }, agentId);
56
+ }
57
+ return result;
58
+ }
59
+ async release(resource, agentId) {
60
+ const row = this.getClaimRow(resource);
61
+ if (!row || row.status !== 'active')
62
+ return null;
63
+ if (row.owner !== agentId)
64
+ return null;
65
+ this.db.prepare('UPDATE claims SET status = ? WHERE namespace = ? AND resource = ?').run('released', this.ns, resource);
66
+ await this.eventStore.publish('claim.released', { resource, owner: agentId }, agentId);
67
+ return { ...this.rowToClaim(row), status: 'released' };
68
+ }
69
+ async check(resource) {
70
+ const row = this.getClaimRow(resource);
71
+ if (!row)
72
+ return null;
73
+ if (row.status === 'active' && isExpired(row.claimed_at, row.ttl_ms ?? undefined)) {
74
+ this.db.prepare('UPDATE claims SET status = ? WHERE namespace = ? AND resource = ?').run('expired', this.ns, resource);
75
+ return { ...this.rowToClaim(row), status: 'expired' };
76
+ }
77
+ return this.rowToClaim(row);
78
+ }
79
+ async list(pattern) {
80
+ const rows = this.db.prepare('SELECT resource, value, owner, status, claimed_at, ttl_ms FROM claims WHERE namespace = ? AND status = ?').all(this.ns, 'active');
81
+ const results = [];
82
+ for (const row of rows) {
83
+ if (isExpired(row.claimed_at, row.ttl_ms ?? undefined)) {
84
+ this.db.prepare('UPDATE claims SET status = ? WHERE namespace = ? AND resource = ?').run('expired', this.ns, row.resource);
85
+ continue;
86
+ }
87
+ if (pattern && !matchGlob(pattern, row.resource))
88
+ continue;
89
+ results.push(this.rowToClaim(row));
90
+ }
91
+ return results;
92
+ }
93
+ async getAll() {
94
+ const rows = this.db.prepare('SELECT resource, value, owner, status, claimed_at, ttl_ms FROM claims WHERE namespace = ?').all(this.ns);
95
+ return rows.map(r => this.rowToClaim(r));
96
+ }
97
+ async load(claims) {
98
+ const txn = this.db.transaction(() => {
99
+ this.db.prepare('DELETE FROM claims WHERE namespace = ?').run(this.ns);
100
+ const insert = this.db.prepare('INSERT INTO claims (namespace, resource, value, owner, status, claimed_at, ttl_ms) VALUES (?, ?, ?, ?, ?, ?, ?)');
101
+ for (const claim of claims) {
102
+ insert.run(this.ns, claim.resource, claim.value, claim.owner, claim.status, claim.claimedAt, claim.ttlMs ?? null);
103
+ }
104
+ });
105
+ txn();
106
+ }
107
+ getClaimRow(resource) {
108
+ return this.db.prepare('SELECT resource, value, owner, status, claimed_at, ttl_ms FROM claims WHERE namespace = ? AND resource = ?').get(this.ns, resource);
109
+ }
110
+ rowToClaim(row) {
111
+ return {
112
+ resource: row.resource,
113
+ value: row.value,
114
+ owner: row.owner,
115
+ status: row.status,
116
+ claimedAt: row.claimed_at,
117
+ ttlMs: row.ttl_ms ?? undefined,
118
+ };
119
+ }
120
+ }
121
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../../../src/stores/sqlite/claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface Database {
2
+ prepare(sql: string): Statement;
3
+ exec(sql: string): void;
4
+ transaction<T>(fn: (...args: unknown[]) => T): (...args: unknown[]) => T;
5
+ pragma(pragma: string): unknown;
6
+ close(): void;
7
+ }
8
+ export interface Statement {
9
+ run(...params: unknown[]): {
10
+ changes: number;
11
+ lastInsertRowid: number | bigint;
12
+ };
13
+ get(...params: unknown[]): unknown;
14
+ all(...params: unknown[]): unknown[];
15
+ }
16
+ export declare function getDatabase(dbPath: string): Database;
@@ -0,0 +1,77 @@
1
+ import { createRequire } from 'node:module';
2
+ import { resolve } from 'node:path';
3
+ const dbCache = new Map();
4
+ export function getDatabase(dbPath) {
5
+ const resolved = dbPath === ':memory:' ? dbPath : resolve(dbPath);
6
+ const cached = dbCache.get(resolved);
7
+ if (cached)
8
+ return cached;
9
+ const require = createRequire(import.meta.url);
10
+ const BetterSqlite3 = require('better-sqlite3');
11
+ const db = new BetterSqlite3(resolved);
12
+ // Enable WAL mode for better concurrent read performance
13
+ db.pragma('journal_mode = WAL');
14
+ initSchema(db);
15
+ if (resolved !== ':memory:') {
16
+ dbCache.set(resolved, db);
17
+ }
18
+ return db;
19
+ }
20
+ function initSchema(db) {
21
+ db.exec(`
22
+ CREATE TABLE IF NOT EXISTS state (
23
+ namespace TEXT NOT NULL,
24
+ key TEXT NOT NULL,
25
+ value TEXT NOT NULL,
26
+ category TEXT,
27
+ set_by TEXT NOT NULL,
28
+ set_at TEXT NOT NULL,
29
+ updated_at TEXT NOT NULL,
30
+ ttl_ms INTEGER,
31
+ PRIMARY KEY (namespace, key)
32
+ );
33
+
34
+ CREATE TABLE IF NOT EXISTS events (
35
+ namespace TEXT NOT NULL,
36
+ id INTEGER NOT NULL,
37
+ type TEXT NOT NULL,
38
+ data TEXT NOT NULL,
39
+ published_by TEXT NOT NULL,
40
+ published_at TEXT NOT NULL,
41
+ PRIMARY KEY (namespace, id)
42
+ );
43
+
44
+ CREATE TABLE IF NOT EXISTS event_cursors (
45
+ namespace TEXT NOT NULL PRIMARY KEY,
46
+ cursor INTEGER NOT NULL DEFAULT 0
47
+ );
48
+
49
+ CREATE TABLE IF NOT EXISTS claims (
50
+ namespace TEXT NOT NULL,
51
+ resource TEXT NOT NULL,
52
+ value TEXT NOT NULL,
53
+ owner TEXT NOT NULL,
54
+ status TEXT NOT NULL,
55
+ claimed_at TEXT NOT NULL,
56
+ ttl_ms INTEGER,
57
+ PRIMARY KEY (namespace, resource)
58
+ );
59
+
60
+ CREATE TABLE IF NOT EXISTS discoveries (
61
+ namespace TEXT NOT NULL,
62
+ id TEXT NOT NULL,
63
+ topic TEXT NOT NULL,
64
+ content TEXT NOT NULL,
65
+ category TEXT,
66
+ published_by TEXT NOT NULL,
67
+ published_at TEXT NOT NULL,
68
+ PRIMARY KEY (namespace, id)
69
+ );
70
+
71
+ CREATE INDEX IF NOT EXISTS idx_state_ns_cat ON state (namespace, category);
72
+ CREATE INDEX IF NOT EXISTS idx_events_ns_type ON events (namespace, type);
73
+ CREATE INDEX IF NOT EXISTS idx_claims_ns_status ON claims (namespace, status);
74
+ CREATE INDEX IF NOT EXISTS idx_discoveries_ns_cat ON discoveries (namespace, category);
75
+ `);
76
+ }
77
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/stores/sqlite/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;AAE5C,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,MAAM,QAAQ,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAmC,CAAC;IAClF,MAAM,EAAE,GAAG,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEvC,yDAAyD;IACzD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEhC,UAAU,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,UAAU,CAAC,EAAY;IAC9B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDP,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Discovery } from '../../types.js';
2
+ import type { IDiscoveryStore, IEventStore } from '../interfaces.js';
3
+ import type { Database } from './db.js';
4
+ export declare class SqliteDiscoveryStore implements IDiscoveryStore {
5
+ private db;
6
+ private ns;
7
+ private eventStore;
8
+ constructor(db: Database, namespace: string, eventStore: IEventStore);
9
+ publish(topic: string, content: string, agentId: string, category?: string): Promise<Discovery>;
10
+ search(query?: string, category?: string): Promise<Discovery[]>;
11
+ getAll(): Promise<Discovery[]>;
12
+ load(discoveries: Discovery[]): Promise<void>;
13
+ private rowToDiscovery;
14
+ }