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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1157) hide show
  1. package/README.md +26 -16
  2. package/dist/agent/agent-pool.d.ts +117 -0
  3. package/dist/agent/agent-pool.js +287 -0
  4. package/dist/agent/agent-pool.js.map +1 -0
  5. package/dist/agent/followups.d.ts +34 -0
  6. package/dist/agent/followups.js +52 -0
  7. package/dist/agent/followups.js.map +1 -0
  8. package/dist/agent/orchestrator.d.ts +113 -22
  9. package/dist/agent/orchestrator.js +574 -181
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +34 -0
  12. package/dist/agent/prompts/entity-types-section.js +76 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +147 -69
  15. package/dist/agent/skill-loader.d.ts +30 -17
  16. package/dist/agent/skill-loader.js +63 -30
  17. package/dist/agent/skill-loader.js.map +1 -1
  18. package/dist/agent/skills/entity-schema.md +77 -433
  19. package/dist/agent/skills/interview/entity-templates.md +193 -0
  20. package/dist/agent/skills/interview/question-domains.md +391 -0
  21. package/dist/agent/skills/interview/skill.md +204 -0
  22. package/dist/agent/skills/schema-rules.md +54 -0
  23. package/dist/agent/tools/capture-tools.d.ts +31 -0
  24. package/dist/agent/tools/capture-tools.js +40 -0
  25. package/dist/agent/tools/capture-tools.js.map +1 -0
  26. package/dist/agent/tools/folder-tools.d.ts +47 -0
  27. package/dist/agent/tools/folder-tools.js +249 -0
  28. package/dist/agent/tools/folder-tools.js.map +1 -0
  29. package/dist/agent/tools/fs-tools.d.ts +7 -6
  30. package/dist/agent/tools/fs-tools.js +5 -4
  31. package/dist/agent/tools/fs-tools.js.map +1 -1
  32. package/dist/agent/tools/graph-tools.d.ts +21 -58
  33. package/dist/agent/tools/graph-tools.js +664 -333
  34. package/dist/agent/tools/graph-tools.js.map +1 -1
  35. package/dist/agent/tools/history-tools.d.ts +95 -0
  36. package/dist/agent/tools/history-tools.js +461 -0
  37. package/dist/agent/tools/history-tools.js.map +1 -0
  38. package/dist/agent/tools/load-skill.d.ts +6 -5
  39. package/dist/agent/tools/load-skill.js +3 -3
  40. package/dist/agent/tools/load-skill.js.map +1 -1
  41. package/dist/agent/tools/ops-tools.d.ts +5 -4
  42. package/dist/agent/tools/ops-tools.js +130 -236
  43. package/dist/agent/tools/ops-tools.js.map +1 -1
  44. package/dist/agent/tools/permission-tools.d.ts +87 -17
  45. package/dist/agent/tools/permission-tools.js +233 -38
  46. package/dist/agent/tools/permission-tools.js.map +1 -1
  47. package/dist/agent/tools/tool-loader.js +5 -4
  48. package/dist/agent/tools/tool-loader.js.map +1 -1
  49. package/dist/agent/tools/web-tools.js +58 -9
  50. package/dist/agent/tools/web-tools.js.map +1 -1
  51. package/dist/cli/commands/about.d.ts +1 -0
  52. package/dist/cli/commands/about.js +55 -3
  53. package/dist/cli/commands/about.js.map +1 -1
  54. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  55. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  56. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  57. package/dist/cli/commands/admin/audit.d.ts +21 -0
  58. package/dist/cli/commands/admin/audit.js +174 -0
  59. package/dist/cli/commands/admin/audit.js.map +1 -0
  60. package/dist/cli/commands/admin/backup.d.ts +54 -0
  61. package/dist/cli/commands/admin/backup.js +207 -0
  62. package/dist/cli/commands/admin/backup.js.map +1 -0
  63. package/dist/cli/commands/admin/folder.d.ts +11 -0
  64. package/dist/cli/commands/admin/folder.js +186 -0
  65. package/dist/cli/commands/admin/folder.js.map +1 -0
  66. package/dist/cli/commands/admin/index.d.ts +16 -0
  67. package/dist/cli/commands/admin/index.js +46 -0
  68. package/dist/cli/commands/admin/index.js.map +1 -0
  69. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  70. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  71. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  72. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  73. package/dist/cli/commands/admin/migrate.js +263 -0
  74. package/dist/cli/commands/admin/migrate.js.map +1 -0
  75. package/dist/cli/commands/admin/restore.d.ts +24 -0
  76. package/dist/cli/commands/admin/restore.js +228 -0
  77. package/dist/cli/commands/admin/restore.js.map +1 -0
  78. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  79. package/dist/cli/commands/admin/secrets.js +256 -0
  80. package/dist/cli/commands/admin/secrets.js.map +1 -0
  81. package/dist/cli/commands/admin/settings.d.ts +28 -0
  82. package/dist/cli/commands/admin/settings.js +284 -0
  83. package/dist/cli/commands/admin/settings.js.map +1 -0
  84. package/dist/cli/commands/admin/token.d.ts +42 -0
  85. package/dist/cli/commands/admin/token.js +126 -0
  86. package/dist/cli/commands/admin/token.js.map +1 -0
  87. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  88. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  89. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  90. package/dist/cli/commands/admin/user.d.ts +11 -0
  91. package/dist/cli/commands/admin/user.js +187 -0
  92. package/dist/cli/commands/admin/user.js.map +1 -0
  93. package/dist/cli/commands/clone.d.ts +25 -3
  94. package/dist/cli/commands/clone.js +142 -36
  95. package/dist/cli/commands/clone.js.map +1 -1
  96. package/dist/cli/commands/commit.d.ts +1 -1
  97. package/dist/cli/commands/commit.js +24 -11
  98. package/dist/cli/commands/commit.js.map +1 -1
  99. package/dist/cli/commands/config.d.ts +23 -107
  100. package/dist/cli/commands/config.js +52 -260
  101. package/dist/cli/commands/config.js.map +1 -1
  102. package/dist/cli/commands/connector.d.ts +10 -13
  103. package/dist/cli/commands/connector.js +16 -58
  104. package/dist/cli/commands/connector.js.map +1 -1
  105. package/dist/cli/commands/deploy.js +215 -68
  106. package/dist/cli/commands/deploy.js.map +1 -1
  107. package/dist/cli/commands/index.js +2 -2
  108. package/dist/cli/commands/index.js.map +1 -1
  109. package/dist/cli/commands/init.js +10 -30
  110. package/dist/cli/commands/init.js.map +1 -1
  111. package/dist/cli/commands/mcp.js +12 -4
  112. package/dist/cli/commands/mcp.js.map +1 -1
  113. package/dist/cli/commands/orphans.js +14 -30
  114. package/dist/cli/commands/orphans.js.map +1 -1
  115. package/dist/cli/commands/r2.d.ts +3 -0
  116. package/dist/cli/commands/r2.js +223 -204
  117. package/dist/cli/commands/r2.js.map +1 -1
  118. package/dist/cli/commands/redeploy.js +65 -12
  119. package/dist/cli/commands/redeploy.js.map +1 -1
  120. package/dist/cli/commands/reset.d.ts +22 -6
  121. package/dist/cli/commands/reset.js +142 -63
  122. package/dist/cli/commands/reset.js.map +1 -1
  123. package/dist/cli/commands/serve.js +218 -24
  124. package/dist/cli/commands/serve.js.map +1 -1
  125. package/dist/cli/commands/sync.d.ts +1 -1
  126. package/dist/cli/commands/sync.js +372 -202
  127. package/dist/cli/commands/sync.js.map +1 -1
  128. package/dist/cli/crypto-bundle.d.ts +39 -0
  129. package/dist/cli/crypto-bundle.js +94 -0
  130. package/dist/cli/crypto-bundle.js.map +1 -0
  131. package/dist/cli/index.js +24 -35
  132. package/dist/cli/index.js.map +1 -1
  133. package/dist/cli/railway-pin.d.ts +68 -0
  134. package/dist/cli/railway-pin.js +96 -0
  135. package/dist/cli/railway-pin.js.map +1 -0
  136. package/dist/cli/railway-provisioning.d.ts +53 -0
  137. package/dist/cli/railway-provisioning.js +85 -0
  138. package/dist/cli/railway-provisioning.js.map +1 -0
  139. package/dist/cli/setup-wizard.d.ts +33 -52
  140. package/dist/cli/setup-wizard.js +43 -68
  141. package/dist/cli/setup-wizard.js.map +1 -1
  142. package/dist/core/accent-palette.d.ts +22 -0
  143. package/dist/core/accent-palette.js +47 -0
  144. package/dist/core/accent-palette.js.map +1 -0
  145. package/dist/core/cell-anchor.d.ts +29 -0
  146. package/dist/core/cell-anchor.js +53 -0
  147. package/dist/core/cell-anchor.js.map +1 -0
  148. package/dist/core/comment-anchor.d.ts +41 -0
  149. package/dist/core/comment-anchor.js +147 -0
  150. package/dist/core/comment-anchor.js.map +1 -0
  151. package/dist/core/commit-messages.d.ts +57 -0
  152. package/dist/core/commit-messages.js +85 -0
  153. package/dist/core/commit-messages.js.map +1 -0
  154. package/dist/core/embeds.d.ts +77 -0
  155. package/dist/core/embeds.js +147 -0
  156. package/dist/core/embeds.js.map +1 -0
  157. package/dist/core/entity-body-templates.d.ts +21 -0
  158. package/dist/core/entity-body-templates.js +53 -0
  159. package/dist/core/entity-body-templates.js.map +1 -0
  160. package/dist/core/entity-types-catalog.d.ts +65 -0
  161. package/dist/core/entity-types-catalog.js +140 -0
  162. package/dist/core/entity-types-catalog.js.map +1 -0
  163. package/dist/core/folder-paths.d.ts +41 -0
  164. package/dist/core/folder-paths.js +95 -0
  165. package/dist/core/folder-paths.js.map +1 -0
  166. package/dist/core/folder-sidecar.d.ts +36 -0
  167. package/dist/core/folder-sidecar.js +91 -0
  168. package/dist/core/folder-sidecar.js.map +1 -0
  169. package/dist/core/format-registry.d.ts +170 -0
  170. package/dist/core/format-registry.js +404 -0
  171. package/dist/core/format-registry.js.map +1 -0
  172. package/dist/core/graph.d.ts +731 -14
  173. package/dist/core/graph.js +2202 -315
  174. package/dist/core/graph.js.map +1 -1
  175. package/dist/core/history-diff.d.ts +35 -0
  176. package/dist/core/history-diff.js +114 -0
  177. package/dist/core/history-diff.js.map +1 -0
  178. package/dist/core/refs.d.ts +41 -0
  179. package/dist/core/refs.js +80 -0
  180. package/dist/core/refs.js.map +1 -0
  181. package/dist/core/schema-registry.d.ts +82 -0
  182. package/dist/core/schema-registry.js +238 -0
  183. package/dist/core/schema-registry.js.map +1 -1
  184. package/dist/core/schemas/connector.d.ts +67 -0
  185. package/dist/core/schemas/connector.js +100 -0
  186. package/dist/core/schemas/connector.js.map +1 -0
  187. package/dist/core/schemas/workspace.d.ts +122 -0
  188. package/dist/core/schemas/workspace.js +211 -0
  189. package/dist/core/schemas/workspace.js.map +1 -0
  190. package/dist/core/secrets/SecretStore.d.ts +77 -0
  191. package/dist/core/secrets/SecretStore.js +13 -0
  192. package/dist/core/secrets/SecretStore.js.map +1 -0
  193. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  194. package/dist/core/secrets/SettingsResolver.js +80 -0
  195. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  196. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  197. package/dist/core/secrets/SettingsStore.js +9 -0
  198. package/dist/core/secrets/SettingsStore.js.map +1 -0
  199. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  200. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  201. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  202. package/dist/core/secrets/audit.d.ts +36 -0
  203. package/dist/core/secrets/audit.js +60 -0
  204. package/dist/core/secrets/audit.js.map +1 -0
  205. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  206. package/dist/core/secrets/auth-db-migration.js +653 -0
  207. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  208. package/dist/core/secrets/bundle.d.ts +141 -0
  209. package/dist/core/secrets/bundle.js +435 -0
  210. package/dist/core/secrets/bundle.js.map +1 -0
  211. package/dist/core/secrets/dual-write.d.ts +81 -0
  212. package/dist/core/secrets/dual-write.js +247 -0
  213. package/dist/core/secrets/dual-write.js.map +1 -0
  214. package/dist/core/secrets/encryption.d.ts +44 -0
  215. package/dist/core/secrets/encryption.js +97 -0
  216. package/dist/core/secrets/encryption.js.map +1 -0
  217. package/dist/core/secrets/index.d.ts +49 -0
  218. package/dist/core/secrets/index.js +74 -0
  219. package/dist/core/secrets/index.js.map +1 -0
  220. package/dist/core/secrets/master-key.d.ts +38 -0
  221. package/dist/core/secrets/master-key.js +122 -0
  222. package/dist/core/secrets/master-key.js.map +1 -0
  223. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  224. package/dist/core/secrets/probes/anthropic.js +300 -0
  225. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  226. package/dist/core/secrets/probes/brave.d.ts +9 -0
  227. package/dist/core/secrets/probes/brave.js +15 -0
  228. package/dist/core/secrets/probes/brave.js.map +1 -0
  229. package/dist/core/secrets/probes/r2.d.ts +15 -0
  230. package/dist/core/secrets/probes/r2.js +14 -0
  231. package/dist/core/secrets/probes/r2.js.map +1 -0
  232. package/dist/core/secrets/probes/tavily.d.ts +18 -0
  233. package/dist/core/secrets/probes/tavily.js +58 -0
  234. package/dist/core/secrets/probes/tavily.js.map +1 -0
  235. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  236. package/dist/core/secrets/probes/voyage.js +52 -0
  237. package/dist/core/secrets/probes/voyage.js.map +1 -0
  238. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  239. package/dist/core/secrets/r2-structural-migration.js +109 -0
  240. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  241. package/dist/core/secrets/read-flip.d.ts +59 -0
  242. package/dist/core/secrets/read-flip.js +87 -0
  243. package/dist/core/secrets/read-flip.js.map +1 -0
  244. package/dist/core/secrets/registry.d.ts +188 -0
  245. package/dist/core/secrets/registry.js +616 -0
  246. package/dist/core/secrets/registry.js.map +1 -0
  247. package/dist/core/types.d.ts +80 -475
  248. package/dist/core/types.js +27 -3
  249. package/dist/core/types.js.map +1 -1
  250. package/dist/core/user-config.d.ts +75 -7
  251. package/dist/core/user-config.js +155 -7
  252. package/dist/core/user-config.js.map +1 -1
  253. package/dist/core/validation.d.ts +731 -1790
  254. package/dist/core/validation.js +442 -228
  255. package/dist/core/validation.js.map +1 -1
  256. package/dist/core/workspace-manager.d.ts +89 -12
  257. package/dist/core/workspace-manager.js +225 -73
  258. package/dist/core/workspace-manager.js.map +1 -1
  259. package/dist/core/workspace.d.ts +19 -5
  260. package/dist/core/workspace.js +69 -35
  261. package/dist/core/workspace.js.map +1 -1
  262. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  263. package/dist/mcp/comment-virtual-entity.js +71 -0
  264. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  265. package/dist/mcp/connector-manager.d.ts +94 -13
  266. package/dist/mcp/connector-manager.js +283 -62
  267. package/dist/mcp/connector-manager.js.map +1 -1
  268. package/dist/mcp/oauth-provider.d.ts +27 -33
  269. package/dist/mcp/oauth-provider.js +65 -134
  270. package/dist/mcp/oauth-provider.js.map +1 -1
  271. package/dist/mcp/oauth-registry.d.ts +62 -0
  272. package/dist/mcp/oauth-registry.js +85 -0
  273. package/dist/mcp/oauth-registry.js.map +1 -0
  274. package/dist/mcp/server.d.ts +11 -3
  275. package/dist/mcp/server.js +30 -5
  276. package/dist/mcp/server.js.map +1 -1
  277. package/dist/mcp/state-signer.d.ts +62 -0
  278. package/dist/mcp/state-signer.js +205 -0
  279. package/dist/mcp/state-signer.js.map +1 -0
  280. package/dist/mcp/tools.d.ts +35 -2
  281. package/dist/mcp/tools.js +1361 -112
  282. package/dist/mcp/tools.js.map +1 -1
  283. package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
  284. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  285. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  286. package/dist/server/asset-index-queue.d.ts +96 -0
  287. package/dist/server/asset-index-queue.js +191 -0
  288. package/dist/server/asset-index-queue.js.map +1 -0
  289. package/dist/server/body-write-coordinator.d.ts +151 -0
  290. package/dist/server/body-write-coordinator.js +161 -0
  291. package/dist/server/body-write-coordinator.js.map +1 -0
  292. package/dist/server/cloud-billing-flow.d.ts +32 -0
  293. package/dist/server/cloud-billing-flow.js +75 -0
  294. package/dist/server/cloud-billing-flow.js.map +1 -0
  295. package/dist/server/commit-audit.d.ts +26 -0
  296. package/dist/server/commit-audit.js +30 -0
  297. package/dist/server/commit-audit.js.map +1 -0
  298. package/dist/server/index.d.ts +22 -3
  299. package/dist/server/index.js +622 -198
  300. package/dist/server/index.js.map +1 -1
  301. package/dist/server/middleware/sanitize.d.ts +46 -0
  302. package/dist/server/middleware/sanitize.js +171 -0
  303. package/dist/server/middleware/sanitize.js.map +1 -0
  304. package/dist/server/routes/asset-api.d.ts +31 -0
  305. package/dist/server/routes/asset-api.js +593 -0
  306. package/dist/server/routes/asset-api.js.map +1 -0
  307. package/dist/server/routes/audit-api.d.ts +24 -0
  308. package/dist/server/routes/audit-api.js +117 -0
  309. package/dist/server/routes/audit-api.js.map +1 -0
  310. package/dist/server/routes/auth-api.d.ts +3 -2
  311. package/dist/server/routes/auth-api.js +573 -39
  312. package/dist/server/routes/auth-api.js.map +1 -1
  313. package/dist/server/routes/capture-api.d.ts +18 -0
  314. package/dist/server/routes/capture-api.js +257 -0
  315. package/dist/server/routes/capture-api.js.map +1 -0
  316. package/dist/server/routes/chat-sessions-api.d.ts +9 -0
  317. package/dist/server/routes/chat-sessions-api.js +121 -0
  318. package/dist/server/routes/chat-sessions-api.js.map +1 -0
  319. package/dist/server/routes/chat.d.ts +12 -1
  320. package/dist/server/routes/chat.js +318 -88
  321. package/dist/server/routes/chat.js.map +1 -1
  322. package/dist/server/routes/comments-api.d.ts +15 -0
  323. package/dist/server/routes/comments-api.js +444 -0
  324. package/dist/server/routes/comments-api.js.map +1 -0
  325. package/dist/server/routes/config-api.d.ts +21 -0
  326. package/dist/server/routes/config-api.js +256 -0
  327. package/dist/server/routes/config-api.js.map +1 -0
  328. package/dist/server/routes/connectors-api.d.ts +17 -0
  329. package/dist/server/routes/connectors-api.js +410 -0
  330. package/dist/server/routes/connectors-api.js.map +1 -0
  331. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  332. package/dist/server/routes/event-ingest-api.js +125 -0
  333. package/dist/server/routes/event-ingest-api.js.map +1 -0
  334. package/dist/server/routes/git-http.d.ts +3 -3
  335. package/dist/server/routes/git-http.js +86 -38
  336. package/dist/server/routes/git-http.js.map +1 -1
  337. package/dist/server/routes/graph-api-access.d.ts +57 -0
  338. package/dist/server/routes/graph-api-access.js +112 -0
  339. package/dist/server/routes/graph-api-access.js.map +1 -0
  340. package/dist/server/routes/graph-api.d.ts +1 -1
  341. package/dist/server/routes/graph-api.js +1529 -263
  342. package/dist/server/routes/graph-api.js.map +1 -1
  343. package/dist/server/routes/health.d.ts +18 -0
  344. package/dist/server/routes/health.js +74 -0
  345. package/dist/server/routes/health.js.map +1 -0
  346. package/dist/server/routes/import-batch.d.ts +24 -0
  347. package/dist/server/routes/import-batch.js +33 -0
  348. package/dist/server/routes/import-batch.js.map +1 -0
  349. package/dist/server/routes/insights-api.d.ts +9 -2
  350. package/dist/server/routes/insights-api.js +384 -38
  351. package/dist/server/routes/insights-api.js.map +1 -1
  352. package/dist/server/routes/mcp.d.ts +7 -3
  353. package/dist/server/routes/mcp.js +22 -6
  354. package/dist/server/routes/mcp.js.map +1 -1
  355. package/dist/server/routes/oauth-api.d.ts +67 -0
  356. package/dist/server/routes/oauth-api.js +421 -0
  357. package/dist/server/routes/oauth-api.js.map +1 -0
  358. package/dist/server/routes/permissions-api.d.ts +9 -2
  359. package/dist/server/routes/permissions-api.js +87 -30
  360. package/dist/server/routes/permissions-api.js.map +1 -1
  361. package/dist/server/routes/r2-api.d.ts +25 -0
  362. package/dist/server/routes/r2-api.js +276 -0
  363. package/dist/server/routes/r2-api.js.map +1 -0
  364. package/dist/server/routes/secrets-api.d.ts +36 -0
  365. package/dist/server/routes/secrets-api.js +308 -0
  366. package/dist/server/routes/secrets-api.js.map +1 -0
  367. package/dist/server/routes/settings-api.d.ts +29 -0
  368. package/dist/server/routes/settings-api.js +180 -0
  369. package/dist/server/routes/settings-api.js.map +1 -0
  370. package/dist/server/routes/share-api.d.ts +32 -0
  371. package/dist/server/routes/share-api.js +234 -0
  372. package/dist/server/routes/share-api.js.map +1 -0
  373. package/dist/server/routes/url-api.d.ts +7 -0
  374. package/dist/server/routes/url-api.js +74 -0
  375. package/dist/server/routes/url-api.js.map +1 -0
  376. package/dist/server/routes/views-api.js +75 -7
  377. package/dist/server/routes/views-api.js.map +1 -1
  378. package/dist/server/routes/workspace-api.d.ts +2 -1
  379. package/dist/server/routes/workspace-api.js +129 -35
  380. package/dist/server/routes/workspace-api.js.map +1 -1
  381. package/dist/server/routes/ws.d.ts +2 -1
  382. package/dist/server/routes/ws.js +68 -16
  383. package/dist/server/routes/ws.js.map +1 -1
  384. package/dist/server/session-manager.d.ts +48 -5
  385. package/dist/server/session-manager.js +182 -15
  386. package/dist/server/session-manager.js.map +1 -1
  387. package/dist/server/ws-hub.d.ts +138 -14
  388. package/dist/server/ws-hub.js +0 -0
  389. package/dist/server/ws-hub.js.map +1 -1
  390. package/dist/server/yjs-manager.d.ts +285 -7
  391. package/dist/server/yjs-manager.js +907 -36
  392. package/dist/server/yjs-manager.js.map +1 -1
  393. package/dist/server/yjs-persistence.d.ts +165 -0
  394. package/dist/server/yjs-persistence.js +557 -0
  395. package/dist/server/yjs-persistence.js.map +1 -0
  396. package/dist/server/yjs-text-diff.d.ts +32 -0
  397. package/dist/server/yjs-text-diff.js +61 -0
  398. package/dist/server/yjs-text-diff.js.map +1 -0
  399. package/dist/services/access-control.d.ts +73 -0
  400. package/dist/services/access-control.js +165 -0
  401. package/dist/services/access-control.js.map +1 -0
  402. package/dist/services/asset-caption-service.d.ts +102 -0
  403. package/dist/services/asset-caption-service.js +184 -0
  404. package/dist/services/asset-caption-service.js.map +1 -0
  405. package/dist/services/asset-delete-authz.d.ts +31 -0
  406. package/dist/services/asset-delete-authz.js +61 -0
  407. package/dist/services/asset-delete-authz.js.map +1 -0
  408. package/dist/services/asset-finalize-service.d.ts +58 -0
  409. package/dist/services/asset-finalize-service.js +207 -0
  410. package/dist/services/asset-finalize-service.js.map +1 -0
  411. package/dist/services/asset-import-service.d.ts +111 -0
  412. package/dist/services/asset-import-service.js +394 -0
  413. package/dist/services/asset-import-service.js.map +1 -0
  414. package/dist/services/asset-index-sweep.d.ts +92 -0
  415. package/dist/services/asset-index-sweep.js +258 -0
  416. package/dist/services/asset-index-sweep.js.map +1 -0
  417. package/dist/services/asset-lifecycle-check.d.ts +22 -0
  418. package/dist/services/asset-lifecycle-check.js +80 -0
  419. package/dist/services/asset-lifecycle-check.js.map +1 -0
  420. package/dist/services/asset-listing.d.ts +72 -0
  421. package/dist/services/asset-listing.js +321 -0
  422. package/dist/services/asset-listing.js.map +1 -0
  423. package/dist/services/asset-presign-service.d.ts +68 -0
  424. package/dist/services/asset-presign-service.js +124 -0
  425. package/dist/services/asset-presign-service.js.map +1 -0
  426. package/dist/services/asset-sidecar-service.d.ts +30 -0
  427. package/dist/services/asset-sidecar-service.js +96 -0
  428. package/dist/services/asset-sidecar-service.js.map +1 -0
  429. package/dist/services/asset-upload-errors.d.ts +41 -0
  430. package/dist/services/asset-upload-errors.js +45 -0
  431. package/dist/services/asset-upload-errors.js.map +1 -0
  432. package/dist/services/asset-upload-service.d.ts +74 -0
  433. package/dist/services/asset-upload-service.js +244 -0
  434. package/dist/services/asset-upload-service.js.map +1 -0
  435. package/dist/services/asset-upload-token.d.ts +58 -0
  436. package/dist/services/asset-upload-token.js +75 -0
  437. package/dist/services/asset-upload-token.js.map +1 -0
  438. package/dist/services/assets/asset-index-service.d.ts +127 -0
  439. package/dist/services/assets/asset-index-service.js +227 -0
  440. package/dist/services/assets/asset-index-service.js.map +1 -0
  441. package/dist/services/assets/base.d.ts +118 -1
  442. package/dist/services/assets/base.js +77 -1
  443. package/dist/services/assets/base.js.map +1 -1
  444. package/dist/services/assets/index.d.ts +103 -1
  445. package/dist/services/assets/index.js +192 -0
  446. package/dist/services/assets/index.js.map +1 -1
  447. package/dist/services/assets/local.d.ts +16 -1
  448. package/dist/services/assets/local.js +110 -1
  449. package/dist/services/assets/local.js.map +1 -1
  450. package/dist/services/assets/r2-sync.d.ts +88 -0
  451. package/dist/services/assets/r2-sync.js +412 -0
  452. package/dist/services/assets/r2-sync.js.map +1 -0
  453. package/dist/services/assets/r2.d.ts +87 -1
  454. package/dist/services/assets/r2.js +203 -1
  455. package/dist/services/assets/r2.js.map +1 -1
  456. package/dist/services/auth-service.d.ts +350 -36
  457. package/dist/services/auth-service.js +1179 -140
  458. package/dist/services/auth-service.js.map +1 -1
  459. package/dist/services/bookmark-import-service.d.ts +49 -0
  460. package/dist/services/bookmark-import-service.js +250 -0
  461. package/dist/services/bookmark-import-service.js.map +1 -0
  462. package/dist/services/chat-session-service.d.ts +96 -0
  463. package/dist/services/chat-session-service.js +316 -0
  464. package/dist/services/chat-session-service.js.map +1 -0
  465. package/dist/services/cloud-inference-billing.d.ts +64 -0
  466. package/dist/services/cloud-inference-billing.js +313 -0
  467. package/dist/services/cloud-inference-billing.js.map +1 -0
  468. package/dist/services/comment-service.d.ts +97 -0
  469. package/dist/services/comment-service.js +341 -0
  470. package/dist/services/comment-service.js.map +1 -0
  471. package/dist/services/convert-service.d.ts +64 -0
  472. package/dist/services/convert-service.js +68 -0
  473. package/dist/services/convert-service.js.map +1 -0
  474. package/dist/services/csv-service.d.ts +22 -17
  475. package/dist/services/csv-service.js +55 -92
  476. package/dist/services/csv-service.js.map +1 -1
  477. package/dist/services/entity-mutations.d.ts +210 -0
  478. package/dist/services/entity-mutations.js +377 -0
  479. package/dist/services/entity-mutations.js.map +1 -0
  480. package/dist/services/event-processor.d.ts +104 -0
  481. package/dist/services/event-processor.js +441 -0
  482. package/dist/services/event-processor.js.map +1 -0
  483. package/dist/services/extract/docx.d.ts +1 -0
  484. package/dist/services/extract/docx.js +233 -0
  485. package/dist/services/extract/docx.js.map +1 -0
  486. package/dist/services/extract/index.d.ts +9 -0
  487. package/dist/services/extract/index.js +10 -0
  488. package/dist/services/extract/index.js.map +1 -0
  489. package/dist/services/extract/pdf.d.ts +13 -0
  490. package/dist/services/extract/pdf.js +69 -0
  491. package/dist/services/extract/pdf.js.map +1 -0
  492. package/dist/services/folder-creation.d.ts +33 -0
  493. package/dist/services/folder-creation.js +103 -0
  494. package/dist/services/folder-creation.js.map +1 -0
  495. package/dist/services/git.d.ts +54 -0
  496. package/dist/services/git.js +188 -54
  497. package/dist/services/git.js.map +1 -1
  498. package/dist/services/graph-maintenance.d.ts +42 -0
  499. package/dist/services/graph-maintenance.js +143 -0
  500. package/dist/services/graph-maintenance.js.map +1 -0
  501. package/dist/services/import-service.d.ts +58 -3
  502. package/dist/services/import-service.js +316 -100
  503. package/dist/services/import-service.js.map +1 -1
  504. package/dist/services/lint-service.js +10 -17
  505. package/dist/services/lint-service.js.map +1 -1
  506. package/dist/services/markdown.d.ts +12 -1
  507. package/dist/services/markdown.js +77 -9
  508. package/dist/services/markdown.js.map +1 -1
  509. package/dist/services/memory-service.d.ts +22 -14
  510. package/dist/services/memory-service.js +53 -35
  511. package/dist/services/memory-service.js.map +1 -1
  512. package/dist/services/mention-detector.d.ts +23 -0
  513. package/dist/services/mention-detector.js +47 -0
  514. package/dist/services/mention-detector.js.map +1 -0
  515. package/dist/services/model-capabilities.d.ts +41 -0
  516. package/dist/services/model-capabilities.js +107 -0
  517. package/dist/services/model-capabilities.js.map +1 -0
  518. package/dist/services/notification-broadcast.d.ts +32 -0
  519. package/dist/services/notification-broadcast.js +38 -0
  520. package/dist/services/notification-broadcast.js.map +1 -0
  521. package/dist/services/notification-service.d.ts +41 -0
  522. package/dist/services/notification-service.js +100 -0
  523. package/dist/services/notification-service.js.map +1 -0
  524. package/dist/services/oauth-server-store.d.ts +147 -0
  525. package/dist/services/oauth-server-store.js +319 -0
  526. package/dist/services/oauth-server-store.js.map +1 -0
  527. package/dist/services/orphan-service.js +2 -2
  528. package/dist/services/orphan-service.js.map +1 -1
  529. package/dist/services/personal-folder.d.ts +40 -0
  530. package/dist/services/personal-folder.js +101 -0
  531. package/dist/services/personal-folder.js.map +1 -0
  532. package/dist/services/share-link-service.d.ts +57 -0
  533. package/dist/services/share-link-service.js +142 -0
  534. package/dist/services/share-link-service.js.map +1 -0
  535. package/dist/services/user-person-bridge.d.ts +136 -0
  536. package/dist/services/user-person-bridge.js +340 -0
  537. package/dist/services/user-person-bridge.js.map +1 -0
  538. package/dist/services/vector-service.d.ts +260 -6
  539. package/dist/services/vector-service.js +574 -31
  540. package/dist/services/vector-service.js.map +1 -1
  541. package/dist/services/workspace-access.d.ts +108 -0
  542. package/dist/services/workspace-access.js +149 -0
  543. package/dist/services/workspace-access.js.map +1 -0
  544. package/dist/services/workspace-assets-folder.d.ts +46 -0
  545. package/dist/services/workspace-assets-folder.js +75 -0
  546. package/dist/services/workspace-assets-folder.js.map +1 -0
  547. package/dist/utils/git.d.ts +17 -2
  548. package/dist/utils/git.js +23 -7
  549. package/dist/utils/git.js.map +1 -1
  550. package/dist/utils/log.d.ts +42 -0
  551. package/dist/utils/log.js +137 -0
  552. package/dist/utils/log.js.map +1 -0
  553. package/dist/utils/preflight.js +2 -2
  554. package/dist/utils/preflight.js.map +1 -1
  555. package/dist/utils/version-checker.d.ts +12 -19
  556. package/dist/utils/version-checker.js +14 -104
  557. package/dist/utils/version-checker.js.map +1 -1
  558. package/dist/web/_app/immutable/assets/0.BZHoBJEc.css +2 -0
  559. package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
  560. package/dist/web/_app/immutable/assets/13.7d-Q37wc.css +1 -0
  561. package/dist/web/_app/immutable/assets/14.BwBFdc1D.css +1 -0
  562. package/dist/web/_app/immutable/assets/15.CmLrbzZp.css +1 -0
  563. package/dist/web/_app/immutable/assets/16.B0GwXar3.css +1 -0
  564. package/dist/web/_app/immutable/assets/2.C9Vt4JHy.css +1 -0
  565. package/dist/web/_app/immutable/assets/3.BFvgCYSk.css +1 -0
  566. package/dist/web/_app/immutable/assets/4.OmdYF47-.css +1 -0
  567. package/dist/web/_app/immutable/assets/5.C6MySjPq.css +1 -0
  568. package/dist/web/_app/immutable/assets/BulkActionsBar.Bx7nxMjH.css +1 -0
  569. package/dist/web/_app/immutable/assets/CalendarView.lBCvS3X5.css +1 -0
  570. package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
  571. package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
  572. package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
  573. package/dist/web/_app/immutable/assets/FolderMutationDialogs.D2B7KrRn.css +1 -0
  574. package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
  575. package/dist/web/_app/immutable/assets/GalleryView.CF48FWYQ.css +1 -0
  576. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  577. package/dist/web/_app/immutable/assets/KanbanView.BOaI5KFL.css +1 -0
  578. package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
  579. package/dist/web/_app/immutable/assets/Markdown.BqgpZCv5.css +1 -0
  580. package/dist/web/_app/immutable/assets/Rail.f8lsriOT.css +1 -0
  581. package/dist/web/_app/immutable/assets/SettingsDialog.DwMus2u2.css +1 -0
  582. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  583. package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
  584. package/dist/web/_app/immutable/assets/TimelineView.DriOGAKB.css +1 -0
  585. package/dist/web/_app/immutable/assets/WorkspaceView.u5VdwRR6.css +1 -0
  586. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  587. package/dist/web/_app/immutable/assets/checkbox.DK0MgYgb.css +1 -0
  588. package/dist/web/_app/immutable/assets/dist.DDCWxn3B.css +1 -0
  589. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  590. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  591. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  592. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  593. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  594. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  595. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  596. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  597. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  598. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  599. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  600. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  601. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  602. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  603. package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
  604. package/dist/web/_app/immutable/assets/list-columns.DiLB0G5L.css +1 -0
  605. package/dist/web/_app/immutable/assets/select.BFL238eD.css +1 -0
  606. package/dist/web/_app/immutable/assets/sheet.4rY4hpfJ.css +1 -0
  607. package/dist/web/_app/immutable/chunks/2oYV6q4R.js +2 -0
  608. package/dist/web/_app/immutable/chunks/4XSri7g0.js +1 -0
  609. package/dist/web/_app/immutable/chunks/4iaT0dG72.js +1 -0
  610. package/dist/web/_app/immutable/chunks/5_TKU9QS2.js +1 -0
  611. package/dist/web/_app/immutable/chunks/8Yh26Z9_2.js +1 -0
  612. package/dist/web/_app/immutable/chunks/Atl8xKOm.js +2 -0
  613. package/dist/web/_app/immutable/chunks/B-Z_xZy_.js +4 -0
  614. package/dist/web/_app/immutable/chunks/B0pk0Lyx.js +1 -0
  615. package/dist/web/_app/immutable/chunks/B1RnjnNt.js +1 -0
  616. package/dist/web/_app/immutable/chunks/B2n86UNJ.js +1 -0
  617. package/dist/web/_app/immutable/chunks/B318GEUB2.js +1 -0
  618. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  619. package/dist/web/_app/immutable/chunks/B8yrQWxT2.js +1 -0
  620. package/dist/web/_app/immutable/chunks/BADt8daH.js +2 -0
  621. package/dist/web/_app/immutable/chunks/BBGt-XQo.js +3 -0
  622. package/dist/web/_app/immutable/chunks/BDIUHcEz.js +1 -0
  623. package/dist/web/_app/immutable/chunks/BDSuq3KH.js +1 -0
  624. package/dist/web/_app/immutable/chunks/BGiLU5VN.js +1 -0
  625. package/dist/web/_app/immutable/chunks/BJgOZTHR.js +1 -0
  626. package/dist/web/_app/immutable/chunks/BOSiTh-42.js +1 -0
  627. package/dist/web/_app/immutable/chunks/BPxcCdjn.js +1 -0
  628. package/dist/web/_app/immutable/chunks/BVPNAzAK.js +1 -0
  629. package/dist/web/_app/immutable/chunks/BcOvJgjM.js +1 -0
  630. package/dist/web/_app/immutable/chunks/BdYQewoD.js +1 -0
  631. package/dist/web/_app/immutable/chunks/BfCWIy8t.js +8 -0
  632. package/dist/web/_app/immutable/chunks/BgRT-K6w.js +5 -0
  633. package/dist/web/_app/immutable/chunks/BibveGGd.js +1 -0
  634. package/dist/web/_app/immutable/chunks/BmM5VZ4W.js +1 -0
  635. package/dist/web/_app/immutable/chunks/BnIYzuS1.js +66 -0
  636. package/dist/web/_app/immutable/chunks/BoDmwOTJ.js +1 -0
  637. package/dist/web/_app/immutable/chunks/BoglwbZW.js +1 -0
  638. package/dist/web/_app/immutable/chunks/Bqm_YrIg2.js +23 -0
  639. package/dist/web/_app/immutable/chunks/BtMRrdc4.js +2 -0
  640. package/dist/web/_app/immutable/chunks/C-AnzvKr.js +7 -0
  641. package/dist/web/_app/immutable/chunks/C1Y3tUpz.js +1 -0
  642. package/dist/web/_app/immutable/chunks/C6VZhhwF.js +1 -0
  643. package/dist/web/_app/immutable/chunks/C8IMrD4G2.js +3 -0
  644. package/dist/web/_app/immutable/chunks/CAXXrbj52.js +1 -0
  645. package/dist/web/_app/immutable/chunks/CB-0u-Pc2.js +1 -0
  646. package/dist/web/_app/immutable/chunks/CEniyZ1Z2.js +6 -0
  647. package/dist/web/_app/immutable/chunks/CJhElIkU2.js +1 -0
  648. package/dist/web/_app/immutable/chunks/CK8tIaYT.js +1 -0
  649. package/dist/web/_app/immutable/chunks/CM8uYli8.js +1 -0
  650. package/dist/web/_app/immutable/chunks/CTzjJm_m2.js +1 -0
  651. package/dist/web/_app/immutable/chunks/CUXqa1nn2.js +1 -0
  652. package/dist/web/_app/immutable/chunks/CY0iY_WO.js +1 -0
  653. package/dist/web/_app/immutable/chunks/CbCfNNV_2.js +2692 -0
  654. package/dist/web/_app/immutable/chunks/CbuGIyDu2.js +22 -0
  655. package/dist/web/_app/immutable/chunks/CcRGXA-t.js +1 -0
  656. package/dist/web/_app/immutable/chunks/CcXmQaYs2.js +1 -0
  657. package/dist/web/_app/immutable/chunks/CcaQuaSt2.js +1 -0
  658. package/dist/web/_app/immutable/chunks/CoHaBDpN2.js +2 -0
  659. package/dist/web/_app/immutable/chunks/Cvbd3myc2.js +14 -0
  660. package/dist/web/_app/immutable/chunks/D20C1thX2.js +1 -0
  661. package/dist/web/_app/immutable/chunks/D3JoMtWC.js +7 -0
  662. package/dist/web/_app/immutable/chunks/D3ch71s_.js +1 -0
  663. package/dist/web/_app/immutable/chunks/D4xXlMEU.js +2 -0
  664. package/dist/web/_app/immutable/chunks/D5GipQqN2.js +1 -0
  665. package/dist/web/_app/immutable/chunks/D9TyJuu_.js +1 -0
  666. package/dist/web/_app/immutable/chunks/DBFijAmG.js +1 -0
  667. package/dist/web/_app/immutable/chunks/DHLjkH7T.js +1 -0
  668. package/dist/web/_app/immutable/chunks/DIfdPIt_2.js +1 -0
  669. package/dist/web/_app/immutable/chunks/DO_sw49q2.js +1 -0
  670. package/dist/web/_app/immutable/chunks/DP69PpIj.js +1 -0
  671. package/dist/web/_app/immutable/chunks/DQ3HSZMs.js +2 -0
  672. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  673. package/dist/web/_app/immutable/chunks/DT0wzK622.js +1 -0
  674. package/dist/web/_app/immutable/chunks/DTnEJArL.js +1 -0
  675. package/dist/web/_app/immutable/chunks/DToS-G202.js +1 -0
  676. package/dist/web/_app/immutable/chunks/DZcU6mGe2.js +1 -0
  677. package/dist/web/_app/immutable/chunks/DbslMybD.js +1 -0
  678. package/dist/web/_app/immutable/chunks/DcGThsSF.js +1 -0
  679. package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
  680. package/dist/web/_app/immutable/chunks/De0g5qop2.js +1 -0
  681. package/dist/web/_app/immutable/chunks/DimS8dbZ2.js +1 -0
  682. package/dist/web/_app/immutable/chunks/DjuqhOjF.js +1 -0
  683. package/dist/web/_app/immutable/chunks/Dk6sAhpo.js +3 -0
  684. package/dist/web/_app/immutable/chunks/Dl6cnwyk.js +1 -0
  685. package/dist/web/_app/immutable/chunks/DnIQzIOz.js +1 -0
  686. package/dist/web/_app/immutable/chunks/DnXYAo60.js +1 -0
  687. package/dist/web/_app/immutable/chunks/DnrImJan.js +1 -0
  688. package/dist/web/_app/immutable/chunks/Dpuq25vu2.js +1 -0
  689. package/dist/web/_app/immutable/chunks/DrMZDWru.js +1 -0
  690. package/dist/web/_app/immutable/chunks/DsVOtl0N.js +1 -0
  691. package/dist/web/_app/immutable/chunks/DuTXsWdP.js +2 -0
  692. package/dist/web/_app/immutable/chunks/Dw-frCfE.js +1 -0
  693. package/dist/web/_app/immutable/chunks/Dz34u8Ie2.js +185 -0
  694. package/dist/web/_app/immutable/chunks/DzcFeQZU2.js +2 -0
  695. package/dist/web/_app/immutable/chunks/DzrRTvug.js +1 -0
  696. package/dist/web/_app/immutable/chunks/G5oUVQa92.js +1 -0
  697. package/dist/web/_app/immutable/chunks/HyhOhoeq2.js +2 -0
  698. package/dist/web/_app/immutable/chunks/J5nb9xxj.js +1 -0
  699. package/dist/web/_app/immutable/chunks/JCjEwqH9.js +1 -0
  700. package/dist/web/_app/immutable/chunks/JN_nsXUm2.js +1 -0
  701. package/dist/web/_app/immutable/chunks/JS2_GaB1.js +1 -0
  702. package/dist/web/_app/immutable/chunks/MtI6dyxu.js +1 -0
  703. package/dist/web/_app/immutable/chunks/N6vnY5Si2.js +1 -0
  704. package/dist/web/_app/immutable/chunks/PcEbaKam.js +2 -0
  705. package/dist/web/_app/immutable/chunks/VTYhCLh9.js +2 -0
  706. package/dist/web/_app/immutable/chunks/Wowi_89k.js +5 -0
  707. package/dist/web/_app/immutable/chunks/Y_asqJqs2.js +83 -0
  708. package/dist/web/_app/immutable/chunks/Yhg5Q4MT.js +1 -0
  709. package/dist/web/_app/immutable/chunks/f_eYccPf2.js +1 -0
  710. package/dist/web/_app/immutable/chunks/hm_8RsuL.js +1 -0
  711. package/dist/web/_app/immutable/chunks/iPCkjliu.js +3 -0
  712. package/dist/web/_app/immutable/chunks/j2AvgZGz.js +1 -0
  713. package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
  714. package/dist/web/_app/immutable/chunks/l1761xxj.js +1 -0
  715. package/dist/web/_app/immutable/chunks/liGRFQqV2.js +184 -0
  716. package/dist/web/_app/immutable/chunks/lq1kR86d.js +1 -0
  717. package/dist/web/_app/immutable/chunks/mIykYR4F2.js +1 -0
  718. package/dist/web/_app/immutable/chunks/rbhlO_t8.js +1 -0
  719. package/dist/web/_app/immutable/chunks/tJpAwaTl.js +1 -0
  720. package/dist/web/_app/immutable/chunks/tcegdii0.js +2 -0
  721. package/dist/web/_app/immutable/chunks/u8G2EUvz2.js +224 -0
  722. package/dist/web/_app/immutable/chunks/vgsM0KTm2.js +1 -0
  723. package/dist/web/_app/immutable/chunks/xcGI4fuV.js +1 -0
  724. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  725. package/dist/web/_app/immutable/chunks/yEYlhV9G2.js +1 -0
  726. package/dist/web/_app/immutable/entry/app.DSf_XGp8.js +2 -0
  727. package/dist/web/_app/immutable/entry/start.B7ScfxPc.js +1 -0
  728. package/dist/web/_app/immutable/nodes/0.BMSOOETY.js +2 -0
  729. package/dist/web/_app/immutable/nodes/1.B0lBUpHt.js +1 -0
  730. package/dist/web/_app/immutable/nodes/10.DmDbUH1j.js +1 -0
  731. package/dist/web/_app/immutable/nodes/11.gwY7gZdR.js +1 -0
  732. package/dist/web/_app/immutable/nodes/12.BpGHSr2y.js +1 -0
  733. package/dist/web/_app/immutable/nodes/13.Bf178QF_.js +1 -0
  734. package/dist/web/_app/immutable/nodes/14.D_x8-nk9.js +1 -0
  735. package/dist/web/_app/immutable/nodes/15.DY4XeagL.js +1 -0
  736. package/dist/web/_app/immutable/nodes/16.DPqftx8x.js +77 -0
  737. package/dist/web/_app/immutable/nodes/2.OM2LGRpi.js +109 -0
  738. package/dist/web/_app/immutable/nodes/3.e8ZoPCmC.js +6 -0
  739. package/dist/web/_app/immutable/nodes/4.BdYR1hNQ.js +11 -0
  740. package/dist/web/_app/immutable/nodes/5.B8sOFna9.js +5 -0
  741. package/dist/web/_app/immutable/nodes/6.L1BbYsmo.js +1 -0
  742. package/dist/web/_app/immutable/nodes/7.B7zoemJD.js +1 -0
  743. package/dist/web/_app/immutable/nodes/8.B1VtnfMK.js +1 -0
  744. package/dist/web/_app/immutable/nodes/9.BE3VCQzk.js +1 -0
  745. package/dist/web/_app/version.json +1 -1
  746. package/dist/web/favicon-16.png +0 -0
  747. package/dist/web/favicon-180.png +0 -0
  748. package/dist/web/favicon-32.png +0 -0
  749. package/dist/web/favicon-48.png +0 -0
  750. package/dist/web/favicon-512.png +0 -0
  751. package/dist/web/favicon.ico +0 -0
  752. package/dist/web/favicon.svg +8 -0
  753. package/dist/web/index.html +58 -19
  754. package/dist/web/studiograph-logomark.svg +29 -0
  755. package/package.json +38 -14
  756. package/dist/agent/skills/enrich-entities.md +0 -136
  757. package/dist/agent/skills/obsidian-source-setup.md +0 -246
  758. package/dist/agent/skills/skill-loader.d.ts +0 -48
  759. package/dist/agent/skills/skill-loader.js +0 -166
  760. package/dist/agent/skills/skill-loader.js.map +0 -1
  761. package/dist/agent/skills/sync-configuration.md +0 -119
  762. package/dist/agent/skills/sync-setup.md +0 -82
  763. package/dist/agent/tools/sync-tools.d.ts +0 -35
  764. package/dist/agent/tools/sync-tools.js +0 -992
  765. package/dist/agent/tools/sync-tools.js.map +0 -1
  766. package/dist/auth/github.d.ts +0 -56
  767. package/dist/auth/github.js +0 -169
  768. package/dist/auth/github.js.map +0 -1
  769. package/dist/cli/commands/access.d.ts +0 -11
  770. package/dist/cli/commands/access.js +0 -156
  771. package/dist/cli/commands/access.js.map +0 -1
  772. package/dist/cli/commands/app.d.ts +0 -7
  773. package/dist/cli/commands/app.js +0 -268
  774. package/dist/cli/commands/app.js.map +0 -1
  775. package/dist/cli/commands/auth.d.ts +0 -10
  776. package/dist/cli/commands/auth.js +0 -79
  777. package/dist/cli/commands/auth.js.map +0 -1
  778. package/dist/cli/commands/clear.d.ts +0 -5
  779. package/dist/cli/commands/clear.js +0 -36
  780. package/dist/cli/commands/clear.js.map +0 -1
  781. package/dist/cli/commands/collection.d.ts +0 -10
  782. package/dist/cli/commands/collection.js +0 -187
  783. package/dist/cli/commands/collection.js.map +0 -1
  784. package/dist/cli/commands/enrich.d.ts +0 -11
  785. package/dist/cli/commands/enrich.js +0 -135
  786. package/dist/cli/commands/enrich.js.map +0 -1
  787. package/dist/cli/commands/graphrag.d.ts +0 -12
  788. package/dist/cli/commands/graphrag.js +0 -122
  789. package/dist/cli/commands/graphrag.js.map +0 -1
  790. package/dist/cli/commands/join.d.ts +0 -9
  791. package/dist/cli/commands/join.js +0 -255
  792. package/dist/cli/commands/join.js.map +0 -1
  793. package/dist/cli/commands/members.d.ts +0 -11
  794. package/dist/cli/commands/members.js +0 -230
  795. package/dist/cli/commands/members.js.map +0 -1
  796. package/dist/cli/commands/org.d.ts +0 -10
  797. package/dist/cli/commands/org.js +0 -132
  798. package/dist/cli/commands/org.js.map +0 -1
  799. package/dist/cli/commands/provision.d.ts +0 -8
  800. package/dist/cli/commands/provision.js +0 -116
  801. package/dist/cli/commands/provision.js.map +0 -1
  802. package/dist/cli/commands/resolve.d.ts +0 -8
  803. package/dist/cli/commands/resolve.js +0 -85
  804. package/dist/cli/commands/resolve.js.map +0 -1
  805. package/dist/cli/commands/review.d.ts +0 -19
  806. package/dist/cli/commands/review.js +0 -128
  807. package/dist/cli/commands/review.js.map +0 -1
  808. package/dist/cli/commands/source.d.ts +0 -16
  809. package/dist/cli/commands/source.js +0 -159
  810. package/dist/cli/commands/source.js.map +0 -1
  811. package/dist/cli/commands/start.d.ts +0 -7
  812. package/dist/cli/commands/start.js +0 -589
  813. package/dist/cli/commands/start.js.map +0 -1
  814. package/dist/cli/commands/sync-collection.d.ts +0 -14
  815. package/dist/cli/commands/sync-collection.js +0 -355
  816. package/dist/cli/commands/sync-collection.js.map +0 -1
  817. package/dist/cli/commands/sync-entities.d.ts +0 -13
  818. package/dist/cli/commands/sync-entities.js +0 -242
  819. package/dist/cli/commands/sync-entities.js.map +0 -1
  820. package/dist/cli/commands/team.d.ts +0 -12
  821. package/dist/cli/commands/team.js +0 -185
  822. package/dist/cli/commands/team.js.map +0 -1
  823. package/dist/cli/commands/update.d.ts +0 -8
  824. package/dist/cli/commands/update.js +0 -155
  825. package/dist/cli/commands/update.js.map +0 -1
  826. package/dist/cli/commands/user.d.ts +0 -7
  827. package/dist/cli/commands/user.js +0 -153
  828. package/dist/cli/commands/user.js.map +0 -1
  829. package/dist/cli/scaffolding.d.ts +0 -12
  830. package/dist/cli/scaffolding.js +0 -397
  831. package/dist/cli/scaffolding.js.map +0 -1
  832. package/dist/cli/sync-review-interactive.d.ts +0 -31
  833. package/dist/cli/sync-review-interactive.js +0 -393
  834. package/dist/cli/sync-review-interactive.js.map +0 -1
  835. package/dist/core/migration-runner.d.ts +0 -42
  836. package/dist/core/migration-runner.js +0 -232
  837. package/dist/core/migration-runner.js.map +0 -1
  838. package/dist/core/migration-types.d.ts +0 -101
  839. package/dist/core/migration-types.js +0 -21
  840. package/dist/core/migration-types.js.map +0 -1
  841. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
  842. package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
  843. package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
  844. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
  845. package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
  846. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
  847. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
  848. package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
  849. package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
  850. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
  851. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
  852. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
  853. package/dist/core/migrations/index.d.ts +0 -11
  854. package/dist/core/migrations/index.js +0 -23
  855. package/dist/core/migrations/index.js.map +0 -1
  856. package/dist/integrations/asana.d.ts +0 -26
  857. package/dist/integrations/asana.js +0 -78
  858. package/dist/integrations/asana.js.map +0 -1
  859. package/dist/integrations/figma-local.d.ts +0 -16
  860. package/dist/integrations/figma-local.js +0 -10
  861. package/dist/integrations/figma-local.js.map +0 -1
  862. package/dist/integrations/figma.d.ts +0 -17
  863. package/dist/integrations/figma.js +0 -17
  864. package/dist/integrations/figma.js.map +0 -1
  865. package/dist/integrations/granola.d.ts +0 -24
  866. package/dist/integrations/granola.js +0 -60
  867. package/dist/integrations/granola.js.map +0 -1
  868. package/dist/integrations/linear.d.ts +0 -14
  869. package/dist/integrations/linear.js +0 -80
  870. package/dist/integrations/linear.js.map +0 -1
  871. package/dist/integrations/paper-local.d.ts +0 -14
  872. package/dist/integrations/paper-local.js +0 -10
  873. package/dist/integrations/paper-local.js.map +0 -1
  874. package/dist/integrations/paper.d.ts +0 -2
  875. package/dist/integrations/paper.js +0 -10
  876. package/dist/integrations/paper.js.map +0 -1
  877. package/dist/integrations/pipedrive.d.ts +0 -26
  878. package/dist/integrations/pipedrive.js +0 -97
  879. package/dist/integrations/pipedrive.js.map +0 -1
  880. package/dist/integrations/registry.d.ts +0 -15
  881. package/dist/integrations/registry.js +0 -27
  882. package/dist/integrations/registry.js.map +0 -1
  883. package/dist/integrations/types.d.ts +0 -38
  884. package/dist/integrations/types.js +0 -9
  885. package/dist/integrations/types.js.map +0 -1
  886. package/dist/lib/lib/utils.d.ts +0 -2
  887. package/dist/lib/lib/utils.js +0 -6
  888. package/dist/lib/lib/utils.js.map +0 -1
  889. package/dist/mcp/connectors/asana.d.ts +0 -2
  890. package/dist/mcp/connectors/asana.js +0 -20
  891. package/dist/mcp/connectors/asana.js.map +0 -1
  892. package/dist/mcp/connectors/definitions.d.ts +0 -45
  893. package/dist/mcp/connectors/definitions.js +0 -32
  894. package/dist/mcp/connectors/definitions.js.map +0 -1
  895. package/dist/mcp/connectors/figma.d.ts +0 -5
  896. package/dist/mcp/connectors/figma.js +0 -21
  897. package/dist/mcp/connectors/figma.js.map +0 -1
  898. package/dist/mcp/connectors/gdrive.d.ts +0 -2
  899. package/dist/mcp/connectors/gdrive.js +0 -20
  900. package/dist/mcp/connectors/gdrive.js.map +0 -1
  901. package/dist/mcp/connectors/granola.d.ts +0 -2
  902. package/dist/mcp/connectors/granola.js +0 -12
  903. package/dist/mcp/connectors/granola.js.map +0 -1
  904. package/dist/mcp/connectors/linear.d.ts +0 -2
  905. package/dist/mcp/connectors/linear.js +0 -19
  906. package/dist/mcp/connectors/linear.js.map +0 -1
  907. package/dist/mcp/connectors/obsidian.d.ts +0 -2
  908. package/dist/mcp/connectors/obsidian.js +0 -19
  909. package/dist/mcp/connectors/obsidian.js.map +0 -1
  910. package/dist/mcp/connectors/pipedrive.d.ts +0 -2
  911. package/dist/mcp/connectors/pipedrive.js +0 -20
  912. package/dist/mcp/connectors/pipedrive.js.map +0 -1
  913. package/dist/mcp/connectors/slack.d.ts +0 -2
  914. package/dist/mcp/connectors/slack.js +0 -21
  915. package/dist/mcp/connectors/slack.js.map +0 -1
  916. package/dist/mcp/server-oauth-provider.d.ts +0 -56
  917. package/dist/mcp/server-oauth-provider.js +0 -142
  918. package/dist/mcp/server-oauth-provider.js.map +0 -1
  919. package/dist/server/chrome/chrome.css +0 -691
  920. package/dist/server/chrome/chrome.js +0 -374
  921. package/dist/server/collab-authority.d.ts +0 -70
  922. package/dist/server/collab-authority.js +0 -218
  923. package/dist/server/collab-authority.js.map +0 -1
  924. package/dist/server/collab.d.ts +0 -29
  925. package/dist/server/collab.js +0 -195
  926. package/dist/server/collab.js.map +0 -1
  927. package/dist/server/commit-scheduler.d.ts +0 -39
  928. package/dist/server/commit-scheduler.js +0 -113
  929. package/dist/server/commit-scheduler.js.map +0 -1
  930. package/dist/server/plugin-loader.d.ts +0 -53
  931. package/dist/server/plugin-loader.js +0 -155
  932. package/dist/server/plugin-loader.js.map +0 -1
  933. package/dist/server/routes/collab.d.ts +0 -6
  934. package/dist/server/routes/collab.js +0 -10
  935. package/dist/server/routes/collab.js.map +0 -1
  936. package/dist/server/routes/git-api.d.ts +0 -9
  937. package/dist/server/routes/git-api.js +0 -82
  938. package/dist/server/routes/git-api.js.map +0 -1
  939. package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
  940. package/dist/server/routes/meeting-ingest-api.js +0 -323
  941. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  942. package/dist/server/routes/sync-api.d.ts +0 -26
  943. package/dist/server/routes/sync-api.js +0 -814
  944. package/dist/server/routes/sync-api.js.map +0 -1
  945. package/dist/server/routes/webhook.d.ts +0 -14
  946. package/dist/server/routes/webhook.js +0 -102
  947. package/dist/server/routes/webhook.js.map +0 -1
  948. package/dist/services/github-provisioner.d.ts +0 -36
  949. package/dist/services/github-provisioner.js +0 -126
  950. package/dist/services/github-provisioner.js.map +0 -1
  951. package/dist/services/github-service.d.ts +0 -99
  952. package/dist/services/github-service.js +0 -310
  953. package/dist/services/github-service.js.map +0 -1
  954. package/dist/services/insights.d.ts +0 -38
  955. package/dist/services/insights.js +0 -246
  956. package/dist/services/insights.js.map +0 -1
  957. package/dist/services/sync/collection-sync.d.ts +0 -60
  958. package/dist/services/sync/collection-sync.js +0 -509
  959. package/dist/services/sync/collection-sync.js.map +0 -1
  960. package/dist/services/sync/commit.d.ts +0 -60
  961. package/dist/services/sync/commit.js +0 -354
  962. package/dist/services/sync/commit.js.map +0 -1
  963. package/dist/services/sync/context-index.d.ts +0 -69
  964. package/dist/services/sync/context-index.js +0 -280
  965. package/dist/services/sync/context-index.js.map +0 -1
  966. package/dist/services/sync/data-fetcher.d.ts +0 -31
  967. package/dist/services/sync/data-fetcher.js +0 -12
  968. package/dist/services/sync/data-fetcher.js.map +0 -1
  969. package/dist/services/sync/derive.d.ts +0 -34
  970. package/dist/services/sync/derive.js +0 -164
  971. package/dist/services/sync/derive.js.map +0 -1
  972. package/dist/services/sync/enrichment-state.d.ts +0 -31
  973. package/dist/services/sync/enrichment-state.js +0 -63
  974. package/dist/services/sync/enrichment-state.js.map +0 -1
  975. package/dist/services/sync/enrichment.d.ts +0 -25
  976. package/dist/services/sync/enrichment.js +0 -121
  977. package/dist/services/sync/enrichment.js.map +0 -1
  978. package/dist/services/sync/entity-refresh.d.ts +0 -30
  979. package/dist/services/sync/entity-refresh.js +0 -275
  980. package/dist/services/sync/entity-refresh.js.map +0 -1
  981. package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
  982. package/dist/services/sync/frontmatter-extractor.js +0 -279
  983. package/dist/services/sync/frontmatter-extractor.js.map +0 -1
  984. package/dist/services/sync/graph-match-state.d.ts +0 -33
  985. package/dist/services/sync/graph-match-state.js +0 -61
  986. package/dist/services/sync/graph-match-state.js.map +0 -1
  987. package/dist/services/sync/graph-match.d.ts +0 -53
  988. package/dist/services/sync/graph-match.js +0 -316
  989. package/dist/services/sync/graph-match.js.map +0 -1
  990. package/dist/services/sync/graphrag-client.d.ts +0 -43
  991. package/dist/services/sync/graphrag-client.js +0 -94
  992. package/dist/services/sync/graphrag-client.js.map +0 -1
  993. package/dist/services/sync/graphrag-config.d.ts +0 -16
  994. package/dist/services/sync/graphrag-config.js +0 -39
  995. package/dist/services/sync/graphrag-config.js.map +0 -1
  996. package/dist/services/sync/graphrag-context.d.ts +0 -14
  997. package/dist/services/sync/graphrag-context.js +0 -109
  998. package/dist/services/sync/graphrag-context.js.map +0 -1
  999. package/dist/services/sync/graphrag-indexer.d.ts +0 -30
  1000. package/dist/services/sync/graphrag-indexer.js +0 -358
  1001. package/dist/services/sync/graphrag-indexer.js.map +0 -1
  1002. package/dist/services/sync/llm.d.ts +0 -32
  1003. package/dist/services/sync/llm.js +0 -115
  1004. package/dist/services/sync/llm.js.map +0 -1
  1005. package/dist/services/sync/mcp-client.d.ts +0 -71
  1006. package/dist/services/sync/mcp-client.js +0 -299
  1007. package/dist/services/sync/mcp-client.js.map +0 -1
  1008. package/dist/services/sync/model-factory.d.ts +0 -13
  1009. package/dist/services/sync/model-factory.js +0 -38
  1010. package/dist/services/sync/model-factory.js.map +0 -1
  1011. package/dist/services/sync/name-quality.d.ts +0 -31
  1012. package/dist/services/sync/name-quality.js +0 -60
  1013. package/dist/services/sync/name-quality.js.map +0 -1
  1014. package/dist/services/sync/output-schemas.d.ts +0 -92
  1015. package/dist/services/sync/output-schemas.js +0 -43
  1016. package/dist/services/sync/output-schemas.js.map +0 -1
  1017. package/dist/services/sync/prompts.d.ts +0 -19
  1018. package/dist/services/sync/prompts.js +0 -128
  1019. package/dist/services/sync/prompts.js.map +0 -1
  1020. package/dist/services/sync/reconciler.d.ts +0 -48
  1021. package/dist/services/sync/reconciler.js +0 -294
  1022. package/dist/services/sync/reconciler.js.map +0 -1
  1023. package/dist/services/sync/rest-client.d.ts +0 -40
  1024. package/dist/services/sync/rest-client.js +0 -100
  1025. package/dist/services/sync/rest-client.js.map +0 -1
  1026. package/dist/services/sync/source-config.d.ts +0 -67
  1027. package/dist/services/sync/source-config.js +0 -304
  1028. package/dist/services/sync/source-config.js.map +0 -1
  1029. package/dist/services/sync/source-definitions/asana.d.ts +0 -14
  1030. package/dist/services/sync/source-definitions/asana.js +0 -42
  1031. package/dist/services/sync/source-definitions/asana.js.map +0 -1
  1032. package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
  1033. package/dist/services/sync/source-definitions/definitions.js +0 -8
  1034. package/dist/services/sync/source-definitions/definitions.js.map +0 -1
  1035. package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
  1036. package/dist/services/sync/source-definitions/gdrive.js +0 -68
  1037. package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
  1038. package/dist/services/sync/source-definitions/granola.d.ts +0 -2
  1039. package/dist/services/sync/source-definitions/granola.js +0 -21
  1040. package/dist/services/sync/source-definitions/granola.js.map +0 -1
  1041. package/dist/services/sync/source-definitions/linear.d.ts +0 -2
  1042. package/dist/services/sync/source-definitions/linear.js +0 -62
  1043. package/dist/services/sync/source-definitions/linear.js.map +0 -1
  1044. package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
  1045. package/dist/services/sync/source-definitions/obsidian.js +0 -55
  1046. package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
  1047. package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
  1048. package/dist/services/sync/source-definitions/pipedrive.js +0 -43
  1049. package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
  1050. package/dist/services/sync/staging.d.ts +0 -53
  1051. package/dist/services/sync/staging.js +0 -130
  1052. package/dist/services/sync/staging.js.map +0 -1
  1053. package/dist/services/sync/structured-extractor.d.ts +0 -57
  1054. package/dist/services/sync/structured-extractor.js +0 -584
  1055. package/dist/services/sync/structured-extractor.js.map +0 -1
  1056. package/dist/services/sync/sync-runner.d.ts +0 -32
  1057. package/dist/services/sync/sync-runner.js +0 -195
  1058. package/dist/services/sync/sync-runner.js.map +0 -1
  1059. package/dist/services/sync/sync-state.d.ts +0 -43
  1060. package/dist/services/sync/sync-state.js +0 -154
  1061. package/dist/services/sync/sync-state.js.map +0 -1
  1062. package/dist/services/sync/types.d.ts +0 -381
  1063. package/dist/services/sync/types.js +0 -8
  1064. package/dist/services/sync/types.js.map +0 -1
  1065. package/dist/services/sync/unstructured-extractor.d.ts +0 -27
  1066. package/dist/services/sync/unstructured-extractor.js +0 -185
  1067. package/dist/services/sync/unstructured-extractor.js.map +0 -1
  1068. package/dist/utils/merge-resolver.d.ts +0 -59
  1069. package/dist/utils/merge-resolver.js +0 -303
  1070. package/dist/utils/merge-resolver.js.map +0 -1
  1071. package/dist/utils/workspace-config.d.ts +0 -8
  1072. package/dist/utils/workspace-config.js +0 -22
  1073. package/dist/utils/workspace-config.js.map +0 -1
  1074. package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
  1075. package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
  1076. package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
  1077. package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
  1078. package/dist/web/_app/immutable/assets/4.DT7X0x5S.css +0 -1
  1079. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  1080. package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
  1081. package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
  1082. package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
  1083. package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
  1084. package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
  1085. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  1086. package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
  1087. package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
  1088. package/dist/web/_app/immutable/chunks/-iaeBIWN.js +0 -1
  1089. package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
  1090. package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
  1091. package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
  1092. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  1093. package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
  1094. package/dist/web/_app/immutable/chunks/B3Z4_Sps.js +0 -1
  1095. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  1096. package/dist/web/_app/immutable/chunks/BPWYOQXG.js +0 -1
  1097. package/dist/web/_app/immutable/chunks/BR77jbfR.js +0 -1
  1098. package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
  1099. package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
  1100. package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
  1101. package/dist/web/_app/immutable/chunks/Bq_KShUL.js +0 -4
  1102. package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
  1103. package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
  1104. package/dist/web/_app/immutable/chunks/BzPu-Eht.js +0 -1
  1105. package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
  1106. package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
  1107. package/dist/web/_app/immutable/chunks/CGc1sIb_.js +0 -1
  1108. package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
  1109. package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
  1110. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  1111. package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
  1112. package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
  1113. package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
  1114. package/dist/web/_app/immutable/chunks/CX87mIM8.js +0 -1
  1115. package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
  1116. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  1117. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  1118. package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
  1119. package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
  1120. package/dist/web/_app/immutable/chunks/Cpsr8-Xy.js +0 -1
  1121. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  1122. package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
  1123. package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
  1124. package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
  1125. package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
  1126. package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
  1127. package/dist/web/_app/immutable/chunks/DTZE-yoq.js +0 -2
  1128. package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
  1129. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  1130. package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
  1131. package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
  1132. package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
  1133. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  1134. package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
  1135. package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
  1136. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  1137. package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
  1138. package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
  1139. package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
  1140. package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
  1141. package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
  1142. package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
  1143. package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
  1144. package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
  1145. package/dist/web/_app/immutable/entry/app.BeUKh4sD.js +0 -2
  1146. package/dist/web/_app/immutable/entry/start.CZJnFuQn.js +0 -1
  1147. package/dist/web/_app/immutable/nodes/0.DyF_RsLg.js +0 -2
  1148. package/dist/web/_app/immutable/nodes/1.7iDQmMPh.js +0 -1
  1149. package/dist/web/_app/immutable/nodes/10.Btl8d8HT.js +0 -1
  1150. package/dist/web/_app/immutable/nodes/2.LDRE62jN.js +0 -168
  1151. package/dist/web/_app/immutable/nodes/3.BaW1XB1x.js +0 -1
  1152. package/dist/web/_app/immutable/nodes/4.D0Q8kpkI.js +0 -12
  1153. package/dist/web/_app/immutable/nodes/5.n7j2UG9h.js +0 -4
  1154. package/dist/web/_app/immutable/nodes/6.DQYxR0iy.js +0 -2
  1155. package/dist/web/_app/immutable/nodes/7.BsURvFAp.js +0 -2
  1156. package/dist/web/_app/immutable/nodes/8.CsiErG0p.js +0 -1
  1157. package/dist/web/_app/immutable/nodes/9.CnN6OZgC.js +0 -1
