studiograph 1.3.3-next.9 → 1.3.4

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 (282) hide show
  1. package/dist/agent/orchestrator.d.ts +2 -0
  2. package/dist/agent/orchestrator.js +13 -5
  3. package/dist/agent/orchestrator.js.map +1 -1
  4. package/dist/agent/skills/sync-configuration.md +4 -29
  5. package/dist/agent/skills/sync-setup.md +2 -4
  6. package/dist/agent/tools/ops-tools.js +15 -126
  7. package/dist/agent/tools/ops-tools.js.map +1 -1
  8. package/dist/agent/tools/sync-tools.d.ts +7 -6
  9. package/dist/agent/tools/sync-tools.js +205 -178
  10. package/dist/agent/tools/sync-tools.js.map +1 -1
  11. package/dist/cli/commands/about.d.ts +13 -0
  12. package/dist/cli/commands/about.js +97 -0
  13. package/dist/cli/commands/about.js.map +1 -0
  14. package/dist/cli/commands/clone.d.ts +5 -2
  15. package/dist/cli/commands/clone.js +131 -62
  16. package/dist/cli/commands/clone.js.map +1 -1
  17. package/dist/cli/commands/connector.d.ts +2 -16
  18. package/dist/cli/commands/connector.js +32 -109
  19. package/dist/cli/commands/connector.js.map +1 -1
  20. package/dist/cli/commands/deploy.d.ts +0 -1
  21. package/dist/cli/commands/deploy.js +13 -103
  22. package/dist/cli/commands/deploy.js.map +1 -1
  23. package/dist/cli/commands/init.js +6 -93
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/join.js +51 -1
  26. package/dist/cli/commands/join.js.map +1 -1
  27. package/dist/cli/commands/redeploy.js +1 -2
  28. package/dist/cli/commands/redeploy.js.map +1 -1
  29. package/dist/cli/commands/serve.d.ts +1 -3
  30. package/dist/cli/commands/serve.js +29 -109
  31. package/dist/cli/commands/serve.js.map +1 -1
  32. package/dist/cli/commands/start.js +1 -1
  33. package/dist/cli/commands/start.js.map +1 -1
  34. package/dist/cli/commands/sync-collection.d.ts +14 -0
  35. package/dist/cli/commands/sync-collection.js +366 -0
  36. package/dist/cli/commands/sync-collection.js.map +1 -0
  37. package/dist/cli/commands/sync.js +518 -82
  38. package/dist/cli/commands/sync.js.map +1 -1
  39. package/dist/cli/index.js +12 -30
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/cli/setup-wizard.d.ts +0 -13
  42. package/dist/cli/setup-wizard.js +6 -81
  43. package/dist/cli/setup-wizard.js.map +1 -1
  44. package/dist/core/types.d.ts +140 -21
  45. package/dist/core/types.js +15 -4
  46. package/dist/core/types.js.map +1 -1
  47. package/dist/core/workspace.d.ts +11 -4
  48. package/dist/core/workspace.js +61 -26
  49. package/dist/core/workspace.js.map +1 -1
  50. package/dist/integrations/asana.d.ts +26 -0
  51. package/dist/integrations/asana.js +77 -0
  52. package/dist/integrations/asana.js.map +1 -0
  53. package/dist/integrations/figma-local.d.ts +16 -0
  54. package/dist/integrations/figma-local.js +10 -0
  55. package/dist/integrations/figma-local.js.map +1 -0
  56. package/dist/integrations/figma.d.ts +17 -0
  57. package/dist/integrations/figma.js +16 -0
  58. package/dist/integrations/figma.js.map +1 -0
  59. package/dist/integrations/granola.d.ts +24 -0
  60. package/dist/integrations/granola.js +59 -0
  61. package/dist/integrations/granola.js.map +1 -0
  62. package/dist/integrations/linear.d.ts +14 -0
  63. package/dist/integrations/linear.js +70 -0
  64. package/dist/integrations/linear.js.map +1 -0
  65. package/dist/integrations/paper-local.d.ts +14 -0
  66. package/dist/integrations/paper-local.js +10 -0
  67. package/dist/integrations/paper-local.js.map +1 -0
  68. package/dist/integrations/paper.d.ts +2 -0
  69. package/dist/integrations/paper.js +10 -0
  70. package/dist/integrations/paper.js.map +1 -0
  71. package/dist/integrations/pipedrive.d.ts +26 -0
  72. package/dist/integrations/pipedrive.js +97 -0
  73. package/dist/integrations/pipedrive.js.map +1 -0
  74. package/dist/integrations/registry.d.ts +15 -0
  75. package/dist/integrations/registry.js +27 -0
  76. package/dist/integrations/registry.js.map +1 -0
  77. package/dist/integrations/types.d.ts +34 -0
  78. package/dist/integrations/types.js +9 -0
  79. package/dist/integrations/types.js.map +1 -0
  80. package/dist/mcp/connector-manager.d.ts +45 -31
  81. package/dist/mcp/connector-manager.js +164 -116
  82. package/dist/mcp/connector-manager.js.map +1 -1
  83. package/dist/mcp/server-oauth-provider.d.ts +56 -0
  84. package/dist/mcp/server-oauth-provider.js +138 -0
  85. package/dist/mcp/server-oauth-provider.js.map +1 -0
  86. package/dist/server/chrome/chrome.css +142 -28
  87. package/dist/server/chrome/chrome.js +51 -25
  88. package/dist/server/collab-authority.d.ts +70 -0
  89. package/dist/server/collab-authority.js +218 -0
  90. package/dist/server/collab-authority.js.map +1 -0
  91. package/dist/server/collab.d.ts +29 -0
  92. package/dist/server/collab.js +195 -0
  93. package/dist/server/collab.js.map +1 -0
  94. package/dist/server/commit-scheduler.d.ts +1 -1
  95. package/dist/server/commit-scheduler.js +18 -4
  96. package/dist/server/commit-scheduler.js.map +1 -1
  97. package/dist/server/index.d.ts +0 -2
  98. package/dist/server/index.js +89 -18
  99. package/dist/server/index.js.map +1 -1
  100. package/dist/server/routes/auth-api.d.ts +6 -0
  101. package/dist/server/routes/auth-api.js +55 -0
  102. package/dist/server/routes/auth-api.js.map +1 -1
  103. package/dist/server/routes/collab.d.ts +6 -0
  104. package/dist/server/routes/collab.js +10 -0
  105. package/dist/server/routes/collab.js.map +1 -0
  106. package/dist/server/routes/git-http.d.ts +1 -1
  107. package/dist/server/routes/git-http.js +53 -15
  108. package/dist/server/routes/git-http.js.map +1 -1
  109. package/dist/server/routes/graph-api.d.ts +2 -2
  110. package/dist/server/routes/graph-api.js +59 -55
  111. package/dist/server/routes/graph-api.js.map +1 -1
  112. package/dist/server/routes/mcp.d.ts +12 -0
  113. package/dist/server/routes/mcp.js +35 -0
  114. package/dist/server/routes/mcp.js.map +1 -0
  115. package/dist/server/routes/permissions-api.d.ts +2 -1
  116. package/dist/server/routes/permissions-api.js +16 -2
  117. package/dist/server/routes/permissions-api.js.map +1 -1
  118. package/dist/server/routes/sync-api.d.ts +26 -0
  119. package/dist/server/routes/sync-api.js +757 -0
  120. package/dist/server/routes/sync-api.js.map +1 -0
  121. package/dist/server/routes/ws.d.ts +4 -2
  122. package/dist/server/routes/ws.js +100 -4
  123. package/dist/server/routes/ws.js.map +1 -1
  124. package/dist/server/session-manager.d.ts +40 -0
  125. package/dist/server/session-manager.js +132 -0
  126. package/dist/server/session-manager.js.map +1 -0
  127. package/dist/server/ws-hub.d.ts +95 -1
  128. package/dist/server/ws-hub.js +192 -5
  129. package/dist/server/ws-hub.js.map +1 -1
  130. package/dist/server/yjs-manager.d.ts +59 -0
  131. package/dist/server/yjs-manager.js +194 -0
  132. package/dist/server/yjs-manager.js.map +1 -0
  133. package/dist/services/auth-service.d.ts +30 -2
  134. package/dist/services/auth-service.js +116 -11
  135. package/dist/services/auth-service.js.map +1 -1
  136. package/dist/services/git.d.ts +6 -0
  137. package/dist/services/git.js +32 -2
  138. package/dist/services/git.js.map +1 -1
  139. package/dist/services/sync/collection-sync.d.ts +73 -0
  140. package/dist/services/sync/collection-sync.js +726 -0
  141. package/dist/services/sync/collection-sync.js.map +1 -0
  142. package/dist/services/sync/commit.js +5 -20
  143. package/dist/services/sync/commit.js.map +1 -1
  144. package/dist/services/sync/data-fetcher.d.ts +31 -0
  145. package/dist/services/sync/data-fetcher.js +12 -0
  146. package/dist/services/sync/data-fetcher.js.map +1 -0
  147. package/dist/services/sync/entity-refresh.d.ts +30 -0
  148. package/dist/services/sync/entity-refresh.js +275 -0
  149. package/dist/services/sync/entity-refresh.js.map +1 -0
  150. package/dist/services/sync/frontmatter-extractor.d.ts +2 -2
  151. package/dist/services/sync/frontmatter-extractor.js +1 -2
  152. package/dist/services/sync/frontmatter-extractor.js.map +1 -1
  153. package/dist/services/sync/graph-match.js +1 -1
  154. package/dist/services/sync/graph-match.js.map +1 -1
  155. package/dist/services/sync/mcp-client.d.ts +16 -4
  156. package/dist/services/sync/mcp-client.js +34 -20
  157. package/dist/services/sync/mcp-client.js.map +1 -1
  158. package/dist/services/sync/prompts.js +1 -1
  159. package/dist/services/sync/reconciler.js +1 -2
  160. package/dist/services/sync/reconciler.js.map +1 -1
  161. package/dist/services/sync/rest-client.d.ts +40 -0
  162. package/dist/services/sync/rest-client.js +100 -0
  163. package/dist/services/sync/rest-client.js.map +1 -0
  164. package/dist/services/sync/source-config.d.ts +23 -1
  165. package/dist/services/sync/source-config.js +112 -16
  166. package/dist/services/sync/source-config.js.map +1 -1
  167. package/dist/services/sync/source-definitions/asana.d.ts +3 -4
  168. package/dist/services/sync/source-definitions/asana.js +7 -13
  169. package/dist/services/sync/source-definitions/asana.js.map +1 -1
  170. package/dist/services/sync/source-definitions/definitions.d.ts +5 -18
  171. package/dist/services/sync/source-definitions/definitions.js +4 -22
  172. package/dist/services/sync/source-definitions/definitions.js.map +1 -1
  173. package/dist/services/sync/source-definitions/granola.d.ts +1 -1
  174. package/dist/services/sync/source-definitions/granola.js +11 -18
  175. package/dist/services/sync/source-definitions/granola.js.map +1 -1
  176. package/dist/services/sync/source-definitions/linear.d.ts +1 -1
  177. package/dist/services/sync/source-definitions/linear.js +17 -15
  178. package/dist/services/sync/source-definitions/linear.js.map +1 -1
  179. package/dist/services/sync/source-definitions/pipedrive.d.ts +1 -1
  180. package/dist/services/sync/source-definitions/pipedrive.js +6 -15
  181. package/dist/services/sync/source-definitions/pipedrive.js.map +1 -1
  182. package/dist/services/sync/staging.js +1 -2
  183. package/dist/services/sync/staging.js.map +1 -1
  184. package/dist/services/sync/structured-extractor.d.ts +8 -2
  185. package/dist/services/sync/structured-extractor.js +243 -35
  186. package/dist/services/sync/structured-extractor.js.map +1 -1
  187. package/dist/services/sync/types.d.ts +192 -23
  188. package/dist/services/sync/unstructured-extractor.d.ts +1 -3
  189. package/dist/services/sync/unstructured-extractor.js +2 -14
  190. package/dist/services/sync/unstructured-extractor.js.map +1 -1
  191. package/dist/utils/git.d.ts +24 -20
  192. package/dist/utils/git.js +99 -65
  193. package/dist/utils/git.js.map +1 -1
  194. package/dist/utils/preflight.d.ts +1 -15
  195. package/dist/utils/preflight.js +1 -35
  196. package/dist/utils/preflight.js.map +1 -1
  197. package/dist/web/_app/immutable/assets/0.CupILLQs.css +1 -0
  198. package/dist/web/_app/immutable/assets/3.CtJi4Cy9.css +1 -0
  199. package/dist/web/_app/immutable/assets/5.CydFyZSu.css +1 -0
  200. package/dist/web/_app/immutable/assets/6.kqeOo0OW.css +1 -0
  201. package/dist/web/_app/immutable/assets/7.CseIx7qQ.css +1 -0
  202. package/dist/web/_app/immutable/assets/{8.Sm6jB3a0.css → 8.BYpFDZHK.css} +1 -1
  203. package/dist/web/_app/immutable/assets/AppShell.Ch_ef9hJ.css +1 -0
  204. package/dist/web/_app/immutable/assets/ChatPanel.CP-_8txt.css +1 -0
  205. package/dist/web/_app/immutable/chunks/0oxpWEgM.js +1 -0
  206. package/dist/web/_app/immutable/chunks/B1y7Wy5O.js +18 -0
  207. package/dist/web/_app/immutable/chunks/B7eduG_j.js +64 -0
  208. package/dist/web/_app/immutable/chunks/BBLgaWN8.js +1 -0
  209. package/dist/web/_app/immutable/chunks/BCB5cYCz.js +2 -0
  210. package/dist/web/_app/immutable/chunks/{aosHekRC.js → BPUy9_sS.js} +1 -1
  211. package/dist/web/_app/immutable/chunks/BVBRzmeQ.js +7 -0
  212. package/dist/web/_app/immutable/chunks/{CUzqHQY_.js → BXuvR8Ks.js} +2 -1
  213. package/dist/web/_app/immutable/chunks/BeBar3OL.js +1 -0
  214. package/dist/web/_app/immutable/chunks/BuOTIbJu.js +1 -0
  215. package/dist/web/_app/immutable/chunks/CLFba8FK.js +5 -0
  216. package/dist/web/_app/immutable/chunks/CQCkXCml.js +1 -0
  217. package/dist/web/_app/immutable/chunks/CXuhHL4d.js +1 -0
  218. package/dist/web/_app/immutable/chunks/Cg9NOuOl.js +27 -0
  219. package/dist/web/_app/immutable/chunks/Cs5oz2oJ.js +5 -0
  220. package/dist/web/_app/immutable/chunks/Cs_ROD7H.js +2 -0
  221. package/dist/web/_app/immutable/chunks/D2aTbzFm.js +3 -0
  222. package/dist/web/_app/immutable/chunks/D4FXhiC2.js +1 -0
  223. package/dist/web/_app/immutable/chunks/D4VHRYeB.js +1 -0
  224. package/dist/web/_app/immutable/chunks/DCGSm8Hl.js +1 -0
  225. package/dist/web/_app/immutable/chunks/DP09rP34.js +2 -0
  226. package/dist/web/_app/immutable/chunks/DiP47fAp.js +1 -0
  227. package/dist/web/_app/immutable/chunks/DptGlK8O.js +1 -0
  228. package/dist/web/_app/immutable/chunks/O0fx2ss6.js +1 -0
  229. package/dist/web/_app/immutable/chunks/xBRYfpah.js +1 -0
  230. package/dist/web/_app/immutable/entry/app.FgnywZP_.js +2 -0
  231. package/dist/web/_app/immutable/entry/start.Bsa-zlPf.js +1 -0
  232. package/dist/web/_app/immutable/nodes/0.D3SW-LMc.js +10 -0
  233. package/dist/web/_app/immutable/nodes/1.y0c5TQTP.js +1 -0
  234. package/dist/web/_app/immutable/nodes/2.BQfSep9-.js +1 -0
  235. package/dist/web/_app/immutable/nodes/3.CC4Y-xMM.js +11 -0
  236. package/dist/web/_app/immutable/nodes/4.Dp0Z-oPW.js +4 -0
  237. package/dist/web/_app/immutable/nodes/5.gjZ03DON.js +2 -0
  238. package/dist/web/_app/immutable/nodes/6.dRNIwcJQ.js +1 -0
  239. package/dist/web/_app/immutable/nodes/7.I4Gjes3o.js +2 -0
  240. package/dist/web/_app/immutable/nodes/8.Dj14D7uH.js +1 -0
  241. package/dist/web/_app/version.json +1 -1
  242. package/dist/web/index.html +10 -12
  243. package/package.json +4 -2
  244. package/dist/web/_app/immutable/assets/0.CF0XhAap.css +0 -1
  245. package/dist/web/_app/immutable/assets/3.BJy7pVXi.css +0 -1
  246. package/dist/web/_app/immutable/assets/4.Ad16uh9o.css +0 -1
  247. package/dist/web/_app/immutable/assets/6.Bm2i7O0j.css +0 -1
  248. package/dist/web/_app/immutable/assets/7.Cn2DG-J6.css +0 -1
  249. package/dist/web/_app/immutable/assets/AppShell.CztjTuKY.css +0 -1
  250. package/dist/web/_app/immutable/assets/ChatPanel.RFD5GGYI.css +0 -1
  251. package/dist/web/_app/immutable/assets/editor.CPAf2SRV.css +0 -1
  252. package/dist/web/_app/immutable/chunks/4QY4j-jX.js +0 -1
  253. package/dist/web/_app/immutable/chunks/B3Kdf1r4.js +0 -6
  254. package/dist/web/_app/immutable/chunks/BIo3H1KR.js +0 -2
  255. package/dist/web/_app/immutable/chunks/BJLM1w2L.js +0 -23
  256. package/dist/web/_app/immutable/chunks/BLCwEMdm.js +0 -1
  257. package/dist/web/_app/immutable/chunks/BSYvCVJt.js +0 -1
  258. package/dist/web/_app/immutable/chunks/Ba5JX1o9.js +0 -1
  259. package/dist/web/_app/immutable/chunks/Bj34y868.js +0 -64
  260. package/dist/web/_app/immutable/chunks/BrWpHgBJ.js +0 -1
  261. package/dist/web/_app/immutable/chunks/C3g_lwol.js +0 -1
  262. package/dist/web/_app/immutable/chunks/CXnPm09s.js +0 -1
  263. package/dist/web/_app/immutable/chunks/ClOTom10.js +0 -1
  264. package/dist/web/_app/immutable/chunks/CtT4aw_G.js +0 -1
  265. package/dist/web/_app/immutable/chunks/Dh_H7Owr.js +0 -18
  266. package/dist/web/_app/immutable/chunks/DnlgZ_Tk.js +0 -5
  267. package/dist/web/_app/immutable/chunks/DtVH--hH.js +0 -6
  268. package/dist/web/_app/immutable/chunks/Dzd9kdLj.js +0 -2
  269. package/dist/web/_app/immutable/chunks/L91a_BGe.js +0 -1
  270. package/dist/web/_app/immutable/chunks/bHAllEMt.js +0 -1
  271. package/dist/web/_app/immutable/entry/app.CdrgaaFb.js +0 -2
  272. package/dist/web/_app/immutable/entry/start.t9LMjt48.js +0 -1
  273. package/dist/web/_app/immutable/nodes/0.P-Xfebn4.js +0 -2
  274. package/dist/web/_app/immutable/nodes/1.DiZlq1e6.js +0 -1
  275. package/dist/web/_app/immutable/nodes/2.ByIZ5J2p.js +0 -1
  276. package/dist/web/_app/immutable/nodes/3.D7JhktsZ.js +0 -1
  277. package/dist/web/_app/immutable/nodes/4.BtMeWbPx.js +0 -16
  278. package/dist/web/_app/immutable/nodes/5.CCYG1pbQ.js +0 -4
  279. package/dist/web/_app/immutable/nodes/6.CL_Ah04j.js +0 -2
  280. package/dist/web/_app/immutable/nodes/7.BMTaosAj.js +0 -1
  281. package/dist/web/_app/immutable/nodes/8.mrPg67cz.js +0 -1
  282. /package/dist/web/_app/immutable/assets/{5.BhKgiXd2.css → 4.BhKgiXd2.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-api.js","sourceRoot":"","sources":["../../../src/server/routes/sync-api.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  /**
2
- * WebSocket endpoint — authenticates connections and registers them with the hub.
2
+ * WebSocket endpoint — authenticates connections, registers them with the hub,
3
+ * and handles Yjs binary sync/awareness messages via YjsManager.
3
4
  */
4
5
  import type { FastifyInstance } from 'fastify';
5
6
  import type { AuthService } from '../../services/auth-service.js';
6
7
  import type { WsHub } from '../ws-hub.js';
7
- export declare function registerWsRoute(fastify: FastifyInstance, wsHub: WsHub, authService: AuthService): Promise<void>;
8
+ import type { YjsManager } from '../yjs-manager.js';
9
+ export declare function registerWsRoute(fastify: FastifyInstance, wsHub: WsHub, authService: AuthService, yjsManager: YjsManager): Promise<void>;
@@ -1,7 +1,8 @@
1
1
  /**
2
- * WebSocket endpoint — authenticates connections and registers them with the hub.
2
+ * WebSocket endpoint — authenticates connections, registers them with the hub,
3
+ * and handles Yjs binary sync/awareness messages via YjsManager.
3
4
  */
4
- export async function registerWsRoute(fastify, wsHub, authService) {
5
+ export async function registerWsRoute(fastify, wsHub, authService, yjsManager) {
5
6
  fastify.get('/ws', { websocket: true }, (socket, req) => {
6
7
  // Authenticate via JWT cookie or ?token= query param
7
8
  const cookies = req.cookies;
@@ -20,16 +21,111 @@ export async function registerWsRoute(fastify, wsHub, authService) {
20
21
  socket.close(4001, 'Invalid token');
21
22
  return;
22
23
  }
23
- // Determine accessible collections for this user
24
24
  const collections = user.role === 'admin'
25
- ? null // admin sees all
25
+ ? null
26
26
  : authService.getUserCollections(user.id);
27
+ const collectionSet = collections ? new Set(collections) : null;
27
28
  wsHub.addClient(socket, user, collections);
29
+ wsHub.sendPresenceSnapshot(socket, collectionSet);
30
+ socket.on('message', (raw) => {
31
+ // Binary messages = Yjs sync/awareness protocol
32
+ if (Buffer.isBuffer(raw) && raw.length >= 3 && raw[0] !== 0x7b) {
33
+ handleYjsBinary(yjsManager, socket, raw);
34
+ return;
35
+ }
36
+ handleClientMessage(wsHub, yjsManager, socket, raw, String(user.id), user.displayName);
37
+ });
38
+ socket.on('close', () => yjsManager.removeClientFromAll(socket));
28
39
  }
29
40
  else {
30
41
  // Open mode — no auth, all collections
31
42
  wsHub.addClient(socket, null, null);
43
+ wsHub.sendPresenceSnapshot(socket, null);
44
+ socket.on('message', (raw) => {
45
+ if (Buffer.isBuffer(raw) && raw.length >= 3 && raw[0] !== 0x7b) {
46
+ handleYjsBinary(yjsManager, socket, raw);
47
+ return;
48
+ }
49
+ handleClientMessage(wsHub, yjsManager, socket, raw, 'anon', 'Anonymous');
50
+ });
51
+ socket.on('close', () => yjsManager.removeClientFromAll(socket));
32
52
  }
33
53
  });
34
54
  }
55
+ /**
56
+ * Handle a binary Yjs frame. Parses the docName and message type from the
57
+ * frame header and delegates to YjsManager.
58
+ *
59
+ * Frame format: [2B docName length, uint16 BE][docName UTF-8][1B msgType][payload]
60
+ */
61
+ function handleYjsBinary(yjsManager, sender, raw) {
62
+ try {
63
+ const docNameLen = raw.readUInt16BE(0);
64
+ if (raw.length < 2 + docNameLen + 1)
65
+ return;
66
+ const docName = raw.subarray(2, 2 + docNameLen).toString('utf8');
67
+ const msgType = raw[2 + docNameLen];
68
+ const payload = raw.subarray(2 + docNameLen + 1);
69
+ yjsManager.handleMessage(docName, sender, msgType, payload);
70
+ }
71
+ catch {
72
+ // ignore malformed binary frames
73
+ }
74
+ }
75
+ function handleClientMessage(wsHub, yjsManager, socket, raw, userId, userName) {
76
+ // Binary frames → Yjs sync/awareness protocol (NOT JSON)
77
+ if (Buffer.isBuffer(raw) && raw.length >= 3) {
78
+ // Decode binary frame: [2B nameLen][name][1B msgType][payload]
79
+ const nameLen = raw.readUInt16BE(0);
80
+ if (nameLen > 0 && 2 + nameLen + 1 <= raw.length) {
81
+ const docName = raw.subarray(2, 2 + nameLen).toString('utf-8');
82
+ const msgType = raw[2 + nameLen];
83
+ const payload = raw.subarray(2 + nameLen + 1);
84
+ yjsManager.handleMessage(docName, socket, msgType, payload);
85
+ return;
86
+ }
87
+ }
88
+ try {
89
+ const msg = JSON.parse(typeof raw === 'string' ? raw : raw.toString());
90
+ if (msg?.type === 'pong') {
91
+ wsHub.handlePong(socket);
92
+ return;
93
+ }
94
+ if (msg?.type === 'presence' && msg.action && msg.repo && msg.entityType && msg.entityId) {
95
+ wsHub.handlePresence(msg.action, msg.repo, msg.entityType, msg.entityId, { id: userId, name: userName });
96
+ // On enter: immediately send back current presence so the client
97
+ // doesn't have to wait for others' 30s heartbeats.
98
+ if (msg.action === 'enter') {
99
+ const now = new Date().toISOString();
100
+ for (const user of wsHub.getPresence(msg.repo, msg.entityType, msg.entityId)) {
101
+ if (user.id === userId)
102
+ continue;
103
+ socket.send(JSON.stringify({
104
+ type: 'presence',
105
+ action: 'enter',
106
+ repo: msg.repo,
107
+ entityType: msg.entityType,
108
+ entityId: msg.entityId,
109
+ user,
110
+ timestamp: now,
111
+ }));
112
+ }
113
+ }
114
+ return;
115
+ }
116
+ // collab:join — register client for a Yjs doc (server seeds Y.Doc from disk)
117
+ if (msg?.type === 'collab:join' && msg.docName) {
118
+ yjsManager.addClient(msg.docName, socket);
119
+ return;
120
+ }
121
+ // collab:leave — unregister from a Yjs doc
122
+ if (msg?.type === 'collab:leave' && msg.docName) {
123
+ yjsManager.removeClient(msg.docName, socket);
124
+ return;
125
+ }
126
+ }
127
+ catch {
128
+ // ignore malformed messages
129
+ }
130
+ }
35
131
  //# sourceMappingURL=ws.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/server/routes/ws.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB,EACxB,KAAY,EACZ,WAAwB;IAExB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QACtD,qDAAqD;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,OAA6C,CAAC;QAClE,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAI,GAAG,CAAC,KAAgC,EAAE,KAAK,CAAC;QAClE,MAAM,KAAK,GAAG,aAAa,IAAI,YAAY,CAAC;QAE5C,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACvD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;gBACnC,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,iDAAiD;YACjD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO;gBACvC,CAAC,CAAC,IAAI,CAAE,iBAAiB;gBACzB,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE5C,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../src/server/routes/ws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Session Manager — groups web UI entity edits into edit sessions for clean git history.
3
+ *
4
+ * Each session is scoped to a (user, repo) pair. Edits extend the session's
5
+ * idle timer. When a session goes idle for SESSION_IDLE_MS, a single commit
6
+ * is made covering all entities touched during that session, and a
7
+ * `session_commit` WebSocket event is broadcast.
8
+ *
9
+ * This replaces the old CommitScheduler 30s threshold with a 5-minute idle
10
+ * window per user, preventing git history pollution while keeping attribution
11
+ * accurate per user.
12
+ */
13
+ import type { WorkspaceManager } from '../core/workspace-manager.js';
14
+ import type { GitUser } from '../services/git.js';
15
+ import type { WsHub } from './ws-hub.js';
16
+ export declare class SessionManager {
17
+ private sessions;
18
+ private timer;
19
+ private workspaceManager;
20
+ private wsHub;
21
+ constructor(workspaceManager: WorkspaceManager, wsHub?: WsHub);
22
+ /**
23
+ * Record a disk write within a user's session for the given repo.
24
+ * Resets the idle timer and accumulates entity + file path info.
25
+ */
26
+ markDirty(repoName: string, user: GitUser, entityType: string, entityId: string, filePath?: string): void;
27
+ /**
28
+ * Flush all sessions for a repo immediately.
29
+ * Used by the /api/repos/:repo/commit route (CLI compatibility).
30
+ * Returns true if anything was committed.
31
+ */
32
+ flush(repoName: string): Promise<boolean>;
33
+ /**
34
+ * Flush all open sessions (called on server shutdown).
35
+ */
36
+ flushAll(): Promise<void>;
37
+ private flushStale;
38
+ private commitSession;
39
+ destroy(): void;
40
+ }
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Session Manager — groups web UI entity edits into edit sessions for clean git history.
3
+ *
4
+ * Each session is scoped to a (user, repo) pair. Edits extend the session's
5
+ * idle timer. When a session goes idle for SESSION_IDLE_MS, a single commit
6
+ * is made covering all entities touched during that session, and a
7
+ * `session_commit` WebSocket event is broadcast.
8
+ *
9
+ * This replaces the old CommitScheduler 30s threshold with a 5-minute idle
10
+ * window per user, preventing git history pollution while keeping attribution
11
+ * accurate per user.
12
+ */
13
+ const SESSION_IDLE_MS = 5 * 60_000; // 5 minutes idle → commit
14
+ const CHECK_INTERVAL_MS = 30_000; // check for stale sessions every 30s
15
+ export class SessionManager {
16
+ sessions = new Map(); // key: `${userId}:${repo}`
17
+ timer = null;
18
+ workspaceManager;
19
+ wsHub;
20
+ constructor(workspaceManager, wsHub) {
21
+ this.workspaceManager = workspaceManager;
22
+ this.wsHub = wsHub;
23
+ this.timer = setInterval(() => this.flushStale(), CHECK_INTERVAL_MS);
24
+ }
25
+ /**
26
+ * Record a disk write within a user's session for the given repo.
27
+ * Resets the idle timer and accumulates entity + file path info.
28
+ */
29
+ markDirty(repoName, user, entityType, entityId, filePath) {
30
+ const key = `${user.id}:${repoName}`;
31
+ const existing = this.sessions.get(key);
32
+ if (existing) {
33
+ existing.lastActivityAt = Date.now();
34
+ existing.entities.add(`${entityType}/${entityId}`);
35
+ if (filePath)
36
+ existing.filePaths.add(filePath);
37
+ }
38
+ else {
39
+ const session = {
40
+ user,
41
+ repo: repoName,
42
+ lastActivityAt: Date.now(),
43
+ entities: new Set([`${entityType}/${entityId}`]),
44
+ filePaths: new Set(),
45
+ };
46
+ if (filePath)
47
+ session.filePaths.add(filePath);
48
+ this.sessions.set(key, session);
49
+ }
50
+ }
51
+ /**
52
+ * Flush all sessions for a repo immediately.
53
+ * Used by the /api/repos/:repo/commit route (CLI compatibility).
54
+ * Returns true if anything was committed.
55
+ */
56
+ async flush(repoName) {
57
+ const toFlush = [];
58
+ for (const [key, session] of this.sessions) {
59
+ if (session.repo === repoName)
60
+ toFlush.push([key, session]);
61
+ }
62
+ if (toFlush.length === 0)
63
+ return false;
64
+ for (const [key] of toFlush)
65
+ this.sessions.delete(key);
66
+ const results = await Promise.all(toFlush.map(([, session]) => this.commitSession(session)));
67
+ return results.some(Boolean);
68
+ }
69
+ /**
70
+ * Flush all open sessions (called on server shutdown).
71
+ */
72
+ async flushAll() {
73
+ const entries = Array.from(this.sessions.entries());
74
+ console.log(`[session-manager] flushAll: flushing ${entries.length} open session(s) on shutdown`);
75
+ this.sessions.clear();
76
+ await Promise.all(entries.map(([, session]) => this.commitSession(session)));
77
+ console.log(`[session-manager] flushAll: done`);
78
+ }
79
+ async flushStale() {
80
+ const now = Date.now();
81
+ const toFlush = [];
82
+ for (const [key, session] of this.sessions) {
83
+ if (now - session.lastActivityAt >= SESSION_IDLE_MS) {
84
+ toFlush.push([key, session]);
85
+ }
86
+ }
87
+ for (const [key] of toFlush)
88
+ this.sessions.delete(key);
89
+ await Promise.all(toFlush.map(([, session]) => this.commitSession(session)));
90
+ }
91
+ async commitSession(session) {
92
+ try {
93
+ const graph = this.workspaceManager.getGraph(session.repo);
94
+ const gitService = graph.getGitService();
95
+ if (!gitService)
96
+ return false;
97
+ if (!gitService.hasUncommittedChanges())
98
+ return false;
99
+ const entities = Array.from(session.entities);
100
+ const listed = entities.slice(0, 3).join(', ');
101
+ const overflow = entities.length > 3 ? ` (+${entities.length - 3} more)` : '';
102
+ const date = new Date().toISOString().slice(0, 10);
103
+ const message = `Edit session · ${listed}${overflow} · ${session.user.name} · ${date}`;
104
+ if (session.filePaths.size > 0) {
105
+ gitService.commitFiles(Array.from(session.filePaths), message, session.user);
106
+ }
107
+ else {
108
+ gitService.commitAll(message, session.user);
109
+ }
110
+ this.wsHub?.broadcast({
111
+ type: 'session_commit',
112
+ repo: session.repo,
113
+ entities: Array.from(session.entities),
114
+ actor: session.user.name,
115
+ timestamp: new Date().toISOString(),
116
+ });
117
+ return true;
118
+ }
119
+ catch (err) {
120
+ console.warn(`[session-manager] Failed to commit ${session.repo}:`, err.message);
121
+ return false;
122
+ }
123
+ }
124
+ destroy() {
125
+ if (this.timer) {
126
+ clearInterval(this.timer);
127
+ this.timer = null;
128
+ }
129
+ this.sessions.clear();
130
+ }
131
+ }
132
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/server/session-manager.ts"],"names":[],"mappings":"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"}
@@ -23,13 +23,107 @@ export interface WsRepoSyncEvent {
23
23
  actor: string;
24
24
  timestamp: string;
25
25
  }
26
- export type WsEvent = WsChangeEvent | WsRepoSyncEvent;
26
+ /** Emitted when a user's edit session closes and changes are committed. */
27
+ export interface WsSessionCommitEvent {
28
+ type: 'session_commit';
29
+ repo: string;
30
+ entities: string[];
31
+ actor: string;
32
+ timestamp: string;
33
+ }
34
+ /** Emitted when a sync pipeline run completes for a collection. */
35
+ export interface WsSyncCompleteEvent {
36
+ type: 'sync_complete';
37
+ repo: string;
38
+ source: string;
39
+ created: number;
40
+ updated: number;
41
+ deleted: number;
42
+ actor: string;
43
+ timestamp: string;
44
+ }
45
+ /** Emitted during a sync run to report progress steps. */
46
+ export interface WsSyncProgressEvent {
47
+ type: 'sync_progress';
48
+ repo: string;
49
+ message: string;
50
+ actor: string;
51
+ timestamp: string;
52
+ }
53
+ /** Emitted when a collection is created or deleted. */
54
+ export interface WsCollectionEvent {
55
+ type: 'collection_created' | 'collection_deleted';
56
+ repo: string;
57
+ actor: string;
58
+ timestamp: string;
59
+ }
60
+ /** Emitted when a user's access to a collection is granted or revoked. */
61
+ export interface WsAccessEvent {
62
+ type: 'access_granted' | 'access_revoked';
63
+ repo: string;
64
+ userId: string;
65
+ actor: string;
66
+ timestamp: string;
67
+ }
68
+ /** Emitted when a user connects or disconnects (workspace-level online status). */
69
+ export interface WsOnlineEvent {
70
+ type: 'online';
71
+ action: 'join' | 'leave';
72
+ user: {
73
+ id: string;
74
+ name: string;
75
+ };
76
+ timestamp: string;
77
+ }
78
+ /** Emitted when a user enters or leaves an entity view (presence). */
79
+ export interface WsPresenceEvent {
80
+ type: 'presence';
81
+ action: 'enter' | 'leave' | 'heartbeat';
82
+ repo: string;
83
+ entityType: string;
84
+ entityId: string;
85
+ user: {
86
+ id: string;
87
+ name: string;
88
+ color?: string;
89
+ };
90
+ timestamp: string;
91
+ }
92
+ export type WsEvent = WsChangeEvent | WsRepoSyncEvent | WsSessionCommitEvent | WsSyncCompleteEvent | WsSyncProgressEvent | WsCollectionEvent | WsPresenceEvent | WsOnlineEvent | WsAccessEvent;
27
93
  export declare class WsHub {
28
94
  private clients;
29
95
  private heartbeatTimer;
96
+ private presenceMap;
97
+ private onlineMap;
30
98
  constructor();
31
99
  addClient(ws: WebSocket, user: AuthUser | null, collections: string[] | null): void;
100
+ /**
101
+ * Handle a presence message sent by a client.
102
+ * Updates server-side presence state and broadcasts to collection peers.
103
+ */
104
+ handlePresence(action: 'enter' | 'leave' | 'heartbeat', repo: string, entityType: string, entityId: string, user: {
105
+ id: string;
106
+ name: string;
107
+ color?: string;
108
+ }): void;
109
+ /** Return current presence for an entity (for initial state on connect). */
110
+ getPresence(repo: string, entityType: string, entityId: string): Array<{
111
+ id: string;
112
+ name: string;
113
+ color?: string;
114
+ }>;
115
+ /** Send the full current presence map to a single newly connected client. */
116
+ sendPresenceSnapshot(ws: WebSocket, collections: Set<string> | null): void;
117
+ private broadcastOnline;
118
+ private sendOnlineSnapshot;
119
+ private clearUserPresence;
32
120
  broadcast(event: WsEvent): void;
121
+ /** Send an event directly to all connections belonging to a specific user, bypassing repo filtering. */
122
+ broadcastToUser(userId: string, event: WsEvent): void;
123
+ /** Record an app-level pong from a client (called by ws route on message). */
124
+ handlePong(ws: WebSocket): void;
125
+ /** Iterate over all connected client sockets (for collab broadcasting). */
126
+ forEachSocket(fn: (ws: WebSocket) => void): void;
33
127
  get connectionCount(): number;
34
128
  destroy(): void;
35
129
  private canReceive;