studiograph 1.3.48-next.2 → 1.3.48-next.200

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 +42 -0
  12. package/dist/agent/prompts/entity-types-section.js +96 -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 +673 -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 +142 -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 +2238 -313
  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 +767 -1777
  254. package/dist/core/validation.js +463 -227
  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 +1366 -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 +1519 -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 +205 -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.B5mExQRc.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/-XvFB-zz2.js +2 -0
  608. package/dist/web/_app/immutable/chunks/-oRd_ir9.js +1 -0
  609. package/dist/web/_app/immutable/chunks/4XSri7g0.js +1 -0
  610. package/dist/web/_app/immutable/chunks/4iaT0dG72.js +1 -0
  611. package/dist/web/_app/immutable/chunks/5_TKU9QS2.js +1 -0
  612. package/dist/web/_app/immutable/chunks/6-29uWv0.js +1 -0
  613. package/dist/web/_app/immutable/chunks/8Yh26Z9_2.js +1 -0
  614. package/dist/web/_app/immutable/chunks/8q1f96y1.js +1 -0
  615. package/dist/web/_app/immutable/chunks/B-Z_xZy_.js +4 -0
  616. package/dist/web/_app/immutable/chunks/B1RnjnNt.js +1 -0
  617. package/dist/web/_app/immutable/chunks/B21rwvCB.js +1 -0
  618. package/dist/web/_app/immutable/chunks/B2n86UNJ.js +1 -0
  619. package/dist/web/_app/immutable/chunks/B318GEUB2.js +1 -0
  620. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  621. package/dist/web/_app/immutable/chunks/BADt8daH.js +2 -0
  622. package/dist/web/_app/immutable/chunks/BBGt-XQo.js +3 -0
  623. package/dist/web/_app/immutable/chunks/BCCSYbMx.js +2 -0
  624. package/dist/web/_app/immutable/chunks/BDIUHcEz.js +1 -0
  625. package/dist/web/_app/immutable/chunks/BDSuq3KH.js +1 -0
  626. package/dist/web/_app/immutable/chunks/BGiLU5VN.js +1 -0
  627. package/dist/web/_app/immutable/chunks/BJgOZTHR.js +1 -0
  628. package/dist/web/_app/immutable/chunks/BN8IRueA2.js +1 -0
  629. package/dist/web/_app/immutable/chunks/BRRoo378.js +2 -0
  630. package/dist/web/_app/immutable/chunks/BVPNAzAK.js +1 -0
  631. package/dist/web/_app/immutable/chunks/BZ7qh0of.js +1 -0
  632. package/dist/web/_app/immutable/chunks/BaMo5OWI.js +1 -0
  633. package/dist/web/_app/immutable/chunks/BdYQewoD.js +1 -0
  634. package/dist/web/_app/immutable/chunks/BgRT-K6w.js +5 -0
  635. package/dist/web/_app/immutable/chunks/BibveGGd.js +1 -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/Bw3ftRwD2.js +1 -0
  640. package/dist/web/_app/immutable/chunks/C7-8fYBp.js +2 -0
  641. package/dist/web/_app/immutable/chunks/C84_yofr.js +1 -0
  642. package/dist/web/_app/immutable/chunks/CAXXrbj52.js +1 -0
  643. package/dist/web/_app/immutable/chunks/CEniyZ1Z2.js +6 -0
  644. package/dist/web/_app/immutable/chunks/CJhElIkU2.js +1 -0
  645. package/dist/web/_app/immutable/chunks/CK8tIaYT.js +1 -0
  646. package/dist/web/_app/immutable/chunks/CO2DvORW.js +2 -0
  647. package/dist/web/_app/immutable/chunks/CQDB9Yvp.js +1 -0
  648. package/dist/web/_app/immutable/chunks/CTzjJm_m2.js +1 -0
  649. package/dist/web/_app/immutable/chunks/CUXqa1nn2.js +1 -0
  650. package/dist/web/_app/immutable/chunks/CY0iY_WO.js +1 -0
  651. package/dist/web/_app/immutable/chunks/CYY3Iy2G.js +1 -0
  652. package/dist/web/_app/immutable/chunks/CbCfNNV_2.js +2692 -0
  653. package/dist/web/_app/immutable/chunks/CbuGIyDu2.js +22 -0
  654. package/dist/web/_app/immutable/chunks/CcXmQaYs2.js +1 -0
  655. package/dist/web/_app/immutable/chunks/CcaQuaSt2.js +1 -0
  656. package/dist/web/_app/immutable/chunks/CoHaBDpN2.js +2 -0
  657. package/dist/web/_app/immutable/chunks/Cvbd3myc2.js +14 -0
  658. package/dist/web/_app/immutable/chunks/CwgiPHda.js +2 -0
  659. package/dist/web/_app/immutable/chunks/Cwt5tUMq.js +1 -0
  660. package/dist/web/_app/immutable/chunks/CyGDzYpQ2.js +3 -0
  661. package/dist/web/_app/immutable/chunks/D-HVAF_w.js +2 -0
  662. package/dist/web/_app/immutable/chunks/D20C1thX2.js +1 -0
  663. package/dist/web/_app/immutable/chunks/D3JoMtWC.js +7 -0
  664. package/dist/web/_app/immutable/chunks/D3ch71s_.js +1 -0
  665. package/dist/web/_app/immutable/chunks/DBFijAmG.js +1 -0
  666. package/dist/web/_app/immutable/chunks/DJAStLNu.js +1 -0
  667. package/dist/web/_app/immutable/chunks/DMZS8I6d.js +7 -0
  668. package/dist/web/_app/immutable/chunks/DO_sw49q2.js +1 -0
  669. package/dist/web/_app/immutable/chunks/DP69PpIj.js +1 -0
  670. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  671. package/dist/web/_app/immutable/chunks/DT0wzK622.js +1 -0
  672. package/dist/web/_app/immutable/chunks/DTnEJArL.js +1 -0
  673. package/dist/web/_app/immutable/chunks/DToS-G202.js +1 -0
  674. package/dist/web/_app/immutable/chunks/DV0hSm5g.js +2 -0
  675. package/dist/web/_app/immutable/chunks/DZcU6mGe2.js +1 -0
  676. package/dist/web/_app/immutable/chunks/DbslMybD.js +1 -0
  677. package/dist/web/_app/immutable/chunks/DcGThsSF.js +1 -0
  678. package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
  679. package/dist/web/_app/immutable/chunks/De0g5qop2.js +1 -0
  680. package/dist/web/_app/immutable/chunks/DeGcz9JU.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/DnIQzIOz.js +1 -0
  684. package/dist/web/_app/immutable/chunks/DnfCmXUt.js +1 -0
  685. package/dist/web/_app/immutable/chunks/DnrImJan.js +1 -0
  686. package/dist/web/_app/immutable/chunks/Do09oEro2.js +2 -0
  687. package/dist/web/_app/immutable/chunks/Dpuq25vu2.js +1 -0
  688. package/dist/web/_app/immutable/chunks/DrSaepAD2.js +1 -0
  689. package/dist/web/_app/immutable/chunks/Dw-frCfE.js +1 -0
  690. package/dist/web/_app/immutable/chunks/Dz34u8Ie2.js +185 -0
  691. package/dist/web/_app/immutable/chunks/DzrRTvug.js +1 -0
  692. package/dist/web/_app/immutable/chunks/E5LDmXgv.js +1 -0
  693. package/dist/web/_app/immutable/chunks/FCTxXqoV.js +1 -0
  694. package/dist/web/_app/immutable/chunks/FLoGUKj7.js +2 -0
  695. package/dist/web/_app/immutable/chunks/F_crThMu2.js +1 -0
  696. package/dist/web/_app/immutable/chunks/GRN8IpJ0.js +2 -0
  697. package/dist/web/_app/immutable/chunks/J5nb9xxj.js +1 -0
  698. package/dist/web/_app/immutable/chunks/JCjEwqH9.js +1 -0
  699. package/dist/web/_app/immutable/chunks/JN_nsXUm2.js +1 -0
  700. package/dist/web/_app/immutable/chunks/JS2_GaB1.js +1 -0
  701. package/dist/web/_app/immutable/chunks/N6vnY5Si2.js +1 -0
  702. package/dist/web/_app/immutable/chunks/PKzH7OBb2.js +1 -0
  703. package/dist/web/_app/immutable/chunks/Wowi_89k.js +5 -0
  704. package/dist/web/_app/immutable/chunks/Y_asqJqs2.js +83 -0
  705. package/dist/web/_app/immutable/chunks/Yhg5Q4MT.js +1 -0
  706. package/dist/web/_app/immutable/chunks/cHSFvkPC.js +3 -0
  707. package/dist/web/_app/immutable/chunks/f_eYccPf2.js +1 -0
  708. package/dist/web/_app/immutable/chunks/hm_8RsuL.js +1 -0
  709. package/dist/web/_app/immutable/chunks/iPCkjliu.js +3 -0
  710. package/dist/web/_app/immutable/chunks/j2AvgZGz.js +1 -0
  711. package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
  712. package/dist/web/_app/immutable/chunks/kWdKf0Ej.js +8 -0
  713. package/dist/web/_app/immutable/chunks/l1761xxj.js +1 -0
  714. package/dist/web/_app/immutable/chunks/liGRFQqV2.js +184 -0
  715. package/dist/web/_app/immutable/chunks/lq1kR86d.js +1 -0
  716. package/dist/web/_app/immutable/chunks/mIykYR4F2.js +1 -0
  717. package/dist/web/_app/immutable/chunks/piVEn8CZ.js +66 -0
  718. package/dist/web/_app/immutable/chunks/rbhlO_t8.js +1 -0
  719. package/dist/web/_app/immutable/chunks/rgZlSXXV.js +1 -0
  720. package/dist/web/_app/immutable/chunks/rx_WUKwk2.js +1 -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.CusiWZov.js +2 -0
  727. package/dist/web/_app/immutable/entry/start.DrLcQ4Lx.js +1 -0
  728. package/dist/web/_app/immutable/nodes/0.CXwev3zA.js +2 -0
  729. package/dist/web/_app/immutable/nodes/1.D93E26FU.js +1 -0
  730. package/dist/web/_app/immutable/nodes/10.BSkeTxej.js +1 -0
  731. package/dist/web/_app/immutable/nodes/11.CRoiFE32.js +1 -0
  732. package/dist/web/_app/immutable/nodes/12.Bcwm3-AY.js +1 -0
  733. package/dist/web/_app/immutable/nodes/13.BVWnarZm.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.B_ReGv9R.js +1 -0
  736. package/dist/web/_app/immutable/nodes/16.DiOHgg-l.js +77 -0
  737. package/dist/web/_app/immutable/nodes/2.bwyeAMyx.js +109 -0
  738. package/dist/web/_app/immutable/nodes/3.CyIpLMSo.js +6 -0
  739. package/dist/web/_app/immutable/nodes/4.CBxNEgp_.js +11 -0
  740. package/dist/web/_app/immutable/nodes/5.BV-6fNbn.js +5 -0
  741. package/dist/web/_app/immutable/nodes/6.BanV644Z.js +1 -0
  742. package/dist/web/_app/immutable/nodes/7.B7rO4HSm.js +1 -0
  743. package/dist/web/_app/immutable/nodes/8.BdssFp4B.js +1 -0
  744. package/dist/web/_app/immutable/nodes/9.B_TACjMT.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