@@ -1,15 +1,32 @@
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
+ * 19 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 (4): note, reference, dataset, material
9
+ * - System (1): comment
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
+ * The `asset` entity type was retired (asset-as-embed / Phase F); its name is
12
+ * reserved (see RESERVED_ENTITY_TYPES) so it can never be re-created.
13
+ *
14
+ * "An object earns first-class entity status only if it earns its own view
15
+ * behavior across the six primary views (List, Gallery, Kanban, Calendar,
16
+ * Timeline, Graph). Objects that are mostly useful because they're attached
17
+ * to something else become categories, fields, or inline blocks — not types."
18
+ *
19
+ * Workspaces can define additional custom types via schema_extensions.
11
20
  */
12
21
  import { z } from 'zod';
22
+ function dateField(role, label, description) {
23
+ return z
24
+ .string()
25
+ .date()
26
+ .optional()
27
+ .describe(description ?? label)
28
+ .meta({ dateRole: role, label });
29
+ }
13
30
  /**
14
31
  * Base entity schema - all entities have these fields
15
32
  */
@@ -22,356 +39,550 @@ export const EntityBaseSchema = z.object({
22
39
  updated_at: z.string().datetime('Invalid datetime format'),
23
40
  created_by: z.string().min(1, 'Created by is required'),
24
41
  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)'),
42
+ date: dateField('primary', 'Date', "The entity's primary date (YYYY-MM-DD)"),
26
43
  tags: z.array(z.string())
27
44
  .optional()
28
45
  .describe('Tags for categorization'),
29
46
  }).passthrough(); // Allow custom fields beyond the base schema
