studiograph 1.3.48-next.21 → 1.3.48-next.210

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (966) hide show
  1. package/README.md +26 -16
  2. package/dist/agent/agent-pool.d.ts +87 -3
  3. package/dist/agent/agent-pool.js +188 -15
  4. package/dist/agent/agent-pool.js.map +1 -1
  5. package/dist/agent/followups.d.ts +34 -0
  6. package/dist/agent/followups.js +52 -0
  7. package/dist/agent/followups.js.map +1 -0
  8. package/dist/agent/orchestrator.d.ts +101 -4
  9. package/dist/agent/orchestrator.js +464 -66
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +34 -0
  12. package/dist/agent/prompts/entity-types-section.js +76 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +112 -54
  15. package/dist/agent/skill-loader.d.ts +30 -17
  16. package/dist/agent/skill-loader.js +63 -30
  17. package/dist/agent/skill-loader.js.map +1 -1
  18. package/dist/agent/skills/artifact-canvas/skill.md +152 -0
  19. package/dist/agent/skills/entity-schema.md +75 -431
  20. package/dist/agent/skills/interview/entity-templates.md +38 -37
  21. package/dist/agent/skills/interview/question-domains.md +54 -49
  22. package/dist/agent/skills/interview/skill.md +84 -16
  23. package/dist/agent/skills/schema-rules.md +28 -28
  24. package/dist/agent/tools/artifact-tools.d.ts +124 -0
  25. package/dist/agent/tools/artifact-tools.js +207 -0
  26. package/dist/agent/tools/artifact-tools.js.map +1 -0
  27. package/dist/agent/tools/capture-tools.d.ts +31 -0
  28. package/dist/agent/tools/capture-tools.js +40 -0
  29. package/dist/agent/tools/capture-tools.js.map +1 -0
  30. package/dist/agent/tools/folder-tools.d.ts +47 -0
  31. package/dist/agent/tools/folder-tools.js +249 -0
  32. package/dist/agent/tools/folder-tools.js.map +1 -0
  33. package/dist/agent/tools/fs-tools.d.ts +6 -5
  34. package/dist/agent/tools/fs-tools.js +5 -5
  35. package/dist/agent/tools/fs-tools.js.map +1 -1
  36. package/dist/agent/tools/graph-tools.d.ts +48 -72
  37. package/dist/agent/tools/graph-tools.js +852 -329
  38. package/dist/agent/tools/graph-tools.js.map +1 -1
  39. package/dist/agent/tools/history-tools.d.ts +95 -0
  40. package/dist/agent/tools/history-tools.js +461 -0
  41. package/dist/agent/tools/history-tools.js.map +1 -0
  42. package/dist/agent/tools/load-skill.d.ts +6 -5
  43. package/dist/agent/tools/load-skill.js +3 -3
  44. package/dist/agent/tools/load-skill.js.map +1 -1
  45. package/dist/agent/tools/ops-tools.d.ts +5 -4
  46. package/dist/agent/tools/ops-tools.js +130 -236
  47. package/dist/agent/tools/ops-tools.js.map +1 -1
  48. package/dist/agent/tools/permission-tools.d.ts +87 -17
  49. package/dist/agent/tools/permission-tools.js +233 -43
  50. package/dist/agent/tools/permission-tools.js.map +1 -1
  51. package/dist/agent/tools/tool-loader.js +5 -4
  52. package/dist/agent/tools/tool-loader.js.map +1 -1
  53. package/dist/agent/tools/web-tools.js +58 -9
  54. package/dist/agent/tools/web-tools.js.map +1 -1
  55. package/dist/cli/commands/about.d.ts +1 -0
  56. package/dist/cli/commands/about.js +55 -3
  57. package/dist/cli/commands/about.js.map +1 -1
  58. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  59. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  60. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  61. package/dist/cli/commands/admin/audit.d.ts +21 -0
  62. package/dist/cli/commands/admin/audit.js +174 -0
  63. package/dist/cli/commands/admin/audit.js.map +1 -0
  64. package/dist/cli/commands/admin/backup.d.ts +54 -0
  65. package/dist/cli/commands/admin/backup.js +207 -0
  66. package/dist/cli/commands/admin/backup.js.map +1 -0
  67. package/dist/cli/commands/admin/folder.d.ts +11 -0
  68. package/dist/cli/commands/{collection.js → admin/folder.js} +33 -32
  69. package/dist/cli/commands/admin/folder.js.map +1 -0
  70. package/dist/cli/commands/admin/index.d.ts +16 -0
  71. package/dist/cli/commands/admin/index.js +46 -0
  72. package/dist/cli/commands/admin/index.js.map +1 -0
  73. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  74. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  75. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  76. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  77. package/dist/cli/commands/admin/migrate.js +263 -0
  78. package/dist/cli/commands/admin/migrate.js.map +1 -0
  79. package/dist/cli/commands/admin/restore.d.ts +24 -0
  80. package/dist/cli/commands/admin/restore.js +228 -0
  81. package/dist/cli/commands/admin/restore.js.map +1 -0
  82. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  83. package/dist/cli/commands/admin/secrets.js +256 -0
  84. package/dist/cli/commands/admin/secrets.js.map +1 -0
  85. package/dist/cli/commands/admin/settings.d.ts +28 -0
  86. package/dist/cli/commands/admin/settings.js +284 -0
  87. package/dist/cli/commands/admin/settings.js.map +1 -0
  88. package/dist/cli/commands/admin/token.d.ts +42 -0
  89. package/dist/cli/commands/admin/token.js +126 -0
  90. package/dist/cli/commands/admin/token.js.map +1 -0
  91. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  92. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  93. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  94. package/dist/cli/commands/admin/user.d.ts +11 -0
  95. package/dist/cli/commands/admin/user.js +187 -0
  96. package/dist/cli/commands/admin/user.js.map +1 -0
  97. package/dist/cli/commands/clone.d.ts +25 -3
  98. package/dist/cli/commands/clone.js +142 -36
  99. package/dist/cli/commands/clone.js.map +1 -1
  100. package/dist/cli/commands/config.d.ts +23 -107
  101. package/dist/cli/commands/config.js +52 -260
  102. package/dist/cli/commands/config.js.map +1 -1
  103. package/dist/cli/commands/connector.d.ts +10 -13
  104. package/dist/cli/commands/connector.js +16 -58
  105. package/dist/cli/commands/connector.js.map +1 -1
  106. package/dist/cli/commands/deploy.js +215 -68
  107. package/dist/cli/commands/deploy.js.map +1 -1
  108. package/dist/cli/commands/index.js +5 -1
  109. package/dist/cli/commands/index.js.map +1 -1
  110. package/dist/cli/commands/init.js +10 -30
  111. package/dist/cli/commands/init.js.map +1 -1
  112. package/dist/cli/commands/mcp.js +54 -6
  113. package/dist/cli/commands/mcp.js.map +1 -1
  114. package/dist/cli/commands/r2.d.ts +3 -0
  115. package/dist/cli/commands/r2.js +223 -204
  116. package/dist/cli/commands/r2.js.map +1 -1
  117. package/dist/cli/commands/redeploy.js +65 -12
  118. package/dist/cli/commands/redeploy.js.map +1 -1
  119. package/dist/cli/commands/reset.d.ts +22 -6
  120. package/dist/cli/commands/reset.js +132 -34
  121. package/dist/cli/commands/reset.js.map +1 -1
  122. package/dist/cli/commands/serve.js +231 -26
  123. package/dist/cli/commands/serve.js.map +1 -1
  124. package/dist/cli/commands/sync.d.ts +1 -1
  125. package/dist/cli/commands/sync.js +237 -227
  126. package/dist/cli/commands/sync.js.map +1 -1
  127. package/dist/cli/crypto-bundle.d.ts +39 -0
  128. package/dist/cli/crypto-bundle.js +94 -0
  129. package/dist/cli/crypto-bundle.js.map +1 -0
  130. package/dist/cli/index.js +24 -26
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/cli/railway-pin.d.ts +68 -0
  133. package/dist/cli/railway-pin.js +96 -0
  134. package/dist/cli/railway-pin.js.map +1 -0
  135. package/dist/cli/railway-provisioning.d.ts +53 -0
  136. package/dist/cli/railway-provisioning.js +85 -0
  137. package/dist/cli/railway-provisioning.js.map +1 -0
  138. package/dist/cli/setup-wizard.d.ts +30 -49
  139. package/dist/cli/setup-wizard.js +39 -40
  140. package/dist/cli/setup-wizard.js.map +1 -1
  141. package/dist/core/accent-palette.d.ts +22 -0
  142. package/dist/core/accent-palette.js +47 -0
  143. package/dist/core/accent-palette.js.map +1 -0
  144. package/dist/core/artifact-asset-urls.d.ts +51 -0
  145. package/dist/core/artifact-asset-urls.js +79 -0
  146. package/dist/core/artifact-asset-urls.js.map +1 -0
  147. package/dist/core/artifact-bundle.d.ts +69 -0
  148. package/dist/core/artifact-bundle.js +305 -0
  149. package/dist/core/artifact-bundle.js.map +1 -0
  150. package/dist/core/artifact-escape.d.ts +5 -0
  151. package/dist/core/artifact-escape.js +26 -0
  152. package/dist/core/artifact-escape.js.map +1 -0
  153. package/dist/core/artifact-export.d.ts +17 -0
  154. package/dist/core/artifact-export.js +529 -0
  155. package/dist/core/artifact-export.js.map +1 -0
  156. package/dist/core/cell-anchor.d.ts +29 -0
  157. package/dist/core/cell-anchor.js +53 -0
  158. package/dist/core/cell-anchor.js.map +1 -0
  159. package/dist/core/comment-anchor.d.ts +41 -0
  160. package/dist/core/comment-anchor.js +147 -0
  161. package/dist/core/comment-anchor.js.map +1 -0
  162. package/dist/core/commit-messages.d.ts +57 -0
  163. package/dist/core/commit-messages.js +85 -0
  164. package/dist/core/commit-messages.js.map +1 -0
  165. package/dist/core/embeds.d.ts +96 -0
  166. package/dist/core/embeds.js +187 -0
  167. package/dist/core/embeds.js.map +1 -0
  168. package/dist/core/entity-body-templates.d.ts +21 -0
  169. package/dist/core/entity-body-templates.js +67 -0
  170. package/dist/core/entity-body-templates.js.map +1 -0
  171. package/dist/core/entity-types-catalog.d.ts +65 -0
  172. package/dist/core/entity-types-catalog.js +142 -0
  173. package/dist/core/entity-types-catalog.js.map +1 -0
  174. package/dist/core/field-library.d.ts +62 -0
  175. package/dist/core/field-library.js +129 -0
  176. package/dist/core/field-library.js.map +1 -0
  177. package/dist/core/folder-paths.d.ts +41 -0
  178. package/dist/core/folder-paths.js +95 -0
  179. package/dist/core/folder-paths.js.map +1 -0
  180. package/dist/core/folder-sidecar.d.ts +36 -0
  181. package/dist/core/folder-sidecar.js +91 -0
  182. package/dist/core/folder-sidecar.js.map +1 -0
  183. package/dist/core/format-registry.d.ts +170 -0
  184. package/dist/core/format-registry.js +412 -0
  185. package/dist/core/format-registry.js.map +1 -0
  186. package/dist/core/graph.d.ts +773 -14
  187. package/dist/core/graph.js +2269 -308
  188. package/dist/core/graph.js.map +1 -1
  189. package/dist/core/history-diff.d.ts +35 -0
  190. package/dist/core/history-diff.js +114 -0
  191. package/dist/core/history-diff.js.map +1 -0
  192. package/dist/core/refs.d.ts +41 -0
  193. package/dist/core/refs.js +80 -0
  194. package/dist/core/refs.js.map +1 -0
  195. package/dist/core/schema-registry.d.ts +66 -0
  196. package/dist/core/schema-registry.js +198 -37
  197. package/dist/core/schema-registry.js.map +1 -1
  198. package/dist/core/schemas/connector.d.ts +67 -0
  199. package/dist/core/schemas/connector.js +100 -0
  200. package/dist/core/schemas/connector.js.map +1 -0
  201. package/dist/core/schemas/workspace.d.ts +122 -0
  202. package/dist/core/schemas/workspace.js +211 -0
  203. package/dist/core/schemas/workspace.js.map +1 -0
  204. package/dist/core/secrets/SecretStore.d.ts +77 -0
  205. package/dist/core/secrets/SecretStore.js +13 -0
  206. package/dist/core/secrets/SecretStore.js.map +1 -0
  207. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  208. package/dist/core/secrets/SettingsResolver.js +80 -0
  209. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  210. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  211. package/dist/core/secrets/SettingsStore.js +9 -0
  212. package/dist/core/secrets/SettingsStore.js.map +1 -0
  213. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  214. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  215. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  216. package/dist/core/secrets/audit.d.ts +36 -0
  217. package/dist/core/secrets/audit.js +60 -0
  218. package/dist/core/secrets/audit.js.map +1 -0
  219. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  220. package/dist/core/secrets/auth-db-migration.js +653 -0
  221. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  222. package/dist/core/secrets/bundle.d.ts +141 -0
  223. package/dist/core/secrets/bundle.js +435 -0
  224. package/dist/core/secrets/bundle.js.map +1 -0
  225. package/dist/core/secrets/dual-write.d.ts +81 -0
  226. package/dist/core/secrets/dual-write.js +247 -0
  227. package/dist/core/secrets/dual-write.js.map +1 -0
  228. package/dist/core/secrets/encryption.d.ts +44 -0
  229. package/dist/core/secrets/encryption.js +97 -0
  230. package/dist/core/secrets/encryption.js.map +1 -0
  231. package/dist/core/secrets/index.d.ts +49 -0
  232. package/dist/core/secrets/index.js +74 -0
  233. package/dist/core/secrets/index.js.map +1 -0
  234. package/dist/core/secrets/master-key.d.ts +38 -0
  235. package/dist/core/secrets/master-key.js +122 -0
  236. package/dist/core/secrets/master-key.js.map +1 -0
  237. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  238. package/dist/core/secrets/probes/anthropic.js +300 -0
  239. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  240. package/dist/core/secrets/probes/brave.d.ts +9 -0
  241. package/dist/core/secrets/probes/brave.js +15 -0
  242. package/dist/core/secrets/probes/brave.js.map +1 -0
  243. package/dist/core/secrets/probes/r2.d.ts +15 -0
  244. package/dist/core/secrets/probes/r2.js +14 -0
  245. package/dist/core/secrets/probes/r2.js.map +1 -0
  246. package/dist/core/secrets/probes/tavily.d.ts +18 -0
  247. package/dist/core/secrets/probes/tavily.js +58 -0
  248. package/dist/core/secrets/probes/tavily.js.map +1 -0
  249. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  250. package/dist/core/secrets/probes/voyage.js +52 -0
  251. package/dist/core/secrets/probes/voyage.js.map +1 -0
  252. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  253. package/dist/core/secrets/r2-structural-migration.js +109 -0
  254. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  255. package/dist/core/secrets/read-flip.d.ts +59 -0
  256. package/dist/core/secrets/read-flip.js +87 -0
  257. package/dist/core/secrets/read-flip.js.map +1 -0
  258. package/dist/core/secrets/registry.d.ts +188 -0
  259. package/dist/core/secrets/registry.js +616 -0
  260. package/dist/core/secrets/registry.js.map +1 -0
  261. package/dist/core/types.d.ts +77 -483
  262. package/dist/core/types.js +25 -3
  263. package/dist/core/types.js.map +1 -1
  264. package/dist/core/user-config.d.ts +75 -12
  265. package/dist/core/user-config.js +155 -14
  266. package/dist/core/user-config.js.map +1 -1
  267. package/dist/core/validation.d.ts +786 -1373
  268. package/dist/core/validation.js +458 -147
  269. package/dist/core/validation.js.map +1 -1
  270. package/dist/core/workspace-manager.d.ts +87 -14
  271. package/dist/core/workspace-manager.js +222 -94
  272. package/dist/core/workspace-manager.js.map +1 -1
  273. package/dist/core/workspace.d.ts +19 -5
  274. package/dist/core/workspace.js +67 -39
  275. package/dist/core/workspace.js.map +1 -1
  276. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  277. package/dist/mcp/comment-virtual-entity.js +71 -0
  278. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  279. package/dist/mcp/connector-manager.d.ts +72 -2
  280. package/dist/mcp/connector-manager.js +211 -32
  281. package/dist/mcp/connector-manager.js.map +1 -1
  282. package/dist/mcp/oauth-provider.d.ts +0 -5
  283. package/dist/mcp/oauth-provider.js +10 -22
  284. package/dist/mcp/oauth-provider.js.map +1 -1
  285. package/dist/mcp/oauth-registry.d.ts +46 -8
  286. package/dist/mcp/oauth-registry.js +52 -13
  287. package/dist/mcp/oauth-registry.js.map +1 -1
  288. package/dist/mcp/server-discovery.d.ts +73 -0
  289. package/dist/mcp/server-discovery.js +164 -0
  290. package/dist/mcp/server-discovery.js.map +1 -0
  291. package/dist/mcp/server.d.ts +24 -3
  292. package/dist/mcp/server.js +53 -10
  293. package/dist/mcp/server.js.map +1 -1
  294. package/dist/mcp/state-signer.d.ts +62 -0
  295. package/dist/mcp/state-signer.js +205 -0
  296. package/dist/mcp/state-signer.js.map +1 -0
  297. package/dist/mcp/stdio-proxy.d.ts +67 -0
  298. package/dist/mcp/stdio-proxy.js +149 -0
  299. package/dist/mcp/stdio-proxy.js.map +1 -0
  300. package/dist/mcp/tools.d.ts +65 -2
  301. package/dist/mcp/tools.js +1772 -124
  302. package/dist/mcp/tools.js.map +1 -1
  303. package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
  304. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  305. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  306. package/dist/server/artifact-asset-mint.d.ts +41 -0
  307. package/dist/server/artifact-asset-mint.js +59 -0
  308. package/dist/server/artifact-asset-mint.js.map +1 -0
  309. package/dist/server/asset-index-queue.d.ts +98 -0
  310. package/dist/server/asset-index-queue.js +193 -0
  311. package/dist/server/asset-index-queue.js.map +1 -0
  312. package/dist/server/body-write-coordinator.d.ts +161 -0
  313. package/dist/server/body-write-coordinator.js +182 -0
  314. package/dist/server/body-write-coordinator.js.map +1 -0
  315. package/dist/server/cloud-billing-flow.d.ts +32 -0
  316. package/dist/server/cloud-billing-flow.js +75 -0
  317. package/dist/server/cloud-billing-flow.js.map +1 -0
  318. package/dist/server/commit-audit.d.ts +26 -0
  319. package/dist/server/commit-audit.js +30 -0
  320. package/dist/server/commit-audit.js.map +1 -0
  321. package/dist/server/index.d.ts +29 -3
  322. package/dist/server/index.js +657 -269
  323. package/dist/server/index.js.map +1 -1
  324. package/dist/server/middleware/sanitize.d.ts +46 -0
  325. package/dist/server/middleware/sanitize.js +182 -0
  326. package/dist/server/middleware/sanitize.js.map +1 -0
  327. package/dist/server/routes/artifact-export-api.d.ts +11 -0
  328. package/dist/server/routes/artifact-export-api.js +159 -0
  329. package/dist/server/routes/artifact-export-api.js.map +1 -0
  330. package/dist/server/routes/asset-api.d.ts +76 -1
  331. package/dist/server/routes/asset-api.js +761 -61
  332. package/dist/server/routes/asset-api.js.map +1 -1
  333. package/dist/server/routes/audit-api.d.ts +24 -0
  334. package/dist/server/routes/audit-api.js +117 -0
  335. package/dist/server/routes/audit-api.js.map +1 -0
  336. package/dist/server/routes/auth-api.js +532 -63
  337. package/dist/server/routes/auth-api.js.map +1 -1
  338. package/dist/server/routes/capture-api.d.ts +10 -3
  339. package/dist/server/routes/capture-api.js +213 -25
  340. package/dist/server/routes/capture-api.js.map +1 -1
  341. package/dist/server/routes/chat-sessions-api.d.ts +13 -0
  342. package/dist/server/routes/chat-sessions-api.js +455 -0
  343. package/dist/server/routes/chat-sessions-api.js.map +1 -0
  344. package/dist/server/routes/chat.d.ts +35 -1
  345. package/dist/server/routes/chat.js +699 -54
  346. package/dist/server/routes/chat.js.map +1 -1
  347. package/dist/server/routes/comments-api.d.ts +15 -0
  348. package/dist/server/routes/comments-api.js +444 -0
  349. package/dist/server/routes/comments-api.js.map +1 -0
  350. package/dist/server/routes/config-api.d.ts +3 -2
  351. package/dist/server/routes/config-api.js +179 -49
  352. package/dist/server/routes/config-api.js.map +1 -1
  353. package/dist/server/routes/connectors-api.js +177 -42
  354. package/dist/server/routes/connectors-api.js.map +1 -1
  355. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  356. package/dist/server/routes/{meeting-ingest-api.js → event-ingest-api.js} +35 -20
  357. package/dist/server/routes/event-ingest-api.js.map +1 -0
  358. package/dist/server/routes/field-library-api.d.ts +28 -0
  359. package/dist/server/routes/field-library-api.js +126 -0
  360. package/dist/server/routes/field-library-api.js.map +1 -0
  361. package/dist/server/routes/git-http.d.ts +2 -2
  362. package/dist/server/routes/git-http.js +86 -39
  363. package/dist/server/routes/git-http.js.map +1 -1
  364. package/dist/server/routes/graph-api-access.d.ts +57 -0
  365. package/dist/server/routes/graph-api-access.js +112 -0
  366. package/dist/server/routes/graph-api-access.js.map +1 -0
  367. package/dist/server/routes/graph-api.d.ts +1 -1
  368. package/dist/server/routes/graph-api.js +1455 -325
  369. package/dist/server/routes/graph-api.js.map +1 -1
  370. package/dist/server/routes/health.d.ts +18 -0
  371. package/dist/server/routes/health.js +74 -0
  372. package/dist/server/routes/health.js.map +1 -0
  373. package/dist/server/routes/import-batch.d.ts +24 -0
  374. package/dist/server/routes/import-batch.js +33 -0
  375. package/dist/server/routes/import-batch.js.map +1 -0
  376. package/dist/server/routes/insights-api.d.ts +9 -2
  377. package/dist/server/routes/insights-api.js +355 -61
  378. package/dist/server/routes/insights-api.js.map +1 -1
  379. package/dist/server/routes/mcp.d.ts +7 -3
  380. package/dist/server/routes/mcp.js +24 -8
  381. package/dist/server/routes/mcp.js.map +1 -1
  382. package/dist/server/routes/oauth-api.d.ts +67 -0
  383. package/dist/server/routes/oauth-api.js +421 -0
  384. package/dist/server/routes/oauth-api.js.map +1 -0
  385. package/dist/server/routes/permissions-api.d.ts +9 -2
  386. package/dist/server/routes/permissions-api.js +87 -31
  387. package/dist/server/routes/permissions-api.js.map +1 -1
  388. package/dist/server/routes/r2-api.d.ts +25 -0
  389. package/dist/server/routes/r2-api.js +276 -0
  390. package/dist/server/routes/r2-api.js.map +1 -0
  391. package/dist/server/routes/secrets-api.d.ts +36 -0
  392. package/dist/server/routes/secrets-api.js +308 -0
  393. package/dist/server/routes/secrets-api.js.map +1 -0
  394. package/dist/server/routes/settings-api.d.ts +29 -0
  395. package/dist/server/routes/settings-api.js +180 -0
  396. package/dist/server/routes/settings-api.js.map +1 -0
  397. package/dist/server/routes/share-api.d.ts +32 -0
  398. package/dist/server/routes/share-api.js +234 -0
  399. package/dist/server/routes/share-api.js.map +1 -0
  400. package/dist/server/routes/views-api.js +51 -0
  401. package/dist/server/routes/views-api.js.map +1 -1
  402. package/dist/server/routes/workspace-api.d.ts +2 -1
  403. package/dist/server/routes/workspace-api.js +142 -23
  404. package/dist/server/routes/workspace-api.js.map +1 -1
  405. package/dist/server/routes/ws.d.ts +3 -2
  406. package/dist/server/routes/ws.js +68 -17
  407. package/dist/server/routes/ws.js.map +1 -1
  408. package/dist/server/session-manager.d.ts +48 -5
  409. package/dist/server/session-manager.js +182 -14
  410. package/dist/server/session-manager.js.map +1 -1
  411. package/dist/server/ws-hub.d.ts +124 -37
  412. package/dist/server/ws-hub.js +0 -0
  413. package/dist/server/ws-hub.js.map +1 -1
  414. package/dist/server/yjs-manager.d.ts +278 -7
  415. package/dist/server/yjs-manager.js +830 -38
  416. package/dist/server/yjs-manager.js.map +1 -1
  417. package/dist/server/yjs-persistence.d.ts +165 -0
  418. package/dist/server/yjs-persistence.js +557 -0
  419. package/dist/server/yjs-persistence.js.map +1 -0
  420. package/dist/server/yjs-text-diff.d.ts +32 -0
  421. package/dist/server/yjs-text-diff.js +61 -0
  422. package/dist/server/yjs-text-diff.js.map +1 -0
  423. package/dist/services/access-control.d.ts +73 -0
  424. package/dist/services/access-control.js +165 -0
  425. package/dist/services/access-control.js.map +1 -0
  426. package/dist/services/artifact-asset-token.d.ts +69 -0
  427. package/dist/services/artifact-asset-token.js +94 -0
  428. package/dist/services/artifact-asset-token.js.map +1 -0
  429. package/dist/services/artifact-library-sources.d.ts +3 -0
  430. package/dist/services/artifact-library-sources.js +44 -0
  431. package/dist/services/artifact-library-sources.js.map +1 -0
  432. package/dist/services/artifact-render-export.d.ts +97 -0
  433. package/dist/services/artifact-render-export.js +467 -0
  434. package/dist/services/artifact-render-export.js.map +1 -0
  435. package/dist/services/asset-caption-service.d.ts +103 -0
  436. package/dist/services/asset-caption-service.js +186 -0
  437. package/dist/services/asset-caption-service.js.map +1 -0
  438. package/dist/services/asset-delete-authz.d.ts +31 -0
  439. package/dist/services/asset-delete-authz.js +61 -0
  440. package/dist/services/asset-delete-authz.js.map +1 -0
  441. package/dist/services/asset-finalize-service.d.ts +58 -0
  442. package/dist/services/asset-finalize-service.js +216 -0
  443. package/dist/services/asset-finalize-service.js.map +1 -0
  444. package/dist/services/asset-import-service.d.ts +111 -0
  445. package/dist/services/asset-import-service.js +394 -0
  446. package/dist/services/asset-import-service.js.map +1 -0
  447. package/dist/services/asset-index-sweep.d.ts +95 -0
  448. package/dist/services/asset-index-sweep.js +249 -0
  449. package/dist/services/asset-index-sweep.js.map +1 -0
  450. package/dist/services/asset-lifecycle-check.d.ts +22 -0
  451. package/dist/services/asset-lifecycle-check.js +80 -0
  452. package/dist/services/asset-lifecycle-check.js.map +1 -0
  453. package/dist/services/asset-listing.d.ts +72 -0
  454. package/dist/services/asset-listing.js +321 -0
  455. package/dist/services/asset-listing.js.map +1 -0
  456. package/dist/services/asset-presign-service.d.ts +68 -0
  457. package/dist/services/asset-presign-service.js +124 -0
  458. package/dist/services/asset-presign-service.js.map +1 -0
  459. package/dist/services/asset-sidecar-service.d.ts +28 -0
  460. package/dist/services/asset-sidecar-service.js +79 -0
  461. package/dist/services/asset-sidecar-service.js.map +1 -0
  462. package/dist/services/asset-upload-errors.d.ts +41 -0
  463. package/dist/services/asset-upload-errors.js +45 -0
  464. package/dist/services/asset-upload-errors.js.map +1 -0
  465. package/dist/services/asset-upload-service.d.ts +56 -0
  466. package/dist/services/asset-upload-service.js +200 -0
  467. package/dist/services/asset-upload-service.js.map +1 -0
  468. package/dist/services/asset-upload-token.d.ts +58 -0
  469. package/dist/services/asset-upload-token.js +75 -0
  470. package/dist/services/asset-upload-token.js.map +1 -0
  471. package/dist/services/assets/asset-index-service.d.ts +127 -0
  472. package/dist/services/assets/asset-index-service.js +227 -0
  473. package/dist/services/assets/asset-index-service.js.map +1 -0
  474. package/dist/services/assets/base.d.ts +128 -2
  475. package/dist/services/assets/base.js +98 -1
  476. package/dist/services/assets/base.js.map +1 -1
  477. package/dist/services/assets/index.d.ts +114 -1
  478. package/dist/services/assets/index.js +221 -0
  479. package/dist/services/assets/index.js.map +1 -1
  480. package/dist/services/assets/local.d.ts +16 -1
  481. package/dist/services/assets/local.js +110 -1
  482. package/dist/services/assets/local.js.map +1 -1
  483. package/dist/services/assets/r2-sync.d.ts +88 -0
  484. package/dist/services/assets/r2-sync.js +412 -0
  485. package/dist/services/assets/r2-sync.js.map +1 -0
  486. package/dist/services/assets/r2.d.ts +87 -1
  487. package/dist/services/assets/r2.js +203 -1
  488. package/dist/services/assets/r2.js.map +1 -1
  489. package/dist/services/auth-service.d.ts +312 -45
  490. package/dist/services/auth-service.js +1011 -195
  491. package/dist/services/auth-service.js.map +1 -1
  492. package/dist/services/chat-session-service.d.ts +188 -0
  493. package/dist/services/chat-session-service.js +512 -0
  494. package/dist/services/chat-session-service.js.map +1 -0
  495. package/dist/services/cloud-inference-billing.d.ts +64 -0
  496. package/dist/services/cloud-inference-billing.js +313 -0
  497. package/dist/services/cloud-inference-billing.js.map +1 -0
  498. package/dist/services/comment-service.d.ts +97 -0
  499. package/dist/services/comment-service.js +341 -0
  500. package/dist/services/comment-service.js.map +1 -0
  501. package/dist/services/comment-virtual-entity.d.ts +36 -0
  502. package/dist/services/comment-virtual-entity.js +71 -0
  503. package/dist/services/comment-virtual-entity.js.map +1 -0
  504. package/dist/services/convert-service.d.ts +64 -0
  505. package/dist/services/convert-service.js +68 -0
  506. package/dist/services/convert-service.js.map +1 -0
  507. package/dist/services/csv-service.d.ts +22 -17
  508. package/dist/services/csv-service.js +55 -92
  509. package/dist/services/csv-service.js.map +1 -1
  510. package/dist/services/entity-mutations.d.ts +213 -0
  511. package/dist/services/entity-mutations.js +380 -0
  512. package/dist/services/entity-mutations.js.map +1 -0
  513. package/dist/services/{meeting-processor.d.ts → event-processor.d.ts} +15 -8
  514. package/dist/services/{meeting-processor.js → event-processor.js} +124 -65
  515. package/dist/services/event-processor.js.map +1 -0
  516. package/dist/services/extract/docx.d.ts +1 -0
  517. package/dist/services/extract/docx.js +233 -0
  518. package/dist/services/extract/docx.js.map +1 -0
  519. package/dist/services/extract/index.d.ts +9 -0
  520. package/dist/services/extract/index.js +10 -0
  521. package/dist/services/extract/index.js.map +1 -0
  522. package/dist/services/extract/pdf.d.ts +13 -0
  523. package/dist/services/extract/pdf.js +69 -0
  524. package/dist/services/extract/pdf.js.map +1 -0
  525. package/dist/services/folder-creation.d.ts +33 -0
  526. package/dist/services/folder-creation.js +103 -0
  527. package/dist/services/folder-creation.js.map +1 -0
  528. package/dist/services/git.d.ts +58 -0
  529. package/dist/services/git.js +194 -55
  530. package/dist/services/git.js.map +1 -1
  531. package/dist/services/graph-maintenance.js +4 -4
  532. package/dist/services/graph-maintenance.js.map +1 -1
  533. package/dist/services/import-service.d.ts +51 -2
  534. package/dist/services/import-service.js +254 -107
  535. package/dist/services/import-service.js.map +1 -1
  536. package/dist/services/lint-service.js +10 -17
  537. package/dist/services/lint-service.js.map +1 -1
  538. package/dist/services/markdown.d.ts +12 -1
  539. package/dist/services/markdown.js +77 -9
  540. package/dist/services/markdown.js.map +1 -1
  541. package/dist/services/mention-detector.d.ts +23 -0
  542. package/dist/services/mention-detector.js +47 -0
  543. package/dist/services/mention-detector.js.map +1 -0
  544. package/dist/services/model-capabilities.d.ts +41 -0
  545. package/dist/services/model-capabilities.js +107 -0
  546. package/dist/services/model-capabilities.js.map +1 -0
  547. package/dist/services/notification-broadcast.d.ts +32 -0
  548. package/dist/services/notification-broadcast.js +38 -0
  549. package/dist/services/notification-broadcast.js.map +1 -0
  550. package/dist/services/notification-service.d.ts +41 -0
  551. package/dist/services/notification-service.js +100 -0
  552. package/dist/services/notification-service.js.map +1 -0
  553. package/dist/services/oauth-server-store.d.ts +147 -0
  554. package/dist/services/oauth-server-store.js +319 -0
  555. package/dist/services/oauth-server-store.js.map +1 -0
  556. package/dist/services/orphan-service.js +2 -2
  557. package/dist/services/orphan-service.js.map +1 -1
  558. package/dist/services/personal-folder.d.ts +40 -0
  559. package/dist/services/personal-folder.js +101 -0
  560. package/dist/services/personal-folder.js.map +1 -0
  561. package/dist/services/scratch-asset-promote.d.ts +57 -0
  562. package/dist/services/scratch-asset-promote.js +95 -0
  563. package/dist/services/scratch-asset-promote.js.map +1 -0
  564. package/dist/services/scratch-attachment-service.d.ts +196 -0
  565. package/dist/services/scratch-attachment-service.js +347 -0
  566. package/dist/services/scratch-attachment-service.js.map +1 -0
  567. package/dist/services/share-link-service.d.ts +57 -0
  568. package/dist/services/share-link-service.js +142 -0
  569. package/dist/services/share-link-service.js.map +1 -0
  570. package/dist/services/user-person-bridge.d.ts +136 -0
  571. package/dist/services/user-person-bridge.js +340 -0
  572. package/dist/services/user-person-bridge.js.map +1 -0
  573. package/dist/services/vector-service.d.ts +282 -5
  574. package/dist/services/vector-service.js +585 -29
  575. package/dist/services/vector-service.js.map +1 -1
  576. package/dist/services/workspace-access.d.ts +108 -0
  577. package/dist/services/workspace-access.js +149 -0
  578. package/dist/services/workspace-access.js.map +1 -0
  579. package/dist/services/workspace-assets-folder.d.ts +46 -0
  580. package/dist/services/workspace-assets-folder.js +75 -0
  581. package/dist/services/workspace-assets-folder.js.map +1 -0
  582. package/dist/utils/git.d.ts +17 -2
  583. package/dist/utils/git.js +23 -7
  584. package/dist/utils/git.js.map +1 -1
  585. package/dist/utils/log.d.ts +42 -0
  586. package/dist/utils/log.js +137 -0
  587. package/dist/utils/log.js.map +1 -0
  588. package/dist/utils/preflight.js +2 -2
  589. package/dist/utils/preflight.js.map +1 -1
  590. package/dist/utils/version-checker.d.ts +12 -19
  591. package/dist/utils/version-checker.js +14 -104
  592. package/dist/utils/version-checker.js.map +1 -1
  593. package/dist/web/_app/immutable/assets/0.Bs_z3Z86.css +2 -0
  594. package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
  595. package/dist/web/_app/immutable/assets/14.7d-Q37wc.css +1 -0
  596. package/dist/web/_app/immutable/assets/15.BwBFdc1D.css +1 -0
  597. package/dist/web/_app/immutable/assets/16.CmLrbzZp.css +1 -0
  598. package/dist/web/_app/immutable/assets/17.DcuK5ZVm.css +1 -0
  599. package/dist/web/_app/immutable/assets/2.DATnR31c.css +1 -0
  600. package/dist/web/_app/immutable/assets/3.Cz4H8n_O.css +1 -0
  601. package/dist/web/_app/immutable/assets/4.aDHteTDy.css +1 -0
  602. package/dist/web/_app/immutable/assets/6.CF1i5Bon.css +1 -0
  603. package/dist/web/_app/immutable/assets/ArtifactEntityView.C4ooklFD.css +1 -0
  604. package/dist/web/_app/immutable/assets/AssetLibraryPicker.BOFW0MvF.css +1 -0
  605. package/dist/web/_app/immutable/assets/BulkActionsBar.cmKvHzRK.css +1 -0
  606. package/dist/web/_app/immutable/assets/CalendarView.lBCvS3X5.css +1 -0
  607. package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
  608. package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
  609. package/dist/web/_app/immutable/assets/FolderMembersPanel.kiYnDFHu.css +1 -0
  610. package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
  611. package/dist/web/_app/immutable/assets/FolderPicker.Cp46GHe2.css +1 -0
  612. package/dist/web/_app/immutable/assets/GalleryView.WBGxxUQc.css +1 -0
  613. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  614. package/dist/web/_app/immutable/assets/KanbanView.BOaI5KFL.css +1 -0
  615. package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
  616. package/dist/web/_app/immutable/assets/Markdown.BZnsSOSf.css +1 -0
  617. package/dist/web/_app/immutable/assets/Rail.ilusFgD4.css +1 -0
  618. package/dist/web/_app/immutable/assets/SettingsDialog.D7-BO6S_.css +1 -0
  619. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  620. package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
  621. package/dist/web/_app/immutable/assets/TimelineView.xAZBJhHw.css +1 -0
  622. package/dist/web/_app/immutable/assets/WorkspaceView.C8ErUJAY.css +1 -0
  623. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  624. package/dist/web/_app/immutable/assets/history-summary.LpmHXasl.css +1 -0
  625. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  626. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  627. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  628. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  629. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  630. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  631. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  632. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  633. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  634. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  635. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  636. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  637. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  638. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  639. package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
  640. package/dist/web/_app/immutable/assets/list-columns.BgnafZ4K.css +1 -0
  641. package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
  642. package/dist/web/_app/immutable/assets/select.B90KUqR4.css +1 -0
  643. package/dist/web/_app/immutable/assets/sheet.RF9RBmml.css +1 -0
  644. package/dist/web/_app/immutable/chunks/22qYtvr82.js +1 -0
  645. package/dist/web/_app/immutable/chunks/3anKjXOb.js +1 -0
  646. package/dist/web/_app/immutable/chunks/6S9WOky52.js +1 -0
  647. package/dist/web/_app/immutable/chunks/7xJ91z7d.js +2 -0
  648. package/dist/web/_app/immutable/chunks/9K8VREGP.js +1 -0
  649. package/dist/web/_app/immutable/chunks/B-TGZnCt2.js +1 -0
  650. package/dist/web/_app/immutable/chunks/B-n5q6ku.js +1 -0
  651. package/dist/web/_app/immutable/chunks/B0p2fSEV2.js +1 -0
  652. package/dist/web/_app/immutable/chunks/B2oi87jG.js +2 -0
  653. package/dist/web/_app/immutable/chunks/B4DG5QOL.js +1 -0
  654. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  655. package/dist/web/_app/immutable/chunks/B6qeIQZz.js +2 -0
  656. package/dist/web/_app/immutable/chunks/B9KfEsQw2.js +1 -0
  657. package/dist/web/_app/immutable/chunks/B9VRF5aH2.js +1 -0
  658. package/dist/web/_app/immutable/chunks/BCQQzpbj.js +1 -0
  659. package/dist/web/_app/immutable/chunks/BF0vIqH9.js +1 -0
  660. package/dist/web/_app/immutable/chunks/BFp1K70l.js +8 -0
  661. package/dist/web/_app/immutable/chunks/BFr7Funh.js +1 -0
  662. package/dist/web/_app/immutable/chunks/BFx32D20.js +2 -0
  663. package/dist/web/_app/immutable/chunks/BLs1h0Rh2.js +1 -0
  664. package/dist/web/_app/immutable/chunks/BPzV_xOS2.js +1 -0
  665. package/dist/web/_app/immutable/chunks/BRvMjAzW.js +2 -0
  666. package/dist/web/_app/immutable/chunks/BV-iCKqa.js +1 -0
  667. package/dist/web/_app/immutable/chunks/BZi3uKF4.js +1 -0
  668. package/dist/web/_app/immutable/chunks/B_PyL87x.js +2 -0
  669. package/dist/web/_app/immutable/chunks/BbfHGU9n2.js +1 -0
  670. package/dist/web/_app/immutable/chunks/Bbqu2-5G2.js +1 -0
  671. package/dist/web/_app/immutable/chunks/BdWZJpmv.js +2 -0
  672. package/dist/web/_app/immutable/chunks/BfnFtsiY.js +1 -0
  673. package/dist/web/_app/immutable/chunks/BlgjVmFM2.js +14 -0
  674. package/dist/web/_app/immutable/chunks/BmgXvmIG.js +5 -0
  675. package/dist/web/_app/immutable/chunks/BpCG9m962.js +1 -0
  676. package/dist/web/_app/immutable/chunks/BrveeylZ.js +1 -0
  677. package/dist/web/_app/immutable/chunks/BsW72fyR2.js +1 -0
  678. package/dist/web/_app/immutable/chunks/Bti_XKwx.js +2692 -0
  679. package/dist/web/_app/immutable/chunks/BuhW5Fr0.js +689 -0
  680. package/dist/web/_app/immutable/chunks/Bx74EEyn2.js +1 -0
  681. package/dist/web/_app/immutable/chunks/BxPN0T61.js +1 -0
  682. package/dist/web/_app/immutable/chunks/Bxk27YWG.js +1 -0
  683. package/dist/web/_app/immutable/chunks/Bz9lrgGs.js +1 -0
  684. package/dist/web/_app/immutable/chunks/BzaxZ6j12.js +1 -0
  685. package/dist/web/_app/immutable/chunks/C1B4xDs0.js +1 -0
  686. package/dist/web/_app/immutable/chunks/C1trcC8M.js +7 -0
  687. package/dist/web/_app/immutable/chunks/C3F_NMTk.js +3 -0
  688. package/dist/web/_app/immutable/chunks/C4PZmGUQ.js +2 -0
  689. package/dist/web/_app/immutable/chunks/C6wYiSz8.js +1 -0
  690. package/dist/web/_app/immutable/chunks/C70saxIl.js +1 -0
  691. package/dist/web/_app/immutable/chunks/C9tvkk7Y2.js +22 -0
  692. package/dist/web/_app/immutable/chunks/CE1XZ5DE.js +1 -0
  693. package/dist/web/_app/immutable/chunks/CEahbtnP.js +1 -0
  694. package/dist/web/_app/immutable/chunks/CGkd0a-c2.js +2 -0
  695. package/dist/web/_app/immutable/chunks/CIoNEHQ82.js +184 -0
  696. package/dist/web/_app/immutable/chunks/CK4z74w5.js +1 -0
  697. package/dist/web/_app/immutable/chunks/COo3HgCZ.js +1 -0
  698. package/dist/web/_app/immutable/chunks/CP8_U450.js +1 -0
  699. package/dist/web/_app/immutable/chunks/CQ1eQ93t2.js +6 -0
  700. package/dist/web/_app/immutable/chunks/CQyBDccA.js +1 -0
  701. package/dist/web/_app/immutable/chunks/CUFQMEBn2.js +1 -0
  702. package/dist/web/_app/immutable/chunks/CV5OSCJc.js +1 -0
  703. package/dist/web/_app/immutable/chunks/CYEYDNwO2.js +1 -0
  704. package/dist/web/_app/immutable/chunks/CZgFaimi2.js +83 -0
  705. package/dist/web/_app/immutable/chunks/CZqvCTCv.js +1 -0
  706. package/dist/web/_app/immutable/chunks/CcWaWbrI2.js +1 -0
  707. package/dist/web/_app/immutable/chunks/CdtzRVZK.js +1 -0
  708. package/dist/web/_app/immutable/chunks/CfYG72Hc.js +1 -0
  709. package/dist/web/_app/immutable/chunks/Cg-ND0cl.js +1 -0
  710. package/dist/web/_app/immutable/chunks/Ch1kmm3J2.js +1 -0
  711. package/dist/web/_app/immutable/chunks/CjiMLTwX2.js +1 -0
  712. package/dist/web/_app/immutable/chunks/CkoeSJ8K.js +6 -0
  713. package/dist/web/_app/immutable/chunks/Cp87MaaW.js +1 -0
  714. package/dist/web/_app/immutable/chunks/Cqm5wAin.js +1 -0
  715. package/dist/web/_app/immutable/chunks/Ct1uesdW.js +2 -0
  716. package/dist/web/_app/immutable/chunks/CuYPXpWU.js +1 -0
  717. package/dist/web/_app/immutable/chunks/Cuq8J2Td.js +1 -0
  718. package/dist/web/_app/immutable/chunks/CvSEodTA.js +1 -0
  719. package/dist/web/_app/immutable/chunks/CvqqrTrj.js +1 -0
  720. package/dist/web/_app/immutable/chunks/CzXdOgVl2.js +7 -0
  721. package/dist/web/_app/immutable/chunks/D0W7c6Sg.js +185 -0
  722. package/dist/web/_app/immutable/chunks/D0rBhnqB2.js +1 -0
  723. package/dist/web/_app/immutable/chunks/D1-GZSN1.js +1 -0
  724. package/dist/web/_app/immutable/chunks/D1BLcNJ7.js +1 -0
  725. package/dist/web/_app/immutable/chunks/D1yvtriI.js +1 -0
  726. package/dist/web/_app/immutable/chunks/D25NMRpl.js +1 -0
  727. package/dist/web/_app/immutable/chunks/D3F675fu2.js +2 -0
  728. package/dist/web/_app/immutable/chunks/D4UrtGC1.js +1 -0
  729. package/dist/web/_app/immutable/chunks/D8wZ2xul.js +4 -0
  730. package/dist/web/_app/immutable/chunks/DA3HEX3X.js +1 -0
  731. package/dist/web/_app/immutable/chunks/DE2TCESD2.js +1 -0
  732. package/dist/web/_app/immutable/chunks/DN-gIRdd2.js +1 -0
  733. package/dist/web/_app/immutable/chunks/DPUVu0T0.js +1 -0
  734. package/dist/web/_app/immutable/chunks/DPcejqKZ.js +1 -0
  735. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  736. package/dist/web/_app/immutable/chunks/DRPMJ-3M.js +2 -0
  737. package/dist/web/_app/immutable/chunks/DRPnwQAm.js +1 -0
  738. package/dist/web/_app/immutable/chunks/DXmfl4Hq2.js +1 -0
  739. package/dist/web/_app/immutable/chunks/DXsFrDer2.js +1 -0
  740. package/dist/web/_app/immutable/chunks/DYc5KW3F.js +1 -0
  741. package/dist/web/_app/immutable/chunks/DcPrzUMJ.js +1 -0
  742. package/dist/web/_app/immutable/chunks/DdQVGKgM.js +1 -0
  743. package/dist/web/_app/immutable/chunks/DiFfW--R2.js +2 -0
  744. package/dist/web/_app/immutable/chunks/DjIqa1_y.js +2 -0
  745. package/dist/web/_app/immutable/chunks/Dl63IUnH2.js +224 -0
  746. package/dist/web/_app/immutable/chunks/DmFdD6zT.js +1 -0
  747. package/dist/web/_app/immutable/chunks/Dn3R8S-U.js +1 -0
  748. package/dist/web/_app/immutable/chunks/DpNr1GQ2.js +1 -0
  749. package/dist/web/_app/immutable/chunks/DsFEd8vL2.js +1 -0
  750. package/dist/web/_app/immutable/chunks/DuxziNnw.js +1 -0
  751. package/dist/web/_app/immutable/chunks/FuiJnZG0.js +1 -0
  752. package/dist/web/_app/immutable/chunks/Izkulod7.js +1 -0
  753. package/dist/web/_app/immutable/chunks/LYL8znYR2.js +23 -0
  754. package/dist/web/_app/immutable/chunks/ON7Gta0d.js +1 -0
  755. package/dist/web/_app/immutable/chunks/PhN6tXuJ2.js +1 -0
  756. package/dist/web/_app/immutable/chunks/PyLyCpuL.js +1 -0
  757. package/dist/web/_app/immutable/chunks/RG7IUVLn2.js +2 -0
  758. package/dist/web/_app/immutable/chunks/RK4gCWN0.js +2 -0
  759. package/dist/web/_app/immutable/chunks/SnzlL4ZV.js +1 -0
  760. package/dist/web/_app/immutable/chunks/XcWejFm_.js +5 -0
  761. package/dist/web/_app/immutable/chunks/Xkp5hSA1.js +1 -0
  762. package/dist/web/_app/immutable/chunks/al_nidE9.js +1 -0
  763. package/dist/web/_app/immutable/chunks/e50-izZO2.js +1 -0
  764. package/dist/web/_app/immutable/chunks/golz20La2.js +2 -0
  765. package/dist/web/_app/immutable/chunks/hG-QCarB.js +1 -0
  766. package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
  767. package/dist/web/_app/immutable/chunks/nXReuy-5.js +3 -0
  768. package/dist/web/_app/immutable/chunks/o61aZZFZ2.js +66 -0
  769. package/dist/web/_app/immutable/chunks/qwr5boV8.js +1 -0
  770. package/dist/web/_app/immutable/chunks/rjjyuGhb.js +1 -0
  771. package/dist/web/_app/immutable/chunks/uBgoVlsx.js +3 -0
  772. package/dist/web/_app/immutable/chunks/xY0c-UfG.js +3 -0
  773. package/dist/web/_app/immutable/chunks/xeNvx4Bl2.js +1 -0
  774. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  775. package/dist/web/_app/immutable/entry/app.dqA31fjy.js +2 -0
  776. package/dist/web/_app/immutable/entry/start.BB1XrAea.js +1 -0
  777. package/dist/web/_app/immutable/nodes/0.dALEQAnu.js +2 -0
  778. package/dist/web/_app/immutable/nodes/1.aFU32Ukj.js +1 -0
  779. package/dist/web/_app/immutable/nodes/10.C2wB-OnW.js +1 -0
  780. package/dist/web/_app/immutable/nodes/11.CI3a8Rj5.js +1 -0
  781. package/dist/web/_app/immutable/nodes/12.CsTvsKzB.js +1 -0
  782. package/dist/web/_app/immutable/nodes/13.CYrHXCA8.js +1 -0
  783. package/dist/web/_app/immutable/nodes/14.B31HrQ26.js +1 -0
  784. package/dist/web/_app/immutable/nodes/15.DxgnZ61h.js +1 -0
  785. package/dist/web/_app/immutable/nodes/16.DAP8cwVb.js +1 -0
  786. package/dist/web/_app/immutable/nodes/17.CmwXtCDY.js +77 -0
  787. package/dist/web/_app/immutable/nodes/2.BuGXEIlN.js +122 -0
  788. package/dist/web/_app/immutable/nodes/3.CmhZJWHE.js +6 -0
  789. package/dist/web/_app/immutable/nodes/4.BRfoPTm-.js +11 -0
  790. package/dist/web/_app/immutable/nodes/5.C7gPuZM_.js +1 -0
  791. package/dist/web/_app/immutable/nodes/6.qKODVbya.js +6 -0
  792. package/dist/web/_app/immutable/nodes/7.BZO37zAJ.js +1 -0
  793. package/dist/web/_app/immutable/nodes/8.xF_Dd1BO.js +1 -0
  794. package/dist/web/_app/immutable/nodes/9.Bow4UyKV.js +1 -0
  795. package/dist/web/_app/version.json +1 -1
  796. package/dist/web/favicon-16.png +0 -0
  797. package/dist/web/favicon-180.png +0 -0
  798. package/dist/web/favicon-32.png +0 -0
  799. package/dist/web/favicon-48.png +0 -0
  800. package/dist/web/favicon-512.png +0 -0
  801. package/dist/web/favicon.ico +0 -0
  802. package/dist/web/favicon.svg +8 -0
  803. package/dist/web/index.html +56 -21
  804. package/dist/web/studiograph-logomark.svg +29 -0
  805. package/package.json +35 -14
  806. package/dist/agent/skills/enrich-entities.md +0 -136
  807. package/dist/agent/skills/sync-configuration.md +0 -119
  808. package/dist/agent/skills/sync-setup.md +0 -82
  809. package/dist/agent/tools/message-tools.d.ts +0 -42
  810. package/dist/agent/tools/message-tools.js +0 -106
  811. package/dist/agent/tools/message-tools.js.map +0 -1
  812. package/dist/cli/commands/app.d.ts +0 -7
  813. package/dist/cli/commands/app.js +0 -268
  814. package/dist/cli/commands/app.js.map +0 -1
  815. package/dist/cli/commands/clear.d.ts +0 -5
  816. package/dist/cli/commands/clear.js +0 -36
  817. package/dist/cli/commands/clear.js.map +0 -1
  818. package/dist/cli/commands/collection.d.ts +0 -10
  819. package/dist/cli/commands/collection.js.map +0 -1
  820. package/dist/cli/commands/join.d.ts +0 -9
  821. package/dist/cli/commands/join.js +0 -255
  822. package/dist/cli/commands/join.js.map +0 -1
  823. package/dist/cli/commands/start.d.ts +0 -7
  824. package/dist/cli/commands/start.js +0 -584
  825. package/dist/cli/commands/start.js.map +0 -1
  826. package/dist/cli/commands/update.d.ts +0 -8
  827. package/dist/cli/commands/update.js +0 -155
  828. package/dist/cli/commands/update.js.map +0 -1
  829. package/dist/cli/commands/user.d.ts +0 -7
  830. package/dist/cli/commands/user.js +0 -175
  831. package/dist/cli/commands/user.js.map +0 -1
  832. package/dist/cli/scaffolding.d.ts +0 -12
  833. package/dist/cli/scaffolding.js +0 -397
  834. package/dist/cli/scaffolding.js.map +0 -1
  835. package/dist/integrations/registry.d.ts +0 -8
  836. package/dist/integrations/registry.js +0 -7
  837. package/dist/integrations/registry.js.map +0 -1
  838. package/dist/integrations/types.d.ts +0 -43
  839. package/dist/integrations/types.js +0 -5
  840. package/dist/integrations/types.js.map +0 -1
  841. package/dist/lib/lib/utils.d.ts +0 -2
  842. package/dist/lib/lib/utils.js +0 -6
  843. package/dist/lib/lib/utils.js.map +0 -1
  844. package/dist/server/chrome/chrome.css +0 -691
  845. package/dist/server/chrome/chrome.js +0 -374
  846. package/dist/server/commit-scheduler.d.ts +0 -39
  847. package/dist/server/commit-scheduler.js +0 -113
  848. package/dist/server/commit-scheduler.js.map +0 -1
  849. package/dist/server/plugin-loader.d.ts +0 -53
  850. package/dist/server/plugin-loader.js +0 -155
  851. package/dist/server/plugin-loader.js.map +0 -1
  852. package/dist/server/routes/meeting-ingest-api.d.ts +0 -14
  853. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  854. package/dist/server/routes/messages-api.d.ts +0 -15
  855. package/dist/server/routes/messages-api.js +0 -385
  856. package/dist/server/routes/messages-api.js.map +0 -1
  857. package/dist/services/batch-processor.d.ts +0 -49
  858. package/dist/services/batch-processor.js +0 -166
  859. package/dist/services/batch-processor.js.map +0 -1
  860. package/dist/services/briefing.d.ts +0 -26
  861. package/dist/services/briefing.js +0 -230
  862. package/dist/services/briefing.js.map +0 -1
  863. package/dist/services/heartbeat.d.ts +0 -28
  864. package/dist/services/heartbeat.js +0 -183
  865. package/dist/services/heartbeat.js.map +0 -1
  866. package/dist/services/image-import-service.d.ts +0 -24
  867. package/dist/services/image-import-service.js +0 -108
  868. package/dist/services/image-import-service.js.map +0 -1
  869. package/dist/services/insights.d.ts +0 -38
  870. package/dist/services/insights.js +0 -269
  871. package/dist/services/insights.js.map +0 -1
  872. package/dist/services/meeting-processor.js.map +0 -1
  873. package/dist/services/message-service.d.ts +0 -68
  874. package/dist/services/message-service.js +0 -220
  875. package/dist/services/message-service.js.map +0 -1
  876. package/dist/utils/workspace-config.d.ts +0 -8
  877. package/dist/utils/workspace-config.js +0 -22
  878. package/dist/utils/workspace-config.js.map +0 -1
  879. package/dist/web/_app/immutable/assets/0.uPSqtsC5.css +0 -1
  880. package/dist/web/_app/immutable/assets/11.2jzI3cZY.css +0 -1
  881. package/dist/web/_app/immutable/assets/12.CT4xL4K3.css +0 -1
  882. package/dist/web/_app/immutable/assets/13.BUrHkYry.css +0 -1
  883. package/dist/web/_app/immutable/assets/2.DpQWr6q6.css +0 -1
  884. package/dist/web/_app/immutable/assets/3.BxdqT7zi.css +0 -1
  885. package/dist/web/_app/immutable/assets/4.DdNqjd0T.css +0 -1
  886. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  887. package/dist/web/_app/immutable/assets/6.DXZr_rI_.css +0 -1
  888. package/dist/web/_app/immutable/assets/GraphView.D9ePpZez.css +0 -1
  889. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  890. package/dist/web/_app/immutable/assets/ViewToolbar.BWE03S64.css +0 -1
  891. package/dist/web/_app/immutable/assets/WorkspaceView.CgGDi_Zb.css +0 -1
  892. package/dist/web/_app/immutable/assets/wikilinks.CzMBkUMB.css +0 -1
  893. package/dist/web/_app/immutable/chunks/-jG4Obyh.js +0 -4
  894. package/dist/web/_app/immutable/chunks/2nrc8f_O.js +0 -1
  895. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  896. package/dist/web/_app/immutable/chunks/8Q3ZJIYu.js +0 -1
  897. package/dist/web/_app/immutable/chunks/B8ydT5xX.js +0 -2
  898. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  899. package/dist/web/_app/immutable/chunks/BEn6N5c2.js +0 -1
  900. package/dist/web/_app/immutable/chunks/BFNNbCAM.js +0 -1
  901. package/dist/web/_app/immutable/chunks/BFZZEUd5.js +0 -1
  902. package/dist/web/_app/immutable/chunks/BGk8kfOE.js +0 -2
  903. package/dist/web/_app/immutable/chunks/BIBCr278.js +0 -1
  904. package/dist/web/_app/immutable/chunks/BPCkkwqe.js +0 -1
  905. package/dist/web/_app/immutable/chunks/BhlvzGQx.js +0 -1
  906. package/dist/web/_app/immutable/chunks/BlMknQeF.js +0 -1
  907. package/dist/web/_app/immutable/chunks/BpjqrlCg.js +0 -1
  908. package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
  909. package/dist/web/_app/immutable/chunks/ByBZ7JIT.js +0 -1
  910. package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
  911. package/dist/web/_app/immutable/chunks/BzJTZOK2.js +0 -1
  912. package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
  913. package/dist/web/_app/immutable/chunks/C3uBrOS5.js +0 -1
  914. package/dist/web/_app/immutable/chunks/C8R1sDpW.js +0 -1
  915. package/dist/web/_app/immutable/chunks/CDRHrs0g.js +0 -1
  916. package/dist/web/_app/immutable/chunks/CN5_py1I.js +0 -1
  917. package/dist/web/_app/immutable/chunks/CPne482a.js +0 -1
  918. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  919. package/dist/web/_app/immutable/chunks/CWyU-seV.js +0 -1
  920. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  921. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  922. package/dist/web/_app/immutable/chunks/ChsiIm-E.js +0 -1
  923. package/dist/web/_app/immutable/chunks/CojKppbh.js +0 -1
  924. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  925. package/dist/web/_app/immutable/chunks/CtYLtD7K.js +0 -1
  926. package/dist/web/_app/immutable/chunks/D-HDy5qS.js +0 -1
  927. package/dist/web/_app/immutable/chunks/D5aIYSkd.js +0 -1
  928. package/dist/web/_app/immutable/chunks/DBBXARVf.js +0 -1
  929. package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
  930. package/dist/web/_app/immutable/chunks/DKaafS50.js +0 -1
  931. package/dist/web/_app/immutable/chunks/DUMOo1Pn.js +0 -1
  932. package/dist/web/_app/immutable/chunks/DWX9f6AF.js +0 -1
  933. package/dist/web/_app/immutable/chunks/DY8-EONP.js +0 -1
  934. package/dist/web/_app/immutable/chunks/DkoHPElM.js +0 -1
  935. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  936. package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
  937. package/dist/web/_app/immutable/chunks/DujahU3W.js +0 -1
  938. package/dist/web/_app/immutable/chunks/FBn-ES5k.js +0 -1
  939. package/dist/web/_app/immutable/chunks/HQpwSOb3.js +0 -1
  940. package/dist/web/_app/immutable/chunks/KyjzlWRN.js +0 -2
  941. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  942. package/dist/web/_app/immutable/chunks/UwYfmrPx.js +0 -2
  943. package/dist/web/_app/immutable/chunks/W25ZVI8L.js +0 -2
  944. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  945. package/dist/web/_app/immutable/chunks/XjsuEnNE.js +0 -5
  946. package/dist/web/_app/immutable/chunks/ZD6ARAtb.js +0 -1
  947. package/dist/web/_app/immutable/chunks/pBTf4stg.js +0 -2
  948. package/dist/web/_app/immutable/chunks/rGIarcnp.js +0 -1
  949. package/dist/web/_app/immutable/chunks/vxEtkL8z.js +0 -1
  950. package/dist/web/_app/immutable/chunks/wDIGUaoU.js +0 -3
  951. package/dist/web/_app/immutable/entry/app.ZHiTM8WS.js +0 -2
  952. package/dist/web/_app/immutable/entry/start.C9-FfAVc.js +0 -1
  953. package/dist/web/_app/immutable/nodes/0.D92Orz8k.js +0 -2
  954. package/dist/web/_app/immutable/nodes/1.BMdyglM_.js +0 -1
  955. package/dist/web/_app/immutable/nodes/10.BilVDHSL.js +0 -1
  956. package/dist/web/_app/immutable/nodes/11.CS9E0Hic.js +0 -1
  957. package/dist/web/_app/immutable/nodes/12.D3BOxYzG.js +0 -1
  958. package/dist/web/_app/immutable/nodes/13.CClMKYtN.js +0 -1
  959. package/dist/web/_app/immutable/nodes/2.C8KKElPL.js +0 -267
  960. package/dist/web/_app/immutable/nodes/3.C5n5uiWU.js +0 -5
  961. package/dist/web/_app/immutable/nodes/4.DcGVvgiL.js +0 -11
  962. package/dist/web/_app/immutable/nodes/5.DxIjnFQO.js +0 -4
  963. package/dist/web/_app/immutable/nodes/6.lkh6kKLj.js +0 -1
  964. package/dist/web/_app/immutable/nodes/7.Bg7SbfhA.js +0 -1
  965. package/dist/web/_app/immutable/nodes/8.DcXWCNBE.js +0 -1
  966. package/dist/web/_app/immutable/nodes/9.Cefi8Jfm.js +0 -1
