@geminixiang/mikan 1.0.0-beta.7 → 1.0.0-beta.71

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 (856) hide show
  1. package/CHANGELOG.md +1052 -0
  2. package/README.md +98 -38
  3. package/dist/adapters/commands/admin.d.ts.map +1 -0
  4. package/dist/{commands → adapters/commands}/admin.js +11 -8
  5. package/dist/adapters/commands/admin.js.map +1 -0
  6. package/dist/{commands → adapters/commands}/auto-reply.d.ts +0 -3
  7. package/dist/adapters/commands/auto-reply.d.ts.map +1 -0
  8. package/dist/adapters/commands/auto-reply.js +47 -0
  9. package/dist/adapters/commands/auto-reply.js.map +1 -0
  10. package/dist/adapters/commands/login.d.ts +6 -0
  11. package/dist/adapters/commands/login.d.ts.map +1 -0
  12. package/dist/adapters/commands/login.js +166 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +37 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +155 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +15 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +153 -0
  21. package/dist/adapters/commands/model.js.map +1 -0
  22. package/dist/adapters/commands/new.d.ts.map +1 -0
  23. package/dist/adapters/commands/new.js +41 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +5 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +43 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  30. package/dist/adapters/commands/sandbox.js +125 -0
  31. package/dist/adapters/commands/sandbox.js.map +1 -0
  32. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  33. package/dist/{commands → adapters/commands}/session-view.js +23 -16
  34. package/dist/adapters/commands/session-view.js.map +1 -0
  35. package/dist/adapters/commands/types.d.ts +145 -0
  36. package/dist/adapters/commands/types.d.ts.map +1 -0
  37. package/dist/adapters/commands/types.js.map +1 -0
  38. package/dist/adapters/commands/utils.d.ts +14 -0
  39. package/dist/adapters/commands/utils.d.ts.map +1 -0
  40. package/dist/{commands → adapters/commands}/utils.js +18 -1
  41. package/dist/adapters/commands/utils.js.map +1 -0
  42. package/dist/adapters/discord/bot.d.ts +11 -8
  43. package/dist/adapters/discord/bot.d.ts.map +1 -1
  44. package/dist/adapters/discord/bot.js +223 -256
  45. package/dist/adapters/discord/bot.js.map +1 -1
  46. package/dist/adapters/discord/components.d.ts +28 -0
  47. package/dist/adapters/discord/components.d.ts.map +1 -0
  48. package/dist/adapters/discord/components.js +32 -0
  49. package/dist/adapters/discord/components.js.map +1 -0
  50. package/dist/adapters/discord/context.d.ts +2 -6
  51. package/dist/adapters/discord/context.d.ts.map +1 -1
  52. package/dist/adapters/discord/context.js +64 -218
  53. package/dist/adapters/discord/context.js.map +1 -1
  54. package/dist/adapters/discord/format.d.ts +3 -0
  55. package/dist/adapters/discord/format.d.ts.map +1 -0
  56. package/dist/adapters/discord/format.js +84 -0
  57. package/dist/adapters/discord/format.js.map +1 -0
  58. package/dist/adapters/discord/types.d.ts +8 -1
  59. package/dist/adapters/discord/types.d.ts.map +1 -1
  60. package/dist/adapters/discord/types.js.map +1 -1
  61. package/dist/adapters/github/bot.d.ts +102 -0
  62. package/dist/adapters/github/bot.d.ts.map +1 -0
  63. package/dist/adapters/github/bot.js +720 -0
  64. package/dist/adapters/github/bot.js.map +1 -0
  65. package/dist/adapters/github/client.d.ts +122 -0
  66. package/dist/adapters/github/client.d.ts.map +1 -0
  67. package/dist/adapters/github/client.js +301 -0
  68. package/dist/adapters/github/client.js.map +1 -0
  69. package/dist/adapters/github/context.d.ts +5 -0
  70. package/dist/adapters/github/context.d.ts.map +1 -0
  71. package/dist/adapters/github/context.js +101 -0
  72. package/dist/adapters/github/context.js.map +1 -0
  73. package/dist/adapters/github/github-ops.d.ts +78 -0
  74. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  75. package/dist/adapters/github/github-ops.js +337 -0
  76. package/dist/adapters/github/github-ops.js.map +1 -0
  77. package/dist/adapters/github/ids.d.ts +34 -0
  78. package/dist/adapters/github/ids.d.ts.map +1 -0
  79. package/dist/adapters/github/ids.js +57 -0
  80. package/dist/adapters/github/ids.js.map +1 -0
  81. package/dist/adapters/github/repo.d.ts +33 -0
  82. package/dist/adapters/github/repo.d.ts.map +1 -0
  83. package/dist/adapters/github/repo.js +141 -0
  84. package/dist/adapters/github/repo.js.map +1 -0
  85. package/dist/adapters/github/tool-pack.d.ts +14 -0
  86. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  87. package/dist/adapters/github/tool-pack.js +55 -0
  88. package/dist/adapters/github/tool-pack.js.map +1 -0
  89. package/dist/adapters/github/tools/checks.d.ts +18 -0
  90. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  91. package/dist/adapters/github/tools/checks.js +86 -0
  92. package/dist/adapters/github/tools/checks.js.map +1 -0
  93. package/dist/adapters/github/tools/issue.d.ts +21 -0
  94. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  95. package/dist/adapters/github/tools/issue.js +48 -0
  96. package/dist/adapters/github/tools/issue.js.map +1 -0
  97. package/dist/adapters/github/tools/pr.d.ts +22 -0
  98. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  99. package/dist/adapters/github/tools/pr.js +48 -0
  100. package/dist/adapters/github/tools/pr.js.map +1 -0
  101. package/dist/adapters/github/tools/read.d.ts +21 -0
  102. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  103. package/dist/adapters/github/tools/read.js +141 -0
  104. package/dist/adapters/github/tools/read.js.map +1 -0
  105. package/dist/adapters/github/tools/review-reply.d.ts +17 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  107. package/dist/adapters/github/tools/review-reply.js +38 -0
  108. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  109. package/dist/adapters/github/tools/sync.d.ts +17 -0
  110. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  111. package/dist/adapters/github/tools/sync.js +34 -0
  112. package/dist/adapters/github/tools/sync.js.map +1 -0
  113. package/dist/adapters/github/types.d.ts +345 -0
  114. package/dist/adapters/github/types.d.ts.map +1 -0
  115. package/dist/adapters/github/types.js.map +1 -0
  116. package/dist/adapters/github/webhook.d.ts +20 -0
  117. package/dist/adapters/github/webhook.d.ts.map +1 -0
  118. package/dist/adapters/github/webhook.js +78 -0
  119. package/dist/adapters/github/webhook.js.map +1 -0
  120. package/dist/adapters/index.d.ts +12 -0
  121. package/dist/adapters/index.d.ts.map +1 -0
  122. package/dist/adapters/index.js +19 -0
  123. package/dist/adapters/index.js.map +1 -0
  124. package/dist/adapters/intake.d.ts +17 -6
  125. package/dist/adapters/intake.d.ts.map +1 -1
  126. package/dist/adapters/intake.js +96 -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/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  133. package/dist/adapters/messages.d.ts.map +1 -0
  134. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  135. package/dist/adapters/messages.js.map +1 -0
  136. package/dist/adapters/progressive-renderer.d.ts +7 -0
  137. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  138. package/dist/adapters/progressive-renderer.js +443 -0
  139. package/dist/adapters/progressive-renderer.js.map +1 -0
  140. package/dist/adapters/shared.d.ts +37 -11
  141. package/dist/adapters/shared.d.ts.map +1 -1
  142. package/dist/adapters/shared.js +130 -24
  143. package/dist/adapters/shared.js.map +1 -1
  144. package/dist/adapters/slack/assistant.d.ts +73 -0
  145. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  146. package/dist/adapters/slack/assistant.js +205 -0
  147. package/dist/adapters/slack/assistant.js.map +1 -0
  148. package/dist/adapters/slack/auto-reply-context.d.ts +21 -0
  149. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  150. package/dist/adapters/slack/auto-reply-context.js +28 -0
  151. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  152. package/dist/adapters/slack/blocks.d.ts +14 -0
  153. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  154. package/dist/adapters/slack/blocks.js +104 -148
  155. package/dist/adapters/slack/blocks.js.map +1 -1
  156. package/dist/adapters/slack/bot.d.ts +154 -21
  157. package/dist/adapters/slack/bot.d.ts.map +1 -1
  158. package/dist/adapters/slack/bot.js +1037 -484
  159. package/dist/adapters/slack/bot.js.map +1 -1
  160. package/dist/adapters/slack/context.d.ts +2 -6
  161. package/dist/adapters/slack/context.d.ts.map +1 -1
  162. package/dist/adapters/slack/context.js +11 -17
  163. package/dist/adapters/slack/context.js.map +1 -1
  164. package/dist/adapters/slack/jev-context.d.ts +30 -0
  165. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  166. package/dist/adapters/slack/jev-context.js +67 -0
  167. package/dist/adapters/slack/jev-context.js.map +1 -0
  168. package/dist/adapters/slack/markdown.d.ts +3 -0
  169. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  170. package/dist/adapters/slack/markdown.js +48 -0
  171. package/dist/adapters/slack/markdown.js.map +1 -0
  172. package/dist/adapters/slack/persona.d.ts +15 -0
  173. package/dist/adapters/slack/persona.d.ts.map +1 -0
  174. package/dist/adapters/slack/persona.js +22 -0
  175. package/dist/adapters/slack/persona.js.map +1 -0
  176. package/dist/adapters/slack/response-lifecycle.d.ts +1 -1
  177. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  178. package/dist/adapters/slack/response-lifecycle.js +261 -345
  179. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  180. package/dist/adapters/slack/session.d.ts.map +1 -1
  181. package/dist/adapters/slack/session.js +7 -11
  182. package/dist/adapters/slack/session.js.map +1 -1
  183. package/dist/adapters/slack/stream-limits.d.ts +35 -0
  184. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  185. package/dist/adapters/slack/stream-limits.js +56 -0
  186. package/dist/adapters/slack/stream-limits.js.map +1 -0
  187. package/dist/adapters/slack/task-intent.d.ts +32 -0
  188. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  189. package/dist/adapters/slack/task-intent.js +72 -0
  190. package/dist/adapters/slack/task-intent.js.map +1 -0
  191. package/dist/adapters/slack/task-status.d.ts +7 -0
  192. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  193. package/dist/adapters/slack/task-status.js +107 -0
  194. package/dist/adapters/slack/task-status.js.map +1 -0
  195. package/dist/adapters/slack/tool-pack.d.ts +11 -0
  196. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  197. package/dist/adapters/slack/tool-pack.js +45 -0
  198. package/dist/adapters/slack/tool-pack.js.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.d.ts +14 -0
  200. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  201. package/dist/adapters/slack/tools/blockkit.js +106 -0
  202. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  203. package/dist/adapters/slack/types.d.ts +73 -2
  204. package/dist/adapters/slack/types.d.ts.map +1 -1
  205. package/dist/adapters/slack/types.js.map +1 -1
  206. package/dist/adapters/slack/update-diagnostics.d.ts +14 -0
  207. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  208. package/dist/adapters/slack/update-diagnostics.js +134 -0
  209. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  210. package/dist/adapters/telegram/bot.d.ts +10 -9
  211. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  212. package/dist/adapters/telegram/bot.js +133 -202
  213. package/dist/adapters/telegram/bot.js.map +1 -1
  214. package/dist/adapters/telegram/context.d.ts +2 -6
  215. package/dist/adapters/telegram/context.d.ts.map +1 -1
  216. package/dist/adapters/telegram/context.js +53 -190
  217. package/dist/adapters/telegram/context.js.map +1 -1
  218. package/dist/adapters/telegram/types.d.ts +1 -1
  219. package/dist/adapters/telegram/types.d.ts.map +1 -1
  220. package/dist/adapters/telegram/types.js.map +1 -1
  221. package/dist/adapters/types.d.ts +144 -13
  222. package/dist/adapters/types.d.ts.map +1 -1
  223. package/dist/adapters/types.js.map +1 -1
  224. package/dist/adapters/web/admin/portal.d.ts +44 -0
  225. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  226. package/dist/adapters/web/admin/portal.js +3207 -0
  227. package/dist/adapters/web/admin/portal.js.map +1 -0
  228. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  229. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  231. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  232. package/dist/adapters/web/admin/types.d.ts +53 -0
  233. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  234. package/dist/adapters/web/admin/types.js.map +1 -0
  235. package/dist/adapters/web/login/oauth.d.ts +5 -0
  236. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  237. package/dist/{web → adapters/web}/login/oauth.js +50 -85
  238. package/dist/adapters/web/login/oauth.js.map +1 -0
  239. package/dist/{web → adapters/web}/login/portal.d.ts +9 -3
  240. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  241. package/dist/{web → adapters/web}/login/portal.js +161 -119
  242. package/dist/adapters/web/login/portal.js.map +1 -0
  243. package/dist/{web → adapters/web}/login/types.d.ts +1 -12
  244. package/dist/adapters/web/login/types.d.ts.map +1 -0
  245. package/dist/adapters/web/login/types.js.map +1 -0
  246. package/dist/adapters/web/portal-shell.d.ts +22 -0
  247. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  248. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +78 -2
  249. package/dist/adapters/web/portal-shell.js.map +1 -0
  250. package/dist/{web → adapters/web}/server.d.ts +14 -8
  251. package/dist/adapters/web/server.d.ts.map +1 -0
  252. package/dist/{web → adapters/web}/server.js +14 -7
  253. package/dist/adapters/web/server.js.map +1 -0
  254. package/dist/adapters/web/session-view/portal.d.ts +20 -0
  255. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  256. package/dist/{web → adapters/web}/session-view/portal.js +633 -162
  257. package/dist/adapters/web/session-view/portal.js.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/types.d.ts +11 -6
  259. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  260. package/dist/adapters/web/session-view/types.js.map +1 -0
  261. package/dist/adapters/web/token-store.d.ts.map +1 -0
  262. package/dist/{web → adapters/web}/token-store.js +1 -1
  263. package/dist/adapters/web/token-store.js.map +1 -0
  264. package/dist/adapters/web/types.d.ts.map +1 -0
  265. package/dist/adapters/web/types.js.map +1 -0
  266. package/dist/cli/arg-grammar.d.ts +11 -0
  267. package/dist/cli/arg-grammar.d.ts.map +1 -0
  268. package/dist/cli/arg-grammar.js +50 -0
  269. package/dist/cli/arg-grammar.js.map +1 -0
  270. package/dist/cli/boot.d.ts +5 -0
  271. package/dist/cli/boot.d.ts.map +1 -0
  272. package/dist/cli/boot.js +90 -0
  273. package/dist/cli/boot.js.map +1 -0
  274. package/dist/cli/download.d.ts.map +1 -0
  275. package/dist/cli/download.js +88 -0
  276. package/dist/cli/download.js.map +1 -0
  277. package/dist/cli/office.d.ts +2 -0
  278. package/dist/cli/office.d.ts.map +1 -0
  279. package/dist/cli/office.js +181 -0
  280. package/dist/cli/office.js.map +1 -0
  281. package/dist/cli/onboard.d.ts +10 -0
  282. package/dist/cli/onboard.d.ts.map +1 -0
  283. package/dist/cli/onboard.js +225 -0
  284. package/dist/cli/onboard.js.map +1 -0
  285. package/dist/cli/process-lifecycle.d.ts +19 -0
  286. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  287. package/dist/cli/process-lifecycle.js +67 -0
  288. package/dist/cli/process-lifecycle.js.map +1 -0
  289. package/dist/cli/sessions.d.ts +2 -0
  290. package/dist/cli/sessions.d.ts.map +1 -0
  291. package/dist/cli/sessions.js +88 -0
  292. package/dist/cli/sessions.js.map +1 -0
  293. package/dist/cli/types.d.ts +25 -0
  294. package/dist/cli/types.d.ts.map +1 -0
  295. package/dist/cli/types.js.map +1 -0
  296. package/dist/dream/index.d.ts +20 -0
  297. package/dist/dream/index.d.ts.map +1 -0
  298. package/dist/dream/index.js +264 -0
  299. package/dist/dream/index.js.map +1 -0
  300. package/dist/dream/types.d.ts +30 -0
  301. package/dist/dream/types.d.ts.map +1 -0
  302. package/dist/dream/types.js +2 -0
  303. package/dist/dream/types.js.map +1 -0
  304. package/dist/env-manifest.d.ts +38 -0
  305. package/dist/env-manifest.d.ts.map +1 -0
  306. package/dist/env-manifest.js +260 -0
  307. package/dist/env-manifest.js.map +1 -0
  308. package/dist/events/index.d.ts +172 -0
  309. package/dist/events/index.d.ts.map +1 -0
  310. package/dist/events/index.js +340 -0
  311. package/dist/events/index.js.map +1 -0
  312. package/dist/events/scheduler.d.ts +34 -0
  313. package/dist/events/scheduler.d.ts.map +1 -0
  314. package/dist/events/scheduler.js +231 -0
  315. package/dist/events/scheduler.js.map +1 -0
  316. package/dist/file-guards.d.ts +26 -0
  317. package/dist/file-guards.d.ts.map +1 -0
  318. package/dist/file-guards.js +133 -0
  319. package/dist/file-guards.js.map +1 -0
  320. package/dist/harness/execution-env.d.ts +19 -0
  321. package/dist/harness/execution-env.d.ts.map +1 -0
  322. package/dist/harness/execution-env.js +262 -0
  323. package/dist/harness/execution-env.js.map +1 -0
  324. package/dist/harness/execution-resolver.d.ts +25 -0
  325. package/dist/harness/execution-resolver.d.ts.map +1 -0
  326. package/dist/harness/execution-resolver.js +156 -0
  327. package/dist/harness/execution-resolver.js.map +1 -0
  328. package/dist/harness/index.d.ts +18 -13
  329. package/dist/harness/index.d.ts.map +1 -1
  330. package/dist/harness/index.js +11 -11
  331. package/dist/harness/index.js.map +1 -1
  332. package/dist/harness/jev.d.ts +86 -0
  333. package/dist/harness/jev.d.ts.map +1 -0
  334. package/dist/harness/jev.js +167 -0
  335. package/dist/harness/jev.js.map +1 -0
  336. package/dist/harness/mcp.d.ts +38 -0
  337. package/dist/harness/mcp.d.ts.map +1 -0
  338. package/dist/harness/mcp.js +304 -0
  339. package/dist/harness/mcp.js.map +1 -0
  340. package/dist/harness/models.d.ts +7 -4
  341. package/dist/harness/models.d.ts.map +1 -1
  342. package/dist/harness/models.js +54 -55
  343. package/dist/harness/models.js.map +1 -1
  344. package/dist/harness/open-connector.d.ts +25 -0
  345. package/dist/harness/open-connector.d.ts.map +1 -0
  346. package/dist/harness/open-connector.js +178 -0
  347. package/dist/harness/open-connector.js.map +1 -0
  348. package/dist/harness/presenter.d.ts +31 -0
  349. package/dist/harness/presenter.d.ts.map +1 -0
  350. package/dist/harness/presenter.js +859 -0
  351. package/dist/harness/presenter.js.map +1 -0
  352. package/dist/harness/prompt.d.ts +30 -0
  353. package/dist/harness/prompt.d.ts.map +1 -0
  354. package/dist/harness/prompt.js +420 -0
  355. package/dist/harness/prompt.js.map +1 -0
  356. package/dist/harness/runner.d.ts +2 -123
  357. package/dist/harness/runner.d.ts.map +1 -1
  358. package/dist/harness/runner.js +551 -416
  359. package/dist/harness/runner.js.map +1 -1
  360. package/dist/harness/session.d.ts +122 -0
  361. package/dist/harness/session.d.ts.map +1 -0
  362. package/dist/harness/session.js +581 -0
  363. package/dist/harness/session.js.map +1 -0
  364. package/dist/harness/skills.d.ts +17 -28
  365. package/dist/harness/skills.d.ts.map +1 -1
  366. package/dist/harness/skills.js +104 -39
  367. package/dist/harness/skills.js.map +1 -1
  368. package/dist/harness/subagent-profiles.d.ts +8 -0
  369. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  370. package/dist/harness/subagent-profiles.js +293 -0
  371. package/dist/harness/subagent-profiles.js.map +1 -0
  372. package/dist/harness/subagent.d.ts +64 -0
  373. package/dist/harness/subagent.d.ts.map +1 -0
  374. package/dist/harness/subagent.js +687 -0
  375. package/dist/harness/subagent.js.map +1 -0
  376. package/dist/harness/tools/attach.d.ts.map +1 -0
  377. package/dist/{adapters/slack → harness}/tools/attach.js +1 -1
  378. package/dist/harness/tools/attach.js.map +1 -0
  379. package/dist/{tools → harness/tools}/event.d.ts +4 -33
  380. package/dist/harness/tools/event.d.ts.map +1 -0
  381. package/dist/harness/tools/event.js +175 -0
  382. package/dist/harness/tools/event.js.map +1 -0
  383. package/dist/harness/tools/generate-image.d.ts +23 -0
  384. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  385. package/dist/harness/tools/generate-image.js +65 -0
  386. package/dist/harness/tools/generate-image.js.map +1 -0
  387. package/dist/harness/tools/host-fn-tool.d.ts +21 -0
  388. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  389. package/dist/harness/tools/host-fn-tool.js +32 -0
  390. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  391. package/dist/harness/tools/index.d.ts +41 -0
  392. package/dist/harness/tools/index.d.ts.map +1 -0
  393. package/dist/harness/tools/index.js +51 -0
  394. package/dist/harness/tools/index.js.map +1 -0
  395. package/dist/harness/tools/jev.d.ts +21 -0
  396. package/dist/harness/tools/jev.d.ts.map +1 -0
  397. package/dist/harness/tools/jev.js +109 -0
  398. package/dist/harness/tools/jev.js.map +1 -0
  399. package/dist/harness/tools/pi-tools.d.ts +18 -0
  400. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  401. package/dist/harness/tools/pi-tools.js +84 -0
  402. package/dist/harness/tools/pi-tools.js.map +1 -0
  403. package/dist/harness/tools/react.d.ts.map +1 -0
  404. package/dist/{tools → harness/tools}/react.js +6 -17
  405. package/dist/harness/tools/react.js.map +1 -0
  406. package/dist/{tools → harness/tools}/sandbox.d.ts +4 -4
  407. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  408. package/dist/{tools → harness/tools}/sandbox.js +12 -8
  409. package/dist/harness/tools/sandbox.js.map +1 -0
  410. package/dist/harness/tools/subagent.d.ts +85 -0
  411. package/dist/harness/tools/subagent.d.ts.map +1 -0
  412. package/dist/harness/tools/subagent.js +677 -0
  413. package/dist/harness/tools/subagent.js.map +1 -0
  414. package/dist/harness/tools/task.d.ts +20 -0
  415. package/dist/harness/tools/task.d.ts.map +1 -0
  416. package/dist/harness/tools/task.js +79 -0
  417. package/dist/harness/tools/task.js.map +1 -0
  418. package/dist/harness/tools/types.d.ts +29 -0
  419. package/dist/harness/tools/types.d.ts.map +1 -0
  420. package/dist/harness/tools/types.js +2 -0
  421. package/dist/harness/tools/types.js.map +1 -0
  422. package/dist/harness/types.d.ts +384 -25
  423. package/dist/harness/types.d.ts.map +1 -1
  424. package/dist/harness/types.js +1 -1
  425. package/dist/harness/types.js.map +1 -1
  426. package/dist/index.d.ts +33 -9
  427. package/dist/index.d.ts.map +1 -1
  428. package/dist/index.js +19 -6
  429. package/dist/index.js.map +1 -1
  430. package/dist/log.d.ts.map +1 -1
  431. package/dist/log.js +4 -1
  432. package/dist/log.js.map +1 -1
  433. package/dist/main.js +357 -198
  434. package/dist/main.js.map +1 -1
  435. package/dist/observability/index.d.ts +33 -0
  436. package/dist/observability/index.d.ts.map +1 -0
  437. package/dist/observability/index.js +257 -0
  438. package/dist/observability/index.js.map +1 -0
  439. package/dist/observability/instrument.js +14 -6
  440. package/dist/observability/instrument.js.map +1 -1
  441. package/dist/observability/otel.d.ts +10 -0
  442. package/dist/observability/otel.d.ts.map +1 -0
  443. package/dist/observability/otel.js +183 -0
  444. package/dist/observability/otel.js.map +1 -0
  445. package/dist/observability/sentry.d.ts +40 -7
  446. package/dist/observability/sentry.d.ts.map +1 -1
  447. package/dist/observability/sentry.js +176 -32
  448. package/dist/observability/sentry.js.map +1 -1
  449. package/dist/observability/types.d.ts +24 -3
  450. package/dist/observability/types.d.ts.map +1 -1
  451. package/dist/observability/types.js.map +1 -1
  452. package/dist/office/index.d.ts +139 -0
  453. package/dist/office/index.d.ts.map +1 -0
  454. package/dist/office/index.js +1084 -0
  455. package/dist/office/index.js.map +1 -0
  456. package/dist/office/projection.d.ts +42 -0
  457. package/dist/office/projection.d.ts.map +1 -0
  458. package/dist/office/projection.js +182 -0
  459. package/dist/office/projection.js.map +1 -0
  460. package/dist/office/types.d.ts +116 -0
  461. package/dist/office/types.d.ts.map +1 -0
  462. package/dist/office/types.js +2 -0
  463. package/dist/office/types.js.map +1 -0
  464. package/dist/runtime/conversation-runtime.d.ts +1 -1
  465. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  466. package/dist/runtime/conversation-runtime.js +423 -152
  467. package/dist/runtime/conversation-runtime.js.map +1 -1
  468. package/dist/runtime/session-lifecycle.d.ts +76 -0
  469. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  470. package/dist/runtime/session-lifecycle.js +404 -0
  471. package/dist/runtime/session-lifecycle.js.map +1 -0
  472. package/dist/runtime/types.d.ts +63 -15
  473. package/dist/runtime/types.d.ts.map +1 -1
  474. package/dist/runtime/types.js.map +1 -1
  475. package/dist/sandbox/cloudflare.d.ts +4 -0
  476. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  477. package/dist/sandbox/cloudflare.js +54 -52
  478. package/dist/sandbox/cloudflare.js.map +1 -1
  479. package/dist/sandbox/container.d.ts +3 -0
  480. package/dist/sandbox/container.d.ts.map +1 -1
  481. package/dist/sandbox/container.js +19 -7
  482. package/dist/sandbox/container.js.map +1 -1
  483. package/dist/sandbox/host.d.ts +3 -0
  484. package/dist/sandbox/host.d.ts.map +1 -1
  485. package/dist/sandbox/host.js +44 -35
  486. package/dist/sandbox/host.js.map +1 -1
  487. package/dist/sandbox/identity.d.ts +42 -0
  488. package/dist/sandbox/identity.d.ts.map +1 -0
  489. package/dist/sandbox/identity.js +77 -0
  490. package/dist/sandbox/identity.js.map +1 -0
  491. package/dist/sandbox/index.d.ts +24 -6
  492. package/dist/sandbox/index.d.ts.map +1 -1
  493. package/dist/sandbox/index.js +77 -17
  494. package/dist/sandbox/index.js.map +1 -1
  495. package/dist/sandbox/provisioner.d.ts +139 -0
  496. package/dist/sandbox/provisioner.d.ts.map +1 -0
  497. package/dist/{provisioner.js → sandbox/provisioner.js} +378 -24
  498. package/dist/sandbox/provisioner.js.map +1 -0
  499. package/dist/sandbox/types.d.ts +43 -9
  500. package/dist/sandbox/types.d.ts.map +1 -1
  501. package/dist/sandbox/types.js.map +1 -1
  502. package/dist/sandbox/utils.d.ts +24 -0
  503. package/dist/sandbox/utils.d.ts.map +1 -1
  504. package/dist/sandbox/utils.js +92 -1
  505. package/dist/sandbox/utils.js.map +1 -1
  506. package/dist/sessions/chat-history-sync.d.ts +23 -0
  507. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  508. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +239 -175
  509. package/dist/sessions/chat-history-sync.js.map +1 -0
  510. package/dist/sessions/history-line.d.ts +29 -0
  511. package/dist/sessions/history-line.d.ts.map +1 -0
  512. package/dist/sessions/history-line.js +45 -0
  513. package/dist/sessions/history-line.js.map +1 -0
  514. package/dist/sessions/migrate-common.d.ts +43 -0
  515. package/dist/sessions/migrate-common.d.ts.map +1 -0
  516. package/dist/sessions/migrate-common.js +99 -0
  517. package/dist/sessions/migrate-common.js.map +1 -0
  518. package/dist/sessions/migrate-pi-084.d.ts +8 -0
  519. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  520. package/dist/sessions/migrate-pi-084.js +302 -0
  521. package/dist/sessions/migrate-pi-084.js.map +1 -0
  522. package/dist/sessions/migrate-v3.d.ts +15 -0
  523. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  524. package/dist/sessions/migrate-v3.js +419 -0
  525. package/dist/sessions/migrate-v3.js.map +1 -0
  526. package/dist/sessions/session-key.d.ts +33 -0
  527. package/dist/sessions/session-key.d.ts.map +1 -0
  528. package/dist/sessions/session-key.js +115 -0
  529. package/dist/sessions/session-key.js.map +1 -0
  530. package/dist/sessions/session-store.d.ts +61 -0
  531. package/dist/sessions/session-store.d.ts.map +1 -0
  532. package/dist/sessions/session-store.js +684 -0
  533. package/dist/sessions/session-store.js.map +1 -0
  534. package/dist/sessions/store.d.ts +17 -10
  535. package/dist/sessions/store.d.ts.map +1 -1
  536. package/dist/sessions/store.js +182 -47
  537. package/dist/sessions/store.js.map +1 -1
  538. package/dist/sessions/types.d.ts +74 -8
  539. package/dist/sessions/types.d.ts.map +1 -1
  540. package/dist/sessions/types.js +1 -1
  541. package/dist/sessions/types.js.map +1 -1
  542. package/dist/settings/apply.d.ts +16 -0
  543. package/dist/settings/apply.d.ts.map +1 -0
  544. package/dist/settings/apply.js +60 -0
  545. package/dist/settings/apply.js.map +1 -0
  546. package/dist/settings/index.d.ts +126 -0
  547. package/dist/settings/index.d.ts.map +1 -0
  548. package/dist/settings/index.js +422 -0
  549. package/dist/settings/index.js.map +1 -0
  550. package/dist/settings/migrate.d.ts +21 -0
  551. package/dist/settings/migrate.d.ts.map +1 -0
  552. package/dist/settings/migrate.js +86 -0
  553. package/dist/settings/migrate.js.map +1 -0
  554. package/dist/types.d.ts +330 -141
  555. package/dist/types.d.ts.map +1 -1
  556. package/dist/types.js +2 -2
  557. package/dist/types.js.map +1 -1
  558. package/dist/vault/index.d.ts +52 -2
  559. package/dist/vault/index.d.ts.map +1 -1
  560. package/dist/vault/index.js +218 -86
  561. package/dist/vault/index.js.map +1 -1
  562. package/dist/vault/types.d.ts +6 -2
  563. package/dist/vault/types.d.ts.map +1 -1
  564. package/dist/vault/types.js.map +1 -1
  565. package/package.json +79 -40
  566. package/dist/adapter.d.ts +0 -2
  567. package/dist/adapter.d.ts.map +0 -1
  568. package/dist/adapter.js +0 -2
  569. package/dist/adapter.js.map +0 -1
  570. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  571. package/dist/adapters/slack/tools/attach.js.map +0 -1
  572. package/dist/adapters/streaming.d.ts +0 -18
  573. package/dist/adapters/streaming.d.ts.map +0 -1
  574. package/dist/adapters/streaming.js +0 -44
  575. package/dist/adapters/streaming.js.map +0 -1
  576. package/dist/adapters/telegram/html.d.ts +0 -3
  577. package/dist/adapters/telegram/html.d.ts.map +0 -1
  578. package/dist/adapters/telegram/html.js +0 -98
  579. package/dist/adapters/telegram/html.js.map +0 -1
  580. package/dist/agent-events.d.ts +0 -5
  581. package/dist/agent-events.d.ts.map +0 -1
  582. package/dist/agent-events.js +0 -26
  583. package/dist/agent-events.js.map +0 -1
  584. package/dist/agent.d.ts +0 -39
  585. package/dist/agent.d.ts.map +0 -1
  586. package/dist/agent.js +0 -1291
  587. package/dist/agent.js.map +0 -1
  588. package/dist/cli/ext-git.d.ts +0 -22
  589. package/dist/cli/ext-git.d.ts.map +0 -1
  590. package/dist/cli/ext-git.js +0 -76
  591. package/dist/cli/ext-git.js.map +0 -1
  592. package/dist/cli/ext.d.ts +0 -2
  593. package/dist/cli/ext.d.ts.map +0 -1
  594. package/dist/cli/ext.js +0 -217
  595. package/dist/cli/ext.js.map +0 -1
  596. package/dist/commands/admin.d.ts.map +0 -1
  597. package/dist/commands/admin.js.map +0 -1
  598. package/dist/commands/auto-reply.d.ts.map +0 -1
  599. package/dist/commands/auto-reply.js +0 -76
  600. package/dist/commands/auto-reply.js.map +0 -1
  601. package/dist/commands/extensions.d.ts +0 -14
  602. package/dist/commands/extensions.d.ts.map +0 -1
  603. package/dist/commands/extensions.js +0 -55
  604. package/dist/commands/extensions.js.map +0 -1
  605. package/dist/commands/login.d.ts +0 -5
  606. package/dist/commands/login.d.ts.map +0 -1
  607. package/dist/commands/login.js +0 -115
  608. package/dist/commands/login.js.map +0 -1
  609. package/dist/commands/model.d.ts +0 -10
  610. package/dist/commands/model.d.ts.map +0 -1
  611. package/dist/commands/model.js +0 -102
  612. package/dist/commands/model.js.map +0 -1
  613. package/dist/commands/new.d.ts.map +0 -1
  614. package/dist/commands/new.js +0 -25
  615. package/dist/commands/new.js.map +0 -1
  616. package/dist/commands/parse.d.ts +0 -7
  617. package/dist/commands/parse.d.ts.map +0 -1
  618. package/dist/commands/parse.js +0 -14
  619. package/dist/commands/parse.js.map +0 -1
  620. package/dist/commands/registry.d.ts +0 -5
  621. package/dist/commands/registry.d.ts.map +0 -1
  622. package/dist/commands/registry.js +0 -31
  623. package/dist/commands/registry.js.map +0 -1
  624. package/dist/commands/sandbox.d.ts.map +0 -1
  625. package/dist/commands/sandbox.js +0 -78
  626. package/dist/commands/sandbox.js.map +0 -1
  627. package/dist/commands/session-view.d.ts.map +0 -1
  628. package/dist/commands/session-view.js.map +0 -1
  629. package/dist/commands/types.d.ts +0 -66
  630. package/dist/commands/types.d.ts.map +0 -1
  631. package/dist/commands/types.js.map +0 -1
  632. package/dist/commands/utils.d.ts +0 -11
  633. package/dist/commands/utils.d.ts.map +0 -1
  634. package/dist/commands/utils.js.map +0 -1
  635. package/dist/config.d.ts +0 -78
  636. package/dist/config.d.ts.map +0 -1
  637. package/dist/config.js +0 -450
  638. package/dist/config.js.map +0 -1
  639. package/dist/download.d.ts.map +0 -1
  640. package/dist/download.js +0 -89
  641. package/dist/download.js.map +0 -1
  642. package/dist/events.d.ts +0 -43
  643. package/dist/events.d.ts.map +0 -1
  644. package/dist/events.js +0 -456
  645. package/dist/events.js.map +0 -1
  646. package/dist/execution-resolver.d.ts +0 -21
  647. package/dist/execution-resolver.d.ts.map +0 -1
  648. package/dist/execution-resolver.js +0 -170
  649. package/dist/execution-resolver.js.map +0 -1
  650. package/dist/harness/auth.d.ts +0 -16
  651. package/dist/harness/auth.d.ts.map +0 -1
  652. package/dist/harness/auth.js +0 -86
  653. package/dist/harness/auth.js.map +0 -1
  654. package/dist/harness/extensions/loader.d.ts +0 -86
  655. package/dist/harness/extensions/loader.d.ts.map +0 -1
  656. package/dist/harness/extensions/loader.js +0 -525
  657. package/dist/harness/extensions/loader.js.map +0 -1
  658. package/dist/harness/extensions/registry.d.ts +0 -23
  659. package/dist/harness/extensions/registry.d.ts.map +0 -1
  660. package/dist/harness/extensions/registry.js +0 -45
  661. package/dist/harness/extensions/registry.js.map +0 -1
  662. package/dist/harness/extensions/types.d.ts +0 -248
  663. package/dist/harness/extensions/types.d.ts.map +0 -1
  664. package/dist/harness/extensions/types.js.map +0 -1
  665. package/dist/harness/session-store.d.ts +0 -77
  666. package/dist/harness/session-store.d.ts.map +0 -1
  667. package/dist/harness/session-store.js +0 -248
  668. package/dist/harness/session-store.js.map +0 -1
  669. package/dist/harness/settings.d.ts +0 -47
  670. package/dist/harness/settings.d.ts.map +0 -1
  671. package/dist/harness/settings.js +0 -29
  672. package/dist/harness/settings.js.map +0 -1
  673. package/dist/model-registry.d.ts +0 -4
  674. package/dist/model-registry.d.ts.map +0 -1
  675. package/dist/model-registry.js +0 -7
  676. package/dist/model-registry.js.map +0 -1
  677. package/dist/platform-messages.d.ts.map +0 -1
  678. package/dist/platform-messages.js.map +0 -1
  679. package/dist/portal-shell.d.ts +0 -4
  680. package/dist/portal-shell.d.ts.map +0 -1
  681. package/dist/portal-shell.js.map +0 -1
  682. package/dist/provisioner.d.ts +0 -61
  683. package/dist/provisioner.d.ts.map +0 -1
  684. package/dist/provisioner.js.map +0 -1
  685. package/dist/runtime/agent-run-controller.d.ts +0 -31
  686. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  687. package/dist/runtime/agent-run-controller.js +0 -195
  688. package/dist/runtime/agent-run-controller.js.map +0 -1
  689. package/dist/sandbox/errors.d.ts +0 -6
  690. package/dist/sandbox/errors.d.ts.map +0 -1
  691. package/dist/sandbox/errors.js +0 -11
  692. package/dist/sandbox/errors.js.map +0 -1
  693. package/dist/sandbox/firecracker.d.ts +0 -15
  694. package/dist/sandbox/firecracker.d.ts.map +0 -1
  695. package/dist/sandbox/firecracker.js +0 -212
  696. package/dist/sandbox/firecracker.js.map +0 -1
  697. package/dist/sandbox/image.d.ts +0 -3
  698. package/dist/sandbox/image.d.ts.map +0 -1
  699. package/dist/sandbox/image.js +0 -27
  700. package/dist/sandbox/image.js.map +0 -1
  701. package/dist/sandbox/path-context.d.ts +0 -3
  702. package/dist/sandbox/path-context.d.ts.map +0 -1
  703. package/dist/sandbox/path-context.js +0 -20
  704. package/dist/sandbox/path-context.js.map +0 -1
  705. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  706. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  707. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  708. package/dist/sessions/metadata.d.ts +0 -3
  709. package/dist/sessions/metadata.d.ts.map +0 -1
  710. package/dist/sessions/metadata.js +0 -11
  711. package/dist/sessions/metadata.js.map +0 -1
  712. package/dist/sessions/policy.d.ts +0 -6
  713. package/dist/sessions/policy.d.ts.map +0 -1
  714. package/dist/sessions/policy.js +0 -23
  715. package/dist/sessions/policy.js.map +0 -1
  716. package/dist/store.d.ts +0 -46
  717. package/dist/store.d.ts.map +0 -1
  718. package/dist/store.js +0 -177
  719. package/dist/store.js.map +0 -1
  720. package/dist/tools/bash.d.ts +0 -10
  721. package/dist/tools/bash.d.ts.map +0 -1
  722. package/dist/tools/bash.js +0 -80
  723. package/dist/tools/bash.js.map +0 -1
  724. package/dist/tools/edit.d.ts +0 -11
  725. package/dist/tools/edit.d.ts.map +0 -1
  726. package/dist/tools/edit.js +0 -131
  727. package/dist/tools/edit.js.map +0 -1
  728. package/dist/tools/event.d.ts.map +0 -1
  729. package/dist/tools/event.js +0 -252
  730. package/dist/tools/event.js.map +0 -1
  731. package/dist/tools/index.d.ts +0 -24
  732. package/dist/tools/index.d.ts.map +0 -1
  733. package/dist/tools/index.js +0 -31
  734. package/dist/tools/index.js.map +0 -1
  735. package/dist/tools/react.d.ts.map +0 -1
  736. package/dist/tools/react.js.map +0 -1
  737. package/dist/tools/read.d.ts +0 -11
  738. package/dist/tools/read.d.ts.map +0 -1
  739. package/dist/tools/read.js +0 -134
  740. package/dist/tools/read.js.map +0 -1
  741. package/dist/tools/sandbox.d.ts.map +0 -1
  742. package/dist/tools/sandbox.js.map +0 -1
  743. package/dist/tools/truncate.d.ts +0 -33
  744. package/dist/tools/truncate.d.ts.map +0 -1
  745. package/dist/tools/truncate.js +0 -184
  746. package/dist/tools/truncate.js.map +0 -1
  747. package/dist/tools/types.d.ts +0 -54
  748. package/dist/tools/types.d.ts.map +0 -1
  749. package/dist/tools/types.js.map +0 -1
  750. package/dist/tools/write.d.ts +0 -10
  751. package/dist/tools/write.d.ts.map +0 -1
  752. package/dist/tools/write.js +0 -29
  753. package/dist/tools/write.js.map +0 -1
  754. package/dist/trigger.d.ts +0 -22
  755. package/dist/trigger.d.ts.map +0 -1
  756. package/dist/trigger.js +0 -100
  757. package/dist/trigger.js.map +0 -1
  758. package/dist/utils/date.d.ts +0 -10
  759. package/dist/utils/date.d.ts.map +0 -1
  760. package/dist/utils/date.js +0 -23
  761. package/dist/utils/date.js.map +0 -1
  762. package/dist/utils/env.d.ts +0 -3
  763. package/dist/utils/env.d.ts.map +0 -1
  764. package/dist/utils/env.js +0 -12
  765. package/dist/utils/env.js.map +0 -1
  766. package/dist/utils/file-guards.d.ts +0 -9
  767. package/dist/utils/file-guards.d.ts.map +0 -1
  768. package/dist/utils/file-guards.js +0 -59
  769. package/dist/utils/file-guards.js.map +0 -1
  770. package/dist/utils/fs-atomic.d.ts +0 -10
  771. package/dist/utils/fs-atomic.d.ts.map +0 -1
  772. package/dist/utils/fs-atomic.js +0 -45
  773. package/dist/utils/fs-atomic.js.map +0 -1
  774. package/dist/utils/html.d.ts +0 -2
  775. package/dist/utils/html.d.ts.map +0 -1
  776. package/dist/utils/html.js +0 -4
  777. package/dist/utils/html.js.map +0 -1
  778. package/dist/utils/http-body.d.ts +0 -10
  779. package/dist/utils/http-body.d.ts.map +0 -1
  780. package/dist/utils/http-body.js +0 -34
  781. package/dist/utils/http-body.js.map +0 -1
  782. package/dist/vault/routing.d.ts +0 -3
  783. package/dist/vault/routing.d.ts.map +0 -1
  784. package/dist/vault/routing.js +0 -13
  785. package/dist/vault/routing.js.map +0 -1
  786. package/dist/web/admin/portal.d.ts +0 -5
  787. package/dist/web/admin/portal.d.ts.map +0 -1
  788. package/dist/web/admin/portal.js +0 -2572
  789. package/dist/web/admin/portal.js.map +0 -1
  790. package/dist/web/admin/provider-models.d.ts.map +0 -1
  791. package/dist/web/admin/provider-models.js.map +0 -1
  792. package/dist/web/admin/store.d.ts +0 -13
  793. package/dist/web/admin/store.d.ts.map +0 -1
  794. package/dist/web/admin/store.js +0 -14
  795. package/dist/web/admin/store.js.map +0 -1
  796. package/dist/web/admin/types.d.ts +0 -30
  797. package/dist/web/admin/types.d.ts.map +0 -1
  798. package/dist/web/admin/types.js.map +0 -1
  799. package/dist/web/agent-events/portal.d.ts +0 -3
  800. package/dist/web/agent-events/portal.d.ts.map +0 -1
  801. package/dist/web/agent-events/portal.js +0 -18
  802. package/dist/web/agent-events/portal.js.map +0 -1
  803. package/dist/web/login/oauth.d.ts +0 -6
  804. package/dist/web/login/oauth.d.ts.map +0 -1
  805. package/dist/web/login/oauth.js.map +0 -1
  806. package/dist/web/login/portal.d.ts.map +0 -1
  807. package/dist/web/login/portal.js.map +0 -1
  808. package/dist/web/login/store.d.ts +0 -8
  809. package/dist/web/login/store.d.ts.map +0 -1
  810. package/dist/web/login/store.js +0 -15
  811. package/dist/web/login/store.js.map +0 -1
  812. package/dist/web/login/types.d.ts.map +0 -1
  813. package/dist/web/login/types.js.map +0 -1
  814. package/dist/web/request.d.ts +0 -3
  815. package/dist/web/request.d.ts.map +0 -1
  816. package/dist/web/request.js +0 -13
  817. package/dist/web/request.js.map +0 -1
  818. package/dist/web/server.d.ts.map +0 -1
  819. package/dist/web/server.js.map +0 -1
  820. package/dist/web/session-view/command.d.ts +0 -4
  821. package/dist/web/session-view/command.d.ts.map +0 -1
  822. package/dist/web/session-view/command.js +0 -7
  823. package/dist/web/session-view/command.js.map +0 -1
  824. package/dist/web/session-view/portal.d.ts +0 -13
  825. package/dist/web/session-view/portal.d.ts.map +0 -1
  826. package/dist/web/session-view/portal.js.map +0 -1
  827. package/dist/web/session-view/service.d.ts +0 -6
  828. package/dist/web/session-view/service.d.ts.map +0 -1
  829. package/dist/web/session-view/service.js +0 -498
  830. package/dist/web/session-view/service.js.map +0 -1
  831. package/dist/web/session-view/store.d.ts +0 -8
  832. package/dist/web/session-view/store.d.ts.map +0 -1
  833. package/dist/web/session-view/store.js +0 -15
  834. package/dist/web/session-view/store.js.map +0 -1
  835. package/dist/web/session-view/types.d.ts.map +0 -1
  836. package/dist/web/session-view/types.js.map +0 -1
  837. package/dist/web/token-store.d.ts.map +0 -1
  838. package/dist/web/token-store.js.map +0 -1
  839. package/dist/web/types.d.ts.map +0 -1
  840. package/dist/web/types.js.map +0 -1
  841. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  842. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  843. /package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -0
  844. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  845. /package/dist/{commands → adapters/commands}/types.js +0 -0
  846. /package/dist/{harness/extensions → adapters/github}/types.js +0 -0
  847. /package/dist/{tools → adapters/web/admin}/types.js +0 -0
  848. /package/dist/{web/admin → adapters/web/login}/types.js +0 -0
  849. /package/dist/{web/login → adapters/web/session-view}/types.js +0 -0
  850. /package/dist/{web → adapters/web}/token-store.d.ts +0 -0
  851. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  852. /package/dist/{web/session-view → adapters/web}/types.js +0 -0
  853. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  854. /package/dist/{web → cli}/types.js +0 -0
  855. /package/dist/{adapters/slack → harness}/tools/attach.d.ts +0 -0
  856. /package/dist/{tools → harness/tools}/react.d.ts +0 -0
