@geminixiang/mikan 1.0.0-beta.8 → 1.0.0-beta.81

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 (907) hide show
  1. package/CHANGELOG.md +1168 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +12 -9
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +158 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +17 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +121 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +9 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +136 -0
  21. package/dist/adapters/commands/model.js.map +1 -0
  22. package/dist/adapters/commands/new.d.ts.map +1 -0
  23. package/dist/adapters/commands/new.js +39 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +4 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +35 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -1
  30. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  31. package/dist/adapters/commands/sandbox.js +125 -0
  32. package/dist/adapters/commands/sandbox.js.map +1 -0
  33. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  34. package/dist/{commands → adapters/commands}/session-view.js +21 -16
  35. package/dist/adapters/commands/session-view.js.map +1 -0
  36. package/dist/adapters/commands/types.d.ts +105 -0
  37. package/dist/adapters/commands/types.d.ts.map +1 -0
  38. package/dist/adapters/commands/types.js.map +1 -0
  39. package/dist/adapters/commands/utils.d.ts +11 -0
  40. package/dist/adapters/commands/utils.d.ts.map +1 -0
  41. package/dist/{commands → adapters/commands}/utils.js +15 -1
  42. package/dist/adapters/commands/utils.js.map +1 -0
  43. package/dist/adapters/discord/bot.d.ts +10 -17
  44. package/dist/adapters/discord/bot.d.ts.map +1 -1
  45. package/dist/adapters/discord/bot.js +232 -297
  46. package/dist/adapters/discord/bot.js.map +1 -1
  47. package/dist/adapters/discord/components.d.ts +4 -0
  48. package/dist/adapters/discord/components.d.ts.map +1 -0
  49. package/dist/adapters/discord/components.js +9 -0
  50. package/dist/adapters/discord/components.js.map +1 -0
  51. package/dist/adapters/discord/context.d.ts +3 -7
  52. package/dist/adapters/discord/context.d.ts.map +1 -1
  53. package/dist/adapters/discord/context.js +55 -219
  54. package/dist/adapters/discord/context.js.map +1 -1
  55. package/dist/adapters/discord/format.d.ts +2 -0
  56. package/dist/adapters/discord/format.d.ts.map +1 -0
  57. package/dist/adapters/discord/format.js +47 -0
  58. package/dist/adapters/discord/format.js.map +1 -0
  59. package/dist/adapters/discord/types.d.ts +90 -1
  60. package/dist/adapters/discord/types.d.ts.map +1 -1
  61. package/dist/adapters/discord/types.js.map +1 -1
  62. package/dist/adapters/github/bot.d.ts +25 -9
  63. package/dist/adapters/github/bot.d.ts.map +1 -1
  64. package/dist/adapters/github/bot.js +325 -154
  65. package/dist/adapters/github/bot.js.map +1 -1
  66. package/dist/adapters/github/client.d.ts +39 -23
  67. package/dist/adapters/github/client.d.ts.map +1 -1
  68. package/dist/adapters/github/client.js +146 -35
  69. package/dist/adapters/github/client.js.map +1 -1
  70. package/dist/adapters/github/context.d.ts +3 -8
  71. package/dist/adapters/github/context.d.ts.map +1 -1
  72. package/dist/adapters/github/context.js +64 -131
  73. package/dist/adapters/github/context.js.map +1 -1
  74. package/dist/adapters/github/github-ops.d.ts +22 -0
  75. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  76. package/dist/adapters/github/github-ops.js +281 -0
  77. package/dist/adapters/github/github-ops.js.map +1 -0
  78. package/dist/adapters/github/ids.d.ts +2 -23
  79. package/dist/adapters/github/ids.d.ts.map +1 -1
  80. package/dist/adapters/github/ids.js +6 -36
  81. package/dist/adapters/github/ids.js.map +1 -1
  82. package/dist/adapters/github/repo.d.ts +8 -0
  83. package/dist/adapters/github/repo.d.ts.map +1 -0
  84. package/dist/adapters/github/repo.js +92 -0
  85. package/dist/adapters/github/repo.js.map +1 -0
  86. package/dist/adapters/github/tool-pack.d.ts +4 -0
  87. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  88. package/dist/adapters/github/tool-pack.js +45 -0
  89. package/dist/adapters/github/tool-pack.js.map +1 -0
  90. package/dist/adapters/github/tools/checks.d.ts +14 -0
  91. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  92. package/dist/adapters/github/tools/checks.js +80 -0
  93. package/dist/adapters/github/tools/checks.js.map +1 -0
  94. package/dist/adapters/github/tools/issue.d.ts +18 -0
  95. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  96. package/dist/adapters/github/tools/issue.js +44 -0
  97. package/dist/adapters/github/tools/issue.js.map +1 -0
  98. package/dist/adapters/github/tools/pr.d.ts +17 -0
  99. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  100. package/dist/adapters/github/tools/pr.js +42 -0
  101. package/dist/adapters/github/tools/pr.js.map +1 -0
  102. package/dist/adapters/github/tools/read.d.ts +17 -0
  103. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  104. package/dist/adapters/github/tools/read.js +134 -0
  105. package/dist/adapters/github/tools/read.js.map +1 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts +14 -0
  107. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  108. package/dist/adapters/github/tools/review-reply.js +34 -0
  109. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  110. package/dist/adapters/github/tools/sync.d.ts +13 -0
  111. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  112. package/dist/adapters/github/tools/sync.js +29 -0
  113. package/dist/adapters/github/tools/sync.js.map +1 -0
  114. package/dist/adapters/github/types.d.ts +197 -18
  115. package/dist/adapters/github/types.d.ts.map +1 -1
  116. package/dist/adapters/github/types.js.map +1 -1
  117. package/dist/adapters/github/webhook.d.ts +6 -0
  118. package/dist/adapters/github/webhook.d.ts.map +1 -0
  119. package/dist/adapters/github/webhook.js +62 -0
  120. package/dist/adapters/github/webhook.js.map +1 -0
  121. package/dist/adapters/intake.d.ts +4 -10
  122. package/dist/adapters/intake.d.ts.map +1 -1
  123. package/dist/adapters/intake.js +74 -31
  124. package/dist/adapters/intake.js.map +1 -1
  125. package/dist/adapters/markdown-tables.d.ts +8 -0
  126. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  127. package/dist/adapters/markdown-tables.js +111 -0
  128. package/dist/adapters/markdown-tables.js.map +1 -0
  129. package/dist/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  130. package/dist/adapters/messages.d.ts.map +1 -0
  131. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  132. package/dist/adapters/messages.js.map +1 -0
  133. package/dist/adapters/progressive-renderer.d.ts +7 -0
  134. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  135. package/dist/adapters/progressive-renderer.js +423 -0
  136. package/dist/adapters/progressive-renderer.js.map +1 -0
  137. package/dist/adapters/shared.d.ts +24 -53
  138. package/dist/adapters/shared.d.ts.map +1 -1
  139. package/dist/adapters/shared.js +140 -91
  140. package/dist/adapters/shared.js.map +1 -1
  141. package/dist/adapters/slack/assistant.d.ts +23 -0
  142. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  143. package/dist/adapters/slack/assistant.js +109 -0
  144. package/dist/adapters/slack/assistant.js.map +1 -0
  145. package/dist/adapters/slack/auto-reply-context.d.ts +14 -0
  146. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  147. package/dist/adapters/slack/auto-reply-context.js +21 -0
  148. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  149. package/dist/adapters/slack/blocks.d.ts +5 -0
  150. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  151. package/dist/adapters/slack/blocks.js +84 -148
  152. package/dist/adapters/slack/blocks.js.map +1 -1
  153. package/dist/adapters/slack/bot.d.ts +51 -39
  154. package/dist/adapters/slack/bot.d.ts.map +1 -1
  155. package/dist/adapters/slack/bot.js +897 -569
  156. package/dist/adapters/slack/bot.js.map +1 -1
  157. package/dist/adapters/slack/context.d.ts +3 -9
  158. package/dist/adapters/slack/context.d.ts.map +1 -1
  159. package/dist/adapters/slack/context.js +8 -17
  160. package/dist/adapters/slack/context.js.map +1 -1
  161. package/dist/adapters/slack/jev-context.d.ts +17 -0
  162. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  163. package/dist/adapters/slack/jev-context.js +57 -0
  164. package/dist/adapters/slack/jev-context.js.map +1 -0
  165. package/dist/adapters/slack/markdown.d.ts +2 -0
  166. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  167. package/dist/adapters/slack/markdown.js +43 -0
  168. package/dist/adapters/slack/markdown.js.map +1 -0
  169. package/dist/adapters/slack/persona.d.ts +6 -0
  170. package/dist/adapters/slack/persona.d.ts.map +1 -0
  171. package/dist/adapters/slack/persona.js +13 -0
  172. package/dist/adapters/slack/persona.js.map +1 -0
  173. package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
  174. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  175. package/dist/adapters/slack/response-lifecycle.js +221 -347
  176. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  177. package/dist/adapters/slack/session.d.ts +3 -2
  178. package/dist/adapters/slack/session.d.ts.map +1 -1
  179. package/dist/adapters/slack/session.js +9 -13
  180. package/dist/adapters/slack/session.js.map +1 -1
  181. package/dist/adapters/slack/stream-limits.d.ts +10 -0
  182. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  183. package/dist/adapters/slack/stream-limits.js +22 -0
  184. package/dist/adapters/slack/stream-limits.js.map +1 -0
  185. package/dist/adapters/slack/task-intent.d.ts +19 -0
  186. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  187. package/dist/adapters/slack/task-intent.js +65 -0
  188. package/dist/adapters/slack/task-intent.js.map +1 -0
  189. package/dist/adapters/slack/task-status.d.ts +6 -0
  190. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  191. package/dist/adapters/slack/task-status.js +100 -0
  192. package/dist/adapters/slack/task-status.js.map +1 -0
  193. package/dist/adapters/slack/tool-pack.d.ts +4 -0
  194. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  195. package/dist/adapters/slack/tool-pack.js +40 -0
  196. package/dist/adapters/slack/tool-pack.js.map +1 -0
  197. package/dist/adapters/slack/tools/blockkit.d.ts +17 -0
  198. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.js +98 -0
  200. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  201. package/dist/adapters/slack/types.d.ts +91 -5
  202. package/dist/adapters/slack/types.d.ts.map +1 -1
  203. package/dist/adapters/slack/types.js.map +1 -1
  204. package/dist/adapters/slack/update-diagnostics.d.ts +13 -0
  205. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  206. package/dist/adapters/slack/update-diagnostics.js +128 -0
  207. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  208. package/dist/adapters/telegram/bot.d.ts +8 -18
  209. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  210. package/dist/adapters/telegram/bot.js +114 -232
  211. package/dist/adapters/telegram/bot.js.map +1 -1
  212. package/dist/adapters/telegram/context.d.ts +3 -7
  213. package/dist/adapters/telegram/context.d.ts.map +1 -1
  214. package/dist/adapters/telegram/context.js +47 -191
  215. package/dist/adapters/telegram/context.js.map +1 -1
  216. package/dist/adapters/telegram/types.d.ts +24 -1
  217. package/dist/adapters/telegram/types.d.ts.map +1 -1
  218. package/dist/adapters/telegram/types.js.map +1 -1
  219. package/dist/adapters/types.d.ts +89 -16
  220. package/dist/adapters/types.d.ts.map +1 -1
  221. package/dist/adapters/types.js.map +1 -1
  222. package/dist/adapters/web/admin/client-assets.d.ts +4 -0
  223. package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
  224. package/dist/adapters/web/admin/client-assets.js +1766 -0
  225. package/dist/adapters/web/admin/client-assets.js.map +1 -0
  226. package/dist/adapters/web/admin/portal.d.ts +27 -0
  227. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  228. package/dist/adapters/web/admin/portal.js +1506 -0
  229. package/dist/adapters/web/admin/portal.js.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  231. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  232. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  233. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  234. package/dist/adapters/web/admin/types.d.ts +56 -0
  235. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  236. package/dist/adapters/web/admin/types.js.map +1 -0
  237. package/dist/adapters/web/login/oauth.d.ts +4 -0
  238. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  239. package/dist/{web → adapters/web}/login/oauth.js +61 -100
  240. package/dist/adapters/web/login/oauth.js.map +1 -0
  241. package/dist/adapters/web/login/portal.d.ts +10 -0
  242. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  243. package/dist/{web → adapters/web}/login/portal.js +169 -159
  244. package/dist/adapters/web/login/portal.js.map +1 -0
  245. package/dist/{web → adapters/web}/login/types.d.ts +1 -17
  246. package/dist/adapters/web/login/types.d.ts.map +1 -0
  247. package/dist/adapters/web/login/types.js.map +1 -0
  248. package/dist/adapters/web/portal-shell.d.ts +9 -0
  249. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  250. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +73 -11
  251. package/dist/adapters/web/portal-shell.js.map +1 -0
  252. package/dist/adapters/web/server.d.ts +35 -0
  253. package/dist/adapters/web/server.d.ts.map +1 -0
  254. package/dist/{web → adapters/web}/server.js +26 -13
  255. package/dist/adapters/web/server.js.map +1 -0
  256. package/dist/adapters/web/session-view/portal.d.ts +19 -0
  257. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/portal.js +711 -230
  259. package/dist/adapters/web/session-view/portal.js.map +1 -0
  260. package/dist/{web → adapters/web}/session-view/types.d.ts +3 -6
  261. package/dist/{web → adapters/web}/session-view/types.d.ts.map +1 -1
  262. package/dist/adapters/web/session-view/types.js.map +1 -0
  263. package/dist/{web → adapters/web}/token-store.d.ts +0 -3
  264. package/dist/adapters/web/token-store.d.ts.map +1 -0
  265. package/dist/{web → adapters/web}/token-store.js +1 -3
  266. package/dist/adapters/web/token-store.js.map +1 -0
  267. package/dist/adapters/web/types.d.ts.map +1 -0
  268. package/dist/adapters/web/types.js.map +1 -0
  269. package/dist/cli/arg-grammar.d.ts +8 -0
  270. package/dist/cli/arg-grammar.d.ts.map +1 -0
  271. package/dist/cli/arg-grammar.js +47 -0
  272. package/dist/cli/arg-grammar.js.map +1 -0
  273. package/dist/cli/boot.d.ts +4 -0
  274. package/dist/cli/boot.d.ts.map +1 -0
  275. package/dist/cli/boot.js +81 -0
  276. package/dist/cli/boot.js.map +1 -0
  277. package/dist/cli/download.d.ts.map +1 -0
  278. package/dist/cli/download.js +84 -0
  279. package/dist/cli/download.js.map +1 -0
  280. package/dist/cli/office.d.ts +2 -0
  281. package/dist/cli/office.d.ts.map +1 -0
  282. package/dist/cli/office.js +151 -0
  283. package/dist/cli/office.js.map +1 -0
  284. package/dist/cli/onboard.d.ts +8 -0
  285. package/dist/cli/onboard.d.ts.map +1 -0
  286. package/dist/cli/onboard.js +195 -0
  287. package/dist/cli/onboard.js.map +1 -0
  288. package/dist/cli/process-lifecycle.d.ts +14 -0
  289. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  290. package/dist/cli/process-lifecycle.js +61 -0
  291. package/dist/cli/process-lifecycle.js.map +1 -0
  292. package/dist/cli/sandbox.d.ts +3 -0
  293. package/dist/cli/sandbox.d.ts.map +1 -0
  294. package/dist/cli/sandbox.js +80 -0
  295. package/dist/cli/sandbox.js.map +1 -0
  296. package/dist/cli/sessions.d.ts +2 -0
  297. package/dist/cli/sessions.d.ts.map +1 -0
  298. package/dist/cli/sessions.js +78 -0
  299. package/dist/cli/sessions.js.map +1 -0
  300. package/dist/cli/types.d.ts +21 -0
  301. package/dist/cli/types.d.ts.map +1 -0
  302. package/dist/cli/types.js.map +1 -0
  303. package/dist/env-manifest.d.ts +18 -0
  304. package/dist/env-manifest.d.ts.map +1 -0
  305. package/dist/env-manifest.js +256 -0
  306. package/dist/env-manifest.js.map +1 -0
  307. package/dist/events/index.d.ts +122 -0
  308. package/dist/events/index.d.ts.map +1 -0
  309. package/dist/events/index.js +299 -0
  310. package/dist/events/index.js.map +1 -0
  311. package/dist/events/scheduler.d.ts +25 -0
  312. package/dist/events/scheduler.d.ts.map +1 -0
  313. package/dist/events/scheduler.js +223 -0
  314. package/dist/events/scheduler.js.map +1 -0
  315. package/dist/file-guards.d.ts +13 -0
  316. package/dist/file-guards.d.ts.map +1 -0
  317. package/dist/file-guards.js +104 -0
  318. package/dist/file-guards.js.map +1 -0
  319. package/dist/harness/execution-env.d.ts +4 -0
  320. package/dist/harness/execution-env.d.ts.map +1 -0
  321. package/dist/harness/execution-env.js +245 -0
  322. package/dist/harness/execution-env.js.map +1 -0
  323. package/dist/harness/execution-resolver.d.ts +23 -0
  324. package/dist/harness/execution-resolver.d.ts.map +1 -0
  325. package/dist/harness/execution-resolver.js +156 -0
  326. package/dist/harness/execution-resolver.js.map +1 -0
  327. package/dist/harness/http.d.ts +0 -12
  328. package/dist/harness/http.d.ts.map +1 -1
  329. package/dist/harness/http.js +0 -34
  330. package/dist/harness/http.js.map +1 -1
  331. package/dist/harness/index.d.ts +19 -17
  332. package/dist/harness/index.d.ts.map +1 -1
  333. package/dist/harness/index.js +12 -15
  334. package/dist/harness/index.js.map +1 -1
  335. package/dist/harness/jev.d.ts +67 -0
  336. package/dist/harness/jev.d.ts.map +1 -0
  337. package/dist/harness/jev.js +135 -0
  338. package/dist/harness/jev.js.map +1 -0
  339. package/dist/harness/loop-guard.d.ts +10 -0
  340. package/dist/harness/loop-guard.d.ts.map +1 -0
  341. package/dist/harness/loop-guard.js +111 -0
  342. package/dist/harness/loop-guard.js.map +1 -0
  343. package/dist/harness/mcp-result.d.ts +20 -0
  344. package/dist/harness/mcp-result.d.ts.map +1 -0
  345. package/dist/harness/mcp-result.js +179 -0
  346. package/dist/harness/mcp-result.js.map +1 -0
  347. package/dist/harness/mcp.d.ts +17 -0
  348. package/dist/harness/mcp.d.ts.map +1 -0
  349. package/dist/harness/mcp.js +243 -0
  350. package/dist/harness/mcp.js.map +1 -0
  351. package/dist/harness/models.d.ts +2 -19
  352. package/dist/harness/models.d.ts.map +1 -1
  353. package/dist/harness/models.js +42 -94
  354. package/dist/harness/models.js.map +1 -1
  355. package/dist/harness/open-connector.d.ts +12 -0
  356. package/dist/harness/open-connector.d.ts.map +1 -0
  357. package/dist/harness/open-connector.js +160 -0
  358. package/dist/harness/open-connector.js.map +1 -0
  359. package/dist/harness/presenter.d.ts +11 -0
  360. package/dist/harness/presenter.d.ts.map +1 -0
  361. package/dist/harness/presenter.js +826 -0
  362. package/dist/harness/presenter.js.map +1 -0
  363. package/dist/harness/prompt.d.ts +18 -0
  364. package/dist/harness/prompt.d.ts.map +1 -0
  365. package/dist/harness/prompt.js +403 -0
  366. package/dist/harness/prompt.js.map +1 -0
  367. package/dist/harness/run-events.d.ts +10 -0
  368. package/dist/harness/run-events.d.ts.map +1 -0
  369. package/dist/harness/run-events.js +129 -0
  370. package/dist/harness/run-events.js.map +1 -0
  371. package/dist/harness/runner.d.ts +2 -123
  372. package/dist/harness/runner.d.ts.map +1 -1
  373. package/dist/harness/runner.js +575 -413
  374. package/dist/harness/runner.js.map +1 -1
  375. package/dist/harness/session.d.ts +103 -0
  376. package/dist/harness/session.d.ts.map +1 -0
  377. package/dist/harness/session.js +715 -0
  378. package/dist/harness/session.js.map +1 -0
  379. package/dist/harness/skills.d.ts +7 -41
  380. package/dist/harness/skills.d.ts.map +1 -1
  381. package/dist/harness/skills.js +101 -55
  382. package/dist/harness/skills.js.map +1 -1
  383. package/dist/harness/subagent-profiles.d.ts +3 -0
  384. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  385. package/dist/harness/subagent-profiles.js +260 -0
  386. package/dist/harness/subagent-profiles.js.map +1 -0
  387. package/dist/harness/subagent.d.ts +39 -0
  388. package/dist/harness/subagent.d.ts.map +1 -0
  389. package/dist/harness/subagent.js +618 -0
  390. package/dist/harness/subagent.js.map +1 -0
  391. package/dist/harness/tool-args.d.ts +2 -0
  392. package/dist/harness/tool-args.d.ts.map +1 -0
  393. package/dist/harness/tool-args.js +20 -0
  394. package/dist/harness/tool-args.js.map +1 -0
  395. package/dist/harness/tools/attach.d.ts +13 -0
  396. package/dist/harness/tools/attach.d.ts.map +1 -0
  397. package/dist/{adapters/slack → harness}/tools/attach.js +2 -2
  398. package/dist/harness/tools/attach.js.map +1 -0
  399. package/dist/harness/tools/event.d.ts +28 -0
  400. package/dist/harness/tools/event.d.ts.map +1 -0
  401. package/dist/harness/tools/event.js +166 -0
  402. package/dist/harness/tools/event.js.map +1 -0
  403. package/dist/harness/tools/generate-image.d.ts +20 -0
  404. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  405. package/dist/harness/tools/generate-image.js +68 -0
  406. package/dist/harness/tools/generate-image.js.map +1 -0
  407. package/dist/harness/tools/host-fn-tool.d.ts +14 -0
  408. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  409. package/dist/harness/tools/host-fn-tool.js +39 -0
  410. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  411. package/dist/harness/tools/index.d.ts +34 -0
  412. package/dist/harness/tools/index.d.ts.map +1 -0
  413. package/dist/harness/tools/index.js +49 -0
  414. package/dist/harness/tools/index.js.map +1 -0
  415. package/dist/harness/tools/jev-browser.d.ts +42 -0
  416. package/dist/harness/tools/jev-browser.d.ts.map +1 -0
  417. package/dist/harness/tools/jev-browser.js +547 -0
  418. package/dist/harness/tools/jev-browser.js.map +1 -0
  419. package/dist/harness/tools/jev.d.ts +15 -0
  420. package/dist/harness/tools/jev.d.ts.map +1 -0
  421. package/dist/harness/tools/jev.js +98 -0
  422. package/dist/harness/tools/jev.js.map +1 -0
  423. package/dist/harness/tools/pi-tools.d.ts +8 -0
  424. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  425. package/dist/harness/tools/pi-tools.js +55 -0
  426. package/dist/harness/tools/pi-tools.js.map +1 -0
  427. package/dist/harness/tools/react.d.ts +11 -0
  428. package/dist/harness/tools/react.d.ts.map +1 -0
  429. package/dist/harness/tools/react.js +24 -0
  430. package/dist/harness/tools/react.js.map +1 -0
  431. package/dist/harness/tools/sandbox.d.ts +24 -0
  432. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  433. package/dist/{tools → harness/tools}/sandbox.js +15 -9
  434. package/dist/harness/tools/sandbox.js.map +1 -0
  435. package/dist/harness/tools/secret-redaction.d.ts +9 -0
  436. package/dist/harness/tools/secret-redaction.d.ts.map +1 -0
  437. package/dist/harness/tools/secret-redaction.js +44 -0
  438. package/dist/harness/tools/secret-redaction.js.map +1 -0
  439. package/dist/harness/tools/subagent.d.ts +51 -0
  440. package/dist/harness/tools/subagent.d.ts.map +1 -0
  441. package/dist/harness/tools/subagent.js +581 -0
  442. package/dist/harness/tools/subagent.js.map +1 -0
  443. package/dist/harness/tools/task.d.ts +22 -0
  444. package/dist/harness/tools/task.d.ts.map +1 -0
  445. package/dist/harness/tools/task.js +80 -0
  446. package/dist/harness/tools/task.js.map +1 -0
  447. package/dist/harness/tools/types.d.ts +14 -0
  448. package/dist/harness/tools/types.d.ts.map +1 -0
  449. package/dist/harness/tools/types.js.map +1 -0
  450. package/dist/harness/types.d.ts +405 -29
  451. package/dist/harness/types.d.ts.map +1 -1
  452. package/dist/harness/types.js +1 -1
  453. package/dist/harness/types.js.map +1 -1
  454. package/dist/index.d.ts +36 -9
  455. package/dist/index.d.ts.map +1 -1
  456. package/dist/index.js +19 -7
  457. package/dist/index.js.map +1 -1
  458. package/dist/log.d.ts +0 -1
  459. package/dist/log.d.ts.map +1 -1
  460. package/dist/log.js +3 -13
  461. package/dist/log.js.map +1 -1
  462. package/dist/main.js +305 -219
  463. package/dist/main.js.map +1 -1
  464. package/dist/memory-capture/index.d.ts +15 -0
  465. package/dist/memory-capture/index.d.ts.map +1 -0
  466. package/dist/memory-capture/index.js +199 -0
  467. package/dist/memory-capture/index.js.map +1 -0
  468. package/dist/memory-capture/types.d.ts +27 -0
  469. package/dist/memory-capture/types.d.ts.map +1 -0
  470. package/dist/memory-capture/types.js +2 -0
  471. package/dist/memory-capture/types.js.map +1 -0
  472. package/dist/observability/index.d.ts +30 -0
  473. package/dist/observability/index.d.ts.map +1 -0
  474. package/dist/observability/index.js +273 -0
  475. package/dist/observability/index.js.map +1 -0
  476. package/dist/observability/instrument.js +9 -6
  477. package/dist/observability/instrument.js.map +1 -1
  478. package/dist/observability/otel.d.ts +10 -0
  479. package/dist/observability/otel.d.ts.map +1 -0
  480. package/dist/observability/otel.js +182 -0
  481. package/dist/observability/otel.js.map +1 -0
  482. package/dist/observability/sentry.d.ts +32 -13
  483. package/dist/observability/sentry.d.ts.map +1 -1
  484. package/dist/observability/sentry.js +85 -58
  485. package/dist/observability/sentry.js.map +1 -1
  486. package/dist/observability/types.d.ts +30 -3
  487. package/dist/observability/types.d.ts.map +1 -1
  488. package/dist/observability/types.js.map +1 -1
  489. package/dist/office/index.d.ts +74 -0
  490. package/dist/office/index.d.ts.map +1 -0
  491. package/dist/office/index.js +971 -0
  492. package/dist/office/index.js.map +1 -0
  493. package/dist/office/projection.d.ts +11 -0
  494. package/dist/office/projection.d.ts.map +1 -0
  495. package/dist/office/projection.js +146 -0
  496. package/dist/office/projection.js.map +1 -0
  497. package/dist/office/types.d.ts +55 -0
  498. package/dist/office/types.d.ts.map +1 -0
  499. package/dist/office/types.js +2 -0
  500. package/dist/office/types.js.map +1 -0
  501. package/dist/runtime/conversation-runtime.d.ts +0 -1
  502. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  503. package/dist/runtime/conversation-runtime.js +376 -152
  504. package/dist/runtime/conversation-runtime.js.map +1 -1
  505. package/dist/runtime/session-lifecycle.d.ts +66 -0
  506. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  507. package/dist/runtime/session-lifecycle.js +393 -0
  508. package/dist/runtime/session-lifecycle.js.map +1 -0
  509. package/dist/runtime/types.d.ts +42 -17
  510. package/dist/runtime/types.d.ts.map +1 -1
  511. package/dist/runtime/types.js.map +1 -1
  512. package/dist/sandbox/cloudflare.d.ts +4 -0
  513. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  514. package/dist/sandbox/cloudflare.js +59 -55
  515. package/dist/sandbox/cloudflare.js.map +1 -1
  516. package/dist/sandbox/container.d.ts +3 -0
  517. package/dist/sandbox/container.d.ts.map +1 -1
  518. package/dist/sandbox/container.js +39 -20
  519. package/dist/sandbox/container.js.map +1 -1
  520. package/dist/sandbox/host.d.ts +3 -0
  521. package/dist/sandbox/host.d.ts.map +1 -1
  522. package/dist/sandbox/host.js +42 -35
  523. package/dist/sandbox/host.js.map +1 -1
  524. package/dist/sandbox/identity.d.ts +13 -0
  525. package/dist/sandbox/identity.d.ts.map +1 -0
  526. package/dist/sandbox/identity.js +49 -0
  527. package/dist/sandbox/identity.js.map +1 -0
  528. package/dist/sandbox/index.d.ts +5 -15
  529. package/dist/sandbox/index.d.ts.map +1 -1
  530. package/dist/sandbox/index.js +5 -51
  531. package/dist/sandbox/index.js.map +1 -1
  532. package/dist/sandbox/layout.d.ts +7 -0
  533. package/dist/sandbox/layout.d.ts.map +1 -0
  534. package/dist/sandbox/layout.js +13 -0
  535. package/dist/sandbox/layout.js.map +1 -0
  536. package/dist/{provisioner.d.ts → sandbox/provisioner.d.ts} +41 -4
  537. package/dist/sandbox/provisioner.d.ts.map +1 -0
  538. package/dist/sandbox/provisioner.js +971 -0
  539. package/dist/sandbox/provisioner.js.map +1 -0
  540. package/dist/sandbox/registry.d.ts +12 -0
  541. package/dist/sandbox/registry.d.ts.map +1 -0
  542. package/dist/sandbox/registry.js +93 -0
  543. package/dist/sandbox/registry.js.map +1 -0
  544. package/dist/sandbox/types.d.ts +23 -25
  545. package/dist/sandbox/types.d.ts.map +1 -1
  546. package/dist/sandbox/types.js.map +1 -1
  547. package/dist/sandbox/utils.d.ts +21 -0
  548. package/dist/sandbox/utils.d.ts.map +1 -1
  549. package/dist/sandbox/utils.js +100 -8
  550. package/dist/sandbox/utils.js.map +1 -1
  551. package/dist/sessions/chat-history-sync.d.ts +17 -0
  552. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  553. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +224 -183
  554. package/dist/sessions/chat-history-sync.js.map +1 -0
  555. package/dist/sessions/history-line.d.ts +9 -0
  556. package/dist/sessions/history-line.d.ts.map +1 -0
  557. package/dist/sessions/history-line.js +25 -0
  558. package/dist/sessions/history-line.js.map +1 -0
  559. package/dist/sessions/migrate-common.d.ts +28 -0
  560. package/dist/sessions/migrate-common.d.ts.map +1 -0
  561. package/dist/sessions/migrate-common.js +80 -0
  562. package/dist/sessions/migrate-common.js.map +1 -0
  563. package/dist/sessions/migrate-pi-084.d.ts +7 -0
  564. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  565. package/dist/sessions/migrate-pi-084.js +293 -0
  566. package/dist/sessions/migrate-pi-084.js.map +1 -0
  567. package/dist/sessions/migrate-v3.d.ts +7 -0
  568. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  569. package/dist/sessions/migrate-v3.js +351 -0
  570. package/dist/sessions/migrate-v3.js.map +1 -0
  571. package/dist/sessions/session-key.d.ts +18 -0
  572. package/dist/sessions/session-key.d.ts.map +1 -0
  573. package/dist/sessions/session-key.js +88 -0
  574. package/dist/sessions/session-key.js.map +1 -0
  575. package/dist/sessions/session-store.d.ts +55 -0
  576. package/dist/sessions/session-store.d.ts.map +1 -0
  577. package/dist/sessions/session-store.js +635 -0
  578. package/dist/sessions/session-store.js.map +1 -0
  579. package/dist/sessions/store.d.ts +7 -61
  580. package/dist/sessions/store.d.ts.map +1 -1
  581. package/dist/sessions/store.js +126 -102
  582. package/dist/sessions/store.js.map +1 -1
  583. package/dist/sessions/types.d.ts +59 -8
  584. package/dist/sessions/types.d.ts.map +1 -1
  585. package/dist/sessions/types.js +2 -1
  586. package/dist/sessions/types.js.map +1 -1
  587. package/dist/settings/apply.d.ts +9 -0
  588. package/dist/settings/apply.d.ts.map +1 -0
  589. package/dist/settings/apply.js +31 -0
  590. package/dist/settings/apply.js.map +1 -0
  591. package/dist/settings/index.d.ts +76 -0
  592. package/dist/settings/index.d.ts.map +1 -0
  593. package/dist/settings/index.js +351 -0
  594. package/dist/settings/index.js.map +1 -0
  595. package/dist/settings/migrate.d.ts +16 -0
  596. package/dist/settings/migrate.d.ts.map +1 -0
  597. package/dist/settings/migrate.js +70 -0
  598. package/dist/settings/migrate.js.map +1 -0
  599. package/dist/types.d.ts +232 -173
  600. package/dist/types.d.ts.map +1 -1
  601. package/dist/types.js +1 -3
  602. package/dist/types.js.map +1 -1
  603. package/dist/unknown-values.d.ts +3 -0
  604. package/dist/unknown-values.d.ts.map +1 -0
  605. package/dist/unknown-values.js +7 -0
  606. package/dist/unknown-values.js.map +1 -0
  607. package/dist/vault/index.d.ts +35 -11
  608. package/dist/vault/index.d.ts.map +1 -1
  609. package/dist/vault/index.js +326 -115
  610. package/dist/vault/index.js.map +1 -1
  611. package/dist/vault/types.d.ts +5 -16
  612. package/dist/vault/types.d.ts.map +1 -1
  613. package/dist/vault/types.js.map +1 -1
  614. package/package.json +82 -41
  615. package/dist/adapter.d.ts +0 -2
  616. package/dist/adapter.d.ts.map +0 -1
  617. package/dist/adapter.js +0 -2
  618. package/dist/adapter.js.map +0 -1
  619. package/dist/adapters/slack/tools/attach.d.ts +0 -12
  620. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  621. package/dist/adapters/slack/tools/attach.js.map +0 -1
  622. package/dist/adapters/streaming.d.ts +0 -18
  623. package/dist/adapters/streaming.d.ts.map +0 -1
  624. package/dist/adapters/streaming.js +0 -44
  625. package/dist/adapters/streaming.js.map +0 -1
  626. package/dist/adapters/telegram/html.d.ts +0 -3
  627. package/dist/adapters/telegram/html.d.ts.map +0 -1
  628. package/dist/adapters/telegram/html.js +0 -98
  629. package/dist/adapters/telegram/html.js.map +0 -1
  630. package/dist/agent-events.d.ts +0 -5
  631. package/dist/agent-events.d.ts.map +0 -1
  632. package/dist/agent-events.js +0 -26
  633. package/dist/agent-events.js.map +0 -1
  634. package/dist/agent.d.ts +0 -39
  635. package/dist/agent.d.ts.map +0 -1
  636. package/dist/agent.js +0 -1291
  637. package/dist/agent.js.map +0 -1
  638. package/dist/cli/ext-git.d.ts +0 -22
  639. package/dist/cli/ext-git.d.ts.map +0 -1
  640. package/dist/cli/ext-git.js +0 -76
  641. package/dist/cli/ext-git.js.map +0 -1
  642. package/dist/cli/ext.d.ts +0 -2
  643. package/dist/cli/ext.d.ts.map +0 -1
  644. package/dist/cli/ext.js +0 -217
  645. package/dist/cli/ext.js.map +0 -1
  646. package/dist/commands/admin.d.ts.map +0 -1
  647. package/dist/commands/admin.js.map +0 -1
  648. package/dist/commands/auto-reply.d.ts.map +0 -1
  649. package/dist/commands/auto-reply.js +0 -76
  650. package/dist/commands/auto-reply.js.map +0 -1
  651. package/dist/commands/extensions.d.ts +0 -14
  652. package/dist/commands/extensions.d.ts.map +0 -1
  653. package/dist/commands/extensions.js +0 -55
  654. package/dist/commands/extensions.js.map +0 -1
  655. package/dist/commands/login.d.ts +0 -5
  656. package/dist/commands/login.d.ts.map +0 -1
  657. package/dist/commands/login.js +0 -115
  658. package/dist/commands/login.js.map +0 -1
  659. package/dist/commands/model.d.ts +0 -10
  660. package/dist/commands/model.d.ts.map +0 -1
  661. package/dist/commands/model.js +0 -102
  662. package/dist/commands/model.js.map +0 -1
  663. package/dist/commands/new.d.ts.map +0 -1
  664. package/dist/commands/new.js +0 -25
  665. package/dist/commands/new.js.map +0 -1
  666. package/dist/commands/parse.d.ts +0 -7
  667. package/dist/commands/parse.d.ts.map +0 -1
  668. package/dist/commands/parse.js +0 -14
  669. package/dist/commands/parse.js.map +0 -1
  670. package/dist/commands/registry.d.ts +0 -5
  671. package/dist/commands/registry.d.ts.map +0 -1
  672. package/dist/commands/registry.js +0 -31
  673. package/dist/commands/registry.js.map +0 -1
  674. package/dist/commands/sandbox.d.ts.map +0 -1
  675. package/dist/commands/sandbox.js +0 -78
  676. package/dist/commands/sandbox.js.map +0 -1
  677. package/dist/commands/session-view.d.ts.map +0 -1
  678. package/dist/commands/session-view.js.map +0 -1
  679. package/dist/commands/types.d.ts +0 -66
  680. package/dist/commands/types.d.ts.map +0 -1
  681. package/dist/commands/types.js.map +0 -1
  682. package/dist/commands/utils.d.ts +0 -11
  683. package/dist/commands/utils.d.ts.map +0 -1
  684. package/dist/commands/utils.js.map +0 -1
  685. package/dist/config.d.ts +0 -78
  686. package/dist/config.d.ts.map +0 -1
  687. package/dist/config.js +0 -450
  688. package/dist/config.js.map +0 -1
  689. package/dist/download.d.ts.map +0 -1
  690. package/dist/download.js +0 -89
  691. package/dist/download.js.map +0 -1
  692. package/dist/events.d.ts +0 -43
  693. package/dist/events.d.ts.map +0 -1
  694. package/dist/events.js +0 -456
  695. package/dist/events.js.map +0 -1
  696. package/dist/execution-resolver.d.ts +0 -21
  697. package/dist/execution-resolver.d.ts.map +0 -1
  698. package/dist/execution-resolver.js +0 -170
  699. package/dist/execution-resolver.js.map +0 -1
  700. package/dist/harness/auth.d.ts +0 -16
  701. package/dist/harness/auth.d.ts.map +0 -1
  702. package/dist/harness/auth.js +0 -86
  703. package/dist/harness/auth.js.map +0 -1
  704. package/dist/harness/extensions/loader.d.ts +0 -86
  705. package/dist/harness/extensions/loader.d.ts.map +0 -1
  706. package/dist/harness/extensions/loader.js +0 -525
  707. package/dist/harness/extensions/loader.js.map +0 -1
  708. package/dist/harness/extensions/registry.d.ts +0 -23
  709. package/dist/harness/extensions/registry.d.ts.map +0 -1
  710. package/dist/harness/extensions/registry.js +0 -45
  711. package/dist/harness/extensions/registry.js.map +0 -1
  712. package/dist/harness/extensions/types.d.ts +0 -248
  713. package/dist/harness/extensions/types.d.ts.map +0 -1
  714. package/dist/harness/extensions/types.js.map +0 -1
  715. package/dist/harness/session-store.d.ts +0 -77
  716. package/dist/harness/session-store.d.ts.map +0 -1
  717. package/dist/harness/session-store.js +0 -248
  718. package/dist/harness/session-store.js.map +0 -1
  719. package/dist/harness/settings.d.ts +0 -47
  720. package/dist/harness/settings.d.ts.map +0 -1
  721. package/dist/harness/settings.js +0 -29
  722. package/dist/harness/settings.js.map +0 -1
  723. package/dist/model-registry.d.ts +0 -4
  724. package/dist/model-registry.d.ts.map +0 -1
  725. package/dist/model-registry.js +0 -7
  726. package/dist/model-registry.js.map +0 -1
  727. package/dist/platform-messages.d.ts.map +0 -1
  728. package/dist/platform-messages.js.map +0 -1
  729. package/dist/portal-shell.d.ts +0 -4
  730. package/dist/portal-shell.d.ts.map +0 -1
  731. package/dist/portal-shell.js.map +0 -1
  732. package/dist/provisioner.d.ts.map +0 -1
  733. package/dist/provisioner.js +0 -517
  734. package/dist/provisioner.js.map +0 -1
  735. package/dist/runtime/agent-run-controller.d.ts +0 -31
  736. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  737. package/dist/runtime/agent-run-controller.js +0 -195
  738. package/dist/runtime/agent-run-controller.js.map +0 -1
  739. package/dist/sandbox/errors.d.ts +0 -6
  740. package/dist/sandbox/errors.d.ts.map +0 -1
  741. package/dist/sandbox/errors.js +0 -11
  742. package/dist/sandbox/errors.js.map +0 -1
  743. package/dist/sandbox/firecracker.d.ts +0 -15
  744. package/dist/sandbox/firecracker.d.ts.map +0 -1
  745. package/dist/sandbox/firecracker.js +0 -212
  746. package/dist/sandbox/firecracker.js.map +0 -1
  747. package/dist/sandbox/image.d.ts +0 -3
  748. package/dist/sandbox/image.d.ts.map +0 -1
  749. package/dist/sandbox/image.js +0 -27
  750. package/dist/sandbox/image.js.map +0 -1
  751. package/dist/sandbox/path-context.d.ts +0 -3
  752. package/dist/sandbox/path-context.d.ts.map +0 -1
  753. package/dist/sandbox/path-context.js +0 -20
  754. package/dist/sandbox/path-context.js.map +0 -1
  755. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  756. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  757. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  758. package/dist/sessions/metadata.d.ts +0 -3
  759. package/dist/sessions/metadata.d.ts.map +0 -1
  760. package/dist/sessions/metadata.js +0 -11
  761. package/dist/sessions/metadata.js.map +0 -1
  762. package/dist/sessions/policy.d.ts +0 -6
  763. package/dist/sessions/policy.d.ts.map +0 -1
  764. package/dist/sessions/policy.js +0 -24
  765. package/dist/sessions/policy.js.map +0 -1
  766. package/dist/store.d.ts +0 -46
  767. package/dist/store.d.ts.map +0 -1
  768. package/dist/store.js +0 -177
  769. package/dist/store.js.map +0 -1
  770. package/dist/tools/bash.d.ts +0 -10
  771. package/dist/tools/bash.d.ts.map +0 -1
  772. package/dist/tools/bash.js +0 -80
  773. package/dist/tools/bash.js.map +0 -1
  774. package/dist/tools/edit.d.ts +0 -11
  775. package/dist/tools/edit.d.ts.map +0 -1
  776. package/dist/tools/edit.js +0 -131
  777. package/dist/tools/edit.js.map +0 -1
  778. package/dist/tools/event.d.ts +0 -56
  779. package/dist/tools/event.d.ts.map +0 -1
  780. package/dist/tools/event.js +0 -252
  781. package/dist/tools/event.js.map +0 -1
  782. package/dist/tools/index.d.ts +0 -24
  783. package/dist/tools/index.d.ts.map +0 -1
  784. package/dist/tools/index.js +0 -31
  785. package/dist/tools/index.js.map +0 -1
  786. package/dist/tools/react.d.ts +0 -15
  787. package/dist/tools/react.d.ts.map +0 -1
  788. package/dist/tools/react.js +0 -40
  789. package/dist/tools/react.js.map +0 -1
  790. package/dist/tools/read.d.ts +0 -11
  791. package/dist/tools/read.d.ts.map +0 -1
  792. package/dist/tools/read.js +0 -134
  793. package/dist/tools/read.js.map +0 -1
  794. package/dist/tools/sandbox.d.ts +0 -22
  795. package/dist/tools/sandbox.d.ts.map +0 -1
  796. package/dist/tools/sandbox.js.map +0 -1
  797. package/dist/tools/truncate.d.ts +0 -33
  798. package/dist/tools/truncate.d.ts.map +0 -1
  799. package/dist/tools/truncate.js +0 -184
  800. package/dist/tools/truncate.js.map +0 -1
  801. package/dist/tools/types.d.ts +0 -54
  802. package/dist/tools/types.d.ts.map +0 -1
  803. package/dist/tools/types.js.map +0 -1
  804. package/dist/tools/write.d.ts +0 -10
  805. package/dist/tools/write.d.ts.map +0 -1
  806. package/dist/tools/write.js +0 -29
  807. package/dist/tools/write.js.map +0 -1
  808. package/dist/trigger.d.ts +0 -22
  809. package/dist/trigger.d.ts.map +0 -1
  810. package/dist/trigger.js +0 -100
  811. package/dist/trigger.js.map +0 -1
  812. package/dist/utils/date.d.ts +0 -10
  813. package/dist/utils/date.d.ts.map +0 -1
  814. package/dist/utils/date.js +0 -23
  815. package/dist/utils/date.js.map +0 -1
  816. package/dist/utils/env.d.ts +0 -3
  817. package/dist/utils/env.d.ts.map +0 -1
  818. package/dist/utils/env.js +0 -12
  819. package/dist/utils/env.js.map +0 -1
  820. package/dist/utils/file-guards.d.ts +0 -9
  821. package/dist/utils/file-guards.d.ts.map +0 -1
  822. package/dist/utils/file-guards.js +0 -59
  823. package/dist/utils/file-guards.js.map +0 -1
  824. package/dist/utils/fs-atomic.d.ts +0 -10
  825. package/dist/utils/fs-atomic.d.ts.map +0 -1
  826. package/dist/utils/fs-atomic.js +0 -45
  827. package/dist/utils/fs-atomic.js.map +0 -1
  828. package/dist/utils/html.d.ts +0 -2
  829. package/dist/utils/html.d.ts.map +0 -1
  830. package/dist/utils/html.js +0 -4
  831. package/dist/utils/html.js.map +0 -1
  832. package/dist/utils/http-body.d.ts +0 -10
  833. package/dist/utils/http-body.d.ts.map +0 -1
  834. package/dist/utils/http-body.js +0 -34
  835. package/dist/utils/http-body.js.map +0 -1
  836. package/dist/vault/routing.d.ts +0 -3
  837. package/dist/vault/routing.d.ts.map +0 -1
  838. package/dist/vault/routing.js +0 -13
  839. package/dist/vault/routing.js.map +0 -1
  840. package/dist/web/admin/portal.d.ts +0 -5
  841. package/dist/web/admin/portal.d.ts.map +0 -1
  842. package/dist/web/admin/portal.js +0 -2572
  843. package/dist/web/admin/portal.js.map +0 -1
  844. package/dist/web/admin/provider-models.d.ts.map +0 -1
  845. package/dist/web/admin/provider-models.js.map +0 -1
  846. package/dist/web/admin/store.d.ts +0 -13
  847. package/dist/web/admin/store.d.ts.map +0 -1
  848. package/dist/web/admin/store.js +0 -14
  849. package/dist/web/admin/store.js.map +0 -1
  850. package/dist/web/admin/types.d.ts +0 -30
  851. package/dist/web/admin/types.d.ts.map +0 -1
  852. package/dist/web/admin/types.js.map +0 -1
  853. package/dist/web/agent-events/portal.d.ts +0 -3
  854. package/dist/web/agent-events/portal.d.ts.map +0 -1
  855. package/dist/web/agent-events/portal.js +0 -18
  856. package/dist/web/agent-events/portal.js.map +0 -1
  857. package/dist/web/login/oauth.d.ts +0 -6
  858. package/dist/web/login/oauth.d.ts.map +0 -1
  859. package/dist/web/login/oauth.js.map +0 -1
  860. package/dist/web/login/portal.d.ts +0 -17
  861. package/dist/web/login/portal.d.ts.map +0 -1
  862. package/dist/web/login/portal.js.map +0 -1
  863. package/dist/web/login/store.d.ts +0 -8
  864. package/dist/web/login/store.d.ts.map +0 -1
  865. package/dist/web/login/store.js +0 -15
  866. package/dist/web/login/store.js.map +0 -1
  867. package/dist/web/login/types.d.ts.map +0 -1
  868. package/dist/web/login/types.js.map +0 -1
  869. package/dist/web/request.d.ts +0 -3
  870. package/dist/web/request.d.ts.map +0 -1
  871. package/dist/web/request.js +0 -13
  872. package/dist/web/request.js.map +0 -1
  873. package/dist/web/server.d.ts +0 -28
  874. package/dist/web/server.d.ts.map +0 -1
  875. package/dist/web/server.js.map +0 -1
  876. package/dist/web/session-view/command.d.ts +0 -4
  877. package/dist/web/session-view/command.d.ts.map +0 -1
  878. package/dist/web/session-view/command.js +0 -7
  879. package/dist/web/session-view/command.js.map +0 -1
  880. package/dist/web/session-view/portal.d.ts +0 -13
  881. package/dist/web/session-view/portal.d.ts.map +0 -1
  882. package/dist/web/session-view/portal.js.map +0 -1
  883. package/dist/web/session-view/service.d.ts +0 -6
  884. package/dist/web/session-view/service.d.ts.map +0 -1
  885. package/dist/web/session-view/service.js +0 -498
  886. package/dist/web/session-view/service.js.map +0 -1
  887. package/dist/web/session-view/store.d.ts +0 -8
  888. package/dist/web/session-view/store.d.ts.map +0 -1
  889. package/dist/web/session-view/store.js +0 -15
  890. package/dist/web/session-view/store.js.map +0 -1
  891. package/dist/web/session-view/types.js.map +0 -1
  892. package/dist/web/token-store.d.ts.map +0 -1
  893. package/dist/web/token-store.js.map +0 -1
  894. package/dist/web/types.d.ts.map +0 -1
  895. package/dist/web/types.js.map +0 -1
  896. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  897. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  898. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  899. /package/dist/{commands → adapters/commands}/types.js +0 -0
  900. /package/dist/{harness/extensions → adapters/web/admin}/types.js +0 -0
  901. /package/dist/{tools → adapters/web/login}/types.js +0 -0
  902. /package/dist/{web/admin → adapters/web/session-view}/types.js +0 -0
  903. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  904. /package/dist/{web/login → adapters/web}/types.js +0 -0
  905. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  906. /package/dist/{web/session-view → cli}/types.js +0 -0
  907. /package/dist/{web → harness/tools}/types.js +0 -0
