studiograph 1.3.48-next.21 → 1.3.48-next.211

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 (966) hide show
  1. package/README.md +26 -16
  2. package/dist/agent/agent-pool.d.ts +87 -3
  3. package/dist/agent/agent-pool.js +188 -15
  4. package/dist/agent/agent-pool.js.map +1 -1
  5. package/dist/agent/followups.d.ts +34 -0
  6. package/dist/agent/followups.js +52 -0
  7. package/dist/agent/followups.js.map +1 -0
  8. package/dist/agent/orchestrator.d.ts +101 -4
  9. package/dist/agent/orchestrator.js +464 -66
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +34 -0
  12. package/dist/agent/prompts/entity-types-section.js +76 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +112 -54
  15. package/dist/agent/skill-loader.d.ts +30 -17
  16. package/dist/agent/skill-loader.js +63 -30
  17. package/dist/agent/skill-loader.js.map +1 -1
  18. package/dist/agent/skills/artifact-canvas/skill.md +152 -0
  19. package/dist/agent/skills/entity-schema.md +75 -431
  20. package/dist/agent/skills/interview/entity-templates.md +38 -37
  21. package/dist/agent/skills/interview/question-domains.md +54 -49
  22. package/dist/agent/skills/interview/skill.md +84 -16
  23. package/dist/agent/skills/schema-rules.md +28 -28
  24. package/dist/agent/tools/artifact-tools.d.ts +124 -0
  25. package/dist/agent/tools/artifact-tools.js +207 -0
  26. package/dist/agent/tools/artifact-tools.js.map +1 -0
  27. package/dist/agent/tools/capture-tools.d.ts +31 -0
  28. package/dist/agent/tools/capture-tools.js +40 -0
  29. package/dist/agent/tools/capture-tools.js.map +1 -0
  30. package/dist/agent/tools/folder-tools.d.ts +47 -0
  31. package/dist/agent/tools/folder-tools.js +249 -0
  32. package/dist/agent/tools/folder-tools.js.map +1 -0
  33. package/dist/agent/tools/fs-tools.d.ts +6 -5
  34. package/dist/agent/tools/fs-tools.js +5 -5
  35. package/dist/agent/tools/fs-tools.js.map +1 -1
  36. package/dist/agent/tools/graph-tools.d.ts +48 -72
  37. package/dist/agent/tools/graph-tools.js +852 -329
  38. package/dist/agent/tools/graph-tools.js.map +1 -1
  39. package/dist/agent/tools/history-tools.d.ts +95 -0
  40. package/dist/agent/tools/history-tools.js +461 -0
  41. package/dist/agent/tools/history-tools.js.map +1 -0
  42. package/dist/agent/tools/load-skill.d.ts +6 -5
  43. package/dist/agent/tools/load-skill.js +3 -3
  44. package/dist/agent/tools/load-skill.js.map +1 -1
  45. package/dist/agent/tools/ops-tools.d.ts +5 -4
  46. package/dist/agent/tools/ops-tools.js +130 -236
  47. package/dist/agent/tools/ops-tools.js.map +1 -1
  48. package/dist/agent/tools/permission-tools.d.ts +87 -17
  49. package/dist/agent/tools/permission-tools.js +233 -43
  50. package/dist/agent/tools/permission-tools.js.map +1 -1
  51. package/dist/agent/tools/tool-loader.js +5 -4
  52. package/dist/agent/tools/tool-loader.js.map +1 -1
  53. package/dist/agent/tools/web-tools.js +58 -9
  54. package/dist/agent/tools/web-tools.js.map +1 -1
  55. package/dist/cli/commands/about.d.ts +1 -0
  56. package/dist/cli/commands/about.js +55 -3
  57. package/dist/cli/commands/about.js.map +1 -1
  58. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  59. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  60. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  61. package/dist/cli/commands/admin/audit.d.ts +21 -0
  62. package/dist/cli/commands/admin/audit.js +174 -0
  63. package/dist/cli/commands/admin/audit.js.map +1 -0
  64. package/dist/cli/commands/admin/backup.d.ts +54 -0
  65. package/dist/cli/commands/admin/backup.js +207 -0
  66. package/dist/cli/commands/admin/backup.js.map +1 -0
  67. package/dist/cli/commands/admin/folder.d.ts +11 -0
  68. package/dist/cli/commands/{collection.js → admin/folder.js} +33 -32
  69. package/dist/cli/commands/admin/folder.js.map +1 -0
  70. package/dist/cli/commands/admin/index.d.ts +16 -0
  71. package/dist/cli/commands/admin/index.js +46 -0
  72. package/dist/cli/commands/admin/index.js.map +1 -0
  73. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  74. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  75. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  76. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  77. package/dist/cli/commands/admin/migrate.js +263 -0
  78. package/dist/cli/commands/admin/migrate.js.map +1 -0
  79. package/dist/cli/commands/admin/restore.d.ts +24 -0
  80. package/dist/cli/commands/admin/restore.js +228 -0
  81. package/dist/cli/commands/admin/restore.js.map +1 -0
  82. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  83. package/dist/cli/commands/admin/secrets.js +256 -0
  84. package/dist/cli/commands/admin/secrets.js.map +1 -0
  85. package/dist/cli/commands/admin/settings.d.ts +28 -0
  86. package/dist/cli/commands/admin/settings.js +284 -0
  87. package/dist/cli/commands/admin/settings.js.map +1 -0
  88. package/dist/cli/commands/admin/token.d.ts +42 -0
  89. package/dist/cli/commands/admin/token.js +126 -0
  90. package/dist/cli/commands/admin/token.js.map +1 -0
  91. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  92. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  93. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  94. package/dist/cli/commands/admin/user.d.ts +11 -0
  95. package/dist/cli/commands/admin/user.js +187 -0
  96. package/dist/cli/commands/admin/user.js.map +1 -0
  97. package/dist/cli/commands/clone.d.ts +25 -3
  98. package/dist/cli/commands/clone.js +142 -36
  99. package/dist/cli/commands/clone.js.map +1 -1
  100. package/dist/cli/commands/config.d.ts +23 -107
  101. package/dist/cli/commands/config.js +52 -260
  102. package/dist/cli/commands/config.js.map +1 -1
  103. package/dist/cli/commands/connector.d.ts +10 -13
  104. package/dist/cli/commands/connector.js +16 -58
  105. package/dist/cli/commands/connector.js.map +1 -1
  106. package/dist/cli/commands/deploy.js +215 -68
  107. package/dist/cli/commands/deploy.js.map +1 -1
  108. package/dist/cli/commands/index.js +5 -1
  109. package/dist/cli/commands/index.js.map +1 -1
  110. package/dist/cli/commands/init.js +10 -30
  111. package/dist/cli/commands/init.js.map +1 -1
  112. package/dist/cli/commands/mcp.js +54 -6
  113. package/dist/cli/commands/mcp.js.map +1 -1
  114. package/dist/cli/commands/r2.d.ts +3 -0
  115. package/dist/cli/commands/r2.js +223 -204
  116. package/dist/cli/commands/r2.js.map +1 -1
  117. package/dist/cli/commands/redeploy.js +65 -12
  118. package/dist/cli/commands/redeploy.js.map +1 -1
  119. package/dist/cli/commands/reset.d.ts +22 -6
  120. package/dist/cli/commands/reset.js +132 -34
  121. package/dist/cli/commands/reset.js.map +1 -1
  122. package/dist/cli/commands/serve.js +231 -26
  123. package/dist/cli/commands/serve.js.map +1 -1
  124. package/dist/cli/commands/sync.d.ts +1 -1
  125. package/dist/cli/commands/sync.js +237 -227
  126. package/dist/cli/commands/sync.js.map +1 -1
  127. package/dist/cli/crypto-bundle.d.ts +39 -0
  128. package/dist/cli/crypto-bundle.js +94 -0
  129. package/dist/cli/crypto-bundle.js.map +1 -0
  130. package/dist/cli/index.js +24 -26
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/cli/railway-pin.d.ts +68 -0
  133. package/dist/cli/railway-pin.js +96 -0
  134. package/dist/cli/railway-pin.js.map +1 -0
  135. package/dist/cli/railway-provisioning.d.ts +53 -0
  136. package/dist/cli/railway-provisioning.js +85 -0
  137. package/dist/cli/railway-provisioning.js.map +1 -0
  138. package/dist/cli/setup-wizard.d.ts +30 -49
  139. package/dist/cli/setup-wizard.js +39 -40
  140. package/dist/cli/setup-wizard.js.map +1 -1
  141. package/dist/core/accent-palette.d.ts +22 -0
  142. package/dist/core/accent-palette.js +47 -0
  143. package/dist/core/accent-palette.js.map +1 -0
  144. package/dist/core/artifact-asset-urls.d.ts +51 -0
  145. package/dist/core/artifact-asset-urls.js +79 -0
  146. package/dist/core/artifact-asset-urls.js.map +1 -0
  147. package/dist/core/artifact-bundle.d.ts +69 -0
  148. package/dist/core/artifact-bundle.js +305 -0
  149. package/dist/core/artifact-bundle.js.map +1 -0
  150. package/dist/core/artifact-escape.d.ts +5 -0
  151. package/dist/core/artifact-escape.js +26 -0
  152. package/dist/core/artifact-escape.js.map +1 -0
  153. package/dist/core/artifact-export.d.ts +17 -0
  154. package/dist/core/artifact-export.js +529 -0
  155. package/dist/core/artifact-export.js.map +1 -0
  156. package/dist/core/cell-anchor.d.ts +29 -0
  157. package/dist/core/cell-anchor.js +53 -0
  158. package/dist/core/cell-anchor.js.map +1 -0
  159. package/dist/core/comment-anchor.d.ts +41 -0
  160. package/dist/core/comment-anchor.js +147 -0
  161. package/dist/core/comment-anchor.js.map +1 -0
  162. package/dist/core/commit-messages.d.ts +57 -0
  163. package/dist/core/commit-messages.js +85 -0
  164. package/dist/core/commit-messages.js.map +1 -0
  165. package/dist/core/embeds.d.ts +96 -0
  166. package/dist/core/embeds.js +196 -0
  167. package/dist/core/embeds.js.map +1 -0
  168. package/dist/core/entity-body-templates.d.ts +21 -0
  169. package/dist/core/entity-body-templates.js +67 -0
  170. package/dist/core/entity-body-templates.js.map +1 -0
  171. package/dist/core/entity-types-catalog.d.ts +65 -0
  172. package/dist/core/entity-types-catalog.js +142 -0
  173. package/dist/core/entity-types-catalog.js.map +1 -0
  174. package/dist/core/field-library.d.ts +62 -0
  175. package/dist/core/field-library.js +129 -0
  176. package/dist/core/field-library.js.map +1 -0
  177. package/dist/core/folder-paths.d.ts +41 -0
  178. package/dist/core/folder-paths.js +95 -0
  179. package/dist/core/folder-paths.js.map +1 -0
  180. package/dist/core/folder-sidecar.d.ts +36 -0
  181. package/dist/core/folder-sidecar.js +91 -0
  182. package/dist/core/folder-sidecar.js.map +1 -0
  183. package/dist/core/format-registry.d.ts +170 -0
  184. package/dist/core/format-registry.js +412 -0
  185. package/dist/core/format-registry.js.map +1 -0
  186. package/dist/core/graph.d.ts +773 -14
  187. package/dist/core/graph.js +2269 -308
  188. package/dist/core/graph.js.map +1 -1
  189. package/dist/core/history-diff.d.ts +35 -0
  190. package/dist/core/history-diff.js +114 -0
  191. package/dist/core/history-diff.js.map +1 -0
  192. package/dist/core/refs.d.ts +41 -0
  193. package/dist/core/refs.js +80 -0
  194. package/dist/core/refs.js.map +1 -0
  195. package/dist/core/schema-registry.d.ts +66 -0
  196. package/dist/core/schema-registry.js +198 -37
  197. package/dist/core/schema-registry.js.map +1 -1
  198. package/dist/core/schemas/connector.d.ts +67 -0
  199. package/dist/core/schemas/connector.js +100 -0
  200. package/dist/core/schemas/connector.js.map +1 -0
  201. package/dist/core/schemas/workspace.d.ts +122 -0
  202. package/dist/core/schemas/workspace.js +211 -0
  203. package/dist/core/schemas/workspace.js.map +1 -0
  204. package/dist/core/secrets/SecretStore.d.ts +77 -0
  205. package/dist/core/secrets/SecretStore.js +13 -0
  206. package/dist/core/secrets/SecretStore.js.map +1 -0
  207. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  208. package/dist/core/secrets/SettingsResolver.js +80 -0
  209. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  210. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  211. package/dist/core/secrets/SettingsStore.js +9 -0
  212. package/dist/core/secrets/SettingsStore.js.map +1 -0
  213. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  214. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  215. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  216. package/dist/core/secrets/audit.d.ts +36 -0
  217. package/dist/core/secrets/audit.js +60 -0
  218. package/dist/core/secrets/audit.js.map +1 -0
  219. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  220. package/dist/core/secrets/auth-db-migration.js +653 -0
  221. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  222. package/dist/core/secrets/bundle.d.ts +141 -0
  223. package/dist/core/secrets/bundle.js +435 -0
  224. package/dist/core/secrets/bundle.js.map +1 -0
  225. package/dist/core/secrets/dual-write.d.ts +81 -0
  226. package/dist/core/secrets/dual-write.js +247 -0
  227. package/dist/core/secrets/dual-write.js.map +1 -0
  228. package/dist/core/secrets/encryption.d.ts +44 -0
  229. package/dist/core/secrets/encryption.js +97 -0
  230. package/dist/core/secrets/encryption.js.map +1 -0
  231. package/dist/core/secrets/index.d.ts +49 -0
  232. package/dist/core/secrets/index.js +74 -0
  233. package/dist/core/secrets/index.js.map +1 -0
  234. package/dist/core/secrets/master-key.d.ts +38 -0
  235. package/dist/core/secrets/master-key.js +122 -0
  236. package/dist/core/secrets/master-key.js.map +1 -0
  237. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  238. package/dist/core/secrets/probes/anthropic.js +300 -0
  239. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  240. package/dist/core/secrets/probes/brave.d.ts +9 -0
  241. package/dist/core/secrets/probes/brave.js +15 -0
  242. package/dist/core/secrets/probes/brave.js.map +1 -0
  243. package/dist/core/secrets/probes/r2.d.ts +15 -0
  244. package/dist/core/secrets/probes/r2.js +14 -0
  245. package/dist/core/secrets/probes/r2.js.map +1 -0
  246. package/dist/core/secrets/probes/tavily.d.ts +18 -0
  247. package/dist/core/secrets/probes/tavily.js +58 -0
  248. package/dist/core/secrets/probes/tavily.js.map +1 -0
  249. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  250. package/dist/core/secrets/probes/voyage.js +52 -0
  251. package/dist/core/secrets/probes/voyage.js.map +1 -0
  252. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  253. package/dist/core/secrets/r2-structural-migration.js +109 -0
  254. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  255. package/dist/core/secrets/read-flip.d.ts +59 -0
  256. package/dist/core/secrets/read-flip.js +87 -0
  257. package/dist/core/secrets/read-flip.js.map +1 -0
  258. package/dist/core/secrets/registry.d.ts +188 -0
  259. package/dist/core/secrets/registry.js +616 -0
  260. package/dist/core/secrets/registry.js.map +1 -0
  261. package/dist/core/types.d.ts +77 -483
  262. package/dist/core/types.js +25 -3
  263. package/dist/core/types.js.map +1 -1
  264. package/dist/core/user-config.d.ts +75 -12
  265. package/dist/core/user-config.js +155 -14
  266. package/dist/core/user-config.js.map +1 -1
  267. package/dist/core/validation.d.ts +786 -1373
  268. package/dist/core/validation.js +458 -147
  269. package/dist/core/validation.js.map +1 -1
  270. package/dist/core/workspace-manager.d.ts +87 -14
  271. package/dist/core/workspace-manager.js +222 -94
  272. package/dist/core/workspace-manager.js.map +1 -1
  273. package/dist/core/workspace.d.ts +19 -5
  274. package/dist/core/workspace.js +67 -39
  275. package/dist/core/workspace.js.map +1 -1
  276. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  277. package/dist/mcp/comment-virtual-entity.js +71 -0
  278. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  279. package/dist/mcp/connector-manager.d.ts +72 -2
  280. package/dist/mcp/connector-manager.js +211 -32
  281. package/dist/mcp/connector-manager.js.map +1 -1
  282. package/dist/mcp/oauth-provider.d.ts +0 -5
  283. package/dist/mcp/oauth-provider.js +10 -22
  284. package/dist/mcp/oauth-provider.js.map +1 -1
  285. package/dist/mcp/oauth-registry.d.ts +46 -8
  286. package/dist/mcp/oauth-registry.js +52 -13
  287. package/dist/mcp/oauth-registry.js.map +1 -1
  288. package/dist/mcp/server-discovery.d.ts +73 -0
  289. package/dist/mcp/server-discovery.js +164 -0
  290. package/dist/mcp/server-discovery.js.map +1 -0
  291. package/dist/mcp/server.d.ts +24 -3
  292. package/dist/mcp/server.js +53 -10
  293. package/dist/mcp/server.js.map +1 -1
  294. package/dist/mcp/state-signer.d.ts +62 -0
  295. package/dist/mcp/state-signer.js +205 -0
  296. package/dist/mcp/state-signer.js.map +1 -0
  297. package/dist/mcp/stdio-proxy.d.ts +67 -0
  298. package/dist/mcp/stdio-proxy.js +149 -0
  299. package/dist/mcp/stdio-proxy.js.map +1 -0
  300. package/dist/mcp/tools.d.ts +65 -2
  301. package/dist/mcp/tools.js +1772 -124
  302. package/dist/mcp/tools.js.map +1 -1
  303. package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
  304. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  305. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  306. package/dist/server/artifact-asset-mint.d.ts +41 -0
  307. package/dist/server/artifact-asset-mint.js +59 -0
  308. package/dist/server/artifact-asset-mint.js.map +1 -0
  309. package/dist/server/asset-index-queue.d.ts +98 -0
  310. package/dist/server/asset-index-queue.js +193 -0
  311. package/dist/server/asset-index-queue.js.map +1 -0
  312. package/dist/server/body-write-coordinator.d.ts +161 -0
  313. package/dist/server/body-write-coordinator.js +182 -0
  314. package/dist/server/body-write-coordinator.js.map +1 -0
  315. package/dist/server/cloud-billing-flow.d.ts +32 -0
  316. package/dist/server/cloud-billing-flow.js +75 -0
  317. package/dist/server/cloud-billing-flow.js.map +1 -0
  318. package/dist/server/commit-audit.d.ts +26 -0
  319. package/dist/server/commit-audit.js +30 -0
  320. package/dist/server/commit-audit.js.map +1 -0
  321. package/dist/server/index.d.ts +29 -3
  322. package/dist/server/index.js +657 -269
  323. package/dist/server/index.js.map +1 -1
  324. package/dist/server/middleware/sanitize.d.ts +46 -0
  325. package/dist/server/middleware/sanitize.js +182 -0
  326. package/dist/server/middleware/sanitize.js.map +1 -0
  327. package/dist/server/routes/artifact-export-api.d.ts +11 -0
  328. package/dist/server/routes/artifact-export-api.js +159 -0
  329. package/dist/server/routes/artifact-export-api.js.map +1 -0
  330. package/dist/server/routes/asset-api.d.ts +76 -1
  331. package/dist/server/routes/asset-api.js +761 -61
  332. package/dist/server/routes/asset-api.js.map +1 -1
  333. package/dist/server/routes/audit-api.d.ts +24 -0
  334. package/dist/server/routes/audit-api.js +117 -0
  335. package/dist/server/routes/audit-api.js.map +1 -0
  336. package/dist/server/routes/auth-api.js +532 -63
  337. package/dist/server/routes/auth-api.js.map +1 -1
  338. package/dist/server/routes/capture-api.d.ts +10 -3
  339. package/dist/server/routes/capture-api.js +213 -25
  340. package/dist/server/routes/capture-api.js.map +1 -1
  341. package/dist/server/routes/chat-sessions-api.d.ts +13 -0
  342. package/dist/server/routes/chat-sessions-api.js +455 -0
  343. package/dist/server/routes/chat-sessions-api.js.map +1 -0
  344. package/dist/server/routes/chat.d.ts +35 -1
  345. package/dist/server/routes/chat.js +699 -54
  346. package/dist/server/routes/chat.js.map +1 -1
  347. package/dist/server/routes/comments-api.d.ts +15 -0
  348. package/dist/server/routes/comments-api.js +444 -0
  349. package/dist/server/routes/comments-api.js.map +1 -0
  350. package/dist/server/routes/config-api.d.ts +3 -2
  351. package/dist/server/routes/config-api.js +179 -49
  352. package/dist/server/routes/config-api.js.map +1 -1
  353. package/dist/server/routes/connectors-api.js +177 -42
  354. package/dist/server/routes/connectors-api.js.map +1 -1
  355. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  356. package/dist/server/routes/{meeting-ingest-api.js → event-ingest-api.js} +35 -20
  357. package/dist/server/routes/event-ingest-api.js.map +1 -0
  358. package/dist/server/routes/field-library-api.d.ts +28 -0
  359. package/dist/server/routes/field-library-api.js +126 -0
  360. package/dist/server/routes/field-library-api.js.map +1 -0
  361. package/dist/server/routes/git-http.d.ts +2 -2
  362. package/dist/server/routes/git-http.js +86 -39
  363. package/dist/server/routes/git-http.js.map +1 -1
  364. package/dist/server/routes/graph-api-access.d.ts +57 -0
  365. package/dist/server/routes/graph-api-access.js +112 -0
  366. package/dist/server/routes/graph-api-access.js.map +1 -0
  367. package/dist/server/routes/graph-api.d.ts +1 -1
  368. package/dist/server/routes/graph-api.js +1455 -325
  369. package/dist/server/routes/graph-api.js.map +1 -1
  370. package/dist/server/routes/health.d.ts +18 -0
  371. package/dist/server/routes/health.js +74 -0
  372. package/dist/server/routes/health.js.map +1 -0
  373. package/dist/server/routes/import-batch.d.ts +24 -0
  374. package/dist/server/routes/import-batch.js +33 -0
  375. package/dist/server/routes/import-batch.js.map +1 -0
  376. package/dist/server/routes/insights-api.d.ts +9 -2
  377. package/dist/server/routes/insights-api.js +355 -61
  378. package/dist/server/routes/insights-api.js.map +1 -1
  379. package/dist/server/routes/mcp.d.ts +7 -3
  380. package/dist/server/routes/mcp.js +24 -8
  381. package/dist/server/routes/mcp.js.map +1 -1
  382. package/dist/server/routes/oauth-api.d.ts +67 -0
  383. package/dist/server/routes/oauth-api.js +421 -0
  384. package/dist/server/routes/oauth-api.js.map +1 -0
  385. package/dist/server/routes/permissions-api.d.ts +9 -2
  386. package/dist/server/routes/permissions-api.js +87 -31
  387. package/dist/server/routes/permissions-api.js.map +1 -1
  388. package/dist/server/routes/r2-api.d.ts +25 -0
  389. package/dist/server/routes/r2-api.js +276 -0
  390. package/dist/server/routes/r2-api.js.map +1 -0
  391. package/dist/server/routes/secrets-api.d.ts +36 -0
  392. package/dist/server/routes/secrets-api.js +308 -0
  393. package/dist/server/routes/secrets-api.js.map +1 -0
  394. package/dist/server/routes/settings-api.d.ts +29 -0
  395. package/dist/server/routes/settings-api.js +180 -0
  396. package/dist/server/routes/settings-api.js.map +1 -0
  397. package/dist/server/routes/share-api.d.ts +32 -0
  398. package/dist/server/routes/share-api.js +234 -0
  399. package/dist/server/routes/share-api.js.map +1 -0
  400. package/dist/server/routes/views-api.js +51 -0
  401. package/dist/server/routes/views-api.js.map +1 -1
  402. package/dist/server/routes/workspace-api.d.ts +2 -1
  403. package/dist/server/routes/workspace-api.js +142 -23
  404. package/dist/server/routes/workspace-api.js.map +1 -1
  405. package/dist/server/routes/ws.d.ts +3 -2
  406. package/dist/server/routes/ws.js +68 -17
  407. package/dist/server/routes/ws.js.map +1 -1
  408. package/dist/server/session-manager.d.ts +48 -5
  409. package/dist/server/session-manager.js +182 -14
  410. package/dist/server/session-manager.js.map +1 -1
  411. package/dist/server/ws-hub.d.ts +124 -37
  412. package/dist/server/ws-hub.js +0 -0
  413. package/dist/server/ws-hub.js.map +1 -1
  414. package/dist/server/yjs-manager.d.ts +278 -7
  415. package/dist/server/yjs-manager.js +830 -38
  416. package/dist/server/yjs-manager.js.map +1 -1
  417. package/dist/server/yjs-persistence.d.ts +165 -0
  418. package/dist/server/yjs-persistence.js +557 -0
  419. package/dist/server/yjs-persistence.js.map +1 -0
  420. package/dist/server/yjs-text-diff.d.ts +32 -0
  421. package/dist/server/yjs-text-diff.js +61 -0
  422. package/dist/server/yjs-text-diff.js.map +1 -0
  423. package/dist/services/access-control.d.ts +73 -0
  424. package/dist/services/access-control.js +165 -0
  425. package/dist/services/access-control.js.map +1 -0
  426. package/dist/services/artifact-asset-token.d.ts +69 -0
  427. package/dist/services/artifact-asset-token.js +94 -0
  428. package/dist/services/artifact-asset-token.js.map +1 -0
  429. package/dist/services/artifact-library-sources.d.ts +3 -0
  430. package/dist/services/artifact-library-sources.js +44 -0
  431. package/dist/services/artifact-library-sources.js.map +1 -0
  432. package/dist/services/artifact-render-export.d.ts +97 -0
  433. package/dist/services/artifact-render-export.js +467 -0
  434. package/dist/services/artifact-render-export.js.map +1 -0
  435. package/dist/services/asset-caption-service.d.ts +103 -0
  436. package/dist/services/asset-caption-service.js +186 -0
  437. package/dist/services/asset-caption-service.js.map +1 -0
  438. package/dist/services/asset-delete-authz.d.ts +31 -0
  439. package/dist/services/asset-delete-authz.js +61 -0
  440. package/dist/services/asset-delete-authz.js.map +1 -0
  441. package/dist/services/asset-finalize-service.d.ts +58 -0
  442. package/dist/services/asset-finalize-service.js +216 -0
  443. package/dist/services/asset-finalize-service.js.map +1 -0
  444. package/dist/services/asset-import-service.d.ts +111 -0
  445. package/dist/services/asset-import-service.js +394 -0
  446. package/dist/services/asset-import-service.js.map +1 -0
  447. package/dist/services/asset-index-sweep.d.ts +95 -0
  448. package/dist/services/asset-index-sweep.js +249 -0
  449. package/dist/services/asset-index-sweep.js.map +1 -0
  450. package/dist/services/asset-lifecycle-check.d.ts +22 -0
  451. package/dist/services/asset-lifecycle-check.js +80 -0
  452. package/dist/services/asset-lifecycle-check.js.map +1 -0
  453. package/dist/services/asset-listing.d.ts +72 -0
  454. package/dist/services/asset-listing.js +321 -0
  455. package/dist/services/asset-listing.js.map +1 -0
  456. package/dist/services/asset-presign-service.d.ts +68 -0
  457. package/dist/services/asset-presign-service.js +124 -0
  458. package/dist/services/asset-presign-service.js.map +1 -0
  459. package/dist/services/asset-sidecar-service.d.ts +28 -0
  460. package/dist/services/asset-sidecar-service.js +79 -0
  461. package/dist/services/asset-sidecar-service.js.map +1 -0
  462. package/dist/services/asset-upload-errors.d.ts +41 -0
  463. package/dist/services/asset-upload-errors.js +45 -0
  464. package/dist/services/asset-upload-errors.js.map +1 -0
  465. package/dist/services/asset-upload-service.d.ts +56 -0
  466. package/dist/services/asset-upload-service.js +200 -0
  467. package/dist/services/asset-upload-service.js.map +1 -0
  468. package/dist/services/asset-upload-token.d.ts +58 -0
  469. package/dist/services/asset-upload-token.js +75 -0
  470. package/dist/services/asset-upload-token.js.map +1 -0
  471. package/dist/services/assets/asset-index-service.d.ts +127 -0
  472. package/dist/services/assets/asset-index-service.js +227 -0
  473. package/dist/services/assets/asset-index-service.js.map +1 -0
  474. package/dist/services/assets/base.d.ts +128 -2
  475. package/dist/services/assets/base.js +98 -1
  476. package/dist/services/assets/base.js.map +1 -1
  477. package/dist/services/assets/index.d.ts +114 -1
  478. package/dist/services/assets/index.js +221 -0
  479. package/dist/services/assets/index.js.map +1 -1
  480. package/dist/services/assets/local.d.ts +16 -1
  481. package/dist/services/assets/local.js +110 -1
  482. package/dist/services/assets/local.js.map +1 -1
  483. package/dist/services/assets/r2-sync.d.ts +88 -0
  484. package/dist/services/assets/r2-sync.js +412 -0
  485. package/dist/services/assets/r2-sync.js.map +1 -0
  486. package/dist/services/assets/r2.d.ts +87 -1
  487. package/dist/services/assets/r2.js +203 -1
  488. package/dist/services/assets/r2.js.map +1 -1
  489. package/dist/services/auth-service.d.ts +312 -45
  490. package/dist/services/auth-service.js +1011 -195
  491. package/dist/services/auth-service.js.map +1 -1
  492. package/dist/services/chat-session-service.d.ts +188 -0
  493. package/dist/services/chat-session-service.js +512 -0
  494. package/dist/services/chat-session-service.js.map +1 -0
  495. package/dist/services/cloud-inference-billing.d.ts +64 -0
  496. package/dist/services/cloud-inference-billing.js +313 -0
  497. package/dist/services/cloud-inference-billing.js.map +1 -0
  498. package/dist/services/comment-service.d.ts +97 -0
  499. package/dist/services/comment-service.js +341 -0
  500. package/dist/services/comment-service.js.map +1 -0
  501. package/dist/services/comment-virtual-entity.d.ts +36 -0
  502. package/dist/services/comment-virtual-entity.js +71 -0
  503. package/dist/services/comment-virtual-entity.js.map +1 -0
  504. package/dist/services/convert-service.d.ts +64 -0
  505. package/dist/services/convert-service.js +68 -0
  506. package/dist/services/convert-service.js.map +1 -0
  507. package/dist/services/csv-service.d.ts +22 -17
  508. package/dist/services/csv-service.js +55 -92
  509. package/dist/services/csv-service.js.map +1 -1
  510. package/dist/services/entity-mutations.d.ts +213 -0
  511. package/dist/services/entity-mutations.js +380 -0
  512. package/dist/services/entity-mutations.js.map +1 -0
  513. package/dist/services/{meeting-processor.d.ts → event-processor.d.ts} +15 -8
  514. package/dist/services/{meeting-processor.js → event-processor.js} +124 -65
  515. package/dist/services/event-processor.js.map +1 -0
  516. package/dist/services/extract/docx.d.ts +1 -0
  517. package/dist/services/extract/docx.js +233 -0
  518. package/dist/services/extract/docx.js.map +1 -0
  519. package/dist/services/extract/index.d.ts +9 -0
  520. package/dist/services/extract/index.js +10 -0
  521. package/dist/services/extract/index.js.map +1 -0
  522. package/dist/services/extract/pdf.d.ts +13 -0
  523. package/dist/services/extract/pdf.js +69 -0
  524. package/dist/services/extract/pdf.js.map +1 -0
  525. package/dist/services/folder-creation.d.ts +33 -0
  526. package/dist/services/folder-creation.js +103 -0
  527. package/dist/services/folder-creation.js.map +1 -0
  528. package/dist/services/git.d.ts +58 -0
  529. package/dist/services/git.js +194 -55
  530. package/dist/services/git.js.map +1 -1
  531. package/dist/services/graph-maintenance.js +4 -4
  532. package/dist/services/graph-maintenance.js.map +1 -1
  533. package/dist/services/import-service.d.ts +51 -2
  534. package/dist/services/import-service.js +254 -107
  535. package/dist/services/import-service.js.map +1 -1
  536. package/dist/services/lint-service.js +10 -17
  537. package/dist/services/lint-service.js.map +1 -1
  538. package/dist/services/markdown.d.ts +12 -1
  539. package/dist/services/markdown.js +77 -9
  540. package/dist/services/markdown.js.map +1 -1
  541. package/dist/services/mention-detector.d.ts +23 -0
  542. package/dist/services/mention-detector.js +47 -0
  543. package/dist/services/mention-detector.js.map +1 -0
  544. package/dist/services/model-capabilities.d.ts +41 -0
  545. package/dist/services/model-capabilities.js +107 -0
  546. package/dist/services/model-capabilities.js.map +1 -0
  547. package/dist/services/notification-broadcast.d.ts +32 -0
  548. package/dist/services/notification-broadcast.js +38 -0
  549. package/dist/services/notification-broadcast.js.map +1 -0
  550. package/dist/services/notification-service.d.ts +41 -0
  551. package/dist/services/notification-service.js +100 -0
  552. package/dist/services/notification-service.js.map +1 -0
  553. package/dist/services/oauth-server-store.d.ts +147 -0
  554. package/dist/services/oauth-server-store.js +319 -0
  555. package/dist/services/oauth-server-store.js.map +1 -0
  556. package/dist/services/orphan-service.js +2 -2
  557. package/dist/services/orphan-service.js.map +1 -1
  558. package/dist/services/personal-folder.d.ts +40 -0
  559. package/dist/services/personal-folder.js +101 -0
  560. package/dist/services/personal-folder.js.map +1 -0
  561. package/dist/services/scratch-asset-promote.d.ts +57 -0
  562. package/dist/services/scratch-asset-promote.js +95 -0
  563. package/dist/services/scratch-asset-promote.js.map +1 -0
  564. package/dist/services/scratch-attachment-service.d.ts +196 -0
  565. package/dist/services/scratch-attachment-service.js +347 -0
  566. package/dist/services/scratch-attachment-service.js.map +1 -0
  567. package/dist/services/share-link-service.d.ts +57 -0
  568. package/dist/services/share-link-service.js +142 -0
  569. package/dist/services/share-link-service.js.map +1 -0
  570. package/dist/services/user-person-bridge.d.ts +136 -0
  571. package/dist/services/user-person-bridge.js +340 -0
  572. package/dist/services/user-person-bridge.js.map +1 -0
  573. package/dist/services/vector-service.d.ts +282 -5
  574. package/dist/services/vector-service.js +585 -29
  575. package/dist/services/vector-service.js.map +1 -1
  576. package/dist/services/workspace-access.d.ts +108 -0
  577. package/dist/services/workspace-access.js +149 -0
  578. package/dist/services/workspace-access.js.map +1 -0
  579. package/dist/services/workspace-assets-folder.d.ts +46 -0
  580. package/dist/services/workspace-assets-folder.js +75 -0
  581. package/dist/services/workspace-assets-folder.js.map +1 -0
  582. package/dist/utils/git.d.ts +17 -2
  583. package/dist/utils/git.js +23 -7
  584. package/dist/utils/git.js.map +1 -1
  585. package/dist/utils/log.d.ts +42 -0
  586. package/dist/utils/log.js +137 -0
  587. package/dist/utils/log.js.map +1 -0
  588. package/dist/utils/preflight.js +2 -2
  589. package/dist/utils/preflight.js.map +1 -1
  590. package/dist/utils/version-checker.d.ts +12 -19
  591. package/dist/utils/version-checker.js +14 -104
  592. package/dist/utils/version-checker.js.map +1 -1
  593. package/dist/web/_app/immutable/assets/0.Bs_z3Z86.css +2 -0
  594. package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
  595. package/dist/web/_app/immutable/assets/14.7d-Q37wc.css +1 -0
  596. package/dist/web/_app/immutable/assets/15.BwBFdc1D.css +1 -0
  597. package/dist/web/_app/immutable/assets/16.CmLrbzZp.css +1 -0
  598. package/dist/web/_app/immutable/assets/17.DcuK5ZVm.css +1 -0
  599. package/dist/web/_app/immutable/assets/2.DATnR31c.css +1 -0
  600. package/dist/web/_app/immutable/assets/3.Cz4H8n_O.css +1 -0
  601. package/dist/web/_app/immutable/assets/4.aDHteTDy.css +1 -0
  602. package/dist/web/_app/immutable/assets/6.CF1i5Bon.css +1 -0
  603. package/dist/web/_app/immutable/assets/ArtifactEntityView.C4ooklFD.css +1 -0
  604. package/dist/web/_app/immutable/assets/AssetLibraryPicker.BOFW0MvF.css +1 -0
  605. package/dist/web/_app/immutable/assets/BulkActionsBar.cmKvHzRK.css +1 -0
  606. package/dist/web/_app/immutable/assets/CalendarView.lBCvS3X5.css +1 -0
  607. package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
  608. package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
  609. package/dist/web/_app/immutable/assets/FolderMembersPanel.kiYnDFHu.css +1 -0
  610. package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
  611. package/dist/web/_app/immutable/assets/FolderPicker.Cp46GHe2.css +1 -0
  612. package/dist/web/_app/immutable/assets/GalleryView.WBGxxUQc.css +1 -0
  613. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  614. package/dist/web/_app/immutable/assets/KanbanView.BOaI5KFL.css +1 -0
  615. package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
  616. package/dist/web/_app/immutable/assets/Markdown.BZnsSOSf.css +1 -0
  617. package/dist/web/_app/immutable/assets/Rail.ilusFgD4.css +1 -0
  618. package/dist/web/_app/immutable/assets/SettingsDialog.D7-BO6S_.css +1 -0
  619. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  620. package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
  621. package/dist/web/_app/immutable/assets/TimelineView.xAZBJhHw.css +1 -0
  622. package/dist/web/_app/immutable/assets/WorkspaceView.C8ErUJAY.css +1 -0
  623. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  624. package/dist/web/_app/immutable/assets/history-summary.LpmHXasl.css +1 -0
  625. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  626. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  627. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  628. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  629. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  630. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  631. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  632. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  633. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  634. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  635. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  636. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  637. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  638. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  639. package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
  640. package/dist/web/_app/immutable/assets/list-columns.BgnafZ4K.css +1 -0
  641. package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
  642. package/dist/web/_app/immutable/assets/select.B90KUqR4.css +1 -0
  643. package/dist/web/_app/immutable/assets/sheet.RF9RBmml.css +1 -0
  644. package/dist/web/_app/immutable/chunks/22qYtvr82.js +1 -0
  645. package/dist/web/_app/immutable/chunks/2f1VclTm.js +1 -0
  646. package/dist/web/_app/immutable/chunks/4xgUPoGj2.js +2 -0
  647. package/dist/web/_app/immutable/chunks/5CYQk4xR.js +1 -0
  648. package/dist/web/_app/immutable/chunks/6S9WOky52.js +1 -0
  649. package/dist/web/_app/immutable/chunks/9K8VREGP.js +1 -0
  650. package/dist/web/_app/immutable/chunks/B-n5q6ku.js +1 -0
  651. package/dist/web/_app/immutable/chunks/B0p2fSEV2.js +1 -0
  652. package/dist/web/_app/immutable/chunks/B2oi87jG.js +2 -0
  653. package/dist/web/_app/immutable/chunks/B5Rb52QU.js +1 -0
  654. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  655. package/dist/web/_app/immutable/chunks/B6O-q2CN.js +1 -0
  656. package/dist/web/_app/immutable/chunks/B6qeIQZz.js +2 -0
  657. package/dist/web/_app/immutable/chunks/B9KfEsQw2.js +1 -0
  658. package/dist/web/_app/immutable/chunks/BB-RSeXQ.js +1 -0
  659. package/dist/web/_app/immutable/chunks/BCQQzpbj.js +1 -0
  660. package/dist/web/_app/immutable/chunks/BGdzd-Tc.js +1 -0
  661. package/dist/web/_app/immutable/chunks/BLs1h0Rh2.js +1 -0
  662. package/dist/web/_app/immutable/chunks/BPzV_xOS2.js +1 -0
  663. package/dist/web/_app/immutable/chunks/BT2C6q8n.js +1 -0
  664. package/dist/web/_app/immutable/chunks/BUesbLq2.js +1 -0
  665. package/dist/web/_app/immutable/chunks/BUrnwOw4.js +2 -0
  666. package/dist/web/_app/immutable/chunks/BV-iCKqa.js +1 -0
  667. package/dist/web/_app/immutable/chunks/BVCJtXyc.js +1 -0
  668. package/dist/web/_app/immutable/chunks/BY9a3GSt.js +6 -0
  669. package/dist/web/_app/immutable/chunks/BZi3uKF4.js +1 -0
  670. package/dist/web/_app/immutable/chunks/BbfHGU9n2.js +1 -0
  671. package/dist/web/_app/immutable/chunks/Bbqu2-5G2.js +1 -0
  672. package/dist/web/_app/immutable/chunks/BbsX1Slr.js +3 -0
  673. package/dist/web/_app/immutable/chunks/BcwjqHaZ2.js +1 -0
  674. package/dist/web/_app/immutable/chunks/BizeEpTx.js +2 -0
  675. package/dist/web/_app/immutable/chunks/BlgjVmFM2.js +14 -0
  676. package/dist/web/_app/immutable/chunks/BocSRgv12.js +1 -0
  677. package/dist/web/_app/immutable/chunks/BojBYqc3.js +1 -0
  678. package/dist/web/_app/immutable/chunks/BpCG9m962.js +1 -0
  679. package/dist/web/_app/immutable/chunks/BqvnBg_y.js +1 -0
  680. package/dist/web/_app/immutable/chunks/BsT0J1QD.js +1 -0
  681. package/dist/web/_app/immutable/chunks/BsW72fyR2.js +1 -0
  682. package/dist/web/_app/immutable/chunks/Bti_XKwx.js +2692 -0
  683. package/dist/web/_app/immutable/chunks/Bua97Had2.js +2 -0
  684. package/dist/web/_app/immutable/chunks/BuhW5Fr0.js +689 -0
  685. package/dist/web/_app/immutable/chunks/Bx74EEyn2.js +1 -0
  686. package/dist/web/_app/immutable/chunks/BxPN0T61.js +1 -0
  687. package/dist/web/_app/immutable/chunks/Bz9lrgGs.js +1 -0
  688. package/dist/web/_app/immutable/chunks/BzaxZ6j12.js +1 -0
  689. package/dist/web/_app/immutable/chunks/C1B4xDs0.js +1 -0
  690. package/dist/web/_app/immutable/chunks/C1trcC8M.js +7 -0
  691. package/dist/web/_app/immutable/chunks/C9tvkk7Y2.js +22 -0
  692. package/dist/web/_app/immutable/chunks/CBQjdDZf.js +1 -0
  693. package/dist/web/_app/immutable/chunks/CDeazMFW2.js +2 -0
  694. package/dist/web/_app/immutable/chunks/CEahbtnP.js +1 -0
  695. package/dist/web/_app/immutable/chunks/CGjVCd0e.js +8 -0
  696. package/dist/web/_app/immutable/chunks/CICK9maP.js +1 -0
  697. package/dist/web/_app/immutable/chunks/CIoNEHQ82.js +184 -0
  698. package/dist/web/_app/immutable/chunks/CP8_U450.js +1 -0
  699. package/dist/web/_app/immutable/chunks/CQ1eQ93t2.js +6 -0
  700. package/dist/web/_app/immutable/chunks/CUFQMEBn2.js +1 -0
  701. package/dist/web/_app/immutable/chunks/CYEYDNwO2.js +1 -0
  702. package/dist/web/_app/immutable/chunks/CYyIP7kP2.js +66 -0
  703. package/dist/web/_app/immutable/chunks/CZgFaimi2.js +83 -0
  704. package/dist/web/_app/immutable/chunks/CZqvCTCv.js +1 -0
  705. package/dist/web/_app/immutable/chunks/CcI9jYBV.js +1 -0
  706. package/dist/web/_app/immutable/chunks/CcWaWbrI2.js +1 -0
  707. package/dist/web/_app/immutable/chunks/CdtzRVZK.js +1 -0
  708. package/dist/web/_app/immutable/chunks/CfYG72Hc.js +1 -0
  709. package/dist/web/_app/immutable/chunks/Ch1kmm3J2.js +1 -0
  710. package/dist/web/_app/immutable/chunks/CmSSN61R2.js +1 -0
  711. package/dist/web/_app/immutable/chunks/Cqm5wAin.js +1 -0
  712. package/dist/web/_app/immutable/chunks/CuYPXpWU.js +1 -0
  713. package/dist/web/_app/immutable/chunks/CvSEodTA.js +1 -0
  714. package/dist/web/_app/immutable/chunks/CvqqrTrj.js +1 -0
  715. package/dist/web/_app/immutable/chunks/CwAmWt6h.js +1 -0
  716. package/dist/web/_app/immutable/chunks/CwP3Oa7F.js +1 -0
  717. package/dist/web/_app/immutable/chunks/CyTluew1.js +2 -0
  718. package/dist/web/_app/immutable/chunks/CzXdOgVl2.js +7 -0
  719. package/dist/web/_app/immutable/chunks/D0IAituJ.js +1 -0
  720. package/dist/web/_app/immutable/chunks/D0W7c6Sg.js +185 -0
  721. package/dist/web/_app/immutable/chunks/D0rBhnqB2.js +1 -0
  722. package/dist/web/_app/immutable/chunks/D1-GZSN1.js +1 -0
  723. package/dist/web/_app/immutable/chunks/D1yvtriI.js +1 -0
  724. package/dist/web/_app/immutable/chunks/D25NMRpl.js +1 -0
  725. package/dist/web/_app/immutable/chunks/D8wZ2xul.js +4 -0
  726. package/dist/web/_app/immutable/chunks/DA3HEX3X.js +1 -0
  727. package/dist/web/_app/immutable/chunks/DD9wj4ca2.js +1 -0
  728. package/dist/web/_app/immutable/chunks/DJ1YeiJL2.js +1 -0
  729. package/dist/web/_app/immutable/chunks/DKFZnpVC.js +5 -0
  730. package/dist/web/_app/immutable/chunks/DKJl40hl.js +1 -0
  731. package/dist/web/_app/immutable/chunks/DPUVu0T0.js +1 -0
  732. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  733. package/dist/web/_app/immutable/chunks/DXsFrDer2.js +1 -0
  734. package/dist/web/_app/immutable/chunks/DYc5KW3F.js +1 -0
  735. package/dist/web/_app/immutable/chunks/DZcTwXBW.js +1 -0
  736. package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
  737. package/dist/web/_app/immutable/chunks/DdPO8kRu2.js +2 -0
  738. package/dist/web/_app/immutable/chunks/DeOXyJZw2.js +1 -0
  739. package/dist/web/_app/immutable/chunks/DfufUFR1.js +2 -0
  740. package/dist/web/_app/immutable/chunks/DiQg3ing.js +1 -0
  741. package/dist/web/_app/immutable/chunks/DjIqa1_y.js +2 -0
  742. package/dist/web/_app/immutable/chunks/DkJ1dkxV2.js +1 -0
  743. package/dist/web/_app/immutable/chunks/Dl63IUnH2.js +224 -0
  744. package/dist/web/_app/immutable/chunks/DmFdD6zT.js +1 -0
  745. package/dist/web/_app/immutable/chunks/Dn3R8S-U.js +1 -0
  746. package/dist/web/_app/immutable/chunks/DpNr1GQ2.js +1 -0
  747. package/dist/web/_app/immutable/chunks/DpVNDHXz.js +2 -0
  748. package/dist/web/_app/immutable/chunks/DuxziNnw.js +1 -0
  749. package/dist/web/_app/immutable/chunks/Dv3A3Wcj.js +1 -0
  750. package/dist/web/_app/immutable/chunks/FuiJnZG0.js +1 -0
  751. package/dist/web/_app/immutable/chunks/Izkulod7.js +1 -0
  752. package/dist/web/_app/immutable/chunks/KZY6ongq2.js +2 -0
  753. package/dist/web/_app/immutable/chunks/LYL8znYR2.js +23 -0
  754. package/dist/web/_app/immutable/chunks/PhN6tXuJ2.js +1 -0
  755. package/dist/web/_app/immutable/chunks/PyLyCpuL.js +1 -0
  756. package/dist/web/_app/immutable/chunks/RK4gCWN0.js +2 -0
  757. package/dist/web/_app/immutable/chunks/VsBngTf4.js +2 -0
  758. package/dist/web/_app/immutable/chunks/XcWejFm_.js +5 -0
  759. package/dist/web/_app/immutable/chunks/al_nidE9.js +1 -0
  760. package/dist/web/_app/immutable/chunks/e50-izZO2.js +1 -0
  761. package/dist/web/_app/immutable/chunks/hG-QCarB.js +1 -0
  762. package/dist/web/_app/immutable/chunks/hStvCHkX.js +1 -0
  763. package/dist/web/_app/immutable/chunks/iJVY9p0y.js +3 -0
  764. package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
  765. package/dist/web/_app/immutable/chunks/pIXNe0C1.js +1 -0
  766. package/dist/web/_app/immutable/chunks/pNSRq_1B.js +2 -0
  767. package/dist/web/_app/immutable/chunks/qwr5boV8.js +1 -0
  768. package/dist/web/_app/immutable/chunks/rjjyuGhb.js +1 -0
  769. package/dist/web/_app/immutable/chunks/sg-T-FoN.js +1 -0
  770. package/dist/web/_app/immutable/chunks/uBgoVlsx.js +3 -0
  771. package/dist/web/_app/immutable/chunks/ulshNz6x.js +2 -0
  772. package/dist/web/_app/immutable/chunks/xY0c-UfG.js +3 -0
  773. package/dist/web/_app/immutable/chunks/xeNvx4Bl2.js +1 -0
  774. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  775. package/dist/web/_app/immutable/entry/app.pNUW-q4U.js +2 -0
  776. package/dist/web/_app/immutable/entry/start.DxGtIGG_.js +1 -0
  777. package/dist/web/_app/immutable/nodes/0.D6ZCY_R6.js +2 -0
  778. package/dist/web/_app/immutable/nodes/1.BryH3TNr.js +1 -0
  779. package/dist/web/_app/immutable/nodes/10.CMZMvR17.js +1 -0
  780. package/dist/web/_app/immutable/nodes/11.QHx_JShx.js +1 -0
  781. package/dist/web/_app/immutable/nodes/12.CiRWbb4X.js +1 -0
  782. package/dist/web/_app/immutable/nodes/13.CYrHXCA8.js +1 -0
  783. package/dist/web/_app/immutable/nodes/14.K18eIE5Z.js +1 -0
  784. package/dist/web/_app/immutable/nodes/15.DxgnZ61h.js +1 -0
  785. package/dist/web/_app/immutable/nodes/16.Dn6iuWIo.js +1 -0
  786. package/dist/web/_app/immutable/nodes/17.viwS7vTR.js +77 -0
  787. package/dist/web/_app/immutable/nodes/2.BQkQ_uUM.js +122 -0
  788. package/dist/web/_app/immutable/nodes/3.B4pqXsqq.js +6 -0
  789. package/dist/web/_app/immutable/nodes/4.CKXEgIAP.js +11 -0
  790. package/dist/web/_app/immutable/nodes/5.A2TASl4Q.js +1 -0
  791. package/dist/web/_app/immutable/nodes/6.DaIRO3SI.js +6 -0
  792. package/dist/web/_app/immutable/nodes/7.ga2UvFm-.js +1 -0
  793. package/dist/web/_app/immutable/nodes/8.BTEWT81u.js +1 -0
  794. package/dist/web/_app/immutable/nodes/9.BVxo0E0c.js +1 -0
  795. package/dist/web/_app/version.json +1 -1
  796. package/dist/web/favicon-16.png +0 -0
  797. package/dist/web/favicon-180.png +0 -0
  798. package/dist/web/favicon-32.png +0 -0
  799. package/dist/web/favicon-48.png +0 -0
  800. package/dist/web/favicon-512.png +0 -0
  801. package/dist/web/favicon.ico +0 -0
  802. package/dist/web/favicon.svg +8 -0
  803. package/dist/web/index.html +56 -21
  804. package/dist/web/studiograph-logomark.svg +29 -0
  805. package/package.json +35 -14
  806. package/dist/agent/skills/enrich-entities.md +0 -136
  807. package/dist/agent/skills/sync-configuration.md +0 -119
  808. package/dist/agent/skills/sync-setup.md +0 -82
  809. package/dist/agent/tools/message-tools.d.ts +0 -42
  810. package/dist/agent/tools/message-tools.js +0 -106
  811. package/dist/agent/tools/message-tools.js.map +0 -1
  812. package/dist/cli/commands/app.d.ts +0 -7
  813. package/dist/cli/commands/app.js +0 -268
  814. package/dist/cli/commands/app.js.map +0 -1
  815. package/dist/cli/commands/clear.d.ts +0 -5
  816. package/dist/cli/commands/clear.js +0 -36
  817. package/dist/cli/commands/clear.js.map +0 -1
  818. package/dist/cli/commands/collection.d.ts +0 -10
  819. package/dist/cli/commands/collection.js.map +0 -1
  820. package/dist/cli/commands/join.d.ts +0 -9
  821. package/dist/cli/commands/join.js +0 -255
  822. package/dist/cli/commands/join.js.map +0 -1
  823. package/dist/cli/commands/start.d.ts +0 -7
  824. package/dist/cli/commands/start.js +0 -584
  825. package/dist/cli/commands/start.js.map +0 -1
  826. package/dist/cli/commands/update.d.ts +0 -8
  827. package/dist/cli/commands/update.js +0 -155
  828. package/dist/cli/commands/update.js.map +0 -1
  829. package/dist/cli/commands/user.d.ts +0 -7
  830. package/dist/cli/commands/user.js +0 -175
  831. package/dist/cli/commands/user.js.map +0 -1
  832. package/dist/cli/scaffolding.d.ts +0 -12
  833. package/dist/cli/scaffolding.js +0 -397
  834. package/dist/cli/scaffolding.js.map +0 -1
  835. package/dist/integrations/registry.d.ts +0 -8
  836. package/dist/integrations/registry.js +0 -7
  837. package/dist/integrations/registry.js.map +0 -1
  838. package/dist/integrations/types.d.ts +0 -43
  839. package/dist/integrations/types.js +0 -5
  840. package/dist/integrations/types.js.map +0 -1
  841. package/dist/lib/lib/utils.d.ts +0 -2
  842. package/dist/lib/lib/utils.js +0 -6
  843. package/dist/lib/lib/utils.js.map +0 -1
  844. package/dist/server/chrome/chrome.css +0 -691
  845. package/dist/server/chrome/chrome.js +0 -374
  846. package/dist/server/commit-scheduler.d.ts +0 -39
  847. package/dist/server/commit-scheduler.js +0 -113
  848. package/dist/server/commit-scheduler.js.map +0 -1
  849. package/dist/server/plugin-loader.d.ts +0 -53
  850. package/dist/server/plugin-loader.js +0 -155
  851. package/dist/server/plugin-loader.js.map +0 -1
  852. package/dist/server/routes/meeting-ingest-api.d.ts +0 -14
  853. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  854. package/dist/server/routes/messages-api.d.ts +0 -15
  855. package/dist/server/routes/messages-api.js +0 -385
  856. package/dist/server/routes/messages-api.js.map +0 -1
  857. package/dist/services/batch-processor.d.ts +0 -49
  858. package/dist/services/batch-processor.js +0 -166
  859. package/dist/services/batch-processor.js.map +0 -1
  860. package/dist/services/briefing.d.ts +0 -26
  861. package/dist/services/briefing.js +0 -230
  862. package/dist/services/briefing.js.map +0 -1
  863. package/dist/services/heartbeat.d.ts +0 -28
  864. package/dist/services/heartbeat.js +0 -183
  865. package/dist/services/heartbeat.js.map +0 -1
  866. package/dist/services/image-import-service.d.ts +0 -24
  867. package/dist/services/image-import-service.js +0 -108
  868. package/dist/services/image-import-service.js.map +0 -1
  869. package/dist/services/insights.d.ts +0 -38
  870. package/dist/services/insights.js +0 -269
  871. package/dist/services/insights.js.map +0 -1
  872. package/dist/services/meeting-processor.js.map +0 -1
  873. package/dist/services/message-service.d.ts +0 -68
  874. package/dist/services/message-service.js +0 -220
  875. package/dist/services/message-service.js.map +0 -1
  876. package/dist/utils/workspace-config.d.ts +0 -8
  877. package/dist/utils/workspace-config.js +0 -22
  878. package/dist/utils/workspace-config.js.map +0 -1
  879. package/dist/web/_app/immutable/assets/0.uPSqtsC5.css +0 -1
  880. package/dist/web/_app/immutable/assets/11.2jzI3cZY.css +0 -1
  881. package/dist/web/_app/immutable/assets/12.CT4xL4K3.css +0 -1
  882. package/dist/web/_app/immutable/assets/13.BUrHkYry.css +0 -1
  883. package/dist/web/_app/immutable/assets/2.DpQWr6q6.css +0 -1
  884. package/dist/web/_app/immutable/assets/3.BxdqT7zi.css +0 -1
  885. package/dist/web/_app/immutable/assets/4.DdNqjd0T.css +0 -1
  886. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  887. package/dist/web/_app/immutable/assets/6.DXZr_rI_.css +0 -1
  888. package/dist/web/_app/immutable/assets/GraphView.D9ePpZez.css +0 -1
  889. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  890. package/dist/web/_app/immutable/assets/ViewToolbar.BWE03S64.css +0 -1
  891. package/dist/web/_app/immutable/assets/WorkspaceView.CgGDi_Zb.css +0 -1
  892. package/dist/web/_app/immutable/assets/wikilinks.CzMBkUMB.css +0 -1
  893. package/dist/web/_app/immutable/chunks/-jG4Obyh.js +0 -4
  894. package/dist/web/_app/immutable/chunks/2nrc8f_O.js +0 -1
  895. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  896. package/dist/web/_app/immutable/chunks/8Q3ZJIYu.js +0 -1
  897. package/dist/web/_app/immutable/chunks/B8ydT5xX.js +0 -2
  898. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  899. package/dist/web/_app/immutable/chunks/BEn6N5c2.js +0 -1
  900. package/dist/web/_app/immutable/chunks/BFNNbCAM.js +0 -1
  901. package/dist/web/_app/immutable/chunks/BFZZEUd5.js +0 -1
  902. package/dist/web/_app/immutable/chunks/BGk8kfOE.js +0 -2
  903. package/dist/web/_app/immutable/chunks/BIBCr278.js +0 -1
  904. package/dist/web/_app/immutable/chunks/BPCkkwqe.js +0 -1
  905. package/dist/web/_app/immutable/chunks/BhlvzGQx.js +0 -1
  906. package/dist/web/_app/immutable/chunks/BlMknQeF.js +0 -1
  907. package/dist/web/_app/immutable/chunks/BpjqrlCg.js +0 -1
  908. package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
  909. package/dist/web/_app/immutable/chunks/ByBZ7JIT.js +0 -1
  910. package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
  911. package/dist/web/_app/immutable/chunks/BzJTZOK2.js +0 -1
  912. package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
  913. package/dist/web/_app/immutable/chunks/C3uBrOS5.js +0 -1
  914. package/dist/web/_app/immutable/chunks/C8R1sDpW.js +0 -1
  915. package/dist/web/_app/immutable/chunks/CDRHrs0g.js +0 -1
  916. package/dist/web/_app/immutable/chunks/CN5_py1I.js +0 -1
  917. package/dist/web/_app/immutable/chunks/CPne482a.js +0 -1
  918. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  919. package/dist/web/_app/immutable/chunks/CWyU-seV.js +0 -1
  920. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  921. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  922. package/dist/web/_app/immutable/chunks/ChsiIm-E.js +0 -1
  923. package/dist/web/_app/immutable/chunks/CojKppbh.js +0 -1
  924. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  925. package/dist/web/_app/immutable/chunks/CtYLtD7K.js +0 -1
  926. package/dist/web/_app/immutable/chunks/D-HDy5qS.js +0 -1
  927. package/dist/web/_app/immutable/chunks/D5aIYSkd.js +0 -1
  928. package/dist/web/_app/immutable/chunks/DBBXARVf.js +0 -1
  929. package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
  930. package/dist/web/_app/immutable/chunks/DKaafS50.js +0 -1
  931. package/dist/web/_app/immutable/chunks/DUMOo1Pn.js +0 -1
  932. package/dist/web/_app/immutable/chunks/DWX9f6AF.js +0 -1
  933. package/dist/web/_app/immutable/chunks/DY8-EONP.js +0 -1
  934. package/dist/web/_app/immutable/chunks/DkoHPElM.js +0 -1
  935. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  936. package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
  937. package/dist/web/_app/immutable/chunks/DujahU3W.js +0 -1
  938. package/dist/web/_app/immutable/chunks/FBn-ES5k.js +0 -1
  939. package/dist/web/_app/immutable/chunks/HQpwSOb3.js +0 -1
  940. package/dist/web/_app/immutable/chunks/KyjzlWRN.js +0 -2
  941. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  942. package/dist/web/_app/immutable/chunks/UwYfmrPx.js +0 -2
  943. package/dist/web/_app/immutable/chunks/W25ZVI8L.js +0 -2
  944. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  945. package/dist/web/_app/immutable/chunks/XjsuEnNE.js +0 -5
  946. package/dist/web/_app/immutable/chunks/ZD6ARAtb.js +0 -1
  947. package/dist/web/_app/immutable/chunks/pBTf4stg.js +0 -2
  948. package/dist/web/_app/immutable/chunks/rGIarcnp.js +0 -1
  949. package/dist/web/_app/immutable/chunks/vxEtkL8z.js +0 -1
  950. package/dist/web/_app/immutable/chunks/wDIGUaoU.js +0 -3
  951. package/dist/web/_app/immutable/entry/app.ZHiTM8WS.js +0 -2
  952. package/dist/web/_app/immutable/entry/start.C9-FfAVc.js +0 -1
  953. package/dist/web/_app/immutable/nodes/0.D92Orz8k.js +0 -2
  954. package/dist/web/_app/immutable/nodes/1.BMdyglM_.js +0 -1
  955. package/dist/web/_app/immutable/nodes/10.BilVDHSL.js +0 -1
  956. package/dist/web/_app/immutable/nodes/11.CS9E0Hic.js +0 -1
  957. package/dist/web/_app/immutable/nodes/12.D3BOxYzG.js +0 -1
  958. package/dist/web/_app/immutable/nodes/13.CClMKYtN.js +0 -1
  959. package/dist/web/_app/immutable/nodes/2.C8KKElPL.js +0 -267
  960. package/dist/web/_app/immutable/nodes/3.C5n5uiWU.js +0 -5
  961. package/dist/web/_app/immutable/nodes/4.DcGVvgiL.js +0 -11
  962. package/dist/web/_app/immutable/nodes/5.DxIjnFQO.js +0 -4
  963. package/dist/web/_app/immutable/nodes/6.lkh6kKLj.js +0 -1
  964. package/dist/web/_app/immutable/nodes/7.Bg7SbfhA.js +0 -1
  965. package/dist/web/_app/immutable/nodes/8.DcXWCNBE.js +0 -1
  966. package/dist/web/_app/immutable/nodes/9.Cefi8Jfm.js +0 -1