@@ -1,12 +1,31 @@
1
- import { basename } from "path";
1
+ import { dirname, join, resolve } from "node:path";
2
+ import { existsSync, readdirSync } from "node:fs";
3
+ import { SessionStore } from "../../../sessions/session-store.js";
4
+ import { getThreadSessionFile, resolveChannelSessionFile, tryResolveThreadSession, } from "../../../sessions/store.js";
5
+ import { isPlatformHistorySession } from "../../../sessions/store.js";
6
+ import { basename } from "node:path";
7
+ import { InMemoryTokenStore } from "../token-store.js";
2
8
  import MarkdownIt from "markdown-it";
3
- import { readRawBody } from "../../utils/http-body.js";
4
- import { escapeHtml } from "../../utils/html.js";
5
- import * as log from "../../log.js";
6
- import { renderPortalShell } from "../../portal-shell.js";
7
- import { reportUserFacingError } from "../../observability/sentry.js";
8
- import { inferConversationKind } from "../../sessions/policy.js";
9
- import { loadSessionViewModel, resolveRequestedSessionFile, } from "./service.js";
9
+ import { createConversationEvent, createConversationMessage, } from "../../index.js";
10
+ import { createOfficeAddress } from "../../../office/index.js";
11
+ import * as log from "../../../log.js";
12
+ import { escapeHtml, jsonResponse as json, readJsonBody, renderPortalShell, } from "../portal-shell.js";
13
+ import { reportUserFacingError } from "../../../observability/index.js";
14
+ import { inferConversationKind } from "../../../sessions/session-key.js";
15
+ import { isThreadSessionKey, threadSuffixOf } from "../../../sessions/session-key.js";
16
+ const SESSION_VIEW_TOKEN_TTL_MS = 24 * 60 * 60 * 1000;
17
+ export class InMemorySessionViewTokenStore extends InMemoryTokenStore {
18
+ create(options) {
19
+ return this.createRecord(SESSION_VIEW_TOKEN_TTL_MS, {
20
+ platform: options.platform,
21
+ platformUserId: options.platformUserId,
22
+ ...(options.platformUserName ? { platformUserName: options.platformUserName } : {}),
23
+ conversationId: options.conversationId,
24
+ sessionKey: options.sessionKey,
25
+ sessionFile: options.sessionFile,
26
+ });
27
+ }
28
+ }
10
29
  const markdown = new MarkdownIt({
11
30
  html: false,
12
31
  linkify: true,
@@ -16,8 +35,8 @@ const defaultLinkOpen = markdown.renderer.rules.link_open;
16
35
  markdown.renderer.rules.link_open = (...args) => {
17
36
  const [tokens, idx, options, env, self] = args;
18
37
  const token = tokens[idx];
19
- token.attrSet("target", "_blank");
20
- token.attrSet("rel", "noreferrer noopener");
38
+ token?.attrSet("target", "_blank");
39
+ token?.attrSet("rel", "noreferrer noopener");
21
40
  return defaultLinkOpen
22
41
  ? defaultLinkOpen(tokens, idx, options, env, self)
23
42
  : self.renderToken(tokens, idx, options);
@@ -60,75 +79,93 @@ export async function handleSessionViewRequest(req, res, url, sessionViewTokenSt
60
79
  if (req.method !== "GET" || url.pathname !== "/session") {
61
80
  return false;
62
81
  }
63
- const token = url.searchParams.get("token")?.trim();
64
- if (!token || !sessionViewTokenStore) {
65
- res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
66
- res.end(renderStatusPage("Session unavailable", "This session link is invalid or has expired."));
82
+ const target = await resolveSessionRequestTarget(sessionViewTokenStore, url.searchParams.get("token"), url.searchParams.get("session"));
83
+ if (!target.ok) {
84
+ res.writeHead(target.status, { "Content-Type": "text/html; charset=utf-8" });
85
+ res.end(renderStatusPage("Session unavailable", target.message));
67
86
  return true;
68
87
  }
69
- const entry = sessionViewTokenStore.peek(token);
70
- if (!entry) {
71
- res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
72
- res.end(renderStatusPage("Session unavailable", "This session link is invalid or has expired."));
73
- return true;
74
- }
75
- const requestedSession = url.searchParams.get("session");
76
- let targetSessionFile;
88
+ const { activeSessionKey, entry, targetSessionFile } = target;
77
89
  try {
78
- targetSessionFile = resolveRequestedSessionFile(entry.sessionFile, requestedSession);
90
+ const model = await loadSessionViewModel(targetSessionFile);
91
+ const displayedSessionKey = activeSessionKey;
92
+ const isRunning = interactive?.handler.isRunning(createOfficeAddress(entry.platform, entry.conversationId), displayedSessionKey) ?? false;
93
+ res.writeHead(200, {
94
+ "Content-Type": "text/html; charset=utf-8",
95
+ "Cache-Control": "no-store",
96
+ });
97
+ res.end(renderSessionPage({
98
+ model,
99
+ token: entry.token,
100
+ expiresAt: entry.expiresAt,
101
+ isRunning,
102
+ displayedSessionKey,
103
+ conversationId: entry.conversationId,
104
+ }));
79
105
  }
80
106
  catch (error) {
81
- log.logWarning(`[${entry.conversationId}] Corrupted session file referenced for ${entry.sessionFile}`, error instanceof Error ? error.message : String(error));
107
+ log.logWarning(`[${entry.conversationId}] Failed to render session ${entry.sessionFile}`, error instanceof Error ? error.message : String(error));
82
108
  reportUserFacingError(error, {
83
109
  domain: "session_view",
84
110
  surface: "session_view",
85
- operation: "resolve_requested_session",
111
+ operation: "render_session",
86
112
  severity: "error",
87
113
  platform: entry.platform,
88
114
  context: {
89
115
  conversationId: entry.conversationId,
90
116
  sessionKey: entry.sessionKey,
91
- sessionFile: basename(entry.sessionFile),
92
- requestedSession,
117
+ sessionFile: basename(targetSessionFile),
93
118
  },
94
119
  });
95
120
  res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
96
- res.end(renderStatusPage("Session unavailable", "The selected session file appears to be corrupted."));
97
- return true;
121
+ res.end(renderStatusPage("Session unavailable", "The session could not be loaded right now."));
98
122
  }
99
- if (!targetSessionFile) {
100
- res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
101
- res.end(renderStatusPage("Session unavailable", "The selected session link is invalid."));
102
- return true;
123
+ return true;
124
+ }
125
+ /**
126
+ * Token/session selection is shared by HTML, SSE, and message transports.
127
+ * Invalid or expired client capabilities are 400; missing server wiring is
128
+ * 503; a selected corrupt session is a server-side storage failure and is 500.
129
+ */
130
+ async function resolveSessionRequestTarget(sessionViewTokenStore, rawToken, requestedSession) {
131
+ if (!sessionViewTokenStore) {
132
+ return { ok: false, status: 503, message: "Session view is not configured." };
103
133
  }
134
+ const token = rawToken?.trim() ?? "";
135
+ const entry = token ? sessionViewTokenStore.peek(token) : undefined;
136
+ if (!entry) {
137
+ return { ok: false, status: 400, message: "This session link is invalid or has expired." };
138
+ }
139
+ let targetSessionFile;
104
140
  try {
105
- const model = loadSessionViewModel(targetSessionFile);
106
- const displayedSessionKey = resolveDisplayedSessionKey(entry, targetSessionFile);
107
- const isRunning = interactive?.handler.isRunning(displayedSessionKey) ?? false;
108
- res.writeHead(200, {
109
- "Content-Type": "text/html; charset=utf-8",
110
- "Cache-Control": "no-store",
111
- });
112
- res.end(renderSessionPage(model, entry.token, entry.expiresAt, isRunning, displayedSessionKey, entry.conversationId));
141
+ targetSessionFile = await resolveRequestedSessionFile(entry.sessionFile, requestedSession);
113
142
  }
114
143
  catch (error) {
115
- log.logWarning(`[${entry.conversationId}] Failed to render session ${entry.sessionFile}`, error instanceof Error ? error.message : String(error));
144
+ log.logWarning(`[${entry.conversationId}] Corrupted session file referenced for ${entry.sessionFile}`, error instanceof Error ? error.message : String(error));
116
145
  reportUserFacingError(error, {
117
146
  domain: "session_view",
118
147
  surface: "session_view",
119
- operation: "render_session",
148
+ operation: "resolve_requested_session",
120
149
  severity: "error",
121
150
  platform: entry.platform,
122
151
  context: {
123
152
  conversationId: entry.conversationId,
124
153
  sessionKey: entry.sessionKey,
125
- sessionFile: basename(targetSessionFile),
154
+ sessionFile: basename(entry.sessionFile),
155
+ requestedSession,
126
156
  },
127
157
  });
128
- res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
129
- res.end(renderStatusPage("Session unavailable", "The session could not be loaded right now."));
158
+ return { ok: false, status: 500, message: "The selected session file is corrupted." };
130
159
  }
131
- return true;
160
+ if (!targetSessionFile) {
161
+ return { ok: false, status: 400, message: "The selected session is invalid." };
162
+ }
163
+ return {
164
+ ok: true,
165
+ entry,
166
+ targetSessionFile,
167
+ activeSessionKey: resolveDisplayedSessionKey(entry, targetSessionFile),
168
+ };
132
169
  }
133
170
  function resolveDisplayedSessionKey(entry, sessionFile) {
134
171
  if (entry.platform === "slack") {
@@ -148,7 +185,8 @@ function renderTimelineItems(items, token) {
148
185
  ? items.map((item) => renderItem(item, token)).join("\n")
149
186
  : `<div class="system-event"><span class="event-dot"></span><span class="event-text">No messages yet — send one to the bot, then refresh.</span></div>`;
150
187
  }
151
- function renderSessionPage(model, token, expiresAt, isRunning, displayedSessionKey, conversationId) {
188
+ function renderSessionPage(options) {
189
+ const { model, token, expiresAt, isRunning, displayedSessionKey, conversationId } = options;
152
190
  const items = renderTimelineItems(model.items, token);
153
191
  const relatedSections = model.parent
154
192
  ? `<section class="related-card stack">
@@ -235,11 +273,11 @@ export function parseUserBody(raw) {
235
273
  .filter(Boolean)
236
274
  .join(" ");
237
275
  return {
238
- timestamp: m[1],
239
- username: m[2],
276
+ timestamp: m[1] ?? null,
277
+ username: m[2] ?? null,
240
278
  threadTs: m[3] ?? null,
241
279
  header,
242
- content: m[4],
280
+ content: m[4] ?? "",
243
281
  };
244
282
  }
245
283
  // [username] [in-thread:ts]: content
@@ -248,10 +286,10 @@ export function parseUserBody(raw) {
248
286
  const header = [`[${m[1]}]`, m[2] ? `[in-thread:${m[2]}]` : ""].filter(Boolean).join(" ");
249
287
  return {
250
288
  timestamp: null,
251
- username: m[1],
289
+ username: m[1] ?? null,
252
290
  threadTs: m[2] ?? null,
253
291
  header,
254
- content: m[3],
292
+ content: m[3] ?? "",
255
293
  };
256
294
  }
257
295
  return { timestamp: null, username: null, threadTs: null, header: null, content: raw };
@@ -363,54 +401,28 @@ function renderLiveSystemEvent(text, tone = "default") {
363
401
  return `<div class="system-event${cls}" data-live-item><span class="event-dot"></span><span class="event-text">${esc(text)}</span></div>`;
364
402
  }
365
403
  async function handleSessionStreamRequest(req, res, url, sessionViewTokenStore, interactive) {
366
- const token = url.searchParams.get("token")?.trim() ?? "";
367
- if (!token || !sessionViewTokenStore || !interactive) {
368
- res.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
369
- res.end("Session stream unavailable");
370
- return;
371
- }
372
- const entry = sessionViewTokenStore.peek(token);
373
- if (!entry) {
374
- res.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
375
- res.end("Invalid session token");
376
- return;
377
- }
378
- const requestedSession = url.searchParams.get("session");
379
- let targetSessionFile;
380
- try {
381
- targetSessionFile = resolveRequestedSessionFile(entry.sessionFile, requestedSession);
382
- }
383
- catch (error) {
384
- reportUserFacingError(error, {
385
- domain: "session_view",
386
- surface: "session_view",
387
- operation: "session_stream",
388
- severity: "error",
389
- platform: entry.platform,
390
- context: {
391
- conversationId: entry.conversationId,
392
- sessionKey: entry.sessionKey,
393
- sessionFile: basename(entry.sessionFile),
394
- requestedSession,
395
- },
396
- });
397
- res.writeHead(500, { "Content-Type": "text/plain; charset=utf-8" });
398
- res.end("Session stream unavailable");
404
+ if (!interactive) {
405
+ res.writeHead(503, { "Content-Type": "text/plain; charset=utf-8" });
406
+ res.end("Session stream is not configured.");
399
407
  return;
400
408
  }
401
- if (!targetSessionFile) {
402
- res.writeHead(400, { "Content-Type": "text/plain; charset=utf-8" });
403
- res.end("Invalid session file");
409
+ const target = await resolveSessionRequestTarget(sessionViewTokenStore, url.searchParams.get("token"), url.searchParams.get("session"));
410
+ if (!target.ok) {
411
+ res.writeHead(target.status, { "Content-Type": "text/plain; charset=utf-8" });
412
+ res.end(target.message);
404
413
  return;
405
414
  }
406
- const activeSessionKey = resolveDisplayedSessionKey(entry, targetSessionFile);
415
+ const { activeSessionKey, entry } = target;
407
416
  const streamKey = sessionStreamKey({ ...entry, sessionKey: activeSessionKey });
408
417
  res.writeHead(200, {
409
418
  "Content-Type": "text/event-stream; charset=utf-8",
410
419
  "Cache-Control": "no-store",
411
420
  Connection: "keep-alive",
412
421
  });
413
- res.write(`data: ${JSON.stringify({ type: "status", running: interactive.handler.isRunning(activeSessionKey) })}\n\n`);
422
+ res.write(`data: ${JSON.stringify({
423
+ type: "status",
424
+ running: interactive.handler.isRunning(createOfficeAddress(entry.platform, entry.conversationId), activeSessionKey),
425
+ })}\n\n`);
414
426
  const unsubscribe = sessionViewStreamHub.subscribe(streamKey, (event) => {
415
427
  res.write(`data: ${JSON.stringify(event)}\n\n`);
416
428
  });
@@ -423,64 +435,43 @@ async function handleSessionStreamRequest(req, res, url, sessionViewTokenStore,
423
435
  });
424
436
  }
425
437
  async function handleSessionMessageRequest(req, res, sessionViewTokenStore, interactive) {
426
- if (!sessionViewTokenStore || !interactive) {
438
+ if (!interactive) {
427
439
  json(res, 503, { ok: false, error: "Session chat is not configured." });
428
440
  return;
429
441
  }
430
- const rawBody = await readRawBody(req, res, 1024 * 1024);
431
- if (rawBody === null)
432
- return;
433
- let body;
434
- try {
435
- body = JSON.parse(rawBody);
436
- }
437
- catch {
438
- json(res, 400, { ok: false, error: "Invalid request body." });
442
+ const body = await readJsonBody(req, res, 1024 * 1024);
443
+ if (!body)
439
444
  return;
440
- }
441
- const token = body.token?.trim() ?? "";
442
- const text = body.text?.trim() ?? "";
443
- const requestedSession = body.session?.trim() || null;
444
- const requestedSessionKey = body.sessionKey?.trim() || "";
445
+ const token = typeof body.token === "string" ? body.token.trim() : "";
446
+ const text = typeof body.text === "string" ? body.text.trim() : "";
447
+ const requestedSession = typeof body.session === "string" ? body.session.trim() || null : null;
448
+ const requestedSessionKey = typeof body.sessionKey === "string" ? body.sessionKey.trim() : "";
445
449
  if (!token || !text) {
446
450
  json(res, 400, { ok: false, error: "Missing token or text." });
447
451
  return;
448
452
  }
449
- const entry = sessionViewTokenStore.peek(token);
450
- if (!entry) {
451
- json(res, 400, { ok: false, error: "This session link is invalid or has expired." });
453
+ const target = await resolveSessionRequestTarget(sessionViewTokenStore, token, requestedSession);
454
+ if (!target.ok) {
455
+ json(res, target.status, { ok: false, error: target.message });
452
456
  return;
453
457
  }
454
- let targetSessionFile;
455
- try {
456
- targetSessionFile = resolveRequestedSessionFile(entry.sessionFile, requestedSession);
457
- }
458
- catch (error) {
459
- reportUserFacingError(error, {
460
- domain: "session_view",
461
- surface: "session_view",
462
- operation: "session_message",
463
- severity: "error",
464
- platform: entry.platform,
465
- context: {
466
- conversationId: entry.conversationId,
467
- sessionKey: entry.sessionKey,
468
- sessionFile: basename(entry.sessionFile),
469
- requestedSession,
470
- },
471
- });
472
- json(res, 500, { ok: false, error: "Session file could not be loaded." });
473
- return;
474
- }
475
- if (!targetSessionFile) {
476
- json(res, 400, { ok: false, error: "Invalid session file." });
477
- return;
478
- }
479
- const activeSessionKey = resolveDisplayedSessionKey(entry, targetSessionFile);
458
+ const { activeSessionKey, entry, targetSessionFile } = target;
480
459
  if (requestedSessionKey && requestedSessionKey !== activeSessionKey) {
481
460
  json(res, 400, { ok: false, error: "Session target mismatch." });
482
461
  return;
483
462
  }
463
+ await dispatchSessionViewMessage({
464
+ res,
465
+ interactive,
466
+ token,
467
+ text,
468
+ activeSessionKey,
469
+ entry,
470
+ targetSessionFile,
471
+ });
472
+ }
473
+ async function dispatchSessionViewMessage(input) {
474
+ const { res, interactive, token, text, activeSessionKey, entry, targetSessionFile } = input;
484
475
  const bot = interactive.botsByPlatform[entry.platform];
485
476
  if (!bot) {
486
477
  json(res, 503, { ok: false, error: `No bot configured for ${entry.platform}.` });
@@ -497,7 +488,8 @@ async function handleSessionMessageRequest(req, res, sessionViewTokenStore, inte
497
488
  const responder = createSessionViewResponseContext((event) => {
498
489
  sessionViewStreamHub.publish(streamKey, event);
499
490
  });
500
- const event = {
491
+ const event = createConversationEvent({
492
+ platform: entry.platform,
501
493
  type: "session_view",
502
494
  conversationId: entry.conversationId,
503
495
  conversationKind,
@@ -506,21 +498,25 @@ async function handleSessionMessageRequest(req, res, sessionViewTokenStore, inte
506
498
  text,
507
499
  attachments: [],
508
500
  sessionKey: activeSessionKey,
509
- ...(activeSessionKey.includes(":")
510
- ? { thread_ts: activeSessionKey.split(":").slice(1).join(":") }
501
+ ...(isThreadSessionKey(activeSessionKey)
502
+ ? { thread_ts: threadSuffixOf(activeSessionKey) }
511
503
  : {}),
512
- };
504
+ });
505
+ const message = createConversationMessage({
506
+ platform: entry.platform,
507
+ conversationId: entry.conversationId,
508
+ id: ts,
509
+ sessionKey: activeSessionKey,
510
+ conversationKind,
511
+ userId: entry.platformUserId,
512
+ userName: platformUserName,
513
+ text,
514
+ attachments: [],
515
+ threadTs: event.thread_ts,
516
+ });
513
517
  const context = {
514
- message: {
515
- id: ts,
516
- sessionKey: activeSessionKey,
517
- conversationKind,
518
- userId: entry.platformUserId,
519
- userName: platformUserName,
520
- text,
521
- attachments: [],
522
- threadTs: event.thread_ts,
523
- },
518
+ address: event.address,
519
+ message,
524
520
  responder,
525
521
  platform: { ...platformInfo, diagnostics: { showUsageSummary: false } },
526
522
  };
@@ -531,12 +527,8 @@ async function handleSessionMessageRequest(req, res, sessionViewTokenStore, inte
531
527
  });
532
528
  void interactive.handler
533
529
  .handleEvent(event, bot, context)
534
- .then(() => {
535
- if (!targetSessionFile) {
536
- sessionViewStreamHub.publish(streamKey, { type: "status", running: false });
537
- return;
538
- }
539
- const model = loadSessionViewModel(targetSessionFile);
530
+ .then(async () => {
531
+ const model = await loadSessionViewModel(targetSessionFile);
540
532
  sessionViewStreamHub.publish(streamKey, {
541
533
  type: "refresh",
542
534
  timelineHtml: renderTimelineItems(model.items, token),
@@ -600,13 +592,6 @@ function createSessionViewResponseContext(publish) {
600
592
  },
601
593
  };
602
594
  }
603
- function json(res, status, body) {
604
- res.writeHead(status, {
605
- "Content-Type": "application/json; charset=utf-8",
606
- "Cache-Control": "no-store",
607
- });
608
- res.end(JSON.stringify(body));
609
- }
610
595
  function renderStatusPage(title, message) {
611
596
  return renderHtmlDocument(title, `<section class="card stack">
612
597
  <p class="eyebrow">mikan</p>
@@ -1648,4 +1633,490 @@ const sessionViewStyles = `
1648
1633
  .asst-card { border-radius: 4px 14px 14px 14px; }
1649
1634
  }
1650
1635
  `;
1636
+ // ── Session view model (formerly service.ts) ──────────────────────────────────
1637
+ function entryIsoTime(entry) {
1638
+ if (!entry || typeof entry.timestamp !== "number" || !Number.isFinite(entry.timestamp)) {
1639
+ return undefined;
1640
+ }
1641
+ return new Date(entry.timestamp).toISOString();
1642
+ }
1643
+ export function resolveExistingSessionFile(conversationDir, sessionKey) {
1644
+ if (isThreadSessionKey(sessionKey)) {
1645
+ return tryResolveThreadSession(getThreadSessionFile(conversationDir, sessionKey));
1646
+ }
1647
+ return resolveChannelSessionFile(conversationDir);
1648
+ }
1649
+ export async function loadSessionViewModel(sessionFile) {
1650
+ const resolvedFile = resolve(sessionFile);
1651
+ const sm = await SessionStore.inspect(resolvedFile);
1652
+ const header = sm.getHeader();
1653
+ const entries = await sm.getEntries();
1654
+ const updatedAt = entryIsoTime(entries.at(-1)) ?? header.timestamp;
1655
+ const title = (await sm.getSessionName()) || `Session ${header.id.slice(0, 8)}`;
1656
+ const parent = await resolveParentRelation(resolvedFile, header);
1657
+ const threadCandidates = [];
1658
+ for (const candidate of listRelatedSessionFiles(resolvedFile)) {
1659
+ if (candidate === resolvedFile)
1660
+ continue;
1661
+ const relation = await buildSessionRelation(candidate, "thread", resolvedFile, header.id, entries);
1662
+ if (relation)
1663
+ threadCandidates.push(relation);
1664
+ }
1665
+ const threads = threadCandidates.toSorted((a, b) => a.updatedAt < b.updatedAt ? -1 : a.updatedAt > b.updatedAt ? 1 : 0);
1666
+ const threadsByEntryId = new Map();
1667
+ for (const thread of threads) {
1668
+ if (!thread.anchorEntryId)
1669
+ continue;
1670
+ const bucket = threadsByEntryId.get(thread.anchorEntryId) ?? [];
1671
+ bucket.push(thread);
1672
+ threadsByEntryId.set(thread.anchorEntryId, bucket);
1673
+ }
1674
+ const items = entries.flatMap((entry) => {
1675
+ const item = mapEntryToItem(entry);
1676
+ if (!item)
1677
+ return [];
1678
+ if (item.entryId) {
1679
+ const anchoredThreads = threadsByEntryId.get(item.entryId);
1680
+ if (anchoredThreads) {
1681
+ item.threads = anchoredThreads;
1682
+ }
1683
+ }
1684
+ return [item];
1685
+ });
1686
+ return {
1687
+ sessionId: header.id,
1688
+ fileName: basename(resolvedFile),
1689
+ title,
1690
+ createdAt: header.timestamp,
1691
+ updatedAt,
1692
+ entryCount: entries.length,
1693
+ items,
1694
+ parent: parent ?? undefined,
1695
+ threads,
1696
+ };
1697
+ }
1698
+ async function resolveRequestedSessionFile(baseSessionFile, requestedFileName) {
1699
+ const resolvedBase = resolve(baseSessionFile);
1700
+ if (!requestedFileName)
1701
+ return resolvedBase;
1702
+ const trimmed = requestedFileName.trim();
1703
+ if (!trimmed)
1704
+ return resolvedBase;
1705
+ const fileName = basename(trimmed);
1706
+ if (fileName !== trimmed || !fileName.endsWith(".jsonl"))
1707
+ return null;
1708
+ const candidate = join(dirname(resolvedBase), fileName);
1709
+ if (!existsSync(candidate))
1710
+ return null;
1711
+ try {
1712
+ if (!SessionStore.readHeader(candidate))
1713
+ throw new Error("Invalid session header");
1714
+ }
1715
+ catch (err) {
1716
+ throw new Error(`Session file is corrupted: ${candidate}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
1717
+ }
1718
+ return candidate;
1719
+ }
1720
+ function listRelatedSessionFiles(sessionFile) {
1721
+ const dir = dirname(sessionFile);
1722
+ if (!existsSync(dir))
1723
+ return [];
1724
+ return readdirSync(dir)
1725
+ .filter((name) => name.endsWith(".jsonl"))
1726
+ .map((fileName) => join(dir, fileName));
1727
+ }
1728
+ async function buildSessionRelation(sessionFile, kind, expectedParent, expectedParentId, expectedParentEntries) {
1729
+ let sm;
1730
+ try {
1731
+ sm = await SessionStore.inspect(sessionFile);
1732
+ }
1733
+ catch (err) {
1734
+ log.logWarning(`Skipping corrupted session file while building ${kind} relation: ${sessionFile}`, err instanceof Error ? err.message : String(err));
1735
+ return null;
1736
+ }
1737
+ const header = sm.getHeader();
1738
+ if (kind === "thread" &&
1739
+ !isChildThreadSession(sessionFile, header.parentSession, expectedParent, expectedParentId, header.parentSessionId)) {
1740
+ return null;
1741
+ }
1742
+ const entries = await sm.getEntries();
1743
+ const updatedAt = entryIsoTime(entries.at(-1)) ?? header.timestamp;
1744
+ const threadId = kind === "thread" ? getFixedThreadSessionId(sessionFile) : null;
1745
+ const anchorEntryId = kind === "thread" && expectedParent
1746
+ ? findThreadAnchorEntryId(expectedParentEntries ??
1747
+ (await (await SessionStore.inspect(expectedParent)).getEntries()), entries, threadId)
1748
+ : undefined;
1749
+ return {
1750
+ kind,
1751
+ fileName: basename(sessionFile),
1752
+ sessionId: header.id,
1753
+ title: (await sm.getSessionName()) || `Session ${header.id.slice(0, 8)}`,
1754
+ updatedAt,
1755
+ entryCount: entries.length,
1756
+ summary: extractSessionSummary(entries),
1757
+ anchorEntryId,
1758
+ };
1759
+ }
1760
+ async function resolveParentRelation(sessionFile, header) {
1761
+ if (header.parentSession) {
1762
+ const parentPath = resolve(header.parentSession);
1763
+ if (existsSync(parentPath)) {
1764
+ return (await buildSessionRelation(parentPath, "parent")) ?? undefined;
1765
+ }
1766
+ // Path is stale — try UUID fallback before heuristic.
1767
+ if (header.parentSessionId) {
1768
+ const found = findSessionFileById(dirname(sessionFile), header.parentSessionId);
1769
+ if (found)
1770
+ return (await buildSessionRelation(found, "parent")) ?? undefined;
1771
+ }
1772
+ }
1773
+ return buildInferredThreadParentRelation(sessionFile);
1774
+ }
1775
+ function findSessionFileById(sessionDir, targetId) {
1776
+ if (!existsSync(sessionDir))
1777
+ return null;
1778
+ for (const name of readdirSync(sessionDir)) {
1779
+ if (!name.endsWith(".jsonl"))
1780
+ continue;
1781
+ try {
1782
+ const filePath = join(sessionDir, name);
1783
+ if (SessionStore.readHeader(filePath)?.id === targetId)
1784
+ return filePath;
1785
+ }
1786
+ catch {
1787
+ continue;
1788
+ }
1789
+ }
1790
+ return null;
1791
+ }
1792
+ async function buildInferredThreadParentRelation(sessionFile) {
1793
+ if (!getFixedThreadSessionId(sessionFile))
1794
+ return undefined;
1795
+ const parentSession = resolveChannelSessionFile(dirname(dirname(sessionFile)));
1796
+ if (!parentSession || parentSession === sessionFile)
1797
+ return undefined;
1798
+ return (await buildSessionRelation(parentSession, "parent")) ?? undefined;
1799
+ }
1800
+ function isChildThreadSession(sessionFile, parentSession, expectedParent, expectedParentId, threadParentSessionId) {
1801
+ if (!expectedParent)
1802
+ return false;
1803
+ if (parentSession) {
1804
+ const resolvedParent = resolve(parentSession);
1805
+ if (resolvedParent === expectedParent ||
1806
+ (isPlatformHistorySession(expectedParent) && isPlatformHistorySession(resolvedParent))) {
1807
+ return true;
1808
+ }
1809
+ // Path is stale — fall back to UUID comparison.
1810
+ if (expectedParentId && threadParentSessionId) {
1811
+ return threadParentSessionId === expectedParentId;
1812
+ }
1813
+ return false;
1814
+ }
1815
+ if (!getFixedThreadSessionId(sessionFile))
1816
+ return false;
1817
+ return resolveChannelSessionFile(dirname(dirname(sessionFile))) === expectedParent;
1818
+ }
1819
+ function getFixedThreadSessionId(sessionFile) {
1820
+ const fileName = basename(sessionFile);
1821
+ if (!fileName.endsWith(".jsonl"))
1822
+ return null;
1823
+ if (/^\d{4}-\d{2}-\d{2}T.+_[0-9a-f]{8}\.jsonl$/i.test(fileName))
1824
+ return null;
1825
+ return fileName.slice(0, -".jsonl".length);
1826
+ }
1827
+ function findThreadAnchorEntryId(parentEntries, childEntries, threadId) {
1828
+ const threadTimestamp = threadId ? Number(threadId) * 1000 : undefined;
1829
+ if (threadTimestamp !== undefined && Number.isFinite(threadTimestamp)) {
1830
+ const timestampAnchor = findEntryIdByMessageTimestamp(parentEntries, threadTimestamp);
1831
+ if (timestampAnchor)
1832
+ return timestampAnchor;
1833
+ }
1834
+ let sharedCount = 0;
1835
+ while (sharedCount < parentEntries.length &&
1836
+ sharedCount < childEntries.length &&
1837
+ parentEntries[sharedCount]?.id === childEntries[sharedCount]?.id) {
1838
+ sharedCount += 1;
1839
+ }
1840
+ if (sharedCount > 0) {
1841
+ return parentEntries[sharedCount - 1]?.id;
1842
+ }
1843
+ const contentAnchor = findSharedContentAnchorEntryId(parentEntries, childEntries);
1844
+ if (contentAnchor)
1845
+ return contentAnchor;
1846
+ const childRoot = findComparableUserMessage(childEntries);
1847
+ if (!childRoot)
1848
+ return undefined;
1849
+ return findParentAnchorByRootMessage(parentEntries, childRoot);
1850
+ }
1851
+ function findEntryIdByMessageTimestamp(entries, timestamp) {
1852
+ for (const entry of entries) {
1853
+ if (entry.type !== "message")
1854
+ continue;
1855
+ const messageTimestamp = entry.message.timestamp;
1856
+ if (messageTimestamp === timestamp)
1857
+ return entry.id;
1858
+ }
1859
+ return undefined;
1860
+ }
1861
+ function findSharedContentAnchorEntryId(parentEntries, childEntries) {
1862
+ const parentMessages = parentEntries.flatMap((entry) => {
1863
+ const comparable = getComparableSessionMessage(entry);
1864
+ return comparable ? [comparable] : [];
1865
+ });
1866
+ const childMessages = childEntries.flatMap((entry) => {
1867
+ const comparable = getComparableSessionMessage(entry);
1868
+ return comparable ? [comparable] : [];
1869
+ });
1870
+ if (parentMessages.length === 0 || childMessages.length === 0)
1871
+ return undefined;
1872
+ let bestParentEnd = -1;
1873
+ let bestLength = 0;
1874
+ for (let parentStart = 0; parentStart < parentMessages.length; parentStart++) {
1875
+ let length = 0;
1876
+ while (parentStart + length < parentMessages.length && length < childMessages.length) {
1877
+ const parentMessage = parentMessages[parentStart + length];
1878
+ const childMessage = childMessages[length];
1879
+ if (parentMessage === undefined ||
1880
+ childMessage === undefined ||
1881
+ parentMessage.role !== childMessage.role ||
1882
+ parentMessage.normalizedText !== childMessage.normalizedText) {
1883
+ break;
1884
+ }
1885
+ length += 1;
1886
+ }
1887
+ if (length > bestLength) {
1888
+ bestLength = length;
1889
+ bestParentEnd = parentStart + length - 1;
1890
+ }
1891
+ }
1892
+ return bestLength > 0 ? parentMessages[bestParentEnd]?.entryId : undefined;
1893
+ }
1894
+ function getComparableSessionMessage(entry) {
1895
+ if (entry.type !== "message")
1896
+ return null;
1897
+ const role = entry.message.role;
1898
+ if (role !== "user" && role !== "assistant")
1899
+ return null;
1900
+ const body = contentToText(entry.message.content);
1901
+ const normalizedText = normalizeComparableSessionText(body, role);
1902
+ if (!normalizedText)
1903
+ return null;
1904
+ return { entryId: entry.id, role, normalizedText };
1905
+ }
1906
+ function normalizeComparableSessionText(text, role) {
1907
+ const normalized = role === "user" ? normalizeComparableUserText(text) : text.trim();
1908
+ return normalized.replace(/\s+/g, " ").trim();
1909
+ }
1910
+ function findParentAnchorByRootMessage(parentEntries, childRoot) {
1911
+ let textMatchId;
1912
+ for (const entry of parentEntries) {
1913
+ const comparable = getComparableUserMessage(entry);
1914
+ if (!comparable)
1915
+ continue;
1916
+ if (comparable.normalizedText !== childRoot.normalizedText)
1917
+ continue;
1918
+ if (childRoot.messageTimestamp !== undefined &&
1919
+ comparable.messageTimestamp !== undefined &&
1920
+ comparable.messageTimestamp === childRoot.messageTimestamp) {
1921
+ return entry.id;
1922
+ }
1923
+ textMatchId ??= entry.id;
1924
+ }
1925
+ return textMatchId;
1926
+ }
1927
+ function findComparableUserMessage(entries) {
1928
+ for (const entry of entries) {
1929
+ const comparable = getComparableUserMessage(entry);
1930
+ if (comparable)
1931
+ return comparable;
1932
+ }
1933
+ return null;
1934
+ }
1935
+ function getComparableUserMessage(entry) {
1936
+ if (entry.type !== "message" || entry.message.role !== "user")
1937
+ return null;
1938
+ const body = contentToText(entry.message.content);
1939
+ const normalizedText = normalizeComparableUserText(body);
1940
+ if (!normalizedText)
1941
+ return null;
1942
+ const messageTimestamp = typeof entry.message.timestamp === "number" ? entry.message.timestamp : undefined;
1943
+ return { normalizedText, messageTimestamp };
1944
+ }
1945
+ function normalizeComparableUserText(text) {
1946
+ const withoutTimestamp = text.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)/, "");
1947
+ return withoutTimestamp
1948
+ .replace(/\n*<slack_attachments>\n[\s\S]*?\n<\/slack_attachments>\s*$/g, "")
1949
+ .trim();
1950
+ }
1951
+ function extractSessionSummary(entries) {
1952
+ for (const entry of entries) {
1953
+ if (entry.type !== "message")
1954
+ continue;
1955
+ const item = mapEntryToItem(entry);
1956
+ if (!item?.body)
1957
+ continue;
1958
+ return collapseSummary(item.body);
1959
+ }
1960
+ return undefined;
1961
+ }
1962
+ function collapseSummary(text) {
1963
+ const singleLine = text.replace(/\s+/g, " ").trim();
1964
+ return singleLine.length > 96 ? `${singleLine.slice(0, 93)}…` : singleLine;
1965
+ }
1966
+ function mapEntryToItem(entry) {
1967
+ switch (entry.type) {
1968
+ case "message":
1969
+ return mapMessageEntry(entry);
1970
+ case "compaction":
1971
+ return mapCompactionEntry(entry);
1972
+ case "branch_summary":
1973
+ return mapSessionSummaryEntry(entry);
1974
+ case "custom":
1975
+ return {
1976
+ kind: "system",
1977
+ title: `Custom data · ${entry.customType}`,
1978
+ body: entry.data === undefined ? "(no data)" : JSON.stringify(entry.data, null, 2),
1979
+ meta: entryIsoTime(entry) ?? "",
1980
+ tone: "muted",
1981
+ };
1982
+ default:
1983
+ return null;
1984
+ }
1985
+ }
1986
+ function mapMessageEntry(entry) {
1987
+ const message = entry.message;
1988
+ switch (message.role) {
1989
+ case "user":
1990
+ return {
1991
+ kind: "user",
1992
+ title: "User",
1993
+ body: contentToText(message.content),
1994
+ meta: entryIsoTime(entry) ?? "",
1995
+ entryId: entry.id,
1996
+ };
1997
+ case "assistant": {
1998
+ const assistantBody = contentToText(message.content) || (message.errorMessage ? `_${message.errorMessage}_` : "");
1999
+ const metaParts = [message.provider, message.model, message.stopReason].filter(Boolean);
2000
+ return {
2001
+ kind: "assistant",
2002
+ title: "Assistant",
2003
+ body: assistantBody,
2004
+ meta: metaParts.length > 0
2005
+ ? `${entryIsoTime(entry) ?? ""} · ${metaParts.join(" · ")}`
2006
+ : (entryIsoTime(entry) ?? ""),
2007
+ entryId: entry.id,
2008
+ };
2009
+ }
2010
+ case "toolResult":
2011
+ return {
2012
+ kind: "tool",
2013
+ title: `Tool result · ${String(message.toolName ?? "unknown")}`,
2014
+ body: contentToText(message.content),
2015
+ meta: entryIsoTime(entry) ?? "",
2016
+ tone: message.isError ? "err" : "ok",
2017
+ entryId: entry.id,
2018
+ };
2019
+ case "bashExecution": {
2020
+ const command = String(message.command ?? "").trim();
2021
+ const output = String(message.output ?? "").trim();
2022
+ const details = [
2023
+ typeof message.exitCode === "number" ? `[exitCode] ${message.exitCode}` : "",
2024
+ message.cancelled ? `[cancelled] true` : "",
2025
+ message.truncated ? `[truncated] true` : "",
2026
+ ].filter(Boolean);
2027
+ const body = [command ? `$ ${command}` : "", output, ...details].filter(Boolean).join("\n\n");
2028
+ return {
2029
+ kind: "tool",
2030
+ title: "Bash execution",
2031
+ body: body || "(no output)",
2032
+ meta: entryIsoTime(entry) ?? "",
2033
+ entryId: entry.id,
2034
+ };
2035
+ }
2036
+ case "custom":
2037
+ return {
2038
+ kind: "system",
2039
+ title: `Custom message · ${String(message.customType ?? "custom")}`,
2040
+ body: contentToText(message.content),
2041
+ meta: entryIsoTime(entry) ?? "",
2042
+ tone: "muted",
2043
+ entryId: entry.id,
2044
+ };
2045
+ case "branchSummary":
2046
+ return {
2047
+ kind: "system",
2048
+ title: "Session summary",
2049
+ body: String(message.summary ?? ""),
2050
+ meta: entryIsoTime(entry) ?? "",
2051
+ tone: "muted",
2052
+ entryId: entry.id,
2053
+ };
2054
+ case "compactionSummary":
2055
+ return {
2056
+ kind: "system",
2057
+ title: "Compaction summary",
2058
+ body: String(message.summary ?? ""),
2059
+ meta: entryIsoTime(entry) ?? "",
2060
+ tone: "muted",
2061
+ entryId: entry.id,
2062
+ };
2063
+ default:
2064
+ return {
2065
+ kind: "system",
2066
+ title: `Message · ${String(message.role ?? "unknown")}`,
2067
+ body: contentToText(message.content),
2068
+ meta: entryIsoTime(entry) ?? "",
2069
+ tone: "muted",
2070
+ entryId: entry.id,
2071
+ };
2072
+ }
2073
+ }
2074
+ function mapCompactionEntry(entry) {
2075
+ return {
2076
+ kind: "system",
2077
+ title: "Context compacted",
2078
+ body: entry.summary,
2079
+ meta: `${entryIsoTime(entry) ?? ""} · ${entry.tokensBefore} tokens before compaction`,
2080
+ tone: "muted",
2081
+ };
2082
+ }
2083
+ function mapSessionSummaryEntry(entry) {
2084
+ return {
2085
+ kind: "system",
2086
+ title: "Session summary",
2087
+ body: entry.summary,
2088
+ meta: entryIsoTime(entry) ?? "",
2089
+ tone: "muted",
2090
+ };
2091
+ }
2092
+ function contentToText(content) {
2093
+ if (typeof content === "string")
2094
+ return content;
2095
+ if (!Array.isArray(content))
2096
+ return "";
2097
+ const lines = [];
2098
+ for (const block of content) {
2099
+ if (!block || typeof block !== "object")
2100
+ continue;
2101
+ const value = block;
2102
+ if (value.type === "text" && typeof value.text === "string") {
2103
+ lines.push(value.text);
2104
+ continue;
2105
+ }
2106
+ if (value.type === "thinking" && typeof value.thinking === "string") {
2107
+ lines.push(`[thinking]\n${value.thinking}`);
2108
+ continue;
2109
+ }
2110
+ if (value.type === "toolCall") {
2111
+ const name = typeof value.name === "string" ? value.name : "tool";
2112
+ const args = value.arguments === undefined ? "" : JSON.stringify(value.arguments, null, 2);
2113
+ lines.push([`[toolCall] ${name}`, args].filter(Boolean).join("\n"));
2114
+ continue;
2115
+ }
2116
+ if (value.type === "image") {
2117
+ lines.push(`[image ${String(value.mimeType ?? "unknown")}]`);
2118
+ }
2119
+ }
2120
+ return lines.join("\n\n");
2121
+ }
1651
2122
  //# sourceMappingURL=portal.js.map