@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../../../src/adapters/web/admin/portal.ts"],"names":[],"mappings":"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","sourcesContent":["import { validateEventFilename } from \"../../../events/index.js\";\nimport {\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n statSync,\n} from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { basename, join, resolve as pathResolve, sep as pathSep } from \"node:path\";\nimport { atomicWritePrivateFile } from \"../../../file-guards.js\";\nimport { MikanModels } from \"../../../harness/models.js\";\nimport { parseFrontmatter, validateSkill } from \"../../../harness/skills.js\";\nimport { SessionStore } from \"../../../sessions/session-store.js\";\nimport type { EventStore } from \"../../../events/index.js\";\nimport { InMemoryTokenStore } from \"../token-store.js\";\nimport type { AdminToken, AdminTokenCreateOptions } from \"./types.js\";\nimport {\n adminViewFunctionsScript,\n adminViewStartupScript,\n adminViewStyles,\n} from \"./client-assets.js\";\n\nconst ADMIN_TOKEN_TTL_MS = 30 * 60 * 1000;\n\nexport class InMemoryAdminTokenStore extends InMemoryTokenStore<AdminToken> {\n create(args: AdminTokenCreateOptions): AdminToken {\n this.deleteWhere(\n (token) => token.platform === args.platform && token.platformUserId === args.platformUserId,\n );\n return this.createRecord(ADMIN_TOKEN_TTL_MS, {\n platform: args.platform,\n platformUserId: args.platformUserId,\n platformUserName: args.platformUserName || undefined,\n conversationId: args.conversationId,\n });\n }\n}\n\nimport {\n isThinkingLevel,\n loadOfficeVisibilityOverride,\n loadGlobalSettings,\n loadScopeMcpServers,\n resolveConversationSettings,\n} from \"../../../settings/index.js\";\nimport type { SandboxSettings, OfficeAddress } from \"../../../types.js\";\nimport { findMcpPreset, listMcpPresets, materializeMcpPreset } from \"../../../harness/mcp.js\";\nimport { loadMcpTools } from \"../../../harness/mcp.js\";\nimport {\n isValidMcpServerName,\n parseStandardMcpServers,\n redactMcpUrl,\n} from \"../../../harness/mcp.js\";\nimport type { McpServerConfig } from \"../../../harness/types.js\";\nimport {\n applyConversationSettings,\n applyOfficeVisibility,\n applyGlobalSettings,\n} from \"../../../settings/apply.js\";\nimport {\n escapeHtml,\n jsonResponse as jsonRes,\n readJsonBody,\n renderPortalShell,\n} from \"../portal-shell.js\";\nimport { resolveExistingSessionFile } from \"../session-view/portal.js\";\nimport { PRODUCT_NAME } from \"../../messages.js\";\nimport { credentialAuthorizationKey } from \"../../../sandbox/identity.js\";\nimport { resolveWorkspaceProjection } from \"../../../office/projection.js\";\nimport { sharedVaultKey } from \"../../../vault/index.js\";\nimport { modelKey, resolveAdminModelAccessStatuses } from \"./provider-models.js\";\n\nimport type { AdminServices, EventSummary } from \"./types.js\";\nimport {\n assertPlatformName,\n createOfficeAddress,\n listRegisteredOffices,\n sameOffice,\n} from \"../../../office/index.js\";\nimport type { Office, Workspace } from \"../../../office/types.js\";\nimport { errorMessage } from \"../../../unknown-values.js\";\n\nexport async function handleAdminRequest(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n): Promise<boolean> {\n if (!url.pathname.startsWith(\"/admin\")) return false;\n\n if (req.method === \"GET\" && url.pathname === \"/admin\") {\n const provided = url.searchParams.get(\"token\") ?? \"\";\n const token = services.adminTokenStore.peek(provided);\n if (!token) {\n res.writeHead(403, { \"Content-Type\": \"text/html; charset=utf-8\" });\n res.end(\n renderAdminErrorPage(\n \"Admin link is missing, invalid, or expired. Send `/admin` to the bot to get a fresh link.\",\n ),\n );\n return true;\n }\n res.writeHead(200, {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": \"no-store\",\n });\n res.end(renderAdminPage(token));\n return true;\n }\n\n if (url.pathname.startsWith(\"/admin/api/\")) {\n await routeApiRequest(req, res, url, services);\n return true;\n }\n\n return false;\n}\n\nasync function routeApiRequest(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n): Promise<void> {\n if (req.method === \"GET\") {\n await routeGetApiRequest(res, url, services);\n return;\n }\n if (req.method !== \"POST\") {\n jsonRes(res, 405, { error: \"Method not allowed\" });\n return;\n }\n await routePostApiRequest(req, res, url, services);\n}\n\nasync function routeGetApiRequest(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n): Promise<void> {\n const token = services.adminTokenStore.peek(url.searchParams.get(\"token\") ?? \"\");\n if (!token) {\n jsonRes(res, 403, { error: \"Unauthorized\" });\n return;\n }\n switch (url.pathname) {\n case \"/admin/api/conversations\":\n return serveConversationsList(res, services);\n case \"/admin/api/session-usage\":\n return serveSessionUsage(res, services);\n case \"/admin/api/conversation-usage\":\n return serveConversationUsage(res, url, services);\n case \"/admin/api/conversation-state\":\n return serveConversationState(res, url, services, token);\n case \"/admin/api/settings/global\":\n return serveGlobalSettings(res);\n case \"/admin/api/models\":\n return serveModelsList(res);\n case \"/admin/api/workspace/tree\":\n return serveWorkspaceTree(res, url, services, token);\n case \"/admin/api/workspace/file\":\n return serveWorkspaceFile(res, url, services, token);\n case \"/admin/api/skills\":\n return serveSkillsList(res, url, services, token);\n case \"/admin/api/skills/file\":\n return serveSkillFile(res, url, services, token);\n case \"/admin/api/mcp-servers\":\n return serveMcpServersList(res, url, services, token);\n case \"/admin/api/events\":\n return serveEventsList(res, services);\n case \"/admin/api/conversations/events\":\n return serveConversationEventsList(res, url, services, token);\n default:\n jsonRes(res, 404, { error: \"Not found\" });\n }\n}\n\nasync function routePostApiRequest(\n req: IncomingMessage,\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n): Promise<void> {\n const bodyLimit = url.pathname === \"/admin/api/skills/mutate\" ? 256 * 1024 : 32 * 1024;\n const body = await readJsonBody(req, res, bodyLimit);\n if (!body) return;\n const token = services.adminTokenStore.peek(typeof body.token === \"string\" ? body.token : \"\");\n if (!token) {\n jsonRes(res, 403, { error: \"Unauthorized\" });\n return;\n }\n switch (url.pathname) {\n case \"/admin/api/conversations/model\":\n return serveConversationModelUpdate(res, body, services, token);\n case \"/admin/api/conversations/visibility\":\n return serveConversationVisibilityUpdate(res, body, services, token);\n case \"/admin/api/conversations/slack\":\n return serveConversationSlackUpdate(res, body, services, token);\n case \"/admin/api/conversations/session-link\":\n return serveConversationSessionLink(res, body, services, token);\n case \"/admin/api/conversations/login-link\":\n return serveConversationLoginLink(res, body, services, token);\n case \"/admin/api/conversations/events/delete\":\n return serveConversationEventDelete(res, body, services, token);\n case \"/admin/api/mcp-servers/mutate\":\n return serveMcpServerMutation(res, body, services, token);\n case \"/admin/api/skills/mutate\":\n return serveSkillMutation(res, body, services, token);\n case \"/admin/api/settings/model\":\n return serveGlobalModelUpdate(res, body, services);\n case \"/admin/api/settings/sandbox\":\n return serveGlobalSandboxUpdate(res, body, services);\n case \"/admin/api/settings/slack\":\n return serveGlobalSlackUpdate(res, body, services);\n default:\n jsonRes(res, 404, { error: \"Not found\" });\n }\n}\n\ninterface AdminConversationScope {\n address: OfficeAddress;\n conversationId: string;\n error?: string;\n}\n\nexport function resolveConversationScope(\n requestedId: string,\n requestedPlatform: string,\n token: AdminToken,\n): AdminConversationScope {\n const fallback = createOfficeAddress(token.platform, token.conversationId);\n try {\n const address = createOfficeAddress(\n requestedPlatform ? assertPlatformName(requestedPlatform) : token.platform,\n requestedId || token.conversationId,\n );\n return { address, conversationId: address.conversationId };\n } catch {\n return {\n address: fallback,\n conversationId: fallback.conversationId,\n error: \"Invalid conversation scope.\",\n };\n }\n}\n\nfunction resolveTargetConversation(\n body: Record<string, unknown>,\n token: AdminToken,\n): AdminConversationScope {\n const requested = typeof body.conversationId === \"string\" ? body.conversationId.trim() : \"\";\n const platform = typeof body.platform === \"string\" ? body.platform.trim() : \"\";\n return resolveConversationScope(requested, platform, token);\n}\n\nfunction requireAdminWorkspace(res: ServerResponse, services: AdminServices): Workspace | null {\n if (!services.workspace) {\n jsonRes(res, 503, { error: \"Working directory not available\" });\n return null;\n }\n return services.workspace;\n}\n\nfunction requireConversationWorkspace(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): { scope: AdminConversationScope; workspace: Workspace } | undefined {\n const scope = resolveTargetConversation(body, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return undefined;\n }\n const workspace = requireAdminWorkspace(res, services);\n return workspace ? { scope, workspace } : undefined;\n}\n\nfunction listAdminOffices(workspace: Workspace): OfficeAddress[] {\n return listRegisteredOffices(workspace.stateDir)\n .filter((office) => existsSync(workspace.office(office).dir))\n .map((office) => createOfficeAddress(office.platform, office.conversationId))\n .toSorted(\n (a, b) =>\n a.platform.localeCompare(b.platform) || a.conversationId.localeCompare(b.conversationId),\n );\n}\n\nfunction conversationLastActivity(workspace: Workspace, office: OfficeAddress): number | null {\n const dir = workspace.office(office).dir;\n if (!existsSync(dir)) return null;\n let latest = 0;\n const visit = (path: string, depth: number): void => {\n if (depth > 3) return;\n let entries;\n try {\n entries = readdirSync(path, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const full = join(path, entry.name);\n if (entry.isDirectory()) {\n visit(full, depth + 1);\n continue;\n }\n try {\n const stats = statSync(full);\n if (stats.mtimeMs > latest) latest = stats.mtimeMs;\n } catch {}\n }\n };\n visit(dir, 0);\n return latest > 0 ? latest : null;\n}\n\nfunction conversationDisplayLabel(services: AdminServices, office: OfficeAddress): string {\n const bot = services.botsByPlatform?.[office.platform];\n const channel = bot?.getMessagingInfo().channels.find((c) => c.id === office.conversationId);\n if (channel) return `${office.platform}:#${channel.name}:${office.conversationId}`;\n return `${office.platform}:${office.conversationId}`;\n}\n\nfunction serveConversationsList(res: ServerResponse, services: AdminServices): void {\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n\n const running = services.runtime?.getRunningSessions() ?? [];\n\n const conversations = listAdminOffices(workspace).map((office) => ({\n platform: office.platform,\n conversationId: office.conversationId,\n label: conversationDisplayLabel(services, office),\n running: running.some((session) => sameOffice(session.address, office)),\n lastActivityAt: conversationLastActivity(workspace, office),\n }));\n\n jsonRes(res, 200, { conversations });\n}\n\ninterface SessionUsageRow {\n conversationId: string;\n label: string;\n fileName: string;\n sessionId: string;\n updatedAt: string;\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n total: number;\n cost: number;\n}\n\nasync function serveSessionUsage(res: ServerResponse, services: AdminServices): Promise<void> {\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n\n const usageLists: SessionUsageRow[][] = [];\n for (const office of listAdminOffices(workspace)) {\n usageLists.push(\n await listConversationSessionUsage(\n workspace,\n office,\n conversationDisplayLabel(services, office),\n ),\n );\n }\n const rows = usageLists\n .flat()\n .toSorted((a, b) => b.total - a.total)\n .slice(0, 20);\n\n jsonRes(res, 200, { sessions: rows });\n}\n\nasync function listConversationSessionUsage(\n workspace: Workspace,\n office: OfficeAddress,\n label: string,\n): Promise<SessionUsageRow[]> {\n const sessionDir = workspace.office(office).sessionsDir;\n let files: string[];\n try {\n files = readdirSync(sessionDir, { withFileTypes: true })\n .filter((entry) => entry.isFile() && entry.name.endsWith(\".jsonl\"))\n .map((entry) => entry.name);\n } catch {\n return [];\n }\n const rows: SessionUsageRow[] = [];\n for (const name of files) {\n rows.push(...(await readSessionUsage(join(sessionDir, name), office.conversationId, label)));\n }\n return rows;\n}\n\nasync function readSessionUsage(\n sessionFile: string,\n conversationId: string,\n label: string,\n): Promise<SessionUsageRow[]> {\n try {\n const manager = await SessionStore.inspect(sessionFile);\n const header = manager.getHeader();\n\n const entries = await manager.getEntries();\n const usage = entries.reduce(\n (sum, entry) => {\n if (entry.type !== \"message\" || entry.message.role !== \"assistant\") return sum;\n const message = entry.message as unknown as AssistantUsageMessage;\n const item = message.usage;\n if (!item) return sum;\n sum.input += numberOrZero(item.input);\n sum.output += numberOrZero(item.output);\n sum.cacheRead += numberOrZero(item.cacheRead);\n sum.cacheWrite += numberOrZero(item.cacheWrite);\n sum.cost += numberOrZero(item.cost?.total);\n return sum;\n },\n { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: 0 },\n );\n const total = usage.input + usage.output + usage.cacheRead + usage.cacheWrite;\n if (total <= 0) return [];\n\n return [\n {\n conversationId,\n label,\n fileName: basename(sessionFile),\n sessionId: header.id,\n updatedAt:\n entries.length > 0 ? new Date(entries.at(-1)!.timestamp).toISOString() : header.timestamp,\n ...usage,\n total,\n },\n ];\n } catch {\n return [];\n }\n}\n\ninterface AssistantUsageMessage {\n usage?: {\n input?: unknown;\n output?: unknown;\n cacheRead?: unknown;\n cacheWrite?: unknown;\n cost?: { total?: unknown };\n };\n}\n\nfunction numberOrZero(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : 0;\n}\n\ninterface UsageBucket {\n date: string;\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n total: number;\n cost: number;\n}\n\nfunction localDayKey(d: Date): string {\n const year = d.getFullYear();\n const month = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\nfunction emptyBucket(date: string): UsageBucket {\n return { date, input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0, cost: 0 };\n}\n\nasync function serveConversationUsage(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n): Promise<void> {\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n\n const conversationId = (url.searchParams.get(\"conversationId\") ?? \"\").trim();\n const platformParam = (url.searchParams.get(\"platform\") ?? \"\").trim();\n const office = listAdminOffices(workspace).find(\n (candidate) =>\n candidate.conversationId === conversationId &&\n (!platformParam || candidate.platform === platformParam),\n );\n if (!office) {\n jsonRes(res, 400, { error: \"Unknown conversationId\" });\n return;\n }\n\n const days = 14;\n\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const buckets = new Map<string, UsageBucket>();\n const order: string[] = [];\n for (let i = days - 1; i >= 0; i--) {\n const d = new Date(today);\n d.setDate(today.getDate() - i);\n const key = localDayKey(d);\n order.push(key);\n buckets.set(key, emptyBucket(key));\n }\n const cutoff = new Date(today);\n cutoff.setDate(today.getDate() - (days - 1));\n\n const flags = { hasOlder: false };\n const sessionDir = workspace.office(office).sessionsDir;\n try {\n for (const entry of readdirSync(sessionDir, { withFileTypes: true })) {\n if (!entry.isFile() || !entry.name.endsWith(\".jsonl\")) continue;\n await accumulateSessionUsageByDay(join(sessionDir, entry.name), cutoff, buckets, flags);\n }\n } catch {}\n\n const series = order.map((key) => buckets.get(key) ?? emptyBucket(key));\n const totals = series.reduce((sum, b) => {\n sum.input += b.input;\n sum.output += b.output;\n sum.cacheRead += b.cacheRead;\n sum.cacheWrite += b.cacheWrite;\n sum.total += b.total;\n sum.cost += b.cost;\n return sum;\n }, emptyBucket(\"\"));\n\n jsonRes(res, 200, {\n platform: office.platform,\n conversationId,\n label: conversationDisplayLabel(services, office),\n days,\n hasOlder: flags.hasOlder,\n buckets: series,\n totals: {\n input: totals.input,\n output: totals.output,\n cacheRead: totals.cacheRead,\n cacheWrite: totals.cacheWrite,\n total: totals.total,\n cost: totals.cost,\n },\n });\n}\n\nasync function accumulateSessionUsageByDay(\n sessionFile: string,\n cutoff: Date,\n buckets: Map<string, UsageBucket>,\n flags: { hasOlder: boolean },\n): Promise<void> {\n try {\n const manager = await SessionStore.inspect(sessionFile);\n\n for (const entry of await manager.getEntries()) {\n if (entry.type !== \"message\" || entry.message.role !== \"assistant\") continue;\n const usage = (entry.message as unknown as AssistantUsageMessage).usage;\n if (!usage || !entry.timestamp) continue;\n\n const when = new Date(entry.timestamp);\n if (Number.isNaN(when.getTime())) continue;\n if (when < cutoff) {\n flags.hasOlder = true;\n continue;\n }\n\n const bucket = buckets.get(localDayKey(when));\n if (!bucket) continue;\n\n const input = numberOrZero(usage.input);\n const output = numberOrZero(usage.output);\n const cacheRead = numberOrZero(usage.cacheRead);\n const cacheWrite = numberOrZero(usage.cacheWrite);\n bucket.input += input;\n bucket.output += output;\n bucket.cacheRead += cacheRead;\n bucket.cacheWrite += cacheWrite;\n bucket.total += input + output + cacheRead + cacheWrite;\n bucket.cost += numberOrZero(usage.cost?.total);\n }\n } catch {}\n}\n\nfunction serveConversationState(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): void {\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 400, { error: scope.error });\n return;\n }\n const conversationId = scope.conversationId;\n\n const office = workspace.office(scope.address);\n const globalConfig = loadGlobalSettings();\n const conversationConfig = resolveConversationSettings(office);\n const conversationWorkspace = resolveWorkspaceProjection(office);\n\n jsonRes(res, 200, {\n conversationId,\n provider: conversationConfig.provider,\n model: conversationConfig.model,\n thinkingLevel: conversationConfig.thinkingLevel,\n globalProvider: globalConfig.provider,\n globalModel: globalConfig.model,\n globalThinkingLevel: globalConfig.thinkingLevel,\n officeVisibility: conversationWorkspace.visibility,\n officeVisibilitySource: conversationWorkspace.source,\n officeVisibilityOverride: loadOfficeVisibilityOverride(office),\n slack: {\n replyMode:\n conversationConfig.slack?.replyMode ?? globalConfig.slack?.replyMode ?? \"top-level\",\n globalReplyMode: globalConfig.slack?.replyMode ?? \"top-level\",\n },\n });\n}\n\nfunction serveGlobalSettings(res: ServerResponse): void {\n try {\n const config = loadGlobalSettings();\n jsonRes(res, 200, {\n provider: config.provider,\n model: config.model,\n thinkingLevel: config.thinkingLevel,\n sandboxCpus: config.sandbox?.cpus ?? null,\n sandboxMemory: config.sandbox?.memory ?? null,\n sandboxBoostCpus: config.sandbox?.boost?.cpus ?? null,\n sandboxBoostMemory: config.sandbox?.boost?.memory ?? null,\n defaultSharedVault: config.sandbox?.defaultSharedVault ?? null,\n slack: {\n replyMode: config.slack?.replyMode ?? \"top-level\",\n },\n });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nasync function serveModelsList(res: ServerResponse): Promise<void> {\n try {\n const registry = MikanModels.create();\n const availableModels = await registry.getAvailable();\n const statuses = await resolveAdminModelAccessStatuses(registry, availableModels);\n const models = availableModels.map((model) => ({\n provider: model.provider,\n id: model.id,\n name: model.name ?? model.id,\n reasoning: model.reasoning,\n input: model.input,\n contextWindow: model.contextWindow,\n maxTokens: model.maxTokens,\n status: statuses.get(modelKey(model.provider, model.id))?.status ?? \"available\",\n }));\n jsonRes(res, 200, { models });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nfunction serveConversationModelUpdate(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): void {\n const provider = typeof body.provider === \"string\" ? body.provider.trim() : \"\";\n const model = typeof body.model === \"string\" ? body.model.trim() : \"\";\n const thinkingLevel = isThinkingLevel(body.thinkingLevel) ? body.thinkingLevel : undefined;\n\n if (!provider || !model) {\n jsonRes(res, 400, { error: \"Missing provider or model\" });\n return;\n }\n const target = requireConversationWorkspace(res, body, services, token);\n if (!target) return;\n const { scope, workspace } = target;\n\n try {\n const result = applyConversationSettings(services.runtime, workspace.office(scope.address), {\n provider,\n model,\n thinkingLevel,\n });\n if (!result.ok) {\n jsonRes(res, 409, {\n error: \"Conversation has a running job; retry after it finishes (or /stop it).\",\n });\n return;\n }\n jsonRes(res, 200, { ok: true, runtimeSwitched: result.runtimeSwitched });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nfunction serveConversationVisibilityUpdate(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): void {\n if (body.visibility !== \"private\" && body.visibility !== \"default\") {\n jsonRes(res, 400, { error: \"visibility must be 'private' or 'default'\" });\n return;\n }\n const target = requireConversationWorkspace(res, body, services, token);\n if (!target) return;\n const { scope, workspace } = target;\n try {\n const result = applyOfficeVisibility(\n services.runtime,\n workspace.office(scope.address),\n body.visibility === \"private\" ? \"private\" : null,\n );\n if (!result.ok) {\n jsonRes(res, 409, { error: \"Conversation is busy; retry when the current run finishes\" });\n return;\n }\n jsonRes(res, 200, { ok: true });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nfunction serveConversationSlackUpdate(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): void {\n const replyMode = body.replyMode;\n if (replyMode !== \"top-level\" && replyMode !== \"thread\") {\n jsonRes(res, 400, { error: \"replyMode must be 'top-level' or 'thread'\" });\n return;\n }\n const target = requireConversationWorkspace(res, body, services, token);\n if (!target) return;\n const { scope, workspace } = target;\n respondWithSettingsUpdate(res, () => {\n applyConversationSettings(services.runtime, workspace.office(scope.address), {\n slack: { replyMode },\n });\n return { ok: true };\n });\n}\n\nfunction serveConversationSessionLink(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): void {\n const target = requireConversationWorkspace(res, body, services, token);\n if (!target) return;\n const { scope, workspace } = target;\n if (!services.sessionViewTokenStore) {\n jsonRes(res, 503, { error: \"Session view token store not available\" });\n return;\n }\n if (!services.portalBaseUrl) {\n jsonRes(res, 503, {\n error: \"Portal URL not configured. Set MIKAN_LINK_URL to enable link generation.\",\n });\n return;\n }\n\n const sessionFile = resolveExistingSessionFile(\n workspace.office(scope.address).dir,\n scope.conversationId,\n );\n if (!sessionFile) {\n jsonRes(res, 404, { error: \"No session file found for this conversation\" });\n return;\n }\n\n try {\n const { token: viewToken } = services.sessionViewTokenStore.create({\n platform: token.platform,\n platformUserId: token.platformUserId,\n conversationId: scope.conversationId,\n sessionKey: scope.conversationId,\n sessionFile,\n platformUserName: token.platformUserName,\n });\n const url = `${services.portalBaseUrl}/session?token=${encodeURIComponent(viewToken)}`;\n jsonRes(res, 200, { ok: true, url });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nfunction serveConversationLoginLink(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): void {\n const scope = resolveTargetConversation(body, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n if (!services.portalBaseUrl) {\n jsonRes(res, 503, { error: \"Portal URL not configured.\" });\n return;\n }\n if (!services.sandbox) {\n jsonRes(res, 503, { error: \"Sandbox config not available.\" });\n return;\n }\n const sharedName = typeof body.sharedVault === \"string\" ? body.sharedVault.trim() : \"\";\n let vaultId: string;\n if (sharedName) {\n const key = sharedVaultKey(sharedName);\n if (!key) {\n jsonRes(res, 400, { error: \"Invalid shared vault name\" });\n return;\n }\n vaultId = key;\n } else {\n try {\n vaultId = credentialAuthorizationKey(services.sandbox, {\n userId: token.platformUserId,\n address: scope.address,\n });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n return;\n }\n }\n try {\n const { token: linkToken } = services.linkTokenStore.create(\n token.platform,\n token.platformUserId,\n scope.conversationId,\n vaultId,\n \"\",\n );\n const url = `${services.portalBaseUrl}/link?token=${encodeURIComponent(linkToken)}`;\n jsonRes(res, 200, { ok: true, url, vaultId });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nfunction serveGlobalModelUpdate(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n): void {\n const provider = typeof body.provider === \"string\" ? body.provider.trim() : \"\";\n const model = typeof body.model === \"string\" ? body.model.trim() : \"\";\n const thinkingLevel = isThinkingLevel(body.thinkingLevel) ? body.thinkingLevel : undefined;\n\n if (!provider || !model) {\n jsonRes(res, 400, { error: \"Missing provider or model\" });\n return;\n }\n\n respondWithSettingsUpdate(res, () => {\n const result = applyGlobalSettings(services.runtime, {\n provider,\n model,\n thinkingLevel,\n });\n return {\n ok: true,\n staleConversations: result.staleConversations.map(\n (office) => `${office.platform}:${office.conversationId}`,\n ),\n };\n });\n}\n\nfunction serveGlobalSlackUpdate(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n): void {\n const replyMode = body.replyMode;\n if (replyMode !== \"top-level\" && replyMode !== \"thread\") {\n jsonRes(res, 400, { error: \"replyMode must be 'top-level' or 'thread'\" });\n return;\n }\n\n respondWithSettingsUpdate(res, () => {\n applyGlobalSettings(services.runtime, { slack: { replyMode } });\n return { ok: true };\n });\n}\n\nfunction serveGlobalSandboxUpdate(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n): void {\n const cpus = typeof body.cpus === \"string\" ? body.cpus.trim() : \"\";\n const memory = typeof body.memory === \"string\" ? body.memory.trim() : \"\";\n const boostCpus = typeof body.boostCpus === \"string\" ? body.boostCpus.trim() : \"\";\n const boostMemory = typeof body.boostMemory === \"string\" ? body.boostMemory.trim() : \"\";\n const update: SandboxSettings = {\n ...(cpus ? { cpus } : {}),\n ...(memory ? { memory } : {}),\n ...(boostCpus || boostMemory\n ? {\n boost: {\n ...(boostCpus ? { cpus: boostCpus } : {}),\n ...(boostMemory ? { memory: boostMemory } : {}),\n },\n }\n : {}),\n };\n\n if (Object.keys(update).length === 0) {\n jsonRes(res, 400, { error: \"No valid sandbox fields provided\" });\n return;\n }\n\n respondWithSettingsUpdate(res, () => {\n applyGlobalSettings(services.runtime, { sandbox: update });\n return { ok: true };\n });\n}\n\nfunction respondWithSettingsUpdate(res: ServerResponse, update: () => object): void {\n try {\n jsonRes(res, 200, update());\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n }\n}\n\nconst WORKSPACE_TREE_MAX_DEPTH = 4;\nconst WORKSPACE_TREE_MAX_ENTRIES = 800;\nconst PREVIEW_FILE_MAX_BYTES = 256 * 1024;\n\nconst WORKSPACE_TOP_DIRS = new Set([\"scratch\"]);\n\nfunction isWorkspacePathAllowed(rel: string): boolean {\n if (rel === \"\") return true;\n const first = rel.split(\"/\").find(Boolean);\n if (first === undefined) return true;\n return WORKSPACE_TOP_DIRS.has(first);\n}\n\nfunction resolveConversationFromQuery(url: URL, token: AdminToken): AdminConversationScope {\n const requested = (url.searchParams.get(\"conversationId\") ?? \"\").trim();\n const platform = (url.searchParams.get(\"platform\") ?? \"\").trim();\n return resolveConversationScope(requested, platform, token);\n}\n\ninterface SafePathResult {\n absolute: string;\n error?: string;\n}\n\nfunction safeJoinUnderRoot(rootDir: string, relative: string): SafePathResult {\n if (relative.startsWith(\"/\") || relative.includes(\"\\0\")) {\n return { absolute: \"\", error: \"Invalid path\" };\n }\n if (relative.split(/[\\\\/]+/).some((part) => part === \"..\" || part === \"\")) {\n if (relative !== \"\") return { absolute: \"\", error: \"Invalid path\" };\n }\n const target = pathResolve(rootDir, relative);\n const rootAbs = pathResolve(rootDir);\n if (target !== rootAbs && !target.startsWith(rootAbs + pathSep)) {\n return { absolute: \"\", error: \"Path escapes conversation directory\" };\n }\n return { absolute: target };\n}\n\ninterface TreeNode {\n name: string;\n path: string;\n type: \"dir\" | \"file\";\n size?: number;\n mtimeMs?: number;\n children?: TreeNode[];\n truncated?: boolean;\n}\n\nfunction buildTree(startDir: string, relPrefix: string): TreeNode | null {\n let counter = { value: 0 };\n const walk = (dir: string, rel: string, depth: number): TreeNode | null => {\n if (counter.value >= WORKSPACE_TREE_MAX_ENTRIES) return null;\n let stats;\n try {\n stats = statSync(dir);\n } catch {\n return null;\n }\n const name = rel === \"\" ? \".\" : basename(rel);\n if (!stats.isDirectory()) {\n counter.value += 1;\n return {\n name,\n path: rel,\n type: \"file\",\n size: stats.size,\n mtimeMs: stats.mtimeMs,\n };\n }\n counter.value += 1;\n if (depth >= WORKSPACE_TREE_MAX_DEPTH) {\n return { name, path: rel, type: \"dir\", truncated: true };\n }\n let entries;\n try {\n entries = readdirSync(dir, { withFileTypes: true });\n } catch {\n return { name, path: rel, type: \"dir\" };\n }\n const children: TreeNode[] = [];\n let truncated = false;\n for (const entry of entries.toSorted((a, b) => {\n if (a.isDirectory() !== b.isDirectory()) return a.isDirectory() ? -1 : 1;\n return a.name.localeCompare(b.name);\n })) {\n const childRel = rel === \"\" ? entry.name : `${rel}/${entry.name}`;\n if (!isWorkspacePathAllowed(childRel)) continue;\n if (counter.value >= WORKSPACE_TREE_MAX_ENTRIES) {\n truncated = true;\n break;\n }\n const node = walk(join(dir, entry.name), childRel, depth + 1);\n if (node) children.push(node);\n }\n return {\n name,\n path: rel,\n type: \"dir\",\n children,\n truncated: truncated ? true : undefined,\n };\n };\n const node = walk(startDir, relPrefix, 0);\n return node;\n}\n\nfunction serveWorkspaceTree(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): void {\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const convDir = workspace.office(scope.address).dir;\n if (!existsSync(convDir)) {\n jsonRes(res, 200, { conversationId: scope.conversationId, tree: null });\n return;\n }\n const requestedSub = (url.searchParams.get(\"path\") ?? \"\").trim();\n if (!isWorkspacePathAllowed(requestedSub)) {\n jsonRes(res, 403, { error: \"Workspace path is not exposed\" });\n return;\n }\n const startSafe = safeJoinUnderRoot(convDir, requestedSub);\n if (startSafe.error) {\n jsonRes(res, 400, { error: startSafe.error });\n return;\n }\n const tree = buildTree(startSafe.absolute, requestedSub);\n jsonRes(res, 200, {\n conversationId: scope.conversationId,\n root: requestedSub || \".\",\n tree,\n });\n}\n\nconst BINARY_PROBE_BYTES = 4096;\n\nfunction looksTextual(buf: Buffer): boolean {\n const limit = Math.min(buf.length, BINARY_PROBE_BYTES);\n for (let i = 0; i < limit; i++) {\n const byte = buf[i];\n if (byte === undefined || byte === 0) return false;\n if (byte < 9) return false;\n if (byte === 11 || byte === 12) return false;\n if (byte > 13 && byte < 32) return false;\n }\n return true;\n}\n\nfunction servePreviewFile(\n res: ServerResponse,\n absolutePath: string,\n metadata: Record<string, unknown>,\n notFoundMessage: string,\n): void {\n let stats;\n try {\n stats = statSync(absolutePath);\n } catch {\n jsonRes(res, 404, { error: notFoundMessage });\n return;\n }\n if (!stats.isFile()) {\n jsonRes(res, 400, { error: \"Not a file\" });\n return;\n }\n if (stats.size > PREVIEW_FILE_MAX_BYTES) {\n jsonRes(res, 413, {\n error: \"File too large to preview\",\n size: stats.size,\n limit: PREVIEW_FILE_MAX_BYTES,\n });\n return;\n }\n let buf: Buffer;\n try {\n buf = readFileSync(absolutePath);\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n return;\n }\n if (!looksTextual(buf)) {\n jsonRes(res, 200, {\n ...metadata,\n size: stats.size,\n mtimeMs: stats.mtimeMs,\n binary: true,\n content: null,\n });\n return;\n }\n jsonRes(res, 200, {\n ...metadata,\n size: stats.size,\n mtimeMs: stats.mtimeMs,\n binary: false,\n content: buf.toString(\"utf-8\"),\n });\n}\n\nfunction serveWorkspaceFile(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): void {\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const requestedPath = (url.searchParams.get(\"path\") ?? \"\").trim();\n if (!requestedPath) {\n jsonRes(res, 400, { error: \"Missing path\" });\n return;\n }\n if (!isWorkspacePathAllowed(requestedPath)) {\n jsonRes(res, 403, { error: \"Workspace path is not exposed\" });\n return;\n }\n const convDir = workspace.office(scope.address).dir;\n const safe = safeJoinUnderRoot(convDir, requestedPath);\n if (safe.error) {\n jsonRes(res, 400, { error: safe.error });\n return;\n }\n servePreviewFile(res, safe.absolute, { path: requestedPath }, \"File not found\");\n}\n\ninterface SkillEntry {\n name: string;\n description: string;\n source: \"global\" | \"conversation\";\n path: string;\n directory: string;\n}\n\nfunction readSkillMeta(filePath: string): { name?: string; description?: string } {\n let text: string;\n try {\n text = readFileSync(filePath, \"utf-8\");\n } catch {\n return {};\n }\n const { values } = parseFrontmatter(text);\n const out: { name?: string; description?: string } = {};\n for (const [key, value] of Object.entries(values)) {\n const normalized = key.toLowerCase();\n if (normalized === \"name\") out.name = value;\n if (normalized === \"description\") out.description = value;\n }\n return out;\n}\n\nexport function readSkillsFromDir(skillsDir: string, source: SkillEntry[\"source\"]): SkillEntry[] {\n if (!existsSync(skillsDir)) return [];\n const out: SkillEntry[] = [];\n let entries;\n try {\n entries = readdirSync(skillsDir, { withFileTypes: true });\n } catch {\n return [];\n }\n for (const entry of entries) {\n if (!entry.isDirectory() || entry.name.startsWith(\".\")) continue;\n const skillMd = join(skillsDir, entry.name, \"SKILL.md\");\n if (!existsSync(skillMd)) continue;\n const meta = readSkillMeta(skillMd);\n out.push({\n name: meta.name ?? entry.name,\n description: meta.description ?? \"\",\n source,\n path: skillMd,\n directory: entry.name,\n });\n }\n return out.toSorted((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction serveMcpServersList(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): void {\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const servers = loadScopeMcpServers(workspace.office(scope.address));\n jsonRes(res, 200, {\n conversationId: scope.conversationId,\n presets: listMcpPresets(),\n global: redactMcpServers(servers.global),\n conversation: redactMcpServers(servers.conversation),\n });\n}\n\nfunction redactMcpServers(map: Record<string, McpServerConfig>): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(map).map(([name, config]) => [\n name,\n {\n command: config.command,\n args: config.args,\n url: config.url !== undefined ? redactMcpUrl(config.url) : undefined,\n disabled: config.disabled,\n envKeys: Object.keys(config.env ?? {}),\n headerKeys: Object.keys(config.headers ?? {}),\n },\n ]),\n );\n}\n\nfunction mcpStringMap(value: unknown): Record<string, string> | undefined {\n if (typeof value !== \"object\" || value === null) return undefined;\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(value)) {\n if (typeof v === \"string\" && k.trim()) out[k.trim()] = v;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nconst MCP_VERIFY_TIMEOUT_MS = 20_000;\n\ntype McpVerifyResult = { name: string; tools: number } | { name: string; error: string };\n\nasync function verifyMcpServers(\n servers: Record<string, McpServerConfig>,\n): Promise<McpVerifyResult[]> {\n const names = Object.keys(servers);\n if (names.length === 0) return [];\n const loaded = await loadMcpTools(servers, AbortSignal.timeout(MCP_VERIFY_TIMEOUT_MS));\n try {\n return names.map((name) => {\n const failure = loaded.errors.find((e) => e.server === name);\n if (failure) {\n const url = servers[name]?.url;\n const error = url ? failure.error.split(url).join(redactMcpUrl(url)) : failure.error;\n return { name, error };\n }\n const prefix = `mcp__${name}__`;\n return { name, tools: loaded.tools.filter((t) => t.name.startsWith(prefix)).length };\n });\n } finally {\n await loaded.dispose();\n }\n}\n\ntype McpMutationPlan =\n | { next: Record<string, McpServerConfig>; touched: Record<string, McpServerConfig> }\n | { status: number; error: string };\n\nfunction planMcpMutation(\n action: \"import\" | \"install\" | \"remove\" | \"toggle\",\n body: Record<string, unknown>,\n current: Record<string, McpServerConfig>,\n): McpMutationPlan {\n const next: Record<string, McpServerConfig> = { ...current };\n if (action === \"import\") {\n const parsed = parseStandardMcpServers(typeof body.json === \"string\" ? body.json : \"\");\n if (!parsed.servers) return { status: 400, error: parsed.error };\n Object.assign(next, parsed.servers);\n return { next, touched: parsed.servers };\n }\n const preset =\n action === \"install\" && typeof body.presetId === \"string\"\n ? findMcpPreset(body.presetId)\n : undefined;\n if (action === \"install\" && !preset) return { status: 400, error: \"unknown MCP preset\" };\n const name = preset?.serverName ?? (typeof body.name === \"string\" ? body.name.trim() : \"\");\n if (!isValidMcpServerName(name)) {\n return {\n status: 400,\n error: \"invalid server name (letters, digits, '_' or '-', starting with a letter)\",\n };\n }\n if (action === \"install\") {\n try {\n next[name] = materializeMcpPreset(preset!, mcpStringMap(body.credentials) ?? {});\n } catch (err) {\n return { status: 400, error: errorMessage(err) };\n }\n return { next, touched: { [name]: next[name] } };\n }\n if (!(name in next)) return { status: 404, error: \"Not declared here.\" };\n if (action === \"remove\") {\n delete next[name];\n return { next, touched: {} };\n }\n const entry = next[name]!;\n next[name] = entry.disabled ? { ...entry, disabled: undefined } : { ...entry, disabled: true };\n return { next, touched: {} };\n}\n\nasync function serveMcpServerMutation(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): Promise<void> {\n const action = body.action;\n if (\n action !== \"import\" &&\n action !== \"install\" &&\n action !== \"remove\" &&\n action !== \"toggle\" &&\n action !== \"test\"\n ) {\n jsonRes(res, 400, {\n error: \"action must be 'import', 'install', 'remove', 'toggle', or 'test'\",\n });\n return;\n }\n const mutationScope = body.scope === \"global\" ? \"global\" : \"conversation\";\n const scope = resolveTargetConversation(body, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const office = workspace.office(scope.address);\n const maps = loadScopeMcpServers(office);\n const current = mutationScope === \"global\" ? maps.global : maps.conversation;\n\n if (action === \"test\") {\n const name = typeof body.name === \"string\" ? body.name.trim() : \"\";\n const entry = current[name];\n if (!entry) {\n jsonRes(res, 404, { error: \"Not declared here.\" });\n return;\n }\n const results = await verifyMcpServers({ [name]: { ...entry, disabled: undefined } });\n jsonRes(res, 200, { ok: true, results });\n return;\n }\n\n const plan = planMcpMutation(action, body, current);\n if (\"error\" in plan) {\n jsonRes(res, plan.status, { error: plan.error });\n return;\n }\n const result =\n mutationScope === \"global\"\n ? applyGlobalSettings(services.runtime, { mcpServers: plan.next })\n : applyConversationSettings(services.runtime, office, { mcpServers: plan.next });\n if (!result.ok) {\n jsonRes(res, 409, { error: \"Conversation is busy; try again shortly.\" });\n return;\n }\n const results = await verifyMcpServers(plan.touched);\n jsonRes(res, 200, { ok: true, results });\n}\n\nfunction serveSkillsList(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): void {\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const global = readSkillsFromDir(workspace.skillsDir, \"global\");\n const conversation = readSkillsFromDir(workspace.office(scope.address).skillsDir, \"conversation\");\n jsonRes(res, 200, {\n conversationId: scope.conversationId,\n skills: [...global, ...conversation],\n });\n}\n\nfunction serveSkillFile(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): void {\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n\n const source = (url.searchParams.get(\"source\") ?? \"\").trim();\n const directory = (url.searchParams.get(\"directory\") ?? \"\").trim();\n if (source !== \"global\" && source !== \"conversation\") {\n jsonRes(res, 400, { error: \"Invalid skill source\" });\n return;\n }\n if (\n !directory ||\n directory.includes(\"/\") ||\n directory.includes(\"\\\\\") ||\n directory.includes(\"..\")\n ) {\n jsonRes(res, 400, { error: \"Invalid skill directory\" });\n return;\n }\n\n const skillsRoot =\n source === \"global\" ? workspace.skillsDir : workspace.office(scope.address).skillsDir;\n const safe = safeJoinUnderRoot(skillsRoot, join(directory, \"SKILL.md\"));\n if (safe.error) {\n jsonRes(res, 400, { error: safe.error });\n return;\n }\n\n servePreviewFile(res, safe.absolute, { source, directory }, \"Skill file not found\");\n}\n\nconst SKILL_DIRECTORY_PATTERN = /^[a-z0-9-]+$/;\n\nfunction resolveSkillsRoot(\n workspace: Workspace,\n scope: AdminConversationScope,\n source: unknown,\n): { root: string; source: \"global\" | \"conversation\" } | { error: string } {\n if (source !== \"global\" && source !== \"conversation\") {\n return { error: \"Invalid skill source\" };\n }\n return {\n root: source === \"global\" ? workspace.skillsDir : workspace.office(scope.address).skillsDir,\n source,\n };\n}\n\nasync function serveSkillMutation(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): Promise<void> {\n const action = body.action;\n if (action !== \"save\" && action !== \"delete\") {\n jsonRes(res, 400, { error: \"action must be 'save' or 'delete'\" });\n return;\n }\n const scope = resolveTargetConversation(body, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const resolved = resolveSkillsRoot(workspace, scope, body.source);\n if (\"error\" in resolved) {\n jsonRes(res, 400, { error: resolved.error });\n return;\n }\n\n const directory = typeof body.directory === \"string\" ? body.directory.trim() : \"\";\n if (!directory || !SKILL_DIRECTORY_PATTERN.test(directory)) {\n jsonRes(res, 400, {\n error: \"directory must be lowercase a-z, 0-9 and hyphens\",\n });\n return;\n }\n const safe = safeJoinUnderRoot(resolved.root, directory);\n if (safe.error) {\n jsonRes(res, 400, { error: safe.error });\n return;\n }\n\n if (action === \"delete\") {\n if (!existsSync(join(safe.absolute, \"SKILL.md\"))) {\n jsonRes(res, 404, { error: \"Skill not found\" });\n return;\n }\n try {\n rmSync(safe.absolute, { recursive: true, force: true });\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n return;\n }\n jsonRes(res, 200, { ok: true });\n return;\n }\n\n const name = typeof body.name === \"string\" ? body.name.trim() : directory;\n const description = typeof body.description === \"string\" ? body.description.trim() : \"\";\n const content = typeof body.content === \"string\" ? body.content : \"\";\n if (!description) {\n jsonRes(res, 400, { error: \"description is required\" });\n return;\n }\n const errors = validateSkill(name, description);\n if (errors.length > 0) {\n jsonRes(res, 400, { error: errors.join(\"; \") });\n return;\n }\n\n try {\n if (existsSync(safe.absolute) && lstatSync(safe.absolute).isSymbolicLink()) {\n throw new Error(\"Refusing to write through a symlinked skill directory\");\n }\n mkdirSync(safe.absolute, { recursive: true });\n const frontmatter = [\"---\", `name: ${name}`, `description: ${description}`, \"---\", \"\"].join(\n \"\\n\",\n );\n atomicWritePrivateFile(join(safe.absolute, \"SKILL.md\"), frontmatter + content.trim() + \"\\n\");\n } catch (err) {\n jsonRes(res, 500, { error: errorMessage(err) });\n return;\n }\n jsonRes(res, 200, { ok: true, name, directory, source: resolved.source });\n}\n\nexport async function listOfficeEvents(store: EventStore): Promise<EventSummary[]> {\n const entries = await store.list();\n return entries.map((entry) => {\n const payload = entry.payload;\n return {\n name: entry.filename,\n officePlatform: store.address.platform,\n officeConversationId: store.address.conversationId,\n size: entry.size,\n mtimeMs: entry.mtimeMs,\n type: payload?.type ?? null,\n platform: payload?.platform ?? null,\n conversationId: payload?.conversationId ?? null,\n text: payload?.text ?? null,\n at: payload?.type === \"one-shot\" ? payload.at : null,\n schedule: payload?.type === \"periodic\" ? payload.schedule : null,\n timezone: payload?.type === \"periodic\" ? payload.timezone : null,\n };\n });\n}\n\nfunction requireAdminEventStore(\n res: ServerResponse,\n services: AdminServices,\n office: Office,\n): EventStore | null {\n if (!services.eventStore) {\n jsonRes(res, 503, { error: \"Working directory not available\" });\n return null;\n }\n return services.eventStore(office);\n}\n\nasync function serveEventsList(res: ServerResponse, services: AdminServices): Promise<void> {\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n if (!services.eventStore) {\n jsonRes(res, 503, { error: \"Working directory not available\" });\n return;\n }\n const events: EventSummary[] = [];\n for (const record of listRegisteredOffices(workspace.stateDir)) {\n events.push(...(await listOfficeEvents(services.eventStore(workspace.office(record)))));\n }\n jsonRes(res, 200, { events });\n}\n\nasync function serveConversationEventsList(\n res: ServerResponse,\n url: URL,\n services: AdminServices,\n token: AdminToken,\n): Promise<void> {\n const scope = resolveConversationFromQuery(url, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const store = requireAdminEventStore(res, services, workspace.office(scope.address));\n if (!store) return;\n jsonRes(res, 200, {\n conversationId: scope.conversationId,\n events: await listOfficeEvents(store),\n });\n}\n\nasync function serveConversationEventDelete(\n res: ServerResponse,\n body: Record<string, unknown>,\n services: AdminServices,\n token: AdminToken,\n): Promise<void> {\n const scope = resolveTargetConversation(body, token);\n if (scope.error) {\n jsonRes(res, 403, { error: scope.error });\n return;\n }\n let name: string;\n try {\n name = validateEventFilename(typeof body.name === \"string\" ? body.name : \"\");\n } catch {\n jsonRes(res, 400, { error: \"Invalid name\" });\n return;\n }\n const workspace = requireAdminWorkspace(res, services);\n if (!workspace) return;\n const store = requireAdminEventStore(res, services, workspace.office(scope.address));\n if (!store) return;\n try {\n await store.delete(name);\n jsonRes(res, 200, { ok: true });\n } catch (err) {\n const message = errorMessage(err);\n jsonRes(res, /not found/.test(message) ? 404 : 500, { error: message });\n }\n}\n\nconst esc = escapeHtml;\n\ntype RailIconKey =\n | \"settings\"\n | \"workspace\"\n | \"skills\"\n | \"mcp\"\n | \"vault\"\n | \"events\"\n | \"session\"\n | \"overview\"\n | \"usage\";\n\nconst ICONS: Record<RailIconKey, string> = {\n settings: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33h.01a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82v.01a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\"/></svg>`,\n workspace: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Z\"/></svg>`,\n skills: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 19.5V5a2 2 0 0 1 2-2h11a1 1 0 0 1 1 1v14\"/><path d=\"M6 17h13v4H6.5A2.5 2.5 0 0 1 4 18.5v0A2.5 2.5 0 0 1 6.5 16H20\"/></svg>`,\n mcp: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"7\" rx=\"1.5\"/><rect x=\"3\" y=\"13\" width=\"18\" height=\"7\" rx=\"1.5\"/><circle cx=\"7\" cy=\"7.5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/><circle cx=\"7\" cy=\"16.5\" r=\"1\" fill=\"currentColor\" stroke=\"none\"/></svg>`,\n vault: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"10\" rx=\"2\"/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"/></svg>`,\n events: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"/><path d=\"M3 10h18M8 3v4M16 3v4\"/></svg>`,\n session: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"/></svg>`,\n overview: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"8\" height=\"8\" rx=\"1.5\"/><rect x=\"13\" y=\"3\" width=\"8\" height=\"5\" rx=\"1.5\"/><rect x=\"13\" y=\"11\" width=\"8\" height=\"10\" rx=\"1.5\"/><rect x=\"3\" y=\"14\" width=\"8\" height=\"7\" rx=\"1.5\"/></svg>`,\n usage: `<svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 21V3\"/><path d=\"M3 21h18\"/><path d=\"M7 17V11M12 17V7M17 17v-4\"/></svg>`,\n};\n\nfunction railLink(id: string, label: string, icon: RailIconKey, active = false): string {\n const svg = ICONS[icon];\n return `<button class=\"rail-link${active ? \" active\" : \"\"}\" type=\"button\" data-pane=\"${id}\" aria-current=\"${active ? \"page\" : \"false\"}\" aria-label=\"${esc(label)}\" title=\"${esc(label)}\">${svg}<span>${esc(label)}</span></button>`;\n}\n\nfunction settingsPane(\n id: string,\n title: string,\n description: string,\n actions: string,\n body: string,\n): string {\n return `<section class=\"pane\" id=\"pane-${id}\" data-pane=\"${id}\">\n <header class=\"pane-head\">\n <div><h2 class=\"pane-title\">${esc(title)}</h2><p class=\"pane-desc\">${esc(description)}</p></div>\n <div class=\"pane-actions\">${actions}</div>\n </header>\n <div class=\"pane-body\">${body}</div>\n </section>`;\n}\n\nconst adminViewBody = `<div class=\"settings-shell\">\n <aside class=\"settings-rail\" aria-label=\"Admin sections\">\n <div class=\"rail-scope\" role=\"tablist\" aria-label=\"Scope\">\n <button class=\"rail-scope-btn active\" role=\"tab\" aria-selected=\"true\" aria-controls=\"panel-conversation\" data-tab=\"conversation\">This conversation</button>\n <button class=\"rail-scope-btn\" role=\"tab\" aria-selected=\"false\" aria-controls=\"panel-global\" data-tab=\"global\">Workspace</button>\n </div>\n <nav class=\"rail-nav\" id=\"rail-nav-conversation\" data-scope=\"conversation\">\n ${railLink(\"settings\", \"Settings\", \"settings\", true)}\n ${railLink(\"workspace\", \"Workspace\", \"workspace\")}\n ${railLink(\"skills\", \"Skills\", \"skills\")}\n ${railLink(\"mcp\", \"MCP servers\", \"mcp\")}\n ${railLink(\"vault\", \"Vault\", \"vault\")}\n ${railLink(\"events\", \"Events\", \"events\")}\n ${railLink(\"session\", \"Session view\", \"session\")}\n </nav>\n <nav class=\"rail-nav\" id=\"rail-nav-global\" data-scope=\"global\" hidden>\n ${railLink(\"g-overview\", \"All conversations\", \"overview\", true)}\n ${railLink(\"g-usage\", \"Token usage\", \"usage\")}\n ${railLink(\"g-settings\", \"Defaults\", \"settings\")}\n ${railLink(\"g-mcp\", \"MCP servers\", \"mcp\")}\n ${railLink(\"g-skills\", \"Skills\", \"skills\")}\n ${railLink(\"g-events\", \"Events\", \"events\")}\n </nav>\n </aside>\n\n <div class=\"settings-panels\">\n <div class=\"tab-panel active\" id=\"panel-conversation\">\n ${settingsPane(\"settings\", \"Settings\", \"Model, thinking level, auto-reply, and workspace visibility for this conversation.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadSettings()\">↻</button>', '<div id=\"settings-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"workspace\", \"Workspace\", \"Read-only browser for this conversation's files on disk.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadWorkspace()\">↻</button>', '<div class=\"workspace-split\"><div id=\"workspace-tree\" class=\"workspace-tree\"><div class=\"loading-msg\">Loading…</div></div><div id=\"workspace-preview\" class=\"workspace-preview\"><div class=\"placeholder-msg\">Click a file to preview</div></div></div>')}\n\n ${settingsPane(\"skills\", \"Skills\", \"Instructions the agent can load for specific tasks in this conversation.\", '<button class=\"primary-action-btn\" onclick=\"openSkillDialog(\\'conversation\\')\">+ New skill</button><button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadSkills()\">↻</button>', '<div class=\"workspace-split\"><div id=\"skills-content\" class=\"workspace-tree\"><div class=\"loading-msg\">Loading…</div></div><div id=\"skills-preview\" class=\"workspace-preview\"><div class=\"placeholder-msg\">Click a skill to preview SKILL.md</div></div></div>')}\n\n ${settingsPane(\"mcp\", \"MCP servers\", \"External tools this conversation can call during a run.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadMcpServers()\">↻</button>', '<div id=\"mcp-conv-msg\" class=\"status-msg\" style=\"display:none\"></div><div id=\"mcp-conv-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"vault\", \"Vault\", \"Credentials scoped to this conversation.\", '<button class=\"primary-action-btn\" onclick=\"openLogin()\">Open in new tab ↗</button>', '<div id=\"vault-link-result\" class=\"link-result\" style=\"display:none\"></div><p class=\"card-desc\">Opens the one-time credential form for this conversation\\'s vault in a new tab.</p>')}\n\n ${settingsPane(\"events\", \"Events\", \"Scheduled and one-shot events tied to this conversation.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadConversationEvents()\">↻</button>', '<div id=\"events-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"session\", \"Session view\", \"The full message and tool-call timeline for this conversation.\", '<button class=\"primary-action-btn\" onclick=\"openSessionView()\">Open in new tab ↗</button>', '<div id=\"session-link-result\" class=\"link-result\" style=\"display:none\"></div><p class=\"card-desc\">Opens the session timeline for this conversation in a new tab.</p>')}\n </div>\n\n <div class=\"tab-panel\" id=\"panel-global\">\n ${settingsPane(\"g-overview\", \"All conversations\", \"Every registered conversation across every platform.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadAllConversations()\">↻</button>', '<div id=\"all-conv-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"g-usage\", \"Token usage\", \"Spend and volume across every conversation.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadTokenUsage()\">↻</button>', '<h3 class=\"card-subtitle\">Top 20 sessions</h3><div id=\"session-usage-content\"><div class=\"loading-msg\">Loading…</div></div><h3 class=\"card-subtitle\" style=\"margin-top:24px\">Usage timeline</h3><div class=\"timeline-controls\"><label>Conversation<select id=\"timeline-conv\" onchange=\"loadUsageTimeline()\"></select></label></div><div id=\"usage-timeline-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"g-settings\", \"Workspace defaults\", \"The fallback model, sandbox limits, and Slack behavior every conversation inherits.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadGlobalSettings()\">↻</button>', '<div id=\"global-settings-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"g-mcp\", \"MCP servers\", \"External tools available to every conversation in this workspace.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadMcpServers()\">↻</button>', '<div id=\"mcp-global-msg\" class=\"status-msg\" style=\"display:none\"></div><div id=\"mcp-global-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n\n ${settingsPane(\"g-skills\", \"Skills\", \"Shared instructions available to every conversation in this workspace.\", '<button class=\"primary-action-btn\" onclick=\"openSkillDialog(\\'global\\')\">+ New global skill</button><button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadGlobalSkills()\">↻</button>', '<div class=\"workspace-split\"><div id=\"global-skills-content\" class=\"workspace-tree\"><div class=\"loading-msg\">Loading…</div></div><div id=\"global-skills-preview\" class=\"workspace-preview\"><div class=\"placeholder-msg\">Click a skill to preview SKILL.md</div></div></div>')}\n\n ${settingsPane(\"g-events\", \"Global events\", \"Every scheduled event across the whole workspace.\", '<button class=\"refresh-btn\" type=\"button\" aria-label=\"Refresh\" title=\"Refresh\" onclick=\"loadEvents()\">↻</button>', '<div id=\"global-events-content\"><div class=\"loading-msg\">Loading…</div></div>')}\n </div>\n </div>\n </div>\n\n <dialog id=\"mcp-install-dialog\" class=\"mcp-dialog\" aria-labelledby=\"mcp-dialog-title\">\n <div class=\"mcp-dialog-head\">\n <div>\n <p class=\"eyebrow\">Install MCP preset</p>\n <h2 id=\"mcp-dialog-title\" class=\"card-title\"></h2>\n </div>\n <button class=\"mcp-dialog-close\" type=\"button\" aria-label=\"Close\" onclick=\"closeMcpInstall()\">×</button>\n </div>\n <div id=\"mcp-dialog-content\"></div>\n <div id=\"mcp-dialog-error\" class=\"inline-result err\" style=\"display:none\"></div>\n <div class=\"mcp-dialog-actions\">\n <button class=\"mcp-btn\" type=\"button\" onclick=\"closeMcpInstall()\">Cancel</button>\n <button id=\"mcp-dialog-install\" class=\"primary-action-btn\" type=\"button\" onclick=\"installMcpPreset(this)\">Install preset</button>\n </div>\n </dialog>\n\n <dialog id=\"mcp-custom-dialog\" class=\"mcp-dialog\" aria-labelledby=\"mcp-custom-dialog-title\">\n <div class=\"mcp-dialog-head\">\n <div>\n <p class=\"eyebrow\">Add MCP server</p>\n <h2 id=\"mcp-custom-dialog-title\" class=\"card-title\">新增自訂 server</h2>\n </div>\n <button class=\"mcp-dialog-close\" type=\"button\" aria-label=\"Close\" onclick=\"closeMcpCustomDialog()\">×</button>\n </div>\n <div id=\"mcp-custom-dialog-content\"></div>\n <div id=\"mcp-custom-dialog-error\" class=\"inline-result err\" style=\"display:none\"></div>\n <div class=\"mcp-dialog-actions\">\n <button class=\"mcp-btn\" type=\"button\" onclick=\"closeMcpCustomDialog()\">Cancel</button>\n <button id=\"mcp-custom-dialog-submit\" class=\"primary-action-btn\" type=\"button\" onclick=\"submitMcpCustomDialog(this)\">新增並測試連線</button>\n </div>\n </dialog>\n\n <dialog id=\"skill-dialog\" class=\"mcp-dialog\" aria-labelledby=\"skill-dialog-title\">\n <div class=\"mcp-dialog-head\">\n <div>\n <p class=\"eyebrow\" id=\"skill-dialog-eyebrow\">Skill</p>\n <h2 id=\"skill-dialog-title\" class=\"card-title\">New skill</h2>\n </div>\n <button class=\"mcp-dialog-close\" type=\"button\" aria-label=\"Close\" onclick=\"closeSkillDialog()\">×</button>\n </div>\n <div class=\"mcp-field\">\n <span>Directory</span>\n <input id=\"skill-dialog-directory\" class=\"form-input mcp-json\" placeholder=\"my-skill\" autocomplete=\"off\" />\n <small class=\"mcp-secret-note\">Lowercase letters, digits, hyphens. Cannot be changed after creation.</small>\n </div>\n <div class=\"mcp-field\">\n <span>Name</span>\n <input id=\"skill-dialog-name\" class=\"form-input mcp-json\" placeholder=\"my-skill\" autocomplete=\"off\" />\n </div>\n <div class=\"mcp-field\">\n <span>Description</span>\n <input id=\"skill-dialog-description\" class=\"form-input mcp-json\" placeholder=\"Use when …\" autocomplete=\"off\" />\n </div>\n <div class=\"mcp-field\">\n <span>Instructions (SKILL.md body)</span>\n <textarea id=\"skill-dialog-content\" class=\"form-input mcp-json\" spellcheck=\"false\" rows=\"12\" placeholder=\"# My skill&#10;&#10;Instructions here.\"></textarea>\n </div>\n <div id=\"skill-dialog-error\" class=\"inline-result err\" style=\"display:none\"></div>\n <div class=\"mcp-dialog-actions\">\n <button class=\"mcp-btn\" type=\"button\" onclick=\"closeSkillDialog()\">Cancel</button>\n <button id=\"skill-dialog-submit\" class=\"primary-action-btn\" type=\"button\" onclick=\"submitSkillDialog(this)\">Save</button>\n </div>\n </dialog>`;\n\nfunction renderAdminPage(token: AdminToken): string {\n const userLabel = token.platformUserName ?? token.platformUserId;\n const script = `\n const adminToken = ${JSON.stringify(token.token)};\n const defaultConversationKey = ${JSON.stringify(`${token.platform}:${token.conversationId}`)};\n${adminViewFunctionsScript}\n${adminViewStartupScript}`;\n\n return renderPortalShell({\n activeView: \"admin\",\n pageTitle: \"Admin\",\n identity: { primary: token.platform, secondary: userLabel },\n conversationSwitcher: { currentId: token.conversationId },\n body: adminViewBody,\n extraStyles: adminViewStyles,\n inlineScript: script,\n });\n}\n\nfunction renderAdminErrorPage(message: string): string {\n return renderPortalShell({\n activeView: \"admin\",\n pageTitle: \"Admin\",\n body: `<section class=\"card\" style=\"text-align:center;padding:40px 32px\">\n <p class=\"eyebrow\">${PRODUCT_NAME} admin</p>\n <h1 class=\"page-title\" style=\"margin:12px 0 16px\">Access Denied</h1>\n <div class=\"err-msg\">${esc(message)}</div>\n </section>`,\n });\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { Api, Model } from "@earendil-works/pi-ai";
2
- import type { MikanModels } from "../../harness/index.js";
2
+ import type { MikanModels } from "../../../harness/models.js";
3
3
  type AdminModelStatus = "available" | "unverified";
