@geminixiang/mikan 1.0.0-beta.53 → 1.0.0-beta.55

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 (556) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +3 -2
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +4 -8
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/adapters/commands/login.d.ts.map +1 -0
  7. package/dist/adapters/commands/login.js +166 -0
  8. package/dist/adapters/commands/login.js.map +1 -0
  9. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  10. package/dist/{commands → adapters/commands}/manifest.js +0 -7
  11. package/dist/adapters/commands/manifest.js.map +1 -0
  12. package/dist/{commands → adapters/commands}/model.d.ts +6 -0
  13. package/dist/adapters/commands/model.d.ts.map +1 -0
  14. package/dist/{commands → adapters/commands}/model.js +56 -44
  15. package/dist/adapters/commands/model.js.map +1 -0
  16. package/dist/adapters/commands/new.d.ts.map +1 -0
  17. package/dist/{commands → adapters/commands}/new.js +7 -8
  18. package/dist/adapters/commands/new.js.map +1 -0
  19. package/dist/adapters/commands/registry.d.ts.map +1 -0
  20. package/dist/{commands → adapters/commands}/registry.js +1 -3
  21. package/dist/adapters/commands/registry.js.map +1 -0
  22. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  23. package/dist/{commands → adapters/commands}/sandbox.js +22 -21
  24. package/dist/adapters/commands/sandbox.js.map +1 -0
  25. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  26. package/dist/{commands → adapters/commands}/session-view.js +8 -11
  27. package/dist/adapters/commands/session-view.js.map +1 -0
  28. package/dist/{commands → adapters/commands}/types.d.ts +6 -6
  29. package/dist/adapters/commands/types.d.ts.map +1 -0
  30. package/dist/adapters/commands/types.js.map +1 -0
  31. package/dist/adapters/commands/utils.d.ts +14 -0
  32. package/dist/adapters/commands/utils.d.ts.map +1 -0
  33. package/dist/{commands → adapters/commands}/utils.js +18 -1
  34. package/dist/adapters/commands/utils.js.map +1 -0
  35. package/dist/adapters/discord/bot.d.ts.map +1 -1
  36. package/dist/adapters/discord/bot.js +4 -5
  37. package/dist/adapters/discord/bot.js.map +1 -1
  38. package/dist/adapters/github/bot.d.ts.map +1 -1
  39. package/dist/adapters/github/bot.js +3 -4
  40. package/dist/adapters/github/bot.js.map +1 -1
  41. package/dist/adapters/github/client.d.ts.map +1 -1
  42. package/dist/adapters/github/client.js +5 -18
  43. package/dist/adapters/github/client.js.map +1 -1
  44. package/dist/adapters/github/tool-pack.d.ts +1 -1
  45. package/dist/adapters/github/tool-pack.d.ts.map +1 -1
  46. package/dist/adapters/github/tool-pack.js.map +1 -1
  47. package/dist/adapters/github/tools/checks.js +1 -1
  48. package/dist/adapters/github/tools/checks.js.map +1 -1
  49. package/dist/adapters/github/tools/issue.js +1 -1
  50. package/dist/adapters/github/tools/issue.js.map +1 -1
  51. package/dist/adapters/github/tools/pr.js +1 -1
  52. package/dist/adapters/github/tools/pr.js.map +1 -1
  53. package/dist/adapters/github/tools/read.d.ts.map +1 -1
  54. package/dist/adapters/github/tools/read.js +53 -53
  55. package/dist/adapters/github/tools/read.js.map +1 -1
  56. package/dist/adapters/github/tools/review-reply.js +1 -1
  57. package/dist/adapters/github/tools/review-reply.js.map +1 -1
  58. package/dist/adapters/github/tools/sync.js +1 -1
  59. package/dist/adapters/github/tools/sync.js.map +1 -1
  60. package/dist/adapters/intake.d.ts +1 -1
  61. package/dist/adapters/intake.d.ts.map +1 -1
  62. package/dist/adapters/intake.js +2 -6
  63. package/dist/adapters/intake.js.map +1 -1
  64. package/dist/adapters/markdown-tables.d.ts +0 -13
  65. package/dist/adapters/markdown-tables.d.ts.map +1 -1
  66. package/dist/adapters/markdown-tables.js +26 -38
  67. package/dist/adapters/markdown-tables.js.map +1 -1
  68. package/dist/adapters/shared.js +1 -1
  69. package/dist/adapters/shared.js.map +1 -1
  70. package/dist/adapters/slack/bot.d.ts +7 -4
  71. package/dist/adapters/slack/bot.d.ts.map +1 -1
  72. package/dist/adapters/slack/bot.js +104 -122
  73. package/dist/adapters/slack/bot.js.map +1 -1
  74. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  75. package/dist/adapters/slack/response-lifecycle.js +33 -25
  76. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  77. package/dist/adapters/slack/tool-pack.d.ts +1 -1
  78. package/dist/adapters/slack/tool-pack.d.ts.map +1 -1
  79. package/dist/adapters/slack/tool-pack.js.map +1 -1
  80. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -1
  81. package/dist/adapters/slack/update-diagnostics.js +8 -24
  82. package/dist/adapters/slack/update-diagnostics.js.map +1 -1
  83. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  84. package/dist/adapters/telegram/bot.js +3 -4
  85. package/dist/adapters/telegram/bot.js.map +1 -1
  86. package/dist/adapters/types.d.ts +2 -4
  87. package/dist/adapters/types.d.ts.map +1 -1
  88. package/dist/adapters/types.js.map +1 -1
  89. package/dist/{web → adapters/web}/admin/portal.d.ts +3 -3
  90. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  91. package/dist/{web → adapters/web}/admin/portal.js +535 -709
  92. package/dist/adapters/web/admin/portal.js.map +1 -0
  93. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  94. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  95. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  96. package/dist/{web → adapters/web}/admin/types.d.ts +5 -5
  97. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  98. package/dist/adapters/web/admin/types.js.map +1 -0
  99. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  100. package/dist/{web → adapters/web}/login/oauth.js +50 -54
  101. package/dist/adapters/web/login/oauth.js.map +1 -0
  102. package/dist/{web → adapters/web}/login/portal.d.ts +2 -2
  103. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  104. package/dist/{web → adapters/web}/login/portal.js +6 -6
  105. package/dist/adapters/web/login/portal.js.map +1 -0
  106. package/dist/{web → adapters/web}/login/types.d.ts +1 -1
  107. package/dist/adapters/web/login/types.d.ts.map +1 -0
  108. package/dist/adapters/web/login/types.js.map +1 -0
  109. package/dist/{web → adapters/web}/portal-shell.d.ts +2 -2
  110. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  111. package/dist/{web → adapters/web}/portal-shell.js +2 -2
  112. package/dist/adapters/web/portal-shell.js.map +1 -0
  113. package/dist/{web → adapters/web}/server.d.ts +5 -5
  114. package/dist/adapters/web/server.d.ts.map +1 -0
  115. package/dist/{web → adapters/web}/server.js +4 -7
  116. package/dist/adapters/web/server.js.map +1 -0
  117. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  118. package/dist/{web → adapters/web}/session-view/portal.js +9 -9
  119. package/dist/adapters/web/session-view/portal.js.map +1 -0
  120. package/dist/{web → adapters/web}/session-view/types.d.ts +3 -3
  121. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  122. package/dist/adapters/web/session-view/types.js.map +1 -0
  123. package/dist/adapters/web/token-store.d.ts.map +1 -0
  124. package/dist/adapters/web/token-store.js.map +1 -0
  125. package/dist/adapters/web/types.d.ts.map +1 -0
  126. package/dist/adapters/web/types.js.map +1 -0
  127. package/dist/cli/arg-grammar.d.ts +24 -0
  128. package/dist/cli/arg-grammar.d.ts.map +1 -1
  129. package/dist/cli/arg-grammar.js +39 -8
  130. package/dist/cli/arg-grammar.js.map +1 -1
  131. package/dist/cli/boot.d.ts.map +1 -1
  132. package/dist/cli/boot.js +48 -62
  133. package/dist/cli/boot.js.map +1 -1
  134. package/dist/cli/download.d.ts.map +1 -1
  135. package/dist/cli/download.js +51 -54
  136. package/dist/cli/download.js.map +1 -1
  137. package/dist/cli/office.d.ts.map +1 -1
  138. package/dist/cli/office.js +9 -26
  139. package/dist/cli/office.js.map +1 -1
  140. package/dist/cli/onboard.d.ts.map +1 -1
  141. package/dist/cli/onboard.js +15 -11
  142. package/dist/cli/onboard.js.map +1 -1
  143. package/dist/cli/sessions.d.ts.map +1 -1
  144. package/dist/cli/sessions.js +49 -52
  145. package/dist/cli/sessions.js.map +1 -1
  146. package/dist/config.d.ts +4 -28
  147. package/dist/config.d.ts.map +1 -1
  148. package/dist/config.js +7 -112
  149. package/dist/config.js.map +1 -1
  150. package/dist/dream/index.d.ts.map +1 -1
  151. package/dist/dream/index.js +8 -2
  152. package/dist/dream/index.js.map +1 -1
  153. package/dist/dream/types.d.ts +1 -1
  154. package/dist/dream/types.d.ts.map +1 -1
  155. package/dist/dream/types.js.map +1 -1
  156. package/dist/env-manifest.d.ts +2 -0
  157. package/dist/env-manifest.d.ts.map +1 -1
  158. package/dist/env-manifest.js +29 -8
  159. package/dist/env-manifest.js.map +1 -1
  160. package/dist/events/index.d.ts +150 -0
  161. package/dist/events/index.d.ts.map +1 -0
  162. package/dist/{harness/event-format.js → events/index.js} +80 -2
  163. package/dist/events/index.js.map +1 -0
  164. package/dist/{events.d.ts → events/watcher.d.ts} +4 -4
  165. package/dist/events/watcher.d.ts.map +1 -0
  166. package/dist/{events.js → events/watcher.js} +8 -8
  167. package/dist/events/watcher.js.map +1 -0
  168. package/dist/file-guards.d.ts.map +1 -0
  169. package/dist/file-guards.js.map +1 -0
  170. package/dist/harness/execution-env.d.ts +19 -0
  171. package/dist/harness/execution-env.d.ts.map +1 -0
  172. package/dist/harness/execution-env.js +262 -0
  173. package/dist/harness/execution-env.js.map +1 -0
  174. package/dist/harness/execution-resolver.d.ts +25 -0
  175. package/dist/harness/execution-resolver.d.ts.map +1 -0
  176. package/dist/{execution-resolver.js → harness/execution-resolver.js} +12 -21
  177. package/dist/harness/execution-resolver.js.map +1 -0
  178. package/dist/harness/index.d.ts +9 -9
  179. package/dist/harness/index.d.ts.map +1 -1
  180. package/dist/harness/index.js +8 -8
  181. package/dist/harness/index.js.map +1 -1
  182. package/dist/harness/mcp.d.ts +38 -0
  183. package/dist/harness/mcp.d.ts.map +1 -0
  184. package/dist/{mcp/loader.js → harness/mcp.js} +155 -6
  185. package/dist/harness/mcp.js.map +1 -0
  186. package/dist/harness/models.js +1 -1
  187. package/dist/harness/models.js.map +1 -1
  188. package/dist/harness/open-connector.d.ts.map +1 -0
  189. package/dist/{mcp → harness}/open-connector.js +1 -1
  190. package/dist/harness/open-connector.js.map +1 -0
  191. package/dist/{agent → harness}/presenter.d.ts +2 -9
  192. package/dist/harness/presenter.d.ts.map +1 -0
  193. package/dist/{agent → harness}/presenter.js +170 -146
  194. package/dist/harness/presenter.js.map +1 -0
  195. package/dist/{agent → harness}/prompt.d.ts +10 -3
  196. package/dist/harness/prompt.d.ts.map +1 -0
  197. package/dist/{agent → harness}/prompt.js +137 -41
  198. package/dist/harness/prompt.js.map +1 -0
  199. package/dist/harness/runner.d.ts +2 -109
  200. package/dist/harness/runner.d.ts.map +1 -1
  201. package/dist/harness/runner.js +499 -467
  202. package/dist/harness/runner.js.map +1 -1
  203. package/dist/harness/session.d.ts +119 -0
  204. package/dist/harness/session.d.ts.map +1 -0
  205. package/dist/harness/session.js +561 -0
  206. package/dist/harness/session.js.map +1 -0
  207. package/dist/harness/skills.d.ts +10 -2
  208. package/dist/harness/skills.d.ts.map +1 -1
  209. package/dist/harness/skills.js +62 -39
  210. package/dist/harness/skills.js.map +1 -1
  211. package/dist/harness/{subagent-runner.d.ts → subagent.d.ts} +25 -6
  212. package/dist/harness/subagent.d.ts.map +1 -0
  213. package/dist/harness/{subagent-runner.js → subagent.js} +106 -54
  214. package/dist/harness/subagent.js.map +1 -0
  215. package/dist/harness/tools/attach.d.ts.map +1 -0
  216. package/dist/harness/tools/attach.js.map +1 -0
  217. package/dist/{tools → harness/tools}/event.d.ts +3 -32
  218. package/dist/harness/tools/event.d.ts.map +1 -0
  219. package/dist/harness/tools/event.js +178 -0
  220. package/dist/harness/tools/event.js.map +1 -0
  221. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  222. package/dist/harness/tools/generate-image.js.map +1 -0
  223. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  224. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  225. package/dist/{tools → harness/tools}/index.d.ts +5 -6
  226. package/dist/harness/tools/index.d.ts.map +1 -0
  227. package/dist/{tools → harness/tools}/index.js +12 -16
  228. package/dist/harness/tools/index.js.map +1 -0
  229. package/dist/harness/tools/pi-tools.d.ts +18 -0
  230. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  231. package/dist/harness/tools/pi-tools.js +84 -0
  232. package/dist/harness/tools/pi-tools.js.map +1 -0
  233. package/dist/harness/tools/react.d.ts.map +1 -0
  234. package/dist/harness/tools/react.js.map +1 -0
  235. package/dist/{tools → harness/tools}/sandbox.d.ts +2 -2
  236. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  237. package/dist/{tools → harness/tools}/sandbox.js +1 -1
  238. package/dist/harness/tools/sandbox.js.map +1 -0
  239. package/dist/{tools → harness/tools}/subagent.d.ts +28 -1
  240. package/dist/harness/tools/subagent.d.ts.map +1 -0
  241. package/dist/{tools → harness/tools}/subagent.js +218 -2
  242. package/dist/harness/tools/subagent.js.map +1 -0
  243. package/dist/{tools → harness/tools}/types.d.ts +0 -33
  244. package/dist/harness/tools/types.d.ts.map +1 -0
  245. package/dist/harness/tools/types.js.map +1 -0
  246. package/dist/harness/types.d.ts +180 -97
  247. package/dist/harness/types.d.ts.map +1 -1
  248. package/dist/harness/types.js +1 -1
  249. package/dist/harness/types.js.map +1 -1
  250. package/dist/index.d.ts +12 -11
  251. package/dist/index.d.ts.map +1 -1
  252. package/dist/index.js +6 -6
  253. package/dist/index.js.map +1 -1
  254. package/dist/main.js +10 -12
  255. package/dist/main.js.map +1 -1
  256. package/dist/observability/index.d.ts +33 -0
  257. package/dist/observability/index.d.ts.map +1 -0
  258. package/dist/observability/index.js +256 -0
  259. package/dist/observability/index.js.map +1 -0
  260. package/dist/observability/instrument.js +7 -1
  261. package/dist/observability/instrument.js.map +1 -1
  262. package/dist/observability/otel.d.ts +10 -0
  263. package/dist/observability/otel.d.ts.map +1 -0
  264. package/dist/observability/otel.js +183 -0
  265. package/dist/observability/otel.js.map +1 -0
  266. package/dist/observability/sentry.d.ts +22 -5
  267. package/dist/observability/sentry.d.ts.map +1 -1
  268. package/dist/observability/sentry.js +68 -23
  269. package/dist/observability/sentry.js.map +1 -1
  270. package/dist/observability/types.d.ts +6 -2
  271. package/dist/observability/types.d.ts.map +1 -1
  272. package/dist/observability/types.js.map +1 -1
  273. package/dist/office/index.d.ts +2 -3
  274. package/dist/office/index.d.ts.map +1 -1
  275. package/dist/office/index.js +172 -140
  276. package/dist/office/index.js.map +1 -1
  277. package/dist/{workspace-projection/index.d.ts → office/projection.d.ts} +2 -2
  278. package/dist/office/projection.d.ts.map +1 -0
  279. package/dist/{workspace-projection/index.js → office/projection.js} +2 -2
  280. package/dist/office/projection.js.map +1 -0
  281. package/dist/office/types.d.ts +29 -2
  282. package/dist/office/types.d.ts.map +1 -1
  283. package/dist/office/types.js.map +1 -1
  284. package/dist/process-lifecycle.d.ts +1 -1
  285. package/dist/process-lifecycle.d.ts.map +1 -1
  286. package/dist/process-lifecycle.js +3 -3
  287. package/dist/process-lifecycle.js.map +1 -1
  288. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  289. package/dist/runtime/conversation-runtime.js +106 -107
  290. package/dist/runtime/conversation-runtime.js.map +1 -1
  291. package/dist/runtime/session-lifecycle.d.ts +10 -0
  292. package/dist/runtime/session-lifecycle.d.ts.map +1 -1
  293. package/dist/runtime/session-lifecycle.js +42 -24
  294. package/dist/runtime/session-lifecycle.js.map +1 -1
  295. package/dist/runtime/types.d.ts +3 -3
  296. package/dist/runtime/types.d.ts.map +1 -1
  297. package/dist/runtime/types.js.map +1 -1
  298. package/dist/sandbox/cloudflare.d.ts +1 -0
  299. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  300. package/dist/sandbox/cloudflare.js +41 -50
  301. package/dist/sandbox/cloudflare.js.map +1 -1
  302. package/dist/sandbox/container.d.ts.map +1 -1
  303. package/dist/sandbox/container.js +7 -4
  304. package/dist/sandbox/container.js.map +1 -1
  305. package/dist/sandbox/host.d.ts.map +1 -1
  306. package/dist/sandbox/host.js +27 -35
  307. package/dist/sandbox/host.js.map +1 -1
  308. package/dist/sandbox/index.d.ts.map +1 -1
  309. package/dist/sandbox/index.js +8 -15
  310. package/dist/sandbox/index.js.map +1 -1
  311. package/dist/{provisioner.d.ts → sandbox/provisioner.d.ts} +2 -2
  312. package/dist/sandbox/provisioner.d.ts.map +1 -0
  313. package/dist/{provisioner.js → sandbox/provisioner.js} +3 -3
  314. package/dist/sandbox/provisioner.js.map +1 -0
  315. package/dist/sandbox/types.d.ts +2 -0
  316. package/dist/sandbox/types.d.ts.map +1 -1
  317. package/dist/sandbox/types.js.map +1 -1
  318. package/dist/sandbox/utils.d.ts +5 -0
  319. package/dist/sandbox/utils.d.ts.map +1 -1
  320. package/dist/sandbox/utils.js +14 -0
  321. package/dist/sandbox/utils.js.map +1 -1
  322. package/dist/sessions/chat-history-sync.d.ts.map +1 -1
  323. package/dist/sessions/chat-history-sync.js +72 -62
  324. package/dist/sessions/chat-history-sync.js.map +1 -1
  325. package/dist/sessions/migrate-common.d.ts +43 -0
  326. package/dist/sessions/migrate-common.d.ts.map +1 -0
  327. package/dist/sessions/migrate-common.js +99 -0
  328. package/dist/sessions/migrate-common.js.map +1 -0
  329. package/dist/sessions/migrate-pi-084.d.ts.map +1 -1
  330. package/dist/sessions/migrate-pi-084.js +152 -203
  331. package/dist/sessions/migrate-pi-084.js.map +1 -1
  332. package/dist/sessions/migrate-v3.d.ts +5 -0
  333. package/dist/sessions/migrate-v3.d.ts.map +1 -1
  334. package/dist/sessions/migrate-v3.js +161 -209
  335. package/dist/sessions/migrate-v3.js.map +1 -1
  336. package/dist/{harness → sessions}/session-store.d.ts +12 -1
  337. package/dist/sessions/session-store.d.ts.map +1 -0
  338. package/dist/{harness → sessions}/session-store.js +74 -35
  339. package/dist/sessions/session-store.js.map +1 -0
  340. package/dist/sessions/store.d.ts +1 -1
  341. package/dist/sessions/store.d.ts.map +1 -1
  342. package/dist/sessions/store.js +18 -17
  343. package/dist/sessions/store.js.map +1 -1
  344. package/dist/sessions/types.d.ts +40 -1
  345. package/dist/sessions/types.d.ts.map +1 -1
  346. package/dist/sessions/types.js +1 -1
  347. package/dist/sessions/types.js.map +1 -1
  348. package/dist/types.d.ts +7 -99
  349. package/dist/types.d.ts.map +1 -1
  350. package/dist/types.js.map +1 -1
  351. package/dist/vault/index.d.ts.map +1 -1
  352. package/dist/vault/index.js +70 -53
  353. package/dist/vault/index.js.map +1 -1
  354. package/package.json +10 -4
  355. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  356. package/dist/adapters/slack/tools/attach.js.map +0 -1
  357. package/dist/agent/catalog.d.ts +0 -22
  358. package/dist/agent/catalog.d.ts.map +0 -1
  359. package/dist/agent/catalog.js +0 -104
  360. package/dist/agent/catalog.js.map +0 -1
  361. package/dist/agent/execution.d.ts +0 -25
  362. package/dist/agent/execution.d.ts.map +0 -1
  363. package/dist/agent/execution.js +0 -171
  364. package/dist/agent/execution.js.map +0 -1
  365. package/dist/agent/presenter.d.ts.map +0 -1
  366. package/dist/agent/presenter.js.map +0 -1
  367. package/dist/agent/prompt.d.ts.map +0 -1
  368. package/dist/agent/prompt.js.map +0 -1
  369. package/dist/agent/runner.d.ts +0 -3
  370. package/dist/agent/runner.d.ts.map +0 -1
  371. package/dist/agent/runner.js +0 -452
  372. package/dist/agent/runner.js.map +0 -1
  373. package/dist/agent/types.d.ts +0 -101
  374. package/dist/agent/types.d.ts.map +0 -1
  375. package/dist/agent/types.js +0 -3
  376. package/dist/agent/types.js.map +0 -1
  377. package/dist/agent-events.d.ts +0 -6
  378. package/dist/agent-events.d.ts.map +0 -1
  379. package/dist/agent-events.js +0 -44
  380. package/dist/agent-events.js.map +0 -1
  381. package/dist/commands/admin.d.ts.map +0 -1
  382. package/dist/commands/admin.js.map +0 -1
  383. package/dist/commands/auto-reply.d.ts +0 -8
  384. package/dist/commands/auto-reply.d.ts.map +0 -1
  385. package/dist/commands/auto-reply.js +0 -65
  386. package/dist/commands/auto-reply.js.map +0 -1
  387. package/dist/commands/login.d.ts.map +0 -1
  388. package/dist/commands/login.js +0 -158
  389. package/dist/commands/login.js.map +0 -1
  390. package/dist/commands/manifest.d.ts.map +0 -1
  391. package/dist/commands/manifest.js.map +0 -1
  392. package/dist/commands/model.d.ts.map +0 -1
  393. package/dist/commands/model.js.map +0 -1
  394. package/dist/commands/new.d.ts.map +0 -1
  395. package/dist/commands/new.js.map +0 -1
  396. package/dist/commands/registry.d.ts.map +0 -1
  397. package/dist/commands/registry.js.map +0 -1
  398. package/dist/commands/sandbox.d.ts.map +0 -1
  399. package/dist/commands/sandbox.js.map +0 -1
  400. package/dist/commands/session-view.d.ts.map +0 -1
  401. package/dist/commands/session-view.js.map +0 -1
  402. package/dist/commands/types.d.ts.map +0 -1
  403. package/dist/commands/types.js.map +0 -1
  404. package/dist/commands/utils.d.ts +0 -11
  405. package/dist/commands/utils.d.ts.map +0 -1
  406. package/dist/commands/utils.js.map +0 -1
  407. package/dist/events.d.ts.map +0 -1
  408. package/dist/events.js.map +0 -1
  409. package/dist/execution-resolver.d.ts +0 -27
  410. package/dist/execution-resolver.d.ts.map +0 -1
  411. package/dist/execution-resolver.js.map +0 -1
  412. package/dist/harness/event-format.d.ts +0 -33
  413. package/dist/harness/event-format.d.ts.map +0 -1
  414. package/dist/harness/event-format.js.map +0 -1
  415. package/dist/harness/session-store.d.ts.map +0 -1
  416. package/dist/harness/session-store.js.map +0 -1
  417. package/dist/harness/settings.d.ts +0 -29
  418. package/dist/harness/settings.d.ts.map +0 -1
  419. package/dist/harness/settings.js +0 -40
  420. package/dist/harness/settings.js.map +0 -1
  421. package/dist/harness/subagent-runner.d.ts.map +0 -1
  422. package/dist/harness/subagent-runner.js.map +0 -1
  423. package/dist/harness/subagent-slots.d.ts +0 -28
  424. package/dist/harness/subagent-slots.d.ts.map +0 -1
  425. package/dist/harness/subagent-slots.js +0 -72
  426. package/dist/harness/subagent-slots.js.map +0 -1
  427. package/dist/harness/usage.d.ts +0 -11
  428. package/dist/harness/usage.d.ts.map +0 -1
  429. package/dist/harness/usage.js +0 -38
  430. package/dist/harness/usage.js.map +0 -1
  431. package/dist/mcp/catalog.d.ts +0 -5
  432. package/dist/mcp/catalog.d.ts.map +0 -1
  433. package/dist/mcp/catalog.js +0 -68
  434. package/dist/mcp/catalog.js.map +0 -1
  435. package/dist/mcp/loader.d.ts +0 -12
  436. package/dist/mcp/loader.d.ts.map +0 -1
  437. package/dist/mcp/loader.js.map +0 -1
  438. package/dist/mcp/open-connector.d.ts.map +0 -1
  439. package/dist/mcp/open-connector.js.map +0 -1
  440. package/dist/mcp/types.d.ts +0 -66
  441. package/dist/mcp/types.d.ts.map +0 -1
  442. package/dist/mcp/types.js.map +0 -1
  443. package/dist/packages/index.d.ts +0 -169
  444. package/dist/packages/index.d.ts.map +0 -1
  445. package/dist/packages/index.js +0 -721
  446. package/dist/packages/index.js.map +0 -1
  447. package/dist/packages/types.d.ts +0 -100
  448. package/dist/packages/types.d.ts.map +0 -1
  449. package/dist/packages/types.js.map +0 -1
  450. package/dist/provisioner.d.ts.map +0 -1
  451. package/dist/provisioner.js.map +0 -1
  452. package/dist/subagent-progress.d.ts +0 -39
  453. package/dist/subagent-progress.d.ts.map +0 -1
  454. package/dist/subagent-progress.js +0 -225
  455. package/dist/subagent-progress.js.map +0 -1
  456. package/dist/tools/bash.d.ts +0 -12
  457. package/dist/tools/bash.d.ts.map +0 -1
  458. package/dist/tools/bash.js +0 -80
  459. package/dist/tools/bash.js.map +0 -1
  460. package/dist/tools/edit.d.ts +0 -11
  461. package/dist/tools/edit.d.ts.map +0 -1
  462. package/dist/tools/edit.js +0 -132
  463. package/dist/tools/edit.js.map +0 -1
  464. package/dist/tools/event.d.ts.map +0 -1
  465. package/dist/tools/event.js +0 -255
  466. package/dist/tools/event.js.map +0 -1
  467. package/dist/tools/generate-image.d.ts.map +0 -1
  468. package/dist/tools/generate-image.js.map +0 -1
  469. package/dist/tools/host-fn-tool.d.ts.map +0 -1
  470. package/dist/tools/host-fn-tool.js.map +0 -1
  471. package/dist/tools/index.d.ts.map +0 -1
  472. package/dist/tools/index.js.map +0 -1
  473. package/dist/tools/react.d.ts.map +0 -1
  474. package/dist/tools/react.js.map +0 -1
  475. package/dist/tools/read.d.ts +0 -12
  476. package/dist/tools/read.d.ts.map +0 -1
  477. package/dist/tools/read.js +0 -140
  478. package/dist/tools/read.js.map +0 -1
  479. package/dist/tools/sandbox.d.ts.map +0 -1
  480. package/dist/tools/sandbox.js.map +0 -1
  481. package/dist/tools/subagent.d.ts.map +0 -1
  482. package/dist/tools/subagent.js.map +0 -1
  483. package/dist/tools/types.d.ts.map +0 -1
  484. package/dist/tools/types.js.map +0 -1
  485. package/dist/tools/write.d.ts +0 -10
  486. package/dist/tools/write.d.ts.map +0 -1
  487. package/dist/tools/write.js +0 -23
  488. package/dist/tools/write.js.map +0 -1
  489. package/dist/trigger.d.ts +0 -23
  490. package/dist/trigger.d.ts.map +0 -1
  491. package/dist/trigger.js +0 -97
  492. package/dist/trigger.js.map +0 -1
  493. package/dist/utils/file-guards.d.ts.map +0 -1
  494. package/dist/utils/file-guards.js.map +0 -1
  495. package/dist/web/admin/portal.d.ts.map +0 -1
  496. package/dist/web/admin/portal.js.map +0 -1
  497. package/dist/web/admin/provider-models.d.ts.map +0 -1
  498. package/dist/web/admin/provider-models.js.map +0 -1
  499. package/dist/web/admin/types.d.ts.map +0 -1
  500. package/dist/web/admin/types.js.map +0 -1
  501. package/dist/web/login/oauth.d.ts.map +0 -1
  502. package/dist/web/login/oauth.js.map +0 -1
  503. package/dist/web/login/portal.d.ts.map +0 -1
  504. package/dist/web/login/portal.js.map +0 -1
  505. package/dist/web/login/types.d.ts.map +0 -1
  506. package/dist/web/login/types.js.map +0 -1
  507. package/dist/web/portal-shell.d.ts.map +0 -1
  508. package/dist/web/portal-shell.js.map +0 -1
  509. package/dist/web/server.d.ts.map +0 -1
  510. package/dist/web/server.js.map +0 -1
  511. package/dist/web/session-view/portal.d.ts.map +0 -1
  512. package/dist/web/session-view/portal.js.map +0 -1
  513. package/dist/web/session-view/types.d.ts.map +0 -1
  514. package/dist/web/session-view/types.js +0 -2
  515. package/dist/web/session-view/types.js.map +0 -1
  516. package/dist/web/token-store.d.ts.map +0 -1
  517. package/dist/web/token-store.js.map +0 -1
  518. package/dist/web/types.d.ts.map +0 -1
  519. package/dist/web/types.js +0 -2
  520. package/dist/web/types.js.map +0 -1
  521. package/dist/workspace-projection/index.d.ts.map +0 -1
  522. package/dist/workspace-projection/index.js.map +0 -1
  523. package/dist/workspace-projection/types.d.ts +0 -29
  524. package/dist/workspace-projection/types.d.ts.map +0 -1
  525. package/dist/workspace-projection/types.js +0 -2
  526. package/dist/workspace-projection/types.js.map +0 -1
  527. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  528. /package/dist/{commands → adapters/commands}/login.d.ts +0 -0
  529. /package/dist/{commands → adapters/commands}/manifest.d.ts +0 -0
  530. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  531. /package/dist/{commands → adapters/commands}/registry.d.ts +0 -0
  532. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  533. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  534. /package/dist/{commands → adapters/commands}/types.js +0 -0
  535. /package/dist/{web → adapters/web}/admin/provider-models.js +0 -0
  536. /package/dist/{mcp → adapters/web/admin}/types.js +0 -0
  537. /package/dist/{web → adapters/web}/login/oauth.d.ts +0 -0
  538. /package/dist/{packages → adapters/web/login}/types.js +0 -0
  539. /package/dist/{web → adapters/web}/session-view/portal.d.ts +0 -0
  540. /package/dist/{tools → adapters/web/session-view}/types.js +0 -0
  541. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  542. /package/dist/{web → adapters/web}/token-store.js +0 -0
  543. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  544. /package/dist/{web/admin → adapters/web}/types.js +0 -0
  545. /package/dist/{utils/file-guards.d.ts → file-guards.d.ts} +0 -0
  546. /package/dist/{utils/file-guards.js → file-guards.js} +0 -0
  547. /package/dist/{mcp → harness}/open-connector.d.ts +0 -0
  548. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  549. /package/dist/{adapters/slack → harness}/tools/attach.js +0 -0
  550. /package/dist/{tools → harness/tools}/generate-image.d.ts +0 -0
  551. /package/dist/{tools → harness/tools}/generate-image.js +0 -0
  552. /package/dist/{tools → harness/tools}/host-fn-tool.d.ts +0 -0
  553. /package/dist/{tools → harness/tools}/host-fn-tool.js +0 -0
  554. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
  555. /package/dist/{tools → harness/tools}/react.js +0 -0
  556. /package/dist/{web/login → harness/tools}/types.js +0 -0
