@geminixiang/mikan 1.0.0-beta.6 → 1.0.0-beta.60

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 (791) hide show
  1. package/CHANGELOG.md +926 -0
  2. package/README.md +95 -37
  3. package/dist/adapter.d.ts +11 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +18 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/adapters/commands/admin.d.ts.map +1 -0
  8. package/dist/{commands → adapters/commands}/admin.js +11 -8
  9. package/dist/adapters/commands/admin.js.map +1 -0
  10. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  11. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  12. package/dist/adapters/commands/auto-reply.js +38 -0
  13. package/dist/adapters/commands/auto-reply.js.map +1 -0
  14. package/dist/adapters/commands/login.d.ts +6 -0
  15. package/dist/adapters/commands/login.d.ts.map +1 -0
  16. package/dist/adapters/commands/login.js +166 -0
  17. package/dist/adapters/commands/login.js.map +1 -0
  18. package/dist/adapters/commands/manifest.d.ts +37 -0
  19. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  20. package/dist/adapters/commands/manifest.js +155 -0
  21. package/dist/adapters/commands/manifest.js.map +1 -0
  22. package/dist/adapters/commands/model.d.ts +15 -0
  23. package/dist/adapters/commands/model.d.ts.map +1 -0
  24. package/dist/adapters/commands/model.js +153 -0
  25. package/dist/adapters/commands/model.js.map +1 -0
  26. package/dist/adapters/commands/new.d.ts.map +1 -0
  27. package/dist/adapters/commands/new.js +41 -0
  28. package/dist/adapters/commands/new.js.map +1 -0
  29. package/dist/adapters/commands/registry.d.ts +5 -0
  30. package/dist/adapters/commands/registry.d.ts.map +1 -0
  31. package/dist/adapters/commands/registry.js +43 -0
  32. package/dist/adapters/commands/registry.js.map +1 -0
  33. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  34. package/dist/adapters/commands/sandbox.js +148 -0
  35. package/dist/adapters/commands/sandbox.js.map +1 -0
  36. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  37. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  38. package/dist/adapters/commands/session-view.js.map +1 -0
  39. package/dist/adapters/commands/types.d.ts +145 -0
  40. package/dist/adapters/commands/types.d.ts.map +1 -0
  41. package/dist/adapters/commands/types.js.map +1 -0
  42. package/dist/adapters/commands/utils.d.ts +14 -0
  43. package/dist/adapters/commands/utils.d.ts.map +1 -0
  44. package/dist/{commands → adapters/commands}/utils.js +18 -1
  45. package/dist/adapters/commands/utils.js.map +1 -0
  46. package/dist/adapters/discord/bot.d.ts +11 -8
  47. package/dist/adapters/discord/bot.d.ts.map +1 -1
  48. package/dist/adapters/discord/bot.js +218 -252
  49. package/dist/adapters/discord/bot.js.map +1 -1
  50. package/dist/adapters/discord/components.d.ts +28 -0
  51. package/dist/adapters/discord/components.d.ts.map +1 -0
  52. package/dist/adapters/discord/components.js +32 -0
  53. package/dist/adapters/discord/components.js.map +1 -0
  54. package/dist/adapters/discord/context.d.ts +2 -6
  55. package/dist/adapters/discord/context.d.ts.map +1 -1
  56. package/dist/adapters/discord/context.js +63 -218
  57. package/dist/adapters/discord/context.js.map +1 -1
  58. package/dist/adapters/discord/format.d.ts +3 -0
  59. package/dist/adapters/discord/format.d.ts.map +1 -0
  60. package/dist/adapters/discord/format.js +84 -0
  61. package/dist/adapters/discord/format.js.map +1 -0
  62. package/dist/adapters/discord/types.d.ts +7 -0
  63. package/dist/adapters/discord/types.d.ts.map +1 -1
  64. package/dist/adapters/discord/types.js.map +1 -1
  65. package/dist/adapters/github/bot.d.ts +102 -0
  66. package/dist/adapters/github/bot.d.ts.map +1 -0
  67. package/dist/adapters/github/bot.js +720 -0
  68. package/dist/adapters/github/bot.js.map +1 -0
  69. package/dist/adapters/github/client.d.ts +122 -0
  70. package/dist/adapters/github/client.d.ts.map +1 -0
  71. package/dist/adapters/github/client.js +301 -0
  72. package/dist/adapters/github/client.js.map +1 -0
  73. package/dist/adapters/github/context.d.ts +5 -0
  74. package/dist/adapters/github/context.d.ts.map +1 -0
  75. package/dist/adapters/github/context.js +101 -0
  76. package/dist/adapters/github/context.js.map +1 -0
  77. package/dist/adapters/github/github-ops.d.ts +78 -0
  78. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  79. package/dist/adapters/github/github-ops.js +337 -0
  80. package/dist/adapters/github/github-ops.js.map +1 -0
  81. package/dist/adapters/github/ids.d.ts +34 -0
  82. package/dist/adapters/github/ids.d.ts.map +1 -0
  83. package/dist/adapters/github/ids.js +57 -0
  84. package/dist/adapters/github/ids.js.map +1 -0
  85. package/dist/adapters/github/repo.d.ts +33 -0
  86. package/dist/adapters/github/repo.d.ts.map +1 -0
  87. package/dist/adapters/github/repo.js +141 -0
  88. package/dist/adapters/github/repo.js.map +1 -0
  89. package/dist/adapters/github/tool-pack.d.ts +14 -0
  90. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  91. package/dist/adapters/github/tool-pack.js +55 -0
  92. package/dist/adapters/github/tool-pack.js.map +1 -0
  93. package/dist/adapters/github/tools/checks.d.ts +18 -0
  94. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/checks.js +86 -0
  96. package/dist/adapters/github/tools/checks.js.map +1 -0
  97. package/dist/adapters/github/tools/issue.d.ts +21 -0
  98. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/issue.js +48 -0
  100. package/dist/adapters/github/tools/issue.js.map +1 -0
  101. package/dist/adapters/github/tools/pr.d.ts +22 -0
  102. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/pr.js +48 -0
  104. package/dist/adapters/github/tools/pr.js.map +1 -0
  105. package/dist/adapters/github/tools/read.d.ts +21 -0
  106. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/read.js +141 -0
  108. package/dist/adapters/github/tools/read.js.map +1 -0
  109. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  110. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/review-reply.js +38 -0
  112. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  113. package/dist/adapters/github/tools/sync.d.ts +17 -0
  114. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  115. package/dist/adapters/github/tools/sync.js +34 -0
  116. package/dist/adapters/github/tools/sync.js.map +1 -0
  117. package/dist/adapters/github/types.d.ts +345 -0
  118. package/dist/adapters/github/types.d.ts.map +1 -0
  119. package/dist/adapters/github/types.js.map +1 -0
  120. package/dist/adapters/github/webhook.d.ts +20 -0
  121. package/dist/adapters/github/webhook.d.ts.map +1 -0
  122. package/dist/adapters/github/webhook.js +78 -0
  123. package/dist/adapters/github/webhook.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +16 -5
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +86 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/adapters/progressive-renderer.d.ts +7 -0
  133. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  134. package/dist/adapters/progressive-renderer.js +439 -0
  135. package/dist/adapters/progressive-renderer.js.map +1 -0
  136. package/dist/adapters/shared.d.ts +35 -11
  137. package/dist/adapters/shared.d.ts.map +1 -1
  138. package/dist/adapters/shared.js +105 -24
  139. package/dist/adapters/shared.js.map +1 -1
  140. package/dist/adapters/slack/assistant.d.ts +73 -0
  141. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  142. package/dist/adapters/slack/assistant.js +205 -0
  143. package/dist/adapters/slack/assistant.js.map +1 -0
  144. package/dist/adapters/slack/blocks.d.ts +14 -0
  145. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  146. package/dist/adapters/slack/blocks.js +104 -148
  147. package/dist/adapters/slack/blocks.js.map +1 -1
  148. package/dist/adapters/slack/bot.d.ts +116 -18
  149. package/dist/adapters/slack/bot.d.ts.map +1 -1
  150. package/dist/adapters/slack/bot.js +760 -468
  151. package/dist/adapters/slack/bot.js.map +1 -1
  152. package/dist/adapters/slack/context.d.ts +2 -6
  153. package/dist/adapters/slack/context.d.ts.map +1 -1
  154. package/dist/adapters/slack/context.js +11 -17
  155. package/dist/adapters/slack/context.js.map +1 -1
  156. package/dist/adapters/slack/markdown.d.ts +3 -0
  157. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  158. package/dist/adapters/slack/markdown.js +48 -0
  159. package/dist/adapters/slack/markdown.js.map +1 -0
  160. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  161. package/dist/adapters/slack/response-lifecycle.js +240 -345
  162. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  163. package/dist/adapters/slack/session.d.ts.map +1 -1
  164. package/dist/adapters/slack/session.js +7 -11
  165. package/dist/adapters/slack/session.js.map +1 -1
  166. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  167. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  168. package/dist/adapters/slack/stream-limits.js +56 -0
  169. package/dist/adapters/slack/stream-limits.js.map +1 -0
  170. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  171. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  172. package/dist/adapters/slack/tool-pack.js +45 -0
  173. package/dist/adapters/slack/tool-pack.js.map +1 -0
  174. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  175. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  176. package/dist/adapters/slack/tools/blockkit.js +106 -0
  177. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  178. package/dist/adapters/slack/types.d.ts +73 -2
  179. package/dist/adapters/slack/types.d.ts.map +1 -1
  180. package/dist/adapters/slack/types.js.map +1 -1
  181. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  182. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  183. package/dist/adapters/slack/update-diagnostics.js +134 -0
  184. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  185. package/dist/adapters/telegram/bot.d.ts +10 -9
  186. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  187. package/dist/adapters/telegram/bot.js +129 -198
  188. package/dist/adapters/telegram/bot.js.map +1 -1
  189. package/dist/adapters/telegram/context.d.ts +2 -6
  190. package/dist/adapters/telegram/context.d.ts.map +1 -1
  191. package/dist/adapters/telegram/context.js +52 -190
  192. package/dist/adapters/telegram/context.js.map +1 -1
  193. package/dist/adapters/types.d.ts +144 -13
  194. package/dist/adapters/types.d.ts.map +1 -1
  195. package/dist/adapters/types.js.map +1 -1
  196. package/dist/adapters/web/admin/portal.d.ts +44 -0
  197. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  198. package/dist/adapters/web/admin/portal.js +3284 -0
  199. package/dist/adapters/web/admin/portal.js.map +1 -0
  200. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  201. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  202. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  203. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  204. package/dist/adapters/web/admin/types.d.ts +50 -0
  205. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  206. package/dist/adapters/web/admin/types.js.map +1 -0
  207. package/dist/adapters/web/login/oauth.d.ts +5 -0
  208. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  209. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  210. package/dist/adapters/web/login/oauth.js.map +1 -0
  211. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  212. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  213. package/dist/{web → adapters/web}/login/portal.js +161 -119
  214. package/dist/adapters/web/login/portal.js.map +1 -0
  215. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  216. package/dist/adapters/web/login/types.d.ts.map +1 -0
  217. package/dist/adapters/web/login/types.js.map +1 -0
  218. package/dist/adapters/web/portal-shell.d.ts +22 -0
  219. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  220. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  221. package/dist/adapters/web/portal-shell.js.map +1 -0
  222. package/dist/{web → adapters/web}/server.d.ts +11 -8
  223. package/dist/adapters/web/server.d.ts.map +1 -0
  224. package/dist/{web → adapters/web}/server.js +16 -7
  225. package/dist/adapters/web/server.js.map +1 -0
  226. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  227. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  228. package/dist/{web → adapters/web}/session-view/portal.js +632 -162
  229. package/dist/adapters/web/session-view/portal.js.map +1 -0
  230. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  231. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  232. package/dist/adapters/web/session-view/types.js.map +1 -0
  233. package/dist/adapters/web/token-store.d.ts.map +1 -0
  234. package/dist/{web → adapters/web}/token-store.js +1 -1
  235. package/dist/adapters/web/token-store.js.map +1 -0
  236. package/dist/adapters/web/types.d.ts.map +1 -0
  237. package/dist/adapters/web/types.js.map +1 -0
  238. package/dist/cli/arg-grammar.d.ts +11 -0
  239. package/dist/cli/arg-grammar.d.ts.map +1 -0
  240. package/dist/cli/arg-grammar.js +50 -0
  241. package/dist/cli/arg-grammar.js.map +1 -0
  242. package/dist/cli/boot.d.ts +5 -0
  243. package/dist/cli/boot.d.ts.map +1 -0
  244. package/dist/cli/boot.js +90 -0
  245. package/dist/cli/boot.js.map +1 -0
  246. package/dist/cli/download.d.ts.map +1 -0
  247. package/dist/cli/download.js +88 -0
  248. package/dist/cli/download.js.map +1 -0
  249. package/dist/cli/office.d.ts +2 -0
  250. package/dist/cli/office.d.ts.map +1 -0
  251. package/dist/cli/office.js +83 -0
  252. package/dist/cli/office.js.map +1 -0
  253. package/dist/cli/onboard.d.ts +10 -0
  254. package/dist/cli/onboard.d.ts.map +1 -0
  255. package/dist/cli/onboard.js +225 -0
  256. package/dist/cli/onboard.js.map +1 -0
  257. package/dist/cli/sessions.d.ts +2 -0
  258. package/dist/cli/sessions.d.ts.map +1 -0
  259. package/dist/cli/sessions.js +88 -0
  260. package/dist/cli/sessions.js.map +1 -0
  261. package/dist/cli/types.d.ts +25 -0
  262. package/dist/cli/types.d.ts.map +1 -0
  263. package/dist/cli/types.js.map +1 -0
  264. package/dist/config.d.ts +38 -39
  265. package/dist/config.d.ts.map +1 -1
  266. package/dist/config.js +256 -215
  267. package/dist/config.js.map +1 -1
  268. package/dist/dream/index.d.ts +20 -0
  269. package/dist/dream/index.d.ts.map +1 -0
  270. package/dist/dream/index.js +264 -0
  271. package/dist/dream/index.js.map +1 -0
  272. package/dist/dream/types.d.ts +30 -0
  273. package/dist/dream/types.d.ts.map +1 -0
  274. package/dist/dream/types.js +2 -0
  275. package/dist/dream/types.js.map +1 -0
  276. package/dist/env-manifest.d.ts +32 -0
  277. package/dist/env-manifest.d.ts.map +1 -0
  278. package/dist/env-manifest.js +244 -0
  279. package/dist/env-manifest.js.map +1 -0
  280. package/dist/events/index.d.ts +150 -0
  281. package/dist/events/index.d.ts.map +1 -0
  282. package/dist/events/index.js +249 -0
  283. package/dist/events/index.js.map +1 -0
  284. package/dist/{events.d.ts → events/watcher.d.ts} +4 -4
  285. package/dist/events/watcher.d.ts.map +1 -0
  286. package/dist/{events.js → events/watcher.js} +23 -84
  287. package/dist/events/watcher.js.map +1 -0
  288. package/dist/{utils/file-guards.d.ts → file-guards.d.ts} +9 -0
  289. package/dist/file-guards.d.ts.map +1 -0
  290. package/dist/{utils/file-guards.js → file-guards.js} +44 -1
  291. package/dist/file-guards.js.map +1 -0
  292. package/dist/harness/execution-env.d.ts +19 -0
  293. package/dist/harness/execution-env.d.ts.map +1 -0
  294. package/dist/harness/execution-env.js +262 -0
  295. package/dist/harness/execution-env.js.map +1 -0
  296. package/dist/harness/execution-resolver.d.ts +25 -0
  297. package/dist/harness/execution-resolver.d.ts.map +1 -0
  298. package/dist/harness/execution-resolver.js +156 -0
  299. package/dist/harness/execution-resolver.js.map +1 -0
  300. package/dist/harness/index.d.ts +17 -13
  301. package/dist/harness/index.d.ts.map +1 -1
  302. package/dist/harness/index.js +10 -11
  303. package/dist/harness/index.js.map +1 -1
  304. package/dist/harness/mcp.d.ts +38 -0
  305. package/dist/harness/mcp.d.ts.map +1 -0
  306. package/dist/harness/mcp.js +306 -0
  307. package/dist/harness/mcp.js.map +1 -0
  308. package/dist/harness/models.d.ts +7 -4
  309. package/dist/harness/models.d.ts.map +1 -1
  310. package/dist/harness/models.js +54 -55
  311. package/dist/harness/models.js.map +1 -1
  312. package/dist/harness/open-connector.d.ts +14 -0
  313. package/dist/harness/open-connector.d.ts.map +1 -0
  314. package/dist/harness/open-connector.js +204 -0
  315. package/dist/harness/open-connector.js.map +1 -0
  316. package/dist/harness/presenter.d.ts +30 -0
  317. package/dist/harness/presenter.d.ts.map +1 -0
  318. package/dist/harness/presenter.js +804 -0
  319. package/dist/harness/presenter.js.map +1 -0
  320. package/dist/harness/prompt.d.ts +30 -0
  321. package/dist/harness/prompt.d.ts.map +1 -0
  322. package/dist/harness/prompt.js +426 -0
  323. package/dist/harness/prompt.js.map +1 -0
  324. package/dist/harness/runner.d.ts +2 -123
  325. package/dist/harness/runner.d.ts.map +1 -1
  326. package/dist/harness/runner.js +505 -417
  327. package/dist/harness/runner.js.map +1 -1
  328. package/dist/harness/session.d.ts +119 -0
  329. package/dist/harness/session.d.ts.map +1 -0
  330. package/dist/harness/session.js +561 -0
  331. package/dist/harness/session.js.map +1 -0
  332. package/dist/harness/skills.d.ts +17 -28
  333. package/dist/harness/skills.d.ts.map +1 -1
  334. package/dist/harness/skills.js +104 -39
  335. package/dist/harness/skills.js.map +1 -1
  336. package/dist/harness/subagent-profiles.d.ts +8 -0
  337. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  338. package/dist/harness/subagent-profiles.js +284 -0
  339. package/dist/harness/subagent-profiles.js.map +1 -0
  340. package/dist/harness/subagent.d.ts +64 -0
  341. package/dist/harness/subagent.d.ts.map +1 -0
  342. package/dist/harness/subagent.js +687 -0
  343. package/dist/harness/subagent.js.map +1 -0
  344. package/dist/harness/tools/attach.d.ts.map +1 -0
  345. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  346. package/dist/harness/tools/attach.js.map +1 -0
  347. package/dist/{tools → harness/tools}/event.d.ts +3 -32
  348. package/dist/harness/tools/event.d.ts.map +1 -0
  349. package/dist/harness/tools/event.js +178 -0
  350. package/dist/harness/tools/event.js.map +1 -0
  351. package/dist/harness/tools/generate-image.d.ts +23 -0
  352. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  353. package/dist/harness/tools/generate-image.js +65 -0
  354. package/dist/harness/tools/generate-image.js.map +1 -0
  355. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  356. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  357. package/dist/harness/tools/host-fn-tool.js +32 -0
  358. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  359. package/dist/harness/tools/index.d.ts +38 -0
  360. package/dist/harness/tools/index.d.ts.map +1 -0
  361. package/dist/harness/tools/index.js +45 -0
  362. package/dist/harness/tools/index.js.map +1 -0
  363. package/dist/harness/tools/pi-tools.d.ts +18 -0
  364. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  365. package/dist/harness/tools/pi-tools.js +84 -0
  366. package/dist/harness/tools/pi-tools.js.map +1 -0
  367. package/dist/harness/tools/react.d.ts.map +1 -0
  368. package/dist/{tools → harness/tools}/react.js +6 -17
  369. package/dist/harness/tools/react.js.map +1 -0
  370. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  371. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  372. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  373. package/dist/harness/tools/sandbox.js.map +1 -0
  374. package/dist/harness/tools/subagent.d.ts +88 -0
  375. package/dist/harness/tools/subagent.d.ts.map +1 -0
  376. package/dist/harness/tools/subagent.js +681 -0
  377. package/dist/harness/tools/subagent.js.map +1 -0
  378. package/dist/harness/tools/types.d.ts +29 -0
  379. package/dist/harness/tools/types.d.ts.map +1 -0
  380. package/dist/harness/tools/types.js +2 -0
  381. package/dist/harness/tools/types.js.map +1 -0
  382. package/dist/harness/types.d.ts +384 -25
  383. package/dist/harness/types.d.ts.map +1 -1
  384. package/dist/harness/types.js +1 -1
  385. package/dist/harness/types.js.map +1 -1
  386. package/dist/index.d.ts +33 -9
  387. package/dist/index.d.ts.map +1 -1
  388. package/dist/index.js +19 -6
  389. package/dist/index.js.map +1 -1
  390. package/dist/main.js +344 -188
  391. package/dist/main.js.map +1 -1
  392. package/dist/observability/index.d.ts +33 -0
  393. package/dist/observability/index.d.ts.map +1 -0
  394. package/dist/observability/index.js +257 -0
  395. package/dist/observability/index.js.map +1 -0
  396. package/dist/observability/instrument.js +14 -6
  397. package/dist/observability/instrument.js.map +1 -1
  398. package/dist/observability/otel.d.ts +10 -0
  399. package/dist/observability/otel.d.ts.map +1 -0
  400. package/dist/observability/otel.js +183 -0
  401. package/dist/observability/otel.js.map +1 -0
  402. package/dist/observability/sentry.d.ts +40 -7
  403. package/dist/observability/sentry.d.ts.map +1 -1
  404. package/dist/observability/sentry.js +176 -32
  405. package/dist/observability/sentry.js.map +1 -1
  406. package/dist/observability/types.d.ts +24 -3
  407. package/dist/observability/types.d.ts.map +1 -1
  408. package/dist/observability/types.js.map +1 -1
  409. package/dist/office/index.d.ts +138 -0
  410. package/dist/office/index.d.ts.map +1 -0
  411. package/dist/office/index.js +1084 -0
  412. package/dist/office/index.js.map +1 -0
  413. package/dist/office/projection.d.ts +22 -0
  414. package/dist/office/projection.d.ts.map +1 -0
  415. package/dist/office/projection.js +208 -0
  416. package/dist/office/projection.js.map +1 -0
  417. package/dist/office/types.d.ts +116 -0
  418. package/dist/office/types.d.ts.map +1 -0
  419. package/dist/office/types.js +2 -0
  420. package/dist/office/types.js.map +1 -0
  421. package/dist/platform-messages.d.ts +1 -0
  422. package/dist/platform-messages.d.ts.map +1 -1
  423. package/dist/platform-messages.js +3 -0
  424. package/dist/platform-messages.js.map +1 -1
  425. package/dist/process-lifecycle.d.ts +19 -0
  426. package/dist/process-lifecycle.d.ts.map +1 -0
  427. package/dist/process-lifecycle.js +67 -0
  428. package/dist/process-lifecycle.js.map +1 -0
  429. package/dist/runtime/conversation-runtime.d.ts +1 -1
  430. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  431. package/dist/runtime/conversation-runtime.js +398 -149
  432. package/dist/runtime/conversation-runtime.js.map +1 -1
  433. package/dist/runtime/session-lifecycle.d.ts +76 -0
  434. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  435. package/dist/runtime/session-lifecycle.js +404 -0
  436. package/dist/runtime/session-lifecycle.js.map +1 -0
  437. package/dist/runtime/types.d.ts +58 -14
  438. package/dist/runtime/types.d.ts.map +1 -1
  439. package/dist/runtime/types.js.map +1 -1
  440. package/dist/sandbox/cloudflare.d.ts +4 -0
  441. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  442. package/dist/sandbox/cloudflare.js +54 -52
  443. package/dist/sandbox/cloudflare.js.map +1 -1
  444. package/dist/sandbox/container.d.ts +3 -0
  445. package/dist/sandbox/container.d.ts.map +1 -1
  446. package/dist/sandbox/container.js +19 -7
  447. package/dist/sandbox/container.js.map +1 -1
  448. package/dist/sandbox/host.d.ts +3 -0
  449. package/dist/sandbox/host.d.ts.map +1 -1
  450. package/dist/sandbox/host.js +44 -35
  451. package/dist/sandbox/host.js.map +1 -1
  452. package/dist/sandbox/identity.d.ts +42 -0
  453. package/dist/sandbox/identity.d.ts.map +1 -0
  454. package/dist/sandbox/identity.js +77 -0
  455. package/dist/sandbox/identity.js.map +1 -0
  456. package/dist/sandbox/index.d.ts +16 -6
  457. package/dist/sandbox/index.d.ts.map +1 -1
  458. package/dist/sandbox/index.js +73 -17
  459. package/dist/sandbox/index.js.map +1 -1
  460. package/dist/sandbox/provisioner.d.ts +121 -0
  461. package/dist/sandbox/provisioner.d.ts.map +1 -0
  462. package/dist/{provisioner.js → sandbox/provisioner.js} +352 -20
  463. package/dist/sandbox/provisioner.js.map +1 -0
  464. package/dist/sandbox/types.d.ts +43 -9
  465. package/dist/sandbox/types.d.ts.map +1 -1
  466. package/dist/sandbox/types.js.map +1 -1
  467. package/dist/sandbox/utils.d.ts +24 -0
  468. package/dist/sandbox/utils.d.ts.map +1 -1
  469. package/dist/sandbox/utils.js +92 -1
  470. package/dist/sandbox/utils.js.map +1 -1
  471. package/dist/sessions/chat-history-sync.d.ts +23 -0
  472. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  473. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +234 -175
  474. package/dist/sessions/chat-history-sync.js.map +1 -0
  475. package/dist/sessions/history-line.d.ts +29 -0
  476. package/dist/sessions/history-line.d.ts.map +1 -0
  477. package/dist/sessions/history-line.js +45 -0
  478. package/dist/sessions/history-line.js.map +1 -0
  479. package/dist/sessions/migrate-common.d.ts +43 -0
  480. package/dist/sessions/migrate-common.d.ts.map +1 -0
  481. package/dist/sessions/migrate-common.js +99 -0
  482. package/dist/sessions/migrate-common.js.map +1 -0
  483. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  484. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  485. package/dist/sessions/migrate-pi-084.js +302 -0
  486. package/dist/sessions/migrate-pi-084.js.map +1 -0
  487. package/dist/sessions/migrate-v3.d.ts +15 -0
  488. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  489. package/dist/sessions/migrate-v3.js +419 -0
  490. package/dist/sessions/migrate-v3.js.map +1 -0
  491. package/dist/sessions/session-key.d.ts +33 -0
  492. package/dist/sessions/session-key.d.ts.map +1 -0
  493. package/dist/sessions/session-key.js +115 -0
  494. package/dist/sessions/session-key.js.map +1 -0
  495. package/dist/sessions/session-store.d.ts +51 -0
  496. package/dist/sessions/session-store.d.ts.map +1 -0
  497. package/dist/sessions/session-store.js +658 -0
  498. package/dist/sessions/session-store.js.map +1 -0
  499. package/dist/sessions/store.d.ts +17 -10
  500. package/dist/sessions/store.d.ts.map +1 -1
  501. package/dist/sessions/store.js +182 -47
  502. package/dist/sessions/store.js.map +1 -1
  503. package/dist/sessions/types.d.ts +73 -7
  504. package/dist/sessions/types.d.ts.map +1 -1
  505. package/dist/sessions/types.js +1 -1
  506. package/dist/sessions/types.js.map +1 -1
  507. package/dist/settings-mutation.d.ts +40 -0
  508. package/dist/settings-mutation.d.ts.map +1 -0
  509. package/dist/settings-mutation.js +66 -0
  510. package/dist/settings-mutation.js.map +1 -0
  511. package/dist/types.d.ts +331 -140
  512. package/dist/types.d.ts.map +1 -1
  513. package/dist/types.js +2 -2
  514. package/dist/types.js.map +1 -1
  515. package/dist/vault/index.d.ts +52 -2
  516. package/dist/vault/index.d.ts.map +1 -1
  517. package/dist/vault/index.js +218 -86
  518. package/dist/vault/index.js.map +1 -1
  519. package/dist/vault/types.d.ts +6 -2
  520. package/dist/vault/types.d.ts.map +1 -1
  521. package/dist/vault/types.js.map +1 -1
  522. package/package.json +77 -39
  523. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  524. package/dist/adapters/slack/tools/attach.js.map +0 -1
  525. package/dist/adapters/streaming.d.ts +0 -18
  526. package/dist/adapters/streaming.d.ts.map +0 -1
  527. package/dist/adapters/streaming.js +0 -44
  528. package/dist/adapters/streaming.js.map +0 -1
  529. package/dist/adapters/telegram/html.d.ts +0 -3
  530. package/dist/adapters/telegram/html.d.ts.map +0 -1
  531. package/dist/adapters/telegram/html.js +0 -98
  532. package/dist/adapters/telegram/html.js.map +0 -1
  533. package/dist/agent-events.d.ts +0 -5
  534. package/dist/agent-events.d.ts.map +0 -1
  535. package/dist/agent-events.js +0 -26
  536. package/dist/agent-events.js.map +0 -1
  537. package/dist/agent.d.ts +0 -39
  538. package/dist/agent.d.ts.map +0 -1
  539. package/dist/agent.js +0 -1291
  540. package/dist/agent.js.map +0 -1
  541. package/dist/commands/admin.d.ts.map +0 -1
  542. package/dist/commands/admin.js.map +0 -1
  543. package/dist/commands/auto-reply.d.ts.map +0 -1
  544. package/dist/commands/auto-reply.js +0 -76
  545. package/dist/commands/auto-reply.js.map +0 -1
  546. package/dist/commands/extensions.d.ts +0 -14
  547. package/dist/commands/extensions.d.ts.map +0 -1
  548. package/dist/commands/extensions.js +0 -55
  549. package/dist/commands/extensions.js.map +0 -1
  550. package/dist/commands/login.d.ts +0 -5
  551. package/dist/commands/login.d.ts.map +0 -1
  552. package/dist/commands/login.js +0 -115
  553. package/dist/commands/login.js.map +0 -1
  554. package/dist/commands/model.d.ts +0 -10
  555. package/dist/commands/model.d.ts.map +0 -1
  556. package/dist/commands/model.js +0 -102
  557. package/dist/commands/model.js.map +0 -1
  558. package/dist/commands/new.d.ts.map +0 -1
  559. package/dist/commands/new.js +0 -25
  560. package/dist/commands/new.js.map +0 -1
  561. package/dist/commands/parse.d.ts +0 -7
  562. package/dist/commands/parse.d.ts.map +0 -1
  563. package/dist/commands/parse.js +0 -14
  564. package/dist/commands/parse.js.map +0 -1
  565. package/dist/commands/registry.d.ts +0 -5
  566. package/dist/commands/registry.d.ts.map +0 -1
  567. package/dist/commands/registry.js +0 -31
  568. package/dist/commands/registry.js.map +0 -1
  569. package/dist/commands/sandbox.d.ts.map +0 -1
  570. package/dist/commands/sandbox.js +0 -78
  571. package/dist/commands/sandbox.js.map +0 -1
  572. package/dist/commands/session-view.d.ts.map +0 -1
  573. package/dist/commands/session-view.js.map +0 -1
  574. package/dist/commands/types.d.ts +0 -66
  575. package/dist/commands/types.d.ts.map +0 -1
  576. package/dist/commands/types.js.map +0 -1
  577. package/dist/commands/utils.d.ts +0 -11
  578. package/dist/commands/utils.d.ts.map +0 -1
  579. package/dist/commands/utils.js.map +0 -1
  580. package/dist/download.d.ts.map +0 -1
  581. package/dist/download.js +0 -89
  582. package/dist/download.js.map +0 -1
  583. package/dist/events.d.ts.map +0 -1
  584. package/dist/events.js.map +0 -1
  585. package/dist/execution-resolver.d.ts +0 -21
  586. package/dist/execution-resolver.d.ts.map +0 -1
  587. package/dist/execution-resolver.js +0 -170
  588. package/dist/execution-resolver.js.map +0 -1
  589. package/dist/harness/auth.d.ts +0 -16
  590. package/dist/harness/auth.d.ts.map +0 -1
  591. package/dist/harness/auth.js +0 -86
  592. package/dist/harness/auth.js.map +0 -1
  593. package/dist/harness/extensions/loader.d.ts +0 -62
  594. package/dist/harness/extensions/loader.d.ts.map +0 -1
  595. package/dist/harness/extensions/loader.js +0 -374
  596. package/dist/harness/extensions/loader.js.map +0 -1
  597. package/dist/harness/extensions/registry.d.ts +0 -23
  598. package/dist/harness/extensions/registry.d.ts.map +0 -1
  599. package/dist/harness/extensions/registry.js +0 -45
  600. package/dist/harness/extensions/registry.js.map +0 -1
  601. package/dist/harness/extensions/types.d.ts +0 -248
  602. package/dist/harness/extensions/types.d.ts.map +0 -1
  603. package/dist/harness/extensions/types.js.map +0 -1
  604. package/dist/harness/session-store.d.ts +0 -77
  605. package/dist/harness/session-store.d.ts.map +0 -1
  606. package/dist/harness/session-store.js +0 -248
  607. package/dist/harness/session-store.js.map +0 -1
  608. package/dist/harness/settings.d.ts +0 -47
  609. package/dist/harness/settings.d.ts.map +0 -1
  610. package/dist/harness/settings.js +0 -29
  611. package/dist/harness/settings.js.map +0 -1
  612. package/dist/model-registry.d.ts +0 -4
  613. package/dist/model-registry.d.ts.map +0 -1
  614. package/dist/model-registry.js +0 -7
  615. package/dist/model-registry.js.map +0 -1
  616. package/dist/portal-shell.d.ts +0 -4
  617. package/dist/portal-shell.d.ts.map +0 -1
  618. package/dist/portal-shell.js.map +0 -1
  619. package/dist/provisioner.d.ts +0 -61
  620. package/dist/provisioner.d.ts.map +0 -1
  621. package/dist/provisioner.js.map +0 -1
  622. package/dist/runtime/agent-run-controller.d.ts +0 -31
  623. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  624. package/dist/runtime/agent-run-controller.js +0 -195
  625. package/dist/runtime/agent-run-controller.js.map +0 -1
  626. package/dist/sandbox/errors.d.ts +0 -6
  627. package/dist/sandbox/errors.d.ts.map +0 -1
  628. package/dist/sandbox/errors.js +0 -11
  629. package/dist/sandbox/errors.js.map +0 -1
  630. package/dist/sandbox/firecracker.d.ts +0 -15
  631. package/dist/sandbox/firecracker.d.ts.map +0 -1
  632. package/dist/sandbox/firecracker.js +0 -212
  633. package/dist/sandbox/firecracker.js.map +0 -1
  634. package/dist/sandbox/image.d.ts +0 -3
  635. package/dist/sandbox/image.d.ts.map +0 -1
  636. package/dist/sandbox/image.js +0 -27
  637. package/dist/sandbox/image.js.map +0 -1
  638. package/dist/sandbox/path-context.d.ts +0 -3
  639. package/dist/sandbox/path-context.d.ts.map +0 -1
  640. package/dist/sandbox/path-context.js +0 -20
  641. package/dist/sandbox/path-context.js.map +0 -1
  642. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  643. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  644. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  645. package/dist/sessions/metadata.d.ts +0 -3
  646. package/dist/sessions/metadata.d.ts.map +0 -1
  647. package/dist/sessions/metadata.js +0 -11
  648. package/dist/sessions/metadata.js.map +0 -1
  649. package/dist/sessions/policy.d.ts +0 -6
  650. package/dist/sessions/policy.d.ts.map +0 -1
  651. package/dist/sessions/policy.js +0 -23
  652. package/dist/sessions/policy.js.map +0 -1
  653. package/dist/store.d.ts +0 -46
  654. package/dist/store.d.ts.map +0 -1
  655. package/dist/store.js +0 -177
  656. package/dist/store.js.map +0 -1
  657. package/dist/tools/bash.d.ts +0 -10
  658. package/dist/tools/bash.d.ts.map +0 -1
  659. package/dist/tools/bash.js +0 -80
  660. package/dist/tools/bash.js.map +0 -1
  661. package/dist/tools/edit.d.ts +0 -11
  662. package/dist/tools/edit.d.ts.map +0 -1
  663. package/dist/tools/edit.js +0 -131
  664. package/dist/tools/edit.js.map +0 -1
  665. package/dist/tools/event.d.ts.map +0 -1
  666. package/dist/tools/event.js +0 -252
  667. package/dist/tools/event.js.map +0 -1
  668. package/dist/tools/index.d.ts +0 -24
  669. package/dist/tools/index.d.ts.map +0 -1
  670. package/dist/tools/index.js +0 -31
  671. package/dist/tools/index.js.map +0 -1
  672. package/dist/tools/react.d.ts.map +0 -1
  673. package/dist/tools/react.js.map +0 -1
  674. package/dist/tools/read.d.ts +0 -11
  675. package/dist/tools/read.d.ts.map +0 -1
  676. package/dist/tools/read.js +0 -134
  677. package/dist/tools/read.js.map +0 -1
  678. package/dist/tools/sandbox.d.ts.map +0 -1
  679. package/dist/tools/sandbox.js.map +0 -1
  680. package/dist/tools/truncate.d.ts +0 -33
  681. package/dist/tools/truncate.d.ts.map +0 -1
  682. package/dist/tools/truncate.js +0 -184
  683. package/dist/tools/truncate.js.map +0 -1
  684. package/dist/tools/types.d.ts +0 -54
  685. package/dist/tools/types.d.ts.map +0 -1
  686. package/dist/tools/types.js.map +0 -1
  687. package/dist/tools/write.d.ts +0 -10
  688. package/dist/tools/write.d.ts.map +0 -1
  689. package/dist/tools/write.js +0 -29
  690. package/dist/tools/write.js.map +0 -1
  691. package/dist/trigger.d.ts +0 -22
  692. package/dist/trigger.d.ts.map +0 -1
  693. package/dist/trigger.js +0 -100
  694. package/dist/trigger.js.map +0 -1
  695. package/dist/utils/date.d.ts +0 -10
  696. package/dist/utils/date.d.ts.map +0 -1
  697. package/dist/utils/date.js +0 -23
  698. package/dist/utils/date.js.map +0 -1
  699. package/dist/utils/env.d.ts +0 -3
  700. package/dist/utils/env.d.ts.map +0 -1
  701. package/dist/utils/env.js +0 -12
  702. package/dist/utils/env.js.map +0 -1
  703. package/dist/utils/file-guards.d.ts.map +0 -1
  704. package/dist/utils/file-guards.js.map +0 -1
  705. package/dist/utils/fs-atomic.d.ts +0 -10
  706. package/dist/utils/fs-atomic.d.ts.map +0 -1
  707. package/dist/utils/fs-atomic.js +0 -45
  708. package/dist/utils/fs-atomic.js.map +0 -1
  709. package/dist/utils/html.d.ts +0 -2
  710. package/dist/utils/html.d.ts.map +0 -1
  711. package/dist/utils/html.js +0 -4
  712. package/dist/utils/html.js.map +0 -1
  713. package/dist/utils/http-body.d.ts +0 -10
  714. package/dist/utils/http-body.d.ts.map +0 -1
  715. package/dist/utils/http-body.js +0 -34
  716. package/dist/utils/http-body.js.map +0 -1
  717. package/dist/vault/routing.d.ts +0 -3
  718. package/dist/vault/routing.d.ts.map +0 -1
  719. package/dist/vault/routing.js +0 -13
  720. package/dist/vault/routing.js.map +0 -1
  721. package/dist/web/admin/portal.d.ts +0 -5
  722. package/dist/web/admin/portal.d.ts.map +0 -1
  723. package/dist/web/admin/portal.js +0 -2572
  724. package/dist/web/admin/portal.js.map +0 -1
  725. package/dist/web/admin/provider-models.d.ts.map +0 -1
  726. package/dist/web/admin/provider-models.js.map +0 -1
  727. package/dist/web/admin/store.d.ts +0 -13
  728. package/dist/web/admin/store.d.ts.map +0 -1
  729. package/dist/web/admin/store.js +0 -14
  730. package/dist/web/admin/store.js.map +0 -1
  731. package/dist/web/admin/types.d.ts +0 -30
  732. package/dist/web/admin/types.d.ts.map +0 -1
  733. package/dist/web/admin/types.js.map +0 -1
  734. package/dist/web/agent-events/portal.d.ts +0 -3
  735. package/dist/web/agent-events/portal.d.ts.map +0 -1
  736. package/dist/web/agent-events/portal.js +0 -18
  737. package/dist/web/agent-events/portal.js.map +0 -1
  738. package/dist/web/login/oauth.d.ts +0 -6
  739. package/dist/web/login/oauth.d.ts.map +0 -1
  740. package/dist/web/login/oauth.js.map +0 -1
  741. package/dist/web/login/portal.d.ts.map +0 -1
  742. package/dist/web/login/portal.js.map +0 -1
  743. package/dist/web/login/store.d.ts +0 -8
  744. package/dist/web/login/store.d.ts.map +0 -1
  745. package/dist/web/login/store.js +0 -15
  746. package/dist/web/login/store.js.map +0 -1
  747. package/dist/web/login/types.d.ts.map +0 -1
  748. package/dist/web/login/types.js.map +0 -1
  749. package/dist/web/request.d.ts +0 -3
  750. package/dist/web/request.d.ts.map +0 -1
  751. package/dist/web/request.js +0 -13
  752. package/dist/web/request.js.map +0 -1
  753. package/dist/web/server.d.ts.map +0 -1
  754. package/dist/web/server.js.map +0 -1
  755. package/dist/web/session-view/command.d.ts +0 -4
  756. package/dist/web/session-view/command.d.ts.map +0 -1
  757. package/dist/web/session-view/command.js +0 -7
  758. package/dist/web/session-view/command.js.map +0 -1
  759. package/dist/web/session-view/portal.d.ts +0 -13
  760. package/dist/web/session-view/portal.d.ts.map +0 -1
  761. package/dist/web/session-view/portal.js.map +0 -1
  762. package/dist/web/session-view/service.d.ts +0 -6
  763. package/dist/web/session-view/service.d.ts.map +0 -1
  764. package/dist/web/session-view/service.js +0 -498
  765. package/dist/web/session-view/service.js.map +0 -1
  766. package/dist/web/session-view/store.d.ts +0 -8
  767. package/dist/web/session-view/store.d.ts.map +0 -1
  768. package/dist/web/session-view/store.js +0 -15
  769. package/dist/web/session-view/store.js.map +0 -1
  770. package/dist/web/session-view/types.d.ts.map +0 -1
  771. package/dist/web/session-view/types.js.map +0 -1
  772. package/dist/web/token-store.d.ts.map +0 -1
  773. package/dist/web/token-store.js.map +0 -1
  774. package/dist/web/types.d.ts.map +0 -1
  775. package/dist/web/types.js.map +0 -1
  776. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  777. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  778. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  779. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  780. /package/dist/{commands → adapters/commands}/types.js +0 -0
  781. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  782. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  783. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  784. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  785. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  786. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  787. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  788. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  789. /package/dist/{web → cli}/types.js +0 -0
  790. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  791. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
