@geminixiang/mikan 1.0.0-beta.6 → 1.0.0-beta.60

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 (791) hide show
  1. package/CHANGELOG.md +926 -0
  2. package/README.md +95 -37
  3. package/dist/adapter.d.ts +11 -1
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +18 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/adapters/commands/admin.d.ts.map +1 -0
  8. package/dist/{commands → adapters/commands}/admin.js +11 -8
  9. package/dist/adapters/commands/admin.js.map +1 -0
  10. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  11. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  12. package/dist/adapters/commands/auto-reply.js +38 -0
  13. package/dist/adapters/commands/auto-reply.js.map +1 -0
  14. package/dist/adapters/commands/login.d.ts +6 -0
  15. package/dist/adapters/commands/login.d.ts.map +1 -0
  16. package/dist/adapters/commands/login.js +166 -0
  17. package/dist/adapters/commands/login.js.map +1 -0
  18. package/dist/adapters/commands/manifest.d.ts +37 -0
  19. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  20. package/dist/adapters/commands/manifest.js +155 -0
  21. package/dist/adapters/commands/manifest.js.map +1 -0
  22. package/dist/adapters/commands/model.d.ts +15 -0
  23. package/dist/adapters/commands/model.d.ts.map +1 -0
  24. package/dist/adapters/commands/model.js +153 -0
  25. package/dist/adapters/commands/model.js.map +1 -0
  26. package/dist/adapters/commands/new.d.ts.map +1 -0
  27. package/dist/adapters/commands/new.js +41 -0
  28. package/dist/adapters/commands/new.js.map +1 -0
  29. package/dist/adapters/commands/registry.d.ts +5 -0
  30. package/dist/adapters/commands/registry.d.ts.map +1 -0
  31. package/dist/adapters/commands/registry.js +43 -0
  32. package/dist/adapters/commands/registry.js.map +1 -0
  33. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  34. package/dist/adapters/commands/sandbox.js +148 -0
  35. package/dist/adapters/commands/sandbox.js.map +1 -0
  36. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  37. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  38. package/dist/adapters/commands/session-view.js.map +1 -0
  39. package/dist/adapters/commands/types.d.ts +145 -0
  40. package/dist/adapters/commands/types.d.ts.map +1 -0
  41. package/dist/adapters/commands/types.js.map +1 -0
  42. package/dist/adapters/commands/utils.d.ts +14 -0
  43. package/dist/adapters/commands/utils.d.ts.map +1 -0
  44. package/dist/{commands → adapters/commands}/utils.js +18 -1
  45. package/dist/adapters/commands/utils.js.map +1 -0
  46. package/dist/adapters/discord/bot.d.ts +11 -8
  47. package/dist/adapters/discord/bot.d.ts.map +1 -1
  48. package/dist/adapters/discord/bot.js +218 -252
  49. package/dist/adapters/discord/bot.js.map +1 -1
  50. package/dist/adapters/discord/components.d.ts +28 -0
  51. package/dist/adapters/discord/components.d.ts.map +1 -0
  52. package/dist/adapters/discord/components.js +32 -0
  53. package/dist/adapters/discord/components.js.map +1 -0
  54. package/dist/adapters/discord/context.d.ts +2 -6
  55. package/dist/adapters/discord/context.d.ts.map +1 -1
  56. package/dist/adapters/discord/context.js +63 -218
  57. package/dist/adapters/discord/context.js.map +1 -1
  58. package/dist/adapters/discord/format.d.ts +3 -0
  59. package/dist/adapters/discord/format.d.ts.map +1 -0
  60. package/dist/adapters/discord/format.js +84 -0
  61. package/dist/adapters/discord/format.js.map +1 -0
  62. package/dist/adapters/discord/types.d.ts +7 -0
  63. package/dist/adapters/discord/types.d.ts.map +1 -1
  64. package/dist/adapters/discord/types.js.map +1 -1
  65. package/dist/adapters/github/bot.d.ts +102 -0
  66. package/dist/adapters/github/bot.d.ts.map +1 -0
  67. package/dist/adapters/github/bot.js +720 -0
  68. package/dist/adapters/github/bot.js.map +1 -0
  69. package/dist/adapters/github/client.d.ts +122 -0
  70. package/dist/adapters/github/client.d.ts.map +1 -0
  71. package/dist/adapters/github/client.js +301 -0
  72. package/dist/adapters/github/client.js.map +1 -0
  73. package/dist/adapters/github/context.d.ts +5 -0
  74. package/dist/adapters/github/context.d.ts.map +1 -0
  75. package/dist/adapters/github/context.js +101 -0
  76. package/dist/adapters/github/context.js.map +1 -0
  77. package/dist/adapters/github/github-ops.d.ts +78 -0
  78. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  79. package/dist/adapters/github/github-ops.js +337 -0
  80. package/dist/adapters/github/github-ops.js.map +1 -0
  81. package/dist/adapters/github/ids.d.ts +34 -0
  82. package/dist/adapters/github/ids.d.ts.map +1 -0
  83. package/dist/adapters/github/ids.js +57 -0
  84. package/dist/adapters/github/ids.js.map +1 -0
  85. package/dist/adapters/github/repo.d.ts +33 -0
  86. package/dist/adapters/github/repo.d.ts.map +1 -0
  87. package/dist/adapters/github/repo.js +141 -0
  88. package/dist/adapters/github/repo.js.map +1 -0
  89. package/dist/adapters/github/tool-pack.d.ts +14 -0
  90. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  91. package/dist/adapters/github/tool-pack.js +55 -0
  92. package/dist/adapters/github/tool-pack.js.map +1 -0
  93. package/dist/adapters/github/tools/checks.d.ts +18 -0
  94. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/checks.js +86 -0
  96. package/dist/adapters/github/tools/checks.js.map +1 -0
  97. package/dist/adapters/github/tools/issue.d.ts +21 -0
  98. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/issue.js +48 -0
  100. package/dist/adapters/github/tools/issue.js.map +1 -0
  101. package/dist/adapters/github/tools/pr.d.ts +22 -0
  102. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/pr.js +48 -0
  104. package/dist/adapters/github/tools/pr.js.map +1 -0
  105. package/dist/adapters/github/tools/read.d.ts +21 -0
  106. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/read.js +141 -0
  108. package/dist/adapters/github/tools/read.js.map +1 -0
  109. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  110. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/review-reply.js +38 -0
  112. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  113. package/dist/adapters/github/tools/sync.d.ts +17 -0
  114. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  115. package/dist/adapters/github/tools/sync.js +34 -0
  116. package/dist/adapters/github/tools/sync.js.map +1 -0
  117. package/dist/adapters/github/types.d.ts +345 -0
  118. package/dist/adapters/github/types.d.ts.map +1 -0
  119. package/dist/adapters/github/types.js.map +1 -0
  120. package/dist/adapters/github/webhook.d.ts +20 -0
  121. package/dist/adapters/github/webhook.d.ts.map +1 -0
  122. package/dist/adapters/github/webhook.js +78 -0
  123. package/dist/adapters/github/webhook.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +16 -5
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +86 -27
  127. package/dist/adapters/intake.js.map +1 -1
  128. package/dist/adapters/markdown-tables.d.ts +19 -0
  129. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  130. package/dist/adapters/markdown-tables.js +152 -0
  131. package/dist/adapters/markdown-tables.js.map +1 -0
  132. package/dist/adapters/progressive-renderer.d.ts +7 -0
  133. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  134. package/dist/adapters/progressive-renderer.js +439 -0
  135. package/dist/adapters/progressive-renderer.js.map +1 -0
  136. package/dist/adapters/shared.d.ts +35 -11
  137. package/dist/adapters/shared.d.ts.map +1 -1
  138. package/dist/adapters/shared.js +105 -24
  139. package/dist/adapters/shared.js.map +1 -1
  140. package/dist/adapters/slack/assistant.d.ts +73 -0
  141. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  142. package/dist/adapters/slack/assistant.js +205 -0
  143. package/dist/adapters/slack/assistant.js.map +1 -0
  144. package/dist/adapters/slack/blocks.d.ts +14 -0
  145. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  146. package/dist/adapters/slack/blocks.js +104 -148
  147. package/dist/adapters/slack/blocks.js.map +1 -1
  148. package/dist/adapters/slack/bot.d.ts +116 -18
  149. package/dist/adapters/slack/bot.d.ts.map +1 -1
  150. package/dist/adapters/slack/bot.js +760 -468
  151. package/dist/adapters/slack/bot.js.map +1 -1
  152. package/dist/adapters/slack/context.d.ts +2 -6
  153. package/dist/adapters/slack/context.d.ts.map +1 -1
  154. package/dist/adapters/slack/context.js +11 -17
  155. package/dist/adapters/slack/context.js.map +1 -1
  156. package/dist/adapters/slack/markdown.d.ts +3 -0
  157. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  158. package/dist/adapters/slack/markdown.js +48 -0
  159. package/dist/adapters/slack/markdown.js.map +1 -0
  160. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  161. package/dist/adapters/slack/response-lifecycle.js +240 -345
  162. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  163. package/dist/adapters/slack/session.d.ts.map +1 -1
  164. package/dist/adapters/slack/session.js +7 -11
  165. package/dist/adapters/slack/session.js.map +1 -1
  166. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  167. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  168. package/dist/adapters/slack/stream-limits.js +56 -0
  169. package/dist/adapters/slack/stream-limits.js.map +1 -0
  170. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  171. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  172. package/dist/adapters/slack/tool-pack.js +45 -0
  173. package/dist/adapters/slack/tool-pack.js.map +1 -0
  174. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  175. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  176. package/dist/adapters/slack/tools/blockkit.js +106 -0
  177. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  178. package/dist/adapters/slack/types.d.ts +73 -2
  179. package/dist/adapters/slack/types.d.ts.map +1 -1
  180. package/dist/adapters/slack/types.js.map +1 -1
  181. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  182. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  183. package/dist/adapters/slack/update-diagnostics.js +134 -0
  184. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  185. package/dist/adapters/telegram/bot.d.ts +10 -9
  186. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  187. package/dist/adapters/telegram/bot.js +129 -198
  188. package/dist/adapters/telegram/bot.js.map +1 -1
  189. package/dist/adapters/telegram/context.d.ts +2 -6
  190. package/dist/adapters/telegram/context.d.ts.map +1 -1
  191. package/dist/adapters/telegram/context.js +52 -190
  192. package/dist/adapters/telegram/context.js.map +1 -1
  193. package/dist/adapters/types.d.ts +144 -13
  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/portal.d.ts +44 -0
  197. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  198. package/dist/adapters/web/admin/portal.js +3284 -0
  199. package/dist/adapters/web/admin/portal.js.map +1 -0
  200. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  201. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  202. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  203. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  204. package/dist/adapters/web/admin/types.d.ts +50 -0
  205. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  206. package/dist/adapters/web/admin/types.js.map +1 -0
  207. package/dist/adapters/web/login/oauth.d.ts +5 -0
  208. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  209. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  210. package/dist/adapters/web/login/oauth.js.map +1 -0
  211. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  212. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  213. package/dist/{web → adapters/web}/login/portal.js +161 -119
  214. package/dist/adapters/web/login/portal.js.map +1 -0
  215. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  216. package/dist/adapters/web/login/types.d.ts.map +1 -0
  217. package/dist/adapters/web/login/types.js.map +1 -0
  218. package/dist/adapters/web/portal-shell.d.ts +22 -0
  219. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  220. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  221. package/dist/adapters/web/portal-shell.js.map +1 -0
  222. package/dist/{web → adapters/web}/server.d.ts +11 -8
  223. package/dist/adapters/web/server.d.ts.map +1 -0
  224. package/dist/{web → adapters/web}/server.js +16 -7
  225. package/dist/adapters/web/server.js.map +1 -0
  226. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  227. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  228. package/dist/{web → adapters/web}/session-view/portal.js +632 -162
  229. package/dist/adapters/web/session-view/portal.js.map +1 -0
  230. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  231. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  232. package/dist/adapters/web/session-view/types.js.map +1 -0
  233. package/dist/adapters/web/token-store.d.ts.map +1 -0
  234. package/dist/{web → adapters/web}/token-store.js +1 -1
  235. package/dist/adapters/web/token-store.js.map +1 -0
  236. package/dist/adapters/web/types.d.ts.map +1 -0
  237. package/dist/adapters/web/types.js.map +1 -0
  238. package/dist/cli/arg-grammar.d.ts +11 -0
  239. package/dist/cli/arg-grammar.d.ts.map +1 -0
  240. package/dist/cli/arg-grammar.js +50 -0
  241. package/dist/cli/arg-grammar.js.map +1 -0
  242. package/dist/cli/boot.d.ts +5 -0
  243. package/dist/cli/boot.d.ts.map +1 -0
  244. package/dist/cli/boot.js +90 -0
  245. package/dist/cli/boot.js.map +1 -0
  246. package/dist/cli/download.d.ts.map +1 -0
  247. package/dist/cli/download.js +88 -0
  248. package/dist/cli/download.js.map +1 -0
  249. package/dist/cli/office.d.ts +2 -0
  250. package/dist/cli/office.d.ts.map +1 -0
  251. package/dist/cli/office.js +83 -0
  252. package/dist/cli/office.js.map +1 -0
  253. package/dist/cli/onboard.d.ts +10 -0
  254. package/dist/cli/onboard.d.ts.map +1 -0
  255. package/dist/cli/onboard.js +225 -0
  256. package/dist/cli/onboard.js.map +1 -0
  257. package/dist/cli/sessions.d.ts +2 -0
  258. package/dist/cli/sessions.d.ts.map +1 -0
  259. package/dist/cli/sessions.js +88 -0
  260. package/dist/cli/sessions.js.map +1 -0
  261. package/dist/cli/types.d.ts +25 -0
  262. package/dist/cli/types.d.ts.map +1 -0
  263. package/dist/cli/types.js.map +1 -0
  264. package/dist/config.d.ts +38 -39
  265. package/dist/config.d.ts.map +1 -1
  266. package/dist/config.js +256 -215
  267. package/dist/config.js.map +1 -1
  268. package/dist/dream/index.d.ts +20 -0
  269. package/dist/dream/index.d.ts.map +1 -0
  270. package/dist/dream/index.js +264 -0
  271. package/dist/dream/index.js.map +1 -0
  272. package/dist/dream/types.d.ts +30 -0
  273. package/dist/dream/types.d.ts.map +1 -0
  274. package/dist/dream/types.js +2 -0
  275. package/dist/dream/types.js.map +1 -0
  276. package/dist/env-manifest.d.ts +32 -0
  277. package/dist/env-manifest.d.ts.map +1 -0
  278. package/dist/env-manifest.js +244 -0
  279. package/dist/env-manifest.js.map +1 -0
  280. package/dist/events/index.d.ts +150 -0
  281. package/dist/events/index.d.ts.map +1 -0
  282. package/dist/events/index.js +249 -0
  283. package/dist/events/index.js.map +1 -0
  284. package/dist/{events.d.ts → events/watcher.d.ts} +4 -4
  285. package/dist/events/watcher.d.ts.map +1 -0
  286. package/dist/{events.js → events/watcher.js} +23 -84
  287. package/dist/events/watcher.js.map +1 -0
  288. package/dist/{utils/file-guards.d.ts → file-guards.d.ts} +9 -0
  289. package/dist/file-guards.d.ts.map +1 -0
  290. package/dist/{utils/file-guards.js → file-guards.js} +44 -1
  291. package/dist/file-guards.js.map +1 -0
  292. package/dist/harness/execution-env.d.ts +19 -0
  293. package/dist/harness/execution-env.d.ts.map +1 -0
  294. package/dist/harness/execution-env.js +262 -0
  295. package/dist/harness/execution-env.js.map +1 -0
  296. package/dist/harness/execution-resolver.d.ts +25 -0
  297. package/dist/harness/execution-resolver.d.ts.map +1 -0
  298. package/dist/harness/execution-resolver.js +156 -0
  299. package/dist/harness/execution-resolver.js.map +1 -0
  300. package/dist/harness/index.d.ts +17 -13
  301. package/dist/harness/index.d.ts.map +1 -1
  302. package/dist/harness/index.js +10 -11
  303. package/dist/harness/index.js.map +1 -1
  304. package/dist/harness/mcp.d.ts +38 -0
  305. package/dist/harness/mcp.d.ts.map +1 -0
  306. package/dist/harness/mcp.js +306 -0
  307. package/dist/harness/mcp.js.map +1 -0
  308. package/dist/harness/models.d.ts +7 -4
  309. package/dist/harness/models.d.ts.map +1 -1
  310. package/dist/harness/models.js +54 -55
  311. package/dist/harness/models.js.map +1 -1
  312. package/dist/harness/open-connector.d.ts +14 -0
  313. package/dist/harness/open-connector.d.ts.map +1 -0
  314. package/dist/harness/open-connector.js +204 -0
  315. package/dist/harness/open-connector.js.map +1 -0
  316. package/dist/harness/presenter.d.ts +30 -0
  317. package/dist/harness/presenter.d.ts.map +1 -0
  318. package/dist/harness/presenter.js +804 -0
  319. package/dist/harness/presenter.js.map +1 -0
  320. package/dist/harness/prompt.d.ts +30 -0
  321. package/dist/harness/prompt.d.ts.map +1 -0
  322. package/dist/harness/prompt.js +426 -0
  323. package/dist/harness/prompt.js.map +1 -0
  324. package/dist/harness/runner.d.ts +2 -123
  325. package/dist/harness/runner.d.ts.map +1 -1
  326. package/dist/harness/runner.js +505 -417
  327. package/dist/harness/runner.js.map +1 -1
  328. package/dist/harness/session.d.ts +119 -0
  329. package/dist/harness/session.d.ts.map +1 -0
  330. package/dist/harness/session.js +561 -0
  331. package/dist/harness/session.js.map +1 -0
  332. package/dist/harness/skills.d.ts +17 -28
  333. package/dist/harness/skills.d.ts.map +1 -1
  334. package/dist/harness/skills.js +104 -39
  335. package/dist/harness/skills.js.map +1 -1
  336. package/dist/harness/subagent-profiles.d.ts +8 -0
  337. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  338. package/dist/harness/subagent-profiles.js +284 -0
  339. package/dist/harness/subagent-profiles.js.map +1 -0
  340. package/dist/harness/subagent.d.ts +64 -0
  341. package/dist/harness/subagent.d.ts.map +1 -0
  342. package/dist/harness/subagent.js +687 -0
  343. package/dist/harness/subagent.js.map +1 -0
  344. package/dist/harness/tools/attach.d.ts.map +1 -0
  345. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  346. package/dist/harness/tools/attach.js.map +1 -0
  347. package/dist/{tools → harness/tools}/event.d.ts +3 -32
  348. package/dist/harness/tools/event.d.ts.map +1 -0
  349. package/dist/harness/tools/event.js +178 -0
  350. package/dist/harness/tools/event.js.map +1 -0
  351. package/dist/harness/tools/generate-image.d.ts +23 -0
  352. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  353. package/dist/harness/tools/generate-image.js +65 -0
  354. package/dist/harness/tools/generate-image.js.map +1 -0
  355. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  356. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  357. package/dist/harness/tools/host-fn-tool.js +32 -0
  358. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  359. package/dist/harness/tools/index.d.ts +38 -0
  360. package/dist/harness/tools/index.d.ts.map +1 -0
  361. package/dist/harness/tools/index.js +45 -0
  362. package/dist/harness/tools/index.js.map +1 -0
  363. package/dist/harness/tools/pi-tools.d.ts +18 -0
  364. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  365. package/dist/harness/tools/pi-tools.js +84 -0
  366. package/dist/harness/tools/pi-tools.js.map +1 -0
  367. package/dist/harness/tools/react.d.ts.map +1 -0
  368. package/dist/{tools → harness/tools}/react.js +6 -17
  369. package/dist/harness/tools/react.js.map +1 -0
  370. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  371. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  372. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  373. package/dist/harness/tools/sandbox.js.map +1 -0
  374. package/dist/harness/tools/subagent.d.ts +88 -0
  375. package/dist/harness/tools/subagent.d.ts.map +1 -0
  376. package/dist/harness/tools/subagent.js +681 -0
  377. package/dist/harness/tools/subagent.js.map +1 -0
  378. package/dist/harness/tools/types.d.ts +29 -0
  379. package/dist/harness/tools/types.d.ts.map +1 -0
  380. package/dist/harness/tools/types.js +2 -0
  381. package/dist/harness/tools/types.js.map +1 -0
  382. package/dist/harness/types.d.ts +384 -25
  383. package/dist/harness/types.d.ts.map +1 -1
  384. package/dist/harness/types.js +1 -1
  385. package/dist/harness/types.js.map +1 -1
  386. package/dist/index.d.ts +33 -9
  387. package/dist/index.d.ts.map +1 -1
  388. package/dist/index.js +19 -6
  389. package/dist/index.js.map +1 -1
  390. package/dist/main.js +344 -188
  391. package/dist/main.js.map +1 -1
  392. package/dist/observability/index.d.ts +33 -0
  393. package/dist/observability/index.d.ts.map +1 -0
  394. package/dist/observability/index.js +257 -0
  395. package/dist/observability/index.js.map +1 -0
  396. package/dist/observability/instrument.js +14 -6
  397. package/dist/observability/instrument.js.map +1 -1
  398. package/dist/observability/otel.d.ts +10 -0
  399. package/dist/observability/otel.d.ts.map +1 -0
  400. package/dist/observability/otel.js +183 -0
  401. package/dist/observability/otel.js.map +1 -0
  402. package/dist/observability/sentry.d.ts +40 -7
  403. package/dist/observability/sentry.d.ts.map +1 -1
  404. package/dist/observability/sentry.js +176 -32
  405. package/dist/observability/sentry.js.map +1 -1
  406. package/dist/observability/types.d.ts +24 -3
  407. package/dist/observability/types.d.ts.map +1 -1
  408. package/dist/observability/types.js.map +1 -1
  409. package/dist/office/index.d.ts +138 -0
  410. package/dist/office/index.d.ts.map +1 -0
  411. package/dist/office/index.js +1084 -0
  412. package/dist/office/index.js.map +1 -0
  413. package/dist/office/projection.d.ts +22 -0
  414. package/dist/office/projection.d.ts.map +1 -0
  415. package/dist/office/projection.js +208 -0
  416. package/dist/office/projection.js.map +1 -0
  417. package/dist/office/types.d.ts +116 -0
  418. package/dist/office/types.d.ts.map +1 -0
  419. package/dist/office/types.js +2 -0
  420. package/dist/office/types.js.map +1 -0
  421. package/dist/platform-messages.d.ts +1 -0
  422. package/dist/platform-messages.d.ts.map +1 -1
  423. package/dist/platform-messages.js +3 -0
  424. package/dist/platform-messages.js.map +1 -1
  425. package/dist/process-lifecycle.d.ts +19 -0
  426. package/dist/process-lifecycle.d.ts.map +1 -0
  427. package/dist/process-lifecycle.js +67 -0
  428. package/dist/process-lifecycle.js.map +1 -0
  429. package/dist/runtime/conversation-runtime.d.ts +1 -1
  430. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  431. package/dist/runtime/conversation-runtime.js +398 -149
  432. package/dist/runtime/conversation-runtime.js.map +1 -1
  433. package/dist/runtime/session-lifecycle.d.ts +76 -0
  434. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  435. package/dist/runtime/session-lifecycle.js +404 -0
  436. package/dist/runtime/session-lifecycle.js.map +1 -0
  437. package/dist/runtime/types.d.ts +58 -14
  438. package/dist/runtime/types.d.ts.map +1 -1
  439. package/dist/runtime/types.js.map +1 -1
  440. package/dist/sandbox/cloudflare.d.ts +4 -0
  441. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  442. package/dist/sandbox/cloudflare.js +54 -52
  443. package/dist/sandbox/cloudflare.js.map +1 -1
  444. package/dist/sandbox/container.d.ts +3 -0
  445. package/dist/sandbox/container.d.ts.map +1 -1
  446. package/dist/sandbox/container.js +19 -7
  447. package/dist/sandbox/container.js.map +1 -1
  448. package/dist/sandbox/host.d.ts +3 -0
  449. package/dist/sandbox/host.d.ts.map +1 -1
  450. package/dist/sandbox/host.js +44 -35
  451. package/dist/sandbox/host.js.map +1 -1
  452. package/dist/sandbox/identity.d.ts +42 -0
  453. package/dist/sandbox/identity.d.ts.map +1 -0
  454. package/dist/sandbox/identity.js +77 -0
  455. package/dist/sandbox/identity.js.map +1 -0
  456. package/dist/sandbox/index.d.ts +16 -6
  457. package/dist/sandbox/index.d.ts.map +1 -1
  458. package/dist/sandbox/index.js +73 -17
  459. package/dist/sandbox/index.js.map +1 -1
  460. package/dist/sandbox/provisioner.d.ts +121 -0
  461. package/dist/sandbox/provisioner.d.ts.map +1 -0
  462. package/dist/{provisioner.js → sandbox/provisioner.js} +352 -20
  463. package/dist/sandbox/provisioner.js.map +1 -0
  464. package/dist/sandbox/types.d.ts +43 -9
  465. package/dist/sandbox/types.d.ts.map +1 -1
  466. package/dist/sandbox/types.js.map +1 -1
  467. package/dist/sandbox/utils.d.ts +24 -0
  468. package/dist/sandbox/utils.d.ts.map +1 -1
  469. package/dist/sandbox/utils.js +92 -1
  470. package/dist/sandbox/utils.js.map +1 -1
  471. package/dist/sessions/chat-history-sync.d.ts +23 -0
  472. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  473. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +234 -175
  474. package/dist/sessions/chat-history-sync.js.map +1 -0
  475. package/dist/sessions/history-line.d.ts +29 -0
  476. package/dist/sessions/history-line.d.ts.map +1 -0
  477. package/dist/sessions/history-line.js +45 -0
  478. package/dist/sessions/history-line.js.map +1 -0
  479. package/dist/sessions/migrate-common.d.ts +43 -0
  480. package/dist/sessions/migrate-common.d.ts.map +1 -0
  481. package/dist/sessions/migrate-common.js +99 -0
  482. package/dist/sessions/migrate-common.js.map +1 -0
  483. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  484. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  485. package/dist/sessions/migrate-pi-084.js +302 -0
  486. package/dist/sessions/migrate-pi-084.js.map +1 -0
  487. package/dist/sessions/migrate-v3.d.ts +15 -0
  488. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  489. package/dist/sessions/migrate-v3.js +419 -0
  490. package/dist/sessions/migrate-v3.js.map +1 -0
  491. package/dist/sessions/session-key.d.ts +33 -0
  492. package/dist/sessions/session-key.d.ts.map +1 -0
  493. package/dist/sessions/session-key.js +115 -0
  494. package/dist/sessions/session-key.js.map +1 -0
  495. package/dist/sessions/session-store.d.ts +51 -0
  496. package/dist/sessions/session-store.d.ts.map +1 -0
  497. package/dist/sessions/session-store.js +658 -0
  498. package/dist/sessions/session-store.js.map +1 -0
  499. package/dist/sessions/store.d.ts +17 -10
  500. package/dist/sessions/store.d.ts.map +1 -1
  501. package/dist/sessions/store.js +182 -47
  502. package/dist/sessions/store.js.map +1 -1
  503. package/dist/sessions/types.d.ts +73 -7
  504. package/dist/sessions/types.d.ts.map +1 -1
  505. package/dist/sessions/types.js +1 -1
  506. package/dist/sessions/types.js.map +1 -1
  507. package/dist/settings-mutation.d.ts +40 -0
  508. package/dist/settings-mutation.d.ts.map +1 -0
  509. package/dist/settings-mutation.js +66 -0
  510. package/dist/settings-mutation.js.map +1 -0
  511. package/dist/types.d.ts +331 -140
  512. package/dist/types.d.ts.map +1 -1
  513. package/dist/types.js +2 -2
  514. package/dist/types.js.map +1 -1
  515. package/dist/vault/index.d.ts +52 -2
  516. package/dist/vault/index.d.ts.map +1 -1
  517. package/dist/vault/index.js +218 -86
  518. package/dist/vault/index.js.map +1 -1
  519. package/dist/vault/types.d.ts +6 -2
  520. package/dist/vault/types.d.ts.map +1 -1
  521. package/dist/vault/types.js.map +1 -1
  522. package/package.json +77 -39
  523. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  524. package/dist/adapters/slack/tools/attach.js.map +0 -1
  525. package/dist/adapters/streaming.d.ts +0 -18
  526. package/dist/adapters/streaming.d.ts.map +0 -1
  527. package/dist/adapters/streaming.js +0 -44
  528. package/dist/adapters/streaming.js.map +0 -1
  529. package/dist/adapters/telegram/html.d.ts +0 -3
  530. package/dist/adapters/telegram/html.d.ts.map +0 -1
  531. package/dist/adapters/telegram/html.js +0 -98
  532. package/dist/adapters/telegram/html.js.map +0 -1
  533. package/dist/agent-events.d.ts +0 -5
  534. package/dist/agent-events.d.ts.map +0 -1
  535. package/dist/agent-events.js +0 -26
  536. package/dist/agent-events.js.map +0 -1
  537. package/dist/agent.d.ts +0 -39
  538. package/dist/agent.d.ts.map +0 -1
  539. package/dist/agent.js +0 -1291
  540. package/dist/agent.js.map +0 -1
  541. package/dist/commands/admin.d.ts.map +0 -1
  542. package/dist/commands/admin.js.map +0 -1
  543. package/dist/commands/auto-reply.d.ts.map +0 -1
  544. package/dist/commands/auto-reply.js +0 -76
  545. package/dist/commands/auto-reply.js.map +0 -1
  546. package/dist/commands/extensions.d.ts +0 -14
  547. package/dist/commands/extensions.d.ts.map +0 -1
  548. package/dist/commands/extensions.js +0 -55
  549. package/dist/commands/extensions.js.map +0 -1
  550. package/dist/commands/login.d.ts +0 -5
  551. package/dist/commands/login.d.ts.map +0 -1
  552. package/dist/commands/login.js +0 -115
  553. package/dist/commands/login.js.map +0 -1
  554. package/dist/commands/model.d.ts +0 -10
  555. package/dist/commands/model.d.ts.map +0 -1
  556. package/dist/commands/model.js +0 -102
  557. package/dist/commands/model.js.map +0 -1
  558. package/dist/commands/new.d.ts.map +0 -1
  559. package/dist/commands/new.js +0 -25
  560. package/dist/commands/new.js.map +0 -1
  561. package/dist/commands/parse.d.ts +0 -7
  562. package/dist/commands/parse.d.ts.map +0 -1
  563. package/dist/commands/parse.js +0 -14
  564. package/dist/commands/parse.js.map +0 -1
  565. package/dist/commands/registry.d.ts +0 -5
  566. package/dist/commands/registry.d.ts.map +0 -1
  567. package/dist/commands/registry.js +0 -31
  568. package/dist/commands/registry.js.map +0 -1
  569. package/dist/commands/sandbox.d.ts.map +0 -1
  570. package/dist/commands/sandbox.js +0 -78
  571. package/dist/commands/sandbox.js.map +0 -1
  572. package/dist/commands/session-view.d.ts.map +0 -1
  573. package/dist/commands/session-view.js.map +0 -1
  574. package/dist/commands/types.d.ts +0 -66
  575. package/dist/commands/types.d.ts.map +0 -1
  576. package/dist/commands/types.js.map +0 -1
  577. package/dist/commands/utils.d.ts +0 -11
  578. package/dist/commands/utils.d.ts.map +0 -1
  579. package/dist/commands/utils.js.map +0 -1
  580. package/dist/download.d.ts.map +0 -1
  581. package/dist/download.js +0 -89
  582. package/dist/download.js.map +0 -1
  583. package/dist/events.d.ts.map +0 -1
  584. package/dist/events.js.map +0 -1
  585. package/dist/execution-resolver.d.ts +0 -21
  586. package/dist/execution-resolver.d.ts.map +0 -1
  587. package/dist/execution-resolver.js +0 -170
  588. package/dist/execution-resolver.js.map +0 -1
  589. package/dist/harness/auth.d.ts +0 -16
  590. package/dist/harness/auth.d.ts.map +0 -1
  591. package/dist/harness/auth.js +0 -86
  592. package/dist/harness/auth.js.map +0 -1
  593. package/dist/harness/extensions/loader.d.ts +0 -62
  594. package/dist/harness/extensions/loader.d.ts.map +0 -1
  595. package/dist/harness/extensions/loader.js +0 -374
  596. package/dist/harness/extensions/loader.js.map +0 -1
  597. package/dist/harness/extensions/registry.d.ts +0 -23
  598. package/dist/harness/extensions/registry.d.ts.map +0 -1
  599. package/dist/harness/extensions/registry.js +0 -45
  600. package/dist/harness/extensions/registry.js.map +0 -1
  601. package/dist/harness/extensions/types.d.ts +0 -248
  602. package/dist/harness/extensions/types.d.ts.map +0 -1
  603. package/dist/harness/extensions/types.js.map +0 -1
  604. package/dist/harness/session-store.d.ts +0 -77
  605. package/dist/harness/session-store.d.ts.map +0 -1
  606. package/dist/harness/session-store.js +0 -248
  607. package/dist/harness/session-store.js.map +0 -1
  608. package/dist/harness/settings.d.ts +0 -47
  609. package/dist/harness/settings.d.ts.map +0 -1
  610. package/dist/harness/settings.js +0 -29
  611. package/dist/harness/settings.js.map +0 -1
  612. package/dist/model-registry.d.ts +0 -4
  613. package/dist/model-registry.d.ts.map +0 -1
  614. package/dist/model-registry.js +0 -7
  615. package/dist/model-registry.js.map +0 -1
  616. package/dist/portal-shell.d.ts +0 -4
  617. package/dist/portal-shell.d.ts.map +0 -1
  618. package/dist/portal-shell.js.map +0 -1
  619. package/dist/provisioner.d.ts +0 -61
  620. package/dist/provisioner.d.ts.map +0 -1
  621. package/dist/provisioner.js.map +0 -1
  622. package/dist/runtime/agent-run-controller.d.ts +0 -31
  623. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  624. package/dist/runtime/agent-run-controller.js +0 -195
  625. package/dist/runtime/agent-run-controller.js.map +0 -1
  626. package/dist/sandbox/errors.d.ts +0 -6
  627. package/dist/sandbox/errors.d.ts.map +0 -1
  628. package/dist/sandbox/errors.js +0 -11
  629. package/dist/sandbox/errors.js.map +0 -1
  630. package/dist/sandbox/firecracker.d.ts +0 -15
  631. package/dist/sandbox/firecracker.d.ts.map +0 -1
  632. package/dist/sandbox/firecracker.js +0 -212
  633. package/dist/sandbox/firecracker.js.map +0 -1
  634. package/dist/sandbox/image.d.ts +0 -3
  635. package/dist/sandbox/image.d.ts.map +0 -1
  636. package/dist/sandbox/image.js +0 -27
  637. package/dist/sandbox/image.js.map +0 -1
  638. package/dist/sandbox/path-context.d.ts +0 -3
  639. package/dist/sandbox/path-context.d.ts.map +0 -1
  640. package/dist/sandbox/path-context.js +0 -20
  641. package/dist/sandbox/path-context.js.map +0 -1
  642. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  643. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  644. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  645. package/dist/sessions/metadata.d.ts +0 -3
  646. package/dist/sessions/metadata.d.ts.map +0 -1
  647. package/dist/sessions/metadata.js +0 -11
  648. package/dist/sessions/metadata.js.map +0 -1
  649. package/dist/sessions/policy.d.ts +0 -6
  650. package/dist/sessions/policy.d.ts.map +0 -1
  651. package/dist/sessions/policy.js +0 -23
  652. package/dist/sessions/policy.js.map +0 -1
  653. package/dist/store.d.ts +0 -46
  654. package/dist/store.d.ts.map +0 -1
  655. package/dist/store.js +0 -177
  656. package/dist/store.js.map +0 -1
  657. package/dist/tools/bash.d.ts +0 -10
  658. package/dist/tools/bash.d.ts.map +0 -1
  659. package/dist/tools/bash.js +0 -80
  660. package/dist/tools/bash.js.map +0 -1
  661. package/dist/tools/edit.d.ts +0 -11
  662. package/dist/tools/edit.d.ts.map +0 -1
  663. package/dist/tools/edit.js +0 -131
  664. package/dist/tools/edit.js.map +0 -1
  665. package/dist/tools/event.d.ts.map +0 -1
  666. package/dist/tools/event.js +0 -252
  667. package/dist/tools/event.js.map +0 -1
  668. package/dist/tools/index.d.ts +0 -24
  669. package/dist/tools/index.d.ts.map +0 -1
  670. package/dist/tools/index.js +0 -31
  671. package/dist/tools/index.js.map +0 -1
  672. package/dist/tools/react.d.ts.map +0 -1
  673. package/dist/tools/react.js.map +0 -1
  674. package/dist/tools/read.d.ts +0 -11
  675. package/dist/tools/read.d.ts.map +0 -1
  676. package/dist/tools/read.js +0 -134
  677. package/dist/tools/read.js.map +0 -1
  678. package/dist/tools/sandbox.d.ts.map +0 -1
  679. package/dist/tools/sandbox.js.map +0 -1
  680. package/dist/tools/truncate.d.ts +0 -33
  681. package/dist/tools/truncate.d.ts.map +0 -1
  682. package/dist/tools/truncate.js +0 -184
  683. package/dist/tools/truncate.js.map +0 -1
  684. package/dist/tools/types.d.ts +0 -54
  685. package/dist/tools/types.d.ts.map +0 -1
  686. package/dist/tools/types.js.map +0 -1
  687. package/dist/tools/write.d.ts +0 -10
  688. package/dist/tools/write.d.ts.map +0 -1
  689. package/dist/tools/write.js +0 -29
  690. package/dist/tools/write.js.map +0 -1
  691. package/dist/trigger.d.ts +0 -22
  692. package/dist/trigger.d.ts.map +0 -1
  693. package/dist/trigger.js +0 -100
  694. package/dist/trigger.js.map +0 -1
  695. package/dist/utils/date.d.ts +0 -10
  696. package/dist/utils/date.d.ts.map +0 -1
  697. package/dist/utils/date.js +0 -23
  698. package/dist/utils/date.js.map +0 -1
  699. package/dist/utils/env.d.ts +0 -3
  700. package/dist/utils/env.d.ts.map +0 -1
  701. package/dist/utils/env.js +0 -12
  702. package/dist/utils/env.js.map +0 -1
  703. package/dist/utils/file-guards.d.ts.map +0 -1
  704. package/dist/utils/file-guards.js.map +0 -1
  705. package/dist/utils/fs-atomic.d.ts +0 -10
  706. package/dist/utils/fs-atomic.d.ts.map +0 -1
  707. package/dist/utils/fs-atomic.js +0 -45
  708. package/dist/utils/fs-atomic.js.map +0 -1
  709. package/dist/utils/html.d.ts +0 -2
  710. package/dist/utils/html.d.ts.map +0 -1
  711. package/dist/utils/html.js +0 -4
  712. package/dist/utils/html.js.map +0 -1
  713. package/dist/utils/http-body.d.ts +0 -10
  714. package/dist/utils/http-body.d.ts.map +0 -1
  715. package/dist/utils/http-body.js +0 -34
  716. package/dist/utils/http-body.js.map +0 -1
  717. package/dist/vault/routing.d.ts +0 -3
  718. package/dist/vault/routing.d.ts.map +0 -1
  719. package/dist/vault/routing.js +0 -13
  720. package/dist/vault/routing.js.map +0 -1
  721. package/dist/web/admin/portal.d.ts +0 -5
  722. package/dist/web/admin/portal.d.ts.map +0 -1
  723. package/dist/web/admin/portal.js +0 -2572
  724. package/dist/web/admin/portal.js.map +0 -1
  725. package/dist/web/admin/provider-models.d.ts.map +0 -1
  726. package/dist/web/admin/provider-models.js.map +0 -1
  727. package/dist/web/admin/store.d.ts +0 -13
  728. package/dist/web/admin/store.d.ts.map +0 -1
  729. package/dist/web/admin/store.js +0 -14
  730. package/dist/web/admin/store.js.map +0 -1
  731. package/dist/web/admin/types.d.ts +0 -30
  732. package/dist/web/admin/types.d.ts.map +0 -1
  733. package/dist/web/admin/types.js.map +0 -1
  734. package/dist/web/agent-events/portal.d.ts +0 -3
  735. package/dist/web/agent-events/portal.d.ts.map +0 -1
  736. package/dist/web/agent-events/portal.js +0 -18
  737. package/dist/web/agent-events/portal.js.map +0 -1
  738. package/dist/web/login/oauth.d.ts +0 -6
  739. package/dist/web/login/oauth.d.ts.map +0 -1
  740. package/dist/web/login/oauth.js.map +0 -1
  741. package/dist/web/login/portal.d.ts.map +0 -1
  742. package/dist/web/login/portal.js.map +0 -1
  743. package/dist/web/login/store.d.ts +0 -8
  744. package/dist/web/login/store.d.ts.map +0 -1
  745. package/dist/web/login/store.js +0 -15
  746. package/dist/web/login/store.js.map +0 -1
  747. package/dist/web/login/types.d.ts.map +0 -1
  748. package/dist/web/login/types.js.map +0 -1
  749. package/dist/web/request.d.ts +0 -3
  750. package/dist/web/request.d.ts.map +0 -1
  751. package/dist/web/request.js +0 -13
  752. package/dist/web/request.js.map +0 -1
  753. package/dist/web/server.d.ts.map +0 -1
  754. package/dist/web/server.js.map +0 -1
  755. package/dist/web/session-view/command.d.ts +0 -4
  756. package/dist/web/session-view/command.d.ts.map +0 -1
  757. package/dist/web/session-view/command.js +0 -7
  758. package/dist/web/session-view/command.js.map +0 -1
  759. package/dist/web/session-view/portal.d.ts +0 -13
  760. package/dist/web/session-view/portal.d.ts.map +0 -1
  761. package/dist/web/session-view/portal.js.map +0 -1
  762. package/dist/web/session-view/service.d.ts +0 -6
  763. package/dist/web/session-view/service.d.ts.map +0 -1
  764. package/dist/web/session-view/service.js +0 -498
  765. package/dist/web/session-view/service.js.map +0 -1
  766. package/dist/web/session-view/store.d.ts +0 -8
  767. package/dist/web/session-view/store.d.ts.map +0 -1
  768. package/dist/web/session-view/store.js +0 -15
  769. package/dist/web/session-view/store.js.map +0 -1
  770. package/dist/web/session-view/types.d.ts.map +0 -1
  771. package/dist/web/session-view/types.js.map +0 -1
  772. package/dist/web/token-store.d.ts.map +0 -1
  773. package/dist/web/token-store.js.map +0 -1
  774. package/dist/web/types.d.ts.map +0 -1
  775. package/dist/web/types.js.map +0 -1
  776. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  777. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  778. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  779. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  780. /package/dist/{commands → adapters/commands}/types.js +0 -0
  781. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  782. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  783. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  784. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  785. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  786. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  787. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  788. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  789. /package/dist/{web → cli}/types.js +0 -0
  790. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  791. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -1,32 +1,33 @@
