studiograph 1.3.48-next.2 → 1.3.48-next.201

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 (1157) hide show
  1. package/README.md +26 -16
  2. package/dist/agent/agent-pool.d.ts +117 -0
  3. package/dist/agent/agent-pool.js +287 -0
  4. package/dist/agent/agent-pool.js.map +1 -0
  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 +113 -22
  9. package/dist/agent/orchestrator.js +574 -181
  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 +147 -69
  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/entity-schema.md +77 -433
  19. package/dist/agent/skills/interview/entity-templates.md +193 -0
  20. package/dist/agent/skills/interview/question-domains.md +391 -0
  21. package/dist/agent/skills/interview/skill.md +204 -0
  22. package/dist/agent/skills/schema-rules.md +54 -0
  23. package/dist/agent/tools/capture-tools.d.ts +31 -0
  24. package/dist/agent/tools/capture-tools.js +40 -0
  25. package/dist/agent/tools/capture-tools.js.map +1 -0
  26. package/dist/agent/tools/folder-tools.d.ts +47 -0
  27. package/dist/agent/tools/folder-tools.js +249 -0
  28. package/dist/agent/tools/folder-tools.js.map +1 -0
  29. package/dist/agent/tools/fs-tools.d.ts +7 -6
  30. package/dist/agent/tools/fs-tools.js +5 -4
  31. package/dist/agent/tools/fs-tools.js.map +1 -1
  32. package/dist/agent/tools/graph-tools.d.ts +21 -58
  33. package/dist/agent/tools/graph-tools.js +664 -333
  34. package/dist/agent/tools/graph-tools.js.map +1 -1
  35. package/dist/agent/tools/history-tools.d.ts +95 -0
  36. package/dist/agent/tools/history-tools.js +461 -0
  37. package/dist/agent/tools/history-tools.js.map +1 -0
  38. package/dist/agent/tools/load-skill.d.ts +6 -5
  39. package/dist/agent/tools/load-skill.js +3 -3
  40. package/dist/agent/tools/load-skill.js.map +1 -1
  41. package/dist/agent/tools/ops-tools.d.ts +5 -4
  42. package/dist/agent/tools/ops-tools.js +130 -236
  43. package/dist/agent/tools/ops-tools.js.map +1 -1
  44. package/dist/agent/tools/permission-tools.d.ts +87 -17
  45. package/dist/agent/tools/permission-tools.js +233 -38
  46. package/dist/agent/tools/permission-tools.js.map +1 -1
  47. package/dist/agent/tools/tool-loader.js +5 -4
  48. package/dist/agent/tools/tool-loader.js.map +1 -1
  49. package/dist/agent/tools/web-tools.js +58 -9
  50. package/dist/agent/tools/web-tools.js.map +1 -1
  51. package/dist/cli/commands/about.d.ts +1 -0
  52. package/dist/cli/commands/about.js +55 -3
  53. package/dist/cli/commands/about.js.map +1 -1
  54. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  55. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  56. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  57. package/dist/cli/commands/admin/audit.d.ts +21 -0
  58. package/dist/cli/commands/admin/audit.js +174 -0
  59. package/dist/cli/commands/admin/audit.js.map +1 -0
  60. package/dist/cli/commands/admin/backup.d.ts +54 -0
  61. package/dist/cli/commands/admin/backup.js +207 -0
  62. package/dist/cli/commands/admin/backup.js.map +1 -0
  63. package/dist/cli/commands/admin/folder.d.ts +11 -0
  64. package/dist/cli/commands/admin/folder.js +186 -0
  65. package/dist/cli/commands/admin/folder.js.map +1 -0
  66. package/dist/cli/commands/admin/index.d.ts +16 -0
  67. package/dist/cli/commands/admin/index.js +46 -0
  68. package/dist/cli/commands/admin/index.js.map +1 -0
  69. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  70. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  71. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  72. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  73. package/dist/cli/commands/admin/migrate.js +263 -0
  74. package/dist/cli/commands/admin/migrate.js.map +1 -0
  75. package/dist/cli/commands/admin/restore.d.ts +24 -0
  76. package/dist/cli/commands/admin/restore.js +228 -0
  77. package/dist/cli/commands/admin/restore.js.map +1 -0
  78. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  79. package/dist/cli/commands/admin/secrets.js +256 -0
  80. package/dist/cli/commands/admin/secrets.js.map +1 -0
  81. package/dist/cli/commands/admin/settings.d.ts +28 -0
  82. package/dist/cli/commands/admin/settings.js +284 -0
  83. package/dist/cli/commands/admin/settings.js.map +1 -0
  84. package/dist/cli/commands/admin/token.d.ts +42 -0
  85. package/dist/cli/commands/admin/token.js +126 -0
  86. package/dist/cli/commands/admin/token.js.map +1 -0
  87. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  88. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  89. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  90. package/dist/cli/commands/admin/user.d.ts +11 -0
  91. package/dist/cli/commands/admin/user.js +187 -0
  92. package/dist/cli/commands/admin/user.js.map +1 -0
  93. package/dist/cli/commands/clone.d.ts +25 -3
  94. package/dist/cli/commands/clone.js +142 -36
  95. package/dist/cli/commands/clone.js.map +1 -1
  96. package/dist/cli/commands/commit.d.ts +1 -1
  97. package/dist/cli/commands/commit.js +24 -11
  98. package/dist/cli/commands/commit.js.map +1 -1
  99. package/dist/cli/commands/config.d.ts +23 -107
  100. package/dist/cli/commands/config.js +52 -260
  101. package/dist/cli/commands/config.js.map +1 -1
  102. package/dist/cli/commands/connector.d.ts +10 -13
  103. package/dist/cli/commands/connector.js +16 -58
  104. package/dist/cli/commands/connector.js.map +1 -1
  105. package/dist/cli/commands/deploy.js +215 -68
  106. package/dist/cli/commands/deploy.js.map +1 -1
  107. package/dist/cli/commands/index.js +2 -2
  108. package/dist/cli/commands/index.js.map +1 -1
  109. package/dist/cli/commands/init.js +10 -30
  110. package/dist/cli/commands/init.js.map +1 -1
  111. package/dist/cli/commands/mcp.js +12 -4
  112. package/dist/cli/commands/mcp.js.map +1 -1
  113. package/dist/cli/commands/orphans.js +14 -30
  114. package/dist/cli/commands/orphans.js.map +1 -1
  115. package/dist/cli/commands/r2.d.ts +3 -0
  116. package/dist/cli/commands/r2.js +223 -204
  117. package/dist/cli/commands/r2.js.map +1 -1
  118. package/dist/cli/commands/redeploy.js +65 -12
  119. package/dist/cli/commands/redeploy.js.map +1 -1
  120. package/dist/cli/commands/reset.d.ts +22 -6
  121. package/dist/cli/commands/reset.js +142 -63
  122. package/dist/cli/commands/reset.js.map +1 -1
  123. package/dist/cli/commands/serve.js +218 -24
  124. package/dist/cli/commands/serve.js.map +1 -1
  125. package/dist/cli/commands/sync.d.ts +1 -1
  126. package/dist/cli/commands/sync.js +372 -202
  127. package/dist/cli/commands/sync.js.map +1 -1
  128. package/dist/cli/crypto-bundle.d.ts +39 -0
  129. package/dist/cli/crypto-bundle.js +94 -0
  130. package/dist/cli/crypto-bundle.js.map +1 -0
  131. package/dist/cli/index.js +24 -35
  132. package/dist/cli/index.js.map +1 -1
  133. package/dist/cli/railway-pin.d.ts +68 -0
  134. package/dist/cli/railway-pin.js +96 -0
  135. package/dist/cli/railway-pin.js.map +1 -0
  136. package/dist/cli/railway-provisioning.d.ts +53 -0
  137. package/dist/cli/railway-provisioning.js +85 -0
  138. package/dist/cli/railway-provisioning.js.map +1 -0
  139. package/dist/cli/setup-wizard.d.ts +33 -52
  140. package/dist/cli/setup-wizard.js +43 -68
  141. package/dist/cli/setup-wizard.js.map +1 -1
  142. package/dist/core/accent-palette.d.ts +22 -0
  143. package/dist/core/accent-palette.js +47 -0
  144. package/dist/core/accent-palette.js.map +1 -0
  145. package/dist/core/cell-anchor.d.ts +29 -0
  146. package/dist/core/cell-anchor.js +53 -0
  147. package/dist/core/cell-anchor.js.map +1 -0
  148. package/dist/core/comment-anchor.d.ts +41 -0
  149. package/dist/core/comment-anchor.js +147 -0
  150. package/dist/core/comment-anchor.js.map +1 -0
  151. package/dist/core/commit-messages.d.ts +57 -0
  152. package/dist/core/commit-messages.js +85 -0
  153. package/dist/core/commit-messages.js.map +1 -0
  154. package/dist/core/embeds.d.ts +77 -0
  155. package/dist/core/embeds.js +147 -0
  156. package/dist/core/embeds.js.map +1 -0
  157. package/dist/core/entity-body-templates.d.ts +21 -0
  158. package/dist/core/entity-body-templates.js +53 -0
  159. package/dist/core/entity-body-templates.js.map +1 -0
  160. package/dist/core/entity-types-catalog.d.ts +65 -0
  161. package/dist/core/entity-types-catalog.js +140 -0
  162. package/dist/core/entity-types-catalog.js.map +1 -0
  163. package/dist/core/folder-paths.d.ts +41 -0
  164. package/dist/core/folder-paths.js +95 -0
  165. package/dist/core/folder-paths.js.map +1 -0
  166. package/dist/core/folder-sidecar.d.ts +36 -0
  167. package/dist/core/folder-sidecar.js +91 -0
  168. package/dist/core/folder-sidecar.js.map +1 -0
  169. package/dist/core/format-registry.d.ts +170 -0
  170. package/dist/core/format-registry.js +404 -0
  171. package/dist/core/format-registry.js.map +1 -0
  172. package/dist/core/graph.d.ts +731 -14
  173. package/dist/core/graph.js +2202 -315
  174. package/dist/core/graph.js.map +1 -1
  175. package/dist/core/history-diff.d.ts +35 -0
  176. package/dist/core/history-diff.js +114 -0
  177. package/dist/core/history-diff.js.map +1 -0
  178. package/dist/core/refs.d.ts +41 -0
  179. package/dist/core/refs.js +80 -0
  180. package/dist/core/refs.js.map +1 -0
  181. package/dist/core/schema-registry.d.ts +82 -0
  182. package/dist/core/schema-registry.js +238 -0
  183. package/dist/core/schema-registry.js.map +1 -1
  184. package/dist/core/schemas/connector.d.ts +67 -0
  185. package/dist/core/schemas/connector.js +100 -0
  186. package/dist/core/schemas/connector.js.map +1 -0
  187. package/dist/core/schemas/workspace.d.ts +122 -0
  188. package/dist/core/schemas/workspace.js +211 -0
  189. package/dist/core/schemas/workspace.js.map +1 -0
  190. package/dist/core/secrets/SecretStore.d.ts +77 -0
  191. package/dist/core/secrets/SecretStore.js +13 -0
  192. package/dist/core/secrets/SecretStore.js.map +1 -0
  193. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  194. package/dist/core/secrets/SettingsResolver.js +80 -0
  195. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  196. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  197. package/dist/core/secrets/SettingsStore.js +9 -0
  198. package/dist/core/secrets/SettingsStore.js.map +1 -0
  199. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  200. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  201. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  202. package/dist/core/secrets/audit.d.ts +36 -0
  203. package/dist/core/secrets/audit.js +60 -0
  204. package/dist/core/secrets/audit.js.map +1 -0
  205. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  206. package/dist/core/secrets/auth-db-migration.js +653 -0
  207. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  208. package/dist/core/secrets/bundle.d.ts +141 -0
  209. package/dist/core/secrets/bundle.js +435 -0
  210. package/dist/core/secrets/bundle.js.map +1 -0
  211. package/dist/core/secrets/dual-write.d.ts +81 -0
  212. package/dist/core/secrets/dual-write.js +247 -0
  213. package/dist/core/secrets/dual-write.js.map +1 -0
  214. package/dist/core/secrets/encryption.d.ts +44 -0
  215. package/dist/core/secrets/encryption.js +97 -0
  216. package/dist/core/secrets/encryption.js.map +1 -0
  217. package/dist/core/secrets/index.d.ts +49 -0
  218. package/dist/core/secrets/index.js +74 -0
  219. package/dist/core/secrets/index.js.map +1 -0
  220. package/dist/core/secrets/master-key.d.ts +38 -0
  221. package/dist/core/secrets/master-key.js +122 -0
  222. package/dist/core/secrets/master-key.js.map +1 -0
  223. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  224. package/dist/core/secrets/probes/anthropic.js +300 -0
  225. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  226. package/dist/core/secrets/probes/brave.d.ts +9 -0
  227. package/dist/core/secrets/probes/brave.js +15 -0
  228. package/dist/core/secrets/probes/brave.js.map +1 -0
  229. package/dist/core/secrets/probes/r2.d.ts +15 -0
  230. package/dist/core/secrets/probes/r2.js +14 -0
  231. package/dist/core/secrets/probes/r2.js.map +1 -0
  232. package/dist/core/secrets/probes/tavily.d.ts +18 -0
  233. package/dist/core/secrets/probes/tavily.js +58 -0
  234. package/dist/core/secrets/probes/tavily.js.map +1 -0
  235. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  236. package/dist/core/secrets/probes/voyage.js +52 -0
  237. package/dist/core/secrets/probes/voyage.js.map +1 -0
  238. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  239. package/dist/core/secrets/r2-structural-migration.js +109 -0
  240. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  241. package/dist/core/secrets/read-flip.d.ts +59 -0
  242. package/dist/core/secrets/read-flip.js +87 -0
  243. package/dist/core/secrets/read-flip.js.map +1 -0
  244. package/dist/core/secrets/registry.d.ts +188 -0
  245. package/dist/core/secrets/registry.js +616 -0
  246. package/dist/core/secrets/registry.js.map +1 -0
  247. package/dist/core/types.d.ts +80 -475
  248. package/dist/core/types.js +27 -3
  249. package/dist/core/types.js.map +1 -1
  250. package/dist/core/user-config.d.ts +75 -7
  251. package/dist/core/user-config.js +155 -7
  252. package/dist/core/user-config.js.map +1 -1
  253. package/dist/core/validation.d.ts +731 -1790
  254. package/dist/core/validation.js +442 -228
  255. package/dist/core/validation.js.map +1 -1
  256. package/dist/core/workspace-manager.d.ts +89 -12
  257. package/dist/core/workspace-manager.js +225 -73
  258. package/dist/core/workspace-manager.js.map +1 -1
  259. package/dist/core/workspace.d.ts +19 -5
  260. package/dist/core/workspace.js +69 -35
  261. package/dist/core/workspace.js.map +1 -1
  262. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  263. package/dist/mcp/comment-virtual-entity.js +71 -0
  264. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  265. package/dist/mcp/connector-manager.d.ts +94 -13
  266. package/dist/mcp/connector-manager.js +283 -62
  267. package/dist/mcp/connector-manager.js.map +1 -1
  268. package/dist/mcp/oauth-provider.d.ts +27 -33
  269. package/dist/mcp/oauth-provider.js +65 -134
  270. package/dist/mcp/oauth-provider.js.map +1 -1
  271. package/dist/mcp/oauth-registry.d.ts +62 -0
  272. package/dist/mcp/oauth-registry.js +85 -0
  273. package/dist/mcp/oauth-registry.js.map +1 -0
  274. package/dist/mcp/server.d.ts +11 -3
  275. package/dist/mcp/server.js +30 -5
  276. package/dist/mcp/server.js.map +1 -1
  277. package/dist/mcp/state-signer.d.ts +62 -0
  278. package/dist/mcp/state-signer.js +205 -0
  279. package/dist/mcp/state-signer.js.map +1 -0
  280. package/dist/mcp/tools.d.ts +35 -2
  281. package/dist/mcp/tools.js +1361 -112
  282. package/dist/mcp/tools.js.map +1 -1
  283. package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
  284. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  285. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  286. package/dist/server/asset-index-queue.d.ts +96 -0
  287. package/dist/server/asset-index-queue.js +191 -0
  288. package/dist/server/asset-index-queue.js.map +1 -0
  289. package/dist/server/body-write-coordinator.d.ts +151 -0
  290. package/dist/server/body-write-coordinator.js +161 -0
  291. package/dist/server/body-write-coordinator.js.map +1 -0
  292. package/dist/server/cloud-billing-flow.d.ts +32 -0
  293. package/dist/server/cloud-billing-flow.js +75 -0
  294. package/dist/server/cloud-billing-flow.js.map +1 -0
  295. package/dist/server/commit-audit.d.ts +26 -0
  296. package/dist/server/commit-audit.js +30 -0
  297. package/dist/server/commit-audit.js.map +1 -0
  298. package/dist/server/index.d.ts +22 -3
  299. package/dist/server/index.js +622 -198
  300. package/dist/server/index.js.map +1 -1
  301. package/dist/server/middleware/sanitize.d.ts +46 -0
  302. package/dist/server/middleware/sanitize.js +171 -0
  303. package/dist/server/middleware/sanitize.js.map +1 -0
  304. package/dist/server/routes/asset-api.d.ts +31 -0
  305. package/dist/server/routes/asset-api.js +593 -0
  306. package/dist/server/routes/asset-api.js.map +1 -0
  307. package/dist/server/routes/audit-api.d.ts +24 -0
  308. package/dist/server/routes/audit-api.js +117 -0
  309. package/dist/server/routes/audit-api.js.map +1 -0
  310. package/dist/server/routes/auth-api.d.ts +3 -2
  311. package/dist/server/routes/auth-api.js +573 -39
  312. package/dist/server/routes/auth-api.js.map +1 -1
  313. package/dist/server/routes/capture-api.d.ts +18 -0
  314. package/dist/server/routes/capture-api.js +257 -0
  315. package/dist/server/routes/capture-api.js.map +1 -0
  316. package/dist/server/routes/chat-sessions-api.d.ts +9 -0
  317. package/dist/server/routes/chat-sessions-api.js +121 -0
  318. package/dist/server/routes/chat-sessions-api.js.map +1 -0
  319. package/dist/server/routes/chat.d.ts +12 -1
  320. package/dist/server/routes/chat.js +318 -88
  321. package/dist/server/routes/chat.js.map +1 -1
  322. package/dist/server/routes/comments-api.d.ts +15 -0
  323. package/dist/server/routes/comments-api.js +444 -0
  324. package/dist/server/routes/comments-api.js.map +1 -0
  325. package/dist/server/routes/config-api.d.ts +21 -0
  326. package/dist/server/routes/config-api.js +256 -0
  327. package/dist/server/routes/config-api.js.map +1 -0
  328. package/dist/server/routes/connectors-api.d.ts +17 -0
  329. package/dist/server/routes/connectors-api.js +410 -0
  330. package/dist/server/routes/connectors-api.js.map +1 -0
  331. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  332. package/dist/server/routes/event-ingest-api.js +125 -0
  333. package/dist/server/routes/event-ingest-api.js.map +1 -0
  334. package/dist/server/routes/git-http.d.ts +3 -3
  335. package/dist/server/routes/git-http.js +86 -38
  336. package/dist/server/routes/git-http.js.map +1 -1
  337. package/dist/server/routes/graph-api-access.d.ts +57 -0
  338. package/dist/server/routes/graph-api-access.js +112 -0
  339. package/dist/server/routes/graph-api-access.js.map +1 -0
  340. package/dist/server/routes/graph-api.d.ts +1 -1
  341. package/dist/server/routes/graph-api.js +1529 -263
  342. package/dist/server/routes/graph-api.js.map +1 -1
  343. package/dist/server/routes/health.d.ts +18 -0
  344. package/dist/server/routes/health.js +74 -0
  345. package/dist/server/routes/health.js.map +1 -0
  346. package/dist/server/routes/import-batch.d.ts +24 -0
  347. package/dist/server/routes/import-batch.js +33 -0
  348. package/dist/server/routes/import-batch.js.map +1 -0
  349. package/dist/server/routes/insights-api.d.ts +9 -2
  350. package/dist/server/routes/insights-api.js +384 -38
  351. package/dist/server/routes/insights-api.js.map +1 -1
  352. package/dist/server/routes/mcp.d.ts +7 -3
  353. package/dist/server/routes/mcp.js +22 -6
  354. package/dist/server/routes/mcp.js.map +1 -1
  355. package/dist/server/routes/oauth-api.d.ts +67 -0
  356. package/dist/server/routes/oauth-api.js +421 -0
  357. package/dist/server/routes/oauth-api.js.map +1 -0
  358. package/dist/server/routes/permissions-api.d.ts +9 -2
  359. package/dist/server/routes/permissions-api.js +87 -30
  360. package/dist/server/routes/permissions-api.js.map +1 -1
  361. package/dist/server/routes/r2-api.d.ts +25 -0
  362. package/dist/server/routes/r2-api.js +276 -0
  363. package/dist/server/routes/r2-api.js.map +1 -0
  364. package/dist/server/routes/secrets-api.d.ts +36 -0
  365. package/dist/server/routes/secrets-api.js +308 -0
  366. package/dist/server/routes/secrets-api.js.map +1 -0
  367. package/dist/server/routes/settings-api.d.ts +29 -0
  368. package/dist/server/routes/settings-api.js +180 -0
  369. package/dist/server/routes/settings-api.js.map +1 -0
  370. package/dist/server/routes/share-api.d.ts +32 -0
  371. package/dist/server/routes/share-api.js +234 -0
  372. package/dist/server/routes/share-api.js.map +1 -0
  373. package/dist/server/routes/url-api.d.ts +7 -0
  374. package/dist/server/routes/url-api.js +74 -0
  375. package/dist/server/routes/url-api.js.map +1 -0
  376. package/dist/server/routes/views-api.js +75 -7
  377. package/dist/server/routes/views-api.js.map +1 -1
  378. package/dist/server/routes/workspace-api.d.ts +2 -1
  379. package/dist/server/routes/workspace-api.js +129 -35
  380. package/dist/server/routes/workspace-api.js.map +1 -1
  381. package/dist/server/routes/ws.d.ts +2 -1
  382. package/dist/server/routes/ws.js +68 -16
  383. package/dist/server/routes/ws.js.map +1 -1
  384. package/dist/server/session-manager.d.ts +48 -5
  385. package/dist/server/session-manager.js +182 -15
  386. package/dist/server/session-manager.js.map +1 -1
  387. package/dist/server/ws-hub.d.ts +138 -14
  388. package/dist/server/ws-hub.js +0 -0
  389. package/dist/server/ws-hub.js.map +1 -1
  390. package/dist/server/yjs-manager.d.ts +285 -7
  391. package/dist/server/yjs-manager.js +907 -36
  392. package/dist/server/yjs-manager.js.map +1 -1
  393. package/dist/server/yjs-persistence.d.ts +165 -0
  394. package/dist/server/yjs-persistence.js +557 -0
  395. package/dist/server/yjs-persistence.js.map +1 -0
  396. package/dist/server/yjs-text-diff.d.ts +32 -0
  397. package/dist/server/yjs-text-diff.js +61 -0
  398. package/dist/server/yjs-text-diff.js.map +1 -0
  399. package/dist/services/access-control.d.ts +73 -0
  400. package/dist/services/access-control.js +165 -0
  401. package/dist/services/access-control.js.map +1 -0
  402. package/dist/services/asset-caption-service.d.ts +102 -0
  403. package/dist/services/asset-caption-service.js +184 -0
  404. package/dist/services/asset-caption-service.js.map +1 -0
  405. package/dist/services/asset-delete-authz.d.ts +31 -0
  406. package/dist/services/asset-delete-authz.js +61 -0
  407. package/dist/services/asset-delete-authz.js.map +1 -0
  408. package/dist/services/asset-finalize-service.d.ts +58 -0
  409. package/dist/services/asset-finalize-service.js +207 -0
  410. package/dist/services/asset-finalize-service.js.map +1 -0
  411. package/dist/services/asset-import-service.d.ts +111 -0
  412. package/dist/services/asset-import-service.js +394 -0
  413. package/dist/services/asset-import-service.js.map +1 -0
  414. package/dist/services/asset-index-sweep.d.ts +92 -0
  415. package/dist/services/asset-index-sweep.js +258 -0
  416. package/dist/services/asset-index-sweep.js.map +1 -0
  417. package/dist/services/asset-lifecycle-check.d.ts +22 -0
  418. package/dist/services/asset-lifecycle-check.js +80 -0
  419. package/dist/services/asset-lifecycle-check.js.map +1 -0
  420. package/dist/services/asset-listing.d.ts +72 -0
  421. package/dist/services/asset-listing.js +321 -0
  422. package/dist/services/asset-listing.js.map +1 -0
  423. package/dist/services/asset-presign-service.d.ts +68 -0
  424. package/dist/services/asset-presign-service.js +124 -0
  425. package/dist/services/asset-presign-service.js.map +1 -0
  426. package/dist/services/asset-sidecar-service.d.ts +30 -0
  427. package/dist/services/asset-sidecar-service.js +96 -0
  428. package/dist/services/asset-sidecar-service.js.map +1 -0
  429. package/dist/services/asset-upload-errors.d.ts +41 -0
  430. package/dist/services/asset-upload-errors.js +45 -0
  431. package/dist/services/asset-upload-errors.js.map +1 -0
  432. package/dist/services/asset-upload-service.d.ts +74 -0
  433. package/dist/services/asset-upload-service.js +244 -0
  434. package/dist/services/asset-upload-service.js.map +1 -0
  435. package/dist/services/asset-upload-token.d.ts +58 -0
  436. package/dist/services/asset-upload-token.js +75 -0
  437. package/dist/services/asset-upload-token.js.map +1 -0
  438. package/dist/services/assets/asset-index-service.d.ts +127 -0
  439. package/dist/services/assets/asset-index-service.js +227 -0
  440. package/dist/services/assets/asset-index-service.js.map +1 -0
  441. package/dist/services/assets/base.d.ts +118 -1
  442. package/dist/services/assets/base.js +77 -1
  443. package/dist/services/assets/base.js.map +1 -1
  444. package/dist/services/assets/index.d.ts +103 -1
  445. package/dist/services/assets/index.js +192 -0
  446. package/dist/services/assets/index.js.map +1 -1
  447. package/dist/services/assets/local.d.ts +16 -1
  448. package/dist/services/assets/local.js +110 -1
  449. package/dist/services/assets/local.js.map +1 -1
  450. package/dist/services/assets/r2-sync.d.ts +88 -0
  451. package/dist/services/assets/r2-sync.js +412 -0
  452. package/dist/services/assets/r2-sync.js.map +1 -0
  453. package/dist/services/assets/r2.d.ts +87 -1
  454. package/dist/services/assets/r2.js +203 -1
  455. package/dist/services/assets/r2.js.map +1 -1
  456. package/dist/services/auth-service.d.ts +350 -36
  457. package/dist/services/auth-service.js +1179 -140
  458. package/dist/services/auth-service.js.map +1 -1
  459. package/dist/services/bookmark-import-service.d.ts +49 -0
  460. package/dist/services/bookmark-import-service.js +250 -0
  461. package/dist/services/bookmark-import-service.js.map +1 -0
  462. package/dist/services/chat-session-service.d.ts +96 -0
  463. package/dist/services/chat-session-service.js +316 -0
  464. package/dist/services/chat-session-service.js.map +1 -0
  465. package/dist/services/cloud-inference-billing.d.ts +64 -0
  466. package/dist/services/cloud-inference-billing.js +313 -0
  467. package/dist/services/cloud-inference-billing.js.map +1 -0
  468. package/dist/services/comment-service.d.ts +97 -0
  469. package/dist/services/comment-service.js +341 -0
  470. package/dist/services/comment-service.js.map +1 -0
  471. package/dist/services/convert-service.d.ts +64 -0
  472. package/dist/services/convert-service.js +68 -0
  473. package/dist/services/convert-service.js.map +1 -0
  474. package/dist/services/csv-service.d.ts +22 -17
  475. package/dist/services/csv-service.js +55 -92
  476. package/dist/services/csv-service.js.map +1 -1
  477. package/dist/services/entity-mutations.d.ts +210 -0
  478. package/dist/services/entity-mutations.js +377 -0
  479. package/dist/services/entity-mutations.js.map +1 -0
  480. package/dist/services/event-processor.d.ts +104 -0
  481. package/dist/services/event-processor.js +441 -0
  482. package/dist/services/event-processor.js.map +1 -0
  483. package/dist/services/extract/docx.d.ts +1 -0
  484. package/dist/services/extract/docx.js +233 -0
  485. package/dist/services/extract/docx.js.map +1 -0
  486. package/dist/services/extract/index.d.ts +9 -0
  487. package/dist/services/extract/index.js +10 -0
  488. package/dist/services/extract/index.js.map +1 -0
  489. package/dist/services/extract/pdf.d.ts +13 -0
  490. package/dist/services/extract/pdf.js +69 -0
  491. package/dist/services/extract/pdf.js.map +1 -0
  492. package/dist/services/folder-creation.d.ts +33 -0
  493. package/dist/services/folder-creation.js +103 -0
  494. package/dist/services/folder-creation.js.map +1 -0
  495. package/dist/services/git.d.ts +54 -0
  496. package/dist/services/git.js +188 -54
  497. package/dist/services/git.js.map +1 -1
  498. package/dist/services/graph-maintenance.d.ts +42 -0
  499. package/dist/services/graph-maintenance.js +143 -0
  500. package/dist/services/graph-maintenance.js.map +1 -0
  501. package/dist/services/import-service.d.ts +58 -3
  502. package/dist/services/import-service.js +316 -100
  503. package/dist/services/import-service.js.map +1 -1
  504. package/dist/services/lint-service.js +10 -17
  505. package/dist/services/lint-service.js.map +1 -1
  506. package/dist/services/markdown.d.ts +12 -1
  507. package/dist/services/markdown.js +77 -9
  508. package/dist/services/markdown.js.map +1 -1
  509. package/dist/services/memory-service.d.ts +22 -14
  510. package/dist/services/memory-service.js +53 -35
  511. package/dist/services/memory-service.js.map +1 -1
  512. package/dist/services/mention-detector.d.ts +23 -0
  513. package/dist/services/mention-detector.js +47 -0
  514. package/dist/services/mention-detector.js.map +1 -0
  515. package/dist/services/model-capabilities.d.ts +41 -0
  516. package/dist/services/model-capabilities.js +107 -0
  517. package/dist/services/model-capabilities.js.map +1 -0
  518. package/dist/services/notification-broadcast.d.ts +32 -0
  519. package/dist/services/notification-broadcast.js +38 -0
  520. package/dist/services/notification-broadcast.js.map +1 -0
  521. package/dist/services/notification-service.d.ts +41 -0
  522. package/dist/services/notification-service.js +100 -0
  523. package/dist/services/notification-service.js.map +1 -0
  524. package/dist/services/oauth-server-store.d.ts +147 -0
  525. package/dist/services/oauth-server-store.js +319 -0
  526. package/dist/services/oauth-server-store.js.map +1 -0
  527. package/dist/services/orphan-service.js +2 -2
  528. package/dist/services/orphan-service.js.map +1 -1
  529. package/dist/services/personal-folder.d.ts +40 -0
  530. package/dist/services/personal-folder.js +101 -0
  531. package/dist/services/personal-folder.js.map +1 -0
  532. package/dist/services/share-link-service.d.ts +57 -0
  533. package/dist/services/share-link-service.js +142 -0
  534. package/dist/services/share-link-service.js.map +1 -0
  535. package/dist/services/user-person-bridge.d.ts +136 -0
  536. package/dist/services/user-person-bridge.js +340 -0
  537. package/dist/services/user-person-bridge.js.map +1 -0
  538. package/dist/services/vector-service.d.ts +260 -6
  539. package/dist/services/vector-service.js +574 -31
  540. package/dist/services/vector-service.js.map +1 -1
  541. package/dist/services/workspace-access.d.ts +108 -0
  542. package/dist/services/workspace-access.js +149 -0
  543. package/dist/services/workspace-access.js.map +1 -0
  544. package/dist/services/workspace-assets-folder.d.ts +46 -0
  545. package/dist/services/workspace-assets-folder.js +75 -0
  546. package/dist/services/workspace-assets-folder.js.map +1 -0
  547. package/dist/utils/git.d.ts +17 -2
  548. package/dist/utils/git.js +23 -7
  549. package/dist/utils/git.js.map +1 -1
  550. package/dist/utils/log.d.ts +42 -0
  551. package/dist/utils/log.js +137 -0
  552. package/dist/utils/log.js.map +1 -0
  553. package/dist/utils/preflight.js +2 -2
  554. package/dist/utils/preflight.js.map +1 -1
  555. package/dist/utils/version-checker.d.ts +12 -19
  556. package/dist/utils/version-checker.js +14 -104
  557. package/dist/utils/version-checker.js.map +1 -1
  558. package/dist/web/_app/immutable/assets/0.BZHoBJEc.css +2 -0
  559. package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
  560. package/dist/web/_app/immutable/assets/13.7d-Q37wc.css +1 -0
  561. package/dist/web/_app/immutable/assets/14.BwBFdc1D.css +1 -0
  562. package/dist/web/_app/immutable/assets/15.CmLrbzZp.css +1 -0
  563. package/dist/web/_app/immutable/assets/16.B0GwXar3.css +1 -0
  564. package/dist/web/_app/immutable/assets/2.C9Vt4JHy.css +1 -0
  565. package/dist/web/_app/immutable/assets/3.BFvgCYSk.css +1 -0
  566. package/dist/web/_app/immutable/assets/4.OmdYF47-.css +1 -0
  567. package/dist/web/_app/immutable/assets/5.C6MySjPq.css +1 -0
  568. package/dist/web/_app/immutable/assets/BulkActionsBar.Bx7nxMjH.css +1 -0
  569. package/dist/web/_app/immutable/assets/CalendarView.lBCvS3X5.css +1 -0
  570. package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
  571. package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
  572. package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
  573. package/dist/web/_app/immutable/assets/FolderMutationDialogs.D2B7KrRn.css +1 -0
  574. package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
  575. package/dist/web/_app/immutable/assets/GalleryView.CF48FWYQ.css +1 -0
  576. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  577. package/dist/web/_app/immutable/assets/KanbanView.BOaI5KFL.css +1 -0
  578. package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
  579. package/dist/web/_app/immutable/assets/Markdown.BqgpZCv5.css +1 -0
  580. package/dist/web/_app/immutable/assets/Rail.f8lsriOT.css +1 -0
  581. package/dist/web/_app/immutable/assets/SettingsDialog.DwMus2u2.css +1 -0
  582. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  583. package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
  584. package/dist/web/_app/immutable/assets/TimelineView.DriOGAKB.css +1 -0
  585. package/dist/web/_app/immutable/assets/WorkspaceView.u5VdwRR6.css +1 -0
  586. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  587. package/dist/web/_app/immutable/assets/checkbox.DK0MgYgb.css +1 -0
  588. package/dist/web/_app/immutable/assets/dist.DDCWxn3B.css +1 -0
  589. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  590. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  591. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  592. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  593. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  594. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  595. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  596. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  597. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  598. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  599. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  600. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  601. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  602. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  603. package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
  604. package/dist/web/_app/immutable/assets/list-columns.DiLB0G5L.css +1 -0
  605. package/dist/web/_app/immutable/assets/select.BFL238eD.css +1 -0
  606. package/dist/web/_app/immutable/assets/sheet.4rY4hpfJ.css +1 -0
  607. package/dist/web/_app/immutable/chunks/2oYV6q4R.js +2 -0
  608. package/dist/web/_app/immutable/chunks/4XSri7g0.js +1 -0
  609. package/dist/web/_app/immutable/chunks/4iaT0dG72.js +1 -0
  610. package/dist/web/_app/immutable/chunks/5_TKU9QS2.js +1 -0
  611. package/dist/web/_app/immutable/chunks/8Yh26Z9_2.js +1 -0
  612. package/dist/web/_app/immutable/chunks/Atl8xKOm.js +2 -0
  613. package/dist/web/_app/immutable/chunks/B-Z_xZy_.js +4 -0
  614. package/dist/web/_app/immutable/chunks/B0pk0Lyx.js +1 -0
  615. package/dist/web/_app/immutable/chunks/B1RnjnNt.js +1 -0
  616. package/dist/web/_app/immutable/chunks/B2n86UNJ.js +1 -0
  617. package/dist/web/_app/immutable/chunks/B318GEUB2.js +1 -0
  618. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  619. package/dist/web/_app/immutable/chunks/B8yrQWxT2.js +1 -0
  620. package/dist/web/_app/immutable/chunks/BADt8daH.js +2 -0
  621. package/dist/web/_app/immutable/chunks/BBGt-XQo.js +3 -0
  622. package/dist/web/_app/immutable/chunks/BDIUHcEz.js +1 -0
  623. package/dist/web/_app/immutable/chunks/BDSuq3KH.js +1 -0
  624. package/dist/web/_app/immutable/chunks/BGiLU5VN.js +1 -0
  625. package/dist/web/_app/immutable/chunks/BJgOZTHR.js +1 -0
  626. package/dist/web/_app/immutable/chunks/BOSiTh-42.js +1 -0
  627. package/dist/web/_app/immutable/chunks/BPxcCdjn.js +1 -0
  628. package/dist/web/_app/immutable/chunks/BVPNAzAK.js +1 -0
  629. package/dist/web/_app/immutable/chunks/BcOvJgjM.js +1 -0
  630. package/dist/web/_app/immutable/chunks/BdYQewoD.js +1 -0
  631. package/dist/web/_app/immutable/chunks/BfCWIy8t.js +8 -0
  632. package/dist/web/_app/immutable/chunks/BgRT-K6w.js +5 -0
  633. package/dist/web/_app/immutable/chunks/BibveGGd.js +1 -0
  634. package/dist/web/_app/immutable/chunks/BmM5VZ4W.js +1 -0
  635. package/dist/web/_app/immutable/chunks/BnIYzuS1.js +66 -0
  636. package/dist/web/_app/immutable/chunks/BoDmwOTJ.js +1 -0
  637. package/dist/web/_app/immutable/chunks/BoglwbZW.js +1 -0
  638. package/dist/web/_app/immutable/chunks/Bqm_YrIg2.js +23 -0
  639. package/dist/web/_app/immutable/chunks/BtMRrdc4.js +2 -0
  640. package/dist/web/_app/immutable/chunks/C-AnzvKr.js +7 -0
  641. package/dist/web/_app/immutable/chunks/C1Y3tUpz.js +1 -0
  642. package/dist/web/_app/immutable/chunks/C6VZhhwF.js +1 -0
  643. package/dist/web/_app/immutable/chunks/C8IMrD4G2.js +3 -0
  644. package/dist/web/_app/immutable/chunks/CAXXrbj52.js +1 -0
  645. package/dist/web/_app/immutable/chunks/CB-0u-Pc2.js +1 -0
  646. package/dist/web/_app/immutable/chunks/CEniyZ1Z2.js +6 -0
  647. package/dist/web/_app/immutable/chunks/CJhElIkU2.js +1 -0
  648. package/dist/web/_app/immutable/chunks/CK8tIaYT.js +1 -0
  649. package/dist/web/_app/immutable/chunks/CM8uYli8.js +1 -0
  650. package/dist/web/_app/immutable/chunks/CTzjJm_m2.js +1 -0
  651. package/dist/web/_app/immutable/chunks/CUXqa1nn2.js +1 -0
  652. package/dist/web/_app/immutable/chunks/CY0iY_WO.js +1 -0
  653. package/dist/web/_app/immutable/chunks/CbCfNNV_2.js +2692 -0
  654. package/dist/web/_app/immutable/chunks/CbuGIyDu2.js +22 -0
  655. package/dist/web/_app/immutable/chunks/CcRGXA-t.js +1 -0
  656. package/dist/web/_app/immutable/chunks/CcXmQaYs2.js +1 -0
  657. package/dist/web/_app/immutable/chunks/CcaQuaSt2.js +1 -0
  658. package/dist/web/_app/immutable/chunks/CoHaBDpN2.js +2 -0
  659. package/dist/web/_app/immutable/chunks/Cvbd3myc2.js +14 -0
  660. package/dist/web/_app/immutable/chunks/D20C1thX2.js +1 -0
  661. package/dist/web/_app/immutable/chunks/D3JoMtWC.js +7 -0
  662. package/dist/web/_app/immutable/chunks/D3ch71s_.js +1 -0
  663. package/dist/web/_app/immutable/chunks/D4xXlMEU.js +2 -0
  664. package/dist/web/_app/immutable/chunks/D5GipQqN2.js +1 -0
  665. package/dist/web/_app/immutable/chunks/D9TyJuu_.js +1 -0
  666. package/dist/web/_app/immutable/chunks/DBFijAmG.js +1 -0
  667. package/dist/web/_app/immutable/chunks/DHLjkH7T.js +1 -0
  668. package/dist/web/_app/immutable/chunks/DIfdPIt_2.js +1 -0
  669. package/dist/web/_app/immutable/chunks/DO_sw49q2.js +1 -0
  670. package/dist/web/_app/immutable/chunks/DP69PpIj.js +1 -0
  671. package/dist/web/_app/immutable/chunks/DQ3HSZMs.js +2 -0
  672. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  673. package/dist/web/_app/immutable/chunks/DT0wzK622.js +1 -0
  674. package/dist/web/_app/immutable/chunks/DTnEJArL.js +1 -0
  675. package/dist/web/_app/immutable/chunks/DToS-G202.js +1 -0
  676. package/dist/web/_app/immutable/chunks/DZcU6mGe2.js +1 -0
  677. package/dist/web/_app/immutable/chunks/DbslMybD.js +1 -0
  678. package/dist/web/_app/immutable/chunks/DcGThsSF.js +1 -0
  679. package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
  680. package/dist/web/_app/immutable/chunks/De0g5qop2.js +1 -0
  681. package/dist/web/_app/immutable/chunks/DimS8dbZ2.js +1 -0
  682. package/dist/web/_app/immutable/chunks/DjuqhOjF.js +1 -0
  683. package/dist/web/_app/immutable/chunks/Dk6sAhpo.js +3 -0
  684. package/dist/web/_app/immutable/chunks/Dl6cnwyk.js +1 -0
  685. package/dist/web/_app/immutable/chunks/DnIQzIOz.js +1 -0
  686. package/dist/web/_app/immutable/chunks/DnXYAo60.js +1 -0
  687. package/dist/web/_app/immutable/chunks/DnrImJan.js +1 -0
  688. package/dist/web/_app/immutable/chunks/Dpuq25vu2.js +1 -0
  689. package/dist/web/_app/immutable/chunks/DrMZDWru.js +1 -0
  690. package/dist/web/_app/immutable/chunks/DsVOtl0N.js +1 -0
  691. package/dist/web/_app/immutable/chunks/DuTXsWdP.js +2 -0
  692. package/dist/web/_app/immutable/chunks/Dw-frCfE.js +1 -0
  693. package/dist/web/_app/immutable/chunks/Dz34u8Ie2.js +185 -0
  694. package/dist/web/_app/immutable/chunks/DzcFeQZU2.js +2 -0
  695. package/dist/web/_app/immutable/chunks/DzrRTvug.js +1 -0
  696. package/dist/web/_app/immutable/chunks/G5oUVQa92.js +1 -0
  697. package/dist/web/_app/immutable/chunks/HyhOhoeq2.js +2 -0
  698. package/dist/web/_app/immutable/chunks/J5nb9xxj.js +1 -0
  699. package/dist/web/_app/immutable/chunks/JCjEwqH9.js +1 -0
  700. package/dist/web/_app/immutable/chunks/JN_nsXUm2.js +1 -0
  701. package/dist/web/_app/immutable/chunks/JS2_GaB1.js +1 -0
  702. package/dist/web/_app/immutable/chunks/MtI6dyxu.js +1 -0
  703. package/dist/web/_app/immutable/chunks/N6vnY5Si2.js +1 -0
  704. package/dist/web/_app/immutable/chunks/PcEbaKam.js +2 -0
  705. package/dist/web/_app/immutable/chunks/VTYhCLh9.js +2 -0
  706. package/dist/web/_app/immutable/chunks/Wowi_89k.js +5 -0
  707. package/dist/web/_app/immutable/chunks/Y_asqJqs2.js +83 -0
  708. package/dist/web/_app/immutable/chunks/Yhg5Q4MT.js +1 -0
  709. package/dist/web/_app/immutable/chunks/f_eYccPf2.js +1 -0
  710. package/dist/web/_app/immutable/chunks/hm_8RsuL.js +1 -0
  711. package/dist/web/_app/immutable/chunks/iPCkjliu.js +3 -0
  712. package/dist/web/_app/immutable/chunks/j2AvgZGz.js +1 -0
  713. package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
  714. package/dist/web/_app/immutable/chunks/l1761xxj.js +1 -0
  715. package/dist/web/_app/immutable/chunks/liGRFQqV2.js +184 -0
  716. package/dist/web/_app/immutable/chunks/lq1kR86d.js +1 -0
  717. package/dist/web/_app/immutable/chunks/mIykYR4F2.js +1 -0
  718. package/dist/web/_app/immutable/chunks/rbhlO_t8.js +1 -0
  719. package/dist/web/_app/immutable/chunks/tJpAwaTl.js +1 -0
  720. package/dist/web/_app/immutable/chunks/tcegdii0.js +2 -0
  721. package/dist/web/_app/immutable/chunks/u8G2EUvz2.js +224 -0
  722. package/dist/web/_app/immutable/chunks/vgsM0KTm2.js +1 -0
  723. package/dist/web/_app/immutable/chunks/xcGI4fuV.js +1 -0
  724. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  725. package/dist/web/_app/immutable/chunks/yEYlhV9G2.js +1 -0
  726. package/dist/web/_app/immutable/entry/app.DSf_XGp8.js +2 -0
  727. package/dist/web/_app/immutable/entry/start.B7ScfxPc.js +1 -0
  728. package/dist/web/_app/immutable/nodes/0.BMSOOETY.js +2 -0
  729. package/dist/web/_app/immutable/nodes/1.B0lBUpHt.js +1 -0
  730. package/dist/web/_app/immutable/nodes/10.DmDbUH1j.js +1 -0
  731. package/dist/web/_app/immutable/nodes/11.gwY7gZdR.js +1 -0
  732. package/dist/web/_app/immutable/nodes/12.BpGHSr2y.js +1 -0
  733. package/dist/web/_app/immutable/nodes/13.Bf178QF_.js +1 -0
  734. package/dist/web/_app/immutable/nodes/14.D_x8-nk9.js +1 -0
  735. package/dist/web/_app/immutable/nodes/15.DY4XeagL.js +1 -0
  736. package/dist/web/_app/immutable/nodes/16.DPqftx8x.js +77 -0
  737. package/dist/web/_app/immutable/nodes/2.OM2LGRpi.js +109 -0
  738. package/dist/web/_app/immutable/nodes/3.e8ZoPCmC.js +6 -0
  739. package/dist/web/_app/immutable/nodes/4.BdYR1hNQ.js +11 -0
  740. package/dist/web/_app/immutable/nodes/5.B8sOFna9.js +5 -0
  741. package/dist/web/_app/immutable/nodes/6.L1BbYsmo.js +1 -0
  742. package/dist/web/_app/immutable/nodes/7.B7zoemJD.js +1 -0
  743. package/dist/web/_app/immutable/nodes/8.B1VtnfMK.js +1 -0
  744. package/dist/web/_app/immutable/nodes/9.BE3VCQzk.js +1 -0
  745. package/dist/web/_app/version.json +1 -1
  746. package/dist/web/favicon-16.png +0 -0
  747. package/dist/web/favicon-180.png +0 -0
  748. package/dist/web/favicon-32.png +0 -0
  749. package/dist/web/favicon-48.png +0 -0
  750. package/dist/web/favicon-512.png +0 -0
  751. package/dist/web/favicon.ico +0 -0
  752. package/dist/web/favicon.svg +8 -0
  753. package/dist/web/index.html +58 -19
  754. package/dist/web/studiograph-logomark.svg +29 -0
  755. package/package.json +38 -14
  756. package/dist/agent/skills/enrich-entities.md +0 -136
  757. package/dist/agent/skills/obsidian-source-setup.md +0 -246
  758. package/dist/agent/skills/skill-loader.d.ts +0 -48
  759. package/dist/agent/skills/skill-loader.js +0 -166
  760. package/dist/agent/skills/skill-loader.js.map +0 -1
  761. package/dist/agent/skills/sync-configuration.md +0 -119
  762. package/dist/agent/skills/sync-setup.md +0 -82
  763. package/dist/agent/tools/sync-tools.d.ts +0 -35
  764. package/dist/agent/tools/sync-tools.js +0 -992
  765. package/dist/agent/tools/sync-tools.js.map +0 -1
  766. package/dist/auth/github.d.ts +0 -56
  767. package/dist/auth/github.js +0 -169
  768. package/dist/auth/github.js.map +0 -1
  769. package/dist/cli/commands/access.d.ts +0 -11
  770. package/dist/cli/commands/access.js +0 -156
  771. package/dist/cli/commands/access.js.map +0 -1
  772. package/dist/cli/commands/app.d.ts +0 -7
  773. package/dist/cli/commands/app.js +0 -268
  774. package/dist/cli/commands/app.js.map +0 -1
  775. package/dist/cli/commands/auth.d.ts +0 -10
  776. package/dist/cli/commands/auth.js +0 -79
  777. package/dist/cli/commands/auth.js.map +0 -1
  778. package/dist/cli/commands/clear.d.ts +0 -5
  779. package/dist/cli/commands/clear.js +0 -36
  780. package/dist/cli/commands/clear.js.map +0 -1
  781. package/dist/cli/commands/collection.d.ts +0 -10
  782. package/dist/cli/commands/collection.js +0 -187
  783. package/dist/cli/commands/collection.js.map +0 -1
  784. package/dist/cli/commands/enrich.d.ts +0 -11
  785. package/dist/cli/commands/enrich.js +0 -135
  786. package/dist/cli/commands/enrich.js.map +0 -1
  787. package/dist/cli/commands/graphrag.d.ts +0 -12
  788. package/dist/cli/commands/graphrag.js +0 -122
  789. package/dist/cli/commands/graphrag.js.map +0 -1
  790. package/dist/cli/commands/join.d.ts +0 -9
  791. package/dist/cli/commands/join.js +0 -255
  792. package/dist/cli/commands/join.js.map +0 -1
  793. package/dist/cli/commands/members.d.ts +0 -11
  794. package/dist/cli/commands/members.js +0 -230
  795. package/dist/cli/commands/members.js.map +0 -1
  796. package/dist/cli/commands/org.d.ts +0 -10
  797. package/dist/cli/commands/org.js +0 -132
  798. package/dist/cli/commands/org.js.map +0 -1
  799. package/dist/cli/commands/provision.d.ts +0 -8
  800. package/dist/cli/commands/provision.js +0 -116
  801. package/dist/cli/commands/provision.js.map +0 -1
  802. package/dist/cli/commands/resolve.d.ts +0 -8
  803. package/dist/cli/commands/resolve.js +0 -85
  804. package/dist/cli/commands/resolve.js.map +0 -1
  805. package/dist/cli/commands/review.d.ts +0 -19
  806. package/dist/cli/commands/review.js +0 -128
  807. package/dist/cli/commands/review.js.map +0 -1
  808. package/dist/cli/commands/source.d.ts +0 -16
  809. package/dist/cli/commands/source.js +0 -159
  810. package/dist/cli/commands/source.js.map +0 -1
  811. package/dist/cli/commands/start.d.ts +0 -7
  812. package/dist/cli/commands/start.js +0 -589
  813. package/dist/cli/commands/start.js.map +0 -1
  814. package/dist/cli/commands/sync-collection.d.ts +0 -14
  815. package/dist/cli/commands/sync-collection.js +0 -355
  816. package/dist/cli/commands/sync-collection.js.map +0 -1
  817. package/dist/cli/commands/sync-entities.d.ts +0 -13
  818. package/dist/cli/commands/sync-entities.js +0 -242
  819. package/dist/cli/commands/sync-entities.js.map +0 -1
  820. package/dist/cli/commands/team.d.ts +0 -12
  821. package/dist/cli/commands/team.js +0 -185
  822. package/dist/cli/commands/team.js.map +0 -1
  823. package/dist/cli/commands/update.d.ts +0 -8
  824. package/dist/cli/commands/update.js +0 -155
  825. package/dist/cli/commands/update.js.map +0 -1
  826. package/dist/cli/commands/user.d.ts +0 -7
  827. package/dist/cli/commands/user.js +0 -153
  828. package/dist/cli/commands/user.js.map +0 -1
  829. package/dist/cli/scaffolding.d.ts +0 -12
  830. package/dist/cli/scaffolding.js +0 -397
  831. package/dist/cli/scaffolding.js.map +0 -1
  832. package/dist/cli/sync-review-interactive.d.ts +0 -31
  833. package/dist/cli/sync-review-interactive.js +0 -393
  834. package/dist/cli/sync-review-interactive.js.map +0 -1
  835. package/dist/core/migration-runner.d.ts +0 -42
  836. package/dist/core/migration-runner.js +0 -232
  837. package/dist/core/migration-runner.js.map +0 -1
  838. package/dist/core/migration-types.d.ts +0 -101
  839. package/dist/core/migration-types.js +0 -21
  840. package/dist/core/migration-types.js.map +0 -1
  841. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
  842. package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
  843. package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
  844. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
  845. package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
  846. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
  847. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
  848. package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
  849. package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
  850. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
  851. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
  852. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
  853. package/dist/core/migrations/index.d.ts +0 -11
  854. package/dist/core/migrations/index.js +0 -23
  855. package/dist/core/migrations/index.js.map +0 -1
  856. package/dist/integrations/asana.d.ts +0 -26
  857. package/dist/integrations/asana.js +0 -78
  858. package/dist/integrations/asana.js.map +0 -1
  859. package/dist/integrations/figma-local.d.ts +0 -16
  860. package/dist/integrations/figma-local.js +0 -10
  861. package/dist/integrations/figma-local.js.map +0 -1
  862. package/dist/integrations/figma.d.ts +0 -17
  863. package/dist/integrations/figma.js +0 -17
  864. package/dist/integrations/figma.js.map +0 -1
  865. package/dist/integrations/granola.d.ts +0 -24
  866. package/dist/integrations/granola.js +0 -60
  867. package/dist/integrations/granola.js.map +0 -1
  868. package/dist/integrations/linear.d.ts +0 -14
  869. package/dist/integrations/linear.js +0 -80
  870. package/dist/integrations/linear.js.map +0 -1
  871. package/dist/integrations/paper-local.d.ts +0 -14
  872. package/dist/integrations/paper-local.js +0 -10
  873. package/dist/integrations/paper-local.js.map +0 -1
  874. package/dist/integrations/paper.d.ts +0 -2
  875. package/dist/integrations/paper.js +0 -10
  876. package/dist/integrations/paper.js.map +0 -1
  877. package/dist/integrations/pipedrive.d.ts +0 -26
  878. package/dist/integrations/pipedrive.js +0 -97
  879. package/dist/integrations/pipedrive.js.map +0 -1
  880. package/dist/integrations/registry.d.ts +0 -15
  881. package/dist/integrations/registry.js +0 -27
  882. package/dist/integrations/registry.js.map +0 -1
  883. package/dist/integrations/types.d.ts +0 -38
  884. package/dist/integrations/types.js +0 -9
  885. package/dist/integrations/types.js.map +0 -1
  886. package/dist/lib/lib/utils.d.ts +0 -2
  887. package/dist/lib/lib/utils.js +0 -6
  888. package/dist/lib/lib/utils.js.map +0 -1
  889. package/dist/mcp/connectors/asana.d.ts +0 -2
  890. package/dist/mcp/connectors/asana.js +0 -20
  891. package/dist/mcp/connectors/asana.js.map +0 -1
  892. package/dist/mcp/connectors/definitions.d.ts +0 -45
  893. package/dist/mcp/connectors/definitions.js +0 -32
  894. package/dist/mcp/connectors/definitions.js.map +0 -1
  895. package/dist/mcp/connectors/figma.d.ts +0 -5
  896. package/dist/mcp/connectors/figma.js +0 -21
  897. package/dist/mcp/connectors/figma.js.map +0 -1
  898. package/dist/mcp/connectors/gdrive.d.ts +0 -2
  899. package/dist/mcp/connectors/gdrive.js +0 -20
  900. package/dist/mcp/connectors/gdrive.js.map +0 -1
  901. package/dist/mcp/connectors/granola.d.ts +0 -2
  902. package/dist/mcp/connectors/granola.js +0 -12
  903. package/dist/mcp/connectors/granola.js.map +0 -1
  904. package/dist/mcp/connectors/linear.d.ts +0 -2
  905. package/dist/mcp/connectors/linear.js +0 -19
  906. package/dist/mcp/connectors/linear.js.map +0 -1
  907. package/dist/mcp/connectors/obsidian.d.ts +0 -2
  908. package/dist/mcp/connectors/obsidian.js +0 -19
  909. package/dist/mcp/connectors/obsidian.js.map +0 -1
  910. package/dist/mcp/connectors/pipedrive.d.ts +0 -2
  911. package/dist/mcp/connectors/pipedrive.js +0 -20
  912. package/dist/mcp/connectors/pipedrive.js.map +0 -1
  913. package/dist/mcp/connectors/slack.d.ts +0 -2
  914. package/dist/mcp/connectors/slack.js +0 -21
  915. package/dist/mcp/connectors/slack.js.map +0 -1
  916. package/dist/mcp/server-oauth-provider.d.ts +0 -56
  917. package/dist/mcp/server-oauth-provider.js +0 -142
  918. package/dist/mcp/server-oauth-provider.js.map +0 -1
  919. package/dist/server/chrome/chrome.css +0 -691
  920. package/dist/server/chrome/chrome.js +0 -374
  921. package/dist/server/collab-authority.d.ts +0 -70
  922. package/dist/server/collab-authority.js +0 -218
  923. package/dist/server/collab-authority.js.map +0 -1
  924. package/dist/server/collab.d.ts +0 -29
  925. package/dist/server/collab.js +0 -195
  926. package/dist/server/collab.js.map +0 -1
  927. package/dist/server/commit-scheduler.d.ts +0 -39
  928. package/dist/server/commit-scheduler.js +0 -113
  929. package/dist/server/commit-scheduler.js.map +0 -1
  930. package/dist/server/plugin-loader.d.ts +0 -53
  931. package/dist/server/plugin-loader.js +0 -155
  932. package/dist/server/plugin-loader.js.map +0 -1
  933. package/dist/server/routes/collab.d.ts +0 -6
  934. package/dist/server/routes/collab.js +0 -10
  935. package/dist/server/routes/collab.js.map +0 -1
  936. package/dist/server/routes/git-api.d.ts +0 -9
  937. package/dist/server/routes/git-api.js +0 -82
  938. package/dist/server/routes/git-api.js.map +0 -1
  939. package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
  940. package/dist/server/routes/meeting-ingest-api.js +0 -323
  941. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  942. package/dist/server/routes/sync-api.d.ts +0 -26
  943. package/dist/server/routes/sync-api.js +0 -814
  944. package/dist/server/routes/sync-api.js.map +0 -1
  945. package/dist/server/routes/webhook.d.ts +0 -14
  946. package/dist/server/routes/webhook.js +0 -102
  947. package/dist/server/routes/webhook.js.map +0 -1
  948. package/dist/services/github-provisioner.d.ts +0 -36
  949. package/dist/services/github-provisioner.js +0 -126
  950. package/dist/services/github-provisioner.js.map +0 -1
  951. package/dist/services/github-service.d.ts +0 -99
  952. package/dist/services/github-service.js +0 -310
  953. package/dist/services/github-service.js.map +0 -1
  954. package/dist/services/insights.d.ts +0 -38
  955. package/dist/services/insights.js +0 -246
  956. package/dist/services/insights.js.map +0 -1
  957. package/dist/services/sync/collection-sync.d.ts +0 -60
  958. package/dist/services/sync/collection-sync.js +0 -509
  959. package/dist/services/sync/collection-sync.js.map +0 -1
  960. package/dist/services/sync/commit.d.ts +0 -60
  961. package/dist/services/sync/commit.js +0 -354
  962. package/dist/services/sync/commit.js.map +0 -1
  963. package/dist/services/sync/context-index.d.ts +0 -69
  964. package/dist/services/sync/context-index.js +0 -280
  965. package/dist/services/sync/context-index.js.map +0 -1
  966. package/dist/services/sync/data-fetcher.d.ts +0 -31
  967. package/dist/services/sync/data-fetcher.js +0 -12
  968. package/dist/services/sync/data-fetcher.js.map +0 -1
  969. package/dist/services/sync/derive.d.ts +0 -34
  970. package/dist/services/sync/derive.js +0 -164
  971. package/dist/services/sync/derive.js.map +0 -1
  972. package/dist/services/sync/enrichment-state.d.ts +0 -31
  973. package/dist/services/sync/enrichment-state.js +0 -63
  974. package/dist/services/sync/enrichment-state.js.map +0 -1
  975. package/dist/services/sync/enrichment.d.ts +0 -25
  976. package/dist/services/sync/enrichment.js +0 -121
  977. package/dist/services/sync/enrichment.js.map +0 -1
  978. package/dist/services/sync/entity-refresh.d.ts +0 -30
  979. package/dist/services/sync/entity-refresh.js +0 -275
  980. package/dist/services/sync/entity-refresh.js.map +0 -1
  981. package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
  982. package/dist/services/sync/frontmatter-extractor.js +0 -279
  983. package/dist/services/sync/frontmatter-extractor.js.map +0 -1
  984. package/dist/services/sync/graph-match-state.d.ts +0 -33
  985. package/dist/services/sync/graph-match-state.js +0 -61
  986. package/dist/services/sync/graph-match-state.js.map +0 -1
  987. package/dist/services/sync/graph-match.d.ts +0 -53
  988. package/dist/services/sync/graph-match.js +0 -316
  989. package/dist/services/sync/graph-match.js.map +0 -1
  990. package/dist/services/sync/graphrag-client.d.ts +0 -43
  991. package/dist/services/sync/graphrag-client.js +0 -94
  992. package/dist/services/sync/graphrag-client.js.map +0 -1
  993. package/dist/services/sync/graphrag-config.d.ts +0 -16
  994. package/dist/services/sync/graphrag-config.js +0 -39
  995. package/dist/services/sync/graphrag-config.js.map +0 -1
  996. package/dist/services/sync/graphrag-context.d.ts +0 -14
  997. package/dist/services/sync/graphrag-context.js +0 -109
  998. package/dist/services/sync/graphrag-context.js.map +0 -1
  999. package/dist/services/sync/graphrag-indexer.d.ts +0 -30
  1000. package/dist/services/sync/graphrag-indexer.js +0 -358
  1001. package/dist/services/sync/graphrag-indexer.js.map +0 -1
  1002. package/dist/services/sync/llm.d.ts +0 -32
  1003. package/dist/services/sync/llm.js +0 -115
  1004. package/dist/services/sync/llm.js.map +0 -1
  1005. package/dist/services/sync/mcp-client.d.ts +0 -71
  1006. package/dist/services/sync/mcp-client.js +0 -299
  1007. package/dist/services/sync/mcp-client.js.map +0 -1
  1008. package/dist/services/sync/model-factory.d.ts +0 -13
  1009. package/dist/services/sync/model-factory.js +0 -38
  1010. package/dist/services/sync/model-factory.js.map +0 -1
  1011. package/dist/services/sync/name-quality.d.ts +0 -31
  1012. package/dist/services/sync/name-quality.js +0 -60
  1013. package/dist/services/sync/name-quality.js.map +0 -1
  1014. package/dist/services/sync/output-schemas.d.ts +0 -92
  1015. package/dist/services/sync/output-schemas.js +0 -43
  1016. package/dist/services/sync/output-schemas.js.map +0 -1
  1017. package/dist/services/sync/prompts.d.ts +0 -19
  1018. package/dist/services/sync/prompts.js +0 -128
  1019. package/dist/services/sync/prompts.js.map +0 -1
  1020. package/dist/services/sync/reconciler.d.ts +0 -48
  1021. package/dist/services/sync/reconciler.js +0 -294
  1022. package/dist/services/sync/reconciler.js.map +0 -1
  1023. package/dist/services/sync/rest-client.d.ts +0 -40
  1024. package/dist/services/sync/rest-client.js +0 -100
  1025. package/dist/services/sync/rest-client.js.map +0 -1
  1026. package/dist/services/sync/source-config.d.ts +0 -67
  1027. package/dist/services/sync/source-config.js +0 -304
  1028. package/dist/services/sync/source-config.js.map +0 -1
  1029. package/dist/services/sync/source-definitions/asana.d.ts +0 -14
  1030. package/dist/services/sync/source-definitions/asana.js +0 -42
  1031. package/dist/services/sync/source-definitions/asana.js.map +0 -1
  1032. package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
  1033. package/dist/services/sync/source-definitions/definitions.js +0 -8
  1034. package/dist/services/sync/source-definitions/definitions.js.map +0 -1
  1035. package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
  1036. package/dist/services/sync/source-definitions/gdrive.js +0 -68
  1037. package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
  1038. package/dist/services/sync/source-definitions/granola.d.ts +0 -2
  1039. package/dist/services/sync/source-definitions/granola.js +0 -21
  1040. package/dist/services/sync/source-definitions/granola.js.map +0 -1
  1041. package/dist/services/sync/source-definitions/linear.d.ts +0 -2
  1042. package/dist/services/sync/source-definitions/linear.js +0 -62
  1043. package/dist/services/sync/source-definitions/linear.js.map +0 -1
  1044. package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
  1045. package/dist/services/sync/source-definitions/obsidian.js +0 -55
  1046. package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
  1047. package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
  1048. package/dist/services/sync/source-definitions/pipedrive.js +0 -43
  1049. package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
  1050. package/dist/services/sync/staging.d.ts +0 -53
  1051. package/dist/services/sync/staging.js +0 -130
  1052. package/dist/services/sync/staging.js.map +0 -1
  1053. package/dist/services/sync/structured-extractor.d.ts +0 -57
  1054. package/dist/services/sync/structured-extractor.js +0 -584
  1055. package/dist/services/sync/structured-extractor.js.map +0 -1
  1056. package/dist/services/sync/sync-runner.d.ts +0 -32
  1057. package/dist/services/sync/sync-runner.js +0 -195
  1058. package/dist/services/sync/sync-runner.js.map +0 -1
  1059. package/dist/services/sync/sync-state.d.ts +0 -43
  1060. package/dist/services/sync/sync-state.js +0 -154
  1061. package/dist/services/sync/sync-state.js.map +0 -1
  1062. package/dist/services/sync/types.d.ts +0 -381
  1063. package/dist/services/sync/types.js +0 -8
  1064. package/dist/services/sync/types.js.map +0 -1
  1065. package/dist/services/sync/unstructured-extractor.d.ts +0 -27
  1066. package/dist/services/sync/unstructured-extractor.js +0 -185
  1067. package/dist/services/sync/unstructured-extractor.js.map +0 -1
  1068. package/dist/utils/merge-resolver.d.ts +0 -59
  1069. package/dist/utils/merge-resolver.js +0 -303
  1070. package/dist/utils/merge-resolver.js.map +0 -1
  1071. package/dist/utils/workspace-config.d.ts +0 -8
  1072. package/dist/utils/workspace-config.js +0 -22
  1073. package/dist/utils/workspace-config.js.map +0 -1
  1074. package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
  1075. package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
  1076. package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
  1077. package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
  1078. package/dist/web/_app/immutable/assets/4.DT7X0x5S.css +0 -1
  1079. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  1080. package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
  1081. package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
  1082. package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
  1083. package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
  1084. package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
  1085. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  1086. package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
  1087. package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
  1088. package/dist/web/_app/immutable/chunks/-iaeBIWN.js +0 -1
  1089. package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
  1090. package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
  1091. package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
  1092. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  1093. package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
  1094. package/dist/web/_app/immutable/chunks/B3Z4_Sps.js +0 -1
  1095. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  1096. package/dist/web/_app/immutable/chunks/BPWYOQXG.js +0 -1
  1097. package/dist/web/_app/immutable/chunks/BR77jbfR.js +0 -1
  1098. package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
  1099. package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
  1100. package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
  1101. package/dist/web/_app/immutable/chunks/Bq_KShUL.js +0 -4
  1102. package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
  1103. package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
  1104. package/dist/web/_app/immutable/chunks/BzPu-Eht.js +0 -1
  1105. package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
  1106. package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
  1107. package/dist/web/_app/immutable/chunks/CGc1sIb_.js +0 -1
  1108. package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
  1109. package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
  1110. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  1111. package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
  1112. package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
  1113. package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
  1114. package/dist/web/_app/immutable/chunks/CX87mIM8.js +0 -1
  1115. package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
  1116. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  1117. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  1118. package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
  1119. package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
  1120. package/dist/web/_app/immutable/chunks/Cpsr8-Xy.js +0 -1
  1121. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  1122. package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
  1123. package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
  1124. package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
  1125. package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
  1126. package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
  1127. package/dist/web/_app/immutable/chunks/DTZE-yoq.js +0 -2
  1128. package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
  1129. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  1130. package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
  1131. package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
  1132. package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
  1133. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  1134. package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
  1135. package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
  1136. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  1137. package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
  1138. package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
  1139. package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
  1140. package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
  1141. package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
  1142. package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
  1143. package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
  1144. package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
  1145. package/dist/web/_app/immutable/entry/app.BeUKh4sD.js +0 -2
  1146. package/dist/web/_app/immutable/entry/start.CZJnFuQn.js +0 -1
  1147. package/dist/web/_app/immutable/nodes/0.DyF_RsLg.js +0 -2
  1148. package/dist/web/_app/immutable/nodes/1.7iDQmMPh.js +0 -1
  1149. package/dist/web/_app/immutable/nodes/10.Btl8d8HT.js +0 -1
  1150. package/dist/web/_app/immutable/nodes/2.LDRE62jN.js +0 -168
  1151. package/dist/web/_app/immutable/nodes/3.BaW1XB1x.js +0 -1
  1152. package/dist/web/_app/immutable/nodes/4.D0Q8kpkI.js +0 -12
  1153. package/dist/web/_app/immutable/nodes/5.n7j2UG9h.js +0 -4
  1154. package/dist/web/_app/immutable/nodes/6.DQYxR0iy.js +0 -2
  1155. package/dist/web/_app/immutable/nodes/7.BsURvFAp.js +0 -2
  1156. package/dist/web/_app/immutable/nodes/8.CsiErG0p.js +0 -1
  1157. package/dist/web/_app/immutable/nodes/9.CnN6OZgC.js +0 -1
