@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
@@ -1,9 +1,3 @@
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";
@@ -12,20 +6,17 @@ import { parseGithubConversationId } from "../adapters/github/ids.js";
12
6
  import { legacyConversationCredentialKey } from "../sandbox/identity.js";
13
7
  import { migrateConversationVaultKeys } from "../vault/index.js";
14
8
  import { atomicWritePrivateFile, isRecord, readTextFileIfExists } from "../file-guards.js";
15
- // ── Office identity (address & keys) ──────────────────────────────────────────
16
9
  const OFFICE_KEY_VERSION = "v1";
17
10
  const OFFICE_KEY_DOMAIN = "office-address-v1";
18
11
  const OFFICE_KEY_DIGEST_LENGTH = 16;
19
12
  const READABLE_ID_LENGTH = 32;
20
13
  const PLATFORM_NAMES = new Set(["slack", "discord", "telegram", "github"]);
21
14
  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
15
  export function createOfficeAddress(platform, conversationId) {
24
16
  assertPlatformName(platform);
25
17
  assertConversationId(conversationId);
26
18
  return Object.freeze({ platform, conversationId });
27
19
  }
28
- /** Validate an untrusted runtime value as a canonical office address. */
29
20
  export function validateOfficeAddress(value) {
30
21
  if (!isRecord(value))
31
22
  throw new Error("Office address must be an object");
@@ -37,22 +28,18 @@ export function validateOfficeAddress(value) {
37
28
  }
38
29
  return createOfficeAddress(assertPlatformName(value.platform), value.conversationId);
39
30
  }
40
- /** Return true only for a supported platform name. */
41
31
  function isPlatformName(value) {
42
32
  return typeof value === "string" && PLATFORM_NAMES.has(value);
43
33
  }
44
- /** Validate a platform name and return it for typed callers. */
45
34
  export function assertPlatformName(value) {
46
35
  if (!isPlatformName(value))
47
36
  throw new Error(`Unsupported platform: ${JSON.stringify(value)}`);
48
37
  return value;
49
38
  }
50
- /** Path separators and the C0/C1 control ranges are never allowed in an id. */
51
39
  function isUnsafeConversationIdChar(character) {
52
40
  const code = character.codePointAt(0) ?? 0;
53
41
  return character === "/" || character === "\\" || code <= 0x1f || (code >= 0x7f && code <= 0x9f);
54
42
  }