@@ -1,15 +1,33 @@
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, guideline, case-study
4
+ * 20 canonical entity types post-redesign:
5
+ * - CRM (4): person, organization, position, deal
6
+ * - PM (4): project, event, task, deliverable
7
+ * - KM authored (7): document, deck, artifact, 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
+ import { ARTIFACT_KINDS } from './artifact-bundle.js';
23
+ function dateField(role, label, description) {
24
+ return z
25
+ .string()
26
+ .date()
27
+ .optional()
28
+ .describe(description ?? label)
29
+ .meta({ dateRole: role, label });
30
+ }
13
31
  /**
14
32
  * Base entity schema - all entities have these fields
15
33
  */
@@ -22,69 +40,107 @@ export const EntityBaseSchema = z.object({
22
40
  updated_at: z.string().datetime('Invalid datetime format'),
23
41
  created_by: z.string().min(1, 'Created by is required'),
24
42
  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)'),
43
+ date: dateField('primary', 'Date', "The entity's primary date (YYYY-MM-DD)"),
26
44
  tags: z.array(z.string())
27
45
  .optional()
28
46
  .describe('Tags for categorization'),
29
47
  }).passthrough(); // Allow custom fields beyond the base schema
30
48
  // ══════════════════════════════════════════════════════════════════════════════