30
47
  // ══════════════════════════════════════════════════════════════════════════════
31
- // IDENTITY ENTITIES — people, organizations, roles, practice areas
48
+ // CRM — people, organizations, positions, deals
32
49
  // ══════════════════════════════════════════════════════════════════════════════
33
50
  /**
34
- * Person — team members, client contacts, any individual
51
+ * Person — team members, client contacts, any individual.
52
+ *
53
+ * `category` and `status` are split: category is the relationship type
54
+ * (employee/contractor/client/partner) and status is whether that
55
+ * relationship is current or historical. Mirrors organization.
35
56
  */
36
57
  export const PersonSchema = EntityBaseSchema.extend({
37
58
  entity_type: z.literal('person'),
38
59
  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'])
60
+ role: z.string().optional().describe('Free-text title (distinct from `position` entity)'),
61
+ category: z.enum(['employee', 'contractor', 'client', 'partner', 'other'])
41
62
  .optional()
42
- .describe('Relationship status'),
63
+ .describe('Relationship category'),
64
+ status: z.enum(['current', 'former'])
65
+ .optional()
66
+ .describe('Whether the relationship is current or historical'),
43
67
  email: z.string().optional().describe('Email address'),
44
68
  location: z.string().optional().describe('Location'),
45
69
  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'),
70
+ // Bridge to the auth.db user account this person represents. Scalar handle
71
+ // string (not a wikilink): users are out-of-graph identities. Workspace-
72
+ // unique — write-path enforcement lives in user-person-bridge.ts. Optional
73
+ // because person entities can exist without a corresponding user
74
+ // (contractors, client contacts, anyone in the org chart who doesn't log
75
+ // in). Empty string is the "cleared" form — graph.create seeds optional
76
+ // string fields to "" on new entities, and unlink writes "" as well, so
77
+ // the regex must accept it explicitly.
78
+ user_handle: z.string()
79
+ // Empty (cleared) OR a kebab-case handle: leading alnum, alnum/hyphen
80
+ // body, alnum tail, no doubled hyphens. Mirrors what auth's
81
+ // slugifyHandle + allocateHandle can actually emit — accepting
82
+ // `foo-` or `foo--bar` here would let a hand-edit drift outside what
83
+ // findUserByHandle can match.
84
+ .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)')
85
+ .optional()
86
+ .describe('Auth handle of the user this person represents'),
50
87
  });