@@ -18,22 +18,164 @@
18
18
  import { join } from 'path';
19
19
  import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
20
20
  import * as lancedb from '@lancedb/lancedb';
21
+ import { tryResolve } from '../core/secrets/read-flip.js';
21
22
  const VOYAGE_API_URL = 'https://api.voyageai.com/v1/embeddings';
22
23
  const VOYAGE_MODEL = 'voyage-3';
23
24
  const VECTOR_DIM = 1024;
24
25
  const TABLE_NAME = 'entities';
26
+ /**
27
+ * Dedicated LanceDB table for an asset's MUTABLE index state (decision A1).
28
+ *
29
+ * Why a separate table, not columns on `entities` and not asset frontmatter:
30
+ * - Frontmatter is immutable + git-committed; writing `index_status` there
31
+ * would fire one async git commit per asset and defeat the import batching.
32
+ * (The immutable `indexable` flag DOES live in frontmatter — see P3a.)
33
+ * - New columns on the shared `entities` table force a schema migration on
34
+ * every existing row. A side table is additive and touches only assets.
35
+ */
36
+ const INDEX_STATE_TABLE = 'asset_index_state';
37
+ /**
38
+ * Derivation-logic version. BUMP this when caption/extraction output changes so
39
+ * the boot sweep RE-derives every asset (Codex migration rule: a row at a stale
40
+ * version is re-derived, never treated as "done"). Legacy assets have NO row at
41
+ * all — also re-derived, never skipped.
42
+ */
43
+ export const ASSET_INDEX_VERSION = 1;
25
44
  export class VectorService {
26
45
  dbPath;
27
- voyageApiKey;
46
+ /**
47
+ * Legacy fallback key passed via constructor for tests or for early-
48
+ * boot code paths that run before the secrets store is initialized.
49
+ * Live calls prefer `tryResolve('voyage.api_key')` so values written
50
+ * to the store via the UI / CLI take effect without a restart.
51
+ */
52
+ fallbackVoyageApiKey;
53
+ workspaceRoot;
28
54
  db;
29
55
  table;
56
+ /** Lazily-opened side table for mutable asset index state (A1). */
57
+ stateTable;
58
+ stateInitialized = false;
30
59
  lastIndexedPath;
31
60
  initialized = false;
32
- constructor(dbPath, voyageApiKey) {
61
+ // ── Single-flight guards (one in-flight init per resource) ──
62
+ // `init()` and `initStateTable()` both open the LanceDB connection and can be
63
+ // invoked concurrently (boot incremental reindex via upsert() races the
64
+ // fire-and-forget asset sweep via getAllIndexStates()). Without
65
+ // single-flighting, both would pass their boolean guard before either await
66
+ // resolved, double-connect, and double-`createTable` → "table already exists"
67
+ // / CommitConflict. Each promise is created once and awaited by all callers.
68
+ dbPromise;
69
+ initPromise;
70
+ stateInitPromise;
71
+ // ── Write serialization ──
72
+ // LanceDB uses optimistic concurrency: two `mergeInsert(...).execute()` (or
73
+ // delete) calls racing on the SAME table throw a CommitConflict and one loses.
74
+ // This singleton VectorService is shared by foreground entity writes
75
+ // (graph.ts fire-and-forget upsert/delete) AND the live asset-index drain
76
+ // (re-upsert after writing a caption sidecar). Without serialization those two
77
+ // sources can collide on the `entities` table — and the drain would record the
78
+ // loser as a terminal `failed` index state. `withWrite()` chains every mutating
79
+ // op onto a single per-instance promise so they run one at a time, in order.
80
+ writeChain = Promise.resolve();
81
+ /**
82
+ * Fired exactly once per asset, when `ensureInitialAssetIndexState` seeds a
83
+ * fresh `pending` row — i.e. an indexable image that needs captioning. This
84
+ * is the SINGLE chokepoint every asset-creation path funnels through (all
85
+ * upserts call ensureInitialAssetIndexState), so the live caption drain
86
+ * registers here instead of being wired at each of the ~5 upload call sites.
87
+ * It does NOT fire for docs (seeded `full`) or for re-derives (row already
88
+ * exists → early return), so it can't loop the drain.
89
+ */
90
+ onAssetPendingCb;
91
+ // ── Operator-visible health (surfaced via /api/health/dirty) ──
92
+ // Tracked here, not at the call sites, because every fire-and-forget
93
+ // upsert/delete in graph.ts catches its own promise to avoid blocking
94
+ // writes — the operator needs a single rolled-up signal instead of
95
+ // grepping logs for `[vector] index failed`.
96
+ failureCount = 0;
97
+ inFlight = 0;
98
+ lastFailureAt = null;
99
+ lastFailure = null;
100
+ constructor(dbPath, voyageApiKey, workspaceRoot) {
33
101
  this.dbPath = dbPath;
34
- this.voyageApiKey = voyageApiKey;
102
+ this.fallbackVoyageApiKey = voyageApiKey;
103
+ this.workspaceRoot = workspaceRoot;
35
104
  this.lastIndexedPath = join(dbPath, 'last-indexed.json');
36
105
  }
106
+ /**
107
+ * Resolve the Voyage API key fresh on each call: store > constructor
108
+ * fallback. Lets the operator flip the key via UI / CLI without a
109
+ * server restart.
110
+ */
111
+ get voyageApiKey() {
112
+ const fromStore = tryResolve('voyage.api_key');
113
+ return fromStore ?? this.fallbackVoyageApiKey;
114
+ }
115
+ /** Begin tracking an in-flight op. Pair with `recordSuccess`/`recordFailure`. */
116
+ beginOp() { this.inFlight++; }
117
+ recordSuccess() {
118
+ if (this.inFlight > 0)
119
+ this.inFlight--;
120
+ }
121
+ recordFailure(op, entity, err) {
122
+ if (this.inFlight > 0)
123
+ this.inFlight--;
124
+ this.failureCount++;
125
+ this.lastFailureAt = new Date().toISOString();
126
+ this.lastFailure = {
127
+ op,
128
+ entity,
129
+ error: err instanceof Error ? err.message : String(err),
130
+ };
131
+ }
132
+ /**
133
+ * Snapshot for /api/health. Healthy = the last op succeeded (or none have
134
+ * run yet) AND there is no abnormal in-flight backlog. The failure count
135
+ * is informational; a single transient Voyage 503 shouldn't permanently
136
+ * mark the service unhealthy, but operators can see the trend.
137
+ */
138
+ getHealth() {
139
+ return {
140
+ healthy: this.lastFailure === null,
141
+ failureCount: this.failureCount,
142
+ inFlight: this.inFlight,
143
+ lastFailureAt: this.lastFailureAt,
144
+ lastFailure: this.lastFailure,
145
+ embeddingsEnabled: !!this.voyageApiKey,
146
+ };
147
+ }
148
+ /**
149
+ * For asset entities, any extracted text the upload/caption pipeline wrote
150
+ * lives in a sidecar at `<workspace>/.studiograph/assets-text/asset/<id>.txt`,
151
+ * keyed by the asset's ENTITY ID (not the storage UUID). Returns the contents
152
+ * so `buildEntityText` can fold it into the embedding/FTS input.
153
+ *
154
+ * Generalized from PDF-only (P3): docx/xlsx now write the same sidecar at
155
+ * upload, and image captions/OCR land here too — so the reader is no longer
156
+ * gated on `asset_kind === 'pdf'`. The markdown body of an asset entity is
157
+ * intentionally light; without this, document/image assets would be
158
+ * effectively invisible to RAG.
159
+ *
160
+ * Best-effort: missing sidecar / read errors return null. The asset stays
161
+ * indexed by frontmatter alone.
162
+ */
163
+ readAssetSidecar(entity) {
164
+ if (!this.workspaceRoot)
165
+ return null;
166
+ if (entity.entityType !== 'asset')
167
+ return null;
168
+ const path = join(this.workspaceRoot, '.studiograph', 'assets-text', 'asset', `${entity.id}.txt`);
169
+ try {
170
+ if (!existsSync(path))
171
+ return null;
172
+ const text = readFileSync(path, 'utf-8').trim();
173
+ return text || null;
174
+ }
175
+ catch {
176
+ return null;
177
+ }
178
+ }
37
179
  /**
38
180
  * Open/create the LanceDB table and ensure the FTS index exists.
39
181
  * Call once before using the service.
@@ -41,11 +183,44 @@ export class VectorService {
41
183
  async init() {
42
184
  if (this.initialized)
43
185
  return;
44
- mkdirSync(this.dbPath, { recursive: true });
45
- this.db = await lancedb.connect(this.dbPath);
46
- const tableNames = await this.db.tableNames();
186
+ // Single-flight: concurrent callers share one in-flight init.
187
+ if (!this.initPromise)
188
+ this.initPromise = this.doInit();
189
+ await this.initPromise;
190
+ }
191
+ /**
192
+ * Run a mutating LanceDB op under the per-instance write lock so concurrent
193
+ * writers (foreground entity writes vs. the asset-index drain) can't collide
194
+ * on a shared table's optimistic-concurrency commit. Ops run strictly in the
195
+ * order `withWrite` is called; a throwing op rejects to ITS caller without
196
+ * poisoning the chain for the next writer.
197
+ */
198
+ withWrite(fn) {
199
+ const run = this.writeChain.then(fn, fn);
200
+ // Keep the chain alive regardless of this op's outcome (swallow on the
201
+ // chain copy only; the real result/throw still goes to the caller).
202
+ this.writeChain = run.then(() => undefined, () => undefined);
203
+ return run;
204
+ }
205
+ /**
206
+ * Open (once) the shared LanceDB connection. Both `init()` and
207
+ * `initStateTable()` go through this so they never race to assign `this.db`.
208
+ */
209
+ async ensureDb() {
210
+ if (this.db)
211
+ return this.db;
212
+ if (!this.dbPromise) {
213
+ mkdirSync(this.dbPath, { recursive: true });
214
+ this.dbPromise = lancedb.connect(this.dbPath);
215
+ }
216
+ this.db = await this.dbPromise;
217
+ return this.db;
218
+ }
219
+ async doInit() {
220
+ const db = await this.ensureDb();
221
+ const tableNames = await db.tableNames();
47
222
  if (tableNames.includes(TABLE_NAME)) {
48
- this.table = await this.db.openTable(TABLE_NAME);
223
+ this.table = await db.openTable(TABLE_NAME);
49
224
  }
50
225
  else {
51
226
  // Create table with a seed record (LanceDB infers schema from first batch)
@@ -58,7 +233,7 @@ export class VectorService {
58
233
  vector: new Array(VECTOR_DIM).fill(0),
59
234
  updated_at: new Date().toISOString(),
60
235
  };
61
- this.table = await this.db.createTable(TABLE_NAME, [seed]);
236
+ this.table = await db.createTable(TABLE_NAME, [seed]);
62
237
  // Create FTS index on text column
63
238
  await this.table.createIndex('text', {
64
239
  config: lancedb.Index.fts(),
@@ -68,6 +243,163 @@ export class VectorService {
68
243
  }
69
244
  this.initialized = true;
70
245
  }
246
+ // ─── Asset index state (A1 — mutable, LanceDB-only) ──────────────────────────
247
+ stateRowId(repo, entityId) {
248
+ return `${repo}/${entityId}`;
249
+ }
250
+ /**
251
+ * Open/create the side table for asset index state. Independent of `init()`
252
+ * so state-only callers (and tests) don't pay for the entities table. Lazy
253
+ * because most workspaces never need it until the first asset is indexed.
254
+ */
255
+ async initStateTable() {
256
+ if (this.stateInitialized)
257
+ return;
258
+ // Single-flight: concurrent state readers/writers share one in-flight init,
259
+ // so two callers can't both take the createTable branch (which would throw
260
+ // "table already exists" on the loser).
261
+ if (!this.stateInitPromise)
262
+ this.stateInitPromise = this.doInitStateTable();
263
+ await this.stateInitPromise;
264
+ }
265
+ async doInitStateTable() {
266
+ const db = await this.ensureDb();
267
+ const names = await db.tableNames();
268
+ if (names.includes(INDEX_STATE_TABLE)) {
269
+ this.stateTable = await db.openTable(INDEX_STATE_TABLE);
270
+ }
271
+ else {
272
+ const seed = {
273
+ id: '__seed__', repo: '', entity_id: '', index_status: 'pending',
274
+ indexed_at: '', index_version: 0, reason: '',
275
+ };
276
+ this.stateTable = await db.createTable(INDEX_STATE_TABLE, [seed]);
277
+ await this.stateTable.delete(`id = '__seed__'`);
278
+ }
279
+ this.stateInitialized = true;
280
+ }
281
+ toState(r) {
282
+ return {
283
+ repo: r.repo,
284
+ entityId: r.entity_id,
285
+ status: r.index_status,
286
+ indexedAt: r.indexed_at,
287
+ version: r.index_version,
288
+ reason: r.reason,
289
+ };
290
+ }
291
+ /**
292
+ * Read the `text` actually indexed for one entity (the value `buildEntityText`
293
+ * produced — markdown body plus, for assets, the extracted sidecar). Null when
294
+ * no row exists. This is the searchable content of record, independent of FTS
295
+ * index freshness, so it's the deterministic way to assert "the asset's body
296
+ * reached the index" (e.g. the docx stub-upsert-race regression test).
297
+ */
298
+ async getIndexedText(repo, entityType, entityId) {
299
+ await this.init();
300
+ const id = `${repo}/${entityType}/${entityId}`.replace(/'/g, "''");
301
+ const rows = await this.table.query().where(`id = '${id}'`).limit(1).toArray();
302
+ const row = rows.find((r) => r.id !== '__seed__');
303
+ return row ? row.text : null;
304
+ }
305
+ /** Read one asset's index state, or null when no row exists (legacy/never-derived). */
306
+ async getIndexState(repo, entityId) {
307
+ await this.initStateTable();
308
+ const id = this.stateRowId(repo, entityId).replace(/'/g, "''");
309
+ const rows = await this.stateTable.query().where(`id = '${id}'`).limit(1).toArray();
310
+ const row = rows.find((r) => r.id !== '__seed__');
311
+ return row ? this.toState(row) : null;
312
+ }
313
+ /**
314
+ * Load every index-state row into a Map keyed by `${repo}/${entityId}`. The
315
+ * boot sweep uses this to decide, per asset, whether a row is missing
316
+ * (legacy), stale (old version), or unfinished (pending) — without an
317
+ * all-asset disk scan (PERF1).
318
+ */
319
+ async getAllIndexStates() {
320
+ await this.initStateTable();
321
+ const rows = await this.stateTable.query().toArray();
322
+ const map = new Map();
323
+ for (const r of rows) {
324
+ if (r.id === '__seed__')
325
+ continue;
326
+ map.set(this.stateRowId(r.repo, r.entity_id), this.toState(r));
327
+ }
328
+ return map;
329
+ }
330
+ /** Upsert an asset's index state. Stamps `indexed_at` + current version unless overridden. */
331
+ async setIndexState(repo, entityId, status, opts = {}) {
332
+ await this.initStateTable();
333
+ const record = {
334
+ id: this.stateRowId(repo, entityId),
335
+ repo,
336
+ entity_id: entityId,
337
+ index_status: status,
338
+ indexed_at: opts.indexedAt ?? new Date().toISOString(),
339
+ index_version: opts.version ?? ASSET_INDEX_VERSION,
340
+ reason: opts.reason ?? '',
341
+ };
342
+ await this.withWrite(() => this.stateTable
343
+ .mergeInsert('id')
344
+ .whenMatchedUpdateAll()
345
+ .whenNotMatchedInsertAll()
346
+ .execute([record]));
347
+ }
348
+ /** Drop an asset's index-state row (e.g. when the asset is deleted). */
349
+ async deleteIndexState(repo, entityId) {
350
+ await this.initStateTable();
351
+ const id = this.stateRowId(repo, entityId).replace(/'/g, "''");
352
+ await this.withWrite(() => this.stateTable.delete(`id = '${id}'`));
353
+ }
354
+ /**
355
+ * Seed the initial index state for a freshly (re)indexed asset, IF it has no
356
+ * row yet. State *transitions* are owned by the caption/sweep pass — this only
357
+ * establishes the starting point at import time:
358
+ * - `indexable !== true` (opaque, or legacy `undefined`) → no row. Opaque
359
+ * assets read "filename only" from frontmatter; legacy assets are
360
+ * re-derived by the boot sweep, not seeded here.
361
+ * - sidecar already on disk (doc extracted synchronously at upload, P3a) → `full`.
362
+ * - no sidecar (image awaiting caption) → `pending`.
363
+ * Best-effort: a state-write failure must not fail the text index.
364
+ */
365
+ /**
366
+ * Register the single sink for "a new indexable image needs captioning."
367
+ * The live caption drain (AssetIndexQueue) registers here; the chokepoint
368
+ * fires from `ensureInitialAssetIndexState`, covering every upload path at
369
+ * once. Replaces the per-call-site enqueue wiring.
370
+ */
371
+ setOnAssetPending(cb) {
372
+ this.onAssetPendingCb = cb;
373
+ }
374
+ async ensureInitialAssetIndexState(repo, entity) {
375
+ if (entity.entityType !== 'asset')
376
+ return;
377
+ if (entity.data?.indexable !== true)
378
+ return;
379
+ try {
380
+ const existing = await this.getIndexState(repo, entity.id);
381
+ if (existing)
382
+ return;
383
+ const hasSidecar = this.readAssetSidecar(entity) !== null;
384
+ await this.setIndexState(repo, entity.id, hasSidecar ? 'full' : 'pending');
385
+ // Chokepoint: a freshly-seeded `pending` image is the universal signal
386
+ // that an asset needs caption/extract work. Notify the live drain so it
387
+ // captions while the server runs — for EVERY ingress (web ×2, MCP ×2,
388
+ // agent import_file), with no per-call-site wiring. Docs land `full`
389
+ // (sidecar already on disk) and don't need the drain. Best-effort: a
390
+ // throwing subscriber must not fail the index write.
391
+ if (!hasSidecar) {
392
+ try {
393
+ this.onAssetPendingCb?.(repo, entity.id);
394
+ }
395
+ catch { /* non-fatal */ }
396
+ }
397
+ }
398
+ catch (err) {
399
+ // eslint-disable-next-line no-console
400
+ console.warn(`[vector] asset index-state seed failed for ${repo}/${entity.id}: ${err instanceof Error ? err.message : err}`);
401
+ }
402
+ }
71
403
  /**
72
404
  * Index or re-index a single entity.
73
405
  * Safe to call on create, update, or as part of bulk indexing.
@@ -75,7 +407,7 @@ export class VectorService {
75
407
  async upsert(repoName, entity) {
76
408
  await this.init();
77
409
  const id = `${repoName}/${entity.entityType}/${entity.id}`;
78
- const text = buildEntityText(entity);
410
+ const text = buildEntityText(entity, this.readAssetSidecar(entity) ?? undefined);
79
411
  const vector = this.voyageApiKey
80
412
  ? await this.generateEmbedding(text)
81
413
  : null;
@@ -89,24 +421,33 @@ export class VectorService {
89
421
  vector: vector ?? new Array(VECTOR_DIM).fill(0),
90
422
  updated_at: new Date().toISOString(),
91
423
  };
92
- await this.table
424
+ await this.withWrite(() => this.table
93
425
  .mergeInsert('id')
94
426
  .whenMatchedUpdateAll()
95
427
  .whenNotMatchedInsertAll()
96
- .execute([record]);
428
+ .execute([record]));
429
+ // Seed asset index state at import time (decision A1). New image uploads
430
+ // land as `pending` so the caption pass (boot sweep) picks them up; docs
431
+ // whose sidecar was already extracted at upload land as `full`.
432
+ await this.ensureInitialAssetIndexState(repoName, entity);
97
433
  }
98
434
  /**
99
435
  * Bulk upsert — used by `studiograph index`. Batches Voyage API calls.
100
436
  */
101
- async upsertMany(repoName, entities) {
437
+ async upsertMany(repoName, entities, opts = {}) {
102
438
  await this.init();
103
439
  if (entities.length === 0)
104
440
  return;
105
- const texts = entities.map(e => buildEntityText(e));
441
+ const texts = entities.map(e => buildEntityText(e, this.readAssetSidecar(e) ?? undefined));
106
442
  // Batch embeddings (Voyage supports up to 128 per request)
107
443
  let vectors = new Array(entities.length).fill(null);
108
444
  if (this.voyageApiKey) {
109
- vectors = await this.generateEmbeddingsBatch(texts);
445
+ vectors = await this.generateEmbeddingsBatch(texts, opts.onProgress);
446
+ }
447
+ else {
448
+ // No embedding step — report the whole batch as "done" once so
449
+ // progress UIs that wait on at least one callback don't sit at 0%.
450
+ opts.onProgress?.(entities.length, entities.length);
110
451
  }
111
452
  const records = entities.map((entity, i) => ({
112
453
  id: `${repoName}/${entity.entityType}/${entity.id}`,
@@ -117,11 +458,11 @@ export class VectorService {
117
458
  vector: vectors[i] ?? new Array(VECTOR_DIM).fill(0),
118
459
  updated_at: new Date().toISOString(),
119
460
  }));
120
- await this.table
461
+ await this.withWrite(() => this.table
121
462
  .mergeInsert('id')
122
463
  .whenMatchedUpdateAll()
123
464
  .whenNotMatchedInsertAll()
124
- .execute(records);
465
+ .execute(records));
125
466
  }
126
467
  /**
127
468
  * Remove an entity from the index.
@@ -129,7 +470,50 @@ export class VectorService {
129
470
  async delete(repoName, entityType, entityId) {
130
471
  await this.init();
131
472
  const id = `${repoName}/${entityType}/${entityId}`;
132
- await this.table.delete(`id = '${id.replace(/'/g, "''")}'`);
473
+ await this.withWrite(() => this.table.delete(`id = '${id.replace(/'/g, "''")}'`));
474
+ // Reap any asset index-state row keyed by (repo, id). Harmless for
475
+ // non-asset types (no row exists). Without this the row would survive the
476
+ // asset's deletion and, on id reuse, make the recreated asset look
477
+ // already-indexed to the boot sweep (stale-state → silently unsearchable).
478
+ await this.deleteIndexStateSafe(repoName, entityId);
479
+ }
480
+ /**
481
+ * Remove an entity by `(repo, id)` alone, without needing its type.
482
+ *
483
+ * Used by the serve-boot incremental indexer: when git diff reports a
484
+ * deletion, the file is gone from disk so its type can't be resolved
485
+ * from frontmatter. The vector store has a discrete `entity_id` column
486
+ * so we can match on `repo + entity_id` without falling back to a LIKE
487
+ * pattern on the synthetic id.
488
+ *
489
+ * Safe across type renames: a single id that legitimately had two type
490
+ * rows (e.g. type changed mid-edit and both old + new still exist) gets
491
+ * both wiped — which is the right behavior for incremental rebuild
492
+ * since the next upsert recreates the current type's row.
493
+ */
494
+ async deleteByRepoAndId(repoName, entityId) {
495
+ await this.init();
496
+ const r = repoName.replace(/'/g, "''");
497
+ const e = entityId.replace(/'/g, "''");
498
+ await this.withWrite(() => this.table.delete(`repo = '${r}' AND entity_id = '${e}'`));
499
+ // Reap the asset index-state row too (the git-pull/incremental-delete path
500
+ // reaches here when a .md is removed outside the app). Same stale-state
501
+ // hazard as the in-app delete if left behind.
502
+ await this.deleteIndexStateSafe(repoName, entityId);
503
+ }
504
+ /**
505
+ * Best-effort `deleteIndexState` for the delete paths: the entities-table
506
+ * delete is the authoritative op, so a failure to reap the (usually absent)
507
+ * state row must not turn a successful delete into a thrown error.
508
+ */
509
+ async deleteIndexStateSafe(repoName, entityId) {
510
+ try {
511
+ await this.deleteIndexState(repoName, entityId);
512
+ }
513
+ catch (err) {
514
+ // eslint-disable-next-line no-console
515
+ console.warn(`[vector] index-state cleanup failed for ${repoName}/${entityId}: ${err instanceof Error ? err.message : err}`);
516
+ }
133
517
  }
134
518
  /**
135
519
  * Search the index.
@@ -140,22 +524,35 @@ export class VectorService {
140
524
  const limit = options.limit ?? 10;
141
525
  try {
142
526
  let rows;
527
+ // Repo scoping is a PRE-filter pushed into the query, not a post-filter on
528
+ // the result page. Filtering after `.limit()` silently drops a scoped
529
+ // repo's matches whenever the global top-K is dominated by other repos —
530
+ // e.g. a `repos:['studiograph']` search returning nothing while the same
531
+ // query unscoped ranks a studiograph doc #1. `where` applies BEFORE the
532
+ // limit so the K results are already within scope.
533
+ const repoWhere = options.repos && options.repos.length > 0
534
+ ? options.repos.map(r => `repo = '${r.replace(/'/g, "''")}'`).join(' OR ')
535
+ : null;
143
536
  if (this.voyageApiKey) {
144
537
  // Tier 2: hybrid search
145
538
  const queryVector = await this.generateEmbedding(query);
146
- rows = await this.table
147
- .search(queryVector)
539
+ let q = this.table.search(queryVector);
540
+ if (repoWhere)
541
+ q = q.where(repoWhere);
542
+ rows = await q
148
543
  .limit(limit * 2) // fetch extra for re-ranking
149
544
  .toArray();
150
545
  }
151
546
  else {
152
547
  // Tier 1: FTS only
153
- rows = await this.table
154
- .search(query, 'text')
548
+ let q = this.table.search(query, 'text');
549
+ if (repoWhere)
550
+ q = q.where(repoWhere);
551
+ rows = await q
155
552
  .limit(limit)
156
553
  .toArray();
157
554
  }
158
- let results = rows
555
+ const results = rows
159
556
  .filter((r) => r.id !== '__seed__' && r.entity_id !== '')
160
557
  .map((r, i) => ({
161
558
  repoName: r.repo,
@@ -163,9 +560,6 @@ export class VectorService {
163
560
  entityId: r.entity_id,
164
561
  score: r._distance != null ? 1 / (1 + r._distance) : 1 - i * 0.01,
165
562
  }));
166
- if (options.repos && options.repos.length > 0) {
167
- results = results.filter(r => options.repos.includes(r.repoName));
168
- }
169
563
  return results.slice(0, limit);
170
564
  }
171
565
  catch {
@@ -188,9 +582,13 @@ export class VectorService {
188
582
  }
189
583
  }
190
584
  /**
191
- * Record the current time as the last index time for a repo.
585
+ * Record the last index time for a repo.
586
+ *
587
+ * Production callers omit `isoTimestamp` and the current time is used.
588
+ * Tests pass an explicit ISO timestamp so they can rewind the clock and
589
+ * assert the git-log `--since` window picks up the right commits.
192
590
  */
193
- setLastIndexedTime(repoName) {
591
+ setLastIndexedTime(repoName, isoTimestamp) {
194
592
  mkdirSync(this.dbPath, { recursive: true });
195
593
  let data = {};
196
594
  if (existsSync(this.lastIndexedPath)) {
@@ -199,7 +597,7 @@ export class VectorService {
199
597
  }
200
598
  catch { /* ignore */ }
201
599
  }
202
- data[repoName] = new Date().toISOString();
600
+ data[repoName] = isoTimestamp ?? new Date().toISOString();
203
601
  writeFileSync(this.lastIndexedPath, JSON.stringify(data, null, 2) + '\n');
204
602
  }
205
603
  /** Whether Voyage AI embeddings are enabled (Tier 2). */
@@ -211,10 +609,11 @@ export class VectorService {
211
609
  const results = await this.generateEmbeddingsBatch([text]);
212
610
  return results[0] ?? new Array(VECTOR_DIM).fill(0);
213
611
  }
214
- async generateEmbeddingsBatch(texts) {
612
+ async generateEmbeddingsBatch(texts, onProgress) {
215
613
  // Voyage supports up to 128 inputs per request
216
614
  const BATCH_SIZE = 128;
217
615
  const all = [];
616
+ const total = texts.length;
218
617
  for (let i = 0; i < texts.length; i += BATCH_SIZE) {
219
618
  const batch = texts.slice(i, i + BATCH_SIZE);
220
619
  const response = await fetch(VOYAGE_API_URL, {
@@ -231,6 +630,7 @@ export class VectorService {
231
630
  }
232
631
  const json = await response.json();
233
632
  all.push(...json.data.map(d => d.embedding));
633
+ onProgress?.(all.length, total);
234
634
  }
235
635
  return all;
236
636
  }
@@ -249,7 +649,7 @@ export async function reindexWorkspace(workspacePath, repos, onProgress) {
249
649
  const { homedir } = await import('os');
250
650
  const userConfig = loadUserConfig();
251
651
  const dbPath = userConfig.vector_db_path || join(homedir(), '.studiograph', 'vector');
252
- const vectorService = new VectorService(dbPath, userConfig.voyage_api_key);
652
+ const vectorService = new VectorService(dbPath, userConfig.voyage_api_key, workspacePath);
253
653
  await vectorService.init();
254
654
  const log = onProgress ?? (() => { });
255
655
  let total = 0;
@@ -277,13 +677,151 @@ export async function reindexWorkspace(workspacePath, repos, onProgress) {
277
677
  }
278
678
  return total;
279
679
  }
680
+ export async function incrementalReindexWorkspace(workspaceManager, repos, workspacePath, opts = {}) {
681
+ const vectorService = workspaceManager.vectorService;
682
+ if (!vectorService) {
683
+ return { total: 0, fresh: false };
684
+ }
685
+ const log = opts.log ?? (() => { });
686
+ const { execFileSync } = await import('child_process');
687
+ let total = 0;
688
+ let anyFreshRepo = false;
689
+ const staleEntities = [];
690
+ // Pre-pass: figure out the total first-time entity count so the
691
+ // progress callback has a stable denominator. Cheap — `graph.list()`
692
+ // doesn't re-read files, it returns the in-memory graph state the
693
+ // workspace manager already maintains.
694
+ let firstTimeTotal = 0;
695
+ if (opts.onFirstTimeProgress) {
696
+ for (const repo of repos) {
697
+ if (vectorService.getLastIndexedTime(repo.name))
698
+ continue;
699
+ try {
700
+ firstTimeTotal += workspaceManager.getGraph(repo.name).list().length;
701
+ }
702
+ catch {
703
+ // tolerate per-repo failure; the real loop below will log it
704
+ }
705
+ }
706
+ }
707
+ let firstTimeDone = 0;
708
+ for (const repo of repos) {
709
+ const lastIndexed = vectorService.getLastIndexedTime(repo.name);
710
+ // Per-repo first-time index. Catches three cases:
711
+ // 1. Very first `serve` boot (every repo missing a timestamp).
712
+ // 2. New folder added between serve boots (existing workspace +
713
+ // new repo with no timestamp). Pre-fix this was skipped here
714
+ // and never indexed unless the operator ran a full reindex.
715
+ // 3. Vector DB rebuilt from scratch but workspace has existing
716
+ // folders.
717
+ if (!lastIndexed) {
718
+ try {
719
+ const graph = workspaceManager.getGraph(repo.name);
720
+ const entities = graph.list();
721
+ if (entities.length > 0) {
722
+ await vectorService.upsertMany(repo.name, entities, {
723
+ onProgress: (batchDone) => {
724
+ opts.onFirstTimeProgress?.(firstTimeDone + batchDone, firstTimeTotal);
725
+ },
726
+ });
727
+ firstTimeDone += entities.length;
728
+ total += entities.length;
729
+ }
730
+ vectorService.setLastIndexedTime(repo.name);
731
+ anyFreshRepo = true;
732
+ }
733
+ catch (err) {
734
+ log(`failed to index ${repo.name}: ${err instanceof Error ? err.message : 'unknown'}`);
735
+ }
736
+ continue;
737
+ }
738
+ // Established repo — diff git log since the last index timestamp and
739
+ // collect a list of stale (repo, id) tuples to upsert / delete below.
740
+ const repoPath = join(workspacePath, repo.path);
741
+ if (!existsSync(repoPath))
742
+ continue;
743
+ try {
744
+ const output = execFileSync('git', ['log', `--since=${lastIndexed}`, '--name-status', '--format=', '--', '*.md'], { cwd: repoPath, encoding: 'utf-8', stdio: 'pipe' }).trim();
745
+ if (!output)
746
+ continue;
747
+ for (const line of output.split('\n')) {
748
+ // Accept any markdown path. Layouts in the wild:
749
+ // - flat: `entity-id.md`
750
+ // - typed: `<type>/entity-id.md`
751
+ // - nested: `folder/sub/entity-id.md`
752
+ // STU-131 normalized on flat for new entities; older typed layouts
753
+ // and arbitrary nested folders still appear in mixed repos. Entity
754
+ // type lives in frontmatter (resolved via graph.getById for
755
+ // upserts; not needed for deletes since we now match by `(repo,
756
+ // entity_id)` columns). Pre-fix this regex required exactly one
757
+ // slash with a `\w+` type segment and missed all three layouts,
758
+ // plus hyphenated types like `case-study`.
759
+ const m = line.match(/^([AMD])\s+(.+\.md)$/);
760
+ if (!m)
761
+ continue;
762
+ const [, status, path] = m;
763
+ // basename minus `.md`. Entity IDs are unique within a repo.
764
+ const id = path.split('/').pop().replace(/\.md$/, '');
765
+ if (!id)
766
+ continue;
767
+ staleEntities.push({ repoName: repo.name, entityId: id, deleted: status === 'D' });
768
+ }
769
+ }
770
+ catch (err) {
771
+ log(`failed to diff ${repo.name}: ${err instanceof Error ? err.message : 'unknown'}`);
772
+ }
773
+ }
774
+ if (staleEntities.length === 0) {
775
+ // Nothing changed via git diff. If we did first-time work above, that
776
+ // counts as a fresh run; otherwise this was a no-op incremental boot.
777
+ return { total, fresh: anyFreshRepo };
778
+ }
779
+ // Dedupe: if an entity appears multiple times (e.g. M then D), the last
780
+ // entry wins. Order matters — git log is newest-first by default, so we
781
+ // reverse before reducing to get the newest state per (repo, id).
782
+ const seen = new Map();
783
+ for (const item of staleEntities.slice().reverse()) {
784
+ seen.set(`${item.repoName}/${item.entityId}`, item);
785
+ }
786
+ for (const item of seen.values()) {
787
+ try {
788
+ if (item.deleted) {
789
+ // Delete by (repo, id) — type isn't recoverable from a deleted file.
790
+ // The new column-based matcher in vectorService handles it without
791
+ // a frontmatter lookup.
792
+ await vectorService.deleteByRepoAndId(item.repoName, item.entityId);
793
+ }
794
+ else {
795
+ const graph = workspaceManager.getGraph(item.repoName);
796
+ const entity = graph.getById(item.entityId);
797
+ await vectorService.upsert(item.repoName, entity);
798
+ total++;
799
+ }
800
+ }
801
+ catch {
802
+ // Entity may have been deleted then re-created; safe to skip.
803
+ }
804
+ }
805
+ // Stamp every repo we touched. Empty-diff repos already had a timestamp
806
+ // (we skipped the rebuild path) — re-stamping is cheap and keeps the
807
+ // "since" window tight for the next boot.
808
+ for (const repo of repos) {
809
+ vectorService.setLastIndexedTime(repo.name);
810
+ }
811
+ return { total, fresh: anyFreshRepo };
812
+ }
280
813
  // ─── Helpers ─────────────────────────────────────────────────────────────────
281
814
  /**
282
815
  * Build a text representation of an entity for FTS/embedding.
283
816
  * Combines entity type, key frontmatter fields, and markdown body.
817
+ *
818
+ * `extraText` is appended after the body — used by VectorService to
819
+ * fold PDF sidecar text into asset-entity embeddings. Kept as a plain
820
+ * string parameter (not file IO) so this stays pure and unit-testable.
821
+ *
284
822
  * Exported for testing.
285
823
  */
286
- export function buildEntityText(entity) {
824
+ export function buildEntityText(entity, extraText) {
287
825
  const parts = [];
288
826
  // Entity type and ID as context
289
827
  parts.push(`${entity.entityType}: ${entity.data.name || entity.id}`);
@@ -317,6 +855,11 @@ export function buildEntityText(entity) {
317
855
  if (plainText)
318
856
  parts.push(plainText);
319
857
  }
858
+ if (extraText) {
859
+ const trimmed = extraText.trim();
860
+ if (trimmed)
861
+ parts.push(trimmed);
862
+ }
320
863
  return parts.join('\n');
321
864
  }
322
865
  //# sourceMappingURL=vector-service.js.map