@geminixiang/mikan 1.0.0-beta.8 → 1.0.0-beta.80

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 (900) hide show
  1. package/CHANGELOG.md +1149 -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 +12 -9
  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 +158 -0
  13. package/dist/adapters/commands/login.js.map +1 -0
  14. package/dist/adapters/commands/manifest.d.ts +17 -0
  15. package/dist/adapters/commands/manifest.d.ts.map +1 -0
  16. package/dist/adapters/commands/manifest.js +121 -0
  17. package/dist/adapters/commands/manifest.js.map +1 -0
  18. package/dist/adapters/commands/model.d.ts +9 -0
  19. package/dist/adapters/commands/model.d.ts.map +1 -0
  20. package/dist/adapters/commands/model.js +136 -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 +39 -0
  24. package/dist/adapters/commands/new.js.map +1 -0
  25. package/dist/adapters/commands/registry.d.ts +4 -0
  26. package/dist/adapters/commands/registry.d.ts.map +1 -0
  27. package/dist/adapters/commands/registry.js +35 -0
  28. package/dist/adapters/commands/registry.js.map +1 -0
  29. package/dist/{commands → adapters/commands}/sandbox.d.ts +0 -1
  30. package/dist/adapters/commands/sandbox.d.ts.map +1 -0
  31. package/dist/adapters/commands/sandbox.js +125 -0
  32. package/dist/adapters/commands/sandbox.js.map +1 -0
  33. package/dist/adapters/commands/session-view.d.ts.map +1 -0
  34. package/dist/{commands → adapters/commands}/session-view.js +21 -16
  35. package/dist/adapters/commands/session-view.js.map +1 -0
  36. package/dist/adapters/commands/types.d.ts +105 -0
  37. package/dist/adapters/commands/types.d.ts.map +1 -0
  38. package/dist/adapters/commands/types.js.map +1 -0
  39. package/dist/adapters/commands/utils.d.ts +11 -0
  40. package/dist/adapters/commands/utils.d.ts.map +1 -0
  41. package/dist/{commands → adapters/commands}/utils.js +15 -1
  42. package/dist/adapters/commands/utils.js.map +1 -0
  43. package/dist/adapters/discord/bot.d.ts +10 -17
  44. package/dist/adapters/discord/bot.d.ts.map +1 -1
  45. package/dist/adapters/discord/bot.js +232 -297
  46. package/dist/adapters/discord/bot.js.map +1 -1
  47. package/dist/adapters/discord/components.d.ts +4 -0
  48. package/dist/adapters/discord/components.d.ts.map +1 -0
  49. package/dist/adapters/discord/components.js +9 -0
  50. package/dist/adapters/discord/components.js.map +1 -0
  51. package/dist/adapters/discord/context.d.ts +3 -7
  52. package/dist/adapters/discord/context.d.ts.map +1 -1
  53. package/dist/adapters/discord/context.js +55 -219
  54. package/dist/adapters/discord/context.js.map +1 -1
  55. package/dist/adapters/discord/format.d.ts +2 -0
  56. package/dist/adapters/discord/format.d.ts.map +1 -0
  57. package/dist/adapters/discord/format.js +47 -0
  58. package/dist/adapters/discord/format.js.map +1 -0
  59. package/dist/adapters/discord/types.d.ts +90 -1
  60. package/dist/adapters/discord/types.d.ts.map +1 -1
  61. package/dist/adapters/discord/types.js.map +1 -1
  62. package/dist/adapters/github/bot.d.ts +25 -9
  63. package/dist/adapters/github/bot.d.ts.map +1 -1
  64. package/dist/adapters/github/bot.js +326 -154
  65. package/dist/adapters/github/bot.js.map +1 -1
  66. package/dist/adapters/github/client.d.ts +35 -23
  67. package/dist/adapters/github/client.d.ts.map +1 -1
  68. package/dist/adapters/github/client.js +121 -28
  69. package/dist/adapters/github/client.js.map +1 -1
  70. package/dist/adapters/github/context.d.ts +3 -8
  71. package/dist/adapters/github/context.d.ts.map +1 -1
  72. package/dist/adapters/github/context.js +64 -131
  73. package/dist/adapters/github/context.js.map +1 -1
  74. package/dist/adapters/github/github-ops.d.ts +22 -0
  75. package/dist/adapters/github/github-ops.d.ts.map +1 -0
  76. package/dist/adapters/github/github-ops.js +277 -0
  77. package/dist/adapters/github/github-ops.js.map +1 -0
  78. package/dist/adapters/github/ids.d.ts +2 -23
  79. package/dist/adapters/github/ids.d.ts.map +1 -1
  80. package/dist/adapters/github/ids.js +6 -36
  81. package/dist/adapters/github/ids.js.map +1 -1
  82. package/dist/adapters/github/repo.d.ts +8 -0
  83. package/dist/adapters/github/repo.d.ts.map +1 -0
  84. package/dist/adapters/github/repo.js +92 -0
  85. package/dist/adapters/github/repo.js.map +1 -0
  86. package/dist/adapters/github/tool-pack.d.ts +4 -0
  87. package/dist/adapters/github/tool-pack.d.ts.map +1 -0
  88. package/dist/adapters/github/tool-pack.js +45 -0
  89. package/dist/adapters/github/tool-pack.js.map +1 -0
  90. package/dist/adapters/github/tools/checks.d.ts +14 -0
  91. package/dist/adapters/github/tools/checks.d.ts.map +1 -0
  92. package/dist/adapters/github/tools/checks.js +80 -0
  93. package/dist/adapters/github/tools/checks.js.map +1 -0
  94. package/dist/adapters/github/tools/issue.d.ts +18 -0
  95. package/dist/adapters/github/tools/issue.d.ts.map +1 -0
  96. package/dist/adapters/github/tools/issue.js +44 -0
  97. package/dist/adapters/github/tools/issue.js.map +1 -0
  98. package/dist/adapters/github/tools/pr.d.ts +17 -0
  99. package/dist/adapters/github/tools/pr.d.ts.map +1 -0
  100. package/dist/adapters/github/tools/pr.js +42 -0
  101. package/dist/adapters/github/tools/pr.js.map +1 -0
  102. package/dist/adapters/github/tools/read.d.ts +17 -0
  103. package/dist/adapters/github/tools/read.d.ts.map +1 -0
  104. package/dist/adapters/github/tools/read.js +134 -0
  105. package/dist/adapters/github/tools/read.js.map +1 -0
  106. package/dist/adapters/github/tools/review-reply.d.ts +14 -0
  107. package/dist/adapters/github/tools/review-reply.d.ts.map +1 -0
  108. package/dist/adapters/github/tools/review-reply.js +34 -0
  109. package/dist/adapters/github/tools/review-reply.js.map +1 -0
  110. package/dist/adapters/github/tools/sync.d.ts +13 -0
  111. package/dist/adapters/github/tools/sync.d.ts.map +1 -0
  112. package/dist/adapters/github/tools/sync.js +29 -0
  113. package/dist/adapters/github/tools/sync.js.map +1 -0
  114. package/dist/adapters/github/types.d.ts +197 -18
  115. package/dist/adapters/github/types.d.ts.map +1 -1
  116. package/dist/adapters/github/types.js.map +1 -1
  117. package/dist/adapters/github/webhook.d.ts +6 -0
  118. package/dist/adapters/github/webhook.d.ts.map +1 -0
  119. package/dist/adapters/github/webhook.js +62 -0
  120. package/dist/adapters/github/webhook.js.map +1 -0
  121. package/dist/adapters/intake.d.ts +4 -10
  122. package/dist/adapters/intake.d.ts.map +1 -1
  123. package/dist/adapters/intake.js +74 -31
  124. package/dist/adapters/intake.js.map +1 -1
  125. package/dist/adapters/markdown-tables.d.ts +8 -0
  126. package/dist/adapters/markdown-tables.d.ts.map +1 -0
  127. package/dist/adapters/markdown-tables.js +111 -0
  128. package/dist/adapters/markdown-tables.js.map +1 -0
  129. package/dist/{platform-messages.d.ts → adapters/messages.d.ts} +3 -2
  130. package/dist/adapters/messages.d.ts.map +1 -0
  131. package/dist/{platform-messages.js → adapters/messages.js} +4 -1
  132. package/dist/adapters/messages.js.map +1 -0
  133. package/dist/adapters/progressive-renderer.d.ts +7 -0
  134. package/dist/adapters/progressive-renderer.d.ts.map +1 -0
  135. package/dist/adapters/progressive-renderer.js +423 -0
  136. package/dist/adapters/progressive-renderer.js.map +1 -0
  137. package/dist/adapters/shared.d.ts +24 -53
  138. package/dist/adapters/shared.d.ts.map +1 -1
  139. package/dist/adapters/shared.js +140 -91
  140. package/dist/adapters/shared.js.map +1 -1
  141. package/dist/adapters/slack/assistant.d.ts +23 -0
  142. package/dist/adapters/slack/assistant.d.ts.map +1 -0
  143. package/dist/adapters/slack/assistant.js +109 -0
  144. package/dist/adapters/slack/assistant.js.map +1 -0
  145. package/dist/adapters/slack/auto-reply-context.d.ts +14 -0
  146. package/dist/adapters/slack/auto-reply-context.d.ts.map +1 -0
  147. package/dist/adapters/slack/auto-reply-context.js +21 -0
  148. package/dist/adapters/slack/auto-reply-context.js.map +1 -0
  149. package/dist/adapters/slack/blocks.d.ts +5 -0
  150. package/dist/adapters/slack/blocks.d.ts.map +1 -1
  151. package/dist/adapters/slack/blocks.js +84 -148
  152. package/dist/adapters/slack/blocks.js.map +1 -1
  153. package/dist/adapters/slack/bot.d.ts +51 -39
  154. package/dist/adapters/slack/bot.d.ts.map +1 -1
  155. package/dist/adapters/slack/bot.js +892 -567
  156. package/dist/adapters/slack/bot.js.map +1 -1
  157. package/dist/adapters/slack/context.d.ts +3 -9
  158. package/dist/adapters/slack/context.d.ts.map +1 -1
  159. package/dist/adapters/slack/context.js +8 -17
  160. package/dist/adapters/slack/context.js.map +1 -1
  161. package/dist/adapters/slack/jev-context.d.ts +17 -0
  162. package/dist/adapters/slack/jev-context.d.ts.map +1 -0
  163. package/dist/adapters/slack/jev-context.js +57 -0
  164. package/dist/adapters/slack/jev-context.js.map +1 -0
  165. package/dist/adapters/slack/markdown.d.ts +2 -0
  166. package/dist/adapters/slack/markdown.d.ts.map +1 -0
  167. package/dist/adapters/slack/markdown.js +43 -0
  168. package/dist/adapters/slack/markdown.js.map +1 -0
  169. package/dist/adapters/slack/persona.d.ts +6 -0
  170. package/dist/adapters/slack/persona.d.ts.map +1 -0
  171. package/dist/adapters/slack/persona.js +13 -0
  172. package/dist/adapters/slack/persona.js.map +1 -0
  173. package/dist/adapters/slack/response-lifecycle.d.ts +3 -4
  174. package/dist/adapters/slack/response-lifecycle.d.ts.map +1 -1
  175. package/dist/adapters/slack/response-lifecycle.js +221 -347
  176. package/dist/adapters/slack/response-lifecycle.js.map +1 -1
  177. package/dist/adapters/slack/session.d.ts +3 -2
  178. package/dist/adapters/slack/session.d.ts.map +1 -1
  179. package/dist/adapters/slack/session.js +9 -13
  180. package/dist/adapters/slack/session.js.map +1 -1
  181. package/dist/adapters/slack/stream-limits.d.ts +10 -0
  182. package/dist/adapters/slack/stream-limits.d.ts.map +1 -0
  183. package/dist/adapters/slack/stream-limits.js +22 -0
  184. package/dist/adapters/slack/stream-limits.js.map +1 -0
  185. package/dist/adapters/slack/task-intent.d.ts +19 -0
  186. package/dist/adapters/slack/task-intent.d.ts.map +1 -0
  187. package/dist/adapters/slack/task-intent.js +65 -0
  188. package/dist/adapters/slack/task-intent.js.map +1 -0
  189. package/dist/adapters/slack/task-status.d.ts +6 -0
  190. package/dist/adapters/slack/task-status.d.ts.map +1 -0
  191. package/dist/adapters/slack/task-status.js +100 -0
  192. package/dist/adapters/slack/task-status.js.map +1 -0
  193. package/dist/adapters/slack/tool-pack.d.ts +4 -0
  194. package/dist/adapters/slack/tool-pack.d.ts.map +1 -0
  195. package/dist/adapters/slack/tool-pack.js +40 -0
  196. package/dist/adapters/slack/tool-pack.js.map +1 -0
  197. package/dist/adapters/slack/tools/blockkit.d.ts +17 -0
  198. package/dist/adapters/slack/tools/blockkit.d.ts.map +1 -0
  199. package/dist/adapters/slack/tools/blockkit.js +98 -0
  200. package/dist/adapters/slack/tools/blockkit.js.map +1 -0
  201. package/dist/adapters/slack/types.d.ts +91 -5
  202. package/dist/adapters/slack/types.d.ts.map +1 -1
  203. package/dist/adapters/slack/types.js.map +1 -1
  204. package/dist/adapters/slack/update-diagnostics.d.ts +13 -0
  205. package/dist/adapters/slack/update-diagnostics.d.ts.map +1 -0
  206. package/dist/adapters/slack/update-diagnostics.js +128 -0
  207. package/dist/adapters/slack/update-diagnostics.js.map +1 -0
  208. package/dist/adapters/telegram/bot.d.ts +8 -18
  209. package/dist/adapters/telegram/bot.d.ts.map +1 -1
  210. package/dist/adapters/telegram/bot.js +114 -232
  211. package/dist/adapters/telegram/bot.js.map +1 -1
  212. package/dist/adapters/telegram/context.d.ts +3 -7
  213. package/dist/adapters/telegram/context.d.ts.map +1 -1
  214. package/dist/adapters/telegram/context.js +47 -191
  215. package/dist/adapters/telegram/context.js.map +1 -1
  216. package/dist/adapters/telegram/types.d.ts +24 -1
  217. package/dist/adapters/telegram/types.d.ts.map +1 -1
  218. package/dist/adapters/telegram/types.js.map +1 -1
  219. package/dist/adapters/types.d.ts +89 -16
  220. package/dist/adapters/types.d.ts.map +1 -1
  221. package/dist/adapters/types.js.map +1 -1
  222. package/dist/adapters/web/admin/client-assets.d.ts +4 -0
  223. package/dist/adapters/web/admin/client-assets.d.ts.map +1 -0
  224. package/dist/adapters/web/admin/client-assets.js +1766 -0
  225. package/dist/adapters/web/admin/client-assets.js.map +1 -0
  226. package/dist/adapters/web/admin/portal.d.ts +27 -0
  227. package/dist/adapters/web/admin/portal.d.ts.map +1 -0
  228. package/dist/adapters/web/admin/portal.js +1506 -0
  229. package/dist/adapters/web/admin/portal.js.map +1 -0
  230. package/dist/{web → adapters/web}/admin/provider-models.d.ts +1 -1
  231. package/dist/adapters/web/admin/provider-models.d.ts.map +1 -0
  232. package/dist/{web → adapters/web}/admin/provider-models.js +1 -1
  233. package/dist/adapters/web/admin/provider-models.js.map +1 -0
  234. package/dist/adapters/web/admin/types.d.ts +56 -0
  235. package/dist/adapters/web/admin/types.d.ts.map +1 -0
  236. package/dist/adapters/web/admin/types.js.map +1 -0
  237. package/dist/adapters/web/login/oauth.d.ts +4 -0
  238. package/dist/adapters/web/login/oauth.d.ts.map +1 -0
  239. package/dist/{web → adapters/web}/login/oauth.js +61 -100
  240. package/dist/adapters/web/login/oauth.js.map +1 -0
  241. package/dist/adapters/web/login/portal.d.ts +10 -0
  242. package/dist/adapters/web/login/portal.d.ts.map +1 -0
  243. package/dist/{web → adapters/web}/login/portal.js +169 -159
  244. package/dist/adapters/web/login/portal.js.map +1 -0
  245. package/dist/{web → adapters/web}/login/types.d.ts +1 -17
  246. package/dist/adapters/web/login/types.d.ts.map +1 -0
  247. package/dist/adapters/web/login/types.js.map +1 -0
  248. package/dist/adapters/web/portal-shell.d.ts +9 -0
  249. package/dist/adapters/web/portal-shell.d.ts.map +1 -0
  250. package/dist/{portal-shell.js → adapters/web/portal-shell.js} +73 -11
  251. package/dist/adapters/web/portal-shell.js.map +1 -0
  252. package/dist/adapters/web/server.d.ts +33 -0
  253. package/dist/adapters/web/server.d.ts.map +1 -0
  254. package/dist/{web → adapters/web}/server.js +15 -9
  255. package/dist/adapters/web/server.js.map +1 -0
  256. package/dist/adapters/web/session-view/portal.d.ts +19 -0
  257. package/dist/adapters/web/session-view/portal.d.ts.map +1 -0
  258. package/dist/{web → adapters/web}/session-view/portal.js +641 -181
  259. package/dist/adapters/web/session-view/portal.js.map +1 -0
  260. package/dist/{web → adapters/web}/session-view/types.d.ts +1 -6
  261. package/dist/adapters/web/session-view/types.d.ts.map +1 -0
  262. package/dist/adapters/web/session-view/types.js.map +1 -0
  263. package/dist/{web → adapters/web}/token-store.d.ts +0 -3
  264. package/dist/adapters/web/token-store.d.ts.map +1 -0
  265. package/dist/{web → adapters/web}/token-store.js +1 -3
  266. package/dist/adapters/web/token-store.js.map +1 -0
  267. package/dist/adapters/web/types.d.ts.map +1 -0
  268. package/dist/adapters/web/types.js.map +1 -0
  269. package/dist/cli/arg-grammar.d.ts +8 -0
  270. package/dist/cli/arg-grammar.d.ts.map +1 -0
  271. package/dist/cli/arg-grammar.js +47 -0
  272. package/dist/cli/arg-grammar.js.map +1 -0
  273. package/dist/cli/boot.d.ts +4 -0
  274. package/dist/cli/boot.d.ts.map +1 -0
  275. package/dist/cli/boot.js +81 -0
  276. package/dist/cli/boot.js.map +1 -0
  277. package/dist/cli/download.d.ts.map +1 -0
  278. package/dist/cli/download.js +84 -0
  279. package/dist/cli/download.js.map +1 -0
  280. package/dist/cli/office.d.ts +2 -0
  281. package/dist/cli/office.d.ts.map +1 -0
  282. package/dist/cli/office.js +151 -0
  283. package/dist/cli/office.js.map +1 -0
  284. package/dist/cli/onboard.d.ts +8 -0
  285. package/dist/cli/onboard.d.ts.map +1 -0
  286. package/dist/cli/onboard.js +195 -0
  287. package/dist/cli/onboard.js.map +1 -0
  288. package/dist/cli/process-lifecycle.d.ts +14 -0
  289. package/dist/cli/process-lifecycle.d.ts.map +1 -0
  290. package/dist/cli/process-lifecycle.js +61 -0
  291. package/dist/cli/process-lifecycle.js.map +1 -0
  292. package/dist/cli/sandbox.d.ts +3 -0
  293. package/dist/cli/sandbox.d.ts.map +1 -0
  294. package/dist/cli/sandbox.js +80 -0
  295. package/dist/cli/sandbox.js.map +1 -0
  296. package/dist/cli/sessions.d.ts +2 -0
  297. package/dist/cli/sessions.d.ts.map +1 -0
  298. package/dist/cli/sessions.js +78 -0
  299. package/dist/cli/sessions.js.map +1 -0
  300. package/dist/cli/types.d.ts +21 -0
  301. package/dist/cli/types.d.ts.map +1 -0
  302. package/dist/cli/types.js.map +1 -0
  303. package/dist/env-manifest.d.ts +17 -0
  304. package/dist/env-manifest.d.ts.map +1 -0
  305. package/dist/env-manifest.js +249 -0
  306. package/dist/env-manifest.js.map +1 -0
  307. package/dist/events/index.d.ts +122 -0
  308. package/dist/events/index.d.ts.map +1 -0
  309. package/dist/events/index.js +299 -0
  310. package/dist/events/index.js.map +1 -0
  311. package/dist/events/scheduler.d.ts +25 -0
  312. package/dist/events/scheduler.d.ts.map +1 -0
  313. package/dist/events/scheduler.js +223 -0
  314. package/dist/events/scheduler.js.map +1 -0
  315. package/dist/file-guards.d.ts +13 -0
  316. package/dist/file-guards.d.ts.map +1 -0
  317. package/dist/file-guards.js +104 -0
  318. package/dist/file-guards.js.map +1 -0
  319. package/dist/harness/execution-env.d.ts +4 -0
  320. package/dist/harness/execution-env.d.ts.map +1 -0
  321. package/dist/harness/execution-env.js +245 -0
  322. package/dist/harness/execution-env.js.map +1 -0
  323. package/dist/harness/execution-resolver.d.ts +23 -0
  324. package/dist/harness/execution-resolver.d.ts.map +1 -0
  325. package/dist/harness/execution-resolver.js +156 -0
  326. package/dist/harness/execution-resolver.js.map +1 -0
  327. package/dist/harness/http.d.ts +0 -12
  328. package/dist/harness/http.d.ts.map +1 -1
  329. package/dist/harness/http.js +0 -34
  330. package/dist/harness/http.js.map +1 -1
  331. package/dist/harness/index.d.ts +19 -17
  332. package/dist/harness/index.d.ts.map +1 -1
  333. package/dist/harness/index.js +12 -15
  334. package/dist/harness/index.js.map +1 -1
  335. package/dist/harness/jev.d.ts +67 -0
  336. package/dist/harness/jev.d.ts.map +1 -0
  337. package/dist/harness/jev.js +135 -0
  338. package/dist/harness/jev.js.map +1 -0
  339. package/dist/harness/mcp-result.d.ts +20 -0
  340. package/dist/harness/mcp-result.d.ts.map +1 -0
  341. package/dist/harness/mcp-result.js +179 -0
  342. package/dist/harness/mcp-result.js.map +1 -0
  343. package/dist/harness/mcp.d.ts +17 -0
  344. package/dist/harness/mcp.d.ts.map +1 -0
  345. package/dist/harness/mcp.js +243 -0
  346. package/dist/harness/mcp.js.map +1 -0
  347. package/dist/harness/models.d.ts +2 -19
  348. package/dist/harness/models.d.ts.map +1 -1
  349. package/dist/harness/models.js +42 -94
  350. package/dist/harness/models.js.map +1 -1
  351. package/dist/harness/open-connector.d.ts +12 -0
  352. package/dist/harness/open-connector.d.ts.map +1 -0
  353. package/dist/harness/open-connector.js +160 -0
  354. package/dist/harness/open-connector.js.map +1 -0
  355. package/dist/harness/presenter.d.ts +11 -0
  356. package/dist/harness/presenter.d.ts.map +1 -0
  357. package/dist/harness/presenter.js +824 -0
  358. package/dist/harness/presenter.js.map +1 -0
  359. package/dist/harness/prompt.d.ts +18 -0
  360. package/dist/harness/prompt.d.ts.map +1 -0
  361. package/dist/harness/prompt.js +403 -0
  362. package/dist/harness/prompt.js.map +1 -0
  363. package/dist/harness/runner.d.ts +2 -123
  364. package/dist/harness/runner.d.ts.map +1 -1
  365. package/dist/harness/runner.js +547 -415
  366. package/dist/harness/runner.js.map +1 -1
  367. package/dist/harness/session.d.ts +98 -0
  368. package/dist/harness/session.d.ts.map +1 -0
  369. package/dist/harness/session.js +645 -0
  370. package/dist/harness/session.js.map +1 -0
  371. package/dist/harness/skills.d.ts +7 -41
  372. package/dist/harness/skills.d.ts.map +1 -1
  373. package/dist/harness/skills.js +101 -55
  374. package/dist/harness/skills.js.map +1 -1
  375. package/dist/harness/subagent-profiles.d.ts +3 -0
  376. package/dist/harness/subagent-profiles.d.ts.map +1 -0
  377. package/dist/harness/subagent-profiles.js +260 -0
  378. package/dist/harness/subagent-profiles.js.map +1 -0
  379. package/dist/harness/subagent.d.ts +39 -0
  380. package/dist/harness/subagent.d.ts.map +1 -0
  381. package/dist/harness/subagent.js +618 -0
  382. package/dist/harness/subagent.js.map +1 -0
  383. package/dist/harness/tool-args.d.ts +2 -0
  384. package/dist/harness/tool-args.d.ts.map +1 -0
  385. package/dist/harness/tool-args.js +20 -0
  386. package/dist/harness/tool-args.js.map +1 -0
  387. package/dist/harness/tools/attach.d.ts +13 -0
  388. package/dist/harness/tools/attach.d.ts.map +1 -0
  389. package/dist/{adapters/slack → harness}/tools/attach.js +2 -2
  390. package/dist/harness/tools/attach.js.map +1 -0
  391. package/dist/harness/tools/event.d.ts +28 -0
  392. package/dist/harness/tools/event.d.ts.map +1 -0
  393. package/dist/harness/tools/event.js +166 -0
  394. package/dist/harness/tools/event.js.map +1 -0
  395. package/dist/harness/tools/generate-image.d.ts +20 -0
  396. package/dist/harness/tools/generate-image.d.ts.map +1 -0
  397. package/dist/harness/tools/generate-image.js +68 -0
  398. package/dist/harness/tools/generate-image.js.map +1 -0
  399. package/dist/harness/tools/host-fn-tool.d.ts +14 -0
  400. package/dist/harness/tools/host-fn-tool.d.ts.map +1 -0
  401. package/dist/harness/tools/host-fn-tool.js +39 -0
  402. package/dist/harness/tools/host-fn-tool.js.map +1 -0
  403. package/dist/harness/tools/index.d.ts +34 -0
  404. package/dist/harness/tools/index.d.ts.map +1 -0
  405. package/dist/harness/tools/index.js +49 -0
  406. package/dist/harness/tools/index.js.map +1 -0
  407. package/dist/harness/tools/jev-browser.d.ts +42 -0
  408. package/dist/harness/tools/jev-browser.d.ts.map +1 -0
  409. package/dist/harness/tools/jev-browser.js +547 -0
  410. package/dist/harness/tools/jev-browser.js.map +1 -0
  411. package/dist/harness/tools/jev.d.ts +15 -0
  412. package/dist/harness/tools/jev.d.ts.map +1 -0
  413. package/dist/harness/tools/jev.js +98 -0
  414. package/dist/harness/tools/jev.js.map +1 -0
  415. package/dist/harness/tools/pi-tools.d.ts +8 -0
  416. package/dist/harness/tools/pi-tools.d.ts.map +1 -0
  417. package/dist/harness/tools/pi-tools.js +55 -0
  418. package/dist/harness/tools/pi-tools.js.map +1 -0
  419. package/dist/harness/tools/react.d.ts +11 -0
  420. package/dist/harness/tools/react.d.ts.map +1 -0
  421. package/dist/harness/tools/react.js +24 -0
  422. package/dist/harness/tools/react.js.map +1 -0
  423. package/dist/harness/tools/sandbox.d.ts +24 -0
  424. package/dist/harness/tools/sandbox.d.ts.map +1 -0
  425. package/dist/{tools → harness/tools}/sandbox.js +15 -9
  426. package/dist/harness/tools/sandbox.js.map +1 -0
  427. package/dist/harness/tools/secret-redaction.d.ts +9 -0
  428. package/dist/harness/tools/secret-redaction.d.ts.map +1 -0
  429. package/dist/harness/tools/secret-redaction.js +44 -0
  430. package/dist/harness/tools/secret-redaction.js.map +1 -0
  431. package/dist/harness/tools/subagent.d.ts +51 -0
  432. package/dist/harness/tools/subagent.d.ts.map +1 -0
  433. package/dist/harness/tools/subagent.js +581 -0
  434. package/dist/harness/tools/subagent.js.map +1 -0
  435. package/dist/harness/tools/task.d.ts +22 -0
  436. package/dist/harness/tools/task.d.ts.map +1 -0
  437. package/dist/harness/tools/task.js +80 -0
  438. package/dist/harness/tools/task.js.map +1 -0
  439. package/dist/harness/tools/types.d.ts +14 -0
  440. package/dist/harness/tools/types.d.ts.map +1 -0
  441. package/dist/harness/tools/types.js.map +1 -0
  442. package/dist/harness/types.d.ts +345 -29
  443. package/dist/harness/types.d.ts.map +1 -1
  444. package/dist/harness/types.js +1 -1
  445. package/dist/harness/types.js.map +1 -1
  446. package/dist/index.d.ts +36 -9
  447. package/dist/index.d.ts.map +1 -1
  448. package/dist/index.js +19 -7
  449. package/dist/index.js.map +1 -1
  450. package/dist/log.d.ts +0 -1
  451. package/dist/log.d.ts.map +1 -1
  452. package/dist/log.js +3 -13
  453. package/dist/log.js.map +1 -1
  454. package/dist/main.js +300 -217
  455. package/dist/main.js.map +1 -1
  456. package/dist/memory-capture/index.d.ts +15 -0
  457. package/dist/memory-capture/index.d.ts.map +1 -0
  458. package/dist/memory-capture/index.js +199 -0
  459. package/dist/memory-capture/index.js.map +1 -0
  460. package/dist/memory-capture/types.d.ts +27 -0
  461. package/dist/memory-capture/types.d.ts.map +1 -0
  462. package/dist/memory-capture/types.js +2 -0
  463. package/dist/memory-capture/types.js.map +1 -0
  464. package/dist/observability/index.d.ts +30 -0
  465. package/dist/observability/index.d.ts.map +1 -0
  466. package/dist/observability/index.js +273 -0
  467. package/dist/observability/index.js.map +1 -0
  468. package/dist/observability/instrument.js +9 -6
  469. package/dist/observability/instrument.js.map +1 -1
  470. package/dist/observability/otel.d.ts +10 -0
  471. package/dist/observability/otel.d.ts.map +1 -0
  472. package/dist/observability/otel.js +182 -0
  473. package/dist/observability/otel.js.map +1 -0
  474. package/dist/observability/sentry.d.ts +32 -13
  475. package/dist/observability/sentry.d.ts.map +1 -1
  476. package/dist/observability/sentry.js +85 -58
  477. package/dist/observability/sentry.js.map +1 -1
  478. package/dist/observability/types.d.ts +30 -3
  479. package/dist/observability/types.d.ts.map +1 -1
  480. package/dist/observability/types.js.map +1 -1
  481. package/dist/office/index.d.ts +74 -0
  482. package/dist/office/index.d.ts.map +1 -0
  483. package/dist/office/index.js +971 -0
  484. package/dist/office/index.js.map +1 -0
  485. package/dist/office/projection.d.ts +11 -0
  486. package/dist/office/projection.d.ts.map +1 -0
  487. package/dist/office/projection.js +146 -0
  488. package/dist/office/projection.js.map +1 -0
  489. package/dist/office/types.d.ts +55 -0
  490. package/dist/office/types.d.ts.map +1 -0
  491. package/dist/office/types.js +2 -0
  492. package/dist/office/types.js.map +1 -0
  493. package/dist/runtime/conversation-runtime.d.ts +0 -1
  494. package/dist/runtime/conversation-runtime.d.ts.map +1 -1
  495. package/dist/runtime/conversation-runtime.js +375 -152
  496. package/dist/runtime/conversation-runtime.js.map +1 -1
  497. package/dist/runtime/session-lifecycle.d.ts +66 -0
  498. package/dist/runtime/session-lifecycle.d.ts.map +1 -0
  499. package/dist/runtime/session-lifecycle.js +393 -0
  500. package/dist/runtime/session-lifecycle.js.map +1 -0
  501. package/dist/runtime/types.d.ts +41 -17
  502. package/dist/runtime/types.d.ts.map +1 -1
  503. package/dist/runtime/types.js.map +1 -1
  504. package/dist/sandbox/cloudflare.d.ts +4 -0
  505. package/dist/sandbox/cloudflare.d.ts.map +1 -1
  506. package/dist/sandbox/cloudflare.js +59 -55
  507. package/dist/sandbox/cloudflare.js.map +1 -1
  508. package/dist/sandbox/container.d.ts +3 -0
  509. package/dist/sandbox/container.d.ts.map +1 -1
  510. package/dist/sandbox/container.js +39 -20
  511. package/dist/sandbox/container.js.map +1 -1
  512. package/dist/sandbox/host.d.ts +3 -0
  513. package/dist/sandbox/host.d.ts.map +1 -1
  514. package/dist/sandbox/host.js +42 -35
  515. package/dist/sandbox/host.js.map +1 -1
  516. package/dist/sandbox/identity.d.ts +13 -0
  517. package/dist/sandbox/identity.d.ts.map +1 -0
  518. package/dist/sandbox/identity.js +49 -0
  519. package/dist/sandbox/identity.js.map +1 -0
  520. package/dist/sandbox/index.d.ts +5 -15
  521. package/dist/sandbox/index.d.ts.map +1 -1
  522. package/dist/sandbox/index.js +5 -51
  523. package/dist/sandbox/index.js.map +1 -1
  524. package/dist/sandbox/layout.d.ts +7 -0
  525. package/dist/sandbox/layout.d.ts.map +1 -0
  526. package/dist/sandbox/layout.js +13 -0
  527. package/dist/sandbox/layout.js.map +1 -0
  528. package/dist/{provisioner.d.ts → sandbox/provisioner.d.ts} +41 -4
  529. package/dist/sandbox/provisioner.d.ts.map +1 -0
  530. package/dist/sandbox/provisioner.js +971 -0
  531. package/dist/sandbox/provisioner.js.map +1 -0
  532. package/dist/sandbox/registry.d.ts +12 -0
  533. package/dist/sandbox/registry.d.ts.map +1 -0
  534. package/dist/sandbox/registry.js +93 -0
  535. package/dist/sandbox/registry.js.map +1 -0
  536. package/dist/sandbox/types.d.ts +23 -25
  537. package/dist/sandbox/types.d.ts.map +1 -1
  538. package/dist/sandbox/types.js.map +1 -1
  539. package/dist/sandbox/utils.d.ts +21 -0
  540. package/dist/sandbox/utils.d.ts.map +1 -1
  541. package/dist/sandbox/utils.js +100 -8
  542. package/dist/sandbox/utils.js.map +1 -1
  543. package/dist/sessions/chat-history-sync.d.ts +17 -0
  544. package/dist/sessions/chat-history-sync.d.ts.map +1 -0
  545. package/dist/sessions/{agent-memory-file-manager.js → chat-history-sync.js} +224 -183
  546. package/dist/sessions/chat-history-sync.js.map +1 -0
  547. package/dist/sessions/history-line.d.ts +9 -0
  548. package/dist/sessions/history-line.d.ts.map +1 -0
  549. package/dist/sessions/history-line.js +25 -0
  550. package/dist/sessions/history-line.js.map +1 -0
  551. package/dist/sessions/migrate-common.d.ts +28 -0
  552. package/dist/sessions/migrate-common.d.ts.map +1 -0
  553. package/dist/sessions/migrate-common.js +80 -0
  554. package/dist/sessions/migrate-common.js.map +1 -0
  555. package/dist/sessions/migrate-pi-084.d.ts +7 -0
  556. package/dist/sessions/migrate-pi-084.d.ts.map +1 -0
  557. package/dist/sessions/migrate-pi-084.js +293 -0
  558. package/dist/sessions/migrate-pi-084.js.map +1 -0
  559. package/dist/sessions/migrate-v3.d.ts +7 -0
  560. package/dist/sessions/migrate-v3.d.ts.map +1 -0
  561. package/dist/sessions/migrate-v3.js +351 -0
  562. package/dist/sessions/migrate-v3.js.map +1 -0
  563. package/dist/sessions/session-key.d.ts +18 -0
  564. package/dist/sessions/session-key.d.ts.map +1 -0
  565. package/dist/sessions/session-key.js +88 -0
  566. package/dist/sessions/session-key.js.map +1 -0
  567. package/dist/sessions/session-store.d.ts +55 -0
  568. package/dist/sessions/session-store.d.ts.map +1 -0
  569. package/dist/sessions/session-store.js +635 -0
  570. package/dist/sessions/session-store.js.map +1 -0
  571. package/dist/sessions/store.d.ts +7 -61
  572. package/dist/sessions/store.d.ts.map +1 -1
  573. package/dist/sessions/store.js +126 -102
  574. package/dist/sessions/store.js.map +1 -1
  575. package/dist/sessions/types.d.ts +59 -8
  576. package/dist/sessions/types.d.ts.map +1 -1
  577. package/dist/sessions/types.js +2 -1
  578. package/dist/sessions/types.js.map +1 -1
  579. package/dist/settings/apply.d.ts +9 -0
  580. package/dist/settings/apply.d.ts.map +1 -0
  581. package/dist/settings/apply.js +31 -0
  582. package/dist/settings/apply.js.map +1 -0
  583. package/dist/settings/index.d.ts +76 -0
  584. package/dist/settings/index.d.ts.map +1 -0
  585. package/dist/settings/index.js +351 -0
  586. package/dist/settings/index.js.map +1 -0
  587. package/dist/settings/migrate.d.ts +16 -0
  588. package/dist/settings/migrate.d.ts.map +1 -0
  589. package/dist/settings/migrate.js +70 -0
  590. package/dist/settings/migrate.js.map +1 -0
  591. package/dist/types.d.ts +231 -173
  592. package/dist/types.d.ts.map +1 -1
  593. package/dist/types.js +1 -3
  594. package/dist/types.js.map +1 -1
  595. package/dist/unknown-values.d.ts +3 -0
  596. package/dist/unknown-values.d.ts.map +1 -0
  597. package/dist/unknown-values.js +7 -0
  598. package/dist/unknown-values.js.map +1 -0
  599. package/dist/vault/index.d.ts +35 -11
  600. package/dist/vault/index.d.ts.map +1 -1
  601. package/dist/vault/index.js +326 -115
  602. package/dist/vault/index.js.map +1 -1
  603. package/dist/vault/types.d.ts +5 -16
  604. package/dist/vault/types.d.ts.map +1 -1
  605. package/dist/vault/types.js.map +1 -1
  606. package/package.json +82 -41
  607. package/dist/adapter.d.ts +0 -2
  608. package/dist/adapter.d.ts.map +0 -1
  609. package/dist/adapter.js +0 -2
  610. package/dist/adapter.js.map +0 -1
  611. package/dist/adapters/slack/tools/attach.d.ts +0 -12
  612. package/dist/adapters/slack/tools/attach.d.ts.map +0 -1
  613. package/dist/adapters/slack/tools/attach.js.map +0 -1
  614. package/dist/adapters/streaming.d.ts +0 -18
  615. package/dist/adapters/streaming.d.ts.map +0 -1
  616. package/dist/adapters/streaming.js +0 -44
  617. package/dist/adapters/streaming.js.map +0 -1
  618. package/dist/adapters/telegram/html.d.ts +0 -3
  619. package/dist/adapters/telegram/html.d.ts.map +0 -1
  620. package/dist/adapters/telegram/html.js +0 -98
  621. package/dist/adapters/telegram/html.js.map +0 -1
  622. package/dist/agent-events.d.ts +0 -5
  623. package/dist/agent-events.d.ts.map +0 -1
  624. package/dist/agent-events.js +0 -26
  625. package/dist/agent-events.js.map +0 -1
  626. package/dist/agent.d.ts +0 -39
  627. package/dist/agent.d.ts.map +0 -1
  628. package/dist/agent.js +0 -1291
  629. package/dist/agent.js.map +0 -1
  630. package/dist/cli/ext-git.d.ts +0 -22
  631. package/dist/cli/ext-git.d.ts.map +0 -1
  632. package/dist/cli/ext-git.js +0 -76
  633. package/dist/cli/ext-git.js.map +0 -1
  634. package/dist/cli/ext.d.ts +0 -2
  635. package/dist/cli/ext.d.ts.map +0 -1
  636. package/dist/cli/ext.js +0 -217
  637. package/dist/cli/ext.js.map +0 -1
  638. package/dist/commands/admin.d.ts.map +0 -1
  639. package/dist/commands/admin.js.map +0 -1
  640. package/dist/commands/auto-reply.d.ts.map +0 -1
  641. package/dist/commands/auto-reply.js +0 -76
  642. package/dist/commands/auto-reply.js.map +0 -1
  643. package/dist/commands/extensions.d.ts +0 -14
  644. package/dist/commands/extensions.d.ts.map +0 -1
  645. package/dist/commands/extensions.js +0 -55
  646. package/dist/commands/extensions.js.map +0 -1
  647. package/dist/commands/login.d.ts +0 -5
  648. package/dist/commands/login.d.ts.map +0 -1
  649. package/dist/commands/login.js +0 -115
  650. package/dist/commands/login.js.map +0 -1
  651. package/dist/commands/model.d.ts +0 -10
  652. package/dist/commands/model.d.ts.map +0 -1
  653. package/dist/commands/model.js +0 -102
  654. package/dist/commands/model.js.map +0 -1
  655. package/dist/commands/new.d.ts.map +0 -1
  656. package/dist/commands/new.js +0 -25
  657. package/dist/commands/new.js.map +0 -1
  658. package/dist/commands/parse.d.ts +0 -7
  659. package/dist/commands/parse.d.ts.map +0 -1
  660. package/dist/commands/parse.js +0 -14
  661. package/dist/commands/parse.js.map +0 -1
  662. package/dist/commands/registry.d.ts +0 -5
  663. package/dist/commands/registry.d.ts.map +0 -1
  664. package/dist/commands/registry.js +0 -31
  665. package/dist/commands/registry.js.map +0 -1
  666. package/dist/commands/sandbox.d.ts.map +0 -1
  667. package/dist/commands/sandbox.js +0 -78
  668. package/dist/commands/sandbox.js.map +0 -1
  669. package/dist/commands/session-view.d.ts.map +0 -1
  670. package/dist/commands/session-view.js.map +0 -1
  671. package/dist/commands/types.d.ts +0 -66
  672. package/dist/commands/types.d.ts.map +0 -1
  673. package/dist/commands/types.js.map +0 -1
  674. package/dist/commands/utils.d.ts +0 -11
  675. package/dist/commands/utils.d.ts.map +0 -1
  676. package/dist/commands/utils.js.map +0 -1
  677. package/dist/config.d.ts +0 -78
  678. package/dist/config.d.ts.map +0 -1
  679. package/dist/config.js +0 -450
  680. package/dist/config.js.map +0 -1
  681. package/dist/download.d.ts.map +0 -1
  682. package/dist/download.js +0 -89
  683. package/dist/download.js.map +0 -1
  684. package/dist/events.d.ts +0 -43
  685. package/dist/events.d.ts.map +0 -1
  686. package/dist/events.js +0 -456
  687. package/dist/events.js.map +0 -1
  688. package/dist/execution-resolver.d.ts +0 -21
  689. package/dist/execution-resolver.d.ts.map +0 -1
  690. package/dist/execution-resolver.js +0 -170
  691. package/dist/execution-resolver.js.map +0 -1
  692. package/dist/harness/auth.d.ts +0 -16
  693. package/dist/harness/auth.d.ts.map +0 -1
  694. package/dist/harness/auth.js +0 -86
  695. package/dist/harness/auth.js.map +0 -1
  696. package/dist/harness/extensions/loader.d.ts +0 -86
  697. package/dist/harness/extensions/loader.d.ts.map +0 -1
  698. package/dist/harness/extensions/loader.js +0 -525
  699. package/dist/harness/extensions/loader.js.map +0 -1
  700. package/dist/harness/extensions/registry.d.ts +0 -23
  701. package/dist/harness/extensions/registry.d.ts.map +0 -1
  702. package/dist/harness/extensions/registry.js +0 -45
  703. package/dist/harness/extensions/registry.js.map +0 -1
  704. package/dist/harness/extensions/types.d.ts +0 -248
  705. package/dist/harness/extensions/types.d.ts.map +0 -1
  706. package/dist/harness/extensions/types.js.map +0 -1
  707. package/dist/harness/session-store.d.ts +0 -77
  708. package/dist/harness/session-store.d.ts.map +0 -1
  709. package/dist/harness/session-store.js +0 -248
  710. package/dist/harness/session-store.js.map +0 -1
  711. package/dist/harness/settings.d.ts +0 -47
  712. package/dist/harness/settings.d.ts.map +0 -1
  713. package/dist/harness/settings.js +0 -29
  714. package/dist/harness/settings.js.map +0 -1
  715. package/dist/model-registry.d.ts +0 -4
  716. package/dist/model-registry.d.ts.map +0 -1
  717. package/dist/model-registry.js +0 -7
  718. package/dist/model-registry.js.map +0 -1
  719. package/dist/platform-messages.d.ts.map +0 -1
  720. package/dist/platform-messages.js.map +0 -1
  721. package/dist/portal-shell.d.ts +0 -4
  722. package/dist/portal-shell.d.ts.map +0 -1
  723. package/dist/portal-shell.js.map +0 -1
  724. package/dist/provisioner.d.ts.map +0 -1
  725. package/dist/provisioner.js +0 -517
  726. package/dist/provisioner.js.map +0 -1
  727. package/dist/runtime/agent-run-controller.d.ts +0 -31
  728. package/dist/runtime/agent-run-controller.d.ts.map +0 -1
  729. package/dist/runtime/agent-run-controller.js +0 -195
  730. package/dist/runtime/agent-run-controller.js.map +0 -1
  731. package/dist/sandbox/errors.d.ts +0 -6
  732. package/dist/sandbox/errors.d.ts.map +0 -1
  733. package/dist/sandbox/errors.js +0 -11
  734. package/dist/sandbox/errors.js.map +0 -1
  735. package/dist/sandbox/firecracker.d.ts +0 -15
  736. package/dist/sandbox/firecracker.d.ts.map +0 -1
  737. package/dist/sandbox/firecracker.js +0 -212
  738. package/dist/sandbox/firecracker.js.map +0 -1
  739. package/dist/sandbox/image.d.ts +0 -3
  740. package/dist/sandbox/image.d.ts.map +0 -1
  741. package/dist/sandbox/image.js +0 -27
  742. package/dist/sandbox/image.js.map +0 -1
  743. package/dist/sandbox/path-context.d.ts +0 -3
  744. package/dist/sandbox/path-context.d.ts.map +0 -1
  745. package/dist/sandbox/path-context.js +0 -20
  746. package/dist/sandbox/path-context.js.map +0 -1
  747. package/dist/sessions/agent-memory-file-manager.d.ts +0 -19
  748. package/dist/sessions/agent-memory-file-manager.d.ts.map +0 -1
  749. package/dist/sessions/agent-memory-file-manager.js.map +0 -1
  750. package/dist/sessions/metadata.d.ts +0 -3
  751. package/dist/sessions/metadata.d.ts.map +0 -1
  752. package/dist/sessions/metadata.js +0 -11
  753. package/dist/sessions/metadata.js.map +0 -1
  754. package/dist/sessions/policy.d.ts +0 -6
  755. package/dist/sessions/policy.d.ts.map +0 -1
  756. package/dist/sessions/policy.js +0 -24
  757. package/dist/sessions/policy.js.map +0 -1
  758. package/dist/store.d.ts +0 -46
  759. package/dist/store.d.ts.map +0 -1
  760. package/dist/store.js +0 -177
  761. package/dist/store.js.map +0 -1
  762. package/dist/tools/bash.d.ts +0 -10
  763. package/dist/tools/bash.d.ts.map +0 -1
  764. package/dist/tools/bash.js +0 -80
  765. package/dist/tools/bash.js.map +0 -1
  766. package/dist/tools/edit.d.ts +0 -11
  767. package/dist/tools/edit.d.ts.map +0 -1
  768. package/dist/tools/edit.js +0 -131
  769. package/dist/tools/edit.js.map +0 -1
  770. package/dist/tools/event.d.ts +0 -56
  771. package/dist/tools/event.d.ts.map +0 -1
  772. package/dist/tools/event.js +0 -252
  773. package/dist/tools/event.js.map +0 -1
  774. package/dist/tools/index.d.ts +0 -24
  775. package/dist/tools/index.d.ts.map +0 -1
  776. package/dist/tools/index.js +0 -31
  777. package/dist/tools/index.js.map +0 -1
  778. package/dist/tools/react.d.ts +0 -15
  779. package/dist/tools/react.d.ts.map +0 -1
  780. package/dist/tools/react.js +0 -40
  781. package/dist/tools/react.js.map +0 -1
  782. package/dist/tools/read.d.ts +0 -11
  783. package/dist/tools/read.d.ts.map +0 -1
  784. package/dist/tools/read.js +0 -134
  785. package/dist/tools/read.js.map +0 -1
  786. package/dist/tools/sandbox.d.ts +0 -22
  787. package/dist/tools/sandbox.d.ts.map +0 -1
  788. package/dist/tools/sandbox.js.map +0 -1
  789. package/dist/tools/truncate.d.ts +0 -33
  790. package/dist/tools/truncate.d.ts.map +0 -1
  791. package/dist/tools/truncate.js +0 -184
  792. package/dist/tools/truncate.js.map +0 -1
  793. package/dist/tools/types.d.ts +0 -54
  794. package/dist/tools/types.d.ts.map +0 -1
  795. package/dist/tools/types.js.map +0 -1
  796. package/dist/tools/write.d.ts +0 -10
  797. package/dist/tools/write.d.ts.map +0 -1
  798. package/dist/tools/write.js +0 -29
  799. package/dist/tools/write.js.map +0 -1
  800. package/dist/trigger.d.ts +0 -22
  801. package/dist/trigger.d.ts.map +0 -1
  802. package/dist/trigger.js +0 -100
  803. package/dist/trigger.js.map +0 -1
  804. package/dist/utils/date.d.ts +0 -10
  805. package/dist/utils/date.d.ts.map +0 -1
  806. package/dist/utils/date.js +0 -23
  807. package/dist/utils/date.js.map +0 -1
  808. package/dist/utils/env.d.ts +0 -3
  809. package/dist/utils/env.d.ts.map +0 -1
  810. package/dist/utils/env.js +0 -12
  811. package/dist/utils/env.js.map +0 -1
  812. package/dist/utils/file-guards.d.ts +0 -9
  813. package/dist/utils/file-guards.d.ts.map +0 -1
  814. package/dist/utils/file-guards.js +0 -59
  815. package/dist/utils/file-guards.js.map +0 -1
  816. package/dist/utils/fs-atomic.d.ts +0 -10
  817. package/dist/utils/fs-atomic.d.ts.map +0 -1
  818. package/dist/utils/fs-atomic.js +0 -45
  819. package/dist/utils/fs-atomic.js.map +0 -1
  820. package/dist/utils/html.d.ts +0 -2
  821. package/dist/utils/html.d.ts.map +0 -1
  822. package/dist/utils/html.js +0 -4
  823. package/dist/utils/html.js.map +0 -1
  824. package/dist/utils/http-body.d.ts +0 -10
  825. package/dist/utils/http-body.d.ts.map +0 -1
  826. package/dist/utils/http-body.js +0 -34
  827. package/dist/utils/http-body.js.map +0 -1
  828. package/dist/vault/routing.d.ts +0 -3
  829. package/dist/vault/routing.d.ts.map +0 -1
  830. package/dist/vault/routing.js +0 -13
  831. package/dist/vault/routing.js.map +0 -1
  832. package/dist/web/admin/portal.d.ts +0 -5
  833. package/dist/web/admin/portal.d.ts.map +0 -1
  834. package/dist/web/admin/portal.js +0 -2572
  835. package/dist/web/admin/portal.js.map +0 -1
  836. package/dist/web/admin/provider-models.d.ts.map +0 -1
  837. package/dist/web/admin/provider-models.js.map +0 -1
  838. package/dist/web/admin/store.d.ts +0 -13
  839. package/dist/web/admin/store.d.ts.map +0 -1
  840. package/dist/web/admin/store.js +0 -14
  841. package/dist/web/admin/store.js.map +0 -1
  842. package/dist/web/admin/types.d.ts +0 -30
  843. package/dist/web/admin/types.d.ts.map +0 -1
  844. package/dist/web/admin/types.js.map +0 -1
  845. package/dist/web/agent-events/portal.d.ts +0 -3
  846. package/dist/web/agent-events/portal.d.ts.map +0 -1
  847. package/dist/web/agent-events/portal.js +0 -18
  848. package/dist/web/agent-events/portal.js.map +0 -1
  849. package/dist/web/login/oauth.d.ts +0 -6
  850. package/dist/web/login/oauth.d.ts.map +0 -1
  851. package/dist/web/login/oauth.js.map +0 -1
  852. package/dist/web/login/portal.d.ts +0 -17
  853. package/dist/web/login/portal.d.ts.map +0 -1
  854. package/dist/web/login/portal.js.map +0 -1
  855. package/dist/web/login/store.d.ts +0 -8
  856. package/dist/web/login/store.d.ts.map +0 -1
  857. package/dist/web/login/store.js +0 -15
  858. package/dist/web/login/store.js.map +0 -1
  859. package/dist/web/login/types.d.ts.map +0 -1
  860. package/dist/web/login/types.js.map +0 -1
  861. package/dist/web/request.d.ts +0 -3
  862. package/dist/web/request.d.ts.map +0 -1
  863. package/dist/web/request.js +0 -13
  864. package/dist/web/request.js.map +0 -1
  865. package/dist/web/server.d.ts +0 -28
  866. package/dist/web/server.d.ts.map +0 -1
  867. package/dist/web/server.js.map +0 -1
  868. package/dist/web/session-view/command.d.ts +0 -4
  869. package/dist/web/session-view/command.d.ts.map +0 -1
  870. package/dist/web/session-view/command.js +0 -7
  871. package/dist/web/session-view/command.js.map +0 -1
  872. package/dist/web/session-view/portal.d.ts +0 -13
  873. package/dist/web/session-view/portal.d.ts.map +0 -1
  874. package/dist/web/session-view/portal.js.map +0 -1
  875. package/dist/web/session-view/service.d.ts +0 -6
  876. package/dist/web/session-view/service.d.ts.map +0 -1
  877. package/dist/web/session-view/service.js +0 -498
  878. package/dist/web/session-view/service.js.map +0 -1
  879. package/dist/web/session-view/store.d.ts +0 -8
  880. package/dist/web/session-view/store.d.ts.map +0 -1
  881. package/dist/web/session-view/store.js +0 -15
  882. package/dist/web/session-view/store.js.map +0 -1
  883. package/dist/web/session-view/types.d.ts.map +0 -1
  884. package/dist/web/session-view/types.js.map +0 -1
  885. package/dist/web/token-store.d.ts.map +0 -1
  886. package/dist/web/token-store.js.map +0 -1
  887. package/dist/web/types.d.ts.map +0 -1
  888. package/dist/web/types.js.map +0 -1
  889. /package/dist/{commands → adapters/commands}/admin.d.ts +0 -0
  890. /package/dist/{commands → adapters/commands}/new.d.ts +0 -0
  891. /package/dist/{commands → adapters/commands}/session-view.d.ts +0 -0
  892. /package/dist/{commands → adapters/commands}/types.js +0 -0
  893. /package/dist/{harness/extensions → adapters/web/admin}/types.js +0 -0
  894. /package/dist/{tools → adapters/web/login}/types.js +0 -0
  895. /package/dist/{web/admin → adapters/web/session-view}/types.js +0 -0
  896. /package/dist/{web → adapters/web}/types.d.ts +0 -0
  897. /package/dist/{web/login → adapters/web}/types.js +0 -0
  898. /package/dist/{download.d.ts → cli/download.d.ts} +0 -0
  899. /package/dist/{web/session-view → cli}/types.js +0 -0
  900. /package/dist/{web → harness/tools}/types.js +0 -0