51
88
  /**
52
- * Organization — clients, vendors, partners, prospects, industry bodies
53
- * Replaces the former separate client and vendor types.
89
+ * Organization — clients, vendors, partners, prospects, professional
90
+ * associations.
54
91
  */
55
92
  export const OrganizationSchema = EntityBaseSchema.extend({
56
93
  entity_type: z.literal('organization'),
57
94
  name: z.string().min(1, 'Organization name is required'),
58
- category: z.enum(['client', 'vendor', 'partner', 'prospect', 'industry-body', 'other'])
95
+ category: z.enum(['client', 'vendor', 'partner', 'prospect', 'professional-association', 'other'])
59
96
  .optional()
60
97
  .describe('Relationship category'),
61
- status: z.enum(['active', 'inactive', 'prospect', 'former'])
98
+ status: z.enum(['active', 'dormant', 'former'])
62
99
  .default('active')
63
- .describe('Organization status'),
100
+ .describe('Organization status (`dormant` covers clients you have not worked with in a while but might again)'),
64
101
  industry: z.string().optional().describe('Industry sector'),
65
102
  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
103
  });
74
104
  /**
75
- * Rolerole definitions from the firm's leveling framework
105
+ * Positiona position spec or open job. Renamed from `role` to avoid
106
+ * collision with `person.role` (the free-text title field). Reframes from
107
+ * "the person's seat" to "the spec for a position."
76
108
  */
