@stoneforge/quarry 0.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 (330) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +160 -0
  3. package/dist/api/index.d.ts +8 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +8 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/quarry-api.d.ts +268 -0
  8. package/dist/api/quarry-api.d.ts.map +1 -0
  9. package/dist/api/quarry-api.js +3905 -0
  10. package/dist/api/quarry-api.js.map +1 -0
  11. package/dist/api/types.d.ts +1359 -0
  12. package/dist/api/types.d.ts.map +1 -0
  13. package/dist/api/types.js +204 -0
  14. package/dist/api/types.js.map +1 -0
  15. package/dist/bin/sf.d.ts +3 -0
  16. package/dist/bin/sf.d.ts.map +1 -0
  17. package/dist/bin/sf.js +9 -0
  18. package/dist/bin/sf.js.map +1 -0
  19. package/dist/cli/commands/admin.d.ts +11 -0
  20. package/dist/cli/commands/admin.d.ts.map +1 -0
  21. package/dist/cli/commands/admin.js +465 -0
  22. package/dist/cli/commands/admin.js.map +1 -0
  23. package/dist/cli/commands/alias.d.ts +8 -0
  24. package/dist/cli/commands/alias.d.ts.map +1 -0
  25. package/dist/cli/commands/alias.js +70 -0
  26. package/dist/cli/commands/alias.js.map +1 -0
  27. package/dist/cli/commands/channel.d.ts +13 -0
  28. package/dist/cli/commands/channel.d.ts.map +1 -0
  29. package/dist/cli/commands/channel.js +680 -0
  30. package/dist/cli/commands/channel.js.map +1 -0
  31. package/dist/cli/commands/completion.d.ts +8 -0
  32. package/dist/cli/commands/completion.d.ts.map +1 -0
  33. package/dist/cli/commands/completion.js +87 -0
  34. package/dist/cli/commands/completion.js.map +1 -0
  35. package/dist/cli/commands/config.d.ts +12 -0
  36. package/dist/cli/commands/config.d.ts.map +1 -0
  37. package/dist/cli/commands/config.js +242 -0
  38. package/dist/cli/commands/config.js.map +1 -0
  39. package/dist/cli/commands/crud.d.ts +64 -0
  40. package/dist/cli/commands/crud.d.ts.map +1 -0
  41. package/dist/cli/commands/crud.js +805 -0
  42. package/dist/cli/commands/crud.js.map +1 -0
  43. package/dist/cli/commands/dep.d.ts +16 -0
  44. package/dist/cli/commands/dep.d.ts.map +1 -0
  45. package/dist/cli/commands/dep.js +499 -0
  46. package/dist/cli/commands/dep.js.map +1 -0
  47. package/dist/cli/commands/document.d.ts +12 -0
  48. package/dist/cli/commands/document.d.ts.map +1 -0
  49. package/dist/cli/commands/document.js +1039 -0
  50. package/dist/cli/commands/document.js.map +1 -0
  51. package/dist/cli/commands/embeddings.d.ts +12 -0
  52. package/dist/cli/commands/embeddings.d.ts.map +1 -0
  53. package/dist/cli/commands/embeddings.js +273 -0
  54. package/dist/cli/commands/embeddings.js.map +1 -0
  55. package/dist/cli/commands/entity.d.ts +16 -0
  56. package/dist/cli/commands/entity.d.ts.map +1 -0
  57. package/dist/cli/commands/entity.js +522 -0
  58. package/dist/cli/commands/entity.js.map +1 -0
  59. package/dist/cli/commands/gc.d.ts +10 -0
  60. package/dist/cli/commands/gc.d.ts.map +1 -0
  61. package/dist/cli/commands/gc.js +257 -0
  62. package/dist/cli/commands/gc.js.map +1 -0
  63. package/dist/cli/commands/help.d.ts +11 -0
  64. package/dist/cli/commands/help.d.ts.map +1 -0
  65. package/dist/cli/commands/help.js +169 -0
  66. package/dist/cli/commands/help.js.map +1 -0
  67. package/dist/cli/commands/history.d.ts +9 -0
  68. package/dist/cli/commands/history.d.ts.map +1 -0
  69. package/dist/cli/commands/history.js +160 -0
  70. package/dist/cli/commands/history.js.map +1 -0
  71. package/dist/cli/commands/identity.d.ts +18 -0
  72. package/dist/cli/commands/identity.d.ts.map +1 -0
  73. package/dist/cli/commands/identity.js +698 -0
  74. package/dist/cli/commands/identity.js.map +1 -0
  75. package/dist/cli/commands/inbox.d.ts +20 -0
  76. package/dist/cli/commands/inbox.d.ts.map +1 -0
  77. package/dist/cli/commands/inbox.js +493 -0
  78. package/dist/cli/commands/inbox.js.map +1 -0
  79. package/dist/cli/commands/init.d.ts +20 -0
  80. package/dist/cli/commands/init.d.ts.map +1 -0
  81. package/dist/cli/commands/init.js +144 -0
  82. package/dist/cli/commands/init.js.map +1 -0
  83. package/dist/cli/commands/install.d.ts +9 -0
  84. package/dist/cli/commands/install.d.ts.map +1 -0
  85. package/dist/cli/commands/install.js +200 -0
  86. package/dist/cli/commands/install.js.map +1 -0
  87. package/dist/cli/commands/library.d.ts +12 -0
  88. package/dist/cli/commands/library.d.ts.map +1 -0
  89. package/dist/cli/commands/library.js +665 -0
  90. package/dist/cli/commands/library.js.map +1 -0
  91. package/dist/cli/commands/message.d.ts +11 -0
  92. package/dist/cli/commands/message.d.ts.map +1 -0
  93. package/dist/cli/commands/message.js +608 -0
  94. package/dist/cli/commands/message.js.map +1 -0
  95. package/dist/cli/commands/plan.d.ts +17 -0
  96. package/dist/cli/commands/plan.d.ts.map +1 -0
  97. package/dist/cli/commands/plan.js +698 -0
  98. package/dist/cli/commands/plan.js.map +1 -0
  99. package/dist/cli/commands/playbook.d.ts +12 -0
  100. package/dist/cli/commands/playbook.d.ts.map +1 -0
  101. package/dist/cli/commands/playbook.js +730 -0
  102. package/dist/cli/commands/playbook.js.map +1 -0
  103. package/dist/cli/commands/reset.d.ts +12 -0
  104. package/dist/cli/commands/reset.d.ts.map +1 -0
  105. package/dist/cli/commands/reset.js +306 -0
  106. package/dist/cli/commands/reset.js.map +1 -0
  107. package/dist/cli/commands/serve.d.ts +11 -0
  108. package/dist/cli/commands/serve.d.ts.map +1 -0
  109. package/dist/cli/commands/serve.js +106 -0
  110. package/dist/cli/commands/serve.js.map +1 -0
  111. package/dist/cli/commands/stats.d.ts +8 -0
  112. package/dist/cli/commands/stats.d.ts.map +1 -0
  113. package/dist/cli/commands/stats.js +82 -0
  114. package/dist/cli/commands/stats.js.map +1 -0
  115. package/dist/cli/commands/sync.d.ts +14 -0
  116. package/dist/cli/commands/sync.d.ts.map +1 -0
  117. package/dist/cli/commands/sync.js +370 -0
  118. package/dist/cli/commands/sync.js.map +1 -0
  119. package/dist/cli/commands/task.d.ts +25 -0
  120. package/dist/cli/commands/task.d.ts.map +1 -0
  121. package/dist/cli/commands/task.js +1153 -0
  122. package/dist/cli/commands/task.js.map +1 -0
  123. package/dist/cli/commands/team.d.ts +13 -0
  124. package/dist/cli/commands/team.d.ts.map +1 -0
  125. package/dist/cli/commands/team.js +471 -0
  126. package/dist/cli/commands/team.js.map +1 -0
  127. package/dist/cli/commands/workflow.d.ts +16 -0
  128. package/dist/cli/commands/workflow.d.ts.map +1 -0
  129. package/dist/cli/commands/workflow.js +753 -0
  130. package/dist/cli/commands/workflow.js.map +1 -0
  131. package/dist/cli/completion.d.ts +28 -0
  132. package/dist/cli/completion.d.ts.map +1 -0
  133. package/dist/cli/completion.js +295 -0
  134. package/dist/cli/completion.js.map +1 -0
  135. package/dist/cli/db.d.ts +38 -0
  136. package/dist/cli/db.d.ts.map +1 -0
  137. package/dist/cli/db.js +90 -0
  138. package/dist/cli/db.js.map +1 -0
  139. package/dist/cli/formatter.d.ts +87 -0
  140. package/dist/cli/formatter.d.ts.map +1 -0
  141. package/dist/cli/formatter.js +464 -0
  142. package/dist/cli/formatter.js.map +1 -0
  143. package/dist/cli/index.d.ts +33 -0
  144. package/dist/cli/index.d.ts.map +1 -0
  145. package/dist/cli/index.js +38 -0
  146. package/dist/cli/index.js.map +1 -0
  147. package/dist/cli/parser.d.ts +45 -0
  148. package/dist/cli/parser.d.ts.map +1 -0
  149. package/dist/cli/parser.js +256 -0
  150. package/dist/cli/parser.js.map +1 -0
  151. package/dist/cli/plugin-loader.d.ts +39 -0
  152. package/dist/cli/plugin-loader.d.ts.map +1 -0
  153. package/dist/cli/plugin-loader.js +165 -0
  154. package/dist/cli/plugin-loader.js.map +1 -0
  155. package/dist/cli/plugin-registry.d.ts +50 -0
  156. package/dist/cli/plugin-registry.d.ts.map +1 -0
  157. package/dist/cli/plugin-registry.js +206 -0
  158. package/dist/cli/plugin-registry.js.map +1 -0
  159. package/dist/cli/plugin-types.d.ts +106 -0
  160. package/dist/cli/plugin-types.d.ts.map +1 -0
  161. package/dist/cli/plugin-types.js +103 -0
  162. package/dist/cli/plugin-types.js.map +1 -0
  163. package/dist/cli/runner.d.ts +35 -0
  164. package/dist/cli/runner.d.ts.map +1 -0
  165. package/dist/cli/runner.js +340 -0
  166. package/dist/cli/runner.js.map +1 -0
  167. package/dist/cli/suggest.d.ts +15 -0
  168. package/dist/cli/suggest.d.ts.map +1 -0
  169. package/dist/cli/suggest.js +49 -0
  170. package/dist/cli/suggest.js.map +1 -0
  171. package/dist/cli/types.d.ts +138 -0
  172. package/dist/cli/types.d.ts.map +1 -0
  173. package/dist/cli/types.js +63 -0
  174. package/dist/cli/types.js.map +1 -0
  175. package/dist/config/config.d.ts +86 -0
  176. package/dist/config/config.d.ts.map +1 -0
  177. package/dist/config/config.js +348 -0
  178. package/dist/config/config.js.map +1 -0
  179. package/dist/config/defaults.d.ts +66 -0
  180. package/dist/config/defaults.d.ts.map +1 -0
  181. package/dist/config/defaults.js +114 -0
  182. package/dist/config/defaults.js.map +1 -0
  183. package/dist/config/duration.d.ts +75 -0
  184. package/dist/config/duration.d.ts.map +1 -0
  185. package/dist/config/duration.js +190 -0
  186. package/dist/config/duration.js.map +1 -0
  187. package/dist/config/env.d.ts +67 -0
  188. package/dist/config/env.d.ts.map +1 -0
  189. package/dist/config/env.js +207 -0
  190. package/dist/config/env.js.map +1 -0
  191. package/dist/config/file.d.ts +97 -0
  192. package/dist/config/file.d.ts.map +1 -0
  193. package/dist/config/file.js +365 -0
  194. package/dist/config/file.js.map +1 -0
  195. package/dist/config/index.d.ts +35 -0
  196. package/dist/config/index.d.ts.map +1 -0
  197. package/dist/config/index.js +41 -0
  198. package/dist/config/index.js.map +1 -0
  199. package/dist/config/merge.d.ts +53 -0
  200. package/dist/config/merge.d.ts.map +1 -0
  201. package/dist/config/merge.js +226 -0
  202. package/dist/config/merge.js.map +1 -0
  203. package/dist/config/types.d.ts +257 -0
  204. package/dist/config/types.d.ts.map +1 -0
  205. package/dist/config/types.js +72 -0
  206. package/dist/config/types.js.map +1 -0
  207. package/dist/config/validation.d.ts +55 -0
  208. package/dist/config/validation.d.ts.map +1 -0
  209. package/dist/config/validation.js +251 -0
  210. package/dist/config/validation.js.map +1 -0
  211. package/dist/http/index.d.ts +8 -0
  212. package/dist/http/index.d.ts.map +1 -0
  213. package/dist/http/index.js +12 -0
  214. package/dist/http/index.js.map +1 -0
  215. package/dist/http/sync-handlers.d.ts +162 -0
  216. package/dist/http/sync-handlers.d.ts.map +1 -0
  217. package/dist/http/sync-handlers.js +271 -0
  218. package/dist/http/sync-handlers.js.map +1 -0
  219. package/dist/index.d.ts +25 -0
  220. package/dist/index.d.ts.map +1 -0
  221. package/dist/index.js +69 -0
  222. package/dist/index.js.map +1 -0
  223. package/dist/server/index.d.ts +34 -0
  224. package/dist/server/index.d.ts.map +1 -0
  225. package/dist/server/index.js +3329 -0
  226. package/dist/server/index.js.map +1 -0
  227. package/dist/server/static.d.ts +18 -0
  228. package/dist/server/static.d.ts.map +1 -0
  229. package/dist/server/static.js +71 -0
  230. package/dist/server/static.js.map +1 -0
  231. package/dist/server/ws/broadcaster.d.ts +8 -0
  232. package/dist/server/ws/broadcaster.d.ts.map +1 -0
  233. package/dist/server/ws/broadcaster.js +7 -0
  234. package/dist/server/ws/broadcaster.js.map +1 -0
  235. package/dist/server/ws/handler.d.ts +55 -0
  236. package/dist/server/ws/handler.d.ts.map +1 -0
  237. package/dist/server/ws/handler.js +160 -0
  238. package/dist/server/ws/handler.js.map +1 -0
  239. package/dist/services/blocked-cache.d.ts +297 -0
  240. package/dist/services/blocked-cache.d.ts.map +1 -0
  241. package/dist/services/blocked-cache.js +755 -0
  242. package/dist/services/blocked-cache.js.map +1 -0
  243. package/dist/services/dependency.d.ts +205 -0
  244. package/dist/services/dependency.d.ts.map +1 -0
  245. package/dist/services/dependency.js +566 -0
  246. package/dist/services/dependency.js.map +1 -0
  247. package/dist/services/embeddings/fusion.d.ts +33 -0
  248. package/dist/services/embeddings/fusion.d.ts.map +1 -0
  249. package/dist/services/embeddings/fusion.js +34 -0
  250. package/dist/services/embeddings/fusion.js.map +1 -0
  251. package/dist/services/embeddings/index.d.ts +12 -0
  252. package/dist/services/embeddings/index.d.ts.map +1 -0
  253. package/dist/services/embeddings/index.js +10 -0
  254. package/dist/services/embeddings/index.js.map +1 -0
  255. package/dist/services/embeddings/local-provider.d.ts +31 -0
  256. package/dist/services/embeddings/local-provider.d.ts.map +1 -0
  257. package/dist/services/embeddings/local-provider.js +80 -0
  258. package/dist/services/embeddings/local-provider.js.map +1 -0
  259. package/dist/services/embeddings/service.d.ts +76 -0
  260. package/dist/services/embeddings/service.d.ts.map +1 -0
  261. package/dist/services/embeddings/service.js +153 -0
  262. package/dist/services/embeddings/service.js.map +1 -0
  263. package/dist/services/embeddings/types.d.ts +70 -0
  264. package/dist/services/embeddings/types.d.ts.map +1 -0
  265. package/dist/services/embeddings/types.js +8 -0
  266. package/dist/services/embeddings/types.js.map +1 -0
  267. package/dist/services/id-length-cache.d.ts +156 -0
  268. package/dist/services/id-length-cache.d.ts.map +1 -0
  269. package/dist/services/id-length-cache.js +197 -0
  270. package/dist/services/id-length-cache.js.map +1 -0
  271. package/dist/services/inbox.d.ts +147 -0
  272. package/dist/services/inbox.d.ts.map +1 -0
  273. package/dist/services/inbox.js +428 -0
  274. package/dist/services/inbox.js.map +1 -0
  275. package/dist/services/index.d.ts +10 -0
  276. package/dist/services/index.d.ts.map +1 -0
  277. package/dist/services/index.js +10 -0
  278. package/dist/services/index.js.map +1 -0
  279. package/dist/services/priority-service.d.ts +145 -0
  280. package/dist/services/priority-service.d.ts.map +1 -0
  281. package/dist/services/priority-service.js +272 -0
  282. package/dist/services/priority-service.js.map +1 -0
  283. package/dist/services/search-utils.d.ts +47 -0
  284. package/dist/services/search-utils.d.ts.map +1 -0
  285. package/dist/services/search-utils.js +83 -0
  286. package/dist/services/search-utils.js.map +1 -0
  287. package/dist/sync/hash.d.ts +48 -0
  288. package/dist/sync/hash.d.ts.map +1 -0
  289. package/dist/sync/hash.js +136 -0
  290. package/dist/sync/hash.js.map +1 -0
  291. package/dist/sync/index.d.ts +11 -0
  292. package/dist/sync/index.d.ts.map +1 -0
  293. package/dist/sync/index.js +16 -0
  294. package/dist/sync/index.js.map +1 -0
  295. package/dist/sync/merge.d.ts +80 -0
  296. package/dist/sync/merge.d.ts.map +1 -0
  297. package/dist/sync/merge.js +310 -0
  298. package/dist/sync/merge.js.map +1 -0
  299. package/dist/sync/serialization.d.ts +132 -0
  300. package/dist/sync/serialization.d.ts.map +1 -0
  301. package/dist/sync/serialization.js +306 -0
  302. package/dist/sync/serialization.js.map +1 -0
  303. package/dist/sync/service.d.ts +102 -0
  304. package/dist/sync/service.d.ts.map +1 -0
  305. package/dist/sync/service.js +493 -0
  306. package/dist/sync/service.js.map +1 -0
  307. package/dist/sync/types.d.ts +275 -0
  308. package/dist/sync/types.d.ts.map +1 -0
  309. package/dist/sync/types.js +76 -0
  310. package/dist/sync/types.js.map +1 -0
  311. package/dist/systems/identity.d.ts +479 -0
  312. package/dist/systems/identity.d.ts.map +1 -0
  313. package/dist/systems/identity.js +817 -0
  314. package/dist/systems/identity.js.map +1 -0
  315. package/dist/systems/index.d.ts +8 -0
  316. package/dist/systems/index.d.ts.map +1 -0
  317. package/dist/systems/index.js +29 -0
  318. package/dist/systems/index.js.map +1 -0
  319. package/package.json +121 -0
  320. package/web/assets/charts-vendor-D1YcbGux.js +55 -0
  321. package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
  322. package/web/assets/editor-vendor-BxraAWts.js +279 -0
  323. package/web/assets/index-B77vv208.js +341 -0
  324. package/web/assets/index-CF_XnVLh.css +1 -0
  325. package/web/assets/router-vendor-BCKpRBrB.js +41 -0
  326. package/web/assets/ui-vendor-DUahGnbT.js +45 -0
  327. package/web/assets/utils-vendor-CfYKiENT.js +813 -0
  328. package/web/favicon.ico +0 -0
  329. package/web/index.html +23 -0
  330. package/web/logo.png +0 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * WebSocket Handler
