studiograph 1.3.47 → 1.3.48-beta.0

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 (1057) hide show
  1. package/README.md +26 -16
  2. package/dist/agent/agent-pool.d.ts +117 -0
  3. package/dist/agent/agent-pool.js +287 -0
  4. package/dist/agent/agent-pool.js.map +1 -0
  5. package/dist/agent/followups.d.ts +34 -0
  6. package/dist/agent/followups.js +52 -0
  7. package/dist/agent/followups.js.map +1 -0
  8. package/dist/agent/orchestrator.d.ts +113 -22
  9. package/dist/agent/orchestrator.js +573 -181
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +36 -0
  12. package/dist/agent/prompts/entity-types-section.js +90 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +148 -69
  15. package/dist/agent/skill-loader.d.ts +30 -17
  16. package/dist/agent/skill-loader.js +63 -30
  17. package/dist/agent/skill-loader.js.map +1 -1
  18. package/dist/agent/skills/entity-schema.md +77 -433
  19. package/dist/agent/skills/interview/entity-templates.md +193 -0
  20. package/dist/agent/skills/interview/question-domains.md +391 -0
  21. package/dist/agent/skills/interview/skill.md +204 -0
  22. package/dist/agent/skills/schema-rules.md +54 -0
  23. package/dist/agent/tools/capture-tools.d.ts +31 -0
  24. package/dist/agent/tools/capture-tools.js +40 -0
  25. package/dist/agent/tools/capture-tools.js.map +1 -0
  26. package/dist/agent/tools/folder-tools.d.ts +47 -0
  27. package/dist/agent/tools/folder-tools.js +249 -0
  28. package/dist/agent/tools/folder-tools.js.map +1 -0
  29. package/dist/agent/tools/fs-tools.d.ts +7 -6
  30. package/dist/agent/tools/fs-tools.js +5 -4
  31. package/dist/agent/tools/fs-tools.js.map +1 -1
  32. package/dist/agent/tools/graph-tools.d.ts +21 -58
  33. package/dist/agent/tools/graph-tools.js +635 -332
  34. package/dist/agent/tools/graph-tools.js.map +1 -1
  35. package/dist/agent/tools/history-tools.d.ts +95 -0
  36. package/dist/agent/tools/history-tools.js +461 -0
  37. package/dist/agent/tools/history-tools.js.map +1 -0
  38. package/dist/agent/tools/load-skill.d.ts +6 -5
  39. package/dist/agent/tools/load-skill.js +3 -3
  40. package/dist/agent/tools/load-skill.js.map +1 -1
  41. package/dist/agent/tools/ops-tools.d.ts +5 -4
  42. package/dist/agent/tools/ops-tools.js +130 -236
  43. package/dist/agent/tools/ops-tools.js.map +1 -1
  44. package/dist/agent/tools/permission-tools.d.ts +87 -17
  45. package/dist/agent/tools/permission-tools.js +233 -38
  46. package/dist/agent/tools/permission-tools.js.map +1 -1
  47. package/dist/agent/tools/tool-loader.js +5 -4
  48. package/dist/agent/tools/tool-loader.js.map +1 -1
  49. package/dist/agent/tools/web-tools.d.ts +18 -0
  50. package/dist/agent/tools/web-tools.js +283 -0
  51. package/dist/agent/tools/web-tools.js.map +1 -0
  52. package/dist/cli/commands/about.d.ts +1 -0
  53. package/dist/cli/commands/about.js +55 -3
  54. package/dist/cli/commands/about.js.map +1 -1
  55. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  56. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  57. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  58. package/dist/cli/commands/admin/audit.d.ts +21 -0
  59. package/dist/cli/commands/admin/audit.js +174 -0
  60. package/dist/cli/commands/admin/audit.js.map +1 -0
  61. package/dist/cli/commands/admin/backup.d.ts +54 -0
  62. package/dist/cli/commands/admin/backup.js +207 -0
  63. package/dist/cli/commands/admin/backup.js.map +1 -0
  64. package/dist/cli/commands/admin/folder.d.ts +11 -0
  65. package/dist/cli/commands/admin/folder.js +186 -0
  66. package/dist/cli/commands/admin/folder.js.map +1 -0
  67. package/dist/cli/commands/admin/index.d.ts +16 -0
  68. package/dist/cli/commands/admin/index.js +46 -0
  69. package/dist/cli/commands/admin/index.js.map +1 -0
  70. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  71. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  72. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  73. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  74. package/dist/cli/commands/admin/migrate.js +263 -0
  75. package/dist/cli/commands/admin/migrate.js.map +1 -0
  76. package/dist/cli/commands/admin/restore.d.ts +24 -0
  77. package/dist/cli/commands/admin/restore.js +228 -0
  78. package/dist/cli/commands/admin/restore.js.map +1 -0
  79. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  80. package/dist/cli/commands/admin/secrets.js +256 -0
  81. package/dist/cli/commands/admin/secrets.js.map +1 -0
  82. package/dist/cli/commands/admin/settings.d.ts +28 -0
  83. package/dist/cli/commands/admin/settings.js +284 -0
  84. package/dist/cli/commands/admin/settings.js.map +1 -0
  85. package/dist/cli/commands/admin/token.d.ts +42 -0
  86. package/dist/cli/commands/admin/token.js +126 -0
  87. package/dist/cli/commands/admin/token.js.map +1 -0
  88. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  89. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  90. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  91. package/dist/cli/commands/admin/user.d.ts +11 -0
  92. package/dist/cli/commands/admin/user.js +187 -0
  93. package/dist/cli/commands/admin/user.js.map +1 -0
  94. package/dist/cli/commands/clone.d.ts +25 -3
  95. package/dist/cli/commands/clone.js +142 -36
  96. package/dist/cli/commands/clone.js.map +1 -1
  97. package/dist/cli/commands/commit.d.ts +1 -1
  98. package/dist/cli/commands/commit.js +24 -11
  99. package/dist/cli/commands/commit.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 +2 -2
  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 +12 -4
  113. package/dist/cli/commands/mcp.js.map +1 -1
  114. package/dist/cli/commands/orphans.js +14 -30
  115. package/dist/cli/commands/orphans.js.map +1 -1
  116. package/dist/cli/commands/r2.d.ts +3 -0
  117. package/dist/cli/commands/r2.js +223 -204
  118. package/dist/cli/commands/r2.js.map +1 -1
  119. package/dist/cli/commands/redeploy.js +65 -12
  120. package/dist/cli/commands/redeploy.js.map +1 -1
  121. package/dist/cli/commands/reset.d.ts +22 -6
  122. package/dist/cli/commands/reset.js +142 -63
  123. package/dist/cli/commands/reset.js.map +1 -1
  124. package/dist/cli/commands/serve.js +209 -24
  125. package/dist/cli/commands/serve.js.map +1 -1
  126. package/dist/cli/commands/sync.d.ts +1 -1
  127. package/dist/cli/commands/sync.js +372 -202
  128. package/dist/cli/commands/sync.js.map +1 -1
  129. package/dist/cli/crypto-bundle.d.ts +39 -0
  130. package/dist/cli/crypto-bundle.js +94 -0
  131. package/dist/cli/crypto-bundle.js.map +1 -0
  132. package/dist/cli/index.js +24 -35
  133. package/dist/cli/index.js.map +1 -1
  134. package/dist/cli/railway-pin.d.ts +68 -0
  135. package/dist/cli/railway-pin.js +96 -0
  136. package/dist/cli/railway-pin.js.map +1 -0
  137. package/dist/cli/railway-provisioning.d.ts +53 -0
  138. package/dist/cli/railway-provisioning.js +85 -0
  139. package/dist/cli/railway-provisioning.js.map +1 -0
  140. package/dist/cli/setup-wizard.d.ts +33 -52
  141. package/dist/cli/setup-wizard.js +43 -68
  142. package/dist/cli/setup-wizard.js.map +1 -1
  143. package/dist/core/accent-palette.d.ts +22 -0
  144. package/dist/core/accent-palette.js +47 -0
  145. package/dist/core/accent-palette.js.map +1 -0
  146. package/dist/core/cell-anchor.d.ts +29 -0
  147. package/dist/core/cell-anchor.js +53 -0
  148. package/dist/core/cell-anchor.js.map +1 -0
  149. package/dist/core/comment-anchor.d.ts +41 -0
  150. package/dist/core/comment-anchor.js +147 -0
  151. package/dist/core/comment-anchor.js.map +1 -0
  152. package/dist/core/commit-messages.d.ts +57 -0
  153. package/dist/core/commit-messages.js +85 -0
  154. package/dist/core/commit-messages.js.map +1 -0
  155. package/dist/core/embeds.d.ts +56 -0
  156. package/dist/core/embeds.js +103 -0
  157. package/dist/core/embeds.js.map +1 -0
  158. package/dist/core/entity-body-templates.d.ts +21 -0
  159. package/dist/core/entity-body-templates.js +53 -0
  160. package/dist/core/entity-body-templates.js.map +1 -0
  161. package/dist/core/entity-types-catalog.d.ts +65 -0
  162. package/dist/core/entity-types-catalog.js +140 -0
  163. package/dist/core/entity-types-catalog.js.map +1 -0
  164. package/dist/core/folder-paths.d.ts +41 -0
  165. package/dist/core/folder-paths.js +95 -0
  166. package/dist/core/folder-paths.js.map +1 -0
  167. package/dist/core/folder-sidecar.d.ts +36 -0
  168. package/dist/core/folder-sidecar.js +91 -0
  169. package/dist/core/folder-sidecar.js.map +1 -0
  170. package/dist/core/graph.d.ts +675 -14
  171. package/dist/core/graph.js +2118 -314
  172. package/dist/core/graph.js.map +1 -1
  173. package/dist/core/history-diff.d.ts +35 -0
  174. package/dist/core/history-diff.js +114 -0
  175. package/dist/core/history-diff.js.map +1 -0
  176. package/dist/core/schema-registry.d.ts +59 -0
  177. package/dist/core/schema-registry.js +198 -0
  178. package/dist/core/schema-registry.js.map +1 -1
  179. package/dist/core/schemas/connector.d.ts +67 -0
  180. package/dist/core/schemas/connector.js +100 -0
  181. package/dist/core/schemas/connector.js.map +1 -0
  182. package/dist/core/schemas/workspace.d.ts +122 -0
  183. package/dist/core/schemas/workspace.js +211 -0
  184. package/dist/core/schemas/workspace.js.map +1 -0
  185. package/dist/core/secrets/SecretStore.d.ts +77 -0
  186. package/dist/core/secrets/SecretStore.js +13 -0
  187. package/dist/core/secrets/SecretStore.js.map +1 -0
  188. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  189. package/dist/core/secrets/SettingsResolver.js +80 -0
  190. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  191. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  192. package/dist/core/secrets/SettingsStore.js +9 -0
  193. package/dist/core/secrets/SettingsStore.js.map +1 -0
  194. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  195. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  196. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  197. package/dist/core/secrets/audit.d.ts +36 -0
  198. package/dist/core/secrets/audit.js +60 -0
  199. package/dist/core/secrets/audit.js.map +1 -0
  200. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  201. package/dist/core/secrets/auth-db-migration.js +653 -0
  202. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  203. package/dist/core/secrets/bundle.d.ts +141 -0
  204. package/dist/core/secrets/bundle.js +435 -0
  205. package/dist/core/secrets/bundle.js.map +1 -0
  206. package/dist/core/secrets/dual-write.d.ts +81 -0
  207. package/dist/core/secrets/dual-write.js +247 -0
  208. package/dist/core/secrets/dual-write.js.map +1 -0
  209. package/dist/core/secrets/encryption.d.ts +44 -0
  210. package/dist/core/secrets/encryption.js +97 -0
  211. package/dist/core/secrets/encryption.js.map +1 -0
  212. package/dist/core/secrets/index.d.ts +49 -0
  213. package/dist/core/secrets/index.js +74 -0
  214. package/dist/core/secrets/index.js.map +1 -0
  215. package/dist/core/secrets/master-key.d.ts +38 -0
  216. package/dist/core/secrets/master-key.js +122 -0
  217. package/dist/core/secrets/master-key.js.map +1 -0
  218. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  219. package/dist/core/secrets/probes/anthropic.js +300 -0
  220. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  221. package/dist/core/secrets/probes/brave.d.ts +9 -0
  222. package/dist/core/secrets/probes/brave.js +15 -0
  223. package/dist/core/secrets/probes/brave.js.map +1 -0
  224. package/dist/core/secrets/probes/r2.d.ts +15 -0
  225. package/dist/core/secrets/probes/r2.js +14 -0
  226. package/dist/core/secrets/probes/r2.js.map +1 -0
  227. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  228. package/dist/core/secrets/probes/voyage.js +52 -0
  229. package/dist/core/secrets/probes/voyage.js.map +1 -0
  230. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  231. package/dist/core/secrets/r2-structural-migration.js +109 -0
  232. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  233. package/dist/core/secrets/read-flip.d.ts +59 -0
  234. package/dist/core/secrets/read-flip.js +87 -0
  235. package/dist/core/secrets/read-flip.js.map +1 -0
  236. package/dist/core/secrets/registry.d.ts +188 -0
  237. package/dist/core/secrets/registry.js +598 -0
  238. package/dist/core/secrets/registry.js.map +1 -0
  239. package/dist/core/types.d.ts +77 -455
  240. package/dist/core/types.js +17 -3
  241. package/dist/core/types.js.map +1 -1
  242. package/dist/core/user-config.d.ts +75 -7
  243. package/dist/core/user-config.js +155 -7
  244. package/dist/core/user-config.js.map +1 -1
  245. package/dist/core/validation.d.ts +717 -1791
  246. package/dist/core/validation.js +357 -228
  247. package/dist/core/validation.js.map +1 -1
  248. package/dist/core/workspace-manager.d.ts +79 -12
  249. package/dist/core/workspace-manager.js +213 -73
  250. package/dist/core/workspace-manager.js.map +1 -1
  251. package/dist/core/workspace.d.ts +19 -5
  252. package/dist/core/workspace.js +69 -35
  253. package/dist/core/workspace.js.map +1 -1
  254. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  255. package/dist/mcp/comment-virtual-entity.js +71 -0
  256. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  257. package/dist/mcp/connector-manager.d.ts +94 -13
  258. package/dist/mcp/connector-manager.js +283 -62
  259. package/dist/mcp/connector-manager.js.map +1 -1
  260. package/dist/mcp/oauth-provider.d.ts +27 -33
  261. package/dist/mcp/oauth-provider.js +65 -134
  262. package/dist/mcp/oauth-provider.js.map +1 -1
  263. package/dist/mcp/oauth-registry.d.ts +62 -0
  264. package/dist/mcp/oauth-registry.js +85 -0
  265. package/dist/mcp/oauth-registry.js.map +1 -0
  266. package/dist/mcp/server.d.ts +11 -3
  267. package/dist/mcp/server.js +30 -5
  268. package/dist/mcp/server.js.map +1 -1
  269. package/dist/mcp/state-signer.d.ts +41 -0
  270. package/dist/mcp/state-signer.js +120 -0
  271. package/dist/mcp/state-signer.js.map +1 -0
  272. package/dist/mcp/tools.d.ts +35 -2
  273. package/dist/mcp/tools.js +1051 -117
  274. package/dist/mcp/tools.js.map +1 -1
  275. package/dist/server/__tests__/helpers/graph-api.d.ts +18 -0
  276. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  277. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  278. package/dist/server/body-write-coordinator.d.ts +151 -0
  279. package/dist/server/body-write-coordinator.js +161 -0
  280. package/dist/server/body-write-coordinator.js.map +1 -0
  281. package/dist/server/cloud-billing-flow.d.ts +32 -0
  282. package/dist/server/cloud-billing-flow.js +75 -0
  283. package/dist/server/cloud-billing-flow.js.map +1 -0
  284. package/dist/server/commit-audit.d.ts +26 -0
  285. package/dist/server/commit-audit.js +30 -0
  286. package/dist/server/commit-audit.js.map +1 -0
  287. package/dist/server/index.d.ts +14 -3
  288. package/dist/server/index.js +451 -193
  289. package/dist/server/index.js.map +1 -1
  290. package/dist/server/middleware/sanitize.d.ts +46 -0
  291. package/dist/server/middleware/sanitize.js +171 -0
  292. package/dist/server/middleware/sanitize.js.map +1 -0
  293. package/dist/server/routes/asset-api.d.ts +10 -0
  294. package/dist/server/routes/asset-api.js +294 -0
  295. package/dist/server/routes/asset-api.js.map +1 -0
  296. package/dist/server/routes/audit-api.d.ts +24 -0
  297. package/dist/server/routes/audit-api.js +117 -0
  298. package/dist/server/routes/audit-api.js.map +1 -0
  299. package/dist/server/routes/auth-api.d.ts +3 -2
  300. package/dist/server/routes/auth-api.js +519 -38
  301. package/dist/server/routes/auth-api.js.map +1 -1
  302. package/dist/server/routes/capture-api.d.ts +18 -0
  303. package/dist/server/routes/capture-api.js +257 -0
  304. package/dist/server/routes/capture-api.js.map +1 -0
  305. package/dist/server/routes/chat.d.ts +4 -1
  306. package/dist/server/routes/chat.js +298 -88
  307. package/dist/server/routes/chat.js.map +1 -1
  308. package/dist/server/routes/comments-api.d.ts +15 -0
  309. package/dist/server/routes/comments-api.js +444 -0
  310. package/dist/server/routes/comments-api.js.map +1 -0
  311. package/dist/server/routes/config-api.d.ts +21 -0
  312. package/dist/server/routes/config-api.js +256 -0
  313. package/dist/server/routes/config-api.js.map +1 -0
  314. package/dist/server/routes/connectors-api.d.ts +17 -0
  315. package/dist/server/routes/connectors-api.js +410 -0
  316. package/dist/server/routes/connectors-api.js.map +1 -0
  317. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  318. package/dist/server/routes/event-ingest-api.js +125 -0
  319. package/dist/server/routes/event-ingest-api.js.map +1 -0
  320. package/dist/server/routes/git-http.d.ts +3 -3
  321. package/dist/server/routes/git-http.js +86 -38
  322. package/dist/server/routes/git-http.js.map +1 -1
  323. package/dist/server/routes/graph-api-access.d.ts +35 -0
  324. package/dist/server/routes/graph-api-access.js +105 -0
  325. package/dist/server/routes/graph-api-access.js.map +1 -0
  326. package/dist/server/routes/graph-api.d.ts +3 -2
  327. package/dist/server/routes/graph-api.js +1321 -263
  328. package/dist/server/routes/graph-api.js.map +1 -1
  329. package/dist/server/routes/health.d.ts +18 -0
  330. package/dist/server/routes/health.js +74 -0
  331. package/dist/server/routes/health.js.map +1 -0
  332. package/dist/server/routes/insights-api.d.ts +1 -2
  333. package/dist/server/routes/insights-api.js +149 -41
  334. package/dist/server/routes/insights-api.js.map +1 -1
  335. package/dist/server/routes/mcp.d.ts +7 -3
  336. package/dist/server/routes/mcp.js +22 -6
  337. package/dist/server/routes/mcp.js.map +1 -1
  338. package/dist/server/routes/permissions-api.d.ts +9 -2
  339. package/dist/server/routes/permissions-api.js +87 -30
  340. package/dist/server/routes/permissions-api.js.map +1 -1
  341. package/dist/server/routes/r2-api.d.ts +25 -0
  342. package/dist/server/routes/r2-api.js +276 -0
  343. package/dist/server/routes/r2-api.js.map +1 -0
  344. package/dist/server/routes/secrets-api.d.ts +36 -0
  345. package/dist/server/routes/secrets-api.js +308 -0
  346. package/dist/server/routes/secrets-api.js.map +1 -0
  347. package/dist/server/routes/settings-api.d.ts +29 -0
  348. package/dist/server/routes/settings-api.js +180 -0
  349. package/dist/server/routes/settings-api.js.map +1 -0
  350. package/dist/server/routes/url-api.d.ts +7 -0
  351. package/dist/server/routes/url-api.js +74 -0
  352. package/dist/server/routes/url-api.js.map +1 -0
  353. package/dist/server/routes/views-api.js +81 -7
  354. package/dist/server/routes/views-api.js.map +1 -1
  355. package/dist/server/routes/workspace-api.d.ts +2 -1
  356. package/dist/server/routes/workspace-api.js +124 -35
  357. package/dist/server/routes/workspace-api.js.map +1 -1
  358. package/dist/server/routes/ws.d.ts +2 -1
  359. package/dist/server/routes/ws.js +64 -16
  360. package/dist/server/routes/ws.js.map +1 -1
  361. package/dist/server/session-manager.d.ts +48 -5
  362. package/dist/server/session-manager.js +182 -15
  363. package/dist/server/session-manager.js.map +1 -1
  364. package/dist/server/ws-hub.d.ts +138 -14
  365. package/dist/server/ws-hub.js +0 -0
  366. package/dist/server/ws-hub.js.map +1 -1
  367. package/dist/server/yjs-manager.d.ts +285 -7
  368. package/dist/server/yjs-manager.js +907 -36
  369. package/dist/server/yjs-manager.js.map +1 -1
  370. package/dist/server/yjs-persistence.d.ts +165 -0
  371. package/dist/server/yjs-persistence.js +557 -0
  372. package/dist/server/yjs-persistence.js.map +1 -0
  373. package/dist/server/yjs-text-diff.d.ts +32 -0
  374. package/dist/server/yjs-text-diff.js +61 -0
  375. package/dist/server/yjs-text-diff.js.map +1 -0
  376. package/dist/services/access-control.d.ts +73 -0
  377. package/dist/services/access-control.js +146 -0
  378. package/dist/services/access-control.js.map +1 -0
  379. package/dist/services/asset-listing.d.ts +39 -0
  380. package/dist/services/asset-listing.js +125 -0
  381. package/dist/services/asset-listing.js.map +1 -0
  382. package/dist/services/asset-upload-service.d.ts +53 -0
  383. package/dist/services/asset-upload-service.js +201 -0
  384. package/dist/services/asset-upload-service.js.map +1 -0
  385. package/dist/services/assets/asset-index-service.d.ts +82 -0
  386. package/dist/services/assets/asset-index-service.js +167 -0
  387. package/dist/services/assets/asset-index-service.js.map +1 -0
  388. package/dist/services/assets/base.d.ts +44 -0
  389. package/dist/services/assets/base.js +55 -0
  390. package/dist/services/assets/base.js.map +1 -1
  391. package/dist/services/assets/index.d.ts +69 -1
  392. package/dist/services/assets/index.js +125 -0
  393. package/dist/services/assets/index.js.map +1 -1
  394. package/dist/services/assets/local.d.ts +12 -1
  395. package/dist/services/assets/local.js +100 -1
  396. package/dist/services/assets/local.js.map +1 -1
  397. package/dist/services/assets/r2-sync.d.ts +88 -0
  398. package/dist/services/assets/r2-sync.js +412 -0
  399. package/dist/services/assets/r2-sync.js.map +1 -0
  400. package/dist/services/assets/r2.d.ts +34 -1
  401. package/dist/services/assets/r2.js +93 -1
  402. package/dist/services/assets/r2.js.map +1 -1
  403. package/dist/services/auth-service.d.ts +314 -36
  404. package/dist/services/auth-service.js +1126 -139
  405. package/dist/services/auth-service.js.map +1 -1
  406. package/dist/services/bookmark-import-service.d.ts +49 -0
  407. package/dist/services/bookmark-import-service.js +250 -0
  408. package/dist/services/bookmark-import-service.js.map +1 -0
  409. package/dist/services/cloud-inference-billing.d.ts +64 -0
  410. package/dist/services/cloud-inference-billing.js +313 -0
  411. package/dist/services/cloud-inference-billing.js.map +1 -0
  412. package/dist/services/comment-service.d.ts +97 -0
  413. package/dist/services/comment-service.js +341 -0
  414. package/dist/services/comment-service.js.map +1 -0
  415. package/dist/services/csv-service.d.ts +22 -17
  416. package/dist/services/csv-service.js +55 -92
  417. package/dist/services/csv-service.js.map +1 -1
  418. package/dist/services/entity-mutations.d.ts +161 -0
  419. package/dist/services/entity-mutations.js +296 -0
  420. package/dist/services/entity-mutations.js.map +1 -0
  421. package/dist/services/event-processor.d.ts +104 -0
  422. package/dist/services/event-processor.js +441 -0
  423. package/dist/services/event-processor.js.map +1 -0
  424. package/dist/services/folder-creation.d.ts +33 -0
  425. package/dist/services/folder-creation.js +103 -0
  426. package/dist/services/folder-creation.js.map +1 -0
  427. package/dist/services/git.d.ts +54 -0
  428. package/dist/services/git.js +188 -54
  429. package/dist/services/git.js.map +1 -1
  430. package/dist/services/graph-maintenance.d.ts +42 -0
  431. package/dist/services/graph-maintenance.js +143 -0
  432. package/dist/services/graph-maintenance.js.map +1 -0
  433. package/dist/services/import-service.d.ts +45 -2
  434. package/dist/services/import-service.js +304 -100
  435. package/dist/services/import-service.js.map +1 -1
  436. package/dist/services/lint-service.js +9 -16
  437. package/dist/services/lint-service.js.map +1 -1
  438. package/dist/services/markdown.d.ts +12 -1
  439. package/dist/services/markdown.js +71 -6
  440. package/dist/services/markdown.js.map +1 -1
  441. package/dist/services/memory-service.d.ts +22 -14
  442. package/dist/services/memory-service.js +53 -35
  443. package/dist/services/memory-service.js.map +1 -1
  444. package/dist/services/mention-detector.d.ts +23 -0
  445. package/dist/services/mention-detector.js +47 -0
  446. package/dist/services/mention-detector.js.map +1 -0
  447. package/dist/services/notification-broadcast.d.ts +32 -0
  448. package/dist/services/notification-broadcast.js +38 -0
  449. package/dist/services/notification-broadcast.js.map +1 -0
  450. package/dist/services/notification-service.d.ts +41 -0
  451. package/dist/services/notification-service.js +100 -0
  452. package/dist/services/notification-service.js.map +1 -0
  453. package/dist/services/personal-folder.d.ts +40 -0
  454. package/dist/services/personal-folder.js +101 -0
  455. package/dist/services/personal-folder.js.map +1 -0
  456. package/dist/services/user-person-bridge.d.ts +118 -0
  457. package/dist/services/user-person-bridge.js +306 -0
  458. package/dist/services/user-person-bridge.js.map +1 -0
  459. package/dist/services/vector-service.d.ts +146 -6
  460. package/dist/services/vector-service.js +276 -13
  461. package/dist/services/vector-service.js.map +1 -1
  462. package/dist/services/workspace-access.d.ts +106 -0
  463. package/dist/services/workspace-access.js +149 -0
  464. package/dist/services/workspace-access.js.map +1 -0
  465. package/dist/utils/git.d.ts +17 -2
  466. package/dist/utils/git.js +23 -7
  467. package/dist/utils/git.js.map +1 -1
  468. package/dist/utils/log.d.ts +42 -0
  469. package/dist/utils/log.js +137 -0
  470. package/dist/utils/log.js.map +1 -0
  471. package/dist/utils/preflight.js +2 -2
  472. package/dist/utils/preflight.js.map +1 -1
  473. package/dist/utils/version-checker.d.ts +12 -19
  474. package/dist/utils/version-checker.js +14 -104
  475. package/dist/utils/version-checker.js.map +1 -1
  476. package/dist/web/_app/immutable/assets/0.DDqq11xY.css +2 -0
  477. package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
  478. package/dist/web/_app/immutable/assets/13.7d-Q37wc.css +1 -0
  479. package/dist/web/_app/immutable/assets/14.CmLrbzZp.css +1 -0
  480. package/dist/web/_app/immutable/assets/2.CGK2ky-K.css +1 -0
  481. package/dist/web/_app/immutable/assets/3.CV0abekd.css +1 -0
  482. package/dist/web/_app/immutable/assets/4.fGsEpo95.css +1 -0
  483. package/dist/web/_app/immutable/assets/AgentOverlay.DqzjAOm4.css +1 -0
  484. package/dist/web/_app/immutable/assets/AssetManagerModal.BKJfPAPk.css +1 -0
  485. package/dist/web/_app/immutable/assets/CalendarView.bNewSxkH.css +1 -0
  486. package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
  487. package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
  488. package/dist/web/_app/immutable/assets/FolderPicker.B5KdvRYl.css +1 -0
  489. package/dist/web/_app/immutable/assets/GalleryView.DgvSjS0I.css +1 -0
  490. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  491. package/dist/web/_app/immutable/assets/KanbanView.D0QbZFd6.css +1 -0
  492. package/dist/web/_app/immutable/assets/Markdown.B4lW7Llh.css +1 -0
  493. package/dist/web/_app/immutable/assets/SettingsDialog.DYWYMFSO.css +1 -0
  494. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  495. package/dist/web/_app/immutable/assets/StopFilledAlt.clodJdp5.css +1 -0
  496. package/dist/web/_app/immutable/assets/TimelineView.DA-H6dvv.css +1 -0
  497. package/dist/web/_app/immutable/assets/WorkspaceView.BS1ildu7.css +1 -0
  498. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  499. package/dist/web/_app/immutable/assets/formatting.B912lpdG.css +1 -0
  500. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  501. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  502. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  503. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  504. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  505. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  506. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  507. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  508. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  509. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  510. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  511. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  512. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  513. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  514. package/dist/web/_app/immutable/assets/inline-list.cqga56xT.css +1 -0
  515. package/dist/web/_app/immutable/assets/list-columns.DCMVmy_Q.css +1 -0
  516. package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
  517. package/dist/web/_app/immutable/assets/sheet.DJPuqnTg.css +1 -0
  518. package/dist/web/_app/immutable/assets/speech-dictation.C5CYFhS1.css +1 -0
  519. package/dist/web/_app/immutable/chunks/0iDDDyaZ.js +1 -0
  520. package/dist/web/_app/immutable/chunks/2LgrBrpS2.js +2 -0
  521. package/dist/web/_app/immutable/chunks/3EfPAYzi2.js +1 -0
  522. package/dist/web/_app/immutable/chunks/7Bu427my2.js +184 -0
  523. package/dist/web/_app/immutable/chunks/96h3ktuk.js +1 -0
  524. package/dist/web/_app/immutable/chunks/A6FJA1AF.js +1 -0
  525. package/dist/web/_app/immutable/chunks/B-FAwCqe2.js +1 -0
  526. package/dist/web/_app/immutable/chunks/B-V5eMSw2.js +1 -0
  527. package/dist/web/_app/immutable/chunks/B-i9_YVM.js +1 -0
  528. package/dist/web/_app/immutable/chunks/B15-kvCe2.js +1 -0
  529. package/dist/web/_app/immutable/chunks/B1KZ7zY32.js +2 -0
  530. package/dist/web/_app/immutable/chunks/B4gpzeQ2.js +1 -0
  531. package/dist/web/_app/immutable/chunks/B6Lt-qaJ2.js +1 -0
  532. package/dist/web/_app/immutable/chunks/B7tbGyiU2.js +1 -0
  533. package/dist/web/_app/immutable/chunks/BBxt8lpa.js +1 -0
  534. package/dist/web/_app/immutable/chunks/BCaRi2AF.js +1 -0
  535. package/dist/web/_app/immutable/chunks/BJ6Z7eAM.js +2 -0
  536. package/dist/web/_app/immutable/chunks/BM_vIwVC.js +83 -0
  537. package/dist/web/_app/immutable/chunks/BQULA6er.js +4 -0
  538. package/dist/web/_app/immutable/chunks/BQW-EDgP2.js +224 -0
  539. package/dist/web/_app/immutable/chunks/BR6jMpLB.js +1 -0
  540. package/dist/web/_app/immutable/chunks/BVnuLlVg.js +1 -0
  541. package/dist/web/_app/immutable/chunks/BddNmQ8j.js +1 -0
  542. package/dist/web/_app/immutable/chunks/BeuunHPO.js +1 -0
  543. package/dist/web/_app/immutable/chunks/BhTmSo4n2.js +1 -0
  544. package/dist/web/_app/immutable/chunks/BikW7mty2.js +1 -0
  545. package/dist/web/_app/immutable/chunks/BkyFvJvz.js +1 -0
  546. package/dist/web/_app/immutable/chunks/BlyFGPFV.js +22 -0
  547. package/dist/web/_app/immutable/chunks/Bo5dghSu.js +3 -0
  548. package/dist/web/_app/immutable/chunks/BpPyho8Y.js +3 -0
  549. package/dist/web/_app/immutable/chunks/BsuvyNDN2.js +2 -0
  550. package/dist/web/_app/immutable/chunks/BuKi0vpu2.js +7 -0
  551. package/dist/web/_app/immutable/chunks/BuuYnIjE.js +1 -0
  552. package/dist/web/_app/immutable/chunks/By4lVKNC.js +2 -0
  553. package/dist/web/_app/immutable/chunks/ByQGCIwO.js +5 -0
  554. package/dist/web/_app/immutable/chunks/ByidpUhu.js +1 -0
  555. package/dist/web/_app/immutable/chunks/C35TIzaB.js +1 -0
  556. package/dist/web/_app/immutable/chunks/C5dM5op-.js +1 -0
  557. package/dist/web/_app/immutable/chunks/C6Nx0jpM.js +1 -0
  558. package/dist/web/_app/immutable/chunks/C6pVyOEl2.js +1 -0
  559. package/dist/web/_app/immutable/chunks/C80GKPZ9.js +1 -0
  560. package/dist/web/_app/immutable/chunks/C94TJqPI.js +1 -0
  561. package/dist/web/_app/immutable/chunks/C9PETsiT.js +1 -0
  562. package/dist/web/_app/immutable/chunks/CAuAQ81a2.js +1 -0
  563. package/dist/web/_app/immutable/chunks/CBnzSITi2.js +1 -0
  564. package/dist/web/_app/immutable/chunks/CC9p2p6w.js +1 -0
  565. package/dist/web/_app/immutable/chunks/CCLR-AJL2.js +185 -0
  566. package/dist/web/_app/immutable/chunks/CD0X7XPW.js +6 -0
  567. package/dist/web/_app/immutable/chunks/CDTjuBSm.js +1 -0
  568. package/dist/web/_app/immutable/chunks/CH-KYFIm.js +64 -0
  569. package/dist/web/_app/immutable/chunks/CHj8fObQ2.js +9 -0
  570. package/dist/web/_app/immutable/chunks/CK-UnH-n2.js +1 -0
  571. package/dist/web/_app/immutable/chunks/CKH5BEAh.js +1 -0
  572. package/dist/web/_app/immutable/chunks/CPSupDJp2.js +2 -0
  573. package/dist/web/_app/immutable/chunks/CSUrYOis.js +1 -0
  574. package/dist/web/_app/immutable/chunks/CYTTTma0.js +3 -0
  575. package/dist/web/_app/immutable/chunks/Cbaut_us2.js +1 -0
  576. package/dist/web/_app/immutable/chunks/CiIpSx5n2.js +1 -0
  577. package/dist/web/_app/immutable/chunks/CkLfUXwy.js +1 -0
  578. package/dist/web/_app/immutable/chunks/CokE4L8B2.js +1 -0
  579. package/dist/web/_app/immutable/chunks/CpLdnbh3.js +1 -0
  580. package/dist/web/_app/immutable/chunks/CvDrXJk9.js +1 -0
  581. package/dist/web/_app/immutable/chunks/D00MFB9_2.js +1 -0
  582. package/dist/web/_app/immutable/chunks/D41CbXmM.js +1 -0
  583. package/dist/web/_app/immutable/chunks/D5Hj-MPO2.js +1 -0
  584. package/dist/web/_app/immutable/chunks/D6nLEmZy2.js +1 -0
  585. package/dist/web/_app/immutable/chunks/D71ZlQBM2.js +2 -0
  586. package/dist/web/_app/immutable/chunks/D9ql9vXU.js +1 -0
  587. package/dist/web/_app/immutable/chunks/DAXW5iLp.js +1 -0
  588. package/dist/web/_app/immutable/chunks/DBzQ8LyQ2.js +2 -0
  589. package/dist/web/_app/immutable/chunks/DIb5rAPU2.js +1 -0
  590. package/dist/web/_app/immutable/chunks/DOmH4G9o.js +14 -0
  591. package/dist/web/_app/immutable/chunks/DQMWa2t72.js +1 -0
  592. package/dist/web/_app/immutable/chunks/DRsswX8S.js +1 -0
  593. package/dist/web/_app/immutable/chunks/DTCHhxD5.js +1 -0
  594. package/dist/web/_app/immutable/chunks/DUwgGBxa.js +1 -0
  595. package/dist/web/_app/immutable/chunks/DVcy5Pp82.js +1 -0
  596. package/dist/web/_app/immutable/chunks/DWygwzcO.js +1 -0
  597. package/dist/web/_app/immutable/chunks/DYXDRmoo.js +1 -0
  598. package/dist/web/_app/immutable/chunks/DZ-YyRVM.js +1 -0
  599. package/dist/web/_app/immutable/chunks/D_HVOuHV.js +1 -0
  600. package/dist/web/_app/immutable/chunks/DaoOQFPb.js +1 -0
  601. package/dist/web/_app/immutable/chunks/DdLkNvPf.js +23 -0
  602. package/dist/web/_app/immutable/chunks/DiMQob8p.js +1 -0
  603. package/dist/web/_app/immutable/chunks/DiQJ9DLy.js +1 -0
  604. package/dist/web/_app/immutable/chunks/DlORZqfE.js +1 -0
  605. package/dist/web/_app/immutable/chunks/DmeYl7eL.js +2 -0
  606. package/dist/web/_app/immutable/chunks/Dng3OcRd2.js +1 -0
  607. package/dist/web/_app/immutable/chunks/DoKMFfJd.js +1 -0
  608. package/dist/web/_app/immutable/chunks/DpzG2mVI2.js +1 -0
  609. package/dist/web/_app/immutable/chunks/DvJSCDuZ2.js +1 -0
  610. package/dist/web/_app/immutable/chunks/DvPuaTCl2.js +5 -0
  611. package/dist/web/_app/immutable/chunks/ItgU4ei5.js +1 -0
  612. package/dist/web/_app/immutable/chunks/JJDMrjj62.js +1 -0
  613. package/dist/web/_app/immutable/chunks/OTTMDMTW.js +1 -0
  614. package/dist/web/_app/immutable/chunks/RmiWpCin2.js +1 -0
  615. package/dist/web/_app/immutable/chunks/ZTiqmKJy2.js +1 -0
  616. package/dist/web/_app/immutable/chunks/ahC5WoXX2.js +1 -0
  617. package/dist/web/_app/immutable/chunks/e3SY5t2O2.js +2692 -0
  618. package/dist/web/_app/immutable/chunks/g09ZrevW.js +1 -0
  619. package/dist/web/_app/immutable/chunks/go8N1nWD2.js +3 -0
  620. package/dist/web/_app/immutable/chunks/nTAmRNKw2.js +1 -0
  621. package/dist/web/_app/immutable/chunks/oBQOivfH2.js +1 -0
  622. package/dist/web/_app/immutable/chunks/oUTRxd0f.js +1 -0
  623. package/dist/web/_app/immutable/chunks/s_7BJJYy.js +2 -0
  624. package/dist/web/_app/immutable/chunks/uuFM-ygL.js +1 -0
  625. package/dist/web/_app/immutable/chunks/v7me-ydg.js +2 -0
  626. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  627. package/dist/web/_app/immutable/chunks/zl16E4yc2.js +1 -0
  628. package/dist/web/_app/immutable/entry/app.CbuUtkoM.js +2 -0
  629. package/dist/web/_app/immutable/entry/start.DeZyKwOT.js +1 -0
  630. package/dist/web/_app/immutable/nodes/0.C4PMtdx9.js +2 -0
  631. package/dist/web/_app/immutable/nodes/1.BwVfPLMn.js +1 -0
  632. package/dist/web/_app/immutable/nodes/10.DPr_SYan.js +1 -0
  633. package/dist/web/_app/immutable/nodes/11.CJAmEchE.js +1 -0
  634. package/dist/web/_app/immutable/nodes/12.ChMWXPMk.js +1 -0
  635. package/dist/web/_app/immutable/nodes/13.8vOKq8ue.js +1 -0
  636. package/dist/web/_app/immutable/nodes/14.BOSNmj9h.js +1 -0
  637. package/dist/web/_app/immutable/nodes/2.7N4BLwhX.js +109 -0
  638. package/dist/web/_app/immutable/nodes/3.Cd-tx8Ej.js +2 -0
  639. package/dist/web/_app/immutable/nodes/4.DtuT-syy.js +14 -0
  640. package/dist/web/_app/immutable/nodes/5.YwNHOrkt.js +1 -0
  641. package/dist/web/_app/immutable/nodes/6.BSPlYQuq.js +1 -0
  642. package/dist/web/_app/immutable/nodes/7.DPXzwW0H.js +1 -0
  643. package/dist/web/_app/immutable/nodes/8.Dhpk7w3X.js +1 -0
  644. package/dist/web/_app/immutable/nodes/9.Dd4iAQN5.js +1 -0
  645. package/dist/web/_app/version.json +1 -1
  646. package/dist/web/favicon-16.png +0 -0
  647. package/dist/web/favicon-180.png +0 -0
  648. package/dist/web/favicon-32.png +0 -0
  649. package/dist/web/favicon-48.png +0 -0
  650. package/dist/web/favicon-512.png +0 -0
  651. package/dist/web/favicon.ico +0 -0
  652. package/dist/web/favicon.svg +8 -0
  653. package/dist/web/index.html +54 -19
  654. package/dist/web/studiograph-logomark.svg +29 -0
  655. package/package.json +34 -14
  656. package/dist/agent/skills/enrich-entities.md +0 -136
  657. package/dist/agent/skills/obsidian-source-setup.md +0 -246
  658. package/dist/agent/skills/skill-loader.d.ts +0 -48
  659. package/dist/agent/skills/skill-loader.js +0 -166
  660. package/dist/agent/skills/skill-loader.js.map +0 -1
  661. package/dist/agent/skills/sync-configuration.md +0 -119
  662. package/dist/agent/skills/sync-setup.md +0 -82
  663. package/dist/agent/tools/sync-tools.d.ts +0 -35
  664. package/dist/agent/tools/sync-tools.js +0 -992
  665. package/dist/agent/tools/sync-tools.js.map +0 -1
  666. package/dist/auth/github.d.ts +0 -56
  667. package/dist/auth/github.js +0 -169
  668. package/dist/auth/github.js.map +0 -1
  669. package/dist/cli/commands/access.d.ts +0 -11
  670. package/dist/cli/commands/access.js +0 -156
  671. package/dist/cli/commands/access.js.map +0 -1
  672. package/dist/cli/commands/app.d.ts +0 -7
  673. package/dist/cli/commands/app.js +0 -268
  674. package/dist/cli/commands/app.js.map +0 -1
  675. package/dist/cli/commands/auth.d.ts +0 -10
  676. package/dist/cli/commands/auth.js +0 -79
  677. package/dist/cli/commands/auth.js.map +0 -1
  678. package/dist/cli/commands/clear.d.ts +0 -5
  679. package/dist/cli/commands/clear.js +0 -36
  680. package/dist/cli/commands/clear.js.map +0 -1
  681. package/dist/cli/commands/collection.d.ts +0 -10
  682. package/dist/cli/commands/collection.js +0 -187
  683. package/dist/cli/commands/collection.js.map +0 -1
  684. package/dist/cli/commands/enrich.d.ts +0 -11
  685. package/dist/cli/commands/enrich.js +0 -135
  686. package/dist/cli/commands/enrich.js.map +0 -1
  687. package/dist/cli/commands/graphrag.d.ts +0 -12
  688. package/dist/cli/commands/graphrag.js +0 -122
  689. package/dist/cli/commands/graphrag.js.map +0 -1
  690. package/dist/cli/commands/join.d.ts +0 -9
  691. package/dist/cli/commands/join.js +0 -255
  692. package/dist/cli/commands/join.js.map +0 -1
  693. package/dist/cli/commands/members.d.ts +0 -11
  694. package/dist/cli/commands/members.js +0 -230
  695. package/dist/cli/commands/members.js.map +0 -1
  696. package/dist/cli/commands/org.d.ts +0 -10
  697. package/dist/cli/commands/org.js +0 -132
  698. package/dist/cli/commands/org.js.map +0 -1
  699. package/dist/cli/commands/provision.d.ts +0 -8
  700. package/dist/cli/commands/provision.js +0 -116
  701. package/dist/cli/commands/provision.js.map +0 -1
  702. package/dist/cli/commands/resolve.d.ts +0 -8
  703. package/dist/cli/commands/resolve.js +0 -85
  704. package/dist/cli/commands/resolve.js.map +0 -1
  705. package/dist/cli/commands/review.d.ts +0 -19
  706. package/dist/cli/commands/review.js +0 -128
  707. package/dist/cli/commands/review.js.map +0 -1
  708. package/dist/cli/commands/source.d.ts +0 -16
  709. package/dist/cli/commands/source.js +0 -159
  710. package/dist/cli/commands/source.js.map +0 -1
  711. package/dist/cli/commands/start.d.ts +0 -7
  712. package/dist/cli/commands/start.js +0 -589
  713. package/dist/cli/commands/start.js.map +0 -1
  714. package/dist/cli/commands/sync-collection.d.ts +0 -14
  715. package/dist/cli/commands/sync-collection.js +0 -355
  716. package/dist/cli/commands/sync-collection.js.map +0 -1
  717. package/dist/cli/commands/sync-entities.d.ts +0 -13
  718. package/dist/cli/commands/sync-entities.js +0 -242
  719. package/dist/cli/commands/sync-entities.js.map +0 -1
  720. package/dist/cli/commands/team.d.ts +0 -12
  721. package/dist/cli/commands/team.js +0 -185
  722. package/dist/cli/commands/team.js.map +0 -1
  723. package/dist/cli/commands/update.d.ts +0 -8
  724. package/dist/cli/commands/update.js +0 -155
  725. package/dist/cli/commands/update.js.map +0 -1
  726. package/dist/cli/commands/user.d.ts +0 -7
  727. package/dist/cli/commands/user.js +0 -153
  728. package/dist/cli/commands/user.js.map +0 -1
  729. package/dist/cli/scaffolding.d.ts +0 -12
  730. package/dist/cli/scaffolding.js +0 -397
  731. package/dist/cli/scaffolding.js.map +0 -1
  732. package/dist/cli/sync-review-interactive.d.ts +0 -31
  733. package/dist/cli/sync-review-interactive.js +0 -393
  734. package/dist/cli/sync-review-interactive.js.map +0 -1
  735. package/dist/core/migration-runner.d.ts +0 -42
  736. package/dist/core/migration-runner.js +0 -232
  737. package/dist/core/migration-runner.js.map +0 -1
  738. package/dist/core/migration-types.d.ts +0 -101
  739. package/dist/core/migration-types.js +0 -21
  740. package/dist/core/migration-types.js.map +0 -1
  741. package/dist/core/migrations/20260219-formalize-memory-location.d.ts +0 -2
  742. package/dist/core/migrations/20260219-formalize-memory-location.js +0 -35
  743. package/dist/core/migrations/20260219-formalize-memory-location.js.map +0 -1
  744. package/dist/core/migrations/20260220-add-workspace-metadata.d.ts +0 -12
  745. package/dist/core/migrations/20260220-add-workspace-metadata.js +0 -65
  746. package/dist/core/migrations/20260220-add-workspace-metadata.js.map +0 -1
  747. package/dist/core/migrations/20260220-add-workspace-readme.d.ts +0 -11
  748. package/dist/core/migrations/20260220-add-workspace-readme.js +0 -82
  749. package/dist/core/migrations/20260220-add-workspace-readme.js.map +0 -1
  750. package/dist/core/migrations/20260220-migrate-yaml-to-json.d.ts +0 -9
  751. package/dist/core/migrations/20260220-migrate-yaml-to-json.js +0 -64
  752. package/dist/core/migrations/20260220-migrate-yaml-to-json.js.map +0 -1
  753. package/dist/core/migrations/index.d.ts +0 -11
  754. package/dist/core/migrations/index.js +0 -23
  755. package/dist/core/migrations/index.js.map +0 -1
  756. package/dist/integrations/asana.d.ts +0 -26
  757. package/dist/integrations/asana.js +0 -78
  758. package/dist/integrations/asana.js.map +0 -1
  759. package/dist/integrations/figma-local.d.ts +0 -16
  760. package/dist/integrations/figma-local.js +0 -10
  761. package/dist/integrations/figma-local.js.map +0 -1
  762. package/dist/integrations/figma.d.ts +0 -17
  763. package/dist/integrations/figma.js +0 -17
  764. package/dist/integrations/figma.js.map +0 -1
  765. package/dist/integrations/granola.d.ts +0 -24
  766. package/dist/integrations/granola.js +0 -60
  767. package/dist/integrations/granola.js.map +0 -1
  768. package/dist/integrations/linear.d.ts +0 -14
  769. package/dist/integrations/linear.js +0 -80
  770. package/dist/integrations/linear.js.map +0 -1
  771. package/dist/integrations/paper-local.d.ts +0 -14
  772. package/dist/integrations/paper-local.js +0 -10
  773. package/dist/integrations/paper-local.js.map +0 -1
  774. package/dist/integrations/paper.d.ts +0 -2
  775. package/dist/integrations/paper.js +0 -10
  776. package/dist/integrations/paper.js.map +0 -1
  777. package/dist/integrations/pipedrive.d.ts +0 -26
  778. package/dist/integrations/pipedrive.js +0 -97
  779. package/dist/integrations/pipedrive.js.map +0 -1
  780. package/dist/integrations/registry.d.ts +0 -15
  781. package/dist/integrations/registry.js +0 -27
  782. package/dist/integrations/registry.js.map +0 -1
  783. package/dist/integrations/types.d.ts +0 -38
  784. package/dist/integrations/types.js +0 -9
  785. package/dist/integrations/types.js.map +0 -1
  786. package/dist/lib/lib/utils.d.ts +0 -2
  787. package/dist/lib/lib/utils.js +0 -6
  788. package/dist/lib/lib/utils.js.map +0 -1
  789. package/dist/mcp/connectors/asana.d.ts +0 -2
  790. package/dist/mcp/connectors/asana.js +0 -20
  791. package/dist/mcp/connectors/asana.js.map +0 -1
  792. package/dist/mcp/connectors/definitions.d.ts +0 -45
  793. package/dist/mcp/connectors/definitions.js +0 -32
  794. package/dist/mcp/connectors/definitions.js.map +0 -1
  795. package/dist/mcp/connectors/figma.d.ts +0 -5
  796. package/dist/mcp/connectors/figma.js +0 -21
  797. package/dist/mcp/connectors/figma.js.map +0 -1
  798. package/dist/mcp/connectors/gdrive.d.ts +0 -2
  799. package/dist/mcp/connectors/gdrive.js +0 -20
  800. package/dist/mcp/connectors/gdrive.js.map +0 -1
  801. package/dist/mcp/connectors/granola.d.ts +0 -2
  802. package/dist/mcp/connectors/granola.js +0 -12
  803. package/dist/mcp/connectors/granola.js.map +0 -1
  804. package/dist/mcp/connectors/linear.d.ts +0 -2
  805. package/dist/mcp/connectors/linear.js +0 -19
  806. package/dist/mcp/connectors/linear.js.map +0 -1
  807. package/dist/mcp/connectors/obsidian.d.ts +0 -2
  808. package/dist/mcp/connectors/obsidian.js +0 -19
  809. package/dist/mcp/connectors/obsidian.js.map +0 -1
  810. package/dist/mcp/connectors/pipedrive.d.ts +0 -2
  811. package/dist/mcp/connectors/pipedrive.js +0 -20
  812. package/dist/mcp/connectors/pipedrive.js.map +0 -1
  813. package/dist/mcp/connectors/slack.d.ts +0 -2
  814. package/dist/mcp/connectors/slack.js +0 -21
  815. package/dist/mcp/connectors/slack.js.map +0 -1
  816. package/dist/mcp/server-oauth-provider.d.ts +0 -56
  817. package/dist/mcp/server-oauth-provider.js +0 -142
  818. package/dist/mcp/server-oauth-provider.js.map +0 -1
  819. package/dist/server/chrome/chrome.css +0 -691
  820. package/dist/server/chrome/chrome.js +0 -374
  821. package/dist/server/collab-authority.d.ts +0 -70
  822. package/dist/server/collab-authority.js +0 -218
  823. package/dist/server/collab-authority.js.map +0 -1
  824. package/dist/server/collab.d.ts +0 -29
  825. package/dist/server/collab.js +0 -195
  826. package/dist/server/collab.js.map +0 -1
  827. package/dist/server/commit-scheduler.d.ts +0 -39
  828. package/dist/server/commit-scheduler.js +0 -113
  829. package/dist/server/commit-scheduler.js.map +0 -1
  830. package/dist/server/plugin-loader.d.ts +0 -53
  831. package/dist/server/plugin-loader.js +0 -155
  832. package/dist/server/plugin-loader.js.map +0 -1
  833. package/dist/server/routes/collab.d.ts +0 -6
  834. package/dist/server/routes/collab.js +0 -10
  835. package/dist/server/routes/collab.js.map +0 -1
  836. package/dist/server/routes/git-api.d.ts +0 -9
  837. package/dist/server/routes/git-api.js +0 -82
  838. package/dist/server/routes/git-api.js.map +0 -1
  839. package/dist/server/routes/meeting-ingest-api.d.ts +0 -15
  840. package/dist/server/routes/meeting-ingest-api.js +0 -323
  841. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  842. package/dist/server/routes/sync-api.d.ts +0 -26
  843. package/dist/server/routes/sync-api.js +0 -814
  844. package/dist/server/routes/sync-api.js.map +0 -1
  845. package/dist/server/routes/webhook.d.ts +0 -14
  846. package/dist/server/routes/webhook.js +0 -102
  847. package/dist/server/routes/webhook.js.map +0 -1
  848. package/dist/services/github-provisioner.d.ts +0 -36
  849. package/dist/services/github-provisioner.js +0 -126
  850. package/dist/services/github-provisioner.js.map +0 -1
  851. package/dist/services/github-service.d.ts +0 -99
  852. package/dist/services/github-service.js +0 -310
  853. package/dist/services/github-service.js.map +0 -1
  854. package/dist/services/insights.d.ts +0 -38
  855. package/dist/services/insights.js +0 -246
  856. package/dist/services/insights.js.map +0 -1
  857. package/dist/services/sync/collection-sync.d.ts +0 -60
  858. package/dist/services/sync/collection-sync.js +0 -509
  859. package/dist/services/sync/collection-sync.js.map +0 -1
  860. package/dist/services/sync/commit.d.ts +0 -60
  861. package/dist/services/sync/commit.js +0 -354
  862. package/dist/services/sync/commit.js.map +0 -1
  863. package/dist/services/sync/context-index.d.ts +0 -69
  864. package/dist/services/sync/context-index.js +0 -280
  865. package/dist/services/sync/context-index.js.map +0 -1
  866. package/dist/services/sync/data-fetcher.d.ts +0 -31
  867. package/dist/services/sync/data-fetcher.js +0 -12
  868. package/dist/services/sync/data-fetcher.js.map +0 -1
  869. package/dist/services/sync/derive.d.ts +0 -34
  870. package/dist/services/sync/derive.js +0 -164
  871. package/dist/services/sync/derive.js.map +0 -1
  872. package/dist/services/sync/enrichment-state.d.ts +0 -31
  873. package/dist/services/sync/enrichment-state.js +0 -63
  874. package/dist/services/sync/enrichment-state.js.map +0 -1
  875. package/dist/services/sync/enrichment.d.ts +0 -25
  876. package/dist/services/sync/enrichment.js +0 -121
  877. package/dist/services/sync/enrichment.js.map +0 -1
  878. package/dist/services/sync/entity-refresh.d.ts +0 -30
  879. package/dist/services/sync/entity-refresh.js +0 -275
  880. package/dist/services/sync/entity-refresh.js.map +0 -1
  881. package/dist/services/sync/frontmatter-extractor.d.ts +0 -40
  882. package/dist/services/sync/frontmatter-extractor.js +0 -279
  883. package/dist/services/sync/frontmatter-extractor.js.map +0 -1
  884. package/dist/services/sync/graph-match-state.d.ts +0 -33
  885. package/dist/services/sync/graph-match-state.js +0 -61
  886. package/dist/services/sync/graph-match-state.js.map +0 -1
  887. package/dist/services/sync/graph-match.d.ts +0 -53
  888. package/dist/services/sync/graph-match.js +0 -316
  889. package/dist/services/sync/graph-match.js.map +0 -1
  890. package/dist/services/sync/graphrag-client.d.ts +0 -43
  891. package/dist/services/sync/graphrag-client.js +0 -94
  892. package/dist/services/sync/graphrag-client.js.map +0 -1
  893. package/dist/services/sync/graphrag-config.d.ts +0 -16
  894. package/dist/services/sync/graphrag-config.js +0 -39
  895. package/dist/services/sync/graphrag-config.js.map +0 -1
  896. package/dist/services/sync/graphrag-context.d.ts +0 -14
  897. package/dist/services/sync/graphrag-context.js +0 -109
  898. package/dist/services/sync/graphrag-context.js.map +0 -1
  899. package/dist/services/sync/graphrag-indexer.d.ts +0 -30
  900. package/dist/services/sync/graphrag-indexer.js +0 -358
  901. package/dist/services/sync/graphrag-indexer.js.map +0 -1
  902. package/dist/services/sync/llm.d.ts +0 -32
  903. package/dist/services/sync/llm.js +0 -115
  904. package/dist/services/sync/llm.js.map +0 -1
  905. package/dist/services/sync/mcp-client.d.ts +0 -71
  906. package/dist/services/sync/mcp-client.js +0 -299
  907. package/dist/services/sync/mcp-client.js.map +0 -1
  908. package/dist/services/sync/model-factory.d.ts +0 -13
  909. package/dist/services/sync/model-factory.js +0 -38
  910. package/dist/services/sync/model-factory.js.map +0 -1
  911. package/dist/services/sync/name-quality.d.ts +0 -31
  912. package/dist/services/sync/name-quality.js +0 -60
  913. package/dist/services/sync/name-quality.js.map +0 -1
  914. package/dist/services/sync/output-schemas.d.ts +0 -92
  915. package/dist/services/sync/output-schemas.js +0 -43
  916. package/dist/services/sync/output-schemas.js.map +0 -1
  917. package/dist/services/sync/prompts.d.ts +0 -19
  918. package/dist/services/sync/prompts.js +0 -128
  919. package/dist/services/sync/prompts.js.map +0 -1
  920. package/dist/services/sync/reconciler.d.ts +0 -48
  921. package/dist/services/sync/reconciler.js +0 -294
  922. package/dist/services/sync/reconciler.js.map +0 -1
  923. package/dist/services/sync/rest-client.d.ts +0 -40
  924. package/dist/services/sync/rest-client.js +0 -100
  925. package/dist/services/sync/rest-client.js.map +0 -1
  926. package/dist/services/sync/source-config.d.ts +0 -67
  927. package/dist/services/sync/source-config.js +0 -304
  928. package/dist/services/sync/source-config.js.map +0 -1
  929. package/dist/services/sync/source-definitions/asana.d.ts +0 -14
  930. package/dist/services/sync/source-definitions/asana.js +0 -42
  931. package/dist/services/sync/source-definitions/asana.js.map +0 -1
  932. package/dist/services/sync/source-definitions/definitions.d.ts +0 -8
  933. package/dist/services/sync/source-definitions/definitions.js +0 -8
  934. package/dist/services/sync/source-definitions/definitions.js.map +0 -1
  935. package/dist/services/sync/source-definitions/gdrive.d.ts +0 -16
  936. package/dist/services/sync/source-definitions/gdrive.js +0 -68
  937. package/dist/services/sync/source-definitions/gdrive.js.map +0 -1
  938. package/dist/services/sync/source-definitions/granola.d.ts +0 -2
  939. package/dist/services/sync/source-definitions/granola.js +0 -21
  940. package/dist/services/sync/source-definitions/granola.js.map +0 -1
  941. package/dist/services/sync/source-definitions/linear.d.ts +0 -2
  942. package/dist/services/sync/source-definitions/linear.js +0 -62
  943. package/dist/services/sync/source-definitions/linear.js.map +0 -1
  944. package/dist/services/sync/source-definitions/obsidian.d.ts +0 -2
  945. package/dist/services/sync/source-definitions/obsidian.js +0 -55
  946. package/dist/services/sync/source-definitions/obsidian.js.map +0 -1
  947. package/dist/services/sync/source-definitions/pipedrive.d.ts +0 -2
  948. package/dist/services/sync/source-definitions/pipedrive.js +0 -43
  949. package/dist/services/sync/source-definitions/pipedrive.js.map +0 -1
  950. package/dist/services/sync/staging.d.ts +0 -53
  951. package/dist/services/sync/staging.js +0 -130
  952. package/dist/services/sync/staging.js.map +0 -1
  953. package/dist/services/sync/structured-extractor.d.ts +0 -57
  954. package/dist/services/sync/structured-extractor.js +0 -584
  955. package/dist/services/sync/structured-extractor.js.map +0 -1
  956. package/dist/services/sync/sync-runner.d.ts +0 -32
  957. package/dist/services/sync/sync-runner.js +0 -195
  958. package/dist/services/sync/sync-runner.js.map +0 -1
  959. package/dist/services/sync/sync-state.d.ts +0 -43
  960. package/dist/services/sync/sync-state.js +0 -154
  961. package/dist/services/sync/sync-state.js.map +0 -1
  962. package/dist/services/sync/types.d.ts +0 -381
  963. package/dist/services/sync/types.js +0 -8
  964. package/dist/services/sync/types.js.map +0 -1
  965. package/dist/services/sync/unstructured-extractor.d.ts +0 -27
  966. package/dist/services/sync/unstructured-extractor.js +0 -185
  967. package/dist/services/sync/unstructured-extractor.js.map +0 -1
  968. package/dist/utils/merge-resolver.d.ts +0 -59
  969. package/dist/utils/merge-resolver.js +0 -303
  970. package/dist/utils/merge-resolver.js.map +0 -1
  971. package/dist/utils/workspace-config.d.ts +0 -8
  972. package/dist/utils/workspace-config.js +0 -22
  973. package/dist/utils/workspace-config.js.map +0 -1
  974. package/dist/web/_app/immutable/assets/0.DdizXOKi.css +0 -1
  975. package/dist/web/_app/immutable/assets/10.BUrHkYry.css +0 -1
  976. package/dist/web/_app/immutable/assets/2.n7-yW_Fs.css +0 -1
  977. package/dist/web/_app/immutable/assets/3.BtaZagnv.css +0 -1
  978. package/dist/web/_app/immutable/assets/4.DT7X0x5S.css +0 -1
  979. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  980. package/dist/web/_app/immutable/assets/6.CquhUpOu.css +0 -1
  981. package/dist/web/_app/immutable/assets/7.CjbDRbuG.css +0 -1
  982. package/dist/web/_app/immutable/assets/8.S1QdUGNM.css +0 -1
  983. package/dist/web/_app/immutable/assets/9.CT4xL4K3.css +0 -1
  984. package/dist/web/_app/immutable/assets/Copy.FS8bdfxr.css +0 -1
  985. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  986. package/dist/web/_app/immutable/assets/ViewToolbar.D-QW2oKe.css +0 -1
  987. package/dist/web/_app/immutable/assets/index.D6tMDJWk.css +0 -1
  988. package/dist/web/_app/immutable/chunks/37NdyH6G.js +0 -32
  989. package/dist/web/_app/immutable/chunks/4Hhzb6pv.js +0 -1
  990. package/dist/web/_app/immutable/chunks/72bZS3G9.js +0 -1
  991. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  992. package/dist/web/_app/immutable/chunks/B-7hHz7B.js +0 -1
  993. package/dist/web/_app/immutable/chunks/B340SUKR.js +0 -1
  994. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  995. package/dist/web/_app/immutable/chunks/BDoWDZaG.js +0 -1
  996. package/dist/web/_app/immutable/chunks/BFyl1ZHO.js +0 -1
  997. package/dist/web/_app/immutable/chunks/BS2rFAVq.js +0 -1
  998. package/dist/web/_app/immutable/chunks/BSsDC_p4.js +0 -1
  999. package/dist/web/_app/immutable/chunks/BTX2Jr8_.js +0 -1
  1000. package/dist/web/_app/immutable/chunks/BWNY8zw6.js +0 -2
  1001. package/dist/web/_app/immutable/chunks/BdPUVvAi.js +0 -1
  1002. package/dist/web/_app/immutable/chunks/BmsJVLyy.js +0 -1
  1003. package/dist/web/_app/immutable/chunks/BoAosqzE.js +0 -1
  1004. package/dist/web/_app/immutable/chunks/Bs-tL5OR.js +0 -1
  1005. package/dist/web/_app/immutable/chunks/Bsacq2UX.js +0 -1
  1006. package/dist/web/_app/immutable/chunks/BuewkNdS.js +0 -4
  1007. package/dist/web/_app/immutable/chunks/ByunV8un.js +0 -1
  1008. package/dist/web/_app/immutable/chunks/C7VoTosa.js +0 -2
  1009. package/dist/web/_app/immutable/chunks/CDV5Q7RN.js +0 -1
  1010. package/dist/web/_app/immutable/chunks/CJ8__CWt.js +0 -1
  1011. package/dist/web/_app/immutable/chunks/CJUKmosC.js +0 -5
  1012. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  1013. package/dist/web/_app/immutable/chunks/CT6oIU-C.js +0 -1
  1014. package/dist/web/_app/immutable/chunks/CTRxNfZk.js +0 -1
  1015. package/dist/web/_app/immutable/chunks/CWQRQXxy.js +0 -1
  1016. package/dist/web/_app/immutable/chunks/CXH6iFbA.js +0 -1
  1017. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  1018. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  1019. package/dist/web/_app/immutable/chunks/CdeYcEuU.js +0 -1
  1020. package/dist/web/_app/immutable/chunks/CmCtpZ1Y.js +0 -1
  1021. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  1022. package/dist/web/_app/immutable/chunks/CrdV0ttd.js +0 -1
  1023. package/dist/web/_app/immutable/chunks/CscoF-YL.js +0 -18
  1024. package/dist/web/_app/immutable/chunks/Cx4YdFMk.js +0 -1
  1025. package/dist/web/_app/immutable/chunks/D7ZqAKi9.js +0 -3
  1026. package/dist/web/_app/immutable/chunks/DGbA7IXh.js +0 -2
  1027. package/dist/web/_app/immutable/chunks/DbbB6Up5.js +0 -1
  1028. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  1029. package/dist/web/_app/immutable/chunks/DtM5cEDu.js +0 -1
  1030. package/dist/web/_app/immutable/chunks/Eqahi7_S.js +0 -2
  1031. package/dist/web/_app/immutable/chunks/FFlLQIiS.js +0 -1
  1032. package/dist/web/_app/immutable/chunks/O9Eb9k00.js +0 -1
  1033. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  1034. package/dist/web/_app/immutable/chunks/QF8MAmnc.js +0 -1
  1035. package/dist/web/_app/immutable/chunks/UjzxCpxn.js +0 -1
  1036. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  1037. package/dist/web/_app/immutable/chunks/Y90OgS-9.js +0 -1
  1038. package/dist/web/_app/immutable/chunks/cLyZlkXv.js +0 -1
  1039. package/dist/web/_app/immutable/chunks/iDtAARVW.js +0 -2
  1040. package/dist/web/_app/immutable/chunks/oC_W7W7p.js +0 -1
  1041. package/dist/web/_app/immutable/chunks/rJdWIgh-.js +0 -1
  1042. package/dist/web/_app/immutable/chunks/tvOsokaa.js +0 -1
  1043. package/dist/web/_app/immutable/chunks/uLEXaPwE.js +0 -1
  1044. package/dist/web/_app/immutable/chunks/vSaooFHB.js +0 -1
  1045. package/dist/web/_app/immutable/entry/app.DAR-mtfg.js +0 -2
  1046. package/dist/web/_app/immutable/entry/start.xDnyRaR1.js +0 -1
  1047. package/dist/web/_app/immutable/nodes/0.D0aV-Zro.js +0 -2
  1048. package/dist/web/_app/immutable/nodes/1.C7QoM8qD.js +0 -1
  1049. package/dist/web/_app/immutable/nodes/10.DrDOAjOD.js +0 -1
  1050. package/dist/web/_app/immutable/nodes/2.B0OgNuKW.js +0 -168
  1051. package/dist/web/_app/immutable/nodes/3.BZ4qHGZi.js +0 -1
  1052. package/dist/web/_app/immutable/nodes/4.hm-mxuuj.js +0 -12
  1053. package/dist/web/_app/immutable/nodes/5.Bdbt4fjx.js +0 -4
  1054. package/dist/web/_app/immutable/nodes/6.BXrCI40c.js +0 -2
  1055. package/dist/web/_app/immutable/nodes/7.Chd4i9bm.js +0 -2
  1056. package/dist/web/_app/immutable/nodes/8.B8SF-aNs.js +0 -1
  1057. package/dist/web/_app/immutable/nodes/9.YDeu-RnO.js +0 -1