@@ -1,24 +1,32 @@
1
1
  /**
2
- * Meeting Processor — source-agnostic meeting processing
2
+ * Event Processor — source-agnostic event capture processing
3
3
  *
4
- * Accepts a common MeetingPayload from any source (Chrome extension,
5
- * Granola, calendar, manual) and handles:
4
+ * Accepts a common MeetingPayload from any capture source (desktop client,
5
+ * external integrations, calendar, manual) and writes an `event` entity
6
+ * with `type: meeting` (the default). Handles:
6
7
  * 1. Entity creation with proper frontmatter
7
8
  * 2. Participant resolution to existing person entities
8
9
  * 3. LLM-powered summary generation from transcript
9
10
  * 4. Structured extraction (action items, decisions)
10
11
  * 5. Task entity creation from action items
11
12
  * 6. Body template population
13
+ *
14
+ * Today the only event capture surface is meeting recording, so the
15
+ * payload type is still MeetingPayload — generalizing the payload shape
16
+ * is a follow-up when/if other event sources land.
12
17
  */
13
- import Anthropic from '@anthropic-ai/sdk';
14
- import { loadUserConfig, resolveModelId, resolveApiKey } from '../core/user-config.js';
18
+ import { completeSimple, getModel } from '@mariozechner/pi-ai';
19
+ import { loadUserConfig, resolveModelId, resolveApiKey, resolveProvider } from '../core/user-config.js';
20
+ import { log } from '../utils/log.js';
15
21
  // ── Processor ─────────────────────────────────────────────────────────