55
- /** Validate a raw platform conversation identifier before it enters storage. */
56
43
  export function assertConversationId(value) {
57
44
  if (value.length === 0 || value === "." || value === "..") {
58
45
  throw new Error("Conversation id must be non-empty and not a path marker");
@@ -62,7 +49,6 @@ export function assertConversationId(value) {
62
49
  }
63
50
  return value;
64
51
  }
65
- /** Derive a readable diagnostic key whose digest remains the identity authority. */
66
52
  export function officeKey(address) {
67
53
  const normalized = validateOfficeAddress(address);
68
54
  const readable = readableConversationId(normalized.conversationId);
@@ -72,31 +58,18 @@ export function officeKey(address) {
72
58
  .slice(0, OFFICE_KEY_DIGEST_LENGTH);
73
59
  return `${OFFICE_KEY_VERSION}-${normalized.platform}-${readable}-${digest}`;
74
60
  }
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
61
  export function officeDir(workspaceRoot, address) {
81
62
  return join(workspaceRoot, officeKey(address));
82
63
  }
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
64
  export function officeStateDir(stateDir, address) {
90
65
  return join(stateDir, "conversations", officeKey(address));
91
66
  }
92
- /** Compare canonical office identities without relying on their readable key. */
93
67
  export function sameOffice(left, right) {
94
68
  const leftAddress = validateOfficeAddress(left);
95
69
  const rightAddress = validateOfficeAddress(right);
96
70
  return (leftAddress.platform === rightAddress.platform &&
97
71
  leftAddress.conversationId === rightAddress.conversationId);
98
72
  }
99
- /** Validate a persisted or externally supplied office key. */
100
73
  export function assertOfficeKey(value) {
101
74
  if (!OFFICE_KEY_PATTERN.test(value)) {
102
75
  throw new Error(`Invalid office key: ${JSON.stringify(value)}`);
@@ -115,36 +88,12 @@ function readableConversationId(conversationId) {
115
88
  .replace(/-+$/g, "");
116
89
  return readable || "conversation";
117
90
  }
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
91
  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
92
  export function officeSessionsDir(dir) {
140
93
  return join(dir, "sessions");
141
94
  }
142
95
  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
96
  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
97
  let registry;
149
98
  const recorded = new Set();
150
99
  const offices = new Map();
@@ -174,9 +123,6 @@ export function createWorkspace(options) {
174
123
  stateDir: join(stateDir, "conversations", key),
175
124
  workspace,
176
125
  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
126
  if (!recorded.has(key)) {
181
127
  registry ??= new OfficeRegistry(stateDir);
182
128
  registry.recordOffice(normalized);
@@ -192,7 +138,6 @@ export function createWorkspace(options) {
192
138
  });
193
139
  return workspace;
194
140
  }
195
- /** mkdir-if-missing with the same fail-closed type guard as projection roots. */
196
141
  function ensureRegularOfficeDirectory(dir) {
197
142
  let stats;
198
143
  try {
@@ -208,7 +153,6 @@ function ensureRegularOfficeDirectory(dir) {
208
153
  throw new Error(`Office directory must be a regular non-symlink directory: ${dir}`);
209
154
  }
210
155
  }
211
- // ── Office registry journal ───────────────────────────────────────────────────
212
156
  const REGISTRY_VERSION = 1;
213
157
  const REGISTRY_FILENAME = "office-registry.json";
214
158
  const MIGRATION_STATUSES = new Set([
@@ -233,7 +177,6 @@ export class OfficeRegistry {
233
177
  this.lockTimeoutMs = options.lockTimeoutMs ?? REGISTRY_LOCK_TIMEOUT_MS;
234
178
  this.state = this.readState();
235
179
  }
236
- /** Reload the atomic registry file after another host process changed it. */
237
180
  reload() {
238
181
  this.state = this.readState();
239
182
  return this.state;
@@ -255,11 +198,6 @@ export class OfficeRegistry {
255
198
  return this.state;
256
199
  });
257
200
  }
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
201
  recordOffice(address) {
264
202
  const normalized = validateOfficeAddress(address);
265
203
  const existing = this.findOffice(normalized);
@@ -284,11 +222,6 @@ export class OfficeRegistry {
284
222
  findOffice(address) {
285
223
  return this.state.offices.find((record) => record.platform === address.platform && record.conversationId === address.conversationId);
286
224
  }
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
225
  prepareLegacyMigration(options) {
293
226
  const rawConversationId = assertConversationId(options.rawConversationId);
294
227
  const sourceDir = resolve(options.sourceDir);
@@ -437,11 +370,6 @@ export class OfficeRegistry {
437
370
  this.writeState(this.registryPath, `${JSON.stringify(candidate, null, 2)}\n`);
438
371
  this.state = candidate;
439
372
  }
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
373
  withExclusiveLease(operation) {
446
374
  const release = acquireRegistryLease(this.lockPath, this.lockTimeoutMs);
447
375
  try {
@@ -524,7 +452,6 @@ function parseState(value, path) {
524
452
  if (new Set(enabledPlatforms).size !== enabledPlatforms.length) {
525
453
  throw new Error(`Duplicate enabled platform in ${path}`);
526
454
  }
527
- // Files written before office records existed simply have no offices yet.
528
455
  const offices = (Array.isArray(value.offices) ? value.offices : []).map((entry) => parseOfficeRecord(entry, path));
529
456
  if (new Set(offices.map((record) => officeKey(record))).size !== offices.length) {
530
457
  throw new Error(`Duplicate office record in ${path}`);
@@ -556,7 +483,6 @@ function hasMigrationStrings(value) {
556
483
  typeof value.status === "string" &&
557
484
  typeof value.updatedAt === "string");
558
485
  }
559
- /** Validate the fields every stored migration record must carry. */
560
486
  function parseMigrationFields(value, path) {
561
487
  if (!hasMigrationStrings(value)) {
562
488
  throw new Error(`Invalid office migration fields in ${path}`);
@@ -577,10 +503,6 @@ function parseMigrationFields(value, path) {
577
503
  updatedAt: value.updatedAt,
578
504
  };
579
505
  }
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
506
  function assertOwnershipMatchesStatus(status, ownerPlatform, targetDir, path) {
585
507
  const owned = ownerPlatform !== undefined;
586
508
  const targeted = targetDir !== undefined;
@@ -673,7 +595,6 @@ function assertRegularDirectory(path, label) {
673
595
  throw new Error(`${label} must be a regular directory: ${path}`);
674
596
  }
675
597
  }
676
- /** `lstat` that reports a missing path as undefined; other errors still throw. */
677
598
  function lstatIfExists(path) {
678
599
  try {
679
600
  return lstatSync(path);
@@ -703,7 +624,6 @@ function assertPathAbsent(path, label) {
703
624
  function pathExists(path) {
704
625
  return lstatIfExists(path) !== undefined;
705
626
  }
706
- /** Create the lock directory and stamp it with our token, unwinding on failure. */
707
627
  function claimRegistryLock(lockPath, token) {
708
628
  mkdirSync(lockPath, { mode: 0o700 });
709
629
  try {
@@ -727,10 +647,6 @@ function acquireRegistryLease(lockPath, timeoutMs) {
727
647
  }
728
648
  }
729
649
  }
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
650
  function awaitFreeRegistryLock(lockPath, deadline, error) {
735
651
  if (!isErrno(error, "EEXIST"))
736
652
  throw error;
@@ -772,9 +688,7 @@ function registryLockIsStale(lockPath) {
772
688
  }
773
689
  }
774
690
  }
775
- catch {
776
- // The owner file may not have been written before its process died.
777
- }
691
+ catch { }
778
692
  try {
779
693
  const oldEnough = Date.now() - statSync(lockPath).mtimeMs >= REGISTRY_LOCK_STALE_MS;
780
694
  return ownerKnown ? !ownerAlive : oldEnough;
@@ -786,21 +700,9 @@ function registryLockIsStale(lockPath) {
786
700
  function sleepSync(milliseconds) {
787
701
  Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, milliseconds);
788
702
  }
789
- // ── raw-id lookups (cold paths: CLI, Admin enumeration) ──────────────────────
790
- /** Current office inventory, read fresh from disk for cross-process freshness. */
791
703
  export function listRegisteredOffices(stateDir) {
792
704
  return new OfficeRegistry(stateDir).getOffices();
793
705
  }
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
706
  function platformsMatchingConversationIdFormat(rawConversationId, enabledPlatforms) {
805
707
  return enabledPlatforms.filter((platform) => {
806
708
  switch (platform) {
@@ -827,18 +729,6 @@ function isGithubConversationId(rawConversationId) {
827
729
  function isErrno(error, code) {
828
730
  return error instanceof Error && "code" in error && error.code === code;
829
731
  }
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
732
  export function migrateLegacyOffices(options) {
843
733
  const registry = new OfficeRegistry(options.stateDir);
844
734
  for (const platform of options.enabledPlatforms)
@@ -855,8 +745,6 @@ export function migrateLegacyOffices(options) {
855
745
  };
856
746
  recoverInterruptedMoves(registry, summary);
857
747
  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
748
  const vaults = migrateConversationVaultKeys({
861
749
  stateDir: options.stateDir,
862
750
  offices: registry.getOffices(),
@@ -875,7 +763,6 @@ export function migrateLegacyOffices(options) {
875
763
  }
876
764
  return summary;
877
765
  }
878
- /** Complete or fail every move the journal says was interrupted mid-rename. */
879
766
  function recoverInterruptedMoves(registry, summary) {
880
767
  for (const record of registry.getState().migrations) {
881
768
  if (record.status !== "moving")
@@ -891,7 +778,6 @@ function recoverInterruptedMoves(registry, summary) {
891
778
  log.logInfo(`[office] Recovered interrupted migration: ${record.rawConversationId}`);
892
779
  }
893
780
  }
894
- /** Complete one interrupted rename; returns the failure reason when it cannot. */
895
781
  function finishInterruptedMove(record) {
896
782
  const targetDir = record.targetDir;
897
783
  if (!targetDir)
@@ -907,12 +793,6 @@ function finishInterruptedMove(record) {
907
793
  renameSync(record.sourceDir, targetDir);
908
794
  return undefined;
909
795
  }
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
796
  function isClaimableLegacyDir(registry, workspaceRoot, rawConversationId) {
917
797
  const existing = registry.getMigration(rawConversationId);
918
798
  if (existing?.status === "committed") {
@@ -920,7 +800,6 @@ function isClaimableLegacyDir(registry, workspaceRoot, rawConversationId) {
920
800
  }
921
801
  return existing?.status !== "failed";
922
802
  }
923
- /** Scan the workspace root and move every claimable legacy office directory. */
924
803
  function claimAndMoveLegacyDirs(registry, workspaceRoot, summary) {
925
804
  for (const rawConversationId of listLegacyOfficeDirs(workspaceRoot)) {
926
805
  if (!isClaimableLegacyDir(registry, workspaceRoot, rawConversationId))
@@ -931,7 +810,7 @@ function claimAndMoveLegacyDirs(registry, workspaceRoot, summary) {
931
810
  workspaceRoot,
932
811
  });
933
812
  if (record.status === "needs-owner")
934
- continue; // reported via summary.unowned
813
+ continue;
935
814
  const moving = registry.markMoving(rawConversationId);
936
815
  const targetDir = moving.targetDir;
937
816
  if (!targetDir)
@@ -943,12 +822,6 @@ function claimAndMoveLegacyDirs(registry, workspaceRoot, summary) {
943
822
  log.logInfo(`[office] Migrated office directory: ${rawConversationId} -> ${targetDir}`);
944
823
  }
945
824
  }
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
825
  function migrateConversationStateDirs(registry, stateDir, summary) {
953
826
  for (const office of registry.getOffices()) {
954
827
  const legacyDir = join(stateDir, "conversations", office.conversationId);
@@ -964,7 +837,6 @@ function migrateConversationStateDirs(registry, stateDir, summary) {
964
837
  log.logInfo(`[office] Migrated host state dir to office key: ${office.conversationId}`);
965
838
  }
966
839
  }
967
- /** A migrated office is an existing office; keep the directory enumerable. */
968
840
  function recordMigratedOffice(registry, record) {
969
841
  if (!record.ownerPlatform)
970
842
  return;
@@ -973,19 +845,6 @@ function recordMigratedOffice(registry, record) {
973
845
  conversationId: record.rawConversationId,
974
846
  });
975
847
  }
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
848
  function listLegacyOfficeDirs(workspaceRoot) {
990
849
  return readdirSync(workspaceRoot, { withFileTypes: true })
991
850
  .filter((entry) => isLegacyOfficeDir(workspaceRoot, entry))
@@ -1012,7 +871,6 @@ function isLegacyOfficeDir(workspaceRoot, entry) {
1012
871
  function looksLikeConversationOffice(dir) {
1013
872
  return existsSync(join(dir, "log.jsonl")) || existsSync(join(dir, "sessions"));
1014
873
  }
1015
- /** Operator-facing boot failure for offices the engine may not move itself. */
1016
874
  export function formatUnmigratedOfficesError(summary) {
1017
875
  const lines = ["Conversation office migration cannot complete:"];
1018
876
  if (summary.unowned.length > 0) {
@@ -1030,20 +888,11 @@ export function formatUnmigratedOfficesError(summary) {
1030
888
  ]));
1031
889
  return lines.join("\n");
1032
890
  }
1033
- /** One blank-separated "these need manual work" block, empty when nothing does. */
1034
891
  function conflictSection(ids, explanation) {
1035
892
  if (ids.length === 0)
1036
893
  return [];
1037
894
  return ["", ...explanation, ...ids.map((id) => ` - ${id}`)];
1038
895
  }
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
896
  function replacePrefix(path, pairs) {
1048
897
  for (const [oldPrefix, newPrefix] of pairs) {
1049
898
  if (path === oldPrefix)