3
+ *
4
+ * Handles WebSocket connections, message parsing, and subscription management.
5
+ */
6
+ import { parseClientMessage, shouldReceiveEvent } from '@stoneforge/shared-routes';
7
+ import { getBroadcaster } from './broadcaster.js';
8
+ /**
9
+ * Track active WebSocket connections
10
+ */
11
+ const clients = new Map();
12
+ /**
13
+ * Generate a unique client ID
14
+ */
15
+ function generateClientId() {
16
+ return `client-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
17
+ }
18
+ /**
19
+ * Send a message to a specific client
20
+ */
21
+ function sendToClient(ws, message) {
22
+ try {
23
+ ws.send(JSON.stringify(message));
24
+ }
25
+ catch (err) {
26
+ console.error('[ws] Error sending message to client:', err);
27
+ }
28
+ }
29
+ /**
30
+ * Handle a new WebSocket connection
31
+ */
32
+ export function handleOpen(ws) {
33
+ const clientId = generateClientId();
34
+ const subscriptions = new Set();
35
+ // Create event listener for this client
36
+ const eventListener = (event) => {
37
+ if (shouldReceiveEvent(subscriptions, event)) {
38
+ sendToClient(ws, {
39
+ type: 'event',
40
+ event,
41
+ });
42
+ }
43
+ };
44
+ // Store client data
45
+ ws.data = {
46
+ id: clientId,
47
+ subscriptions,
48
+ eventListener,
49
+ };
50
+ // Register listener with broadcaster
51
+ const broadcaster = getBroadcaster();
52
+ if (broadcaster) {
53
+ broadcaster.addListener(eventListener);
54
+ }
55
+ // Track this client
56
+ clients.set(clientId, ws);
57
+ console.log(`[ws] Client connected: ${clientId}`);
58
+ }
59
+ /**
60
+ * Handle WebSocket message from client
61
+ */
62
+ export function handleMessage(ws, data) {
63
+ const message = typeof data === 'string' ? data : data.toString();
64
+ const parsed = parseClientMessage(message);
65
+ if (!parsed) {
66
+ sendToClient(ws, {
67
+ type: 'error',
68
+ code: 'INVALID_MESSAGE',
69
+ message: 'Could not parse message',
70
+ });
71
+ return;
72
+ }
73
+ switch (parsed.type) {
74
+ case 'ping':
75
+ sendToClient(ws, { type: 'pong' });
76
+ break;
77
+ case 'subscribe': {
78
+ for (const channel of parsed.channels) {
79
+ ws.data.subscriptions.add(channel);
80
+ }
81
+ sendToClient(ws, {
82
+ type: 'subscribed',
83
+ channels: parsed.channels,
84
+ });
85
+ console.log(`[ws] Client ${ws.data.id} subscribed to: ${parsed.channels.join(', ')}`);
86
+ break;
87
+ }
88
+ case 'unsubscribe': {
89
+ for (const channel of parsed.channels) {
90
+ ws.data.subscriptions.delete(channel);
91
+ }
92
+ sendToClient(ws, {
93
+ type: 'unsubscribed',
94
+ channels: parsed.channels,
95
+ });
96
+ console.log(`[ws] Client ${ws.data.id} unsubscribed from: ${parsed.channels.join(', ')}`);
97
+ break;
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Handle WebSocket connection close
103
+ */
104
+ export function handleClose(ws) {
105
+ const { id, eventListener } = ws.data;
106
+ // Unregister listener from broadcaster
107
+ const broadcaster = getBroadcaster();
108
+ if (broadcaster) {
109
+ broadcaster.removeListener(eventListener);
110
+ }
111
+ // Remove from tracking
112
+ clients.delete(id);
113
+ console.log(`[ws] Client disconnected: ${id}`);
114
+ }
115
+ /**
116
+ * Handle WebSocket error
117
+ */
118
+ export function handleError(ws, error) {
119
+ console.error(`[ws] Client ${ws.data?.id ?? 'unknown'} error:`, error.message);
120
+ }
121
+ /**
122
+ * Get the number of connected clients
123
+ */
124
+ export function getClientCount() {
125
+ return clients.size;
126
+ }
127
+ /**
128
+ * Broadcast a message to all connected clients
129
+ */
130
+ export function broadcastToAll(message) {
131
+ for (const client of clients.values()) {
132
+ sendToClient(client, message);
133
+ }
134
+ }
135
+ /**
136
+ * Broadcast an inbox event to subscribed clients
137
+ * Sends to clients subscribed to 'inbox', 'inbox:${recipientId}', or '*'
138
+ */
139
+ export function broadcastInboxEvent(itemId, recipientId, eventType, oldValue, newValue, actor) {
140
+ const event = {
141
+ id: Date.now(), // Use timestamp as pseudo-ID since inbox events aren't in events table
142
+ elementId: itemId,
143
+ elementType: 'inbox-item',
144
+ eventType: eventType,
145
+ actor: (actor || 'system'),
146
+ oldValue,
147
+ newValue: { ...newValue, recipientId }, // Include recipientId for entity-specific subscriptions
148
+ createdAt: new Date().toISOString(),
149
+ };
150
+ const message = {
151
+ type: 'event',
152
+ event,
153
+ };
154
+ for (const client of clients.values()) {
155
+ if (shouldReceiveEvent(client.data.subscriptions, event)) {
156
+ sendToClient(client, message);
157
+ }
158
+ }
159
+ }
160
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/server/ws/handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,297 @@
1
+ /**
2
+ * Blocked Cache Service
3
+ *
4
+ * Maintains a materialized view of blocked elements for efficient ready-work queries.
5
+ * The blocked_cache table provides ~25x speedup for large datasets by avoiding
6
+ * recursive dependency checks on every query.
7
+ *
8
+ * Blocking Rules:
9
+ * - `blocks` dependency: Blocked element waits for blocker to close
10
+ * - `parent-child` dependency: Blocked element (child) inherits blocked state from blocker (parent) (transitive)
11
+ * - `awaits` dependency: Blocked element waits until gate is satisfied (timer, approval, etc.)
12
+ *
13
+ * Cache Invalidation Triggers:
14
+ * - Blocking dependency added/removed
15
+ * - Element status changes (especially closing)
16
+ * - Gate satisfaction changes
17
+ * - Parent blocking state changes
18
+ */
19
+ import type { StorageBackend } from '@stoneforge/storage';
20
+ import type { ElementId, EntityId, DependencyType, AwaitsMetadata } from '@stoneforge/core';
21
+ /**
22
+ * Blocking information for an element
23
+ */
24
+ export interface BlockingInfo {
25
+ /** The element that is blocked */
26
+ elementId: ElementId;
27
+ /** The element causing the block */
28
+ blockedBy: ElementId;
29
+ /** Human-readable reason */
30
+ reason: string;
31
+ /** Status before becoming blocked (for restoration) */
32
+ previousStatus?: string | null;
33
+ }
34
+ /**
35
+ * Result of a cache rebuild operation
36
+ */
37
+ export interface CacheRebuildResult {
38
+ /** Number of elements checked */
39
+ elementsChecked: number;
40
+ /** Number of elements added to blocked cache */
41
+ elementsBlocked: number;
42
+ /** Time taken in milliseconds */
43
+ durationMs: number;
44
+ }
45
+ /**
46
+ * Options for gate checking
47
+ */
48
+ export interface GateCheckOptions {
49
+ /** Current time for timer gate checks (defaults to now) */
50
+ currentTime?: Date;
51
+ }
52
+ /**
53
+ * Callback for automatic status transitions
54
+ */
55
+ export interface StatusTransitionCallback {
56
+ /**
57
+ * Called when an element should transition to blocked status
58
+ * @param elementId - The element to block
59
+ * @param previousStatus - The status to save for later restoration
60
+ */
61
+ onBlock: (elementId: ElementId, previousStatus: string) => void;
62
+ /**
63
+ * Called when an element should transition from blocked status
64
+ * @param elementId - The element to unblock
65
+ * @param statusToRestore - The status to restore to
66
+ */
67
+ onUnblock: (elementId: ElementId, statusToRestore: string) => void;
68
+ }
69
+ /**
70
+ * Service for managing the blocked elements cache
71
+ */
72
+ export declare class BlockedCacheService {
73
+ private readonly db;
74
+ private statusCallback?;
75
+ constructor(db: StorageBackend);
76
+ /**
77
+ * Set the callback for automatic status transitions
78
+ * This allows the service to notify when elements should be blocked/unblocked
79
+ */
80
+ setStatusTransitionCallback(callback: StatusTransitionCallback): void;
81
+ /**
82
+ * Check if an element is blocked
83
+ *
84
+ * @param elementId - Element to check
85
+ * @returns Blocking info if blocked, null if not blocked
86
+ */
87
+ isBlocked(elementId: ElementId): BlockingInfo | null;
88
+ /**
89
+ * Get all blocked elements
90
+ *
91
+ * @returns Array of blocking info for all blocked elements
92
+ */
93
+ getAllBlocked(): BlockingInfo[];
94
+ /**
95
+ * Get all elements blocked by a specific element
96
+ *
97
+ * @param blockerId - The element causing blocks
98
+ * @returns Array of element IDs blocked by this element
99
+ */
100
+ getBlockedBy(blockerId: ElementId): ElementId[];
101
+ /**
102
+ * Count blocked elements
103
+ */
104
+ count(): number;
105
+ /**
106
+ * Add a blocking entry to the cache
107
+ *
108
+ * @param elementId - Element being blocked
109
+ * @param blockedBy - Element causing the block
110
+ * @param reason - Human-readable reason
111
+ * @param previousStatus - The element's status before becoming blocked
112
+ */
113
+ addBlocked(elementId: ElementId, blockedBy: ElementId, reason: string, previousStatus?: string | null): void;
114
+ /**
115
+ * Remove a blocking entry from the cache
116
+ *
117
+ * @param elementId - Element to unblock
118
+ */
119
+ removeBlocked(elementId: ElementId): void;
120
+ /**
121
+ * Clear all entries from the cache
122
+ */
123
+ clear(): void;
124
+ /**
125
+ * Check if an element is in a completed state (doesn't block others)
126
+ *
127
+ * @param elementId - Element to check
128
+ * @returns true if element is completed/closed/tombstone
129
+ */
130
+ private isElementCompleted;
131
+ /**
132
+ * Check if a blocker element is in a completed state (no longer blocking)
133
+ *
134
+ * @param blockerId - The blocker element to check
135
+ * @returns true if blocker is completed/closed/tombstone (no longer blocking)
136
+ */
137
+ isBlockerCompleted(blockerId: ElementId): boolean;
138
+ /**
139
+ * Get the current status of an element
140
+ *
141
+ * @param elementId - Element to check
142
+ * @returns The element's status, or null if not found or no status
143
+ */
144
+ getElementStatus(elementId: ElementId): string | null;
145
+ /**
146
+ * Check if element is a task (has status field)
147
+ */
148
+ isTask(elementId: ElementId): boolean;
149
+ /**
150
+ * Check if element is a plan
151
+ */
152
+ isPlan(elementId: ElementId): boolean;
153
+ /**
154
+ * Check if an awaits gate is satisfied
155
+ *
156
+ * @param metadata - The awaits dependency metadata
157
+ * @param options - Gate check options
158
+ * @returns true if gate is satisfied (not blocking)
159
+ */
160
+ isGateSatisfied(metadata: AwaitsMetadata, options?: GateCheckOptions): boolean;
161
+ /**
162
+ * Compute the blocking state for a single element
163
+ *
164
+ * @param elementId - Element to check
165
+ * @param options - Gate check options
166
+ * @returns Blocking info if blocked, null if not blocked
167
+ */
168
+ computeBlockingState(elementId: ElementId, options?: GateCheckOptions): BlockingInfo | null;
169
+ /**
170
+ * Update blocking state for an element after a dependency change
171
+ *
172
+ * Handles automatic status transitions:
173
+ * - When element becomes blocked: saves current status and triggers BLOCKED transition
174
+ * - When element becomes unblocked: restores previous status
175
+ *
176
+ * @param elementId - Element whose dependencies changed
177
+ * @param options - Gate check options
178
+ */
179
+ invalidateElement(elementId: ElementId, options?: GateCheckOptions): void;
180
+ /**
181
+ * Update blocking state for all elements that depend on a changed element
182
+ * Called when an element's status changes (especially when completing)
183
+ *
184
+ * @param changedId - Element whose status changed
185
+ * @param options - Gate check options
186
+ */
187
+ invalidateDependents(changedId: ElementId, options?: GateCheckOptions): void;
188
+ /**
189
+ * Recursively invalidate children of an element
190
+ * Used for transitive parent-child blocking
191
+ *
192
+ * @param parentId - Parent element
193
+ * @param options - Gate check options
194
+ * @param visited - Set of already visited elements (cycle prevention)
195
+ */
196
+ private invalidateChildren;
197
+ /**
198
+ * Result of a gate satisfaction operation
199
+ */
200
+ /**
201
+ * Mark an external or webhook gate as satisfied.
202
+ * Updates the dependency metadata and recomputes blocking state.
203
+ *
204
+ * @param blockedId - Element that has the awaits dependency
205
+ * @param blockerId - Blocker element ID of the awaits dependency
206
+ * @param actor - Entity marking the gate as satisfied
207
+ * @param options - Gate check options
208
+ * @returns True if gate was found and satisfied, false if not found
209
+ */
210
+ satisfyGate(blockedId: ElementId, blockerId: ElementId, actor: EntityId, options?: GateCheckOptions): boolean;
211
+ /**
212
+ * Record an approval for an approval gate.
213
+ * Updates the dependency metadata with the new approver.
214
+ *
215
+ * @param blockedId - Element that has the awaits dependency
216
+ * @param blockerId - Blocker element ID of the awaits dependency
217
+ * @param approver - Entity recording their approval
218
+ * @param options - Gate check options
219
+ * @returns Object indicating success and current approval count
220
+ */
221
+ recordApproval(blockedId: ElementId, blockerId: ElementId, approver: EntityId, options?: GateCheckOptions): {
222
+ success: boolean;
223
+ currentCount: number;
224
+ requiredCount: number;
225
+ satisfied: boolean;
226
+ };
227
+ /**
228
+ * Remove an approval from an approval gate.
229
+ *
230
+ * @param blockedId - Element that has the awaits dependency
231
+ * @param blockerId - Blocker element ID of the awaits dependency
232
+ * @param approver - Entity removing their approval
233
+ * @param options - Gate check options
234
+ * @returns Object indicating success and current approval count
235
+ */
236
+ removeApproval(blockedId: ElementId, blockerId: ElementId, approver: EntityId, options?: GateCheckOptions): {
237
+ success: boolean;
238
+ currentCount: number;
239
+ requiredCount: number;
240
+ satisfied: boolean;
241
+ };
242
+ /**
243
+ * Rebuild the entire blocked cache from scratch
244
+ *
245
+ * This is useful for:
246
+ * - Initial population after migration
247
+ * - Recovery from cache corruption
248
+ * - Periodic consistency checks
249
+ *
250
+ * The rebuild processes elements in topological order (parents before children)
251
+ * to ensure transitive blocking is computed correctly.
252
+ *
253
+ * @param options - Gate check options
254
+ * @returns Rebuild statistics
255
+ */
256
+ rebuild(options?: GateCheckOptions): CacheRebuildResult;
257
+ /**
258
+ * Handle a blocking dependency being added
259
+ *
260
+ * @param blockedId - Element that is waiting/blocked
261
+ * @param blockerId - Element doing the blocking
262
+ * @param type - Type of dependency
263
+ * @param metadata - Dependency metadata (for awaits)
264
+ * @param options - Gate check options
265
+ */
266
+ onDependencyAdded(blockedId: ElementId, blockerId: ElementId, type: DependencyType, _metadata?: Record<string, unknown>, options?: GateCheckOptions): void;
267
+ /**
268
+ * Handle a blocking dependency being removed
269
+ *
270
+ * @param blockedId - Element that had a blocking dependency removed
271
+ * @param blockerId - Element that was doing the blocking
272
+ * @param type - Type of dependency that was removed
273
+ * @param options - Gate check options
274
+ */
275
+ onDependencyRemoved(blockedId: ElementId, blockerId: ElementId, type: DependencyType, options?: GateCheckOptions): void;
276
+ /**
277
+ * Handle an element's status changing
278
+ *
279
+ * @param elementId - Element whose status changed
280
+ * @param oldStatus - Previous status
281
+ * @param newStatus - New status
282
+ * @param options - Gate check options
283
+ */
284
+ onStatusChanged(elementId: ElementId, oldStatus: string | null, newStatus: string, options?: GateCheckOptions): void;
285
+ /**
286
+ * Handle an element being deleted
287
+ *
288
+ * @param elementId - Element that was deleted
289
+ * @param options - Gate check options
290
+ */
291
+ onElementDeleted(elementId: ElementId, options?: GateCheckOptions): void;
292
+ }
293
+ /**
294
+ * Create a new BlockedCacheService instance
295
+ */
296
+ export declare function createBlockedCacheService(db: StorageBackend): BlockedCacheService;
297
+ //# sourceMappingURL=blocked-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocked-cache.d.ts","sourceRoot":"","sources":["../../src/services/blocked-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAO,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA4C5F;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,oCAAoC;IACpC,SAAS,EAAE,SAAS,CAAC;IACrB,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhE;;;;OAIG;IACH,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE;AAMD;;GAEG;AACH,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAF/B,OAAO,CAAC,cAAc,CAAC,CAA2B;gBAErB,EAAE,EAAE,cAAc;IAE/C;;;OAGG;IACH,2BAA2B,CAAC,QAAQ,EAAE,wBAAwB,GAAG,IAAI;IAQrE;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI;IAkBpD;;;;OAIG;IACH,aAAa,IAAI,YAAY,EAAE;IAW/B;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE;IAS/C;;OAEG;IACH,KAAK,IAAI,MAAM;IAWf;;;;;;;OAOG;IACH,UAAU,CACR,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,IAAI;IAQP;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAIzC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;;;;OAKG;IACH,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAIjD;;;;;OAKG;IACH,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI;IAkBrD;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAQrC;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO;IAQrC;;;;;;OAMG;IACH,eAAe,CACb,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,gBAAqB,GAC7B,OAAO;IA4BV;;;;;;OAMG;IACH,oBAAoB,CAClB,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,gBAAqB,GAC7B,YAAY,GAAG,IAAI;IAiFtB;;;;;;;;;OASG;IACH,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI;IAiE7E;;;;;;OAMG;IACH,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI;IAmBhF;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH;;;;;;;;;OASG;IACH,WAAW,CACT,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO;IA+CV;;;;;;;;;OASG;IACH,cAAc,CACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,gBAAqB,GAC7B;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IAoExF;;;;;;;;OAQG;IACH,cAAc,CACZ,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,gBAAqB,GAC7B;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE;IAoExF;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,OAAO,GAAE,gBAAqB,GAAG,kBAAkB;IA4H3D;;;;;;;;OAQG;IACH,iBAAiB,CACf,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,cAAc,EACpB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,GAAE,gBAAqB,GAC7B,IAAI;IAeP;;;;;;;OAOG;IACH,mBAAmB,CACjB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,gBAAqB,GAC7B,IAAI;IAeP;;;;;;;OAOG;IACH,eAAe,CACb,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,gBAAqB,GAC7B,IAAI;IAUP;;;;;OAKG;IACH,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,GAAE,gBAAqB,GAAG,IAAI;CAO7E;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,cAAc,GAAG,mBAAmB,CAEjF"}