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
@@ -6,10 +6,13 @@
6
6
  */
7
7
  import { GitService, GitUser } from '../services/git.js';
8
8
  import { MarkdownDocument } from '../services/markdown.js';
9
- import { AssetInfo, AssetConfig } from '../services/assets/index.js';
9
+ import type { BodyWriteCoordinator, BodyWriteResult } from '../server/body-write-coordinator.js';
10
+ import { AssetService, AssetInfo, AssetRecord, AssetConfig, type AssetUploadResult } from '../services/assets/index.js';
11
+ import type { AssetIndexService } from '../services/assets/asset-index-service.js';
10
12
  import { EntityType, type EntityData, type DatasetRow } from './validation.js';
11
13
  import { SchemaRegistry } from './schema-registry.js';
12
14
  import { type DatasetFilter } from '../services/csv-service.js';
15
+ import { type HistoryCommitChange } from './history-diff.js';
13
16
  import { type VectorService } from '../services/vector-service.js';
14
17
  export interface GraphConfig {
15
18
  repoPath: string;
@@ -20,14 +23,38 @@ export interface GraphConfig {
20
23
  schemaRegistry?: SchemaRegistry;
21
24
  /** When true, all git operations are skipped. Used for the private/ graph. */
22
25
  noGit?: boolean;
26
+ /** Workspace root path. Used to anchor cross-repo artefacts like the
27
+ * PDF text sidecar at `<workspaceRoot>/.studiograph/assets-text/...`.
28
+ * Optional — when undefined, sidecar cleanup is a no-op. */
29
+ workspaceRoot?: string;
23
30
  }
24
31
  export interface EntityFile {
25
32
  id: string;
26
33
  path: string;
34
+ /** Repo-relative POSIX path of the containing folder. "" for repo root. */
35
+ folder_path: string;
27
36
  entityType: string;
28
37
  data: EntityData;
29
38
  document: MarkdownDocument;
30
39
  }
40
+ export interface FolderEntry {
41
+ /** Repo-relative POSIX path. */
42
+ path: string;
43
+ /** Last segment of the path. */
44
+ name: string;
45
+ /** Optional human-readable label. Set only when an explicit override exists
46
+ * in the folder's `.studiograph-folder.json` sidecar; clients fall back to
47
+ * toDisplayName(name) when undefined. */
48
+ display_name?: string;
49
+ /** Stable folder id from the sidecar, when assigned. Eagerly written on
50
+ * folder creation; absent for folders never mutated through the app (those
51
+ * fall back to a path-based scope key). Reads never generate one. */
52
+ id?: string;
53
+ }
54
+ export interface FolderDeleteResult {
55
+ entriesDeleted: number;
56
+ subfoldersDeleted: number;
57
+ }
31
58
  export interface SearchOptions {
32
59
  entityType?: EntityType;
33
60
  query?: string;
@@ -40,6 +67,12 @@ export interface SearchOptions {
40
67
  };
41
68
  sortBy?: 'created_at' | 'updated_at' | 'relevance';
42
69
  limit?: number;
70
+ /**
71
+ * When true, score only on name match — skip frontmatter field scan and
72
+ * full-body content scan. Used by autosuggest, where scanning every
73
+ * entity's markdown body dominates wall time.
74
+ */
75
+ nameOnly?: boolean;
43
76
  }
44
77
  export interface CreateEntityOptions {
45
78
  entityType: EntityType;
@@ -48,9 +81,39 @@ export interface CreateEntityOptions {
48
81
  content?: string;
49
82
  commitMessage?: string;
50
83
  skipCommit?: boolean;
84
+ /**
85
+ * Repo-relative folder to create the entry in. Empty/undefined = repo root.
86
+ * Parent folders are auto-created (mkdir -p semantics).
87
+ */
88
+ folderPath?: string;
51
89
  /** Override commit author (for per-user attribution in web UI). */
52
90
  user?: GitUser;
91
+ /**
92
+ * Suppress the fire-and-forget vector upsert for THIS create. Used by the
93
+ * asset-upload flow, where the entity is created as a `__pending__` stub
94
+ * (no sidecar, no `indexable`) and then finalized by a follow-up `update`.
95
+ * Indexing the stub is both wasteful (name-only, pre-sidecar) and racy: its
96
+ * async embedding can resolve AFTER the finalizing update's body-inclusive
97
+ * upsert and clobber the good row, leaving the asset searchable by filename
98
+ * only. Skipping it means the single authoritative upsert is the finalizing
99
+ * update, after the sidecar is on disk. Default false (every other path
100
+ * indexes on create as before).
101
+ */
102
+ skipVectorIndex?: boolean;
53
103
  }
104
+ /**
105
+ * Body-write provenance. Every `graph.update` call that passes `content`
106
+ * must declare its `source`.
107
+ *
108
+ * - `'autosave'`: web editor autosave PUT. Content came from a live Y.Text;
109
+ * the live Y.Doc is already authoritative, so we write disk + commit
110
+ * under the per-doc lock but do NOT re-apply to the Y.Doc (that would
111
+ * race in-flight keystrokes typed during the round trip).
112
+ * - `'server-write'`: any server-side caller (MCP `update_entity`, agent
113
+ * tools, event processor). Routes through `applyAgentContent` under the
114
+ * per-doc lock so live editors receive the broadcast post-commit.
115
+ */
116
+ export type BodyWriteSource = 'autosave' | 'server-write';
54
117
  export interface UpdateEntityOptions {
55
118
  entityType: EntityType;
56
119
  entityId: string;
@@ -60,6 +123,98 @@ export interface UpdateEntityOptions {
60
123
  skipCommit?: boolean;
61
124
  /** Override commit author (for per-user attribution in web UI). */
62
125
  user?: GitUser;
126
+ /**
127
+ * Required when `content !== undefined`. See {@link BodyWriteSource}.
128
+ */
129
+ source?: BodyWriteSource;
130
+ /**
131
+ * Optional precondition for body writes. When set, the server compares
132
+ * this hash to `sha256(existing.document.content)` BEFORE mutating
133
+ * anything. Mismatch throws {@link StaleBaseRevisionError} so the caller
134
+ * can refetch + recompute. When omitted, last-writer-wins.
135
+ *
136
+ * Content hash, not `updated_at`, because two `new Date().toISOString()`
137
+ * stamps can alias to the same millisecond on fast hardware.
138
+ */
139
+ baseRevision?: string;
140
+ /**
141
+ * Optional sink for the body-write broadcast disposition. Only fires on
142
+ * the coordinator (body-write) path. Lets a caller (e.g. MCP
143
+ * update_entity) surface `broadcast-failed` in its diagnostics instead
144
+ * of the disposition being discarded after `writeBody` returns.
145
+ */
146
+ onBroadcast?: (disposition: BodyWriteResult['broadcast']) => void;
147
+ }
148
+ /**
149
+ * Thrown by `graph.update` when the git commit fails after the disk write
150
+ * has already landed. The .md is updated and observable to subsequent
151
+ * readers via `graph.get`, but no commit exists — the repo is dirty.
152
+ *
153
+ * The caller MUST surface this typed error so an operator can recover
154
+ * (manual `git add && git commit`, or `git checkout -- <path>` to revert
155
+ * disk). v3-of-the-plan claim of "auto-convergence via sessionManager"
156
+ * was false outside the autosave PUT path; Phase 2 explicitly registers
157
+ * server-side dirty files with sessionManager when available, but the
158
+ * caller still gets the typed error so it knows the write was partial.
159
+ */
160
+ export declare class CommitFailedDirtyError extends Error {
161
+ readonly entityType: string;
162
+ readonly entityId: string;
163
+ readonly path: string;
164
+ readonly code: "COMMIT_FAILED_DIRTY";
165
+ constructor(entityType: string, entityId: string, path: string, cause: unknown);
166
+ }
167
+ /**
168
+ * Thrown by `graph.update` when a body write supplies a `baseRevision`
169
+ * that doesn't match the current body's content hash. Caller (autosave,
170
+ * MCP, agent, event processor) refetches and retries against the new
171
+ * revision.
172
+ */
173
+ export declare class StaleBaseRevisionError extends Error {
174
+ readonly entityType: string;
175
+ readonly entityId: string;
176
+ readonly expected: string;
177
+ readonly actual: string;
178
+ readonly code: "STALE_BASE_REVISION";
179
+ constructor(entityType: string, entityId: string, expected: string, actual: string);
180
+ }
181
+ /**
182
+ * Callbacks that fire AFTER successful structural mutations. Used by the Yjs
183
+ * persistence layer so snapshot files follow the .md file (rename → rename
184
+ * snapshot, delete → delete snapshot, type change → rename across type dirs).
185
+ *
186
+ * Hooked at this layer because the four mutation methods (delete, rename,
187
+ * changeType, plus cross-repo create+delete via /transfer) are the canonical
188
+ * mutation surface — every code path that moves an entity goes through them.
189
+ *
190
+ * Body-write hooks (onBodyWritten, applyAgentContent, withDocLock,
191
+ * assertWritable, onCommitFailedDirty) used to live here too. Phase 4
192
+ * extracted them into {@link BodyWriteCoordinator} — different concurrency
193
+ * profile, single critical section. This interface now covers ONLY the
194
+ * structural-mutation notifications that drive snapshot bookkeeping.
195
+ */
196
+ export interface GraphPersistenceCallbacks {
197
+ onDelete?(repo: string, entityType: string, entityId: string): void | Promise<void>;
198
+ onRename?(repo: string, entityType: string, oldId: string, newId: string): void | Promise<void>;
199
+ onChangeType?(repo: string, entityId: string, fromType: string, toType: string): void | Promise<void>;
200
+ }
201
+ /**
202
+ * Thrown by `restoreFile` when the path the recreate would land at is
203
+ * currently occupied by a different entity. Carries the occupant's
204
+ * coordinates so callers (agent tool, REST endpoint) can surface a
205
+ * useful error to the user.
206
+ */
207
+ export declare class PathConflictError extends Error {
208
+ readonly path: string;
209
+ readonly occupiedBy: {
210
+ entityType: string;
211
+ entityId: string;
212
+ };
213
+ readonly code: "PATH_CONFLICT";
214
+ constructor(path: string, occupiedBy: {
215
+ entityType: string;
216
+ entityId: string;
217
+ });
63
218
  }
64
219
  export declare class BaseGraphManager {
65
220
  private repoPath;
@@ -67,22 +222,151 @@ export declare class BaseGraphManager {
67
222
  private gitService?;
68
223
  private noGit;
69
224
  private markdownService;
225
+ private csvService;
70
226
  private assetService?;
227
+ /** Workspace-global ownership index for immutable-keyed assets. Injected by
228
+ * WorkspaceManager (one per workspace). Undefined in coordinator-less test
229
+ * / CLI graphs — those fall back to the legacy `{type}/{id}` key scheme. */
230
+ private assetIndex?;
71
231
  private gitUser;
72
- private csvService;
73
232
  private vectorService?;
74
233
  private schemaRegistry?;
234
+ private workspaceRoot?;
235
+ /** Cache for history-panel change summaries, keyed by `${relPath}@${hash}`.
236
+ * A commit's diff against its parent is immutable, so this never needs
237
+ * invalidation — entries only accumulate as history is viewed. */
238
+ private historyChangeCache;
239
+ private persistenceCallbacks?;
240
+ private bodyWriteCoordinator?;
75
241
  constructor(config: GraphConfig);
76
- /** Expose git service for deferred commit operations (e.g. CommitScheduler). */
242
+ /**
243
+ * Friendly display label for an entity type — custom-type label when the
244
+ * workspace defines one, otherwise the title-cased key ("deal" → "Deal").
245
+ * Used to build human-readable commit messages.
246
+ */
247
+ private typeLabel;
248
+ /** Build an EntityRef for a commit message from a type, id, and optional title. */
249
+ private commitRef;
250
+ /**
251
+ * Build the friendly "Edited …" message for a deferred (batched) commit,
252
+ * given the "type/id" pairs accumulated by the SessionManager. Each title is
253
+ * resolved from the in-memory index at flush time (cheap lookup); an entity
254
+ * deleted before the flush falls back to its slug id.
255
+ */
256
+ buildEditedBatchMessage(entities: Array<{
257
+ type: string;
258
+ id: string;
259
+ }>): string;
260
+ /**
261
+ * Change summary for one commit in a file's history — which frontmatter
262
+ * fields moved and whether the body changed — by diffing the file at `hash`
263
+ * against its true git parent (`hash^`). Used by the entity History panel.
264
+ *
265
+ * `relPath` is repo-relative. Null parent (root commit, or file absent at the
266
+ * parent) → `created`. Result is immutable per (path, hash), so it's cached.
267
+ * Returns null only when the file isn't present at `hash`.
268
+ */
269
+ getCommitChange(relPath: string, hash: string): HistoryCommitChange | null;
270
+ /** Expose git service for deferred commit operations (SessionManager). */
77
271
  getGitService(): GitService | undefined;
272
+ /** Absolute repo path on disk. Used by callers that need to convert
273
+ * an entity's absolute path to a repo-relative one (e.g. for `git log`). */
274
+ getRepoPath(): string;
275
+ /**
276
+ * Find an entity at a specific commit (existing or deleted) and
277
+ * return its repo-relative path + content. Public surface for the
278
+ * history tools — wraps the private `findEntityInCommit` walker.
279
+ * Returns null when no .md file at that commit matches the
280
+ * (entityType, entityId) pair.
281
+ */
282
+ getEntityAtCommit(entityType: EntityType, entityId: string, commitHash: string): {
283
+ path: string;
284
+ content: string;
285
+ } | null;
286
+ /** Workspace root passed in via GraphConfig. Used by the asset upload
287
+ * service to anchor PDF text sidecars at workspace level (so all repos
288
+ * share the same `assets-text/` tree, mirroring the shared
289
+ * `.studiograph/assets/` directory the local backend uses). */
290
+ getWorkspaceRoot(): string | undefined;
291
+ /**
292
+ * Install structural-mutation callbacks. Called once after construction by
293
+ * the server bootstrap (or test setup) so the Yjs persistence layer can
294
+ * react to rename/delete/changeType without route-layer code calling
295
+ * persistence APIs directly.
296
+ */
297
+ setPersistenceCallbacks(callbacks: GraphPersistenceCallbacks | undefined): void;
298
+ /**
299
+ * Install the body-write coordinator. graph.update delegates the body-write
300
+ * critical section (lock, base-hash, atomic disk write, commit, broadcast,
301
+ * mdRevisionHash bookkeeping, assertWritable) to the coordinator. When
302
+ * unset (test fixtures without a Y.Doc layer), body writes fall back to a
303
+ * direct disk-write + commit path with no lock/broadcast — preserves the
304
+ * legacy "no callbacks" behavior some test setups rely on.
305
+ */
306
+ setBodyWriteCoordinator(coordinator: BodyWriteCoordinator | undefined): void;
78
307
  /**
79
308
  * Ensure repository exists
80
309
  */
81
310
  private ensureRepo;
82
311
  /**
83
- * Get entity file path: {repo}/{plural-type}/{entityId}.md
312
+ * Compute the on-disk path for a new entity.
313
+ *
314
+ * - When `folderPath` is provided, the entry lives at {repo}/{folderPath}/{id}.md
315
+ * regardless of type. This is the nested-folders layout.
316
+ * - Without `folderPath` (or empty string), the entry lands at the repo
317
+ * root: {repo}/{id}.md. The historical {repo}/{plural-type}/{id}.md
318
+ * fallback was confusing — entries hidden under a typed directory the
319
+ * list view never showed at repo root, contradicting the agent tool
320
+ * description that says "Omit to land at repo root."
321
+ *
322
+ * Note: this is for *new* paths only. Existing entries living under the
323
+ * legacy {plural-type}/ directories continue to be readable via
324
+ * findEntityFile() — only the create path moved.
84
325
  */
85
326
  private getEntityPath;
327
+ private fileIndex?;
328
+ /**
329
+ * Cache of the parsed `list()` view, keyed by `entityType ?? '*'`. Built
330
+ * lazily on first read; invalidated alongside `fileIndex` on every
331
+ * mutation. Without this, autosuggest walks the entire markdown tree
332
+ * and parses YAML frontmatter for every entry on every keystroke (5–7s
333
+ * on workspaces with a few thousand entries).
334
+ *
335
+ * Staleness contract: identical to `fileIndex` — single-process trust
336
+ * model. Git pulls and out-of-process file edits would equally miss
337
+ * the existing `fileIndex` cache; no regression there.
338
+ */
339
+ private listCache?;
340
+ /** Drop the cached file index so the next read rebuilds it. */
341
+ private invalidateIndex;
342
+ /**
343
+ * Walk every .md file under this repo, calling `visit` with the absolute
344
+ * path. Skips hidden directories (.git, .studiograph, etc.) and files that
345
+ * start with ".".
346
+ */
347
+ private walkMarkdownFiles;
348
+ /**
349
+ * Build (or fetch the cached) "type/id" → absolute path index.
350
+ * Type comes from frontmatter `entity_type`; if missing, falls back to the
351
+ * top-level plural-type directory name (legacy layout). Files without either
352
+ * (e.g. README.md) are skipped — they aren't entities.
353
+ */
354
+ private getFileIndex;
355
+ /**
356
+ * Infer entity type from a file's location for legacy layouts where the
357
+ * file sits directly inside a top-level plural-type directory
358
+ * ({repo}/meetings/foo.md). Returns undefined for any other layout.
359
+ */
360
+ private inferLegacyType;
361
+ /**
362
+ * Resolve an entity's absolute path by (type, id). Returns undefined if not
363
+ * found. Uses the file index — the index keys by `${entityType}/${entityId}`
364
+ * which is type-aware, unlike the on-disk filename. (We previously had a
365
+ * legacy {plural-type}/{id}.md fast path here; once the create path moved
366
+ * to flat repo-root layout, that fast path could return a different
367
+ * type's file at the same id.)
368
+ */
369
+ private findEntityFile;
86
370
  /**
87
371
  * Validate entity data against schema
88
372
  */
@@ -92,13 +376,48 @@ export declare class BaseGraphManager {
92
376
  */
93
377
  create(options: CreateEntityOptions): Promise<EntityFile>;
94
378
  /**
95
- * Get an entity by type and ID
379
+ * Get an entity by type and ID. Searches nested folders if the entry isn't
380
+ * at the legacy {plural-type}/{id}.md path.
96
381
  */
97
382
  get(entityType: EntityType, entityId: string): EntityFile;
98
383
  /**
99
- * Get an entity by ID only (type resolved from frontmatter)
384
+ * The live editor body for an entity when a seeded Y.Doc is open, else
385
+ * null. `get` reads disk, which lags the live Y.Doc by the autosave
386
+ * debounce + commit — so a user's freshly-placed image/asset embed exists
387
+ * in the editor before it reaches disk. Callers that must reflect what the
388
+ * user is actually looking at (the get_entity surfaces, the whole-body
389
+ * asset-drop guard) prefer this and fall back to disk on null.
390
+ *
391
+ * Returns null when no coordinator is wired (CLI / test fixtures) — those
392
+ * setups have no live editor layer, so disk IS the authoritative body.
393
+ */
394
+ getLiveBody(entityType: EntityType, entityId: string): string | null;
395
+ /**
396
+ * Get an entity by ID only (type resolved from the filesystem).
397
+ *
398
+ * Walks the file index to find any entry with this id, regardless of folder
399
+ * depth or type. Used by the agent's `get_entity` tool when the caller
400
+ * doesn't know the entity's type.
100
401
  */
101
402
  getById(entityId: string): EntityFile;
403
+ /**
404
+ * Merge a caller's `data` onto a base frontmatter, always stamping
405
+ * `updated_at` / `updated_by`, then validate. Even content-only edits
406
+ * (editor autosave, where `data` is undefined) re-stamp the audit fields —
407
+ * otherwise the trail freezes at whatever the last data-change user was,
408
+ * which for scaffolded files is "studiograph".
409
+ *
410
+ * `baseFrontmatter` is the frontmatter to merge onto. The body-write path
411
+ * passes the CURRENT on-disk frontmatter (read inside the per-doc lock) so
412
+ * a concurrent metadata-only edit isn't clobbered; the frontmatter-only
413
+ * path passes `existing.data` (synchronous, no lock window).
414
+ *
415
+ * Validation uses lenient mode + a Date-coercion fallback when no new data
416
+ * is supplied, since the existing entity may have been stored without all
417
+ * required fields, and gray-matter would otherwise serialize Date objects
418
+ * as full ISO timestamps.
419
+ */
420
+ private composeUpdatedFrontmatter;
102
421
  /**
103
422
  * Update an existing entity
104
423
  */
@@ -106,25 +425,193 @@ export declare class BaseGraphManager {
106
425
  /**
107
426
  * Delete an entity
108
427
  */
109
- delete(entityType: EntityType, entityId: string, commitMessage?: string, user?: GitUser): Promise<void>;
428
+ /**
429
+ * Delete multiple entities in a single git transaction. Each entity's
430
+ * file is removed from disk; folder markers (.gitkeep) are added where
431
+ * the deletion left a folder empty. Then everything commits as one
432
+ * atomic operation.
433
+ *
434
+ * Compared to looping `delete()` per entity, this is a real performance
435
+ * primitive: one fork of git, one index update, one commit, one ref
436
+ * advance — instead of N. Bulk delete of a few hundred entities goes
437
+ * from minutes to seconds.
438
+ *
439
+ * Errors per entity (e.g. "not found") don't abort the batch — they're
440
+ * collected in `errors` and the rest still commit. Returns both the
441
+ * successfully-deleted set (for vector cleanup + WS broadcast) and the
442
+ * errors so the caller can surface partial failures.
443
+ */
444
+ bulkDelete(specs: Array<{
445
+ entityType: EntityType;
446
+ entityId: string;
447
+ }>, options?: {
448
+ commitMessage?: string;
449
+ user?: GitUser;
450
+ }): Promise<{
451
+ deleted: Array<{
452
+ entityType: EntityType;
453
+ entityId: string;
454
+ path: string;
455
+ title?: string;
456
+ }>;
457
+ errors: Array<{
458
+ entityType: EntityType;
459
+ entityId: string;
460
+ error: string;
461
+ }>;
462
+ }>;
463
+ /**
464
+ * Commit a set of already-on-disk file changes as a single git
465
+ * operation. Used by callers (e.g. the import route) that perform many
466
+ * `skipCommit: true` writes and want one transaction at the end instead
467
+ * of per-file commits.
468
+ *
469
+ * `entries` describes what each file represents so the transaction can
470
+ * be staged correctly. No-op when nothing is staged or git isn't
471
+ * available.
472
+ */
473
+ commitPending(entries: Array<{
474
+ operation: 'create' | 'update' | 'delete';
475
+ entityType: EntityType;
476
+ entityId: string;
477
+ filePath: string;
478
+ }>, options: {
479
+ commitMessage: string;
480
+ user?: GitUser;
481
+ extraPaths?: string[];
482
+ }): Promise<{
483
+ committed: boolean;
484
+ }>;
485
+ delete(entityType: EntityType, entityId: string, commitMessage?: string, user?: GitUser, opts?: {
486
+ keepAssets?: boolean;
487
+ }): Promise<void>;
110
488
  /**
111
489
  * Rename an entity (change its ID). Preserves all data, content, and source_ref.
112
490
  * Uses git mv for clean history. Updates entity_id in frontmatter.
113
491
  */
114
492
  rename(entityType: EntityType, oldId: string, newId: string, commitMessage?: string, user?: GitUser): Promise<EntityFile>;
115
493
  /**
116
- * Change an entity's type. Moves the file from oldType/ to newType/ directory.
117
- * Preserves all data and content. Updates entity_type in frontmatter.
494
+ * Change an entity's type. Updates frontmatter only the file stays in
495
+ * its current folder. In the type-agnostic folder model, type is a
496
+ * frontmatter property independent of location. (Legacy behavior moved
497
+ * the file between {plural-type}/ dirs; that's no longer correct because
498
+ * those dirs are now ordinary user-visible folders, not type markers.)
499
+ *
500
+ * If the user wants the file to also move (e.g. out of a "meetings/"
501
+ * folder when changed to a note), they invoke move() separately.
118
502
  */
119
503
  changeType(entityId: string, fromType: EntityType, toType: EntityType, commitMessage?: string, user?: GitUser): Promise<EntityFile>;
120
504
  /**
121
- * List entities of a given type
505
+ * Move an entry to a different folder within the same repo. The filename
506
+ * (and therefore the entity id) and type are unchanged. Auto-creates parent
507
+ * folders. Refuses if the target path already has an entry with this id —
508
+ * pass `overwrite: true` to replace it, but only when the occupant is
509
+ * itself a parseable entity (never silently clobber arbitrary files like
510
+ * README.md or .gitkeep).
511
+ */
512
+ move(entityType: EntityType, entityId: string, targetFolderPath: string, commitMessage?: string, user?: GitUser, overwrite?: boolean): Promise<EntityFile>;
513
+ /**
514
+ * Restore an entity to its content at a specific commit. Single-entity
515
+ * scope only — multi-entity rollback (e.g. "undo this commit's effects
516
+ * across all touched files") is a separate, more cautious flow that
517
+ * isn't built yet.
518
+ *
519
+ * Two paths through the method:
520
+ * - **Overwrite**: the entity exists today at path `P`. Read content
521
+ * from `git show <hash>:<P>` and write it back to `P`.
522
+ * - **Recreate**: the entity is gone today. Walk the historical
523
+ * commit's tree to find the .md file whose basename matches
524
+ * `entityId` AND whose frontmatter `entity_type` matches
525
+ * `entityType`. That path is the restore target. The walk only
526
+ * fires when the entity is truly absent — overwrites stay cheap.
527
+ *
528
+ * Throws a `PathConflictError` if the recreate target path is now
529
+ * occupied by a DIFFERENT entity (different type+id) — recreating
530
+ * over it would silently overwrite unrelated work. Caller surfaces
531
+ * the conflict to the user; resolution is "move or delete the
532
+ * occupant first."
533
+ */
534
+ restoreFile(entityType: EntityType, entityId: string, commitHash: string, user?: GitUser): Promise<{
535
+ action: 'recreate' | 'overwrite';
536
+ path: string;
537
+ }>;
538
+ /**
539
+ * Walk a commit's tree looking for a .md file whose basename matches
540
+ * `entityId` AND whose frontmatter `entity_type` matches `entityType`.
541
+ * Returns repo-relative path + content when found, otherwise null.
542
+ * Used by `restoreFile` for the recreate-from-deletion case.
543
+ */
544
+ private findEntityInCommit;
545
+ /**
546
+ * Identify the entity (if any) currently occupying `absPath`. Returns
547
+ * null when the path holds something that isn't an entity (README, etc).
548
+ * Mirrors the inference rules used in `getFileIndex`.
549
+ */
550
+ private identifyEntityAtPath;
551
+ /**
552
+ * Enumerate the distinct entity types present in this repo. Used by
553
+ * /api/repos to let the sidebar render the Views list without a full
554
+ * entity fetch per folder.
555
+ *
556
+ * Derived from the file index (which reads frontmatter), so it works for
557
+ * entries in any folder — not just the legacy {plural-type}/ dirs.
558
+ */
559
+ listEntityTypes(): string[];
560
+ /**
561
+ * Folder lifecycle: a directory is treated as a first-class persistent
562
+ * object. It exists from the moment it's created (createFolder, the destination
563
+ * of a moved entry, etc.) until it's explicitly removed via a folder-level
564
+ * operation (deleteFolder, renameFolder, moveFolderToRepo). Entry-level
565
+ * operations (create, delete, move, transfer) never decide whether a folder
566
+ * lives or dies.
567
+ *
568
+ * `listFolders()` requires either a .md child or a .gitkeep marker for a
569
+ * directory to surface in the API, so the two helpers below are the single
570
+ * place that adds and removes the marker:
571
+ *
572
+ * - `ensureFolderMarker` — call after an op that may have left `dir`
573
+ * without .md children. Writes `.gitkeep` and returns its path so the
574
+ * caller can stage it in the same commit.
575
+ * - `removeFolderMarker` — call after an op that placed an .md into `dir`.
576
+ * Drops a now-redundant `.gitkeep` so the repo stays tidy.
577
+ *
578
+ * Both no-op for the repo root (always implicit) and for paths that don't
579
+ * exist. Both return `null` when nothing changed.
580
+ */
581
+ private ensureFolderMarker;
582
+ private removeFolderMarker;
583
+ /**
584
+ * Walk up from `dir`, removing each directory that became empty after a
585
+ * folder-level removal (deleteFolder, renameFolder, moveFolderToRepo).
586
+ * Stops at the repo root. Silently no-ops if a directory is missing,
587
+ * non-empty, or can't be removed.
588
+ *
589
+ * NOT called by entry-level operations (create/delete/move/transfer) —
590
+ * they preserve folder structure regardless of whether they emptied a
591
+ * directory. Use `ensureFolderMarker` instead for those paths.
592
+ */
593
+ private pruneEmptyAncestors;
594
+ /**
595
+ * List entities of a given type (or all types if not specified).
596
+ *
597
+ * Walks the entire repo tree so entries in nested folders are discovered.
598
+ * The type filter is applied against frontmatter `entity_type`; legacy
599
+ * entries without explicit frontmatter type fall back to the depth-1
600
+ * plural-type directory name (so `meetings/foo.md` still resolves as a
601
+ * meeting). Files with no inferable type (README.md, CONTRIBUTING.md, etc.)
602
+ * are skipped.
122
603
  */
123
604
  list(entityType?: EntityType, limit?: number): EntityFile[];
124
605
  /**
125
606
  * Search entities
126
607
  */
127
608
  search(options: SearchOptions): EntityFile[];
609
+ /**
610
+ * Resolve a markdown file (anywhere under the repo) to its (type, id),
611
+ * tolerating both legacy {plural-type}/{id}.md and nested-folder layouts.
612
+ * Returns undefined for files without a recognizable entity type.
613
+ */
614
+ private resolveFileToEntity;
128
615
  /**
129
616
  * Get entities related to a given entity (via wikilinks)
130
617
  */
@@ -146,14 +633,219 @@ export declare class BaseGraphManager {
146
633
  refactorWikilink(oldId: string, newId: string, commitMessage?: string): Promise<{
147
634
  updated: number;
148
635
  }>;
636
+ /**
637
+ * List every non-empty folder in this repo, plus folders explicitly kept
638
+ * via .gitkeep. Returns repo-relative POSIX paths, sorted, deduplicated.
639
+ * The repo root ("") is intentionally omitted — it's implicit.
640
+ */
641
+ listFolders(): FolderEntry[];
642
+ /**
643
+ * Read the display_name override for a single folder, or null if no sidecar
644
+ * exists / is unreadable. Used by mutation paths that need the current
645
+ * override before deciding whether to rewrite it.
646
+ */
647
+ readFolderDisplayName(folderPath: string): string | null;
648
+ /**
649
+ * Write or remove the per-folder display_name sidecar. Pass `null` /
650
+ * empty-string to remove (returns to slug fallback). Returns the absolute
651
+ * path of the sidecar (for git staging) when one was written or removed,
652
+ * or null when no change was needed (idempotent).
653
+ *
654
+ * Caller is responsible for committing — the helper only touches the
655
+ * filesystem. Folder must already exist; this never creates one.
656
+ */
657
+ writeFolderDisplayName(folderPath: string, displayName: string | null): string | null;
658
+ /**
659
+ * Bulk-write display_name sidecars for many folders at once. Used by the
660
+ * import path to record original-casing overrides for every nested
661
+ * directory it slugified. First-writer-wins: existing sidecars are NOT
662
+ * overwritten, so a second import doesn't clobber a user's manual rename.
663
+ *
664
+ * Returns the list of sidecar paths actually written (for git staging).
665
+ * Skipped paths (folder missing, empty display, display_name override
666
+ * already set) are quietly omitted.
667
+ */
668
+ recordFolderDisplays(entries: Array<{
669
+ path: string;
670
+ display_name: string;
671
+ }>): string[];
672
+ /**
673
+ * Create a folder at the given path (mkdir -p semantics) and drop a
674
+ * .gitkeep so git tracks it even when empty. Validates the path. No-op if
675
+ * the folder already exists; .gitkeep is added if missing.
676
+ */
677
+ createFolder(folderPath: string, commitMessage?: string, user?: GitUser, options?: {
678
+ displayName?: string;
679
+ }): Promise<void>;
680
+ /**
681
+ * Rename / move a folder within the repo. Moves the entire subtree
682
+ * atomically via filesystem rename. Refuses if the target path is already
683
+ * occupied.
684
+ */
685
+ renameFolder(fromPath: string, toPath: string, commitMessage?: string, user?: GitUser, options?: {
686
+ displayName?: string | null;
687
+ }): Promise<void>;
688
+ /**
689
+ * Move a folder (and its full subtree) into a different repo at `targetFolderPath`.
690
+ *
691
+ * The naive way to do this is to iterate the source's entries and call
692
+ * `transfer` per entry — that's what the web UI used to do, and it costs
693
+ * 2 git commits per entry (1600 commits for 800 files), each blocking the
694
+ * Node event loop via `execSync`. This method performs the move as a
695
+ * single FS-level rename + one commit per repo, regardless of how many
696
+ * files are inside.
697
+ *
698
+ * Returns the count of entries + subfolders moved so the caller can
699
+ * surface progress.
700
+ */
701
+ moveFolderToRepo(sourceFolderPath: string, target: BaseGraphManager, targetFolderPath: string, options?: {
702
+ commitMessage?: string;
703
+ user?: GitUser;
704
+ }): Promise<FolderDeleteResult>;
705
+ /**
706
+ * Move a batch of entries (potentially across many source folders) into a
707
+ * single target folder, optionally in a different repo. The web UI's
708
+ * multi-select bulk move used to call /move or /transfer per entry — that
709
+ * was 1-2 sync git commits per entry, blocking the event loop on each one.
710
+ * This collapses the operation to a single FS rename per file plus one
711
+ * commit on each repo touched.
712
+ */
713
+ moveEntitiesToRepo(entries: Array<{
714
+ entityType: EntityType;
715
+ entityId: string;
716
+ }>, target: BaseGraphManager, targetFolderPath: string, options?: {
717
+ commitMessage?: string;
718
+ user?: GitUser;
719
+ }): Promise<{
720
+ moved: number;
721
+ }>;
722
+ /**
723
+ * Delete a folder. Refuses non-empty folders unless `recursive: true`.
724
+ * Returns the count of entries + subfolders removed (for blast-radius UI).
725
+ */
726
+ deleteFolder(folderPath: string, options?: {
727
+ recursive?: boolean;
728
+ commitMessage?: string;
729
+ user?: GitUser;
730
+ }): Promise<FolderDeleteResult>;
731
+ /**
732
+ * Count the entries (.md files with entity_type) and subfolders inside an
733
+ * absolute directory, recursively. Used to surface blast radius in the
734
+ * delete-folder approval UI.
735
+ */
736
+ private countFolderContents;
737
+ /**
738
+ * Return the storage backend the graph is bound to, or `undefined` if
739
+ * no asset service is configured. Used by routes that need to branch
740
+ * between local-stream and R2-redirect behavior.
741
+ */
742
+ getAssetStorage(): 'local' | 'r2' | undefined;
743
+ /** The asset storage service (raw key copy/exists), if configured. Used by
744
+ * the one-time key migration, which operates on raw `{...}/{file}` keys. */
745
+ getAssetService(): AssetService | undefined;
746
+ /**
747
+ * Download the bytes of an asset OWNED by `assetEntityId` in THIS repo.
748
+ * Used by the convert flow to turn a stored .docx/.xlsx into a derived
749
+ * note/dataset. Backend-agnostic (local reads disk, R2 GetObjects).
750
+ *
751
+ * SECURITY: the asset's `asset_url` frontmatter is attacker-influenceable
752
+ * (a folder member can create an `asset` entity whose url points at another
753
+ * folder's storage key). So ownership is NOT taken from the url — it's
754
+ * resolved through the authoritative asset index, scoped to
755
+ * `(this.repoName, 'asset', assetEntityId)`, exactly like the GET
756
+ * /api/assets serve route. The url is used only to disambiguate which of the
757
+ * entity's own files to fetch (by filename). Unindexed legacy assets fall
758
+ * back to the legacy `asset/{entityId}/{file}` key bound to this same entity
759
+ * id; anything else is refused.
760
+ */
761
+ downloadOwnedAsset(assetEntityId: string, assetUrl: string): Promise<Buffer>;
762
+ /** Pre-signed URL for an immutable-key asset ({assetId}/{filename}). */
763
+ getAssetSignedUrlByAssetId(assetId: string, filename: string, method?: 'GET' | 'HEAD', expiresIn?: number): Promise<string>;
764
+ /**
765
+ * Mint a short-lived pre-signed URL for an asset. Only supported by
766
+ * remote backends (R2); the local backend throws. `method` selects
767
+ * the verb the URL is signed against — HEAD callers need a HEAD URL.
768
+ */
769
+ getAssetSignedUrl(entityType: EntityType, entityId: string, filename: string, keyPrefix?: string, expiresIn?: number, method?: 'GET' | 'HEAD'): Promise<string>;
149
770
  /**
150
771
  * Upload asset for an entity
151
772
  */
152
- uploadAsset(entityType: EntityType, entityId: string, filename: string, buffer: Buffer, keyPrefix?: string): Promise<AssetInfo>;
773
+ uploadAsset(entityType: EntityType, entityId: string, filename: string, buffer: Buffer, keyPrefix?: string,
774
+ /** Auth user id of the uploader (web). Recorded in the asset index for
775
+ * the "delete by uploader + workspace owner" rule. Omit for CLI/import/
776
+ * agent uploads — stored as null (unknown → owner-only delete). */
777
+ opts?: {
778
+ uploaderUserId?: string | null;
779
+ /**
780
+ * Override the recorded owner. Default = the `(entityType, entityId)`
781
+ * passed above (the entity that holds the blob — e.g. an image embedded
782
+ * in a note). The asset-as-embed model (see `~/.claude/plans/asset-as-embed.md`)
783
+ * uploads FREE-STANDING assets owned by a folder or the workspace, so the
784
+ * blob survives deletion/move of any entity that merely embeds it. When
785
+ * `owner` is set, `(entityType, entityId)` are ignored for ownership.
786
+ */
787
+ owner?: {
788
+ type: string;
789
+ id: string;
790
+ };
791
+ /** Display name recorded in the index row. Defaults to the filename.
792
+ * Matters for free-standing assets, where the row's name is the manager
793
+ * label (no owning entity to borrow a name from). */
794
+ name?: string;
795
+ }): Promise<AssetUploadResult>;
796
+ /** Inject the workspace-global asset ownership index (WorkspaceManager). */
797
+ setAssetIndex(index: AssetIndexService | undefined): void;
798
+ /** The asset ownership index, if wired. */
799
+ getAssetIndex(): AssetIndexService | undefined;
800
+ /**
801
+ * Remove every immutable-keyed asset owned by (entityType, entityId): the
802
+ * blob + its index row. Used by delete/bulkDelete/deleteFolder. Blob errors
803
+ * are non-fatal (markdown is the system of record). No-op without an index.
804
+ * Owner-scoped, so it only touches THIS entity's assets — a blob another
805
+ * entity also embeds (copied URL) is not enumerated here.
806
+ */
807
+ private cleanupOwnedAssets;
808
+ /** Delete a single index-tracked asset by its immutable id: blob + index row.
809
+ * The asset-manager delete path for free-standing (folder/workspace-owned)
810
+ * assets, which have no owning entity to route an entity-coordinate delete
811
+ * through. Blob errors are non-fatal (the index row is the manager's source
812
+ * of truth, same as cleanupOwnedAssets). No-op without an index/service. */
813
+ deleteAssetById(assetId: string, filename: string): Promise<void>;
814
+ /** Re-point the owning coordinates of every asset owned by an entity, with
815
+ * no blob movement (keys are immutable). Used by rename (ownerId),
816
+ * changeType (ownerType), and cross-repo move/transfer (repo). No-op
817
+ * without an index. */
818
+ private reassignOwnedAssets;
153
819
  /**
154
820
  * List assets for an entity
155
821
  */
156
822
  listAssets(entityType: EntityType, entityId: string, keyPrefix?: string): Promise<AssetInfo[]>;
823
+ /**
824
+ * List every asset in the backend in one round-trip, tagged with
825
+ * (entityType, entityId) origin. Workspace-wide since the asset backend
826
+ * is shared across repos — callers filter by repo via {@link listEntityIds}.
827
+ */
828
+ listAllAssets(): Promise<AssetRecord[]>;
829
+ /**
830
+ * Enumerate (type, id) pairs in this repo. Used by endpoints (like
831
+ * /api/repos/:repo/assets) that need to answer "does entity X belong to
832
+ * this repo?".
833
+ *
834
+ * Backed by the file index, which reads frontmatter — so entries in
835
+ * nested folders are included alongside legacy {plural-type}/ entries.
836
+ */
837
+ listEntityIds(): Array<{
838
+ entityType: EntityType;
839
+ id: string;
840
+ }>;
841
+ /**
842
+ * Resolve the absolute on-disk markdown path for an entity. Goes through
843
+ * the file index so it works for both the flat repo-root layout and
844
+ * arbitrary nested folders. Use this anywhere callers need a path —
845
+ * never reconstruct one from `${plural-type}/${id}.md`, which assumes
846
+ * the legacy typed-folder layout and silently misses everything else.
847
+ */
848
+ getEntityFilePath(entityType: EntityType, entityId: string): string | undefined;
157
849
  /**
158
850
  * Delete an asset
159
851
  */
@@ -163,13 +855,38 @@ export declare class BaseGraphManager {
163
855
  */
164
856
  deleteAllAssets(entityType: EntityType, entityId: string, keyPrefix?: string): Promise<number>;
165
857
  /**
166
- * Get dataset rows, optionally filtered
858
+ * Resolve the authoritative CSV body for a dataset: the live editor body
859
+ * when one exists (the grid may be ahead of disk), else the on-disk body.
860
+ */
861
+ private datasetBody;
862
+ /**
863
+ * Get dataset rows, optionally filtered. Columns come from the CSV header.
167
864
  */
168
865
  getDatasetRows(entityId: string, filter?: DatasetFilter): DatasetRow[];
169
866
  /**
170
- * Append rows to a dataset entity
867
+ * Column names for a dataset, read from the CSV header. Independent of the
868
+ * rows so callers get the real columns even for a header-only dataset or a
869
+ * zero-match filter (where deriving columns from result rows would be empty).
870
+ */
871
+ getDatasetColumns(entityId: string): string[];
872
+ /**
873
+ * Append rows to a dataset entity.
874
+ *
875
+ * The existing CSV body is preserved verbatim and the new rows are appended
876
+ * after it — we do NOT re-parse and re-stringify existing rows. That keeps
877
+ * datasets with duplicate column headers from collapsing (csv-parse's
878
+ * object mode keeps only the last same-named column) and avoids reformatting
879
+ * unrelated cells. New rows are mapped to the existing header columns; keys
880
+ * not in the header are dropped (query the columns first). When the body has
881
+ * no header yet, the columns are taken from the new rows.
882
+ *
883
+ * The write routes through `update()` so it shares the BodyWriteCoordinator
884
+ * contract (per-doc lock, base-hash precondition, applyAgentContent, commit)
885
+ * instead of writing to disk directly — same guarantees the agent's markdown
886
+ * writes get. `baseRevision` makes a concurrent change since our read fail
887
+ * loudly rather than silently back-stomp.
171
888
  */
172
- appendDatasetRows(entityId: string, newRows: DatasetRow[], commitMessage?: string): Promise<EntityFile>;
889
+ appendDatasetRows(entityId: string, newRows: Array<Record<string, unknown>>, commitMessage?: string): Promise<EntityFile>;
173
890
  /**
174
891
  * Get repository status
175
892
  */