31
- // IDENTITY ENTITIES — people, organizations, roles, practice areas
49
+ // CRM — people, organizations, positions, deals
32
50
  // ══════════════════════════════════════════════════════════════════════════════
33
51
  /**
34
- * Person — team members, client contacts, any individual
52
+ * Person — team members, client contacts, any individual.
53
+ *
54
+ * `category` and `status` are split: category is the relationship type
55
+ * (employee/contractor/client/partner) and status is whether that
56
+ * relationship is current or historical. Mirrors organization.
35
57
  */
36
58
  export const PersonSchema = EntityBaseSchema.extend({
37
59
  entity_type: z.literal('person'),
38
60
  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'])
61
+ role: z.string().optional().describe('Free-text title (distinct from `position` entity)'),
62
+ category: z.enum(['employee', 'contractor', 'client', 'partner', 'other'])
41
63
  .optional()
42
- .describe('Relationship status'),
64
+ .describe('Relationship category'),
65
+ status: z.enum(['current', 'former'])
66
+ .optional()
67
+ .describe('Whether the relationship is current or historical'),
43
68
  email: z.string().optional().describe('Email address'),
44
69
  location: z.string().optional().describe('Location'),
45
70
  organization: z.string().optional().describe('Organization wikilink'),
71
+ // Bridge to the auth.db user account this person represents. Scalar handle
72
+ // string (not a wikilink): users are out-of-graph identities. Workspace-
73
+ // unique — write-path enforcement lives in user-person-bridge.ts. Optional
74
+ // because person entities can exist without a corresponding user
75
+ // (contractors, client contacts, anyone in the org chart who doesn't log
76
+ // in). Empty string is the "cleared" form — graph.create seeds optional
77
+ // string fields to "" on new entities, and unlink writes "" as well, so
78
+ // the regex must accept it explicitly.
79
+ user_handle: z.string()
80
+ // Empty (cleared) OR a kebab-case handle: leading alnum, alnum/hyphen
81
+ // body, alnum tail, no doubled hyphens. Mirrors what auth's
82
+ // slugifyHandle + allocateHandle can actually emit — accepting
83
+ // `foo-` or `foo--bar` here would let a hand-edit drift outside what
84
+ // findUserByHandle can match.
85
+ .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)')
86
+ .optional()
87
+ .describe('Auth handle of the user this person represents'),
46
88
  });