@@ -1,15 +1,29 @@
1
1
  /**
2
2
  * Entity validation schemas for Studiograph
3
3
  *
4
- * 17 built-in entity types organized into three categories:
5
- * - Identity (4): person, organization, role, practice-area
6
- * - Universal (10): project, meeting, decision, task, document, dataset, reference, note, deliverable, publication
7
- * - Knowledge (3): process, standard, case-study
4
+ * 17 canonical entity types post-redesign:
5
+ * - CRM (4): person, organization, position, deal
6
+ * - PM (4): project, event, task, deliverable
7
+ * - KM authored (6): document, deck, publication, case-study, service, skill
8
+ * - Capture (3): note, reference, dataset
9
+ * - System (1): asset
8
10
  *
9
- * App plugins register additional types at runtime via SchemaRegistry.
10
- * Teams can define custom types via schema_extensions in workspace config.
11
+ * "An object earns first-class entity status only if it earns its own view
12
+ * behavior across the six primary views (List, Gallery, Kanban, Calendar,
13
+ * Timeline, Graph). Objects that are mostly useful because they're attached
14
+ * to something else become categories, fields, or inline blocks — not types."
15
+ *
16
+ * Workspaces can define additional custom types via schema_extensions.
11
17
  */
12
18
  import { z } from 'zod';
19
+ function dateField(role, label, description) {
20
+ return z
21
+ .string()
22
+ .date()
23
+ .optional()
24
+ .describe(description ?? label)
25
+ .meta({ dateRole: role, label });
26
+ }
13
27
  /**
14
28
  * Base entity schema - all entities have these fields
15
29
  */
@@ -22,328 +36,526 @@ export const EntityBaseSchema = z.object({
22
36
  updated_at: z.string().datetime('Invalid datetime format'),
23
37
  created_by: z.string().min(1, 'Created by is required'),
24
38
  updated_by: z.string().min(1, 'Updated by is required'),
25
- date: z.string().optional().describe('Human-friendly date (e.g., meeting date, project start, note taken)'),
39
+ date: dateField('primary', 'Date', "The entity's primary date (YYYY-MM-DD)"),
26
40
  tags: z.array(z.string())
27
41
  .optional()
28
42
  .describe('Tags for categorization'),
29
43
  }).passthrough(); // Allow custom fields beyond the base schema
30
44
  // ══════════════════════════════════════════════════════════════════════════════
31
- // IDENTITY ENTITIES — people, organizations, roles, practice areas
45
+ // CRM — people, organizations, positions, deals
32
46
  // ══════════════════════════════════════════════════════════════════════════════
33
47
  /**
34
- * Person — team members, client contacts, any individual
48
+ * Person — team members, client contacts, any individual.
49
+ *
50
+ * `category` and `status` are split: category is the relationship type
51
+ * (employee/contractor/client/partner) and status is whether that
52
+ * relationship is current or historical. Mirrors organization.
35
53
  */