@@ -4,100 +4,208 @@
4
4
  * Manages the Pi-Mono agent instance and coordinates with workspace managers.
5
5
  * Loads skills, handles system prompts, and manages conversation flow.
6
6
  */
7
- import { readFileSync, existsSync, readdirSync, writeFileSync, mkdirSync, unlinkSync, statSync } from 'fs';
7
+ import { readFileSync, existsSync } from 'fs';
8
8
  import { join, dirname } from 'path';
9
9
  import { homedir } from 'os';
10
10
  import { fileURLToPath } from 'url';
11
11
  const __filename = fileURLToPath(import.meta.url);
12
12
  const __dirname = dirname(__filename);
13
- import { getModel } from '@mariozechner/pi-ai';
13
+ import { getModel, completeSimple } from '@mariozechner/pi-ai';
14
14
  import { Agent } from '@mariozechner/pi-agent-core';
15
15
  import { WorkspaceManager } from '../core/workspace-manager.js';
16
+ import { findPersonRefForUser } from '../services/user-person-bridge.js';
16
17
  import { createGraphTools } from './tools/graph-tools.js';
17
- import { createSyncTools } from './tools/sync-tools.js';
18
+ import { createFolderTools } from './tools/folder-tools.js';
19
+ import { createHistoryTools } from './tools/history-tools.js';
18
20
  import { loadSkillIndex, buildSkillIndexPrompt, loadEagerSkills } from './skill-loader.js';