@@ -0,0 +1,971 @@
1
+ import { execFile } from "node:child_process";
2
+ import { legacyConversationResourceKey, sanitizeIdentitySegment } from "./identity.js";
3
+ import { GUEST_HOME, GUEST_PUBLIC_OFFICES_DIR } from "./layout.js";
4
+ import { createHash } from "node:crypto";
5
+ import { readFileSync, statSync } from "node:fs";
6
+ import { promisify } from "node:util";
7
+ import * as log from "../log.js";
8
+ import { reportUserFacingError } from "../observability/index.js";
9
+ const execFileAsync = promisify(execFile);
10
+ function isDockerNotFoundError(err) {
11
+ if (!err || typeof err !== "object")
12
+ return false;
13
+ const stderr = err.stderr;
14
+ const message = err.message;
15
+ const haystack = `${typeof stderr === "string" ? stderr : ""}\n${typeof message === "string" ? message : ""}`.toLowerCase();
16
+ return (haystack.includes("no such network") ||
17
+ haystack.includes("no such container") ||
18
+ haystack.includes("no such object") ||
19
+ haystack.includes("network not found") ||
20
+ /network [^\n]+ not found/.test(haystack) ||
21
+ /error: no such [^\n]+/.test(haystack));
22
+ }
23
+ import { errorMessage } from "../unknown-values.js";
24
+ function bindSpecToMount(bindSpec) {
25
+ const readOnly = bindSpec.endsWith(":ro");
26
+ const spec = readOnly ? bindSpec.slice(0, -3) : bindSpec;
27
+ const separator = spec.indexOf(":");
28
+ return {
29
+ source: spec.slice(0, separator),
30
+ target: spec.slice(separator + 1),
31
+ readOnly: readOnly ? true : undefined,
32
+ };
33
+ }
34
+ export class DockerContainerManager {
35
+ static { this.MANAGED_LABEL = "mikan.managed=true"; }
36
+ static { this.IMAGE_MODE_LABEL = "mikan.sandbox=image"; }
37
+ static { this.VAULT_ID_LABEL_KEY = "mikan.vault-id"; }
38
+ static { this.CONVERSATION_ID_LABEL_KEY = "mikan.conversation-id"; }
39
+ static { this.MOUNT_SIGNATURE_LABEL_KEY = "mikan.mount-signature"; }
40
+ static { this.MIGRATE_IMAGE_PREFIX = "mikan-migrate"; }
41
+ static { this.MIGRATE_BINDS_LABEL_KEY = "mikan.migrate-binds"; }
42
+ constructor(image, options = {}) {
43
+ this.image = image;
44
+ this.state = new Map();
45
+ this.inflight = new Map();
46
+ this.layoutMigrations = new Map();
47
+ this.keyQueues = new Map();
48
+ this.boostedKeys = new Set();
49
+ this.overrideLimits = new Map();
50
+ this.limits = options.limits;
51
+ this.boostLimits = options.boostLimits;
52
+ this.execFileImpl = options.execFileImpl ?? execFileAsync;
53
+ }
54
+ static sanitizeSegment(value) {
55
+ return sanitizeIdentitySegment(value);
56
+ }
57
+ static containerName(containerKey) {
58
+ return `mikan-sandbox-${containerKey}`;
59
+ }
60
+ static networkName(containerKey) {
61
+ return `mikan-sandbox-net-${containerKey}`;
62
+ }
63
+ static homeVolumeName(containerKey) {
64
+ return `mikan-home-${containerKey}`;
65
+ }
66
+ serialize(containerKey, task) {
67
+ const previous = this.keyQueues.get(containerKey) ?? Promise.resolve();
68
+ const next = previous.then(task, task);
69
+ const settled = next.catch(() => undefined);
70
+ this.keyQueues.set(containerKey, settled);
71
+ void settled.then(() => {
72
+ if (this.keyQueues.get(containerKey) === settled)
73
+ this.keyQueues.delete(containerKey);
74
+ });
75
+ return next;
76
+ }
77
+ async provision(containerKey, options = {}) {
78
+ const existing = this.inflight.get(containerKey);
79
+ if (existing)
80
+ return existing;
81
+ const pending = this.serialize(containerKey, () => this.provisionInner(containerKey, options)).finally(() => {
82
+ this.inflight.delete(containerKey);
83
+ });
84
+ this.inflight.set(containerKey, pending);
85
+ return pending;
86
+ }
87
+ async provisionInner(containerKey, options) {
88
+ const containerName = options.containerName ?? DockerContainerManager.containerName(containerKey);
89
+ const mounts = options.mounts ?? [];
90
+ await this.migrateContainerLayout(containerName);
91
+ const status = await this.inspectStatus(containerName);
92
+ try {
93
+ const binds = status === "missing" ? [] : await this.inspectBindMounts(containerName);
94
+ const homeVolume = this.hasHomeVolumeBind(containerKey, binds);
95
+ const drift = status === "missing"
96
+ ? undefined
97
+ : await this.runtimeDrift(containerKey, containerName, mounts, {
98
+ binds,
99
+ status,
100
+ homeVolume,
101
+ });
102
+ if (drift && homeVolume) {
103
+ log.logInfo(`Container ${containerName} is out of date (${drift}); replacing container`);
104
+ await this.replaceHomeVolumeContainer(containerKey, containerName, mounts, options);
105
+ log.logInfo(`Container ${containerName} replaced from image ${this.image}`);
106
+ }
107
+ else if (drift) {
108
+ log.logInfo(`Container ${containerName} configuration changed (${drift}); recreating container`);
109
+ await this.recreateContainerPreservingContents(containerKey, containerName, mounts);
110
+ log.logInfo(`Container ${containerName} recreated`);
111
+ }
112
+ else if (status === "stopped") {
113
+ await this.execFileImpl("docker", ["start", containerName]);
114
+ log.logInfo(`Container ${containerName} started`);
115
+ }
116
+ else if (status === "missing") {
117
+ await this.runContainer(containerKey, containerName, mounts, options);
118
+ log.logInfo(`Container ${containerName} created`);
119
+ }
120
+ }
121
+ catch (err) {
122
+ this.state.delete(containerKey);
123
+ throw err;
124
+ }
125
+ this.setState(containerKey, "running", containerName);
126
+ await this.applyResourceLimits(containerKey, containerName);
127
+ return containerName;
128
+ }
129
+ async boost(containerKey) {
130
+ if (!this.boostLimits?.cpus && !this.boostLimits?.memory) {
131
+ return this.getLimitStatus(containerKey);
132
+ }
133
+ this.overrideLimits.delete(containerKey);
134
+ this.boostedKeys.add(containerKey);
135
+ const state = this.state.get(containerKey);
136
+ if (state?.status === "running") {
137
+ await this.applyResourceLimits(containerKey, state.containerName);
138
+ }
139
+ return this.getLimitStatus(containerKey);
140
+ }
141
+ async setLimits(containerKey, limits) {
142
+ this.boostedKeys.delete(containerKey);
143
+ this.overrideLimits.set(containerKey, { ...this.limits, ...limits });
144
+ const state = this.state.get(containerKey);
145
+ if (state?.status === "running") {
146
+ await this.applyResourceLimits(containerKey, state.containerName);
147
+ }
148
+ return this.getLimitStatus(containerKey);
149
+ }
150
+ getLimitStatus(containerKey) {
151
+ const boosted = this.boostedKeys.has(containerKey);
152
+ return { limits: this.effectiveLimits(containerKey), boosted };
153
+ }
154
+ getDefaultLimits() {
155
+ return this.limits;
156
+ }
157
+ getBoostLimits() {
158
+ return this.boostLimits;
159
+ }
160
+ stop(containerKey) {
161
+ return this.serialize(containerKey, () => this.stopInner(containerKey));
162
+ }
163
+ async stopInner(containerKey) {
164
+ const containerName = this.getContainerName(containerKey);
165
+ try {
166
+ await this.execFileImpl("docker", ["stop", containerName]);
167
+ this.setState(containerKey, "stopped", containerName);
168
+ this.boostedKeys.delete(containerKey);
169
+ this.overrideLimits.delete(containerKey);
170
+ log.logInfo(`Container ${containerName} stopped (idle)`);
171
+ }
172
+ catch (err) {
173
+ log.logWarning(`Failed to stop container ${containerName}`, errorMessage(err));
174
+ }
175
+ }
176
+ remove(containerKey, options = {}) {
177
+ return this.serialize(containerKey, () => this.removeInner(containerKey, options));
178
+ }
179
+ async removeInner(containerKey, options) {
180
+ const containerName = this.getContainerName(containerKey);
181
+ const networkName = DockerContainerManager.networkName(containerKey);
182
+ const removed = await this.forceRemoveContainer(containerName, `Container ${containerName} removed`, `Failed to remove container ${containerName}`);
183
+ if (!removed) {
184
+ throw new Error(`Failed to remove container ${containerName}`);
185
+ }
186
+ try {
187
+ await this.execFileImpl("docker", ["network", "rm", networkName]);
188
+ log.logInfo(`Network ${networkName} removed`);
189
+ }
190
+ catch (err) {
191
+ log.logWarning(`Failed to remove network ${networkName}`, errorMessage(err));
192
+ }
193
+ await this.removeMigrateSnapshot(containerName);
194
+ if (options.purgeHome)
195
+ await this.removeHomeVolume(containerKey);
196
+ this.state.delete(containerKey);
197
+ this.boostedKeys.delete(containerKey);
198
+ this.overrideLimits.delete(containerKey);
199
+ }
200
+ async stopIdle(maxIdleMs) {
201
+ const now = Date.now();
202
+ const toStop = [];
203
+ for (const [containerKey, containerState] of this.state) {
204
+ if (containerState.status === "running" && now - containerState.lastUsed > maxIdleMs) {
205
+ toStop.push(containerKey);
206
+ }
207
+ }
208
+ await Promise.all(toStop.map((containerKey) => this.stop(containerKey)));
209
+ }
210
+ async removeContainersForConversations(conversationIds) {
211
+ if (conversationIds.size === 0)
212
+ return;
213
+ const names = await this.listContainerNamesByLabel();
214
+ await Promise.all(names.map(async (containerName) => {
215
+ const details = await this.inspectContainerDetails(containerName);
216
+ if (!details?.conversationId || !conversationIds.has(details.conversationId))
217
+ return;
218
+ const removed = await this.forceRemoveContainer(containerName, `Removed container ${containerName} after office migration`, `Failed to remove container ${containerName} after office migration`);
219
+ const containerKey = this.containerKeyFromContainerName(containerName);
220
+ if (removed && containerKey)
221
+ await this.removeHomeVolume(containerKey);
222
+ }));
223
+ }
224
+ armContainerLayoutMigration(translator) {
225
+ this.bindTranslator = translator;
226
+ }
227
+ async sweepContainerLayoutMigration(delayMs = 2000) {
228
+ if (!this.bindTranslator)
229
+ return;
230
+ let names;
231
+ try {
232
+ const containers = await this.listContainerNamesByLabel();
233
+ const snapshots = await this.listMigrateSnapshotContainerNames();
234
+ names = Array.from(new Set([...containers, ...snapshots]));
235
+ }
236
+ catch (err) {
237
+ log.logWarning("Container layout sweep could not list containers", String(err));
238
+ return;
239
+ }
240
+ for (const containerName of names) {
241
+ try {
242
+ await this.migrateContainerLayout(containerName);
243
+ }
244
+ catch (err) {
245
+ log.logWarning(`Container layout migration failed for ${containerName}; leaving it in place`, errorMessage(err));
246
+ }
247
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
248
+ }
249
+ await this.removeDanglingMigrateImages();
250
+ }
251
+ migrateContainerLayout(containerName) {
252
+ const translator = this.bindTranslator;
253
+ if (!translator)
254
+ return Promise.resolve();
255
+ const existing = this.layoutMigrations.get(containerName);
256
+ if (existing)
257
+ return existing;
258
+ const pending = this.migrateContainerLayoutInner(containerName, translator).finally(() => {
259
+ this.layoutMigrations.delete(containerName);
260
+ });
261
+ this.layoutMigrations.set(containerName, pending);
262
+ return pending;
263
+ }
264
+ async migrateContainerLayoutInner(containerName, translator) {
265
+ const snapshotImage = `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`;
266
+ let originalBinds;
267
+ const status = await this.inspectStatus(containerName);
268
+ if (status === "missing") {
269
+ const labeled = await this.readMigrateImageBinds(snapshotImage);
270
+ if (labeled === undefined)
271
+ return;
272
+ originalBinds = labeled;
273
+ }
274
+ else {
275
+ originalBinds = await this.inspectBindMounts(containerName);
276
+ const translated = originalBinds.map(translator);
277
+ if (this.sameBinds(translated.toSorted(), originalBinds.slice().toSorted())) {
278
+ return;
279
+ }
280
+ log.logInfo(`Migrating container ${containerName} to the office layout`);
281
+ await this.execFileImpl("docker", [
282
+ "commit",
283
+ "-c",
284
+ `LABEL ${DockerContainerManager.MIGRATE_BINDS_LABEL_KEY}=${JSON.stringify(JSON.stringify(originalBinds))}`,
285
+ containerName,
286
+ snapshotImage,
287
+ ]);
288
+ await this.execFileImpl("docker", ["rm", "-f", containerName]);
289
+ }
290
+ await this.createContainerFromSnapshot(containerName, originalBinds.map(translator));
291
+ await this.removeMigrateSnapshot(containerName);
292
+ log.logInfo(`Container ${containerName} migrated to the office layout`);
293
+ }
294
+ async createContainerFromSnapshot(containerName, bindSpecs, knownContainerKey) {
295
+ const snapshotImage = `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`;
296
+ const containerKey = knownContainerKey ?? this.containerKeyFromContainerName(containerName) ?? containerName;
297
+ const networkName = await this.ensureNetwork(containerKey);
298
+ const conversationId = await this.readImageLabel(snapshotImage, DockerContainerManager.CONVERSATION_ID_LABEL_KEY);
299
+ const labels = [
300
+ "--label",
301
+ DockerContainerManager.MANAGED_LABEL,
302
+ "--label",
303
+ DockerContainerManager.IMAGE_MODE_LABEL,
304
+ "--label",
305
+ `${DockerContainerManager.VAULT_ID_LABEL_KEY}=${containerKey}`,
306
+ ];
307
+ if (conversationId) {
308
+ labels.push("--label", `${DockerContainerManager.CONVERSATION_ID_LABEL_KEY}=${conversationId}`);
309
+ }
310
+ labels.push("--label", `${DockerContainerManager.MOUNT_SIGNATURE_LABEL_KEY}=${this.mountSignature(bindSpecs.map(bindSpecToMount))}`);
311
+ await this.execFileImpl("docker", [
312
+ "create",
313
+ "--name",
314
+ containerName,
315
+ "--network",
316
+ networkName,
317
+ "--cap-drop",
318
+ "ALL",
319
+ "--security-opt",
320
+ "no-new-privileges",
321
+ "--pids-limit",
322
+ "1024",
323
+ ...labels,
324
+ ...this.resourceLimitArgs(this.effectiveLimits(containerKey)),
325
+ ...bindSpecs.flatMap((bind) => ["-v", bind]),
326
+ snapshotImage,
327
+ "sleep",
328
+ "infinity",
329
+ ]);
330
+ }
331
+ async removeStaleMountpoints(containerName, bindSpecs) {
332
+ const keep = new Set(bindSpecs
333
+ .map((bind) => bindSpecToMount(bind).target)
334
+ .filter((target) => target.startsWith(`${GUEST_PUBLIC_OFFICES_DIR}/`))
335
+ .map((target) => target.slice(GUEST_PUBLIC_OFFICES_DIR.length + 1)));
336
+ const script = [
337
+ `cd ${GUEST_PUBLIC_OFFICES_DIR} 2>/dev/null || exit 0`,
338
+ "for d in *; do",
339
+ ' [ -e "$d" ] || continue',
340
+ ' case " $KEEP " in *" ${d##*/} "*) continue;; esac',
341
+ ' rmdir "$d" 2>/dev/null || true',
342
+ "done",
343
+ ].join("\n");
344
+ try {
345
+ await this.execFileImpl("docker", [
346
+ "exec",
347
+ "-e",
348
+ `KEEP=${[...keep].join(" ")}`,
349
+ containerName,
350
+ "sh",
351
+ "-c",
352
+ script,
353
+ ]);
354
+ }
355
+ catch (err) {
356
+ log.logWarning(`Could not clean stale mountpoints in ${containerName}`, String(err));
357
+ }
358
+ }
359
+ async recreateContainerPreservingContents(containerKey, containerName, mounts) {
360
+ const snapshotImage = `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`;
361
+ const bindSpecs = mounts.map((mount) => this.toBindSpec(mount));
362
+ await this.execFileImpl("docker", [
363
+ "commit",
364
+ "-c",
365
+ `LABEL ${DockerContainerManager.MIGRATE_BINDS_LABEL_KEY}=${JSON.stringify(JSON.stringify(bindSpecs))}`,
366
+ containerName,
367
+ snapshotImage,
368
+ ]);
369
+ await this.execFileImpl("docker", ["rm", "-f", containerName]);
370
+ await this.createContainerFromSnapshot(containerName, bindSpecs, containerKey);
371
+ await this.execFileImpl("docker", ["start", containerName]);
372
+ await this.removeStaleMountpoints(containerName, bindSpecs);
373
+ await this.removeMigrateSnapshot(containerName);
374
+ }
375
+ async readMigrateImageBinds(snapshotImage) {
376
+ const raw = await this.readImageLabel(snapshotImage, DockerContainerManager.MIGRATE_BINDS_LABEL_KEY);
377
+ if (raw === undefined)
378
+ return undefined;
379
+ const parsed = JSON.parse(raw);
380
+ if (!Array.isArray(parsed) || parsed.some((bind) => typeof bind !== "string")) {
381
+ throw new Error(`Snapshot image ${snapshotImage} carries malformed migrate binds`);
382
+ }
383
+ return parsed;
384
+ }
385
+ async readImageLabel(image, key) {
386
+ try {
387
+ const { stdout } = await this.execFileImpl("docker", [
388
+ "inspect",
389
+ "-f",
390
+ `{{index .Config.Labels "${key}"}}`,
391
+ image,
392
+ ]);
393
+ return this.normalizeDockerValue(stdout.trim());
394
+ }
395
+ catch {
396
+ return undefined;
397
+ }
398
+ }
399
+ async removeMigrateSnapshot(containerName) {
400
+ try {
401
+ await this.execFileImpl("docker", [
402
+ "rmi",
403
+ `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`,
404
+ ]);
405
+ }
406
+ catch { }
407
+ }
408
+ async listMigrateSnapshotContainerNames() {
409
+ try {
410
+ const { stdout } = await this.execFileImpl("docker", [
411
+ "images",
412
+ DockerContainerManager.MIGRATE_IMAGE_PREFIX,
413
+ "--format",
414
+ "{{.Tag}}",
415
+ ]);
416
+ return this.parseNameLines(stdout);
417
+ }
418
+ catch {
419
+ return [];
420
+ }
421
+ }
422
+ async removeDanglingMigrateImages() {
423
+ let stdout;
424
+ try {
425
+ ({ stdout } = await this.execFileImpl("docker", [
426
+ "images",
427
+ `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}`,
428
+ "--format",
429
+ "{{.Repository}}:{{.Tag}}",
430
+ ]));
431
+ }
432
+ catch {
433
+ return;
434
+ }
435
+ for (const image of this.parseNameLines(stdout)) {
436
+ const containerName = image.slice(DockerContainerManager.MIGRATE_IMAGE_PREFIX.length + 1);
437
+ const status = await this.inspectStatus(containerName);
438
+ if (status === "missing")
439
+ continue;
440
+ if (await this.containerRunsFromImage(containerName, image))
441
+ continue;
442
+ try {
443
+ await this.execFileImpl("docker", ["rmi", image]);
444
+ log.logInfo(`Removed layout-migration snapshot image ${image}`);
445
+ }
446
+ catch (err) {
447
+ log.logWarning(`Could not remove snapshot image ${image}`, String(err));
448
+ }
449
+ }
450
+ }
451
+ async containerRunsFromImage(containerName, image) {
452
+ const { stdout } = await this.execFileImpl("docker", [
453
+ "inspect",
454
+ "-f",
455
+ "{{.Config.Image}}",
456
+ containerName,
457
+ ]);
458
+ return stdout.trim() === image;
459
+ }
460
+ async reconcile() {
461
+ const discovered = new Set();
462
+ const labeledNames = await this.listContainerNamesByLabel();
463
+ for (const name of labeledNames)
464
+ discovered.add(name);
465
+ const legacyNames = await this.listContainerNamesByPrefix();
466
+ for (const name of legacyNames)
467
+ discovered.add(name);
468
+ this.state.clear();
469
+ const inspected = await Promise.all(Array.from(discovered).map(async (containerName) => ({
470
+ containerName,
471
+ details: await this.inspectContainerDetails(containerName),
472
+ })));
473
+ const legacyRemovals = [];
474
+ for (const { containerName, details } of inspected) {
475
+ if (!details)
476
+ continue;
477
+ if (!details.conversationId) {
478
+ legacyRemovals.push(this.removeLegacyContainer(containerName));
479
+ continue;
480
+ }
481
+ const containerKey = this.containerKeyFromContainerName(containerName);
482
+ if (!containerKey) {
483
+ log.logWarning(`Skipping unmanaged-style container without container key`, containerName);
484
+ continue;
485
+ }
486
+ if (containerKey === legacyConversationResourceKey(details.conversationId)) {
487
+ legacyRemovals.push(this.forceRemoveContainer(containerName, `Removed container ${containerName} keyed by pre-office resource identity`, `Failed to remove legacy-keyed container ${containerName}`).then(() => undefined));
488
+ continue;
489
+ }
490
+ const status = details.running ? "running" : "stopped";
491
+ const lastUsed = details.startedAtMs ?? Date.now();
492
+ this.state.set(containerKey, { status, lastUsed, containerName });
493
+ }
494
+ await Promise.all(legacyRemovals);
495
+ const running = Array.from(this.state.values()).filter((s) => s.status === "running").length;
496
+ const stopped = this.state.size - running;
497
+ log.logInfo(`Reconciled ${this.state.size} managed containers (running=${running}, stopped=${stopped})`);
498
+ }
499
+ setState(containerKey, status, containerName) {
500
+ this.state.set(containerKey, { status, lastUsed: Date.now(), containerName });
501
+ }
502
+ getContainerName(containerKey) {
503
+ return (this.state.get(containerKey)?.containerName ??
504
+ DockerContainerManager.containerName(containerKey));
505
+ }
506
+ mountArgs(mounts) {
507
+ return mounts.flatMap((mount) => ["-v", this.toBindSpec(mount)]);
508
+ }
509
+ toBindSpec(mount) {
510
+ return `${mount.source}:${mount.target}${mount.readOnly ? ":ro" : ""}`;
511
+ }
512
+ async runContainer(containerKey, containerName, mounts, options) {
513
+ const networkName = await this.ensureNetwork(containerKey);
514
+ const homeVolume = await this.ensureHomeVolume(containerKey);
515
+ log.logInfo(`Creating container ${containerName} from image ${this.image}`);
516
+ const labels = [
517
+ "--label",
518
+ DockerContainerManager.MANAGED_LABEL,
519
+ "--label",
520
+ DockerContainerManager.IMAGE_MODE_LABEL,
521
+ "--label",
522
+ `${DockerContainerManager.VAULT_ID_LABEL_KEY}=${containerKey}`,
523
+ ];
524
+ if (options.conversationId) {
525
+ labels.push("--label", `${DockerContainerManager.CONVERSATION_ID_LABEL_KEY}=${options.conversationId}`);
526
+ }
527
+ if (mounts.length > 0) {
528
+ labels.push("--label", `${DockerContainerManager.MOUNT_SIGNATURE_LABEL_KEY}=${this.mountSignature(mounts)}`);
529
+ }
530
+ await this.execFileImpl("docker", [
531
+ "run",
532
+ "-d",
533
+ "--name",
534
+ containerName,
535
+ "--network",
536
+ networkName,
537
+ "--cap-drop",
538
+ "ALL",
539
+ "--security-opt",
540
+ "no-new-privileges",
541
+ "--pids-limit",
542
+ "1024",
543
+ ...labels,
544
+ ...this.resourceLimitArgs(this.effectiveLimits(containerKey)),
545
+ "-v",
546
+ `${homeVolume}:${GUEST_HOME}`,
547
+ ...this.mountArgs(mounts),
548
+ this.image,
549
+ "sleep",
550
+ "infinity",
551
+ ]);
552
+ }
553
+ effectiveLimits(containerKey) {
554
+ const override = this.overrideLimits.get(containerKey);
555
+ if (override)
556
+ return override;
557
+ if (!this.boostedKeys.has(containerKey))
558
+ return this.limits;
559
+ return { ...this.limits, ...this.boostLimits };
560
+ }
561
+ resourceLimitArgs(limits) {
562
+ const args = [];
563
+ if (limits?.cpus)
564
+ args.push("--cpus", limits.cpus);
565
+ if (limits?.memory) {
566
+ args.push("--memory", limits.memory);
567
+ args.push("--memory-swap", limits.memory);
568
+ }
569
+ return args;
570
+ }
571
+ async applyResourceLimits(containerKey, containerName) {
572
+ const limitArgs = this.resourceLimitArgs(this.effectiveLimits(containerKey));
573
+ if (limitArgs.length === 0)
574
+ return;
575
+ const args = ["update", ...limitArgs, containerName];
576
+ try {
577
+ await this.execFileImpl("docker", args);
578
+ }
579
+ catch (err) {
580
+ log.logWarning(`Failed to apply resource limits to container ${containerName}`, errorMessage(err));
581
+ reportUserFacingError(err, {
582
+ domain: "sandbox",
583
+ surface: "sandbox_provision",
584
+ operation: "apply_resource_limits",
585
+ severity: "warning",
586
+ context: {
587
+ sandboxType: "image",
588
+ containerKey,
589
+ containerName,
590
+ limitArgCount: limitArgs.length,
591
+ fatal: false,
592
+ },
593
+ });
594
+ }
595
+ }
596
+ async runtimeDrift(containerKey, containerName, mounts, current) {
597
+ const { binds, status, homeVolume } = current;
598
+ if (this.hasBindMountDrift(binds, mounts))
599
+ return "binds";
600
+ if (await this.hasMountSignatureDrift(containerName, mounts))
601
+ return "mount-content";
602
+ if (await this.hasNetworkModeDrift(containerKey, containerName))
603
+ return "network";
604
+ if (homeVolume && status === "stopped" && (await this.hasImageDrift(containerName))) {
605
+ return "image";
606
+ }
607
+ return undefined;
608
+ }
609
+ hasBindMountDrift(binds, mounts) {
610
+ const expected = this.expectedBinds(mounts);
611
+ const actual = binds.filter((bind) => !this.isHomeVolumeBind(bind));
612
+ return !this.sameBinds(expected, actual);
613
+ }
614
+ expectedBinds(mounts) {
615
+ return mounts
616
+ .map((mount) => this.toBindSpec(mount))
617
+ .slice()
618
+ .toSorted();
619
+ }
620
+ sameBinds(expected, actual) {
621
+ if (expected.length !== actual.length) {
622
+ return false;
623
+ }
624
+ return expected.every((bind, index) => bind === actual[index]);
625
+ }
626
+ async hasMountSignatureDrift(containerName, mounts) {
627
+ if (mounts.length === 0)
628
+ return false;
629
+ const expected = this.mountSignature(mounts);
630
+ const { stdout } = await this.execFileImpl("docker", [
631
+ "inspect",
632
+ "-f",
633
+ `{{index .Config.Labels "${DockerContainerManager.MOUNT_SIGNATURE_LABEL_KEY}"}}`,
634
+ containerName,
635
+ ]);
636
+ const actual = this.normalizeDockerValue(stdout.trim());
637
+ return actual !== expected;
638
+ }
639
+ mountSignature(mounts) {
640
+ const payload = mounts
641
+ .map((mount) => ({
642
+ source: mount.source,
643
+ target: mount.target,
644
+ fingerprint: this.mountSourceFingerprint(mount.source),
645
+ }))
646
+ .toSorted((left, right) => `${left.target}\0${left.source}`.localeCompare(`${right.target}\0${right.source}`));
647
+ return createHash("sha256").update(JSON.stringify(payload)).digest("hex");
648
+ }
649
+ mountSourceFingerprint(source) {
650
+ try {
651
+ const stat = statSync(source);
652
+ if (stat.isFile()) {
653
+ return createHash("sha256").update(readFileSync(source)).digest("hex");
654
+ }
655
+ return `${stat.isDirectory() ? "dir" : "other"}:${stat.dev}:${stat.ino}:${stat.birthtimeMs}`;
656
+ }
657
+ catch {
658
+ return "missing";
659
+ }
660
+ }
661
+ async inspectBindMounts(containerName) {
662
+ const { stdout } = await this.execFileImpl("docker", [
663
+ "inspect",
664
+ "-f",
665
+ "{{json .HostConfig.Binds}}",
666
+ containerName,
667
+ ]);
668
+ const payload = stdout.trim();
669
+ const parsed = JSON.parse(payload.length > 0 ? payload : "null");
670
+ if (parsed === null) {
671
+ return [];
672
+ }
673
+ if (!Array.isArray(parsed) || parsed.some((bind) => typeof bind !== "string")) {
674
+ throw new Error(`Unexpected docker bind mount payload for container "${containerName}"`);
675
+ }
676
+ return [...parsed].toSorted();
677
+ }
678
+ isHomeVolumeBind(bind) {
679
+ const separator = bind.indexOf(":");
680
+ if (separator === -1)
681
+ return false;
682
+ const source = bind.slice(0, separator);
683
+ const target = bind.slice(separator + 1).replace(/:r[ow]$/, "");
684
+ return source.startsWith(DockerContainerManager.homeVolumeName("")) && target === GUEST_HOME;
685
+ }
686
+ hasHomeVolumeBind(containerKey, binds) {
687
+ const expected = `${DockerContainerManager.homeVolumeName(containerKey)}:${GUEST_HOME}`;
688
+ return binds.includes(expected);
689
+ }
690
+ async hasHomeVolume(containerKey, containerName) {
691
+ return this.hasHomeVolumeBind(containerKey, await this.inspectBindMounts(containerName));
692
+ }
693
+ async hasImageDrift(containerName) {
694
+ const desired = await this.localImageId();
695
+ if (!desired)
696
+ return false;
697
+ const { stdout } = await this.execFileImpl("docker", [
698
+ "inspect",
699
+ "-f",
700
+ "{{.Image}}",
701
+ containerName,
702
+ ]);
703
+ return stdout.trim() !== desired;
704
+ }
705
+ async localImageId() {
706
+ try {
707
+ const { stdout } = await this.execFileImpl("docker", [
708
+ "image",
709
+ "inspect",
710
+ "-f",
711
+ "{{.Id}}",
712
+ this.image,
713
+ ]);
714
+ return this.normalizeDockerValue(stdout.trim());
715
+ }
716
+ catch {
717
+ return undefined;
718
+ }
719
+ }
720
+ async ensureHomeVolume(containerKey) {
721
+ const volumeName = DockerContainerManager.homeVolumeName(containerKey);
722
+ await this.execFileImpl("docker", [
723
+ "volume",
724
+ "create",
725
+ "--label",
726
+ DockerContainerManager.MANAGED_LABEL,
727
+ "--label",
728
+ `${DockerContainerManager.VAULT_ID_LABEL_KEY}=${containerKey}`,
729
+ volumeName,
730
+ ]);
731
+ return volumeName;
732
+ }
733
+ async removeHomeVolume(containerKey) {
734
+ const volumeName = DockerContainerManager.homeVolumeName(containerKey);
735
+ try {
736
+ await this.execFileImpl("docker", ["volume", "rm", volumeName]);
737
+ log.logInfo(`Home volume ${volumeName} removed`);
738
+ }
739
+ catch (err) {
740
+ if (isDockerNotFoundError(err))
741
+ return;
742
+ log.logWarning(`Failed to remove home volume ${volumeName}`, errorMessage(err));
743
+ }
744
+ }
745
+ async replaceHomeVolumeContainer(containerKey, containerName, mounts, options) {
746
+ const removed = await this.forceRemoveContainer(containerName, `Container ${containerName} removed for replacement`, `Failed to remove container ${containerName} for replacement`);
747
+ if (!removed)
748
+ throw new Error(`Failed to remove container ${containerName} for replacement`);
749
+ await this.runContainer(containerKey, containerName, mounts, options);
750
+ }
751
+ async inventory() {
752
+ const names = await this.listContainerNamesByLabel();
753
+ const entries = [];
754
+ for (const containerName of names) {
755
+ const containerKey = this.containerKeyFromContainerName(containerName);
756
+ const status = await this.inspectStatus(containerName);
757
+ if (status === "missing")
758
+ continue;
759
+ const homeVolume = containerKey
760
+ ? await this.hasHomeVolume(containerKey, containerName)
761
+ : false;
762
+ entries.push({
763
+ containerName,
764
+ containerKey,
765
+ running: status === "running",
766
+ homeVolume,
767
+ imageStale: await this.hasImageDrift(containerName),
768
+ });
769
+ }
770
+ return entries;
771
+ }
772
+ async systemChanges(containerName) {
773
+ const { stdout } = await this.execFileImpl("docker", ["diff", containerName]);
774
+ return this.parseNameLines(stdout).filter((line) => {
775
+ const path = line.slice(2);
776
+ return !this.isUnderGuestPath(path, GUEST_HOME) && !this.isUnderGuestPath(path, "/workspace");
777
+ });
778
+ }
779
+ isUnderGuestPath(path, root) {
780
+ return path === root || path.startsWith(`${root}/`);
781
+ }
782
+ migrateToHomeVolume(containerKey) {
783
+ return this.serialize(containerKey, () => this.migrateToHomeVolumeInner(containerKey));
784
+ }
785
+ async migrateToHomeVolumeInner(containerKey) {
786
+ const containerName = DockerContainerManager.containerName(containerKey);
787
+ const status = await this.inspectStatus(containerName);
788
+ if (status === "missing")
789
+ return "missing";
790
+ if (await this.hasHomeVolume(containerKey, containerName))
791
+ return "already-migrated";
792
+ const details = await this.inspectContainerDetails(containerName);
793
+ const mounts = (await this.inspectBindMounts(containerName))
794
+ .filter((bind) => !this.isHomeVolumeBind(bind))
795
+ .map(bindSpecToMount);
796
+ const snapshotImage = `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`;
797
+ log.logInfo(`Migrating container ${containerName} to a home volume`);
798
+ await this.execFileImpl("docker", ["commit", containerName, snapshotImage]);
799
+ const homeVolume = await this.ensureHomeVolume(containerKey);
800
+ await this.execFileImpl("docker", [
801
+ "run",
802
+ "--rm",
803
+ "--network",
804
+ "none",
805
+ "-v",
806
+ `${homeVolume}:${GUEST_HOME}`,
807
+ snapshotImage,
808
+ "true",
809
+ ]);
810
+ const removed = await this.forceRemoveContainer(containerName, `Container ${containerName} removed for home-volume migration`, `Failed to remove container ${containerName} for home-volume migration`);
811
+ if (!removed)
812
+ throw new Error(`Failed to remove container ${containerName}`);
813
+ await this.runContainer(containerKey, containerName, mounts, details?.conversationId ? { conversationId: details.conversationId } : {});
814
+ if (status === "stopped")
815
+ await this.execFileImpl("docker", ["stop", containerName]);
816
+ await this.removeMigrateSnapshot(containerName);
817
+ this.setState(containerKey, status === "stopped" ? "stopped" : "running", containerName);
818
+ log.logInfo(`Container ${containerName} migrated to home volume ${homeVolume}`);
819
+ return "migrated";
820
+ }
821
+ async hasNetworkModeDrift(containerKey, containerName) {
822
+ const expected = DockerContainerManager.networkName(containerKey);
823
+ const { stdout } = await this.execFileImpl("docker", [
824
+ "inspect",
825
+ "-f",
826
+ "{{.HostConfig.NetworkMode}}",
827
+ containerName,
828
+ ]);
829
+ return stdout.trim() !== expected;
830
+ }
831
+ async ensureNetwork(containerKey) {
832
+ const networkName = DockerContainerManager.networkName(containerKey);
833
+ try {
834
+ await this.execFileImpl("docker", ["network", "inspect", networkName]);
835
+ return networkName;
836
+ }
837
+ catch (err) {
838
+ if (!isDockerNotFoundError(err))
839
+ throw err;
840
+ }
841
+ await this.execFileImpl("docker", [
842
+ "network",
843
+ "create",
844
+ "--driver",
845
+ "bridge",
846
+ "--label",
847
+ DockerContainerManager.MANAGED_LABEL,
848
+ "--label",
849
+ DockerContainerManager.IMAGE_MODE_LABEL,
850
+ "--label",
851
+ `${DockerContainerManager.VAULT_ID_LABEL_KEY}=${containerKey}`,
852
+ networkName,
853
+ ]);
854
+ return networkName;
855
+ }
856
+ async inspectStatus(containerName) {
857
+ try {
858
+ const { stdout } = await this.execFileImpl("docker", [
859
+ "inspect",
860
+ "-f",
861
+ "{{.State.Running}}",
862
+ containerName,
863
+ ]);
864
+ return stdout.trim() === "true" ? "running" : "stopped";
865
+ }
866
+ catch (err) {
867
+ if (isDockerNotFoundError(err))
868
+ return "missing";
869
+ throw err;
870
+ }
871
+ }
872
+ async listContainerNamesByLabel() {
873
+ try {
874
+ const { stdout } = await this.execFileImpl("docker", [
875
+ "ps",
876
+ "-a",
877
+ "--filter",
878
+ `label=${DockerContainerManager.MANAGED_LABEL}`,
879
+ "--filter",
880
+ `label=${DockerContainerManager.IMAGE_MODE_LABEL}`,
881
+ "--format",
882
+ "{{.Names}}",
883
+ ]);
884
+ return this.parseNameLines(stdout);
885
+ }
886
+ catch (err) {
887
+ log.logWarning("Failed to list labeled managed containers", errorMessage(err));
888
+ return [];
889
+ }
890
+ }
891
+ async listContainerNamesByPrefix() {
892
+ try {
893
+ const { stdout } = await this.execFileImpl("docker", [
894
+ "ps",
895
+ "-a",
896
+ "--filter",
897
+ `name=${DockerContainerManager.containerName("")}`,
898
+ "--format",
899
+ "{{.Names}}",
900
+ ]);
901
+ return this.parseNameLines(stdout);
902
+ }
903
+ catch (err) {
904
+ log.logWarning("Failed to list legacy managed containers", errorMessage(err));
905
+ return [];
906
+ }
907
+ }
908
+ parseNameLines(stdout) {
909
+ return stdout
910
+ .split("\n")
911
+ .map((line) => line.trim())
912
+ .filter((line) => line.length > 0);
913
+ }
914
+ async inspectContainerDetails(containerName) {
915
+ try {
916
+ const { stdout } = await this.execFileImpl("docker", [
917
+ "inspect",
918
+ "-f",
919
+ `{{.State.Running}}\t{{.State.StartedAt}}\t{{index .Config.Labels "${DockerContainerManager.VAULT_ID_LABEL_KEY}"}}\t{{index .Config.Labels "${DockerContainerManager.CONVERSATION_ID_LABEL_KEY}"}}`,
920
+ containerName,
921
+ ]);
922
+ const [runningRaw, startedAtRaw, , conversationIdRaw] = stdout.trim().split("\t");
923
+ const running = runningRaw === "true";
924
+ const startedAtMs = this.parseDockerTimestamp(startedAtRaw);
925
+ const conversationId = this.normalizeDockerValue(conversationIdRaw);
926
+ return { running, startedAtMs, conversationId };
927
+ }
928
+ catch (err) {
929
+ log.logWarning(`Failed to inspect container ${containerName} during reconcile`, errorMessage(err));
930
+ return undefined;
931
+ }
932
+ }
933
+ normalizeDockerValue(value) {
934
+ if (!value || value === "<no value>")
935
+ return undefined;
936
+ const trimmed = value.trim();
937
+ return trimmed.length > 0 ? trimmed : undefined;
938
+ }
939
+ parseDockerTimestamp(value) {
940
+ const normalized = this.normalizeDockerValue(value);
941
+ if (!normalized || normalized.startsWith("0001-"))
942
+ return undefined;
943
+ const parsed = Date.parse(normalized);
944
+ return Number.isNaN(parsed) ? undefined : parsed;
945
+ }
946
+ containerKeyFromContainerName(containerName) {
947
+ const prefix = DockerContainerManager.containerName("");
948
+ if (!containerName.startsWith(prefix))
949
+ return undefined;
950
+ const containerKey = containerName.slice(prefix.length);
951
+ return containerKey.length > 0 ? containerKey : undefined;
952
+ }
953
+ async forceRemoveContainer(containerName, successLog, failureLog) {
954
+ try {
955
+ await this.execFileImpl("docker", ["rm", "-f", containerName]);
956
+ log.logInfo(successLog);
957
+ return true;
958
+ }
959
+ catch (err) {
960
+ const message = errorMessage(err);
961
+ if (/no such container/i.test(message))
962
+ return true;
963
+ log.logWarning(failureLog, message);
964
+ return false;
965
+ }
966
+ }
967
+ async removeLegacyContainer(containerName) {
968
+ await this.forceRemoveContainer(containerName, `Removed legacy mikan container ${containerName} (pre-channel-isolation scheme)`, `Failed to remove legacy mikan container ${containerName}`);
969
+ }
970
+ }
971
+ //# sourceMappingURL=provisioner.js.map