studiograph 1.3.48-next.23 → 1.3.48-next.231

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 (990) hide show
  1. package/README.md +27 -17
  2. package/dist/agent/agent-pool.d.ts +103 -3
  3. package/dist/agent/agent-pool.js +322 -18
  4. package/dist/agent/agent-pool.js.map +1 -1
  5. package/dist/agent/followups.d.ts +34 -0
  6. package/dist/agent/followups.js +52 -0
  7. package/dist/agent/followups.js.map +1 -0
  8. package/dist/agent/orchestrator.d.ts +101 -4
  9. package/dist/agent/orchestrator.js +471 -66
  10. package/dist/agent/orchestrator.js.map +1 -1
  11. package/dist/agent/prompts/entity-types-section.d.ts +34 -0
  12. package/dist/agent/prompts/entity-types-section.js +76 -0
  13. package/dist/agent/prompts/entity-types-section.js.map +1 -0
  14. package/dist/agent/prompts/system.md +114 -54
  15. package/dist/agent/skill-loader.d.ts +30 -17
  16. package/dist/agent/skill-loader.js +63 -30
  17. package/dist/agent/skill-loader.js.map +1 -1
  18. package/dist/agent/skills/artifact-canvas/skill.md +178 -0
  19. package/dist/agent/skills/entity-schema.md +75 -431
  20. package/dist/agent/skills/interview/entity-templates.md +38 -37
  21. package/dist/agent/skills/interview/question-domains.md +54 -49
  22. package/dist/agent/skills/interview/skill.md +80 -27
  23. package/dist/agent/skills/schema-rules.md +28 -28
  24. package/dist/agent/tools/artifact-tools.d.ts +143 -0
  25. package/dist/agent/tools/artifact-tools.js +223 -0
  26. package/dist/agent/tools/artifact-tools.js.map +1 -0
  27. package/dist/agent/tools/capture-tools.d.ts +31 -0
  28. package/dist/agent/tools/capture-tools.js +40 -0
  29. package/dist/agent/tools/capture-tools.js.map +1 -0
  30. package/dist/agent/tools/folder-tools.d.ts +47 -0
  31. package/dist/agent/tools/folder-tools.js +256 -0
  32. package/dist/agent/tools/folder-tools.js.map +1 -0
  33. package/dist/agent/tools/fs-tools.d.ts +6 -5
  34. package/dist/agent/tools/fs-tools.js +5 -5
  35. package/dist/agent/tools/fs-tools.js.map +1 -1
  36. package/dist/agent/tools/graph-tools.d.ts +48 -72
  37. package/dist/agent/tools/graph-tools.js +882 -325
  38. package/dist/agent/tools/graph-tools.js.map +1 -1
  39. package/dist/agent/tools/history-tools.d.ts +95 -0
  40. package/dist/agent/tools/history-tools.js +461 -0
  41. package/dist/agent/tools/history-tools.js.map +1 -0
  42. package/dist/agent/tools/load-skill.d.ts +6 -5
  43. package/dist/agent/tools/load-skill.js +3 -3
  44. package/dist/agent/tools/load-skill.js.map +1 -1
  45. package/dist/agent/tools/ops-tools.d.ts +5 -4
  46. package/dist/agent/tools/ops-tools.js +130 -236
  47. package/dist/agent/tools/ops-tools.js.map +1 -1
  48. package/dist/agent/tools/permission-tools.d.ts +87 -17
  49. package/dist/agent/tools/permission-tools.js +233 -43
  50. package/dist/agent/tools/permission-tools.js.map +1 -1
  51. package/dist/agent/tools/tool-loader.js +5 -4
  52. package/dist/agent/tools/tool-loader.js.map +1 -1
  53. package/dist/agent/tools/web-tools.js +58 -9
  54. package/dist/agent/tools/web-tools.js.map +1 -1
  55. package/dist/cli/commands/about.d.ts +1 -0
  56. package/dist/cli/commands/about.js +55 -3
  57. package/dist/cli/commands/about.js.map +1 -1
  58. package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
  59. package/dist/cli/commands/admin/audit-workspace.js +133 -0
  60. package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
  61. package/dist/cli/commands/admin/audit.d.ts +21 -0
  62. package/dist/cli/commands/admin/audit.js +174 -0
  63. package/dist/cli/commands/admin/audit.js.map +1 -0
  64. package/dist/cli/commands/admin/backup.d.ts +54 -0
  65. package/dist/cli/commands/admin/backup.js +207 -0
  66. package/dist/cli/commands/admin/backup.js.map +1 -0
  67. package/dist/cli/commands/admin/folder.d.ts +11 -0
  68. package/dist/cli/commands/{collection.js → admin/folder.js} +33 -32
  69. package/dist/cli/commands/admin/folder.js.map +1 -0
  70. package/dist/cli/commands/admin/index.d.ts +16 -0
  71. package/dist/cli/commands/admin/index.js +46 -0
  72. package/dist/cli/commands/admin/index.js.map +1 -0
  73. package/dist/cli/commands/admin/migrate-assets.d.ts +53 -0
  74. package/dist/cli/commands/admin/migrate-assets.js +184 -0
  75. package/dist/cli/commands/admin/migrate-assets.js.map +1 -0
  76. package/dist/cli/commands/admin/migrate.d.ts +56 -0
  77. package/dist/cli/commands/admin/migrate.js +263 -0
  78. package/dist/cli/commands/admin/migrate.js.map +1 -0
  79. package/dist/cli/commands/admin/restore.d.ts +24 -0
  80. package/dist/cli/commands/admin/restore.js +228 -0
  81. package/dist/cli/commands/admin/restore.js.map +1 -0
  82. package/dist/cli/commands/admin/secrets.d.ts +23 -0
  83. package/dist/cli/commands/admin/secrets.js +256 -0
  84. package/dist/cli/commands/admin/secrets.js.map +1 -0
  85. package/dist/cli/commands/admin/settings.d.ts +28 -0
  86. package/dist/cli/commands/admin/settings.js +284 -0
  87. package/dist/cli/commands/admin/settings.js.map +1 -0
  88. package/dist/cli/commands/admin/token.d.ts +42 -0
  89. package/dist/cli/commands/admin/token.js +126 -0
  90. package/dist/cli/commands/admin/token.js.map +1 -0
  91. package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
  92. package/dist/cli/commands/admin/transfer-ownership.js +106 -0
  93. package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
  94. package/dist/cli/commands/admin/user.d.ts +11 -0
  95. package/dist/cli/commands/admin/user.js +187 -0
  96. package/dist/cli/commands/admin/user.js.map +1 -0
  97. package/dist/cli/commands/clone.d.ts +25 -3
  98. package/dist/cli/commands/clone.js +142 -36
  99. package/dist/cli/commands/clone.js.map +1 -1
  100. package/dist/cli/commands/config.d.ts +23 -107
  101. package/dist/cli/commands/config.js +52 -260
  102. package/dist/cli/commands/config.js.map +1 -1
  103. package/dist/cli/commands/connector.d.ts +10 -13
  104. package/dist/cli/commands/connector.js +16 -58
  105. package/dist/cli/commands/connector.js.map +1 -1
  106. package/dist/cli/commands/deploy.js +215 -68
  107. package/dist/cli/commands/deploy.js.map +1 -1
  108. package/dist/cli/commands/index.js +5 -1
  109. package/dist/cli/commands/index.js.map +1 -1
  110. package/dist/cli/commands/init.js +10 -30
  111. package/dist/cli/commands/init.js.map +1 -1
  112. package/dist/cli/commands/mcp.js +54 -6
  113. package/dist/cli/commands/mcp.js.map +1 -1
  114. package/dist/cli/commands/r2.d.ts +3 -0
  115. package/dist/cli/commands/r2.js +223 -204
  116. package/dist/cli/commands/r2.js.map +1 -1
  117. package/dist/cli/commands/redeploy.js +65 -12
  118. package/dist/cli/commands/redeploy.js.map +1 -1
  119. package/dist/cli/commands/reset.d.ts +22 -6
  120. package/dist/cli/commands/reset.js +132 -34
  121. package/dist/cli/commands/reset.js.map +1 -1
  122. package/dist/cli/commands/serve.js +242 -26
  123. package/dist/cli/commands/serve.js.map +1 -1
  124. package/dist/cli/commands/sync.d.ts +1 -1
  125. package/dist/cli/commands/sync.js +237 -227
  126. package/dist/cli/commands/sync.js.map +1 -1
  127. package/dist/cli/crypto-bundle.d.ts +39 -0
  128. package/dist/cli/crypto-bundle.js +94 -0
  129. package/dist/cli/crypto-bundle.js.map +1 -0
  130. package/dist/cli/index.js +24 -26
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/cli/railway-pin.d.ts +68 -0
  133. package/dist/cli/railway-pin.js +96 -0
  134. package/dist/cli/railway-pin.js.map +1 -0
  135. package/dist/cli/railway-provisioning.d.ts +53 -0
  136. package/dist/cli/railway-provisioning.js +85 -0
  137. package/dist/cli/railway-provisioning.js.map +1 -0
  138. package/dist/cli/setup-wizard.d.ts +30 -49
  139. package/dist/cli/setup-wizard.js +39 -40
  140. package/dist/cli/setup-wizard.js.map +1 -1
  141. package/dist/core/accent-palette.d.ts +22 -0
  142. package/dist/core/accent-palette.js +47 -0
  143. package/dist/core/accent-palette.js.map +1 -0
  144. package/dist/core/artifact-asset-resolution.d.ts +90 -0
  145. package/dist/core/artifact-asset-resolution.js +138 -0
  146. package/dist/core/artifact-asset-resolution.js.map +1 -0
  147. package/dist/core/artifact-asset-urls.d.ts +102 -0
  148. package/dist/core/artifact-asset-urls.js +159 -0
  149. package/dist/core/artifact-asset-urls.js.map +1 -0
  150. package/dist/core/artifact-bundle.d.ts +69 -0
  151. package/dist/core/artifact-bundle.js +305 -0
  152. package/dist/core/artifact-bundle.js.map +1 -0
  153. package/dist/core/artifact-escape.d.ts +5 -0
  154. package/dist/core/artifact-escape.js +26 -0
  155. package/dist/core/artifact-escape.js.map +1 -0
  156. package/dist/core/artifact-export.d.ts +27 -0
  157. package/dist/core/artifact-export.js +584 -0
  158. package/dist/core/artifact-export.js.map +1 -0
  159. package/dist/core/artifact-frame-selectors.d.ts +42 -0
  160. package/dist/core/artifact-frame-selectors.js +65 -0
  161. package/dist/core/artifact-frame-selectors.js.map +1 -0
  162. package/dist/core/breakpoints.d.ts +27 -0
  163. package/dist/core/breakpoints.js +28 -0
  164. package/dist/core/breakpoints.js.map +1 -0
  165. package/dist/core/cell-anchor.d.ts +29 -0
  166. package/dist/core/cell-anchor.js +53 -0
  167. package/dist/core/cell-anchor.js.map +1 -0
  168. package/dist/core/comment-anchor.d.ts +41 -0
  169. package/dist/core/comment-anchor.js +147 -0
  170. package/dist/core/comment-anchor.js.map +1 -0
  171. package/dist/core/commit-messages.d.ts +57 -0
  172. package/dist/core/commit-messages.js +85 -0
  173. package/dist/core/commit-messages.js.map +1 -0
  174. package/dist/core/embeds.d.ts +108 -0
  175. package/dist/core/embeds.js +226 -0
  176. package/dist/core/embeds.js.map +1 -0
  177. package/dist/core/entity-body-templates.d.ts +21 -0
  178. package/dist/core/entity-body-templates.js +67 -0
  179. package/dist/core/entity-body-templates.js.map +1 -0
  180. package/dist/core/entity-types-catalog.d.ts +65 -0
  181. package/dist/core/entity-types-catalog.js +142 -0
  182. package/dist/core/entity-types-catalog.js.map +1 -0
  183. package/dist/core/field-library.d.ts +62 -0
  184. package/dist/core/field-library.js +129 -0
  185. package/dist/core/field-library.js.map +1 -0
  186. package/dist/core/folder-paths.d.ts +41 -0
  187. package/dist/core/folder-paths.js +95 -0
  188. package/dist/core/folder-paths.js.map +1 -0
  189. package/dist/core/folder-sidecar.d.ts +36 -0
  190. package/dist/core/folder-sidecar.js +91 -0
  191. package/dist/core/folder-sidecar.js.map +1 -0
  192. package/dist/core/format-registry.d.ts +170 -0
  193. package/dist/core/format-registry.js +412 -0
  194. package/dist/core/format-registry.js.map +1 -0
  195. package/dist/core/graph.d.ts +801 -14
  196. package/dist/core/graph.js +2340 -308
  197. package/dist/core/graph.js.map +1 -1
  198. package/dist/core/history-diff.d.ts +35 -0
  199. package/dist/core/history-diff.js +114 -0
  200. package/dist/core/history-diff.js.map +1 -0
  201. package/dist/core/refs.d.ts +41 -0
  202. package/dist/core/refs.js +80 -0
  203. package/dist/core/refs.js.map +1 -0
  204. package/dist/core/schema-registry.d.ts +66 -0
  205. package/dist/core/schema-registry.js +198 -37
  206. package/dist/core/schema-registry.js.map +1 -1
  207. package/dist/core/schemas/connector.d.ts +67 -0
  208. package/dist/core/schemas/connector.js +100 -0
  209. package/dist/core/schemas/connector.js.map +1 -0
  210. package/dist/core/schemas/workspace.d.ts +122 -0
  211. package/dist/core/schemas/workspace.js +211 -0
  212. package/dist/core/schemas/workspace.js.map +1 -0
  213. package/dist/core/secrets/SecretStore.d.ts +77 -0
  214. package/dist/core/secrets/SecretStore.js +13 -0
  215. package/dist/core/secrets/SecretStore.js.map +1 -0
  216. package/dist/core/secrets/SettingsResolver.d.ts +54 -0
  217. package/dist/core/secrets/SettingsResolver.js +80 -0
  218. package/dist/core/secrets/SettingsResolver.js.map +1 -0
  219. package/dist/core/secrets/SettingsStore.d.ts +30 -0
  220. package/dist/core/secrets/SettingsStore.js +9 -0
  221. package/dist/core/secrets/SettingsStore.js.map +1 -0
  222. package/dist/core/secrets/SqliteEncryptedStore.d.ts +90 -0
  223. package/dist/core/secrets/SqliteEncryptedStore.js +598 -0
  224. package/dist/core/secrets/SqliteEncryptedStore.js.map +1 -0
  225. package/dist/core/secrets/audit.d.ts +36 -0
  226. package/dist/core/secrets/audit.js +60 -0
  227. package/dist/core/secrets/audit.js.map +1 -0
  228. package/dist/core/secrets/auth-db-migration.d.ts +129 -0
  229. package/dist/core/secrets/auth-db-migration.js +653 -0
  230. package/dist/core/secrets/auth-db-migration.js.map +1 -0
  231. package/dist/core/secrets/bundle.d.ts +141 -0
  232. package/dist/core/secrets/bundle.js +435 -0
  233. package/dist/core/secrets/bundle.js.map +1 -0
  234. package/dist/core/secrets/dual-write.d.ts +81 -0
  235. package/dist/core/secrets/dual-write.js +247 -0
  236. package/dist/core/secrets/dual-write.js.map +1 -0
  237. package/dist/core/secrets/encryption.d.ts +44 -0
  238. package/dist/core/secrets/encryption.js +97 -0
  239. package/dist/core/secrets/encryption.js.map +1 -0
  240. package/dist/core/secrets/index.d.ts +49 -0
  241. package/dist/core/secrets/index.js +74 -0
  242. package/dist/core/secrets/index.js.map +1 -0
  243. package/dist/core/secrets/master-key.d.ts +38 -0
  244. package/dist/core/secrets/master-key.js +122 -0
  245. package/dist/core/secrets/master-key.js.map +1 -0
  246. package/dist/core/secrets/probes/anthropic.d.ts +98 -0
  247. package/dist/core/secrets/probes/anthropic.js +300 -0
  248. package/dist/core/secrets/probes/anthropic.js.map +1 -0
  249. package/dist/core/secrets/probes/brave.d.ts +9 -0
  250. package/dist/core/secrets/probes/brave.js +15 -0
  251. package/dist/core/secrets/probes/brave.js.map +1 -0
  252. package/dist/core/secrets/probes/r2.d.ts +15 -0
  253. package/dist/core/secrets/probes/r2.js +14 -0
  254. package/dist/core/secrets/probes/r2.js.map +1 -0
  255. package/dist/core/secrets/probes/tavily.d.ts +18 -0
  256. package/dist/core/secrets/probes/tavily.js +58 -0
  257. package/dist/core/secrets/probes/tavily.js.map +1 -0
  258. package/dist/core/secrets/probes/voyage.d.ts +13 -0
  259. package/dist/core/secrets/probes/voyage.js +52 -0
  260. package/dist/core/secrets/probes/voyage.js.map +1 -0
  261. package/dist/core/secrets/r2-structural-migration.d.ts +39 -0
  262. package/dist/core/secrets/r2-structural-migration.js +109 -0
  263. package/dist/core/secrets/r2-structural-migration.js.map +1 -0
  264. package/dist/core/secrets/read-flip.d.ts +59 -0
  265. package/dist/core/secrets/read-flip.js +87 -0
  266. package/dist/core/secrets/read-flip.js.map +1 -0
  267. package/dist/core/secrets/registry.d.ts +188 -0
  268. package/dist/core/secrets/registry.js +623 -0
  269. package/dist/core/secrets/registry.js.map +1 -0
  270. package/dist/core/types.d.ts +77 -483
  271. package/dist/core/types.js +27 -3
  272. package/dist/core/types.js.map +1 -1
  273. package/dist/core/user-config.d.ts +75 -12
  274. package/dist/core/user-config.js +155 -14
  275. package/dist/core/user-config.js.map +1 -1
  276. package/dist/core/validation.d.ts +786 -1373
  277. package/dist/core/validation.js +458 -147
  278. package/dist/core/validation.js.map +1 -1
  279. package/dist/core/view-scope.d.ts +88 -0
  280. package/dist/core/view-scope.js +71 -0
  281. package/dist/core/view-scope.js.map +1 -0
  282. package/dist/core/workspace-manager.d.ts +116 -14
  283. package/dist/core/workspace-manager.js +270 -107
  284. package/dist/core/workspace-manager.js.map +1 -1
  285. package/dist/core/workspace.d.ts +19 -5
  286. package/dist/core/workspace.js +73 -51
  287. package/dist/core/workspace.js.map +1 -1
  288. package/dist/mcp/comment-virtual-entity.d.ts +36 -0
  289. package/dist/mcp/comment-virtual-entity.js +71 -0
  290. package/dist/mcp/comment-virtual-entity.js.map +1 -0
  291. package/dist/mcp/connector-manager.d.ts +72 -2
  292. package/dist/mcp/connector-manager.js +211 -32
  293. package/dist/mcp/connector-manager.js.map +1 -1
  294. package/dist/mcp/oauth-provider.d.ts +0 -5
  295. package/dist/mcp/oauth-provider.js +31 -25
  296. package/dist/mcp/oauth-provider.js.map +1 -1
  297. package/dist/mcp/oauth-registry.d.ts +46 -8
  298. package/dist/mcp/oauth-registry.js +52 -13
  299. package/dist/mcp/oauth-registry.js.map +1 -1
  300. package/dist/mcp/server-discovery.d.ts +73 -0
  301. package/dist/mcp/server-discovery.js +164 -0
  302. package/dist/mcp/server-discovery.js.map +1 -0
  303. package/dist/mcp/server.d.ts +24 -3
  304. package/dist/mcp/server.js +53 -10
  305. package/dist/mcp/server.js.map +1 -1
  306. package/dist/mcp/state-signer.d.ts +62 -0
  307. package/dist/mcp/state-signer.js +205 -0
  308. package/dist/mcp/state-signer.js.map +1 -0
  309. package/dist/mcp/stdio-proxy.d.ts +67 -0
  310. package/dist/mcp/stdio-proxy.js +149 -0
  311. package/dist/mcp/stdio-proxy.js.map +1 -0
  312. package/dist/mcp/tools.d.ts +65 -2
  313. package/dist/mcp/tools.js +1926 -116
  314. package/dist/mcp/tools.js.map +1 -1
  315. package/dist/server/__tests__/helpers/graph-api.d.ts +16 -0
  316. package/dist/server/__tests__/helpers/graph-api.js +16 -0
  317. package/dist/server/__tests__/helpers/graph-api.js.map +1 -0
  318. package/dist/server/artifact-asset-mint.d.ts +59 -0
  319. package/dist/server/artifact-asset-mint.js +93 -0
  320. package/dist/server/artifact-asset-mint.js.map +1 -0
  321. package/dist/server/asset-index-queue.d.ts +98 -0
  322. package/dist/server/asset-index-queue.js +193 -0
  323. package/dist/server/asset-index-queue.js.map +1 -0
  324. package/dist/server/body-write-coordinator.d.ts +161 -0
  325. package/dist/server/body-write-coordinator.js +182 -0
  326. package/dist/server/body-write-coordinator.js.map +1 -0
  327. package/dist/server/cloud-billing-flow.d.ts +32 -0
  328. package/dist/server/cloud-billing-flow.js +75 -0
  329. package/dist/server/cloud-billing-flow.js.map +1 -0
  330. package/dist/server/commit-audit.d.ts +26 -0
  331. package/dist/server/commit-audit.js +30 -0
  332. package/dist/server/commit-audit.js.map +1 -0
  333. package/dist/server/index.d.ts +29 -3
  334. package/dist/server/index.js +672 -269
  335. package/dist/server/index.js.map +1 -1
  336. package/dist/server/middleware/sanitize.d.ts +46 -0
  337. package/dist/server/middleware/sanitize.js +195 -0
  338. package/dist/server/middleware/sanitize.js.map +1 -0
  339. package/dist/server/process-guards.d.ts +37 -0
  340. package/dist/server/process-guards.js +44 -0
  341. package/dist/server/process-guards.js.map +1 -0
  342. package/dist/server/routes/artifact-export-api.d.ts +11 -0
  343. package/dist/server/routes/artifact-export-api.js +167 -0
  344. package/dist/server/routes/artifact-export-api.js.map +1 -0
  345. package/dist/server/routes/asset-api.d.ts +81 -1
  346. package/dist/server/routes/asset-api.js +808 -61
  347. package/dist/server/routes/asset-api.js.map +1 -1
  348. package/dist/server/routes/audit-api.d.ts +24 -0
  349. package/dist/server/routes/audit-api.js +117 -0
  350. package/dist/server/routes/audit-api.js.map +1 -0
  351. package/dist/server/routes/auth-api.js +532 -63
  352. package/dist/server/routes/auth-api.js.map +1 -1
  353. package/dist/server/routes/capture-api.d.ts +10 -3
  354. package/dist/server/routes/capture-api.js +213 -25
  355. package/dist/server/routes/capture-api.js.map +1 -1
  356. package/dist/server/routes/chat-sessions-api.d.ts +13 -0
  357. package/dist/server/routes/chat-sessions-api.js +455 -0
  358. package/dist/server/routes/chat-sessions-api.js.map +1 -0
  359. package/dist/server/routes/chat.d.ts +35 -1
  360. package/dist/server/routes/chat.js +837 -55
  361. package/dist/server/routes/chat.js.map +1 -1
  362. package/dist/server/routes/comments-api.d.ts +15 -0
  363. package/dist/server/routes/comments-api.js +444 -0
  364. package/dist/server/routes/comments-api.js.map +1 -0
  365. package/dist/server/routes/config-api.d.ts +3 -2
  366. package/dist/server/routes/config-api.js +179 -49
  367. package/dist/server/routes/config-api.js.map +1 -1
  368. package/dist/server/routes/connectors-api.js +177 -42
  369. package/dist/server/routes/connectors-api.js.map +1 -1
  370. package/dist/server/routes/event-ingest-api.d.ts +15 -0
  371. package/dist/server/routes/{meeting-ingest-api.js → event-ingest-api.js} +35 -20
  372. package/dist/server/routes/event-ingest-api.js.map +1 -0
  373. package/dist/server/routes/field-library-api.d.ts +28 -0
  374. package/dist/server/routes/field-library-api.js +126 -0
  375. package/dist/server/routes/field-library-api.js.map +1 -0
  376. package/dist/server/routes/git-http.d.ts +2 -2
  377. package/dist/server/routes/git-http.js +86 -39
  378. package/dist/server/routes/git-http.js.map +1 -1
  379. package/dist/server/routes/graph-api-access.d.ts +57 -0
  380. package/dist/server/routes/graph-api-access.js +112 -0
  381. package/dist/server/routes/graph-api-access.js.map +1 -0
  382. package/dist/server/routes/graph-api.d.ts +1 -1
  383. package/dist/server/routes/graph-api.js +1481 -325
  384. package/dist/server/routes/graph-api.js.map +1 -1
  385. package/dist/server/routes/health.d.ts +18 -0
  386. package/dist/server/routes/health.js +74 -0
  387. package/dist/server/routes/health.js.map +1 -0
  388. package/dist/server/routes/import-batch.d.ts +24 -0
  389. package/dist/server/routes/import-batch.js +33 -0
  390. package/dist/server/routes/import-batch.js.map +1 -0
  391. package/dist/server/routes/insights-api.d.ts +9 -2
  392. package/dist/server/routes/insights-api.js +358 -60
  393. package/dist/server/routes/insights-api.js.map +1 -1
  394. package/dist/server/routes/mcp.d.ts +7 -3
  395. package/dist/server/routes/mcp.js +24 -8
  396. package/dist/server/routes/mcp.js.map +1 -1
  397. package/dist/server/routes/oauth-api.d.ts +67 -0
  398. package/dist/server/routes/oauth-api.js +421 -0
  399. package/dist/server/routes/oauth-api.js.map +1 -0
  400. package/dist/server/routes/permissions-api.d.ts +9 -2
  401. package/dist/server/routes/permissions-api.js +87 -31
  402. package/dist/server/routes/permissions-api.js.map +1 -1
  403. package/dist/server/routes/r2-api.d.ts +25 -0
  404. package/dist/server/routes/r2-api.js +276 -0
  405. package/dist/server/routes/r2-api.js.map +1 -0
  406. package/dist/server/routes/secrets-api.d.ts +36 -0
  407. package/dist/server/routes/secrets-api.js +308 -0
  408. package/dist/server/routes/secrets-api.js.map +1 -0
  409. package/dist/server/routes/settings-api.d.ts +29 -0
  410. package/dist/server/routes/settings-api.js +180 -0
  411. package/dist/server/routes/settings-api.js.map +1 -0
  412. package/dist/server/routes/share-api.d.ts +34 -0
  413. package/dist/server/routes/share-api.js +262 -0
  414. package/dist/server/routes/share-api.js.map +1 -0
  415. package/dist/server/routes/views-api.d.ts +11 -2
  416. package/dist/server/routes/views-api.js +123 -22
  417. package/dist/server/routes/views-api.js.map +1 -1
  418. package/dist/server/routes/workspace-api.d.ts +2 -1
  419. package/dist/server/routes/workspace-api.js +144 -23
  420. package/dist/server/routes/workspace-api.js.map +1 -1
  421. package/dist/server/routes/ws.d.ts +3 -2
  422. package/dist/server/routes/ws.js +68 -17
  423. package/dist/server/routes/ws.js.map +1 -1
  424. package/dist/server/session-manager.d.ts +48 -5
  425. package/dist/server/session-manager.js +182 -14
  426. package/dist/server/session-manager.js.map +1 -1
  427. package/dist/server/ws-hub.d.ts +122 -54
  428. package/dist/server/ws-hub.js +0 -0
  429. package/dist/server/ws-hub.js.map +1 -1
  430. package/dist/server/yjs-manager.d.ts +278 -7
  431. package/dist/server/yjs-manager.js +830 -38
  432. package/dist/server/yjs-manager.js.map +1 -1
  433. package/dist/server/yjs-persistence.d.ts +165 -0
  434. package/dist/server/yjs-persistence.js +557 -0
  435. package/dist/server/yjs-persistence.js.map +1 -0
  436. package/dist/server/yjs-text-diff.d.ts +32 -0
  437. package/dist/server/yjs-text-diff.js +61 -0
  438. package/dist/server/yjs-text-diff.js.map +1 -0
  439. package/dist/services/access-control.d.ts +79 -0
  440. package/dist/services/access-control.js +165 -0
  441. package/dist/services/access-control.js.map +1 -0
  442. package/dist/services/artifact-asset-token.d.ts +69 -0
  443. package/dist/services/artifact-asset-token.js +94 -0
  444. package/dist/services/artifact-asset-token.js.map +1 -0
  445. package/dist/services/artifact-library-sources.d.ts +3 -0
  446. package/dist/services/artifact-library-sources.js +44 -0
  447. package/dist/services/artifact-library-sources.js.map +1 -0
  448. package/dist/services/artifact-render-export.d.ts +145 -0
  449. package/dist/services/artifact-render-export.js +639 -0
  450. package/dist/services/artifact-render-export.js.map +1 -0
  451. package/dist/services/asset-caption-service.d.ts +103 -0
  452. package/dist/services/asset-caption-service.js +186 -0
  453. package/dist/services/asset-caption-service.js.map +1 -0
  454. package/dist/services/asset-delete-authz.d.ts +31 -0
  455. package/dist/services/asset-delete-authz.js +61 -0
  456. package/dist/services/asset-delete-authz.js.map +1 -0
  457. package/dist/services/asset-finalize-service.d.ts +58 -0
  458. package/dist/services/asset-finalize-service.js +216 -0
  459. package/dist/services/asset-finalize-service.js.map +1 -0
  460. package/dist/services/asset-import-service.d.ts +111 -0
  461. package/dist/services/asset-import-service.js +394 -0
  462. package/dist/services/asset-import-service.js.map +1 -0
  463. package/dist/services/asset-index-sweep.d.ts +95 -0
  464. package/dist/services/asset-index-sweep.js +249 -0
  465. package/dist/services/asset-index-sweep.js.map +1 -0
  466. package/dist/services/asset-lifecycle-check.d.ts +22 -0
  467. package/dist/services/asset-lifecycle-check.js +80 -0
  468. package/dist/services/asset-lifecycle-check.js.map +1 -0
  469. package/dist/services/asset-listing.d.ts +72 -0
  470. package/dist/services/asset-listing.js +324 -0
  471. package/dist/services/asset-listing.js.map +1 -0
  472. package/dist/services/asset-presign-service.d.ts +68 -0
  473. package/dist/services/asset-presign-service.js +124 -0
  474. package/dist/services/asset-presign-service.js.map +1 -0
  475. package/dist/services/asset-sidecar-service.d.ts +28 -0
  476. package/dist/services/asset-sidecar-service.js +79 -0
  477. package/dist/services/asset-sidecar-service.js.map +1 -0
  478. package/dist/services/asset-upload-errors.d.ts +41 -0
  479. package/dist/services/asset-upload-errors.js +45 -0
  480. package/dist/services/asset-upload-errors.js.map +1 -0
  481. package/dist/services/asset-upload-service.d.ts +56 -0
  482. package/dist/services/asset-upload-service.js +200 -0
  483. package/dist/services/asset-upload-service.js.map +1 -0
  484. package/dist/services/asset-upload-token.d.ts +58 -0
  485. package/dist/services/asset-upload-token.js +75 -0
  486. package/dist/services/asset-upload-token.js.map +1 -0
  487. package/dist/services/assets/asset-index-service.d.ts +127 -0
  488. package/dist/services/assets/asset-index-service.js +227 -0
  489. package/dist/services/assets/asset-index-service.js.map +1 -0
  490. package/dist/services/assets/base.d.ts +135 -4
  491. package/dist/services/assets/base.js +148 -3
  492. package/dist/services/assets/base.js.map +1 -1
  493. package/dist/services/assets/index.d.ts +116 -1
  494. package/dist/services/assets/index.js +227 -0
  495. package/dist/services/assets/index.js.map +1 -1
  496. package/dist/services/assets/local.d.ts +16 -1
  497. package/dist/services/assets/local.js +112 -3
  498. package/dist/services/assets/local.js.map +1 -1
  499. package/dist/services/assets/r2-sync.d.ts +88 -0
  500. package/dist/services/assets/r2-sync.js +412 -0
  501. package/dist/services/assets/r2-sync.js.map +1 -0
  502. package/dist/services/assets/r2.d.ts +87 -1
  503. package/dist/services/assets/r2.js +205 -3
  504. package/dist/services/assets/r2.js.map +1 -1
  505. package/dist/services/auth-service.d.ts +304 -56
  506. package/dist/services/auth-service.js +1043 -261
  507. package/dist/services/auth-service.js.map +1 -1
  508. package/dist/services/chat-session-service.d.ts +188 -0
  509. package/dist/services/chat-session-service.js +512 -0
  510. package/dist/services/chat-session-service.js.map +1 -0
  511. package/dist/services/cloud-inference-billing.d.ts +64 -0
  512. package/dist/services/cloud-inference-billing.js +313 -0
  513. package/dist/services/cloud-inference-billing.js.map +1 -0
  514. package/dist/services/comment-service.d.ts +97 -0
  515. package/dist/services/comment-service.js +341 -0
  516. package/dist/services/comment-service.js.map +1 -0
  517. package/dist/services/comment-virtual-entity.d.ts +36 -0
  518. package/dist/services/comment-virtual-entity.js +71 -0
  519. package/dist/services/comment-virtual-entity.js.map +1 -0
  520. package/dist/services/convert-service.d.ts +64 -0
  521. package/dist/services/convert-service.js +68 -0
  522. package/dist/services/convert-service.js.map +1 -0
  523. package/dist/services/csv-service.d.ts +22 -17
  524. package/dist/services/csv-service.js +55 -92
  525. package/dist/services/csv-service.js.map +1 -1
  526. package/dist/services/entity-mutations.d.ts +298 -0
  527. package/dist/services/entity-mutations.js +498 -0
  528. package/dist/services/entity-mutations.js.map +1 -0
  529. package/dist/services/{meeting-processor.d.ts → event-processor.d.ts} +15 -8
  530. package/dist/services/{meeting-processor.js → event-processor.js} +124 -65
  531. package/dist/services/event-processor.js.map +1 -0
  532. package/dist/services/extract/docx.d.ts +1 -0
  533. package/dist/services/extract/docx.js +233 -0
  534. package/dist/services/extract/docx.js.map +1 -0
  535. package/dist/services/extract/index.d.ts +9 -0
  536. package/dist/services/extract/index.js +10 -0
  537. package/dist/services/extract/index.js.map +1 -0
  538. package/dist/services/extract/pdf.d.ts +13 -0
  539. package/dist/services/extract/pdf.js +69 -0
  540. package/dist/services/extract/pdf.js.map +1 -0
  541. package/dist/services/folder-creation.d.ts +33 -0
  542. package/dist/services/folder-creation.js +103 -0
  543. package/dist/services/folder-creation.js.map +1 -0
  544. package/dist/services/git.d.ts +58 -0
  545. package/dist/services/git.js +194 -55
  546. package/dist/services/git.js.map +1 -1
  547. package/dist/services/graph-maintenance.js +4 -4
  548. package/dist/services/graph-maintenance.js.map +1 -1
  549. package/dist/services/import-service.d.ts +51 -2
  550. package/dist/services/import-service.js +254 -107
  551. package/dist/services/import-service.js.map +1 -1
  552. package/dist/services/lint-service.js +10 -17
  553. package/dist/services/lint-service.js.map +1 -1
  554. package/dist/services/markdown.d.ts +12 -1
  555. package/dist/services/markdown.js +77 -9
  556. package/dist/services/markdown.js.map +1 -1
  557. package/dist/services/mention-detector.d.ts +23 -0
  558. package/dist/services/mention-detector.js +47 -0
  559. package/dist/services/mention-detector.js.map +1 -0
  560. package/dist/services/model-capabilities.d.ts +41 -0
  561. package/dist/services/model-capabilities.js +107 -0
  562. package/dist/services/model-capabilities.js.map +1 -0
  563. package/dist/services/notification-broadcast.d.ts +32 -0
  564. package/dist/services/notification-broadcast.js +38 -0
  565. package/dist/services/notification-broadcast.js.map +1 -0
  566. package/dist/services/notification-service.d.ts +41 -0
  567. package/dist/services/notification-service.js +100 -0
  568. package/dist/services/notification-service.js.map +1 -0
  569. package/dist/services/oauth-server-store.d.ts +147 -0
  570. package/dist/services/oauth-server-store.js +319 -0
  571. package/dist/services/oauth-server-store.js.map +1 -0
  572. package/dist/services/orphan-service.js +2 -2
  573. package/dist/services/orphan-service.js.map +1 -1
  574. package/dist/services/personal-folder.d.ts +40 -0
  575. package/dist/services/personal-folder.js +101 -0
  576. package/dist/services/personal-folder.js.map +1 -0
  577. package/dist/services/playwright-bootstrap.d.ts +24 -0
  578. package/dist/services/playwright-bootstrap.js +74 -0
  579. package/dist/services/playwright-bootstrap.js.map +1 -0
  580. package/dist/services/scratch-asset-promote.d.ts +57 -0
  581. package/dist/services/scratch-asset-promote.js +95 -0
  582. package/dist/services/scratch-asset-promote.js.map +1 -0
  583. package/dist/services/scratch-attachment-service.d.ts +201 -0
  584. package/dist/services/scratch-attachment-service.js +354 -0
  585. package/dist/services/scratch-attachment-service.js.map +1 -0
  586. package/dist/services/share-link-service.d.ts +57 -0
  587. package/dist/services/share-link-service.js +142 -0
  588. package/dist/services/share-link-service.js.map +1 -0
  589. package/dist/services/user-person-bridge.d.ts +136 -0
  590. package/dist/services/user-person-bridge.js +340 -0
  591. package/dist/services/user-person-bridge.js.map +1 -0
  592. package/dist/services/vector-service.d.ts +282 -5
  593. package/dist/services/vector-service.js +585 -29
  594. package/dist/services/vector-service.js.map +1 -1
  595. package/dist/services/workspace-access.d.ts +108 -0
  596. package/dist/services/workspace-access.js +149 -0
  597. package/dist/services/workspace-access.js.map +1 -0
  598. package/dist/services/workspace-assets-folder.d.ts +46 -0
  599. package/dist/services/workspace-assets-folder.js +75 -0
  600. package/dist/services/workspace-assets-folder.js.map +1 -0
  601. package/dist/utils/git.d.ts +17 -2
  602. package/dist/utils/git.js +23 -7
  603. package/dist/utils/git.js.map +1 -1
  604. package/dist/utils/log.d.ts +42 -0
  605. package/dist/utils/log.js +137 -0
  606. package/dist/utils/log.js.map +1 -0
  607. package/dist/utils/preflight.js +2 -2
  608. package/dist/utils/preflight.js.map +1 -1
  609. package/dist/utils/version-checker.d.ts +12 -19
  610. package/dist/utils/version-checker.js +14 -104
  611. package/dist/utils/version-checker.js.map +1 -1
  612. package/dist/web/_app/immutable/assets/0.CdGwrROa.css +2 -0
  613. package/dist/web/_app/immutable/assets/12.DlIf1mKh.css +1 -0
  614. package/dist/web/_app/immutable/assets/13.WUaKJbVc.css +1 -0
  615. package/dist/web/_app/immutable/assets/15.BY9pMmHS.css +1 -0
  616. package/dist/web/_app/immutable/assets/16.BwBFdc1D.css +1 -0
  617. package/dist/web/_app/immutable/assets/17.Dfl6l8tB.css +1 -0
  618. package/dist/web/_app/immutable/assets/18.DcuK5ZVm.css +1 -0
  619. package/dist/web/_app/immutable/assets/2.BPaq4A1R.css +1 -0
  620. package/dist/web/_app/immutable/assets/3.rkqUt0sX.css +1 -0
  621. package/dist/web/_app/immutable/assets/4.D_X83vru.css +1 -0
  622. package/dist/web/_app/immutable/assets/6.BLWoSeAD.css +1 -0
  623. package/dist/web/_app/immutable/assets/ArtifactEntityView.Cky6tBSx.css +1 -0
  624. package/dist/web/_app/immutable/assets/AssetLibraryPicker.5kCFSep0.css +1 -0
  625. package/dist/web/_app/immutable/assets/BulkActionsBar.uuv1XnDn.css +1 -0
  626. package/dist/web/_app/immutable/assets/CalendarView.DTqmFVwU.css +1 -0
  627. package/dist/web/_app/immutable/assets/CodeMirrorEditor.D6hf2pNJ.css +1 -0
  628. package/dist/web/_app/immutable/assets/CopyField.DVGZtw4U.css +1 -0
  629. package/dist/web/_app/immutable/assets/FolderMembersPanel.BvV1lBCg.css +1 -0
  630. package/dist/web/_app/immutable/assets/FolderMutationDialogs.BMRF6Z3z.css +1 -0
  631. package/dist/web/_app/immutable/assets/FolderPicker.Cp46GHe2.css +1 -0
  632. package/dist/web/_app/immutable/assets/GalleryView.ClvEQ1B2.css +1 -0
  633. package/dist/web/_app/immutable/assets/GraphView.BJtGL9py.css +1 -0
  634. package/dist/web/_app/immutable/assets/GridCell.Qb1eHKVF.css +1 -0
  635. package/dist/web/_app/immutable/assets/KanbanView.BZ3P-8CR.css +1 -0
  636. package/dist/web/_app/immutable/assets/Link.vV0ne105.css +1 -0
  637. package/dist/web/_app/immutable/assets/Markdown.1r8v3hpC.css +1 -0
  638. package/dist/web/_app/immutable/assets/Rail.0TocHeBk.css +1 -0
  639. package/dist/web/_app/immutable/assets/SaveViewDialog.Bb9E81xd.css +1 -0
  640. package/dist/web/_app/immutable/assets/Search.DJyLynjL.css +1 -0
  641. package/dist/web/_app/immutable/assets/SettingsDialog.D1uBHvq5.css +1 -0
  642. package/dist/web/_app/immutable/assets/Spinner.UBfl0pab.css +1 -0
  643. package/dist/web/_app/immutable/assets/StopFilledAlt.fNlDN65D.css +1 -0
  644. package/dist/web/_app/immutable/assets/TimelineView.B_-8qOXn.css +1 -0
  645. package/dist/web/_app/immutable/assets/Version.D3WVQoeW.css +1 -0
  646. package/dist/web/_app/immutable/assets/ViewBanner.DWswnFdi.css +1 -0
  647. package/dist/web/_app/immutable/assets/WorkspaceView.8YgMFJ1y.css +1 -0
  648. package/dist/web/_app/immutable/assets/button.BlLm4Dg1.css +1 -0
  649. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff +0 -0
  650. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2 +0 -0
  651. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff +0 -0
  652. package/dist/web/_app/immutable/assets/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2 +0 -0
  653. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2 +0 -0
  654. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff +0 -0
  655. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2 +0 -0
  656. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff +0 -0
  657. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.BNK2_mGO.woff2 +0 -0
  658. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-italic.DpEwFAQM.woff +0 -0
  659. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2 +0 -0
  660. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff +0 -0
  661. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff +0 -0
  662. package/dist/web/_app/immutable/assets/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2 +0 -0
  663. package/dist/web/_app/immutable/assets/inline-list.BNJWgLVw.css +1 -0
  664. package/dist/web/_app/immutable/assets/list-columns.BgnafZ4K.css +1 -0
  665. package/dist/web/_app/immutable/assets/realtime.DDCWxn3B.css +1 -0
  666. package/dist/web/_app/immutable/assets/select.B90KUqR4.css +1 -0
  667. package/dist/web/_app/immutable/chunks/-hm03jOI.js +2 -0
  668. package/dist/web/_app/immutable/chunks/22qYtvr82.js +1 -0
  669. package/dist/web/_app/immutable/chunks/3BtYsnOl.js +1 -0
  670. package/dist/web/_app/immutable/chunks/6S9WOky52.js +1 -0
  671. package/dist/web/_app/immutable/chunks/9K8VREGP.js +1 -0
  672. package/dist/web/_app/immutable/chunks/B-eCsAwG.js +1 -0
  673. package/dist/web/_app/immutable/chunks/B1Yv3YkO.js +1 -0
  674. package/dist/web/_app/immutable/chunks/B2oi87jG.js +2 -0
  675. package/dist/web/_app/immutable/chunks/B3JpSBNe2.js +1 -0
  676. package/dist/web/_app/immutable/chunks/B6Lt-qaJ.js +1 -0
  677. package/dist/web/_app/immutable/chunks/B6qeIQZz.js +2 -0
  678. package/dist/web/_app/immutable/chunks/B7ikU8uG.js +1 -0
  679. package/dist/web/_app/immutable/chunks/B8esiVhq2.js +1 -0
  680. package/dist/web/_app/immutable/chunks/B9KfEsQw2.js +1 -0
  681. package/dist/web/_app/immutable/chunks/BADqghcB.js +1 -0
  682. package/dist/web/_app/immutable/chunks/BCCbgL3X2.js +2 -0
  683. package/dist/web/_app/immutable/chunks/BHdkxQJT.js +1 -0
  684. package/dist/web/_app/immutable/chunks/BJWwhYcQ.js +6 -0
  685. package/dist/web/_app/immutable/chunks/BLs1h0Rh.js +1 -0
  686. package/dist/web/_app/immutable/chunks/BN9TXN69.js +2 -0
  687. package/dist/web/_app/immutable/chunks/BNbFby5W.js +1 -0
  688. package/dist/web/_app/immutable/chunks/BPzV_xOS2.js +1 -0
  689. package/dist/web/_app/immutable/chunks/BV3B8RXJ.js +1 -0
  690. package/dist/web/_app/immutable/chunks/BVUtKMul.js +185 -0
  691. package/dist/web/_app/immutable/chunks/BW-sf0N4.js +1 -0
  692. package/dist/web/_app/immutable/chunks/BZ6p-6--.js +1 -0
  693. package/dist/web/_app/immutable/chunks/BZp7nJwe2.js +2 -0
  694. package/dist/web/_app/immutable/chunks/BZqoC7tF.js +1 -0
  695. package/dist/web/_app/immutable/chunks/Bcb1m8Xc2.js +1 -0
  696. package/dist/web/_app/immutable/chunks/Bdz75Gen.js +2 -0
  697. package/dist/web/_app/immutable/chunks/Bfn7xWpi.js +8 -0
  698. package/dist/web/_app/immutable/chunks/BgQKTrSE.js +1 -0
  699. package/dist/web/_app/immutable/chunks/Biaf5vxK.js +1 -0
  700. package/dist/web/_app/immutable/chunks/BjuJM6rX.js +1 -0
  701. package/dist/web/_app/immutable/chunks/Bk8rX6M12.js +1 -0
  702. package/dist/web/_app/immutable/chunks/BlgjVmFM2.js +14 -0
  703. package/dist/web/_app/immutable/chunks/BpAhYe_M.js +1 -0
  704. package/dist/web/_app/immutable/chunks/BpCG9m962.js +1 -0
  705. package/dist/web/_app/immutable/chunks/BrVrEOCm.js +1 -0
  706. package/dist/web/_app/immutable/chunks/BsW72fyR2.js +1 -0
  707. package/dist/web/_app/immutable/chunks/BvYk3gM92.js +1 -0
  708. package/dist/web/_app/immutable/chunks/ByTixK1i.js +1 -0
  709. package/dist/web/_app/immutable/chunks/Bym3iIKr.js +1 -0
  710. package/dist/web/_app/immutable/chunks/BzaxZ6j12.js +1 -0
  711. package/dist/web/_app/immutable/chunks/C-rWXgyw.js +2 -0
  712. package/dist/web/_app/immutable/chunks/C04V7v3Y.js +3 -0
  713. package/dist/web/_app/immutable/chunks/C1B4xDs0.js +1 -0
  714. package/dist/web/_app/immutable/chunks/C1trcC8M.js +7 -0
  715. package/dist/web/_app/immutable/chunks/C3CYo_IQ2.js +1 -0
  716. package/dist/web/_app/immutable/chunks/C4H0qFU9.js +1 -0
  717. package/dist/web/_app/immutable/chunks/C9QtJpOb.js +1 -0
  718. package/dist/web/_app/immutable/chunks/C9frUVTC.js +1 -0
  719. package/dist/web/_app/immutable/chunks/C9tvkk7Y2.js +22 -0
  720. package/dist/web/_app/immutable/chunks/CEJvXDkY.js +2 -0
  721. package/dist/web/_app/immutable/chunks/CF2QFXIU.js +1 -0
  722. package/dist/web/_app/immutable/chunks/COIwtD-v.js +2692 -0
  723. package/dist/web/_app/immutable/chunks/CQ1eQ93t2.js +6 -0
  724. package/dist/web/_app/immutable/chunks/CQOrL1Xg.js +1 -0
  725. package/dist/web/_app/immutable/chunks/CQQp6PxD2.js +1 -0
  726. package/dist/web/_app/immutable/chunks/CUFQMEBn2.js +1 -0
  727. package/dist/web/_app/immutable/chunks/CUG-KeXm.js +1 -0
  728. package/dist/web/_app/immutable/chunks/CWKmhwV02.js +184 -0
  729. package/dist/web/_app/immutable/chunks/CYEYDNwO2.js +1 -0
  730. package/dist/web/_app/immutable/chunks/CZgFaimi2.js +83 -0
  731. package/dist/web/_app/immutable/chunks/CZqvCTCv.js +1 -0
  732. package/dist/web/_app/immutable/chunks/Ca8AGdcM.js +1 -0
  733. package/dist/web/_app/immutable/chunks/CaJRv9kC2.js +1 -0
  734. package/dist/web/_app/immutable/chunks/Cb-QzQz3.js +1 -0
  735. package/dist/web/_app/immutable/chunks/CcWaWbrI2.js +1 -0
  736. package/dist/web/_app/immutable/chunks/CdAmGoAk2.js +7 -0
  737. package/dist/web/_app/immutable/chunks/CdtzRVZK.js +1 -0
  738. package/dist/web/_app/immutable/chunks/Cn00Qj9G.js +1 -0
  739. package/dist/web/_app/immutable/chunks/Cpy0mGDa.js +1 -0
  740. package/dist/web/_app/immutable/chunks/Cu6j1_ld.js +1 -0
  741. package/dist/web/_app/immutable/chunks/CuYPXpWU.js +1 -0
  742. package/dist/web/_app/immutable/chunks/CvSEodTA.js +1 -0
  743. package/dist/web/_app/immutable/chunks/Cvnwo5OO.js +1 -0
  744. package/dist/web/_app/immutable/chunks/CvqqrTrj.js +1 -0
  745. package/dist/web/_app/immutable/chunks/Cyv4P2rC.js +5 -0
  746. package/dist/web/_app/immutable/chunks/D0rBhnqB2.js +1 -0
  747. package/dist/web/_app/immutable/chunks/D1yvtriI.js +1 -0
  748. package/dist/web/_app/immutable/chunks/D25NMRpl.js +1 -0
  749. package/dist/web/_app/immutable/chunks/D4RhBc5W.js +1 -0
  750. package/dist/web/_app/immutable/chunks/D4uUZ_aS2.js +1 -0
  751. package/dist/web/_app/immutable/chunks/D5Nx6OBM.js +1 -0
  752. package/dist/web/_app/immutable/chunks/D8wZ2xul.js +4 -0
  753. package/dist/web/_app/immutable/chunks/DA3HEX3X.js +1 -0
  754. package/dist/web/_app/immutable/chunks/DDbpVNi02.js +1 -0
  755. package/dist/web/_app/immutable/chunks/DLI5ShE_.js +1 -0
  756. package/dist/web/_app/immutable/chunks/DQMWa2t7.js +1 -0
  757. package/dist/web/_app/immutable/chunks/DQllwhz4.js +2 -0
  758. package/dist/web/_app/immutable/chunks/DR-cHvLq.js +1 -0
  759. package/dist/web/_app/immutable/chunks/DVdYVvQ_.js +1 -0
  760. package/dist/web/_app/immutable/chunks/DXsFrDer2.js +1 -0
  761. package/dist/web/_app/immutable/chunks/DYmOKT8e.js +1 -0
  762. package/dist/web/_app/immutable/chunks/DayPzYFE2.js +2 -0
  763. package/dist/web/_app/immutable/chunks/DiMsLIh32.js +1 -0
  764. package/dist/web/_app/immutable/chunks/Dl63IUnH.js +224 -0
  765. package/dist/web/_app/immutable/chunks/Dn3R8S-U.js +1 -0
  766. package/dist/web/_app/immutable/chunks/Dr0PcvUI.js +2 -0
  767. package/dist/web/_app/immutable/chunks/DuWMI5A2.js +2 -0
  768. package/dist/web/_app/immutable/chunks/DwZNoSMX.js +1 -0
  769. package/dist/web/_app/immutable/chunks/DzWts1972.js +1 -0
  770. package/dist/web/_app/immutable/chunks/FuiJnZG0.js +1 -0
  771. package/dist/web/_app/immutable/chunks/GzZSf1zn.js +3 -0
  772. package/dist/web/_app/immutable/chunks/Izkulod7.js +1 -0
  773. package/dist/web/_app/immutable/chunks/LYL8znYR2.js +23 -0
  774. package/dist/web/_app/immutable/chunks/N0nIzSkb.js +1 -0
  775. package/dist/web/_app/immutable/chunks/NYr8nVpL2.js +2 -0
  776. package/dist/web/_app/immutable/chunks/PhN6tXuJ2.js +1 -0
  777. package/dist/web/_app/immutable/chunks/RCBHRfcL.js +1 -0
  778. package/dist/web/_app/immutable/chunks/RK4gCWN0.js +2 -0
  779. package/dist/web/_app/immutable/chunks/T-v3aYaj2.js +1 -0
  780. package/dist/web/_app/immutable/chunks/XcWejFm_.js +5 -0
  781. package/dist/web/_app/immutable/chunks/Y1ENS0GB.js +1 -0
  782. package/dist/web/_app/immutable/chunks/_zekciZc.js +1 -0
  783. package/dist/web/_app/immutable/chunks/eTAE0Ol02.js +781 -0
  784. package/dist/web/_app/immutable/chunks/elDMEPuQ.js +1 -0
  785. package/dist/web/_app/immutable/chunks/gfak5NLW.js +1 -0
  786. package/dist/web/_app/immutable/chunks/hG-QCarB.js +1 -0
  787. package/dist/web/_app/immutable/chunks/kNaey6uv.js +1 -0
  788. package/dist/web/_app/immutable/chunks/qwr5boV8.js +1 -0
  789. package/dist/web/_app/immutable/chunks/rjjyuGhb.js +1 -0
  790. package/dist/web/_app/immutable/chunks/uBgoVlsx.js +3 -0
  791. package/dist/web/_app/immutable/chunks/vKt5ZDh2.js +1 -0
  792. package/dist/web/_app/immutable/chunks/vgzQgl7V.js +3 -0
  793. package/dist/web/_app/immutable/chunks/xY0c-UfG.js +3 -0
  794. package/dist/web/_app/immutable/chunks/xihTtKlq.js +1 -0
  795. package/dist/web/_app/immutable/chunks/yKN1F5Ua2.js +1 -0
  796. package/dist/web/_app/immutable/chunks/z65JJtH62.js +1 -0
  797. package/dist/web/_app/immutable/chunks/zPR_7qo62.js +66 -0
  798. package/dist/web/_app/immutable/entry/app.DwFGv-tp.js +2 -0
  799. package/dist/web/_app/immutable/entry/start.DS0SK0ki.js +1 -0
  800. package/dist/web/_app/immutable/nodes/0.C_rQMpKf.js +2 -0
  801. package/dist/web/_app/immutable/nodes/1.CLTfs0pT.js +1 -0
  802. package/dist/web/_app/immutable/nodes/10.2VRJN3EC.js +1 -0
  803. package/dist/web/_app/immutable/nodes/11.Blu-tkNh.js +1 -0
  804. package/dist/web/_app/immutable/nodes/12.ZWUccwr_.js +1 -0
  805. package/dist/web/_app/immutable/nodes/13.B2WIt2M7.js +1 -0
  806. package/dist/web/_app/immutable/nodes/14.CYrHXCA8.js +1 -0
  807. package/dist/web/_app/immutable/nodes/15.BdHKCiq8.js +1 -0
  808. package/dist/web/_app/immutable/nodes/16.B1K8xlq5.js +1 -0
  809. package/dist/web/_app/immutable/nodes/17.45hqPDVl.js +1 -0
  810. package/dist/web/_app/immutable/nodes/18.cJ2-Lx-Z.js +77 -0
  811. package/dist/web/_app/immutable/nodes/2.C8Fjf14Y.js +123 -0
  812. package/dist/web/_app/immutable/nodes/3.D5Y-v3kq.js +6 -0
  813. package/dist/web/_app/immutable/nodes/4.xUjhWJDb.js +11 -0
  814. package/dist/web/_app/immutable/nodes/5.0RArZ4ze.js +1 -0
  815. package/dist/web/_app/immutable/nodes/6.DnNumti8.js +6 -0
  816. package/dist/web/_app/immutable/nodes/7.Bthky8Lq.js +1 -0
  817. package/dist/web/_app/immutable/nodes/8.CIL8qye9.js +1 -0
  818. package/dist/web/_app/immutable/nodes/9.Bn5HGL4r.js +1 -0
  819. package/dist/web/_app/version.json +1 -1
  820. package/dist/web/favicon-16.png +0 -0
  821. package/dist/web/favicon-180.png +0 -0
  822. package/dist/web/favicon-32.png +0 -0
  823. package/dist/web/favicon-48.png +0 -0
  824. package/dist/web/favicon-512.png +0 -0
  825. package/dist/web/favicon.ico +0 -0
  826. package/dist/web/favicon.svg +8 -0
  827. package/dist/web/index.html +54 -21
  828. package/dist/web/studiograph-logomark.svg +29 -0
  829. package/package.json +35 -14
  830. package/dist/agent/skills/enrich-entities.md +0 -136
  831. package/dist/agent/skills/sync-configuration.md +0 -119
  832. package/dist/agent/skills/sync-setup.md +0 -82
  833. package/dist/agent/tools/message-tools.d.ts +0 -42
  834. package/dist/agent/tools/message-tools.js +0 -110
  835. package/dist/agent/tools/message-tools.js.map +0 -1
  836. package/dist/cli/commands/app.d.ts +0 -7
  837. package/dist/cli/commands/app.js +0 -268
  838. package/dist/cli/commands/app.js.map +0 -1
  839. package/dist/cli/commands/clear.d.ts +0 -5
  840. package/dist/cli/commands/clear.js +0 -36
  841. package/dist/cli/commands/clear.js.map +0 -1
  842. package/dist/cli/commands/collection.d.ts +0 -10
  843. package/dist/cli/commands/collection.js.map +0 -1
  844. package/dist/cli/commands/join.d.ts +0 -9
  845. package/dist/cli/commands/join.js +0 -255
  846. package/dist/cli/commands/join.js.map +0 -1
  847. package/dist/cli/commands/start.d.ts +0 -7
  848. package/dist/cli/commands/start.js +0 -584
  849. package/dist/cli/commands/start.js.map +0 -1
  850. package/dist/cli/commands/update.d.ts +0 -8
  851. package/dist/cli/commands/update.js +0 -155
  852. package/dist/cli/commands/update.js.map +0 -1
  853. package/dist/cli/commands/user.d.ts +0 -7
  854. package/dist/cli/commands/user.js +0 -175
  855. package/dist/cli/commands/user.js.map +0 -1
  856. package/dist/cli/scaffolding.d.ts +0 -12
  857. package/dist/cli/scaffolding.js +0 -397
  858. package/dist/cli/scaffolding.js.map +0 -1
  859. package/dist/integrations/registry.d.ts +0 -8
  860. package/dist/integrations/registry.js +0 -7
  861. package/dist/integrations/registry.js.map +0 -1
  862. package/dist/integrations/types.d.ts +0 -43
  863. package/dist/integrations/types.js +0 -5
  864. package/dist/integrations/types.js.map +0 -1
  865. package/dist/lib/lib/utils.d.ts +0 -2
  866. package/dist/lib/lib/utils.js +0 -6
  867. package/dist/lib/lib/utils.js.map +0 -1
  868. package/dist/server/chrome/chrome.css +0 -691
  869. package/dist/server/chrome/chrome.js +0 -374
  870. package/dist/server/commit-scheduler.d.ts +0 -39
  871. package/dist/server/commit-scheduler.js +0 -113
  872. package/dist/server/commit-scheduler.js.map +0 -1
  873. package/dist/server/plugin-loader.d.ts +0 -53
  874. package/dist/server/plugin-loader.js +0 -155
  875. package/dist/server/plugin-loader.js.map +0 -1
  876. package/dist/server/routes/meeting-ingest-api.d.ts +0 -14
  877. package/dist/server/routes/meeting-ingest-api.js.map +0 -1
  878. package/dist/server/routes/messages-api.d.ts +0 -15
  879. package/dist/server/routes/messages-api.js +0 -517
  880. package/dist/server/routes/messages-api.js.map +0 -1
  881. package/dist/services/batch-processor.d.ts +0 -49
  882. package/dist/services/batch-processor.js +0 -166
  883. package/dist/services/batch-processor.js.map +0 -1
  884. package/dist/services/briefing.d.ts +0 -26
  885. package/dist/services/briefing.js +0 -230
  886. package/dist/services/briefing.js.map +0 -1
  887. package/dist/services/heartbeat.d.ts +0 -28
  888. package/dist/services/heartbeat.js +0 -183
  889. package/dist/services/heartbeat.js.map +0 -1
  890. package/dist/services/image-import-service.d.ts +0 -24
  891. package/dist/services/image-import-service.js +0 -108
  892. package/dist/services/image-import-service.js.map +0 -1
  893. package/dist/services/insights.d.ts +0 -38
  894. package/dist/services/insights.js +0 -269
  895. package/dist/services/insights.js.map +0 -1
  896. package/dist/services/meeting-processor.js.map +0 -1
  897. package/dist/services/message-service.d.ts +0 -103
  898. package/dist/services/message-service.js +0 -368
  899. package/dist/services/message-service.js.map +0 -1
  900. package/dist/utils/workspace-config.d.ts +0 -8
  901. package/dist/utils/workspace-config.js +0 -22
  902. package/dist/utils/workspace-config.js.map +0 -1
  903. package/dist/web/_app/immutable/assets/0.VE6f3SLE.css +0 -1
  904. package/dist/web/_app/immutable/assets/11.2jzI3cZY.css +0 -1
  905. package/dist/web/_app/immutable/assets/12.CT4xL4K3.css +0 -1
  906. package/dist/web/_app/immutable/assets/13.BUrHkYry.css +0 -1
  907. package/dist/web/_app/immutable/assets/2.DFnAqkwi.css +0 -1
  908. package/dist/web/_app/immutable/assets/3.BxdqT7zi.css +0 -1
  909. package/dist/web/_app/immutable/assets/4.C3veY4Kd.css +0 -1
  910. package/dist/web/_app/immutable/assets/5.DFeGxLYf.css +0 -1
  911. package/dist/web/_app/immutable/assets/6.DXZr_rI_.css +0 -1
  912. package/dist/web/_app/immutable/assets/GraphView.D9ePpZez.css +0 -1
  913. package/dist/web/_app/immutable/assets/Toaster.rN8r_Hzv.css +0 -1
  914. package/dist/web/_app/immutable/assets/ViewToolbar.BWE03S64.css +0 -1
  915. package/dist/web/_app/immutable/assets/WorkspaceView.BwwNsZV3.css +0 -1
  916. package/dist/web/_app/immutable/assets/wikilinks.BS0mqYiE.css +0 -1
  917. package/dist/web/_app/immutable/chunks/2nrc8f_O.js +0 -1
  918. package/dist/web/_app/immutable/chunks/7S2LGqoP.js +0 -2
  919. package/dist/web/_app/immutable/chunks/8Q3ZJIYu.js +0 -1
  920. package/dist/web/_app/immutable/chunks/B8ydT5xX.js +0 -2
  921. package/dist/web/_app/immutable/chunks/BB_5th5W.js +0 -3383
  922. package/dist/web/_app/immutable/chunks/BFZZEUd5.js +0 -1
  923. package/dist/web/_app/immutable/chunks/BHbci_jk.js +0 -4
  924. package/dist/web/_app/immutable/chunks/BLAI285-.js +0 -1
  925. package/dist/web/_app/immutable/chunks/BPCkkwqe.js +0 -1
  926. package/dist/web/_app/immutable/chunks/BRwKi5Uk.js +0 -1
  927. package/dist/web/_app/immutable/chunks/BhlvzGQx.js +0 -1
  928. package/dist/web/_app/immutable/chunks/BlMknQeF.js +0 -1
  929. package/dist/web/_app/immutable/chunks/BpjqrlCg.js +0 -1
  930. package/dist/web/_app/immutable/chunks/BrebtJNG.js +0 -18
  931. package/dist/web/_app/immutable/chunks/ByBZ7JIT.js +0 -1
  932. package/dist/web/_app/immutable/chunks/Bz0ZjVQE.js +0 -2
  933. package/dist/web/_app/immutable/chunks/C0LVZhvn.js +0 -1
  934. package/dist/web/_app/immutable/chunks/C3uBrOS5.js +0 -1
  935. package/dist/web/_app/immutable/chunks/C8R1sDpW.js +0 -1
  936. package/dist/web/_app/immutable/chunks/CAvtljS4.js +0 -1
  937. package/dist/web/_app/immutable/chunks/CCaMwifs.js +0 -1
  938. package/dist/web/_app/immutable/chunks/CSVbGg_b.js +0 -5
  939. package/dist/web/_app/immutable/chunks/CX_61fY8.js +0 -5
  940. package/dist/web/_app/immutable/chunks/CYrVHOHA.js +0 -1
  941. package/dist/web/_app/immutable/chunks/Ca2fj171.js +0 -1
  942. package/dist/web/_app/immutable/chunks/Cl1HSJT0.js +0 -1
  943. package/dist/web/_app/immutable/chunks/CojKppbh.js +0 -1
  944. package/dist/web/_app/immutable/chunks/Cpb4wPun.js +0 -1
  945. package/dist/web/_app/immutable/chunks/CqkleIqs.js +0 -1
  946. package/dist/web/_app/immutable/chunks/CsW6CoJn.js +0 -2
  947. package/dist/web/_app/immutable/chunks/Csj4Ev3v.js +0 -1
  948. package/dist/web/_app/immutable/chunks/CtYLtD7K.js +0 -1
  949. package/dist/web/_app/immutable/chunks/D-HDy5qS.js +0 -1
  950. package/dist/web/_app/immutable/chunks/D5PPm9v6.js +0 -2
  951. package/dist/web/_app/immutable/chunks/D5aIYSkd.js +0 -1
  952. package/dist/web/_app/immutable/chunks/D8eVjQEP.js +0 -1
  953. package/dist/web/_app/immutable/chunks/DBBXARVf.js +0 -1
  954. package/dist/web/_app/immutable/chunks/DEXh-33Q.js +0 -2
  955. package/dist/web/_app/immutable/chunks/DFYOFE3o.js +0 -1
  956. package/dist/web/_app/immutable/chunks/DLh0dUH1.js +0 -5
  957. package/dist/web/_app/immutable/chunks/DR3i0m_O.js +0 -1
  958. package/dist/web/_app/immutable/chunks/DUMOo1Pn.js +0 -1
  959. package/dist/web/_app/immutable/chunks/DWX9f6AF.js +0 -1
  960. package/dist/web/_app/immutable/chunks/DkoHPElM.js +0 -1
  961. package/dist/web/_app/immutable/chunks/DnL9f0lc.js +0 -7
  962. package/dist/web/_app/immutable/chunks/DsnmJJEf.js +0 -1
  963. package/dist/web/_app/immutable/chunks/FBn-ES5k.js +0 -1
  964. package/dist/web/_app/immutable/chunks/HQpwSOb3.js +0 -1
  965. package/dist/web/_app/immutable/chunks/KyjzlWRN.js +0 -2
  966. package/dist/web/_app/immutable/chunks/MbLIjx_y.js +0 -1
  967. package/dist/web/_app/immutable/chunks/PPVm8Dsz.js +0 -1
  968. package/dist/web/_app/immutable/chunks/W25ZVI8L.js +0 -2
  969. package/dist/web/_app/immutable/chunks/WSUKABI_.js +0 -1
  970. package/dist/web/_app/immutable/chunks/ZD6ARAtb.js +0 -1
  971. package/dist/web/_app/immutable/chunks/dT0hAg7w.js +0 -1
  972. package/dist/web/_app/immutable/chunks/lHQV-nnD.js +0 -1
  973. package/dist/web/_app/immutable/chunks/vxEtkL8z.js +0 -1
  974. package/dist/web/_app/immutable/chunks/wDIGUaoU.js +0 -3
  975. package/dist/web/_app/immutable/entry/app.6stbQRSP.js +0 -2
  976. package/dist/web/_app/immutable/entry/start.CFM_AnAV.js +0 -1
  977. package/dist/web/_app/immutable/nodes/0.JRa8jOwF.js +0 -2
  978. package/dist/web/_app/immutable/nodes/1.BzD5JIY8.js +0 -1
  979. package/dist/web/_app/immutable/nodes/10.CLaxDdvE.js +0 -1
  980. package/dist/web/_app/immutable/nodes/11.D30Pez01.js +0 -1
  981. package/dist/web/_app/immutable/nodes/12.wnBndIO-.js +0 -1
  982. package/dist/web/_app/immutable/nodes/13.Kzp_icx5.js +0 -1
  983. package/dist/web/_app/immutable/nodes/2.TSTeKjEn.js +0 -267
  984. package/dist/web/_app/immutable/nodes/3.CaIVEdFe.js +0 -5
  985. package/dist/web/_app/immutable/nodes/4.CjO7FZm4.js +0 -11
  986. package/dist/web/_app/immutable/nodes/5.BwiFxshU.js +0 -4
  987. package/dist/web/_app/immutable/nodes/6.Cmi4Yl_9.js +0 -1
  988. package/dist/web/_app/immutable/nodes/7.el_pplGa.js +0 -1
  989. package/dist/web/_app/immutable/nodes/8.CY07nuNd.js +0 -1
  990. package/dist/web/_app/immutable/nodes/9.D_ZP-iv9.js +0 -1
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Agent Pool — manages per-session Agent instances for concurrent access.
3
3
  *
