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

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 (535) hide show
  1. package/CHANGELOG.md +39 -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 +3 -7
  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 +4 -37
  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 +3 -12
  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/sandbox.d.ts +3 -0
  256. package/dist/cli/sandbox.d.ts.map +1 -0
  257. package/dist/cli/sandbox.js +79 -0
  258. package/dist/cli/sandbox.js.map +1 -0
  259. package/dist/cli/sessions.d.ts.map +1 -1
  260. package/dist/cli/sessions.js +0 -11
  261. package/dist/cli/sessions.js.map +1 -1
  262. package/dist/cli/types.d.ts +2 -6
  263. package/dist/cli/types.d.ts.map +1 -1
  264. package/dist/cli/types.js.map +1 -1
  265. package/dist/env-manifest.d.ts +0 -21
  266. package/dist/env-manifest.d.ts.map +1 -1
  267. package/dist/env-manifest.js +0 -11
  268. package/dist/env-manifest.js.map +1 -1
  269. package/dist/events/index.d.ts +0 -51
  270. package/dist/events/index.d.ts.map +1 -1
  271. package/dist/events/index.js +0 -42
  272. package/dist/events/index.js.map +1 -1
  273. package/dist/events/scheduler.d.ts +0 -8
  274. package/dist/events/scheduler.d.ts.map +1 -1
  275. package/dist/events/scheduler.js +0 -8
  276. package/dist/events/scheduler.js.map +1 -1
  277. package/dist/file-guards.d.ts +0 -15
  278. package/dist/file-guards.d.ts.map +1 -1
  279. package/dist/file-guards.js +2 -26
  280. package/dist/file-guards.js.map +1 -1
  281. package/dist/harness/execution-env.d.ts +0 -15
  282. package/dist/harness/execution-env.d.ts.map +1 -1
  283. package/dist/harness/execution-env.js +4 -55
  284. package/dist/harness/execution-env.js.map +1 -1
  285. package/dist/harness/http.d.ts +0 -12
  286. package/dist/harness/http.d.ts.map +1 -1
  287. package/dist/harness/http.js +0 -34
  288. package/dist/harness/http.js.map +1 -1
  289. package/dist/harness/index.d.ts +4 -7
  290. package/dist/harness/index.d.ts.map +1 -1
  291. package/dist/harness/index.js +4 -7
  292. package/dist/harness/index.js.map +1 -1
  293. package/dist/harness/jev.d.ts +0 -28
  294. package/dist/harness/jev.d.ts.map +1 -1
  295. package/dist/harness/jev.js +0 -45
  296. package/dist/harness/jev.js.map +1 -1
  297. package/dist/harness/mcp-result.d.ts +20 -0
  298. package/dist/harness/mcp-result.d.ts.map +1 -0
  299. package/dist/harness/mcp-result.js +171 -0
  300. package/dist/harness/mcp-result.js.map +1 -0
  301. package/dist/harness/mcp.d.ts +0 -19
  302. package/dist/harness/mcp.d.ts.map +1 -1
  303. package/dist/harness/mcp.js +7 -66
  304. package/dist/harness/mcp.js.map +1 -1
  305. package/dist/harness/models.d.ts +0 -19
  306. package/dist/harness/models.d.ts.map +1 -1
  307. package/dist/harness/models.js +0 -52
  308. package/dist/harness/models.js.map +1 -1
  309. package/dist/harness/open-connector.d.ts +0 -12
  310. package/dist/harness/open-connector.d.ts.map +1 -1
  311. package/dist/harness/open-connector.js +0 -22
  312. package/dist/harness/open-connector.js.map +1 -1
  313. package/dist/harness/presenter.d.ts +1 -0
  314. package/dist/harness/presenter.d.ts.map +1 -1
  315. package/dist/harness/presenter.js +16 -66
  316. package/dist/harness/presenter.js.map +1 -1
  317. package/dist/harness/prompt.d.ts +0 -11
  318. package/dist/harness/prompt.d.ts.map +1 -1
  319. package/dist/harness/prompt.js +1 -18
  320. package/dist/harness/prompt.js.map +1 -1
  321. package/dist/harness/runner.d.ts.map +1 -1
  322. package/dist/harness/runner.js +8 -28
  323. package/dist/harness/runner.js.map +1 -1
  324. package/dist/harness/session.d.ts +11 -28
  325. package/dist/harness/session.d.ts.map +1 -1
  326. package/dist/harness/session.js +100 -38
  327. package/dist/harness/session.js.map +1 -1
  328. package/dist/harness/skills.d.ts +0 -22
  329. package/dist/harness/skills.d.ts.map +1 -1
  330. package/dist/harness/skills.js +0 -20
  331. package/dist/harness/skills.js.map +1 -1
  332. package/dist/harness/subagent-profiles.d.ts +0 -4
  333. package/dist/harness/subagent-profiles.d.ts.map +1 -1
  334. package/dist/harness/subagent-profiles.js +0 -29
  335. package/dist/harness/subagent-profiles.js.map +1 -1
  336. package/dist/harness/subagent.d.ts +0 -25
  337. package/dist/harness/subagent.d.ts.map +1 -1
  338. package/dist/harness/subagent.js +1 -70
  339. package/dist/harness/subagent.js.map +1 -1
  340. package/dist/harness/tools/event.d.ts.map +1 -1
  341. package/dist/harness/tools/event.js +0 -9
  342. package/dist/harness/tools/event.js.map +1 -1
  343. package/dist/harness/tools/generate-image.d.ts +0 -6
  344. package/dist/harness/tools/generate-image.d.ts.map +1 -1
  345. package/dist/harness/tools/generate-image.js.map +1 -1
  346. package/dist/harness/tools/host-fn-tool.d.ts +0 -17
  347. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -1
  348. package/dist/harness/tools/host-fn-tool.js +0 -16
  349. package/dist/harness/tools/host-fn-tool.js.map +1 -1
  350. package/dist/harness/tools/index.d.ts +1 -7
  351. package/dist/harness/tools/index.d.ts.map +1 -1
  352. package/dist/harness/tools/index.js +3 -14
  353. package/dist/harness/tools/index.js.map +1 -1
  354. package/dist/harness/tools/jev-browser.d.ts +4 -94
  355. package/dist/harness/tools/jev-browser.d.ts.map +1 -1
  356. package/dist/harness/tools/jev-browser.js +203 -92
  357. package/dist/harness/tools/jev-browser.js.map +1 -1
  358. package/dist/harness/tools/jev.d.ts +0 -8
  359. package/dist/harness/tools/jev.d.ts.map +1 -1
  360. package/dist/harness/tools/jev.js +0 -11
  361. package/dist/harness/tools/jev.js.map +1 -1
  362. package/dist/harness/tools/pi-tools.d.ts +1 -11
  363. package/dist/harness/tools/pi-tools.d.ts.map +1 -1
  364. package/dist/harness/tools/pi-tools.js +1 -30
  365. package/dist/harness/tools/pi-tools.js.map +1 -1
  366. package/dist/harness/tools/react.d.ts +0 -5
  367. package/dist/harness/tools/react.d.ts.map +1 -1
  368. package/dist/harness/tools/react.js +0 -5
  369. package/dist/harness/tools/react.js.map +1 -1
  370. package/dist/harness/tools/secret-redaction.d.ts +0 -25
  371. package/dist/harness/tools/secret-redaction.d.ts.map +1 -1
  372. package/dist/harness/tools/secret-redaction.js +3 -36
  373. package/dist/harness/tools/secret-redaction.js.map +1 -1
  374. package/dist/harness/tools/subagent.d.ts +0 -34
  375. package/dist/harness/tools/subagent.d.ts.map +1 -1
  376. package/dist/harness/tools/subagent.js +0 -92
  377. package/dist/harness/tools/subagent.js.map +1 -1
  378. package/dist/harness/tools/task.d.ts +0 -1
  379. package/dist/harness/tools/task.d.ts.map +1 -1
  380. package/dist/harness/tools/task.js +0 -1
  381. package/dist/harness/tools/task.js.map +1 -1
  382. package/dist/harness/tools/types.d.ts +0 -16
  383. package/dist/harness/tools/types.d.ts.map +1 -1
  384. package/dist/harness/tools/types.js.map +1 -1
  385. package/dist/harness/types.d.ts +1 -77
  386. package/dist/harness/types.d.ts.map +1 -1
  387. package/dist/harness/types.js.map +1 -1
  388. package/dist/index.d.ts.map +1 -1
  389. package/dist/index.js +0 -2
  390. package/dist/index.js.map +1 -1
  391. package/dist/log.d.ts.map +1 -1
  392. package/dist/log.js +0 -13
  393. package/dist/log.js.map +1 -1
  394. package/dist/main.js +7 -52
  395. package/dist/main.js.map +1 -1
  396. package/dist/memory-capture/index.d.ts +16 -0
  397. package/dist/memory-capture/index.d.ts.map +1 -0
  398. package/dist/memory-capture/index.js +194 -0
  399. package/dist/memory-capture/index.js.map +1 -0
  400. package/dist/memory-capture/types.d.ts +27 -0
  401. package/dist/memory-capture/types.d.ts.map +1 -0
  402. package/dist/memory-capture/types.js.map +1 -0
  403. package/dist/observability/index.d.ts +0 -9
  404. package/dist/observability/index.d.ts.map +1 -1
  405. package/dist/observability/index.js +0 -9
  406. package/dist/observability/index.js.map +1 -1
  407. package/dist/observability/instrument.js +0 -5
  408. package/dist/observability/instrument.js.map +1 -1
  409. package/dist/observability/otel.js +0 -1
  410. package/dist/observability/otel.js.map +1 -1
  411. package/dist/observability/sentry.d.ts +0 -18
  412. package/dist/observability/sentry.d.ts.map +1 -1
  413. package/dist/observability/sentry.js +0 -36
  414. package/dist/observability/sentry.js.map +1 -1
  415. package/dist/observability/types.d.ts +1 -10
  416. package/dist/observability/types.d.ts.map +1 -1
  417. package/dist/observability/types.js.map +1 -1
  418. package/dist/office/index.d.ts +0 -76
  419. package/dist/office/index.d.ts.map +1 -1
  420. package/dist/office/index.js +4 -154
  421. package/dist/office/index.js.map +1 -1
  422. package/dist/office/projection.d.ts +0 -29
  423. package/dist/office/projection.d.ts.map +1 -1
  424. package/dist/office/projection.js +5 -41
  425. package/dist/office/projection.js.map +1 -1
  426. package/dist/office/types.d.ts +0 -66
  427. package/dist/office/types.d.ts.map +1 -1
  428. package/dist/office/types.js.map +1 -1
  429. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  430. package/dist/runtime/conversation-runtime.js +22 -83
  431. package/dist/runtime/conversation-runtime.js.map +1 -1
  432. package/dist/runtime/session-lifecycle.d.ts +0 -10
  433. package/dist/runtime/session-lifecycle.d.ts.map +1 -1
  434. package/dist/runtime/session-lifecycle.js +0 -12
  435. package/dist/runtime/session-lifecycle.js.map +1 -1
  436. package/dist/runtime/types.d.ts +2 -29
  437. package/dist/runtime/types.d.ts.map +1 -1
  438. package/dist/runtime/types.js.map +1 -1
  439. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  440. package/dist/sandbox/cloudflare.js +2 -1
  441. package/dist/sandbox/cloudflare.js.map +1 -1
  442. package/dist/sandbox/container.d.ts.map +1 -1
  443. package/dist/sandbox/container.js +21 -15
  444. package/dist/sandbox/container.js.map +1 -1
  445. package/dist/sandbox/host.d.ts.map +1 -1
  446. package/dist/sandbox/host.js +0 -2
  447. package/dist/sandbox/host.js.map +1 -1
  448. package/dist/sandbox/identity.d.ts +0 -28
  449. package/dist/sandbox/identity.d.ts.map +1 -1
  450. package/dist/sandbox/identity.js +0 -28
  451. package/dist/sandbox/identity.js.map +1 -1
  452. package/dist/sandbox/index.d.ts +0 -18
  453. package/dist/sandbox/index.d.ts.map +1 -1
  454. package/dist/sandbox/index.js +2 -19
  455. package/dist/sandbox/index.js.map +1 -1
  456. package/dist/sandbox/layout.d.ts +7 -0
  457. package/dist/sandbox/layout.d.ts.map +1 -0
  458. package/dist/sandbox/layout.js +13 -0
  459. package/dist/sandbox/layout.js.map +1 -0
  460. package/dist/sandbox/provisioner.d.ts +24 -65
  461. package/dist/sandbox/provisioner.d.ts.map +1 -1
  462. package/dist/sandbox/provisioner.js +213 -125
  463. package/dist/sandbox/provisioner.js.map +1 -1
  464. package/dist/sandbox/types.d.ts +0 -39
  465. package/dist/sandbox/types.d.ts.map +1 -1
  466. package/dist/sandbox/types.js.map +1 -1
  467. package/dist/sandbox/utils.d.ts +2 -5
  468. package/dist/sandbox/utils.d.ts.map +1 -1
  469. package/dist/sandbox/utils.js +31 -31
  470. package/dist/sandbox/utils.js.map +1 -1
  471. package/dist/sessions/chat-history-sync.d.ts +0 -6
  472. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  473. package/dist/sessions/chat-history-sync.js +1 -33
  474. package/dist/sessions/chat-history-sync.js.map +1 -1
  475. package/dist/sessions/history-line.d.ts +0 -20
  476. package/dist/sessions/history-line.d.ts.map +1 -1
  477. package/dist/sessions/history-line.js +0 -20
  478. package/dist/sessions/history-line.js.map +1 -1
  479. package/dist/sessions/migrate-common.d.ts +0 -15
  480. package/dist/sessions/migrate-common.d.ts.map +1 -1
  481. package/dist/sessions/migrate-common.js +0 -19
  482. package/dist/sessions/migrate-common.js.map +1 -1
  483. package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
  484. package/dist/sessions/migrate-pi-084.js +0 -7
  485. package/dist/sessions/migrate-pi-084.js.map +1 -1
  486. package/dist/sessions/migrate-v3.d.ts +0 -7
  487. package/dist/sessions/migrate-v3.d.ts.map +1 -1
  488. package/dist/sessions/migrate-v3.js +1 -67
  489. package/dist/sessions/migrate-v3.js.map +1 -1
  490. package/dist/sessions/session-key.d.ts +3 -17
  491. package/dist/sessions/session-key.d.ts.map +1 -1
  492. package/dist/sessions/session-key.js +8 -35
  493. package/dist/sessions/session-key.js.map +1 -1
  494. package/dist/sessions/session-store.d.ts +1 -7
  495. package/dist/sessions/session-store.d.ts.map +1 -1
  496. package/dist/sessions/session-store.js +8 -50
  497. package/dist/sessions/session-store.js.map +1 -1
  498. package/dist/sessions/store.d.ts +0 -60
  499. package/dist/sessions/store.d.ts.map +1 -1
  500. package/dist/sessions/store.js +0 -113
  501. package/dist/sessions/store.js.map +1 -1
  502. package/dist/sessions/types.d.ts +0 -17
  503. package/dist/sessions/types.d.ts.map +1 -1
  504. package/dist/sessions/types.js.map +1 -1
  505. package/dist/settings/apply.d.ts +0 -6
  506. package/dist/settings/apply.d.ts.map +1 -1
  507. package/dist/settings/apply.js +0 -29
  508. package/dist/settings/apply.js.map +1 -1
  509. package/dist/settings/index.d.ts +0 -53
  510. package/dist/settings/index.d.ts.map +1 -1
  511. package/dist/settings/index.js +0 -77
  512. package/dist/settings/index.js.map +1 -1
  513. package/dist/settings/migrate.d.ts +0 -5
  514. package/dist/settings/migrate.d.ts.map +1 -1
  515. package/dist/settings/migrate.js +0 -17
  516. package/dist/settings/migrate.js.map +1 -1
  517. package/dist/types.d.ts +9 -159
  518. package/dist/types.d.ts.map +1 -1
  519. package/dist/types.js.map +1 -1
  520. package/dist/vault/index.d.ts +2 -36
  521. package/dist/vault/index.d.ts.map +1 -1
  522. package/dist/vault/index.js +135 -65
  523. package/dist/vault/index.js.map +1 -1
  524. package/dist/vault/types.d.ts +0 -15
  525. package/dist/vault/types.d.ts.map +1 -1
  526. package/dist/vault/types.js.map +1 -1
  527. package/package.json +1 -1
  528. package/dist/dream/index.d.ts +0 -20
  529. package/dist/dream/index.d.ts.map +0 -1
  530. package/dist/dream/index.js +0 -264
  531. package/dist/dream/index.js.map +0 -1
  532. package/dist/dream/types.d.ts +0 -30
  533. package/dist/dream/types.d.ts.map +0 -1
  534. package/dist/dream/types.js.map +0 -1
  535. /package/dist/{dream → memory-capture}/types.js +0 -0