77
- export const RoleSchema = EntityBaseSchema.extend({
78
- entity_type: z.literal('role'),
79
- name: z.string().min(1, 'Role name is required'),
109
+ export const PositionSchema = EntityBaseSchema.extend({
110
+ entity_type: z.literal('position'),
111
+ name: z.string().min(1, 'Position name is required'),
80
112
  department: z.string().optional().describe('Department'),
81
- level: z.number().optional().describe('Level 1–5 from leveling framework'),
82
113
  category: z.enum(['staff', 'contractor', 'intern'])
83
114
  .optional()
84
115
  .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'),
116
+ status: z.enum(['draft', 'open', 'filled', 'closed'])
117
+ .default('open')
118
+ .describe('Position lifecycle'),
90
119
  });
91
120
  /**
92
- * Practice Area firm capabilities and disciplines
121
+ * Dealpre-project opportunity in the sales pipeline.
93
122
  */
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'),
123
+ export const DealSchema = EntityBaseSchema.extend({
124
+ entity_type: z.literal('deal'),
125
+ name: z.string().min(1, 'Deal name is required'),
126
+ client: z.string().optional().describe('Client organization wikilink'),
127
+ contact: z.string().optional().describe('Primary contact person wikilink'),
128
+ stage: z.enum(['qualification', 'scoping', 'proposal', 'negotiation', 'pending-signature', 'won', 'lost'])
129
+ .default('qualification')
130
+ .describe('Pipeline stage'),
131
+ deal_value: z.number().optional().describe('Estimated deal value'),
132
+ start_date: dateField('start', 'Start date', 'When work on the deal began (enables Timeline rendering of duration)'),
133
+ date: dateField('primary', 'Close date', 'Expected close date'),
101
134
  });
102
135
  // ══════════════════════════════════════════════════════════════════════════════
103
- // UNIVERSAL ENTITIES available in any repo
136
+ // PMproject, event, task, deliverable
104
137
  // ══════════════════════════════════════════════════════════════════════════════
105
138
  /**
106
- * Project — a client engagement or internal initiative
139
+ * Project — a client engagement or internal initiative.
140
+ *
141
+ * `services` is a wikilink array to `service` entities the project includes
142
+ * (replaces the previous `practice_area` concept).
107
143
  */
108
144
  export const ProjectSchema = EntityBaseSchema.extend({
109
145
  entity_type: z.literal('project'),
110
146
  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)'),
147
+ category: z.enum(['client', 'internal'])
148
+ .optional()
149
+ .describe('Project category'),
150
+ project_type: z.string().optional().describe('Kind of project (e.g., website, research, event, rebrand, prototype)'),
112
151
  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'])
152
+ services: z.array(z.string()).optional()
153
+ .describe('Service entities this project includes (wikilinks)'),
154
+ status: z.enum(['planning', 'in-progress', 'paused', 'complete', 'archived'])
117
155
  .optional()
118
156
  .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'),
157
+ start_date: dateField('start', 'Start date', 'Project start date'),
158
+ date: dateField('primary', 'End date', 'Project end date'),
124
159
  });
125
160
  /**
126
- * Meeting — any scheduled gathering
161
+ * Event — any scheduled gathering (meeting, call, workshop, review, etc.).
162
+ * `type` discriminates the kind of gathering for grouping/filtering. The
163
+ * default `meeting` preserves semantics for legacy meeting captures.
164
+ *
165
+ * Note: `deadline` is intentionally NOT a `type` value — deadlines are
166
+ * `task` entries with a `date` (the due date). Events are things you attend.
127
167
  */
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)'),
168
+ export const EVENT_TYPES = [
169
+ 'meeting', 'call', 'review', 'workshop', 'presentation', 'conference', 'other',
170
+ ];
171
+ export const EventSchema = EntityBaseSchema.extend({
172
+ entity_type: z.literal('event'),
173
+ name: z.string().min(1, 'Event name/subject is required'),
174
+ type: z.enum(EVENT_TYPES).default('meeting').describe('Kind of event'),
132
175
  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
176
  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)'),
177
+ start_date: dateField('start', 'Start date', 'When a multi-day event begins (omit for single-day events)'),
178
+ date: dateField('primary', 'Date', 'When the event takes place'),
156
179
  });