@@ -1,14 +1,27 @@
1
- import { createHash, randomBytes } from "crypto";
2
- import { escapeHtml } from "../../utils/html.js";
3
- import { readRawBody } from "../../utils/http-body.js";
4
- import { renderPortalShell } from "../../portal-shell.js";
5
- import { resolveLinkBaseUrl } from "../../config.js";
6
- import { requestBaseUrl } from "../request.js";
7
- import { getOAuthServices, resolveOAuthService, } from "./oauth.js";
8
- import * as log from "../../log.js";
9
- import { reportUserFacingError } from "../../observability/sentry.js";
10
- import { PRODUCT_NAME } from "../../platform-messages.js";
11
- import { defaultVaultTargetPath } from "../../vault/index.js";
1
+ import { createHash, randomBytes } from "node:crypto";
2
+ import { escapeHtml, readJsonBody, renderPortalShell, requestBaseUrl } from "../portal-shell.js";
3
+ import { resolveLinkBaseUrl } from "../../../env-manifest.js";
4
+ import { readEnv } from "../../../env-manifest.js";
5
+ import { InMemoryTokenStore } from "../token-store.js";
6
+ import { getOAuthServices, resolveOAuthService } from "./oauth.js";
7
+ import * as log from "../../../log.js";
8
+ import { reportUserFacingError } from "../../../observability/index.js";
9
+ import { PRODUCT_NAME } from "../../messages.js";
10
+ import { defaultVaultTargetPath } from "../../../vault/index.js";
11
+ const TTL_MS = 15 * 60 * 1000;
12
+ export class InMemoryLinkTokenStore extends InMemoryTokenStore {
13
+ create(platform, platformUserId, conversationId, vaultId, providerId) {
14
+ this.deleteWhere((token) => token.platform === platform && token.platformUserId === platformUserId);
15
+ return this.createRecord(TTL_MS, {
16
+ platform,
17
+ platformUserId,
18
+ vaultId,
19
+ providerId,
20
+ conversationId,
21
+ });
22
+ }
23
+ }
24
+ import { errorMessage, isRecord } from "../../../unknown-values.js";
12
25
  const OAUTH_STATE_TTL_MS = 10 * 60 * 1000;