1
- import { join } from "path";
2
- import { isRecord, parseJsonValue, readTextFileIfExists } from "../utils/file-guards.js";
3
- import { formatLocalTimestamp } from "../utils/date.js";
4
- import { atomicWritePrivateFile } from "../utils/fs-atomic.js";
1
+ import { officeSessionsDir } from "../office/index.js";
2
+ import { SessionStore } from "./session-store.js";
3
+ import { join } from "node:path";
5
4
  import * as log from "../log.js";
6
- import { isPlatformHistorySession } from "./metadata.js";
7
- import { createManagedSessionFile, createManagedSessionFileAtPath, extractSessionSuffix, getChannelSessionDir, getThreadSessionFile, openManagedSession, resolveChannelSessionFile, tryResolveCurrentSession, tryResolveThreadSession, } from "./store.js";
5
+ import { isRecord, parseJsonValue, readTextFileIfExists } from "../file-guards.js";
6
+ import { isCommandText } from "../adapters/commands/manifest.js";
7
+ import { formatHistoryLine, stripHistoryLinePrefix } from "./history-line.js";
8
+ import { isPlatformHistorySession } from "./store.js";
9
+ import { isThreadSessionKey } from "./session-key.js";
10
+ import { archiveManagedSessionFile, createManagedSessionFile, createManagedSessionFileAtPath, extractSessionSuffix, getThreadSessionFile, openManagedSession, resolveChannelSessionFile, resolveParentSessionForThread, tryResolveCurrentSession, tryResolveThreadSession, } from "./store.js";
8
11
  const DEFAULT_RECENT_DAYS = 14;