47
89
  /**
48
- * Organization — clients, vendors, partners, prospects, industry bodies
90
+ * Organization — clients, vendors, partners, prospects, professional
91
+ * associations.
49
92
  */
50
93
  export const OrganizationSchema = EntityBaseSchema.extend({
51
94
  entity_type: z.literal('organization'),
52
95
  name: z.string().min(1, 'Organization name is required'),
53
- category: z.enum(['client', 'vendor', 'partner', 'prospect', 'industry-body', 'other'])
96
+ category: z.enum(['client', 'vendor', 'partner', 'prospect', 'professional-association', 'other'])
54
97
  .optional()
55
98
  .describe('Relationship category'),
56
- status: z.enum(['active', 'inactive', 'former'])
99
+ status: z.enum(['active', 'dormant', 'former'])
57
100
  .default('active')
58
- .describe('Organization status'),
101
+ .describe('Organization status (`dormant` covers clients you have not worked with in a while but might again)'),
59
102
  industry: z.string().optional().describe('Industry sector'),
60
103
  website: z.string().url().optional().describe('Website URL'),
61
104
  });
62
105
  /**
63
- * Rolerole definitions and job postings
106
+ * Positiona position spec or open job. Renamed from `role` to avoid
107
+ * collision with `person.role` (the free-text title field). Reframes from
108
+ * "the person's seat" to "the spec for a position."
64
109
  */