@@ -16,11 +16,14 @@
16
16
  * v3 context computed by the reference converter below. The original file
17
17
  * is kept beside the migrated one as `<name>.v3.bak`.
18
18
  */
19
- import { existsSync, linkSync, lstatSync, readdirSync, readFileSync, renameSync, rmSync, statSync, } from "node:fs";
20
- import { join } from "node:path";
19
+ import { readFileSync } from "node:fs";
21
20
  import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, } from "@earendil-works/pi-agent-core";
22
- import { SessionStore } from "../harness/session-store.js";
23
- import { atomicWritePrivateFile } from "../utils/file-guards.js";
21
+ import { SessionStore } from "./session-store.js";
22
+ import { commitMigration, findSessionFiles, optionalAnnotations, V4FileWriter, } from "./migrate-common.js";
23
+ /** `session_info`, `label` and `leaf` become v4 values, not tree entries. */
24
+ function isFactEntry(entry) {
25
+ return entry.type === "session_info" || entry.type === "label" || entry.type === "leaf";
26
+ }
24
27
  /** Whether a file's first non-empty line is a v3 session header. */
25
28
  export function isV3SessionFile(filePath) {
26
29
  try {
@@ -35,8 +38,8 @@ export function isV3SessionFile(filePath) {
35
38
  return false;
36
39
  }
37
40
  }
38
- /** Read a v3 session file, ignoring a torn final line (crash tail). */
39
- function readV3SessionFile(filePath) {
41
+ /** Parse every non-empty line, tolerating a torn final line (crash tail). */
42
+ function parseJsonLines(filePath) {
40
43
  const lines = readFileSync(filePath, "utf-8")
41
44
  .split("\n")
42
45
  .map((line) => line.trim())
@@ -52,24 +55,37 @@ function readV3SessionFile(filePath) {
52
55
  throw new Error(`Invalid JSON on line ${index + 1} of ${filePath}`, { cause: error });
53
56
  }
54
57
  }
55
- const header = records[0];
56
- if (!header || header.type !== "session" || typeof header.id !== "string") {
57
- throw new Error(`Not a v3 session file: ${filePath}`);
58
- }
59
- // Crash-era v3 files can contain duplicated lines (a retried append wrote
60
- // the header+entry pair twice). The v3 runtime read entries into a Map, so
61
- // duplicates were silently collapsed; v4 rejects duplicate mutation ids.
62
- // Reproduce the v3 Map semantics: a repeated id replaces its payload while
63
- // retaining the id's original insertion position.
58
+ return records;
59
+ }
60
+ /**
61
+ * Crash-era v3 files can contain duplicated lines (a retried append wrote the
62
+ * header+entry pair twice). The v3 runtime read entries into a Map, so
63
+ * duplicates were silently collapsed; v4 rejects duplicate mutation ids.
64
+ * Reproduce the v3 Map semantics: a repeated id replaces its payload while
65
+ * retaining the id's original insertion position.
66
+ */
67
+ function dedupeEntries(records) {
64
68
  const entriesById = new Map();
65
- for (const record of records.slice(1)) {
69
+ for (const record of records) {
66
70
  if (typeof record.type !== "string" || typeof record.id !== "string")
67
71
  continue;
68
72
  if (record.type === "session")
69
73
  continue;
70
74
  entriesById.set(record.id, record);
71
75
  }
72
- return { header: header, entries: [...entriesById.values()] };
76
+ return [...entriesById.values()];
77
+ }
78
+ /** Read a v3 session file, ignoring a torn final line (crash tail). */
79
+ function readV3SessionFile(filePath) {
80
+ const records = parseJsonLines(filePath);
81
+ const header = records[0];
82
+ if (!header || header.type !== "session" || typeof header.id !== "string") {
83
+ throw new Error(`Not a v3 session file: ${filePath}`);
84
+ }
85
+ return {
86
+ header: header,
87
+ entries: dedupeEntries(records.slice(1)),
88
+ };
73
89
  }
74
90
  function toEpochMillis(timestamp) {
75
91
  const parsed = Date.parse(timestamp);
@@ -96,6 +112,10 @@ function v3LeafId(entries) {
96
112
  }
97
113
  return leafId;
98
114
  }
115
+ /** v3 kept `custom_message` payloads out of band; v4 stores a real message. */
116
+ function customMessageOf(entry) {
117
+ return createCustomMessage(entry.customType, entry.content, entry.display, entry.details, toEpochMillis(entry.timestamp));
118
+ }
99
119
  /** Convert one tree-shaping v3 entry to its v4 counterpart (facts excluded). */
100
120
  function convertEntry(entry, entries) {
101
121
  const base = {
@@ -108,11 +128,7 @@ function convertEntry(entry, entries) {
108
128
  case "message":
109
129
  return { ...base, type: "message", message: entry.message };
110
130
  case "custom_message":
111
- return {
112
- ...base,
113
- type: "message",
114
- message: createCustomMessage(entry.customType, entry.content, entry.display, entry.details, toEpochMillis(entry.timestamp)),
115
- };
131
+ return { ...base, type: "message", message: customMessageOf(entry) };
116
132
  case "thinking_level_change":
117
133
  case "model_change":
118
134
  case "active_tools_change": {
@@ -132,8 +148,7 @@ function convertEntry(entry, entries) {
132
148
  retainedTail: entry.retainedTail ?? compactionKeptMessages(entry, entries),
133
149
  tokensBefore: entry.tokensBefore,
134
150
  fromHook: false,
135
- ...(entry.details !== undefined ? { details: entry.details } : {}),
136
- ...(entry.usage !== undefined ? { usage: entry.usage } : {}),
151
+ ...optionalAnnotations(entry),
137
152
  };
138
153
  case "branch_summary":
139
154
  return {
@@ -142,8 +157,7 @@ function convertEntry(entry, entries) {
142
157
  fromId: entry.fromId ?? null,
143
158
  summary: entry.summary,
144
159
  fromHook: false,
145
- ...(entry.details !== undefined ? { details: entry.details } : {}),
146
- ...(entry.usage !== undefined ? { usage: entry.usage } : {}),
160
+ ...optionalAnnotations(entry),
147
161
  };
148
162
  case "custom":
149
163
  return {
@@ -169,9 +183,8 @@ function resolveV4Parent(entry, entries) {
169
183
  const parent = byId.get(parentId);
170
184
  if (!parent)
171
185
  return null;
172
- if (parent.type !== "session_info" && parent.type !== "label" && parent.type !== "leaf") {
186
+ if (!isFactEntry(parent))
173
187
  return parentId;
174
- }
175
188
  parentId = parent.parentId;
176
189
  }
177
190
  return null;
@@ -191,60 +204,58 @@ function compactionKeptMessages(compaction, entries) {
191
204
  for (const entry of ancestors.slice(keptStart)) {
192
205
  if (entry.type === "message")
193
206
  messages.push(entry.message);
194
- else if (entry.type === "custom_message") {
195
- messages.push(createCustomMessage(entry.customType, entry.content, entry.display, entry.details, toEpochMillis(entry.timestamp)));
196
- }
207
+ else if (entry.type === "custom_message")
208
+ messages.push(customMessageOf(entry));
197
209
  }
198
210
  return messages;
199
211
  }
200
212
  // ── reference converter (verification oracle) ───────────────────────────────
201
213
  /**
202
- * Convert a v3 branch to v4 entries with the pi-0.83 context semantics:
203
- * the last compaction is repositioned ahead of its kept range so pi's v4
204
- * transform reproduces the v3 context exactly. This mirrors what the
205
- * runtime shim did before mikan moved to native v4 files, and serves as
206
- * the verification oracle for migrated output.
214
+ * Reorder a v3 branch the way the pi-0.83 context shim did: the last
215
+ * compaction moves ahead of its kept range. The branch is returned unchanged
216
+ * when there is no such compaction or it already carries a `retainedTail`.
207
217
  */
208
- function referenceContextEntries(branch) {
209
- let lastCompactionIndex = -1;
210
- for (let i = branch.length - 1; i >= 0; i--) {
211
- if (branch[i]?.type === "compaction") {
212
- lastCompactionIndex = i;
213
- break;
214
- }
215
- }
216
- const lastCompaction = branch[lastCompactionIndex];
217
- const firstKeptId = lastCompaction && !lastCompaction.retainedTail ? lastCompaction.firstKeptEntryId : undefined;
218
+ function orderForReference(branch) {
219
+ const lastIndex = branch.findLastIndex((entry) => entry.type === "compaction");
220
+ const lastCompaction = branch[lastIndex];
221
+ const firstKeptId = lastCompaction?.retainedTail ? undefined : lastCompaction?.firstKeptEntryId;
218
222
  const firstKeptIndex = firstKeptId === undefined ? -1 : branch.findIndex((entry) => entry.id === firstKeptId);
219
- const ordered = [];
220
- if (firstKeptIndex !== -1 && lastCompaction) {
221
- ordered.push(...branch.slice(0, firstKeptIndex));
222
- ordered.push(lastCompaction);
223
- for (const [index, entry] of branch.entries()) {
224
- if (index >= firstKeptIndex && index !== lastCompactionIndex)
225
- ordered.push(entry);
226
- }
227
- }
228
- else {
229
- ordered.push(...branch);
230
- }
223
+ if (firstKeptIndex === -1 || !lastCompaction)
224
+ return { ordered: branch };
225
+ return {
226
+ ordered: [
227
+ ...branch.slice(0, firstKeptIndex),
228
+ lastCompaction,
229
+ ...branch.filter((_, index) => index >= firstKeptIndex && index !== lastIndex),
230
+ ],
231
+ repositioned: lastCompaction,
232
+ };
233
+ }
234
+ /** A repositioned compaction drops its kept range: the range now follows it. */
235
+ function emptiedCompaction(entry) {
236
+ return {
237
+ type: "compaction",
238
+ id: entry.id,
239
+ seq: 0,
240
+ parentId: null,
241
+ timestamp: toEpochMillis(entry.timestamp),
242
+ summary: entry.summary,
243
+ retainedTail: [],
244
+ tokensBefore: entry.tokensBefore,
245
+ fromHook: false,
246
+ };
247
+ }
248
+ /**
249
+ * Convert a v3 branch to v4 entries with the pi-0.83 context semantics, so
250
+ * pi's v4 transform reproduces the v3 context exactly. This mirrors what the
251
+ * runtime shim did before mikan moved to native v4 files, and serves as the
252
+ * verification oracle for migrated output.
253
+ */
254
+ function referenceContextEntries(branch) {
255
+ const { ordered, repositioned } = orderForReference(branch);
231
256
  const converted = [];
232
257
  for (const entry of ordered) {
233
- if (entry.type === "compaction" && entry === lastCompaction && firstKeptIndex !== -1) {
234
- converted.push({
235
- type: "compaction",
236
- id: entry.id,
237
- seq: 0,
238
- parentId: null,
239
- timestamp: toEpochMillis(entry.timestamp),
240
- summary: entry.summary,
241
- retainedTail: [],
242
- tokensBefore: entry.tokensBefore,
243
- fromHook: false,
244
- });
245
- continue;
246
- }
247
- const piEntry = convertEntry(entry, []);
258
+ const piEntry = repositioned === entry ? emptiedCompaction(repositioned) : convertEntry(entry, []);
248
259
  if (piEntry)
249
260
  converted.push(piEntry);
250
261
  }
@@ -262,25 +273,25 @@ function isCurrentContextMessage(message) {
262
273
  message.stopReason !== "aborted" &&
263
274
  message.stopReason !== "deferred"));
264
275
  }
276
+ function contextMessagesOf(entry) {
277
+ if (entry.type === "message") {
278
+ return isCurrentContextMessage(entry.message) ? [entry.message] : [];
279
+ }
280
+ if (entry.type === "compaction") {
281
+ return [
282
+ createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp),
283
+ ...entry.retainedTail.filter(isCurrentContextMessage),
284
+ ];
285
+ }
286
+ if (entry.type === "branch_summary" && entry.summary) {
287
+ return [createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp)];
288
+ }
289
+ return [];
290
+ }
265
291
  function referenceContextMessages(entries) {
266
292
  const compactionIndex = entries.findLastIndex((entry) => entry.type === "compaction");
267
- const visible = compactionIndex === -1
268
- ? entries
269
- : [entries[compactionIndex], ...entries.slice(compactionIndex + 1)];
270
- const messages = [];
271
- for (const entry of visible) {
272
- if (entry.type === "message") {
273
- if (isCurrentContextMessage(entry.message))
274
- messages.push(entry.message);
275
- }
276
- else if (entry.type === "compaction") {
277
- messages.push(createCompactionSummaryMessage(entry.summary, entry.tokensBefore, entry.timestamp), ...entry.retainedTail.filter(isCurrentContextMessage));
278
- }
279
- else if (entry.type === "branch_summary" && entry.summary) {
280
- messages.push(createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp));
281
- }
282
- }
283
- return messages;
293
+ const visible = compactionIndex === -1 ? entries : entries.slice(compactionIndex);
294
+ return visible.flatMap(contextMessagesOf);
284
295
  }
285
296
  // ── v4 encoding ─────────────────────────────────────────────────────────────
286
297
  function buildV4Header(header) {
@@ -297,86 +308,68 @@ function buildV4Header(header) {
297
308
  : {}),
298
309
  };
299
310
  }
300
- function encodeV4File(file) {
301
- const lines = [JSON.stringify(buildV4Header(file.header))];
302
- let seq = 0;
303
- const push = (write) => lines.push(JSON.stringify(write));
304
- let name;
311
+ /** Split a v3 entry stream into tree entries and the facts v4 stores as values. */
312
+ function partitionEntries(entries) {
313
+ const tree = [];
305
314
  const labels = [];
306
- for (const entry of file.entries) {
307
- if (entry.type === "session_info") {
308
- name = entry.name?.trim() || undefined;
309
- continue;
310
- }
311
- if (entry.type === "label") {
312
- labels.push({ targetId: entry.targetId, label: entry.label });
313
- continue;
315
+ let name;
316
+ for (const entry of entries) {
317
+ switch (entry.type) {
318
+ case "session_info":
319
+ name = entry.name?.trim() || undefined;
320
+ break;
321
+ case "label":
322
+ labels.push({ targetId: entry.targetId, label: entry.label });
323
+ break;
324
+ case "leaf":
325
+ break;
326
+ default:
327
+ tree.push(entry);
314
328
  }
315
- if (entry.type === "leaf")
316
- continue;
317
- const converted = convertEntry(entry, file.entries);
318
- if (!converted)
319
- continue;
320
- converted.seq = ++seq;
321
- push({ kind: "entry", ...converted });
322
329
  }
323
- let leafId = v3LeafId(file.entries);
324
- const byId = new Map(file.entries.map((entry) => [entry.id, entry]));
330
+ return { tree, name, labels };
331
+ }
332
+ /** The v4 branch tip: the v3 leaf, walked back past fact-only entries. */
333
+ function resolveV4Leaf(entries) {
334
+ const byId = new Map(entries.map((entry) => [entry.id, entry]));
335
+ let leafId = v3LeafId(entries);
325
336
  while (leafId !== null) {
326
337
  const target = byId.get(leafId);
327
- if (!target) {
328
- leafId = null;
329
- break;
330
- }
331
- if (target.type !== "session_info" && target.type !== "label" && target.type !== "leaf")
332
- break;
338
+ if (!target)
339
+ return null;
340
+ if (!isFactEntry(target))
341
+ return leafId;
333
342
  leafId = target.parentId;
334
343
  }
335
- push({
336
- kind: "value",
337
- op: "set",
338
- seq: ++seq,
339
- namespace: "pi.branch.tip",
340
- key: "main",
341
- value: leafId,
342
- });
343
- if (name !== undefined) {
344
- push({
345
- kind: "value",
346
- op: "set",
347
- seq: ++seq,
348
- namespace: "pi.session.name",
349
- key: "",
350
- value: name,
351
- });
352
- }
353
- for (const { targetId, label } of labels) {
354
- if (label === undefined)
355
- continue;
356
- push({
357
- kind: "value",
358
- op: "set",
359
- seq: ++seq,
360
- namespace: "pi.entry.label",
361
- key: targetId,
362
- value: label,
363
- });
364
- }
365
- const { type: _type, version: _version, id: _id, timestamp: _timestamp, cwd: _cwd, parentSession, parentSessionId: _parentSessionId, ...extras } = file.header;
344
+ return null;
345
+ }
346
+ /** Header fields v4 does not model survive as the durable `mikan/metadata` value. */
347
+ function headerMetadata(header) {
348
+ const { type: _type, version: _version, id: _id, timestamp: _timestamp, cwd: _cwd, parentSession, parentSessionId: _parentSessionId, ...extras } = header;
366
349
  const metadata = extras;
367
350
  if (parentSession !== undefined)
368
351
  metadata.parentSessionPath = parentSession;
369
- if (Object.keys(metadata).length > 0) {
370
- push({
371
- kind: "value",
372
- op: "set",
373
- seq: ++seq,
374
- namespace: "mikan",
375
- key: "metadata",
376
- value: metadata,
377
- });
352
+ return Object.keys(metadata).length > 0 ? metadata : undefined;
353
+ }
354
+ function encodeV4File(file) {
355
+ const writer = new V4FileWriter(buildV4Header(file.header));
356
+ const { tree, name, labels } = partitionEntries(file.entries);
357
+ for (const entry of tree) {
358
+ const converted = convertEntry(entry, file.entries);
359
+ if (converted)
360
+ writer.entry(converted);
361
+ }
362
+ writer.set("pi.branch.tip", "main", resolveV4Leaf(file.entries));
363
+ if (name !== undefined)
364
+ writer.set("pi.session.name", "", name);
365
+ for (const { targetId, label } of labels) {
366
+ if (label !== undefined)
367
+ writer.set("pi.entry.label", targetId, label);
378
368
  }
379
- return `${lines.join("\n")}\n`;
369
+ const metadata = headerMetadata(file.header);
370
+ if (metadata)
371
+ writer.set("mikan", "metadata", metadata);
372
+ return writer.toString();
380
373
  }
381
374
  // ── migration driver ────────────────────────────────────────────────────────
382
375
  async function verifyMigratedFile(v4Path, source) {
@@ -402,15 +395,6 @@ async function verifyMigratedFile(v4Path, source) {
402
395
  * the v3 reference semantics before it replaces the original; the original
403
396
  * is preserved as `<file>.v3.bak`.
404
397
  */
405
- function backupAlreadyLinked(sourcePath, backupPath) {
406
- if (!existsSync(backupPath))
407
- return false;
408
- const source = statSync(sourcePath);
409
- const backup = statSync(backupPath);
410
- if (source.dev === backup.dev && source.ino === backup.ino)
411
- return true;
412
- throw new Error(`Backup already exists: ${backupPath}`);
413
- }
414
398
  export async function migrateSessionFile(filePath, options) {
415
399
  if (!isV3SessionFile(filePath))
416
400
  return { file: filePath, status: "already-v4" };
@@ -418,50 +402,18 @@ export async function migrateSessionFile(filePath, options) {
418
402
  const source = readV3SessionFile(filePath);
419
403
  if (options?.dryRun)
420
404
  return { file: filePath, status: "migrated", detail: "dry run" };
421
- const tempPath = `${filePath}.v4.tmp`;
422
- const backupPath = `${filePath}.v3.bak`;
423
- const backupLinked = backupAlreadyLinked(filePath, backupPath);
424
- atomicWritePrivateFile(tempPath, encodeV4File(source));
425
- try {
426
- await verifyMigratedFile(tempPath, source);
427
- if (!readFileSync(filePath).equals(sourceBytes))
428
- throw new Error("source changed during migration");
429
- if (!backupLinked)
430
- linkSync(filePath, backupPath);
431
- renameSync(tempPath, filePath);
432
- }
433
- catch (error) {
434
- rmSync(tempPath, { force: true });
435
- throw new Error(`Migration failed for ${filePath}`, { cause: error });
436
- }
405
+ await commitMigration({
406
+ filePath,
407
+ sourceBytes,
408
+ encoded: encodeV4File(source),
409
+ tempPath: `${filePath}.v4.tmp`,
410
+ backupPath: `${filePath}.v3.bak`,
411
+ verify: (candidatePath) => verifyMigratedFile(candidatePath, source),
412
+ });
437
413
  return { file: filePath, status: "migrated" };
438
414
  }
439
415
  /** Recursively find candidate session files (.jsonl with a v3 header). */
440
416
  export function findV3SessionFiles(root) {
441
- if (!existsSync(root))
442
- return [];
443
- const found = [];
444
- const walk = (dir) => {
445
- for (const name of readdirSync(dir)) {
446
- const path = join(dir, name);
447
- let stats;
448
- try {
449
- stats = lstatSync(path);
450
- }
451
- catch {
452
- continue;
453
- }
454
- if (stats.isSymbolicLink())
455
- continue;
456
- if (stats.isDirectory()) {
457
- walk(path);
458
- }
459
- else if (name.endsWith(".jsonl") && isV3SessionFile(path)) {
460
- found.push(path);
461
- }
462
- }
463
- };
464
- walk(root);
465
- return found;
417
+ return findSessionFiles(root, isV3SessionFile);
466
418
  }
467
419
  //# sourceMappingURL=migrate-v3.js.map