9
12
  const DEFAULT_MAX_TOP_LEVEL_MESSAGES = 200;
10
13
  const CHAT_SYNC_CUSTOM_TYPE = "mikan.chat_sync";
11
- const BIWEEKLY_ROTATION_ANCHOR = new Date(2026, 0, 4); // Sunday
12
- const BIWEEKLY_MS = 14 * 24 * 60 * 60 * 1000;
13
14
  export function hasMaterializedChatSession(options) {
14
- if (!options.sessionKey.includes(":")) {
15
+ if (!isThreadSessionKey(options.sessionKey)) {
15
16
  return resolveChannelSessionFile(options.conversationDir) !== null;
16
17
  }
17
18
  return (tryResolveThreadSession(getThreadSessionFile(options.conversationDir, options.sessionKey)) !==
18
19
  null);
19
20
  }
20
21
  export function registerThreadSession(options) {
21
- if (!options.sessionKey.includes(":"))
22
+ if (!isThreadSessionKey(options.sessionKey))
22
23
  return null;
23
24
  const threadFile = getThreadSessionFile(options.conversationDir, options.sessionKey);
24
25
  return (tryResolveThreadSession(threadFile) ??
25
- createManagedSessionFileAtPath(threadFile, options.cwd ?? options.conversationDir));
26
+ createManagedSessionFileAtPath(threadFile, options.cwd ?? options.conversationDir, resolveParentSessionForThread(options.conversationDir, extractSessionSuffix(options.sessionKey)) ?? undefined));
26
27
  }