4
4
  interface AdminModelAccessStatus {
5
5
  status: AdminModelStatus;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-models.d.ts","sourceRoot":"","sources":["../../../../src/adapters/web/admin/provider-models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAE9D,KAAK,gBAAgB,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnD,UAAU,sBAAsB;IAC9B,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAYD,wBAAsB,+BAA+B,CACnD,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GACnB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAgB9C;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -1,4 +1,4 @@
1
- import { createHash } from "crypto";
1
+ import { createHash } from "node:crypto";
2
2
  const CACHE_TTL_MS = 5 * 60 * 1000;
3
3
  const PROBE_TIMEOUT_MS = 3000;
4
4
  const providerModelsCache = new Map();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-models.js","sourceRoot":"","sources":["../../../../src/adapters/web/admin/provider-models.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport type { Api, Model } from \"@earendil-works/pi-ai\";\nimport type { MikanModels } from \"../../../harness/models.js\";\n\ntype AdminModelStatus = \"available\" | \"unverified\";\n\ninterface AdminModelAccessStatus {\n status: AdminModelStatus;\n}\n\nconst CACHE_TTL_MS = 5 * 60 * 1000;\nconst PROBE_TIMEOUT_MS = 3000;\n\ninterface ProviderModelsCacheEntry {\n expiresAt: number;\n modelIds: Set<string>;\n}\n\nconst providerModelsCache = new Map<string, ProviderModelsCacheEntry>();\n\nexport async function resolveAdminModelAccessStatuses(\n registry: MikanModels,\n models: Model<Api>[],\n): Promise<Map<string, AdminModelAccessStatus>> {\n const result = new Map<string, AdminModelAccessStatus>();\n const byProvider = groupModelsByProvider(models);\n\n await Promise.all(\n [...byProvider.entries()].map(async ([provider, providerModels]) => {\n const providerModelIds = await fetchProviderModelIds(registry, provider);\n for (const model of providerModels) {\n result.set(modelKey(model.provider, model.id), {\n status: modelIsListed(providerModelIds, model.id) ? \"available\" : \"unverified\",\n });\n }\n }),\n );\n\n return result;\n}\n\nexport function modelKey(provider: string, id: string): string {\n return `${provider}/${id}`;\n}\n\nfunction groupModelsByProvider(models: Model<Api>[]): Map<string, Model<Api>[]> {\n const groups = new Map<string, Model<Api>[]>();\n for (const model of models) {\n const group = groups.get(model.provider) ?? [];\n group.push(model);\n groups.set(model.provider, group);\n }\n return groups;\n}\n\nasync function fetchProviderModelIds(\n registry: MikanModels,\n provider: string,\n): Promise<Set<string> | undefined> {\n if (provider !== \"openai\" && provider !== \"anthropic\") return new Set<string>();\n\n const apiKey = await registry.getApiKeyForProvider(provider);\n if (!apiKey) return new Set<string>();\n\n const cacheKey = `${provider}:${hashApiKey(apiKey)}`;\n const cached = providerModelsCache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) return cached.modelIds;\n\n try {\n const modelIds =\n provider === \"openai\"\n ? await fetchOpenAiModelIds(apiKey)\n : await fetchAnthropicModelIds(apiKey);\n providerModelsCache.set(cacheKey, {\n expiresAt: Date.now() + CACHE_TTL_MS,\n modelIds,\n });\n return modelIds;\n } catch {\n return undefined;\n }\n}\n\nasync function fetchOpenAiModelIds(apiKey: string): Promise<Set<string>> {\n const response = await fetchWithTimeout(\"https://api.openai.com/v1/models\", {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n if (!response.ok) throw new Error(`OpenAI models request failed: ${response.status}`);\n const body = (await response.json()) as { data?: Array<{ id?: unknown }> };\n return new Set((body.data ?? []).map((model) => model.id).filter(isString));\n}\n\nasync function fetchAnthropicModelIds(apiKey: string): Promise<Set<string>> {\n const response = await fetchWithTimeout(\"https://api.anthropic.com/v1/models\", {\n headers: {\n \"anthropic-version\": \"2023-06-01\",\n \"x-api-key\": apiKey,\n },\n });\n if (!response.ok) throw new Error(`Anthropic models request failed: ${response.status}`);\n const body = (await response.json()) as { data?: Array<{ id?: unknown }> };\n return new Set((body.data ?? []).map((model) => model.id).filter(isString));\n}\n\nasync function fetchWithTimeout(url: string, init: RequestInit): Promise<Response> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction modelIsListed(\n providerModelIds: Set<string> | undefined,\n registryModelId: string,\n): boolean {\n return providerModelIds\n ? providerModelIds.size === 0 || providerModelIds.has(registryModelId)\n : false;\n}\n\nfunction hashApiKey(apiKey: string): string {\n return createHash(\"sha256\").update(apiKey).digest(\"hex\").slice(0, 16);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\" && value.length > 0;\n}\n"]}