13
26
  const DEFAULT_SECRET_CONFIG_ID = "manual";
14
27
  const SECRET_PRESETS = [
@@ -176,17 +189,6 @@ const SECRET_PRESETS = [
176
189
  ],
177
190
  },
178
191
  ];
179
- // ── request handler ───────────────────────────────────────────────────────────
180
- /**
181
- * Start a small HTTP server that receives credential onboarding callbacks from the web portal.
182
- *
183
- * Routes:
184
- * GET /health — health check
185
- * GET /link?token=xxx — credential onboarding page
186
- * POST /api/link/complete — API key completion endpoint
187
- * POST /api/oauth/start — creates provider OAuth redirect URL
188
- * GET /oauth/callback — OAuth callback endpoint
189
- */
190
192
  export function createLoginRequestHandler(linkTokenStore, vaultManager, notify) {
191
193
  const oauthStates = new Map();
192
194
  return (req, res, url) => {
@@ -205,29 +207,52 @@ export function createLoginRequestHandler(linkTokenStore, vaultManager, notify)
205
207
  const defaultMode = oauthServiceHint ? "oauth" : "api_key";
206
208
  const existingSecrets = describeVaultSecrets(vaultManager, linkToken.vaultId);
207
209
  res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
208
- res.end(renderCredentialPage(rawToken, oauthServiceHint ? `${oauthServiceHint.label} OAuth` : "Store Secret", defaultMode, "", "Secret value", "sk-...", oauthServiceHint
209
- ? `Authorize ${oauthServiceHint.label} and store tokens in your vault.`
210
- : "Set any environment variable key/value pair in your vault.", oauthServices, oauthServiceHint?.id, existingSecrets));
210
+ res.end(renderCredentialPage({
211
+ token: rawToken,
212
+ title: oauthServiceHint ? `${oauthServiceHint.label} OAuth` : "Store Secret",
213
+ defaultMode,
214
+ initialEnvKey: "",
215
+ secretLabel: "Secret value",
216
+ placeholder: "sk-...",
217
+ helpText: oauthServiceHint
218
+ ? `Authorize ${oauthServiceHint.label} and store tokens in your vault.`
219
+ : "Set any environment variable key/value pair in your vault.",
220
+ oauthServices,
221
+ oauthServiceIdHint: oauthServiceHint?.id,
222
+ existingSecrets,
223
+ }));
211
224
  return true;
212
225
  }
213
226
  if (req.method === "POST" && url.pathname === "/api/link/complete") {
214
227
  if (!enforceCsrf(req, res))
215
228
  return true;
216
- void readJsonBody(req, res, async (body) => {
217
- await handleLinkComplete(body, linkTokenStore, vaultManager, notify, res);
229
+ void readJsonBody(req, res, 16 * 1024).then((body) => {
230
+ if (body === null)
231
+ return;
232
+ return handleLinkComplete(body, linkTokenStore, vaultManager, notify, res);
218
233
  });
219
234
  return true;
220
235
  }
221
236
  if (req.method === "POST" && url.pathname === "/api/oauth/start") {
222
237
  if (!enforceCsrf(req, res))
223
238
  return true;
224
- void readJsonBody(req, res, async (body) => {
225
- await handleOAuthStart(body, req, linkTokenStore, oauthStates, res);
239
+ void readJsonBody(req, res, 16 * 1024).then((body) => {
240
+ if (body === null)
241
+ return;
242
+ return handleOAuthStart(body, req, linkTokenStore, oauthStates, res);
226
243
  });
227
244
  return true;
228
245
  }
229
246
  if (req.method === "GET" && url.pathname === "/oauth/callback") {
230
- void handleOAuthCallback(url, req, linkTokenStore, vaultManager, notify, oauthStates, res).catch((err) => {
247
+ void handleOAuthCallback({
248
+ url,
249
+ req,
250
+ linkTokenStore,
251
+ vaultManager,
252
+ notify,
253
+ oauthStates,
254
+ res,
255
+ }).catch((err) => {
231
256
  log.logWarning("OAuth callback failed", err.message);
232
257
  reportUserFacingError(err, {
233
258
  domain: "login",
@@ -244,16 +269,6 @@ export function createLoginRequestHandler(linkTokenStore, vaultManager, notify)
244
269
  return false;
245
270
  };
246
271
  }
247
- /**
248
- * Block cross-site POSTs to the credential endpoints. Two defenses:
249
- * 1. Require Content-Type: application/json, which forces a CORS preflight
250
- * for any cross-origin fetch and rules out `<form enctype="text/plain">`
251
- * tricks that could otherwise smuggle a JSON body.
252
- * 2. When MIKAN_LINK_URL is configured, require that the Origin (or Referer,
253
- * as a fallback for browsers that strip Origin) matches that base URL.
254
- * This stops an attacker-controlled page — even one that somehow stole a
255
- * victim's link token — from completing the flow.
256
- */
257
272
  function enforceCsrf(req, res) {
258
273
  const contentType = req.headers["content-type"]
259
274
  ?.split(";")[0]
@@ -266,8 +281,6 @@ function enforceCsrf(req, res) {
266
281
  }
267
282
  const configured = resolveLinkBaseUrl();
268
283
  if (!configured) {
269
- // No trusted origin to compare against in local/dev mode; the loopback
270
- // bind already prevents cross-host access.
271
284
  return true;
272
285
  }
273
286
  let configuredOrigin;
@@ -275,7 +288,6 @@ function enforceCsrf(req, res) {
275
288
  configuredOrigin = new URL(configured).origin;
276
289
  }
277
290
  catch {
278
- // Misconfigured MIKAN_LINK_URL — fail closed.
279
291
  res.writeHead(500, { "Content-Type": "application/json" });
280
292
  res.end(JSON.stringify({ error: "Server misconfiguration" }));
281
293
  return false;
@@ -287,7 +299,6 @@ function enforceCsrf(req, res) {
287
299
  }
288
300
  return true;
289
301
  }
290
- /** Best-effort origin of the request, derived from Origin or Referer. */
291
302
  function requestOrigin(req) {
292
303
  const origin = req.headers.origin?.trim();
293
304
  if (origin && origin !== "null")
@@ -302,18 +313,9 @@ function requestOrigin(req) {
302
313
  return undefined;
303
314
  }
304
315
  }
305
- async function readJsonBody(req, res, onBody) {
306
- const body = await readRawBody(req, res, 16 * 1024);
307
- if (body === null)
308
- return;
309
- await onBody(body);
310
- }
311
- // ── HTML helpers ───────────────────────────────────────────────────────────────
312
316
  const esc = escapeHtml;
313
317
  const loginViewStyles = `
314
- /* Login portal inherits all base chrome from the shared shell.
315
- This module only adds preset cards, service logos, help popovers,
316
- and the mode toggle. */
318
+
317
319
 
318
320
  p { margin: 0; color: var(--muted); font-size: 0.92rem; line-height: 1.55; }
319
321
 
@@ -669,7 +671,7 @@ function renderServiceLogo(kind) {
669
671
  sentry: { className: "sentry", text: "S" },
670
672
  manual: { className: "manual", text: ">_" },
671
673
  };
672
- const logo = textLogos[kind] ?? textLogos.manual;
674
+ const logo = textLogos[kind] ?? textLogos.manual ?? { className: "manual", text: ">_" };
673
675
  return `<span class="service-logo ${logo.className}" aria-hidden="true"><span class="service-logo-text">${logo.text}</span></span>`;
674
676
  }
675
677
  function resolveFieldEnvKeys(field) {
@@ -739,42 +741,8 @@ function renderManualProviderCard(initialEnvKey, secretLabel, placeholder) {
739
741
  </div>
740
742
  </section>`;
741
743
  }
742
- function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLabel, placeholder, helpText, oauthServices, oauthServiceIdHint, existingSecrets) {
743
- const oauthOptions = oauthServices
744
- .map((service) => {
745
- const selected = service.id === oauthServiceIdHint ? ' selected="selected"' : "";
746
- return `<option value="${esc(service.id)}"${selected}>${esc(service.label)}</option>`;
747
- })
748
- .join("\n");
749
- const presetCards = SECRET_PRESETS.map(renderPresetProviderCard).join("\n");
750
- return renderHtmlDocument("Login", `<section class="card stack">
751
- <p class="eyebrow">${PRODUCT_NAME}</p>
752
- <h1 class="page-title">${esc(title)}</h1>
753
- <p>Your personal sandbox is already provisioned automatically.</p>
754
- <p>${esc(helpText)}</p>
755
- ${renderSecretsSummary(existingSecrets)}
756
- <div class="mode">
757
- <label><input type="radio" name="mode" value="api_key" ${defaultMode === "api_key" ? "checked" : ""}> Secrets / API tokens</label>
758
- <label><input type="radio" name="mode" value="oauth" ${defaultMode === "oauth" ? "checked" : ""}> OAuth login</label>
759
- </div>
760
- </section>
761
-
762
- <div id="api-panel" class="panel">
763
- ${presetCards}
764
- ${renderManualProviderCard(initialEnvKey, secretLabel, placeholder)}
765
- </div>
766
-
767
- <div id="oauth-panel" class="panel card stack">
768
- <label for="oauthService">OAuth service</label>
769
- <select id="oauthService" name="oauthService">${oauthOptions}</select>
770
- <p class="panel-note">You'll be redirected to the selected service's authorization page.</p>
771
- </div>
772
-
773
- <div>
774
- <button id="btn" class="primary-button" onclick="connect()">Continue</button>
775
- <div id="result" class="result" aria-live="polite"></div>
776
- </div>
777
- <script>
744
+ const CREDENTIAL_PAGE_TOKEN = "__MIKAN_LOGIN_TOKEN__";
745
+ const CREDENTIAL_PAGE_SCRIPT = ` <script>
778
746
  const envKeyPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
779
747
 
780
748
  function selectedMode() {
@@ -858,7 +826,7 @@ function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLa
858
826
  const r = await fetch('/api/oauth/start', {
859
827
  method: 'POST',
860
828
  headers: { 'Content-Type': 'application/json' },
861
- body: JSON.stringify({ token: '${esc(token)}', serviceId }),
829
+ body: JSON.stringify({ token: '__MIKAN_LOGIN_TOKEN__', serviceId }),
862
830
  });
863
831
  const data = await r.json();
864
832
  if (!r.ok) {
@@ -880,7 +848,7 @@ function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLa
880
848
  const r = await fetch('/api/link/complete', {
881
849
  method: 'POST',
882
850
  headers: { 'Content-Type': 'application/json' },
883
- body: JSON.stringify({ token: '${esc(token)}', mode: 'api_key', env: payload.env }),
851
+ body: JSON.stringify({ token: '__MIKAN_LOGIN_TOKEN__', mode: 'api_key', env: payload.env }),
884
852
  });
885
853
  const data = await r.json();
886
854
  if (r.ok) {
@@ -941,7 +909,47 @@ function renderCredentialPage(token, title, defaultMode, initialEnvKey, secretLa
941
909
  resetContinueButton();
942
910
  }
943
911
  }
944
- </script>`);
912
+ </script>`;
913
+ function renderCredentialPageScript(token) {
914
+ return CREDENTIAL_PAGE_SCRIPT.replaceAll(CREDENTIAL_PAGE_TOKEN, () => esc(token));
915
+ }
916
+ function renderCredentialPage(options) {
917
+ const { token, title, defaultMode, initialEnvKey, secretLabel, placeholder, helpText, oauthServices, oauthServiceIdHint, existingSecrets, } = options;
918
+ const oauthOptions = oauthServices
919
+ .map((service) => {
920
+ const selected = service.id === oauthServiceIdHint ? ' selected="selected"' : "";
921
+ return `<option value="${esc(service.id)}"${selected}>${esc(service.label)}</option>`;
922
+ })
923
+ .join("\n");
924
+ const presetCards = SECRET_PRESETS.map(renderPresetProviderCard).join("\n");
925
+ return renderHtmlDocument("Login", `<section class="card stack">
926
+ <p class="eyebrow">${PRODUCT_NAME}</p>
927
+ <h1 class="page-title">${esc(title)}</h1>
928
+ <p>Your personal sandbox is already provisioned automatically.</p>
929
+ <p>${esc(helpText)}</p>
930
+ ${renderSecretsSummary(existingSecrets)}
931
+ <div class="mode">
932
+ <label><input type="radio" name="mode" value="api_key" ${defaultMode === "api_key" ? "checked" : ""}> Secrets / API tokens</label>
933
+ <label><input type="radio" name="mode" value="oauth" ${defaultMode === "oauth" ? "checked" : ""}> OAuth login</label>
934
+ </div>
935
+ </section>
936
+
937
+ <div id="api-panel" class="panel">
938
+ ${presetCards}
939
+ ${renderManualProviderCard(initialEnvKey, secretLabel, placeholder)}
940
+ </div>
941
+
942
+ <div id="oauth-panel" class="panel card stack">
943
+ <label for="oauthService">OAuth service</label>
944
+ <select id="oauthService" name="oauthService">${oauthOptions}</select>
945
+ <p class="panel-note">You'll be redirected to the selected service's authorization page.</p>
946
+ </div>
947
+
948
+ <div>
949
+ <button id="btn" class="primary-button" onclick="connect()">Continue</button>
950
+ <div id="result" class="result" aria-live="polite"></div>
951
+ </div>
952
+ ${renderCredentialPageScript(token)}`);
945
953
  }
946
954
  function renderErrorPage(message) {
947
955
  return renderStatusPage("Login Error", message, "err");
@@ -953,7 +961,7 @@ function isValidEnvKey(value) {
953
961
  return /^[A-Za-z_][A-Za-z0-9_]*$/.test(value);
954
962
  }
955
963
  function extractEnvUpdates(data) {
956
- if (data.env && typeof data.env === "object" && !Array.isArray(data.env)) {
964
+ if (isRecord(data.env)) {
957
965
  const rawEntries = Object.entries(data.env);
958
966
  if (rawEntries.length === 0)
959
967
  return { error: "Missing required field: env" };
@@ -1001,17 +1009,7 @@ function renderSentryCliConfig(updates) {
1001
1009
  }
1002
1010
  return lines.join("\n");
1003
1011
  }
1004
- // ── API-key completion ────────────────────────────────────────────────────────
1005
- async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, res) {
1006
- let data;
1007
- try {
1008
- data = JSON.parse(body);
1009
- }
1010
- catch {
1011
- res.writeHead(400, { "Content-Type": "application/json" });
1012
- res.end(JSON.stringify({ error: "Invalid JSON" }));
1013
- return;
1014
- }
1012
+ async function handleLinkComplete(data, linkTokenStore, vaultManager, notify, res) {
1015
1013
  if (!data.token) {
1016
1014
  res.writeHead(400, { "Content-Type": "application/json" });
1017
1015
  res.end(JSON.stringify({ error: "Missing required field: token" }));
@@ -1024,8 +1022,6 @@ async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, re
1024
1022
  return;
1025
1023
  }
1026
1024
  const envKeys = Object.keys(updates).toSorted((left, right) => left.localeCompare(right));
1027
- // Atomic consume prevents two concurrent requests from both passing the
1028
- // validity check before either deletes the token.
1029
1025
  const linkToken = linkTokenStore.consume(data.token);
1030
1026
  if (!linkToken) {
1031
1027
  res.writeHead(400, { "Content-Type": "application/json" });
@@ -1037,12 +1033,13 @@ async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, re
1037
1033
  try {
1038
1034
  vaultManager.upsertEnv(linkToken.vaultId, updates);
1039
1035
  if (sentryCliConfig) {
1040
- vaultManager.upsertFile(linkToken.vaultId, ".sentryclirc", sentryCliConfig, "/root/.sentryclirc");
1041
- fileTargets.push("/root/.sentryclirc");
1036
+ const target = defaultVaultTargetPath(".sentryclirc");
1037
+ vaultManager.upsertFile(linkToken.vaultId, ".sentryclirc", sentryCliConfig, target);
1038
+ fileTargets.push(target);
1042
1039
  }
1043
1040
  }
1044
1041
  catch (persistError) {
1045
- log.logWarning(`Failed to persist [${envKeys.join(", ")}] for ${linkToken.platform}/${linkToken.platformUserId}`, persistError instanceof Error ? persistError.message : String(persistError));
1042
+ log.logWarning(`Failed to persist [${envKeys.join(", ")}] for ${linkToken.platform}/${linkToken.platformUserId}`, errorMessage(persistError));
1046
1043
  reportUserFacingError(persistError, {
1047
1044
  domain: "login",
1048
1045
  surface: "credential_login",
@@ -1085,17 +1082,7 @@ async function handleLinkComplete(body, linkTokenStore, vaultManager, notify, re
1085
1082
  });
1086
1083
  });
1087
1084
  }
1088
- // ── OAuth flow ────────────────────────────────────────────────────────────────
1089
- async function handleOAuthStart(body, req, linkTokenStore, oauthStates, res) {
1090
- let data;
1091
- try {
1092
- data = JSON.parse(body);
1093
- }
1094
- catch {
1095
- res.writeHead(400, { "Content-Type": "application/json" });
1096
- res.end(JSON.stringify({ error: "Invalid JSON" }));
1097
- return;
1098
- }
1085
+ async function handleOAuthStart(data, req, linkTokenStore, oauthStates, res) {
1099
1086
  if (!data.token || !data.serviceId) {
1100
1087
  res.writeHead(400, { "Content-Type": "application/json" });
1101
1088
  res.end(JSON.stringify({ error: "Missing required fields: token/serviceId" }));
@@ -1113,8 +1100,8 @@ async function handleOAuthStart(body, req, linkTokenStore, oauthStates, res) {
1113
1100
  res.end(JSON.stringify({ error: `Unsupported OAuth service: ${data.serviceId}` }));
1114
1101
  return;
1115
1102
  }
1116
- const clientId = process.env[service.clientIdEnvKey];
1117
- const clientSecret = process.env[service.clientSecretEnvKey];
1103
+ const clientId = readEnv(service.clientIdEnvKey);
1104
+ const clientSecret = readEnv(service.clientSecretEnvKey);
1118
1105
  if (!clientId || !clientSecret) {
1119
1106
  res.writeHead(400, { "Content-Type": "application/json" });
1120
1107
  res.end(JSON.stringify({
@@ -1153,69 +1140,64 @@ async function handleOAuthStart(body, req, linkTokenStore, oauthStates, res) {
1153
1140
  res.writeHead(200, { "Content-Type": "application/json" });
1154
1141
  res.end(JSON.stringify({ ok: true, redirectUrl: authorizeUrl.toString() }));
1155
1142
  }
1156
- async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notify, oauthStates, res) {
1143
+ function resolveOAuthCallback(options) {
1144
+ const { url, oauthStates, linkTokenStore, res } = options;
1157
1145
  const state = url.searchParams.get("state") ?? "";
1158
1146
  const code = url.searchParams.get("code") ?? "";
1159
1147
  const oauthError = url.searchParams.get("error");
1160
- // Atomic pop: whatever path we take from here, this state is spent.
1161
- // Done before any `await` to close the TOCTOU window between the state
1162
- // lookup and the final delete.
1163
1148
  const pending = oauthStates.get(state);
1164
1149
  if (pending)
1165
1150
  oauthStates.delete(state);
1166
1151
  if (oauthError) {
1167
1152
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1168
1153
  res.end(renderErrorPage(`OAuth authorization failed: ${oauthError}`));
1169
- return;
1154
+ return undefined;
1170
1155
  }
1171
1156
  if (!pending || Date.now() > pending.expiresAt) {
1172
1157
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1173
1158
  res.end(renderErrorPage("OAuth state is invalid or expired. Please run /login again."));
1174
- return;
1159
+ return undefined;
1175
1160
  }
1176
1161
  if (!code) {
1177
1162
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1178
1163
  res.end(renderErrorPage("Missing OAuth authorization code."));
1179
- return;
1164
+ return undefined;
1180
1165
  }
1181
1166
  const service = resolveOAuthService(pending.serviceId);
1182
1167
  if (!service) {
1183
1168
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1184
1169
  res.end(renderErrorPage("Unsupported OAuth service."));
1185
- return;
1170
+ return undefined;
1186
1171
  }
1187
- const clientId = process.env[service.clientIdEnvKey];
1188
- const clientSecret = process.env[service.clientSecretEnvKey];
1172
+ const clientId = readEnv(service.clientIdEnvKey);
1173
+ const clientSecret = readEnv(service.clientSecretEnvKey);
1189
1174
  if (!clientId || !clientSecret) {
1190
1175
  res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
1191
1176
  res.end(renderErrorPage("OAuth service is not configured on server."));
1192
- return;
1177
+ return undefined;
1193
1178
  }
1194
- // Atomic consume: pairs with the callback being one-shot. Two concurrent
1195
- // callbacks for the same state would previously both pass `peek` and both
1196
- // run `exchangeOAuthCode` across the await; only one reaches `consume`.
1197
1179
  const linkToken = linkTokenStore.consume(pending.linkToken);
1198
1180
  if (!linkToken) {
1199
1181
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1200
1182
  res.end(renderErrorPage("Login link is invalid or expired. Please run /login again."));
1201
- return;
1183
+ return undefined;
1202
1184
  }
1203
- const redirectUri = `${requestBaseUrl(req)}/oauth/callback`;
1204
- const tokenResp = await exchangeOAuthCode(service, code, clientId, clientSecret, redirectUri, pending.codeVerifier);
1205
- const accessToken = tokenResp.access_token?.trim();
1206
- const refreshToken = tokenResp.refresh_token?.trim();
1185
+ return { code, codeVerifier: pending.codeVerifier, service, clientId, clientSecret, linkToken };
1186
+ }
1187
+ function storeOAuthCredentials(options) {
1188
+ const { tokenResponse, service, clientId, clientSecret, linkToken, vaultManager, res } = options;
1189
+ const accessToken = tokenResponse.access_token?.trim();
1190
+ const refreshToken = tokenResponse.refresh_token?.trim();
1207
1191
  if (!accessToken) {
1208
1192
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1209
1193
  res.end(renderErrorPage("OAuth token exchange did not return an access_token."));
1210
- return;
1194
+ return undefined;
1211
1195
  }
1212
1196
  const updates = {};
1213
- for (const key of service.accessTokenEnvKeys ?? []) {
1197
+ for (const key of service.accessTokenEnvKeys ?? [])
1214
1198
  updates[key] = accessToken;
1215
- }
1216
- if (refreshToken && service.refreshTokenEnvKey) {
1199
+ if (refreshToken && service.refreshTokenEnvKey)
1217
1200
  updates[service.refreshTokenEnvKey] = refreshToken;
1218
- }
1219
1201
  const fileOutput = service.fileOutput;
1220
1202
  let mountedPath;
1221
1203
  if (fileOutput?.type === "authorized_user") {
@@ -1223,15 +1205,13 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
1223
1205
  res.writeHead(400, { "Content-Type": "text/html; charset=utf-8" });
1224
1206
  res.end(renderErrorPage("OAuth token exchange did not return a refresh_token. " +
1225
1207
  "Retry after revoking prior consent or ensure prompt=consent is applied."));
1226
- return;
1208
+ return undefined;
1227
1209
  }
1228
1210
  mountedPath = fileOutput.targetPath ?? defaultVaultTargetPath(fileOutput.relativePath);
1229
- if (fileOutput.envKey) {
1211
+ if (fileOutput.envKey)
1230
1212
  updates[fileOutput.envKey] = mountedPath;
1231
- }
1232
- for (const key of fileOutput.additionalEnvKeys ?? []) {
1213
+ for (const key of fileOutput.additionalEnvKeys ?? [])
1233
1214
  updates[key] = mountedPath;
1234
- }
1235
1215
  }
1236
1216
  const storedTargets = [];
1237
1217
  try {
@@ -1246,7 +1226,7 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
1246
1226
  }
1247
1227
  }
1248
1228
  catch (persistError) {
1249
- log.logWarning(`Failed to persist OAuth credentials for ${linkToken.platform}/${linkToken.platformUserId}`, persistError instanceof Error ? persistError.message : String(persistError));
1229
+ log.logWarning(`Failed to persist OAuth credentials for ${linkToken.platform}/${linkToken.platformUserId}`, errorMessage(persistError));
1250
1230
  reportUserFacingError(persistError, {
1251
1231
  domain: "login",
1252
1232
  surface: "oauth",
@@ -1263,10 +1243,39 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
1263
1243
  });
1264
1244
  res.writeHead(500, { "Content-Type": "text/html; charset=utf-8" });
1265
1245
  res.end(renderErrorPage("OAuth tokens were received but could not be stored on the server. Fix the server issue and run /login again."));
1266
- return;
1246
+ return undefined;
1267
1247
  }
1248
+ return storedTargets;
1249
+ }
1250
+ async function handleOAuthCallback(options) {
1251
+ const resolved = resolveOAuthCallback(options);
1252
+ if (!resolved)
1253
+ return;
1254
+ const { service, code, clientId, clientSecret, codeVerifier, linkToken } = resolved;
1255
+ const redirectUri = `${requestBaseUrl(options.req)}/oauth/callback`;
1256
+ const tokenResponse = await exchangeOAuthCode({
1257
+ service,
1258
+ code,
1259
+ clientId,
1260
+ clientSecret,
1261
+ redirectUri,
1262
+ codeVerifier,
1263
+ });
1264
+ const storedTargets = storeOAuthCredentials({
1265
+ tokenResponse,
1266
+ service,
1267
+ clientId,
1268
+ clientSecret,
1269
+ linkToken,
1270
+ vaultManager: options.vaultManager,
1271
+ res: options.res,
1272
+ });
1273
+ if (!storedTargets)
1274
+ return;
1268
1275
  log.logInfo(`Stored [${storedTargets.join(", ")}] for ${linkToken.platform}/${linkToken.platformUserId} in vault:${linkToken.vaultId}`);
1269
- notify(linkToken.platform, linkToken.conversationId, `${service.label} OAuth stored (${storedTargets.join(", ")}) in vault \`${linkToken.vaultId}\`.`).catch((err) => {
1276
+ options
1277
+ .notify(linkToken.platform, linkToken.conversationId, `${service.label} OAuth stored (${storedTargets.join(", ")}) in vault \`${linkToken.vaultId}\`.`)
1278
+ .catch((err) => {
1270
1279
  log.logWarning("Failed to notify user after OAuth login", err.message);
1271
1280
  reportUserFacingError(err, {
1272
1281
  domain: "login",
@@ -1283,10 +1292,11 @@ async function handleOAuthCallback(url, req, linkTokenStore, vaultManager, notif
1283
1292
  },
1284
1293
  });
1285
1294
  });
1286
- res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
1287
- res.end(renderSuccessPage(`${service.label} OAuth connected successfully.`));
1295
+ options.res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
1296
+ options.res.end(renderSuccessPage(`${service.label} OAuth connected successfully.`));
1288
1297
  }
1289
- async function exchangeOAuthCode(service, code, clientId, clientSecret, redirectUri, codeVerifier) {
1298
+ async function exchangeOAuthCode(options) {
1299
+ const { service, code, clientId, clientSecret, redirectUri, codeVerifier } = options;
1290
1300
  const params = new URLSearchParams();
1291
1301
  params.set("grant_type", "authorization_code");
1292
1302
  params.set("code", code);