16
- export class MeetingProcessor {
22
+ export class EventProcessor {
17
23
  workspaceManager;
18
24
  wsHub;
19
- constructor(workspaceManager, wsHub) {
25
+ yjsManager;
26
+ constructor(workspaceManager, wsHub, yjsManager) {
20
27
  this.workspaceManager = workspaceManager;
21
28
  this.wsHub = wsHub;
29
+ this.yjsManager = yjsManager;
22
30
  }
23
31
  /**
24
32
  * Process a meeting payload: create entity, resolve participants,
@@ -32,8 +40,9 @@ export class MeetingProcessor {
32
40
  // Build frontmatter
33
41
  const now = new Date().toISOString();
34
42
  const data = {
35
- entity_type: 'meeting',
43
+ entity_type: 'event',
36
44
  entity_id: entityId,
45
+ type: 'meeting',
37
46
  name: payload.title || `Meeting ${payload.startedAt.slice(0, 10)}`,
38
47
  date: payload.startedAt.slice(0, 10),
39
48
  attendees: attendeeLinks,
@@ -59,22 +68,22 @@ export class MeetingProcessor {
59
68
  }
60
69
  // Create the entity immediately
61
70
  await graph.create({
62
- entityType: 'meeting',
71
+ entityType: 'event',
63
72
  entityId,
64
73
  data,
65
74
  content,
66
- commitMessage: `Add meeting: ${data.name} (via ${payload.source})`,
75
+ commitMessage: `Add event: ${data.name} (via ${payload.source})`,
67
76
  user,
68
77
  });
69
78
  this.broadcast('created', repo, entityId, user);
70
79
  // Generate summary asynchronously
71
80
  this.processAsync(payload, repo, entityId, attendeeLinks, user).catch(err => {
72
- console.warn(`[meeting-processor] Background processing failed for ${entityId}:`, err.message);
81
+ log.warn(`[event-processor] Background processing failed for ${entityId}:`, err.message);
73
82
  });
74
83
  return {
75
84
  entityId,
76
85
  repo,
77
- url: `/${repo}/meeting/${entityId}`,
86
+ url: `/${repo}/event/${entityId}`,
78
87
  attendeeLinks,
79
88
  extractionPending: true,
80
89
  tasksCreated: [],
@@ -89,10 +98,10 @@ export class MeetingProcessor {
89
98
  const graph = this.workspaceManager.getGraph(repo);
90
99
  // Verify entity exists
91
100
  try {
92
- graph.get('meeting', existingEntityId);
101
+ graph.get('event', existingEntityId);
93
102
  }
94
103
  catch {
95
- throw new Error(`Meeting entity not found: ${existingEntityId}`);
104
+ throw new Error(`Event entity not found: ${existingEntityId}`);
96
105
  }
97
106
  // Resolve participants
98
107
  const attendeeLinks = await this.resolveParticipants(payload.participants, repo);
@@ -110,22 +119,35 @@ export class MeetingProcessor {
110
119
  if (payload.platform)
111
120
  updateData.tags = ['auto-transcribed', payload.platform];
112
121
  await graph.update({
113
- entityType: 'meeting',
122
+ entityType: 'event',
114
123
  entityId: existingEntityId,
115
124
  data: updateData,
116
125
  content: undefined, // Don't overwrite content — keep user's notes until summary is ready
117
- commitMessage: `Start processing meeting: ${existingEntityId}`,
126
+ commitMessage: `Start processing event: ${existingEntityId}`,
118
127
  user,
119
128
  });
120
129
  this.broadcast('updated', repo, existingEntityId, user);
121
- // Generate summary asynchronously (same pipeline as new meetings)
122
- this.processAsync(payload, repo, existingEntityId, attendeeLinks, user).catch(err => {
123
- console.warn(`[meeting-processor] Background processing failed for ${existingEntityId}:`, err.message);
130
+ // Generate summary asynchronously (same pipeline as new events)
131
+ this.processAsync(payload, repo, existingEntityId, attendeeLinks, user).catch(async (err) => {
132
+ log.warn(`[event-processor] Background processing failed for ${existingEntityId}:`, err.message);
133
+ // Always clear the processing flag so the entity doesn't stay stuck
134
+ try {
135
+ const g = this.workspaceManager.getGraph(repo);
136
+ await g.update({
137
+ entityType: 'event',
138
+ entityId: existingEntityId,
139
+ data: { processing: false },
140
+ commitMessage: `Clear processing flag after error: ${existingEntityId}`,
141
+ user,
142
+ });
143
+ this.broadcast('updated', repo, existingEntityId, user);
144
+ }
145
+ catch { /* non-fatal */ }
124
146
  });