157
180
  /**
158
- * Task — lightweight action items and to-dos
181
+ * Task — lightweight action items and to-dos.
182
+ *
183
+ * `phase` is intentionally free-text (not a separate entity type or workspace
184
+ * config list). Phases vary widely across project types; the Timeline view
185
+ * auto-discovers distinct values per-project for grouping.
159
186
  */
160
187
  export const TaskSchema = EntityBaseSchema.extend({
161
188
  entity_type: z.literal('task'),
162
189
  name: z.string().min(1, 'Task name is required'),
163
- status: z.enum(['open', 'in-progress', 'done', 'cancelled'])
164
- .default('open')
190
+ status: z.enum(['backlog', 'todo', 'in-progress', 'in-review', 'done', 'cancelled'])
191
+ .default('backlog')
165
192
  .describe('Task status'),
166
193
  priority: z.enum(['low', 'medium', 'high', 'urgent'])
167
194
  .optional()
168
195
  .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'),
196
+ 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')
197
+ // `refType` rides on the field via `.meta()` (same mechanism as the date
198
+ // vocabulary's `dateRole`/`label`). It marks `assignee` as a reference
199
+ // that must point at a `person` entity — surfaced through
200
+ // `describeZodObject` → `/api/schema` + `get_entity_schema` so pickers
201
+ // scope generically, and consumed by the write-path validator in
202
+ // entity-mutations.ts that actually rejects non-person targets. Zod
203
+ // itself can't resolve wikilinks, so this is a hint, not enforcement.
204
+ .meta({ refType: 'person' }),
205
+ phase: z.string().optional().describe('Project phase (free-text — Discover, Design, Prototype, Build, etc.)'),
206
+ start_date: dateField('start', 'Start date', 'Task start date (enables Timeline / Gantt rendering of duration)'),
207
+ date: dateField('primary', 'Due date', 'When the task is due'),
208
+ // Auto-stamped by graph.update when status transitions to/from `done` (see
209
+ // composeUpdatedFrontmatter). Lets surfaces show "completed today" without
210
+ // conflating it with the due date. ISO datetime; cleared when reopened.
211
+ completed_at: z.string().datetime('Invalid datetime format').optional()
212
+ .describe('When the task was marked done (ISO datetime, auto-managed)')
213
+ .meta({ label: 'Completed at' }),
172
214
  });