4
- * Each session (collection chat, private chat, capture) gets its own Agent
4
+ * Each session (folder chat, private chat, capture) gets its own Agent
5
5
  * with independent conversation history. Shared resources (tools, system
6
6
  * prompt, model) are created once and passed to each new agent.
7
7
  *
@@ -12,6 +12,7 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, unlink
12
12
  import { join, resolve } from 'path';
13
13
  const IDLE_TIMEOUT_MS = 10 * 60_000; // 10 minutes
14
14
  const REAP_INTERVAL_MS = 60_000; // check every 60s
15
+ const SHUTDOWN_DRAIN_MS = 5_000; // max wait for in-flight turns at shutdown
15
16
  const MAX_SESSIONS_PER_USER = 20;
16
17
  export class AgentPool {
17
18
  pool = new Map();
@@ -19,6 +20,20 @@ export class AgentPool {
19
20
  config;
20
21
  /** Per-session context — set before each call, read by tool closures. */
21
22
  contextMap = new Map();
23
+ /**
24
+ * Turn-scoped binding: the Agent instance currently executing a turn → that
25
+ * turn's session id. Set for the duration of `fn` in `withAgent`, kept
26
+ * INDEPENDENT of `pool`/`contextMap` so a mid-turn eviction (invalidateUser /
27
+ * invalidateAll / reap) can't strip a running turn of its context.
28
+ *
29
+ * Tool closures resolve their session via `findSessionForAgent`, which scans
30
+ * `pool` by agent identity — but eviction deletes the pool entry, so that
31
+ * scan would return null and every session-scoped tool would silently lose
32
+ * context (create_artifact fails with "No artifact canvas is available in
33
+ * this context"; getUser falls back to a stale default; onMutation/onHighlight
34
+ * no-op). This map is the durable fallback findSessionForAgent checks first.
35
+ */
36
+ activeTurns = new Map();
22
37
  constructor(config) {
23
38
  this.config = config;
24
39
  this.reapTimer = setInterval(() => this.reap(), REAP_INTERVAL_MS);
@@ -37,17 +52,65 @@ export class AgentPool {
37
52
  */
38
53
  async withAgent(sessionId, ctx, fn, opts) {
39
54
  const entry = this.getOrCreate(sessionId, opts?.userId, opts?.fallbackHistory);
40
- // Chain on the session's lock to serialize calls
55
+ // Mark this entry in-use BEFORE the lock chain so a mid-turn eviction
56
+ // defers removal instead of deleting the lock anchor (which would let a
57
+ // concurrent same-session request fork a second agent that races to
58
+ // persist history). Counts queued turns too — both increment here before
59
+ // either runs. Balanced by the decrement in the finally below.
60
+ entry.refCount++;
61
+ // Chain on the session's lock to serialize calls. Also await
62
+ // toolsLoaded so the first turn's prompt-to-Anthropic sees the
63
+ // full tool list (bundled + custom + per-user connector). On
64
+ // subsequent turns this promise is already resolved — no wait.
65
+ // Toolloading errors were caught upstream; the await is purely
66
+ // for ordering, never throws.
41
67
  const result = entry.lock.then(async () => {
68
+ await entry.toolsLoaded;
42
69
  entry.lastUsedAt = Date.now();
43
70
  this.contextMap.set(sessionId, ctx);
71
+ // Durable session binding for this turn — survives mid-turn eviction so
72
+ // findSessionForAgent keeps resolving even if the pool entry is deleted
73
+ // while the turn runs (e.g. a connector OAuth write → invalidateUser).
74
+ this.activeTurns.set(entry.agent, sessionId);
44
75
  try {
45
76
  return await fn(entry.agent);
46
77
  }
47
78
  finally {
79
+ this.activeTurns.delete(entry.agent);
48
80
  this.contextMap.delete(sessionId);
49
- // Save session after each call
50
- this.saveSession(entry);
81
+ // Persist in an inner try so the refCount release below ALWAYS runs —
82
+ // if compaction or saveSession throws, a skipped decrement would strand
83
+ // the entry at refCount > 0 forever (reap skips it, invalidate only
84
+ // re-marks it stale), leaking the agent and never rebuilding.
85
+ try {
86
+ // Slim artifact source out of history BEFORE persisting/next turn, so a
87
+ // large bundle read or written this turn doesn't ride in context forever
88
+ // and re-overflow the model. Mutates the live messages array.
89
+ this.compactArtifactHistory(entry.agent);
90
+ // Save after each call. saveSession itself skips a deleted session, so
91
+ // a chat the user deleted mid-turn is not resurrected here.
92
+ this.saveSession(entry);
93
+ }
94
+ finally {
95
+ // Release this turn's hold. When we're the last turn, finish whatever
96
+ // eviction was deferred while the entry was in use: a deleted entry is
97
+ // dropped and its on-disk JSON re-unlinked (in case a queued turn
98
+ // re-saved it before the flag was set); a stale entry is dropped so
99
+ // the next turn rebuilds with fresh tools/model. Deferring to here
100
+ // (rather than deleting at invalidate/delete time) keeps the lock
101
+ // anchor alive for queued turns so they serialize on this same agent
102
+ // instead of forking a second one.
103
+ entry.refCount--;
104
+ if (entry.refCount === 0 && this.pool.get(sessionId) === entry) {
105
+ if (entry.deleted) {
106
+ this.pool.delete(sessionId);
107
+ this.removeSessionFile(entry.userId, sessionId);
108
+ }
109
+ else if (entry.stale) {
110
+ this.pool.delete(sessionId);
111
+ }
112
+ }
113
+ }
51
114
  }
52
115
  });
53
116
  // Update the lock — next caller for this session waits for this one
@@ -62,14 +125,86 @@ export class AgentPool {
62
125
  abort(sessionId) {
63
126
  this.pool.get(sessionId)?.agent.abort();
64
127
  }
128
+ /**
129
+ * Evict every cached agent instance. Persists each session's history
130
+ * first so no in-memory transcript is lost. Next chat for any session
131
+ * spins up a fresh agent (via `createAgent` from the config), which
132
+ * re-reads model/provider/api_key via `resolveApiKey` — picking up
133
+ * whatever the store now has.
134
+ *
135
+ * Used as the eviction hook on secret/setting mutations: when the
136
+ * operator rotates an API key or switches providers via Settings UI,
137
+ * the running agent's captured apiKey is stale until restart. This
138
+ * is the surgical fix instead of restarting the whole process.
139
+ */
140
+ invalidateAll() {
141
+ for (const [sessionId, entry] of this.pool.entries()) {
142
+ this.saveSession(entry);
143
+ // Defer eviction of an in-flight entry (see invalidateUser / refCount):
144
+ // mark it stale so withAgent's finally removes it once the last turn
145
+ // drains, instead of deleting the lock anchor mid-turn.
146
+ if (entry.refCount > 0) {
147
+ entry.stale = true;
148
+ }
149
+ else {
150
+ this.pool.delete(sessionId);
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * Evict every pool entry owned by a specific user. Used as the eviction
156
+ * hook on per-user OAuth mutations: when a user OAuths a new connector
157
+ * (or revokes one), their running agent's tool list — captured at
158
+ * createAgentInstance time — no longer matches reality. Sessions
159
+ * belonging to OTHER users stay in the pool untouched.
160
+ *
161
+ * Saved sessions are written to disk before removal, same as
162
+ * `invalidateAll`, so no transcript is lost.
163
+ */
164
+ invalidateUser(userId) {
165
+ for (const [sessionId, entry] of this.pool.entries()) {
166
+ if (entry.userId === userId) {
167
+ this.saveSession(entry);
168
+ // Defer eviction while a turn is in flight. Deleting the entry now
169
+ // would (a) strip the running turn's context — findSessionForAgent
170
+ // survives via activeTurns, but the closures then read getContext(sid)
171
+ // — and (b) remove the lock anchor, so a concurrent same-session
172
+ // request would fork a second agent and the two turns would race to
173
+ // persist history. Marking stale keeps the entry serving queued turns
174
+ // on its existing lock; withAgent's finally removes it at refCount 0,
175
+ // forcing a fresh rebuild on the next turn. Note contextMap is NOT
176
+ // deleted here either — it is turn-scoped and owned by withAgent.
177
+ if (entry.refCount > 0) {
178
+ entry.stale = true;
179
+ }
180
+ else {
181
+ this.pool.delete(sessionId);
182
+ }
183
+ }
184
+ }
185
+ }
65
186
  /** Save all sessions and stop the reaper. */
66
187
  async shutdown() {
67
188
  if (this.reapTimer) {
68
189
  clearInterval(this.reapTimer);
69
190
  this.reapTimer = null;
70
191
  }
192
+ // Drain in-flight turns so their FINAL history (and deferred deleted/stale
193
+ // cleanup) lands before we persist and clear. Each turn's own finally runs
194
+ // saveSession + the deferred-eviction handling; awaiting the locks lets that
195
+ // complete instead of racing a clear that would orphan the last turn's
196
+ // messages. Locks never reject (swallowed at assignment). Bounded so a stuck
197
+ // turn can't hang process shutdown — past the bound we persist best-effort.
198
+ const drained = Promise.all([...this.pool.values()].map((e) => e.lock));
199
+ let drainTimer;
200
+ await Promise.race([
201
+ drained,
202
+ new Promise((resolve) => { drainTimer = setTimeout(resolve, SHUTDOWN_DRAIN_MS); }),
203
+ ]);
204
+ if (drainTimer)
205
+ clearTimeout(drainTimer); // don't leave the bound timer pending when drain wins
71
206
  for (const entry of this.pool.values()) {
72
- this.saveSession(entry);
207
+ this.saveSession(entry); // self-guards deleted entries
73
208
  }
74
209
  this.pool.clear();
75
210
  }
@@ -92,6 +227,11 @@ export class AgentPool {
92
227
  }
93
228
  /** Find the session ID for a given agent instance. */
94
229
  findSessionForAgent(agent) {
230
+ // Prefer the turn-scoped binding: a turn in flight must resolve to its
231
+ // session even after a mid-turn eviction removed it from `pool`.
232
+ const active = this.activeTurns.get(agent);
233
+ if (active !== undefined)
234
+ return active;
95
235
  for (const [sid, entry] of this.pool) {
96
236
  if (entry.agent === agent)
97
237
  return sid;
@@ -103,22 +243,59 @@ export class AgentPool {
103
243
  const existing = this.pool.get(sessionId);
104
244
  if (existing)
105
245
  return existing;
106
- // Create a fresh agent instance (pass userId for per-user context like briefing)
246
+ // Create a fresh agent instance (pass userId for per-user context)
107
247
  const agent = this.config.createAgent(userId);
108
- this.config.loadCustomTools?.(agent);
248
+ // Kick off async tool loading. The returned promise gets stashed on
249
+ // the pool entry so the first withAgent call can await it — that's
250
+ // what closes the timing race between agent construction and the
251
+ // user's first chat turn referencing a connector tool. If the
252
+ // callback returns undefined (legacy or test surfaces that don't
253
+ // need to gate on it), treat it as already-resolved.
254
+ const toolsLoaded = (this.config.loadCustomTools?.(agent, userId) ?? Promise.resolve()).catch((err) => {
255
+ // Swallow the rejection here — the agent should proceed with
256
+ // whatever subset of tools landed. The orchestrator's own
257
+ // catch path already logged the underlying failure.
258
+ // eslint-disable-next-line no-console
259
+ console.warn(`[agent-pool] tool loading rejected, proceeding with bundled tools: ${err instanceof Error ? err.message : err}`);
260
+ });
109
261
  // Try loading session from disk
110
262
  const loaded = this.loadSession(agent, sessionId, userId);
111
- // Fallback: inject history as context if no saved session
263
+ // Fallback: rebuild the transcript as proper role-tagged messages when
264
+ // the saved session file is missing (cleared, corrupted, or first turn
265
+ // on a fresh container). The previous implementation flattened the
266
+ // entire history into a single role: 'user' message with "Assistant:" /
267
+ // "User:" prefixes embedded as plain text — the model then had to parse
268
+ // those textual prefixes to know what was its own output, and would
269
+ // sometimes mis-attribute its prior turns to the user (e.g. "you
270
+ // mentioned that Watowa consults" when the user had just said "we
271
+ // consult on..."). Mapping each turn to its actual role tag lets the
272
+ // model distinguish reliably without parsing-by-prefix.
112
273
  if (!loaded && fallbackHistory && fallbackHistory.length > 0) {
113
- const transcript = fallbackHistory
114
- .map(m => `${m.role === 'assistant' ? 'Assistant' : 'User'}: ${m.content}`)
115
- .join('\n\n');
116
- const contextMsg = {
117
- role: 'user',
118
- content: [{ type: 'text', text: `[Prior conversation context]\n\n${transcript}` }],
119
- timestamp: Date.now(),
120
- };
121
- agent.replaceMessages([contextMsg]);
274
+ const model = agent.state.model;
275
+ const baseTime = Date.now() - fallbackHistory.length * 1000;
276
+ agent.state.messages = fallbackHistory.map((m, i) => {
277
+ const timestamp = baseTime + i * 1000;
278
+ if (m.role === 'assistant') {
279
+ return {
280
+ role: 'assistant',
281
+ content: [{ type: 'text', text: m.content }],
282
+ api: model.api,
283
+ provider: model.provider,
284
+ model: model.id,
285
+ usage: {
286
+ input: 0, output: 0, cacheRead: 0, cacheWrite: 0, totalTokens: 0,
287
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
288
+ },
289
+ stopReason: 'stop',
290
+ timestamp,
291
+ };
292
+ }
293
+ return {
294
+ role: 'user',
295
+ content: [{ type: 'text', text: m.content }],
296
+ timestamp,
297
+ };
298
+ });
122
299
  }
123
300
  const entry = {
124
301
  agent,
@@ -126,6 +303,8 @@ export class AgentPool {
126
303
  userId,
127
304
  lastUsedAt: Date.now(),
128
305
  lock: Promise.resolve(),
306
+ toolsLoaded,
307
+ refCount: 0,
129
308
  };
130
309
  this.pool.set(sessionId, entry);
131
310
  return entry;
@@ -140,7 +319,7 @@ export class AgentPool {
140
319
  try {
141
320
  const data = JSON.parse(readFileSync(sessionPath, 'utf-8'));
142
321
  if (Array.isArray(data.messages) && data.messages.length > 0) {
143
- agent.replaceMessages(data.messages);
322
+ agent.state.messages = data.messages;
144
323
  return true;
145
324
  }
146
325
  }
@@ -148,7 +327,69 @@ export class AgentPool {
148
327
  }
149
328
  return false;
150
329
  }
330
+ /**
331
+ * Bound chat-context growth from artifact source. An ArtifactBundle inlines
332
+ * all of its HTML/CSS/JS, so it's large — and it rides in history in two
333
+ * places: `read_artifact` / `inspect_artifact` tool RESULTS, and the bundle
334
+ * ARGUMENT of `create_artifact` calls. Left alone, the bundle reinflates the
335
+ * prompt every turn until the provider overflows and returns an empty turn
336
+ * (the "I didn't have a response" bug). After each turn we replace those
337
+ * payloads in-place with a compact stub; the agent calls read_artifact again
338
+ * when it needs the current source. Only large payloads are touched, so a
339
+ * small artifact stays inline (no needless re-read). Defensive throughout —
340
+ * a malformed message must never break session persistence.
341
+ */
342
+ compactArtifactHistory(agent) {
343
+ const MIN_ELIDE_BYTES = 2000;
344
+ const RESULT_TOOLS = new Set(['read_artifact', 'inspect_artifact']);
345
+ const STUB = '[Artifact source from an earlier tool call was removed to save context. Call read_artifact to get the current source.]';
346
+ try {
347
+ const messages = (agent.state?.messages ?? []);
348
+ for (const msg of messages) {
349
+ if (!msg || typeof msg !== 'object')
350
+ continue;
351
+ if (msg.role === 'toolResult' && RESULT_TOOLS.has(msg.toolName)) {
352
+ if (!Array.isArray(msg.content))
353
+ continue;
354
+ const already = msg.content.length === 1 && msg.content[0]?.text === STUB;
355
+ if (already)
356
+ continue;
357
+ // inspect_artifact now returns its screenshots as IMAGE content blocks.
358
+ // Vision images must NOT persist across turns (that's the whole point —
359
+ // they'd re-bloat every prompt), so strip the moment ANY image block is
360
+ // present, regardless of the byte threshold.
361
+ const hasImage = msg.content.some((b) => b?.type === 'image');
362
+ let size = 0;
363
+ for (const b of msg.content)
364
+ size += typeof b?.text === 'string' ? b.text.length : (b?.data?.length ?? 0);
365
+ if (!hasImage && size < MIN_ELIDE_BYTES)
366
+ continue;
367
+ msg.content = [{ type: 'text', text: STUB }];
368
+ if ('details' in msg)
369
+ delete msg.details;
370
+ }
371
+ else if (msg.role === 'assistant' && Array.isArray(msg.content)) {
372
+ for (const block of msg.content) {
373
+ if (block?.type === 'toolCall' && block.name === 'create_artifact' && block.arguments?.bundle) {
374
+ if (block.arguments.bundle._elided === true)
375
+ continue;
376
+ if (JSON.stringify(block.arguments.bundle).length < MIN_ELIDE_BYTES)
377
+ continue;
378
+ block.arguments = { ...block.arguments, bundle: { _elided: true } };
379
+ }
380
+ }
381
+ }
382
+ }
383
+ }
384
+ catch { /* never let history compaction break persistence */ }
385
+ }
151
386
  saveSession(entry) {
387
+ // A deleted chat must never be re-persisted, no matter who calls saveSession
388
+ // (the draining turn, invalidate*, reap, or shutdown). Its JSON — and the
389
+ // base64 vision images it holds — was unlinked by deleteSession; rewriting
390
+ // it here would resurrect the chat the user deleted.
391
+ if (entry.deleted)
392
+ return;
152
393
  const messages = entry.agent.state.messages;
153
394
  if (messages.length === 0)
154
395
  return;
@@ -169,6 +410,62 @@ export class AgentPool {
169
410
  return join(this.config.sessionsDir, String(userId));
170
411
  return this.config.sessionsDir;
171
412
  }
413
+ /**
414
+ * Delete a session's persisted state: evict the warm in-memory entry AND
415
+ * unlink its on-disk JSON. Used when a chat is deleted — the per-session JSON
416
+ * holds base64 copies of any vision images the agent saw, so it must be
417
+ * removed for the "delete chat → images gone" promise to hold (composer-vision).
418
+ * `sessionId` is the RESOLVED id the pool keys by (e.g. `user:7:abc`).
419
+ */
420
+ deleteSession(userId, sessionId) {
421
+ const entry = this.pool.get(sessionId);
422
+ if (entry && entry.refCount > 0) {
423
+ // A turn is in flight: tombstone it instead of deleting. The draining
424
+ // turn won't re-save (no resurrect) and removes the entry + re-unlinks
425
+ // the file at refCount 0; meanwhile the entry stays as the lock anchor so
426
+ // a concurrent send serializes on it rather than forking a second agent.
427
+ entry.deleted = true;
428
+ }
429
+ else {
430
+ this.pool.delete(sessionId);
431
+ }
432
+ this.removeSessionFile(userId, sessionId);
433
+ }
434
+ /** Delete EVERY persisted session for a user (the reset / delete-all path). */
435
+ deleteAllSessions(userId) {
436
+ for (const [key, entry] of this.pool) {
437
+ if (entry.userId !== userId)
438
+ continue;
439
+ if (entry.refCount > 0)
440
+ entry.deleted = true; // defer; turn drains, then cleans up
441
+ else
442
+ this.pool.delete(key);
443
+ }
444
+ const dir = this.getUserDir(userId);
445
+ if (!existsSync(dir))
446
+ return;
447
+ for (const f of readdirSync(dir)) {
448
+ if (f.endsWith('.json')) {
449
+ try {
450
+ unlinkSync(join(dir, f));
451
+ }
452
+ catch { /* best-effort */ }
453
+ }
454
+ }
455
+ }
456
+ /** Unlink a session's on-disk JSON (best-effort, path-traversal guarded). */
457
+ removeSessionFile(userId, sessionId) {
458
+ const userDir = this.getUserDir(userId);
459
+ const path = join(userDir, `${sessionId}.json`);
460
+ // Path-traversal guard: a resolved id is server-built, but never trust it.
461
+ if (!resolve(path).startsWith(resolve(userDir)))
462
+ return;
463
+ try {
464
+ if (existsSync(path))
465
+ unlinkSync(path);
466
+ }
467
+ catch { /* best-effort */ }
468
+ }
172
469
  pruneSessions(dir, keep) {
173
470
  if (!existsSync(dir))
174
471
  return;
@@ -196,6 +493,13 @@ export class AgentPool {
196
493
  reap() {
197
494
  const now = Date.now();
198
495
  for (const [key, entry] of this.pool) {
496
+ // Never reap an entry that's in use — a turn can outlive the idle window
497
+ // (long tool chains), and deleting it would let the next call spin up a
498
+ // second agent for the same session, breaking the per-session
499
+ // serialization the lock guarantees. refCount covers both the running
500
+ // turn and any turns queued on the lock.
501
+ if (entry.refCount > 0)
502
+ continue;
199
503
  if (now - entry.lastUsedAt > IDLE_TIMEOUT_MS) {
200
504
  this.saveSession(entry);
201
505
  this.pool.delete(key);
@@ -1 +1 @@
1
- {"version":3,"file":"agent-pool.js","sourceRoot":"","sources":["../../src/agent/agent-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3G,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAKrC,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,aAAa;AAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAK,kBAAkB;AACvD,MAAM,qBAAqB,GAAG,EAAE,CAAC;AA0BjC,MAAM,OAAO,SAAS;IACZ,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IACpC,SAAS,GAA0C,IAAI,CAAC;IACxD,MAAM,CAAoB;IAElC,yEAAyE;IACjE,UAAU,GAAG,IAAI,GAAG,EAAwB,CAAC;IAErD,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,SAAS,CACb,SAAiB,EACjB,GAAiB,EACjB,EAAgC,EAChC,IAAsF;QAEtF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAE/E,iDAAiD;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACxC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,OAAO,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAClC,+BAA+B;gBAC/B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oEAAoE;QACpE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,8FAA8F;IAC9F,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;IACjD,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,SAAiB;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,gDAAgD;IAChD,aAAa,CAAC,MAAe;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,sDAAsD;IACtD,mBAAmB,CAAC,KAAY;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;gBAAE,OAAO,GAAG,CAAC;QACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAER,WAAW,CACjB,SAAiB,EACjB,MAAe,EACf,eAA0D;QAE1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,iFAAiF;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC;QAErC,gCAAgC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAE1D,0DAA0D;QAC1D,IAAI,CAAC,MAAM,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,MAAM,UAAU,GAAG,eAAe;iBAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;iBAC1E,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,MAAM,UAAU,GAAiB;gBAC/B,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,UAAU,EAAE,EAAE,CAAC;gBAClF,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YACF,KAAK,CAAC,eAAe,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,KAAK,GAAc;YACvB,KAAK;YACL,SAAS;YACT,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;SACxB,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,KAAY,EAAE,SAAiB,EAAE,MAAe;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,OAAO,CAAC,CAAC;QAEvD,uBAAuB;QACvB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAErE,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC7D,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACrC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,WAAW,CAAC,KAAgB;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,OAAO,CAAC,CAAC;QAC7D,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ;SACT,CAAC,EAAE,OAAO,CAAC,CAAC;QAEb,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACrD,CAAC;IAEO,UAAU,CAAC,MAAe;QAChC,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IACjC,CAAC;IAEO,aAAa,CAAC,GAAW,EAAE,IAAY;QAC7C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC;aAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,IAAI,CAAC;gBAAC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YAAC,CAAC;YAClE,MAAM,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC;QACxB,CAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAA2C,CAAC;QAE7D,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI;YAAE,OAAO;QACjC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEO,IAAI;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,eAAe,EAAE,CAAC;gBAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"agent-pool.js","sourceRoot":"","sources":["../../src/agent/agent-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Follow-up suggestion marker parsing.
3
+ *
4
+ * The system prompt instructs the agent to end every response with an HTML
5
+ * comment of the form:
6
+ *
7
+ * <!-- followups: ["prompt 1", "prompt 2", "prompt 3"] -->
8
+ *
9
+ * Each transport (web, CLI, MCP) must strip this marker from the content it
10
+ * displays and surface the suggestions in whatever form fits its UI — chips
11
+ * in the web client, a dim numbered list in the CLI, a `suggestions` field
12
+ * in MCP, etc.
13
+ *
14
+ * Keep the parser in one place so a new transport can't silently leak the
15
+ * raw marker.
16
+ */
17
+ export interface ParsedFollowups {
18
+ /** Response content with the marker removed and trailing whitespace trimmed. */
19
+ content: string;
20
+ /** Parsed suggestions, if the marker was present and valid JSON. */
21
+ suggestions?: string[];
22
+ }
23
+ /**
24
+ * Parse a raw agent response and split it into clean content plus optional
25
+ * follow-up suggestions. Malformed markers are left in place (the caller can
26
+ * choose to strip or render as-is), matching the existing web behaviour.
27
+ */
28
+ export declare function parseFollowups(raw: string): ParsedFollowups;
29
+ /**
30
+ * Return true if `text` contains an *unclosed* followups marker — used by
31
+ * streaming consumers to know whether to defer rendering the tail of a
32
+ * delta until the closing `-->` arrives.
33
+ */
34
+ export declare function hasOpenFollowupsMarker(text: string): boolean;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Follow-up suggestion marker parsing.
3
+ *
4
+ * The system prompt instructs the agent to end every response with an HTML
5
+ * comment of the form:
6
+ *
7
+ * <!-- followups: ["prompt 1", "prompt 2", "prompt 3"] -->
8
+ *
9
+ * Each transport (web, CLI, MCP) must strip this marker from the content it
10
+ * displays and surface the suggestions in whatever form fits its UI — chips
11
+ * in the web client, a dim numbered list in the CLI, a `suggestions` field
12
+ * in MCP, etc.
13
+ *
14
+ * Keep the parser in one place so a new transport can't silently leak the
15
+ * raw marker.
16
+ */
17
+ /** Matches the trailing followups HTML comment at end of text (with optional trailing whitespace). */
18
+ const FOLLOWUPS_RE = /<!--\s*followups:\s*(\[[\s\S]*?\])\s*-->\s*$/;
19
+ /**
20
+ * Parse a raw agent response and split it into clean content plus optional
21
+ * follow-up suggestions. Malformed markers are left in place (the caller can
22
+ * choose to strip or render as-is), matching the existing web behaviour.
23
+ */
24
+ export function parseFollowups(raw) {
25
+ const match = raw.match(FOLLOWUPS_RE);
26
+ if (!match)
27
+ return { content: raw };
28
+ try {
29
+ const parsed = JSON.parse(match[1]);
30
+ if (!Array.isArray(parsed) || !parsed.every((s) => typeof s === 'string')) {
31
+ return { content: raw };
32
+ }
33
+ const content = raw.slice(0, match.index).trimEnd();
34
+ return { content, suggestions: parsed };
35
+ }
36
+ catch {
37
+ return { content: raw };
38
+ }
39
+ }
40
+ /**
41
+ * Return true if `text` contains an *unclosed* followups marker — used by
42
+ * streaming consumers to know whether to defer rendering the tail of a
43
+ * delta until the closing `-->` arrives.
44
+ */
45
+ export function hasOpenFollowupsMarker(text) {
46
+ const lastOpen = text.lastIndexOf('<!--');
47
+ if (lastOpen < 0)
48
+ return false;
49
+ const lastClose = text.lastIndexOf('-->');
50
+ return lastClose < lastOpen;
51
+ }
52
+ //# sourceMappingURL=followups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"followups.js","sourceRoot":"","sources":["../../src/agent/followups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,sGAAsG;AACtG,MAAM,YAAY,GAAG,8CAA8C,CAAC;AASpE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACtC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC1E,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,SAAS,GAAG,QAAQ,CAAC;AAC9B,CAAC"}