125
147
  return {
126
148
  entityId: existingEntityId,
127
149
  repo,
128
- url: `/${repo}/meeting/${existingEntityId}`,
150
+ url: `/${repo}/event/${existingEntityId}`,
129
151
  attendeeLinks,
130
152
  extractionPending: true,
131
153
  tasksCreated: [],
@@ -139,21 +161,47 @@ export class MeetingProcessor {
139
161
  // Format transcript
140
162
  const transcript = payload.transcriptText
141
163
  ?? (payload.transcript ? this.formatTranscript(payload.transcript) : '');
142
- // Use existing summary from source, or generate via LLM
164
+ // Use existing summary from source, or generate via LLM. Pass natural
165
+ // names instead of wikilinks so the model can attribute statements to
166
+ // specific attendees from contextual cues — the transcript only carries
167
+ // channel-level "Me / Them" labels, but the LLM can recover names from
168
+ // in-dialog mentions ("Sarah, what do you think?"), self-introductions,
169
+ // and the calendar attendee list.
170
+ const selfName = payload.participants.find(p => p.isSelf)?.name || 'Me';
171
+ const remoteNames = payload.participants
172
+ .filter(p => !p.isSelf)
173
+ .map(p => p.name);
143
174
  let summary = payload.existingSummary ?? null;
175
+ let summaryError;
144
176
  if (!summary && transcript) {
145
- summary = await this.generateSummary(transcript, payload.title || '', payload.memo || '', attendeeLinks);
177
+ const result = await this.generateSummary(transcript, payload.title || '', payload.memo || '', selfName, remoteNames);
178
+ summary = result.summary;
179
+ summaryError = result.error;
146
180
  }
147
181
  if (!summary) {
148
- // Fallback: raw transcript
182
+ // Fallback: raw transcript (or just memo if no transcript). Surface
183
+ // the LLM error inline so the user sees *why* they got a raw transcript
184
+ // instead of a generated summary — otherwise this fallback looks like
185
+ // success and the actual failure is buried in server logs.
186
+ const errorBanner = summaryError
187
+ ? `> [!warning] AI summary failed\n> ${summaryError.replace(/\n/g, '\n> ')}`
188
+ : null;
189
+ const fallbackContent = [
190
+ errorBanner,
191
+ transcript || null,
192
+ payload.memo ? `## Notes\n\n${payload.memo}` : null,
193
+ ].filter(Boolean).join('\n\n---\n\n');
149
194
  await graph.update({
150
- entityType: 'meeting',
195
+ entityType: 'event',
151
196
  entityId,
152
197
  data: { processing: false },
153
- content: transcript + (payload.memo ? `\n\n---\n\n## Notes\n\n${payload.memo}` : ''),
154
- commitMessage: `Add transcript for meeting: ${payload.title}`,
198
+ // Only overwrite content if we have something to write
199
+ content: fallbackContent || undefined,
200
+ commitMessage: `Add transcript for event: ${payload.title}`,
155
201
  user,
202
+ source: fallbackContent ? 'server-write' : undefined,
156
203
  });
204
+ this.broadcast('updated', repo, entityId, { id: 'ai-summary', name: 'AI Summary', email: 'ai@studiograph.local' });
157
205
  return;
158
206
  }
159
207
  // Extract structured data
@@ -186,19 +234,20 @@ export class MeetingProcessor {
186
234
  finalContent += `\n\n---\n\n## Transcript\n\n${transcript}`;
187
235
  }
188
236
  await graph.update({
189
- entityType: 'meeting',
237
+ entityType: 'event',
190
238
  entityId,
191
239
  data: updateData,
192
240
  content: finalContent,
193
- commitMessage: `Generate meeting notes: ${payload.title}`,
241
+ commitMessage: `Generate event notes: ${payload.title}`,
194
242
  user,
243
+ source: 'server-write',
195
244
  });
196
245
  this.broadcast('updated', repo, entityId, { id: 'ai-summary', name: 'AI Summary', email: 'ai@studiograph.local' });
197
246
  }
198
247
  /**
199
- * Create a task entity from an action item string, linked to the meeting.
248
+ * Create a task entity from an action item string, linked to the event.
200
249
  */
201
- async createTask(actionItem, meetingEntityId, repo, user) {
250
+ async createTask(actionItem, eventEntityId, repo, user) {
202
251
  const graph = this.workspaceManager.getGraph(repo);
203
252
  const slug = this.slugify(actionItem.slice(0, 60));
204
253
  const taskId = `task-${slug}-${Date.now()}`;
@@ -214,12 +263,12 @@ export class MeetingProcessor {
214
263
  date: now.slice(0, 10),
215
264
  created_at: now,
216
265
  updated_at: now,
217
- created_by: user?.id ?? 'meeting-processor',
218
- updated_by: user?.id ?? 'meeting-processor',
219
- tags: ['from-meeting'],
266
+ created_by: user?.id ?? 'event-processor',
267
+ updated_by: user?.id ?? 'event-processor',
268
+ tags: ['from-event'],
220
269
  },
221
- content: `## Description\n\n${actionItem}\n\n## Source\n\n- Meeting: [[${meetingEntityId}]]\n`,
222
- commitMessage: `Create task from meeting: ${actionItem.slice(0, 50)}`,
270
+ content: `## Description\n\n${actionItem}\n\n## Source\n\n- Event: [[${eventEntityId}]]\n`,
271
+ commitMessage: `Create task from event: ${actionItem.slice(0, 50)}`,
223
272
  user,
224
273
  });
225
274
  return taskId;
@@ -227,7 +276,7 @@ export class MeetingProcessor {
227
276
  // ── Helpers ──────────────────────────────────────────────────────────
228
277
  generateEntityId(payload) {
229
278
  const date = payload.startedAt.slice(0, 10);
230
- const title = payload.title || 'meeting';
279
+ const title = payload.title || 'event';
231
280
  return `${date}-${this.slugify(title)}`;
232
281
  }
233
282
  async resolveParticipants(participants, repo) {
@@ -282,26 +331,33 @@ export class MeetingProcessor {
282
331
  }
283
332
  return blocks.join('\n\n');
284
333
  }
285
- async generateSummary(transcript, title, memo, attendees) {
286
- const { modelId, apiKey } = this.getModelConfig();
287
- if (!apiKey)
288
- return null;
334
+ async generateSummary(transcript, title, memo, selfName, remoteNames) {
335
+ const { provider, modelId, apiKey } = this.getModelConfig();
336
+ if (!apiKey) {
337
+ return { summary: null, error: `No API key configured (provider=${provider}, model=${modelId})` };
338
+ }
289
339
  try {
290
- const client = new Anthropic({ apiKey });
340
+ const model = getModel(provider, modelId);
341
+ const remoteNameList = remoteNames.length > 0 ? remoteNames.join(', ') : '(none on calendar)';
291
342
  const prompt = `You are a meeting notes assistant. Generate structured meeting notes from this transcript.
292
343
 
293
344
  Meeting: ${title}
294
- Attendees: ${attendees.join(', ')}
295
- ${memo ? `Participant notes: ${memo}` : ''}
345
+ Note-taker (the "Me" channel): ${selfName}
346
+ Other attendees from calendar: ${remoteNameList}
347
+ ${memo ? `Note-taker's typed notes: ${memo}` : ''}
296
348
 
297
349
  Transcript:
298
350
  ${transcript.slice(0, 30000)}
299
351
 
352
+ The transcript labels are channel-based: "**Me:**" is ${selfName}; "**Them:**" is whichever remote attendee was speaking (multiple remote attendees share the same label, since they all came through the same audio channel).
353
+
354
+ Use contextual cues to attribute statements to specific people by name when you're reasonably confident — names mentioned in dialog ("Sarah, what do you think?"), self-introductions ("Hi, I'm Marcus"), domain expertise references, and the calendar attendee list above. When you genuinely can't tell which attendee said something, write generically ("an attendee asked…", "the team discussed…") rather than guess. Never fabricate attribution.
355
+
300
356
  Write structured meeting notes in Markdown:
301
- 1. Brief 2-3 sentence overview
357
+ 1. Brief 23 sentence overview
302
358
  2. ### section headers for each major topic
303
- 3. Bullet points for key points, decisions, context
304
- 4. End with ### Next Steps listing concrete action items (include assignee if mentioned)
359
+ 3. Bullet points for key points, decisions, context — attribute to attendees by name where context permits
360
+ 4. End with ### Next Steps listing concrete action items (include assignee name if identifiable)
305
361
 
306
362
  Guidelines:
307
363
  - Third person, past tense
@@ -311,28 +367,28 @@ Guidelines:
311
367
  - State decisions clearly
312
368
 
313
369
  Return ONLY the Markdown notes.`;
314
- const response = await client.messages.create({
315
- model: modelId,
316
- max_tokens: 4096,
317
- messages: [{ role: 'user', content: prompt }],
318
- });
319
- const text = response.content[0]?.type === 'text' ? response.content[0].text : '';
320
- return text.trim() || null;
370
+ const response = await completeSimple(model, { messages: [{ role: 'user', content: prompt, timestamp: Date.now() }] }, { apiKey, maxTokens: 4096 });
371
+ const textContent = response.content.find(c => c.type === 'text');
372
+ const text = textContent?.type === 'text' ? textContent.text : '';
373
+ const trimmed = text.trim();
374
+ if (!trimmed) {
375
+ return { summary: null, error: `LLM returned empty response (provider=${provider}, model=${modelId})` };
376
+ }
377
+ return { summary: trimmed };
321
378
  }
322
379
  catch (err) {
323
- console.warn('[meeting-processor] LLM summary failed:', err.message);
324
- return null;
380
+ const message = err.message || String(err);
381
+ log.warn('[event-processor] LLM summary failed:', message);
382
+ return { summary: null, error: `LLM call failed (provider=${provider}, model=${modelId}): ${message}` };
325
383
  }
326
384
  }
327
385
  async extractStructuredData(summary) {
328
- const { modelId, apiKey } = this.getModelConfig();
386
+ const { provider, modelId, apiKey } = this.getModelConfig();
329
387
  if (!apiKey)
330
388
  return { actionItems: [], decisions: [] };
331
389
  try {
332
- const client = new Anthropic({ apiKey });
333
- const response = await client.messages.create({
334
- model: modelId,
335
- max_tokens: 1024,
390
+ const model = getModel(provider, modelId);
391
+ const response = await completeSimple(model, {
336
392
  messages: [{
337
393
  role: 'user',
338
394
  content: `Extract action items and decisions from these meeting notes. Return JSON only:
@@ -340,9 +396,11 @@ Return ONLY the Markdown notes.`;
340
396
 
341
397
  Notes:
342
398
  ${summary.slice(0, 8000)}`,
399
+ timestamp: Date.now(),
343
400
  }],
344
- });
345
- const text = response.content[0]?.type === 'text' ? response.content[0].text : '';
401
+ }, { apiKey, maxTokens: 1024 });
402
+ const textContent = response.content.find(c => c.type === 'text');
403
+ const text = textContent?.type === 'text' ? textContent.text : '';
346
404
  const parsed = JSON.parse(text);