173
215
  /**
174
- * Documentany authored document
175
- * Absorbs the former separate proposal, contract, brief, financial-plan, and template types.
216
+ * Deliverablea scoped output promised to a client.
217
+ */
218
+ export const DeliverableSchema = EntityBaseSchema.extend({
219
+ entity_type: z.literal('deliverable'),
220
+ name: z.string().min(1, 'Deliverable name is required'),
221
+ project: z.string().optional().describe('Parent project wikilink'),
222
+ status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
223
+ .default('planned')
224
+ .describe('Delivery status'),
225
+ phase: z.string().optional().describe('Project phase (free-text — same semantics as task.phase)'),
226
+ start_date: dateField('start', 'Start date', 'Deliverable start date (enables Timeline rendering of duration)'),
227
+ date: dateField('primary', 'Due date', 'When the deliverable is due'),
228
+ });
229
+ // ══════════════════════════════════════════════════════════════════════════════
230
+ // KM — authored (document, deck, publication, case-study, service, skill)
231
+ // ══════════════════════════════════════════════════════════════════════════════
232
+ /**
233
+ * Shared description for the `asset_ref` field — now `dataset`-ONLY.
234
+ *
235
+ * Body-embed model (2026-06-01): an import seeds the asset reference INTO THE
236
+ * BODY (an `![](url)` image embed for materials, a `[name](url)` source
237
+ * link for documents) — exactly as a user would. So material/document no longer
238
+ * carry `asset_ref`; the reference is in the markdown, not the frontmatter.
239
+ *
240
+ * `dataset` is the lone exception: a dataset body must stay valid CSV, so it
241
+ * can't hold a body link. `asset_ref` records the STORAGE UUID of the source
242
+ * xlsx (the `assets.db` `asset_id` / immutable-key id, never a URL, never an
243
+ * entity id) as INVISIBLE provenance — survives the entity moving repos and an
244
+ * asset-backend swap. It is one-to-one provenance, NOT an embed graph (the
245
+ * many-to-many image-embed mechanism is still markdown `![](url)` in a body).
246
+ *
247
+ * `.meta({ internal: true })` keeps it out of the field-metadata API, the
248
+ * property panel, and the agent's `get_entity_schema` (same treatment as
249
+ * `source_file`) — it is set by the import path, never hand-edited.
250
+ */
251
+ const ASSET_REF_DESC = 'Storage UUID of the source xlsx this dataset was imported from';
252
+ /**
253
+ * Document — any authored document. The `guideline` category absorbs the
254
+ * former standalone `guideline` entity type.
176
255
  */
177
256
  export const DocumentSchema = EntityBaseSchema.extend({
178
257
  entity_type: z.literal('document'),
179
258
  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'])
259
+ category: z.enum(['proposal', 'contract', 'brief', 'memo', 'report', 'template', 'guideline', 'other'])
260
+ .optional()
261
+ .describe('Document category'),
262
+ status: z.enum(['draft', 'review', 'final', 'archived'])
185
263
  .default('draft')
186
264
  .describe('Document status'),
187
- description: z.string().optional().describe('Description or summary'),
265
+ // No asset_ref: under the body-embed model an imported document seeds the
266
+ // extracted text + a `[name](url)` source link directly into its body, so the
267
+ // source-file reference lives in the markdown, not the frontmatter.
188
268
  });
189
269
  /**
190
- * Datasetstructured tabular data with typed columns and CSV body
270
+ * Decka slide deck or presentation. Stays its own type alongside
271
+ * `document` because of the dedicated slides renderer + agent skills that
272
+ * pattern-match on `entity_type === 'deck'`.
191
273
  */
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(),
274
+ export const DeckSchema = EntityBaseSchema.extend({
275
+ entity_type: z.literal('deck'),
276
+ name: z.string().min(1, 'Deck name is required'),
277
+ audience: z.enum(['client', 'team', 'board', 'external', 'other'])
278
+ .optional()
279
+ .describe('Intended audience'),
280
+ status: z.enum(['draft', 'review', 'final', 'archived'])
281
+ .default('draft')
282
+ .describe('Deck status'),
197
283
  });
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'),
284
+ /**
285
+ * Publication — authored content published externally.
286
+ */
287
+ export const PublicationSchema = EntityBaseSchema.extend({
288
+ entity_type: z.literal('publication'),
289
+ name: z.string().min(1, 'Publication name is required'),
290
+ platform: z.string().optional().describe('Where published (e.g., linkedin, medium, behance, conference)'),
291
+ status: z.enum(['draft', 'review', 'scheduled', 'published'])
292
+ .default('draft')
293
+ .describe('Publication status'),
294
+ url: z.string().optional().describe('URL of published content'),
202
295
  });
203
296
  /**
204
- * Referenceexternal resources and inspiration
205
- * Absorbs the former separate technique type.
297
+ * Case Study portfolio narratives for completed projects.
206
298
  */
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'),
299
+ export const CaseStudySchema = EntityBaseSchema.extend({
300
+ entity_type: z.literal('case-study'),
301
+ name: z.string().min(1, 'Case study name is required'),
302
+ client: z.string().optional().describe('Client organization wikilink'),
303
+ services: z.array(z.string()).optional()
304
+ .describe('Service entities this case study highlights (wikilinks)'),
305
+ date_range: z.string().optional().describe('Project timeframe (e.g., 2025-09 / 2026-01)'),
306
+ status: z.enum(['draft', 'review', 'final', 'published'])
307
+ .default('draft')
308
+ .describe('Case study status'),
309
+ });
310
+ /**
311
+ * Service — the firm's offerings + methodologies. Replaces the old
312
+ * `process` type and absorbs `practice-area` (top-level services replace
313
+ * what practice-area was trying to be).
314
+ *
315
+ * `sprint` links a granular service to its parent service (top-level
316
+ * services have none). `depends_on` / `enables` form a directed graph
317
+ * across the service set — the Graph view's most valuable use case.
318
+ */
319
+ export const ServiceSchema = EntityBaseSchema.extend({
320
+ entity_type: z.literal('service'),
321
+ name: z.string().min(1, 'Service name is required'),
322
+ service_id: z.string().optional()
323
+ .describe('Optional human-readable id (e.g. "1.4") for studios that number their services'),
324
+ sprint: z.string().optional()
325
+ .describe('Parent service wikilink for hierarchy (top-level services / sprints have none)'),
326
+ depends_on: z.array(z.string()).optional()
327
+ .describe('Services that must precede this one (wikilinks)'),
328
+ enables: z.array(z.string()).optional()
329
+ .describe('Services that this one unlocks (wikilinks)'),
330
+ deliverables: z.array(z.string()).optional()
331
+ .describe('Named outputs this service produces'),
332
+ status: z.enum(['offered', 'in-development', 'retired'])
333
+ .default('offered')
334
+ .describe('Service lifecycle'),
335
+ });
336
+ /**
337
+ * Skill — prompt-level instructions the agent can load to teach it how to
338
+ * do a specific job. The entity id is the skill name used by `load_skill`.
339
+ * The body markdown is the instruction content.
340
+ *
341
+ * `applies_to` lets the agent load deck-skills when working on a deck,
342
+ * proposal-skills when on a `document.category=proposal`, etc. Empty /
343
+ * unset = generally applicable.
344
+ *
345
+ * The previous `loading: eager | on-demand` field is gone for graph-authored
346
+ * skills. Filesystem skills (shipped with the product in `src/agent/skills/`)
347
+ * keep their own loading mechanism via skill-loader.ts and orchestrator.ts.
348
+ *
349
+ * `name` and `description` are optional at creation so the sidebar new-entry
350
+ * flow works — the user fills them in afterward via the property panel.
351
+ */
352
+ export const SkillSchema = EntityBaseSchema.extend({
353
+ entity_type: z.literal('skill'),
354
+ name: z.string().optional().describe('Human-readable title (falls back to entity id)'),
355
+ description: z.string().optional().describe('Shown in the skill index so the agent knows when to load it'),
356
+ applies_to: z.array(z.string()).optional()
357
+ .describe('Entity types this skill applies to (e.g. ["deck"]). Empty = generally applicable.'),
216
358
  });
359
+ // ══════════════════════════════════════════════════════════════════════════════
360
+ // CAPTURE — note, reference
361
+ // ══════════════════════════════════════════════════════════════════════════════
217
362
  /**
218
- * Note — freeform thinking, research, scratch, daily notes
219
- * Lightweight entity with minimal schema. Participates in the graph like any other entity.
363
+ * Note — freeform thinking, research, daily notes.
364
+ *
365
+ * Decisions migrated from the cut `decision` type land here as plain
366
+ * notes; operators may manually convert specific entries to `task` if they
367
+ * read better as work items.
220
368
  */
221
369
  export const NoteSchema = EntityBaseSchema.extend({
222
370
  entity_type: z.literal('note'),
223
371
  name: z.string().min(1, 'Note name is required'),
224
- category: z.string().optional().describe('Note category (e.g., research, scratch, daily, brainstorm, draft)'),
372
+ // Entry-primary provenance (A2): when this note was derived from an
373
+ // uploaded asset (e.g. a converted .docx/.pdf), `source_file` holds the
374
+ // SOURCE ASSET'S ENTITY ID — never a URL — so the link survives an asset
375
+ // backend swap and joins the graph (the relationship is also surfaced as a
376
+ // wikilink in the body). Absent for notes created directly.
377
+ //
378
+ // `.meta({ internal: true })` marks it system-managed: the field-metadata
379
+ // API (describeZodObject) omits it, so it never appears in the property
380
+ // panel or the agent's get_entity_schema, and the create/changeType field
381
+ // seeders skip it (so a directly-created note has NO source_file rather
382
+ // than `''`). Set only by the import/convert path.
383
+ source_file: z.string().optional().describe('Entity id of the source asset this note was derived from').meta({ internal: true }),
225
384
  });
