@geminixiang/mikan 1.0.0-beta.76 → 1.0.0-beta.77

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 (506) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/adapters/commands/login.d.ts.map +1 -1
  3. package/dist/adapters/commands/login.js +0 -9
  4. package/dist/adapters/commands/login.js.map +1 -1
  5. package/dist/adapters/commands/manifest.d.ts +0 -19
  6. package/dist/adapters/commands/manifest.d.ts.map +1 -1
  7. package/dist/adapters/commands/manifest.js +0 -34
  8. package/dist/adapters/commands/manifest.js.map +1 -1
  9. package/dist/adapters/commands/model.d.ts +0 -5
  10. package/dist/adapters/commands/model.d.ts.map +1 -1
  11. package/dist/adapters/commands/model.js +0 -5
  12. package/dist/adapters/commands/model.js.map +1 -1
  13. package/dist/adapters/commands/new.d.ts.map +1 -1
  14. package/dist/adapters/commands/new.js +0 -2
  15. package/dist/adapters/commands/new.js.map +1 -1
  16. package/dist/adapters/commands/registry.d.ts +0 -1
  17. package/dist/adapters/commands/registry.d.ts.map +1 -1
  18. package/dist/adapters/commands/registry.js +0 -8
  19. package/dist/adapters/commands/registry.js.map +1 -1
  20. package/dist/adapters/commands/session-view.d.ts.map +1 -1
  21. package/dist/adapters/commands/session-view.js +0 -2
  22. package/dist/adapters/commands/session-view.js.map +1 -1
  23. package/dist/adapters/commands/types.d.ts +0 -29
  24. package/dist/adapters/commands/types.d.ts.map +1 -1
  25. package/dist/adapters/commands/types.js.map +1 -1
  26. package/dist/adapters/commands/utils.d.ts +0 -3
  27. package/dist/adapters/commands/utils.d.ts.map +1 -1
  28. package/dist/adapters/commands/utils.js +0 -3
  29. package/dist/adapters/commands/utils.js.map +1 -1
  30. package/dist/adapters/discord/bot.d.ts +0 -4
  31. package/dist/adapters/discord/bot.d.ts.map +1 -1
  32. package/dist/adapters/discord/bot.js +5 -41
  33. package/dist/adapters/discord/bot.js.map +1 -1
  34. package/dist/adapters/discord/components.d.ts +0 -23
  35. package/dist/adapters/discord/components.d.ts.map +1 -1
  36. package/dist/adapters/discord/components.js +0 -23
  37. package/dist/adapters/discord/components.js.map +1 -1
  38. package/dist/adapters/discord/context.d.ts.map +1 -1
  39. package/dist/adapters/discord/context.js +1 -11
  40. package/dist/adapters/discord/context.js.map +1 -1
  41. package/dist/adapters/discord/format.d.ts +0 -1
  42. package/dist/adapters/discord/format.d.ts.map +1 -1
  43. package/dist/adapters/discord/format.js +0 -37
  44. package/dist/adapters/discord/format.js.map +1 -1
  45. package/dist/adapters/github/bot.d.ts +0 -44
  46. package/dist/adapters/github/bot.d.ts.map +1 -1
  47. package/dist/adapters/github/bot.js +1 -120
  48. package/dist/adapters/github/bot.js.map +1 -1
  49. package/dist/adapters/github/client.d.ts +0 -57
  50. package/dist/adapters/github/client.d.ts.map +1 -1
  51. package/dist/adapters/github/client.js +0 -59
  52. package/dist/adapters/github/client.js.map +1 -1
  53. package/dist/adapters/github/context.d.ts.map +1 -1
  54. package/dist/adapters/github/context.js +1 -8
  55. package/dist/adapters/github/context.js.map +1 -1
  56. package/dist/adapters/github/github-ops.d.ts +0 -55
  57. package/dist/adapters/github/github-ops.d.ts.map +1 -1
  58. package/dist/adapters/github/github-ops.js +0 -59
  59. package/dist/adapters/github/github-ops.js.map +1 -1
  60. package/dist/adapters/github/ids.d.ts +0 -27
  61. package/dist/adapters/github/ids.d.ts.map +1 -1
  62. package/dist/adapters/github/ids.js +0 -29
  63. package/dist/adapters/github/ids.js.map +1 -1
  64. package/dist/adapters/github/repo.d.ts +0 -25
  65. package/dist/adapters/github/repo.d.ts.map +1 -1
  66. package/dist/adapters/github/repo.js +0 -49
  67. package/dist/adapters/github/repo.js.map +1 -1
  68. package/dist/adapters/github/tool-pack.d.ts +0 -10
  69. package/dist/adapters/github/tool-pack.d.ts.map +1 -1
  70. package/dist/adapters/github/tool-pack.js +0 -10
  71. package/dist/adapters/github/tool-pack.js.map +1 -1
  72. package/dist/adapters/github/tools/checks.d.ts +0 -6
  73. package/dist/adapters/github/tools/checks.d.ts.map +1 -1
  74. package/dist/adapters/github/tools/checks.js +0 -7
  75. package/dist/adapters/github/tools/checks.js.map +1 -1
  76. package/dist/adapters/github/tools/issue.d.ts +0 -5
  77. package/dist/adapters/github/tools/issue.d.ts.map +1 -1
  78. package/dist/adapters/github/tools/issue.js +0 -5
  79. package/dist/adapters/github/tools/issue.js.map +1 -1
  80. package/dist/adapters/github/tools/pr.d.ts +0 -7
  81. package/dist/adapters/github/tools/pr.d.ts.map +1 -1
  82. package/dist/adapters/github/tools/pr.js +0 -7
  83. package/dist/adapters/github/tools/pr.js.map +1 -1
  84. package/dist/adapters/github/tools/read.d.ts +0 -6
  85. package/dist/adapters/github/tools/read.d.ts.map +1 -1
  86. package/dist/adapters/github/tools/read.js +0 -8
  87. package/dist/adapters/github/tools/read.js.map +1 -1
  88. package/dist/adapters/github/tools/review-reply.d.ts +0 -5
  89. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -1
  90. package/dist/adapters/github/tools/review-reply.js +0 -5
  91. package/dist/adapters/github/tools/review-reply.js.map +1 -1
  92. package/dist/adapters/github/tools/sync.d.ts +0 -6
  93. package/dist/adapters/github/tools/sync.d.ts.map +1 -1
  94. package/dist/adapters/github/tools/sync.js +0 -6
  95. package/dist/adapters/github/tools/sync.js.map +1 -1
  96. package/dist/adapters/github/types.d.ts +0 -88
  97. package/dist/adapters/github/types.d.ts.map +1 -1
  98. package/dist/adapters/github/types.js.map +1 -1
  99. package/dist/adapters/github/webhook.d.ts +0 -13
  100. package/dist/adapters/github/webhook.d.ts.map +1 -1
  101. package/dist/adapters/github/webhook.js +0 -16
  102. package/dist/adapters/github/webhook.js.map +1 -1
  103. package/dist/adapters/index.d.ts +3 -4
  104. package/dist/adapters/index.d.ts.map +1 -1
  105. package/dist/adapters/index.js +4 -4
  106. package/dist/adapters/index.js.map +1 -1
  107. package/dist/adapters/intake.d.ts +0 -17
  108. package/dist/adapters/intake.d.ts.map +1 -1
  109. package/dist/adapters/intake.js +6 -32
  110. package/dist/adapters/intake.js.map +1 -1
  111. package/dist/adapters/markdown-tables.d.ts +0 -10
  112. package/dist/adapters/markdown-tables.d.ts.map +1 -1
  113. package/dist/adapters/markdown-tables.js +1 -42
  114. package/dist/adapters/markdown-tables.js.map +1 -1
  115. package/dist/adapters/progressive-renderer.d.ts.map +1 -1
  116. package/dist/adapters/progressive-renderer.js +3 -25
  117. package/dist/adapters/progressive-renderer.js.map +1 -1
  118. package/dist/adapters/shared.d.ts +0 -57
  119. package/dist/adapters/shared.d.ts.map +1 -1
  120. package/dist/adapters/shared.js +0 -71
  121. package/dist/adapters/shared.js.map +1 -1
  122. package/dist/adapters/slack/assistant.d.ts +0 -49
  123. package/dist/adapters/slack/assistant.d.ts.map +1 -1
  124. package/dist/adapters/slack/assistant.js +0 -97
  125. package/dist/adapters/slack/assistant.js.map +1 -1
  126. package/dist/adapters/slack/auto-reply-context.d.ts +0 -7
  127. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -1
  128. package/dist/adapters/slack/auto-reply-context.js +0 -7
  129. package/dist/adapters/slack/auto-reply-context.js.map +1 -1
  130. package/dist/adapters/slack/blocks.d.ts +0 -9
  131. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  132. package/dist/adapters/slack/blocks.js +0 -20
  133. package/dist/adapters/slack/blocks.js.map +1 -1
  134. package/dist/adapters/slack/bot.d.ts +0 -116
  135. package/dist/adapters/slack/bot.d.ts.map +1 -1
  136. package/dist/adapters/slack/bot.js +7 -231
  137. package/dist/adapters/slack/bot.js.map +1 -1
  138. package/dist/adapters/slack/context.d.ts.map +1 -1
  139. package/dist/adapters/slack/context.js +1 -3
  140. package/dist/adapters/slack/context.js.map +1 -1
  141. package/dist/adapters/slack/jev-context.d.ts +0 -13
  142. package/dist/adapters/slack/jev-context.d.ts.map +1 -1
  143. package/dist/adapters/slack/jev-context.js +0 -12
  144. package/dist/adapters/slack/jev-context.js.map +1 -1
  145. package/dist/adapters/slack/markdown.d.ts +0 -1
  146. package/dist/adapters/slack/markdown.d.ts.map +1 -1
  147. package/dist/adapters/slack/markdown.js +0 -5
  148. package/dist/adapters/slack/markdown.js.map +1 -1
  149. package/dist/adapters/slack/persona.d.ts +0 -9
  150. package/dist/adapters/slack/persona.d.ts.map +1 -1
  151. package/dist/adapters/slack/persona.js +0 -9
  152. package/dist/adapters/slack/persona.js.map +1 -1
  153. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  154. package/dist/adapters/slack/response-lifecycle.js +1 -45
  155. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  156. package/dist/adapters/slack/session.d.ts +2 -1
  157. package/dist/adapters/slack/session.d.ts.map +1 -1
  158. package/dist/adapters/slack/session.js +2 -2
  159. package/dist/adapters/slack/session.js.map +1 -1
  160. package/dist/adapters/slack/stream-limits.d.ts +0 -25
  161. package/dist/adapters/slack/stream-limits.d.ts.map +1 -1
  162. package/dist/adapters/slack/stream-limits.js +0 -34
  163. package/dist/adapters/slack/stream-limits.js.map +1 -1
  164. package/dist/adapters/slack/task-intent.d.ts +0 -13
  165. package/dist/adapters/slack/task-intent.d.ts.map +1 -1
  166. package/dist/adapters/slack/task-intent.js +0 -7
  167. package/dist/adapters/slack/task-intent.js.map +1 -1
  168. package/dist/adapters/slack/task-status.d.ts +0 -1
  169. package/dist/adapters/slack/task-status.d.ts.map +1 -1
  170. package/dist/adapters/slack/task-status.js +1 -9
  171. package/dist/adapters/slack/task-status.js.map +1 -1
  172. package/dist/adapters/slack/tool-pack.d.ts +0 -6
  173. package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
  174. package/dist/adapters/slack/tool-pack.js +0 -6
  175. package/dist/adapters/slack/tool-pack.js.map +1 -1
  176. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -1
  177. package/dist/adapters/slack/tools/blockkit.js +0 -11
  178. package/dist/adapters/slack/tools/blockkit.js.map +1 -1
  179. package/dist/adapters/slack/types.d.ts +0 -19
  180. package/dist/adapters/slack/types.d.ts.map +1 -1
  181. package/dist/adapters/slack/types.js.map +1 -1
  182. package/dist/adapters/slack/update-diagnostics.d.ts +0 -1
  183. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -1
  184. package/dist/adapters/slack/update-diagnostics.js +1 -7
  185. package/dist/adapters/slack/update-diagnostics.js.map +1 -1
  186. package/dist/adapters/telegram/bot.d.ts +0 -6
  187. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  188. package/dist/adapters/telegram/bot.js +1 -50
  189. package/dist/adapters/telegram/bot.js.map +1 -1
  190. package/dist/adapters/telegram/context.d.ts.map +1 -1
  191. package/dist/adapters/telegram/context.js +1 -8
  192. package/dist/adapters/telegram/context.js.map +1 -1
  193. package/dist/adapters/types.d.ts +0 -57
  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/client-assets.d.ts +4 -0
  197. package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
  198. package/dist/adapters/web/admin/client-assets.js +1765 -0
  199. package/dist/adapters/web/admin/client-assets.js.map +1 -0
  200. package/dist/adapters/web/admin/portal.d.ts +0 -10
  201. package/dist/adapters/web/admin/portal.d.ts.map +1 -1
  202. package/dist/adapters/web/admin/portal.js +6 -1909
  203. package/dist/adapters/web/admin/portal.js.map +1 -1
  204. package/dist/adapters/web/admin/types.d.ts +0 -3
  205. package/dist/adapters/web/admin/types.d.ts.map +1 -1
  206. package/dist/adapters/web/admin/types.js.map +1 -1
  207. package/dist/adapters/web/login/oauth.d.ts.map +1 -1
  208. package/dist/adapters/web/login/oauth.js +0 -5
  209. package/dist/adapters/web/login/oauth.js.map +1 -1
  210. package/dist/adapters/web/login/portal.d.ts +0 -10
  211. package/dist/adapters/web/login/portal.d.ts.map +1 -1
  212. package/dist/adapters/web/login/portal.js +1 -35
  213. package/dist/adapters/web/login/portal.js.map +1 -1
  214. package/dist/adapters/web/login/types.d.ts +0 -5
  215. package/dist/adapters/web/login/types.d.ts.map +1 -1
  216. package/dist/adapters/web/login/types.js.map +1 -1
  217. package/dist/adapters/web/portal-shell.d.ts +0 -12
  218. package/dist/adapters/web/portal-shell.d.ts.map +1 -1
  219. package/dist/adapters/web/portal-shell.js +8 -25
  220. package/dist/adapters/web/portal-shell.js.map +1 -1
  221. package/dist/adapters/web/server.d.ts +0 -1
  222. package/dist/adapters/web/server.d.ts.map +1 -1
  223. package/dist/adapters/web/server.js +0 -2
  224. package/dist/adapters/web/server.js.map +1 -1
  225. package/dist/adapters/web/session-view/portal.d.ts.map +1 -1
  226. package/dist/adapters/web/session-view/portal.js +13 -24
  227. package/dist/adapters/web/session-view/portal.js.map +1 -1
  228. package/dist/adapters/web/session-view/types.d.ts.map +1 -1
  229. package/dist/adapters/web/session-view/types.js.map +1 -1
  230. package/dist/adapters/web/token-store.d.ts +0 -2
  231. package/dist/adapters/web/token-store.d.ts.map +1 -1
  232. package/dist/adapters/web/token-store.js +0 -2
  233. package/dist/adapters/web/token-store.js.map +1 -1
  234. package/dist/cli/arg-grammar.d.ts +0 -3
  235. package/dist/cli/arg-grammar.d.ts.map +1 -1
  236. package/dist/cli/arg-grammar.js +0 -3
  237. package/dist/cli/arg-grammar.js.map +1 -1
  238. package/dist/cli/boot.d.ts.map +1 -1
  239. package/dist/cli/boot.js +0 -11
  240. package/dist/cli/boot.js.map +1 -1
  241. package/dist/cli/download.d.ts.map +1 -1
  242. package/dist/cli/download.js +2 -6
  243. package/dist/cli/download.js.map +1 -1
  244. package/dist/cli/office.d.ts.map +1 -1
  245. package/dist/cli/office.js +0 -31
  246. package/dist/cli/office.js.map +1 -1
  247. package/dist/cli/onboard.d.ts +0 -2
  248. package/dist/cli/onboard.d.ts.map +1 -1
  249. package/dist/cli/onboard.js +0 -30
  250. package/dist/cli/onboard.js.map +1 -1
  251. package/dist/cli/process-lifecycle.d.ts +0 -5
  252. package/dist/cli/process-lifecycle.d.ts.map +1 -1
  253. package/dist/cli/process-lifecycle.js +0 -6
  254. package/dist/cli/process-lifecycle.js.map +1 -1
  255. package/dist/cli/sessions.d.ts.map +1 -1
  256. package/dist/cli/sessions.js +0 -11
  257. package/dist/cli/sessions.js.map +1 -1
  258. package/dist/cli/types.d.ts +0 -5
  259. package/dist/cli/types.d.ts.map +1 -1
  260. package/dist/cli/types.js.map +1 -1
  261. package/dist/dream/index.js +0 -2
  262. package/dist/dream/index.js.map +1 -1
  263. package/dist/env-manifest.d.ts +0 -21
  264. package/dist/env-manifest.d.ts.map +1 -1
  265. package/dist/env-manifest.js +0 -11
  266. package/dist/env-manifest.js.map +1 -1
  267. package/dist/events/index.d.ts +0 -51
  268. package/dist/events/index.d.ts.map +1 -1
  269. package/dist/events/index.js +0 -42
  270. package/dist/events/index.js.map +1 -1
  271. package/dist/events/scheduler.d.ts +0 -8
  272. package/dist/events/scheduler.d.ts.map +1 -1
  273. package/dist/events/scheduler.js +0 -8
  274. package/dist/events/scheduler.js.map +1 -1
  275. package/dist/file-guards.d.ts +0 -15
  276. package/dist/file-guards.d.ts.map +1 -1
  277. package/dist/file-guards.js +2 -26
  278. package/dist/file-guards.js.map +1 -1
  279. package/dist/harness/execution-env.d.ts +0 -15
  280. package/dist/harness/execution-env.d.ts.map +1 -1
  281. package/dist/harness/execution-env.js +4 -55
  282. package/dist/harness/execution-env.js.map +1 -1
  283. package/dist/harness/http.d.ts +0 -12
  284. package/dist/harness/http.d.ts.map +1 -1
  285. package/dist/harness/http.js +0 -34
  286. package/dist/harness/http.js.map +1 -1
  287. package/dist/harness/index.d.ts +0 -7
  288. package/dist/harness/index.d.ts.map +1 -1
  289. package/dist/harness/index.js +0 -7
  290. package/dist/harness/index.js.map +1 -1
  291. package/dist/harness/jev.d.ts +0 -28
  292. package/dist/harness/jev.d.ts.map +1 -1
  293. package/dist/harness/jev.js +0 -45
  294. package/dist/harness/jev.js.map +1 -1
  295. package/dist/harness/mcp.d.ts +0 -19
  296. package/dist/harness/mcp.d.ts.map +1 -1
  297. package/dist/harness/mcp.js +0 -34
  298. package/dist/harness/mcp.js.map +1 -1
  299. package/dist/harness/models.d.ts +0 -19
  300. package/dist/harness/models.d.ts.map +1 -1
  301. package/dist/harness/models.js +0 -52
  302. package/dist/harness/models.js.map +1 -1
  303. package/dist/harness/open-connector.d.ts +0 -12
  304. package/dist/harness/open-connector.d.ts.map +1 -1
  305. package/dist/harness/open-connector.js +0 -22
  306. package/dist/harness/open-connector.js.map +1 -1
  307. package/dist/harness/presenter.d.ts.map +1 -1
  308. package/dist/harness/presenter.js +15 -65
  309. package/dist/harness/presenter.js.map +1 -1
  310. package/dist/harness/prompt.d.ts +0 -11
  311. package/dist/harness/prompt.d.ts.map +1 -1
  312. package/dist/harness/prompt.js +0 -17
  313. package/dist/harness/prompt.js.map +1 -1
  314. package/dist/harness/runner.d.ts.map +1 -1
  315. package/dist/harness/runner.js +0 -25
  316. package/dist/harness/runner.js.map +1 -1
  317. package/dist/harness/session.d.ts +11 -28
  318. package/dist/harness/session.d.ts.map +1 -1
  319. package/dist/harness/session.js +100 -38
  320. package/dist/harness/session.js.map +1 -1
  321. package/dist/harness/skills.d.ts +0 -22
  322. package/dist/harness/skills.d.ts.map +1 -1
  323. package/dist/harness/skills.js +0 -20
  324. package/dist/harness/skills.js.map +1 -1
  325. package/dist/harness/subagent-profiles.d.ts +0 -4
  326. package/dist/harness/subagent-profiles.d.ts.map +1 -1
  327. package/dist/harness/subagent-profiles.js +0 -29
  328. package/dist/harness/subagent-profiles.js.map +1 -1
  329. package/dist/harness/subagent.d.ts +0 -25
  330. package/dist/harness/subagent.d.ts.map +1 -1
  331. package/dist/harness/subagent.js +1 -70
  332. package/dist/harness/subagent.js.map +1 -1
  333. package/dist/harness/tools/event.d.ts.map +1 -1
  334. package/dist/harness/tools/event.js +0 -9
  335. package/dist/harness/tools/event.js.map +1 -1
  336. package/dist/harness/tools/generate-image.d.ts +0 -6
  337. package/dist/harness/tools/generate-image.d.ts.map +1 -1
  338. package/dist/harness/tools/generate-image.js.map +1 -1
  339. package/dist/harness/tools/host-fn-tool.d.ts +0 -17
  340. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
  341. package/dist/harness/tools/host-fn-tool.js +0 -16
  342. package/dist/harness/tools/host-fn-tool.js.map +1 -1
  343. package/dist/harness/tools/index.d.ts +1 -7
  344. package/dist/harness/tools/index.d.ts.map +1 -1
  345. package/dist/harness/tools/index.js +3 -14
  346. package/dist/harness/tools/index.js.map +1 -1
  347. package/dist/harness/tools/jev-browser.d.ts +4 -94
  348. package/dist/harness/tools/jev-browser.d.ts.map +1 -1
  349. package/dist/harness/tools/jev-browser.js +203 -92
  350. package/dist/harness/tools/jev-browser.js.map +1 -1
  351. package/dist/harness/tools/jev.d.ts +0 -8
  352. package/dist/harness/tools/jev.d.ts.map +1 -1
  353. package/dist/harness/tools/jev.js +0 -11
  354. package/dist/harness/tools/jev.js.map +1 -1
  355. package/dist/harness/tools/pi-tools.d.ts +0 -11
  356. package/dist/harness/tools/pi-tools.d.ts.map +1 -1
  357. package/dist/harness/tools/pi-tools.js +0 -29
  358. package/dist/harness/tools/pi-tools.js.map +1 -1
  359. package/dist/harness/tools/react.d.ts +0 -5
  360. package/dist/harness/tools/react.d.ts.map +1 -1
  361. package/dist/harness/tools/react.js +0 -5
  362. package/dist/harness/tools/react.js.map +1 -1
  363. package/dist/harness/tools/secret-redaction.d.ts +0 -25
  364. package/dist/harness/tools/secret-redaction.d.ts.map +1 -1
  365. package/dist/harness/tools/secret-redaction.js +3 -36
  366. package/dist/harness/tools/secret-redaction.js.map +1 -1
  367. package/dist/harness/tools/subagent.d.ts +0 -34
  368. package/dist/harness/tools/subagent.d.ts.map +1 -1
  369. package/dist/harness/tools/subagent.js +0 -92
  370. package/dist/harness/tools/subagent.js.map +1 -1
  371. package/dist/harness/tools/task.d.ts +0 -1
  372. package/dist/harness/tools/task.d.ts.map +1 -1
  373. package/dist/harness/tools/task.js +0 -1
  374. package/dist/harness/tools/task.js.map +1 -1
  375. package/dist/harness/tools/types.d.ts +0 -16
  376. package/dist/harness/tools/types.d.ts.map +1 -1
  377. package/dist/harness/tools/types.js.map +1 -1
  378. package/dist/harness/types.d.ts +0 -76
  379. package/dist/harness/types.d.ts.map +1 -1
  380. package/dist/harness/types.js.map +1 -1
  381. package/dist/index.d.ts.map +1 -1
  382. package/dist/index.js +0 -2
  383. package/dist/index.js.map +1 -1
  384. package/dist/log.d.ts.map +1 -1
  385. package/dist/log.js +0 -13
  386. package/dist/log.js.map +1 -1
  387. package/dist/main.js +0 -47
  388. package/dist/main.js.map +1 -1
  389. package/dist/observability/index.d.ts +0 -9
  390. package/dist/observability/index.d.ts.map +1 -1
  391. package/dist/observability/index.js +0 -9
  392. package/dist/observability/index.js.map +1 -1
  393. package/dist/observability/instrument.js +0 -5
  394. package/dist/observability/instrument.js.map +1 -1
  395. package/dist/observability/otel.js +0 -1
  396. package/dist/observability/otel.js.map +1 -1
  397. package/dist/observability/sentry.d.ts +0 -18
  398. package/dist/observability/sentry.d.ts.map +1 -1
  399. package/dist/observability/sentry.js +0 -36
  400. package/dist/observability/sentry.js.map +1 -1
  401. package/dist/observability/types.d.ts +0 -9
  402. package/dist/observability/types.d.ts.map +1 -1
  403. package/dist/observability/types.js.map +1 -1
  404. package/dist/office/index.d.ts +0 -76
  405. package/dist/office/index.d.ts.map +1 -1
  406. package/dist/office/index.js +2 -153
  407. package/dist/office/index.js.map +1 -1
  408. package/dist/office/projection.d.ts +0 -29
  409. package/dist/office/projection.d.ts.map +1 -1
  410. package/dist/office/projection.js +0 -37
  411. package/dist/office/projection.js.map +1 -1
  412. package/dist/office/types.d.ts +0 -66
  413. package/dist/office/types.d.ts.map +1 -1
  414. package/dist/office/types.js.map +1 -1
  415. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  416. package/dist/runtime/conversation-runtime.js +9 -27
  417. package/dist/runtime/conversation-runtime.js.map +1 -1
  418. package/dist/runtime/session-lifecycle.d.ts +0 -10
  419. package/dist/runtime/session-lifecycle.d.ts.map +1 -1
  420. package/dist/runtime/session-lifecycle.js +0 -12
  421. package/dist/runtime/session-lifecycle.js.map +1 -1
  422. package/dist/runtime/types.d.ts +0 -28
  423. package/dist/runtime/types.d.ts.map +1 -1
  424. package/dist/runtime/types.js.map +1 -1
  425. package/dist/sandbox/container.d.ts.map +1 -1
  426. package/dist/sandbox/container.js +0 -1
  427. package/dist/sandbox/container.js.map +1 -1
  428. package/dist/sandbox/host.d.ts.map +1 -1
  429. package/dist/sandbox/host.js +0 -2
  430. package/dist/sandbox/host.js.map +1 -1
  431. package/dist/sandbox/identity.d.ts +0 -28
  432. package/dist/sandbox/identity.d.ts.map +1 -1
  433. package/dist/sandbox/identity.js +0 -28
  434. package/dist/sandbox/identity.js.map +1 -1
  435. package/dist/sandbox/index.d.ts +0 -18
  436. package/dist/sandbox/index.d.ts.map +1 -1
  437. package/dist/sandbox/index.js +0 -18
  438. package/dist/sandbox/index.js.map +1 -1
  439. package/dist/sandbox/provisioner.d.ts +0 -61
  440. package/dist/sandbox/provisioner.d.ts.map +1 -1
  441. package/dist/sandbox/provisioner.js +3 -105
  442. package/dist/sandbox/provisioner.js.map +1 -1
  443. package/dist/sandbox/types.d.ts +0 -39
  444. package/dist/sandbox/types.d.ts.map +1 -1
  445. package/dist/sandbox/types.js.map +1 -1
  446. package/dist/sandbox/utils.d.ts +2 -5
  447. package/dist/sandbox/utils.d.ts.map +1 -1
  448. package/dist/sandbox/utils.js +31 -31
  449. package/dist/sandbox/utils.js.map +1 -1
  450. package/dist/sessions/chat-history-sync.d.ts +0 -6
  451. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  452. package/dist/sessions/chat-history-sync.js +1 -33
  453. package/dist/sessions/chat-history-sync.js.map +1 -1
  454. package/dist/sessions/history-line.d.ts +0 -20
  455. package/dist/sessions/history-line.d.ts.map +1 -1
  456. package/dist/sessions/history-line.js +0 -20
  457. package/dist/sessions/history-line.js.map +1 -1
  458. package/dist/sessions/migrate-common.d.ts +0 -15
  459. package/dist/sessions/migrate-common.d.ts.map +1 -1
  460. package/dist/sessions/migrate-common.js +0 -19
  461. package/dist/sessions/migrate-common.js.map +1 -1
  462. package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
  463. package/dist/sessions/migrate-pi-084.js +0 -7
  464. package/dist/sessions/migrate-pi-084.js.map +1 -1
  465. package/dist/sessions/migrate-v3.d.ts +0 -7
  466. package/dist/sessions/migrate-v3.d.ts.map +1 -1
  467. package/dist/sessions/migrate-v3.js +1 -67
  468. package/dist/sessions/migrate-v3.js.map +1 -1
  469. package/dist/sessions/session-key.d.ts +3 -17
  470. package/dist/sessions/session-key.d.ts.map +1 -1
  471. package/dist/sessions/session-key.js +8 -35
  472. package/dist/sessions/session-key.js.map +1 -1
  473. package/dist/sessions/session-store.d.ts +0 -6
  474. package/dist/sessions/session-store.d.ts.map +1 -1
  475. package/dist/sessions/session-store.js +8 -50
  476. package/dist/sessions/session-store.js.map +1 -1
  477. package/dist/sessions/store.d.ts +0 -59
  478. package/dist/sessions/store.d.ts.map +1 -1
  479. package/dist/sessions/store.js +6 -88
  480. package/dist/sessions/store.js.map +1 -1
  481. package/dist/sessions/types.d.ts +0 -17
  482. package/dist/sessions/types.d.ts.map +1 -1
  483. package/dist/sessions/types.js.map +1 -1
  484. package/dist/settings/apply.d.ts +0 -6
  485. package/dist/settings/apply.d.ts.map +1 -1
  486. package/dist/settings/apply.js +0 -29
  487. package/dist/settings/apply.js.map +1 -1
  488. package/dist/settings/index.d.ts +0 -53
  489. package/dist/settings/index.d.ts.map +1 -1
  490. package/dist/settings/index.js +0 -77
  491. package/dist/settings/index.js.map +1 -1
  492. package/dist/settings/migrate.d.ts +0 -5
  493. package/dist/settings/migrate.d.ts.map +1 -1
  494. package/dist/settings/migrate.js +0 -17
  495. package/dist/settings/migrate.js.map +1 -1
  496. package/dist/types.d.ts +0 -159
  497. package/dist/types.d.ts.map +1 -1
  498. package/dist/types.js.map +1 -1
  499. package/dist/vault/index.d.ts +2 -36
  500. package/dist/vault/index.d.ts.map +1 -1
  501. package/dist/vault/index.js +128 -59
  502. package/dist/vault/index.js.map +1 -1
  503. package/dist/vault/types.d.ts +0 -15
  504. package/dist/vault/types.d.ts.map +1 -1
  505. package/dist/vault/types.js.map +1 -1
  506. package/package.json +1 -1