package/dist/config.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { Type } from "@sinclair/typebox";
2
- import { existsSync, readFileSync, renameSync, rmSync } from "fs";
3
- import { homedir } from "os";
4
- import { basename, dirname, join, resolve } from "path";
5
- import { readEnv } from "./utils/env.js";
6
- import { ensureDirExists, readJsonSchemaFileIfExists } from "./utils/file-guards.js";
7
- import { atomicWritePrivateFile } from "./utils/fs-atomic.js";
2
+ import { existsSync, lstatSync, readFileSync, renameSync, rmSync } from "node:fs";
3
+ import { dirname, join, resolve } from "node:path";
4
+ import { effectiveStateDir } from "./cli/arg-grammar.js";
5
+ import { readEnv } from "./env-manifest.js";
6
+ import { ensureDirExists, readJsonSchemaFileIfExists } from "./file-guards.js";
7
+ import { atomicWritePrivateFile } from "./file-guards.js";
8
8
  import * as log from "./log.js";
9
9
  export class MissingGlobalSettingsError extends Error {
10
10
  constructor(settingsPath) {
@@ -18,10 +18,6 @@ const ONBOARD_SETTINGS = {
18
18
  provider: "anthropic",
19
19
  model: "claude-sonnet-4-6",
20
20
  thinkingLevel: "off",
21
- autoReply: {
22
- provider: "anthropic",
23
- model: "claude-haiku-4-5",
24
- },
25
21
  },
26
22
  slack: {
27
23
  replyMode: "top-level",
@@ -33,9 +29,11 @@ const ONBOARD_SETTINGS = {
33
29
  cpus: "2",
34
30
  memory: "4g",
35
31
  },
36
- image: {
37
- workspaceMount: "private",
38
- },
32
+ // No pinned workspace door policy: with nothing set, the projection
33
+ // follows the platform's own channel vocabulary (public channels share
34
+ // workspace memory, private channels read it without writing, DMs stay
35
+ // isolated — see workspace-projection platformDerivedWorkspace).
36
+ // Deployments that predate this keep their explicit isolated setting.
39
37
  defaultSharedVault: "",
40
38
  },
41
39
  };
@@ -50,11 +48,8 @@ const SettingsFileSchema = Type.Object({
50
48
  Type.Literal("medium"),
51
49
  Type.Literal("high"),
52
50
  Type.Literal("xhigh"),
51
+ Type.Literal("max"),
53
52
  ])),