226
385
  /**
227
- * Deliverablea scoped contractual output promised to a client
228
- * Bridges the commercial side (proposal, contract) to execution (artifacts, tasks).
386
+ * Referenceexternal resources and inspiration.
229
387
  */
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'),
388
+ export const ReferenceSchema = EntityBaseSchema.extend({
389
+ entity_type: z.literal('reference'),
390
+ name: z.string().min(1, 'Reference name is required'),
391
+ source: z.string().optional().describe('Source or author'),
392
+ link: z.string().optional().describe('URL'),
240
393
  });
241
394
  /**
242
- * Publicationauthored content published externally
395
+ * Dataseta CSV the workspace owns, edited in a grid.
396
+ *
397
+ * Conventional CSV: the markdown body IS the data, and the header row IS the
398
+ * column list — there's no separate typed column schema. The grid editor
399
+ * (web CsvEditor) and the agent's `query_dataset` / `append_rows` tools read
400
+ * the body through CSVService (src/services/csv-service.ts), deriving columns
401
+ * from the header. Distinct from an uploaded `asset` with
402
+ * `asset_kind: 'spreadsheet'`, which is an opaque binary — a dataset is
403
+ * in-graph, queryable, and row-appendable.
243
404
  */
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'),
405
+ export const DatasetSchema = EntityBaseSchema.extend({
406
+ entity_type: z.literal('dataset'),
407
+ name: z.string().min(1, 'Dataset name is required'),
408
+ // Entry-primary provenance (A2): set when this dataset was derived from an
409
+ // uploaded asset (e.g. one sheet of a converted .xlsx). Holds the SOURCE
410
+ // ASSET'S ENTITY ID, never a URL. See NoteSchema.source_file (incl. the
411
+ // `.meta({ internal: true })` rationale — same system-managed treatment).
412
+ source_file: z.string().optional().describe('Entity id of the source asset this dataset was derived from').meta({ internal: true }),
413
+ // When derived from one sheet of a converted .xlsx, the original worksheet
414
+ // name — the stable key that lets a re-convert (replace) match this dataset
415
+ // back to its sheet and update it IN PLACE, preserving the id + inbound
416
+ // links even if the first conversion's id was collision-suffixed. Internal
417
+ // (system-managed); never user-edited.
418
+ source_sheet: z.string().optional().describe('Original worksheet name this dataset was derived from').meta({ internal: true }),
419
+ // Asset-as-embed provenance: the storage UUID of the source asset (e.g. the
420
+ // .xlsx this sheet was imported from). Frontmatter only — the dataset body
421
+ // stays pure CSV, so the asset link is NEVER a body embed. See ASSET_REF_DESC.
422
+ asset_ref: z.string().optional().describe(ASSET_REF_DESC).meta({ internal: true }),
256
423
  });
257
424
  /**
258
- * Dealpre-project opportunity in the sales pipeline
425
+ * Materiala first-class graph entry that wraps a free-standing binary
426
+ * asset (image or opaque file: photo, logo, psd/ai/sketch/fig, video, audio,
427
+ * archive) when no better type fits. The asset-as-embed catch-all: import
428
+ * routes docx/pdf → `document`, xlsx → `dataset`, and everything else (image +
429
+ * opaque) → `material`.
430
+ *
431
+ * Distinct from `asset` (the stored bytes + `assets.db` row) and from
432
+ * `reference` (a pointer to an EXTERNAL source the workspace doesn't own).
433
+ * Under the body-embed model a material's body IS the asset: import seeds an
434
+ * inline `![name](url)` image embed (images) or a `[name](url)` download link
435
+ * (opaque binaries). No `asset_ref` frontmatter — the reference lives in the
436
+ * markdown. A hand-created material (New Entry / agent) is a notes/catalog
437
+ * entry whose body the user writes themselves.
259
438
  */
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'])
439
+ export const MaterialSchema = EntityBaseSchema.extend({
440
+ entity_type: z.literal('material'),
441
+ name: z.string().min(1, 'Material name is required'),
442
+ // Purpose-oriented grouping axis (NOT a re-encoding of the asset's kind,
443
+ // which lives in assets.db). Optional. Values are intentionally minimal —
444
+ // enums are cheap to extend, expensive to remove.
445
+ category: z.enum(['design', 'brand', 'media', 'archive', 'other'])
272
446
  .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'),
447
+ .describe('Purpose grouping (design source, brand asset, media, archive, other)'),
277
448
  });
278
449
  // ══════════════════════════════════════════════════════════════════════════════
279
- // KNOWLEDGE ENTITIEStypically in resource repos
450
+ // ASSET KINDS (store-facing NOT an entity type)
280
451
  // ══════════════════════════════════════════════════════════════════════════════
281
452
  /**
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
453
+ * High-level kinds for stored binaries assets.db media metadata + per-kind
454
+ * UI (icon/viewer/thumbnail). Drives `detectAssetKind` in
455
+ * src/services/assets/base.ts and the asset STORE, NOT any entity schema.
456
+ *
457
+ * The `asset` ENTITY type was retired (asset-as-embed §6 / Phase F): an
458
+ * imported binary now becomes a typed entry (material/document/dataset) that
459
+ * embeds a free-standing, folder-owned asset. The store (assets.db +
460
+ * immutable-key blobs + serving routes) stays.
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'),
303
- });
462
+ export const ASSET_KINDS = [
463
+ 'image', 'video', 'audio', 'pdf', 'spreadsheet', 'other',
464
+ ];
465
+ // ══════════════════════════════════════════════════════════════════════════════
466
+ // SYSTEM — comment (virtual entity, SQLite-backed)
467
+ // ══════════════════════════════════════════════════════════════════════════════
304
468
  /**
305
- * Case Study portfolio narratives for completed projects
469
+ * Commenta threaded comment anchored to another entry. Unlike every other
470
+ * entity type, comments are NOT stored as markdown files; they live in
471
+ * `comments.db` (see `src/services/comment-service.ts`) for throughput.
472
+ * Agents see them as first-class typed entities through the virtual-entity
473
+ * adapter (`src/mcp/comment-virtual-entity.ts`), which is why the schema
474
+ * lives here alongside the file-backed types.
475
+ *
476
+ * The shape documents what fields the MCP envelope exposes; runtime
477
+ * validation happens inside CommentService itself.
306
478
  */
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'),
479
+ export const CommentSchema = EntityBaseSchema.extend({
480
+ entity_type: z.literal('comment'),
481
+ repo: z.string().describe('Folder the anchored entry lives in'),
482
+ entry_type: z.string().describe('Entity type of the anchored entry'),
483
+ entry_id: z.string().describe('Entity id of the anchored entry'),
484
+ thread_id: z.string().describe('Head comment id; replies share the same thread_id'),
485
+ parent_id: z.string().nullable().optional().describe('Parent comment id for replies, null on the head'),
486
+ author_user_id: z.number().int().describe('users.id of the author'),
487
+ author_role: z.enum(['user', 'agent']).describe('Whether the author was a human or the agent'),
488
+ anchor_quote: z.string().nullable().optional()
489
+ .describe('Original highlighted text at creation time, ≤256 chars (used for orphan rendering)'),
490
+ resolved_at: z.string().nullable().optional(),
491
+ resolved_by_user_id: z.number().int().nullable().optional(),
492
+ edited: z.boolean().optional(),
493
+ mentions: z.array(z.string()).optional().describe('Handles of mentioned users'),
316
494
  });
317
495
  // ══════════════════════════════════════════════════════════════════════════════
318
- // ══════════════════════════════════════════════════════════════════════════════
319
496
  // SCHEMA REGISTRY
320
497
  // ══════════════════════════════════════════════════════════════════════════════
321
498
  /**
322
- * Maps entity types to their Zod schemas.
323
- * 17 built-in types. App plugins register additional types at runtime via SchemaRegistry.
499
+ * Maps entity types to their Zod schemas. 17 canonical built-in types
500
+ * (16 user-facing + 1 system). Workspaces can register additional custom
501
+ * types via SchemaRegistry (schema_extensions).
324
502
  */
325
503
  export const ENTITY_SCHEMAS = {
326
- // Identity (4)
504
+ // CRM (4)
327
505
  person: PersonSchema,
328
506
  organization: OrganizationSchema,
329
- role: RoleSchema,
330
- 'practice-area': PracticeAreaSchema,
331
- // Universal (10)
507
+ position: PositionSchema,
508
+ deal: DealSchema,
509
+ // PM (4)
332
510
  project: ProjectSchema,
333
- meeting: MeetingSchema,
334
- decision: DecisionSchema,
511
+ event: EventSchema,
335
512
  task: TaskSchema,
336
- document: DocumentSchema,
337
- dataset: DatasetSchema,
338
- reference: ReferenceSchema,
339
- note: NoteSchema,
340
513
  deliverable: DeliverableSchema,
514
+ // KM — authored (6)
515
+ document: DocumentSchema,
516
+ deck: DeckSchema,
341
517
  publication: PublicationSchema,
342
- deal: DealSchema,
343
- // Knowledge (3)
344
- process: ProcessSchema,
345
- standard: StandardSchema,
346
518
  'case-study': CaseStudySchema,
519
+ service: ServiceSchema,
520
+ skill: SkillSchema,
521
+ // Capture (4)
522
+ note: NoteSchema,
523
+ reference: ReferenceSchema,
524
+ dataset: DatasetSchema,
525
+ material: MaterialSchema,
526
+ // System (1)
527
+ comment: CommentSchema,
347
528
  };
529
+ /**
530
+ * Retired entity-type names that must never be (re-)created, even if a legacy
531
+ * workspace still carries a `schema_extensions.<name>` for them. `asset` was
532
+ * retired in Phase F (asset-as-embed): binaries are now free-standing in
533
+ * assets.db and embedded by typed entries (material/document/dataset), so a
534
+ * file-backed `asset` entity would be an unvalidatable base-only stub. Enforced
535
+ * at the entity-creation entry points (graph.changeType, the web create route,
536
+ * and getAgentAllowedEntityTypes).
537
+ */
538
+ export const RESERVED_ENTITY_TYPES = new Set(['asset']);
348
539
  /**
349
540
  * Plural subfolder name → singular entity_type mapping
350
541
  */
351
542
  export const PLURAL_TO_SINGULAR = {
352
543
  'people': 'person',
353
544
  'organizations': 'organization',
354
- 'roles': 'role',
355
- 'practice-areas': 'practice-area',
545
+ 'positions': 'position',
546
+ 'deals': 'deal',
356
547
  'projects': 'project',
357
- 'meetings': 'meeting',
358
- 'decisions': 'decision',
548
+ 'events': 'event',
359
549
  'tasks': 'task',
360
- 'documents': 'document',
361
- 'datasets': 'dataset',
362
- 'references': 'reference',
363
- 'notes': 'note',
364
550
  'deliverables': 'deliverable',
551
+ 'documents': 'document',
552
+ 'decks': 'deck',
365
553
  'publications': 'publication',
366
- 'deals': 'deal',
367
- 'processes': 'process',
368
- 'standards': 'standard',
369
554
  'case-studies': 'case-study',
555
+ 'services': 'service',
556
+ 'skills': 'skill',
557
+ 'notes': 'note',
558
+ 'references': 'reference',
559
+ 'datasets': 'dataset',
560
+ 'materials': 'material',
561
+ 'comments': 'comment',
370
562
  };
371
563
  /**
372
564
  * Singular entity_type → plural subfolder name mapping
373
565
  */
374
566
  export const SINGULAR_TO_PLURAL = Object.fromEntries(Object.entries(PLURAL_TO_SINGULAR).map(([plural, singular]) => [singular, plural]));
567
+ /**
568
+ * Cross-field task rule: a task's start date must not fall after its due date.
569
+ *
570
+ * This lives OUTSIDE the Zod schema on purpose. Expressing it as a
571
+ * `TaskSchema.refine(...)` would turn the ZodObject into a ZodEffects, which
572
+ * breaks shape introspection in schema-registry (`describeZodObject` and the
573
+ * schema_extensions `.extend()` path both rely on `instanceof z.ZodObject`) —
574
+ * and that powers the metadata field panel. So both validation entry points
575
+ * (this module's `validateEntity` and `graph.ts`'s private one) call this
576
+ * helper after a successful parse instead.
577
+ *
578
+ * `dateField` stores ISO 'YYYY-MM-DD' strings, so a lexicographic comparison
579
+ * is a correct date comparison.
580
+ */
581
+ export function assertValidTaskDates(data) {
582
+ if (data.start_date && data.date && data.start_date > data.date) {
583
+ 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})`);
584
+ }
585
+ }
375
586
  /**
376
587
  * Validation helper with helpful error messages
377
588
  */
@@ -381,11 +592,14 @@ export function validateEntity(entityType, data) {
381
592
  throw new Error(`Unknown entity type: ${entityType}`);
382
593
  }
383
594
  try {
384
- return schema.parse(data);
595
+ const parsed = schema.parse(data);
596
+ if (entityType === 'task')
597
+ assertValidTaskDates(parsed);
598
+ return parsed;
385
599
  }
386
600
  catch (error) {
387
601
  if (error instanceof z.ZodError) {
388
- const messages = error.errors.map(e => {
602
+ const messages = error.issues.map(e => {
389
603
  const path = e.path.join('.');
390
604
  return ` - ${path}: ${e.message}`;
391
605
  });
@@ -403,7 +617,7 @@ export function validateCustomEntity(data) {
403
617
  }
404
618
  catch (error) {
405
619
  if (error instanceof z.ZodError) {
406
- const messages = error.errors.map(e => {
620
+ const messages = error.issues.map(e => {
407
621
  const path = e.path.join('.');
408
622
  return ` - ${path}: ${e.message}`;
409
623
  });