@@ -54,14 +54,6 @@ export function getSandboxWorkspaceCapabilities(type) {
54
54
  return requireSandboxAdapter(type).workspace;
55
55
  }
56
56
  const warnedUnenforcedPrivacy = new Set();
57
- /**
58
- * Only backends with a managed Workspace projection enforce office
59
- * visibility (read-only global knowledge, no access to other private
60
- * offices). Host, shared-container, and remote backends run every office in
61
- * one filesystem and are documented as trusted deployments (ADR 0003), so a
62
- * private office there is served with a one-time warning rather than
63
- * refused: refusing would take every DM offline on those backends.
64
- */
65
57
  export function assertSandboxSupportsWorkspacePolicy(sandboxConfig, visibility, officeKey) {
66
58
  const capabilities = getSandboxWorkspaceCapabilities(sandboxConfig.type);
67
59
  if (capabilities.managedProjection || visibility === "public")
@@ -86,10 +78,6 @@ export function parseSandboxArg(value) {
86
78
  export async function validateSandbox(config) {
87
79
  await requireSandboxAdapter(config.type).validate?.(config);
88
80
  }
89
- /**
90
- * Create an executor that runs commands on host, in Docker, or through a
91
- * Cloudflare sandbox bridge.
92
- */
93
81
  export function createExecutor(config, env, ensureReady) {
94
82
  const adapter = requireSandboxAdapter(config.type);
95
83
  if (!adapter.createExecutor) {
@@ -97,12 +85,6 @@ export function createExecutor(config, env, ensureReady) {
97
85
  }
98
86
  return adapter.createExecutor(config, env, ensureReady);
99
87
  }
100
- /**
101
- * The runtime path context for a sandbox config before an actor-specific
102
- * executor is resolved. `image` configs are unresolved by nature (the actor
103
- * decides the concrete container), but their mount layout is fixed, so path
104
- * mapping is known without resolving.
105
- */
106
88
  export function getUnresolvedSandboxPathContext(sandboxConfig, hostWorkspaceRoot) {
107
89
  if (sandboxConfig.type === "image") {
108
90
  return createMountedRuntimePathContext(hostWorkspaceRoot, "/workspace");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContainerExecutor, containerSandboxAdapter } from \"./container.js\";\nimport { CloudflareSandboxExecutor, cloudflareSandboxAdapter } from \"./cloudflare.js\";\nimport { HostExecutor, hostSandboxAdapter } from \"./host.js\";\nimport { createMountedRuntimePathContext, execSimple, SandboxError } from \"./utils.js\";\nimport * as log from \"../log.js\";\nimport type {\n Executor,\n ImageSandboxConfig,\n RuntimePathContext,\n SandboxAdapter,\n SandboxConfig,\n} from \"./types.js\";\n\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n RuntimePathContext,\n SandboxAdapter,\n SandboxConfig,\n} from \"./types.js\";\nexport { CloudflareSandboxExecutor, ContainerExecutor, HostExecutor };\nexport { SandboxError } from \"./utils.js\";\n\nfunction parseImageSandboxArg(value: string): ImageSandboxConfig | undefined {\n if (!value.startsWith(\"image:\")) {\n return undefined;\n }\n\n const image = value.slice(\"image:\".length);\n if (!image) {\n throw new SandboxError(\"Error: image sandbox requires image name (e.g., image:ubuntu:24.04)\");\n }\n return { type: \"image\", image };\n}\n\nasync function validateImageSandbox(config: ImageSandboxConfig): Promise<void> {\n try {\n await execSimple(\"docker\", [\"--version\"]);\n } catch {\n throw new SandboxError(\"Error: Docker is not installed or not in PATH\");\n }\n console.log(` Image auto-provisioning enabled. Image: ${config.image}`);\n}\n\nconst imageSandboxAdapter: SandboxAdapter<ImageSandboxConfig> = {\n type: \"image\",\n credentials: { env: true, fileMounts: true },\n workspace: { managedProjection: true },\n parse: parseImageSandboxArg,\n validate: validateImageSandbox,\n};\n\nconst sandboxAdapters = [\n hostSandboxAdapter,\n containerSandboxAdapter,\n imageSandboxAdapter,\n cloudflareSandboxAdapter,\n] as const;\nconst sandboxAdapterByType = new Map(\n sandboxAdapters.map((adapter) => [adapter.type, adapter]),\n) as Map<SandboxConfig[\"type\"], SandboxAdapter>;\n\nexport function getSandboxAdapters(): readonly [...typeof sandboxAdapters] {\n return sandboxAdapters;\n}\n\nfunction requireSandboxAdapter(type: SandboxConfig[\"type\"]): SandboxAdapter {\n const adapter = sandboxAdapterByType.get(type);\n if (!adapter) throw new SandboxError(`Error: Unsupported sandbox type '${type}'`);\n return adapter;\n}\n\nexport function getSandboxCredentialCapabilities(\n type: SandboxConfig[\"type\"],\n): SandboxAdapter[\"credentials\"] {\n return requireSandboxAdapter(type).credentials;\n}\n\nexport function getSandboxWorkspaceCapabilities(\n type: SandboxConfig[\"type\"],\n): SandboxAdapter[\"workspace\"] {\n return requireSandboxAdapter(type).workspace;\n}\n\nconst warnedUnenforcedPrivacy = new Set<string>();\n\n/**\n * Only backends with a managed Workspace projection enforce office\n * visibility (read-only global knowledge, no access to other private\n * offices). Host, shared-container, and remote backends run every office in\n * one filesystem and are documented as trusted deployments (ADR 0003), so a\n * private office there is served with a one-time warning rather than\n * refused: refusing would take every DM offline on those backends.\n */\nexport function assertSandboxSupportsWorkspacePolicy(\n sandboxConfig: SandboxConfig,\n visibility: \"public\" | \"private\",\n officeKey: string,\n): void {\n const capabilities = getSandboxWorkspaceCapabilities(sandboxConfig.type);\n if (capabilities.managedProjection || visibility === \"public\") return;\n if (warnedUnenforcedPrivacy.has(officeKey)) return;\n warnedUnenforcedPrivacy.add(officeKey);\n log.logWarning(\n `Sandbox '${sandboxConfig.type}' cannot enforce private office visibility for ${officeKey}`,\n \"host, container, and cloudflare backends share one filesystem; use image:* to isolate private channels and DMs\",\n );\n}\n\nexport function parseSandboxArg(value: string): SandboxConfig {\n for (const adapter of sandboxAdapters) {\n const config = adapter.parse(value);\n if (config) {\n return config;\n }\n }\n\n if (value.startsWith(\"docker:\")) {\n throw new SandboxError(\n `Error: '${value}' is not supported. Use 'container:<container-name>' for the shared-container mode or 'image:<image-name>' for mikan-managed per-user containers.`,\n );\n }\n\n throw new SandboxError(\n `Error: Invalid sandbox type '${value}'. Use 'host', 'container:<container-name>', 'image:<image-name>', or 'cloudflare:<sandbox-id>'`,\n );\n}\n\nexport async function validateSandbox(config: SandboxConfig): Promise<void> {\n await requireSandboxAdapter(config.type).validate?.(config);\n}\n\n/**\n * Create an executor that runs commands on host, in Docker, or through a\n * Cloudflare sandbox bridge.\n */\nexport function createExecutor(\n config: SandboxConfig,\n env?: Record<string, string>,\n ensureReady?: () => Promise<void>,\n): Executor {\n const adapter = requireSandboxAdapter(config.type);\n if (!adapter.createExecutor) {\n throw new SandboxError(\"Error: image sandbox must resolve to a concrete container executor\");\n }\n return adapter.createExecutor(config, env, ensureReady);\n}\n\n/**\n * The runtime path context for a sandbox config before an actor-specific\n * executor is resolved. `image` configs are unresolved by nature (the actor\n * decides the concrete container), but their mount layout is fixed, so path\n * mapping is known without resolving.\n */\nexport function getUnresolvedSandboxPathContext(\n sandboxConfig: SandboxConfig,\n hostWorkspaceRoot: string,\n): RuntimePathContext {\n if (sandboxConfig.type === \"image\") {\n return createMountedRuntimePathContext(hostWorkspaceRoot, \"/workspace\");\n }\n\n return createExecutor(sandboxConfig).getPathContext(hostWorkspaceRoot);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ContainerExecutor, containerSandboxAdapter } from \"./container.js\";\nimport { CloudflareSandboxExecutor, cloudflareSandboxAdapter } from \"./cloudflare.js\";\nimport { HostExecutor, hostSandboxAdapter } from \"./host.js\";\nimport { createMountedRuntimePathContext, execSimple, SandboxError } from \"./utils.js\";\nimport * as log from \"../log.js\";\nimport type {\n Executor,\n ImageSandboxConfig,\n RuntimePathContext,\n SandboxAdapter,\n SandboxConfig,\n} from \"./types.js\";\n\nexport type {\n CloudflareSandboxConfig,\n ExecOptions,\n ExecResult,\n Executor,\n RuntimePathContext,\n SandboxAdapter,\n SandboxConfig,\n} from \"./types.js\";\nexport { CloudflareSandboxExecutor, ContainerExecutor, HostExecutor };\nexport { SandboxError } from \"./utils.js\";\n\nfunction parseImageSandboxArg(value: string): ImageSandboxConfig | undefined {\n if (!value.startsWith(\"image:\")) {\n return undefined;\n }\n\n const image = value.slice(\"image:\".length);\n if (!image) {\n throw new SandboxError(\"Error: image sandbox requires image name (e.g., image:ubuntu:24.04)\");\n }\n return { type: \"image\", image };\n}\n\nasync function validateImageSandbox(config: ImageSandboxConfig): Promise<void> {\n try {\n await execSimple(\"docker\", [\"--version\"]);\n } catch {\n throw new SandboxError(\"Error: Docker is not installed or not in PATH\");\n }\n console.log(` Image auto-provisioning enabled. Image: ${config.image}`);\n}\n\nconst imageSandboxAdapter: SandboxAdapter<ImageSandboxConfig> = {\n type: \"image\",\n credentials: { env: true, fileMounts: true },\n workspace: { managedProjection: true },\n parse: parseImageSandboxArg,\n validate: validateImageSandbox,\n};\n\nconst sandboxAdapters = [\n hostSandboxAdapter,\n containerSandboxAdapter,\n imageSandboxAdapter,\n cloudflareSandboxAdapter,\n] as const;\nconst sandboxAdapterByType = new Map(\n sandboxAdapters.map((adapter) => [adapter.type, adapter]),\n) as Map<SandboxConfig[\"type\"], SandboxAdapter>;\n\nexport function getSandboxAdapters(): readonly [...typeof sandboxAdapters] {\n return sandboxAdapters;\n}\n\nfunction requireSandboxAdapter(type: SandboxConfig[\"type\"]): SandboxAdapter {\n const adapter = sandboxAdapterByType.get(type);\n if (!adapter) throw new SandboxError(`Error: Unsupported sandbox type '${type}'`);\n return adapter;\n}\n\nexport function getSandboxCredentialCapabilities(\n type: SandboxConfig[\"type\"],\n): SandboxAdapter[\"credentials\"] {\n return requireSandboxAdapter(type).credentials;\n}\n\nexport function getSandboxWorkspaceCapabilities(\n type: SandboxConfig[\"type\"],\n): SandboxAdapter[\"workspace\"] {\n return requireSandboxAdapter(type).workspace;\n}\n\nconst warnedUnenforcedPrivacy = new Set<string>();\n\nexport function assertSandboxSupportsWorkspacePolicy(\n sandboxConfig: SandboxConfig,\n visibility: \"public\" | \"private\",\n officeKey: string,\n): void {\n const capabilities = getSandboxWorkspaceCapabilities(sandboxConfig.type);\n if (capabilities.managedProjection || visibility === \"public\") return;\n if (warnedUnenforcedPrivacy.has(officeKey)) return;\n warnedUnenforcedPrivacy.add(officeKey);\n log.logWarning(\n `Sandbox '${sandboxConfig.type}' cannot enforce private office visibility for ${officeKey}`,\n \"host, container, and cloudflare backends share one filesystem; use image:* to isolate private channels and DMs\",\n );\n}\n\nexport function parseSandboxArg(value: string): SandboxConfig {\n for (const adapter of sandboxAdapters) {\n const config = adapter.parse(value);\n if (config) {\n return config;\n }\n }\n\n if (value.startsWith(\"docker:\")) {\n throw new SandboxError(\n `Error: '${value}' is not supported. Use 'container:<container-name>' for the shared-container mode or 'image:<image-name>' for mikan-managed per-user containers.`,\n );\n }\n\n throw new SandboxError(\n `Error: Invalid sandbox type '${value}'. Use 'host', 'container:<container-name>', 'image:<image-name>', or 'cloudflare:<sandbox-id>'`,\n );\n}\n\nexport async function validateSandbox(config: SandboxConfig): Promise<void> {\n await requireSandboxAdapter(config.type).validate?.(config);\n}\n\nexport function createExecutor(\n config: SandboxConfig,\n env?: Record<string, string>,\n ensureReady?: () => Promise<void>,\n): Executor {\n const adapter = requireSandboxAdapter(config.type);\n if (!adapter.createExecutor) {\n throw new SandboxError(\"Error: image sandbox must resolve to a concrete container executor\");\n }\n return adapter.createExecutor(config, env, ensureReady);\n}\n\nexport function getUnresolvedSandboxPathContext(\n sandboxConfig: SandboxConfig,\n hostWorkspaceRoot: string,\n): RuntimePathContext {\n if (sandboxConfig.type === \"image\") {\n return createMountedRuntimePathContext(hostWorkspaceRoot, \"/workspace\");\n }\n\n return createExecutor(sandboxConfig).getPathContext(hostWorkspaceRoot);\n}\n"]}
@@ -4,7 +4,6 @@ export declare class DockerContainerManager {
4
4
  private readonly image;
5
5
  private state;
6
6
  private inflight;
7
- /** Active layout migration; unset means no translation ever applies. */
8
7
  private bindTranslator?;
9
8
  private layoutMigrations;
10
9
  private static readonly MANAGED_LABEL;
@@ -33,77 +32,18 @@ export declare class DockerContainerManager {
33
32
  stop(containerKey: string): Promise<void>;
34
33
  remove(containerKey: string): Promise<void>;
35
34
  stopIdle(maxIdleMs: number): Promise<void>;
36
- /**
37
- * Force-remove every managed container belonging to the given conversation
38
- * ids. The office layout migration renames the host directories a
39
- * container's workspace mount points at, so a surviving container would keep
40
- * writing through stale mounts while the runtime works in the new location.
41
- */
42
35
  removeContainersForConversations(conversationIds: ReadonlySet<string>): Promise<void>;
43
- /**
44
- * Arm the office-layout container migration. Containers whose binds still
45
- * reference legacy raw-id paths are moved to the office-key layout without
46
- * losing their writable layer: commit → remove → create with translated
47
- * binds, preserving everything installed inside. Idempotent per container
48
- * and resumable — the pre-removal binds ride on the snapshot image label,
49
- * so a crash between commit and create resumes from the snapshot.
50
- */
51
36
  armContainerLayoutMigration(translator: ContainerBindTranslator): void;
52
- /**
53
- * Sweep every managed container through the layout migration, serially and
54
- * with a small gap, so the one-time cost never lands on the boot path or on
55
- * a message. Safe to fire-and-forget; each unit is idempotent.
56
- */
57
37
  sweepContainerLayoutMigration(delayMs?: number): Promise<void>;
58
- /** Move one container to the office-key layout; no-op when already there. */
59
38
  private migrateContainerLayout;
60
39
  private migrateContainerLayoutInner;
61
- /**
62
- * Create `containerName` from its layout snapshot with `bindSpecs`,
63
- * restoring the managed labels and recomputing the mount signature.
64
- * `create`, not `run`: idle containers stay stopped exactly as they were;
65
- * callers that need the container running start it themselves.
66
- */
67
40
  private createContainerFromSnapshot;
68
- /**
69
- * `docker commit` captures the empty directories Docker created as bind
70
- * targets, so a public office that stopped being mounted would linger in
71
- * the snapshot as an empty `/workspace/public/<key>`. Remove any entry
72
- * there that no current bind targets; only empty directories are removed,
73
- * so a real file could never be deleted by this pass.
74
- */
75
41
  private removeStaleMountpoints;
76
- /**
77
- * Recreate a drifted container with the desired mounts while keeping its
78
- * writable layer: commit — the new binds ride the snapshot label, so a
79
- * crash at any point resumes through the layout-migration path — then
80
- * remove, create from the snapshot, and start. The snapshot is untagged
81
- * once the new container is confirmed up: its only job was bridging
82
- * commit → create, and the container now owns that content in its own
83
- * writable layer, so nothing still needs the tag.
84
- */
85
42
  private recreateContainerPreservingContents;
86
- /** Binds recorded on a snapshot image, or undefined when no snapshot exists. */
87
43
  private readMigrateImageBinds;
88
44
  private readImageLabel;
89
- /**
90
- * Delete a container's layout snapshot after an intentional removal, so a
91
- * missing container plus a surviving snapshot can only mean a crash in the
92
- * middle of the layout migration (the resume discriminator).
93
- */
94
45
  private removeMigrateSnapshot;
95
46
  private listMigrateSnapshotContainerNames;
96
- /**
97
- * Catch-up pass for snapshots the success path in
98
- * `migrateContainerLayoutInner` did not get to remove itself — e.g. a
99
- * crash between `createContainerFromSnapshot` and its own cleanup. A
100
- * snapshot is only still needed while its container remains "missing"
101
- * (the resume path in `migrateContainerLayoutInner` reads pre-removal
102
- * binds off it); once the container exists again in any state, the
103
- * snapshot has done its job regardless of whether that container's
104
- * `Config.Image` still points at it — removing a tag never deletes
105
- * layers a live container still uses.
106
- */
107
47
  private removeDanglingMigrateImages;
108
48
  reconcile(): Promise<void>;
109
49
  private setState;
@@ -132,7 +72,6 @@ export declare class DockerContainerManager {
132
72
  private normalizeDockerValue;
133
73
  private parseDockerTimestamp;
134
74
  private containerKeyFromContainerName;
135
- /** @returns true when the container is gone (removed or already missing). */
136
75
  private forceRemoveContainer;
137
76
  private removeLegacyContainer;
138
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provisioner.d.ts","sourceRoot":"","sources":["../../src/sandbox/provisioner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provisioner.d.ts","sourceRoot":"","sources":["../../src/sandbox/provisioner.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,6 @@ function isDockerNotFoundError(err) {
19
19
  /network [^\n]+ not found/.test(haystack) ||
20
20
  /error: no such [^\n]+/.test(haystack));
21
21
  }
22
- /** Parse `src:dst[:ro]` back into a ContainerMount for signature computation. */
23
22
  function bindSpecToMount(bindSpec) {
24
23
  const readOnly = bindSpec.endsWith(":ro");
25
24
  const spec = readOnly ? bindSpec.slice(0, -3) : bindSpec;
@@ -71,9 +70,6 @@ export class DockerContainerManager {
71
70
  async provisionInner(containerKey, options) {
72
71
  const containerName = options.containerName ?? DockerContainerManager.containerName(containerKey);
73
72
  const mounts = options.mounts ?? [];
74
- // A container still on the pre-office layout must move its writable layer
75
- // to the new mounts before the drift check below would recreate it from
76
- // the base image and discard everything installed inside.
77
73
  await this.migrateContainerLayout(containerName);
78
74
  const status = await this.inspectStatus(containerName);
79
75
  try {
@@ -149,9 +145,6 @@ export class DockerContainerManager {
149
145
  const networkName = DockerContainerManager.networkName(containerKey);
150
146
  const removed = await this.forceRemoveContainer(containerName, `Container ${containerName} removed`, `Failed to remove container ${containerName}`);
151
147
  if (!removed) {
152
- // The container may still be running with its old mounts. Keeping the
153
- // ownership state (and throwing) is the honest outcome: callers such
154
- // as credential refresh must not report a teardown that did not happen.
155
148
  throw new Error(`Failed to remove container ${containerName}`);
156
149
  }
157
150
  try {
@@ -176,12 +169,6 @@ export class DockerContainerManager {
176
169
  }
177
170
  await Promise.all(toStop.map((containerKey) => this.stop(containerKey)));
178
171
  }
179
- /**
180
- * Force-remove every managed container belonging to the given conversation
181
- * ids. The office layout migration renames the host directories a
182
- * container's workspace mount points at, so a surviving container would keep
183
- * writing through stale mounts while the runtime works in the new location.
184
- */
185
172
  async removeContainersForConversations(conversationIds) {
186
173
  if (conversationIds.size === 0)
187
174
  return;
@@ -193,30 +180,14 @@ export class DockerContainerManager {
193
180
  await this.forceRemoveContainer(containerName, `Removed container ${containerName} after office migration`, `Failed to remove container ${containerName} after office migration`);
194
181
  }));
195
182
  }
196
- /**
197
- * Arm the office-layout container migration. Containers whose binds still
198
- * reference legacy raw-id paths are moved to the office-key layout without
199
- * losing their writable layer: commit → remove → create with translated
200
- * binds, preserving everything installed inside. Idempotent per container
201
- * and resumable — the pre-removal binds ride on the snapshot image label,
202
- * so a crash between commit and create resumes from the snapshot.
203
- */
204
183
  armContainerLayoutMigration(translator) {
205
184
  this.bindTranslator = translator;
206
185
  }
207
- /**
208
- * Sweep every managed container through the layout migration, serially and
209
- * with a small gap, so the one-time cost never lands on the boot path or on
210
- * a message. Safe to fire-and-forget; each unit is idempotent.
211
- */
212
186
  async sweepContainerLayoutMigration(delayMs = 2000) {
213
187
  if (!this.bindTranslator)
214
188
  return;
215
189
  let names;
216
190
  try {
217
- // Include snapshot names: a crash between commit and create leaves a
218
- // snapshot with no container, which must resume before the GC below
219
- // could mistake it for an orphan.
220
191
  const containers = await this.listContainerNamesByLabel();
221
192
  const snapshots = await this.listMigrateSnapshotContainerNames();
222
193
  names = Array.from(new Set([...containers, ...snapshots]));
@@ -234,11 +205,8 @@ export class DockerContainerManager {
234
205
  }
235
206
  await new Promise((resolve) => setTimeout(resolve, delayMs));
236
207
  }
237
- // Snapshot images whose container has since been recreated from the base
238
- // image are no longer referenced; reclaim them.
239
208
  await this.removeDanglingMigrateImages();
240
209
  }
241
- /** Move one container to the office-key layout; no-op when already there. */
242
210
  migrateContainerLayout(containerName) {
243
211
  const translator = this.bindTranslator;
244
212
  if (!translator)
@@ -257,9 +225,6 @@ export class DockerContainerManager {
257
225
  let originalBinds;
258
226
  const status = await this.inspectStatus(containerName);
259
227
  if (status === "missing") {
260
- // Resume path: a previous run committed and removed the container but
261
- // died before creating the replacement. The snapshot carries the
262
- // pre-removal binds on its label.
263
228
  const labeled = await this.readMigrateImageBinds(snapshotImage);
264
229
  if (labeled === undefined)
265
230
  return;
@@ -269,7 +234,7 @@ export class DockerContainerManager {
269
234
  originalBinds = await this.inspectBindMounts(containerName);
270
235
  const translated = originalBinds.map(translator);
271
236
  if (this.sameBinds(translated.toSorted(), originalBinds.slice().toSorted())) {
272
- return; // already on the office layout
237
+ return;
273
238
  }
274
239
  log.logInfo(`Migrating container ${containerName} to the office layout`);
275
240
  await this.execFileImpl("docker", [
@@ -282,25 +247,11 @@ export class DockerContainerManager {
282
247
  await this.execFileImpl("docker", ["rm", "-f", containerName]);
283
248
  }
284
249
  await this.createContainerFromSnapshot(containerName, originalBinds.map(translator));
285
- // The snapshot's only job was bridging commit → create; the new container
286
- // already owns that content in its own writable layer; untagging it now
287
- // (rather than waiting for a "natural recreation from the base image"
288
- // that never happens — every recreation path here targets this same
289
- // snapshot family) is what makes migration actually one-time instead of
290
- // repeating on every future sweep that still finds the tag.
291
250
  await this.removeMigrateSnapshot(containerName);
292
251
  log.logInfo(`Container ${containerName} migrated to the office layout`);
293
252
  }
294
- /**
295
- * Create `containerName` from its layout snapshot with `bindSpecs`,
296
- * restoring the managed labels and recomputing the mount signature.
297
- * `create`, not `run`: idle containers stay stopped exactly as they were;
298
- * callers that need the container running start it themselves.
299
- */
300
253
  async createContainerFromSnapshot(containerName, bindSpecs, knownContainerKey) {
301
254
  const snapshotImage = `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`;
302
- // The sweep has only the container name and derives the key; the drift
303
- // path knows the real key (container names can be caller-supplied).
304
255
  const containerKey = knownContainerKey ?? this.containerKeyFromContainerName(containerName) ?? containerName;
305
256
  const networkName = await this.ensureNetwork(containerKey);
306
257
  const conversationId = await this.readImageLabel(snapshotImage, DockerContainerManager.CONVERSATION_ID_LABEL_KEY);
@@ -336,13 +287,6 @@ export class DockerContainerManager {
336
287
  "infinity",
337
288
  ]);
338
289
  }
339
- /**
340
- * `docker commit` captures the empty directories Docker created as bind
341
- * targets, so a public office that stopped being mounted would linger in
342
- * the snapshot as an empty `/workspace/public/<key>`. Remove any entry
343
- * there that no current bind targets; only empty directories are removed,
344
- * so a real file could never be deleted by this pass.
345
- */
346
290
  async removeStaleMountpoints(containerName, bindSpecs) {
347
291
  const keep = new Set(bindSpecs
348
292
  .map((bind) => bindSpecToMount(bind).target)
@@ -371,15 +315,6 @@ export class DockerContainerManager {
371
315
  log.logWarning(`Could not clean stale mountpoints in ${containerName}`, String(err));
372
316
  }
373
317
  }
374
- /**
375
- * Recreate a drifted container with the desired mounts while keeping its
376
- * writable layer: commit — the new binds ride the snapshot label, so a
377
- * crash at any point resumes through the layout-migration path — then
378
- * remove, create from the snapshot, and start. The snapshot is untagged
379
- * once the new container is confirmed up: its only job was bridging
380
- * commit → create, and the container now owns that content in its own
381
- * writable layer, so nothing still needs the tag.
382
- */
383
318
  async recreateContainerPreservingContents(containerKey, containerName, mounts) {
384
319
  const snapshotImage = `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`;
385
320
  const bindSpecs = mounts.map((mount) => this.toBindSpec(mount));
@@ -396,7 +331,6 @@ export class DockerContainerManager {
396
331
  await this.removeStaleMountpoints(containerName, bindSpecs);
397
332
  await this.removeMigrateSnapshot(containerName);
398
333
  }
399
- /** Binds recorded on a snapshot image, or undefined when no snapshot exists. */
400
334
  async readMigrateImageBinds(snapshotImage) {
401
335
  const raw = await this.readImageLabel(snapshotImage, DockerContainerManager.MIGRATE_BINDS_LABEL_KEY);
402
336
  if (raw === undefined)
@@ -421,11 +355,6 @@ export class DockerContainerManager {
421
355
  return undefined;
422
356
  }
423
357
  }
424
- /**
425
- * Delete a container's layout snapshot after an intentional removal, so a
426
- * missing container plus a surviving snapshot can only mean a crash in the
427
- * middle of the layout migration (the resume discriminator).
428
- */
429
358
  async removeMigrateSnapshot(containerName) {
430
359
  try {
431
360
  await this.execFileImpl("docker", [
@@ -433,9 +362,7 @@ export class DockerContainerManager {
433
362
  `${DockerContainerManager.MIGRATE_IMAGE_PREFIX}:${containerName}`,
434
363
  ]);
435
364
  }
436
- catch {
437
- // No snapshot for this container — the common case.
438
- }
365
+ catch { }
439
366
  }
440
367
  async listMigrateSnapshotContainerNames() {
441
368
  try {
@@ -451,17 +378,6 @@ export class DockerContainerManager {
451
378
  return [];
452
379
  }
453
380
  }
454
- /**
455
- * Catch-up pass for snapshots the success path in
456
- * `migrateContainerLayoutInner` did not get to remove itself — e.g. a
457
- * crash between `createContainerFromSnapshot` and its own cleanup. A
458
- * snapshot is only still needed while its container remains "missing"
459
- * (the resume path in `migrateContainerLayoutInner` reads pre-removal
460
- * binds off it); once the container exists again in any state, the
461
- * snapshot has done its job regardless of whether that container's
462
- * `Config.Image` still points at it — removing a tag never deletes
463
- * layers a live container still uses.
464
- */
465
381
  async removeDanglingMigrateImages() {
466
382
  let stdout;
467
383
  try {
@@ -479,7 +395,7 @@ export class DockerContainerManager {
479
395
  const containerName = image.slice(DockerContainerManager.MIGRATE_IMAGE_PREFIX.length + 1);
480
396
  const status = await this.inspectStatus(containerName);
481
397
  if (status === "missing")
482
- continue; // still needed for a future resume
398
+ continue;
483
399
  try {
484
400
  await this.execFileImpl("docker", ["rmi", image]);
485
401
  log.logInfo(`Removed layout-migration snapshot image ${image}`);
@@ -515,9 +431,6 @@ export class DockerContainerManager {
515
431
  log.logWarning(`Skipping unmanaged-style container without container key`, containerName);
516
432
  continue;
517
433
  }
518
- // Containers keyed under the pre-office raw-conversation resource key
519
- // are unreachable now that resource identity is the office key: no
520
- // provision will ever address them again, so reap rather than adopt.
521
434
  if (containerKey === legacyConversationResourceKey(details.conversationId)) {
522
435
  legacyRemovals.push(this.forceRemoveContainer(containerName, `Removed container ${containerName} keyed by pre-office resource identity`, `Failed to remove legacy-keyed container ${containerName}`).then(() => undefined));
523
436
  continue;
@@ -542,9 +455,6 @@ export class DockerContainerManager {
542
455
  return mounts.flatMap((mount) => ["-v", this.toBindSpec(mount)]);
543
456
  }
544
457
  toBindSpec(mount) {
545
- // The `:ro` suffix is part of the bind spec, so it also flows into
546
- // expectedBinds/mountSignature — flipping a mount's writability is drift
547
- // and recreates the container rather than leaving a stale writable bind.
548
458
  return `${mount.source}:${mount.target}${mount.readOnly ? ":ro" : ""}`;
549
459
  }
550
460
  async runContainer(containerKey, containerName, mounts, options) {
@@ -599,9 +509,6 @@ export class DockerContainerManager {
599
509
  args.push("--cpus", limits.cpus);
600
510
  if (limits?.memory) {
601
511
  args.push("--memory", limits.memory);
602
- // Keep Docker's no-extra-swap semantics explicit. Docker requires
603
- // memory-swap to be updated together when raising an existing memory
604
- // limit above the current swap limit.
605
512
  args.push("--memory-swap", limits.memory);
606
513
  }
607
514
  return args;
@@ -684,16 +591,8 @@ export class DockerContainerManager {
684
591
  try {
685
592
  const stat = statSync(source);
686
593
  if (stat.isFile()) {
687
- // Files are atomically replaced (rename), which leaves the container
688
- // holding a stale inode — content changes must recreate the mount.
689
594
  return createHash("sha256").update(readFileSync(source)).digest("hex");
690
595
  }
691
- // Directories: a bind mount follows changes inside the directory live,
692
- // so only replacing the directory itself makes the mount stale.
693
- // Size/mtime churn from ordinary activity — event files coming and
694
- // going, children being created — must not read as drift. Identity is
695
- // dev:ino plus birth time, because ext4 recycles inode numbers
696
- // immediately and a same-path replacement can reuse the old one.
697
596
  return `${stat.isDirectory() ? "dir" : "other"}:${stat.dev}:${stat.ino}:${stat.birthtimeMs}`;
698
597
  }
699
598
  catch {
@@ -849,7 +748,6 @@ export class DockerContainerManager {
849
748
  const containerKey = containerName.slice(prefix.length);
850
749
  return containerKey.length > 0 ? containerKey : undefined;
851
750
  }
852
- /** @returns true when the container is gone (removed or already missing). */
853
751
  async forceRemoveContainer(containerName, successLog, failureLog) {
854
752
  try {
855
753
  await this.execFileImpl("docker", ["rm", "-f", containerName]);