54
- autoReply: Type.Optional(Type.Object({
55
- provider: Type.Optional(Type.String()),
56
- model: Type.Optional(Type.String()),
57
- })),
58
53
  })),
59
54
  sentry: Type.Optional(Type.Object({
60
55
  dsn: Type.Optional(Type.String()),
@@ -72,47 +67,96 @@ const SettingsFileSchema = Type.Object({
72
67
  image: Type.Optional(Type.Object({
73
68
  workspaceMount: Type.Optional(Type.Union([Type.Literal("private"), Type.Literal("full")])),
74
69
  })),
70
+ workspace: Type.Optional(Type.Object({
71
+ doorPolicy: Type.Optional(Type.Union([Type.Literal("isolated"), Type.Literal("trusted")])),
72
+ layout: Type.Optional(Type.Union([
73
+ Type.Literal("conversation"),
74
+ Type.Literal("shared-support"),
75
+ Type.Literal("full"),
76
+ ])),
77
+ visibility: Type.Optional(Type.Union([Type.Literal("public"), Type.Literal("private")])),
78
+ })),
75
79
  defaultSharedVault: Type.Optional(Type.String()),
76
80
  })),
77
- autoReply: Type.Optional(Type.Object({
78
- enabled: Type.Optional(Type.Boolean()),
79
- rules: Type.Optional(Type.Array(Type.String())),
80
- })),
81
+ /**
82
+ * MCP servers, keyed by name. Merged per key across scopes: a conversation
83
+ * entry overrides (or, with `disabled: true`, turns off) the same-name
84
+ * global entry; other global entries stay available. The reserved
85
+ * `open-connector` name is ignored by runner construction.
86
+ */
87
+ mcpServers: Type.Optional(Type.Record(Type.String(), Type.Object({
88
+ command: Type.Optional(Type.String()),
89
+ args: Type.Optional(Type.Array(Type.String())),
90
+ env: Type.Optional(Type.Record(Type.String(), Type.String())),
91
+ url: Type.Optional(Type.String()),
92
+ headers: Type.Optional(Type.Record(Type.String(), Type.String())),
93
+ disabled: Type.Optional(Type.Boolean()),
94
+ }))),
81
95
  });