347
405
  return {
348
406
  actionItems: Array.isArray(parsed.actionItems) ? parsed.actionItems : [],
@@ -355,16 +413,17 @@ ${summary.slice(0, 8000)}`,
355
413
  }
356
414
  getModelConfig() {
357
415
  const userConfig = loadUserConfig();
416
+ const provider = resolveProvider(userConfig);
358
417
  const modelId = resolveModelId(userConfig);
359
418
  const apiKey = resolveApiKey(userConfig);
360
- return { modelId, apiKey };
419
+ return { provider, modelId, apiKey };
361
420
  }
362
421
  broadcast(action, repo, entityId, user) {
363
422
  this.wsHub?.broadcast({
364
423
  type: 'entity_change',
365
424
  action,
366
425
  repo,
367
- entityType: 'meeting',
426
+ entityType: 'event',
368
427
  entityId,
369
428
  actor: user?.name ?? 'system',
370
429
  source: 'api',
@@ -379,4 +438,4 @@ ${summary.slice(0, 8000)}`,
379
438
  .slice(0, 80);
380
439
  }
381
440
  }
382
- //# sourceMappingURL=meeting-processor.js.map
441
+ //# sourceMappingURL=event-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-processor.js","sourceRoot":"","sources":["../../src/services/event-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function convertDocxToMarkdown(buffer: Buffer): Promise<string>;
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Word (.docx) → Markdown — the docx extraction heuristics, isolated from the
3
+ * authoritative convert pipeline (../convert-service.ts).
4
+ *
5
+ * Best-effort, frequently-tuned "make the extracted text readable" code with NO
6
+ * graph/storage side effects: buffer in → markdown out, deterministic, no LLM.
7
+ * mammoth extracts semantic HTML; turndown renders it; the rules below handle
8
+ * the structures Word leans on that plain turndown / GFM otherwise mangle:
9
+ *
10
+ * - Images are DROPPED (mammoth would otherwise inline multi-hundred-KB base64
11
+ * `data:` URIs straight into the body).
12
+ * - Tables: Word emits `<td>` for EVERY cell (never `<th>`) and uses tables for
13
+ * LAYOUT as much as for data, so neither plain turndown nor turndown-plugin-
14
+ * gfm handles them (gfm only fires on `<th>` heading rows; everything else it
15
+ * keeps as raw HTML). We classify each table by SHAPE and render accordingly:
16
+ * • clean rectangular grid (no merged cells), every cell single-line → a
17
+ * real GFM markdown table (row 1 as the header) — e.g. a Fees/Schedule.
18
+ * • 2-column that reads as section layout (short left LABEL + substantial
19
+ * right BODY in most rows) → left cell becomes a `##` heading, right its
20
+ * body — e.g. "Assignment | …".
21
+ * • 2-column that reads as data (short values both sides) → `label: value`
22
+ * pairs, so the row relationship survives (not a wall of paragraphs).
23
+ * • anything else → flatten: each cell its own block.
24
+ * A cell's inner table is converted independently (nested tables recurse, up
25
+ * to a depth cap); `colspan`/`rowspan` force the flatten path since they
26
+ * break the clean-grid assumption GFM + the heading layout rely on.
27
+ * - Word wraps ordered lists as `<ul><li><ol>…</ol></li></ul>` (a bullet whose
28
+ * only child is a list); that LI is unwrapped so it doesn't render as a
29
+ * spurious "* 1." double marker.
30
+ * - Turndown's backslash escaping of `[ ] _` is relaxed for reading text
31
+ * (placeholders, signature underscore runs), but ONLY outside code spans /
32
+ * fenced blocks so literal code is never rewritten.
33
+ */
34
+ import TurndownService from 'turndown';
35
+ /** Left-cell text longer than this isn't treated as a section label (so the
36
+ * side-by-side signature block, whose cells are long, flattens instead). */
37
+ const MAX_LABEL_LEN = 60;
38
+ /** Nested-table recursion cap — past this, a table is emitted as plain text
39
+ * rather than recursing further (guards pathological deeply-nested docs). */
40
+ const MAX_TABLE_DEPTH = 8;
41
+ export async function convertDocxToMarkdown(buffer) {
42
+ const mammoth = await import('mammoth');
43
+ const { value: html } = await mammoth.convertToHtml({ buffer },
44
+ // Drop embedded images entirely (no base64 src reaches turndown).
45
+ { convertImage: mammoth.images.imgElement(() => Promise.resolve({ src: '' })) });
46
+ const md = buildTurndown().turndown(html ?? '');
47
+ return cleanup(md);
48
+ }
49
+ function buildTurndown() {
50
+ const turndown = new TurndownService({ headingStyle: 'atx', codeBlockStyle: 'fenced' });
51
+ // Emit nothing for any <img> (convertImage already stripped the base64 src;
52
+ // this drops the element so no empty `![]()` litters the body).
53
+ turndown.addRule('dropImages', { filter: 'img', replacement: () => '' });
54
+ // Word wraps ordered lists as <ul><li><ol>…</ol></li></ul>. Unwrap a list item
55
+ // whose ONLY child is a nested list so it emits just the inner list (no leading
56
+ // "* " bullet stacked on the "1." marker).
57
+ turndown.addRule('unwrapNestedListItem', {
58
+ filter: (node) => node.nodeName === 'LI' && onlyChildIsList(node),
59
+ replacement: (content) => content,
60
+ });
61
+ // Tables: walk the DOM directly and convert each cell with a nested turndown
62
+ // pass, so one rule can choose a GFM grid, a heading/label layout, or a block
63
+ // flatten per table (see module doc). Returning the whole table from here also
64
+ // short-circuits turndown's per-cell processing, so no `<table>` HTML leaks.
65
+ // `depth` bounds the nested-turndown recursion: each table-rule entry is one
66
+ // level, so a table-in-a-cell-in-a-table can't recurse without bound.
67
+ let depth = 0;
68
+ turndown.addRule('table', {
69
+ filter: 'table',
70
+ replacement: (_content, node) => {
71
+ const table = node;
72
+ if (depth >= MAX_TABLE_DEPTH) {
73
+ return `\n\n${(table.textContent ?? '').trim()}\n\n`;
74
+ }
75
+ depth++;
76
+ try {
77
+ // `depth` (1 = top-level, 2 = nested in a cell, …) sets heading level so
78
+ // a nested table's section labels sit UNDER their parent, not as peers.
79
+ return `\n\n${renderTable(table, turndown, depth)}\n\n`;
80
+ }
81
+ finally {
82
+ depth--;
83
+ }
84
+ },
85
+ });
86
+ return turndown;
87
+ }
88
+ /** True for a list item whose only meaningful child is a nested <ol>/<ul>
89
+ * (ignoring whitespace-only text nodes) — Word's ordered-list wrapper shape. */
90
+ function onlyChildIsList(li) {
91
+ const meaningful = Array.from(li.childNodes).filter((n) => !(n.nodeType === 3 && !(n.textContent ?? '').trim()));
92
+ return (meaningful.length === 1 &&
93
+ (meaningful[0].nodeName === 'OL' || meaningful[0].nodeName === 'UL'));
94
+ }
95
+ /** This table's DIRECT rows only — `<tr>` that are direct children or one level
96
+ * under `<thead>/<tbody>/<tfoot>`. Never descends into a cell, so a nested
97
+ * table's rows stay with the nested table (DOM `.rows` wrongly includes them). */
98
+ function directRows(table) {
99
+ const out = [];
100
+ for (const child of Array.from(table.childNodes)) {
101
+ if (child.nodeName === 'TR')
102
+ out.push(child);
103
+ else if (['THEAD', 'TBODY', 'TFOOT'].includes(child.nodeName)) {
104
+ for (const tr of Array.from(child.childNodes)) {
105
+ if (tr.nodeName === 'TR')
106
+ out.push(tr);
107
+ }
108
+ }
109
+ }
110
+ return out;
111
+ }
112
+ /** A row's DIRECT cells — `<td>/<th>` children of this `<tr>` (a nested table's
113
+ * cells belong to its own rows, never directly to this one). */
114
+ function directCells(row) {
115
+ return Array.from(row.childNodes).filter((n) => n.nodeName === 'TD' || n.nodeName === 'TH');
116
+ }
117
+ /** A cell that spans multiple columns/rows. Merged cells break the rectangular
118
+ * assumption GFM + the 2-col layout rely on, so a table with any forces flatten. */
119
+ function cellSpans(cell) {
120
+ const col = Number(cell.getAttribute?.('colspan') ?? '1') || 1;
121
+ const row = Number(cell.getAttribute?.('rowspan') ?? '1') || 1;
122
+ return col > 1 || row > 1;
123
+ }
124
+ /** Convert one table to markdown by shape. `td`/`th` content is produced by a
125
+ * nested turndown pass (so nested lists/paragraphs/tables come through).
126
+ * `depth` (1 = top-level) sets the heading level for the section-layout path. */
127
+ function renderTable(table, turndown, depth) {
128
+ const rowNodes = directRows(table);
129
+ const spanned = rowNodes.some((r) => directCells(r).some(cellSpans));
130
+ const rows = rowNodes.map((r) => directCells(r).map((c) => turndown.turndown(c.innerHTML).trim()));
131
+ if (!rows.length)
132
+ return '';
133
+ const cols = rows[0].length;
134
+ const uniform = rows.every((r) => r.length === cols);
135
+ const anyMultiline = rows.some((r) => r.some((c) => c.includes('\n')));
136
+ // 1) Clean rectangular grid of single-line cells → a real GFM table (row 1 =
137
+ // header). Merged cells (`spanned`) skip this — the grid isn't rectangular.
138
+ if (!spanned && uniform && rows.length >= 2 && cols >= 2 && !anyMultiline) {
139
+ return renderGfmTable(rows);
140
+ }
141
+ // 2) Two-column table. Section layout (short LABEL + substantial BODY in most
142
+ // rows) → headings; otherwise data → `label: value`. Merged cells fall
143
+ // through to flatten.
144
+ if (!spanned && uniform && cols === 2) {
145
+ const isSection = (row) => isLabel(row[0]) && isSubstantial(row[1]);
146
+ if (rows.filter(isSection).length >= Math.ceil(rows.length / 2)) {
147
+ // Heading level tracks nesting depth (## top-level, ### one level in, …),
148
+ // so a nested table's labels read as children, not peers of the document's
149
+ // top sections.
150
+ const h = '#'.repeat(Math.min(depth + 1, 6));
151
+ // Drop a leading column-header row (e.g. "Phases | Deliverables") when every
152
+ // BODY row is section-like — it's a table header, noise once headingized.
153
+ const body = rows.length > 1 && !isSection(rows[0]) && rows.slice(1).every(isSection)
154
+ ? rows.slice(1)
155
+ : rows;
156
+ return body
157
+ .map((row) => isSection(row)
158
+ ? `${h} ${headingLabel(row[0])}\n\n${row[1]}`
159
+ : row.filter(Boolean).join('\n\n'))
160
+ .join('\n\n');
161
+ }
162
+ return rows
163
+ .map(([left, right]) => isLabel(left) && right
164
+ ? `${inlineText(left)}: ${inlineText(right)}`
165
+ : [left, right].filter(Boolean).join('\n\n'))
166
+ .join('\n\n');
167
+ }
168
+ // 3) Anything else → flatten: each non-empty cell as its own block.
169
+ return rows.flat().filter(Boolean).join('\n\n');
170
+ }
171
+ function renderGfmTable(rows) {
172
+ const cell = (s) => s.replace(/\|/g, '\\|').replace(/\n+/g, ' ').trim();
173
+ const line = (cells) => `| ${cells.map(cell).join(' | ')} |`;
174
+ const [header, ...body] = rows;
175
+ return [
176
+ line(header),
177
+ `| ${header.map(() => '---').join(' | ')} |`,
178
+ ...body.map(line),
179
+ ].join('\n');
180
+ }
181
+ /** Collapse a cell's markdown to a single line (for headings / value cells). */
182
+ function inlineText(md) {
183
+ return md.replace(/\s*\n+\s*/g, ' ').trim();
184
+ }
185
+ /** A short, single-line cell that can act as a section label / key. */
186
+ function isLabel(cell) {
187
+ return !!cell && !cell.includes('\n') && cell.length <= MAX_LABEL_LEN;
188
+ }
189
+ /** A cell substantial enough to be a section BODY (not a short data value):
190
+ * multi-line, long, or a full sentence. Keeps a 2-col DATA table from turning
191
+ * every left value into a heading. */
192
+ function isSubstantial(cell) {
193
+ return cell.includes('\n') || cell.length >= 40 || /[.!?](\s|$)/.test(cell);
194
+ }
195
+ /** A section label for a heading: single line, with one layer of surrounding
196
+ * bold/italic stripped (Word styles the label; the `##` already conveys it, so
197
+ * `**Project Scope**` → `Project Scope`, `_Phases_` → `Phases`). */
198
+ function headingLabel(md) {
199
+ return inlineText(md)
200
+ .replace(/^\*\*(.+?)\*\*$/, '$1')
201
+ .replace(/^\*(.+?)\*$/, '$1')
202
+ .replace(/^_(.+?)_$/, '$1')
203
+ .trim();
204
+ }
205
+ /** Reading-text escape cleanup: turndown escapes `[ ] _` to protect markdown
206
+ * syntax, which litters placeholders (`\[MSA date\]`) and signature lines
207
+ * (`By: \_\_\_…`). Unescape those and collapse a long underscore run to a
208
+ * short rule — but ONLY outside code spans / fenced blocks, so literal code
209
+ * (snake_case, `a____b`, escaped brackets) is never rewritten. */
210
+ function cleanup(md) {
211
+ // Split on code regions (fenced blocks first, then inline spans); transform
212
+ // only the prose between them, re-emitting code verbatim.
213
+ const codeRegion = /(```[\s\S]*?```|`[^`\n]*`)/g;
214
+ let out = '';
215
+ let last = 0;
216
+ for (const m of md.matchAll(codeRegion)) {
217
+ out += unescapeProse(md.slice(last, m.index));
218
+ out += m[0];
219
+ last = (m.index ?? 0) + m[0].length;
220
+ }
221
+ out += unescapeProse(md.slice(last));
222
+ return out.replace(/\n{3,}/g, '\n\n').trim();
223
+ }
224
+ function unescapeProse(s) {
225
+ return s
226
+ // A run of 6+ underscores (escaped or not) — a signature line → short rule.
227
+ // 6+ (not 4+) so it can't catch a stray escaped pair in ordinary prose.
228
+ .replace(/(?:\\?_){6,}/g, '______')
229
+ // Unescape the punctuation turndown guards that only adds noise to reading
230
+ // text (brackets around placeholders, stray underscores).
231
+ .replace(/\\([[\]_])/g, '$1');
232
+ }
233
+ //# sourceMappingURL=docx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx.js","sourceRoot":"","sources":["../../../src/services/extract/docx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,eAAe,MAAM,UAAU,CAAC;AAavC;6EAC6E;AAC7E,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB;8EAC8E;AAC9E,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAc;IACxD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,aAAa,CACjD,EAAE,MAAM,EAAE;IACV,kEAAkE;IAClE,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAChF,CAAC;IACF,MAAM,EAAE,GAAG,aAAa,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExF,4EAA4E;IAC5E,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEzE,+EAA+E;IAC/E,gFAAgF;IAChF,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,sBAAsB,EAAE;QACvC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,eAAe,CAAC,IAA0B,CAAC;QACvF,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO;KAClC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,6EAA6E;IAC7E,sEAAsE;IACtE,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE;QACxB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,IAA0B,CAAC;YACzC,IAAI,KAAK,IAAI,eAAe,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC;YACvD,CAAC;YACD,KAAK,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,yEAAyE;gBACzE,wEAAwE;gBACxE,OAAO,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1D,CAAC;oBAAS,CAAC;gBACT,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;iFACiF;AACjF,SAAS,eAAe,CAAC,EAAW;IAClC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAC5D,CAAC;IACF,OAAO,CACL,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CACrE,CAAC;AACJ,CAAC;AAED;;mFAEmF;AACnF,SAAS,UAAU,CAAC,KAAc;IAChC,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACxC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9C,IAAI,EAAE,CAAC,QAAQ,KAAK,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;iEACiE;AACjE,SAAS,WAAW,CAAC,GAAY;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAClD,CAAC;AACJ,CAAC;AAED;qFACqF;AACrF,SAAS,SAAS,CAAC,IAAa;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/D,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;kFAEkF;AAClF,SAAS,WAAW,CAAC,KAAc,EAAE,QAAyB,EAAE,KAAa;IAC3E,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9B,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CACjE,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEvE,6EAA6E;IAC7E,+EAA+E;IAC/E,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1E,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,yBAAyB;IACzB,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,CAAC,GAAa,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;YAChE,0EAA0E;YAC1E,2EAA2E;YAC3E,gBAAgB;YAChB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,6EAA6E;YAC7E,0EAA0E;YAC1E,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;gBACtE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACf,CAAC,CAAC,IAAI,CAAC;YACX,OAAO,IAAI;iBACR,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,SAAS,CAAC,GAAG,CAAC;gBACZ,CAAC,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;gBAC7C,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CACrC;iBACA,IAAI,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CACrB,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK;YACpB,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,EAAE;YAC7C,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAC/C;aACA,IAAI,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAED,oEAAoE;IACpE,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB;IACtC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAChF,MAAM,IAAI,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACvE,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,OAAO;QACL,IAAI,CAAC,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI;QAC5C,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,gFAAgF;AAChF,SAAS,UAAU,CAAC,EAAU;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC;AACxE,CAAC;AAED;;uCAEuC;AACvC,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED;;qEAEqE;AACrE,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,UAAU,CAAC,EAAE,CAAC;SAClB,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;;mEAImE;AACnE,SAAS,OAAO,CAAC,EAAU;IACzB,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,UAAU,GAAG,6BAA6B,CAAC;IACjD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACxC,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,aAAa,CAAC,CAAS;IAC9B,OAAO,CAAC;QACN,4EAA4E;QAC5E,wEAAwE;SACvE,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;QACnC,2EAA2E;QAC3E,0DAA0D;SACzD,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC"}