19
21
  import { createLoadSkillTool } from './tools/load-skill.js';
20
22
  import { loadCustomTools } from './tools/tool-loader.js';
21
23
  import { ConnectorManager } from '../mcp/connector-manager.js';
22
24
  import { buildConnectorRegistry, createConnectorTools } from './tools/connector-tools.js';
23
25
  import { createFsTools } from './tools/fs-tools.js';
26
+ import { createWebTools } from './tools/web-tools.js';
24
27
  import { createOpsTools } from './tools/ops-tools.js';
25
28
  import { createPermissionTools } from './tools/permission-tools.js';
29
+ import { createCaptureTools } from './tools/capture-tools.js';
30
+ import { renderEntityTypesSection } from './prompts/entity-types-section.js';
31
+ import { ENTITY_SCHEMAS } from '../core/validation.js';
26
32
  import { AuthService } from '../services/auth-service.js';
33
+ import * as access from '../services/access-control.js';
27
34
  import { loadUserConfig, resolveApiKey, resolveProvider, resolveModelId } from '../core/user-config.js';
35
+ import { onSecretMutation } from '../core/secrets/index.js';
36
+ import { AgentPool } from './agent-pool.js';
37
+ import { addInferenceUsage, createCloudInferenceStreamFn, createInferenceUsageSummary, isStudiographCreditsMode, studiographCreditsModel, } from '../services/cloud-inference-billing.js';
28
38
  export class AgentOrchestrator {
29
39
  workspacePath;
30
40
  workspaceManager;
31
- agent;
41
+ pool;
32
42
  config;
33
43
  gitUser;
34
44
  skillsDirs;
35
45
  toolsDirs;
36
46
  registryRef = { registry: null };
37
- _highlightCallback = null;
38
- _mutationCallback = null;
39
- _currentUser = null;
40
47
  authService;
41
48
  recentMemory;
42
- currentSessionId = null;
43
49
  sessionsDir;
50
+ // Per-session context — used by tool closures via the pool's contextMap
51
+ // Legacy fields kept for backward compat with callers that set them before chat()
52
+ _currentUser = null;
53
+ _highlightCallback = null;
54
+ _mutationCallback = null;
55
+ currentSessionId = null;
56
+ _sessionUserId;
44
57
  constructor(config) {
45
58
  this.workspacePath = config.workspacePath;
46
59
  this.config = config.workspaceConfig;
47
60
  this.gitUser = config.gitUser;
48
61
  this.recentMemory = config.recentMemory;
49
- this.authService = new AuthService(config.workspacePath);
62
+ // Prefer the route-level AuthService so we share the master-key
63
+ // crypto wiring + the OAuth-mutation pubsub. Fallback construction
64
+ // only fires in tests / CLI scenarios that don't supply one — those
65
+ // paths don't read encrypted oauth_tokens, so the missing crypto is
66
+ // harmless there.
67
+ this.authService = config.authService ?? new AuthService(config.workspacePath);
50
68
  this.sessionsDir = join(homedir(), '.studiograph', 'sessions');
51
- // Priority (highest → lowest): user > workspace > bundled > app
52
- // First-seen name wins in the loader, so earlier dirs override later ones.
53
- const userSkillsDir = join(homedir(), '.studiograph', 'skills');
69
+ // Skills: filesystem dirs are now bundled-only. User/workspace authoring
70
+ // moves to graph `skill` entities (enumerated per-user in createAgentInstance).
54
71
  const userToolsDir = join(homedir(), '.studiograph', 'tools');
55
- const workspaceSkillsDir = join(this.workspacePath, '.studiograph', 'skills');
56
72
  const workspaceToolsDir = join(this.workspacePath, '.studiograph', 'tools');
57
73
  const bundledSkillsDir = join(__dirname, 'skills');
58
- this.skillsDirs = [userSkillsDir, workspaceSkillsDir, bundledSkillsDir, ...(config.skillsDirs ?? [])];
74
+ this.skillsDirs = [bundledSkillsDir, ...(config.skillsDirs ?? [])];
59
75
  this.toolsDirs = [userToolsDir, workspaceToolsDir, ...(config.toolsDirs ?? [])];
60
- // Use shared workspace manager if provided, otherwise create one
61
76
  this.workspaceManager = config.workspaceManager ?? new WorkspaceManager(this.workspacePath, this.config, this.gitUser);
62
- // Initialize Pi-Mono agent (async tools loaded in createAgent)
63
- this.agent = this.createAgent();
77
+ // Initialize agent pool each session gets its own Agent instance
78
+ this.pool = new AgentPool({
79
+ createAgent: (userId) => this.createAgentInstance(userId),
80
+ loadCustomTools: (agent, userId) => this.loadCustomToolsAsync(agent, userId),
81
+ sessionsDir: this.sessionsDir,
82
+ });
83
+ // Evict cached agents when an operator changes a model.* key via
84
+ // Settings UI / CLI. Without this, the running agent keeps using
85
+ // the apiKey/provider/modelId it captured at createAgentInstance
86
+ // time, and the operator's rotation appears to have no effect
87
+ // until the next process restart. Other keys (r2.*, search.*) are
88
+ // read fresh on each tool call, so eviction isn't needed for them.
89
+ onSecretMutation((key) => {
90
+ if (key.startsWith('model.')) {
91
+ this.pool.invalidateAll();
92
+ }
93
+ });
94
+ // Evict the user's pooled agent when their OAuth state changes.
95
+ // ConnectorManager.buildTools resolves per-user OAuth at agent-
96
+ // construction time only; mid-session connect/disconnect would
97
+ // otherwise leave the agent with a stale tool list (the connector
98
+ // would stay invisible after Connect, or stay visible after
99
+ // Disconnect). Scoped per-user — other users' sessions are
100
+ // untouched.
101
+ this.authService.onOAuthMutation((userId) => {
102
+ this.pool.invalidateUser(userId);
103
+ });
64
104
  }
65
105
  /**
66
106
  * Create Pi-Mono agent with tools and system prompt.
67
107
  * Custom tools and skills are loaded asynchronously via initAsync().
68
108
  */
69
- createAgent() {
109
+ createAgentInstance(userId) {
70
110
  const userConfig = loadUserConfig();
71
- const provider = resolveProvider(userConfig, this.config);
72
- const modelId = resolveModelId(userConfig, this.config);
73
- const apiKey = resolveApiKey(userConfig, this.config);
111
+ const useCreditsGateway = isStudiographCreditsMode();
112
+ const provider = useCreditsGateway ? 'studiograph-cloud' : resolveProvider(userConfig, this.config);
113
+ const modelId = useCreditsGateway ? studiographCreditsModel().id : resolveModelId(userConfig, this.config);
114
+ const apiKey = useCreditsGateway ? 'studiograph-cloud-gateway' : resolveApiKey(userConfig, this.config);
74
115
  if (!apiKey) {
75
116
  throw new Error('API key not found in config or environment');
76
117
  }
77
- const model = getModel(provider, modelId);
78
- // Build skill index (synchronous — reads markdown frontmatter only)
79
- const skillIndex = loadSkillIndex(this.skillsDirs);
80
- // Build tools first so we can auto-generate the tool reference for the prompt
118
+ const model = useCreditsGateway
119
+ ? studiographCreditsModel()
120
+ : getModel(provider, modelId);
121
+ // Build skill index bundled filesystem skills + graph `skill` entries
122
+ // from folders the user can access. Graph skills take priority over
123
+ // bundled on name collision (user-authored overrides can customise
124
+ // built-in skills).
125
+ const promptRepos = this.getPromptRepoScope(userId);
126
+ const graphSkills = this.enumerateGraphSkills(promptRepos, userId);
127
+ const bundledSkills = loadSkillIndex(this.skillsDirs);
128
+ const seen = new Set(graphSkills.map((s) => s.name));
129
+ const skillIndex = [...graphSkills, ...bundledSkills.filter(s => !seen.has(s.name))];
130
+ const graphResolver = (repo, id) => this.readGraphSkillBody(repo, id);
131
+ // Build tools — closures read per-session context from the pool
132
+ // The pool sets context before each withAgent call, so these resolve correctly
133
+ // Closures that resolve per-session context at call time.
134
+ // The pool sets context before each withAgent callback; the closure
135
+ // finds which session owns this agent and reads from that context.
136
+ const getUser = () => {
137
+ const sid = this.pool.findSessionForAgent(agent);
138
+ return sid ? (this.pool.getContext(sid).user ?? null) : this._currentUser;
139
+ };
140
+ const onHighlight = (ids) => {
141
+ const sid = this.pool.findSessionForAgent(agent);
142
+ if (sid)
143
+ this.pool.getContext(sid).onHighlight?.(ids);
144
+ else
145
+ this._highlightCallback?.(ids);
146
+ };
147
+ const onMutation = (m) => {
148
+ const sid = this.pool.findSessionForAgent(agent);
149
+ if (sid)
150
+ this.pool.getContext(sid).onMutation?.(m);
151
+ else
152
+ this._mutationCallback?.(m);
153
+ };
154
+ const onAgentActivity = (action, repo) => {
155
+ const sid = this.pool.findSessionForAgent(agent);
156
+ if (sid)
157
+ this.pool.getContext(sid).onAgentActivity?.(action, repo);
158
+ };
159
+ /** Resolves the per-session capture callback at tool-call time. The
160
+ * capture flow installs it via AgentContext; other flows leave it
161
+ * undefined and the tool becomes a no-op acknowledgement. */
162
+ const getNothingToCaptureCallback = () => {
163
+ const sid = this.pool.findSessionForAgent(agent);
164
+ if (!sid)
165
+ return undefined;
166
+ return this.pool.getContext(sid).onNothingToCapture ?? undefined;
167
+ };
81
168
  const tools = [
82
- ...createGraphTools(this.workspaceManager, this.gitUser, this.workspacePath, this.emitHighlight.bind(this), this.emitMutation.bind(this), () => this._currentUser, this.authService),
83
- ...createSyncTools(this.workspacePath, this.config, this.registryRef, () => this._currentUser),
169
+ ...createGraphTools(this.workspaceManager, this.gitUser, this.workspacePath, onHighlight, onMutation, getUser, this.authService, onAgentActivity),
170
+ ...createFolderTools(this.workspaceManager, this.gitUser, onMutation, getUser, this.authService, onAgentActivity),
171
+ ...createHistoryTools(this.workspaceManager, this.gitUser, onMutation, getUser, this.authService, onAgentActivity),
84
172
  ...createOpsTools(this.workspacePath, this.config),
85
- ...createPermissionTools(this.authService, () => this._currentUser),
86
- ...createFsTools(() => this._currentUser),
87
- createLoadSkillTool(skillIndex),
173
+ ...createPermissionTools(this.authService, getUser, this.workspaceManager),
174
+ ...createFsTools(getUser),
175
+ ...createWebTools(this.config.search),
176
+ ...createCaptureTools(getNothingToCaptureCallback),
177
+ createLoadSkillTool(skillIndex, graphResolver),
88
178
  ];
89
179
  // Build system prompt — base + auto-generated tool reference + memory + eager skills + skill index
90
- const systemPrompt = this.buildSystemPrompt(skillIndex, tools, this.recentMemory);
180
+ const systemPrompt = this.buildSystemPrompt(skillIndex, tools, this.recentMemory, graphResolver, promptRepos, userId);
91
181
  // Log registered tools at startup (verbose only)
92
182
  if (process.env.STUDIOGRAPH_VERBOSE === '1') {
93
183
  console.log(`🔧 ${tools.length} tools registered: ${tools.map((t) => t.name).join(', ')}`);
94
184
  }
95
- const agent = new Agent({ getApiKey: () => apiKey });
96
- agent.setModel(model);
97
- agent.setSystemPrompt(systemPrompt);
98
- agent.setTools(tools);
99
- // Load custom tools asynchronously and register them
100
- this.loadCustomToolsAsync(agent);
185
+ // Dedup the bundled tools array guards against any future
186
+ // createXxxTools() collision so we never hand a duplicate-name list
187
+ // to the Agent constructor (Anthropic 400s on `tools: Tool names must
188
+ // be unique.`).
189
+ const dedupedTools = [];
190
+ const bundledSeen = new Set();
191
+ for (const t of tools) {
192
+ const name = t.name;
193
+ if (!name || bundledSeen.has(name))
194
+ continue;
195
+ bundledSeen.add(name);
196
+ dedupedTools.push(t);
197
+ }
198
+ const agent = new Agent({
199
+ getApiKey: () => apiKey,
200
+ initialState: { model, systemPrompt, tools: dedupedTools },
201
+ streamFn: useCreditsGateway ? createCloudInferenceStreamFn() : undefined,
202
+ });
203
+ // Custom tools are loaded asynchronously by the pool wrapper
204
+ // (config.loadCustomTools, wired to loadCustomToolsAsync). Do NOT call
205
+ // it here — calling it twice fires two concurrent Promise.alls, both
206
+ // racing to mutate agent.state.tools, and the inter-microtask dedup
207
+ // can't always prevent Anthropic seeing a duplicated list on the very
208
+ // first prompt. Single fire site = no race.
101
209
  return agent;
102
210
  }
103
211
  /**
@@ -105,12 +213,20 @@ export class AgentOrchestrator {
105
213
  * Runs async after construction — custom tools may not be available for the
106
214
  * very first message if initialisation is extremely fast, but in practice
107
215
  * the first user message arrives well after startup.
216
+ *
217
+ * `userId` is forwarded into `ConnectorManager.buildTools` so per-user MCP
218
+ * OAuth tokens are resolved at tool-build time. Without it the runtime
219
+ * silently falls back to workspace-shared static headers (the deferred
220
+ * gap before 2026-05-13). The agent pool keys agents per-session and
221
+ * supplies the session's userId on creation; CLI / non-interactive
222
+ * spawns pass `undefined` and intentionally land on the workspace
223
+ * fallback.
108
224
  */
109
- loadCustomToolsAsync(agent) {
225
+ loadCustomToolsAsync(agent, userId) {
110
226
  const context = { workspaceManager: this.workspaceManager, gitUser: this.gitUser };
111
- Promise.all([
227
+ return Promise.all([
112
228
  loadCustomTools(this.toolsDirs, context),
113
- ConnectorManager.buildTools(ConnectorManager.loadConfigs(this.workspacePath)),
229
+ ConnectorManager.buildTools(ConnectorManager.loadConfigs(this.workspacePath), { userId, authService: this.authService }),
114
230
  ]).then(([customTools, connectorTools]) => {
115
231
  const extra = [...customTools];
116
232
  if (connectorTools.length > 0) {
@@ -119,8 +235,27 @@ export class AgentOrchestrator {
119
235
  this.registryRef.registry = registry;
120
236
  }
121
237
  if (extra.length > 0) {
238
+ // Dedup by name — this method can be invoked more than once per agent
239
+ // (createAgentInstance schedules it, and the pool also calls it via
240
+ // its loadCustomTools callback). Without dedup we end up with
241
+ // duplicate tool registrations, which Anthropic rejects on the next
242
+ // turn with: 400 "tools: Tool names must be unique."
122
243
  const existing = agent.state.tools;
123
- agent.setTools([...existing, ...extra]);
244
+ const seen = new Set(existing.map((t) => t.name));
245
+ const merged = [...existing];
246
+ for (const t of extra) {
247
+ if (seen.has(t.name))
248
+ continue;
249
+ seen.add(t.name);
250
+ merged.push(t);
251
+ }
252
+ if (merged.length !== existing.length) {
253
+ agent.state.tools = merged;
254
+ }
255
+ }
256
+ if (process.env.STUDIOGRAPH_VERBOSE === '1') {
257
+ // eslint-disable-next-line no-console
258
+ console.log(`[orchestrator] loadCustomToolsAsync done: customTools=${customTools.length}, connectorTools=${connectorTools.length}, total agent.state.tools=${agent.state.tools.length}`);
124
259
  }
125
260
  }).catch(err => {
126
261
  console.warn('Failed to load custom/connector tools:', err);
@@ -129,11 +264,11 @@ export class AgentOrchestrator {
129
264
  /**
130
265
  * Build the full system prompt: base prompt + eager skill content + skill index.
131
266
  */
132
- buildSystemPrompt(skillIndex, tools, recentMemory) {
267
+ buildSystemPrompt(skillIndex, tools, recentMemory, graphResolver, promptRepos = this.workspaceManager.getAllRepoConfigs(), userId) {
133
268
  const promptPath = join(__dirname, 'prompts', 'system.md');
134
269
  let base = existsSync(promptPath)
135
270
  ? readFileSync(promptPath, 'utf-8')
136
- : this.getDefaultSystemPrompt();
271
+ : this.getDefaultSystemPrompt(promptRepos);
137
272
  // Auto-generate tool reference from registered tools, grouped by category
138
273
  const categories = {
139
274
  'Entity Management': [],
@@ -157,6 +292,10 @@ export class AgentOrchestrator {
157
292
  categories['Skills'].push(t);
158
293
  else if (['create_entity', 'get_entity', 'update_entity', 'delete_entity', 'search_entities', 'list_entities', 'get_related', 'get_backlinks', 'validate_wikilinks', 'get_workspace_summary', 'list_repos', 'query_dataset', 'append_rows', 'get_entity_schema', 'lint_entities'].includes(name))
159
294
  categories['Entity Management'].push(t);
295
+ else if (['create_folder', 'create_subfolder', 'rename_folder', 'delete_folder', 'list_folders', 'move_entity', 'transfer_entity'].includes(name))
296
+ (categories['Folders'] ??= []).push(t);
297
+ else if (['list_file_history', 'list_folder_history', 'list_recent_deletions', 'read_file_at_commit', 'get_entity_diff', 'restore_file'].includes(name))
298
+ (categories['Git History'] ??= []).push(t);
160
299
  else
161
300
  categories['Other'].push(t);
162
301
  }
@@ -165,13 +304,26 @@ export class AgentOrchestrator {
165
304
  .map(([cat, items]) => `**${cat}:**\n${items.map((t) => `- \`${t.name}\` — ${t.description}`).join('\n')}`)
166
305
  .join('\n\n');
167
306
  base = base.replace('{{TOOL_REFERENCE}}', toolRef);
307
+ // Render the agent-visible entity type list from the launch allowlist +
308
+ // any workspace-defined custom types.
309
+ const registry = this.workspaceManager.getSchemaRegistry();
310
+ const builtinTypes = new Set(Object.keys(ENTITY_SCHEMAS));
311
+ const customTypes = registry.getAllTypes().filter(t => !builtinTypes.has(t));
312
+ base = base.replace('{{ENTITY_TYPES}}', renderEntityTypesSection({ customTypes }));
168
313
  const parts = [base.trim()];
169
- // Inject workspace ABOUT.md as organizational context
170
- const aboutPath = join(this.workspacePath, '.studiograph', 'ABOUT.md');
171
- if (existsSync(aboutPath)) {
172
- const aboutContent = readFileSync(aboutPath, 'utf-8');
173
- if (aboutContent.trim()) {
174
- parts.push(`## Workspace Identity\n\n${aboutContent}`);
314
+ // Inject workspace identity from graph entities (org, team, capabilities, guidelines)
315
+ // Falls back to ABOUT.md if the graph has no organization entries
316
+ const identitySection = this.buildWorkspaceIdentity(promptRepos);
317
+ if (identitySection) {
318
+ parts.push(identitySection);
319
+ }
320
+ else {
321
+ const aboutPath = join(this.workspacePath, '.studiograph', 'ABOUT.md');
322
+ if (existsSync(aboutPath)) {
323
+ const aboutContent = readFileSync(aboutPath, 'utf-8');
324
+ if (aboutContent.trim()) {
325
+ parts.push(`## Workspace Identity\n\n${aboutContent}`);
326
+ }
175
327
  }
176
328
  }
177
329
  // Append workspace schema extensions (org-specific fields and custom types)
@@ -179,12 +331,40 @@ export class AgentOrchestrator {
179
331
  if (schemaSection) {
180
332
  parts.push(schemaSection);
181
333
  }
334
+ // Inject per-repo subfolder inventory so the agent knows the existing
335
+ // folder layout without calling list_folders for every routing decision.
336
+ // Capped per-repo to keep system prompt size bounded.
337
+ const folderInventory = this.buildFolderInventory(promptRepos);
338
+ if (folderInventory) {
339
+ parts.push(folderInventory);
340
+ }
182
341
  // Inject recent memory context (today + yesterday daily memory)
183
342
  if (recentMemory) {
184
343
  parts.push(`## Memory Context\n\n${recentMemory}`);
185
344
  }
345
+ // Inject current-user identity + bridge so the agent can read its own
346
+ // handle and the linked person entity from the prompt instead of
347
+ // having to call list_users on every turn.
348
+ if (userId) {
349
+ const u = this.authService.findUserById(userId);
350
+ if (u) {
351
+ const ref = findPersonRefForUser(this.workspaceManager, u.handle);
352
+ const lines = [
353
+ `## Current User`,
354
+ ``,
355
+ `- Display name: ${u.displayName}`,
356
+ `- Handle: \`${u.handle}\` (use this for created_by/updated_by audit, @mentions, and link_person_to_user)`,
357
+ `- Email: ${u.email}`,
358
+ `- Role: ${u.role}`,
359
+ ref
360
+ ? `- Linked person entity: \`[[${ref.entityId}]]\` in \`${ref.repo}\` — when the user refers to themselves, this is their record. Write enrichments here via update_entity; never call link_person_to_user for the current user.`
361
+ : `- Linked person entity: **none.** The auth↔person bridge has no record for this user (legacy account, ambiguous migration, or team_repo unconfigured). If the user wants a bridge, propose creating one via search + link_person_to_user, or auto-provisioning via update_workspace team_repo.`,
362
+ ];
363
+ parts.push(lines.join('\n'));
364
+ }
365
+ }
186
366
  // Inline eager skills directly into the system prompt
187
- const eagerContent = loadEagerSkills(skillIndex);
367
+ const eagerContent = loadEagerSkills(skillIndex, graphResolver);
188
368
  if (eagerContent) {
189
369
  parts.push(eagerContent);
190
370
  }
@@ -195,13 +375,191 @@ export class AgentOrchestrator {
195
375
  }
196
376
  return parts.join('\n\n');
197
377
  }
378
+ /**
379
+ * Enumerate skill entities across all folders the user can access. Each
380
+ * skill becomes a SkillMeta with a `graph://<repo>/<id>` sentinel
381
+ * entrypoint. Priority order: user's private folder first, then shared
382
+ * folders alphabetically. First occurrence of a given name wins.
383
+ */
384
+ getPromptRepoScope(userId) {
385
+ if (!userId)
386
+ return this.workspaceManager.getAllRepoConfigs();
387
+ const user = this.authService.findUserById(userId);
388
+ if (!user)
389
+ return [];
390
+ return access.getAccessibleRepos(user, this.workspaceManager, this.authService);
391
+ }
392
+ enumerateGraphSkills(accessibleRepos, userId) {
393
+ const skills = [];
394
+ const seen = new Set();
395
+ const personalRepo = userId ? this.workspaceManager.getUserPersonalRepo(userId) : undefined;
396
+ const sortedRepos = [...accessibleRepos]
397
+ .sort((a, b) => {
398
+ if (personalRepo && a.name === personalRepo.name)
399
+ return -1;
400
+ if (personalRepo && b.name === personalRepo.name)
401
+ return 1;
402
+ return a.name.localeCompare(b.name);
403
+ });
404
+ for (const repo of sortedRepos) {
405
+ try {
406
+ const graph = this.workspaceManager.getGraph(repo.name);
407
+ const entries = graph.list('skill');
408
+ for (const entry of entries) {
409
+ if (seen.has(entry.id))
410
+ continue;
411
+ seen.add(entry.id);
412
+ const data = entry.data;
413
+ skills.push({
414
+ name: entry.id,
415
+ description: typeof data.description === 'string' ? data.description : '',
416
+ loading: data.loading === 'eager' ? 'eager' : 'on-demand',
417
+ dir: `graph://${repo.name}`,
418
+ entrypoint: `graph://${repo.name}/${entry.id}`,
419
+ isDirectory: false,
420
+ });
421
+ }
422
+ }
423
+ catch {
424
+ // skip repos that fail to load
425
+ }
426
+ }
427
+ return skills;
428
+ }
429
+ /**
430
+ * Load the markdown body of a skill entity by (repo, id).
431
+ */
432
+ readGraphSkillBody(repo, id) {
433
+ try {
434
+ const graph = this.workspaceManager.getGraph(repo);
435
+ const entries = graph.list('skill');
436
+ const entry = entries.find(e => e.id === id);
437
+ if (!entry)
438
+ return `Error: skill "${id}" not found in folder "${repo}".`;
439
+ return entry.document?.content ?? '';
440
+ }
441
+ catch (e) {
442
+ return `Error loading skill "${id}" from "${repo}": ${e?.message ?? e}`;
443
+ }
444
+ }
445
+ /**
446
+ * Build a workspace identity section from graph entities.
447
+ * Reads organization, person, practice-area, and guideline entries
448
+ * to compose a concise identity summary for the system prompt.
449
+ * Returns null if no organization entries exist.
450
+ */
451
+ buildWorkspaceIdentity(repos) {
452
+ try {
453
+ const listScoped = (entityType) => repos.flatMap(repo => {
454
+ try {
455
+ return this.workspaceManager.getGraph(repo.name).list(entityType);
456
+ }
457
+ catch {
458
+ return [];
459
+ }
460
+ });
461
+ const orgs = listScoped('organization');
462
+ if (orgs.length === 0)
463
+ return null;
464
+ const lines = ['## Workspace Identity'];
465
+ // Organization(s)
466
+ for (const org of orgs.slice(0, 3)) {
467
+ const name = org.data.name || org.id;
468
+ const industry = org.data.industry ? ` (${org.data.industry})` : '';
469
+ lines.push(`\n### ${name}${industry}`);
470
+ if (org.document.content.trim()) {
471
+ // Include first ~500 chars of body for context
472
+ const body = org.document.content.trim();
473
+ lines.push(body.length > 500 ? body.slice(0, 500) + '...' : body);
474
+ }
475
+ }
476
+ // Team
477
+ const people = listScoped('person');
478
+ if (people.length > 0) {
479
+ lines.push('\n### Team');
480
+ for (const person of people.slice(0, 15)) {
481
+ const name = person.data.name || person.id;
482
+ const role = person.data.role ? ` — ${person.data.role}` : '';
483
+ const location = person.data.location ? ` (${person.data.location})` : '';
484
+ lines.push(`- ${name}${role}${location}`);
485
+ }
486
+ }
487
+ // Services (capabilities + methodologies — replaces former practice areas)
488
+ const services = listScoped('service');
489
+ if (services.length > 0) {
490
+ lines.push('\n### Capabilities');
491
+ // Top-level services (no `sprint` parent) read as the firm's overall
492
+ // capabilities; nested services are sprint-level details. Surface
493
+ // top-level only here to keep the system prompt compact.
494
+ const topLevel = services.filter(s => !s.data.sprint);
495
+ const list = topLevel.length > 0 ? topLevel : services;
496
+ lines.push(list.map(s => s.data.name || s.id).join(', '));
497
+ }
498
+ // Guidelines (communication style, preferences) — now document.category=guideline
499
+ const guidelines = listScoped('document').filter(d => d.data.category === 'guideline');
500
+ if (guidelines.length > 0) {
501
+ lines.push('\n### Guidelines');
502
+ for (const g of guidelines.slice(0, 5)) {
503
+ const name = g.data.name || g.id;
504
+ lines.push(`\n**${name}**`);
505
+ if (g.document.content.trim()) {
506
+ const body = g.document.content.trim();
507
+ lines.push(body.length > 300 ? body.slice(0, 300) + '...' : body);
508
+ }
509
+ }
510
+ }
511
+ return lines.join('\n');
512
+ }
513
+ catch {
514
+ return null;
515
+ }
516
+ }
517
+ /**
518
+ * Per-repo subfolder summary for the system prompt. Lists each accessible
519
+ * repo with up to MAX_PER_REPO subfolder paths so the agent can route new
520
+ * entries into existing folders without calling list_folders for every
521
+ * decision. Refresh cadence is per-session (system prompt is built once).
522
+ */
523
+ buildFolderInventory(repos) {
524
+ const MAX_PER_REPO = 8;
525
+ if (repos.length === 0)
526
+ return null;
527
+ const lines = [];
528
+ for (const repo of repos) {
529
+ let folders = [];
530
+ try {
531
+ folders = this.workspaceManager.getGraph(repo.name).listFolders().map(f => f.path);
532
+ }
533
+ catch {
534
+ continue;
535
+ }
536
+ const display = repo.display_name || repo.name;
537
+ if (folders.length === 0) {
538
+ lines.push(`- **${display}** (\`${repo.name}\`): no subfolders`);
539
+ }
540
+ else {
541
+ const shown = folders.slice(0, MAX_PER_REPO).map(p => `\`${p}\``).join(', ');
542
+ const more = folders.length > MAX_PER_REPO ? ` (+${folders.length - MAX_PER_REPO} more)` : '';
543
+ lines.push(`- **${display}** (\`${repo.name}\`): ${shown}${more}`);
544
+ }
545
+ }
546
+ if (lines.length === 0)
547
+ return null;
548
+ return `## Folder Inventory\n\nExisting subfolders per repo. Prefer placing new entries in an existing folder when one fits. Folder paths are repo-relative POSIX.\n\n${lines.join('\n')}`;
549
+ }
198
550
  /**
199
551
  * Fallback system prompt when prompts/system.md is not found.
200
552
  */
201
- getDefaultSystemPrompt() {
202
- const workspaceSummary = this.workspaceManager.getSummary();
203
- const repoList = this.workspaceManager
204
- .getAllRepoConfigs()
553
+ getDefaultSystemPrompt(promptRepos = this.workspaceManager.getAllRepoConfigs()) {
554
+ const totalEntities = promptRepos.reduce((count, repo) => {
555
+ try {
556
+ return count + this.workspaceManager.getGraph(repo.name).search({}).length;
557
+ }
558
+ catch {
559
+ return count;
560
+ }
561
+ }, 0);
562
+ const repoList = promptRepos
205
563
  .map(r => ` - ${r.name} (${r.type}): ${r.description}`)
206
564
  .join('\n');
207
565
  return `# Studiograph AI Assistant
@@ -211,8 +569,8 @@ You are Studiograph, an AI assistant helping creative teams manage their knowled
211
569
  ## Workspace
212
570
 
213
571
  **Team:** ${this.config.team_name}
214
- **Repositories:** ${workspaceSummary.totalRepos}
215
- **Total Entities:** ${workspaceSummary.totalEntities}
572
+ **Repositories:** ${promptRepos.length}
573
+ **Total Entities:** ${totalEntities}
216
574
 
217
575
  **Available Repositories:**
218
576
  ${repoList}`;
@@ -220,46 +578,88 @@ ${repoList}`;
220
578
  /**
221
579
  * Send a message to the agent
222
580
  */
581
+ /**
582
+ * Send a message and await the full agent response.
583
+ * Uses the current session (set via switchSession) or a default session.
584
+ */
223
585
  async chat(userMessage) {
224
- return new Promise((resolve, reject) => {
225
- let content = '';
226
- const toolCalls = [];
227
- // Subscribe to agent events.
228
- // message_update: { type, message: PartialMessage } — accumulate text from assistant turns
229
- // message_end: { type, message: AgentMessage } — also fires for user prompt messages, so filter by role
230
- // agent_end: fires once when the full agentic loop is done — resolve here
231
- const unsubscribe = this.agent.subscribe((event) => {
232
- if (event.type === 'message_end') {
233
- const msg = event.message;
234
- if (msg?.role === 'assistant') {
235
- // Collect text and tool calls from completed assistant message
236
- content = msg.content
237
- .filter((b) => b.type === 'text')
238
- .map((b) => b.text)
239
- .join('');
240
- for (const block of msg.content) {
241
- if (block.type === 'toolCall') {
242
- toolCalls.push({
243
- tool: block.name,
244
- input: block.input,
245
- output: null,
246
- });
586
+ const sessionId = this.currentSessionId ?? 'default';
587
+ const ctx = {
588
+ user: this._currentUser,
589
+ onHighlight: this._highlightCallback,
590
+ onMutation: this._mutationCallback,
591
+ };
592
+ return this.pool.withAgent(sessionId, ctx, async (agent) => {
593
+ return new Promise((resolve, reject) => {
594
+ let content = '';
595
+ const toolCalls = [];
596
+ const usage = createInferenceUsageSummary();
597
+ const unsubscribe = agent.subscribe((event) => {
598
+ if (event.type === 'message_end') {
599
+ const msg = event.message;
600
+ if (msg?.role === 'assistant') {
601
+ addInferenceUsage(usage, msg.usage);
602
+ content = msg.content
603
+ .filter((b) => b.type === 'text')
604
+ .map((b) => b.text)
605
+ .join('');
606
+ for (const block of msg.content) {
607
+ if (block.type === 'toolCall') {
608
+ toolCalls.push({ tool: block.name, input: block.input, output: null });
609
+ }
247
610
  }
248
611
  }
249
612
  }
250
- }
251
- else if (event.type === 'agent_end') {
252
- // Full agentic loop complete (all turns + tool calls done)
613
+ else if (event.type === 'agent_end') {
614
+ unsubscribe();
615
+ resolve({ content, toolCalls, usage });
616
+ }
617
+ });
618
+ agent.prompt(userMessage).catch((error) => {
253
619
  unsubscribe();
254
- resolve({ content, toolCalls });
255
- }
620
+ reject(error);
621
+ });
256
622
  });
257
- // Send message and handle errors
258
- this.agent.prompt(userMessage).catch((error) => {
259
- unsubscribe();
260
- reject(error);
623
+ }, { userId: this._sessionUserId });
624
+ }
625
+ /**
626
+ * Send a message with an explicit session ID and context.
627
+ * Preferred over the legacy setCurrentUser + switchSession + chat pattern.
628
+ */
629
+ async chatInSession(sessionId, userMessage, opts) {
630
+ const ctx = { user: opts?.user ?? null };
631
+ return this.pool.withAgent(sessionId, ctx, async (agent) => {
632
+ return new Promise((resolve, reject) => {
633
+ let content = '';
634
+ const toolCalls = [];
635
+ const usage = createInferenceUsageSummary();
636
+ const unsubscribe = agent.subscribe((event) => {
637
+ if (event.type === 'message_end') {
638
+ const msg = event.message;
639
+ if (msg?.role === 'assistant') {
640
+ addInferenceUsage(usage, msg.usage);
641
+ content = msg.content
642
+ .filter((b) => b.type === 'text')
643
+ .map((b) => b.text)
644
+ .join('');
645
+ for (const block of msg.content) {
646
+ if (block.type === 'toolCall') {
647
+ toolCalls.push({ tool: block.name, input: block.input, output: null });
648
+ }
649
+ }
650
+ }
651
+ }
652
+ else if (event.type === 'agent_end') {
653
+ unsubscribe();
654
+ resolve({ content, toolCalls, usage });
655
+ }
656
+ });
657
+ agent.prompt(userMessage).catch((error) => {
658
+ unsubscribe();
659
+ reject(error);
660
+ });
261
661
  });
262
- });
662
+ }, { userId: opts?.userId, fallbackHistory: opts?.fallbackHistory });
263
663
  }
264
664
  /**
265
665
  * Get workspace manager (for tools)
@@ -267,6 +667,62 @@ ${repoList}`;
267
667
  getWorkspaceManager() {
268
668
  return this.workspaceManager;
269
669
  }
670
+ getModelSelection() {
671
+ const userConfig = loadUserConfig();
672
+ return {
673
+ provider: resolveProvider(userConfig, this.config),
674
+ modelId: resolveModelId(userConfig, this.config),
675
+ };
676
+ }
677
+ /**
678
+ * One-shot, tool-free model call that names a conversation from its opening
679
+ * exchange (the ChatGPT pattern). Used by POST /api/chat/title after the
680
+ * first assistant reply. Deliberately lightweight: no agent pool, no tools,
681
+ * no system context — just the configured model and a tight instruction.
682
+ *
683
+ * Returns null (caller keeps the truncated first-message title) when there's
684
+ * no usable title, no API key, or we're in Studiograph Credits gateway mode —
685
+ * the gateway routes inference through its own client (cloud-inference-billing),
686
+ * not pi-ai's complete(), so a direct completeSimple() can't reach it. Titles
687
+ * via the gateway are a follow-up if we want them.
688
+ */
689
+ async generateConversationTitle(firstUserMessage, assistantReply) {
690
+ if (isStudiographCreditsMode())
691
+ return null;
692
+ const userConfig = loadUserConfig();
693
+ const provider = resolveProvider(userConfig, this.config);
694
+ const modelId = resolveModelId(userConfig, this.config);
695
+ const apiKey = resolveApiKey(userConfig, this.config);
696
+ if (!apiKey)
697
+ return null;
698
+ const model = getModel(provider, modelId);
699
+ const systemPrompt = 'You name a conversation from its opening exchange. Reply with ONLY the ' +
700
+ 'title: 3 to 6 words, Title Case, no surrounding quotes, no trailing ' +
701
+ 'punctuation. Describe the topic, not the speaker (e.g. "Cooper Hewitt ' +
702
+ 'DEM Sync Notes", not "User Talks About a Meeting").';
703
+ const userText = `First message:\n${firstUserMessage}\n\nAssistant reply:\n${assistantReply}`.slice(0, 2000);
704
+ // No `temperature` — newer models (e.g. claude-opus-4-7) reject it with a
705
+ // 400 "temperature is deprecated for this model". maxTokens is plenty for a
706
+ // few-word title.
707
+ const result = await completeSimple(model, { systemPrompt, messages: [{ role: 'user', content: userText, timestamp: Date.now() }] }, { apiKey, maxTokens: 32 });
708
+ // Surface provider errors (e.g. a rejected option) so the route logs them
709
+ // instead of silently returning null and the client keeping its fallback.
710
+ if (result.stopReason === 'error') {
711
+ throw new Error(result.errorMessage || 'title model call failed');
712
+ }
713
+ const raw = result.content
714
+ .filter((c) => c.type === 'text')
715
+ .map((c) => c.text)
716
+ .join('')
717
+ .trim();
718
+ // Strip wrapping quotes / trailing punctuation the model may add anyway.
719
+ const title = raw.replace(/^["'`]+|["'`]+$/g, '').replace(/[.!?]+$/, '').trim().slice(0, 60);
720
+ if (!title)
721
+ return null;
722
+ const usage = createInferenceUsageSummary();
723
+ addInferenceUsage(usage, result.usage);
724
+ return { title, usage };
725
+ }
270
726
  /**
271
727
  * Get workspace summary
272
728
  */
@@ -280,7 +736,7 @@ ${repoList}`;
280
736
  return this.workspaceManager.getRepoNames();
281
737
  }
282
738
  /**
283
- * Set the current authenticated user for per-collection access filtering.
739
+ * Set the current authenticated user for per-folder access filtering.
284
740
  * Called per-request by the chat endpoint. Null = full access (API key / open mode).
285
741
  */
286
742
  setCurrentUser(user) {
@@ -311,14 +767,19 @@ ${repoList}`;
311
767
  this._mutationCallback?.(m);
312
768
  }
313
769
  /**
314
- * Expose the raw pi-agent-core Agent instance.
770
+ * Expose the raw pi-agent-core Agent instance for a session (for SSE streaming).
771
+ * Returns the default session agent if no sessionId specified.
315
772
  */
316
- getAgent() {
317
- return this.agent;
773
+ getAgent(sessionId) {
774
+ return this.pool.getAgent(sessionId ?? this.currentSessionId ?? 'default');
318
775
  }
319
- /** Abort the current agent run (if any). */
320
- abort() {
321
- this.agent.abort();
776
+ /** Get the agent pool (for advanced callers that need direct pool access). */
777
+ getPool() {
778
+ return this.pool;
779
+ }
780
+ /** Abort the agent for a session. */
781
+ abort(sessionId) {
782
+ this.pool.abort(sessionId ?? this.currentSessionId ?? 'default');
322
783
  }
323
784
  /**
324
785
  * Get the current session ID (null if none active).
@@ -327,105 +788,36 @@ ${repoList}`;
327
788
  return this.currentSessionId;
328
789
  }
329
790
  /**
330
- * Switch the agent to a different session.
331
- * - Same session no-op
332
- * - Existing session file → restore messages from disk
333
- * - No file but fallback history → inject as context message
334
- * - Nothing → clear messages for a fresh start
791
+ * Switch session (backward compat sets state for next chat() call).
792
+ * With the pool, actual session loading happens lazily in withAgent().
335
793
  */
336
- async switchSession(sessionId, fallbackHistory) {
337
- if (this.currentSessionId === sessionId)
338
- return;
339
- // Save current session before switching
340
- if (this.currentSessionId) {
341
- this.saveSession();
342
- }
794
+ async switchSession(sessionId, fallbackHistory, userId) {
795
+ this._sessionUserId = userId;
343
796
  this.currentSessionId = sessionId;
344
- this.agent.sessionId = sessionId;
345
- // Try loading from disk
346
- const sessionPath = join(this.sessionsDir, `${sessionId}.json`);
347
- if (existsSync(sessionPath)) {
348
- try {
349
- const data = JSON.parse(readFileSync(sessionPath, 'utf-8'));
350
- if (Array.isArray(data.messages) && data.messages.length > 0) {
351
- this.agent.replaceMessages(data.messages);
352
- return;
353
- }
354
- }
355
- catch {
356
- // Corrupted file — fall through
357
- }
358
- }
359
- // Fallback: inject frontend history as a context message
797
+ // Pre-create the agent in the pool if fallback history is provided
798
+ // (so the pool has the context ready when chat() runs)
360
799
  if (fallbackHistory && fallbackHistory.length > 0) {
361
- const transcript = fallbackHistory
362
- .map(m => `${m.role === 'assistant' ? 'Assistant' : 'User'}: ${m.content}`)
363
- .join('\n\n');
364
- const contextMsg = {
365
- role: 'user',
366
- content: [{ type: 'text', text: `[Prior conversation context]\n\n${transcript}` }],
367
- timestamp: Date.now(),
368
- };
369
- this.agent.replaceMessages([contextMsg]);
370
- return;
800
+ const ctx = { user: this._currentUser };
801
+ await this.pool.withAgent(sessionId, ctx, async () => {
802
+ // Agent is created and loaded — nothing else to do
803
+ }, { userId, fallbackHistory });
371
804
  }
372
- // Fresh start
373
- this.agent.clearMessages();
374
805
  }
375
806
  /**
376
- * Save the current session's messages to disk.
807
+ * Save session (backward compat pool auto-saves after each withAgent call).
377
808
  */
378
809
  saveSession() {
379
- if (!this.currentSessionId)
380
- return;
381
- const messages = this.agent.state.messages;
382
- if (messages.length === 0)
383
- return;
384
- if (!existsSync(this.sessionsDir)) {
385
- mkdirSync(this.sessionsDir, { recursive: true });
386
- }
387
- const sessionPath = join(this.sessionsDir, `${this.currentSessionId}.json`);
388
- writeFileSync(sessionPath, JSON.stringify({
389
- sessionId: this.currentSessionId,
390
- updatedAt: new Date().toISOString(),
391
- messages,
392
- }), 'utf-8');
393
- this.pruneSessions(20);
810
+ // Pool handles session persistence automatically
394
811
  }
395
812
  /**
396
813
  * Clear all saved sessions from disk.
397
814
  */
398
815
  clearSessions() {
399
- if (!existsSync(this.sessionsDir))
400
- return 0;
401
- const files = readdirSync(this.sessionsDir).filter(f => f.endsWith('.json'));
402
- for (const f of files) {
403
- try {
404
- unlinkSync(join(this.sessionsDir, f));
405
- }
406
- catch { /* ignore */ }
407
- }
408
- return files.length;
816
+ return this.pool.clearSessions(this._sessionUserId);
409
817
  }
410
- /**
411
- * Keep only the N most recent session files by mtime.
412
- */
413
- pruneSessions(keep) {
414
- if (!existsSync(this.sessionsDir))
415
- return;
416
- const files = readdirSync(this.sessionsDir)
417
- .filter(f => f.endsWith('.json'))
418
- .map(f => {
419
- const p = join(this.sessionsDir, f);
420
- return { name: f, path: p, mtime: statSync(p).mtimeMs };
421
- })
422
- .sort((a, b) => b.mtime - a.mtime);
423
- for (const file of files.slice(keep)) {
424
- try {
425
- unlinkSync(file.path);
426
- }
427
- catch { /* ignore */ }
428
- }
818
+ /** Shut down the agent pool (save all sessions, stop idle reaper). */
819
+ async shutdown() {
820
+ await this.pool.shutdown();
429
821
  }
430
822
  }
431
823
  //# sourceMappingURL=orchestrator.js.map