82
96
  function loadSettingsFile(settingsPath) {
83
97
  return readJsonSchemaFileIfExists(settingsPath, SettingsFileSchema, (detail) => detail === "unexpected JSON shape"
84
98
  ? `Malformed settings file at ${settingsPath}: expected a JSON object at the top level`
85
99
  : `Malformed settings file at ${settingsPath}: ${detail}`);
86
100
  }
87
- function getStateDir() {
88
- const raw = readEnv("STATE_DIR");
89
- return raw ? resolve(raw) : join(homedir(), ".mikan");
90
- }
91
101
  function normalizeSettingsConfig(config) {
92
102
  return {
93
103
  ...(config.llm?.provider !== undefined ? { provider: config.llm.provider } : {}),
94
104
  ...(config.llm?.model !== undefined ? { model: config.llm.model } : {}),
95
105
  ...(config.llm?.thinkingLevel !== undefined ? { thinkingLevel: config.llm.thinkingLevel } : {}),
96
106
  ...(config.sentry?.dsn !== undefined ? { sentryDsn: config.sentry.dsn } : {}),
97
- ...(config.sandbox?.cpus !== undefined ? { sandboxCpus: config.sandbox.cpus } : {}),
98
- ...(config.sandbox?.memory !== undefined ? { sandboxMemory: config.sandbox.memory } : {}),
99
- ...(config.sandbox?.boost?.cpus !== undefined
100
- ? { sandboxBoostCpus: config.sandbox.boost.cpus }
101
- : {}),
102
- ...(config.sandbox?.boost?.memory !== undefined
103
- ? { sandboxBoostMemory: config.sandbox.boost.memory }
104
- : {}),
105
- ...(config.sandbox?.image?.workspaceMount !== undefined
106
- ? { sandboxImageWorkspaceMount: config.sandbox.image.workspaceMount }
107
- : {}),
108
- ...(config.sandbox?.defaultSharedVault?.trim()
109
- ? { defaultSharedVault: config.sandbox.defaultSharedVault.trim() }
110
- : {}),
107
+ ...(config.sandbox !== undefined ? { sandbox: normalizeSandboxSettings(config.sandbox) } : {}),
111
108
  ...(config.slack !== undefined ? { slack: config.slack } : {}),
109
+ ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),
110
+ };
111
+ }
112
+ /**
113
+ * File shape → in-memory shape for the sandbox group. An empty or
114
+ * whitespace-only `defaultSharedVault` means "no default" and is dropped;
115
+ * non-empty values are trimmed. Everything else passes through as-is.
116
+ */
117
+ function normalizeSandboxSettings(sandbox) {
118
+ const defaultSharedVault = sandbox.defaultSharedVault?.trim();
119
+ const legacyWorkspace = sandbox.image?.workspaceMount === "private"
120
+ ? { doorPolicy: "trusted", layout: "shared-support" }
121
+ : sandbox.image?.workspaceMount === "full"
122
+ ? { doorPolicy: "trusted", layout: "full" }
123
+ : undefined;
124
+ const workspace = legacyWorkspace
125
+ ? { ...legacyWorkspace, ...sandbox.workspace }
126
+ : sandbox.workspace;
127
+ return {
128
+ ...(sandbox.cpus !== undefined ? { cpus: sandbox.cpus } : {}),
129
+ ...(sandbox.memory !== undefined ? { memory: sandbox.memory } : {}),
130
+ ...(sandbox.boost !== undefined ? { boost: sandbox.boost } : {}),
131
+ ...(sandbox.image !== undefined ? { image: sandbox.image } : {}),
132
+ ...(workspace !== undefined ? { workspace } : {}),
133
+ ...(defaultSharedVault ? { defaultSharedVault } : {}),
134
+ };
135
+ }
136
+ /**
137
+ * Merge two sandbox settings groups. The merge invariant is LEAF-LEVEL:
138
+ * an override that only sets `sandbox.memory` keeps the base `sandbox.cpus`,
139
+ * and an override that only sets `boost.memory` keeps the base `boost.cpus`
140
+ * (same for `image`). This mirrors how the fields merged when they were
141
+ * flat top-level keys; a group-level spread would silently drop base leaves.
142
+ */
143
+ function mergeSandboxSettings(base, override) {
144
+ if (!base)
145
+ return override;
146
+ if (!override)
147
+ return base;
148
+ return {
149
+ ...base,
150
+ ...override,
151
+ ...(base.boost || override.boost ? { boost: { ...base.boost, ...override.boost } } : {}),
152
+ ...(base.image || override.image ? { image: { ...base.image, ...override.image } } : {}),
153
+ ...(base.workspace || override.workspace
154
+ ? { workspace: { ...base.workspace, ...override.workspace } }
155
+ : {}),
112
156
  };
113
157
  }