@@ -1,31 +1,23 @@
1
- /**
2
- * The Conversation office module: canonical identity, the Workspace/Office
3
- * layout values, the durable registry journal, and the boot-time legacy
4
- * migration. Everything outside `src/office/` imports from this module;
5
- * exported types live in `types.ts` per module convention.
6
- */
7
1
  import { createHash, randomBytes } from "node:crypto";
8
2
  import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
9
3
  import { isAbsolute, join, resolve } from "node:path";
10
4
  import * as log from "../log.js";
11
5
  import { parseGithubConversationId } from "../adapters/github/ids.js";
12
6
  import { legacyConversationCredentialKey } from "../sandbox/identity.js";
7
+ import { guestWorkspacePath } from "../sandbox/layout.js";
13
8
  import { migrateConversationVaultKeys } from "../vault/index.js";
14
9
  import { atomicWritePrivateFile, isRecord, readTextFileIfExists } from "../file-guards.js";
15
- // ── Office identity (address & keys) ──────────────────────────────────────────
16
10
  const OFFICE_KEY_VERSION = "v1";
17
11
  const OFFICE_KEY_DOMAIN = "office-address-v1";
18
12
  const OFFICE_KEY_DIGEST_LENGTH = 16;
19
13
  const READABLE_ID_LENGTH = 32;