@@ -0,0 +1,56 @@
1
+ import type { MessagingBot, OfficeAddress, PlatformName, RunningSession } from "../../../types.js";
2
+ import type { Office, Workspace } from "../../../office/types.js";
3
+ import type { LinkTokenStoreLike } from "../../commands/types.js";
4
+ import type { SandboxConfig } from "../../../sandbox/types.js";
5
+ import type { EventStore } from "../../../events/index.js";
6
+ import type { VaultManager } from "../../../vault/types.js";
7
+ import type { InMemorySessionViewTokenStore } from "../session-view/portal.js";
8
+ import type { TokenRecord } from "../types.js";
9
+ import type { InMemoryAdminTokenStore } from "./portal.js";
10
+ export interface AdminRuntimeBridge {
11
+ getRunningSessions(): RunningSession[];
12
+ switchConversationModel(address: OfficeAddress, provider: string, model: string): boolean;
13
+ refreshConversationEnvironment(address: OfficeAddress): boolean;
14
+ refreshAllConversations(): {
15
+ busy: OfficeAddress[];
16
+ };
17
+ }
18
+ export interface AdminServices {
19
+ vaultManager: VaultManager;
20
+ linkTokenStore: LinkTokenStoreLike;
21
+ sessionViewTokenStore?: InMemorySessionViewTokenStore;
22
+ adminTokenStore: InMemoryAdminTokenStore;
23
+ portalBaseUrl?: string;
24
+ workspace?: Workspace;
25
+ eventStore?: (office: Office) => EventStore;
26
+ sandbox?: SandboxConfig;
27
+ runtime?: AdminRuntimeBridge;
28
+ botsByPlatform?: Partial<Record<PlatformName, MessagingBot>>;
29
+ }
30
+ export interface EventSummary {
31
+ name: string;
32
+ size: number;
33
+ mtimeMs: number;
34
+ type: string | null;
35
+ officePlatform: string;
36
+ officeConversationId: string;
37
+ platform: string | null;
38
+ conversationId: string | null;
39
+ text: string | null;
40
+ at: string | null;
41
+ schedule: string | null;
42
+ timezone: string | null;
43
+ }
44
+ export interface AdminTokenCreateOptions {
45
+ platform: PlatformName;
46
+ platformUserId: string;
47
+ conversationId: string;
48
+ platformUserName?: string;
49
+ }
50
+ export interface AdminToken extends TokenRecord {
51
+ platform: PlatformName;
52
+ platformUserId: string;
53
+ platformUserName?: string;
54
+ conversationId: string;
55
+ }
56
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/adapters/web/admin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,IAAI,cAAc,EAAE,CAAC;IACvC,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1F,8BAA8B,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAChE,uBAAuB,IAAI;QAAE,IAAI,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,kBAAkB,CAAC;IACnC,qBAAqB,CAAC,EAAE,6BAA6B,CAAC;IACtD,eAAe,EAAE,uBAAuB,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,CAAC;IAC5C,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/adapters/web/admin/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MessagingBot, OfficeAddress, PlatformName, RunningSession } from \"../../../types.js\";\nimport type { Office, Workspace } from \"../../../office/types.js\";\nimport type { LinkTokenStoreLike } from \"../../commands/types.js\";\nimport type { SandboxConfig } from \"../../../sandbox/types.js\";\nimport type { EventStore } from \"../../../events/index.js\";\nimport type { VaultManager } from \"../../../vault/types.js\";\nimport type { InMemorySessionViewTokenStore } from \"../session-view/portal.js\";\nimport type { TokenRecord } from \"../types.js\";\nimport type { InMemoryAdminTokenStore } from \"./portal.js\";\n\nexport interface AdminRuntimeBridge {\n getRunningSessions(): RunningSession[];\n switchConversationModel(address: OfficeAddress, provider: string, model: string): boolean;\n refreshConversationEnvironment(address: OfficeAddress): boolean;\n refreshAllConversations(): { busy: OfficeAddress[] };\n}\n\nexport interface AdminServices {\n vaultManager: VaultManager;\n linkTokenStore: LinkTokenStoreLike;\n sessionViewTokenStore?: InMemorySessionViewTokenStore;\n adminTokenStore: InMemoryAdminTokenStore;\n portalBaseUrl?: string;\n workspace?: Workspace;\n eventStore?: (office: Office) => EventStore;\n sandbox?: SandboxConfig;\n runtime?: AdminRuntimeBridge;\n botsByPlatform?: Partial<Record<PlatformName, MessagingBot>>;\n}\n\nexport interface EventSummary {\n name: string;\n size: number;\n mtimeMs: number;\n type: string | null;\n officePlatform: string;\n officeConversationId: string;\n platform: string | null;\n conversationId: string | null;\n text: string | null;\n at: string | null;\n schedule: string | null;\n timezone: string | null;\n}\n\nexport interface AdminTokenCreateOptions {\n platform: PlatformName;\n platformUserId: string;\n conversationId: string;\n platformUserName?: string;\n}\n\nexport interface AdminToken extends TokenRecord {\n platform: PlatformName;\n platformUserId: string;\n platformUserName?: string;\n conversationId: string;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { OAuthService } from "./types.js";
2
+ export declare function getOAuthServices(): OAuthService[];
3
+ export declare function resolveOAuthService(input: string): OAuthService | undefined;
4
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/adapters/web/login/oauth.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAuO/C,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CA0BjD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAM3E"}