114
158
  function getSettingsPath() {
115
- return join(getStateDir(), "settings.json");
159
+ return join(effectiveStateDir(), "settings.json");
116
160
  }
117
161
  function requireGlobalSettings() {
118
162
  const settingsPath = getSettingsPath();
@@ -128,33 +172,22 @@ function requireString(value, path) {
128
172
  }
129
173
  return value;
130
174
  }
131
- function requireThinkingLevel(value) {
132
- return requireString(value, "llm.thinkingLevel");
133
- }
134
175
  function toAgentConfig(fromFile) {
135
176
  const provider = requireString(fromFile.provider, "llm.provider");
136
177
  const model = requireString(fromFile.model, "llm.model");
137
- const thinkingLevel = requireThinkingLevel(fromFile.thinkingLevel);
138
- const sentryDsn = fromFile.sentryDsn ?? process.env.SENTRY_DSN;
139
- const sandboxCpus = fromFile.sandboxCpus;
140
- const sandboxMemory = fromFile.sandboxMemory;
141
- const sandboxBoostCpus = fromFile.sandboxBoostCpus;
142
- const sandboxBoostMemory = fromFile.sandboxBoostMemory;
143
- const sandboxImageWorkspaceMount = fromFile.sandboxImageWorkspaceMount;
144
- const defaultSharedVault = fromFile.defaultSharedVault;
178
+ const thinkingLevel = requireString(fromFile.thinkingLevel, "llm.thinkingLevel");
179
+ const sentryDsn = sentryDsnFrom(fromFile.sentryDsn);
180
+ const sandbox = fromFile.sandbox;
145
181
  const slack = fromFile.slack;
182
+ const mcpServers = fromFile.mcpServers;
146
183
  return {
147
184
  provider,
148
185
  model,
149
186
  thinkingLevel,
150
187
  sentryDsn,
151
- sandboxCpus,
152
- sandboxMemory,
153
- sandboxBoostCpus,
154
- sandboxBoostMemory,
155
- sandboxImageWorkspaceMount,
156
- defaultSharedVault,
188
+ sandbox,
157
189
  slack,
190
+ mcpServers,
158
191
  };
159
192
  }