27
28
  export async function waitForThreadSessionBootstrap(options) {
28
29
  const { parentSessionKey, sessionKey, hasThreadSession, isParentRunning, sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)), pollMs = 100, } = options;
29
- if (!sessionKey.includes(":"))
30
+ if (!isThreadSessionKey(sessionKey))
30
31
  return false;
31
32
  if (sessionKey === parentSessionKey)
32
33
  return false;
@@ -39,7 +40,13 @@ export async function waitForThreadSessionBootstrap(options) {
39
40
  }
40
41
  return waited;
41
42
  }
42
- export class AgentMemoryFileManager {
43
+ /**
44
+ * Syncs the platform chat transcript (log.jsonl) into managed session files:
45
+ * resolves which session file a message belongs to (top-level vs thread,
46
+ * with biweekly rotation), bootstraps new sessions from recent history, and
47
+ * incrementally appends log messages the session does not yet represent.
48
+ */
49
+ export class ChatHistorySync {
43
50
  constructor(options = {}) {
44
51
  this.recentDays = options.recentDays ?? DEFAULT_RECENT_DAYS;
45
52
  this.maxTopLevelMessages = options.maxTopLevelMessages ?? DEFAULT_MAX_TOP_LEVEL_MESSAGES;
@@ -47,14 +54,13 @@ export class AgentMemoryFileManager {
47
54
  }
48
55
  async resolveSessionScope(options) {
49
56
  const cwd = options.cwd ?? options.conversationDir;
50
- const sessionDir = getChannelSessionDir(options.conversationDir);
51
- if (!options.sessionKey.includes(":")) {
52
- const contextFile = this.resolveTopLevelSessionFile({
57
+ const sessionDir = officeSessionsDir(options.conversationDir);
58
+ if (!isThreadSessionKey(options.sessionKey)) {
59
+ const contextFile = await this.resolveTopLevelSessionFile({
53
60
  conversationDir: options.conversationDir,
54
61
  sessionDir,
55
62
  cwd,
56
63
  currentMessageId: options.currentMessageId,
57
- rotateTopLevelSession: options.rotateTopLevelSession === true,
58
64
  });
59
65
  return { sessionDir, contextFile, threadRootMessage: null };
60
66
  }
@@ -66,32 +72,49 @@ export class AgentMemoryFileManager {
66
72
  currentMessageId: options.currentMessageId,
67
73
  });
68
74
  }
69
- syncSessionManager(options) {
75
+ async syncSessionManager(options) {
70
76
  const records = readConversationLog(options.conversationDir);
71
- syncSessionManagerFromLog(options.sessionManager, selectExistingSessionSyncMessages(records, {
72
- sessionKey: options.sessionKey.includes(":") ? options.sessionKey : null,
77
+ return syncSessionManagerFromLog(options.sessionManager, selectExistingSessionSyncMessages(records, {
78
+ sessionKey: isThreadSessionKey(options.sessionKey) ? options.sessionKey : null,
73
79
  excludeMessageId: options.currentMessageId,
74
- }), this.historyWindow());
80
+ }), {
81
+ recentDays: this.recentDays,
82
+ maxMessages: this.maxTopLevelMessages,
83
+ now: this.now(),
84
+ });
75
85
  }
76
- resetSession(options) {
86
+ async resetSession(options) {
77
87
  const cwd = options.cwd ?? options.conversationDir;
78
- if (options.sessionKey.includes(":")) {
79
- return createManagedSessionFileAtPath(getThreadSessionFile(options.conversationDir, options.sessionKey), cwd);
88
+ const sessionFile = isThreadSessionKey(options.sessionKey)
89
+ ? resetThreadSessionFile(options.conversationDir, options.sessionKey, cwd)
90
+ : createManagedSessionFile(officeSessionsDir(options.conversationDir), cwd);
91
+ const records = readConversationLog(options.conversationDir);
92
+ const lastMessageId = latestSyncMessageId(records, {
93
+ sessionKey: isThreadSessionKey(options.sessionKey) ? options.sessionKey : null,
94
+ });
95
+ const sessionManager = await openManagedSession(sessionFile, cwd);
96
+ try {
97
+ await sessionManager.appendCustomEntry(CHAT_SYNC_CUSTOM_TYPE, {
98
+ source: "log.jsonl",
99
+ messageCount: 0,
100
+ resetAt: this.now().toISOString(),
101
+ ...(lastMessageId ? { lastMessageId } : {}),
102
+ });
80
103
  }
81
- return createManagedSessionFile(getChannelSessionDir(options.conversationDir), cwd);
104
+ finally {
105
+ await sessionManager.close();
106
+ }
107
+ return sessionFile;
82
108
  }
83
- resolveTopLevelSessionFile(options) {
84
- const records = readConversationLog(options.conversationDir);
109
+ async resolveTopLevelSessionFile(options) {
110
+ // Materialization only: an existing session is returned as-is. The
111
+ // runtime performs the one incremental log sync per event through the
112
+ // runner, after the writer is created — syncing here too made every
113
+ // cache-miss event run the pipeline twice.
85
114
  const existing = tryResolveCurrentSession(options.sessionDir);
86
- if (existing && !isPlatformHistorySession(existing)) {
87
- if (!options.rotateTopLevelSession || !shouldRotateTopLevelSession(existing, this.now())) {
88
- syncSessionFromLog(existing, options.cwd, selectExistingSessionSyncMessages(records, {
89
- sessionKey: null,
90
- excludeMessageId: options.currentMessageId,
91
- }), this.historyWindow());
92
- return existing;
93
- }
94
- }
115
+ if (existing && !isPlatformHistorySession(existing))
116
+ return existing;
117
+ const records = readConversationLog(options.conversationDir);
95
118
  const sessionFile = createManagedSessionFile(options.sessionDir, options.cwd);
96
119
  const bootstrapRecords = selectRecentTopLevelMessages(records, {
97
120
  recentDays: this.recentDays,
@@ -99,119 +122,81 @@ export class AgentMemoryFileManager {
99
122
  now: this.now(),
100
123
  excludeMessageId: options.currentMessageId,
101
124
  });
102
- bootstrapSessionFromLog(sessionFile, options.cwd, bootstrapRecords, latestSyncMessageId(records, {
125
+ await bootstrapSessionFromLog(sessionFile, options.cwd, bootstrapRecords, latestSyncMessageId(records, {
103
126
  sessionKey: null,
104
127
  excludeMessageId: options.currentMessageId,
105
128
  }));
106
129
  return sessionFile;
107
130
  }
108
- historyWindow() {
109
- return { recentDays: this.recentDays, maxMessages: this.maxTopLevelMessages, now: this.now() };
110
- }
111
- resolveThreadSessionScope(options) {
131
+ async resolveThreadSessionScope(options) {
112
132
  const threadFile = getThreadSessionFile(options.conversationDir, options.sessionKey);
113
133
  const threadId = extractSessionSuffix(options.sessionKey);
114
134
  const records = readConversationLog(options.conversationDir);
115
135
  const threadRootMessage = buildThreadRootSeed(findLogRecordById(records, threadId)?.message);
116
136
  const existing = tryResolveThreadSession(threadFile);
117
137
  if (existing) {
118
- syncSessionFromLog(existing, options.cwd, selectExistingSessionSyncMessages(records, {
119
- sessionKey: options.sessionKey,
120
- excludeMessageId: options.currentMessageId,
121
- }), this.historyWindow());
138
+ // Materialization only; the runtime owns the per-event incremental sync.
122
139
  return { sessionDir: options.sessionDir, contextFile: existing, threadRootMessage };
123
140
  }
124
- createManagedSessionFileAtPath(threadFile, options.cwd);
141
+ createManagedSessionFileAtPath(threadFile, options.cwd, resolveParentSessionForThread(options.conversationDir, threadId) ?? undefined);
125
142
  const bootstrapRecords = selectThreadBootstrapMessages(records, threadId, {
126
143
  recentDays: this.recentDays,
127
144
  maxTopLevelMessages: this.maxTopLevelMessages,
128
145
  now: this.now(),
129
146
  excludeMessageId: options.currentMessageId,
130
147
  });
131
- bootstrapSessionFromLog(threadFile, options.cwd, bootstrapRecords, latestSyncMessageId(records, {
148
+ await bootstrapSessionFromLog(threadFile, options.cwd, bootstrapRecords, latestSyncMessageId(records, {
132
149
  sessionKey: options.sessionKey,
133
150
  excludeMessageId: options.currentMessageId,
134
151
  }));
135
152
  return { sessionDir: options.sessionDir, contextFile: threadFile, threadRootMessage };
136
153
  }
137
154
  }
138
- function shouldRotateTopLevelSession(sessionFile, now) {
139
- const timestamp = readSessionTimestamp(sessionFile);
140
- return timestamp !== null && biweeklyBucket(timestamp) !== biweeklyBucket(now);
141
- }
142
- function readSessionTimestamp(sessionFile) {
143
- const raw = readTextFileIfExists(sessionFile);
144
- if (raw === undefined)
145
- return null;
146
- const firstLine = raw.split("\n").find((line) => line.trim());
147
- if (!firstLine)
148
- return null;
155
+ /** The recorded parent of an existing thread session, kept across a reset. */
156
+ function existingThreadParent(threadFile) {
157
+ let header;
149
158
  try {
150
- const header = parseJsonValue(firstLine, (value) => isRecord(value), (detail) => (detail === "unexpected JSON shape" ? "expected a JSON object" : detail));
151
- if (typeof header.timestamp !== "string")
152
- return null;
153
- const date = new Date(header.timestamp);
154
- return Number.isFinite(date.getTime()) ? date : null;
159
+ header = SessionStore.readHeader(threadFile);
155
160
  }
156
161
  catch {
157
- return null;
162
+ return undefined; // File missing or corrupted — the session is recreated.
158
163
  }
159
- }
160
- function biweeklyBucket(date) {
161
- const weekStart = sundayStart(date).getTime();
162
- const anchor = sundayStart(BIWEEKLY_ROTATION_ANCHOR).getTime();
163
- return Math.floor((weekStart - anchor) / BIWEEKLY_MS);
164
- }
165
- function sundayStart(date) {
166
- return new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay());
167
- }
168
- function readConversationLog(conversationDir) {
169
- const logFile = join(conversationDir, "log.jsonl");
170
- const raw = readTextFileIfExists(logFile);
171
- if (raw === undefined)
172
- return [];
173
- const lines = raw.trim().split("\n").filter(Boolean);
174
- const records = [];
175
- for (let i = 0; i < lines.length; i++) {
176
- try {
177
- const message = parseJsonValue(lines[i], (value) => isRecord(value), (detail) => (detail === "unexpected JSON shape" ? "expected a JSON object" : detail));
178
- records.push({ message, index: i });
179
- }
180
- catch (err) {
181
- log.logWarning(`Skipping malformed log entry at ${logFile}:${i + 1}`, err instanceof Error ? err.message : String(err));
182
- }
164
+ const path = header?.parentSession;
165
+ if (!header || !path)
166
+ return undefined;
167
+ // Prefer the stored UUID; legacy sessions without it need the parent file.
168
+ const id = header.parentSessionId ?? readParentSessionId(path);
169
+ return id ? { path, id } : undefined;
170
+ }
171
+ function readParentSessionId(parentPath) {
172
+ try {
173
+ return SessionStore.readHeader(parentPath)?.id;
183
174
  }
184
- return coalesceMessagingBotLogChunks(records);
185
- }
186
- function coalesceMessagingBotLogChunks(records) {
187
- const coalesced = [];
188
- for (const record of records) {
189
- const previous = coalesced.at(-1);
190
- if (previous && canCoalesceMessagingBotLogChunk(previous.message, record.message)) {
191
- previous.message.text = `${previous.message.text ?? ""}${record.message.text ?? ""}`;
192
- continue;
193
- }
194
- coalesced.push({ ...record, message: { ...record.message } });
175
+ catch {
176
+ return undefined;
195
177
  }
196
- return coalesced;
197
178
  }
198
- function canCoalesceMessagingBotLogChunk(previous, current) {
199
- return (previous.isMessagingBot === true &&
200
- current.isMessagingBot === true &&
201
- !!previous.ts &&
202
- previous.ts === current.ts &&
203
- previous.threadTs === current.threadTs &&
204
- previous.user === current.user);
179
+ /**
180
+ * Archive a thread session and create its replacement, preserving lineage:
181
+ * the original parent is kept rather than re-bound to the current session.
182
+ */
183
+ function resetThreadSessionFile(conversationDir, sessionKey, cwd) {
184
+ const threadFile = getThreadSessionFile(conversationDir, sessionKey);
185
+ const parent = existingThreadParent(threadFile) ??
186
+ resolveParentSessionForThread(conversationDir, extractSessionSuffix(sessionKey)) ??
187
+ undefined;
188
+ archiveManagedSessionFile(threadFile);
189
+ return createManagedSessionFileAtPath(threadFile, cwd, parent);
205
190
  }
206
191
  function findLogRecordById(records, messageId) {
207
192
  for (let i = records.length - 1; i >= 0; i--) {
208
- if (records[i].message.ts === messageId)
193
+ if (records[i]?.message.ts === messageId)
209
194
  return records[i];
210
195
  }
211
196
  return undefined;
212
197
  }
213
198
  function selectRecentTopLevelMessages(records, options) {
214
- return selectRecentMessages(records.filter((record) => isTopLevelHistoryMessage(record.message, options.excludeMessageId)), options);
199
+ return selectRecentMessages(recordsBeforeCurrentMessage(records, options.excludeMessageId).filter((record) => isTopLevelHistoryMessage(record.message, options.excludeMessageId)), options);
215
200
  }
216
201
  function selectRecentMessages(records, options) {
217
202
  const sinceMs = options.now.getTime() - options.recentDays * 24 * 60 * 60 * 1000;
@@ -220,17 +205,18 @@ function selectRecentMessages(records, options) {
220
205
  .slice(-options.maxMessages);
221
206
  }
222
207
  function selectThreadBootstrapMessages(records, threadId, options) {
223
- const rootRecord = findLogRecordById(records, threadId);
208
+ const scopedRecords = recordsBeforeCurrentMessage(records, options.excludeMessageId);
209
+ const rootRecord = findLogRecordById(scopedRecords, threadId);
224
210
  const topLevelSource = rootRecord
225
- ? records.filter((record) => record.index <= rootRecord.index)
226
- : records;
211
+ ? scopedRecords.filter((record) => record.index <= rootRecord.index)
212
+ : scopedRecords;
227
213
  const topLevelRecords = selectRecentTopLevelMessages(topLevelSource, {
228
214
  recentDays: options.recentDays,
229
215
  maxMessages: options.maxTopLevelMessages,
230
216
  now: options.now,
231
217
  excludeMessageId: options.excludeMessageId,
232
218
  });
233
- const threadRecords = records.filter((record) => isRenderableConversationMessage(record.message, options.excludeMessageId) &&
219
+ const threadRecords = scopedRecords.filter((record) => isRenderableConversationMessage(record.message, options.excludeMessageId) &&
234
220
  (record.message.ts === threadId || record.message.threadTs === threadId));
235
221
  return dedupeAndSortRecords([...topLevelRecords, ...threadRecords]);
236
222
  }
@@ -247,7 +233,7 @@ function isRecentHistoryMessage(message, sinceMs) {
247
233
  }
248
234
  function selectExistingSessionSyncMessages(records, options) {
249
235
  const threadId = options.sessionKey ? extractSessionSuffix(options.sessionKey) : null;
250
- return dedupeAndSortRecords(records.filter((record) => {
236
+ return dedupeAndSortRecords(recordsBeforeCurrentMessage(records, options.excludeMessageId).filter((record) => {
251
237
  if (!isRenderableConversationMessage(record.message, options.excludeMessageId))
252
238
  return false;
253
239
  if (!threadId)
@@ -255,21 +241,29 @@ function selectExistingSessionSyncMessages(records, options) {
255
241
  return record.message.ts === threadId || record.message.threadTs === threadId;
256
242
  }));
257
243
  }
244
+ /**
245
+ * Slack logs messages before enqueueing them, so a later queued turn may
246
+ * already be present while the current turn is being prepared. Chat history
247
+ * must stop at the current record rather than merely removing that one id.
248
+ */
249
+ function recordsBeforeCurrentMessage(records, currentMessageId) {
250
+ if (!currentMessageId)
251
+ return records;
252
+ const currentRecord = findLogRecordById(records, currentMessageId);
253
+ if (!currentRecord)
254
+ return records;
255
+ return records.filter((record) => record.index < currentRecord.index);
256
+ }
258
257
  function latestSyncMessageId(records, options) {
259
258
  return selectExistingSessionSyncMessages(records, options).at(-1)?.message.ts;
260
259
  }
261
260
  function isRenderableConversationMessage(message, excludeMessageId) {
262
261
  if (excludeMessageId && message.ts === excludeMessageId)
263
262
  return false;
264
- if (isChatCommandMessage(message))
263
+ if (!message.isMessagingBot && isCommandText(message.text ?? ""))
265
264
  return false;
266
265
  return !!message.text?.trim();
267
266
  }
268
- function isChatCommandMessage(message) {
269
- const text = message.text?.trim() ?? "";
270
- return (!message.isMessagingBot &&
271
- /^\/(?:pi-[\w-]+|login|session|new|stop|model|sandbox|admin|auto-reply)(?:@\w+)?(?:\s|$)/i.test(text));
272
- }
273
267
  function dedupeAndSortRecords(records) {
274
268
  const byKey = new Map();
275
269
  for (const record of records) {
@@ -296,74 +290,93 @@ function sortTime(record) {
296
290
  }
297
291
  return record.index;
298
292
  }
299
- function bootstrapSessionFromLog(sessionFile, cwd, records, lastMessageId = records.at(-1)?.message.ts) {
293
+ async function bootstrapSessionFromLog(sessionFile, cwd, records, lastMessageId = records.at(-1)?.message.ts) {
300
294
  if (records.length === 0 && !lastMessageId)
301
295
  return;
302
- const sessionManager = openManagedSession(sessionFile, cwd);
303
- appendLogRecordsToSession(sessionManager, records);
304
- sessionManager.appendCustomEntry(CHAT_SYNC_CUSTOM_TYPE, {
305
- source: "log.jsonl",
306
- messageCount: records.length,
307
- lastMessageId,
308
- });
309
- forceRewriteSession(sessionManager, sessionFile);
310
- }
311
- function syncSessionFromLog(sessionFile, cwd, records, historyWindow) {
312
- if (records.length === 0)
313
- return;
314
- syncSessionManagerFromLog(openManagedSession(sessionFile, cwd), records, historyWindow);
296
+ const sessionManager = await openManagedSession(sessionFile, cwd);
297
+ try {
298
+ await appendLogRecordsToSession(sessionManager, records);
299
+ await sessionManager.appendCustomEntry(CHAT_SYNC_CUSTOM_TYPE, {
300
+ source: "log.jsonl",
301
+ messageCount: records.length,
302
+ lastMessageId,
303
+ });
304
+ }
305
+ finally {
306
+ await sessionManager.close();
307
+ }
315
308
  }
316
- function syncSessionManagerFromLog(sessionManager, records, historyWindow) {
309
+ async function syncSessionManagerFromLog(sessionManager, records, historyWindow) {
317
310
  if (records.length === 0)
318
- return;
319
- const existingEntries = sessionManager.getEntries();
311
+ return { appended: 0 };
312
+ const existingEntries = await sessionManager.getEntries();
313
+ const resetAt = getLatestChatSyncResetAt(existingEntries);
314
+ const eligibleRecords = resetAt
315
+ ? records.filter((record) => isAfterReset(record, resetAt))
316
+ : records;
320
317
  const lastSyncedMessageId = getLatestChatSyncMessageId(existingEntries);
321
318
  const lastSyncedIndex = lastSyncedMessageId
322
- ? records.findIndex((record) => record.message.ts === lastSyncedMessageId)
319
+ ? eligibleRecords.findIndex((record) => record.message.ts === lastSyncedMessageId)
323
320
  : -1;
324
- if (lastSyncedMessageId && lastSyncedIndex === -1)
325
- return;
326
- const syncCandidates = selectRecentMessages(records.slice(lastSyncedIndex + 1), historyWindow);
321
+ // A truncated or rebuilt log may no longer contain the watermark. Replay the
322
+ // current bounded history; represented-message matching below prevents duplicates.
323
+ const syncCandidates = selectRecentMessages(eligibleRecords.slice(lastSyncedIndex + 1), historyWindow);
327
324
  if (syncCandidates.length === 0)
328
- return;
325
+ return { appended: 0 };
329
326
  const represented = buildRepresentedMessageCounts(existingEntries);
330
327
  const newRecords = syncCandidates.filter((record) => !consumeRepresentedLogMessage(record, represented));
331
328
  if (newRecords.length === 0)
332
- return;
333
- appendLogRecordsToSession(sessionManager, newRecords);
334
- sessionManager.appendCustomEntry(CHAT_SYNC_CUSTOM_TYPE, {
329
+ return { appended: 0 };
330
+ const lastMessageId = syncCandidates.at(-1)?.message.ts;
331
+ await appendLogRecordsToSession(sessionManager, newRecords);
332
+ await sessionManager.appendCustomEntry(CHAT_SYNC_CUSTOM_TYPE, {
335
333
  source: "log.jsonl",
336
334
  messageCount: newRecords.length,
337
- lastMessageId: syncCandidates.at(-1)?.message.ts,
335
+ lastMessageId,
338
336
  });
337
+ return {
338
+ appended: newRecords.length,
339
+ ...(lastMessageId !== undefined ? { lastMessageId } : {}),
340
+ };
339
341
  }
340
- function appendLogRecordsToSession(sessionManager, records) {
342
+ async function appendLogRecordsToSession(sessionManager, records) {
341
343
  for (const record of records) {
342
344
  const message = buildHistorySessionMessage(record.message);
343
345
  if (message)
344
- sessionManager.appendMessage(message);
346
+ await sessionManager.appendMessage(message);
345
347
  }
346
348
  }
347
- function forceRewriteSession(sessionManager, sessionFile) {
348
- const header = sessionManager.getHeader();
349
- if (!header)
350
- return;
351
- const content = [header, ...sessionManager.getEntries()]
352
- .map((entry) => JSON.stringify(entry))
353
- .join("\n");
354
- atomicWritePrivateFile(sessionFile, `${content}\n`);
355
- }
356
- function getLatestChatSyncMessageId(entries) {
357
- for (let i = entries.length - 1; i >= 0; i--) {
358
- const entry = entries[i];
359
- if (entry.type !== "custom" || entry.customType !== CHAT_SYNC_CUSTOM_TYPE)
360
- continue;
361
- if (!isRecord(entry.data))
362
- return undefined;
363
- return typeof entry.data.lastMessageId === "string" ? entry.data.lastMessageId : undefined;
349
+ function isChatSyncMarker(entry) {
350
+ return entry.type === "custom" && entry.customType === CHAT_SYNC_CUSTOM_TYPE;
351
+ }
352
+ /** The reset timestamp a chat-sync marker records, when it carries a usable one. */
353
+ function markerResetAt(entry) {
354
+ if (!isChatSyncMarker(entry))
355
+ return undefined;
356
+ if (!isRecord(entry.data) || typeof entry.data.resetAt !== "string")
357
+ return undefined;
358
+ const resetAt = new Date(entry.data.resetAt).getTime();
359
+ return Number.isFinite(resetAt) ? resetAt : undefined;
360
+ }
361
+ function getLatestChatSyncResetAt(entries) {
362
+ for (const entry of entries.toReversed()) {
363
+ const resetAt = markerResetAt(entry);
364
+ if (resetAt !== undefined)
365
+ return resetAt;
364
366
  }
365
367
  return undefined;
366
368
  }
369
+ function isAfterReset(record, resetAt) {
370
+ if (!record.message.date)
371
+ return false;
372
+ const messageTime = new Date(record.message.date).getTime();
373
+ return Number.isFinite(messageTime) && messageTime >= resetAt;
374
+ }
375
+ function getLatestChatSyncMessageId(entries) {
376
+ const marker = entries.toReversed().find(isChatSyncMarker);
377
+ const lastMessageId = isRecord(marker?.data) ? marker.data.lastMessageId : undefined;
378
+ return typeof lastMessageId === "string" ? lastMessageId : undefined;
379
+ }
367
380
  function buildRepresentedMessageCounts(entries) {
368
381
  const counts = new Map();
369
382
  for (const entry of entries) {
@@ -413,11 +426,7 @@ function getSessionMessageText(entry) {
413
426
  .map((part) => (part.type === "text" && "text" in part ? part.text : ""))
414
427
  .join("\n");
415
428
  }
416
- function normalizeComparableText(text) {
417
- return text
418
- .replace(/^\[[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:[0-9]{2}\]\s+\[[^\]]+\](?:\s+\[in-thread:[^\]]+\])?:\s*/, "")
419
- .trim();
420
- }
429
+ const normalizeComparableText = stripHistoryLinePrefix;
421
430
  function buildHistorySessionMessage(message) {
422
431
  const text = message.text?.trim();
423
432
  if (!text)
@@ -466,10 +475,11 @@ function parseMessageTimestamp(message) {
466
475
  return undefined;
467
476
  }
468
477
  function formatHistoryMessage(message) {
469
- const text = message.text?.trim() ?? "";
470
- const userLabel = message.userName || message.user || "unknown";
471
- const timestamp = message.date ? formatLocalTimestamp(new Date(message.date)) : null;
472
- return timestamp ? `[${timestamp}] [${userLabel}]: ${text}` : `[${userLabel}]: ${text}`;
478
+ return formatHistoryLine({
479
+ date: message.date ? new Date(message.date) : undefined,
480
+ userName: message.userName || message.user,
481
+ text: message.text?.trim() ?? "",
482
+ });
473
483
  }
474
484
  function zeroUsage() {
475
485
  return {
@@ -481,4 +491,53 @@ function zeroUsage() {
481
491
  cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
482
492
  };
483
493
  }
484
- //# sourceMappingURL=agent-memory-file-manager.js.map
494
+ // ── Conversation platform log (log.jsonl) ─────────────────────────────────────
495
+ /**
496
+ * Read a conversation's platform chat log (log.jsonl): skip malformed lines,
497
+ * and coalesce consecutive messaging-bot chunks that share a ts — streamed
498
+ * responses are logged in pieces but represent one message.
499
+ */
500
+ function readConversationLog(conversationDir) {
501
+ const logFile = join(conversationDir, "log.jsonl");
502
+ const raw = readTextFileIfExists(logFile);
503
+ if (raw === undefined)
504
+ return [];
505
+ const records = [];
506
+ for (const [index, line] of raw.trim().split("\n").filter(Boolean).entries()) {
507
+ const message = parseLogLine(line, logFile, index + 1);
508
+ if (message)
509
+ records.push({ message, index });
510
+ }
511
+ return coalesceMessagingBotLogChunks(records);
512
+ }
513
+ /** One log line, or `undefined` after warning about a malformed one. */
514
+ function parseLogLine(line, logFile, lineNumber) {
515
+ try {
516
+ return parseJsonValue(line, (value) => isRecord(value), (detail) => (detail === "unexpected JSON shape" ? "expected a JSON object" : detail));
517
+ }
518
+ catch (err) {
519
+ log.logWarning(`Skipping malformed log entry at ${logFile}:${lineNumber}`, err instanceof Error ? err.message : String(err));
520
+ return undefined;
521
+ }
522
+ }
523
+ function coalesceMessagingBotLogChunks(records) {
524
+ const coalesced = [];
525
+ for (const record of records) {
526
+ const previous = coalesced.at(-1);
527
+ if (previous && canCoalesceMessagingBotLogChunk(previous.message, record.message)) {
528
+ previous.message.text = `${previous.message.text ?? ""}${record.message.text ?? ""}`;
529
+ continue;
530
+ }
531
+ coalesced.push({ ...record, message: { ...record.message } });
532
+ }
533
+ return coalesced;
534
+ }
535
+ function canCoalesceMessagingBotLogChunk(previous, current) {
536
+ return (previous.isMessagingBot === true &&
537
+ current.isMessagingBot === true &&
538
+ !!previous.ts &&
539
+ previous.ts === current.ts &&
540
+ previous.threadTs === current.threadTs &&
541
+ previous.user === current.user);
542
+ }
543
+ //# sourceMappingURL=chat-history-sync.js.map