36
54
  export const PersonSchema = EntityBaseSchema.extend({
37
55
  entity_type: z.literal('person'),
38
56
  name: z.string().min(1, 'Person name is required'),
39
- role: z.string().optional().describe('Role or title'),
40
- status: z.enum(['current', 'former', 'contractor', 'client', 'partner'])
57
+ role: z.string().optional().describe('Free-text title (distinct from `position` entity)'),
58
+ category: z.enum(['employee', 'contractor', 'client', 'partner', 'other'])
59
+ .optional()
60
+ .describe('Relationship category'),
61
+ status: z.enum(['current', 'former'])
41
62
  .optional()
42
- .describe('Relationship status'),
63
+ .describe('Whether the relationship is current or historical'),
43
64
  email: z.string().optional().describe('Email address'),
44
65
  location: z.string().optional().describe('Location'),
45
66
  organization: z.string().optional().describe('Organization wikilink'),
46
- bio: z.string().optional().describe('Biography (markdown)'),
47
- projects: z.array(z.string()).optional().describe('Related project wikilinks'),
48
- reports_to: z.string().optional().describe('Manager or role wikilink'),
49
- department: z.string().optional().describe('Department'),
67
+ // Bridge to the auth.db user account this person represents. Scalar handle
68
+ // string (not a wikilink): users are out-of-graph identities. Workspace-
69
+ // unique — write-path enforcement lives in user-person-bridge.ts. Optional
70
+ // because person entities can exist without a corresponding user
71
+ // (contractors, client contacts, anyone in the org chart who doesn't log
72
+ // in). Empty string is the "cleared" form — graph.create seeds optional
73
+ // string fields to "" on new entities, and unlink writes "" as well, so
74
+ // the regex must accept it explicitly.
75
+ user_handle: z.string()
76
+ // Empty (cleared) OR a kebab-case handle: leading alnum, alnum/hyphen
77
+ // body, alnum tail, no doubled hyphens. Mirrors what auth's
78
+ // slugifyHandle + allocateHandle can actually emit — accepting
79
+ // `foo-` or `foo--bar` here would let a hand-edit drift outside what
80
+ // findUserByHandle can match.
81
+ .regex(/^(|[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9]))*)$/, 'user_handle must match the auth handle format (lowercase, single hyphens between alnums, alnum endpoints)')
82
+ .optional()
83
+ .describe('Auth handle of the user this person represents'),
50
84
  });
51
85
  /**
52
- * Organization — clients, vendors, partners, prospects, industry bodies
53
- * Replaces the former separate client and vendor types.
86
+ * Organization — clients, vendors, partners, prospects, professional
87
+ * associations.
54
88
  */
55
89
  export const OrganizationSchema = EntityBaseSchema.extend({
56
90
  entity_type: z.literal('organization'),
57
91
  name: z.string().min(1, 'Organization name is required'),
58
- category: z.enum(['client', 'vendor', 'partner', 'prospect', 'industry-body', 'other'])
92
+ category: z.enum(['client', 'vendor', 'partner', 'prospect', 'professional-association', 'other'])
59
93
  .optional()
60
94
  .describe('Relationship category'),
61
- status: z.enum(['active', 'inactive', 'prospect', 'former'])
95
+ status: z.enum(['active', 'dormant', 'former'])
62
96
  .default('active')
63
- .describe('Organization status'),
97
+ .describe('Organization status (`dormant` covers clients you have not worked with in a while but might again)'),
64
98
  industry: z.string().optional().describe('Industry sector'),
65
99
  website: z.string().url().optional().describe('Website URL'),
66
- location: z.string().optional().describe('Primary location'),
67
- size: z.enum(['small', 'medium', 'large', 'enterprise'])
68
- .optional()
69
- .describe('Organization size'),
70
- contacts: z.array(z.string()).optional().describe('Contact person wikilinks'),
71
- projects: z.array(z.string()).optional().describe('Related project wikilinks'),
72
- relationship_start: z.string().optional().describe('When the relationship started'),
73
100
  });
74
101
  /**
75
- * Rolerole definitions from the firm's leveling framework
102
+ * Positiona position spec or open job. Renamed from `role` to avoid
103
+ * collision with `person.role` (the free-text title field). Reframes from
104
+ * "the person's seat" to "the spec for a position."
76
105
  */