160
193
  function loadRawGlobalSettings() {
@@ -165,7 +198,9 @@ export function loadGlobalSettings() {
165
198
  }
166
199
  /**
167
200
  * Host-authoritative location of a conversation's settings file:
168
- * `<stateDir>/conversations/<conversationId>/settings.json`.
201
+ * `<office state dir>/settings.json`. The Office value names both the
202
+ * state-dir key and the legacy pre-host-migration location (its workspace
203
+ * dir) — the key is never inferred from a directory basename.
169
204
  *
170
205
  * Conversation settings used to live at `<conversationDir>/settings.json`,
171
206
  * but conversation dirs are bind-mounted read-write into sandbox containers
@@ -180,23 +215,23 @@ export function loadGlobalSettings() {
180
215
  * migration marker — a legacy file (re)appearing later, e.g. planted from
181
216
  * inside the sandbox, is never read again.
182
217
  */
183
- export function conversationSettingsPath(conversationDir) {
184
- const conversationId = basename(resolve(conversationDir));
185
- const hostPath = join(getStateDir(), "conversations", conversationId, "settings.json");
186
- if (existsSync(hostPath))
218
+ export function conversationSettingsPath(office) {
219
+ const hostPath = join(office.stateDir, "settings.json");
220
+ if (existsSync(hostPath)) {
221
+ assertSettingsFile(hostPath, "Host conversation settings");
187
222
  return hostPath;
223
+ }
188
224
  ensureDirExists(dirname(hostPath));
189
- const legacyPath = join(conversationDir, "settings.json");
225
+ const legacyPath = join(office.dir, "settings.json");
190
226
  let content = "{}\n";
191
227
  let migrated = false;
192
228
  if (existsSync(legacyPath)) {
193
- try {
194
- content = readFileSync(legacyPath, "utf-8");
195
- migrated = true;
196
- }
197
- catch (err) {
198
- log.logWarning(`Could not read legacy conversation settings: ${legacyPath}`, String(err));
199
- }
229
+ assertSettingsFile(legacyPath, "Legacy conversation settings");
230
+ content = readFileSync(legacyPath, "utf-8");
231
+ // Validate before moving the file. A malformed legacy file must fail
232
+ // closed and remain available for an operator to repair.
233
+ loadSettingsFile(legacyPath);
234
+ migrated = true;
200
235
  }
201
236
  atomicWritePrivateFile(hostPath, content);
202
237
  if (migrated) {
@@ -210,103 +245,53 @@ export function conversationSettingsPath(conversationDir) {
210
245
  }
211
246
  return hostPath;
212
247
  }
213
- export function resolveConversationSettings(conversationDir) {
214
- const globalConfig = loadRawGlobalSettings();
215
- const conversationConfig = normalizeSettingsConfig(loadSettingsFile(conversationSettingsPath(conversationDir)) ?? {});
216
- return toAgentConfig({ ...globalConfig, ...conversationConfig });
217
- }
218
- /**
219
- * Resolve the model used to judge auto-reply rules. Falls back to the main
220
- * llm.{provider,model} when llm.autoReply is not set, so a missing override
221
- * keeps current behavior.
222
- *
223
- * @deprecated Auto-reply is kept for compatibility while its future is undecided.
224
- */
225
- export function loadAutoReplyJudgeModel(conversationDir) {
226
- const global = requireGlobalSettings();
227
- const local = conversationDir
228
- ? (loadSettingsFile(conversationSettingsPath(conversationDir)) ?? {})
229
- : {};
230
- const merged = { ...global.llm, ...local.llm };
231
- const judge = { ...global.llm?.autoReply, ...local.llm?.autoReply };
232
- const provider = requireString(judge.provider ?? merged?.provider, "llm.autoReply.provider");
233
- const model = requireString(judge.model ?? merged?.model, "llm.autoReply.model");
234
- return { provider, model };
248
+ function assertSettingsFile(path, label) {
249
+ let stats;
250
+ try {
251
+ stats = lstatSync(path);
252
+ }
253
+ catch (err) {
254
+ throw new Error(`${label} cannot be inspected: ${path}`, { cause: err });
255
+ }
256
+ if (stats.isSymbolicLink() || !stats.isFile()) {
257
+ throw new Error(`${label} must be a regular non-symlink file: ${path}`);
258
+ }
235
259
  }
236
260
  const AUTO_REPLY_FILE = "auto-reply";
237
261
  const AUTO_REPLY_DISABLED_FILE = "auto-reply.disabled";
238
- function readAutoReplyRulesFile(path) {
239
- const text = readFileSync(path, "utf-8").trim();
240
- return text ? [text] : [];
241
- }
242
- /**
243
- * Load the mom-compatible auto-reply marker file state for a conversation.
244
- *
245
- * - `auto-reply` exists: enabled; empty file means reply to any top-level message.
246
- * - `auto-reply.disabled` exists: disabled, preserving any rules text for re-enable.
247
- * - neither exists: disabled.
248
- *
249
- * @deprecated Auto-reply is kept for compatibility while its future is undecided.
250
- */
251
- export function loadConversationAutoReplyConfig(conversationDir) {
252
- const enabledPath = join(conversationDir, AUTO_REPLY_FILE);
253
- if (existsSync(enabledPath)) {
254
- return { enabled: true, rules: readAutoReplyRulesFile(enabledPath) };
255
- }
256
- const disabledPath = join(conversationDir, AUTO_REPLY_DISABLED_FILE);
257
- if (existsSync(disabledPath)) {
258
- return { enabled: false, rules: readAutoReplyRulesFile(disabledPath) };
259
- }
260
- return { enabled: false, rules: [] };
262
+ export function slackConversationAutoReplyEnabled(office) {
263
+ return existsSync(join(office.dir, AUTO_REPLY_FILE));
261
264
  }
262
- /**
263
- * Save auto-reply state using mom-compatible marker files.
264
- *
265
- * @deprecated Auto-reply is kept for compatibility while its future is undecided.
266
- */
267
- export function saveConversationAutoReplyConfig(conversationDir, config) {
268
- ensureDirExists(conversationDir);
269
- const enabledPath = join(conversationDir, AUTO_REPLY_FILE);
270
- const disabledPath = join(conversationDir, AUTO_REPLY_DISABLED_FILE);
271
- const targetPath = config.enabled ? enabledPath : disabledPath;
272
- const otherPath = config.enabled ? disabledPath : enabledPath;
265
+ export function setSlackConversationAutoReply(office, enabled) {
266
+ ensureDirExists(office.dir);
267
+ const enabledPath = join(office.dir, AUTO_REPLY_FILE);
268
+ const disabledPath = join(office.dir, AUTO_REPLY_DISABLED_FILE);
269
+ const targetPath = enabled ? enabledPath : disabledPath;
270
+ const otherPath = enabled ? disabledPath : enabledPath;
273
271
  if (existsSync(otherPath)) {
274
272
  renameSync(otherPath, targetPath);
273
+ return;
275
274
  }
276
- atomicWritePrivateFile(targetPath, config.rules.join("\n"));
277
- }
278
- export function resolveWorkspaceDirFromArgv(args = process.argv.slice(2)) {
279
- for (let i = 0; i < args.length; i++) {
280
- const arg = args[i];
281
- if (arg === "--sandbox" || arg === "--download" || arg === "--state-dir") {
282
- i += 1;
283
- continue;
284
- }
285
- if (arg === "--version" || arg === "-v" || arg === "-V" || arg === "--onboard") {
286
- continue;
287
- }
288
- if (arg.startsWith("--sandbox=") ||
289
- arg.startsWith("--download=") ||
290
- arg.startsWith("--state-dir=")) {
291
- continue;
292
- }
293
- if (!arg.startsWith("-")) {
294
- return arg;
295
- }
275
+ if (enabled && !existsSync(targetPath)) {
276
+ atomicWritePrivateFile(targetPath, "");
296
277
  }
297
- return undefined;
298
278
  }
299
- export function resolveStateDirFromArgv(args = process.argv.slice(2)) {
300
- for (let i = 0; i < args.length; i++) {
301
- const arg = args[i];
302
- if (arg.startsWith("--state-dir=")) {
303
- return resolve(arg.slice("--state-dir=".length));
304
- }
305
- if (arg === "--state-dir") {
306
- return resolve(args[++i] || "");
307
- }
308
- }
309
- return join(homedir(), ".mikan");
279
+ export function resolveConversationSettings(office) {
280
+ const globalConfig = loadRawGlobalSettings();
281
+ const conversationConfig = normalizeSettingsConfig(loadSettingsFile(conversationSettingsPath(office)) ?? {});
282
+ // MCP servers merge per key: a conversation redefines or disables individual
283
+ // servers without losing the rest of the global set. Runner construction
284
+ // removes the reserved open-connector entry before loading servers.
285
+ const mcpServers = { ...globalConfig.mcpServers, ...conversationConfig.mcpServers };
286
+ // The sandbox group merges at the leaf level (see mergeSandboxSettings):
287
+ // a conversation that only sets sandbox.memory keeps the global sandbox.cpus.
288
+ const sandbox = mergeSandboxSettings(globalConfig.sandbox, conversationConfig.sandbox);
289
+ return toAgentConfig({
290
+ ...globalConfig,
291
+ ...conversationConfig,
292
+ ...(sandbox ? { sandbox } : {}),
293
+ ...(Object.keys(mcpServers).length > 0 ? { mcpServers } : {}),
294
+ });
310
295
  }
311
296
  /**
312
297
  * True when `child` is `parent` or a path inside it. Purely lexical (no
@@ -319,39 +304,49 @@ export function isPathInside(child, parent) {
319
304
  return childPath === parentPath || childPath.startsWith(parentPath + "/");
320
305
  }
321
306
  /**
322
- * The state dir (extensions code, extension data, vaults, auth.json) must
323
- * never live inside the working dir: conversation opt-in "full" mode mounts
324
- * the entire working dir read-write into sandbox containers, and a mounted
325
- * state dir would let sandboxed code plant extension modules that the host
326
- * process later imports — a sandbox escape. Fatal under sandboxed modes;
327
- * host mode has no mounts, so only warn about the bad hygiene.
307
+ * The state dir (settings, office records, vaults) must never live inside
308
+ * the working dir: conversation opt-in "full" mode mounts the entire working
309
+ * dir read-write into sandbox containers, which would expose host-authoritative
310
+ * state and credentials. Fatal under sandboxed modes; host mode has no mounts,
311
+ * so only warn about the bad hygiene.
328
312
  */
329
313
  export function assertStateDirOutsideWorkspace(stateDir, workingDir, sandboxType) {
330
314
  if (!isPathInside(stateDir, workingDir))
331
315
  return;
332
316
  const message = `--state-dir (${stateDir}) must not be inside the working directory (${workingDir}): ` +
333
317
  `sandbox containers mount the working directory, and a mounted state dir ` +
334
- `would expose extensions, vaults, and credentials to sandboxed code.`;
318
+ `would expose settings, office records, vaults, and credentials to sandboxed code.`;
335
319
  if (sandboxType === "host") {
336
320
  log.logWarning("Insecure state dir location", message);
337
321
  return;
338
322
  }
339
323
  throw new Error(message);
340
324
  }
325
+ /** Settings-file DSN wins over SENTRY_DSN env — the rule lives only here. */
326
+ function sentryDsnFrom(fromFile) {
327
+ return fromFile || readEnv("SENTRY_DSN");
328
+ }
341
329
  export function resolveSentryDsn() {
342
330
  const fromFile = normalizeSettingsConfig(loadSettingsFile(getSettingsPath()) ?? {});
343
- if (fromFile.sentryDsn) {
344
- return fromFile.sentryDsn;
345
- }
346
- return process.env.SENTRY_DSN;
331
+ return sentryDsnFrom(fromFile.sentryDsn);
347
332
  }
348
- export function createGlobalSettingsFile(stateDir) {
333
+ export function createGlobalSettingsFile(stateDir, llm) {
349
334
  const settingsPath = join(stateDir, "settings.json");
350
335
  if (existsSync(settingsPath)) {
351
336
  throw new Error(`Global settings already exists at ${settingsPath}`);
352
337
  }
353
338
  ensureDirExists(stateDir);
354
- atomicWritePrivateFile(settingsPath, JSON.stringify(ONBOARD_SETTINGS, null, 2));
339
+ const settings = llm
340
+ ? {
341
+ ...ONBOARD_SETTINGS,
342
+ llm: {
343
+ ...ONBOARD_SETTINGS.llm,
344
+ provider: llm.provider,
345
+ model: llm.model,
346
+ },
347
+ }
348
+ : ONBOARD_SETTINGS;
349
+ atomicWritePrivateFile(settingsPath, JSON.stringify(settings, null, 2));
355
350
  return settingsPath;
356
351
  }
357
352
  /**
@@ -373,8 +368,9 @@ function compactSettingsConfig(config) {
373
368
  ...(hasDefinedValue(config.llm) ? { llm: config.llm } : {}),
374
369
  ...(hasDefinedValue(config.sentry) ? { sentry: config.sentry } : {}),
375
370
  ...(hasDefinedValue(config.sandbox) ? { sandbox: config.sandbox } : {}),
376
- ...(hasDefinedValue(config.autoReply) ? { autoReply: config.autoReply } : {}),
377
371
  ...(hasDefinedValue(config.slack) ? { slack: config.slack } : {}),
372
+ // An empty map means "all servers removed".
373
+ ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),
378
374
  };
379
375
  }
380
376
  function patchSettingsConfig(existing, config) {
@@ -390,61 +386,106 @@ function patchSettingsConfig(existing, config) {
390
386
  ...existing.sentry,
391
387
  ...(config.sentryDsn !== undefined ? { dsn: config.sentryDsn } : {}),
392
388
  },
393
- sandbox: {
394
- ...existing.sandbox,
395
- ...(config.sandboxCpus !== undefined ? { cpus: config.sandboxCpus } : {}),
396
- ...(config.sandboxMemory !== undefined ? { memory: config.sandboxMemory } : {}),
397
- ...(config.sandboxBoostCpus !== undefined || config.sandboxBoostMemory !== undefined
398
- ? {
399
- boost: {
400
- ...existing.sandbox?.boost,
401
- ...(config.sandboxBoostCpus !== undefined ? { cpus: config.sandboxBoostCpus } : {}),
402
- ...(config.sandboxBoostMemory !== undefined
403
- ? { memory: config.sandboxBoostMemory }
404
- : {}),
405
- },
406
- }
407
- : {}),
408
- ...(config.sandboxImageWorkspaceMount !== undefined
409
- ? {
410
- image: {
411
- ...existing.sandbox?.image,
412
- workspaceMount: config.sandboxImageWorkspaceMount,
413
- },
414
- }
415
- : {}),
416
- ...(config.defaultSharedVault !== undefined
417
- ? { defaultSharedVault: config.defaultSharedVault }
418
- : {}),
419
- },
389
+ // Leaf-level merge: a patch that only sets sandbox.boost.memory keeps the
390
+ // existing boost.cpus (and every other existing leaf). compactSettingsConfig
391
+ // drops the group entirely when it ends up with no defined values.
392
+ sandbox: mergeSandboxSettings(existing.sandbox, config.sandbox) ?? {},
420
393
  slack: {
421
394
  ...existing.slack,
422
395
  ...config.slack,
423
396
  },
397
+ // The portal edits the full MCP map, and
398
+ // a merge would make removing a server impossible.
399
+ ...(config.mcpServers !== undefined ? { mcpServers: config.mcpServers } : {}),
424
400
  };
425
401
  return compactSettingsConfig(patched);
426
402
  }
427
- function updateSettingsFile(settingsPath, patch, defaultSettings) {
428
- let existing = defaultSettings;
429
- if (existsSync(settingsPath)) {
430
- try {
431
- existing = loadSettingsFile(settingsPath) ?? {};
432
- }
433
- catch (err) {
434
- const detail = err instanceof Error ? err.message : String(err);
435
- const message = detail.startsWith("Malformed settings file")
436
- ? detail.replace("Malformed settings file", "Refusing to overwrite malformed settings file")
437
- : detail;
438
- throw new Error(message, { cause: err });
439
- }
403
+ function loadSettingsFileForUpdate(settingsPath, defaultSettings) {
404
+ if (!existsSync(settingsPath))
405
+ return defaultSettings;
406
+ try {
407
+ return loadSettingsFile(settingsPath) ?? {};
408
+ }
409
+ catch (err) {
410
+ const detail = err instanceof Error ? err.message : String(err);
411
+ const message = detail.startsWith("Malformed settings file")
412
+ ? detail.replace("Malformed settings file", "Refusing to overwrite malformed settings file")
413
+ : detail;
414
+ throw new Error(message, { cause: err });
440
415
  }
416
+ }
417
+ function updateSettingsFile(settingsPath, patch, defaultSettings) {
418
+ const existing = loadSettingsFileForUpdate(settingsPath, defaultSettings);
441
419
  ensureDirExists(dirname(settingsPath));
442
420
  atomicWritePrivateFile(settingsPath, JSON.stringify(patchSettingsConfig(existing, patch), null, 2));
443
421
  }
444
422
  export function updateGlobalSettings(patch) {
445
- updateSettingsFile(join(getStateDir(), "settings.json"), patch, ONBOARD_SETTINGS);
423
+ updateSettingsFile(getSettingsPath(), patch, ONBOARD_SETTINGS);
424
+ }
425
+ export function updateConversationSettings(office, patch) {
426
+ updateSettingsFile(conversationSettingsPath(office), patch, {});
446
427
  }
447
- export function updateConversationSettings(conversationDir, patch) {
448
- updateSettingsFile(conversationSettingsPath(conversationDir), patch, {});
428
+ /**
429
+ * The two scope-level MCP server maps, unmerged: the portal edits each scope's
430
+ * own file, so it needs the raw per-scope values, not the effective merge
431
+ * (`resolveConversationSettings` owns that).
432
+ */
433
+ export function loadScopeMcpServers(office) {
434
+ return {
435
+ global: loadRawGlobalSettings().mcpServers ?? {},
436
+ conversation: loadSettingsFile(conversationSettingsPath(office))?.mcpServers ?? {},
437
+ };
438
+ }
439
+ /**
440
+ * The conversation's own door-policy override (legacy `image.workspaceMount`
441
+ * included), or null when the office follows the global default. Missing
442
+ * `visibility` on a shared-support choice defaults to "public" downstream
443
+ * (see resolveEffectiveWorkspace), preserving today's read-write behavior for
444
+ * every office that predates this setting.
445
+ */
446
+ export function loadConversationWorkspaceOverride(office) {
447
+ const file = loadSettingsFile(conversationSettingsPath(office));
448
+ const sandbox = file?.sandbox;
449
+ if (sandbox?.workspace?.doorPolicy === "isolated")
450
+ return { doorPolicy: "isolated" };
451
+ if (sandbox?.workspace?.doorPolicy === "trusted") {
452
+ if (sandbox.workspace.layout === "full")
453
+ return { doorPolicy: "trusted", layout: "full" };
454
+ return {
455
+ doorPolicy: "trusted",
456
+ layout: "shared-support",
457
+ ...(sandbox.workspace.visibility ? { visibility: sandbox.workspace.visibility } : {}),
458
+ };
459
+ }
460
+ if (sandbox?.image?.workspaceMount === "full")
461
+ return { doorPolicy: "trusted", layout: "full" };
462
+ if (sandbox?.image?.workspaceMount === "private") {
463
+ return { doorPolicy: "trusted", layout: "shared-support" };
464
+ }
465
+ return null;
466
+ }
467
+ export function setConversationWorkspacePolicy(office, choice) {
468
+ writeWorkspacePolicy(conversationSettingsPath(office), choice, {});
469
+ }
470
+ export function setGlobalWorkspacePolicy(choice) {
471
+ writeWorkspacePolicy(getSettingsPath(), choice, ONBOARD_SETTINGS);
472
+ }
473
+ /**
474
+ * The generic settings patch merges leaves and cannot remove keys, so the
475
+ * door-policy writer edits the file shape directly: it always drops the
476
+ * legacy `image.workspaceMount` (the explicit choice replaces it) and either
477
+ * sets or removes the `workspace` group.
478
+ */
479
+ function writeWorkspacePolicy(settingsPath, choice, defaultSettings) {
480
+ const existing = loadSettingsFileForUpdate(settingsPath, defaultSettings);
481
+ const { workspaceMount: _legacy, ...image } = existing.sandbox?.image ?? {};
482
+ const { workspace: _previous, image: _image, ...sandboxRest } = existing.sandbox ?? {};
483
+ const sandbox = {
484
+ ...sandboxRest,
485
+ ...(hasDefinedValue(image) ? { image } : {}),
486
+ ...(choice ? { workspace: choice } : {}),
487
+ };
488
+ ensureDirExists(dirname(settingsPath));
489
+ atomicWritePrivateFile(settingsPath, JSON.stringify(compactSettingsConfig({ ...existing, sandbox }), null, 2));
449
490
  }
450
491
  //# sourceMappingURL=config.js.map