65
- export const RoleSchema = EntityBaseSchema.extend({
66
- entity_type: z.literal('role'),
67
- name: z.string().min(1, 'Role name is required'),
110
+ export const PositionSchema = EntityBaseSchema.extend({
111
+ entity_type: z.literal('position'),
112
+ name: z.string().min(1, 'Position name is required'),
68
113
  department: z.string().optional().describe('Department'),
69
114
  category: z.enum(['staff', 'contractor', 'intern'])
70
115
  .optional()
71
116
  .describe('Employment category'),
72
- status: z.enum(['active', 'open', 'filled', 'archived'])
73
- .default('active')
74
- .describe('Role status'),
117
+ status: z.enum(['draft', 'open', 'filled', 'closed'])
118
+ .default('open')
119
+ .describe('Position lifecycle'),
75
120
  });
76
121
  /**
77
- * Practice Area firm capabilities and disciplines
122
+ * Dealpre-project opportunity in the sales pipeline.
78
123
  */
79
- export const PracticeAreaSchema = EntityBaseSchema.extend({
80
- entity_type: z.literal('practice-area'),
81
- name: z.string().min(1, 'Practice area name is required'),
124
+ export const DealSchema = EntityBaseSchema.extend({
125
+ entity_type: z.literal('deal'),
126
+ name: z.string().min(1, 'Deal name is required'),
127
+ client: z.string().optional().describe('Client organization wikilink'),
128
+ contact: z.string().optional().describe('Primary contact person wikilink'),
129
+ stage: z.enum(['qualification', 'scoping', 'proposal', 'negotiation', 'pending-signature', 'won', 'lost'])
130
+ .default('qualification')
131
+ .describe('Pipeline stage'),
132
+ deal_value: z.number().optional().describe('Estimated deal value'),
133
+ start_date: dateField('start', 'Start date', 'When work on the deal began (enables Timeline rendering of duration)'),
134
+ date: dateField('primary', 'Close date', 'Expected close date'),
82
135
  });
83
136
  // ══════════════════════════════════════════════════════════════════════════════
84
- // UNIVERSAL ENTITIES available in any repo
137
+ // PMproject, event, task, deliverable
85
138
  // ══════════════════════════════════════════════════════════════════════════════
86
139
  /**
87
- * Project — a client engagement or internal initiative
140
+ * Project — a client engagement or internal initiative.
141
+ *
142
+ * `services` is a wikilink array to `service` entities the project includes
143
+ * (replaces the previous `practice_area` concept).
88
144
  */
89
145
  export const ProjectSchema = EntityBaseSchema.extend({
90
146
  entity_type: z.literal('project'),
@@ -94,103 +150,162 @@ export const ProjectSchema = EntityBaseSchema.extend({
94
150
  .describe('Project category'),
95
151
  project_type: z.string().optional().describe('Kind of project (e.g., website, research, event, rebrand, prototype)'),
96
152
  client: z.string().optional().describe('Client organization wikilink'),
97
- status: z.enum(['planning', 'scoping', 'active', 'on-hold', 'completed', 'archived'])
153
+ services: z.array(z.string()).optional()
154
+ .describe('Service entities this project includes (wikilinks)'),
155
+ status: z.enum(['planning', 'in-progress', 'paused', 'complete', 'archived'])
98
156
  .optional()
99
157
  .describe('Current project status'),
100
- start_date: z.string().optional().describe('Project start date'),
101
- end_date: z.string().optional().describe('Project end date'),
158
+ start_date: dateField('start', 'Start date', 'Project start date'),
159
+ date: dateField('primary', 'End date', 'Project end date'),
102
160
  });
103
161
  /**
104
- * Meeting — any scheduled gathering
162
+ * Event — any scheduled gathering (meeting, call, workshop, review, etc.).
163
+ * `type` discriminates the kind of gathering for grouping/filtering. The
164
+ * default `meeting` preserves semantics for legacy meeting captures.
165
+ *
166
+ * Note: `deadline` is intentionally NOT a `type` value — deadlines are
167
+ * `task` entries with a `date` (the due date). Events are things you attend.
105
168
  */
106
- export const MeetingSchema = EntityBaseSchema.extend({
107
- entity_type: z.literal('meeting'),
108
- name: z.string().min(1, 'Meeting name/subject is required'),
169
+ export const EVENT_TYPES = [
170
+ 'meeting', 'call', 'review', 'workshop', 'presentation', 'conference', 'other',
171
+ ];
172
+ export const EventSchema = EntityBaseSchema.extend({
173
+ entity_type: z.literal('event'),
174
+ name: z.string().min(1, 'Event name/subject is required'),
175
+ type: z.enum(EVENT_TYPES).default('meeting').describe('Kind of event'),
109
176
  attendees: z.array(z.string()).optional().describe('Attendee wikilinks'),
110
177
  location: z.string().optional().describe('Location or meeting link'),
178
+ start_date: dateField('start', 'Start date', 'When a multi-day event begins (omit for single-day events)'),
179
+ date: dateField('primary', 'Date', 'When the event takes place'),
111
180
  });
112
181
  /**
113
- * Decisionstructured decision records (ADR-style)
114
- */
115
- export const DecisionSchema = EntityBaseSchema.extend({
116
- entity_type: z.literal('decision'),
117
- name: z.string().min(1, 'Decision name is required'),
118
- status: z.enum(['proposed', 'accepted', 'rejected', 'deprecated', 'superseded'])
119
- .default('proposed')
120
- .describe('Current status'),
121
- });
122
- /**
123
- * Task — lightweight action items and to-dos
182
+ * Tasklightweight action items and to-dos.
183
+ *
184
+ * `phase` is intentionally free-text (not a separate entity type or workspace
185
+ * config list). Phases vary widely across project types; the Timeline view
186
+ * auto-discovers distinct values per-project for grouping.
124
187
  */
125
188
  export const TaskSchema = EntityBaseSchema.extend({
126
189
  entity_type: z.literal('task'),
127
190
  name: z.string().min(1, 'Task name is required'),
128
- status: z.enum(['open', 'in-progress', 'done', 'cancelled'])
129
- .default('open')
191
+ status: z.enum(['backlog', 'todo', 'in-progress', 'in-review', 'done', 'cancelled'])
192
+ .default('backlog')
130
193
  .describe('Task status'),
131
194
  priority: z.enum(['low', 'medium', 'high', 'urgent'])
132
195
  .optional()
133
196
  .describe('Priority level'),
134
- assignee: z.string().optional().describe('Person assigned (wikilink)'),
135
- due_date: z.string().optional().describe('Due date'),
197
+ 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')
198
+ // `refType` rides on the field via `.meta()` (same mechanism as the date
199
+ // vocabulary's `dateRole`/`label`). It marks `assignee` as a reference
200
+ // that must point at a `person` entity — surfaced through
201
+ // `describeZodObject` → `/api/schema` + `get_entity_schema` so pickers
202
+ // scope generically, and consumed by the write-path validator in
203
+ // entity-mutations.ts that actually rejects non-person targets. Zod
204
+ // itself can't resolve wikilinks, so this is a hint, not enforcement.
205
+ .meta({ refType: 'person' }),
206
+ phase: z.string().optional().describe('Project phase (free-text — Discover, Design, Prototype, Build, etc.)'),
207
+ start_date: dateField('start', 'Start date', 'Task start date (enables Timeline / Gantt rendering of duration)'),
208
+ date: dateField('primary', 'Due date', 'When the task is due'),
209
+ // Auto-stamped by graph.update when status transitions to/from `done` (see
210
+ // composeUpdatedFrontmatter). Lets surfaces show "completed today" without
211
+ // conflating it with the due date. ISO datetime; cleared when reopened.
212
+ completed_at: z.string().datetime('Invalid datetime format').optional()
213
+ .describe('When the task was marked done (ISO datetime, auto-managed)')
214
+ .meta({ label: 'Completed at' }),
136
215
  });
137
216
  /**
138
- * Documentany authored document
217
+ * Deliverablea scoped output promised to a client.
218
+ */
219
+ export const DeliverableSchema = EntityBaseSchema.extend({
220
+ entity_type: z.literal('deliverable'),
221
+ name: z.string().min(1, 'Deliverable name is required'),
222
+ project: z.string().optional().describe('Parent project wikilink'),
223
+ status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
224
+ .default('planned')
225
+ .describe('Delivery status'),
226
+ phase: z.string().optional().describe('Project phase (free-text — same semantics as task.phase)'),
227
+ start_date: dateField('start', 'Start date', 'Deliverable start date (enables Timeline rendering of duration)'),
228
+ date: dateField('primary', 'Due date', 'When the deliverable is due'),
229
+ });
230
+ // ══════════════════════════════════════════════════════════════════════════════
231
+ // KM — authored (document, deck, publication, case-study, service, skill)
232
+ // ══════════════════════════════════════════════════════════════════════════════
233
+ /**
234
+ * Shared description for the `asset_ref` field — now `dataset`-ONLY.
235
+ *
236
+ * Body-embed model (2026-06-01): an import seeds the asset reference INTO THE
237
+ * BODY (an `![](url)` image embed for materials, a `[name](url)` source
238
+ * link for documents) — exactly as a user would. So material/document no longer
239
+ * carry `asset_ref`; the reference is in the markdown, not the frontmatter.
240
+ *
241
+ * `dataset` is the lone exception: a dataset body must stay valid CSV, so it
242
+ * can't hold a body link. `asset_ref` records the STORAGE UUID of the source
243
+ * xlsx (the `assets.db` `asset_id` / immutable-key id, never a URL, never an
244
+ * entity id) as INVISIBLE provenance — survives the entity moving repos and an
245
+ * asset-backend swap. It is one-to-one provenance, NOT an embed graph (the
246
+ * many-to-many image-embed mechanism is still markdown `![](url)` in a body).
247
+ *
248
+ * `.meta({ internal: true })` keeps it out of the field-metadata API, the
249
+ * property panel, and the agent's `get_entity_schema` (same treatment as
250
+ * `source_file`) — it is set by the import path, never hand-edited.
251
+ */
252
+ const ASSET_REF_DESC = 'Storage UUID of the source xlsx this dataset was imported from';
253
+ /**
254
+ * Document — any authored document. The `guideline` category absorbs the
255
+ * former standalone `guideline` entity type.
139
256
  */
140
257
  export const DocumentSchema = EntityBaseSchema.extend({
141
258
  entity_type: z.literal('document'),
142
259
  name: z.string().min(1, 'Document name is required'),
143
- category: z.enum(['proposal', 'contract', 'brief', 'memo', 'report', 'template', 'other'])
260
+ category: z.enum(['proposal', 'contract', 'brief', 'memo', 'report', 'template', 'guideline', 'other'])
144
261
  .optional()
145
262
  .describe('Document category'),
146
263
  status: z.enum(['draft', 'review', 'final', 'archived'])
147
264
  .default('draft')
148
265
  .describe('Document status'),
266
+ // No asset_ref: under the body-embed model an imported document seeds the
267
+ // extracted text + a `[name](url)` source link directly into its body, so the
268
+ // source-file reference lives in the markdown, not the frontmatter.
149
269
  });
150
270
  /**
151
- * Datasetstructured tabular data with typed columns and CSV body
152
- */
153
- export const ColumnDefinitionSchema = z.object({
154
- name: z.string().min(1),
155
- type: z.enum(['string', 'number', 'boolean', 'date']),
156
- required: z.boolean().optional(),
157
- description: z.string().optional(),
158
- });
159
- export const DatasetSchema = EntityBaseSchema.extend({
160
- entity_type: z.literal('dataset'),
161
- name: z.string().min(1, 'Dataset name is required'),
162
- schema: z.array(ColumnDefinitionSchema).min(1, 'At least one column required'),
163
- });
164
- /**
165
- * Reference — external resources and inspiration
271
+ * Decka slide deck or presentation. Stays its own type alongside
272
+ * `document` because of the dedicated slides renderer + agent skills that
273
+ * pattern-match on `entity_type === 'deck'`.
166
274
  */
167
- export const ReferenceSchema = EntityBaseSchema.extend({
168
- entity_type: z.literal('reference'),
169
- name: z.string().min(1, 'Reference name is required'),
170
- source: z.string().optional().describe('Source or author'),
171
- link: z.string().optional().describe('URL'),
172
- });
173
- /**
174
- * Note — freeform thinking, research, scratch, daily notes
175
- */
176
- export const NoteSchema = EntityBaseSchema.extend({
177
- entity_type: z.literal('note'),
178
- name: z.string().min(1, 'Note name is required'),
275
+ export const DeckSchema = EntityBaseSchema.extend({
276
+ entity_type: z.literal('deck'),
277
+ name: z.string().min(1, 'Deck name is required'),
278
+ audience: z.enum(['client', 'team', 'board', 'external', 'other'])
279
+ .optional()
280
+ .describe('Intended audience'),
281
+ status: z.enum(['draft', 'review', 'final', 'archived'])
282
+ .default('draft')
283
+ .describe('Deck status'),
179
284
  });
180
285
  /**
181
- * Deliverable — a scoped output promised to a client
286
+ * Artifact — a persisted Artifact Canvas bundle. The markdown body stores the
287
+ * serialized ArtifactBundle JSON; frontmatter carries scannable metadata for
288
+ * lists, filters, and the property panel.
182
289
  */
183
- export const DeliverableSchema = EntityBaseSchema.extend({
184
- entity_type: z.literal('deliverable'),
185
- name: z.string().min(1, 'Deliverable name is required'),
186
- project: z.string().optional().describe('Parent project wikilink'),
187
- status: z.enum(['planned', 'in-progress', 'delivered', 'accepted', 'rejected'])
188
- .default('planned')
189
- .describe('Delivery status'),
190
- due_date: z.string().optional().describe('Due date'),
290
+ export const ArtifactSchema = EntityBaseSchema.extend({
291
+ entity_type: z.literal('artifact'),
292
+ name: z.string().min(1, 'Artifact name is required'),
293
+ kind: z.enum(ARTIFACT_KINDS)
294
+ .default('custom')
295
+ .describe('Artifact kind rendered by the canvas'),
296
+ status: z.enum(['draft', 'review', 'final', 'archived'])
297
+ .default('draft')
298
+ .describe('Artifact status'),
299
+ viewport_width: z.number().int().positive().optional()
300
+ .describe('Canvas viewport width in pixels'),
301
+ viewport_height: z.number().int().positive().optional()
302
+ .describe('Canvas viewport height in pixels'),
303
+ viewport_mode: z.enum(['fixed', 'responsive', 'paged'])
304
+ .optional()
305
+ .describe('Canvas viewport behavior'),
191
306
  });
192
307
  /**
193
- * Publication — authored content published externally
308
+ * Publication — authored content published externally.
194
309
  */
195
310
  export const PublicationSchema = EntityBaseSchema.extend({
196
311
  entity_type: z.literal('publication'),
@@ -202,105 +317,298 @@ export const PublicationSchema = EntityBaseSchema.extend({
202
317
  url: z.string().optional().describe('URL of published content'),
203
318
  });
204
319
  /**
205
- * Dealpre-project opportunity in the sales pipeline
320
+ * Case Study portfolio narratives for completed projects.
206
321
  */
207
- export const DealSchema = EntityBaseSchema.extend({
208
- entity_type: z.literal('deal'),
209
- name: z.string().min(1, 'Deal name is required'),
322
+ export const CaseStudySchema = EntityBaseSchema.extend({
323
+ entity_type: z.literal('case-study'),
324
+ name: z.string().min(1, 'Case study name is required'),
210
325
  client: z.string().optional().describe('Client organization wikilink'),
211
- contact: z.string().optional().describe('Primary contact person wikilink'),
212
- stage: z.enum(['scoping', 'proposal', 'negotiating', 'won', 'lost'])
213
- .default('scoping')
214
- .describe('Pipeline stage'),
215
- deal_value: z.number().optional().describe('Estimated deal value'),
216
- expected_close: z.string().optional().describe('Expected close date'),
326
+ services: z.array(z.string()).optional()
327
+ .describe('Service entities this case study highlights (wikilinks)'),
328
+ date_range: z.string().optional().describe('Project timeframe (e.g., 2025-09 / 2026-01)'),
329
+ status: z.enum(['draft', 'review', 'final', 'published'])
330
+ .default('draft')
331
+ .describe('Case study status'),
332
+ });
333
+ /**
334
+ * Service — the firm's offerings + methodologies. Replaces the old
335
+ * `process` type and absorbs `practice-area` (top-level services replace
336
+ * what practice-area was trying to be).
337
+ *
338
+ * `sprint` links a granular service to its parent service (top-level
339
+ * services have none). `depends_on` / `enables` form a directed graph
340
+ * across the service set — the Graph view's most valuable use case.
341
+ */
342
+ export const ServiceSchema = EntityBaseSchema.extend({
343
+ entity_type: z.literal('service'),
344
+ name: z.string().min(1, 'Service name is required'),
345
+ service_id: z.string().optional()
346
+ .describe('Optional human-readable id (e.g. "1.4") for studios that number their services'),
347
+ sprint: z.string().optional()
348
+ .describe('Parent service wikilink for hierarchy (top-level services / sprints have none)'),
349
+ depends_on: z.array(z.string()).optional()
350
+ .describe('Services that must precede this one (wikilinks)'),
351
+ enables: z.array(z.string()).optional()
352
+ .describe('Services that this one unlocks (wikilinks)'),
353
+ deliverables: z.array(z.string()).optional()
354
+ .describe('Named outputs this service produces'),
355
+ status: z.enum(['offered', 'in-development', 'retired'])
356
+ .default('offered')
357
+ .describe('Service lifecycle'),
358
+ });
359
+ /**
360
+ * Skill — prompt-level instructions the agent can load to teach it how to
361
+ * do a specific job. The entity id is the skill name used by `load_skill`.
362
+ * The body markdown is the instruction content.
363
+ *
364
+ * `applies_to` lets the agent load deck-skills when working on a deck,
365
+ * proposal-skills when on a `document.category=proposal`, etc. Empty /
366
+ * unset = generally applicable.
367
+ *
368
+ * The previous `loading: eager | on-demand` field is gone for graph-authored
369
+ * skills. Filesystem skills (shipped with the product in `src/agent/skills/`)
370
+ * keep their own loading mechanism via skill-loader.ts and orchestrator.ts.
371
+ *
372
+ * `name` and `description` are optional at creation so the sidebar new-entry
373
+ * flow works — the user fills them in afterward via the property panel.
374
+ */
375
+ export const SkillSchema = EntityBaseSchema.extend({
376
+ entity_type: z.literal('skill'),
377
+ name: z.string().optional().describe('Human-readable title (falls back to entity id)'),
378
+ description: z.string().optional().describe('Shown in the skill index so the agent knows when to load it'),
379
+ applies_to: z.array(z.string()).optional()
380
+ .describe('Entity types this skill applies to (e.g. ["deck"]). Empty = generally applicable.'),
217
381
  });
218
382
  // ══════════════════════════════════════════════════════════════════════════════
219
- // KNOWLEDGE ENTITIES typically in resource repos
383
+ // CAPTUREnote, reference
220
384
  // ══════════════════════════════════════════════════════════════════════════════
221
385
  /**
222
- * Processworkflows, SOPs, and methodologies
386
+ * Notefreeform thinking, research, daily notes.
387
+ *
388
+ * Decisions migrated from the cut `decision` type land here as plain
389
+ * notes; operators may manually convert specific entries to `task` if they
390
+ * read better as work items.
223
391
  */
224
- export const ProcessSchema = EntityBaseSchema.extend({
225
- entity_type: z.literal('process'),
226
- name: z.string().min(1, 'Process name is required'),
227
- owner: z.string().optional().describe('Person or team responsible (wikilink)'),
392
+ export const NoteSchema = EntityBaseSchema.extend({
393
+ entity_type: z.literal('note'),
394
+ name: z.string().min(1, 'Note name is required'),
395
+ // Entry-primary provenance (A2): when this note was derived from an
396
+ // uploaded asset (e.g. a converted .docx/.pdf), `source_file` holds the
397
+ // SOURCE ASSET'S ENTITY ID — never a URL — so the link survives an asset
398
+ // backend swap and joins the graph (the relationship is also surfaced as a
399
+ // wikilink in the body). Absent for notes created directly.
400
+ //
401
+ // `.meta({ internal: true })` marks it system-managed: the field-metadata
402
+ // API (describeZodObject) omits it, so it never appears in the property
403
+ // panel or the agent's get_entity_schema, and the create/changeType field
404
+ // seeders skip it (so a directly-created note has NO source_file rather
405
+ // than `''`). Set only by the import/convert path.
406
+ source_file: z.string().optional().describe('Entity id of the source asset this note was derived from').meta({ internal: true }),
228
407
  });
229
408
  /**
230
- * Guidelineguidelines, standards, and best practices
409
+ * Referenceexternal resources and inspiration.
231
410
  */
232
- export const GuidelineSchema = EntityBaseSchema.extend({
233
- entity_type: z.literal('guideline'),
234
- name: z.string().min(1, 'Guideline name is required'),
411
+ export const ReferenceSchema = EntityBaseSchema.extend({
412
+ entity_type: z.literal('reference'),
413
+ name: z.string().min(1, 'Reference name is required'),
414
+ source: z.string().optional().describe('Source or author'),
415
+ link: z.string().optional().describe('URL'),
235
416
  });
236
417
  /**
237
- * Case Study portfolio narratives for completed projects
418
+ * Dataseta CSV the workspace owns, edited in a grid.
419
+ *
420
+ * Conventional CSV: the markdown body IS the data, and the header row IS the
421
+ * column list — there's no separate typed column schema. The grid editor
422
+ * (web CsvEditor) and the agent's `query_dataset` / `append_rows` tools read
423
+ * the body through CSVService (src/services/csv-service.ts), deriving columns
424
+ * from the header. Distinct from an uploaded `asset` with
425
+ * `asset_kind: 'spreadsheet'`, which is an opaque binary — a dataset is
426
+ * in-graph, queryable, and row-appendable.
238
427
  */
239
- export const CaseStudySchema = EntityBaseSchema.extend({
240
- entity_type: z.literal('case-study'),
241
- name: z.string().min(1, 'Case study name is required'),
242
- client: z.string().optional().describe('Client organization wikilink'),
243
- date_range: z.string().optional().describe('Project timeframe (e.g., 2025-09 / 2026-01)'),
244
- status: z.enum(['draft', 'published']).optional().describe('Case study status'),
428
+ export const DatasetSchema = EntityBaseSchema.extend({
429
+ entity_type: z.literal('dataset'),
430
+ name: z.string().min(1, 'Dataset name is required'),
431
+ // Entry-primary provenance (A2): set when this dataset was derived from an
432
+ // uploaded asset (e.g. one sheet of a converted .xlsx). Holds the SOURCE
433
+ // ASSET'S ENTITY ID, never a URL. See NoteSchema.source_file (incl. the
434
+ // `.meta({ internal: true })` rationale — same system-managed treatment).
435
+ source_file: z.string().optional().describe('Entity id of the source asset this dataset was derived from').meta({ internal: true }),
436
+ // When derived from one sheet of a converted .xlsx, the original worksheet
437
+ // name — the stable key that lets a re-convert (replace) match this dataset
438
+ // back to its sheet and update it IN PLACE, preserving the id + inbound
439
+ // links even if the first conversion's id was collision-suffixed. Internal
440
+ // (system-managed); never user-edited.
441
+ source_sheet: z.string().optional().describe('Original worksheet name this dataset was derived from').meta({ internal: true }),
442
+ // Asset-as-embed provenance: the storage UUID of the source asset (e.g. the
443
+ // .xlsx this sheet was imported from). Frontmatter only — the dataset body
444
+ // stays pure CSV, so the asset link is NEVER a body embed. See ASSET_REF_DESC.
445
+ asset_ref: z.string().optional().describe(ASSET_REF_DESC).meta({ internal: true }),
446
+ });
447
+ /**
448
+ * Material — a first-class graph entry that wraps a free-standing binary
449
+ * asset (image or opaque file: photo, logo, psd/ai/sketch/fig, video, audio,
450
+ * archive) when no better type fits. The asset-as-embed catch-all: import
451
+ * routes docx/pdf → `document`, xlsx → `dataset`, and everything else (image +
452
+ * opaque) → `material`.
453
+ *
454
+ * Distinct from `asset` (the stored bytes + `assets.db` row) and from
455
+ * `reference` (a pointer to an EXTERNAL source the workspace doesn't own).
456
+ * Under the body-embed model a material's body IS the asset: import seeds an
457
+ * inline `![name](url)` image embed (images) or a `[name](url)` download link
458
+ * (opaque binaries). No `asset_ref` frontmatter — the reference lives in the
459
+ * markdown. A hand-created material (New Entry / agent) is a notes/catalog
460
+ * entry whose body the user writes themselves.
461
+ */
462
+ export const MaterialSchema = EntityBaseSchema.extend({
463
+ entity_type: z.literal('material'),
464
+ name: z.string().min(1, 'Material name is required'),
465
+ // Purpose-oriented grouping axis (NOT a re-encoding of the asset's kind,
466
+ // which lives in assets.db). Optional. Values are intentionally minimal —
467
+ // enums are cheap to extend, expensive to remove.
468
+ category: z.enum(['design', 'brand', 'media', 'archive', 'other'])
469
+ .optional()
470
+ .describe('Purpose grouping (design source, brand asset, media, archive, other)'),
245
471
  });
246
472
  // ══════════════════════════════════════════════════════════════════════════════
473
+ // ASSET KINDS (store-facing — NOT an entity type)
474
+ // ══════════════════════════════════════════════════════════════════════════════
475
+ /**
476
+ * High-level kinds for stored binaries — assets.db media metadata + per-kind
477
+ * UI (icon/viewer/thumbnail). Drives `detectAssetKind` in
478
+ * src/services/assets/base.ts and the asset STORE, NOT any entity schema.
479
+ *
480
+ * The `asset` ENTITY type was retired (asset-as-embed §6 / Phase F): an
481
+ * imported binary now becomes a typed entry (material/document/dataset) that
482
+ * embeds a free-standing, folder-owned asset. The store (assets.db +
483
+ * immutable-key blobs + serving routes) stays.
484
+ */
485
+ export const ASSET_KINDS = [
486
+ 'image', 'video', 'audio', 'pdf', 'spreadsheet', 'other',
487
+ ];
488
+ // ══════════════════════════════════════════════════════════════════════════════
489
+ // SYSTEM — comment (virtual entity, SQLite-backed)
490
+ // ══════════════════════════════════════════════════════════════════════════════
491
+ /**
492
+ * Comment — a threaded comment anchored to another entry. Unlike every other
493
+ * entity type, comments are NOT stored as markdown files; they live in
494
+ * `comments.db` (see `src/services/comment-service.ts`) for throughput.
495
+ * Agents see them as first-class typed entities through the virtual-entity
496
+ * adapter (`src/services/comment-virtual-entity.ts`), shared by the MCP and
497
+ * in-app agent surfaces, which is why the schema
498
+ * lives here alongside the file-backed types.
499
+ *
500
+ * The shape documents what fields the MCP envelope exposes; runtime
501
+ * validation happens inside CommentService itself.
502
+ */
503
+ export const CommentSchema = EntityBaseSchema.extend({
504
+ entity_type: z.literal('comment'),
505
+ repo: z.string().describe('Folder the anchored entry lives in'),
506
+ entry_type: z.string().describe('Entity type of the anchored entry'),
507
+ entry_id: z.string().describe('Entity id of the anchored entry'),
508
+ thread_id: z.string().describe('Head comment id; replies share the same thread_id'),
509
+ parent_id: z.string().nullable().optional().describe('Parent comment id for replies, null on the head'),
510
+ author_user_id: z.number().int().describe('users.id of the author'),
511
+ author_role: z.enum(['user', 'agent']).describe('Whether the author was a human or the agent'),
512
+ anchor_quote: z.string().nullable().optional()
513
+ .describe('Original highlighted text at creation time, ≤256 chars (used for orphan rendering)'),
514
+ resolved_at: z.string().nullable().optional(),
515
+ resolved_by_user_id: z.number().int().nullable().optional(),
516
+ edited: z.boolean().optional(),
517
+ mentions: z.array(z.string()).optional().describe('Handles of mentioned users'),
518
+ });
247
519
  // ══════════════════════════════════════════════════════════════════════════════
248
520
  // SCHEMA REGISTRY
249
521
  // ══════════════════════════════════════════════════════════════════════════════
250
522
  /**
251
- * Maps entity types to their Zod schemas.
252
- * 17 built-in types. App plugins register additional types at runtime via SchemaRegistry.
523
+ * Maps entity types to their Zod schemas. 20 canonical built-in types
524
+ * (19 user-facing + 1 system). Workspaces can register additional custom
525
+ * types via SchemaRegistry (schema_extensions).
253
526
  */
254
527
  export const ENTITY_SCHEMAS = {
255
- // Identity (4)
528
+ // CRM (4)
256
529
  person: PersonSchema,
257
530
  organization: OrganizationSchema,
258
- role: RoleSchema,
259
- 'practice-area': PracticeAreaSchema,
260
- // Universal (10)
531
+ position: PositionSchema,
532
+ deal: DealSchema,
533
+ // PM (4)
261
534
  project: ProjectSchema,
262
- meeting: MeetingSchema,
263
- decision: DecisionSchema,
535
+ event: EventSchema,
264
536
  task: TaskSchema,
265
- document: DocumentSchema,
266
- dataset: DatasetSchema,
267
- reference: ReferenceSchema,
268
- note: NoteSchema,
269
537
  deliverable: DeliverableSchema,
538
+ // KM — authored (7)
539
+ document: DocumentSchema,
540
+ deck: DeckSchema,
541
+ artifact: ArtifactSchema,
270
542
  publication: PublicationSchema,
271
- deal: DealSchema,
272
- // Knowledge (3)
273
- process: ProcessSchema,
274
- guideline: GuidelineSchema,
275
543
  'case-study': CaseStudySchema,
544
+ service: ServiceSchema,
545
+ skill: SkillSchema,
546
+ // Capture (4)
547
+ note: NoteSchema,
548
+ reference: ReferenceSchema,
549
+ dataset: DatasetSchema,
550
+ material: MaterialSchema,
551
+ // System (1)
552
+ comment: CommentSchema,
276
553
  };
554
+ /**
555
+ * Retired entity-type names that must never be (re-)created, even if a legacy
556
+ * workspace still carries a `schema_extensions.<name>` for them. `asset` was
557
+ * retired in Phase F (asset-as-embed): binaries are now free-standing in
558
+ * assets.db and embedded by typed entries (material/document/dataset), so a
559
+ * file-backed `asset` entity would be an unvalidatable base-only stub. Enforced
560
+ * at the entity-creation entry points (graph.changeType, the web create route,
561
+ * and getAgentAllowedEntityTypes).
562
+ */
563
+ export const RESERVED_ENTITY_TYPES = new Set(['asset']);
277
564
  /**
278
565
  * Plural subfolder name → singular entity_type mapping
279
566
  */
280
567
  export const PLURAL_TO_SINGULAR = {
281
568
  'people': 'person',
282
569
  'organizations': 'organization',
283
- 'roles': 'role',
284
- 'practice-areas': 'practice-area',
570
+ 'positions': 'position',
571
+ 'deals': 'deal',
285
572
  'projects': 'project',
286
- 'meetings': 'meeting',
287
- 'decisions': 'decision',
573
+ 'events': 'event',
288
574
  'tasks': 'task',
289
- 'documents': 'document',
290
- 'datasets': 'dataset',
291
- 'references': 'reference',
292
- 'notes': 'note',
293
575
  'deliverables': 'deliverable',
576
+ 'documents': 'document',
577
+ 'decks': 'deck',
578
+ 'artifacts': 'artifact',
294
579
  'publications': 'publication',
295
- 'deals': 'deal',
296
- 'processes': 'process',
297
- 'guidelines': 'guideline',
298
580
  'case-studies': 'case-study',
581
+ 'services': 'service',
582
+ 'skills': 'skill',
583
+ 'notes': 'note',
584
+ 'references': 'reference',
585
+ 'datasets': 'dataset',
586
+ 'materials': 'material',
587
+ 'comments': 'comment',
299
588
  };
300
589
  /**
301
590
  * Singular entity_type → plural subfolder name mapping
302
591
  */
303
592
  export const SINGULAR_TO_PLURAL = Object.fromEntries(Object.entries(PLURAL_TO_SINGULAR).map(([plural, singular]) => [singular, plural]));
593
+ /**
594
+ * Cross-field task rule: a task's start date must not fall after its due date.
595
+ *
596
+ * This lives OUTSIDE the Zod schema on purpose. Expressing it as a
597
+ * `TaskSchema.refine(...)` would turn the ZodObject into a ZodEffects, which
598
+ * breaks shape introspection in schema-registry (`describeZodObject` and the
599
+ * schema_extensions `.extend()` path both rely on `instanceof z.ZodObject`) —
600
+ * and that powers the metadata field panel. So both validation entry points
601
+ * (this module's `validateEntity` and `graph.ts`'s private one) call this
602
+ * helper after a successful parse instead.
603
+ *
604
+ * `dateField` stores ISO 'YYYY-MM-DD' strings, so a lexicographic comparison
605
+ * is a correct date comparison.
606
+ */
607
+ export function assertValidTaskDates(data) {
608
+ if (data.start_date && data.date && data.start_date > data.date) {
609
+ 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})`);
610
+ }
611
+ }
304
612
  /**
305
613
  * Validation helper with helpful error messages
306
614
  */
@@ -310,11 +618,14 @@ export function validateEntity(entityType, data) {
310
618
  throw new Error(`Unknown entity type: ${entityType}`);
311
619
  }
312
620
  try {
313
- return schema.parse(data);
621
+ const parsed = schema.parse(data);
622
+ if (entityType === 'task')
623
+ assertValidTaskDates(parsed);
624
+ return parsed;
314
625
  }
315
626
  catch (error) {
316
627
  if (error instanceof z.ZodError) {
317
- const messages = error.errors.map(e => {
628
+ const messages = error.issues.map(e => {
318
629
  const path = e.path.join('.');
319
630
  return ` - ${path}: ${e.message}`;
320
631
  });
@@ -332,7 +643,7 @@ export function validateCustomEntity(data) {
332
643
  }
333
644
  catch (error) {
334
645
  if (error instanceof z.ZodError) {
335
- const messages = error.errors.map(e => {
646
+ const messages = error.issues.map(e => {
336
647
  const path = e.path.join('.');
337
648
  return ` - ${path}: ${e.message}`;
338
649
  });