20
14
  const PLATFORM_NAMES = new Set(["slack", "discord", "telegram", "github"]);
21
15
  const OFFICE_KEY_PATTERN = /^v1-(slack|discord|telegram|github)-[a-z0-9]+(?:-[a-z0-9]+)*-[a-f0-9]{16}$/;
22
- /** Construct the canonical identity used by future office consumers. */
23
16
  export function createOfficeAddress(platform, conversationId) {
24
17
  assertPlatformName(platform);
25
18
  assertConversationId(conversationId);
26
19
  return Object.freeze({ platform, conversationId });
27
20
  }
28
- /** Validate an untrusted runtime value as a canonical office address. */
29
21
  export function validateOfficeAddress(value) {
30
22
  if (!isRecord(value))
31
23
  throw new Error("Office address must be an object");
@@ -37,22 +29,18 @@ export function validateOfficeAddress(value) {
37
29
  }
38
30
  return createOfficeAddress(assertPlatformName(value.platform), value.conversationId);
39
31
  }
40
- /** Return true only for a supported platform name. */
41
32
  function isPlatformName(value) {
42
33
  return typeof value === "string" && PLATFORM_NAMES.has(value);
43
34
  }
44
- /** Validate a platform name and return it for typed callers. */
45
35
  export function assertPlatformName(value) {
46
36
  if (!isPlatformName(value))
47
37
  throw new Error(`Unsupported platform: ${JSON.stringify(value)}`);
48
38
  return value;
49
39
  }