77
- export const RoleSchema = EntityBaseSchema.extend({
78
- entity_type: z.literal('role'),
79
- name: z.string().min(1, 'Role name is required'),
106
+ export const PositionSchema = EntityBaseSchema.extend({
107
+ entity_type: z.literal('position'),
108
+ name: z.string().min(1, 'Position name is required'),
80
109
  department: z.string().optional().describe('Department'),
81
- level: z.number().optional().describe('Level 1–5 from leveling framework'),
82
110
  category: z.enum(['staff', 'contractor', 'intern'])
83
111
  .optional()
84
112
  .describe('Employment category'),
85
- status: z.enum(['active', 'archived'])
86
- .default('active')
87
- .describe('Role status'),
88
- location: z.string().optional().describe('Location'),
89
- reports_to: z.string().optional().describe('Parent role or person wikilink'),
113
+ status: z.enum(['draft', 'open', 'filled', 'closed'])
114
+ .default('open')
115
+ .describe('Position lifecycle'),
90
116
  });
91
117
  /**
92
- * Practice Area firm capabilities and disciplines
118
+ * Dealpre-project opportunity in the sales pipeline.
93
119
  */
94
- export const PracticeAreaSchema = EntityBaseSchema.extend({
95
- entity_type: z.literal('practice-area'),
96
- name: z.string().min(1, 'Practice area name is required'),
97
- description: z.string().optional().describe('Overview of the discipline'),
98
- capabilities: z.array(z.string()).optional().describe('Specific service offerings'),
99
- related_case_studies: z.array(z.string()).optional().describe('Case study wikilinks'),
100
- related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
120
+ export const DealSchema = EntityBaseSchema.extend({
121
+ entity_type: z.literal('deal'),
122
+ name: z.string().min(1, 'Deal name is required'),
123
+ client: z.string().optional().describe('Client organization wikilink'),
124
+ contact: z.string().optional().describe('Primary contact person wikilink'),
125
+ stage: z.enum(['qualification', 'scoping', 'proposal', 'negotiation', 'pending-signature', 'won', 'lost'])
126
+ .default('qualification')
127
+ .describe('Pipeline stage'),
128
+ deal_value: z.number().optional().describe('Estimated deal value'),
129
+ start_date: dateField('start', 'Start date', 'When work on the deal began (enables Timeline rendering of duration)'),
130
+ date: dateField('primary', 'Close date', 'Expected close date'),
101
131
  });
102
132
  // ══════════════════════════════════════════════════════════════════════════════
103
- // UNIVERSAL ENTITIES available in any repo
133
+ // PMproject, event, task, deliverable
104
134
  // ══════════════════════════════════════════════════════════════════════════════
105
135
  /**
106
- * Project — a client engagement or internal initiative
136
+ * Project — a client engagement or internal initiative.
137
+ *
138
+ * `services` is a wikilink array to `service` entities the project includes
139
+ * (replaces the previous `practice_area` concept).
107
140
  */
108
141
  export const ProjectSchema = EntityBaseSchema.extend({
109
142
  entity_type: z.literal('project'),
110
143
  name: z.string().min(1, 'Project name is required'),
111
- category: z.string().optional().describe('Project category (e.g., client-project, internal-initiative, event, research)'),
144
+ category: z.enum(['client', 'internal'])
145
+ .optional()
146
+ .describe('Project category'),
147
+ project_type: z.string().optional().describe('Kind of project (e.g., website, research, event, rebrand, prototype)'),
112
148
  client: z.string().optional().describe('Client organization wikilink'),
113
- website_url: z.string().url().optional().describe('Project website URL'),
114
- start_date: z.string().optional().describe('Project start date'),
115
- end_date: z.string().optional().describe('Project end date'),
116
- status: z.enum(['planning', 'scoping', 'active', 'on-hold', 'completed', 'archived'])
149
+ services: z.array(z.string()).optional()
150
+ .describe('Service entities this project includes (wikilinks)'),
151
+ status: z.enum(['planning', 'in-progress', 'paused', 'complete', 'archived'])
117
152
  .optional()
118
153
  .describe('Current project status'),
119
- related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
120
- related_areas: z.array(z.string()).optional().describe('Practice area wikilinks'),
121
- team: z.array(z.string()).optional().describe('Team member wikilinks'),
122
- deliverables: z.array(z.string()).optional().describe('Deliverable wikilinks'),
123
- deal: z.string().optional().describe('Originating deal wikilink'),
154
+ start_date: dateField('start', 'Start date', 'Project start date'),
155
+ date: dateField('primary', 'End date', 'Project end date'),
124
156
  });
125
157
  /**
126
- * Meeting — any scheduled gathering
158
+ * Event — any scheduled gathering (meeting, call, workshop, review, etc.).
159
+ * `type` discriminates the kind of gathering for grouping/filtering. The
160
+ * default `meeting` preserves semantics for legacy meeting captures.
161
+ *
162
+ * Note: `deadline` is intentionally NOT a `type` value — deadlines are
163
+ * `task` entries with a `date` (the due date). Events are things you attend.
127
164
  */
128
- export const MeetingSchema = EntityBaseSchema.extend({
129
- entity_type: z.literal('meeting'),
130
- name: z.string().min(1, 'Meeting name/subject is required'),
131
- category: z.string().optional().describe('Meeting category (e.g., internal, client, workshop, conference, industry-event)'),
165
+ export const EVENT_TYPES = [
166
+ 'meeting', 'call', 'review', 'workshop', 'presentation', 'conference', 'other',
167
+ ];
168
+ export const EventSchema = EntityBaseSchema.extend({
169
+ entity_type: z.literal('event'),
170
+ name: z.string().min(1, 'Event name/subject is required'),
171
+ type: z.enum(EVENT_TYPES).default('meeting').describe('Kind of event'),
132
172
  attendees: z.array(z.string()).optional().describe('Attendee wikilinks'),
133
- related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
134
- related_organizations: z.array(z.string()).optional().describe('Related organization wikilinks'),
135
173
  location: z.string().optional().describe('Location or meeting link'),
136
- duration: z.string().optional().describe('Duration (e.g., 30m, 1h)'),
137
- });
138
- /**
139
- * Decision — structured decision records (ADR-style)
140
- */
141
- export const DecisionSchema = EntityBaseSchema.extend({
142
- entity_type: z.literal('decision'),
143
- name: z.string().min(1, 'Decision name is required'),
144
- status: z.enum(['proposed', 'accepted', 'rejected', 'deprecated', 'superseded'])
145
- .default('proposed')
146
- .describe('Current status'),
147
- decision_makers: z.array(z.string()).optional().describe('People who made the decision'),
148
- stakeholders: z.array(z.string()).optional().describe('People affected'),
149
- context: z.string().optional().describe('Background and why this decision was needed'),
150
- alternatives: z.string().optional().describe('Alternatives considered (markdown)'),
151
- decision: z.string().optional().describe('The actual decision made'),
152
- rationale: z.string().optional().describe('Why this decision was chosen'),
153
- consequences: z.string().optional().describe('Outcomes and risks'),
154
- supersedes: z.string().optional().describe('Decision this one replaces (wikilink)'),
155
- superseded_by: z.string().optional().describe('Decision that replaces this one (wikilink)'),
174
+ start_date: dateField('start', 'Start date', 'When a multi-day event begins (omit for single-day events)'),
175
+ date: dateField('primary', 'Date', 'When the event takes place'),
156
176
  });
157
177
  /**
158
- * Task — lightweight action items and to-dos
178
+ * Task — lightweight action items and to-dos.
179
+ *
180
+ * `phase` is intentionally free-text (not a separate entity type or workspace
181
+ * config list). Phases vary widely across project types; the Timeline view
182
+ * auto-discovers distinct values per-project for grouping.
159
183
  */
160
184
  export const TaskSchema = EntityBaseSchema.extend({
161
185
  entity_type: z.literal('task'),
162
186
  name: z.string().min(1, 'Task name is required'),
163
- status: z.enum(['open', 'in-progress', 'done', 'cancelled'])
164
- .default('open')
187
+ status: z.enum(['backlog', 'todo', 'in-progress', 'in-review', 'done', 'cancelled'])
188
+ .default('backlog')
165
189
  .describe('Task status'),
166
190
  priority: z.enum(['low', 'medium', 'high', 'urgent'])
167
191
  .optional()
168
192
  .describe('Priority level'),
169
- assignee: z.string().optional().describe('Person assigned (wikilink)'),
170
- due_date: z.string().optional().describe('Due date'),
171
- description: z.string().optional().describe('Detailed description'),
193
+ assignee: z.string().optional().describe('Who the task is assigned to: a workspace account as `[[user:<id>|@handle]]` (preferred — this is what powers "My Tasks"), or a person-entity wikilink `[[person-id]]` for someone without an account')
194
+ // `refType` rides on the field via `.meta()` (same mechanism as the date
195
+ // vocabulary's `dateRole`/`label`). It marks `assignee` as a reference
196
+ // that must point at a `person` entity — surfaced through
197
+ // `describeZodObject` → `/api/schema` + `get_entity_schema` so pickers
198
+ // scope generically, and consumed by the write-path validator in
199
+ // entity-mutations.ts that actually rejects non-person targets. Zod
200
+ // itself can't resolve wikilinks, so this is a hint, not enforcement.
201
+ .meta({ refType: 'person' }),
202
+ phase: z.string().optional().describe('Project phase (free-text — Discover, Design, Prototype, Build, etc.)'),
203
+ start_date: dateField('start', 'Start date', 'Task start date (enables Timeline / Gantt rendering of duration)'),
204
+ date: dateField('primary', 'Due date', 'When the task is due'),
205
+ // Auto-stamped by graph.update when status transitions to/from `done` (see
206
+ // composeUpdatedFrontmatter). Lets surfaces show "completed today" without
207
+ // conflating it with the due date. ISO datetime; cleared when reopened.
208
+ completed_at: z.string().datetime('Invalid datetime format').optional()
209
+ .describe('When the task was marked done (ISO datetime, auto-managed)')
210
+ .meta({ label: 'Completed at' }),
211
+ });
212
+ /**
213
+ * Deliverable — a scoped output promised to a client.
214
+ */
215
+ export const DeliverableSchema = EntityBaseSchema.extend({
216
+ entity_type: z.literal('deliverable'),
217
+ name: z.string().min(1, 'Deliverable name is required'),
218
+ project: z.string().optional().describe('Parent project wikilink'),
219
+ status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
220
+ .default('planned')
221
+ .describe('Delivery status'),
222
+ phase: z.string().optional().describe('Project phase (free-text — same semantics as task.phase)'),
223
+ start_date: dateField('start', 'Start date', 'Deliverable start date (enables Timeline rendering of duration)'),
224
+ date: dateField('primary', 'Due date', 'When the deliverable is due'),
172
225
  });
226
+ // ══════════════════════════════════════════════════════════════════════════════
227
+ // KM — authored (document, deck, publication, case-study, service, skill)
228
+ // ══════════════════════════════════════════════════════════════════════════════
173
229
  /**
174
- * Documentany authored document
175
- * Absorbs the former separate proposal, contract, brief, financial-plan, and template types.
230
+ * Shared description for the `asset_ref` field now `dataset`-ONLY.
231
+ *
232
+ * Body-embed model (2026-06-01): an import seeds the asset reference INTO THE
233
+ * BODY (an `![](url)` image embed for materials, a `[name](url)` source
234
+ * link for documents) — exactly as a user would. So material/document no longer
235
+ * carry `asset_ref`; the reference is in the markdown, not the frontmatter.
236
+ *
237
+ * `dataset` is the lone exception: a dataset body must stay valid CSV, so it
238
+ * can't hold a body link. `asset_ref` records the STORAGE UUID of the source
239
+ * xlsx (the `assets.db` `asset_id` / immutable-key id, never a URL, never an
240
+ * entity id) as INVISIBLE provenance — survives the entity moving repos and an
241
+ * asset-backend swap. It is one-to-one provenance, NOT an embed graph (the
242
+ * many-to-many image-embed mechanism is still markdown `![](url)` in a body).
243
+ *
244
+ * `.meta({ internal: true })` keeps it out of the field-metadata API, the
245
+ * property panel, and the agent's `get_entity_schema` (same treatment as
246
+ * `source_file`) — it is set by the import path, never hand-edited.
247
+ */
248
+ const ASSET_REF_DESC = 'Storage UUID of the source xlsx this dataset was imported from';
249
+ /**
250
+ * Document — any authored document. The `guideline` category absorbs the
251
+ * former standalone `guideline` entity type.
176
252
  */
177
253
  export const DocumentSchema = EntityBaseSchema.extend({
178
254
  entity_type: z.literal('document'),
179
255
  name: z.string().min(1, 'Document name is required'),
180
- category: z.string().optional().describe('Document category (e.g., proposal, contract, brief, memo, financial-plan, template, report)'),
181
- client: z.string().optional().describe('Client organization wikilink'),
182
- project: z.string().optional().describe('Related project wikilink'),
183
- version: z.string().optional().describe('Version (e.g., v1, v2)'),
184
- status: z.enum(['draft', 'sent', 'accepted', 'rejected', 'negotiating', 'signed', 'completed', 'terminated'])
256
+ category: z.enum(['proposal', 'contract', 'brief', 'memo', 'report', 'template', 'guideline', 'other'])
257
+ .optional()
258
+ .describe('Document category'),
259
+ status: z.enum(['draft', 'review', 'final', 'archived'])
185
260
  .default('draft')
186
261
  .describe('Document status'),
187
- description: z.string().optional().describe('Description or summary'),
262
+ // No asset_ref: under the body-embed model an imported document seeds the
263
+ // extracted text + a `[name](url)` source link directly into its body, so the
264
+ // source-file reference lives in the markdown, not the frontmatter.
188
265
  });
189
266
  /**
190
- * Datasetstructured tabular data with typed columns and CSV body
267
+ * Decka slide deck or presentation. Stays its own type alongside
268
+ * `document` because of the dedicated slides renderer + agent skills that
269
+ * pattern-match on `entity_type === 'deck'`.
191
270
  */
192
- export const ColumnDefinitionSchema = z.object({
193
- name: z.string().min(1),
194
- type: z.enum(['string', 'number', 'boolean', 'date']),
195
- required: z.boolean().optional(),
196
- description: z.string().optional(),
271
+ export const DeckSchema = EntityBaseSchema.extend({
272
+ entity_type: z.literal('deck'),
273
+ name: z.string().min(1, 'Deck name is required'),
274
+ audience: z.enum(['client', 'team', 'board', 'external', 'other'])
275
+ .optional()
276
+ .describe('Intended audience'),
277
+ status: z.enum(['draft', 'review', 'final', 'archived'])
278
+ .default('draft')
279
+ .describe('Deck status'),
197
280
  });
198
- export const DatasetSchema = EntityBaseSchema.extend({
199
- entity_type: z.literal('dataset'),
200
- name: z.string().min(1, 'Dataset name is required'),
201
- schema: z.array(ColumnDefinitionSchema).min(1, 'At least one column required'),
281
+ /**
282
+ * Publication — authored content published externally.
283
+ */
284
+ export const PublicationSchema = EntityBaseSchema.extend({
285
+ entity_type: z.literal('publication'),
286
+ name: z.string().min(1, 'Publication name is required'),
287
+ platform: z.string().optional().describe('Where published (e.g., linkedin, medium, behance, conference)'),
288
+ status: z.enum(['draft', 'review', 'scheduled', 'published'])
289
+ .default('draft')
290
+ .describe('Publication status'),
291
+ url: z.string().optional().describe('URL of published content'),
202
292
  });
203
293
  /**
204
- * Referenceexternal resources and inspiration
205
- * Absorbs the former separate technique type.
294
+ * Case Study portfolio narratives for completed projects.
206
295
  */
207
- export const ReferenceSchema = EntityBaseSchema.extend({
208
- entity_type: z.literal('reference'),
209
- name: z.string().min(1, 'Reference name is required'),
210
- category: z.string().optional().describe('Reference category (e.g., article, video, tool, technique, framework, website)'),
211
- source: z.string().optional().describe('Source/author'),
212
- link: z.string().optional().describe('URL'),
213
- related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
214
- related_areas: z.array(z.string()).optional().describe('Related practice areas'),
215
- description: z.string().optional().describe('Description'),
296
+ export const CaseStudySchema = EntityBaseSchema.extend({
297
+ entity_type: z.literal('case-study'),
298
+ name: z.string().min(1, 'Case study name is required'),
299
+ client: z.string().optional().describe('Client organization wikilink'),
300
+ services: z.array(z.string()).optional()
301
+ .describe('Service entities this case study highlights (wikilinks)'),
302
+ date_range: z.string().optional().describe('Project timeframe (e.g., 2025-09 / 2026-01)'),
303
+ status: z.enum(['draft', 'review', 'final', 'published'])
304
+ .default('draft')
305
+ .describe('Case study status'),
216
306
  });
217
307
  /**
218
- * Notefreeform thinking, research, scratch, daily notes
219
- * Lightweight entity with minimal schema. Participates in the graph like any other entity.
308
+ * Servicethe firm's offerings + methodologies. Replaces the old
309
+ * `process` type and absorbs `practice-area` (top-level services replace
310
+ * what practice-area was trying to be).
311
+ *
312
+ * `sprint` links a granular service to its parent service (top-level
313
+ * services have none). `depends_on` / `enables` form a directed graph
314
+ * across the service set — the Graph view's most valuable use case.
315
+ */
316
+ export const ServiceSchema = EntityBaseSchema.extend({
317
+ entity_type: z.literal('service'),
318
+ name: z.string().min(1, 'Service name is required'),
319
+ service_id: z.string().optional()
320
+ .describe('Optional human-readable id (e.g. "1.4") for studios that number their services'),
321
+ sprint: z.string().optional()
322
+ .describe('Parent service wikilink for hierarchy (top-level services / sprints have none)'),
323
+ depends_on: z.array(z.string()).optional()
324
+ .describe('Services that must precede this one (wikilinks)'),
325
+ enables: z.array(z.string()).optional()
326
+ .describe('Services that this one unlocks (wikilinks)'),
327
+ deliverables: z.array(z.string()).optional()
328
+ .describe('Named outputs this service produces'),
329
+ status: z.enum(['offered', 'in-development', 'retired'])
330
+ .default('offered')
331
+ .describe('Service lifecycle'),
332
+ });
333
+ /**
334
+ * Skill — prompt-level instructions the agent can load to teach it how to
335
+ * do a specific job. The entity id is the skill name used by `load_skill`.
336
+ * The body markdown is the instruction content.
337
+ *
338
+ * `applies_to` lets the agent load deck-skills when working on a deck,
339
+ * proposal-skills when on a `document.category=proposal`, etc. Empty /
340
+ * unset = generally applicable.
341
+ *
342
+ * The previous `loading: eager | on-demand` field is gone for graph-authored
343
+ * skills. Filesystem skills (shipped with the product in `src/agent/skills/`)
344
+ * keep their own loading mechanism via skill-loader.ts and orchestrator.ts.
345
+ *
346
+ * `name` and `description` are optional at creation so the sidebar new-entry
347
+ * flow works — the user fills them in afterward via the property panel.
348
+ */
349
+ export const SkillSchema = EntityBaseSchema.extend({
350
+ entity_type: z.literal('skill'),
351
+ name: z.string().optional().describe('Human-readable title (falls back to entity id)'),
352
+ description: z.string().optional().describe('Shown in the skill index so the agent knows when to load it'),
353
+ applies_to: z.array(z.string()).optional()
354
+ .describe('Entity types this skill applies to (e.g. ["deck"]). Empty = generally applicable.'),
355
+ });
356
+ // ══════════════════════════════════════════════════════════════════════════════
357
+ // CAPTURE — note, reference
358
+ // ══════════════════════════════════════════════════════════════════════════════
359
+ /**
360
+ * Note — freeform thinking, research, daily notes.
361
+ *
362
+ * Decisions migrated from the cut `decision` type land here as plain
363
+ * notes; operators may manually convert specific entries to `task` if they
364
+ * read better as work items.
220
365
  */
221
366
  export const NoteSchema = EntityBaseSchema.extend({
222
367
  entity_type: z.literal('note'),
223
368
  name: z.string().min(1, 'Note name is required'),
224
- category: z.string().optional().describe('Note category (e.g., research, scratch, daily, brainstorm, draft)'),
369
+ // Entry-primary provenance (A2): when this note was derived from an
370
+ // uploaded asset (e.g. a converted .docx/.pdf), `source_file` holds the
371
+ // SOURCE ASSET'S ENTITY ID — never a URL — so the link survives an asset
372
+ // backend swap and joins the graph (the relationship is also surfaced as a
373
+ // wikilink in the body). Absent for notes created directly.
374
+ //
375
+ // `.meta({ internal: true })` marks it system-managed: the field-metadata
376
+ // API (describeZodObject) omits it, so it never appears in the property
377
+ // panel or the agent's get_entity_schema, and the create/changeType field
378
+ // seeders skip it (so a directly-created note has NO source_file rather
379
+ // than `''`). Set only by the import/convert path.
380
+ source_file: z.string().optional().describe('Entity id of the source asset this note was derived from').meta({ internal: true }),
225
381
  });
226
382
  /**
227
- * Deliverablea scoped contractual output promised to a client
228
- * Bridges the commercial side (proposal, contract) to execution (artifacts, tasks).
383
+ * Referenceexternal resources and inspiration.
229
384
  */
230
- export const DeliverableSchema = EntityBaseSchema.extend({
231
- entity_type: z.literal('deliverable'),
232
- name: z.string().min(1, 'Deliverable name is required'),
233
- project: z.string().optional().describe('Related project wikilink'),
234
- status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
235
- .default('planned')
236
- .describe('Delivery status'),
237
- due_date: z.string().optional().describe('Due date'),
238
- delivered_date: z.string().optional().describe('Actual delivery date'),
239
- description: z.string().optional().describe('What this deliverable comprises'),
385
+ export const ReferenceSchema = EntityBaseSchema.extend({
386
+ entity_type: z.literal('reference'),
387
+ name: z.string().min(1, 'Reference name is required'),
388
+ source: z.string().optional().describe('Source or author'),
389
+ link: z.string().optional().describe('URL'),
240
390
  });
241
391
  /**
242
- * Publicationauthored content published externally
392
+ * Dataseta CSV the workspace owns, edited in a grid.
393
+ *
394
+ * Conventional CSV: the markdown body IS the data, and the header row IS the
395
+ * column list — there's no separate typed column schema. The grid editor
396
+ * (web CsvEditor) and the agent's `query_dataset` / `append_rows` tools read
397
+ * the body through CSVService (src/services/csv-service.ts), deriving columns
398
+ * from the header. Distinct from an uploaded `asset` with
399
+ * `asset_kind: 'spreadsheet'`, which is an opaque binary — a dataset is
400
+ * in-graph, queryable, and row-appendable.
243
401
  */
244
- export const PublicationSchema = EntityBaseSchema.extend({
245
- entity_type: z.literal('publication'),
246
- name: z.string().min(1, 'Publication name is required'),
247
- category: z.string().optional().describe('Publication category (e.g., article, social-post, talk, podcast, award-submission)'),
248
- platform: z.string().optional().describe('Platform (e.g., linkedin, medium, behance, conference)'),
249
- status: z.enum(['draft', 'review', 'scheduled', 'published'])
250
- .default('draft')
251
- .describe('Publication status'),
252
- published_date: z.string().optional().describe('Date published'),
253
- url: z.string().optional().describe('URL of published content'),
254
- related_projects: z.array(z.string()).optional().describe('Related project wikilinks'),
255
- related_areas: z.array(z.string()).optional().describe('Related practice area wikilinks'),
402
+ export const DatasetSchema = EntityBaseSchema.extend({
403
+ entity_type: z.literal('dataset'),
404
+ name: z.string().min(1, 'Dataset name is required'),
405
+ // Entry-primary provenance (A2): set when this dataset was derived from an
406
+ // uploaded asset (e.g. one sheet of a converted .xlsx). Holds the SOURCE
407
+ // ASSET'S ENTITY ID, never a URL. See NoteSchema.source_file (incl. the
408
+ // `.meta({ internal: true })` rationale — same system-managed treatment).
409
+ source_file: z.string().optional().describe('Entity id of the source asset this dataset was derived from').meta({ internal: true }),
410
+ // When derived from one sheet of a converted .xlsx, the original worksheet
411
+ // name — the stable key that lets a re-convert (replace) match this dataset
412
+ // back to its sheet and update it IN PLACE, preserving the id + inbound
413
+ // links even if the first conversion's id was collision-suffixed. Internal
414
+ // (system-managed); never user-edited.
415
+ source_sheet: z.string().optional().describe('Original worksheet name this dataset was derived from').meta({ internal: true }),
416
+ // Asset-as-embed provenance: the storage UUID of the source asset (e.g. the
417
+ // .xlsx this sheet was imported from). Frontmatter only — the dataset body
418
+ // stays pure CSV, so the asset link is NEVER a body embed. See ASSET_REF_DESC.
419
+ asset_ref: z.string().optional().describe(ASSET_REF_DESC).meta({ internal: true }),
256
420
  });
257
421
  /**
258
- * Dealpre-project opportunity in the sales pipeline
422
+ * Materiala first-class graph entry that wraps a free-standing binary
423
+ * asset (image or opaque file: photo, logo, psd/ai/sketch/fig, video, audio,
424
+ * archive) when no better type fits. The asset-as-embed catch-all: import
425
+ * routes docx/pdf → `document`, xlsx → `dataset`, and everything else (image +
426
+ * opaque) → `material`.
427
+ *
428
+ * Distinct from `asset` (the stored bytes + `assets.db` row) and from
429
+ * `reference` (a pointer to an EXTERNAL source the workspace doesn't own).
430
+ * Under the body-embed model a material's body IS the asset: import seeds an
431
+ * inline `![name](url)` image embed (images) or a `[name](url)` download link
432
+ * (opaque binaries). No `asset_ref` frontmatter — the reference lives in the
433
+ * markdown. A hand-created material (New Entry / agent) is a notes/catalog
434
+ * entry whose body the user writes themselves.
259
435
  */
260
- export const DealSchema = EntityBaseSchema.extend({
261
- entity_type: z.literal('deal'),
262
- name: z.string().min(1, 'Deal name is required'),
263
- client: z.string().optional().describe('Client organization wikilink'),
264
- contacts: z.array(z.string()).optional().describe('Contact person wikilinks'),
265
- stage: z.enum(['scoping', 'proposal', 'negotiating', 'won', 'lost'])
266
- .default('scoping')
267
- .describe('Pipeline stage'),
268
- deal_value: z.number().optional().describe('Estimated deal value'),
269
- probability: z.number().min(0).max(100).optional().describe('Win probability 0–100'),
270
- expected_close: z.string().optional().describe('Expected close date'),
271
- source: z.enum(['referral', 'inbound', 'outbound', 'repeat', 'partner', 'other'])
436
+ export const MaterialSchema = EntityBaseSchema.extend({
437
+ entity_type: z.literal('material'),
438
+ name: z.string().min(1, 'Material name is required'),
439
+ // Purpose-oriented grouping axis (NOT a re-encoding of the asset's kind,
440
+ // which lives in assets.db). Optional. Values are intentionally minimal —
441
+ // enums are cheap to extend, expensive to remove.
442
+ category: z.enum(['design', 'brand', 'media', 'archive', 'other'])
272
443
  .optional()
273
- .describe('How the opportunity originated'),
274
- proposals: z.array(z.string()).optional().describe('Related proposal document wikilinks'),
275
- project: z.string().optional().describe('Resulting project wikilink (once won)'),
276
- lost_reason: z.string().optional().describe('Why the deal was lost'),
444
+ .describe('Purpose grouping (design source, brand asset, media, archive, other)'),
277
445
  });
278
446
  // ══════════════════════════════════════════════════════════════════════════════
279
- // KNOWLEDGE ENTITIES typically in resource repos
447
+ // SYSTEMasset
280
448
  // ══════════════════════════════════════════════════════════════════════════════
281
449
  /**
282
- * Processworkflows, SOPs, and methodologies
283
- */
284
- export const ProcessSchema = EntityBaseSchema.extend({
285
- entity_type: z.literal('process'),
286
- name: z.string().min(1, 'Process name is required'),
287
- description: z.string().optional().describe('Process description'),
288
- steps: z.string().optional().describe('Process steps (markdown)'),
289
- related_areas: z.array(z.string()).optional().describe('Related practice areas'),
290
- owner: z.string().optional().describe('Person or team responsible (wikilink)'),
291
- review_cycle: z.enum(['monthly', 'quarterly', 'annual', 'as-needed']).optional().describe('Review frequency'),
292
- });
293
- /**
294
- * Standard — guidelines and best practices
450
+ * Asseta hosted binary the workspace owns. The frontmatter is the
451
+ * entity; the body is optional user notes. The binary itself lives in
452
+ * the asset backend (R2 or local volume) at `asset/{entity_id}/{file}`.
453
+ *
454
+ * Distinct from `reference`, which points at an external URL the
455
+ * workspace doesn't own. Per-kind UI (icon, viewer, thumbnail) is
456
+ * driven by `asset_kind`; see `detectAssetKind` in
457
+ * src/services/assets/base.ts.
458
+ *
459
+ * Asset is graph-visible (search, history, wikilinks) but hidden from the
460
+ * New Entry picker — it's created via the upload/drag-drop flow.
295
461
  */
296
- export const StandardSchema = EntityBaseSchema.extend({
297
- entity_type: z.literal('standard'),
298
- name: z.string().min(1, 'Standard name is required'),
299
- category: z.string().optional().describe('Category (e.g., accessibility, design-principles, code-standards)'),
300
- description: z.string().optional().describe('Standard description'),
301
- guidelines: z.string().optional().describe('Guidelines (markdown)'),
302
- examples: z.array(z.string()).optional().describe('Example wikilinks'),
462
+ export const ASSET_KINDS = [
463
+ 'image', 'video', 'audio', 'pdf', 'spreadsheet', 'other',
464
+ ];
465
+ export const AssetSchema = EntityBaseSchema.extend({
466
+ entity_type: z.literal('asset'),
467
+ name: z.string().min(1, 'Asset name is required'),
468
+ asset_url: z.string().min(1, 'asset_url is required').describe('Public URL or /api/assets/... path'),
469
+ asset_kind: z.enum(ASSET_KINDS).describe('High-level kind that drives icon and viewer'),
470
+ asset_extension: z.string().min(1).describe('Original file extension including the dot, e.g. ".csv"'),
471
+ asset_size: z.number().int().nonnegative().describe('Size in bytes'),
472
+ asset_mime: z.string().optional().describe('Detected MIME type'),
473
+ pages: z.number().int().positive().optional().describe('Page count (PDF only)'),
474
+ width: z.number().int().positive().optional().describe('Pixel width (image/video)'),
475
+ height: z.number().int().positive().optional().describe('Pixel height (image/video)'),
476
+ duration: z.number().nonnegative().optional().describe('Length in seconds (audio/video)'),
477
+ checksum: z.string().optional().describe('Content hash, e.g. sha256:...'),
478
+ // Index-state split (A1): `indexable` is the IMMUTABLE half — set once at
479
+ // import from the format registry (`indexAs !== 'none'`) and committed to
480
+ // frontmatter. The MUTABLE run state (index_status / indexed_at /
481
+ // index_version) lives in LanceDB ONLY and is deliberately NOT a schema
482
+ // field — stamping it here would fire an async git commit per asset and
483
+ // defeat the batched-commit path.
484
+ //
485
+ // Migration: legacy assets predate this field, so `indexable === undefined`
486
+ // means "unknown / treat as already-indexed" — the badge falls back to a
487
+ // live status lookup and the P3 boot sweep must NOT mass re-derive them off
488
+ // a missing `indexable` (it keys re-derivation on indexed_at/index_version).
489
+ //
490
+ // `.meta({ internal: true })` keeps this immutable flag out of the
491
+ // field-metadata API, the property panel, and the agent's get_entity_schema
492
+ // so neither a user nor the agent can hand-edit it (see NoteSchema.source_file).
493
+ indexable: z.boolean().optional().describe('Whether this asset is set up for content indexing (immutable; set at import)').meta({ internal: true }),
303
494
  });
495
+ // ══════════════════════════════════════════════════════════════════════════════
496
+ // SYSTEM — comment (virtual entity, SQLite-backed)
497
+ // ══════════════════════════════════════════════════════════════════════════════
304
498
  /**
305
- * Case Study portfolio narratives for completed projects
499
+ * Commenta threaded comment anchored to another entry. Unlike every other
500
+ * entity type, comments are NOT stored as markdown files; they live in
501
+ * `comments.db` (see `src/services/comment-service.ts`) for throughput.
502
+ * Agents see them as first-class typed entities through the virtual-entity
503
+ * adapter (`src/mcp/comment-virtual-entity.ts`), which is why the schema
504
+ * lives here alongside the file-backed types.
505
+ *
506
+ * The shape documents what fields the MCP envelope exposes; runtime
507
+ * validation happens inside CommentService itself.
306
508
  */
307
- export const CaseStudySchema = EntityBaseSchema.extend({
308
- entity_type: z.literal('case-study'),
309
- name: z.string().min(1, 'Case study name is required'),
310
- client: z.string().optional().describe('Client organization wikilink'),
311
- year: z.number().optional().describe('Year of the project'),
312
- practice_areas: z.array(z.string()).optional().describe('Practice area wikilinks'),
313
- sectors: z.array(z.string()).optional().describe('Industry tags'),
314
- website_url: z.string().url().optional().describe('Project website URL'),
315
- description: z.string().optional().describe('Short description'),
509
+ export const CommentSchema = EntityBaseSchema.extend({
510
+ entity_type: z.literal('comment'),
511
+ repo: z.string().describe('Folder the anchored entry lives in'),
512
+ entry_type: z.string().describe('Entity type of the anchored entry'),
513
+ entry_id: z.string().describe('Entity id of the anchored entry'),
514
+ thread_id: z.string().describe('Head comment id; replies share the same thread_id'),
515
+ parent_id: z.string().nullable().optional().describe('Parent comment id for replies, null on the head'),
516
+ author_user_id: z.number().int().describe('users.id of the author'),
517
+ author_role: z.enum(['user', 'agent']).describe('Whether the author was a human or the agent'),
518
+ anchor_quote: z.string().nullable().optional()
519
+ .describe('Original highlighted text at creation time, ≤256 chars (used for orphan rendering)'),
520
+ resolved_at: z.string().nullable().optional(),
521
+ resolved_by_user_id: z.number().int().nullable().optional(),
522
+ edited: z.boolean().optional(),
523
+ mentions: z.array(z.string()).optional().describe('Handles of mentioned users'),
316
524
  });
317
525
  // ══════════════════════════════════════════════════════════════════════════════
318
- // ══════════════════════════════════════════════════════════════════════════════
319
526
  // SCHEMA REGISTRY
320
527
  // ══════════════════════════════════════════════════════════════════════════════
321
528
  /**
322
- * Maps entity types to their Zod schemas.
323
- * 17 built-in types. App plugins register additional types at runtime via SchemaRegistry.
529
+ * Maps entity types to their Zod schemas. 17 canonical built-in types
530
+ * (16 user-facing + 1 system). Workspaces can register additional custom
531
+ * types via SchemaRegistry (schema_extensions).
324
532
  */
325
533
  export const ENTITY_SCHEMAS = {
326
- // Identity (4)
534
+ // CRM (4)
327
535
  person: PersonSchema,
328
536
  organization: OrganizationSchema,
329
- role: RoleSchema,
330
- 'practice-area': PracticeAreaSchema,
331
- // Universal (10)
537
+ position: PositionSchema,
538
+ deal: DealSchema,
539
+ // PM (4)
332
540
  project: ProjectSchema,
333
- meeting: MeetingSchema,
334
- decision: DecisionSchema,
541
+ event: EventSchema,
335
542
  task: TaskSchema,
336
- document: DocumentSchema,
337
- dataset: DatasetSchema,
338
- reference: ReferenceSchema,
339
- note: NoteSchema,
340
543
  deliverable: DeliverableSchema,
544
+ // KM — authored (6)
545
+ document: DocumentSchema,
546
+ deck: DeckSchema,
341
547
  publication: PublicationSchema,
342
- deal: DealSchema,
343
- // Knowledge (3)
344
- process: ProcessSchema,
345
- standard: StandardSchema,
346
548
  'case-study': CaseStudySchema,
549
+ service: ServiceSchema,
550
+ skill: SkillSchema,
551
+ // Capture (4)
552
+ note: NoteSchema,
553
+ reference: ReferenceSchema,
554
+ dataset: DatasetSchema,
555
+ material: MaterialSchema,
556
+ // System (2)
557
+ asset: AssetSchema,
558
+ comment: CommentSchema,
347
559
  };
348
560
  /**
349
561
  * Plural subfolder name → singular entity_type mapping
@@ -351,27 +563,48 @@ export const ENTITY_SCHEMAS = {
351
563
  export const PLURAL_TO_SINGULAR = {
352
564
  'people': 'person',
353
565
  'organizations': 'organization',
354
- 'roles': 'role',
355
- 'practice-areas': 'practice-area',
566
+ 'positions': 'position',
567
+ 'deals': 'deal',
356
568
  'projects': 'project',
357
- 'meetings': 'meeting',
358
- 'decisions': 'decision',
569
+ 'events': 'event',
359
570
  'tasks': 'task',
360
- 'documents': 'document',
361
- 'datasets': 'dataset',
362
- 'references': 'reference',
363
- 'notes': 'note',
364
571
  'deliverables': 'deliverable',
572
+ 'documents': 'document',
573
+ 'decks': 'deck',
365
574
  'publications': 'publication',
366
- 'deals': 'deal',
367
- 'processes': 'process',
368
- 'standards': 'standard',
369
575
  'case-studies': 'case-study',
576
+ 'services': 'service',
577
+ 'skills': 'skill',
578
+ 'notes': 'note',
579
+ 'references': 'reference',
580
+ 'datasets': 'dataset',
581
+ 'materials': 'material',
582
+ 'assets': 'asset',
583
+ 'comments': 'comment',
370
584
  };
371
585
  /**
372
586
  * Singular entity_type → plural subfolder name mapping
373
587
  */
374
588
  export const SINGULAR_TO_PLURAL = Object.fromEntries(Object.entries(PLURAL_TO_SINGULAR).map(([plural, singular]) => [singular, plural]));
589
+ /**
590
+ * Cross-field task rule: a task's start date must not fall after its due date.
591
+ *
592
+ * This lives OUTSIDE the Zod schema on purpose. Expressing it as a
593
+ * `TaskSchema.refine(...)` would turn the ZodObject into a ZodEffects, which
594
+ * breaks shape introspection in schema-registry (`describeZodObject` and the
595
+ * schema_extensions `.extend()` path both rely on `instanceof z.ZodObject`) —
596
+ * and that powers the metadata field panel. So both validation entry points
597
+ * (this module's `validateEntity` and `graph.ts`'s private one) call this
598
+ * helper after a successful parse instead.
599
+ *
600
+ * `dateField` stores ISO 'YYYY-MM-DD' strings, so a lexicographic comparison
601
+ * is a correct date comparison.
602
+ */
603
+ export function assertValidTaskDates(data) {
604
+ if (data.start_date && data.date && data.start_date > data.date) {
605
+ throw new Error(`Validation failed for task:\n - start_date: Start date (${data.start_date}) must be on or before the due date (${data.date})`);
606
+ }
607
+ }
375
608
  /**
376
609
  * Validation helper with helpful error messages
377
610
  */
@@ -381,11 +614,14 @@ export function validateEntity(entityType, data) {
381
614
  throw new Error(`Unknown entity type: ${entityType}`);
382
615
  }
383
616
  try {
384
- return schema.parse(data);
617
+ const parsed = schema.parse(data);
618
+ if (entityType === 'task')
619
+ assertValidTaskDates(parsed);
620
+ return parsed;
385
621
  }
386
622
  catch (error) {
387
623
  if (error instanceof z.ZodError) {
388
- const messages = error.errors.map(e => {
624
+ const messages = error.issues.map(e => {
389
625
  const path = e.path.join('.');
390
626
  return ` - ${path}: ${e.message}`;
391
627
  });
@@ -403,7 +639,7 @@ export function validateCustomEntity(data) {
403
639
  }
404
640
  catch (error) {
405
641
  if (error instanceof z.ZodError) {
406
- const messages = error.errors.map(e => {
642
+ const messages = error.issues.map(e => {
407
643
  const path = e.path.join('.');
408
644
  return ` - ${path}: ${e.message}`;
409
645
  });