50
- /** Path separators and the C0/C1 control ranges are never allowed in an id. */
51
40
  function isUnsafeConversationIdChar(character) {
52
41
  const code = character.codePointAt(0) ?? 0;
53
42
  return character === "/" || character === "\\" || code <= 0x1f || (code >= 0x7f && code <= 0x9f);
54
43
  }
55
- /** Validate a raw platform conversation identifier before it enters storage. */
56
44
  export function assertConversationId(value) {
57
45
  if (value.length === 0 || value === "." || value === "..") {
58
46
  throw new Error("Conversation id must be non-empty and not a path marker");
@@ -62,7 +50,6 @@ export function assertConversationId(value) {
62
50
  }
63
51
  return value;
64
52
  }
65
- /** Derive a readable diagnostic key whose digest remains the identity authority. */
66
53
  export function officeKey(address) {
67
54
  const normalized = validateOfficeAddress(address);
68
55
  const readable = readableConversationId(normalized.conversationId);
@@ -72,31 +59,18 @@ export function officeKey(address) {
72
59
  .slice(0, OFFICE_KEY_DIGEST_LENGTH);
73
60
  return `${OFFICE_KEY_VERSION}-${normalized.platform}-${readable}-${digest}`;
74
61
  }
75
- /**
76
- * Resolve the persistent workspace directory for an office.
77
- * Module-internal: registry/migration record target paths with it. Callers
78
- * outside `src/office/` use the `Office` value's `dir` field instead.
79
- */
80
62
  export function officeDir(workspaceRoot, address) {
81
63
  return join(workspaceRoot, officeKey(address));
82
64
  }
83
- /**
84
- * Resolve the host-only state directory for an office.
85
- *
86
- * Settings and migration callers that only hold a `stateDir` string use this
87
- * when no materialized `Office` value is available.
88
- */
89
65
  export function officeStateDir(stateDir, address) {
90
66
  return join(stateDir, "conversations", officeKey(address));
91
67
  }
92
- /** Compare canonical office identities without relying on their readable key. */
93
68
  export function sameOffice(left, right) {
94
69
  const leftAddress = validateOfficeAddress(left);
95
70
  const rightAddress = validateOfficeAddress(right);
96
71
  return (leftAddress.platform === rightAddress.platform &&
97
72
  leftAddress.conversationId === rightAddress.conversationId);
98
73
  }
99
- /** Validate a persisted or externally supplied office key. */
100
74
  export function assertOfficeKey(value) {
101
75
  if (!OFFICE_KEY_PATTERN.test(value)) {
102
76
  throw new Error(`Invalid office key: ${JSON.stringify(value)}`);
@@ -115,36 +89,12 @@ function readableConversationId(conversationId) {
115
89
  .replace(/-+$/g, "");
116
90
  return readable || "conversation";
117
91
  }
118
- // ── Workspace/Office layout ───────────────────────────────────────────────────
119
- /**
120
- * Workspace-root entries that are shared infrastructure, never office dirs.
121
- * The single definition behind boot-time directory setup, the workspace
122
- * projection, and the migration's legacy-dir scan. `events` stays reserved
123
- * for the legacy scheduling bus that `mikan office migrate-events` drains.
124
- */
125
92
  export const RESERVED_WORKSPACE_NAMES = Object.freeze(new Set(["skills", "events", "agents", "MEMORY.md"]));
126
- /**
127
- * Construct the Workspace value for a deployment. One construction site per
128
- * process (main.ts for the daemon; CLI subcommands and tests build their
129
- * own). The value owns the registry instance and the recorded-office cache
130
- * that office materialization uses on hot paths, so there is no process-wide
131
- * registry state.
132
- */
133
- /**
134
- * An office's session files live in `<office dir>/sessions` — the one home of
135
- * that rule. String-based for surfaces that hold a conversation dir rather
136
- * than an `Office` value (mirrors `officeStateDir`); `Office.sessionsDir` is
137
- * derived from it. Pointer/thread-file semantics live in `sessions/store`.
138
- */
139
93
  export function officeSessionsDir(dir) {
140
94
  return join(dir, "sessions");
141
95
  }
142
96
  export function createWorkspace(options) {
143
- // Paths are joined as given (no resolve) so values match what callers
144
- // passing the same root/stateDir strings computed before this module.
145
97
  const { root, stateDir } = options;
146
- // Lazy: CLI surfaces construct a Workspace for path math without paying
147
- // for (or being allowed to create) the registry journal.
148
98
  let registry;
149
99
  const recorded = new Set();
150
100
  const offices = new Map();
@@ -174,9 +124,6 @@ export function createWorkspace(options) {
174
124
  stateDir: join(stateDir, "conversations", key),
175
125
  workspace,
176
126
  ensure() {
177
- // Record-first ordering: a crash can leave a record without a
178
- // directory (harmless; recreated on the next message) but never an
179
- // anonymous office directory the registry cannot enumerate.
180
127
  if (!recorded.has(key)) {
181
128
  registry ??= new OfficeRegistry(stateDir);
182
129
  registry.recordOffice(normalized);
@@ -192,7 +139,6 @@ export function createWorkspace(options) {
192
139
  });
193
140
  return workspace;
194
141
  }
195
- /** mkdir-if-missing with the same fail-closed type guard as projection roots. */
196
142
  function ensureRegularOfficeDirectory(dir) {
197
143
  let stats;
198
144
  try {
@@ -208,7 +154,6 @@ function ensureRegularOfficeDirectory(dir) {
208
154
  throw new Error(`Office directory must be a regular non-symlink directory: ${dir}`);
209
155
  }
210
156
  }
211
- // ── Office registry journal ───────────────────────────────────────────────────
212
157
  const REGISTRY_VERSION = 1;
213
158
  const REGISTRY_FILENAME = "office-registry.json";
214
159
  const MIGRATION_STATUSES = new Set([
@@ -233,7 +178,6 @@ export class OfficeRegistry {
233
178
  this.lockTimeoutMs = options.lockTimeoutMs ?? REGISTRY_LOCK_TIMEOUT_MS;
234
179
  this.state = this.readState();
235
180
  }
236
- /** Reload the atomic registry file after another host process changed it. */
237
181
  reload() {
238
182
  this.state = this.readState();
239
183
  return this.state;
@@ -255,11 +199,6 @@ export class OfficeRegistry {
255
199
  return this.state;
256
200
  });
257
201
  }
258
- /**
259
- * Record that an office exists. Idempotent: re-recording a known office is
260
- * a lock-free cache hit for callers that materialize directories per
261
- * message, so this sits safely on hot write paths.
262
- */
263
202
  recordOffice(address) {
264
203
  const normalized = validateOfficeAddress(address);
265
204
  const existing = this.findOffice(normalized);
@@ -284,11 +223,6 @@ export class OfficeRegistry {
284
223
  findOffice(address) {
285
224
  return this.state.offices.find((record) => record.platform === address.platform && record.conversationId === address.conversationId);
286
225
  }
287
- /**
288
- * Validate and record a legacy directory. With exactly one enabled platform,
289
- * ownership is safe to infer. With zero or multiple platforms, the record
290
- * remains explicit `needs-owner` unless the caller supplies an owner.
291
- */
292
226
  prepareLegacyMigration(options) {
293
227
  const rawConversationId = assertConversationId(options.rawConversationId);
294
228
  const sourceDir = resolve(options.sourceDir);
@@ -437,11 +371,6 @@ export class OfficeRegistry {
437
371
  this.writeState(this.registryPath, `${JSON.stringify(candidate, null, 2)}\n`);
438
372
  this.state = candidate;
439
373
  }
440
- /**
441
- * Acquire the domain lease, reload while holding it, then perform one
442
- * read-modify-write. A future move transaction can retain the same lease
443
- * across its filesystem operation instead of splitting the transition.
444
- */
445
374
  withExclusiveLease(operation) {
446
375
  const release = acquireRegistryLease(this.lockPath, this.lockTimeoutMs);
447
376
  try {
@@ -524,7 +453,6 @@ function parseState(value, path) {
524
453
  if (new Set(enabledPlatforms).size !== enabledPlatforms.length) {
525
454
  throw new Error(`Duplicate enabled platform in ${path}`);
526
455
  }
527
- // Files written before office records existed simply have no offices yet.
528
456
  const offices = (Array.isArray(value.offices) ? value.offices : []).map((entry) => parseOfficeRecord(entry, path));
529
457
  if (new Set(offices.map((record) => officeKey(record))).size !== offices.length) {
530
458
  throw new Error(`Duplicate office record in ${path}`);
@@ -556,7 +484,6 @@ function hasMigrationStrings(value) {
556
484
  typeof value.status === "string" &&
557
485
  typeof value.updatedAt === "string");
558
486
  }
559
- /** Validate the fields every stored migration record must carry. */
560
487
  function parseMigrationFields(value, path) {
561
488
  if (!hasMigrationStrings(value)) {
562
489
  throw new Error(`Invalid office migration fields in ${path}`);
@@ -577,10 +504,6 @@ function parseMigrationFields(value, path) {
577
504
  updatedAt: value.updatedAt,
578
505
  };
579
506
  }
580
- /**
581
- * Ownership rules by status: `needs-owner` must carry neither owner nor
582
- * target, `failed` may carry either, every other status must carry both.
583
- */
584
507
  function assertOwnershipMatchesStatus(status, ownerPlatform, targetDir, path) {
585
508
  const owned = ownerPlatform !== undefined;
586
509
  const targeted = targetDir !== undefined;
@@ -673,7 +596,6 @@ function assertRegularDirectory(path, label) {
673
596
  throw new Error(`${label} must be a regular directory: ${path}`);
674
597
  }
675
598
  }
676
- /** `lstat` that reports a missing path as undefined; other errors still throw. */
677
599
  function lstatIfExists(path) {
678
600
  try {
679
601
  return lstatSync(path);
@@ -703,7 +625,6 @@ function assertPathAbsent(path, label) {
703
625
  function pathExists(path) {
704
626
  return lstatIfExists(path) !== undefined;
705
627
  }
706
- /** Create the lock directory and stamp it with our token, unwinding on failure. */
707
628
  function claimRegistryLock(lockPath, token) {
708
629
  mkdirSync(lockPath, { mode: 0o700 });
709
630
  try {
@@ -727,10 +648,6 @@ function acquireRegistryLease(lockPath, timeoutMs) {
727
648
  }
728
649
  }
729
650
  }
730
- /**
731
- * Handle one failed lock attempt: rethrow anything but a held lock, clear a
732
- * stale lock so the next attempt wins, else wait until the deadline passes.
733
- */
734
651
  function awaitFreeRegistryLock(lockPath, deadline, error) {
735
652
  if (!isErrno(error, "EEXIST"))
736
653
  throw error;
@@ -772,9 +689,7 @@ function registryLockIsStale(lockPath) {
772
689
  }
773
690
  }
774
691
  }
775
- catch {
776
- // The owner file may not have been written before its process died.
777
- }
692
+ catch { }
778
693
  try {
779
694
  const oldEnough = Date.now() - statSync(lockPath).mtimeMs >= REGISTRY_LOCK_STALE_MS;
780
695
  return ownerKnown ? !ownerAlive : oldEnough;
@@ -786,21 +701,9 @@ function registryLockIsStale(lockPath) {
786
701
  function sleepSync(milliseconds) {
787
702
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, milliseconds);
788
703
  }
789
- // ── raw-id lookups (cold paths: CLI, Admin enumeration) ──────────────────────
790
- /** Current office inventory, read fresh from disk for cross-process freshness. */
791
704
  export function listRegisteredOffices(stateDir) {
792
705
  return new OfficeRegistry(stateDir).getOffices();
793
706
  }
794
- /**
795
- * Enabled platforms whose id format could have produced this raw
796
- * conversation id. Auto-claiming uses this as verification, not guessing:
797
- * every format below is one mikan itself writes (GitHub ids are mikan-derived
798
- * slugs; Slack/Telegram/Discord ids are the platforms' own grammars), and a
799
- * directory is only claimed when exactly one enabled platform's format
800
- * matches. Bare digits stay ambiguous while both Telegram and Discord are
801
- * enabled (negative ids are Telegram-only); anything matching no enabled
802
- * format fails closed to needs-owner.
803
- */
804
707
  function platformsMatchingConversationIdFormat(rawConversationId, enabledPlatforms) {
805
708
  return enabledPlatforms.filter((platform) => {
806
709
  switch (platform) {
@@ -827,18 +730,6 @@ function isGithubConversationId(rawConversationId) {
827
730
  function isErrno(error, code) {
828
731
  return error instanceof Error && "code" in error && error.code === code;
829
732
  }
830
- // ── Boot-time legacy migration ────────────────────────────────────────────────
831
- /**
832
- * Move every legacy raw-id office directory under the workspace root to the
833
- * canonical office-key layout, journaling each move through the office
834
- * registry so an interrupted run resumes instead of losing offices.
835
- *
836
- * The engine never guesses: with several enabled platforms an unowned raw
837
- * directory stays in place and is reported for `mikan office claim`. Callers
838
- * must treat a non-empty `unowned`/`failed` as fatal for daemon boot — after
839
- * the layout flip, an unmigrated legacy directory is invisible to the
840
- * runtime, which would silently present the conversation as empty.
841
- */
842
733
  export function migrateLegacyOffices(options) {
843
734
  const registry = new OfficeRegistry(options.stateDir);
844
735
  for (const platform of options.enabledPlatforms)
@@ -855,8 +746,6 @@ export function migrateLegacyOffices(options) {
855
746
  };
856
747
  recoverInterruptedMoves(registry, summary);
857
748
  claimAndMoveLegacyDirs(registry, options.workspaceRoot, summary);
858
- // Credential vaults are keyed by office too; the registry inventory (which
859
- // the directory moves above just extended) drives the same rename.
860
749
  const vaults = migrateConversationVaultKeys({
861
750
  stateDir: options.stateDir,
862
751
  offices: registry.getOffices(),
@@ -875,7 +764,6 @@ export function migrateLegacyOffices(options) {
875
764
  }
876
765
  return summary;
877
766
  }
878
- /** Complete or fail every move the journal says was interrupted mid-rename. */
879
767
  function recoverInterruptedMoves(registry, summary) {
880
768
  for (const record of registry.getState().migrations) {
881
769
  if (record.status !== "moving")
@@ -891,7 +779,6 @@ function recoverInterruptedMoves(registry, summary) {
891
779
  log.logInfo(`[office] Recovered interrupted migration: ${record.rawConversationId}`);
892
780
  }
893
781
  }
894
- /** Complete one interrupted rename; returns the failure reason when it cannot. */
895
782
  function finishInterruptedMove(record) {
896
783
  const targetDir = record.targetDir;
897
784
  if (!targetDir)
@@ -907,12 +794,6 @@ function finishInterruptedMove(record) {
907
794
  renameSync(record.sourceDir, targetDir);
908
795
  return undefined;
909
796
  }
910
- /**
911
- * A legacy directory is claimable unless it already failed (reported via
912
- * summary.failed). One that reappears after a committed move is a different
913
- * (or resurrected) office the runtime can no longer see, so refusing to boot
914
- * beats silently ignoring its data.
915
- */
916
797
  function isClaimableLegacyDir(registry, workspaceRoot, rawConversationId) {
917
798
  const existing = registry.getMigration(rawConversationId);
918
799
  if (existing?.status === "committed") {
@@ -920,7 +801,6 @@ function isClaimableLegacyDir(registry, workspaceRoot, rawConversationId) {
920
801
  }
921
802
  return existing?.status !== "failed";
922
803
  }
923
- /** Scan the workspace root and move every claimable legacy office directory. */
924
804
  function claimAndMoveLegacyDirs(registry, workspaceRoot, summary) {
925
805
  for (const rawConversationId of listLegacyOfficeDirs(workspaceRoot)) {
926
806
  if (!isClaimableLegacyDir(registry, workspaceRoot, rawConversationId))
@@ -931,7 +811,7 @@ function claimAndMoveLegacyDirs(registry, workspaceRoot, summary) {
931
811
  workspaceRoot,
932
812
  });
933
813
  if (record.status === "needs-owner")
934
- continue; // reported via summary.unowned
814
+ continue;
935
815
  const moving = registry.markMoving(rawConversationId);
936
816
  const targetDir = moving.targetDir;
937
817
  if (!targetDir)
@@ -943,12 +823,6 @@ function claimAndMoveLegacyDirs(registry, workspaceRoot, summary) {
943
823
  log.logInfo(`[office] Migrated office directory: ${rawConversationId} -> ${targetDir}`);
944
824
  }
945
825
  }
946
- /**
947
- * Move each registered office's host state tree from
948
- * `conversations/<rawId>` to
949
- * `conversations/<officeKey>` in one rename. Conflicts are reported for
950
- * manual merge, never clobbered.
951
- */
952
826
  function migrateConversationStateDirs(registry, stateDir, summary) {
953
827
  for (const office of registry.getOffices()) {
954
828
  const legacyDir = join(stateDir, "conversations", office.conversationId);
@@ -964,7 +838,6 @@ function migrateConversationStateDirs(registry, stateDir, summary) {
964
838
  log.logInfo(`[office] Migrated host state dir to office key: ${office.conversationId}`);
965
839
  }
966
840
  }
967
- /** A migrated office is an existing office; keep the directory enumerable. */
968
841
  function recordMigratedOffice(registry, record) {
969
842
  if (!record.ownerPlatform)
970
843
  return;
@@ -973,19 +846,6 @@ function recordMigratedOffice(registry, record) {
973
846
  conversationId: record.rawConversationId,
974
847
  });
975
848
  }
976
- /**
977
- * Legacy office candidates: regular directories that are not reserved
978
- * infrastructure, not hidden, and not already office-key named. A symlink in
979
- * office position is refused outright — following it could move data from
980
- * outside the workspace root.
981
- *
982
- * A candidate must also look like a conversation office: every office that
983
- * ever saw a message has a `log.jsonl`, and every office that ran the agent
984
- * has `sessions/`. Trusted workspace roots legitimately accumulate other
985
- * directories — repos the agent cloned, build output — which are not offices
986
- * and must be neither renamed nor reported as unowned; they stay where they
987
- * are (an operator can still claim one explicitly via `mikan office claim`).
988
- */
989
849
  function listLegacyOfficeDirs(workspaceRoot) {
990
850
  return readdirSync(workspaceRoot, { withFileTypes: true })
991
851
  .filter((entry) => isLegacyOfficeDir(workspaceRoot, entry))
@@ -1012,7 +872,6 @@ function isLegacyOfficeDir(workspaceRoot, entry) {
1012
872
  function looksLikeConversationOffice(dir) {
1013
873
  return existsSync(join(dir, "log.jsonl")) || existsSync(join(dir, "sessions"));
1014
874
  }
1015
- /** Operator-facing boot failure for offices the engine may not move itself. */
1016
875
  export function formatUnmigratedOfficesError(summary) {
1017
876
  const lines = ["Conversation office migration cannot complete:"];
1018
877
  if (summary.unowned.length > 0) {
@@ -1030,20 +889,11 @@ export function formatUnmigratedOfficesError(summary) {
1030
889
  ]));
1031
890
  return lines.join("\n");
1032
891
  }
1033
- /** One blank-separated "these need manual work" block, empty when nothing does. */
1034
892
  function conflictSection(ids, explanation) {
1035
893
  if (ids.length === 0)
1036
894
  return [];
1037
895
  return ["", ...explanation, ...ids.map((id) => ` - ${id}`)];
1038
896
  }
1039
- /**
1040
- * Bind-spec translator for the container layout migration: rewrites every
1041
- * host path the office migration renamed — workspace dirs, per-conversation
1042
- * state trees, conversation vaults — and the guest workspace segment, using
1043
- * the registry's office inventory as the raw-id ↔ office mapping. Specs that
1044
- * reference none of the renamed paths come back unchanged, which is also how
1045
- * an already-migrated container is recognized.
1046
- */
1047
897
  function replacePrefix(path, pairs) {
1048
898
  for (const [oldPrefix, newPrefix] of pairs) {
1049
899
  if (path === oldPrefix)
@@ -1068,7 +918,7 @@ export function buildContainerBindTranslator(options) {
1068
918
  join(options.stateDir, "vaults", legacyConversationCredentialKey(rawId)),
1069
919
  join(options.stateDir, "vaults", key),
1070
920
  ]);
1071
- guestPairs.push([`/workspace/${rawId}`, `/workspace/${key}`]);
921
+ guestPairs.push([guestWorkspacePath(rawId), guestWorkspacePath(key)]);
1072
922
  }
1073
923
  return (bindSpec) => {
1074
924
  const readOnly = bindSpec.endsWith(":ro");