@gguf/claw 2026.1.30

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 (4287) hide show
  1. package/CHANGELOG.md +1325 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +533 -0
  5. package/assets/avatar-placeholder.svg +19 -0
  6. package/assets/chrome-extension/README.md +22 -0
  7. package/assets/chrome-extension/background.js +438 -0
  8. package/assets/chrome-extension/icons/icon128.png +0 -0
  9. package/assets/chrome-extension/icons/icon16.png +0 -0
  10. package/assets/chrome-extension/icons/icon32.png +0 -0
  11. package/assets/chrome-extension/icons/icon48.png +0 -0
  12. package/assets/chrome-extension/manifest.json +25 -0
  13. package/assets/chrome-extension/options.html +196 -0
  14. package/assets/chrome-extension/options.js +59 -0
  15. package/assets/dmg-background-small.png +0 -0
  16. package/assets/dmg-background.png +0 -0
  17. package/dist/acp/client.d.ts +16 -0
  18. package/dist/acp/client.js +147 -0
  19. package/dist/acp/commands.d.ts +2 -0
  20. package/dist/acp/commands.js +38 -0
  21. package/dist/acp/event-mapper.d.ts +10 -0
  22. package/dist/acp/event-mapper.js +81 -0
  23. package/dist/acp/index.d.ts +4 -0
  24. package/dist/acp/index.js +2 -0
  25. package/dist/acp/meta.d.ts +3 -0
  26. package/dist/acp/meta.js +36 -0
  27. package/dist/acp/server.d.ts +3 -0
  28. package/dist/acp/server.js +131 -0
  29. package/dist/acp/session-mapper.d.ts +22 -0
  30. package/dist/acp/session-mapper.js +69 -0
  31. package/dist/acp/session.d.ts +16 -0
  32. package/dist/acp/session.js +73 -0
  33. package/dist/acp/translator.d.ts +36 -0
  34. package/dist/acp/translator.js +360 -0
  35. package/dist/acp/types.d.ts +25 -0
  36. package/dist/acp/types.js +6 -0
  37. package/dist/agents/agent-paths.d.ts +2 -0
  38. package/dist/agents/agent-paths.js +22 -0
  39. package/dist/agents/agent-scope.d.ts +35 -0
  40. package/dist/agents/agent-scope.js +130 -0
  41. package/dist/agents/anthropic-payload-log.d.ts +16 -0
  42. package/dist/agents/anthropic-payload-log.js +168 -0
  43. package/dist/agents/apply-patch-update.d.ts +8 -0
  44. package/dist/agents/apply-patch-update.js +151 -0
  45. package/dist/agents/apply-patch.d.ts +24 -0
  46. package/dist/agents/apply-patch.js +367 -0
  47. package/dist/agents/auth-health.d.ts +37 -0
  48. package/dist/agents/auth-health.js +173 -0
  49. package/dist/agents/auth-profiles/constants.d.ts +20 -0
  50. package/dist/agents/auth-profiles/constants.js +21 -0
  51. package/dist/agents/auth-profiles/display.d.ts +7 -0
  52. package/dist/agents/auth-profiles/display.js +10 -0
  53. package/dist/agents/auth-profiles/doctor.d.ts +8 -0
  54. package/dist/agents/auth-profiles/doctor.js +33 -0
  55. package/dist/agents/auth-profiles/external-cli-sync.d.ts +7 -0
  56. package/dist/agents/auth-profiles/external-cli-sync.js +94 -0
  57. package/dist/agents/auth-profiles/oauth.d.ts +12 -0
  58. package/dist/agents/auth-profiles/oauth.js +230 -0
  59. package/dist/agents/auth-profiles/order.d.ts +8 -0
  60. package/dist/agents/auth-profiles/order.js +179 -0
  61. package/dist/agents/auth-profiles/paths.d.ts +4 -0
  62. package/dist/agents/auth-profiles/paths.js +28 -0
  63. package/dist/agents/auth-profiles/profiles.d.ts +18 -0
  64. package/dist/agents/auth-profiles/profiles.js +67 -0
  65. package/dist/agents/auth-profiles/repair.d.ts +14 -0
  66. package/dist/agents/auth-profiles/repair.js +133 -0
  67. package/dist/agents/auth-profiles/session-override.d.ts +18 -0
  68. package/dist/agents/auth-profiles/session-override.js +103 -0
  69. package/dist/agents/auth-profiles/store.d.ts +10 -0
  70. package/dist/agents/auth-profiles/store.js +338 -0
  71. package/dist/agents/auth-profiles/types.d.ts +58 -0
  72. package/dist/agents/auth-profiles/types.js +1 -0
  73. package/dist/agents/auth-profiles/usage.d.ts +47 -0
  74. package/dist/agents/auth-profiles/usage.js +246 -0
  75. package/dist/agents/auth-profiles.d.ts +11 -0
  76. package/dist/agents/auth-profiles.js +10 -0
  77. package/dist/agents/bash-process-registry.d.ts +68 -0
  78. package/dist/agents/bash-process-registry.js +186 -0
  79. package/dist/agents/bash-tools.d.ts +4 -0
  80. package/dist/agents/bash-tools.exec.d.ts +54 -0
  81. package/dist/agents/bash-tools.exec.js +1220 -0
  82. package/dist/agents/bash-tools.js +2 -0
  83. package/dist/agents/bash-tools.process.d.ts +7 -0
  84. package/dist/agents/bash-tools.process.js +577 -0
  85. package/dist/agents/bash-tools.shared.d.ts +46 -0
  86. package/dist/agents/bash-tools.shared.js +212 -0
  87. package/dist/agents/bedrock-discovery.d.ts +9 -0
  88. package/dist/agents/bedrock-discovery.js +169 -0
  89. package/dist/agents/bootstrap-files.d.ts +25 -0
  90. package/dist/agents/bootstrap-files.js +29 -0
  91. package/dist/agents/bootstrap-hooks.d.ts +10 -0
  92. package/dist/agents/bootstrap-hooks.js +19 -0
  93. package/dist/agents/cache-trace.d.ts +51 -0
  94. package/dist/agents/cache-trace.js +198 -0
  95. package/dist/agents/channel-tools.d.ts +27 -0
  96. package/dist/agents/channel-tools.js +96 -0
  97. package/dist/agents/chutes-oauth.d.ts +46 -0
  98. package/dist/agents/chutes-oauth.js +140 -0
  99. package/dist/agents/claude-cli-runner.d.ts +1 -0
  100. package/dist/agents/claude-cli-runner.js +3 -0
  101. package/dist/agents/cli-backends.d.ts +8 -0
  102. package/dist/agents/cli-backends.js +132 -0
  103. package/dist/agents/cli-credentials.d.ts +82 -0
  104. package/dist/agents/cli-credentials.js +431 -0
  105. package/dist/agents/cli-runner/helpers.d.ts +76 -0
  106. package/dist/agents/cli-runner/helpers.js +457 -0
  107. package/dist/agents/cli-runner.d.ts +39 -0
  108. package/dist/agents/cli-runner.js +270 -0
  109. package/dist/agents/cli-session.d.ts +3 -0
  110. package/dist/agents/cli-session.js +31 -0
  111. package/dist/agents/compaction.d.ts +61 -0
  112. package/dist/agents/compaction.js +235 -0
  113. package/dist/agents/context-window-guard.d.ts +24 -0
  114. package/dist/agents/context-window-guard.js +41 -0
  115. package/dist/agents/context.d.ts +1 -0
  116. package/dist/agents/context.js +36 -0
  117. package/dist/agents/date-time.d.ts +13 -0
  118. package/dist/agents/date-time.js +172 -0
  119. package/dist/agents/defaults.d.ts +3 -0
  120. package/dist/agents/defaults.js +6 -0
  121. package/dist/agents/docs-path.d.ts +6 -0
  122. package/dist/agents/docs-path.js +22 -0
  123. package/dist/agents/failover-error.d.ts +33 -0
  124. package/dist/agents/failover-error.js +188 -0
  125. package/dist/agents/identity-avatar.d.ts +15 -0
  126. package/dist/agents/identity-avatar.js +84 -0
  127. package/dist/agents/identity-file.d.ts +12 -0
  128. package/dist/agents/identity-file.js +90 -0
  129. package/dist/agents/identity.d.ts +20 -0
  130. package/dist/agents/identity.js +66 -0
  131. package/dist/agents/lanes.d.ts +3 -0
  132. package/dist/agents/lanes.js +2 -0
  133. package/dist/agents/live-auth-keys.d.ts +3 -0
  134. package/dist/agents/live-auth-keys.js +88 -0
  135. package/dist/agents/live-model-filter.d.ts +5 -0
  136. package/dist/agents/live-model-filter.js +71 -0
  137. package/dist/agents/memory-search.d.ts +66 -0
  138. package/dist/agents/memory-search.js +199 -0
  139. package/dist/agents/minimax-vlm.d.ts +7 -0
  140. package/dist/agents/minimax-vlm.js +84 -0
  141. package/dist/agents/model-auth.d.ts +36 -0
  142. package/dist/agents/model-auth.js +293 -0
  143. package/dist/agents/model-catalog.d.ts +25 -0
  144. package/dist/agents/model-catalog.js +98 -0
  145. package/dist/agents/model-compat.d.ts +2 -0
  146. package/dist/agents/model-compat.js +19 -0
  147. package/dist/agents/model-fallback.d.ts +49 -0
  148. package/dist/agents/model-fallback.js +288 -0
  149. package/dist/agents/model-scan.d.ts +63 -0
  150. package/dist/agents/model-scan.js +373 -0
  151. package/dist/agents/model-selection.d.ts +88 -0
  152. package/dist/agents/model-selection.js +314 -0
  153. package/dist/agents/models-config.d.ts +5 -0
  154. package/dist/agents/models-config.js +116 -0
  155. package/dist/agents/models-config.providers.d.ts +23 -0
  156. package/dist/agents/models-config.providers.js +458 -0
  157. package/dist/agents/openclaw-tools.d.ts +40 -0
  158. package/dist/agents/openclaw-tools.js +121 -0
  159. package/dist/agents/opencode-zen-models.d.ts +43 -0
  160. package/dist/agents/opencode-zen-models.js +254 -0
  161. package/dist/agents/pi-embedded-block-chunker.d.ts +17 -0
  162. package/dist/agents/pi-embedded-block-chunker.js +225 -0
  163. package/dist/agents/pi-embedded-helpers/bootstrap.d.ts +28 -0
  164. package/dist/agents/pi-embedded-helpers/bootstrap.js +168 -0
  165. package/dist/agents/pi-embedded-helpers/errors.d.ts +45 -0
  166. package/dist/agents/pi-embedded-helpers/errors.js +509 -0
  167. package/dist/agents/pi-embedded-helpers/google.d.ts +8 -0
  168. package/dist/agents/pi-embedded-helpers/google.js +13 -0
  169. package/dist/agents/pi-embedded-helpers/images.d.ts +20 -0
  170. package/dist/agents/pi-embedded-helpers/images.js +98 -0
  171. package/dist/agents/pi-embedded-helpers/messaging-dedupe.d.ts +10 -0
  172. package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +40 -0
  173. package/dist/agents/pi-embedded-helpers/openai.d.ts +9 -0
  174. package/dist/agents/pi-embedded-helpers/openai.js +104 -0
  175. package/dist/agents/pi-embedded-helpers/thinking.d.ts +5 -0
  176. package/dist/agents/pi-embedded-helpers/thinking.js +37 -0
  177. package/dist/agents/pi-embedded-helpers/turns.d.ts +20 -0
  178. package/dist/agents/pi-embedded-helpers/turns.js +95 -0
  179. package/dist/agents/pi-embedded-helpers/types.d.ts +5 -0
  180. package/dist/agents/pi-embedded-helpers/types.js +1 -0
  181. package/dist/agents/pi-embedded-helpers.d.ts +11 -0
  182. package/dist/agents/pi-embedded-helpers.js +9 -0
  183. package/dist/agents/pi-embedded-messaging.d.ts +8 -0
  184. package/dist/agents/pi-embedded-messaging.js +28 -0
  185. package/dist/agents/pi-embedded-runner/abort.d.ts +1 -0
  186. package/dist/agents/pi-embedded-runner/abort.js +11 -0
  187. package/dist/agents/pi-embedded-runner/cache-ttl.d.ts +9 -0
  188. package/dist/agents/pi-embedded-runner/cache-ttl.js +50 -0
  189. package/dist/agents/pi-embedded-runner/compact.d.ts +48 -0
  190. package/dist/agents/pi-embedded-runner/compact.js +412 -0
  191. package/dist/agents/pi-embedded-runner/extensions.d.ts +12 -0
  192. package/dist/agents/pi-embedded-runner/extensions.js +67 -0
  193. package/dist/agents/pi-embedded-runner/extra-params.d.ts +21 -0
  194. package/dist/agents/pi-embedded-runner/extra-params.js +73 -0
  195. package/dist/agents/pi-embedded-runner/google.d.ts +39 -0
  196. package/dist/agents/pi-embedded-runner/google.js +310 -0
  197. package/dist/agents/pi-embedded-runner/history.d.ts +12 -0
  198. package/dist/agents/pi-embedded-runner/history.js +68 -0
  199. package/dist/agents/pi-embedded-runner/lanes.d.ts +3 -0
  200. package/dist/agents/pi-embedded-runner/lanes.js +11 -0
  201. package/dist/agents/pi-embedded-runner/logger.d.ts +1 -0
  202. package/dist/agents/pi-embedded-runner/logger.js +2 -0
  203. package/dist/agents/pi-embedded-runner/model.d.ts +22 -0
  204. package/dist/agents/pi-embedded-runner/model.js +79 -0
  205. package/dist/agents/pi-embedded-runner/run/attempt.d.ts +5 -0
  206. package/dist/agents/pi-embedded-runner/run/attempt.js +766 -0
  207. package/dist/agents/pi-embedded-runner/run/images.d.ts +83 -0
  208. package/dist/agents/pi-embedded-runner/run/images.js +357 -0
  209. package/dist/agents/pi-embedded-runner/run/params.d.ts +109 -0
  210. package/dist/agents/pi-embedded-runner/run/params.js +1 -0
  211. package/dist/agents/pi-embedded-runner/run/payloads.d.ts +34 -0
  212. package/dist/agents/pi-embedded-runner/run/payloads.js +175 -0
  213. package/dist/agents/pi-embedded-runner/run/types.d.ts +126 -0
  214. package/dist/agents/pi-embedded-runner/run/types.js +1 -0
  215. package/dist/agents/pi-embedded-runner/run.d.ts +3 -0
  216. package/dist/agents/pi-embedded-runner/run.js +568 -0
  217. package/dist/agents/pi-embedded-runner/runs.d.ts +14 -0
  218. package/dist/agents/pi-embedded-runner/runs.js +112 -0
  219. package/dist/agents/pi-embedded-runner/sandbox-info.d.ts +4 -0
  220. package/dist/agents/pi-embedded-runner/sandbox-info.js +23 -0
  221. package/dist/agents/pi-embedded-runner/session-manager-cache.d.ts +2 -0
  222. package/dist/agents/pi-embedded-runner/session-manager-cache.js +59 -0
  223. package/dist/agents/pi-embedded-runner/session-manager-init.d.ts +17 -0
  224. package/dist/agents/pi-embedded-runner/session-manager-init.js +31 -0
  225. package/dist/agents/pi-embedded-runner/system-prompt.d.ts +47 -0
  226. package/dist/agents/pi-embedded-runner/system-prompt.js +33 -0
  227. package/dist/agents/pi-embedded-runner/tool-split.d.ts +11 -0
  228. package/dist/agents/pi-embedded-runner/tool-split.js +8 -0
  229. package/dist/agents/pi-embedded-runner/types.d.ts +70 -0
  230. package/dist/agents/pi-embedded-runner/types.js +1 -0
  231. package/dist/agents/pi-embedded-runner/utils.d.ts +8 -0
  232. package/dist/agents/pi-embedded-runner/utils.js +29 -0
  233. package/dist/agents/pi-embedded-runner.d.ts +12 -0
  234. package/dist/agents/pi-embedded-runner.js +10 -0
  235. package/dist/agents/pi-embedded-subscribe.d.ts +20 -0
  236. package/dist/agents/pi-embedded-subscribe.handlers.d.ts +2 -0
  237. package/dist/agents/pi-embedded-subscribe.handlers.js +45 -0
  238. package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.d.ts +8 -0
  239. package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +86 -0
  240. package/dist/agents/pi-embedded-subscribe.handlers.messages.d.ts +12 -0
  241. package/dist/agents/pi-embedded-subscribe.handlers.messages.js +265 -0
  242. package/dist/agents/pi-embedded-subscribe.handlers.tools.d.ts +18 -0
  243. package/dist/agents/pi-embedded-subscribe.handlers.tools.js +181 -0
  244. package/dist/agents/pi-embedded-subscribe.handlers.types.d.ts +107 -0
  245. package/dist/agents/pi-embedded-subscribe.handlers.types.js +1 -0
  246. package/dist/agents/pi-embedded-subscribe.js +491 -0
  247. package/dist/agents/pi-embedded-subscribe.raw-stream.d.ts +1 -0
  248. package/dist/agents/pi-embedded-subscribe.raw-stream.js +28 -0
  249. package/dist/agents/pi-embedded-subscribe.tools.d.ts +6 -0
  250. package/dist/agents/pi-embedded-subscribe.tools.js +195 -0
  251. package/dist/agents/pi-embedded-subscribe.types.d.ts +44 -0
  252. package/dist/agents/pi-embedded-subscribe.types.js +1 -0
  253. package/dist/agents/pi-embedded-utils.d.ts +38 -0
  254. package/dist/agents/pi-embedded-utils.js +374 -0
  255. package/dist/agents/pi-embedded.d.ts +2 -0
  256. package/dist/agents/pi-embedded.js +1 -0
  257. package/dist/agents/pi-extensions/compaction-safeguard-runtime.d.ts +5 -0
  258. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +20 -0
  259. package/dist/agents/pi-extensions/compaction-safeguard.d.ts +22 -0
  260. package/dist/agents/pi-extensions/compaction-safeguard.js +264 -0
  261. package/dist/agents/pi-extensions/context-pruning/extension.d.ts +2 -0
  262. package/dist/agents/pi-extensions/context-pruning/extension.js +34 -0
  263. package/dist/agents/pi-extensions/context-pruning/pruner.d.ts +10 -0
  264. package/dist/agents/pi-extensions/context-pruning/pruner.js +295 -0
  265. package/dist/agents/pi-extensions/context-pruning/runtime.d.ts +9 -0
  266. package/dist/agents/pi-extensions/context-pruning/runtime.js +21 -0
  267. package/dist/agents/pi-extensions/context-pruning/settings.d.ts +44 -0
  268. package/dist/agents/pi-extensions/context-pruning/settings.js +73 -0
  269. package/dist/agents/pi-extensions/context-pruning/tools.d.ts +2 -0
  270. package/dist/agents/pi-extensions/context-pruning/tools.js +52 -0
  271. package/dist/agents/pi-extensions/context-pruning.d.ts +10 -0
  272. package/dist/agents/pi-extensions/context-pruning.js +9 -0
  273. package/dist/agents/pi-model-discovery.d.ts +4 -0
  274. package/dist/agents/pi-model-discovery.js +10 -0
  275. package/dist/agents/pi-settings.d.ts +19 -0
  276. package/dist/agents/pi-settings.js +19 -0
  277. package/dist/agents/pi-tool-definition-adapter.d.ts +7 -0
  278. package/dist/agents/pi-tool-definition-adapter.js +76 -0
  279. package/dist/agents/pi-tools.abort.d.ts +2 -0
  280. package/dist/agents/pi-tools.abort.js +49 -0
  281. package/dist/agents/pi-tools.d.ts +63 -0
  282. package/dist/agents/pi-tools.js +304 -0
  283. package/dist/agents/pi-tools.policy.d.ts +37 -0
  284. package/dist/agents/pi-tools.policy.js +272 -0
  285. package/dist/agents/pi-tools.read.d.ts +35 -0
  286. package/dist/agents/pi-tools.read.js +238 -0
  287. package/dist/agents/pi-tools.schema.d.ts +3 -0
  288. package/dist/agents/pi-tools.schema.js +160 -0
  289. package/dist/agents/pi-tools.types.d.ts +2 -0
  290. package/dist/agents/pi-tools.types.js +1 -0
  291. package/dist/agents/pty-dsr.d.ts +5 -0
  292. package/dist/agents/pty-dsr.js +13 -0
  293. package/dist/agents/pty-keys.d.ts +13 -0
  294. package/dist/agents/pty-keys.js +250 -0
  295. package/dist/agents/sandbox/browser-bridges.d.ts +5 -0
  296. package/dist/agents/sandbox/browser-bridges.js +1 -0
  297. package/dist/agents/sandbox/browser.d.ts +8 -0
  298. package/dist/agents/sandbox/browser.js +187 -0
  299. package/dist/agents/sandbox/config-hash.d.ts +9 -0
  300. package/dist/agents/sandbox/config-hash.js +51 -0
  301. package/dist/agents/sandbox/config.d.ts +22 -0
  302. package/dist/agents/sandbox/config.js +115 -0
  303. package/dist/agents/sandbox/constants.d.ts +19 -0
  304. package/dist/agents/sandbox/constants.js +45 -0
  305. package/dist/agents/sandbox/context.d.ts +12 -0
  306. package/dist/agents/sandbox/context.js +121 -0
  307. package/dist/agents/sandbox/docker.d.ts +28 -0
  308. package/dist/agents/sandbox/docker.js +296 -0
  309. package/dist/agents/sandbox/manage.d.ts +13 -0
  310. package/dist/agents/sandbox/manage.js +91 -0
  311. package/dist/agents/sandbox/prune.d.ts +3 -0
  312. package/dist/agents/sandbox/prune.js +90 -0
  313. package/dist/agents/sandbox/registry.d.ts +30 -0
  314. package/dist/agents/sandbox/registry.js +75 -0
  315. package/dist/agents/sandbox/runtime-status.d.ts +18 -0
  316. package/dist/agents/sandbox/runtime-status.js +97 -0
  317. package/dist/agents/sandbox/shared.d.ts +4 -0
  318. package/dist/agents/sandbox/shared.js +42 -0
  319. package/dist/agents/sandbox/tool-policy.d.ts +4 -0
  320. package/dist/agents/sandbox/tool-policy.js +115 -0
  321. package/dist/agents/sandbox/types.d.ts +73 -0
  322. package/dist/agents/sandbox/types.docker.d.ts +25 -0
  323. package/dist/agents/sandbox/types.docker.js +1 -0
  324. package/dist/agents/sandbox/types.js +1 -0
  325. package/dist/agents/sandbox/workspace.d.ts +1 -0
  326. package/dist/agents/sandbox/workspace.js +39 -0
  327. package/dist/agents/sandbox-paths.d.ts +16 -0
  328. package/dist/agents/sandbox-paths.js +70 -0
  329. package/dist/agents/sandbox.d.ts +8 -0
  330. package/dist/agents/sandbox.js +7 -0
  331. package/dist/agents/schema/clean-for-gemini.d.ts +2 -0
  332. package/dist/agents/schema/clean-for-gemini.js +324 -0
  333. package/dist/agents/schema/typebox.d.ts +14 -0
  334. package/dist/agents/schema/typebox.js +22 -0
  335. package/dist/agents/session-slug.d.ts +1 -0
  336. package/dist/agents/session-slug.js +139 -0
  337. package/dist/agents/session-tool-result-guard-wrapper.d.ts +14 -0
  338. package/dist/agents/session-tool-result-guard-wrapper.js +34 -0
  339. package/dist/agents/session-tool-result-guard.d.ts +21 -0
  340. package/dist/agents/session-tool-result-guard.js +106 -0
  341. package/dist/agents/session-transcript-repair.d.ts +19 -0
  342. package/dist/agents/session-transcript-repair.js +181 -0
  343. package/dist/agents/session-write-lock.d.ts +21 -0
  344. package/dist/agents/session-write-lock.js +180 -0
  345. package/dist/agents/shell-utils.d.ts +6 -0
  346. package/dist/agents/shell-utils.js +106 -0
  347. package/dist/agents/skills/bundled-dir.d.ts +1 -0
  348. package/dist/agents/skills/bundled-dir.js +33 -0
  349. package/dist/agents/skills/config.d.ts +14 -0
  350. package/dist/agents/skills/config.js +162 -0
  351. package/dist/agents/skills/env-overrides.d.ts +10 -0
  352. package/dist/agents/skills/env-overrides.js +76 -0
  353. package/dist/agents/skills/frontmatter.d.ts +6 -0
  354. package/dist/agents/skills/frontmatter.js +145 -0
  355. package/dist/agents/skills/plugin-skills.d.ts +5 -0
  356. package/dist/agents/skills/plugin-skills.js +62 -0
  357. package/dist/agents/skills/refresh.d.ts +19 -0
  358. package/dist/agents/skills/refresh.js +140 -0
  359. package/dist/agents/skills/serialize.d.ts +1 -0
  360. package/dist/agents/skills/serialize.js +14 -0
  361. package/dist/agents/skills/types.d.ts +80 -0
  362. package/dist/agents/skills/types.js +1 -0
  363. package/dist/agents/skills/workspace.d.ts +49 -0
  364. package/dist/agents/skills/workspace.js +284 -0
  365. package/dist/agents/skills-install.d.ts +16 -0
  366. package/dist/agents/skills-install.js +410 -0
  367. package/dist/agents/skills-status.d.ts +55 -0
  368. package/dist/agents/skills-status.js +196 -0
  369. package/dist/agents/skills.d.ts +7 -0
  370. package/dist/agents/skills.js +13 -0
  371. package/dist/agents/subagent-announce-queue.d.ts +22 -0
  372. package/dist/agents/subagent-announce-queue.js +137 -0
  373. package/dist/agents/subagent-announce.d.ts +28 -0
  374. package/dist/agents/subagent-announce.js +418 -0
  375. package/dist/agents/subagent-registry.d.ts +35 -0
  376. package/dist/agents/subagent-registry.js +371 -0
  377. package/dist/agents/subagent-registry.store.d.ts +5 -0
  378. package/dist/agents/subagent-registry.store.js +79 -0
  379. package/dist/agents/synthetic-models.d.ts +153 -0
  380. package/dist/agents/synthetic-models.js +182 -0
  381. package/dist/agents/system-prompt-params.d.ts +29 -0
  382. package/dist/agents/system-prompt-params.js +75 -0
  383. package/dist/agents/system-prompt-report.d.ts +20 -0
  384. package/dist/agents/system-prompt-report.js +119 -0
  385. package/dist/agents/system-prompt.d.ts +73 -0
  386. package/dist/agents/system-prompt.js +477 -0
  387. package/dist/agents/test-helpers/fast-coding-tools.d.ts +1 -0
  388. package/dist/agents/test-helpers/fast-coding-tools.js +18 -0
  389. package/dist/agents/test-helpers/fast-core-tools.d.ts +1 -0
  390. package/dist/agents/test-helpers/fast-core-tools.js +24 -0
  391. package/dist/agents/timeout.d.ts +8 -0
  392. package/dist/agents/timeout.js +26 -0
  393. package/dist/agents/tool-call-id.d.ts +17 -0
  394. package/dist/agents/tool-call-id.js +181 -0
  395. package/dist/agents/tool-display.d.ts +15 -0
  396. package/dist/agents/tool-display.js +233 -0
  397. package/dist/agents/tool-display.json +308 -0
  398. package/dist/agents/tool-images.d.ts +19 -0
  399. package/dist/agents/tool-images.js +174 -0
  400. package/dist/agents/tool-policy.d.ts +36 -0
  401. package/dist/agents/tool-policy.js +211 -0
  402. package/dist/agents/tool-summaries.d.ts +2 -0
  403. package/dist/agents/tool-summaries.js +11 -0
  404. package/dist/agents/tools/agent-step.d.ts +12 -0
  405. package/dist/agents/tools/agent-step.js +45 -0
  406. package/dist/agents/tools/agents-list-tool.d.ts +6 -0
  407. package/dist/agents/tools/agents-list-tool.js +71 -0
  408. package/dist/agents/tools/browser-tool.d.ts +5 -0
  409. package/dist/agents/tools/browser-tool.js +603 -0
  410. package/dist/agents/tools/browser-tool.schema.d.ts +50 -0
  411. package/dist/agents/tools/browser-tool.schema.js +105 -0
  412. package/dist/agents/tools/canvas-tool.d.ts +2 -0
  413. package/dist/agents/tools/canvas-tool.js +159 -0
  414. package/dist/agents/tools/common.d.ts +52 -0
  415. package/dist/agents/tools/common.js +156 -0
  416. package/dist/agents/tools/cron-tool.d.ts +6 -0
  417. package/dist/agents/tools/cron-tool.js +271 -0
  418. package/dist/agents/tools/discord-actions-guild.d.ts +4 -0
  419. package/dist/agents/tools/discord-actions-guild.js +455 -0
  420. package/dist/agents/tools/discord-actions-messaging.d.ts +4 -0
  421. package/dist/agents/tools/discord-actions-messaging.js +384 -0
  422. package/dist/agents/tools/discord-actions-moderation.d.ts +4 -0
  423. package/dist/agents/tools/discord-actions-moderation.js +92 -0
  424. package/dist/agents/tools/discord-actions.d.ts +3 -0
  425. package/dist/agents/tools/discord-actions.js +61 -0
  426. package/dist/agents/tools/gateway-tool.d.ts +6 -0
  427. package/dist/agents/tools/gateway-tool.js +215 -0
  428. package/dist/agents/tools/gateway.d.ts +14 -0
  429. package/dist/agents/tools/gateway.js +30 -0
  430. package/dist/agents/tools/image-tool.d.ts +26 -0
  431. package/dist/agents/tools/image-tool.helpers.d.ts +21 -0
  432. package/dist/agents/tools/image-tool.helpers.js +57 -0
  433. package/dist/agents/tools/image-tool.js +380 -0
  434. package/dist/agents/tools/memory-tool.d.ts +10 -0
  435. package/dist/agents/tools/memory-tool.js +107 -0
  436. package/dist/agents/tools/message-tool.d.ts +16 -0
  437. package/dist/agents/tools/message-tool.js +328 -0
  438. package/dist/agents/tools/nodes-tool.d.ts +6 -0
  439. package/dist/agents/tools/nodes-tool.js +399 -0
  440. package/dist/agents/tools/nodes-utils.d.ts +20 -0
  441. package/dist/agents/tools/nodes-utils.js +101 -0
  442. package/dist/agents/tools/session-status-tool.d.ts +6 -0
  443. package/dist/agents/tools/session-status-tool.js +367 -0
  444. package/dist/agents/tools/sessions-announce-target.d.ts +5 -0
  445. package/dist/agents/tools/sessions-announce-target.js +44 -0
  446. package/dist/agents/tools/sessions-helpers.d.ts +90 -0
  447. package/dist/agents/tools/sessions-helpers.js +294 -0
  448. package/dist/agents/tools/sessions-history-tool.d.ts +5 -0
  449. package/dist/agents/tools/sessions-history-tool.js +118 -0
  450. package/dist/agents/tools/sessions-list-tool.d.ts +5 -0
  451. package/dist/agents/tools/sessions-list-tool.js +167 -0
  452. package/dist/agents/tools/sessions-send-helpers.d.ts +34 -0
  453. package/dist/agents/tools/sessions-send-helpers.js +122 -0
  454. package/dist/agents/tools/sessions-send-tool.a2a.d.ts +12 -0
  455. package/dist/agents/tools/sessions-send-tool.a2a.js +120 -0
  456. package/dist/agents/tools/sessions-send-tool.d.ts +7 -0
  457. package/dist/agents/tools/sessions-send-tool.js +345 -0
  458. package/dist/agents/tools/sessions-spawn-tool.d.ts +15 -0
  459. package/dist/agents/tools/sessions-spawn-tool.js +236 -0
  460. package/dist/agents/tools/slack-actions.d.ts +15 -0
  461. package/dist/agents/tools/slack-actions.js +250 -0
  462. package/dist/agents/tools/telegram-actions.d.ts +9 -0
  463. package/dist/agents/tools/telegram-actions.js +257 -0
  464. package/dist/agents/tools/tts-tool.d.ts +7 -0
  465. package/dist/agents/tools/tts-tool.js +48 -0
  466. package/dist/agents/tools/web-fetch-utils.d.ts +18 -0
  467. package/dist/agents/tools/web-fetch-utils.js +107 -0
  468. package/dist/agents/tools/web-fetch.d.ts +25 -0
  469. package/dist/agents/tools/web-fetch.js +492 -0
  470. package/dist/agents/tools/web-search.d.ts +22 -0
  471. package/dist/agents/tools/web-search.js +379 -0
  472. package/dist/agents/tools/web-shared.d.ts +17 -0
  473. package/dist/agents/tools/web-shared.js +66 -0
  474. package/dist/agents/tools/web-tools.d.ts +2 -0
  475. package/dist/agents/tools/web-tools.js +2 -0
  476. package/dist/agents/tools/whatsapp-actions.d.ts +3 -0
  477. package/dist/agents/tools/whatsapp-actions.js +32 -0
  478. package/dist/agents/transcript-policy.d.ts +23 -0
  479. package/dist/agents/transcript-policy.js +89 -0
  480. package/dist/agents/usage.d.ts +35 -0
  481. package/dist/agents/usage.js +53 -0
  482. package/dist/agents/venice-models.d.ts +238 -0
  483. package/dist/agents/venice-models.js +342 -0
  484. package/dist/agents/workspace-templates.d.ts +6 -0
  485. package/dist/agents/workspace-templates.js +53 -0
  486. package/dist/agents/workspace.d.ts +33 -0
  487. package/dist/agents/workspace.js +244 -0
  488. package/dist/auto-reply/chunk.d.ts +45 -0
  489. package/dist/auto-reply/chunk.js +389 -0
  490. package/dist/auto-reply/command-auth.d.ts +16 -0
  491. package/dist/auto-reply/command-auth.js +141 -0
  492. package/dist/auto-reply/command-detection.d.ts +13 -0
  493. package/dist/auto-reply/command-detection.js +66 -0
  494. package/dist/auto-reply/commands-args.d.ts +3 -0
  495. package/dist/auto-reply/commands-args.js +96 -0
  496. package/dist/auto-reply/commands-registry.d.ts +54 -0
  497. package/dist/auto-reply/commands-registry.data.d.ts +3 -0
  498. package/dist/auto-reply/commands-registry.data.js +577 -0
  499. package/dist/auto-reply/commands-registry.js +401 -0
  500. package/dist/auto-reply/commands-registry.types.d.ts +66 -0
  501. package/dist/auto-reply/commands-registry.types.js +1 -0
  502. package/dist/auto-reply/dispatch.d.ts +27 -0
  503. package/dist/auto-reply/dispatch.js +40 -0
  504. package/dist/auto-reply/envelope.d.ts +59 -0
  505. package/dist/auto-reply/envelope.js +190 -0
  506. package/dist/auto-reply/group-activation.d.ts +6 -0
  507. package/dist/auto-reply/group-activation.js +27 -0
  508. package/dist/auto-reply/heartbeat.d.ts +26 -0
  509. package/dist/auto-reply/heartbeat.js +129 -0
  510. package/dist/auto-reply/inbound-debounce.d.ts +16 -0
  511. package/dist/auto-reply/inbound-debounce.js +79 -0
  512. package/dist/auto-reply/media-note.d.ts +2 -0
  513. package/dist/auto-reply/media-note.js +75 -0
  514. package/dist/auto-reply/model.d.ts +8 -0
  515. package/dist/auto-reply/model.js +29 -0
  516. package/dist/auto-reply/reply/abort.d.ts +20 -0
  517. package/dist/auto-reply/reply/abort.js +163 -0
  518. package/dist/auto-reply/reply/agent-runner-execution.d.ts +48 -0
  519. package/dist/auto-reply/reply/agent-runner-execution.js +478 -0
  520. package/dist/auto-reply/reply/agent-runner-helpers.d.ts +17 -0
  521. package/dist/auto-reply/reply/agent-runner-helpers.js +70 -0
  522. package/dist/auto-reply/reply/agent-runner-memory.d.ts +20 -0
  523. package/dist/auto-reply/reply/agent-runner-memory.js +164 -0
  524. package/dist/auto-reply/reply/agent-runner-payloads.d.ts +25 -0
  525. package/dist/auto-reply/reply/agent-runner-payloads.js +86 -0
  526. package/dist/auto-reply/reply/agent-runner-utils.d.ts +30 -0
  527. package/dist/auto-reply/reply/agent-runner-utils.js +106 -0
  528. package/dist/auto-reply/reply/agent-runner.d.ts +37 -0
  529. package/dist/auto-reply/reply/agent-runner.js +385 -0
  530. package/dist/auto-reply/reply/audio-tags.d.ts +1 -0
  531. package/dist/auto-reply/reply/audio-tags.js +1 -0
  532. package/dist/auto-reply/reply/bash-command.d.ts +19 -0
  533. package/dist/auto-reply/reply/bash-command.js +351 -0
  534. package/dist/auto-reply/reply/block-reply-coalescer.d.ts +15 -0
  535. package/dist/auto-reply/reply/block-reply-coalescer.js +106 -0
  536. package/dist/auto-reply/reply/block-reply-pipeline.d.ts +31 -0
  537. package/dist/auto-reply/reply/block-reply-pipeline.js +190 -0
  538. package/dist/auto-reply/reply/block-streaming.d.ts +17 -0
  539. package/dist/auto-reply/reply/block-streaming.js +94 -0
  540. package/dist/auto-reply/reply/body.d.ts +11 -0
  541. package/dist/auto-reply/reply/body.js +38 -0
  542. package/dist/auto-reply/reply/commands-allowlist.d.ts +2 -0
  543. package/dist/auto-reply/reply/commands-allowlist.js +589 -0
  544. package/dist/auto-reply/reply/commands-approve.d.ts +2 -0
  545. package/dist/auto-reply/reply/commands-approve.js +91 -0
  546. package/dist/auto-reply/reply/commands-bash.d.ts +2 -0
  547. package/dist/auto-reply/reply/commands-bash.js +26 -0
  548. package/dist/auto-reply/reply/commands-compact.d.ts +2 -0
  549. package/dist/auto-reply/reply/commands-compact.js +110 -0
  550. package/dist/auto-reply/reply/commands-config.d.ts +3 -0
  551. package/dist/auto-reply/reply/commands-config.js +243 -0
  552. package/dist/auto-reply/reply/commands-context-report.d.ts +3 -0
  553. package/dist/auto-reply/reply/commands-context-report.js +297 -0
  554. package/dist/auto-reply/reply/commands-context.d.ts +12 -0
  555. package/dist/auto-reply/reply/commands-context.js +29 -0
  556. package/dist/auto-reply/reply/commands-core.d.ts +2 -0
  557. package/dist/auto-reply/reply/commands-core.js +102 -0
  558. package/dist/auto-reply/reply/commands-info.d.ts +10 -0
  559. package/dist/auto-reply/reply/commands-info.js +165 -0
  560. package/dist/auto-reply/reply/commands-models.d.ts +8 -0
  561. package/dist/auto-reply/reply/commands-models.js +209 -0
  562. package/dist/auto-reply/reply/commands-plugin.d.ts +13 -0
  563. package/dist/auto-reply/reply/commands-plugin.js +37 -0
  564. package/dist/auto-reply/reply/commands-session.d.ts +7 -0
  565. package/dist/auto-reply/reply/commands-session.js +328 -0
  566. package/dist/auto-reply/reply/commands-status.d.ts +24 -0
  567. package/dist/auto-reply/reply/commands-status.js +181 -0
  568. package/dist/auto-reply/reply/commands-subagents.d.ts +13 -0
  569. package/dist/auto-reply/reply/commands-subagents.js +371 -0
  570. package/dist/auto-reply/reply/commands-tts.d.ts +2 -0
  571. package/dist/auto-reply/reply/commands-tts.js +231 -0
  572. package/dist/auto-reply/reply/commands-types.d.ts +59 -0
  573. package/dist/auto-reply/reply/commands-types.js +1 -0
  574. package/dist/auto-reply/reply/commands.d.ts +4 -0
  575. package/dist/auto-reply/reply/commands.js +3 -0
  576. package/dist/auto-reply/reply/config-commands.d.ts +15 -0
  577. package/dist/auto-reply/reply/config-commands.js +62 -0
  578. package/dist/auto-reply/reply/config-value.d.ts +4 -0
  579. package/dist/auto-reply/reply/config-value.js +40 -0
  580. package/dist/auto-reply/reply/debug-commands.d.ts +16 -0
  581. package/dist/auto-reply/reply/debug-commands.js +62 -0
  582. package/dist/auto-reply/reply/directive-handling.auth.d.ts +19 -0
  583. package/dist/auto-reply/reply/directive-handling.auth.js +203 -0
  584. package/dist/auto-reply/reply/directive-handling.d.ts +6 -0
  585. package/dist/auto-reply/reply/directive-handling.fast-lane.d.ts +47 -0
  586. package/dist/auto-reply/reply/directive-handling.fast-lane.js +60 -0
  587. package/dist/auto-reply/reply/directive-handling.impl.d.ts +35 -0
  588. package/dist/auto-reply/reply/directive-handling.impl.js +394 -0
  589. package/dist/auto-reply/reply/directive-handling.js +5 -0
  590. package/dist/auto-reply/reply/directive-handling.model-picker.d.ts +13 -0
  591. package/dist/auto-reply/reply/directive-handling.model-picker.js +70 -0
  592. package/dist/auto-reply/reply/directive-handling.model.d.ts +41 -0
  593. package/dist/auto-reply/reply/directive-handling.model.js +291 -0
  594. package/dist/auto-reply/reply/directive-handling.parse.d.ts +62 -0
  595. package/dist/auto-reply/reply/directive-handling.parse.js +85 -0
  596. package/dist/auto-reply/reply/directive-handling.persist.d.ts +37 -0
  597. package/dist/auto-reply/reply/directive-handling.persist.js +181 -0
  598. package/dist/auto-reply/reply/directive-handling.queue-validation.d.ts +10 -0
  599. package/dist/auto-reply/reply/directive-handling.queue-validation.js +49 -0
  600. package/dist/auto-reply/reply/directive-handling.shared.d.ts +16 -0
  601. package/dist/auto-reply/reply/directive-handling.shared.js +47 -0
  602. package/dist/auto-reply/reply/directives.d.ts +38 -0
  603. package/dist/auto-reply/reply/directives.js +124 -0
  604. package/dist/auto-reply/reply/dispatch-from-config.d.ts +16 -0
  605. package/dist/auto-reply/reply/dispatch-from-config.js +386 -0
  606. package/dist/auto-reply/reply/exec/directive.d.ts +20 -0
  607. package/dist/auto-reply/reply/exec/directive.js +198 -0
  608. package/dist/auto-reply/reply/exec.d.ts +1 -0
  609. package/dist/auto-reply/reply/exec.js +1 -0
  610. package/dist/auto-reply/reply/followup-runner.d.ts +16 -0
  611. package/dist/auto-reply/reply/followup-runner.js +231 -0
  612. package/dist/auto-reply/reply/get-reply-directives-apply.d.ts +64 -0
  613. package/dist/auto-reply/reply/get-reply-directives-apply.js +201 -0
  614. package/dist/auto-reply/reply/get-reply-directives-utils.d.ts +2 -0
  615. package/dist/auto-reply/reply/get-reply-directives-utils.js +45 -0
  616. package/dist/auto-reply/reply/get-reply-directives.d.ts +90 -0
  617. package/dist/auto-reply/reply/get-reply-directives.js +345 -0
  618. package/dist/auto-reply/reply/get-reply-inline-actions.d.ts +59 -0
  619. package/dist/auto-reply/reply/get-reply-inline-actions.js +262 -0
  620. package/dist/auto-reply/reply/get-reply-run.d.ts +68 -0
  621. package/dist/auto-reply/reply/get-reply-run.js +286 -0
  622. package/dist/auto-reply/reply/get-reply.d.ts +4 -0
  623. package/dist/auto-reply/reply/get-reply.js +234 -0
  624. package/dist/auto-reply/reply/groups.d.ts +16 -0
  625. package/dist/auto-reply/reply/groups.js +108 -0
  626. package/dist/auto-reply/reply/history.d.ts +72 -0
  627. package/dist/auto-reply/reply/history.js +121 -0
  628. package/dist/auto-reply/reply/inbound-context.d.ts +8 -0
  629. package/dist/auto-reply/reply/inbound-context.js +53 -0
  630. package/dist/auto-reply/reply/inbound-dedupe.d.ts +8 -0
  631. package/dist/auto-reply/reply/inbound-dedupe.js +42 -0
  632. package/dist/auto-reply/reply/inbound-sender-meta.d.ts +5 -0
  633. package/dist/auto-reply/reply/inbound-sender-meta.js +51 -0
  634. package/dist/auto-reply/reply/inbound-text.d.ts +1 -0
  635. package/dist/auto-reply/reply/inbound-text.js +3 -0
  636. package/dist/auto-reply/reply/line-directives.d.ts +22 -0
  637. package/dist/auto-reply/reply/line-directives.js +297 -0
  638. package/dist/auto-reply/reply/memory-flush.d.ts +23 -0
  639. package/dist/auto-reply/reply/memory-flush.js +72 -0
  640. package/dist/auto-reply/reply/mentions.d.ts +18 -0
  641. package/dist/auto-reply/reply/mentions.js +128 -0
  642. package/dist/auto-reply/reply/model-selection.d.ts +50 -0
  643. package/dist/auto-reply/reply/model-selection.js +435 -0
  644. package/dist/auto-reply/reply/normalize-reply.d.ts +13 -0
  645. package/dist/auto-reply/reply/normalize-reply.js +63 -0
  646. package/dist/auto-reply/reply/provider-dispatcher.d.ts +19 -0
  647. package/dist/auto-reply/reply/provider-dispatcher.js +19 -0
  648. package/dist/auto-reply/reply/queue/cleanup.d.ts +6 -0
  649. package/dist/auto-reply/reply/queue/cleanup.js +20 -0
  650. package/dist/auto-reply/reply/queue/directive.d.ts +15 -0
  651. package/dist/auto-reply/reply/queue/directive.js +167 -0
  652. package/dist/auto-reply/reply/queue/drain.d.ts +2 -0
  653. package/dist/auto-reply/reply/queue/drain.js +117 -0
  654. package/dist/auto-reply/reply/queue/enqueue.d.ts +3 -0
  655. package/dist/auto-reply/reply/queue/enqueue.js +48 -0
  656. package/dist/auto-reply/reply/queue/normalize.d.ts +3 -0
  657. package/dist/auto-reply/reply/queue/normalize.js +41 -0
  658. package/dist/auto-reply/reply/queue/settings.d.ts +2 -0
  659. package/dist/auto-reply/reply/queue/settings.js +54 -0
  660. package/dist/auto-reply/reply/queue/state.d.ts +19 -0
  661. package/dist/auto-reply/reply/queue/state.js +55 -0
  662. package/dist/auto-reply/reply/queue/types.d.ts +84 -0
  663. package/dist/auto-reply/reply/queue/types.js +1 -0
  664. package/dist/auto-reply/reply/queue.d.ts +8 -0
  665. package/dist/auto-reply/reply/queue.js +6 -0
  666. package/dist/auto-reply/reply/reply-directives.d.ts +14 -0
  667. package/dist/auto-reply/reply/reply-directives.js +30 -0
  668. package/dist/auto-reply/reply/reply-dispatcher.d.ts +49 -0
  669. package/dist/auto-reply/reply/reply-dispatcher.js +112 -0
  670. package/dist/auto-reply/reply/reply-elevated.d.ts +23 -0
  671. package/dist/auto-reply/reply/reply-elevated.js +185 -0
  672. package/dist/auto-reply/reply/reply-inline.d.ts +8 -0
  673. package/dist/auto-reply/reply/reply-inline.js +32 -0
  674. package/dist/auto-reply/reply/reply-payloads.d.ts +22 -0
  675. package/dist/auto-reply/reply/reply-payloads.js +92 -0
  676. package/dist/auto-reply/reply/reply-reference.d.ts +20 -0
  677. package/dist/auto-reply/reply/reply-reference.js +38 -0
  678. package/dist/auto-reply/reply/reply-tags.d.ts +6 -0
  679. package/dist/auto-reply/reply/reply-tags.js +13 -0
  680. package/dist/auto-reply/reply/reply-threading.d.ts +9 -0
  681. package/dist/auto-reply/reply/reply-threading.js +45 -0
  682. package/dist/auto-reply/reply/response-prefix-template.d.ts +51 -0
  683. package/dist/auto-reply/reply/response-prefix-template.js +78 -0
  684. package/dist/auto-reply/reply/route-reply.d.ts +56 -0
  685. package/dist/auto-reply/reply/route-reply.js +110 -0
  686. package/dist/auto-reply/reply/session-reset-model.d.ts +24 -0
  687. package/dist/auto-reply/reply/session-reset-model.js +145 -0
  688. package/dist/auto-reply/reply/session-updates.d.ts +34 -0
  689. package/dist/auto-reply/reply/session-updates.js +249 -0
  690. package/dist/auto-reply/reply/session-usage.d.ts +13 -0
  691. package/dist/auto-reply/reply/session-usage.js +80 -0
  692. package/dist/auto-reply/reply/session.d.ts +26 -0
  693. package/dist/auto-reply/reply/session.js +307 -0
  694. package/dist/auto-reply/reply/stage-sandbox-media.d.ts +9 -0
  695. package/dist/auto-reply/reply/stage-sandbox-media.js +174 -0
  696. package/dist/auto-reply/reply/streaming-directives.d.ts +10 -0
  697. package/dist/auto-reply/reply/streaming-directives.js +94 -0
  698. package/dist/auto-reply/reply/subagents-utils.d.ts +9 -0
  699. package/dist/auto-reply/reply/subagents-utils.js +61 -0
  700. package/dist/auto-reply/reply/test-ctx.d.ts +2 -0
  701. package/dist/auto-reply/reply/test-ctx.js +15 -0
  702. package/dist/auto-reply/reply/typing-mode.d.ts +27 -0
  703. package/dist/auto-reply/reply/typing-mode.js +102 -0
  704. package/dist/auto-reply/reply/typing.d.ts +17 -0
  705. package/dist/auto-reply/reply/typing.js +152 -0
  706. package/dist/auto-reply/reply.d.ts +6 -0
  707. package/dist/auto-reply/reply.js +5 -0
  708. package/dist/auto-reply/send-policy.d.ts +6 -0
  709. package/dist/auto-reply/send-policy.js +37 -0
  710. package/dist/auto-reply/skill-commands.d.ts +18 -0
  711. package/dist/auto-reply/skill-commands.js +110 -0
  712. package/dist/auto-reply/status.d.ts +53 -0
  713. package/dist/auto-reply/status.js +523 -0
  714. package/dist/auto-reply/templating.d.ts +132 -0
  715. package/dist/auto-reply/templating.js +44 -0
  716. package/dist/auto-reply/thinking.d.ts +22 -0
  717. package/dist/auto-reply/thinking.js +195 -0
  718. package/dist/auto-reply/tokens.d.ts +3 -0
  719. package/dist/auto-reply/tokens.js +17 -0
  720. package/dist/auto-reply/tool-meta.d.ts +8 -0
  721. package/dist/auto-reply/tool-meta.js +127 -0
  722. package/dist/auto-reply/types.d.ts +55 -0
  723. package/dist/auto-reply/types.js +1 -0
  724. package/dist/browser/bridge-server.d.ts +17 -0
  725. package/dist/browser/bridge-server.js +46 -0
  726. package/dist/browser/cdp.d.ts +123 -0
  727. package/dist/browser/cdp.helpers.d.ts +9 -0
  728. package/dist/browser/cdp.helpers.js +142 -0
  729. package/dist/browser/cdp.js +308 -0
  730. package/dist/browser/chrome.d.ts +20 -0
  731. package/dist/browser/chrome.executables.d.ts +9 -0
  732. package/dist/browser/chrome.executables.js +558 -0
  733. package/dist/browser/chrome.js +263 -0
  734. package/dist/browser/chrome.profile-decoration.d.ts +10 -0
  735. package/dist/browser/chrome.profile-decoration.js +147 -0
  736. package/dist/browser/client-actions-core.d.ts +143 -0
  737. package/dist/browser/client-actions-core.js +101 -0
  738. package/dist/browser/client-actions-observe.d.ts +68 -0
  739. package/dist/browser/client-actions-observe.js +111 -0
  740. package/dist/browser/client-actions-state.d.ts +90 -0
  741. package/dist/browser/client-actions-state.js +175 -0
  742. package/dist/browser/client-actions-types.d.ts +18 -0
  743. package/dist/browser/client-actions-types.js +1 -0
  744. package/dist/browser/client-actions.d.ts +4 -0
  745. package/dist/browser/client-actions.js +4 -0
  746. package/dist/browser/client-fetch.d.ts +3 -0
  747. package/dist/browser/client-fetch.js +91 -0
  748. package/dist/browser/client.d.ts +147 -0
  749. package/dist/browser/client.js +149 -0
  750. package/dist/browser/config.d.ts +39 -0
  751. package/dist/browser/config.js +186 -0
  752. package/dist/browser/constants.d.ts +8 -0
  753. package/dist/browser/constants.js +8 -0
  754. package/dist/browser/control-service.d.ts +5 -0
  755. package/dist/browser/control-service.js +76 -0
  756. package/dist/browser/extension-relay.d.ts +14 -0
  757. package/dist/browser/extension-relay.js +565 -0
  758. package/dist/browser/profiles-service.d.ts +25 -0
  759. package/dist/browser/profiles-service.js +133 -0
  760. package/dist/browser/profiles.d.ts +30 -0
  761. package/dist/browser/profiles.js +99 -0
  762. package/dist/browser/pw-ai-module.d.ts +6 -0
  763. package/dist/browser/pw-ai-module.js +42 -0
  764. package/dist/browser/pw-ai.d.ts +2 -0
  765. package/dist/browser/pw-ai.js +2 -0
  766. package/dist/browser/pw-role-snapshot.d.ts +35 -0
  767. package/dist/browser/pw-role-snapshot.js +340 -0
  768. package/dist/browser/pw-session.d.ts +135 -0
  769. package/dist/browser/pw-session.js +457 -0
  770. package/dist/browser/pw-tools-core.activity.d.ts +21 -0
  771. package/dist/browser/pw-tools-core.activity.js +46 -0
  772. package/dist/browser/pw-tools-core.d.ts +8 -0
  773. package/dist/browser/pw-tools-core.downloads.d.ts +34 -0
  774. package/dist/browser/pw-tools-core.downloads.js +185 -0
  775. package/dist/browser/pw-tools-core.interactions.d.ts +112 -0
  776. package/dist/browser/pw-tools-core.interactions.js +428 -0
  777. package/dist/browser/pw-tools-core.js +8 -0
  778. package/dist/browser/pw-tools-core.responses.d.ts +13 -0
  779. package/dist/browser/pw-tools-core.responses.js +91 -0
  780. package/dist/browser/pw-tools-core.shared.d.ts +6 -0
  781. package/dist/browser/pw-tools-core.shared.js +49 -0
  782. package/dist/browser/pw-tools-core.snapshot.d.ts +64 -0
  783. package/dist/browser/pw-tools-core.snapshot.js +143 -0
  784. package/dist/browser/pw-tools-core.state.d.ts +46 -0
  785. package/dist/browser/pw-tools-core.state.js +153 -0
  786. package/dist/browser/pw-tools-core.storage.d.ts +47 -0
  787. package/dist/browser/pw-tools-core.storage.js +75 -0
  788. package/dist/browser/pw-tools-core.trace.d.ts +12 -0
  789. package/dist/browser/pw-tools-core.trace.js +25 -0
  790. package/dist/browser/routes/agent.act.d.ts +3 -0
  791. package/dist/browser/routes/agent.act.js +505 -0
  792. package/dist/browser/routes/agent.act.shared.d.ts +10 -0
  793. package/dist/browser/routes/agent.act.shared.js +40 -0
  794. package/dist/browser/routes/agent.d.ts +3 -0
  795. package/dist/browser/routes/agent.debug.d.ts +3 -0
  796. package/dist/browser/routes/agent.debug.js +143 -0
  797. package/dist/browser/routes/agent.js +10 -0
  798. package/dist/browser/routes/agent.shared.d.ts +9 -0
  799. package/dist/browser/routes/agent.shared.js +48 -0
  800. package/dist/browser/routes/agent.snapshot.d.ts +3 -0
  801. package/dist/browser/routes/agent.snapshot.js +280 -0
  802. package/dist/browser/routes/agent.storage.d.ts +3 -0
  803. package/dist/browser/routes/agent.storage.js +426 -0
  804. package/dist/browser/routes/basic.d.ts +3 -0
  805. package/dist/browser/routes/basic.js +175 -0
  806. package/dist/browser/routes/dispatcher.d.ts +15 -0
  807. package/dist/browser/routes/dispatcher.js +88 -0
  808. package/dist/browser/routes/index.d.ts +3 -0
  809. package/dist/browser/routes/index.js +8 -0
  810. package/dist/browser/routes/tabs.d.ts +3 -0
  811. package/dist/browser/routes/tabs.js +138 -0
  812. package/dist/browser/routes/types.d.ts +15 -0
  813. package/dist/browser/routes/types.js +1 -0
  814. package/dist/browser/routes/utils.d.ts +15 -0
  815. package/dist/browser/routes/utils.js +60 -0
  816. package/dist/browser/screenshot.d.ts +9 -0
  817. package/dist/browser/screenshot.js +39 -0
  818. package/dist/browser/server-context.d.ts +3 -0
  819. package/dist/browser/server-context.js +551 -0
  820. package/dist/browser/server-context.types.d.ts +78 -0
  821. package/dist/browser/server-context.types.js +1 -0
  822. package/dist/browser/server.d.ts +3 -0
  823. package/dist/browser/server.js +95 -0
  824. package/dist/browser/target-id.d.ts +11 -0
  825. package/dist/browser/target-id.js +20 -0
  826. package/dist/browser/trash.d.ts +1 -0
  827. package/dist/browser/trash.js +21 -0
  828. package/dist/build-info.json +5 -0
  829. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  830. package/dist/canvas-host/a2ui/a2ui.bundle.js +17780 -0
  831. package/dist/canvas-host/a2ui/index.html +307 -0
  832. package/dist/canvas-host/a2ui.d.ts +6 -0
  833. package/dist/canvas-host/a2ui.js +193 -0
  834. package/dist/canvas-host/server.d.ts +36 -0
  835. package/dist/canvas-host/server.js +433 -0
  836. package/dist/channel-web.js +8 -0
  837. package/dist/channels/ack-reactions.d.ts +29 -0
  838. package/dist/channels/ack-reactions.js +72 -0
  839. package/dist/channels/allowlist-match.d.ts +10 -0
  840. package/dist/channels/allowlist-match.js +3 -0
  841. package/dist/channels/allowlists/resolve-utils.d.ts +6 -0
  842. package/dist/channels/allowlists/resolve-utils.js +39 -0
  843. package/dist/channels/channel-config.d.ts +39 -0
  844. package/dist/channels/channel-config.js +138 -0
  845. package/dist/channels/chat-type.d.ts +2 -0
  846. package/dist/channels/chat-type.js +16 -0
  847. package/dist/channels/command-gating.d.ts +20 -0
  848. package/dist/channels/command-gating.js +27 -0
  849. package/dist/channels/conversation-label.d.ts +2 -0
  850. package/dist/channels/conversation-label.js +60 -0
  851. package/dist/channels/dock.d.ts +36 -0
  852. package/dist/channels/dock.js +350 -0
  853. package/dist/channels/location.d.ts +21 -0
  854. package/dist/channels/location.js +45 -0
  855. package/dist/channels/logging.d.ts +20 -0
  856. package/dist/channels/logging.js +13 -0
  857. package/dist/channels/mention-gating.d.ts +27 -0
  858. package/dist/channels/mention-gating.js +26 -0
  859. package/dist/channels/plugins/actions/discord/handle-action.d.ts +3 -0
  860. package/dist/channels/plugins/actions/discord/handle-action.guild-admin.d.ts +9 -0
  861. package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +332 -0
  862. package/dist/channels/plugins/actions/discord/handle-action.js +168 -0
  863. package/dist/channels/plugins/actions/discord.d.ts +2 -0
  864. package/dist/channels/plugins/actions/discord.js +104 -0
  865. package/dist/channels/plugins/actions/signal.d.ts +2 -0
  866. package/dist/channels/plugins/actions/signal.js +123 -0
  867. package/dist/channels/plugins/actions/telegram.d.ts +2 -0
  868. package/dist/channels/plugins/actions/telegram.js +160 -0
  869. package/dist/channels/plugins/agent-tools/whatsapp-login.d.ts +2 -0
  870. package/dist/channels/plugins/agent-tools/whatsapp-login.js +63 -0
  871. package/dist/channels/plugins/allowlist-match.d.ts +2 -0
  872. package/dist/channels/plugins/allowlist-match.js +1 -0
  873. package/dist/channels/plugins/bluebubbles-actions.d.ts +48 -0
  874. package/dist/channels/plugins/bluebubbles-actions.js +16 -0
  875. package/dist/channels/plugins/catalog.d.ts +35 -0
  876. package/dist/channels/plugins/catalog.js +231 -0
  877. package/dist/channels/plugins/channel-config.d.ts +2 -0
  878. package/dist/channels/plugins/channel-config.js +1 -0
  879. package/dist/channels/plugins/config-helpers.d.ts +14 -0
  880. package/dist/channels/plugins/config-helpers.js +89 -0
  881. package/dist/channels/plugins/config-schema.d.ts +3 -0
  882. package/dist/channels/plugins/config-schema.js +8 -0
  883. package/dist/channels/plugins/config-writes.d.ts +7 -0
  884. package/dist/channels/plugins/config-writes.js +25 -0
  885. package/dist/channels/plugins/directory-config.d.ts +16 -0
  886. package/dist/channels/plugins/directory-config.js +198 -0
  887. package/dist/channels/plugins/group-mentions.d.ts +28 -0
  888. package/dist/channels/plugins/group-mentions.js +332 -0
  889. package/dist/channels/plugins/helpers.d.ts +8 -0
  890. package/dist/channels/plugins/helpers.js +12 -0
  891. package/dist/channels/plugins/index.d.ts +8 -0
  892. package/dist/channels/plugins/index.js +54 -0
  893. package/dist/channels/plugins/load.d.ts +2 -0
  894. package/dist/channels/plugins/load.js +24 -0
  895. package/dist/channels/plugins/media-limits.d.ts +9 -0
  896. package/dist/channels/plugins/media-limits.js +16 -0
  897. package/dist/channels/plugins/message-action-names.d.ts +2 -0
  898. package/dist/channels/plugins/message-action-names.js +51 -0
  899. package/dist/channels/plugins/message-actions.d.ts +7 -0
  900. package/dist/channels/plugins/message-actions.js +40 -0
  901. package/dist/channels/plugins/normalize/discord.d.ts +2 -0
  902. package/dist/channels/plugins/normalize/discord.js +22 -0
  903. package/dist/channels/plugins/normalize/imessage.d.ts +2 -0
  904. package/dist/channels/plugins/normalize/imessage.js +43 -0
  905. package/dist/channels/plugins/normalize/signal.d.ts +2 -0
  906. package/dist/channels/plugins/normalize/signal.js +58 -0
  907. package/dist/channels/plugins/normalize/slack.d.ts +2 -0
  908. package/dist/channels/plugins/normalize/slack.js +24 -0
  909. package/dist/channels/plugins/normalize/telegram.d.ts +2 -0
  910. package/dist/channels/plugins/normalize/telegram.js +38 -0
  911. package/dist/channels/plugins/normalize/whatsapp.d.ts +2 -0
  912. package/dist/channels/plugins/normalize/whatsapp.js +21 -0
  913. package/dist/channels/plugins/onboarding/channel-access.d.ts +31 -0
  914. package/dist/channels/plugins/onboarding/channel-access.js +70 -0
  915. package/dist/channels/plugins/onboarding/discord.d.ts +2 -0
  916. package/dist/channels/plugins/onboarding/discord.js +418 -0
  917. package/dist/channels/plugins/onboarding/helpers.d.ts +3 -0
  918. package/dist/channels/plugins/onboarding/helpers.js +35 -0
  919. package/dist/channels/plugins/onboarding/imessage.d.ts +2 -0
  920. package/dist/channels/plugins/onboarding/imessage.js +237 -0
  921. package/dist/channels/plugins/onboarding/signal.d.ts +2 -0
  922. package/dist/channels/plugins/onboarding/signal.js +271 -0
  923. package/dist/channels/plugins/onboarding/slack.d.ts +2 -0
  924. package/dist/channels/plugins/onboarding/slack.js +473 -0
  925. package/dist/channels/plugins/onboarding/telegram.d.ts +2 -0
  926. package/dist/channels/plugins/onboarding/telegram.js +294 -0
  927. package/dist/channels/plugins/onboarding/whatsapp.d.ts +2 -0
  928. package/dist/channels/plugins/onboarding/whatsapp.js +295 -0
  929. package/dist/channels/plugins/onboarding-types.d.ts +77 -0
  930. package/dist/channels/plugins/onboarding-types.js +1 -0
  931. package/dist/channels/plugins/outbound/discord.d.ts +2 -0
  932. package/dist/channels/plugins/outbound/discord.js +29 -0
  933. package/dist/channels/plugins/outbound/imessage.d.ts +2 -0
  934. package/dist/channels/plugins/outbound/imessage.js +38 -0
  935. package/dist/channels/plugins/outbound/load.d.ts +2 -0
  936. package/dist/channels/plugins/outbound/load.js +30 -0
  937. package/dist/channels/plugins/outbound/signal.d.ts +2 -0
  938. package/dist/channels/plugins/outbound/signal.js +36 -0
  939. package/dist/channels/plugins/outbound/slack.d.ts +2 -0
  940. package/dist/channels/plugins/outbound/slack.js +27 -0
  941. package/dist/channels/plugins/outbound/telegram.d.ts +2 -0
  942. package/dist/channels/plugins/outbound/telegram.js +96 -0
  943. package/dist/channels/plugins/outbound/whatsapp.d.ts +2 -0
  944. package/dist/channels/plugins/outbound/whatsapp.js +76 -0
  945. package/dist/channels/plugins/pairing-message.d.ts +1 -0
  946. package/dist/channels/plugins/pairing-message.js +1 -0
  947. package/dist/channels/plugins/pairing.d.ts +16 -0
  948. package/dist/channels/plugins/pairing.js +45 -0
  949. package/dist/channels/plugins/setup-helpers.d.ts +13 -0
  950. package/dist/channels/plugins/setup-helpers.js +94 -0
  951. package/dist/channels/plugins/slack.actions.d.ts +2 -0
  952. package/dist/channels/plugins/slack.actions.js +164 -0
  953. package/dist/channels/plugins/status-issues/bluebubbles.d.ts +2 -0
  954. package/dist/channels/plugins/status-issues/bluebubbles.js +80 -0
  955. package/dist/channels/plugins/status-issues/discord.d.ts +2 -0
  956. package/dist/channels/plugins/status-issues/discord.js +124 -0
  957. package/dist/channels/plugins/status-issues/shared.d.ts +10 -0
  958. package/dist/channels/plugins/status-issues/shared.js +23 -0
  959. package/dist/channels/plugins/status-issues/telegram.d.ts +2 -0
  960. package/dist/channels/plugins/status-issues/telegram.js +107 -0
  961. package/dist/channels/plugins/status-issues/whatsapp.d.ts +2 -0
  962. package/dist/channels/plugins/status-issues/whatsapp.js +55 -0
  963. package/dist/channels/plugins/status.d.ts +10 -0
  964. package/dist/channels/plugins/status.js +26 -0
  965. package/dist/channels/plugins/types.adapters.d.ts +294 -0
  966. package/dist/channels/plugins/types.adapters.js +1 -0
  967. package/dist/channels/plugins/types.core.d.ts +311 -0
  968. package/dist/channels/plugins/types.core.js +1 -0
  969. package/dist/channels/plugins/types.d.ts +6 -0
  970. package/dist/channels/plugins/types.js +1 -0
  971. package/dist/channels/plugins/types.plugin.d.ts +53 -0
  972. package/dist/channels/plugins/types.plugin.js +1 -0
  973. package/dist/channels/plugins/whatsapp-heartbeat.d.ts +11 -0
  974. package/dist/channels/plugins/whatsapp-heartbeat.js +58 -0
  975. package/dist/channels/registry.d.ts +16 -0
  976. package/dist/channels/registry.js +154 -0
  977. package/dist/channels/reply-prefix.d.ts +15 -0
  978. package/dist/channels/reply-prefix.js +21 -0
  979. package/dist/channels/sender-identity.d.ts +2 -0
  980. package/dist/channels/sender-identity.js +32 -0
  981. package/dist/channels/sender-label.d.ts +9 -0
  982. package/dist/channels/sender-label.js +45 -0
  983. package/dist/channels/session.d.ts +18 -0
  984. package/dist/channels/session.js +27 -0
  985. package/dist/channels/targets.d.ts +25 -0
  986. package/dist/channels/targets.js +27 -0
  987. package/dist/channels/typing.d.ts +10 -0
  988. package/dist/channels/typing.js +17 -0
  989. package/dist/channels/web/index.d.ts +1 -0
  990. package/dist/channels/web/index.js +2 -0
  991. package/dist/cli/acp-cli.d.ts +2 -0
  992. package/dist/cli/acp-cli.js +61 -0
  993. package/dist/cli/argv.d.ts +16 -0
  994. package/dist/cli/argv.js +145 -0
  995. package/dist/cli/banner.d.ts +12 -0
  996. package/dist/cli/banner.js +104 -0
  997. package/dist/cli/browser-cli-actions-input/register.d.ts +3 -0
  998. package/dist/cli/browser-cli-actions-input/register.element.d.ts +3 -0
  999. package/dist/cli/browser-cli-actions-input/register.element.js +231 -0
  1000. package/dist/cli/browser-cli-actions-input/register.files-downloads.d.ts +3 -0
  1001. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +148 -0
  1002. package/dist/cli/browser-cli-actions-input/register.form-wait-eval.d.ts +3 -0
  1003. package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +121 -0
  1004. package/dist/cli/browser-cli-actions-input/register.js +10 -0
  1005. package/dist/cli/browser-cli-actions-input/register.navigation.d.ts +3 -0
  1006. package/dist/cli/browser-cli-actions-input/register.navigation.js +72 -0
  1007. package/dist/cli/browser-cli-actions-input/shared.d.ts +19 -0
  1008. package/dist/cli/browser-cli-actions-input/shared.js +59 -0
  1009. package/dist/cli/browser-cli-actions-input.d.ts +1 -0
  1010. package/dist/cli/browser-cli-actions-input.js +1 -0
  1011. package/dist/cli/browser-cli-actions-observe.d.ts +3 -0
  1012. package/dist/cli/browser-cli-actions-observe.js +90 -0
  1013. package/dist/cli/browser-cli-debug.d.ts +3 -0
  1014. package/dist/cli/browser-cli-debug.js +162 -0
  1015. package/dist/cli/browser-cli-examples.d.ts +2 -0
  1016. package/dist/cli/browser-cli-examples.js +33 -0
  1017. package/dist/cli/browser-cli-extension.d.ts +10 -0
  1018. package/dist/cli/browser-cli-extension.js +99 -0
  1019. package/dist/cli/browser-cli-inspect.d.ts +3 -0
  1020. package/dist/cli/browser-cli-inspect.js +136 -0
  1021. package/dist/cli/browser-cli-manage.d.ts +3 -0
  1022. package/dist/cli/browser-cli-manage.js +401 -0
  1023. package/dist/cli/browser-cli-shared.d.ts +16 -0
  1024. package/dist/cli/browser-cli-shared.js +36 -0
  1025. package/dist/cli/browser-cli-state.cookies-storage.d.ts +3 -0
  1026. package/dist/cli/browser-cli-state.cookies-storage.js +182 -0
  1027. package/dist/cli/browser-cli-state.d.ts +3 -0
  1028. package/dist/cli/browser-cli-state.js +288 -0
  1029. package/dist/cli/browser-cli.d.ts +2 -0
  1030. package/dist/cli/browser-cli.js +37 -0
  1031. package/dist/cli/channel-auth.d.ts +9 -0
  1032. package/dist/cli/channel-auth.js +49 -0
  1033. package/dist/cli/channel-options.d.ts +2 -0
  1034. package/dist/cli/channel-options.js +30 -0
  1035. package/dist/cli/channels-cli.d.ts +2 -0
  1036. package/dist/cli/channels-cli.js +208 -0
  1037. package/dist/cli/cli-name.d.ts +3 -0
  1038. package/dist/cli/cli-name.js +26 -0
  1039. package/dist/cli/cli-utils.d.ts +18 -0
  1040. package/dist/cli/cli-utils.js +45 -0
  1041. package/dist/cli/command-format.d.ts +1 -0
  1042. package/dist/cli/command-format.js +20 -0
  1043. package/dist/cli/command-options.d.ts +2 -0
  1044. package/dist/cli/command-options.js +6 -0
  1045. package/dist/cli/completion-cli.d.ts +3 -0
  1046. package/dist/cli/completion-cli.js +372 -0
  1047. package/dist/cli/config-cli.d.ts +2 -0
  1048. package/dist/cli/config-cli.js +316 -0
  1049. package/dist/cli/cron-cli/register.cron-add.d.ts +4 -0
  1050. package/dist/cli/cron-cli/register.cron-add.js +192 -0
  1051. package/dist/cli/cron-cli/register.cron-edit.d.ts +2 -0
  1052. package/dist/cli/cron-cli/register.cron-edit.js +173 -0
  1053. package/dist/cli/cron-cli/register.cron-simple.d.ts +2 -0
  1054. package/dist/cli/cron-cli/register.cron-simple.js +98 -0
  1055. package/dist/cli/cron-cli/register.d.ts +2 -0
  1056. package/dist/cli/cron-cli/register.js +16 -0
  1057. package/dist/cli/cron-cli/shared.d.ts +7 -0
  1058. package/dist/cli/cron-cli/shared.js +203 -0
  1059. package/dist/cli/cron-cli.d.ts +1 -0
  1060. package/dist/cli/cron-cli.js +1 -0
  1061. package/dist/cli/daemon-cli/install.d.ts +2 -0
  1062. package/dist/cli/daemon-cli/install.js +115 -0
  1063. package/dist/cli/daemon-cli/lifecycle.d.ts +10 -0
  1064. package/dist/cli/daemon-cli/lifecycle.js +277 -0
  1065. package/dist/cli/daemon-cli/probe.d.ts +14 -0
  1066. package/dist/cli/daemon-cli/probe.js +28 -0
  1067. package/dist/cli/daemon-cli/register.d.ts +2 -0
  1068. package/dist/cli/daemon-cli/register.js +69 -0
  1069. package/dist/cli/daemon-cli/response.d.ts +26 -0
  1070. package/dist/cli/daemon-cli/response.js +20 -0
  1071. package/dist/cli/daemon-cli/runners.d.ts +3 -0
  1072. package/dist/cli/daemon-cli/runners.js +3 -0
  1073. package/dist/cli/daemon-cli/shared.d.ts +22 -0
  1074. package/dist/cli/daemon-cli/shared.js +182 -0
  1075. package/dist/cli/daemon-cli/status.d.ts +2 -0
  1076. package/dist/cli/daemon-cli/status.gather.d.ts +89 -0
  1077. package/dist/cli/daemon-cli/status.gather.js +170 -0
  1078. package/dist/cli/daemon-cli/status.js +19 -0
  1079. package/dist/cli/daemon-cli/status.print.d.ts +4 -0
  1080. package/dist/cli/daemon-cli/status.print.js +235 -0
  1081. package/dist/cli/daemon-cli/types.d.ts +23 -0
  1082. package/dist/cli/daemon-cli/types.js +1 -0
  1083. package/dist/cli/daemon-cli.d.ts +3 -0
  1084. package/dist/cli/daemon-cli.js +2 -0
  1085. package/dist/cli/deps.d.ts +18 -0
  1086. package/dist/cli/deps.js +28 -0
  1087. package/dist/cli/devices-cli.d.ts +2 -0
  1088. package/dist/cli/devices-cli.js +185 -0
  1089. package/dist/cli/directory-cli.d.ts +2 -0
  1090. package/dist/cli/directory-cli.js +237 -0
  1091. package/dist/cli/dns-cli.d.ts +2 -0
  1092. package/dist/cli/dns-cli.js +211 -0
  1093. package/dist/cli/docs-cli.d.ts +2 -0
  1094. package/dist/cli/docs-cli.js +17 -0
  1095. package/dist/cli/exec-approvals-cli.d.ts +2 -0
  1096. package/dist/cli/exec-approvals-cli.js +384 -0
  1097. package/dist/cli/gateway-cli/call.d.ts +11 -0
  1098. package/dist/cli/gateway-cli/call.js +25 -0
  1099. package/dist/cli/gateway-cli/dev.d.ts +3 -0
  1100. package/dist/cli/gateway-cli/dev.js +107 -0
  1101. package/dist/cli/gateway-cli/discover.d.ts +10 -0
  1102. package/dist/cli/gateway-cli/discover.js +91 -0
  1103. package/dist/cli/gateway-cli/register.d.ts +2 -0
  1104. package/dist/cli/gateway-cli/register.js +273 -0
  1105. package/dist/cli/gateway-cli/run-loop.d.ts +6 -0
  1106. package/dist/cli/gateway-cli/run-loop.js +87 -0
  1107. package/dist/cli/gateway-cli/run.d.ts +2 -0
  1108. package/dist/cli/gateway-cli/run.js +266 -0
  1109. package/dist/cli/gateway-cli/shared.d.ts +9 -0
  1110. package/dist/cli/gateway-cli/shared.js +111 -0
  1111. package/dist/cli/gateway-cli.d.ts +1 -0
  1112. package/dist/cli/gateway-cli.js +1 -0
  1113. package/dist/cli/gateway-rpc.d.ts +13 -0
  1114. package/dist/cli/gateway-rpc.js +27 -0
  1115. package/dist/cli/help-format.d.ts +5 -0
  1116. package/dist/cli/help-format.js +17 -0
  1117. package/dist/cli/hooks-cli.d.ts +32 -0
  1118. package/dist/cli/hooks-cli.js +718 -0
  1119. package/dist/cli/logs-cli.d.ts +2 -0
  1120. package/dist/cli/logs-cli.js +230 -0
  1121. package/dist/cli/memory-cli.d.ts +11 -0
  1122. package/dist/cli/memory-cli.js +571 -0
  1123. package/dist/cli/models-cli.d.ts +2 -0
  1124. package/dist/cli/models-cli.js +333 -0
  1125. package/dist/cli/node-cli/daemon.d.ts +24 -0
  1126. package/dist/cli/node-cli/daemon.js +497 -0
  1127. package/dist/cli/node-cli/register.d.ts +2 -0
  1128. package/dist/cli/node-cli/register.js +81 -0
  1129. package/dist/cli/node-cli.d.ts +1 -0
  1130. package/dist/cli/node-cli.js +1 -0
  1131. package/dist/cli/nodes-camera.d.ts +26 -0
  1132. package/dist/cli/nodes-camera.js +52 -0
  1133. package/dist/cli/nodes-canvas.d.ts +10 -0
  1134. package/dist/cli/nodes-canvas.js +26 -0
  1135. package/dist/cli/nodes-cli/a2ui-jsonl.d.ts +6 -0
  1136. package/dist/cli/nodes-cli/a2ui-jsonl.js +82 -0
  1137. package/dist/cli/nodes-cli/cli-utils.d.ts +9 -0
  1138. package/dist/cli/nodes-cli/cli-utils.js +28 -0
  1139. package/dist/cli/nodes-cli/format.d.ts +5 -0
  1140. package/dist/cli/nodes-cli/format.js +40 -0
  1141. package/dist/cli/nodes-cli/register.camera.d.ts +2 -0
  1142. package/dist/cli/nodes-cli/register.camera.js +194 -0
  1143. package/dist/cli/nodes-cli/register.canvas.d.ts +2 -0
  1144. package/dist/cli/nodes-cli/register.canvas.js +218 -0
  1145. package/dist/cli/nodes-cli/register.d.ts +2 -0
  1146. package/dist/cli/nodes-cli/register.invoke.d.ts +2 -0
  1147. package/dist/cli/nodes-cli/register.invoke.js +310 -0
  1148. package/dist/cli/nodes-cli/register.js +24 -0
  1149. package/dist/cli/nodes-cli/register.location.d.ts +2 -0
  1150. package/dist/cli/nodes-cli/register.location.js +64 -0
  1151. package/dist/cli/nodes-cli/register.notify.d.ts +2 -0
  1152. package/dist/cli/nodes-cli/register.notify.js +51 -0
  1153. package/dist/cli/nodes-cli/register.pairing.d.ts +2 -0
  1154. package/dist/cli/nodes-cli/register.pairing.js +99 -0
  1155. package/dist/cli/nodes-cli/register.screen.d.ts +2 -0
  1156. package/dist/cli/nodes-cli/register.screen.js +66 -0
  1157. package/dist/cli/nodes-cli/register.status.d.ts +2 -0
  1158. package/dist/cli/nodes-cli/register.status.js +344 -0
  1159. package/dist/cli/nodes-cli/rpc.d.ts +8 -0
  1160. package/dist/cli/nodes-cli/rpc.js +94 -0
  1161. package/dist/cli/nodes-cli/types.d.ts +92 -0
  1162. package/dist/cli/nodes-cli/types.js +1 -0
  1163. package/dist/cli/nodes-cli.d.ts +1 -0
  1164. package/dist/cli/nodes-cli.js +1 -0
  1165. package/dist/cli/nodes-run.d.ts +3 -0
  1166. package/dist/cli/nodes-run.js +23 -0
  1167. package/dist/cli/nodes-screen.d.ts +18 -0
  1168. package/dist/cli/nodes-screen.js +35 -0
  1169. package/dist/cli/outbound-send-deps.d.ts +10 -0
  1170. package/dist/cli/outbound-send-deps.js +11 -0
  1171. package/dist/cli/pairing-cli.d.ts +2 -0
  1172. package/dist/cli/pairing-cli.js +118 -0
  1173. package/dist/cli/parse-duration.d.ts +4 -0
  1174. package/dist/cli/parse-duration.js +31 -0
  1175. package/dist/cli/parse-timeout.d.ts +1 -0
  1176. package/dist/cli/parse-timeout.js +20 -0
  1177. package/dist/cli/plugin-registry.d.ts +1 -0
  1178. package/dist/cli/plugin-registry.js +25 -0
  1179. package/dist/cli/plugins-cli.d.ts +14 -0
  1180. package/dist/cli/plugins-cli.js +481 -0
  1181. package/dist/cli/ports.d.ts +20 -0
  1182. package/dist/cli/ports.js +104 -0
  1183. package/dist/cli/profile-utils.d.ts +2 -0
  1184. package/dist/cli/profile-utils.js +21 -0
  1185. package/dist/cli/profile.d.ts +14 -0
  1186. package/dist/cli/profile.js +92 -0
  1187. package/dist/cli/program/build-program.d.ts +2 -0
  1188. package/dist/cli/program/build-program.js +14 -0
  1189. package/dist/cli/program/command-registry.d.ts +21 -0
  1190. package/dist/cli/program/command-registry.js +155 -0
  1191. package/dist/cli/program/config-guard.d.ts +5 -0
  1192. package/dist/cli/program/config-guard.js +68 -0
  1193. package/dist/cli/program/context.d.ts +7 -0
  1194. package/dist/cli/program/context.js +11 -0
  1195. package/dist/cli/program/help.d.ts +3 -0
  1196. package/dist/cli/program/help.js +73 -0
  1197. package/dist/cli/program/helpers.d.ts +3 -0
  1198. package/dist/cli/program/helpers.js +30 -0
  1199. package/dist/cli/program/message/helpers.d.ts +8 -0
  1200. package/dist/cli/program/message/helpers.js +46 -0
  1201. package/dist/cli/program/message/register.broadcast.d.ts +3 -0
  1202. package/dist/cli/program/message/register.broadcast.js +11 -0
  1203. package/dist/cli/program/message/register.discord-admin.d.ts +3 -0
  1204. package/dist/cli/program/message/register.discord-admin.js +119 -0
  1205. package/dist/cli/program/message/register.emoji-sticker.d.ts +4 -0
  1206. package/dist/cli/program/message/register.emoji-sticker.js +43 -0
  1207. package/dist/cli/program/message/register.permissions-search.d.ts +4 -0
  1208. package/dist/cli/program/message/register.permissions-search.js +22 -0
  1209. package/dist/cli/program/message/register.pins.d.ts +3 -0
  1210. package/dist/cli/program/message/register.pins.js +23 -0
  1211. package/dist/cli/program/message/register.poll.d.ts +3 -0
  1212. package/dist/cli/program/message/register.poll.js +13 -0
  1213. package/dist/cli/program/message/register.reactions.d.ts +3 -0
  1214. package/dist/cli/program/message/register.reactions.js +21 -0
  1215. package/dist/cli/program/message/register.read-edit-delete.d.ts +3 -0
  1216. package/dist/cli/program/message/register.read-edit-delete.js +30 -0
  1217. package/dist/cli/program/message/register.send.d.ts +3 -0
  1218. package/dist/cli/program/message/register.send.js +18 -0
  1219. package/dist/cli/program/message/register.thread.d.ts +3 -0
  1220. package/dist/cli/program/message/register.thread.js +35 -0
  1221. package/dist/cli/program/preaction.d.ts +2 -0
  1222. package/dist/cli/program/preaction.js +52 -0
  1223. package/dist/cli/program/register.agent.d.ts +4 -0
  1224. package/dist/cli/program/register.agent.js +165 -0
  1225. package/dist/cli/program/register.configure.d.ts +2 -0
  1226. package/dist/cli/program/register.configure.js +32 -0
  1227. package/dist/cli/program/register.maintenance.d.ts +2 -0
  1228. package/dist/cli/program/register.maintenance.js +91 -0
  1229. package/dist/cli/program/register.message.d.ts +3 -0
  1230. package/dist/cli/program/register.message.js +54 -0
  1231. package/dist/cli/program/register.onboard.d.ts +2 -0
  1232. package/dist/cli/program/register.onboard.js +125 -0
  1233. package/dist/cli/program/register.setup.d.ts +2 -0
  1234. package/dist/cli/program/register.setup.js +41 -0
  1235. package/dist/cli/program/register.status-health-sessions.d.ts +2 -0
  1236. package/dist/cli/program/register.status-health-sessions.js +109 -0
  1237. package/dist/cli/program/register.subclis.d.ts +11 -0
  1238. package/dist/cli/program/register.subclis.js +291 -0
  1239. package/dist/cli/program.d.ts +2 -0
  1240. package/dist/cli/program.js +2 -0
  1241. package/dist/cli/progress.d.ts +24 -0
  1242. package/dist/cli/progress.js +180 -0
  1243. package/dist/cli/prompt.d.ts +1 -0
  1244. package/dist/cli/prompt.js +20 -0
  1245. package/dist/cli/route.d.ts +1 -0
  1246. package/dist/cli/route.js +33 -0
  1247. package/dist/cli/run-main.d.ts +3 -0
  1248. package/dist/cli/run-main.js +113 -0
  1249. package/dist/cli/sandbox-cli.d.ts +2 -0
  1250. package/dist/cli/sandbox-cli.js +98 -0
  1251. package/dist/cli/security-cli.d.ts +2 -0
  1252. package/dist/cli/security-cli.js +131 -0
  1253. package/dist/cli/skills-cli.d.ts +29 -0
  1254. package/dist/cli/skills-cli.js +345 -0
  1255. package/dist/cli/system-cli.d.ts +2 -0
  1256. package/dist/cli/system-cli.js +103 -0
  1257. package/dist/cli/tagline.d.ts +12 -0
  1258. package/dist/cli/tagline.js +215 -0
  1259. package/dist/cli/tui-cli.d.ts +2 -0
  1260. package/dist/cli/tui-cli.js +44 -0
  1261. package/dist/cli/update-cli.d.ts +20 -0
  1262. package/dist/cli/update-cli.js +1036 -0
  1263. package/dist/cli/wait.d.ts +1 -0
  1264. package/dist/cli/wait.js +8 -0
  1265. package/dist/cli/webhooks-cli.d.ts +2 -0
  1266. package/dist/cli/webhooks-cli.js +145 -0
  1267. package/dist/commands/agent/delivery.d.ts +19 -0
  1268. package/dist/commands/agent/delivery.js +153 -0
  1269. package/dist/commands/agent/run-context.d.ts +2 -0
  1270. package/dist/commands/agent/run-context.js +32 -0
  1271. package/dist/commands/agent/session-store.d.ts +17 -0
  1272. package/dist/commands/agent/session-store.js +44 -0
  1273. package/dist/commands/agent/session.d.ts +33 -0
  1274. package/dist/commands/agent/session.js +75 -0
  1275. package/dist/commands/agent/types.d.ts +75 -0
  1276. package/dist/commands/agent/types.js +1 -0
  1277. package/dist/commands/agent-via-gateway.d.ts +42 -0
  1278. package/dist/commands/agent-via-gateway.js +123 -0
  1279. package/dist/commands/agent.d.ts +7 -0
  1280. package/dist/commands/agent.js +442 -0
  1281. package/dist/commands/agents.bindings.d.ts +27 -0
  1282. package/dist/commands/agents.bindings.js +133 -0
  1283. package/dist/commands/agents.command-shared.d.ts +4 -0
  1284. package/dist/commands/agents.command-shared.js +18 -0
  1285. package/dist/commands/agents.commands.add.d.ts +14 -0
  1286. package/dist/commands/agents.commands.add.js +297 -0
  1287. package/dist/commands/agents.commands.delete.d.ts +8 -0
  1288. package/dist/commands/agents.commands.delete.js +77 -0
  1289. package/dist/commands/agents.commands.identity.d.ts +14 -0
  1290. package/dist/commands/agents.commands.identity.js +174 -0
  1291. package/dist/commands/agents.commands.list.d.ts +7 -0
  1292. package/dist/commands/agents.commands.list.js +103 -0
  1293. package/dist/commands/agents.config.d.ts +37 -0
  1294. package/dist/commands/agents.config.js +149 -0
  1295. package/dist/commands/agents.d.ts +6 -0
  1296. package/dist/commands/agents.js +6 -0
  1297. package/dist/commands/agents.providers.d.ts +20 -0
  1298. package/dist/commands/agents.providers.js +146 -0
  1299. package/dist/commands/auth-choice-options.d.ts +25 -0
  1300. package/dist/commands/auth-choice-options.js +180 -0
  1301. package/dist/commands/auth-choice-prompt.d.ts +8 -0
  1302. package/dist/commands/auth-choice-prompt.js +36 -0
  1303. package/dist/commands/auth-choice.api-key.d.ts +6 -0
  1304. package/dist/commands/auth-choice.api-key.js +36 -0
  1305. package/dist/commands/auth-choice.apply.anthropic.d.ts +2 -0
  1306. package/dist/commands/auth-choice.apply.anthropic.js +77 -0
  1307. package/dist/commands/auth-choice.apply.api-providers.d.ts +2 -0
  1308. package/dist/commands/auth-choice.apply.api-providers.js +555 -0
  1309. package/dist/commands/auth-choice.apply.copilot-proxy.d.ts +2 -0
  1310. package/dist/commands/auth-choice.apply.copilot-proxy.js +10 -0
  1311. package/dist/commands/auth-choice.apply.d.ts +22 -0
  1312. package/dist/commands/auth-choice.apply.github-copilot.d.ts +2 -0
  1313. package/dist/commands/auth-choice.apply.github-copilot.js +48 -0
  1314. package/dist/commands/auth-choice.apply.google-antigravity.d.ts +2 -0
  1315. package/dist/commands/auth-choice.apply.google-antigravity.js +10 -0
  1316. package/dist/commands/auth-choice.apply.google-gemini-cli.d.ts +2 -0
  1317. package/dist/commands/auth-choice.apply.google-gemini-cli.js +10 -0
  1318. package/dist/commands/auth-choice.apply.js +31 -0
  1319. package/dist/commands/auth-choice.apply.minimax.d.ts +2 -0
  1320. package/dist/commands/auth-choice.apply.minimax.js +91 -0
  1321. package/dist/commands/auth-choice.apply.oauth.d.ts +2 -0
  1322. package/dist/commands/auth-choice.apply.oauth.js +78 -0
  1323. package/dist/commands/auth-choice.apply.openai.d.ts +2 -0
  1324. package/dist/commands/auth-choice.apply.openai.js +118 -0
  1325. package/dist/commands/auth-choice.apply.plugin-provider.d.ts +9 -0
  1326. package/dist/commands/auth-choice.apply.plugin-provider.js +142 -0
  1327. package/dist/commands/auth-choice.apply.qwen-portal.d.ts +2 -0
  1328. package/dist/commands/auth-choice.apply.qwen-portal.js +10 -0
  1329. package/dist/commands/auth-choice.d.ts +3 -0
  1330. package/dist/commands/auth-choice.default-model.d.ts +15 -0
  1331. package/dist/commands/auth-choice.default-model.js +12 -0
  1332. package/dist/commands/auth-choice.js +3 -0
  1333. package/dist/commands/auth-choice.model-check.d.ts +6 -0
  1334. package/dist/commands/auth-choice.model-check.js +61 -0
  1335. package/dist/commands/auth-choice.preferred-provider.d.ts +2 -0
  1336. package/dist/commands/auth-choice.preferred-provider.js +34 -0
  1337. package/dist/commands/auth-token.d.ts +9 -0
  1338. package/dist/commands/auth-token.js +34 -0
  1339. package/dist/commands/channels/add-mutators.d.ts +46 -0
  1340. package/dist/commands/channels/add-mutators.js +50 -0
  1341. package/dist/commands/channels/add.d.ts +39 -0
  1342. package/dist/commands/channels/add.js +215 -0
  1343. package/dist/commands/channels/capabilities.d.ts +9 -0
  1344. package/dist/commands/channels/capabilities.js +464 -0
  1345. package/dist/commands/channels/list.d.ts +6 -0
  1346. package/dist/commands/channels/list.js +149 -0
  1347. package/dist/commands/channels/logs.d.ts +7 -0
  1348. package/dist/commands/channels/logs.js +92 -0
  1349. package/dist/commands/channels/remove.d.ts +9 -0
  1350. package/dist/commands/channels/remove.js +116 -0
  1351. package/dist/commands/channels/resolve.d.ts +9 -0
  1352. package/dist/commands/channels/resolve.js +114 -0
  1353. package/dist/commands/channels/shared.d.ts +20 -0
  1354. package/dist/commands/channels/shared.js +42 -0
  1355. package/dist/commands/channels/status.d.ts +8 -0
  1356. package/dist/commands/channels/status.js +246 -0
  1357. package/dist/commands/channels.d.ts +14 -0
  1358. package/dist/commands/channels.js +7 -0
  1359. package/dist/commands/chutes-oauth.d.ts +21 -0
  1360. package/dist/commands/chutes-oauth.js +151 -0
  1361. package/dist/commands/cleanup-utils.d.ts +13 -0
  1362. package/dist/commands/cleanup-utils.js +78 -0
  1363. package/dist/commands/configure.channels.d.ts +3 -0
  1364. package/dist/commands/configure.channels.js +54 -0
  1365. package/dist/commands/configure.commands.d.ts +4 -0
  1366. package/dist/commands/configure.commands.js +8 -0
  1367. package/dist/commands/configure.d.ts +4 -0
  1368. package/dist/commands/configure.daemon.d.ts +8 -0
  1369. package/dist/commands/configure.daemon.js +107 -0
  1370. package/dist/commands/configure.gateway-auth.d.ts +12 -0
  1371. package/dist/commands/configure.gateway-auth.js +65 -0
  1372. package/dist/commands/configure.gateway.d.ts +7 -0
  1373. package/dist/commands/configure.gateway.js +162 -0
  1374. package/dist/commands/configure.js +4 -0
  1375. package/dist/commands/configure.shared.d.ts +18 -0
  1376. package/dist/commands/configure.shared.js +49 -0
  1377. package/dist/commands/configure.wizard.d.ts +3 -0
  1378. package/dist/commands/configure.wizard.js +467 -0
  1379. package/dist/commands/daemon-install-helpers.d.ts +22 -0
  1380. package/dist/commands/daemon-install-helpers.js +52 -0
  1381. package/dist/commands/daemon-runtime.d.ts +8 -0
  1382. package/dist/commands/daemon-runtime.js +11 -0
  1383. package/dist/commands/dashboard.d.ts +6 -0
  1384. package/dist/commands/dashboard.js +47 -0
  1385. package/dist/commands/docs.d.ts +2 -0
  1386. package/dist/commands/docs.js +154 -0
  1387. package/dist/commands/doctor-auth.d.ts +9 -0
  1388. package/dist/commands/doctor-auth.js +247 -0
  1389. package/dist/commands/doctor-config-flow.d.ts +13 -0
  1390. package/dist/commands/doctor-config-flow.js +261 -0
  1391. package/dist/commands/doctor-format.d.ts +8 -0
  1392. package/dist/commands/doctor-format.js +93 -0
  1393. package/dist/commands/doctor-gateway-daemon-flow.d.ts +11 -0
  1394. package/dist/commands/doctor-gateway-daemon-flow.js +212 -0
  1395. package/dist/commands/doctor-gateway-health.d.ts +9 -0
  1396. package/dist/commands/doctor-gateway-health.js +43 -0
  1397. package/dist/commands/doctor-gateway-services.d.ts +5 -0
  1398. package/dist/commands/doctor-gateway-services.js +226 -0
  1399. package/dist/commands/doctor-install.d.ts +1 -0
  1400. package/dist/commands/doctor-install.js +29 -0
  1401. package/dist/commands/doctor-legacy-config.d.ts +5 -0
  1402. package/dist/commands/doctor-legacy-config.js +42 -0
  1403. package/dist/commands/doctor-platform-notes.d.ts +11 -0
  1404. package/dist/commands/doctor-platform-notes.js +114 -0
  1405. package/dist/commands/doctor-prompter.d.ts +24 -0
  1406. package/dist/commands/doctor-prompter.js +75 -0
  1407. package/dist/commands/doctor-sandbox.d.ts +5 -0
  1408. package/dist/commands/doctor-sandbox.js +213 -0
  1409. package/dist/commands/doctor-security.d.ts +2 -0
  1410. package/dist/commands/doctor-security.js +145 -0
  1411. package/dist/commands/doctor-state-integrity.d.ts +10 -0
  1412. package/dist/commands/doctor-state-integrity.js +350 -0
  1413. package/dist/commands/doctor-state-migrations.d.ts +2 -0
  1414. package/dist/commands/doctor-state-migrations.js +1 -0
  1415. package/dist/commands/doctor-ui.d.ts +3 -0
  1416. package/dist/commands/doctor-ui.js +121 -0
  1417. package/dist/commands/doctor-update.d.ts +18 -0
  1418. package/dist/commands/doctor-update.js +68 -0
  1419. package/dist/commands/doctor-workspace-status.d.ts +4 -0
  1420. package/dist/commands/doctor-workspace-status.js +56 -0
  1421. package/dist/commands/doctor-workspace.d.ts +10 -0
  1422. package/dist/commands/doctor-workspace.js +48 -0
  1423. package/dist/commands/doctor.d.ts +3 -0
  1424. package/dist/commands/doctor.js +253 -0
  1425. package/dist/commands/gateway-status/helpers.d.ts +72 -0
  1426. package/dist/commands/gateway-status/helpers.js +212 -0
  1427. package/dist/commands/gateway-status.d.ts +11 -0
  1428. package/dist/commands/gateway-status.js +321 -0
  1429. package/dist/commands/google-gemini-model-default.d.ts +6 -0
  1430. package/dist/commands/google-gemini-model-default.js +34 -0
  1431. package/dist/commands/health-format.d.ts +3 -0
  1432. package/dist/commands/health-format.js +39 -0
  1433. package/dist/commands/health.d.ts +63 -0
  1434. package/dist/commands/health.js +628 -0
  1435. package/dist/commands/message-format.d.ts +11 -0
  1436. package/dist/commands/message-format.js +362 -0
  1437. package/dist/commands/message.d.ts +3 -0
  1438. package/dist/commands/message.js +45 -0
  1439. package/dist/commands/model-picker.d.ts +31 -0
  1440. package/dist/commands/model-picker.js +454 -0
  1441. package/dist/commands/models/aliases.d.ts +7 -0
  1442. package/dist/commands/models/aliases.js +93 -0
  1443. package/dist/commands/models/auth-order.d.ts +15 -0
  1444. package/dist/commands/models/auth-order.js +100 -0
  1445. package/dist/commands/models/auth.d.ts +18 -0
  1446. package/dist/commands/models/auth.js +341 -0
  1447. package/dist/commands/models/fallbacks.d.ts +8 -0
  1448. package/dist/commands/models/fallbacks.js +131 -0
  1449. package/dist/commands/models/image-fallbacks.d.ts +8 -0
  1450. package/dist/commands/models/image-fallbacks.js +131 -0
  1451. package/dist/commands/models/list.auth-overview.d.ts +9 -0
  1452. package/dist/commands/models/list.auth-overview.js +95 -0
  1453. package/dist/commands/models/list.configured.d.ts +5 -0
  1454. package/dist/commands/models/list.configured.js +84 -0
  1455. package/dist/commands/models/list.d.ts +2 -0
  1456. package/dist/commands/models/list.format.d.ts +12 -0
  1457. package/dist/commands/models/list.format.js +53 -0
  1458. package/dist/commands/models/list.js +2 -0
  1459. package/dist/commands/models/list.list-command.d.ts +8 -0
  1460. package/dist/commands/models/list.list-command.js +104 -0
  1461. package/dist/commands/models/list.probe.d.ts +49 -0
  1462. package/dist/commands/models/list.probe.js +366 -0
  1463. package/dist/commands/models/list.registry.d.ts +18 -0
  1464. package/dist/commands/models/list.registry.js +87 -0
  1465. package/dist/commands/models/list.status-command.d.ts +13 -0
  1466. package/dist/commands/models/list.status-command.js +462 -0
  1467. package/dist/commands/models/list.table.d.ts +6 -0
  1468. package/dist/commands/models/list.table.js +59 -0
  1469. package/dist/commands/models/list.types.d.ts +41 -0
  1470. package/dist/commands/models/list.types.js +1 -0
  1471. package/dist/commands/models/scan.d.ts +15 -0
  1472. package/dist/commands/models/scan.js +305 -0
  1473. package/dist/commands/models/set-image.d.ts +2 -0
  1474. package/dist/commands/models/set-image.js +29 -0
  1475. package/dist/commands/models/set.d.ts +2 -0
  1476. package/dist/commands/models/set.js +29 -0
  1477. package/dist/commands/models/shared.d.ts +34 -0
  1478. package/dist/commands/models/shared.js +102 -0
  1479. package/dist/commands/models.d.ts +10 -0
  1480. package/dist/commands/models.js +10 -0
  1481. package/dist/commands/node-daemon-install-helpers.d.ts +22 -0
  1482. package/dist/commands/node-daemon-install-helpers.js +36 -0
  1483. package/dist/commands/node-daemon-runtime.d.ts +9 -0
  1484. package/dist/commands/node-daemon-runtime.js +6 -0
  1485. package/dist/commands/oauth-env.d.ts +1 -0
  1486. package/dist/commands/oauth-env.js +16 -0
  1487. package/dist/commands/oauth-flow.d.ts +21 -0
  1488. package/dist/commands/oauth-flow.js +34 -0
  1489. package/dist/commands/onboard-auth.config-core.d.ts +31 -0
  1490. package/dist/commands/onboard-auth.config-core.js +430 -0
  1491. package/dist/commands/onboard-auth.config-minimax.d.ts +11 -0
  1492. package/dist/commands/onboard-auth.config-minimax.js +176 -0
  1493. package/dist/commands/onboard-auth.config-opencode.d.ts +3 -0
  1494. package/dist/commands/onboard-auth.config-opencode.js +40 -0
  1495. package/dist/commands/onboard-auth.credentials.d.ts +18 -0
  1496. package/dist/commands/onboard-auth.credentials.js +159 -0
  1497. package/dist/commands/onboard-auth.d.ts +7 -0
  1498. package/dist/commands/onboard-auth.js +7 -0
  1499. package/dist/commands/onboard-auth.models.d.ts +48 -0
  1500. package/dist/commands/onboard-auth.models.js +76 -0
  1501. package/dist/commands/onboard-channels.d.ts +12 -0
  1502. package/dist/commands/onboard-channels.js +544 -0
  1503. package/dist/commands/onboard-helpers.d.ts +81 -0
  1504. package/dist/commands/onboard-helpers.js +386 -0
  1505. package/dist/commands/onboard-hooks.d.ts +4 -0
  1506. package/dist/commands/onboard-hooks.js +59 -0
  1507. package/dist/commands/onboard-interactive.d.ts +3 -0
  1508. package/dist/commands/onboard-interactive.js +17 -0
  1509. package/dist/commands/onboard-non-interactive/api-keys.d.ts +16 -0
  1510. package/dist/commands/onboard-non-interactive/api-keys.js +50 -0
  1511. package/dist/commands/onboard-non-interactive/local/auth-choice.d.ts +10 -0
  1512. package/dist/commands/onboard-non-interactive/local/auth-choice.js +380 -0
  1513. package/dist/commands/onboard-non-interactive/local/daemon-install.d.ts +10 -0
  1514. package/dist/commands/onboard-non-interactive/local/daemon-install.js +46 -0
  1515. package/dist/commands/onboard-non-interactive/local/gateway-config.d.ts +17 -0
  1516. package/dist/commands/onboard-non-interactive/local/gateway-config.js +89 -0
  1517. package/dist/commands/onboard-non-interactive/local/output.d.ts +19 -0
  1518. package/dist/commands/onboard-non-interactive/local/output.js +15 -0
  1519. package/dist/commands/onboard-non-interactive/local/skills-config.d.ts +8 -0
  1520. package/dist/commands/onboard-non-interactive/local/skills-config.js +22 -0
  1521. package/dist/commands/onboard-non-interactive/local/workspace.d.ts +7 -0
  1522. package/dist/commands/onboard-non-interactive/local/workspace.js +7 -0
  1523. package/dist/commands/onboard-non-interactive/local.d.ts +8 -0
  1524. package/dist/commands/onboard-non-interactive/local.js +107 -0
  1525. package/dist/commands/onboard-non-interactive/remote.d.ts +8 -0
  1526. package/dist/commands/onboard-non-interactive/remote.js +41 -0
  1527. package/dist/commands/onboard-non-interactive.d.ts +3 -0
  1528. package/dist/commands/onboard-non-interactive.js +25 -0
  1529. package/dist/commands/onboard-remote.d.ts +3 -0
  1530. package/dist/commands/onboard-remote.js +126 -0
  1531. package/dist/commands/onboard-skills.d.ts +4 -0
  1532. package/dist/commands/onboard-skills.js +155 -0
  1533. package/dist/commands/onboard-types.d.ts +62 -0
  1534. package/dist/commands/onboard-types.js +1 -0
  1535. package/dist/commands/onboard.d.ts +4 -0
  1536. package/dist/commands/onboard.js +62 -0
  1537. package/dist/commands/onboarding/__tests__/test-utils.d.ts +4 -0
  1538. package/dist/commands/onboarding/__tests__/test-utils.js +20 -0
  1539. package/dist/commands/onboarding/plugin-install.d.ts +21 -0
  1540. package/dist/commands/onboarding/plugin-install.js +168 -0
  1541. package/dist/commands/onboarding/registry.d.ts +6 -0
  1542. package/dist/commands/onboarding/registry.js +13 -0
  1543. package/dist/commands/onboarding/types.d.ts +1 -0
  1544. package/dist/commands/onboarding/types.js +1 -0
  1545. package/dist/commands/openai-codex-model-default.d.ts +6 -0
  1546. package/dist/commands/openai-codex-model-default.js +48 -0
  1547. package/dist/commands/opencode-zen-model-default.d.ts +6 -0
  1548. package/dist/commands/opencode-zen-model-default.js +36 -0
  1549. package/dist/commands/reset.d.ts +9 -0
  1550. package/dist/commands/reset.js +136 -0
  1551. package/dist/commands/sandbox-display.d.ts +13 -0
  1552. package/dist/commands/sandbox-display.js +82 -0
  1553. package/dist/commands/sandbox-explain.d.ts +8 -0
  1554. package/dist/commands/sandbox-explain.js +238 -0
  1555. package/dist/commands/sandbox-formatters.d.ts +25 -0
  1556. package/dist/commands/sandbox-formatters.js +34 -0
  1557. package/dist/commands/sandbox.d.ts +15 -0
  1558. package/dist/commands/sandbox.js +119 -0
  1559. package/dist/commands/sessions.d.ts +6 -0
  1560. package/dist/commands/sessions.js +229 -0
  1561. package/dist/commands/setup.d.ts +4 -0
  1562. package/dist/commands/setup.js +62 -0
  1563. package/dist/commands/signal-install.d.ts +8 -0
  1564. package/dist/commands/signal-install.js +133 -0
  1565. package/dist/commands/status-all/agents.d.ts +16 -0
  1566. package/dist/commands/status-all/agents.js +62 -0
  1567. package/dist/commands/status-all/channels.d.ts +19 -0
  1568. package/dist/commands/status-all/channels.js +382 -0
  1569. package/dist/commands/status-all/diagnosis.d.ts +62 -0
  1570. package/dist/commands/status-all/diagnosis.js +160 -0
  1571. package/dist/commands/status-all/format.d.ts +7 -0
  1572. package/dist/commands/status-all/format.js +51 -0
  1573. package/dist/commands/status-all/gateway.d.ts +10 -0
  1574. package/dist/commands/status-all/gateway.js +168 -0
  1575. package/dist/commands/status-all/report-lines.d.ts +44 -0
  1576. package/dist/commands/status-all/report-lines.js +138 -0
  1577. package/dist/commands/status-all.d.ts +4 -0
  1578. package/dist/commands/status-all.js +429 -0
  1579. package/dist/commands/status.agent-local.d.ts +16 -0
  1580. package/dist/commands/status.agent-local.js +68 -0
  1581. package/dist/commands/status.command.d.ts +9 -0
  1582. package/dist/commands/status.command.js +495 -0
  1583. package/dist/commands/status.d.ts +3 -0
  1584. package/dist/commands/status.daemon.d.ts +9 -0
  1585. package/dist/commands/status.daemon.js +30 -0
  1586. package/dist/commands/status.format.d.ts +13 -0
  1587. package/dist/commands/status.format.js +63 -0
  1588. package/dist/commands/status.gateway-probe.d.ts +11 -0
  1589. package/dist/commands/status.gateway-probe.js +37 -0
  1590. package/dist/commands/status.js +2 -0
  1591. package/dist/commands/status.link-channel.d.ts +10 -0
  1592. package/dist/commands/status.link-channel.js +40 -0
  1593. package/dist/commands/status.scan.d.ts +46 -0
  1594. package/dist/commands/status.scan.js +144 -0
  1595. package/dist/commands/status.summary.d.ts +2 -0
  1596. package/dist/commands/status.summary.js +183 -0
  1597. package/dist/commands/status.types.d.ts +58 -0
  1598. package/dist/commands/status.types.js +1 -0
  1599. package/dist/commands/status.update.d.ts +16 -0
  1600. package/dist/commands/status.update.js +123 -0
  1601. package/dist/commands/systemd-linger.d.ts +21 -0
  1602. package/dist/commands/systemd-linger.js +83 -0
  1603. package/dist/commands/uninstall.d.ts +12 -0
  1604. package/dist/commands/uninstall.js +167 -0
  1605. package/dist/compat/legacy-names.d.ts +8 -0
  1606. package/dist/compat/legacy-names.js +8 -0
  1607. package/dist/config/agent-dirs.d.ts +14 -0
  1608. package/dist/config/agent-dirs.js +81 -0
  1609. package/dist/config/agent-limits.d.ts +5 -0
  1610. package/dist/config/agent-limits.js +16 -0
  1611. package/dist/config/cache-utils.d.ts +6 -0
  1612. package/dist/config/cache-utils.js +22 -0
  1613. package/dist/config/channel-capabilities.d.ts +6 -0
  1614. package/dist/config/channel-capabilities.js +45 -0
  1615. package/dist/config/commands.d.ts +16 -0
  1616. package/dist/config/commands.js +47 -0
  1617. package/dist/config/config-paths.d.ts +10 -0
  1618. package/dist/config/config-paths.js +78 -0
  1619. package/dist/config/config.d.ts +7 -0
  1620. package/dist/config/config.js +7 -0
  1621. package/dist/config/defaults.d.ts +18 -0
  1622. package/dist/config/defaults.js +387 -0
  1623. package/dist/config/env-substitution.d.ts +35 -0
  1624. package/dist/config/env-substitution.js +117 -0
  1625. package/dist/config/env-vars.d.ts +2 -0
  1626. package/dist/config/env-vars.js +25 -0
  1627. package/dist/config/group-policy.d.ts +44 -0
  1628. package/dist/config/group-policy.js +137 -0
  1629. package/dist/config/includes.d.ts +32 -0
  1630. package/dist/config/includes.js +183 -0
  1631. package/dist/config/io.d.ts +36 -0
  1632. package/dist/config/io.js +505 -0
  1633. package/dist/config/legacy-migrate.d.ts +5 -0
  1634. package/dist/config/legacy-migrate.js +14 -0
  1635. package/dist/config/legacy.d.ts +6 -0
  1636. package/dist/config/legacy.js +37 -0
  1637. package/dist/config/legacy.migrations.d.ts +1 -0
  1638. package/dist/config/legacy.migrations.js +8 -0
  1639. package/dist/config/legacy.migrations.part-1.d.ts +2 -0
  1640. package/dist/config/legacy.migrations.part-1.js +341 -0
  1641. package/dist/config/legacy.migrations.part-2.d.ts +2 -0
  1642. package/dist/config/legacy.migrations.part-2.js +361 -0
  1643. package/dist/config/legacy.migrations.part-3.d.ts +2 -0
  1644. package/dist/config/legacy.migrations.part-3.js +174 -0
  1645. package/dist/config/legacy.rules.d.ts +2 -0
  1646. package/dist/config/legacy.rules.js +116 -0
  1647. package/dist/config/legacy.shared.d.ts +18 -0
  1648. package/dist/config/legacy.shared.js +87 -0
  1649. package/dist/config/logging.d.ts +8 -0
  1650. package/dist/config/logging.js +10 -0
  1651. package/dist/config/markdown-tables.d.ts +7 -0
  1652. package/dist/config/markdown-tables.js +40 -0
  1653. package/dist/config/merge-config.d.ts +7 -0
  1654. package/dist/config/merge-config.js +22 -0
  1655. package/dist/config/merge-patch.d.ts +1 -0
  1656. package/dist/config/merge-patch.js +22 -0
  1657. package/dist/config/normalize-paths.d.ts +8 -0
  1658. package/dist/config/normalize-paths.js +62 -0
  1659. package/dist/config/paths.d.ts +57 -0
  1660. package/dist/config/paths.js +207 -0
  1661. package/dist/config/plugin-auto-enable.d.ts +10 -0
  1662. package/dist/config/plugin-auto-enable.js +377 -0
  1663. package/dist/config/port-defaults.d.ts +13 -0
  1664. package/dist/config/port-defaults.js +31 -0
  1665. package/dist/config/runtime-overrides.d.ts +15 -0
  1666. package/dist/config/runtime-overrides.js +53 -0
  1667. package/dist/config/schema.d.ts +39 -0
  1668. package/dist/config/schema.js +813 -0
  1669. package/dist/config/sessions/group.d.ts +11 -0
  1670. package/dist/config/sessions/group.js +89 -0
  1671. package/dist/config/sessions/main-session.d.ts +43 -0
  1672. package/dist/config/sessions/main-session.js +48 -0
  1673. package/dist/config/sessions/metadata.d.ts +16 -0
  1674. package/dist/config/sessions/metadata.js +139 -0
  1675. package/dist/config/sessions/paths.d.ts +11 -0
  1676. package/dist/config/sessions/paths.js +48 -0
  1677. package/dist/config/sessions/reset.d.ts +43 -0
  1678. package/dist/config/sessions/reset.js +117 -0
  1679. package/dist/config/sessions/session-key.d.ts +8 -0
  1680. package/dist/config/sessions/session-key.js +39 -0
  1681. package/dist/config/sessions/store.d.ts +38 -0
  1682. package/dist/config/sessions/store.js +363 -0
  1683. package/dist/config/sessions/transcript.d.ts +18 -0
  1684. package/dist/config/sessions/transcript.js +121 -0
  1685. package/dist/config/sessions/types.d.ts +146 -0
  1686. package/dist/config/sessions/types.js +12 -0
  1687. package/dist/config/sessions.d.ts +9 -0
  1688. package/dist/config/sessions.js +9 -0
  1689. package/dist/config/talk.d.ts +11 -0
  1690. package/dist/config/talk.js +34 -0
  1691. package/dist/config/telegram-custom-commands.d.ts +24 -0
  1692. package/dist/config/telegram-custom-commands.js +71 -0
  1693. package/dist/config/types.agent-defaults.d.ts +248 -0
  1694. package/dist/config/types.agent-defaults.js +1 -0
  1695. package/dist/config/types.agents.d.ts +75 -0
  1696. package/dist/config/types.agents.js +1 -0
  1697. package/dist/config/types.approvals.d.ts +26 -0
  1698. package/dist/config/types.approvals.js +1 -0
  1699. package/dist/config/types.auth.d.ts +28 -0
  1700. package/dist/config/types.auth.js +1 -0
  1701. package/dist/config/types.base.d.ts +149 -0
  1702. package/dist/config/types.base.js +1 -0
  1703. package/dist/config/types.browser.d.ts +41 -0
  1704. package/dist/config/types.browser.js +1 -0
  1705. package/dist/config/types.channels.d.ts +34 -0
  1706. package/dist/config/types.channels.js +1 -0
  1707. package/dist/config/types.cron.d.ts +5 -0
  1708. package/dist/config/types.cron.js +1 -0
  1709. package/dist/config/types.d.ts +28 -0
  1710. package/dist/config/types.discord.d.ts +142 -0
  1711. package/dist/config/types.discord.js +1 -0
  1712. package/dist/config/types.gateway.d.ts +220 -0
  1713. package/dist/config/types.gateway.js +1 -0
  1714. package/dist/config/types.googlechat.d.ts +98 -0
  1715. package/dist/config/types.googlechat.js +1 -0
  1716. package/dist/config/types.hooks.d.ts +106 -0
  1717. package/dist/config/types.hooks.js +1 -0
  1718. package/dist/config/types.imessage.d.ts +67 -0
  1719. package/dist/config/types.imessage.js +1 -0
  1720. package/dist/config/types.js +29 -0
  1721. package/dist/config/types.messages.d.ts +104 -0
  1722. package/dist/config/types.messages.js +1 -0
  1723. package/dist/config/types.models.d.ts +47 -0
  1724. package/dist/config/types.models.js +1 -0
  1725. package/dist/config/types.msteams.d.ts +94 -0
  1726. package/dist/config/types.msteams.js +1 -0
  1727. package/dist/config/types.node-host.d.ts +10 -0
  1728. package/dist/config/types.node-host.js +1 -0
  1729. package/dist/config/types.openclaw.d.ts +106 -0
  1730. package/dist/config/types.openclaw.js +1 -0
  1731. package/dist/config/types.plugins.d.ts +32 -0
  1732. package/dist/config/types.plugins.js +1 -0
  1733. package/dist/config/types.queue.d.ts +13 -0
  1734. package/dist/config/types.queue.js +1 -0
  1735. package/dist/config/types.sandbox.d.ts +76 -0
  1736. package/dist/config/types.sandbox.js +1 -0
  1737. package/dist/config/types.signal.d.ts +84 -0
  1738. package/dist/config/types.signal.js +1 -0
  1739. package/dist/config/types.skills.d.ts +28 -0
  1740. package/dist/config/types.skills.js +1 -0
  1741. package/dist/config/types.slack.d.ts +136 -0
  1742. package/dist/config/types.slack.js +1 -0
  1743. package/dist/config/types.telegram.d.ts +148 -0
  1744. package/dist/config/types.telegram.js +1 -0
  1745. package/dist/config/types.tools.d.ts +435 -0
  1746. package/dist/config/types.tools.js +1 -0
  1747. package/dist/config/types.tts.d.ts +78 -0
  1748. package/dist/config/types.tts.js +1 -0
  1749. package/dist/config/types.whatsapp.d.ts +147 -0
  1750. package/dist/config/types.whatsapp.js +1 -0
  1751. package/dist/config/validation.d.ts +17 -0
  1752. package/dist/config/validation.js +312 -0
  1753. package/dist/config/version.d.ts +8 -0
  1754. package/dist/config/version.js +37 -0
  1755. package/dist/config/zod-schema.agent-defaults.d.ts +242 -0
  1756. package/dist/config/zod-schema.agent-defaults.js +157 -0
  1757. package/dist/config/zod-schema.agent-runtime.d.ts +812 -0
  1758. package/dist/config/zod-schema.agent-runtime.js +523 -0
  1759. package/dist/config/zod-schema.agents.d.ts +487 -0
  1760. package/dist/config/zod-schema.agents.js +46 -0
  1761. package/dist/config/zod-schema.approvals.d.ts +15 -0
  1762. package/dist/config/zod-schema.approvals.js +25 -0
  1763. package/dist/config/zod-schema.channels.d.ts +6 -0
  1764. package/dist/config/zod-schema.channels.js +9 -0
  1765. package/dist/config/zod-schema.core.d.ts +647 -0
  1766. package/dist/config/zod-schema.core.js +454 -0
  1767. package/dist/config/zod-schema.d.ts +2981 -0
  1768. package/dist/config/zod-schema.hooks.d.ts +78 -0
  1769. package/dist/config/zod-schema.hooks.js +124 -0
  1770. package/dist/config/zod-schema.js +543 -0
  1771. package/dist/config/zod-schema.providers-core.d.ts +2659 -0
  1772. package/dist/config/zod-schema.providers-core.js +708 -0
  1773. package/dist/config/zod-schema.providers-whatsapp.d.ts +228 -0
  1774. package/dist/config/zod-schema.providers-whatsapp.js +130 -0
  1775. package/dist/config/zod-schema.providers.d.ts +1612 -0
  1776. package/dist/config/zod-schema.providers.js +29 -0
  1777. package/dist/config/zod-schema.session.d.ts +171 -0
  1778. package/dist/config/zod-schema.session.js +105 -0
  1779. package/dist/control-ui/apple-touch-icon.png +0 -0
  1780. package/dist/control-ui/assets/index-BKPyesll.css +1 -0
  1781. package/dist/control-ui/assets/index-CXUONUC9.js +3898 -0
  1782. package/dist/control-ui/assets/index-CXUONUC9.js.map +1 -0
  1783. package/dist/control-ui/favicon-32.png +0 -0
  1784. package/dist/control-ui/favicon.ico +0 -0
  1785. package/dist/control-ui/favicon.svg +22 -0
  1786. package/dist/control-ui/index.html +17 -0
  1787. package/dist/cron/isolated-agent/delivery-target.d.ts +13 -0
  1788. package/dist/cron/isolated-agent/delivery-target.js +59 -0
  1789. package/dist/cron/isolated-agent/helpers.d.ts +23 -0
  1790. package/dist/cron/isolated-agent/helpers.js +54 -0
  1791. package/dist/cron/isolated-agent/run.d.ts +19 -0
  1792. package/dist/cron/isolated-agent/run.js +378 -0
  1793. package/dist/cron/isolated-agent/session.d.ts +14 -0
  1794. package/dist/cron/isolated-agent/session.js +27 -0
  1795. package/dist/cron/isolated-agent.d.ts +1 -0
  1796. package/dist/cron/isolated-agent.js +1 -0
  1797. package/dist/cron/normalize.d.ts +9 -0
  1798. package/dist/cron/normalize.js +125 -0
  1799. package/dist/cron/parse.d.ts +1 -0
  1800. package/dist/cron/parse.js +29 -0
  1801. package/dist/cron/payload-migration.d.ts +3 -0
  1802. package/dist/cron/payload-migration.js +30 -0
  1803. package/dist/cron/run-log.d.ts +23 -0
  1804. package/dist/cron/run-log.js +78 -0
  1805. package/dist/cron/schedule.d.ts +2 -0
  1806. package/dist/cron/schedule.js +26 -0
  1807. package/dist/cron/service/jobs.d.ts +13 -0
  1808. package/dist/cron/service/jobs.js +199 -0
  1809. package/dist/cron/service/locked.d.ts +2 -0
  1810. package/dist/cron/service/locked.js +12 -0
  1811. package/dist/cron/service/normalize.d.ts +17 -0
  1812. package/dist/cron/service/normalize.js +66 -0
  1813. package/dist/cron/service/ops.d.ts +39 -0
  1814. package/dist/cron/service/ops.js +121 -0
  1815. package/dist/cron/service/state.d.ts +86 -0
  1816. package/dist/cron/service/state.js +10 -0
  1817. package/dist/cron/service/store.d.ts +4 -0
  1818. package/dist/cron/service/store.js +62 -0
  1819. package/dist/cron/service/timer.d.ts +18 -0
  1820. package/dist/cron/service/timer.js +229 -0
  1821. package/dist/cron/service.d.ts +44 -0
  1822. package/dist/cron/service.js +35 -0
  1823. package/dist/cron/store.d.ts +6 -0
  1824. package/dist/cron/store.js +44 -0
  1825. package/dist/cron/types.d.ts +93 -0
  1826. package/dist/cron/types.js +1 -0
  1827. package/dist/daemon/constants.d.ts +30 -0
  1828. package/dist/daemon/constants.js +82 -0
  1829. package/dist/daemon/diagnostics.d.ts +1 -0
  1830. package/dist/daemon/diagnostics.js +40 -0
  1831. package/dist/daemon/inspect.d.ts +13 -0
  1832. package/dist/daemon/inspect.js +378 -0
  1833. package/dist/daemon/launchd-plist.d.ts +15 -0
  1834. package/dist/daemon/launchd-plist.js +72 -0
  1835. package/dist/daemon/launchd.d.ts +76 -0
  1836. package/dist/daemon/launchd.js +324 -0
  1837. package/dist/daemon/node-service.d.ts +2 -0
  1838. package/dist/daemon/node-service.js +53 -0
  1839. package/dist/daemon/paths.d.ts +3 -0
  1840. package/dist/daemon/paths.js +38 -0
  1841. package/dist/daemon/program-args.d.ts +23 -0
  1842. package/dist/daemon/program-args.js +231 -0
  1843. package/dist/daemon/runtime-parse.d.ts +1 -0
  1844. package/dist/daemon/runtime-parse.js +20 -0
  1845. package/dist/daemon/runtime-paths.d.ts +27 -0
  1846. package/dist/daemon/runtime-paths.js +113 -0
  1847. package/dist/daemon/schtasks.d.ts +39 -0
  1848. package/dist/daemon/schtasks.js +320 -0
  1849. package/dist/daemon/service-audit.d.ts +37 -0
  1850. package/dist/daemon/service-audit.js +283 -0
  1851. package/dist/daemon/service-env.d.ts +27 -0
  1852. package/dist/daemon/service-env.js +141 -0
  1853. package/dist/daemon/service-runtime.d.ts +13 -0
  1854. package/dist/daemon/service-runtime.js +1 -0
  1855. package/dist/daemon/service.d.ts +38 -0
  1856. package/dist/daemon/service.js +90 -0
  1857. package/dist/daemon/systemd-hints.d.ts +4 -0
  1858. package/dist/daemon/systemd-hints.js +25 -0
  1859. package/dist/daemon/systemd-linger.d.ts +15 -0
  1860. package/dist/daemon/systemd-linger.js +61 -0
  1861. package/dist/daemon/systemd-unit.d.ts +11 -0
  1862. package/dist/daemon/systemd-unit.js +116 -0
  1863. package/dist/daemon/systemd.d.ts +57 -0
  1864. package/dist/daemon/systemd.js +336 -0
  1865. package/dist/discord/accounts.d.ts +17 -0
  1866. package/dist/discord/accounts.js +56 -0
  1867. package/dist/discord/api.d.ts +11 -0
  1868. package/dist/discord/api.js +99 -0
  1869. package/dist/discord/audit.d.ts +29 -0
  1870. package/dist/discord/audit.js +102 -0
  1871. package/dist/discord/chunk.d.ts +20 -0
  1872. package/dist/discord/chunk.js +217 -0
  1873. package/dist/discord/directory-live.d.ts +4 -0
  1874. package/dist/discord/directory-live.js +83 -0
  1875. package/dist/discord/gateway-logging.d.ts +8 -0
  1876. package/dist/discord/gateway-logging.js +51 -0
  1877. package/dist/discord/index.d.ts +2 -0
  1878. package/dist/discord/index.js +2 -0
  1879. package/dist/discord/monitor/allow-list.d.ts +126 -0
  1880. package/dist/discord/monitor/allow-list.js +258 -0
  1881. package/dist/discord/monitor/exec-approvals.d.ts +70 -0
  1882. package/dist/discord/monitor/exec-approvals.js +421 -0
  1883. package/dist/discord/monitor/format.d.ts +13 -0
  1884. package/dist/discord/monitor/format.js +30 -0
  1885. package/dist/discord/monitor/listeners.d.ts +49 -0
  1886. package/dist/discord/monitor/listeners.js +249 -0
  1887. package/dist/discord/monitor/message-handler.d.ts +26 -0
  1888. package/dist/discord/monitor/message-handler.js +109 -0
  1889. package/dist/discord/monitor/message-handler.preflight.d.ts +3 -0
  1890. package/dist/discord/monitor/message-handler.preflight.js +441 -0
  1891. package/dist/discord/monitor/message-handler.preflight.types.d.ts +83 -0
  1892. package/dist/discord/monitor/message-handler.preflight.types.js +1 -0
  1893. package/dist/discord/monitor/message-handler.process.d.ts +2 -0
  1894. package/dist/discord/monitor/message-handler.process.js +344 -0
  1895. package/dist/discord/monitor/message-utils.d.ts +31 -0
  1896. package/dist/discord/monitor/message-utils.js +208 -0
  1897. package/dist/discord/monitor/native-command.d.ts +20 -0
  1898. package/dist/discord/monitor/native-command.js +723 -0
  1899. package/dist/discord/monitor/presence-cache.d.ts +9 -0
  1900. package/dist/discord/monitor/presence-cache.js +38 -0
  1901. package/dist/discord/monitor/provider.d.ts +13 -0
  1902. package/dist/discord/monitor/provider.js +572 -0
  1903. package/dist/discord/monitor/reply-context.d.ts +13 -0
  1904. package/dist/discord/monitor/reply-context.js +31 -0
  1905. package/dist/discord/monitor/reply-delivery.d.ts +18 -0
  1906. package/dist/discord/monitor/reply-delivery.js +61 -0
  1907. package/dist/discord/monitor/system-events.d.ts +2 -0
  1908. package/dist/discord/monitor/system-events.js +53 -0
  1909. package/dist/discord/monitor/threading.d.ts +101 -0
  1910. package/dist/discord/monitor/threading.js +217 -0
  1911. package/dist/discord/monitor/typing.d.ts +5 -0
  1912. package/dist/discord/monitor/typing.js +9 -0
  1913. package/dist/discord/monitor.d.ts +10 -0
  1914. package/dist/discord/monitor.gateway.d.ts +12 -0
  1915. package/dist/discord/monitor.gateway.js +56 -0
  1916. package/dist/discord/monitor.js +7 -0
  1917. package/dist/discord/probe.d.ts +29 -0
  1918. package/dist/discord/probe.js +130 -0
  1919. package/dist/discord/resolve-channels.d.ts +15 -0
  1920. package/dist/discord/resolve-channels.js +245 -0
  1921. package/dist/discord/resolve-users.d.ts +14 -0
  1922. package/dist/discord/resolve-users.js +123 -0
  1923. package/dist/discord/send.channels.d.ts +17 -0
  1924. package/dist/discord/send.channels.js +87 -0
  1925. package/dist/discord/send.d.ts +8 -0
  1926. package/dist/discord/send.emojis-stickers.d.ts +4 -0
  1927. package/dist/discord/send.emojis-stickers.js +48 -0
  1928. package/dist/discord/send.guild.d.ts +24 -0
  1929. package/dist/discord/send.guild.js +79 -0
  1930. package/dist/discord/send.js +7 -0
  1931. package/dist/discord/send.messages.d.ts +18 -0
  1932. package/dist/discord/send.messages.js +97 -0
  1933. package/dist/discord/send.outbound.d.ts +22 -0
  1934. package/dist/discord/send.outbound.js +87 -0
  1935. package/dist/discord/send.permissions.d.ts +4 -0
  1936. package/dist/discord/send.permissions.js +119 -0
  1937. package/dist/discord/send.reactions.d.ts +15 -0
  1938. package/dist/discord/send.reactions.js +75 -0
  1939. package/dist/discord/send.shared.d.ts +69 -0
  1940. package/dist/discord/send.shared.js +288 -0
  1941. package/dist/discord/send.types.d.ts +130 -0
  1942. package/dist/discord/send.types.js +17 -0
  1943. package/dist/discord/targets.d.ts +18 -0
  1944. package/dist/discord/targets.js +124 -0
  1945. package/dist/discord/token.d.ts +11 -0
  1946. package/dist/discord/token.js +34 -0
  1947. package/dist/entry.js +136 -0
  1948. package/dist/gateway/assistant-identity.d.ts +12 -0
  1949. package/dist/gateway/assistant-identity.js +73 -0
  1950. package/dist/gateway/auth.d.ts +36 -0
  1951. package/dist/gateway/auth.js +214 -0
  1952. package/dist/gateway/boot.d.ts +16 -0
  1953. package/dist/gateway/boot.js +74 -0
  1954. package/dist/gateway/call.d.ts +40 -0
  1955. package/dist/gateway/call.js +188 -0
  1956. package/dist/gateway/chat-abort.d.ts +44 -0
  1957. package/dist/gateway/chat-abort.js +60 -0
  1958. package/dist/gateway/chat-attachments.d.ts +35 -0
  1959. package/dist/gateway/chat-attachments.js +140 -0
  1960. package/dist/gateway/chat-sanitize.d.ts +3 -0
  1961. package/dist/gateway/chat-sanitize.js +115 -0
  1962. package/dist/gateway/client.d.ts +61 -0
  1963. package/dist/gateway/client.js +356 -0
  1964. package/dist/gateway/config-reload.d.ts +38 -0
  1965. package/dist/gateway/config-reload.js +305 -0
  1966. package/dist/gateway/control-ui-shared.d.ts +9 -0
  1967. package/dist/gateway/control-ui-shared.js +58 -0
  1968. package/dist/gateway/control-ui.d.ts +25 -0
  1969. package/dist/gateway/control-ui.js +270 -0
  1970. package/dist/gateway/device-auth.d.ts +12 -0
  1971. package/dist/gateway/device-auth.js +19 -0
  1972. package/dist/gateway/exec-approval-manager.d.ts +27 -0
  1973. package/dist/gateway/exec-approval-manager.js +41 -0
  1974. package/dist/gateway/hooks-mapping.d.ts +62 -0
  1975. package/dist/gateway/hooks-mapping.js +313 -0
  1976. package/dist/gateway/hooks.d.ts +59 -0
  1977. package/dist/gateway/hooks.js +182 -0
  1978. package/dist/gateway/http-common.d.ts +9 -0
  1979. package/dist/gateway/http-common.js +43 -0
  1980. package/dist/gateway/http-utils.d.ts +15 -0
  1981. package/dist/gateway/http-utils.js +59 -0
  1982. package/dist/gateway/live-image-probe.d.ts +1 -0
  1983. package/dist/gateway/live-image-probe.js +161 -0
  1984. package/dist/gateway/net.d.ts +35 -0
  1985. package/dist/gateway/net.js +204 -0
  1986. package/dist/gateway/node-command-policy.d.ts +13 -0
  1987. package/dist/gateway/node-command-policy.js +119 -0
  1988. package/dist/gateway/node-registry.d.ts +60 -0
  1989. package/dist/gateway/node-registry.js +147 -0
  1990. package/dist/gateway/open-responses.schema.d.ts +765 -0
  1991. package/dist/gateway/open-responses.schema.js +285 -0
  1992. package/dist/gateway/openai-http.d.ts +9 -0
  1993. package/dist/gateway/openai-http.js +343 -0
  1994. package/dist/gateway/openresponses-http.d.ts +23 -0
  1995. package/dist/gateway/openresponses-http.js +711 -0
  1996. package/dist/gateway/probe.d.ts +26 -0
  1997. package/dist/gateway/probe.js +89 -0
  1998. package/dist/gateway/protocol/client-info.d.ts +53 -0
  1999. package/dist/gateway/protocol/client-info.js +48 -0
  2000. package/dist/gateway/protocol/index.d.ts +607 -0
  2001. package/dist/gateway/protocol/index.js +110 -0
  2002. package/dist/gateway/protocol/schema/agent.d.ts +71 -0
  2003. package/dist/gateway/protocol/schema/agent.js +73 -0
  2004. package/dist/gateway/protocol/schema/agents-models-skills.d.ts +61 -0
  2005. package/dist/gateway/protocol/schema/agents-models-skills.js +47 -0
  2006. package/dist/gateway/protocol/schema/channels.d.ts +105 -0
  2007. package/dist/gateway/protocol/schema/channels.js +74 -0
  2008. package/dist/gateway/protocol/schema/config.d.ts +51 -0
  2009. package/dist/gateway/protocol/schema/config.js +44 -0
  2010. package/dist/gateway/protocol/schema/cron.d.ts +327 -0
  2011. package/dist/gateway/protocol/schema/cron.js +159 -0
  2012. package/dist/gateway/protocol/schema/devices.d.ts +38 -0
  2013. package/dist/gateway/protocol/schema/devices.js +36 -0
  2014. package/dist/gateway/protocol/schema/error-codes.d.ts +14 -0
  2015. package/dist/gateway/protocol/schema/error-codes.js +14 -0
  2016. package/dist/gateway/protocol/schema/exec-approvals.d.ts +162 -0
  2017. package/dist/gateway/protocol/schema/exec-approvals.js +66 -0
  2018. package/dist/gateway/protocol/schema/frames.d.ts +163 -0
  2019. package/dist/gateway/protocol/schema/frames.js +101 -0
  2020. package/dist/gateway/protocol/schema/logs-chat.d.ts +45 -0
  2021. package/dist/gateway/protocol/schema/logs-chat.js +53 -0
  2022. package/dist/gateway/protocol/schema/nodes.d.ts +64 -0
  2023. package/dist/gateway/protocol/schema/nodes.js +54 -0
  2024. package/dist/gateway/protocol/schema/primitives.d.ts +4 -0
  2025. package/dist/gateway/protocol/schema/primitives.js +10 -0
  2026. package/dist/gateway/protocol/schema/protocol-schemas.d.ts +3 -0
  2027. package/dist/gateway/protocol/schema/protocol-schemas.js +117 -0
  2028. package/dist/gateway/protocol/schema/sessions.d.ts +62 -0
  2029. package/dist/gateway/protocol/schema/sessions.js +69 -0
  2030. package/dist/gateway/protocol/schema/snapshot.d.ts +63 -0
  2031. package/dist/gateway/protocol/schema/snapshot.js +40 -0
  2032. package/dist/gateway/protocol/schema/types.d.ts +108 -0
  2033. package/dist/gateway/protocol/schema/types.js +1 -0
  2034. package/dist/gateway/protocol/schema/wizard.d.ts +86 -0
  2035. package/dist/gateway/protocol/schema/wizard.js +76 -0
  2036. package/dist/gateway/protocol/schema.d.ts +16 -0
  2037. package/dist/gateway/protocol/schema.js +16 -0
  2038. package/dist/gateway/server/__tests__/test-utils.d.ts +2 -0
  2039. package/dist/gateway/server/__tests__/test-utils.js +24 -0
  2040. package/dist/gateway/server/close-reason.d.ts +1 -0
  2041. package/dist/gateway/server/close-reason.js +12 -0
  2042. package/dist/gateway/server/health-state.d.ts +11 -0
  2043. package/dist/gateway/server/health-state.js +69 -0
  2044. package/dist/gateway/server/hooks.d.ts +12 -0
  2045. package/dist/gateway/server/hooks.js +85 -0
  2046. package/dist/gateway/server/http-listen.d.ts +6 -0
  2047. package/dist/gateway/server/http-listen.js +26 -0
  2048. package/dist/gateway/server/plugins-http.d.ts +10 -0
  2049. package/dist/gateway/server/plugins-http.js +47 -0
  2050. package/dist/gateway/server/tls.d.ts +7 -0
  2051. package/dist/gateway/server/tls.js +4 -0
  2052. package/dist/gateway/server/ws-connection/message-handler.d.ts +42 -0
  2053. package/dist/gateway/server/ws-connection/message-handler.js +780 -0
  2054. package/dist/gateway/server/ws-connection.d.ts +30 -0
  2055. package/dist/gateway/server/ws-connection.js +194 -0
  2056. package/dist/gateway/server/ws-types.d.ts +8 -0
  2057. package/dist/gateway/server/ws-types.js +1 -0
  2058. package/dist/gateway/server-broadcast.d.ts +12 -0
  2059. package/dist/gateway/server-broadcast.js +78 -0
  2060. package/dist/gateway/server-browser.d.ts +4 -0
  2061. package/dist/gateway/server-browser.js +24 -0
  2062. package/dist/gateway/server-channels.d.ts +24 -0
  2063. package/dist/gateway/server-channels.js +249 -0
  2064. package/dist/gateway/server-chat.d.ts +34 -0
  2065. package/dist/gateway/server-chat.js +231 -0
  2066. package/dist/gateway/server-close.d.ts +47 -0
  2067. package/dist/gateway/server-close.js +99 -0
  2068. package/dist/gateway/server-constants.d.ts +10 -0
  2069. package/dist/gateway/server-constants.js +31 -0
  2070. package/dist/gateway/server-cron.d.ts +15 -0
  2071. package/dist/gateway/server-cron.js +84 -0
  2072. package/dist/gateway/server-discovery-runtime.d.ts +20 -0
  2073. package/dist/gateway/server-discovery-runtime.js +77 -0
  2074. package/dist/gateway/server-discovery.d.ts +16 -0
  2075. package/dist/gateway/server-discovery.js +70 -0
  2076. package/dist/gateway/server-http.d.ts +51 -0
  2077. package/dist/gateway/server-http.js +237 -0
  2078. package/dist/gateway/server-lanes.d.ts +2 -0
  2079. package/dist/gateway/server-lanes.js +7 -0
  2080. package/dist/gateway/server-maintenance.d.ts +36 -0
  2081. package/dist/gateway/server-maintenance.js +71 -0
  2082. package/dist/gateway/server-methods/agent-job.d.ts +13 -0
  2083. package/dist/gateway/server-methods/agent-job.js +112 -0
  2084. package/dist/gateway/server-methods/agent-timestamp.d.ts +27 -0
  2085. package/dist/gateway/server-methods/agent-timestamp.js +62 -0
  2086. package/dist/gateway/server-methods/agent.d.ts +2 -0
  2087. package/dist/gateway/server-methods/agent.js +366 -0
  2088. package/dist/gateway/server-methods/agents.d.ts +2 -0
  2089. package/dist/gateway/server-methods/agents.js +14 -0
  2090. package/dist/gateway/server-methods/browser.d.ts +2 -0
  2091. package/dist/gateway/server-methods/browser.js +216 -0
  2092. package/dist/gateway/server-methods/channels.d.ts +19 -0
  2093. package/dist/gateway/server-methods/channels.js +220 -0
  2094. package/dist/gateway/server-methods/chat.d.ts +2 -0
  2095. package/dist/gateway/server-methods/chat.js +530 -0
  2096. package/dist/gateway/server-methods/config.d.ts +2 -0
  2097. package/dist/gateway/server-methods/config.js +271 -0
  2098. package/dist/gateway/server-methods/connect.d.ts +2 -0
  2099. package/dist/gateway/server-methods/connect.js +6 -0
  2100. package/dist/gateway/server-methods/cron.d.ts +2 -0
  2101. package/dist/gateway/server-methods/cron.js +109 -0
  2102. package/dist/gateway/server-methods/devices.d.ts +2 -0
  2103. package/dist/gateway/server-methods/devices.js +95 -0
  2104. package/dist/gateway/server-methods/exec-approval.d.ts +6 -0
  2105. package/dist/gateway/server-methods/exec-approval.js +78 -0
  2106. package/dist/gateway/server-methods/exec-approvals.d.ts +2 -0
  2107. package/dist/gateway/server-methods/exec-approvals.js +143 -0
  2108. package/dist/gateway/server-methods/health.d.ts +2 -0
  2109. package/dist/gateway/server-methods/health.js +29 -0
  2110. package/dist/gateway/server-methods/logs.d.ts +2 -0
  2111. package/dist/gateway/server-methods/logs.js +146 -0
  2112. package/dist/gateway/server-methods/models.d.ts +2 -0
  2113. package/dist/gateway/server-methods/models.js +16 -0
  2114. package/dist/gateway/server-methods/nodes.d.ts +2 -0
  2115. package/dist/gateway/server-methods/nodes.helpers.d.ts +14 -0
  2116. package/dist/gateway/server-methods/nodes.helpers.js +34 -0
  2117. package/dist/gateway/server-methods/nodes.js +432 -0
  2118. package/dist/gateway/server-methods/send.d.ts +2 -0
  2119. package/dist/gateway/server-methods/send.js +287 -0
  2120. package/dist/gateway/server-methods/sessions.d.ts +2 -0
  2121. package/dist/gateway/server-methods/sessions.js +326 -0
  2122. package/dist/gateway/server-methods/skills.d.ts +2 -0
  2123. package/dist/gateway/server-methods/skills.js +146 -0
  2124. package/dist/gateway/server-methods/system.d.ts +2 -0
  2125. package/dist/gateway/server-methods/system.js +122 -0
  2126. package/dist/gateway/server-methods/talk.d.ts +2 -0
  2127. package/dist/gateway/server-methods/talk.js +20 -0
  2128. package/dist/gateway/server-methods/tts.d.ts +2 -0
  2129. package/dist/gateway/server-methods/tts.js +132 -0
  2130. package/dist/gateway/server-methods/types.d.ts +87 -0
  2131. package/dist/gateway/server-methods/types.js +1 -0
  2132. package/dist/gateway/server-methods/update.d.ts +2 -0
  2133. package/dist/gateway/server-methods/update.js +96 -0
  2134. package/dist/gateway/server-methods/usage.d.ts +2 -0
  2135. package/dist/gateway/server-methods/usage.js +68 -0
  2136. package/dist/gateway/server-methods/voicewake.d.ts +2 -0
  2137. package/dist/gateway/server-methods/voicewake.js +30 -0
  2138. package/dist/gateway/server-methods/web.d.ts +2 -0
  2139. package/dist/gateway/server-methods/web.js +73 -0
  2140. package/dist/gateway/server-methods/wizard.d.ts +2 -0
  2141. package/dist/gateway/server-methods/wizard.js +100 -0
  2142. package/dist/gateway/server-methods-list.d.ts +2 -0
  2143. package/dist/gateway/server-methods-list.js +108 -0
  2144. package/dist/gateway/server-methods.d.ts +5 -0
  2145. package/dist/gateway/server-methods.js +202 -0
  2146. package/dist/gateway/server-mobile-nodes.d.ts +2 -0
  2147. package/dist/gateway/server-mobile-nodes.js +11 -0
  2148. package/dist/gateway/server-model-catalog.d.ts +4 -0
  2149. package/dist/gateway/server-model-catalog.js +11 -0
  2150. package/dist/gateway/server-node-events-types.d.ts +36 -0
  2151. package/dist/gateway/server-node-events-types.js +1 -0
  2152. package/dist/gateway/server-node-events.d.ts +2 -0
  2153. package/dist/gateway/server-node-events.js +221 -0
  2154. package/dist/gateway/server-node-subscriptions.d.ts +18 -0
  2155. package/dist/gateway/server-node-subscriptions.js +104 -0
  2156. package/dist/gateway/server-plugins.d.ts +17 -0
  2157. package/dist/gateway/server-plugins.js +36 -0
  2158. package/dist/gateway/server-reload-handlers.d.ts +46 -0
  2159. package/dist/gateway/server-reload-handlers.js +112 -0
  2160. package/dist/gateway/server-restart-sentinel.d.ts +5 -0
  2161. package/dist/gateway/server-restart-sentinel.js +85 -0
  2162. package/dist/gateway/server-runtime-config.d.ts +28 -0
  2163. package/dist/gateway/server-runtime-config.js +66 -0
  2164. package/dist/gateway/server-runtime-state.d.ts +64 -0
  2165. package/dist/gateway/server-runtime-state.js +114 -0
  2166. package/dist/gateway/server-session-key.d.ts +1 -0
  2167. package/dist/gateway/server-session-key.js +21 -0
  2168. package/dist/gateway/server-shared.d.ts +7 -0
  2169. package/dist/gateway/server-shared.js +1 -0
  2170. package/dist/gateway/server-startup-log.d.ts +12 -0
  2171. package/dist/gateway/server-startup-log.js +27 -0
  2172. package/dist/gateway/server-startup.d.ts +29 -0
  2173. package/dist/gateway/server-startup.js +119 -0
  2174. package/dist/gateway/server-tailscale.d.ts +10 -0
  2175. package/dist/gateway/server-tailscale.js +41 -0
  2176. package/dist/gateway/server-utils.d.ts +2 -0
  2177. package/dist/gateway/server-utils.js +37 -0
  2178. package/dist/gateway/server-wizard-sessions.d.ts +6 -0
  2179. package/dist/gateway/server-wizard-sessions.js +22 -0
  2180. package/dist/gateway/server-ws-runtime.d.ts +28 -0
  2181. package/dist/gateway/server-ws-runtime.js +20 -0
  2182. package/dist/gateway/server.d.ts +3 -0
  2183. package/dist/gateway/server.impl.d.ts +54 -0
  2184. package/dist/gateway/server.impl.js +439 -0
  2185. package/dist/gateway/server.js +2 -0
  2186. package/dist/gateway/session-utils.d.ts +53 -0
  2187. package/dist/gateway/session-utils.fs.d.ts +11 -0
  2188. package/dist/gateway/session-utils.fs.js +377 -0
  2189. package/dist/gateway/session-utils.js +569 -0
  2190. package/dist/gateway/session-utils.types.d.ts +79 -0
  2191. package/dist/gateway/session-utils.types.js +1 -0
  2192. package/dist/gateway/sessions-patch.d.ts +17 -0
  2193. package/dist/gateway/sessions-patch.js +317 -0
  2194. package/dist/gateway/sessions-resolve.d.ts +13 -0
  2195. package/dist/gateway/sessions-resolve.js +103 -0
  2196. package/dist/gateway/test-helpers.e2e.d.ts +22 -0
  2197. package/dist/gateway/test-helpers.e2e.js +105 -0
  2198. package/dist/gateway/test-helpers.mocks.d.ts +62 -0
  2199. package/dist/gateway/test-helpers.mocks.js +516 -0
  2200. package/dist/gateway/test-helpers.openai-mock.d.ts +6 -0
  2201. package/dist/gateway/test-helpers.openai-mock.js +170 -0
  2202. package/dist/gateway/test-helpers.server.d.ts +79 -0
  2203. package/dist/gateway/test-helpers.server.js +390 -0
  2204. package/dist/gateway/tools-invoke-http.d.ts +7 -0
  2205. package/dist/gateway/tools-invoke-http.js +230 -0
  2206. package/dist/gateway/ws-log.d.ts +4 -0
  2207. package/dist/gateway/ws-log.js +379 -0
  2208. package/dist/gateway/ws-logging.d.ts +4 -0
  2209. package/dist/gateway/ws-logging.js +8 -0
  2210. package/dist/globals.js +44 -0
  2211. package/dist/hooks/bundled/boot-md/HOOK.md +19 -0
  2212. package/dist/hooks/bundled/boot-md/handler.d.ts +3 -0
  2213. package/dist/hooks/bundled/boot-md/handler.js +14 -0
  2214. package/dist/hooks/bundled/command-logger/HOOK.md +122 -0
  2215. package/dist/hooks/bundled/command-logger/handler.d.ts +30 -0
  2216. package/dist/hooks/bundled/command-logger/handler.js +56 -0
  2217. package/dist/hooks/bundled/session-memory/HOOK.md +109 -0
  2218. package/dist/hooks/bundled/session-memory/handler.d.ts +12 -0
  2219. package/dist/hooks/bundled/session-memory/handler.js +147 -0
  2220. package/dist/hooks/bundled/soul-evil/HOOK.md +71 -0
  2221. package/dist/hooks/bundled/soul-evil/handler.d.ts +3 -0
  2222. package/dist/hooks/bundled/soul-evil/handler.js +41 -0
  2223. package/dist/hooks/bundled-dir.d.ts +1 -0
  2224. package/dist/hooks/bundled-dir.js +46 -0
  2225. package/dist/hooks/config.d.ts +12 -0
  2226. package/dist/hooks/config.js +137 -0
  2227. package/dist/hooks/frontmatter.d.ts +5 -0
  2228. package/dist/hooks/frontmatter.js +124 -0
  2229. package/dist/hooks/gmail-ops.d.ts +41 -0
  2230. package/dist/hooks/gmail-ops.js +247 -0
  2231. package/dist/hooks/gmail-setup-utils.d.ts +15 -0
  2232. package/dist/hooks/gmail-setup-utils.js +333 -0
  2233. package/dist/hooks/gmail-watcher.d.ts +25 -0
  2234. package/dist/hooks/gmail-watcher.js +196 -0
  2235. package/dist/hooks/gmail.d.ts +69 -0
  2236. package/dist/hooks/gmail.js +182 -0
  2237. package/dist/hooks/hooks-status.d.ts +57 -0
  2238. package/dist/hooks/hooks-status.js +140 -0
  2239. package/dist/hooks/hooks.d.ts +5 -0
  2240. package/dist/hooks/hooks.js +2 -0
  2241. package/dist/hooks/install.d.ts +42 -0
  2242. package/dist/hooks/install.js +331 -0
  2243. package/dist/hooks/installs.d.ts +6 -0
  2244. package/dist/hooks/installs.js +24 -0
  2245. package/dist/hooks/internal-hooks.d.ts +95 -0
  2246. package/dist/hooks/internal-hooks.js +124 -0
  2247. package/dist/hooks/llm-slug-generator.d.ts +11 -0
  2248. package/dist/hooks/llm-slug-generator.js +70 -0
  2249. package/dist/hooks/loader.d.ts +27 -0
  2250. package/dist/hooks/loader.js +110 -0
  2251. package/dist/hooks/plugin-hooks.d.ts +9 -0
  2252. package/dist/hooks/plugin-hooks.js +92 -0
  2253. package/dist/hooks/soul-evil.d.ts +42 -0
  2254. package/dist/hooks/soul-evil.js +202 -0
  2255. package/dist/hooks/types.d.ts +62 -0
  2256. package/dist/hooks/types.js +1 -0
  2257. package/dist/hooks/workspace.d.ts +20 -0
  2258. package/dist/hooks/workspace.js +219 -0
  2259. package/dist/imessage/accounts.d.ts +16 -0
  2260. package/dist/imessage/accounts.js +65 -0
  2261. package/dist/imessage/client.d.ts +46 -0
  2262. package/dist/imessage/client.js +184 -0
  2263. package/dist/imessage/index.d.ts +3 -0
  2264. package/dist/imessage/index.js +3 -0
  2265. package/dist/imessage/monitor/deliver.d.ts +12 -0
  2266. package/dist/imessage/monitor/deliver.js +46 -0
  2267. package/dist/imessage/monitor/monitor-provider.d.ts +2 -0
  2268. package/dist/imessage/monitor/monitor-provider.js +608 -0
  2269. package/dist/imessage/monitor/runtime.d.ts +4 -0
  2270. package/dist/imessage/monitor/runtime.js +12 -0
  2271. package/dist/imessage/monitor/types.d.ts +37 -0
  2272. package/dist/imessage/monitor/types.js +1 -0
  2273. package/dist/imessage/monitor.d.ts +2 -0
  2274. package/dist/imessage/monitor.js +1 -0
  2275. package/dist/imessage/probe.d.ts +12 -0
  2276. package/dist/imessage/probe.js +69 -0
  2277. package/dist/imessage/send.d.ts +18 -0
  2278. package/dist/imessage/send.js +104 -0
  2279. package/dist/imessage/targets.d.ts +39 -0
  2280. package/dist/imessage/targets.js +195 -0
  2281. package/dist/index.js +49 -0
  2282. package/dist/infra/agent-events.d.ts +21 -0
  2283. package/dist/infra/agent-events.js +58 -0
  2284. package/dist/infra/archive.d.ts +16 -0
  2285. package/dist/infra/archive.js +101 -0
  2286. package/dist/infra/backoff.d.ts +8 -0
  2287. package/dist/infra/backoff.js +20 -0
  2288. package/dist/infra/binaries.d.ts +3 -0
  2289. package/dist/infra/binaries.js +9 -0
  2290. package/dist/infra/bonjour-ciao.d.ts +1 -0
  2291. package/dist/infra/bonjour-ciao.js +10 -0
  2292. package/dist/infra/bonjour-discovery.d.ts +26 -0
  2293. package/dist/infra/bonjour-discovery.js +506 -0
  2294. package/dist/infra/bonjour-errors.d.ts +1 -0
  2295. package/dist/infra/bonjour-errors.js +7 -0
  2296. package/dist/infra/bonjour.d.ts +19 -0
  2297. package/dist/infra/bonjour.js +216 -0
  2298. package/dist/infra/brew.d.ts +8 -0
  2299. package/dist/infra/brew.js +59 -0
  2300. package/dist/infra/canvas-host-url.d.ts +11 -0
  2301. package/dist/infra/canvas-host-url.js +63 -0
  2302. package/dist/infra/channel-activity.d.ts +18 -0
  2303. package/dist/infra/channel-activity.js +35 -0
  2304. package/dist/infra/channel-summary.d.ts +7 -0
  2305. package/dist/infra/channel-summary.js +196 -0
  2306. package/dist/infra/channels-status-issues.d.ts +2 -0
  2307. package/dist/infra/channels-status-issues.js +17 -0
  2308. package/dist/infra/clipboard.d.ts +1 -0
  2309. package/dist/infra/clipboard.js +25 -0
  2310. package/dist/infra/control-ui-assets.d.ts +11 -0
  2311. package/dist/infra/control-ui-assets.js +111 -0
  2312. package/dist/infra/dedupe.d.ts +11 -0
  2313. package/dist/infra/dedupe.js +49 -0
  2314. package/dist/infra/device-auth-store.d.ts +23 -0
  2315. package/dist/infra/device-auth-store.js +107 -0
  2316. package/dist/infra/device-identity.d.ts +11 -0
  2317. package/dist/infra/device-identity.js +149 -0
  2318. package/dist/infra/device-pairing.d.ts +96 -0
  2319. package/dist/infra/device-pairing.js +428 -0
  2320. package/dist/infra/diagnostic-events.d.ts +121 -0
  2321. package/dist/infra/diagnostic-events.js +28 -0
  2322. package/dist/infra/diagnostic-flags.d.ts +4 -0
  2323. package/dist/infra/diagnostic-flags.js +77 -0
  2324. package/dist/infra/dotenv.d.ts +3 -0
  2325. package/dist/infra/dotenv.js +16 -0
  2326. package/dist/infra/env-file.d.ts +9 -0
  2327. package/dist/infra/env-file.js +45 -0
  2328. package/dist/infra/env.d.ts +11 -0
  2329. package/dist/infra/env.js +39 -0
  2330. package/dist/infra/errors.d.ts +3 -0
  2331. package/dist/infra/errors.js +39 -0
  2332. package/dist/infra/exec-approval-forwarder.d.ts +44 -0
  2333. package/dist/infra/exec-approval-forwarder.js +238 -0
  2334. package/dist/infra/exec-approvals.d.ts +153 -0
  2335. package/dist/infra/exec-approvals.js +1095 -0
  2336. package/dist/infra/exec-host.d.ts +37 -0
  2337. package/dist/infra/exec-host.js +78 -0
  2338. package/dist/infra/exec-safety.d.ts +1 -0
  2339. package/dist/infra/exec-safety.js +41 -0
  2340. package/dist/infra/fetch.d.ts +2 -0
  2341. package/dist/infra/fetch.js +62 -0
  2342. package/dist/infra/format-duration.d.ts +10 -0
  2343. package/dist/infra/format-duration.js +23 -0
  2344. package/dist/infra/fs-safe.d.ts +16 -0
  2345. package/dist/infra/fs-safe.js +77 -0
  2346. package/dist/infra/gateway-lock.d.ts +18 -0
  2347. package/dist/infra/gateway-lock.js +211 -0
  2348. package/dist/infra/git-commit.d.ts +4 -0
  2349. package/dist/infra/git-commit.js +110 -0
  2350. package/dist/infra/heartbeat-events.d.ts +20 -0
  2351. package/dist/infra/heartbeat-events.js +34 -0
  2352. package/dist/infra/heartbeat-runner.d.ts +44 -0
  2353. package/dist/infra/heartbeat-runner.js +776 -0
  2354. package/dist/infra/heartbeat-visibility.d.ts +17 -0
  2355. package/dist/infra/heartbeat-visibility.js +45 -0
  2356. package/dist/infra/heartbeat-wake.d.ts +20 -0
  2357. package/dist/infra/heartbeat-wake.js +64 -0
  2358. package/dist/infra/is-main.d.ts +8 -0
  2359. package/dist/infra/is-main.js +34 -0
  2360. package/dist/infra/json-file.d.ts +2 -0
  2361. package/dist/infra/json-file.js +22 -0
  2362. package/dist/infra/machine-name.d.ts +1 -0
  2363. package/dist/infra/machine-name.js +46 -0
  2364. package/dist/infra/net/ssrf.d.ts +24 -0
  2365. package/dist/infra/net/ssrf.js +218 -0
  2366. package/dist/infra/node-pairing.d.ts +62 -0
  2367. package/dist/infra/node-pairing.js +234 -0
  2368. package/dist/infra/node-shell.d.ts +1 -0
  2369. package/dist/infra/node-shell.js +9 -0
  2370. package/dist/infra/openclaw-root.d.ts +5 -0
  2371. package/dist/infra/openclaw-root.js +60 -0
  2372. package/dist/infra/os-summary.d.ts +7 -0
  2373. package/dist/infra/os-summary.js +25 -0
  2374. package/dist/infra/outbound/agent-delivery.d.ts +32 -0
  2375. package/dist/infra/outbound/agent-delivery.js +88 -0
  2376. package/dist/infra/outbound/channel-adapters.d.ts +6 -0
  2377. package/dist/infra/outbound/channel-adapters.js +17 -0
  2378. package/dist/infra/outbound/channel-selection.d.ts +11 -0
  2379. package/dist/infra/outbound/channel-selection.js +68 -0
  2380. package/dist/infra/outbound/channel-target.d.ts +6 -0
  2381. package/dist/infra/outbound/channel-target.js +29 -0
  2382. package/dist/infra/outbound/deliver.d.ts +69 -0
  2383. package/dist/infra/outbound/deliver.js +257 -0
  2384. package/dist/infra/outbound/directory-cache.d.ts +21 -0
  2385. package/dist/infra/outbound/directory-cache.js +47 -0
  2386. package/dist/infra/outbound/envelope.d.ts +16 -0
  2387. package/dist/infra/outbound/envelope.js +20 -0
  2388. package/dist/infra/outbound/format.d.ts +39 -0
  2389. package/dist/infra/outbound/format.js +72 -0
  2390. package/dist/infra/outbound/message-action-runner.d.ts +73 -0
  2391. package/dist/infra/outbound/message-action-runner.js +793 -0
  2392. package/dist/infra/outbound/message-action-spec.d.ts +5 -0
  2393. package/dist/infra/outbound/message-action-spec.js +88 -0
  2394. package/dist/infra/outbound/message.d.ts +76 -0
  2395. package/dist/infra/outbound/message.js +190 -0
  2396. package/dist/infra/outbound/outbound-policy.d.ts +31 -0
  2397. package/dist/infra/outbound/outbound-policy.js +138 -0
  2398. package/dist/infra/outbound/outbound-send-service.d.ts +58 -0
  2399. package/dist/infra/outbound/outbound-send-service.js +124 -0
  2400. package/dist/infra/outbound/outbound-session.d.ts +31 -0
  2401. package/dist/infra/outbound/outbound-session.js +798 -0
  2402. package/dist/infra/outbound/payloads.d.ts +16 -0
  2403. package/dist/infra/outbound/payloads.js +85 -0
  2404. package/dist/infra/outbound/target-errors.d.ts +6 -0
  2405. package/dist/infra/outbound/target-errors.js +24 -0
  2406. package/dist/infra/outbound/target-normalization.d.ts +4 -0
  2407. package/dist/infra/outbound/target-normalization.js +28 -0
  2408. package/dist/infra/outbound/target-resolver.d.ts +53 -0
  2409. package/dist/infra/outbound/target-resolver.js +379 -0
  2410. package/dist/infra/outbound/targets.d.ts +65 -0
  2411. package/dist/infra/outbound/targets.js +216 -0
  2412. package/dist/infra/path-env.d.ts +13 -0
  2413. package/dist/infra/path-env.js +100 -0
  2414. package/dist/infra/ports-format.d.ts +5 -0
  2415. package/dist/infra/ports-format.js +56 -0
  2416. package/dist/infra/ports-inspect.d.ts +2 -0
  2417. package/dist/infra/ports-inspect.js +268 -0
  2418. package/dist/infra/ports-lsof.d.ts +2 -0
  2419. package/dist/infra/ports-lsof.js +34 -0
  2420. package/dist/infra/ports-types.d.ts +17 -0
  2421. package/dist/infra/ports-types.js +1 -0
  2422. package/dist/infra/ports.d.ts +14 -0
  2423. package/dist/infra/ports.js +78 -0
  2424. package/dist/infra/provider-usage.auth.d.ts +11 -0
  2425. package/dist/infra/provider-usage.auth.js +244 -0
  2426. package/dist/infra/provider-usage.d.ts +4 -0
  2427. package/dist/infra/provider-usage.fetch.antigravity.d.ts +2 -0
  2428. package/dist/infra/provider-usage.fetch.antigravity.js +227 -0
  2429. package/dist/infra/provider-usage.fetch.claude.d.ts +2 -0
  2430. package/dist/infra/provider-usage.fetch.claude.js +137 -0
  2431. package/dist/infra/provider-usage.fetch.codex.d.ts +2 -0
  2432. package/dist/infra/provider-usage.fetch.codex.js +63 -0
  2433. package/dist/infra/provider-usage.fetch.copilot.d.ts +2 -0
  2434. package/dist/infra/provider-usage.fetch.copilot.js +42 -0
  2435. package/dist/infra/provider-usage.fetch.d.ts +7 -0
  2436. package/dist/infra/provider-usage.fetch.gemini.d.ts +2 -0
  2437. package/dist/infra/provider-usage.fetch.gemini.js +62 -0
  2438. package/dist/infra/provider-usage.fetch.js +7 -0
  2439. package/dist/infra/provider-usage.fetch.minimax.d.ts +2 -0
  2440. package/dist/infra/provider-usage.fetch.minimax.js +347 -0
  2441. package/dist/infra/provider-usage.fetch.shared.d.ts +1 -0
  2442. package/dist/infra/provider-usage.fetch.shared.js +10 -0
  2443. package/dist/infra/provider-usage.fetch.zai.d.ts +2 -0
  2444. package/dist/infra/provider-usage.fetch.zai.js +65 -0
  2445. package/dist/infra/provider-usage.format.d.ts +13 -0
  2446. package/dist/infra/provider-usage.format.js +107 -0
  2447. package/dist/infra/provider-usage.js +3 -0
  2448. package/dist/infra/provider-usage.load.d.ts +12 -0
  2449. package/dist/infra/provider-usage.load.js +67 -0
  2450. package/dist/infra/provider-usage.shared.d.ts +8 -0
  2451. package/dist/infra/provider-usage.shared.js +55 -0
  2452. package/dist/infra/provider-usage.types.d.ts +17 -0
  2453. package/dist/infra/provider-usage.types.js +1 -0
  2454. package/dist/infra/restart-sentinel.d.ts +50 -0
  2455. package/dist/infra/restart-sentinel.js +68 -0
  2456. package/dist/infra/restart.d.ts +28 -0
  2457. package/dist/infra/restart.js +179 -0
  2458. package/dist/infra/retry-policy.d.ts +25 -0
  2459. package/dist/infra/retry-policy.js +72 -0
  2460. package/dist/infra/retry.d.ts +21 -0
  2461. package/dist/infra/retry.js +89 -0
  2462. package/dist/infra/runtime-guard.d.ts +20 -0
  2463. package/dist/infra/runtime-guard.js +67 -0
  2464. package/dist/infra/session-cost-usage.d.ts +36 -0
  2465. package/dist/infra/session-cost-usage.js +205 -0
  2466. package/dist/infra/shell-env.d.ts +33 -0
  2467. package/dist/infra/shell-env.js +133 -0
  2468. package/dist/infra/skills-remote.d.ts +24 -0
  2469. package/dist/infra/skills-remote.js +303 -0
  2470. package/dist/infra/ssh-config.d.ts +12 -0
  2471. package/dist/infra/ssh-config.js +89 -0
  2472. package/dist/infra/ssh-tunnel.d.ts +21 -0
  2473. package/dist/infra/ssh-tunnel.js +181 -0
  2474. package/dist/infra/state-migrations.d.ts +87 -0
  2475. package/dist/infra/state-migrations.fs.d.ts +14 -0
  2476. package/dist/infra/state-migrations.fs.js +51 -0
  2477. package/dist/infra/state-migrations.js +702 -0
  2478. package/dist/infra/system-events.d.ts +16 -0
  2479. package/dist/infra/system-events.js +81 -0
  2480. package/dist/infra/system-presence.d.ts +45 -0
  2481. package/dist/infra/system-presence.js +243 -0
  2482. package/dist/infra/tailnet.d.ts +7 -0
  2483. package/dist/infra/tailnet.js +53 -0
  2484. package/dist/infra/tailscale.d.ts +34 -0
  2485. package/dist/infra/tailscale.js +383 -0
  2486. package/dist/infra/tls/fingerprint.d.ts +1 -0
  2487. package/dist/infra/tls/fingerprint.js +5 -0
  2488. package/dist/infra/tls/gateway.d.ts +16 -0
  2489. package/dist/infra/tls/gateway.js +120 -0
  2490. package/dist/infra/transport-ready.d.ts +16 -0
  2491. package/dist/infra/transport-ready.js +42 -0
  2492. package/dist/infra/unhandled-rejections.d.ts +15 -0
  2493. package/dist/infra/unhandled-rejections.js +149 -0
  2494. package/dist/infra/update-channels.d.ts +26 -0
  2495. package/dist/infra/update-channels.js +62 -0
  2496. package/dist/infra/update-check.d.ts +68 -0
  2497. package/dist/infra/update-check.js +304 -0
  2498. package/dist/infra/update-global.d.ts +15 -0
  2499. package/dist/infra/update-global.js +107 -0
  2500. package/dist/infra/update-runner.d.ts +58 -0
  2501. package/dist/infra/update-runner.js +607 -0
  2502. package/dist/infra/update-startup.d.ts +16 -0
  2503. package/dist/infra/update-startup.js +92 -0
  2504. package/dist/infra/voicewake.d.ts +7 -0
  2505. package/dist/infra/voicewake.js +74 -0
  2506. package/dist/infra/warnings.d.ts +1 -0
  2507. package/dist/infra/warnings.js +27 -0
  2508. package/dist/infra/widearea-dns.d.ts +27 -0
  2509. package/dist/infra/widearea-dns.js +152 -0
  2510. package/dist/infra/ws.d.ts +2 -0
  2511. package/dist/infra/ws.js +16 -0
  2512. package/dist/infra/wsl.d.ts +2 -0
  2513. package/dist/infra/wsl.js +26 -0
  2514. package/dist/line/accounts.d.ts +10 -0
  2515. package/dist/line/accounts.js +131 -0
  2516. package/dist/line/auto-reply-delivery.d.ts +49 -0
  2517. package/dist/line/auto-reply-delivery.js +104 -0
  2518. package/dist/line/bot-access.d.ts +15 -0
  2519. package/dist/line/bot-access.js +44 -0
  2520. package/dist/line/bot-handlers.d.ts +13 -0
  2521. package/dist/line/bot-handlers.js +262 -0
  2522. package/dist/line/bot-message-context.d.ts +102 -0
  2523. package/dist/line/bot-message-context.js +375 -0
  2524. package/dist/line/bot.d.ts +24 -0
  2525. package/dist/line/bot.js +48 -0
  2526. package/dist/line/config-schema.d.ts +62 -0
  2527. package/dist/line/config-schema.js +47 -0
  2528. package/dist/line/download.d.ts +7 -0
  2529. package/dist/line/download.js +95 -0
  2530. package/dist/line/flex-templates.d.ts +195 -0
  2531. package/dist/line/flex-templates.js +1266 -0
  2532. package/dist/line/http-registry.d.ts +12 -0
  2533. package/dist/line/http-registry.js +29 -0
  2534. package/dist/line/index.d.ts +16 -0
  2535. package/dist/line/index.js +19 -0
  2536. package/dist/line/markdown-to-line.d.ts +72 -0
  2537. package/dist/line/markdown-to-line.js +355 -0
  2538. package/dist/line/monitor.d.ts +28 -0
  2539. package/dist/line/monitor.js +269 -0
  2540. package/dist/line/probe.d.ts +2 -0
  2541. package/dist/line/probe.js +39 -0
  2542. package/dist/line/reply-chunks.d.ts +24 -0
  2543. package/dist/line/reply-chunks.js +53 -0
  2544. package/dist/line/rich-menu.d.ts +126 -0
  2545. package/dist/line/rich-menu.js +321 -0
  2546. package/dist/line/send.d.ts +118 -0
  2547. package/dist/line/send.js +455 -0
  2548. package/dist/line/signature.d.ts +1 -0
  2549. package/dist/line/signature.js +11 -0
  2550. package/dist/line/template-messages.d.ts +119 -0
  2551. package/dist/line/template-messages.js +258 -0
  2552. package/dist/line/types.d.ts +121 -0
  2553. package/dist/line/types.js +1 -0
  2554. package/dist/line/webhook.d.ts +19 -0
  2555. package/dist/line/webhook.js +72 -0
  2556. package/dist/link-understanding/apply.d.ts +10 -0
  2557. package/dist/link-understanding/apply.js +22 -0
  2558. package/dist/link-understanding/defaults.d.ts +2 -0
  2559. package/dist/link-understanding/defaults.js +2 -0
  2560. package/dist/link-understanding/detect.d.ts +3 -0
  2561. package/dist/link-understanding/detect.js +56 -0
  2562. package/dist/link-understanding/format.d.ts +4 -0
  2563. package/dist/link-understanding/format.js +11 -0
  2564. package/dist/link-understanding/index.d.ts +4 -0
  2565. package/dist/link-understanding/index.js +4 -0
  2566. package/dist/link-understanding/runner.d.ts +11 -0
  2567. package/dist/link-understanding/runner.js +106 -0
  2568. package/dist/logger.js +54 -0
  2569. package/dist/logging/config.d.ts +4 -0
  2570. package/dist/logging/config.js +21 -0
  2571. package/dist/logging/console.d.ts +19 -0
  2572. package/dist/logging/console.js +247 -0
  2573. package/dist/logging/diagnostic.d.ts +58 -0
  2574. package/dist/logging/diagnostic.js +242 -0
  2575. package/dist/logging/levels.d.ts +4 -0
  2576. package/dist/logging/levels.js +26 -0
  2577. package/dist/logging/logger.d.ts +42 -0
  2578. package/dist/logging/logger.js +191 -0
  2579. package/dist/logging/parse-log-line.d.ts +9 -0
  2580. package/dist/logging/parse-log-line.js +54 -0
  2581. package/dist/logging/redact.d.ts +9 -0
  2582. package/dist/logging/redact.js +124 -0
  2583. package/dist/logging/state.d.ts +17 -0
  2584. package/dist/logging/state.js +12 -0
  2585. package/dist/logging/subsystem.d.ts +16 -0
  2586. package/dist/logging/subsystem.js +251 -0
  2587. package/dist/logging.js +5 -0
  2588. package/dist/macos/gateway-daemon.d.ts +2 -0
  2589. package/dist/macos/gateway-daemon.js +183 -0
  2590. package/dist/macos/relay-smoke.d.ts +3 -0
  2591. package/dist/macos/relay-smoke.js +31 -0
  2592. package/dist/macos/relay.d.ts +2 -0
  2593. package/dist/macos/relay.js +61 -0
  2594. package/dist/markdown/code-spans.d.ts +10 -0
  2595. package/dist/markdown/code-spans.js +67 -0
  2596. package/dist/markdown/fences.d.ts +10 -0
  2597. package/dist/markdown/fences.js +58 -0
  2598. package/dist/markdown/frontmatter.d.ts +2 -0
  2599. package/dist/markdown/frontmatter.js +134 -0
  2600. package/dist/markdown/ir.d.ts +32 -0
  2601. package/dist/markdown/ir.js +730 -0
  2602. package/dist/markdown/render.d.ts +18 -0
  2603. package/dist/markdown/render.js +146 -0
  2604. package/dist/markdown/tables.d.ts +2 -0
  2605. package/dist/markdown/tables.js +39 -0
  2606. package/dist/media/audio-tags.d.ts +10 -0
  2607. package/dist/media/audio-tags.js +14 -0
  2608. package/dist/media/audio.d.ts +4 -0
  2609. package/dist/media/audio.js +17 -0
  2610. package/dist/media/constants.d.ts +7 -0
  2611. package/dist/media/constants.js +39 -0
  2612. package/dist/media/fetch.d.ts +19 -0
  2613. package/dist/media/fetch.js +159 -0
  2614. package/dist/media/host.d.ts +11 -0
  2615. package/dist/media/host.js +44 -0
  2616. package/dist/media/image-ops.d.ts +39 -0
  2617. package/dist/media/image-ops.js +393 -0
  2618. package/dist/media/input-files.d.ts +76 -0
  2619. package/dist/media/input-files.js +280 -0
  2620. package/dist/media/mime.d.ts +15 -0
  2621. package/dist/media/mime.js +163 -0
  2622. package/dist/media/parse.d.ts +8 -0
  2623. package/dist/media/parse.js +185 -0
  2624. package/dist/media/server.d.ts +5 -0
  2625. package/dist/media/server.js +92 -0
  2626. package/dist/media/store.d.ts +18 -0
  2627. package/dist/media/store.js +203 -0
  2628. package/dist/media-understanding/apply.d.ts +19 -0
  2629. package/dist/media-understanding/apply.js +363 -0
  2630. package/dist/media-understanding/attachments.d.ts +43 -0
  2631. package/dist/media-understanding/attachments.js +339 -0
  2632. package/dist/media-understanding/concurrency.d.ts +1 -0
  2633. package/dist/media-understanding/concurrency.js +28 -0
  2634. package/dist/media-understanding/defaults.d.ts +10 -0
  2635. package/dist/media-understanding/defaults.js +30 -0
  2636. package/dist/media-understanding/errors.d.ts +6 -0
  2637. package/dist/media-understanding/errors.js +11 -0
  2638. package/dist/media-understanding/format.d.ts +7 -0
  2639. package/dist/media-understanding/format.js +59 -0
  2640. package/dist/media-understanding/index.d.ts +4 -0
  2641. package/dist/media-understanding/index.js +3 -0
  2642. package/dist/media-understanding/providers/anthropic/index.d.ts +2 -0
  2643. package/dist/media-understanding/providers/anthropic/index.js +6 -0
  2644. package/dist/media-understanding/providers/deepgram/audio.d.ts +4 -0
  2645. package/dist/media-understanding/providers/deepgram/audio.js +49 -0
  2646. package/dist/media-understanding/providers/deepgram/index.d.ts +2 -0
  2647. package/dist/media-understanding/providers/deepgram/index.js +6 -0
  2648. package/dist/media-understanding/providers/google/audio.d.ts +3 -0
  2649. package/dist/media-understanding/providers/google/audio.js +65 -0
  2650. package/dist/media-understanding/providers/google/index.d.ts +2 -0
  2651. package/dist/media-understanding/providers/google/index.js +10 -0
  2652. package/dist/media-understanding/providers/google/video.d.ts +3 -0
  2653. package/dist/media-understanding/providers/google/video.js +65 -0
  2654. package/dist/media-understanding/providers/groq/index.d.ts +2 -0
  2655. package/dist/media-understanding/providers/groq/index.js +10 -0
  2656. package/dist/media-understanding/providers/image.d.ts +2 -0
  2657. package/dist/media-understanding/providers/image.js +59 -0
  2658. package/dist/media-understanding/providers/index.d.ts +4 -0
  2659. package/dist/media-understanding/providers/index.js +46 -0
  2660. package/dist/media-understanding/providers/minimax/index.d.ts +2 -0
  2661. package/dist/media-understanding/providers/minimax/index.js +6 -0
  2662. package/dist/media-understanding/providers/openai/audio.d.ts +3 -0
  2663. package/dist/media-understanding/providers/openai/audio.js +48 -0
  2664. package/dist/media-understanding/providers/openai/index.d.ts +2 -0
  2665. package/dist/media-understanding/providers/openai/index.js +8 -0
  2666. package/dist/media-understanding/providers/shared.d.ts +3 -0
  2667. package/dist/media-understanding/providers/shared.js +31 -0
  2668. package/dist/media-understanding/resolve.d.ts +44 -0
  2669. package/dist/media-understanding/resolve.js +124 -0
  2670. package/dist/media-understanding/runner.d.ts +34 -0
  2671. package/dist/media-understanding/runner.js +1085 -0
  2672. package/dist/media-understanding/scope.d.ts +9 -0
  2673. package/dist/media-understanding/scope.js +48 -0
  2674. package/dist/media-understanding/types.d.ts +92 -0
  2675. package/dist/media-understanding/types.js +1 -0
  2676. package/dist/media-understanding/video.d.ts +2 -0
  2677. package/dist/media-understanding/video.js +8 -0
  2678. package/dist/memory/batch-gemini.d.ts +55 -0
  2679. package/dist/memory/batch-gemini.js +329 -0
  2680. package/dist/memory/batch-openai.d.ts +45 -0
  2681. package/dist/memory/batch-openai.js +298 -0
  2682. package/dist/memory/embeddings-gemini.d.ts +13 -0
  2683. package/dist/memory/embeddings-gemini.js +137 -0
  2684. package/dist/memory/embeddings-openai.d.ts +13 -0
  2685. package/dist/memory/embeddings-openai.js +68 -0
  2686. package/dist/memory/embeddings.d.ts +36 -0
  2687. package/dist/memory/embeddings.js +175 -0
  2688. package/dist/memory/headers-fingerprint.d.ts +1 -0
  2689. package/dist/memory/headers-fingerprint.js +18 -0
  2690. package/dist/memory/hybrid.d.ts +34 -0
  2691. package/dist/memory/hybrid.js +63 -0
  2692. package/dist/memory/index.d.ts +2 -0
  2693. package/dist/memory/index.js +1 -0
  2694. package/dist/memory/internal.d.ts +26 -0
  2695. package/dist/memory/internal.js +240 -0
  2696. package/dist/memory/manager-cache-key.d.ts +6 -0
  2697. package/dist/memory/manager-cache-key.js +46 -0
  2698. package/dist/memory/manager-search.d.ts +60 -0
  2699. package/dist/memory/manager-search.js +98 -0
  2700. package/dist/memory/manager.d.ts +200 -0
  2701. package/dist/memory/manager.js +1950 -0
  2702. package/dist/memory/memory-schema.d.ts +10 -0
  2703. package/dist/memory/memory-schema.js +77 -0
  2704. package/dist/memory/node-llama.d.ts +8 -0
  2705. package/dist/memory/node-llama.js +3 -0
  2706. package/dist/memory/openai-batch.d.ts +1 -0
  2707. package/dist/memory/openai-batch.js +2 -0
  2708. package/dist/memory/provider-key.d.ts +14 -0
  2709. package/dist/memory/provider-key.js +23 -0
  2710. package/dist/memory/search-manager.d.ts +10 -0
  2711. package/dist/memory/search-manager.js +11 -0
  2712. package/dist/memory/session-files.d.ts +12 -0
  2713. package/dist/memory/session-files.js +107 -0
  2714. package/dist/memory/sqlite-vec.d.ts +9 -0
  2715. package/dist/memory/sqlite-vec.js +19 -0
  2716. package/dist/memory/sqlite.d.ts +1 -0
  2717. package/dist/memory/sqlite.js +7 -0
  2718. package/dist/memory/status-format.d.ts +28 -0
  2719. package/dist/memory/status-format.js +28 -0
  2720. package/dist/memory/sync-memory-files.d.ts +29 -0
  2721. package/dist/memory/sync-memory-files.js +70 -0
  2722. package/dist/memory/sync-session-files.d.ts +29 -0
  2723. package/dist/memory/sync-session-files.js +96 -0
  2724. package/dist/node-host/config.d.ts +17 -0
  2725. package/dist/node-host/config.js +53 -0
  2726. package/dist/node-host/runner.d.ts +37 -0
  2727. package/dist/node-host/runner.js +997 -0
  2728. package/dist/pairing/pairing-labels.d.ts +2 -0
  2729. package/dist/pairing/pairing-labels.js +4 -0
  2730. package/dist/pairing/pairing-messages.d.ts +6 -0
  2731. package/dist/pairing/pairing-messages.js +14 -0
  2732. package/dist/pairing/pairing-store.d.ts +46 -0
  2733. package/dist/pairing/pairing-store.js +373 -0
  2734. package/dist/plugin-sdk/index.d.ts +99 -0
  2735. package/dist/plugin-sdk/index.js +85 -0
  2736. package/dist/plugins/bundled-dir.d.ts +1 -0
  2737. package/dist/plugins/bundled-dir.js +39 -0
  2738. package/dist/plugins/cli.d.ts +3 -0
  2739. package/dist/plugins/cli.js +49 -0
  2740. package/dist/plugins/commands.d.ts +78 -0
  2741. package/dist/plugins/commands.js +233 -0
  2742. package/dist/plugins/config-schema.d.ts +2 -0
  2743. package/dist/plugins/config-schema.js +24 -0
  2744. package/dist/plugins/config-state.d.ts +33 -0
  2745. package/dist/plugins/config-state.js +176 -0
  2746. package/dist/plugins/discovery.d.ts +22 -0
  2747. package/dist/plugins/discovery.js +287 -0
  2748. package/dist/plugins/enable.d.ts +7 -0
  2749. package/dist/plugins/enable.js +37 -0
  2750. package/dist/plugins/hook-runner-global.d.ts +31 -0
  2751. package/dist/plugins/hook-runner-global.js +57 -0
  2752. package/dist/plugins/hooks.d.ts +41 -0
  2753. package/dist/plugins/hooks.js +287 -0
  2754. package/dist/plugins/http-path.d.ts +1 -0
  2755. package/dist/plugins/http-path.js +11 -0
  2756. package/dist/plugins/http-registry.d.ts +13 -0
  2757. package/dist/plugins/http-registry.js +31 -0
  2758. package/dist/plugins/install.d.ts +60 -0
  2759. package/dist/plugins/install.js +327 -0
  2760. package/dist/plugins/installs.d.ts +6 -0
  2761. package/dist/plugins/installs.js +21 -0
  2762. package/dist/plugins/loader.d.ts +14 -0
  2763. package/dist/plugins/loader.js +370 -0
  2764. package/dist/plugins/manifest-registry.d.ts +33 -0
  2765. package/dist/plugins/manifest-registry.js +141 -0
  2766. package/dist/plugins/manifest.d.ts +64 -0
  2767. package/dist/plugins/manifest.js +84 -0
  2768. package/dist/plugins/providers.d.ts +6 -0
  2769. package/dist/plugins/providers.js +16 -0
  2770. package/dist/plugins/registry.d.ts +130 -0
  2771. package/dist/plugins/registry.js +314 -0
  2772. package/dist/plugins/runtime/index.d.ts +3 -0
  2773. package/dist/plugins/runtime/index.js +291 -0
  2774. package/dist/plugins/runtime/native-deps.d.ts +8 -0
  2775. package/dist/plugins/runtime/native-deps.js +16 -0
  2776. package/dist/plugins/runtime/types.d.ts +314 -0
  2777. package/dist/plugins/runtime/types.js +1 -0
  2778. package/dist/plugins/runtime.d.ts +5 -0
  2779. package/dist/plugins/runtime.js +42 -0
  2780. package/dist/plugins/schema-validator.d.ts +10 -0
  2781. package/dist/plugins/schema-validator.js +30 -0
  2782. package/dist/plugins/services.d.ts +10 -0
  2783. package/dist/plugins/services.js +56 -0
  2784. package/dist/plugins/slots.d.ts +24 -0
  2785. package/dist/plugins/slots.js +71 -0
  2786. package/dist/plugins/status.d.ts +9 -0
  2787. package/dist/plugins/status.js +27 -0
  2788. package/dist/plugins/tools.d.ts +13 -0
  2789. package/dist/plugins/tools.js +104 -0
  2790. package/dist/plugins/types.d.ts +381 -0
  2791. package/dist/plugins/types.js +1 -0
  2792. package/dist/plugins/update.d.ts +44 -0
  2793. package/dist/plugins/update.js +335 -0
  2794. package/dist/polls.js +41 -0
  2795. package/dist/process/child-process-bridge.d.ts +8 -0
  2796. package/dist/process/child-process-bridge.js +34 -0
  2797. package/dist/process/command-queue.d.ts +12 -0
  2798. package/dist/process/command-queue.js +108 -0
  2799. package/dist/process/exec.d.ts +22 -0
  2800. package/dist/process/exec.js +105 -0
  2801. package/dist/process/lanes.d.ts +6 -0
  2802. package/dist/process/lanes.js +1 -0
  2803. package/dist/process/spawn-utils.d.ts +26 -0
  2804. package/dist/process/spawn-utils.js +102 -0
  2805. package/dist/providers/github-copilot-auth.d.ts +5 -0
  2806. package/dist/providers/github-copilot-auth.js +124 -0
  2807. package/dist/providers/github-copilot-models.d.ts +3 -0
  2808. package/dist/providers/github-copilot-models.js +36 -0
  2809. package/dist/providers/github-copilot-token.d.ts +19 -0
  2810. package/dist/providers/github-copilot-token.js +98 -0
  2811. package/dist/providers/qwen-portal-oauth.d.ts +2 -0
  2812. package/dist/providers/qwen-portal-oauth.js +38 -0
  2813. package/dist/routing/bindings.d.ts +11 -0
  2814. package/dist/routing/bindings.js +105 -0
  2815. package/dist/routing/resolve-route.d.ts +36 -0
  2816. package/dist/routing/resolve-route.js +159 -0
  2817. package/dist/routing/session-key.d.ts +45 -0
  2818. package/dist/routing/session-key.js +190 -0
  2819. package/dist/runtime.js +15 -0
  2820. package/dist/security/audit-extra.d.ts +43 -0
  2821. package/dist/security/audit-extra.js +890 -0
  2822. package/dist/security/audit-fs.d.ts +44 -0
  2823. package/dist/security/audit-fs.js +139 -0
  2824. package/dist/security/audit.d.ts +55 -0
  2825. package/dist/security/audit.js +786 -0
  2826. package/dist/security/external-content.d.ts +62 -0
  2827. package/dist/security/external-content.js +146 -0
  2828. package/dist/security/fix.d.ts +34 -0
  2829. package/dist/security/fix.js +427 -0
  2830. package/dist/security/windows-acl.d.ts +37 -0
  2831. package/dist/security/windows-acl.js +177 -0
  2832. package/dist/sessions/level-overrides.d.ts +10 -0
  2833. package/dist/sessions/level-overrides.js +27 -0
  2834. package/dist/sessions/model-overrides.d.ts +14 -0
  2835. package/dist/sessions/model-overrides.js +57 -0
  2836. package/dist/sessions/send-policy.d.ts +11 -0
  2837. package/dist/sessions/send-policy.js +83 -0
  2838. package/dist/sessions/session-key-utils.d.ts +8 -0
  2839. package/dist/sessions/session-key-utils.js +62 -0
  2840. package/dist/sessions/session-label.d.ts +9 -0
  2841. package/dist/sessions/session-label.js +17 -0
  2842. package/dist/sessions/transcript-events.d.ts +7 -0
  2843. package/dist/sessions/transcript-events.js +17 -0
  2844. package/dist/shared/text/reasoning-tags.d.ts +6 -0
  2845. package/dist/shared/text/reasoning-tags.js +93 -0
  2846. package/dist/signal/accounts.d.ts +17 -0
  2847. package/dist/signal/accounts.js +63 -0
  2848. package/dist/signal/client.d.ts +32 -0
  2849. package/dist/signal/client.js +146 -0
  2850. package/dist/signal/daemon.d.ts +18 -0
  2851. package/dist/signal/daemon.js +79 -0
  2852. package/dist/signal/format.d.ts +17 -0
  2853. package/dist/signal/format.js +172 -0
  2854. package/dist/signal/identity.d.ts +23 -0
  2855. package/dist/signal/identity.js +104 -0
  2856. package/dist/signal/index.d.ts +5 -0
  2857. package/dist/signal/index.js +5 -0
  2858. package/dist/signal/monitor/event-handler.d.ts +5 -0
  2859. package/dist/signal/monitor/event-handler.js +511 -0
  2860. package/dist/signal/monitor/event-handler.types.d.ts +117 -0
  2861. package/dist/signal/monitor/event-handler.types.js +1 -0
  2862. package/dist/signal/monitor.d.ts +23 -0
  2863. package/dist/signal/monitor.js +282 -0
  2864. package/dist/signal/probe.d.ts +8 -0
  2865. package/dist/signal/probe.js +48 -0
  2866. package/dist/signal/reaction-level.d.ts +24 -0
  2867. package/dist/signal/reaction-level.js +53 -0
  2868. package/dist/signal/send-reactions.d.ts +32 -0
  2869. package/dist/signal/send-reactions.js +165 -0
  2870. package/dist/signal/send.d.ts +24 -0
  2871. package/dist/signal/send.js +204 -0
  2872. package/dist/signal/sse-reconnect.d.ts +13 -0
  2873. package/dist/signal/sse-reconnect.js +60 -0
  2874. package/dist/slack/accounts.d.ts +32 -0
  2875. package/dist/slack/accounts.js +88 -0
  2876. package/dist/slack/actions.d.ts +53 -0
  2877. package/dist/slack/actions.js +158 -0
  2878. package/dist/slack/channel-migration.d.ts +20 -0
  2879. package/dist/slack/channel-migration.js +62 -0
  2880. package/dist/slack/client.d.ts +4 -0
  2881. package/dist/slack/client.js +17 -0
  2882. package/dist/slack/directory-live.d.ts +4 -0
  2883. package/dist/slack/directory-live.js +132 -0
  2884. package/dist/slack/format.d.ts +7 -0
  2885. package/dist/slack/format.js +114 -0
  2886. package/dist/slack/http/index.d.ts +1 -0
  2887. package/dist/slack/http/index.js +1 -0
  2888. package/dist/slack/http/registry.d.ts +12 -0
  2889. package/dist/slack/http/registry.js +29 -0
  2890. package/dist/slack/index.d.ts +6 -0
  2891. package/dist/slack/index.js +6 -0
  2892. package/dist/slack/monitor/allow-list.d.ts +20 -0
  2893. package/dist/slack/monitor/allow-list.js +62 -0
  2894. package/dist/slack/monitor/auth.d.ts +10 -0
  2895. package/dist/slack/monitor/auth.js +17 -0
  2896. package/dist/slack/monitor/channel-config.d.ts +40 -0
  2897. package/dist/slack/monitor/channel-config.js +83 -0
  2898. package/dist/slack/monitor/commands.d.ts +4 -0
  2899. package/dist/slack/monitor/commands.js +18 -0
  2900. package/dist/slack/monitor/context.d.ts +109 -0
  2901. package/dist/slack/monitor/context.js +255 -0
  2902. package/dist/slack/monitor/events/channels.d.ts +4 -0
  2903. package/dist/slack/monitor/events/channels.js +120 -0
  2904. package/dist/slack/monitor/events/members.d.ts +4 -0
  2905. package/dist/slack/monitor/events/members.js +76 -0
  2906. package/dist/slack/monitor/events/messages.d.ts +6 -0
  2907. package/dist/slack/monitor/events/messages.js +113 -0
  2908. package/dist/slack/monitor/events/pins.d.ts +4 -0
  2909. package/dist/slack/monitor/events/pins.js +78 -0
  2910. package/dist/slack/monitor/events/reactions.d.ts +4 -0
  2911. package/dist/slack/monitor/events/reactions.js +57 -0
  2912. package/dist/slack/monitor/events.d.ts +8 -0
  2913. package/dist/slack/monitor/events.js +15 -0
  2914. package/dist/slack/monitor/media.d.ts +29 -0
  2915. package/dist/slack/monitor/media.js +97 -0
  2916. package/dist/slack/monitor/message-handler/dispatch.d.ts +2 -0
  2917. package/dist/slack/monitor/message-handler/dispatch.js +171 -0
  2918. package/dist/slack/monitor/message-handler/prepare.d.ts +13 -0
  2919. package/dist/slack/monitor/message-handler/prepare.js +480 -0
  2920. package/dist/slack/monitor/message-handler/types.d.ts +22 -0
  2921. package/dist/slack/monitor/message-handler/types.js +1 -0
  2922. package/dist/slack/monitor/message-handler.d.ts +11 -0
  2923. package/dist/slack/monitor/message-handler.js +94 -0
  2924. package/dist/slack/monitor/policy.d.ts +5 -0
  2925. package/dist/slack/monitor/policy.js +13 -0
  2926. package/dist/slack/monitor/provider.d.ts +2 -0
  2927. package/dist/slack/monitor/provider.js +335 -0
  2928. package/dist/slack/monitor/replies.d.ts +50 -0
  2929. package/dist/slack/monitor/replies.js +112 -0
  2930. package/dist/slack/monitor/slash.d.ts +6 -0
  2931. package/dist/slack/monitor/slash.js +515 -0
  2932. package/dist/slack/monitor/thread-resolution.d.ts +12 -0
  2933. package/dist/slack/monitor/thread-resolution.js +104 -0
  2934. package/dist/slack/monitor/types.d.ts +97 -0
  2935. package/dist/slack/monitor/types.js +1 -0
  2936. package/dist/slack/monitor.d.ts +5 -0
  2937. package/dist/slack/monitor.js +4 -0
  2938. package/dist/slack/monitor.test-helpers.d.ts +25 -0
  2939. package/dist/slack/monitor.test-helpers.js +120 -0
  2940. package/dist/slack/probe.d.ts +15 -0
  2941. package/dist/slack/probe.js +49 -0
  2942. package/dist/slack/resolve-channels.d.ts +19 -0
  2943. package/dist/slack/resolve-channels.js +93 -0
  2944. package/dist/slack/resolve-users.d.ts +26 -0
  2945. package/dist/slack/resolve-users.js +142 -0
  2946. package/dist/slack/scopes.d.ts +7 -0
  2947. package/dist/slack/scopes.js +95 -0
  2948. package/dist/slack/send.d.ts +14 -0
  2949. package/dist/slack/send.js +134 -0
  2950. package/dist/slack/targets.d.ts +7 -0
  2951. package/dist/slack/targets.js +49 -0
  2952. package/dist/slack/threading-tool-context.d.ts +10 -0
  2953. package/dist/slack/threading-tool-context.js +18 -0
  2954. package/dist/slack/threading.d.ts +20 -0
  2955. package/dist/slack/threading.js +26 -0
  2956. package/dist/slack/token.d.ts +3 -0
  2957. package/dist/slack/token.js +10 -0
  2958. package/dist/slack/types.d.ts +36 -0
  2959. package/dist/slack/types.js +1 -0
  2960. package/dist/telegram/accounts.d.ts +17 -0
  2961. package/dist/telegram/accounts.js +109 -0
  2962. package/dist/telegram/allowed-updates.d.ts +4 -0
  2963. package/dist/telegram/allowed-updates.js +8 -0
  2964. package/dist/telegram/api-logging.d.ts +11 -0
  2965. package/dist/telegram/api-logging.js +26 -0
  2966. package/dist/telegram/audit.d.ts +29 -0
  2967. package/dist/telegram/audit.js +121 -0
  2968. package/dist/telegram/bot/delivery.d.ts +33 -0
  2969. package/dist/telegram/bot/delivery.js +454 -0
  2970. package/dist/telegram/bot/helpers.d.ts +67 -0
  2971. package/dist/telegram/bot/helpers.js +348 -0
  2972. package/dist/telegram/bot/types.d.ts +79 -0
  2973. package/dist/telegram/bot/types.js +1 -0
  2974. package/dist/telegram/bot-access.d.ts +24 -0
  2975. package/dist/telegram/bot-access.js +66 -0
  2976. package/dist/telegram/bot-handlers.d.ts +15 -0
  2977. package/dist/telegram/bot-handlers.js +599 -0
  2978. package/dist/telegram/bot-message-context.d.ts +138 -0
  2979. package/dist/telegram/bot-message-context.js +512 -0
  2980. package/dist/telegram/bot-message-dispatch.d.ts +12 -0
  2981. package/dist/telegram/bot-message-dispatch.js +286 -0
  2982. package/dist/telegram/bot-message.d.ts +1 -0
  2983. package/dist/telegram/bot-message.js +42 -0
  2984. package/dist/telegram/bot-native-commands.d.ts +31 -0
  2985. package/dist/telegram/bot-native-commands.js +482 -0
  2986. package/dist/telegram/bot-updates.d.ts +26 -0
  2987. package/dist/telegram/bot-updates.js +27 -0
  2988. package/dist/telegram/bot.d.ts +53 -0
  2989. package/dist/telegram/bot.js +420 -0
  2990. package/dist/telegram/caption.d.ts +5 -0
  2991. package/dist/telegram/caption.js +11 -0
  2992. package/dist/telegram/download.d.ts +9 -0
  2993. package/dist/telegram/download.js +36 -0
  2994. package/dist/telegram/draft-chunking.d.ts +6 -0
  2995. package/dist/telegram/draft-chunking.js +22 -0
  2996. package/dist/telegram/draft-stream.d.ts +16 -0
  2997. package/dist/telegram/draft-stream.js +111 -0
  2998. package/dist/telegram/fetch.d.ts +4 -0
  2999. package/dist/telegram/fetch.js +37 -0
  3000. package/dist/telegram/format.d.ts +16 -0
  3001. package/dist/telegram/format.js +69 -0
  3002. package/dist/telegram/group-migration.d.ts +20 -0
  3003. package/dist/telegram/group-migration.js +62 -0
  3004. package/dist/telegram/index.d.ts +4 -0
  3005. package/dist/telegram/index.js +4 -0
  3006. package/dist/telegram/inline-buttons.d.ts +11 -0
  3007. package/dist/telegram/inline-buttons.js +59 -0
  3008. package/dist/telegram/monitor.d.ts +18 -0
  3009. package/dist/telegram/monitor.js +173 -0
  3010. package/dist/telegram/network-config.d.ts +12 -0
  3011. package/dist/telegram/network-config.js +23 -0
  3012. package/dist/telegram/network-errors.d.ts +5 -0
  3013. package/dist/telegram/network-errors.js +119 -0
  3014. package/dist/telegram/pairing-store.d.ts +43 -0
  3015. package/dist/telegram/pairing-store.js +78 -0
  3016. package/dist/telegram/probe.d.ts +18 -0
  3017. package/dist/telegram/probe.js +70 -0
  3018. package/dist/telegram/proxy.d.ts +1 -0
  3019. package/dist/telegram/proxy.js +10 -0
  3020. package/dist/telegram/reaction-level.d.ts +18 -0
  3021. package/dist/telegram/reaction-level.js +46 -0
  3022. package/dist/telegram/send.d.ts +96 -0
  3023. package/dist/telegram/send.js +548 -0
  3024. package/dist/telegram/sent-message-cache.d.ts +16 -0
  3025. package/dist/telegram/sent-message-cache.js +54 -0
  3026. package/dist/telegram/sticker-cache.d.ts +46 -0
  3027. package/dist/telegram/sticker-cache.js +204 -0
  3028. package/dist/telegram/targets.d.ts +14 -0
  3029. package/dist/telegram/targets.js +47 -0
  3030. package/dist/telegram/token.d.ts +13 -0
  3031. package/dist/telegram/token.js +72 -0
  3032. package/dist/telegram/update-offset-store.d.ts +9 -0
  3033. package/dist/telegram/update-offset-store.js +63 -0
  3034. package/dist/telegram/voice.d.ts +20 -0
  3035. package/dist/telegram/voice.js +25 -0
  3036. package/dist/telegram/webhook-set.d.ts +12 -0
  3037. package/dist/telegram/webhook-set.js +28 -0
  3038. package/dist/telegram/webhook.d.ts +20 -0
  3039. package/dist/telegram/webhook.js +96 -0
  3040. package/dist/terminal/ansi.d.ts +2 -0
  3041. package/dist/terminal/ansi.js +11 -0
  3042. package/dist/terminal/links.d.ts +6 -0
  3043. package/dist/terminal/links.js +17 -0
  3044. package/dist/terminal/note.d.ts +5 -0
  3045. package/dist/terminal/note.js +83 -0
  3046. package/dist/terminal/palette.d.ts +10 -0
  3047. package/dist/terminal/palette.js +12 -0
  3048. package/dist/terminal/progress-line.d.ts +3 -0
  3049. package/dist/terminal/progress-line.js +22 -0
  3050. package/dist/terminal/prompt-style.d.ts +3 -0
  3051. package/dist/terminal/prompt-style.js +4 -0
  3052. package/dist/terminal/stream-writer.d.ts +11 -0
  3053. package/dist/terminal/stream-writer.js +51 -0
  3054. package/dist/terminal/table.d.ts +18 -0
  3055. package/dist/terminal/table.js +350 -0
  3056. package/dist/terminal/theme.d.ts +15 -0
  3057. package/dist/terminal/theme.js +22 -0
  3058. package/dist/tts/tts.d.ts +198 -0
  3059. package/dist/tts/tts.js +1220 -0
  3060. package/dist/tui/commands.d.ts +14 -0
  3061. package/dist/tui/commands.js +136 -0
  3062. package/dist/tui/components/assistant-message.d.ts +6 -0
  3063. package/dist/tui/components/assistant-message.js +16 -0
  3064. package/dist/tui/components/chat-log.d.ts +22 -0
  3065. package/dist/tui/components/chat-log.js +88 -0
  3066. package/dist/tui/components/custom-editor.d.ts +14 -0
  3067. package/dist/tui/components/custom-editor.js +58 -0
  3068. package/dist/tui/components/filterable-select-list.d.ts +32 -0
  3069. package/dist/tui/components/filterable-select-list.js +102 -0
  3070. package/dist/tui/components/fuzzy-filter.d.ts +34 -0
  3071. package/dist/tui/components/fuzzy-filter.js +125 -0
  3072. package/dist/tui/components/searchable-select-list.d.ts +43 -0
  3073. package/dist/tui/components/searchable-select-list.js +236 -0
  3074. package/dist/tui/components/selectors.d.ts +7 -0
  3075. package/dist/tui/components/selectors.js +16 -0
  3076. package/dist/tui/components/tool-execution.d.ts +33 -0
  3077. package/dist/tui/components/tool-execution.js +112 -0
  3078. package/dist/tui/components/user-message.d.ts +6 -0
  3079. package/dist/tui/components/user-message.js +17 -0
  3080. package/dist/tui/gateway-chat.d.ts +119 -0
  3081. package/dist/tui/gateway-chat.js +146 -0
  3082. package/dist/tui/theme/syntax-theme.d.ts +7 -0
  3083. package/dist/tui/theme/syntax-theme.js +49 -0
  3084. package/dist/tui/theme/theme.d.ts +35 -0
  3085. package/dist/tui/theme/theme.js +119 -0
  3086. package/dist/tui/tui-command-handlers.d.ts +31 -0
  3087. package/dist/tui/tui-command-handlers.js +420 -0
  3088. package/dist/tui/tui-event-handlers.d.ts +15 -0
  3089. package/dist/tui/tui-event-handlers.js +178 -0
  3090. package/dist/tui/tui-formatters.d.ts +31 -0
  3091. package/dist/tui/tui-formatters.js +177 -0
  3092. package/dist/tui/tui-local-shell.d.ts +24 -0
  3093. package/dist/tui/tui-local-shell.js +103 -0
  3094. package/dist/tui/tui-overlays.d.ts +7 -0
  3095. package/dist/tui/tui-overlays.js +13 -0
  3096. package/dist/tui/tui-session-actions.d.ts +28 -0
  3097. package/dist/tui/tui-session-actions.js +213 -0
  3098. package/dist/tui/tui-status-summary.d.ts +2 -0
  3099. package/dist/tui/tui-status-summary.js +75 -0
  3100. package/dist/tui/tui-stream-assembler.d.ts +8 -0
  3101. package/dist/tui/tui-stream-assembler.js +55 -0
  3102. package/dist/tui/tui-types.d.ts +103 -0
  3103. package/dist/tui/tui-types.js +1 -0
  3104. package/dist/tui/tui-waiting.d.ts +16 -0
  3105. package/dist/tui/tui-waiting.js +34 -0
  3106. package/dist/tui/tui.d.ts +13 -0
  3107. package/dist/tui/tui.js +570 -0
  3108. package/dist/utils/account-id.d.ts +1 -0
  3109. package/dist/utils/account-id.js +7 -0
  3110. package/dist/utils/boolean.d.ts +5 -0
  3111. package/dist/utils/boolean.js +27 -0
  3112. package/dist/utils/delivery-context.d.ts +29 -0
  3113. package/dist/utils/delivery-context.js +98 -0
  3114. package/dist/utils/directive-tags.d.ts +16 -0
  3115. package/dist/utils/directive-tags.js +55 -0
  3116. package/dist/utils/message-channel.d.ts +27 -0
  3117. package/dist/utils/message-channel.js +93 -0
  3118. package/dist/utils/provider-utils.d.ts +9 -0
  3119. package/dist/utils/provider-utils.js +29 -0
  3120. package/dist/utils/queue-helpers.d.ts +41 -0
  3121. package/dist/utils/queue-helpers.js +105 -0
  3122. package/dist/utils/time-format.d.ts +1 -0
  3123. package/dist/utils/time-format.js +24 -0
  3124. package/dist/utils/usage-format.d.ts +26 -0
  3125. package/dist/utils/usage-format.js +55 -0
  3126. package/dist/utils.js +283 -0
  3127. package/dist/version.js +18 -0
  3128. package/dist/web/accounts.d.ts +39 -0
  3129. package/dist/web/accounts.js +127 -0
  3130. package/dist/web/active-listener.d.ts +24 -0
  3131. package/dist/web/active-listener.js +37 -0
  3132. package/dist/web/auth-store.d.ts +25 -0
  3133. package/dist/web/auth-store.js +177 -0
  3134. package/dist/web/auto-reply/constants.d.ts +1 -0
  3135. package/dist/web/auto-reply/constants.js +1 -0
  3136. package/dist/web/auto-reply/deliver-reply.d.ts +18 -0
  3137. package/dist/web/auto-reply/deliver-reply.js +140 -0
  3138. package/dist/web/auto-reply/heartbeat-runner.d.ts +20 -0
  3139. package/dist/web/auto-reply/heartbeat-runner.js +268 -0
  3140. package/dist/web/auto-reply/loggers.d.ts +4 -0
  3141. package/dist/web/auto-reply/loggers.js +5 -0
  3142. package/dist/web/auto-reply/mentions.d.ts +19 -0
  3143. package/dist/web/auto-reply/mentions.js +84 -0
  3144. package/dist/web/auto-reply/monitor/ack-reaction.d.ts +13 -0
  3145. package/dist/web/auto-reply/monitor/ack-reaction.js +49 -0
  3146. package/dist/web/auto-reply/monitor/broadcast.d.ts +16 -0
  3147. package/dist/web/auto-reply/monitor/broadcast.js +68 -0
  3148. package/dist/web/auto-reply/monitor/commands.d.ts +2 -0
  3149. package/dist/web/auto-reply/monitor/commands.js +22 -0
  3150. package/dist/web/auto-reply/monitor/echo.d.ts +17 -0
  3151. package/dist/web/auto-reply/monitor/echo.js +38 -0
  3152. package/dist/web/auto-reply/monitor/group-activation.d.ts +9 -0
  3153. package/dist/web/auto-reply/monitor/group-activation.js +37 -0
  3154. package/dist/web/auto-reply/monitor/group-gating.d.ts +29 -0
  3155. package/dist/web/auto-reply/monitor/group-gating.js +99 -0
  3156. package/dist/web/auto-reply/monitor/group-members.d.ts +6 -0
  3157. package/dist/web/auto-reply/monitor/group-members.js +60 -0
  3158. package/dist/web/auto-reply/monitor/last-route.d.ts +15 -0
  3159. package/dist/web/auto-reply/monitor/last-route.js +39 -0
  3160. package/dist/web/auto-reply/monitor/message-line.d.ts +11 -0
  3161. package/dist/web/auto-reply/monitor/message-line.js +36 -0
  3162. package/dist/web/auto-reply/monitor/on-message.d.ts +24 -0
  3163. package/dist/web/auto-reply/monitor/on-message.js +129 -0
  3164. package/dist/web/auto-reply/monitor/peer.d.ts +2 -0
  3165. package/dist/web/auto-reply/monitor/peer.js +13 -0
  3166. package/dist/web/auto-reply/monitor/process-message.d.ts +40 -0
  3167. package/dist/web/auto-reply/monitor/process-message.js +323 -0
  3168. package/dist/web/auto-reply/monitor.d.ts +5 -0
  3169. package/dist/web/auto-reply/monitor.js +364 -0
  3170. package/dist/web/auto-reply/session-snapshot.d.ts +17 -0
  3171. package/dist/web/auto-reply/session-snapshot.js +40 -0
  3172. package/dist/web/auto-reply/types.d.ts +28 -0
  3173. package/dist/web/auto-reply/types.js +1 -0
  3174. package/dist/web/auto-reply/util.d.ts +2 -0
  3175. package/dist/web/auto-reply/util.js +57 -0
  3176. package/dist/web/auto-reply.d.ts +1 -0
  3177. package/dist/web/auto-reply.impl.d.ts +6 -0
  3178. package/dist/web/auto-reply.impl.js +5 -0
  3179. package/dist/web/auto-reply.js +1 -0
  3180. package/dist/web/inbound/access-control.d.ts +24 -0
  3181. package/dist/web/inbound/access-control.js +147 -0
  3182. package/dist/web/inbound/dedupe.d.ts +2 -0
  3183. package/dist/web/inbound/dedupe.js +13 -0
  3184. package/dist/web/inbound/extract.d.ts +13 -0
  3185. package/dist/web/inbound/extract.js +284 -0
  3186. package/dist/web/inbound/media.d.ts +6 -0
  3187. package/dist/web/inbound/media.js +36 -0
  3188. package/dist/web/inbound/monitor.d.ts +30 -0
  3189. package/dist/web/inbound/monitor.js +346 -0
  3190. package/dist/web/inbound/send-api.d.ts +22 -0
  3191. package/dist/web/inbound/send-api.js +90 -0
  3192. package/dist/web/inbound/types.d.ts +40 -0
  3193. package/dist/web/inbound/types.js +1 -0
  3194. package/dist/web/inbound.d.ts +4 -0
  3195. package/dist/web/inbound.js +3 -0
  3196. package/dist/web/login-qr.d.ts +19 -0
  3197. package/dist/web/login-qr.js +233 -0
  3198. package/dist/web/login.d.ts +3 -0
  3199. package/dist/web/login.js +68 -0
  3200. package/dist/web/media.d.ts +20 -0
  3201. package/dist/web/media.js +228 -0
  3202. package/dist/web/outbound.d.ts +23 -0
  3203. package/dist/web/outbound.js +132 -0
  3204. package/dist/web/qr-image.d.ts +4 -0
  3205. package/dist/web/qr-image.js +96 -0
  3206. package/dist/web/reconnect.d.ts +12 -0
  3207. package/dist/web/reconnect.js +37 -0
  3208. package/dist/web/session.d.ts +14 -0
  3209. package/dist/web/session.js +240 -0
  3210. package/dist/web/vcard.d.ts +6 -0
  3211. package/dist/web/vcard.js +72 -0
  3212. package/dist/whatsapp/normalize.d.ts +6 -0
  3213. package/dist/whatsapp/normalize.js +74 -0
  3214. package/dist/wizard/clack-prompter.d.ts +2 -0
  3215. package/dist/wizard/clack-prompter.js +75 -0
  3216. package/dist/wizard/onboarding.d.ts +4 -0
  3217. package/dist/wizard/onboarding.finalize.d.ts +17 -0
  3218. package/dist/wizard/onboarding.finalize.js +354 -0
  3219. package/dist/wizard/onboarding.gateway-config.d.ts +19 -0
  3220. package/dist/wizard/onboarding.gateway-config.js +191 -0
  3221. package/dist/wizard/onboarding.js +391 -0
  3222. package/dist/wizard/onboarding.types.d.ts +22 -0
  3223. package/dist/wizard/onboarding.types.js +1 -0
  3224. package/dist/wizard/prompts.d.ts +42 -0
  3225. package/dist/wizard/prompts.js +6 -0
  3226. package/dist/wizard/session.d.ts +42 -0
  3227. package/dist/wizard/session.js +203 -0
  3228. package/docs/CNAME +1 -0
  3229. package/docs/_config.yml +53 -0
  3230. package/docs/_layouts/default.html +145 -0
  3231. package/docs/assets/markdown.css +179 -0
  3232. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  3233. package/docs/assets/openclaw-logo-text.png +0 -0
  3234. package/docs/assets/pixel-lobster.svg +60 -0
  3235. package/docs/assets/showcase/agents-ui.jpg +0 -0
  3236. package/docs/assets/showcase/bambu-cli.png +0 -0
  3237. package/docs/assets/showcase/codexmonitor.png +0 -0
  3238. package/docs/assets/showcase/gohome-grafana.png +0 -0
  3239. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  3240. package/docs/assets/showcase/oura-health.png +0 -0
  3241. package/docs/assets/showcase/padel-cli.svg +11 -0
  3242. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  3243. package/docs/assets/showcase/papla-tts.jpg +0 -0
  3244. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  3245. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  3246. package/docs/assets/showcase/roborock-status.svg +13 -0
  3247. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  3248. package/docs/assets/showcase/snag.png +0 -0
  3249. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  3250. package/docs/assets/showcase/wienerlinien.png +0 -0
  3251. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  3252. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  3253. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  3254. package/docs/assets/terminal.css +473 -0
  3255. package/docs/assets/theme.js +55 -0
  3256. package/docs/automation/auth-monitoring.md +44 -0
  3257. package/docs/automation/cron-jobs.md +444 -0
  3258. package/docs/automation/cron-vs-heartbeat.md +281 -0
  3259. package/docs/automation/gmail-pubsub.md +256 -0
  3260. package/docs/automation/poll.md +69 -0
  3261. package/docs/automation/webhook.md +163 -0
  3262. package/docs/bedrock.md +176 -0
  3263. package/docs/brave-search.md +41 -0
  3264. package/docs/broadcast-groups.md +442 -0
  3265. package/docs/channels/bluebubbles.md +264 -0
  3266. package/docs/channels/discord.md +436 -0
  3267. package/docs/channels/googlechat.md +250 -0
  3268. package/docs/channels/grammy.md +31 -0
  3269. package/docs/channels/imessage.md +295 -0
  3270. package/docs/channels/index.md +45 -0
  3271. package/docs/channels/line.md +186 -0
  3272. package/docs/channels/location.md +56 -0
  3273. package/docs/channels/matrix.md +233 -0
  3274. package/docs/channels/mattermost.md +138 -0
  3275. package/docs/channels/msteams.md +766 -0
  3276. package/docs/channels/nextcloud-talk.md +135 -0
  3277. package/docs/channels/nostr.md +233 -0
  3278. package/docs/channels/signal.md +202 -0
  3279. package/docs/channels/slack.md +548 -0
  3280. package/docs/channels/telegram.md +750 -0
  3281. package/docs/channels/tlon.md +132 -0
  3282. package/docs/channels/troubleshooting.md +29 -0
  3283. package/docs/channels/twitch.md +377 -0
  3284. package/docs/channels/whatsapp.md +404 -0
  3285. package/docs/channels/zalo.md +189 -0
  3286. package/docs/channels/zalouser.md +140 -0
  3287. package/docs/cli/acp.md +170 -0
  3288. package/docs/cli/agent.md +24 -0
  3289. package/docs/cli/agents.md +75 -0
  3290. package/docs/cli/approvals.md +50 -0
  3291. package/docs/cli/browser.md +107 -0
  3292. package/docs/cli/channels.md +79 -0
  3293. package/docs/cli/config.md +50 -0
  3294. package/docs/cli/configure.md +33 -0
  3295. package/docs/cli/cron.md +31 -0
  3296. package/docs/cli/dashboard.md +16 -0
  3297. package/docs/cli/devices.md +67 -0
  3298. package/docs/cli/directory.md +63 -0
  3299. package/docs/cli/dns.md +23 -0
  3300. package/docs/cli/docs.md +15 -0
  3301. package/docs/cli/doctor.md +41 -0
  3302. package/docs/cli/gateway.md +199 -0
  3303. package/docs/cli/health.md +21 -0
  3304. package/docs/cli/hooks.md +304 -0
  3305. package/docs/cli/index.md +1029 -0
  3306. package/docs/cli/logs.md +24 -0
  3307. package/docs/cli/memory.md +45 -0
  3308. package/docs/cli/message.md +239 -0
  3309. package/docs/cli/models.md +79 -0
  3310. package/docs/cli/node.md +112 -0
  3311. package/docs/cli/nodes.md +73 -0
  3312. package/docs/cli/onboard.md +29 -0
  3313. package/docs/cli/pairing.md +21 -0
  3314. package/docs/cli/plugins.md +62 -0
  3315. package/docs/cli/reset.md +17 -0
  3316. package/docs/cli/sandbox.md +152 -0
  3317. package/docs/cli/security.md +26 -0
  3318. package/docs/cli/sessions.md +16 -0
  3319. package/docs/cli/setup.md +29 -0
  3320. package/docs/cli/skills.md +26 -0
  3321. package/docs/cli/status.md +26 -0
  3322. package/docs/cli/system.md +60 -0
  3323. package/docs/cli/tui.md +23 -0
  3324. package/docs/cli/uninstall.md +17 -0
  3325. package/docs/cli/update.md +98 -0
  3326. package/docs/cli/voicecall.md +34 -0
  3327. package/docs/cli/webhooks.md +25 -0
  3328. package/docs/concepts/agent-loop.md +146 -0
  3329. package/docs/concepts/agent-workspace.md +233 -0
  3330. package/docs/concepts/agent.md +123 -0
  3331. package/docs/concepts/architecture.md +129 -0
  3332. package/docs/concepts/channel-routing.md +114 -0
  3333. package/docs/concepts/compaction.md +61 -0
  3334. package/docs/concepts/context.md +161 -0
  3335. package/docs/concepts/group-messages.md +84 -0
  3336. package/docs/concepts/groups.md +373 -0
  3337. package/docs/concepts/markdown-formatting.md +130 -0
  3338. package/docs/concepts/memory.md +431 -0
  3339. package/docs/concepts/messages.md +154 -0
  3340. package/docs/concepts/model-failover.md +149 -0
  3341. package/docs/concepts/model-providers.md +313 -0
  3342. package/docs/concepts/models.md +208 -0
  3343. package/docs/concepts/multi-agent.md +376 -0
  3344. package/docs/concepts/oauth.md +145 -0
  3345. package/docs/concepts/presence.md +102 -0
  3346. package/docs/concepts/queue.md +89 -0
  3347. package/docs/concepts/retry.md +69 -0
  3348. package/docs/concepts/session-pruning.md +122 -0
  3349. package/docs/concepts/session-tool.md +193 -0
  3350. package/docs/concepts/session.md +168 -0
  3351. package/docs/concepts/sessions.md +10 -0
  3352. package/docs/concepts/streaming.md +135 -0
  3353. package/docs/concepts/system-prompt.md +115 -0
  3354. package/docs/concepts/timezone.md +91 -0
  3355. package/docs/concepts/typebox.md +289 -0
  3356. package/docs/concepts/typing-indicators.md +68 -0
  3357. package/docs/concepts/usage-tracking.md +35 -0
  3358. package/docs/date-time.md +128 -0
  3359. package/docs/debug/node-issue.md +83 -0
  3360. package/docs/debugging.md +162 -0
  3361. package/docs/diagnostics/flags.md +91 -0
  3362. package/docs/docs.json +1151 -0
  3363. package/docs/environment.md +81 -0
  3364. package/docs/experiments/onboarding-config-protocol.md +40 -0
  3365. package/docs/experiments/plans/cron-add-hardening.md +63 -0
  3366. package/docs/experiments/plans/group-policy-hardening.md +40 -0
  3367. package/docs/experiments/plans/openresponses-gateway.md +123 -0
  3368. package/docs/experiments/proposals/model-config.md +36 -0
  3369. package/docs/experiments/research/memory.md +228 -0
  3370. package/docs/gateway/authentication.md +145 -0
  3371. package/docs/gateway/background-process.md +93 -0
  3372. package/docs/gateway/bonjour.md +167 -0
  3373. package/docs/gateway/bridge-protocol.md +89 -0
  3374. package/docs/gateway/cli-backends.md +223 -0
  3375. package/docs/gateway/configuration-examples.md +580 -0
  3376. package/docs/gateway/configuration.md +3388 -0
  3377. package/docs/gateway/discovery.md +116 -0
  3378. package/docs/gateway/doctor.md +282 -0
  3379. package/docs/gateway/gateway-lock.md +34 -0
  3380. package/docs/gateway/health.md +35 -0
  3381. package/docs/gateway/heartbeat.md +302 -0
  3382. package/docs/gateway/index.md +328 -0
  3383. package/docs/gateway/local-models.md +150 -0
  3384. package/docs/gateway/logging.md +113 -0
  3385. package/docs/gateway/multiple-gateways.md +112 -0
  3386. package/docs/gateway/openai-http-api.md +118 -0
  3387. package/docs/gateway/openresponses-http-api.md +317 -0
  3388. package/docs/gateway/pairing.md +99 -0
  3389. package/docs/gateway/protocol.md +221 -0
  3390. package/docs/gateway/remote-gateway-readme.md +157 -0
  3391. package/docs/gateway/remote.md +127 -0
  3392. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +128 -0
  3393. package/docs/gateway/sandboxing.md +193 -0
  3394. package/docs/gateway/security/formal-verification.md +164 -0
  3395. package/docs/gateway/security/index.md +815 -0
  3396. package/docs/gateway/tailscale.md +127 -0
  3397. package/docs/gateway/tools-invoke-http-api.md +85 -0
  3398. package/docs/gateway/troubleshooting.md +767 -0
  3399. package/docs/help/faq.md +2823 -0
  3400. package/docs/help/index.md +21 -0
  3401. package/docs/help/troubleshooting.md +98 -0
  3402. package/docs/hooks/soul-evil.md +69 -0
  3403. package/docs/hooks.md +913 -0
  3404. package/docs/images/groups-flow.svg +52 -0
  3405. package/docs/images/mobile-ui-screenshot.png +0 -0
  3406. package/docs/index.md +257 -0
  3407. package/docs/install/ansible.md +208 -0
  3408. package/docs/install/bun.md +59 -0
  3409. package/docs/install/development-channels.md +75 -0
  3410. package/docs/install/docker.md +482 -0
  3411. package/docs/install/index.md +182 -0
  3412. package/docs/install/installer.md +123 -0
  3413. package/docs/install/migrating.md +192 -0
  3414. package/docs/install/nix.md +96 -0
  3415. package/docs/install/node.md +78 -0
  3416. package/docs/install/uninstall.md +128 -0
  3417. package/docs/install/updating.md +228 -0
  3418. package/docs/logging.md +350 -0
  3419. package/docs/multi-agent-sandbox-tools.md +395 -0
  3420. package/docs/network.md +54 -0
  3421. package/docs/nodes/audio.md +114 -0
  3422. package/docs/nodes/camera.md +156 -0
  3423. package/docs/nodes/images.md +72 -0
  3424. package/docs/nodes/index.md +319 -0
  3425. package/docs/nodes/location-command.md +113 -0
  3426. package/docs/nodes/media-understanding.md +379 -0
  3427. package/docs/nodes/talk.md +90 -0
  3428. package/docs/nodes/voicewake.md +65 -0
  3429. package/docs/northflank.mdx +53 -0
  3430. package/docs/perplexity.md +80 -0
  3431. package/docs/pi-dev.md +70 -0
  3432. package/docs/pi.md +600 -0
  3433. package/docs/platforms/android.md +148 -0
  3434. package/docs/platforms/digitalocean.md +262 -0
  3435. package/docs/platforms/exe-dev.md +125 -0
  3436. package/docs/platforms/fly.md +483 -0
  3437. package/docs/platforms/gcp.md +503 -0
  3438. package/docs/platforms/hetzner.md +330 -0
  3439. package/docs/platforms/index.md +53 -0
  3440. package/docs/platforms/ios.md +107 -0
  3441. package/docs/platforms/linux.md +94 -0
  3442. package/docs/platforms/mac/bundled-gateway.md +73 -0
  3443. package/docs/platforms/mac/canvas.md +125 -0
  3444. package/docs/platforms/mac/child-process.md +69 -0
  3445. package/docs/platforms/mac/dev-setup.md +102 -0
  3446. package/docs/platforms/mac/health.md +34 -0
  3447. package/docs/platforms/mac/icon.md +31 -0
  3448. package/docs/platforms/mac/logging.md +57 -0
  3449. package/docs/platforms/mac/menu-bar.md +81 -0
  3450. package/docs/platforms/mac/peekaboo.md +65 -0
  3451. package/docs/platforms/mac/permissions.md +44 -0
  3452. package/docs/platforms/mac/release.md +85 -0
  3453. package/docs/platforms/mac/remote.md +83 -0
  3454. package/docs/platforms/mac/signing.md +47 -0
  3455. package/docs/platforms/mac/skills.md +33 -0
  3456. package/docs/platforms/mac/voice-overlay.md +60 -0
  3457. package/docs/platforms/mac/voicewake.md +67 -0
  3458. package/docs/platforms/mac/webchat.md +41 -0
  3459. package/docs/platforms/mac/xpc.md +61 -0
  3460. package/docs/platforms/macos-vm.md +281 -0
  3461. package/docs/platforms/macos.md +203 -0
  3462. package/docs/platforms/oracle.md +303 -0
  3463. package/docs/platforms/raspberry-pi.md +358 -0
  3464. package/docs/platforms/windows.md +158 -0
  3465. package/docs/plugin.md +664 -0
  3466. package/docs/plugins/agent-tools.md +99 -0
  3467. package/docs/plugins/manifest.md +71 -0
  3468. package/docs/plugins/voice-call.md +246 -0
  3469. package/docs/plugins/zalouser.md +81 -0
  3470. package/docs/prose.md +134 -0
  3471. package/docs/providers/anthropic.md +132 -0
  3472. package/docs/providers/claude-max-api-proxy.md +148 -0
  3473. package/docs/providers/deepgram.md +93 -0
  3474. package/docs/providers/github-copilot.md +72 -0
  3475. package/docs/providers/glm.md +33 -0
  3476. package/docs/providers/index.md +62 -0
  3477. package/docs/providers/minimax.md +208 -0
  3478. package/docs/providers/models.md +50 -0
  3479. package/docs/providers/moonshot.md +141 -0
  3480. package/docs/providers/ollama.md +223 -0
  3481. package/docs/providers/openai.md +62 -0
  3482. package/docs/providers/opencode.md +36 -0
  3483. package/docs/providers/openrouter.md +37 -0
  3484. package/docs/providers/qwen.md +53 -0
  3485. package/docs/providers/synthetic.md +99 -0
  3486. package/docs/providers/venice.md +267 -0
  3487. package/docs/providers/vercel-ai-gateway.md +50 -0
  3488. package/docs/providers/xiaomi.md +64 -0
  3489. package/docs/providers/zai.md +36 -0
  3490. package/docs/railway.mdx +99 -0
  3491. package/docs/refactor/clawnet.md +417 -0
  3492. package/docs/refactor/exec-host.md +316 -0
  3493. package/docs/refactor/outbound-session-mirroring.md +85 -0
  3494. package/docs/refactor/plugin-sdk.md +214 -0
  3495. package/docs/refactor/strict-config.md +93 -0
  3496. package/docs/reference/AGENTS.default.md +124 -0
  3497. package/docs/reference/RELEASING.md +119 -0
  3498. package/docs/reference/api-usage-costs.md +137 -0
  3499. package/docs/reference/device-models.md +47 -0
  3500. package/docs/reference/rpc.md +41 -0
  3501. package/docs/reference/session-management-compaction.md +285 -0
  3502. package/docs/reference/templates/AGENTS.dev.md +83 -0
  3503. package/docs/reference/templates/AGENTS.md +218 -0
  3504. package/docs/reference/templates/BOOT.md +10 -0
  3505. package/docs/reference/templates/BOOTSTRAP.md +61 -0
  3506. package/docs/reference/templates/HEARTBEAT.md +11 -0
  3507. package/docs/reference/templates/IDENTITY.dev.md +47 -0
  3508. package/docs/reference/templates/IDENTITY.md +27 -0
  3509. package/docs/reference/templates/SOUL.dev.md +76 -0
  3510. package/docs/reference/templates/SOUL.md +42 -0
  3511. package/docs/reference/templates/TOOLS.dev.md +24 -0
  3512. package/docs/reference/templates/TOOLS.md +46 -0
  3513. package/docs/reference/templates/USER.dev.md +18 -0
  3514. package/docs/reference/templates/USER.md +22 -0
  3515. package/docs/reference/test.md +50 -0
  3516. package/docs/reference/transcript-hygiene.md +107 -0
  3517. package/docs/render.mdx +165 -0
  3518. package/docs/scripts.md +33 -0
  3519. package/docs/security/formal-verification.md +164 -0
  3520. package/docs/start/getting-started.md +208 -0
  3521. package/docs/start/hubs.md +184 -0
  3522. package/docs/start/lore.md +219 -0
  3523. package/docs/start/onboarding.md +106 -0
  3524. package/docs/start/openclaw.md +241 -0
  3525. package/docs/start/pairing.md +85 -0
  3526. package/docs/start/setup.md +149 -0
  3527. package/docs/start/showcase.md +416 -0
  3528. package/docs/start/wizard.md +333 -0
  3529. package/docs/testing.md +368 -0
  3530. package/docs/token-use.md +112 -0
  3531. package/docs/tools/agent-send.md +53 -0
  3532. package/docs/tools/apply-patch.md +50 -0
  3533. package/docs/tools/browser-linux-troubleshooting.md +139 -0
  3534. package/docs/tools/browser-login.md +68 -0
  3535. package/docs/tools/browser.md +562 -0
  3536. package/docs/tools/chrome-extension.md +177 -0
  3537. package/docs/tools/clawhub.md +202 -0
  3538. package/docs/tools/creating-skills.md +54 -0
  3539. package/docs/tools/elevated.md +57 -0
  3540. package/docs/tools/exec-approvals.md +244 -0
  3541. package/docs/tools/exec.md +177 -0
  3542. package/docs/tools/firecrawl.md +61 -0
  3543. package/docs/tools/index.md +508 -0
  3544. package/docs/tools/llm-task.md +115 -0
  3545. package/docs/tools/lobster.md +342 -0
  3546. package/docs/tools/reactions.md +22 -0
  3547. package/docs/tools/skills-config.md +76 -0
  3548. package/docs/tools/skills.md +300 -0
  3549. package/docs/tools/slash-commands.md +198 -0
  3550. package/docs/tools/subagents.md +150 -0
  3551. package/docs/tools/thinking.md +73 -0
  3552. package/docs/tools/web.md +259 -0
  3553. package/docs/tts.md +396 -0
  3554. package/docs/tui.md +159 -0
  3555. package/docs/vps.md +43 -0
  3556. package/docs/web/control-ui.md +171 -0
  3557. package/docs/web/dashboard.md +46 -0
  3558. package/docs/web/index.md +114 -0
  3559. package/docs/web/webchat.md +49 -0
  3560. package/docs/whatsapp-openclaw.jpg +0 -0
  3561. package/extensions/bluebubbles/index.ts +20 -0
  3562. package/extensions/bluebubbles/node_modules/.bin/claw +21 -0
  3563. package/extensions/bluebubbles/node_modules/.bin/claw.CMD +12 -0
  3564. package/extensions/bluebubbles/node_modules/.bin/claw.ps1 +41 -0
  3565. package/extensions/bluebubbles/openclaw.plugin.json +9 -0
  3566. package/extensions/bluebubbles/package.json +36 -0
  3567. package/extensions/bluebubbles/src/accounts.ts +88 -0
  3568. package/extensions/bluebubbles/src/actions.test.ts +651 -0
  3569. package/extensions/bluebubbles/src/actions.ts +439 -0
  3570. package/extensions/bluebubbles/src/attachments.test.ts +346 -0
  3571. package/extensions/bluebubbles/src/attachments.ts +300 -0
  3572. package/extensions/bluebubbles/src/channel.ts +415 -0
  3573. package/extensions/bluebubbles/src/chat.test.ts +462 -0
  3574. package/extensions/bluebubbles/src/chat.ts +378 -0
  3575. package/extensions/bluebubbles/src/config-schema.ts +51 -0
  3576. package/extensions/bluebubbles/src/media-send.ts +176 -0
  3577. package/extensions/bluebubbles/src/monitor.test.ts +2341 -0
  3578. package/extensions/bluebubbles/src/monitor.ts +2470 -0
  3579. package/extensions/bluebubbles/src/onboarding.ts +352 -0
  3580. package/extensions/bluebubbles/src/probe.ts +135 -0
  3581. package/extensions/bluebubbles/src/reactions.test.ts +393 -0
  3582. package/extensions/bluebubbles/src/reactions.ts +188 -0
  3583. package/extensions/bluebubbles/src/runtime.ts +14 -0
  3584. package/extensions/bluebubbles/src/send.test.ts +809 -0
  3585. package/extensions/bluebubbles/src/send.ts +468 -0
  3586. package/extensions/bluebubbles/src/targets.test.ts +184 -0
  3587. package/extensions/bluebubbles/src/targets.ts +422 -0
  3588. package/extensions/bluebubbles/src/types.ts +127 -0
  3589. package/extensions/copilot-proxy/README.md +24 -0
  3590. package/extensions/copilot-proxy/index.ts +148 -0
  3591. package/extensions/copilot-proxy/node_modules/.bin/claw +21 -0
  3592. package/extensions/copilot-proxy/node_modules/.bin/claw.CMD +12 -0
  3593. package/extensions/copilot-proxy/node_modules/.bin/claw.ps1 +41 -0
  3594. package/extensions/copilot-proxy/openclaw.plugin.json +9 -0
  3595. package/extensions/copilot-proxy/package.json +14 -0
  3596. package/extensions/diagnostics-otel/index.ts +16 -0
  3597. package/extensions/diagnostics-otel/node_modules/.bin/claw +21 -0
  3598. package/extensions/diagnostics-otel/node_modules/.bin/claw.CMD +12 -0
  3599. package/extensions/diagnostics-otel/node_modules/.bin/claw.ps1 +41 -0
  3600. package/extensions/diagnostics-otel/openclaw.plugin.json +8 -0
  3601. package/extensions/diagnostics-otel/package.json +27 -0
  3602. package/extensions/diagnostics-otel/src/service.test.ts +226 -0
  3603. package/extensions/diagnostics-otel/src/service.ts +636 -0
  3604. package/extensions/discord/index.ts +18 -0
  3605. package/extensions/discord/node_modules/.bin/claw +21 -0
  3606. package/extensions/discord/node_modules/.bin/claw.CMD +12 -0
  3607. package/extensions/discord/node_modules/.bin/claw.ps1 +41 -0
  3608. package/extensions/discord/openclaw.plugin.json +9 -0
  3609. package/extensions/discord/package.json +14 -0
  3610. package/extensions/discord/src/channel.ts +423 -0
  3611. package/extensions/discord/src/runtime.ts +14 -0
  3612. package/extensions/google-antigravity-auth/README.md +24 -0
  3613. package/extensions/google-antigravity-auth/index.ts +461 -0
  3614. package/extensions/google-antigravity-auth/node_modules/.bin/claw +21 -0
  3615. package/extensions/google-antigravity-auth/node_modules/.bin/claw.CMD +12 -0
  3616. package/extensions/google-antigravity-auth/node_modules/.bin/claw.ps1 +41 -0
  3617. package/extensions/google-antigravity-auth/openclaw.plugin.json +9 -0
  3618. package/extensions/google-antigravity-auth/package.json +14 -0
  3619. package/extensions/google-gemini-cli-auth/README.md +35 -0
  3620. package/extensions/google-gemini-cli-auth/index.ts +89 -0
  3621. package/extensions/google-gemini-cli-auth/node_modules/.bin/claw +21 -0
  3622. package/extensions/google-gemini-cli-auth/node_modules/.bin/claw.CMD +12 -0
  3623. package/extensions/google-gemini-cli-auth/node_modules/.bin/claw.ps1 +41 -0
  3624. package/extensions/google-gemini-cli-auth/oauth.test.ts +240 -0
  3625. package/extensions/google-gemini-cli-auth/oauth.ts +662 -0
  3626. package/extensions/google-gemini-cli-auth/openclaw.plugin.json +9 -0
  3627. package/extensions/google-gemini-cli-auth/package.json +14 -0
  3628. package/extensions/googlechat/index.ts +20 -0
  3629. package/extensions/googlechat/node_modules/.bin/claw +21 -0
  3630. package/extensions/googlechat/node_modules/.bin/claw.CMD +12 -0
  3631. package/extensions/googlechat/node_modules/.bin/claw.ps1 +41 -0
  3632. package/extensions/googlechat/openclaw.plugin.json +9 -0
  3633. package/extensions/googlechat/package.json +39 -0
  3634. package/extensions/googlechat/src/accounts.ts +148 -0
  3635. package/extensions/googlechat/src/actions.ts +182 -0
  3636. package/extensions/googlechat/src/api.test.ts +62 -0
  3637. package/extensions/googlechat/src/api.ts +283 -0
  3638. package/extensions/googlechat/src/auth.ts +124 -0
  3639. package/extensions/googlechat/src/channel.ts +584 -0
  3640. package/extensions/googlechat/src/monitor.test.ts +23 -0
  3641. package/extensions/googlechat/src/monitor.ts +951 -0
  3642. package/extensions/googlechat/src/onboarding.ts +270 -0
  3643. package/extensions/googlechat/src/runtime.ts +14 -0
  3644. package/extensions/googlechat/src/targets.test.ts +33 -0
  3645. package/extensions/googlechat/src/targets.ts +65 -0
  3646. package/extensions/googlechat/src/types.config.ts +3 -0
  3647. package/extensions/googlechat/src/types.ts +73 -0
  3648. package/extensions/imessage/index.ts +18 -0
  3649. package/extensions/imessage/node_modules/.bin/claw +21 -0
  3650. package/extensions/imessage/node_modules/.bin/claw.CMD +12 -0
  3651. package/extensions/imessage/node_modules/.bin/claw.ps1 +41 -0
  3652. package/extensions/imessage/openclaw.plugin.json +9 -0
  3653. package/extensions/imessage/package.json +14 -0
  3654. package/extensions/imessage/src/channel.ts +295 -0
  3655. package/extensions/imessage/src/runtime.ts +14 -0
  3656. package/extensions/line/index.ts +20 -0
  3657. package/extensions/line/node_modules/.bin/claw +21 -0
  3658. package/extensions/line/node_modules/.bin/claw.CMD +12 -0
  3659. package/extensions/line/node_modules/.bin/claw.ps1 +41 -0
  3660. package/extensions/line/openclaw.plugin.json +9 -0
  3661. package/extensions/line/package.json +29 -0
  3662. package/extensions/line/src/card-command.ts +344 -0
  3663. package/extensions/line/src/channel.logout.test.ts +97 -0
  3664. package/extensions/line/src/channel.sendPayload.test.ts +306 -0
  3665. package/extensions/line/src/channel.ts +782 -0
  3666. package/extensions/line/src/runtime.ts +14 -0
  3667. package/extensions/llm-task/README.md +97 -0
  3668. package/extensions/llm-task/index.ts +7 -0
  3669. package/extensions/llm-task/node_modules/.bin/claw +21 -0
  3670. package/extensions/llm-task/node_modules/.bin/claw.CMD +12 -0
  3671. package/extensions/llm-task/node_modules/.bin/claw.ps1 +41 -0
  3672. package/extensions/llm-task/openclaw.plugin.json +21 -0
  3673. package/extensions/llm-task/package.json +14 -0
  3674. package/extensions/llm-task/src/llm-task-tool.test.ts +124 -0
  3675. package/extensions/llm-task/src/llm-task-tool.ts +240 -0
  3676. package/extensions/lobster/README.md +75 -0
  3677. package/extensions/lobster/SKILL.md +97 -0
  3678. package/extensions/lobster/index.ts +15 -0
  3679. package/extensions/lobster/node_modules/.bin/claw +21 -0
  3680. package/extensions/lobster/node_modules/.bin/claw.CMD +12 -0
  3681. package/extensions/lobster/node_modules/.bin/claw.ps1 +41 -0
  3682. package/extensions/lobster/openclaw.plugin.json +10 -0
  3683. package/extensions/lobster/package.json +14 -0
  3684. package/extensions/lobster/src/lobster-tool.test.ts +248 -0
  3685. package/extensions/lobster/src/lobster-tool.ts +329 -0
  3686. package/extensions/matrix/CHANGELOG.md +75 -0
  3687. package/extensions/matrix/index.ts +18 -0
  3688. package/extensions/matrix/node_modules/.bin/claw +21 -0
  3689. package/extensions/matrix/node_modules/.bin/claw.CMD +12 -0
  3690. package/extensions/matrix/node_modules/.bin/claw.ps1 +41 -0
  3691. package/extensions/matrix/node_modules/.bin/markdown-it +21 -0
  3692. package/extensions/matrix/node_modules/.bin/markdown-it.CMD +12 -0
  3693. package/extensions/matrix/node_modules/.bin/markdown-it.ps1 +41 -0
  3694. package/extensions/matrix/openclaw.plugin.json +9 -0
  3695. package/extensions/matrix/package.json +36 -0
  3696. package/extensions/matrix/src/actions.ts +195 -0
  3697. package/extensions/matrix/src/channel.directory.test.ts +66 -0
  3698. package/extensions/matrix/src/channel.ts +444 -0
  3699. package/extensions/matrix/src/config-schema.ts +62 -0
  3700. package/extensions/matrix/src/directory-live.ts +189 -0
  3701. package/extensions/matrix/src/group-mentions.ts +67 -0
  3702. package/extensions/matrix/src/matrix/accounts.test.ts +83 -0
  3703. package/extensions/matrix/src/matrix/accounts.ts +65 -0
  3704. package/extensions/matrix/src/matrix/actions/client.ts +57 -0
  3705. package/extensions/matrix/src/matrix/actions/messages.ts +128 -0
  3706. package/extensions/matrix/src/matrix/actions/pins.ts +76 -0
  3707. package/extensions/matrix/src/matrix/actions/reactions.ts +96 -0
  3708. package/extensions/matrix/src/matrix/actions/room.ts +85 -0
  3709. package/extensions/matrix/src/matrix/actions/summary.ts +76 -0
  3710. package/extensions/matrix/src/matrix/actions/types.ts +84 -0
  3711. package/extensions/matrix/src/matrix/actions.ts +15 -0
  3712. package/extensions/matrix/src/matrix/active-client.ts +11 -0
  3713. package/extensions/matrix/src/matrix/client/config.ts +161 -0
  3714. package/extensions/matrix/src/matrix/client/create-client.ts +125 -0
  3715. package/extensions/matrix/src/matrix/client/logging.ts +36 -0
  3716. package/extensions/matrix/src/matrix/client/runtime.ts +4 -0
  3717. package/extensions/matrix/src/matrix/client/shared.ts +171 -0
  3718. package/extensions/matrix/src/matrix/client/storage.ts +132 -0
  3719. package/extensions/matrix/src/matrix/client/types.ts +34 -0
  3720. package/extensions/matrix/src/matrix/client.test.ts +57 -0
  3721. package/extensions/matrix/src/matrix/client.ts +5 -0
  3722. package/extensions/matrix/src/matrix/credentials.ts +106 -0
  3723. package/extensions/matrix/src/matrix/deps.ts +61 -0
  3724. package/extensions/matrix/src/matrix/format.test.ts +34 -0
  3725. package/extensions/matrix/src/matrix/format.ts +22 -0
  3726. package/extensions/matrix/src/matrix/index.ts +11 -0
  3727. package/extensions/matrix/src/matrix/monitor/allowlist.ts +62 -0
  3728. package/extensions/matrix/src/matrix/monitor/auto-join.ts +72 -0
  3729. package/extensions/matrix/src/matrix/monitor/direct.ts +104 -0
  3730. package/extensions/matrix/src/matrix/monitor/events.ts +102 -0
  3731. package/extensions/matrix/src/matrix/monitor/handler.ts +671 -0
  3732. package/extensions/matrix/src/matrix/monitor/index.ts +292 -0
  3733. package/extensions/matrix/src/matrix/monitor/location.ts +101 -0
  3734. package/extensions/matrix/src/matrix/monitor/media.test.ts +103 -0
  3735. package/extensions/matrix/src/matrix/monitor/media.ts +114 -0
  3736. package/extensions/matrix/src/matrix/monitor/mentions.ts +31 -0
  3737. package/extensions/matrix/src/matrix/monitor/replies.ts +98 -0
  3738. package/extensions/matrix/src/matrix/monitor/room-info.ts +55 -0
  3739. package/extensions/matrix/src/matrix/monitor/rooms.ts +48 -0
  3740. package/extensions/matrix/src/matrix/monitor/threads.ts +68 -0
  3741. package/extensions/matrix/src/matrix/monitor/types.ts +39 -0
  3742. package/extensions/matrix/src/matrix/poll-types.test.ts +22 -0
  3743. package/extensions/matrix/src/matrix/poll-types.ts +166 -0
  3744. package/extensions/matrix/src/matrix/probe.ts +70 -0
  3745. package/extensions/matrix/src/matrix/send/client.ts +67 -0
  3746. package/extensions/matrix/src/matrix/send/formatting.ts +89 -0
  3747. package/extensions/matrix/src/matrix/send/media.ts +230 -0
  3748. package/extensions/matrix/src/matrix/send/targets.test.ts +99 -0
  3749. package/extensions/matrix/src/matrix/send/targets.ts +137 -0
  3750. package/extensions/matrix/src/matrix/send/types.ts +109 -0
  3751. package/extensions/matrix/src/matrix/send.test.ts +172 -0
  3752. package/extensions/matrix/src/matrix/send.ts +261 -0
  3753. package/extensions/matrix/src/onboarding.ts +442 -0
  3754. package/extensions/matrix/src/outbound.ts +53 -0
  3755. package/extensions/matrix/src/resolve-targets.ts +90 -0
  3756. package/extensions/matrix/src/runtime.ts +14 -0
  3757. package/extensions/matrix/src/tool-actions.ts +165 -0
  3758. package/extensions/matrix/src/types.ts +95 -0
  3759. package/extensions/mattermost/index.ts +18 -0
  3760. package/extensions/mattermost/node_modules/.bin/claw +21 -0
  3761. package/extensions/mattermost/node_modules/.bin/claw.CMD +12 -0
  3762. package/extensions/mattermost/node_modules/.bin/claw.ps1 +41 -0
  3763. package/extensions/mattermost/openclaw.plugin.json +9 -0
  3764. package/extensions/mattermost/package.json +28 -0
  3765. package/extensions/mattermost/src/channel.test.ts +49 -0
  3766. package/extensions/mattermost/src/channel.ts +338 -0
  3767. package/extensions/mattermost/src/config-schema.ts +56 -0
  3768. package/extensions/mattermost/src/group-mentions.ts +16 -0
  3769. package/extensions/mattermost/src/mattermost/accounts.ts +129 -0
  3770. package/extensions/mattermost/src/mattermost/client.ts +220 -0
  3771. package/extensions/mattermost/src/mattermost/index.ts +9 -0
  3772. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +168 -0
  3773. package/extensions/mattermost/src/mattermost/monitor.ts +989 -0
  3774. package/extensions/mattermost/src/mattermost/probe.ts +74 -0
  3775. package/extensions/mattermost/src/mattermost/send.ts +231 -0
  3776. package/extensions/mattermost/src/normalize.ts +46 -0
  3777. package/extensions/mattermost/src/onboarding-helpers.ts +44 -0
  3778. package/extensions/mattermost/src/onboarding.ts +187 -0
  3779. package/extensions/mattermost/src/runtime.ts +14 -0
  3780. package/extensions/mattermost/src/types.ts +50 -0
  3781. package/extensions/memory-core/index.ts +38 -0
  3782. package/extensions/memory-core/node_modules/.bin/claw +21 -0
  3783. package/extensions/memory-core/node_modules/.bin/claw.CMD +12 -0
  3784. package/extensions/memory-core/node_modules/.bin/claw.ps1 +41 -0
  3785. package/extensions/memory-core/openclaw.plugin.json +9 -0
  3786. package/extensions/memory-core/package.json +17 -0
  3787. package/extensions/memory-lancedb/config.ts +139 -0
  3788. package/extensions/memory-lancedb/index.test.ts +286 -0
  3789. package/extensions/memory-lancedb/index.ts +609 -0
  3790. package/extensions/memory-lancedb/node_modules/.bin/claw +21 -0
  3791. package/extensions/memory-lancedb/node_modules/.bin/claw.CMD +12 -0
  3792. package/extensions/memory-lancedb/node_modules/.bin/claw.ps1 +41 -0
  3793. package/extensions/memory-lancedb/node_modules/.bin/openai +21 -0
  3794. package/extensions/memory-lancedb/node_modules/.bin/openai.CMD +12 -0
  3795. package/extensions/memory-lancedb/node_modules/.bin/openai.ps1 +41 -0
  3796. package/extensions/memory-lancedb/openclaw.plugin.json +60 -0
  3797. package/extensions/memory-lancedb/package.json +19 -0
  3798. package/extensions/minimax-portal-auth/README.md +33 -0
  3799. package/extensions/minimax-portal-auth/index.ts +156 -0
  3800. package/extensions/minimax-portal-auth/node_modules/.bin/claw +21 -0
  3801. package/extensions/minimax-portal-auth/node_modules/.bin/claw.CMD +12 -0
  3802. package/extensions/minimax-portal-auth/node_modules/.bin/claw.ps1 +41 -0
  3803. package/extensions/minimax-portal-auth/oauth.ts +247 -0
  3804. package/extensions/minimax-portal-auth/openclaw.plugin.json +9 -0
  3805. package/extensions/minimax-portal-auth/package.json +14 -0
  3806. package/extensions/msteams/CHANGELOG.md +71 -0
  3807. package/extensions/msteams/index.ts +18 -0
  3808. package/extensions/msteams/node_modules/.bin/claw +21 -0
  3809. package/extensions/msteams/node_modules/.bin/claw.CMD +12 -0
  3810. package/extensions/msteams/node_modules/.bin/claw.ps1 +41 -0
  3811. package/extensions/msteams/openclaw.plugin.json +9 -0
  3812. package/extensions/msteams/package.json +39 -0
  3813. package/extensions/msteams/src/attachments/download.ts +238 -0
  3814. package/extensions/msteams/src/attachments/graph.ts +351 -0
  3815. package/extensions/msteams/src/attachments/html.ts +90 -0
  3816. package/extensions/msteams/src/attachments/payload.ts +22 -0
  3817. package/extensions/msteams/src/attachments/shared.ts +271 -0
  3818. package/extensions/msteams/src/attachments/types.ts +37 -0
  3819. package/extensions/msteams/src/attachments.test.ts +424 -0
  3820. package/extensions/msteams/src/attachments.ts +18 -0
  3821. package/extensions/msteams/src/channel.directory.test.ts +50 -0
  3822. package/extensions/msteams/src/channel.ts +460 -0
  3823. package/extensions/msteams/src/conversation-store-fs.test.ts +90 -0
  3824. package/extensions/msteams/src/conversation-store-fs.ts +165 -0
  3825. package/extensions/msteams/src/conversation-store-memory.ts +47 -0
  3826. package/extensions/msteams/src/conversation-store.ts +41 -0
  3827. package/extensions/msteams/src/directory-live.ts +206 -0
  3828. package/extensions/msteams/src/errors.test.ts +46 -0
  3829. package/extensions/msteams/src/errors.ts +190 -0
  3830. package/extensions/msteams/src/file-consent-helpers.test.ts +243 -0
  3831. package/extensions/msteams/src/file-consent-helpers.ts +73 -0
  3832. package/extensions/msteams/src/file-consent.ts +126 -0
  3833. package/extensions/msteams/src/graph-chat.ts +53 -0
  3834. package/extensions/msteams/src/graph-upload.ts +453 -0
  3835. package/extensions/msteams/src/inbound.test.ts +67 -0
  3836. package/extensions/msteams/src/inbound.ts +48 -0
  3837. package/extensions/msteams/src/index.ts +4 -0
  3838. package/extensions/msteams/src/media-helpers.test.ts +190 -0
  3839. package/extensions/msteams/src/media-helpers.ts +87 -0
  3840. package/extensions/msteams/src/messenger.test.ts +249 -0
  3841. package/extensions/msteams/src/messenger.ts +495 -0
  3842. package/extensions/msteams/src/monitor-handler/inbound-media.ts +125 -0
  3843. package/extensions/msteams/src/monitor-handler/message-handler.ts +640 -0
  3844. package/extensions/msteams/src/monitor-handler.ts +162 -0
  3845. package/extensions/msteams/src/monitor-types.ts +5 -0
  3846. package/extensions/msteams/src/monitor.ts +295 -0
  3847. package/extensions/msteams/src/onboarding.ts +432 -0
  3848. package/extensions/msteams/src/outbound.ts +47 -0
  3849. package/extensions/msteams/src/pending-uploads.ts +89 -0
  3850. package/extensions/msteams/src/policy.test.ts +210 -0
  3851. package/extensions/msteams/src/policy.ts +273 -0
  3852. package/extensions/msteams/src/polls-store-memory.ts +32 -0
  3853. package/extensions/msteams/src/polls-store.test.ts +40 -0
  3854. package/extensions/msteams/src/polls.test.ts +74 -0
  3855. package/extensions/msteams/src/polls.ts +316 -0
  3856. package/extensions/msteams/src/probe.test.ts +59 -0
  3857. package/extensions/msteams/src/probe.ts +107 -0
  3858. package/extensions/msteams/src/reply-dispatcher.ts +130 -0
  3859. package/extensions/msteams/src/resolve-allowlist.ts +297 -0
  3860. package/extensions/msteams/src/runtime.ts +14 -0
  3861. package/extensions/msteams/src/sdk-types.ts +19 -0
  3862. package/extensions/msteams/src/sdk.ts +33 -0
  3863. package/extensions/msteams/src/send-context.ts +164 -0
  3864. package/extensions/msteams/src/send.ts +519 -0
  3865. package/extensions/msteams/src/sent-message-cache.test.ts +16 -0
  3866. package/extensions/msteams/src/sent-message-cache.ts +47 -0
  3867. package/extensions/msteams/src/storage.ts +26 -0
  3868. package/extensions/msteams/src/store-fs.ts +84 -0
  3869. package/extensions/msteams/src/token.ts +19 -0
  3870. package/extensions/nextcloud-talk/index.ts +18 -0
  3871. package/extensions/nextcloud-talk/node_modules/.bin/claw +21 -0
  3872. package/extensions/nextcloud-talk/node_modules/.bin/claw.CMD +12 -0
  3873. package/extensions/nextcloud-talk/node_modules/.bin/claw.ps1 +41 -0
  3874. package/extensions/nextcloud-talk/openclaw.plugin.json +9 -0
  3875. package/extensions/nextcloud-talk/package.json +33 -0
  3876. package/extensions/nextcloud-talk/src/accounts.ts +176 -0
  3877. package/extensions/nextcloud-talk/src/channel.ts +410 -0
  3878. package/extensions/nextcloud-talk/src/config-schema.ts +78 -0
  3879. package/extensions/nextcloud-talk/src/format.ts +79 -0
  3880. package/extensions/nextcloud-talk/src/inbound.ts +321 -0
  3881. package/extensions/nextcloud-talk/src/monitor.ts +248 -0
  3882. package/extensions/nextcloud-talk/src/normalize.ts +39 -0
  3883. package/extensions/nextcloud-talk/src/onboarding.ts +344 -0
  3884. package/extensions/nextcloud-talk/src/policy.ts +189 -0
  3885. package/extensions/nextcloud-talk/src/room-info.ts +127 -0
  3886. package/extensions/nextcloud-talk/src/runtime.ts +14 -0
  3887. package/extensions/nextcloud-talk/src/send.ts +210 -0
  3888. package/extensions/nextcloud-talk/src/signature.ts +73 -0
  3889. package/extensions/nextcloud-talk/src/types.ts +179 -0
  3890. package/extensions/nostr/CHANGELOG.md +62 -0
  3891. package/extensions/nostr/README.md +136 -0
  3892. package/extensions/nostr/index.ts +69 -0
  3893. package/extensions/nostr/node_modules/.bin/claw +21 -0
  3894. package/extensions/nostr/node_modules/.bin/claw.CMD +12 -0
  3895. package/extensions/nostr/node_modules/.bin/claw.ps1 +41 -0
  3896. package/extensions/nostr/openclaw.plugin.json +9 -0
  3897. package/extensions/nostr/package.json +34 -0
  3898. package/extensions/nostr/src/channel.test.ts +151 -0
  3899. package/extensions/nostr/src/channel.ts +354 -0
  3900. package/extensions/nostr/src/config-schema.ts +90 -0
  3901. package/extensions/nostr/src/metrics.ts +478 -0
  3902. package/extensions/nostr/src/nostr-bus.fuzz.test.ts +533 -0
  3903. package/extensions/nostr/src/nostr-bus.integration.test.ts +448 -0
  3904. package/extensions/nostr/src/nostr-bus.test.ts +199 -0
  3905. package/extensions/nostr/src/nostr-bus.ts +716 -0
  3906. package/extensions/nostr/src/nostr-profile-http.test.ts +379 -0
  3907. package/extensions/nostr/src/nostr-profile-http.ts +520 -0
  3908. package/extensions/nostr/src/nostr-profile-import.test.ts +120 -0
  3909. package/extensions/nostr/src/nostr-profile-import.ts +263 -0
  3910. package/extensions/nostr/src/nostr-profile.fuzz.test.ts +477 -0
  3911. package/extensions/nostr/src/nostr-profile.test.ts +410 -0
  3912. package/extensions/nostr/src/nostr-profile.ts +277 -0
  3913. package/extensions/nostr/src/nostr-state-store.test.ts +133 -0
  3914. package/extensions/nostr/src/nostr-state-store.ts +227 -0
  3915. package/extensions/nostr/src/runtime.ts +14 -0
  3916. package/extensions/nostr/src/seen-tracker.ts +303 -0
  3917. package/extensions/nostr/src/types.test.ts +157 -0
  3918. package/extensions/nostr/src/types.ts +101 -0
  3919. package/extensions/nostr/test/setup.ts +5 -0
  3920. package/extensions/open-prose/README.md +25 -0
  3921. package/extensions/open-prose/index.ts +5 -0
  3922. package/extensions/open-prose/node_modules/.bin/claw +21 -0
  3923. package/extensions/open-prose/node_modules/.bin/claw.CMD +12 -0
  3924. package/extensions/open-prose/node_modules/.bin/claw.ps1 +41 -0
  3925. package/extensions/open-prose/openclaw.plugin.json +11 -0
  3926. package/extensions/open-prose/package.json +14 -0
  3927. package/extensions/open-prose/skills/prose/LICENSE +21 -0
  3928. package/extensions/open-prose/skills/prose/SKILL.md +323 -0
  3929. package/extensions/open-prose/skills/prose/alt-borges.md +141 -0
  3930. package/extensions/open-prose/skills/prose/alts/arabian-nights.md +358 -0
  3931. package/extensions/open-prose/skills/prose/alts/borges.md +360 -0
  3932. package/extensions/open-prose/skills/prose/alts/folk.md +322 -0
  3933. package/extensions/open-prose/skills/prose/alts/homer.md +346 -0
  3934. package/extensions/open-prose/skills/prose/alts/kafka.md +373 -0
  3935. package/extensions/open-prose/skills/prose/compiler.md +2971 -0
  3936. package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +4 -0
  3937. package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +6 -0
  3938. package/extensions/open-prose/skills/prose/examples/03-code-review.prose +17 -0
  3939. package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +14 -0
  3940. package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +20 -0
  3941. package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +17 -0
  3942. package/extensions/open-prose/skills/prose/examples/07-refactor.prose +20 -0
  3943. package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +20 -0
  3944. package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +25 -0
  3945. package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +32 -0
  3946. package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +27 -0
  3947. package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +43 -0
  3948. package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +51 -0
  3949. package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +48 -0
  3950. package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +23 -0
  3951. package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +19 -0
  3952. package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +19 -0
  3953. package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +36 -0
  3954. package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +71 -0
  3955. package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +20 -0
  3956. package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +35 -0
  3957. package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +51 -0
  3958. package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +63 -0
  3959. package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +86 -0
  3960. package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +114 -0
  3961. package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +100 -0
  3962. package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +105 -0
  3963. package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +37 -0
  3964. package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +1572 -0
  3965. package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +218 -0
  3966. package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +42 -0
  3967. package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +145 -0
  3968. package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +168 -0
  3969. package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +204 -0
  3970. package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +296 -0
  3971. package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +237 -0
  3972. package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +1474 -0
  3973. package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +455 -0
  3974. package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +277 -0
  3975. package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +32 -0
  3976. package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +38 -0
  3977. package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +46 -0
  3978. package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +50 -0
  3979. package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +261 -0
  3980. package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +159 -0
  3981. package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +637 -0
  3982. package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +148 -0
  3983. package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +225 -0
  3984. package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +356 -0
  3985. package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +445 -0
  3986. package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +210 -0
  3987. package/extensions/open-prose/skills/prose/examples/README.md +391 -0
  3988. package/extensions/open-prose/skills/prose/examples/roadmap/README.md +22 -0
  3989. package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +20 -0
  3990. package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +18 -0
  3991. package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +17 -0
  3992. package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +223 -0
  3993. package/extensions/open-prose/skills/prose/guidance/antipatterns.md +951 -0
  3994. package/extensions/open-prose/skills/prose/guidance/patterns.md +700 -0
  3995. package/extensions/open-prose/skills/prose/guidance/system-prompt.md +180 -0
  3996. package/extensions/open-prose/skills/prose/help.md +144 -0
  3997. package/extensions/open-prose/skills/prose/lib/README.md +108 -0
  3998. package/extensions/open-prose/skills/prose/lib/calibrator.prose +215 -0
  3999. package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +174 -0
  4000. package/extensions/open-prose/skills/prose/lib/error-forensics.prose +250 -0
  4001. package/extensions/open-prose/skills/prose/lib/inspector.prose +196 -0
  4002. package/extensions/open-prose/skills/prose/lib/profiler.prose +460 -0
  4003. package/extensions/open-prose/skills/prose/lib/program-improver.prose +275 -0
  4004. package/extensions/open-prose/skills/prose/lib/project-memory.prose +118 -0
  4005. package/extensions/open-prose/skills/prose/lib/user-memory.prose +93 -0
  4006. package/extensions/open-prose/skills/prose/lib/vm-improver.prose +243 -0
  4007. package/extensions/open-prose/skills/prose/primitives/session.md +593 -0
  4008. package/extensions/open-prose/skills/prose/prose.md +1237 -0
  4009. package/extensions/open-prose/skills/prose/state/filesystem.md +498 -0
  4010. package/extensions/open-prose/skills/prose/state/in-context.md +384 -0
  4011. package/extensions/open-prose/skills/prose/state/postgres.md +880 -0
  4012. package/extensions/open-prose/skills/prose/state/sqlite.md +574 -0
  4013. package/extensions/qwen-portal-auth/README.md +24 -0
  4014. package/extensions/qwen-portal-auth/index.ts +131 -0
  4015. package/extensions/qwen-portal-auth/oauth.ts +190 -0
  4016. package/extensions/qwen-portal-auth/openclaw.plugin.json +9 -0
  4017. package/extensions/signal/index.ts +18 -0
  4018. package/extensions/signal/node_modules/.bin/claw +21 -0
  4019. package/extensions/signal/node_modules/.bin/claw.CMD +12 -0
  4020. package/extensions/signal/node_modules/.bin/claw.ps1 +41 -0
  4021. package/extensions/signal/openclaw.plugin.json +9 -0
  4022. package/extensions/signal/package.json +14 -0
  4023. package/extensions/signal/src/channel.ts +316 -0
  4024. package/extensions/signal/src/runtime.ts +14 -0
  4025. package/extensions/slack/index.ts +18 -0
  4026. package/extensions/slack/node_modules/.bin/claw +21 -0
  4027. package/extensions/slack/node_modules/.bin/claw.CMD +12 -0
  4028. package/extensions/slack/node_modules/.bin/claw.ps1 +41 -0
  4029. package/extensions/slack/openclaw.plugin.json +9 -0
  4030. package/extensions/slack/package.json +14 -0
  4031. package/extensions/slack/src/channel.ts +605 -0
  4032. package/extensions/slack/src/runtime.ts +14 -0
  4033. package/extensions/telegram/index.ts +18 -0
  4034. package/extensions/telegram/node_modules/.bin/claw +21 -0
  4035. package/extensions/telegram/node_modules/.bin/claw.CMD +12 -0
  4036. package/extensions/telegram/node_modules/.bin/claw.ps1 +41 -0
  4037. package/extensions/telegram/openclaw.plugin.json +9 -0
  4038. package/extensions/telegram/package.json +14 -0
  4039. package/extensions/telegram/src/channel.ts +492 -0
  4040. package/extensions/telegram/src/runtime.ts +14 -0
  4041. package/extensions/tlon/README.md +5 -0
  4042. package/extensions/tlon/index.ts +18 -0
  4043. package/extensions/tlon/node_modules/.bin/claw +21 -0
  4044. package/extensions/tlon/node_modules/.bin/claw.CMD +12 -0
  4045. package/extensions/tlon/node_modules/.bin/claw.ps1 +41 -0
  4046. package/extensions/tlon/openclaw.plugin.json +9 -0
  4047. package/extensions/tlon/package.json +33 -0
  4048. package/extensions/tlon/src/channel.ts +393 -0
  4049. package/extensions/tlon/src/config-schema.test.ts +32 -0
  4050. package/extensions/tlon/src/config-schema.ts +43 -0
  4051. package/extensions/tlon/src/monitor/discovery.ts +75 -0
  4052. package/extensions/tlon/src/monitor/history.ts +89 -0
  4053. package/extensions/tlon/src/monitor/index.ts +553 -0
  4054. package/extensions/tlon/src/monitor/processed-messages.test.ts +24 -0
  4055. package/extensions/tlon/src/monitor/processed-messages.ts +46 -0
  4056. package/extensions/tlon/src/monitor/utils.ts +99 -0
  4057. package/extensions/tlon/src/onboarding.ts +215 -0
  4058. package/extensions/tlon/src/runtime.ts +14 -0
  4059. package/extensions/tlon/src/targets.ts +89 -0
  4060. package/extensions/tlon/src/types.ts +92 -0
  4061. package/extensions/tlon/src/urbit/auth.ts +18 -0
  4062. package/extensions/tlon/src/urbit/http-api.ts +38 -0
  4063. package/extensions/tlon/src/urbit/send.test.ts +38 -0
  4064. package/extensions/tlon/src/urbit/send.ts +131 -0
  4065. package/extensions/tlon/src/urbit/sse-client.test.ts +41 -0
  4066. package/extensions/tlon/src/urbit/sse-client.ts +379 -0
  4067. package/extensions/twitch/CHANGELOG.md +33 -0
  4068. package/extensions/twitch/README.md +89 -0
  4069. package/extensions/twitch/index.ts +20 -0
  4070. package/extensions/twitch/node_modules/.bin/claw +21 -0
  4071. package/extensions/twitch/node_modules/.bin/claw.CMD +12 -0
  4072. package/extensions/twitch/node_modules/.bin/claw.ps1 +41 -0
  4073. package/extensions/twitch/openclaw.plugin.json +9 -0
  4074. package/extensions/twitch/package.json +20 -0
  4075. package/extensions/twitch/src/access-control.test.ts +489 -0
  4076. package/extensions/twitch/src/access-control.ts +162 -0
  4077. package/extensions/twitch/src/actions.ts +173 -0
  4078. package/extensions/twitch/src/client-manager-registry.ts +115 -0
  4079. package/extensions/twitch/src/config-schema.ts +82 -0
  4080. package/extensions/twitch/src/config.test.ts +88 -0
  4081. package/extensions/twitch/src/config.ts +116 -0
  4082. package/extensions/twitch/src/monitor.ts +261 -0
  4083. package/extensions/twitch/src/onboarding.test.ts +311 -0
  4084. package/extensions/twitch/src/onboarding.ts +417 -0
  4085. package/extensions/twitch/src/outbound.test.ts +373 -0
  4086. package/extensions/twitch/src/outbound.ts +186 -0
  4087. package/extensions/twitch/src/plugin.test.ts +39 -0
  4088. package/extensions/twitch/src/plugin.ts +274 -0
  4089. package/extensions/twitch/src/probe.test.ts +195 -0
  4090. package/extensions/twitch/src/probe.ts +120 -0
  4091. package/extensions/twitch/src/resolver.ts +137 -0
  4092. package/extensions/twitch/src/runtime.ts +14 -0
  4093. package/extensions/twitch/src/send.test.ts +289 -0
  4094. package/extensions/twitch/src/send.ts +136 -0
  4095. package/extensions/twitch/src/status.test.ts +270 -0
  4096. package/extensions/twitch/src/status.ts +178 -0
  4097. package/extensions/twitch/src/token.test.ts +171 -0
  4098. package/extensions/twitch/src/token.ts +91 -0
  4099. package/extensions/twitch/src/twitch-client.test.ts +580 -0
  4100. package/extensions/twitch/src/twitch-client.ts +277 -0
  4101. package/extensions/twitch/src/types.ts +141 -0
  4102. package/extensions/twitch/src/utils/markdown.ts +98 -0
  4103. package/extensions/twitch/src/utils/twitch.ts +78 -0
  4104. package/extensions/twitch/test/setup.ts +7 -0
  4105. package/extensions/voice-call/CHANGELOG.md +97 -0
  4106. package/extensions/voice-call/README.md +139 -0
  4107. package/extensions/voice-call/index.ts +493 -0
  4108. package/extensions/voice-call/node_modules/.bin/claw +21 -0
  4109. package/extensions/voice-call/node_modules/.bin/claw.CMD +12 -0
  4110. package/extensions/voice-call/node_modules/.bin/claw.ps1 +41 -0
  4111. package/extensions/voice-call/openclaw.plugin.json +559 -0
  4112. package/extensions/voice-call/package.json +19 -0
  4113. package/extensions/voice-call/src/cli.ts +281 -0
  4114. package/extensions/voice-call/src/config.test.ts +202 -0
  4115. package/extensions/voice-call/src/config.ts +480 -0
  4116. package/extensions/voice-call/src/core-bridge.ts +201 -0
  4117. package/extensions/voice-call/src/manager/context.ts +21 -0
  4118. package/extensions/voice-call/src/manager/events.ts +187 -0
  4119. package/extensions/voice-call/src/manager/lookup.ts +35 -0
  4120. package/extensions/voice-call/src/manager/outbound.ts +276 -0
  4121. package/extensions/voice-call/src/manager/state.ts +48 -0
  4122. package/extensions/voice-call/src/manager/store.ts +92 -0
  4123. package/extensions/voice-call/src/manager/timers.ts +89 -0
  4124. package/extensions/voice-call/src/manager/twiml.ts +9 -0
  4125. package/extensions/voice-call/src/manager.test.ts +107 -0
  4126. package/extensions/voice-call/src/manager.ts +867 -0
  4127. package/extensions/voice-call/src/media-stream.test.ts +97 -0
  4128. package/extensions/voice-call/src/media-stream.ts +381 -0
  4129. package/extensions/voice-call/src/providers/base.ts +67 -0
  4130. package/extensions/voice-call/src/providers/index.ts +10 -0
  4131. package/extensions/voice-call/src/providers/mock.ts +166 -0
  4132. package/extensions/voice-call/src/providers/plivo.test.ts +28 -0
  4133. package/extensions/voice-call/src/providers/plivo.ts +503 -0
  4134. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +311 -0
  4135. package/extensions/voice-call/src/providers/telnyx.ts +359 -0
  4136. package/extensions/voice-call/src/providers/tts-openai.ts +259 -0
  4137. package/extensions/voice-call/src/providers/twilio/api.ts +42 -0
  4138. package/extensions/voice-call/src/providers/twilio/webhook.ts +29 -0
  4139. package/extensions/voice-call/src/providers/twilio.test.ts +61 -0
  4140. package/extensions/voice-call/src/providers/twilio.ts +584 -0
  4141. package/extensions/voice-call/src/response-generator.ts +160 -0
  4142. package/extensions/voice-call/src/runtime.ts +204 -0
  4143. package/extensions/voice-call/src/telephony-audio.ts +90 -0
  4144. package/extensions/voice-call/src/telephony-tts.ts +104 -0
  4145. package/extensions/voice-call/src/tunnel.ts +315 -0
  4146. package/extensions/voice-call/src/types.ts +273 -0
  4147. package/extensions/voice-call/src/utils.ts +14 -0
  4148. package/extensions/voice-call/src/voice-mapping.ts +67 -0
  4149. package/extensions/voice-call/src/webhook-security.test.ts +253 -0
  4150. package/extensions/voice-call/src/webhook-security.ts +466 -0
  4151. package/extensions/voice-call/src/webhook.ts +457 -0
  4152. package/extensions/whatsapp/index.ts +18 -0
  4153. package/extensions/whatsapp/node_modules/.bin/claw +21 -0
  4154. package/extensions/whatsapp/node_modules/.bin/claw.CMD +12 -0
  4155. package/extensions/whatsapp/node_modules/.bin/claw.ps1 +41 -0
  4156. package/extensions/whatsapp/openclaw.plugin.json +9 -0
  4157. package/extensions/whatsapp/package.json +14 -0
  4158. package/extensions/whatsapp/src/channel.ts +509 -0
  4159. package/extensions/whatsapp/src/runtime.ts +14 -0
  4160. package/extensions/zalo/CHANGELOG.md +77 -0
  4161. package/extensions/zalo/README.md +50 -0
  4162. package/extensions/zalo/index.ts +20 -0
  4163. package/extensions/zalo/node_modules/.bin/claw +21 -0
  4164. package/extensions/zalo/node_modules/.bin/claw.CMD +12 -0
  4165. package/extensions/zalo/node_modules/.bin/claw.ps1 +41 -0
  4166. package/extensions/zalo/openclaw.plugin.json +9 -0
  4167. package/extensions/zalo/package.json +36 -0
  4168. package/extensions/zalo/src/accounts.ts +81 -0
  4169. package/extensions/zalo/src/actions.ts +68 -0
  4170. package/extensions/zalo/src/api.ts +208 -0
  4171. package/extensions/zalo/src/channel.directory.test.ts +45 -0
  4172. package/extensions/zalo/src/channel.ts +415 -0
  4173. package/extensions/zalo/src/config-schema.ts +24 -0
  4174. package/extensions/zalo/src/monitor.ts +755 -0
  4175. package/extensions/zalo/src/monitor.webhook.test.ts +75 -0
  4176. package/extensions/zalo/src/onboarding.ts +402 -0
  4177. package/extensions/zalo/src/probe.ts +46 -0
  4178. package/extensions/zalo/src/proxy.ts +22 -0
  4179. package/extensions/zalo/src/runtime.ts +14 -0
  4180. package/extensions/zalo/src/send.ts +125 -0
  4181. package/extensions/zalo/src/status-issues.ts +53 -0
  4182. package/extensions/zalo/src/token.ts +65 -0
  4183. package/extensions/zalo/src/types.ts +42 -0
  4184. package/extensions/zalouser/CHANGELOG.md +49 -0
  4185. package/extensions/zalouser/README.md +225 -0
  4186. package/extensions/zalouser/index.ts +32 -0
  4187. package/extensions/zalouser/node_modules/.bin/claw +21 -0
  4188. package/extensions/zalouser/node_modules/.bin/claw.CMD +12 -0
  4189. package/extensions/zalouser/node_modules/.bin/claw.ps1 +41 -0
  4190. package/extensions/zalouser/openclaw.plugin.json +9 -0
  4191. package/extensions/zalouser/package.json +36 -0
  4192. package/extensions/zalouser/src/accounts.ts +136 -0
  4193. package/extensions/zalouser/src/channel.test.ts +19 -0
  4194. package/extensions/zalouser/src/channel.ts +686 -0
  4195. package/extensions/zalouser/src/config-schema.ts +27 -0
  4196. package/extensions/zalouser/src/monitor.ts +591 -0
  4197. package/extensions/zalouser/src/onboarding.ts +505 -0
  4198. package/extensions/zalouser/src/probe.ts +28 -0
  4199. package/extensions/zalouser/src/runtime.ts +14 -0
  4200. package/extensions/zalouser/src/send.ts +160 -0
  4201. package/extensions/zalouser/src/status-issues.test.ts +58 -0
  4202. package/extensions/zalouser/src/status-issues.ts +89 -0
  4203. package/extensions/zalouser/src/tool.ts +165 -0
  4204. package/extensions/zalouser/src/types.ts +108 -0
  4205. package/extensions/zalouser/src/zca.ts +203 -0
  4206. package/git-hooks/pre-commit +4 -0
  4207. package/openclaw.mjs +14 -0
  4208. package/package.json +276 -0
  4209. package/patches/.gitkeep +0 -0
  4210. package/scripts/format-staged.js +149 -0
  4211. package/scripts/postinstall.js +361 -0
  4212. package/scripts/setup-git-hooks.js +104 -0
  4213. package/skills/1password/SKILL.md +70 -0
  4214. package/skills/1password/references/cli-examples.md +29 -0
  4215. package/skills/1password/references/get-started.md +17 -0
  4216. package/skills/apple-notes/SKILL.md +77 -0
  4217. package/skills/apple-reminders/SKILL.md +96 -0
  4218. package/skills/bear-notes/SKILL.md +107 -0
  4219. package/skills/bird/SKILL.md +224 -0
  4220. package/skills/blogwatcher/SKILL.md +69 -0
  4221. package/skills/blucli/SKILL.md +47 -0
  4222. package/skills/bluebubbles/SKILL.md +44 -0
  4223. package/skills/camsnap/SKILL.md +45 -0
  4224. package/skills/canvas/SKILL.md +198 -0
  4225. package/skills/clawhub/SKILL.md +77 -0
  4226. package/skills/coding-agent/SKILL.md +284 -0
  4227. package/skills/discord/SKILL.md +482 -0
  4228. package/skills/eightctl/SKILL.md +50 -0
  4229. package/skills/food-order/SKILL.md +48 -0
  4230. package/skills/gemini/SKILL.md +43 -0
  4231. package/skills/gifgrep/SKILL.md +79 -0
  4232. package/skills/github/SKILL.md +77 -0
  4233. package/skills/gog/SKILL.md +116 -0
  4234. package/skills/goplaces/SKILL.md +52 -0
  4235. package/skills/himalaya/SKILL.md +257 -0
  4236. package/skills/himalaya/references/configuration.md +184 -0
  4237. package/skills/himalaya/references/message-composition.md +199 -0
  4238. package/skills/imsg/SKILL.md +46 -0
  4239. package/skills/local-places/SERVER_README.md +101 -0
  4240. package/skills/local-places/SKILL.md +102 -0
  4241. package/skills/local-places/pyproject.toml +21 -0
  4242. package/skills/local-places/src/local_places/__init__.py +2 -0
  4243. package/skills/local-places/src/local_places/google_places.py +314 -0
  4244. package/skills/local-places/src/local_places/main.py +65 -0
  4245. package/skills/local-places/src/local_places/schemas.py +107 -0
  4246. package/skills/mcporter/SKILL.md +61 -0
  4247. package/skills/model-usage/SKILL.md +69 -0
  4248. package/skills/model-usage/references/codexbar-cli.md +33 -0
  4249. package/skills/model-usage/scripts/model_usage.py +310 -0
  4250. package/skills/nano-banana-pro/SKILL.md +58 -0
  4251. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  4252. package/skills/nano-pdf/SKILL.md +38 -0
  4253. package/skills/notion/SKILL.md +172 -0
  4254. package/skills/obsidian/SKILL.md +81 -0
  4255. package/skills/openai-image-gen/SKILL.md +89 -0
  4256. package/skills/openai-image-gen/scripts/gen.py +240 -0
  4257. package/skills/openai-whisper/SKILL.md +38 -0
  4258. package/skills/openai-whisper-api/SKILL.md +52 -0
  4259. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  4260. package/skills/openhue/SKILL.md +51 -0
  4261. package/skills/oracle/SKILL.md +125 -0
  4262. package/skills/ordercli/SKILL.md +78 -0
  4263. package/skills/peekaboo/SKILL.md +190 -0
  4264. package/skills/sag/SKILL.md +87 -0
  4265. package/skills/session-logs/SKILL.md +115 -0
  4266. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  4267. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  4268. package/skills/skill-creator/SKILL.md +370 -0
  4269. package/skills/skill-creator/license.txt +202 -0
  4270. package/skills/skill-creator/scripts/init_skill.py +378 -0
  4271. package/skills/skill-creator/scripts/package_skill.py +111 -0
  4272. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  4273. package/skills/slack/SKILL.md +144 -0
  4274. package/skills/songsee/SKILL.md +49 -0
  4275. package/skills/sonoscli/SKILL.md +46 -0
  4276. package/skills/spotify-player/SKILL.md +64 -0
  4277. package/skills/summarize/SKILL.md +87 -0
  4278. package/skills/things-mac/SKILL.md +86 -0
  4279. package/skills/tmux/SKILL.md +123 -0
  4280. package/skills/tmux/scripts/find-sessions.sh +112 -0
  4281. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  4282. package/skills/trello/SKILL.md +95 -0
  4283. package/skills/video-frames/SKILL.md +46 -0
  4284. package/skills/video-frames/scripts/frame.sh +81 -0
  4285. package/skills/voice-call/SKILL.md +45 -0
  4286. package/skills/wacli/SKILL.md +72 -0
  4287. package/skills/weather/SKILL.md +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-CXUONUC9.js","sources":["../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/css-tag.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/reactive-element.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/lit-html.js","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/lit-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/custom-element.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/property.js","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/decorators/state.js","../../../ui/src/ui/assistant-identity.ts","../../../ui/src/ui/storage.ts","../../../src/sessions/session-key-utils.ts","../../../ui/src/ui/navigation.ts","../../../ui/src/ui/icons.ts","../../../src/shared/text/reasoning-tags.ts","../../../ui/src/ui/format.ts","../../../ui/src/ui/chat/message-extract.ts","../../../ui/src/ui/uuid.ts","../../../ui/src/ui/controllers/chat.ts","../../../ui/src/ui/controllers/sessions.ts","../../../ui/src/ui/app-tool-stream.ts","../../../ui/src/ui/app-scroll.ts","../../../ui/src/ui/controllers/config/form-utils.ts","../../../ui/src/ui/controllers/config.ts","../../../ui/src/ui/controllers/cron.ts","../../../ui/src/ui/controllers/channels.ts","../../../ui/src/ui/controllers/debug.ts","../../../ui/src/ui/controllers/logs.ts","../../../node_modules/.pnpm/@noble+ed25519@3.0.0/node_modules/@noble/ed25519/index.js","../../../ui/src/ui/device-identity.ts","../../../ui/src/ui/device-auth.ts","../../../ui/src/ui/controllers/devices.ts","../../../ui/src/ui/controllers/nodes.ts","../../../ui/src/ui/controllers/exec-approvals.ts","../../../ui/src/ui/controllers/presence.ts","../../../ui/src/ui/controllers/skills.ts","../../../ui/src/ui/theme.ts","../../../ui/src/ui/theme-transition.ts","../../../ui/src/ui/app-polling.ts","../../../ui/src/ui/app-settings.ts","../../../ui/src/ui/app-chat.ts","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive-helpers.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directive.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/async-directive.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/ref.js","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/repeat.js","../../../ui/src/ui/chat/message-normalizer.ts","../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/unsafe-html.js","../../../node_modules/.pnpm/dompurify@3.3.1/node_modules/dompurify/dist/purify.es.mjs","../../../node_modules/.pnpm/marked@17.0.1/node_modules/marked/lib/marked.esm.js","../../../ui/src/ui/markdown.ts","../../../ui/src/ui/chat/copy-as-markdown.ts","../../../ui/src/ui/tool-display.ts","../../../ui/src/ui/chat/constants.ts","../../../ui/src/ui/chat/tool-helpers.ts","../../../ui/src/ui/chat/tool-cards.ts","../../../ui/src/ui/chat/grouped-render.ts","../../../ui/src/ui/views/markdown-sidebar.ts","../../../ui/src/ui/components/resizable-divider.ts","../../../ui/src/ui/views/chat.ts","../../../ui/src/ui/views/config-form.shared.ts","../../../ui/src/ui/views/config-form.node.ts","../../../ui/src/ui/views/config-form.render.ts","../../../ui/src/ui/views/config-form.analyze.ts","../../../ui/src/ui/views/config.ts","../../../ui/src/ui/views/channels.shared.ts","../../../ui/src/ui/views/channels.config.ts","../../../ui/src/ui/views/channels.discord.ts","../../../ui/src/ui/views/channels.googlechat.ts","../../../ui/src/ui/views/channels.imessage.ts","../../../ui/src/ui/views/channels.nostr-profile-form.ts","../../../ui/src/ui/views/channels.nostr.ts","../../../ui/src/ui/views/channels.signal.ts","../../../ui/src/ui/views/channels.slack.ts","../../../ui/src/ui/views/channels.telegram.ts","../../../ui/src/ui/views/channels.whatsapp.ts","../../../ui/src/ui/views/channels.ts","../../../ui/src/ui/presenter.ts","../../../ui/src/ui/views/cron.ts","../../../ui/src/ui/views/debug.ts","../../../ui/src/ui/views/instances.ts","../../../ui/src/ui/views/logs.ts","../../../ui/src/ui/views/nodes.ts","../../../ui/src/ui/views/overview.ts","../../../ui/src/ui/views/sessions.ts","../../../ui/src/ui/views/exec-approval.ts","../../../ui/src/ui/views/gateway-url-confirmation.ts","../../../ui/src/ui/views/skills.ts","../../../ui/src/ui/app-render.helpers.ts","../../../ui/src/ui/app-render.ts","../../../ui/src/ui/app-defaults.ts","../../../ui/src/ui/controllers/agents.ts","../../../src/gateway/protocol/client-info.ts","../../../src/gateway/device-auth.ts","../../../ui/src/ui/gateway.ts","../../../ui/src/ui/controllers/exec-approval.ts","../../../ui/src/ui/controllers/assistant-identity.ts","../../../ui/src/ui/app-gateway.ts","../../../ui/src/ui/app-lifecycle.ts","../../../ui/src/ui/app-channels.ts","../../../ui/src/ui/app.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","const MAX_ASSISTANT_NAME = 50;\nconst MAX_ASSISTANT_AVATAR = 200;\n\nexport const DEFAULT_ASSISTANT_NAME = \"Assistant\";\nexport const DEFAULT_ASSISTANT_AVATAR = \"A\";\n\nexport type AssistantIdentity = {\n agentId?: string | null;\n name: string;\n avatar: string | null;\n};\n\ndeclare global {\n interface Window {\n __OPENCLAW_ASSISTANT_NAME__?: string;\n __OPENCLAW_ASSISTANT_AVATAR__?: string;\n }\n}\n\nfunction coerceIdentityValue(value: string | undefined, maxLength: number): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n if (trimmed.length <= maxLength) return trimmed;\n return trimmed.slice(0, maxLength);\n}\n\nexport function normalizeAssistantIdentity(\n input?: Partial<AssistantIdentity> | null,\n): AssistantIdentity {\n const name = coerceIdentityValue(input?.name, MAX_ASSISTANT_NAME) ?? DEFAULT_ASSISTANT_NAME;\n const avatar = coerceIdentityValue(input?.avatar ?? undefined, MAX_ASSISTANT_AVATAR) ?? null;\n const agentId =\n typeof input?.agentId === \"string\" && input.agentId.trim() ? input.agentId.trim() : null;\n return { agentId, name, avatar };\n}\n\nexport function resolveInjectedAssistantIdentity(): AssistantIdentity {\n if (typeof window === \"undefined\") {\n return normalizeAssistantIdentity({});\n }\n return normalizeAssistantIdentity({\n name: window.__OPENCLAW_ASSISTANT_NAME__,\n avatar: window.__OPENCLAW_ASSISTANT_AVATAR__,\n });\n}\n","const KEY = \"openclaw.control.settings.v1\";\n\nimport type { ThemeMode } from \"./theme\";\n\nexport type UiSettings = {\n gatewayUrl: string;\n token: string;\n sessionKey: string;\n lastActiveSessionKey: string;\n theme: ThemeMode;\n chatFocusMode: boolean;\n chatShowThinking: boolean;\n splitRatio: number; // Sidebar split ratio (0.4 to 0.7, default 0.6)\n navCollapsed: boolean; // Collapsible sidebar state\n navGroupsCollapsed: Record<string, boolean>; // Which nav groups are collapsed\n};\n\nexport function loadSettings(): UiSettings {\n const defaultUrl = (() => {\n const proto = location.protocol === \"https:\" ? \"wss\" : \"ws\";\n return `${proto}://${location.host}`;\n })();\n\n const defaults: UiSettings = {\n gatewayUrl: defaultUrl,\n token: \"\",\n sessionKey: \"main\",\n lastActiveSessionKey: \"main\",\n theme: \"system\",\n chatFocusMode: false,\n chatShowThinking: true,\n splitRatio: 0.6,\n navCollapsed: false,\n navGroupsCollapsed: {},\n };\n\n try {\n const raw = localStorage.getItem(KEY);\n if (!raw) return defaults;\n const parsed = JSON.parse(raw) as Partial<UiSettings>;\n return {\n gatewayUrl:\n typeof parsed.gatewayUrl === \"string\" && parsed.gatewayUrl.trim()\n ? parsed.gatewayUrl.trim()\n : defaults.gatewayUrl,\n token: typeof parsed.token === \"string\" ? parsed.token : defaults.token,\n sessionKey:\n typeof parsed.sessionKey === \"string\" && parsed.sessionKey.trim()\n ? parsed.sessionKey.trim()\n : defaults.sessionKey,\n lastActiveSessionKey:\n typeof parsed.lastActiveSessionKey === \"string\" && parsed.lastActiveSessionKey.trim()\n ? parsed.lastActiveSessionKey.trim()\n : (typeof parsed.sessionKey === \"string\" && parsed.sessionKey.trim()) ||\n defaults.lastActiveSessionKey,\n theme:\n parsed.theme === \"light\" || parsed.theme === \"dark\" || parsed.theme === \"system\"\n ? parsed.theme\n : defaults.theme,\n chatFocusMode:\n typeof parsed.chatFocusMode === \"boolean\" ? parsed.chatFocusMode : defaults.chatFocusMode,\n chatShowThinking:\n typeof parsed.chatShowThinking === \"boolean\"\n ? parsed.chatShowThinking\n : defaults.chatShowThinking,\n splitRatio:\n typeof parsed.splitRatio === \"number\" &&\n parsed.splitRatio >= 0.4 &&\n parsed.splitRatio <= 0.7\n ? parsed.splitRatio\n : defaults.splitRatio,\n navCollapsed:\n typeof parsed.navCollapsed === \"boolean\" ? parsed.navCollapsed : defaults.navCollapsed,\n navGroupsCollapsed:\n typeof parsed.navGroupsCollapsed === \"object\" && parsed.navGroupsCollapsed !== null\n ? parsed.navGroupsCollapsed\n : defaults.navGroupsCollapsed,\n };\n } catch {\n return defaults;\n }\n}\n\nexport function saveSettings(next: UiSettings) {\n localStorage.setItem(KEY, JSON.stringify(next));\n}\n","export type ParsedAgentSessionKey = {\n agentId: string;\n rest: string;\n};\n\nexport function parseAgentSessionKey(\n sessionKey: string | undefined | null,\n): ParsedAgentSessionKey | null {\n const raw = (sessionKey ?? \"\").trim();\n if (!raw) {\n return null;\n }\n const parts = raw.split(\":\").filter(Boolean);\n if (parts.length < 3) {\n return null;\n }\n if (parts[0] !== \"agent\") {\n return null;\n }\n const agentId = parts[1]?.trim();\n const rest = parts.slice(2).join(\":\");\n if (!agentId || !rest) {\n return null;\n }\n return { agentId, rest };\n}\n\nexport function isSubagentSessionKey(sessionKey: string | undefined | null): boolean {\n const raw = (sessionKey ?? \"\").trim();\n if (!raw) {\n return false;\n }\n if (raw.toLowerCase().startsWith(\"subagent:\")) {\n return true;\n }\n const parsed = parseAgentSessionKey(raw);\n return Boolean((parsed?.rest ?? \"\").toLowerCase().startsWith(\"subagent:\"));\n}\n\nexport function isAcpSessionKey(sessionKey: string | undefined | null): boolean {\n const raw = (sessionKey ?? \"\").trim();\n if (!raw) {\n return false;\n }\n const normalized = raw.toLowerCase();\n if (normalized.startsWith(\"acp:\")) {\n return true;\n }\n const parsed = parseAgentSessionKey(raw);\n return Boolean((parsed?.rest ?? \"\").toLowerCase().startsWith(\"acp:\"));\n}\n\nconst THREAD_SESSION_MARKERS = [\":thread:\", \":topic:\"];\n\nexport function resolveThreadParentSessionKey(\n sessionKey: string | undefined | null,\n): string | null {\n const raw = (sessionKey ?? \"\").trim();\n if (!raw) {\n return null;\n }\n const normalized = raw.toLowerCase();\n let idx = -1;\n for (const marker of THREAD_SESSION_MARKERS) {\n const candidate = normalized.lastIndexOf(marker);\n if (candidate > idx) {\n idx = candidate;\n }\n }\n if (idx <= 0) {\n return null;\n }\n const parent = raw.slice(0, idx).trim();\n return parent ? parent : null;\n}\n","import type { IconName } from \"./icons.js\";\n\nexport const TAB_GROUPS = [\n { label: \"Chat\", tabs: [\"chat\"] },\n {\n label: \"Control\",\n tabs: [\"overview\", \"channels\", \"instances\", \"sessions\", \"cron\"],\n },\n { label: \"Agent\", tabs: [\"skills\", \"nodes\"] },\n { label: \"Settings\", tabs: [\"config\", \"debug\", \"logs\"] },\n] as const;\n\nexport type Tab =\n | \"overview\"\n | \"channels\"\n | \"instances\"\n | \"sessions\"\n | \"cron\"\n | \"skills\"\n | \"nodes\"\n | \"chat\"\n | \"config\"\n | \"debug\"\n | \"logs\";\n\nconst TAB_PATHS: Record<Tab, string> = {\n overview: \"/overview\",\n channels: \"/channels\",\n instances: \"/instances\",\n sessions: \"/sessions\",\n cron: \"/cron\",\n skills: \"/skills\",\n nodes: \"/nodes\",\n chat: \"/chat\",\n config: \"/config\",\n debug: \"/debug\",\n logs: \"/logs\",\n};\n\nconst PATH_TO_TAB = new Map(Object.entries(TAB_PATHS).map(([tab, path]) => [path, tab as Tab]));\n\nexport function normalizeBasePath(basePath: string): string {\n if (!basePath) return \"\";\n let base = basePath.trim();\n if (!base.startsWith(\"/\")) base = `/${base}`;\n if (base === \"/\") return \"\";\n if (base.endsWith(\"/\")) base = base.slice(0, -1);\n return base;\n}\n\nexport function normalizePath(path: string): string {\n if (!path) return \"/\";\n let normalized = path.trim();\n if (!normalized.startsWith(\"/\")) normalized = `/${normalized}`;\n if (normalized.length > 1 && normalized.endsWith(\"/\")) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\n\nexport function pathForTab(tab: Tab, basePath = \"\"): string {\n const base = normalizeBasePath(basePath);\n const path = TAB_PATHS[tab];\n return base ? `${base}${path}` : path;\n}\n\nexport function tabFromPath(pathname: string, basePath = \"\"): Tab | null {\n const base = normalizeBasePath(basePath);\n let path = pathname || \"/\";\n if (base) {\n if (path === base) {\n path = \"/\";\n } else if (path.startsWith(`${base}/`)) {\n path = path.slice(base.length);\n }\n }\n let normalized = normalizePath(path).toLowerCase();\n if (normalized.endsWith(\"/index.html\")) normalized = \"/\";\n if (normalized === \"/\") return \"chat\";\n return PATH_TO_TAB.get(normalized) ?? null;\n}\n\nexport function inferBasePathFromPathname(pathname: string): string {\n let normalized = normalizePath(pathname);\n if (normalized.endsWith(\"/index.html\")) {\n normalized = normalizePath(normalized.slice(0, -\"/index.html\".length));\n }\n if (normalized === \"/\") return \"\";\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments.length === 0) return \"\";\n for (let i = 0; i < segments.length; i++) {\n const candidate = `/${segments.slice(i).join(\"/\")}`.toLowerCase();\n if (PATH_TO_TAB.has(candidate)) {\n const prefix = segments.slice(0, i);\n return prefix.length ? `/${prefix.join(\"/\")}` : \"\";\n }\n }\n return `/${segments.join(\"/\")}`;\n}\n\nexport function iconForTab(tab: Tab): IconName {\n switch (tab) {\n case \"chat\":\n return \"messageSquare\";\n case \"overview\":\n return \"barChart\";\n case \"channels\":\n return \"link\";\n case \"instances\":\n return \"radio\";\n case \"sessions\":\n return \"fileText\";\n case \"cron\":\n return \"loader\";\n case \"skills\":\n return \"zap\";\n case \"nodes\":\n return \"monitor\";\n case \"config\":\n return \"settings\";\n case \"debug\":\n return \"bug\";\n case \"logs\":\n return \"scrollText\";\n default:\n return \"folder\";\n }\n}\n\nexport function titleForTab(tab: Tab) {\n switch (tab) {\n case \"overview\":\n return \"Overview\";\n case \"channels\":\n return \"Channels\";\n case \"instances\":\n return \"Instances\";\n case \"sessions\":\n return \"Sessions\";\n case \"cron\":\n return \"Cron Jobs\";\n case \"skills\":\n return \"Skills\";\n case \"nodes\":\n return \"Nodes\";\n case \"chat\":\n return \"Chat\";\n case \"config\":\n return \"Config\";\n case \"debug\":\n return \"Debug\";\n case \"logs\":\n return \"Logs\";\n default:\n return \"Control\";\n }\n}\n\nexport function subtitleForTab(tab: Tab) {\n switch (tab) {\n case \"overview\":\n return \"Gateway status, entry points, and a fast health read.\";\n case \"channels\":\n return \"Manage channels and settings.\";\n case \"instances\":\n return \"Presence beacons from connected clients and nodes.\";\n case \"sessions\":\n return \"Inspect active sessions and adjust per-session defaults.\";\n case \"cron\":\n return \"Schedule wakeups and recurring agent runs.\";\n case \"skills\":\n return \"Manage skill availability and API key injection.\";\n case \"nodes\":\n return \"Paired devices, capabilities, and command exposure.\";\n case \"chat\":\n return \"Direct gateway chat session for quick interventions.\";\n case \"config\":\n return \"Edit ~/.openclaw/openclaw.json safely.\";\n case \"debug\":\n return \"Gateway snapshots, events, and manual RPC calls.\";\n case \"logs\":\n return \"Live tail of the gateway file logs.\";\n default:\n return \"\";\n }\n}\n","import { html, type TemplateResult } from \"lit\";\n\n// Lucide-style SVG icons\n// All icons use currentColor for stroke\n\nexport const icons = {\n // Navigation icons\n messageSquare: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n `,\n barChart: html`\n <svg viewBox=\"0 0 24 24\">\n <line x1=\"12\" x2=\"12\" y1=\"20\" y2=\"10\" />\n <line x1=\"18\" x2=\"18\" y1=\"20\" y2=\"4\" />\n <line x1=\"6\" x2=\"6\" y1=\"20\" y2=\"16\" />\n </svg>\n `,\n link: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </svg>\n `,\n radio: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <path\n d=\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\"\n />\n </svg>\n `,\n fileText: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" x2=\"8\" y1=\"13\" y2=\"13\" />\n <line x1=\"16\" x2=\"8\" y1=\"17\" y2=\"17\" />\n <line x1=\"10\" x2=\"8\" y1=\"9\" y2=\"9\" />\n </svg>\n `,\n zap: html`\n <svg viewBox=\"0 0 24 24\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\" /></svg>\n `,\n monitor: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\" />\n <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\" />\n <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\" />\n </svg>\n `,\n settings: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\"\n />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n `,\n bug: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"m8 2 1.88 1.88\" />\n <path d=\"M14.12 3.88 16 2\" />\n <path d=\"M9 7.13v-1a3.003 3.003 0 1 1 6 0v1\" />\n <path d=\"M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6\" />\n <path d=\"M12 20v-9\" />\n <path d=\"M6.53 9C4.6 8.8 3 7.1 3 5\" />\n <path d=\"M6 13H2\" />\n <path d=\"M3 21c0-2.1 1.7-3.9 3.8-4\" />\n <path d=\"M20.97 5c0 2.1-1.6 3.8-3.5 4\" />\n <path d=\"M22 13h-4\" />\n <path d=\"M17.2 17c2.1.1 3.8 1.9 3.8 4\" />\n </svg>\n `,\n scrollText: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M8 21h12a2 2 0 0 0 2-2v-2H10v2a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v3h4\" />\n <path d=\"M19 17V5a2 2 0 0 0-2-2H4\" />\n <path d=\"M15 8h-5\" />\n <path d=\"M15 12h-5\" />\n </svg>\n `,\n folder: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z\"\n />\n </svg>\n `,\n\n // UI icons\n menu: html`\n <svg viewBox=\"0 0 24 24\">\n <line x1=\"4\" x2=\"20\" y1=\"12\" y2=\"12\" />\n <line x1=\"4\" x2=\"20\" y1=\"6\" y2=\"6\" />\n <line x1=\"4\" x2=\"20\" y1=\"18\" y2=\"18\" />\n </svg>\n `,\n x: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n `,\n check: html`\n <svg viewBox=\"0 0 24 24\"><path d=\"M20 6 9 17l-5-5\" /></svg>\n `,\n copy: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n `,\n search: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <path d=\"m21 21-4.3-4.3\" />\n </svg>\n `,\n brain: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z\" />\n <path d=\"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z\" />\n <path d=\"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4\" />\n <path d=\"M17.599 6.5a3 3 0 0 0 .399-1.375\" />\n <path d=\"M6.003 5.125A3 3 0 0 0 6.401 6.5\" />\n <path d=\"M3.477 10.896a4 4 0 0 1 .585-.396\" />\n <path d=\"M19.938 10.5a4 4 0 0 1 .585.396\" />\n <path d=\"M6 18a4 4 0 0 1-1.967-.516\" />\n <path d=\"M19.967 17.484A4 4 0 0 1 18 18\" />\n </svg>\n `,\n book: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H20v20H6.5a2.5 2.5 0 0 1 0-5H20\" />\n </svg>\n `,\n loader: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 2v4\" />\n <path d=\"m16.2 7.8 2.9-2.9\" />\n <path d=\"M18 12h4\" />\n <path d=\"m16.2 16.2 2.9 2.9\" />\n <path d=\"M12 18v4\" />\n <path d=\"m4.9 19.1 2.9-2.9\" />\n <path d=\"M2 12h4\" />\n <path d=\"m4.9 4.9 2.9 2.9\" />\n </svg>\n `,\n\n // Tool icons\n wrench: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"\n />\n </svg>\n `,\n fileCode: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <path d=\"m10 13-2 2 2 2\" />\n <path d=\"m14 17 2-2-2-2\" />\n </svg>\n `,\n edit: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n `,\n penLine: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 20h9\" />\n <path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\" />\n </svg>\n `,\n paperclip: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\"\n />\n </svg>\n `,\n globe: html`\n <svg viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </svg>\n `,\n image: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </svg>\n `,\n smartphone: html`\n <svg viewBox=\"0 0 24 24\">\n <rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\" />\n <path d=\"M12 18h.01\" />\n </svg>\n `,\n plug: html`\n <svg viewBox=\"0 0 24 24\">\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </svg>\n `,\n circle: html`\n <svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" /></svg>\n `,\n puzzle: html`\n <svg viewBox=\"0 0 24 24\">\n <path\n d=\"M19.439 7.85c-.049.322.059.648.289.878l1.568 1.568c.47.47.706 1.087.706 1.704s-.235 1.233-.706 1.704l-1.611 1.611a.98.98 0 0 1-.837.276c-.47-.07-.802-.48-.968-.925a2.501 2.501 0 1 0-3.214 3.214c.446.166.855.497.925.968a.979.979 0 0 1-.276.837l-1.61 1.61a2.404 2.404 0 0 1-1.705.707 2.402 2.402 0 0 1-1.704-.706l-1.568-1.568a1.026 1.026 0 0 0-.877-.29c-.493.074-.84.504-1.02.968a2.5 2.5 0 1 1-3.237-3.237c.464-.18.894-.527.967-1.02a1.026 1.026 0 0 0-.289-.877l-1.568-1.568A2.402 2.402 0 0 1 1.998 12c0-.617.236-1.234.706-1.704L4.23 8.77c.24-.24.581-.353.917-.303.515.076.874.54 1.02 1.02a2.5 2.5 0 1 0 3.237-3.237c-.48-.146-.944-.505-1.02-1.02a.98.98 0 0 1 .303-.917l1.526-1.526A2.402 2.402 0 0 1 11.998 2c.617 0 1.234.236 1.704.706l1.568 1.568c.23.23.556.338.877.29.493-.074.84-.504 1.02-.968a2.5 2.5 0 1 1 3.236 3.236c-.464.18-.894.527-.967 1.02Z\"\n />\n </svg>\n `,\n} as const;\n\nexport type IconName = keyof typeof icons;\n\nexport function icon(name: IconName): TemplateResult {\n return icons[name];\n}\n\nexport function renderIcon(name: IconName, className = \"nav-item__icon\"): TemplateResult {\n return html`<span class=${className} aria-hidden=\"true\">${icons[name]}</span>`;\n}\n\n// Legacy function for compatibility\nexport function renderEmojiIcon(\n iconContent: string | TemplateResult,\n className: string,\n): TemplateResult {\n return html`<span class=${className} aria-hidden=\"true\">${iconContent}</span>`;\n}\n\nexport function setEmojiIcon(target: HTMLElement | null, icon: string): void {\n if (!target) return;\n target.textContent = icon;\n}\n","export type ReasoningTagMode = \"strict\" | \"preserve\";\nexport type ReasoningTagTrim = \"none\" | \"start\" | \"both\";\n\nconst QUICK_TAG_RE = /<\\s*\\/?\\s*(?:think(?:ing)?|thought|antthinking|final)\\b/i;\nconst FINAL_TAG_RE = /<\\s*\\/?\\s*final\\b[^<>]*>/gi;\nconst THINKING_TAG_RE = /<\\s*(\\/?)\\s*(?:think(?:ing)?|thought|antthinking)\\b[^<>]*>/gi;\n\ninterface CodeRegion {\n start: number;\n end: number;\n}\n\nfunction findCodeRegions(text: string): CodeRegion[] {\n const regions: CodeRegion[] = [];\n\n const fencedRe = /(^|\\n)(```|~~~)[^\\n]*\\n[\\s\\S]*?(?:\\n\\2(?:\\n|$)|$)/g;\n for (const match of text.matchAll(fencedRe)) {\n const start = (match.index ?? 0) + match[1].length;\n regions.push({ start, end: start + match[0].length - match[1].length });\n }\n\n const inlineRe = /`+[^`]+`+/g;\n for (const match of text.matchAll(inlineRe)) {\n const start = match.index ?? 0;\n const end = start + match[0].length;\n const insideFenced = regions.some((r) => start >= r.start && end <= r.end);\n if (!insideFenced) {\n regions.push({ start, end });\n }\n }\n\n regions.sort((a, b) => a.start - b.start);\n return regions;\n}\n\nfunction isInsideCode(pos: number, regions: CodeRegion[]): boolean {\n return regions.some((r) => pos >= r.start && pos < r.end);\n}\n\nfunction applyTrim(value: string, mode: ReasoningTagTrim): string {\n if (mode === \"none\") {\n return value;\n }\n if (mode === \"start\") {\n return value.trimStart();\n }\n return value.trim();\n}\n\nexport function stripReasoningTagsFromText(\n text: string,\n options?: {\n mode?: ReasoningTagMode;\n trim?: ReasoningTagTrim;\n },\n): string {\n if (!text) {\n return text;\n }\n if (!QUICK_TAG_RE.test(text)) {\n return text;\n }\n\n const mode = options?.mode ?? \"strict\";\n const trimMode = options?.trim ?? \"both\";\n\n let cleaned = text;\n if (FINAL_TAG_RE.test(cleaned)) {\n FINAL_TAG_RE.lastIndex = 0;\n const finalMatches: Array<{ start: number; length: number; inCode: boolean }> = [];\n const preCodeRegions = findCodeRegions(cleaned);\n for (const match of cleaned.matchAll(FINAL_TAG_RE)) {\n const start = match.index ?? 0;\n finalMatches.push({\n start,\n length: match[0].length,\n inCode: isInsideCode(start, preCodeRegions),\n });\n }\n\n for (let i = finalMatches.length - 1; i >= 0; i--) {\n const m = finalMatches[i];\n if (!m.inCode) {\n cleaned = cleaned.slice(0, m.start) + cleaned.slice(m.start + m.length);\n }\n }\n } else {\n FINAL_TAG_RE.lastIndex = 0;\n }\n\n const codeRegions = findCodeRegions(cleaned);\n\n THINKING_TAG_RE.lastIndex = 0;\n let result = \"\";\n let lastIndex = 0;\n let inThinking = false;\n\n for (const match of cleaned.matchAll(THINKING_TAG_RE)) {\n const idx = match.index ?? 0;\n const isClose = match[1] === \"/\";\n\n if (isInsideCode(idx, codeRegions)) {\n continue;\n }\n\n if (!inThinking) {\n result += cleaned.slice(lastIndex, idx);\n if (!isClose) {\n inThinking = true;\n }\n } else if (isClose) {\n inThinking = false;\n }\n\n lastIndex = idx + match[0].length;\n }\n\n if (!inThinking || mode === \"preserve\") {\n result += cleaned.slice(lastIndex);\n }\n\n return applyTrim(result, trimMode);\n}\n","import { stripReasoningTagsFromText } from \"../../../src/shared/text/reasoning-tags.js\";\n\nexport function formatMs(ms?: number | null): string {\n if (!ms && ms !== 0) return \"n/a\";\n return new Date(ms).toLocaleString();\n}\n\nexport function formatAgo(ms?: number | null): string {\n if (!ms && ms !== 0) return \"n/a\";\n const diff = Date.now() - ms;\n if (diff < 0) return \"just now\";\n const sec = Math.round(diff / 1000);\n if (sec < 60) return `${sec}s ago`;\n const min = Math.round(sec / 60);\n if (min < 60) return `${min}m ago`;\n const hr = Math.round(min / 60);\n if (hr < 48) return `${hr}h ago`;\n const day = Math.round(hr / 24);\n return `${day}d ago`;\n}\n\nexport function formatDurationMs(ms?: number | null): string {\n if (!ms && ms !== 0) return \"n/a\";\n if (ms < 1000) return `${ms}ms`;\n const sec = Math.round(ms / 1000);\n if (sec < 60) return `${sec}s`;\n const min = Math.round(sec / 60);\n if (min < 60) return `${min}m`;\n const hr = Math.round(min / 60);\n if (hr < 48) return `${hr}h`;\n const day = Math.round(hr / 24);\n return `${day}d`;\n}\n\nexport function formatList(values?: Array<string | null | undefined>): string {\n if (!values || values.length === 0) return \"none\";\n return values.filter((v): v is string => Boolean(v && v.trim())).join(\", \");\n}\n\nexport function clampText(value: string, max = 120): string {\n if (value.length <= max) return value;\n return `${value.slice(0, Math.max(0, max - 1))}…`;\n}\n\nexport function truncateText(\n value: string,\n max: number,\n): {\n text: string;\n truncated: boolean;\n total: number;\n} {\n if (value.length <= max) {\n return { text: value, truncated: false, total: value.length };\n }\n return {\n text: value.slice(0, Math.max(0, max)),\n truncated: true,\n total: value.length,\n };\n}\n\nexport function toNumber(value: string, fallback: number): number {\n const n = Number(value);\n return Number.isFinite(n) ? n : fallback;\n}\n\nexport function parseList(input: string): string[] {\n return input\n .split(/[,\\n]/)\n .map((v) => v.trim())\n .filter((v) => v.length > 0);\n}\n\nexport function stripThinkingTags(value: string): string {\n return stripReasoningTagsFromText(value, { mode: \"preserve\", trim: \"start\" });\n}\n","import { stripThinkingTags } from \"../format\";\n\nconst ENVELOPE_PREFIX = /^\\[([^\\]]+)\\]\\s*/;\nconst ENVELOPE_CHANNELS = [\n \"WebChat\",\n \"WhatsApp\",\n \"Telegram\",\n \"Signal\",\n \"Slack\",\n \"Discord\",\n \"iMessage\",\n \"Teams\",\n \"Matrix\",\n \"Zalo\",\n \"Zalo Personal\",\n \"BlueBubbles\",\n];\n\nconst textCache = new WeakMap<object, string | null>();\nconst thinkingCache = new WeakMap<object, string | null>();\n\nfunction looksLikeEnvelopeHeader(header: string): boolean {\n if (/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}Z\\b/.test(header)) return true;\n if (/\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}\\b/.test(header)) return true;\n return ENVELOPE_CHANNELS.some((label) => header.startsWith(`${label} `));\n}\n\nexport function stripEnvelope(text: string): string {\n const match = text.match(ENVELOPE_PREFIX);\n if (!match) return text;\n const header = match[1] ?? \"\";\n if (!looksLikeEnvelopeHeader(header)) return text;\n return text.slice(match[0].length);\n}\n\nexport function extractText(message: unknown): string | null {\n const m = message as Record<string, unknown>;\n const role = typeof m.role === \"string\" ? m.role : \"\";\n const content = m.content;\n if (typeof content === \"string\") {\n const processed = role === \"assistant\" ? stripThinkingTags(content) : stripEnvelope(content);\n return processed;\n }\n if (Array.isArray(content)) {\n const parts = content\n .map((p) => {\n const item = p as Record<string, unknown>;\n if (item.type === \"text\" && typeof item.text === \"string\") return item.text;\n return null;\n })\n .filter((v): v is string => typeof v === \"string\");\n if (parts.length > 0) {\n const joined = parts.join(\"\\n\");\n const processed = role === \"assistant\" ? stripThinkingTags(joined) : stripEnvelope(joined);\n return processed;\n }\n }\n if (typeof m.text === \"string\") {\n const processed = role === \"assistant\" ? stripThinkingTags(m.text) : stripEnvelope(m.text);\n return processed;\n }\n return null;\n}\n\nexport function extractTextCached(message: unknown): string | null {\n if (!message || typeof message !== \"object\") return extractText(message);\n const obj = message as object;\n if (textCache.has(obj)) return textCache.get(obj) ?? null;\n const value = extractText(message);\n textCache.set(obj, value);\n return value;\n}\n\nexport function extractThinking(message: unknown): string | null {\n const m = message as Record<string, unknown>;\n const content = m.content;\n const parts: string[] = [];\n if (Array.isArray(content)) {\n for (const p of content) {\n const item = p as Record<string, unknown>;\n if (item.type === \"thinking\" && typeof item.thinking === \"string\") {\n const cleaned = item.thinking.trim();\n if (cleaned) parts.push(cleaned);\n }\n }\n }\n if (parts.length > 0) return parts.join(\"\\n\");\n\n // Back-compat: older logs may still have <think> tags inside text blocks.\n const rawText = extractRawText(message);\n if (!rawText) return null;\n const matches = [\n ...rawText.matchAll(/<\\s*think(?:ing)?\\s*>([\\s\\S]*?)<\\s*\\/\\s*think(?:ing)?\\s*>/gi),\n ];\n const extracted = matches.map((m) => (m[1] ?? \"\").trim()).filter(Boolean);\n return extracted.length > 0 ? extracted.join(\"\\n\") : null;\n}\n\nexport function extractThinkingCached(message: unknown): string | null {\n if (!message || typeof message !== \"object\") return extractThinking(message);\n const obj = message as object;\n if (thinkingCache.has(obj)) return thinkingCache.get(obj) ?? null;\n const value = extractThinking(message);\n thinkingCache.set(obj, value);\n return value;\n}\n\nexport function extractRawText(message: unknown): string | null {\n const m = message as Record<string, unknown>;\n const content = m.content;\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n const parts = content\n .map((p) => {\n const item = p as Record<string, unknown>;\n if (item.type === \"text\" && typeof item.text === \"string\") return item.text;\n return null;\n })\n .filter((v): v is string => typeof v === \"string\");\n if (parts.length > 0) return parts.join(\"\\n\");\n }\n if (typeof m.text === \"string\") return m.text;\n return null;\n}\n\nexport function formatReasoningMarkdown(text: string): string {\n const trimmed = text.trim();\n if (!trimmed) return \"\";\n const lines = trimmed\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => `_${line}_`);\n return lines.length ? [\"_Reasoning:_\", ...lines].join(\"\\n\") : \"\";\n}\n","export type CryptoLike = {\n randomUUID?: (() => string) | undefined;\n getRandomValues?: ((array: Uint8Array) => Uint8Array) | undefined;\n};\n\nlet warnedWeakCrypto = false;\n\nfunction uuidFromBytes(bytes: Uint8Array): string {\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant 1\n\n let hex = \"\";\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i]!.toString(16).padStart(2, \"0\");\n }\n\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(\n 16,\n 20,\n )}-${hex.slice(20)}`;\n}\n\nfunction weakRandomBytes(): Uint8Array {\n const bytes = new Uint8Array(16);\n const now = Date.now();\n for (let i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);\n bytes[0] ^= now & 0xff;\n bytes[1] ^= (now >>> 8) & 0xff;\n bytes[2] ^= (now >>> 16) & 0xff;\n bytes[3] ^= (now >>> 24) & 0xff;\n return bytes;\n}\n\nfunction warnWeakCryptoOnce() {\n if (warnedWeakCrypto) return;\n warnedWeakCrypto = true;\n console.warn(\"[uuid] crypto API missing; falling back to weak randomness\");\n}\n\nexport function generateUUID(cryptoLike: CryptoLike | null = globalThis.crypto): string {\n if (cryptoLike && typeof cryptoLike.randomUUID === \"function\") return cryptoLike.randomUUID();\n\n if (cryptoLike && typeof cryptoLike.getRandomValues === \"function\") {\n const bytes = new Uint8Array(16);\n cryptoLike.getRandomValues(bytes);\n return uuidFromBytes(bytes);\n }\n\n warnWeakCryptoOnce();\n return uuidFromBytes(weakRandomBytes());\n}\n","import { extractText } from \"../chat/message-extract\";\nimport type { GatewayBrowserClient } from \"../gateway\";\nimport { generateUUID } from \"../uuid\";\nimport type { ChatAttachment } from \"../ui-types\";\n\nexport type ChatState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n sessionKey: string;\n chatLoading: boolean;\n chatMessages: unknown[];\n chatThinkingLevel: string | null;\n chatSending: boolean;\n chatMessage: string;\n chatAttachments: ChatAttachment[];\n chatRunId: string | null;\n chatStream: string | null;\n chatStreamStartedAt: number | null;\n lastError: string | null;\n};\n\nexport type ChatEventPayload = {\n runId: string;\n sessionKey: string;\n state: \"delta\" | \"final\" | \"aborted\" | \"error\";\n message?: unknown;\n errorMessage?: string;\n};\n\nexport async function loadChatHistory(state: ChatState) {\n if (!state.client || !state.connected) return;\n state.chatLoading = true;\n state.lastError = null;\n try {\n const res = (await state.client.request(\"chat.history\", {\n sessionKey: state.sessionKey,\n limit: 200,\n })) as { messages?: unknown[]; thinkingLevel?: string | null };\n state.chatMessages = Array.isArray(res.messages) ? res.messages : [];\n state.chatThinkingLevel = res.thinkingLevel ?? null;\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.chatLoading = false;\n }\n}\n\nfunction dataUrlToBase64(dataUrl: string): { content: string; mimeType: string } | null {\n const match = /^data:([^;]+);base64,(.+)$/.exec(dataUrl);\n if (!match) return null;\n return { mimeType: match[1], content: match[2] };\n}\n\nexport async function sendChatMessage(\n state: ChatState,\n message: string,\n attachments?: ChatAttachment[],\n): Promise<string | null> {\n if (!state.client || !state.connected) return null;\n const msg = message.trim();\n const hasAttachments = attachments && attachments.length > 0;\n if (!msg && !hasAttachments) return null;\n\n const now = Date.now();\n\n // Build user message content blocks\n const contentBlocks: Array<{ type: string; text?: string; source?: unknown }> = [];\n if (msg) {\n contentBlocks.push({ type: \"text\", text: msg });\n }\n // Add image previews to the message for display\n if (hasAttachments) {\n for (const att of attachments) {\n contentBlocks.push({\n type: \"image\",\n source: { type: \"base64\", media_type: att.mimeType, data: att.dataUrl },\n });\n }\n }\n\n state.chatMessages = [\n ...state.chatMessages,\n {\n role: \"user\",\n content: contentBlocks,\n timestamp: now,\n },\n ];\n\n state.chatSending = true;\n state.lastError = null;\n const runId = generateUUID();\n state.chatRunId = runId;\n state.chatStream = \"\";\n state.chatStreamStartedAt = now;\n\n // Convert attachments to API format\n const apiAttachments = hasAttachments\n ? attachments\n .map((att) => {\n const parsed = dataUrlToBase64(att.dataUrl);\n if (!parsed) return null;\n return {\n type: \"image\",\n mimeType: parsed.mimeType,\n content: parsed.content,\n };\n })\n .filter((a): a is NonNullable<typeof a> => a !== null)\n : undefined;\n\n try {\n await state.client.request(\"chat.send\", {\n sessionKey: state.sessionKey,\n message: msg,\n deliver: false,\n idempotencyKey: runId,\n attachments: apiAttachments,\n });\n return runId;\n } catch (err) {\n const error = String(err);\n state.chatRunId = null;\n state.chatStream = null;\n state.chatStreamStartedAt = null;\n state.lastError = error;\n state.chatMessages = [\n ...state.chatMessages,\n {\n role: \"assistant\",\n content: [{ type: \"text\", text: \"Error: \" + error }],\n timestamp: Date.now(),\n },\n ];\n return null;\n } finally {\n state.chatSending = false;\n }\n}\n\nexport async function abortChatRun(state: ChatState): Promise<boolean> {\n if (!state.client || !state.connected) return false;\n const runId = state.chatRunId;\n try {\n await state.client.request(\n \"chat.abort\",\n runId ? { sessionKey: state.sessionKey, runId } : { sessionKey: state.sessionKey },\n );\n return true;\n } catch (err) {\n state.lastError = String(err);\n return false;\n }\n}\n\nexport function handleChatEvent(state: ChatState, payload?: ChatEventPayload) {\n if (!payload) return null;\n if (payload.sessionKey !== state.sessionKey) return null;\n\n // Final from another run (e.g. sub-agent announce): refresh history to show new message.\n // See https://github.com/openclaw/openclaw/issues/1909\n if (payload.runId && state.chatRunId && payload.runId !== state.chatRunId) {\n if (payload.state === \"final\") return \"final\";\n return null;\n }\n\n if (payload.state === \"delta\") {\n const next = extractText(payload.message);\n if (typeof next === \"string\") {\n const current = state.chatStream ?? \"\";\n if (!current || next.length >= current.length) {\n state.chatStream = next;\n }\n }\n } else if (payload.state === \"final\") {\n state.chatStream = null;\n state.chatRunId = null;\n state.chatStreamStartedAt = null;\n } else if (payload.state === \"aborted\") {\n state.chatStream = null;\n state.chatRunId = null;\n state.chatStreamStartedAt = null;\n } else if (payload.state === \"error\") {\n state.chatStream = null;\n state.chatRunId = null;\n state.chatStreamStartedAt = null;\n state.lastError = payload.errorMessage ?? \"chat error\";\n }\n return payload.state;\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport { toNumber } from \"../format\";\nimport type { SessionsListResult } from \"../types\";\n\nexport type SessionsState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n sessionsLoading: boolean;\n sessionsResult: SessionsListResult | null;\n sessionsError: string | null;\n sessionsFilterActive: string;\n sessionsFilterLimit: string;\n sessionsIncludeGlobal: boolean;\n sessionsIncludeUnknown: boolean;\n};\n\nexport async function loadSessions(\n state: SessionsState,\n overrides?: {\n activeMinutes?: number;\n limit?: number;\n includeGlobal?: boolean;\n includeUnknown?: boolean;\n },\n) {\n if (!state.client || !state.connected) return;\n if (state.sessionsLoading) return;\n state.sessionsLoading = true;\n state.sessionsError = null;\n try {\n const includeGlobal = overrides?.includeGlobal ?? state.sessionsIncludeGlobal;\n const includeUnknown = overrides?.includeUnknown ?? state.sessionsIncludeUnknown;\n const activeMinutes = overrides?.activeMinutes ?? toNumber(state.sessionsFilterActive, 0);\n const limit = overrides?.limit ?? toNumber(state.sessionsFilterLimit, 0);\n const params: Record<string, unknown> = {\n includeGlobal,\n includeUnknown,\n };\n if (activeMinutes > 0) params.activeMinutes = activeMinutes;\n if (limit > 0) params.limit = limit;\n const res = (await state.client.request(\"sessions.list\", params)) as\n | SessionsListResult\n | undefined;\n if (res) state.sessionsResult = res;\n } catch (err) {\n state.sessionsError = String(err);\n } finally {\n state.sessionsLoading = false;\n }\n}\n\nexport async function patchSession(\n state: SessionsState,\n key: string,\n patch: {\n label?: string | null;\n thinkingLevel?: string | null;\n verboseLevel?: string | null;\n reasoningLevel?: string | null;\n },\n) {\n if (!state.client || !state.connected) return;\n const params: Record<string, unknown> = { key };\n if (\"label\" in patch) params.label = patch.label;\n if (\"thinkingLevel\" in patch) params.thinkingLevel = patch.thinkingLevel;\n if (\"verboseLevel\" in patch) params.verboseLevel = patch.verboseLevel;\n if (\"reasoningLevel\" in patch) params.reasoningLevel = patch.reasoningLevel;\n try {\n await state.client.request(\"sessions.patch\", params);\n await loadSessions(state);\n } catch (err) {\n state.sessionsError = String(err);\n }\n}\n\nexport async function deleteSession(state: SessionsState, key: string) {\n if (!state.client || !state.connected) return;\n if (state.sessionsLoading) return;\n const confirmed = window.confirm(\n `Delete session \"${key}\"?\\n\\nDeletes the session entry and archives its transcript.`,\n );\n if (!confirmed) return;\n state.sessionsLoading = true;\n state.sessionsError = null;\n try {\n await state.client.request(\"sessions.delete\", { key, deleteTranscript: true });\n await loadSessions(state);\n } catch (err) {\n state.sessionsError = String(err);\n } finally {\n state.sessionsLoading = false;\n }\n}\n","import { truncateText } from \"./format\";\n\nconst TOOL_STREAM_LIMIT = 50;\nconst TOOL_STREAM_THROTTLE_MS = 80;\nconst TOOL_OUTPUT_CHAR_LIMIT = 120_000;\n\nexport type AgentEventPayload = {\n runId: string;\n seq: number;\n stream: string;\n ts: number;\n sessionKey?: string;\n data: Record<string, unknown>;\n};\n\nexport type ToolStreamEntry = {\n toolCallId: string;\n runId: string;\n sessionKey?: string;\n name: string;\n args?: unknown;\n output?: string;\n startedAt: number;\n updatedAt: number;\n message: Record<string, unknown>;\n};\n\ntype ToolStreamHost = {\n sessionKey: string;\n chatRunId: string | null;\n toolStreamById: Map<string, ToolStreamEntry>;\n toolStreamOrder: string[];\n chatToolMessages: Record<string, unknown>[];\n toolStreamSyncTimer: number | null;\n};\n\nfunction extractToolOutputText(value: unknown): string | null {\n if (!value || typeof value !== \"object\") return null;\n const record = value as Record<string, unknown>;\n if (typeof record.text === \"string\") return record.text;\n const content = record.content;\n if (!Array.isArray(content)) return null;\n const parts = content\n .map((item) => {\n if (!item || typeof item !== \"object\") return null;\n const entry = item as Record<string, unknown>;\n if (entry.type === \"text\" && typeof entry.text === \"string\") return entry.text;\n return null;\n })\n .filter((part): part is string => Boolean(part));\n if (parts.length === 0) return null;\n return parts.join(\"\\n\");\n}\n\nfunction formatToolOutput(value: unknown): string | null {\n if (value === null || value === undefined) return null;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n const contentText = extractToolOutputText(value);\n let text: string;\n if (typeof value === \"string\") {\n text = value;\n } else if (contentText) {\n text = contentText;\n } else {\n try {\n text = JSON.stringify(value, null, 2);\n } catch {\n text = String(value);\n }\n }\n const truncated = truncateText(text, TOOL_OUTPUT_CHAR_LIMIT);\n if (!truncated.truncated) return truncated.text;\n return `${truncated.text}\\n\\n… truncated (${truncated.total} chars, showing first ${truncated.text.length}).`;\n}\n\nfunction buildToolStreamMessage(entry: ToolStreamEntry): Record<string, unknown> {\n const content: Array<Record<string, unknown>> = [];\n content.push({\n type: \"toolcall\",\n name: entry.name,\n arguments: entry.args ?? {},\n });\n if (entry.output) {\n content.push({\n type: \"toolresult\",\n name: entry.name,\n text: entry.output,\n });\n }\n return {\n role: \"assistant\",\n toolCallId: entry.toolCallId,\n runId: entry.runId,\n content,\n timestamp: entry.startedAt,\n };\n}\n\nfunction trimToolStream(host: ToolStreamHost) {\n if (host.toolStreamOrder.length <= TOOL_STREAM_LIMIT) return;\n const overflow = host.toolStreamOrder.length - TOOL_STREAM_LIMIT;\n const removed = host.toolStreamOrder.splice(0, overflow);\n for (const id of removed) host.toolStreamById.delete(id);\n}\n\nfunction syncToolStreamMessages(host: ToolStreamHost) {\n host.chatToolMessages = host.toolStreamOrder\n .map((id) => host.toolStreamById.get(id)?.message)\n .filter((msg): msg is Record<string, unknown> => Boolean(msg));\n}\n\nexport function flushToolStreamSync(host: ToolStreamHost) {\n if (host.toolStreamSyncTimer != null) {\n clearTimeout(host.toolStreamSyncTimer);\n host.toolStreamSyncTimer = null;\n }\n syncToolStreamMessages(host);\n}\n\nexport function scheduleToolStreamSync(host: ToolStreamHost, force = false) {\n if (force) {\n flushToolStreamSync(host);\n return;\n }\n if (host.toolStreamSyncTimer != null) return;\n host.toolStreamSyncTimer = window.setTimeout(\n () => flushToolStreamSync(host),\n TOOL_STREAM_THROTTLE_MS,\n );\n}\n\nexport function resetToolStream(host: ToolStreamHost) {\n host.toolStreamById.clear();\n host.toolStreamOrder = [];\n host.chatToolMessages = [];\n flushToolStreamSync(host);\n}\n\nexport type CompactionStatus = {\n active: boolean;\n startedAt: number | null;\n completedAt: number | null;\n};\n\ntype CompactionHost = ToolStreamHost & {\n compactionStatus?: CompactionStatus | null;\n compactionClearTimer?: number | null;\n};\n\nconst COMPACTION_TOAST_DURATION_MS = 5000;\n\nexport function handleCompactionEvent(host: CompactionHost, payload: AgentEventPayload) {\n const data = payload.data ?? {};\n const phase = typeof data.phase === \"string\" ? data.phase : \"\";\n\n // Clear any existing timer\n if (host.compactionClearTimer != null) {\n window.clearTimeout(host.compactionClearTimer);\n host.compactionClearTimer = null;\n }\n\n if (phase === \"start\") {\n host.compactionStatus = {\n active: true,\n startedAt: Date.now(),\n completedAt: null,\n };\n } else if (phase === \"end\") {\n host.compactionStatus = {\n active: false,\n startedAt: host.compactionStatus?.startedAt ?? null,\n completedAt: Date.now(),\n };\n // Auto-clear the toast after duration\n host.compactionClearTimer = window.setTimeout(() => {\n host.compactionStatus = null;\n host.compactionClearTimer = null;\n }, COMPACTION_TOAST_DURATION_MS);\n }\n}\n\nexport function handleAgentEvent(host: ToolStreamHost, payload?: AgentEventPayload) {\n if (!payload) return;\n\n // Handle compaction events\n if (payload.stream === \"compaction\") {\n handleCompactionEvent(host as CompactionHost, payload);\n return;\n }\n\n if (payload.stream !== \"tool\") return;\n const sessionKey = typeof payload.sessionKey === \"string\" ? payload.sessionKey : undefined;\n if (sessionKey && sessionKey !== host.sessionKey) return;\n // Fallback: only accept session-less events for the active run.\n if (!sessionKey && host.chatRunId && payload.runId !== host.chatRunId) return;\n if (host.chatRunId && payload.runId !== host.chatRunId) return;\n if (!host.chatRunId) return;\n\n const data = payload.data ?? {};\n const toolCallId = typeof data.toolCallId === \"string\" ? data.toolCallId : \"\";\n if (!toolCallId) return;\n const name = typeof data.name === \"string\" ? data.name : \"tool\";\n const phase = typeof data.phase === \"string\" ? data.phase : \"\";\n const args = phase === \"start\" ? data.args : undefined;\n const output =\n phase === \"update\"\n ? formatToolOutput(data.partialResult)\n : phase === \"result\"\n ? formatToolOutput(data.result)\n : undefined;\n\n const now = Date.now();\n let entry = host.toolStreamById.get(toolCallId);\n if (!entry) {\n entry = {\n toolCallId,\n runId: payload.runId,\n sessionKey,\n name,\n args,\n output,\n startedAt: typeof payload.ts === \"number\" ? payload.ts : now,\n updatedAt: now,\n message: {},\n };\n host.toolStreamById.set(toolCallId, entry);\n host.toolStreamOrder.push(toolCallId);\n } else {\n entry.name = name;\n if (args !== undefined) entry.args = args;\n if (output !== undefined) entry.output = output;\n entry.updatedAt = now;\n }\n\n entry.message = buildToolStreamMessage(entry);\n trimToolStream(host);\n scheduleToolStreamSync(host, phase === \"result\");\n}\n","type ScrollHost = {\n updateComplete: Promise<unknown>;\n querySelector: (selectors: string) => Element | null;\n style: CSSStyleDeclaration;\n chatScrollFrame: number | null;\n chatScrollTimeout: number | null;\n chatHasAutoScrolled: boolean;\n chatUserNearBottom: boolean;\n logsScrollFrame: number | null;\n logsAtBottom: boolean;\n topbarObserver: ResizeObserver | null;\n};\n\nexport function scheduleChatScroll(host: ScrollHost, force = false) {\n if (host.chatScrollFrame) cancelAnimationFrame(host.chatScrollFrame);\n if (host.chatScrollTimeout != null) {\n clearTimeout(host.chatScrollTimeout);\n host.chatScrollTimeout = null;\n }\n const pickScrollTarget = () => {\n const container = host.querySelector(\".chat-thread\") as HTMLElement | null;\n if (container) {\n const overflowY = getComputedStyle(container).overflowY;\n const canScroll =\n overflowY === \"auto\" ||\n overflowY === \"scroll\" ||\n container.scrollHeight - container.clientHeight > 1;\n if (canScroll) return container;\n }\n return (document.scrollingElement ?? document.documentElement) as HTMLElement | null;\n };\n // Wait for Lit render to complete, then scroll\n void host.updateComplete.then(() => {\n host.chatScrollFrame = requestAnimationFrame(() => {\n host.chatScrollFrame = null;\n const target = pickScrollTarget();\n if (!target) return;\n const distanceFromBottom = target.scrollHeight - target.scrollTop - target.clientHeight;\n const shouldStick = force || host.chatUserNearBottom || distanceFromBottom < 200;\n if (!shouldStick) return;\n if (force) host.chatHasAutoScrolled = true;\n target.scrollTop = target.scrollHeight;\n host.chatUserNearBottom = true;\n const retryDelay = force ? 150 : 120;\n host.chatScrollTimeout = window.setTimeout(() => {\n host.chatScrollTimeout = null;\n const latest = pickScrollTarget();\n if (!latest) return;\n const latestDistanceFromBottom =\n latest.scrollHeight - latest.scrollTop - latest.clientHeight;\n const shouldStickRetry = force || host.chatUserNearBottom || latestDistanceFromBottom < 200;\n if (!shouldStickRetry) return;\n latest.scrollTop = latest.scrollHeight;\n host.chatUserNearBottom = true;\n }, retryDelay);\n });\n });\n}\n\nexport function scheduleLogsScroll(host: ScrollHost, force = false) {\n if (host.logsScrollFrame) cancelAnimationFrame(host.logsScrollFrame);\n void host.updateComplete.then(() => {\n host.logsScrollFrame = requestAnimationFrame(() => {\n host.logsScrollFrame = null;\n const container = host.querySelector(\".log-stream\") as HTMLElement | null;\n if (!container) return;\n const distanceFromBottom =\n container.scrollHeight - container.scrollTop - container.clientHeight;\n const shouldStick = force || distanceFromBottom < 80;\n if (!shouldStick) return;\n container.scrollTop = container.scrollHeight;\n });\n });\n}\n\nexport function handleChatScroll(host: ScrollHost, event: Event) {\n const container = event.currentTarget as HTMLElement | null;\n if (!container) return;\n const distanceFromBottom = container.scrollHeight - container.scrollTop - container.clientHeight;\n host.chatUserNearBottom = distanceFromBottom < 200;\n}\n\nexport function handleLogsScroll(host: ScrollHost, event: Event) {\n const container = event.currentTarget as HTMLElement | null;\n if (!container) return;\n const distanceFromBottom = container.scrollHeight - container.scrollTop - container.clientHeight;\n host.logsAtBottom = distanceFromBottom < 80;\n}\n\nexport function resetChatScroll(host: ScrollHost) {\n host.chatHasAutoScrolled = false;\n host.chatUserNearBottom = true;\n}\n\nexport function exportLogs(lines: string[], label: string) {\n if (lines.length === 0) return;\n const blob = new Blob([`${lines.join(\"\\n\")}\\n`], { type: \"text/plain\" });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n const stamp = new Date().toISOString().slice(0, 19).replace(/[:T]/g, \"-\");\n anchor.href = url;\n anchor.download = `openclaw-logs-${label}-${stamp}.log`;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nexport function observeTopbar(host: ScrollHost) {\n if (typeof ResizeObserver === \"undefined\") return;\n const topbar = host.querySelector(\".topbar\");\n if (!topbar) return;\n const update = () => {\n const { height } = topbar.getBoundingClientRect();\n host.style.setProperty(\"--topbar-height\", `${height}px`);\n };\n update();\n host.topbarObserver = new ResizeObserver(() => update());\n host.topbarObserver.observe(topbar);\n}\n","export function cloneConfigObject<T>(value: T): T {\n if (typeof structuredClone === \"function\") {\n return structuredClone(value);\n }\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport function serializeConfigForm(form: Record<string, unknown>): string {\n return `${JSON.stringify(form, null, 2).trimEnd()}\\n`;\n}\n\nexport function setPathValue(\n obj: Record<string, unknown> | unknown[],\n path: Array<string | number>,\n value: unknown,\n) {\n if (path.length === 0) return;\n let current: Record<string, unknown> | unknown[] = obj;\n for (let i = 0; i < path.length - 1; i += 1) {\n const key = path[i];\n const nextKey = path[i + 1];\n if (typeof key === \"number\") {\n if (!Array.isArray(current)) return;\n if (current[key] == null) {\n current[key] = typeof nextKey === \"number\" ? [] : ({} as Record<string, unknown>);\n }\n current = current[key] as Record<string, unknown> | unknown[];\n } else {\n if (typeof current !== \"object\" || current == null) return;\n const record = current as Record<string, unknown>;\n if (record[key] == null) {\n record[key] = typeof nextKey === \"number\" ? [] : ({} as Record<string, unknown>);\n }\n current = record[key] as Record<string, unknown> | unknown[];\n }\n }\n const lastKey = path[path.length - 1];\n if (typeof lastKey === \"number\") {\n if (Array.isArray(current)) current[lastKey] = value;\n return;\n }\n if (typeof current === \"object\" && current != null) {\n (current as Record<string, unknown>)[lastKey] = value;\n }\n}\n\nexport function removePathValue(\n obj: Record<string, unknown> | unknown[],\n path: Array<string | number>,\n) {\n if (path.length === 0) return;\n let current: Record<string, unknown> | unknown[] = obj;\n for (let i = 0; i < path.length - 1; i += 1) {\n const key = path[i];\n if (typeof key === \"number\") {\n if (!Array.isArray(current)) return;\n current = current[key] as Record<string, unknown> | unknown[];\n } else {\n if (typeof current !== \"object\" || current == null) return;\n current = (current as Record<string, unknown>)[key] as Record<string, unknown> | unknown[];\n }\n if (current == null) return;\n }\n const lastKey = path[path.length - 1];\n if (typeof lastKey === \"number\") {\n if (Array.isArray(current)) current.splice(lastKey, 1);\n return;\n }\n if (typeof current === \"object\" && current != null) {\n delete (current as Record<string, unknown>)[lastKey];\n }\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport type { ConfigSchemaResponse, ConfigSnapshot, ConfigUiHints } from \"../types\";\nimport {\n cloneConfigObject,\n removePathValue,\n serializeConfigForm,\n setPathValue,\n} from \"./config/form-utils\";\n\nexport type ConfigState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n applySessionKey: string;\n configLoading: boolean;\n configRaw: string;\n configRawOriginal: string;\n configValid: boolean | null;\n configIssues: unknown[];\n configSaving: boolean;\n configApplying: boolean;\n updateRunning: boolean;\n configSnapshot: ConfigSnapshot | null;\n configSchema: unknown | null;\n configSchemaVersion: string | null;\n configSchemaLoading: boolean;\n configUiHints: ConfigUiHints;\n configForm: Record<string, unknown> | null;\n configFormOriginal: Record<string, unknown> | null;\n configFormDirty: boolean;\n configFormMode: \"form\" | \"raw\";\n configSearchQuery: string;\n configActiveSection: string | null;\n configActiveSubsection: string | null;\n lastError: string | null;\n};\n\nexport async function loadConfig(state: ConfigState) {\n if (!state.client || !state.connected) return;\n state.configLoading = true;\n state.lastError = null;\n try {\n const res = (await state.client.request(\"config.get\", {})) as ConfigSnapshot;\n applyConfigSnapshot(state, res);\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.configLoading = false;\n }\n}\n\nexport async function loadConfigSchema(state: ConfigState) {\n if (!state.client || !state.connected) return;\n if (state.configSchemaLoading) return;\n state.configSchemaLoading = true;\n try {\n const res = (await state.client.request(\"config.schema\", {})) as ConfigSchemaResponse;\n applyConfigSchema(state, res);\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.configSchemaLoading = false;\n }\n}\n\nexport function applyConfigSchema(state: ConfigState, res: ConfigSchemaResponse) {\n state.configSchema = res.schema ?? null;\n state.configUiHints = res.uiHints ?? {};\n state.configSchemaVersion = res.version ?? null;\n}\n\nexport function applyConfigSnapshot(state: ConfigState, snapshot: ConfigSnapshot) {\n state.configSnapshot = snapshot;\n const rawFromSnapshot =\n typeof snapshot.raw === \"string\"\n ? snapshot.raw\n : snapshot.config && typeof snapshot.config === \"object\"\n ? serializeConfigForm(snapshot.config as Record<string, unknown>)\n : state.configRaw;\n if (!state.configFormDirty || state.configFormMode === \"raw\") {\n state.configRaw = rawFromSnapshot;\n } else if (state.configForm) {\n state.configRaw = serializeConfigForm(state.configForm);\n } else {\n state.configRaw = rawFromSnapshot;\n }\n state.configValid = typeof snapshot.valid === \"boolean\" ? snapshot.valid : null;\n state.configIssues = Array.isArray(snapshot.issues) ? snapshot.issues : [];\n\n if (!state.configFormDirty) {\n state.configForm = cloneConfigObject(snapshot.config ?? {});\n state.configFormOriginal = cloneConfigObject(snapshot.config ?? {});\n state.configRawOriginal = rawFromSnapshot;\n }\n}\n\nexport async function saveConfig(state: ConfigState) {\n if (!state.client || !state.connected) return;\n state.configSaving = true;\n state.lastError = null;\n try {\n const raw =\n state.configFormMode === \"form\" && state.configForm\n ? serializeConfigForm(state.configForm)\n : state.configRaw;\n const baseHash = state.configSnapshot?.hash;\n if (!baseHash) {\n state.lastError = \"Config hash missing; reload and retry.\";\n return;\n }\n await state.client.request(\"config.set\", { raw, baseHash });\n state.configFormDirty = false;\n await loadConfig(state);\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.configSaving = false;\n }\n}\n\nexport async function applyConfig(state: ConfigState) {\n if (!state.client || !state.connected) return;\n state.configApplying = true;\n state.lastError = null;\n try {\n const raw =\n state.configFormMode === \"form\" && state.configForm\n ? serializeConfigForm(state.configForm)\n : state.configRaw;\n const baseHash = state.configSnapshot?.hash;\n if (!baseHash) {\n state.lastError = \"Config hash missing; reload and retry.\";\n return;\n }\n await state.client.request(\"config.apply\", {\n raw,\n baseHash,\n sessionKey: state.applySessionKey,\n });\n state.configFormDirty = false;\n await loadConfig(state);\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.configApplying = false;\n }\n}\n\nexport async function runUpdate(state: ConfigState) {\n if (!state.client || !state.connected) return;\n state.updateRunning = true;\n state.lastError = null;\n try {\n await state.client.request(\"update.run\", {\n sessionKey: state.applySessionKey,\n });\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.updateRunning = false;\n }\n}\n\nexport function updateConfigFormValue(\n state: ConfigState,\n path: Array<string | number>,\n value: unknown,\n) {\n const base = cloneConfigObject(state.configForm ?? state.configSnapshot?.config ?? {});\n setPathValue(base, path, value);\n state.configForm = base;\n state.configFormDirty = true;\n if (state.configFormMode === \"form\") {\n state.configRaw = serializeConfigForm(base);\n }\n}\n\nexport function removeConfigFormValue(state: ConfigState, path: Array<string | number>) {\n const base = cloneConfigObject(state.configForm ?? state.configSnapshot?.config ?? {});\n removePathValue(base, path);\n state.configForm = base;\n state.configFormDirty = true;\n if (state.configFormMode === \"form\") {\n state.configRaw = serializeConfigForm(base);\n }\n}\n","import { toNumber } from \"../format\";\nimport type { GatewayBrowserClient } from \"../gateway\";\nimport type { CronJob, CronRunLogEntry, CronStatus } from \"../types\";\nimport type { CronFormState } from \"../ui-types\";\n\nexport type CronState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n cronLoading: boolean;\n cronJobs: CronJob[];\n cronStatus: CronStatus | null;\n cronError: string | null;\n cronForm: CronFormState;\n cronRunsJobId: string | null;\n cronRuns: CronRunLogEntry[];\n cronBusy: boolean;\n};\n\nexport async function loadCronStatus(state: CronState) {\n if (!state.client || !state.connected) return;\n try {\n const res = (await state.client.request(\"cron.status\", {})) as CronStatus;\n state.cronStatus = res;\n } catch (err) {\n state.cronError = String(err);\n }\n}\n\nexport async function loadCronJobs(state: CronState) {\n if (!state.client || !state.connected) return;\n if (state.cronLoading) return;\n state.cronLoading = true;\n state.cronError = null;\n try {\n const res = (await state.client.request(\"cron.list\", {\n includeDisabled: true,\n })) as { jobs?: CronJob[] };\n state.cronJobs = Array.isArray(res.jobs) ? res.jobs : [];\n } catch (err) {\n state.cronError = String(err);\n } finally {\n state.cronLoading = false;\n }\n}\n\nexport function buildCronSchedule(form: CronFormState) {\n if (form.scheduleKind === \"at\") {\n const ms = Date.parse(form.scheduleAt);\n if (!Number.isFinite(ms)) throw new Error(\"Invalid run time.\");\n return { kind: \"at\" as const, atMs: ms };\n }\n if (form.scheduleKind === \"every\") {\n const amount = toNumber(form.everyAmount, 0);\n if (amount <= 0) throw new Error(\"Invalid interval amount.\");\n const unit = form.everyUnit;\n const mult = unit === \"minutes\" ? 60_000 : unit === \"hours\" ? 3_600_000 : 86_400_000;\n return { kind: \"every\" as const, everyMs: amount * mult };\n }\n const expr = form.cronExpr.trim();\n if (!expr) throw new Error(\"Cron expression required.\");\n return { kind: \"cron\" as const, expr, tz: form.cronTz.trim() || undefined };\n}\n\nexport function buildCronPayload(form: CronFormState) {\n if (form.payloadKind === \"systemEvent\") {\n const text = form.payloadText.trim();\n if (!text) throw new Error(\"System event text required.\");\n return { kind: \"systemEvent\" as const, text };\n }\n const message = form.payloadText.trim();\n if (!message) throw new Error(\"Agent message required.\");\n const payload: {\n kind: \"agentTurn\";\n message: string;\n deliver?: boolean;\n channel?: string;\n to?: string;\n timeoutSeconds?: number;\n } = { kind: \"agentTurn\", message };\n if (form.deliver) payload.deliver = true;\n if (form.channel) payload.channel = form.channel;\n if (form.to.trim()) payload.to = form.to.trim();\n const timeoutSeconds = toNumber(form.timeoutSeconds, 0);\n if (timeoutSeconds > 0) payload.timeoutSeconds = timeoutSeconds;\n return payload;\n}\n\nexport async function addCronJob(state: CronState) {\n if (!state.client || !state.connected || state.cronBusy) return;\n state.cronBusy = true;\n state.cronError = null;\n try {\n const schedule = buildCronSchedule(state.cronForm);\n const payload = buildCronPayload(state.cronForm);\n const agentId = state.cronForm.agentId.trim();\n const job = {\n name: state.cronForm.name.trim(),\n description: state.cronForm.description.trim() || undefined,\n agentId: agentId || undefined,\n enabled: state.cronForm.enabled,\n schedule,\n sessionTarget: state.cronForm.sessionTarget,\n wakeMode: state.cronForm.wakeMode,\n payload,\n isolation:\n state.cronForm.postToMainPrefix.trim() && state.cronForm.sessionTarget === \"isolated\"\n ? { postToMainPrefix: state.cronForm.postToMainPrefix.trim() }\n : undefined,\n };\n if (!job.name) throw new Error(\"Name required.\");\n await state.client.request(\"cron.add\", job);\n state.cronForm = {\n ...state.cronForm,\n name: \"\",\n description: \"\",\n payloadText: \"\",\n };\n await loadCronJobs(state);\n await loadCronStatus(state);\n } catch (err) {\n state.cronError = String(err);\n } finally {\n state.cronBusy = false;\n }\n}\n\nexport async function toggleCronJob(state: CronState, job: CronJob, enabled: boolean) {\n if (!state.client || !state.connected || state.cronBusy) return;\n state.cronBusy = true;\n state.cronError = null;\n try {\n await state.client.request(\"cron.update\", { id: job.id, patch: { enabled } });\n await loadCronJobs(state);\n await loadCronStatus(state);\n } catch (err) {\n state.cronError = String(err);\n } finally {\n state.cronBusy = false;\n }\n}\n\nexport async function runCronJob(state: CronState, job: CronJob) {\n if (!state.client || !state.connected || state.cronBusy) return;\n state.cronBusy = true;\n state.cronError = null;\n try {\n await state.client.request(\"cron.run\", { id: job.id, mode: \"force\" });\n await loadCronRuns(state, job.id);\n } catch (err) {\n state.cronError = String(err);\n } finally {\n state.cronBusy = false;\n }\n}\n\nexport async function removeCronJob(state: CronState, job: CronJob) {\n if (!state.client || !state.connected || state.cronBusy) return;\n state.cronBusy = true;\n state.cronError = null;\n try {\n await state.client.request(\"cron.remove\", { id: job.id });\n if (state.cronRunsJobId === job.id) {\n state.cronRunsJobId = null;\n state.cronRuns = [];\n }\n await loadCronJobs(state);\n await loadCronStatus(state);\n } catch (err) {\n state.cronError = String(err);\n } finally {\n state.cronBusy = false;\n }\n}\n\nexport async function loadCronRuns(state: CronState, jobId: string) {\n if (!state.client || !state.connected) return;\n try {\n const res = (await state.client.request(\"cron.runs\", {\n id: jobId,\n limit: 50,\n })) as { entries?: CronRunLogEntry[] };\n state.cronRunsJobId = jobId;\n state.cronRuns = Array.isArray(res.entries) ? res.entries : [];\n } catch (err) {\n state.cronError = String(err);\n }\n}\n","import type { ChannelsStatusSnapshot } from \"../types\";\nimport type { ChannelsState } from \"./channels.types\";\n\nexport type { ChannelsState };\n\nexport async function loadChannels(state: ChannelsState, probe: boolean) {\n if (!state.client || !state.connected) return;\n if (state.channelsLoading) return;\n state.channelsLoading = true;\n state.channelsError = null;\n try {\n const res = (await state.client.request(\"channels.status\", {\n probe,\n timeoutMs: 8000,\n })) as ChannelsStatusSnapshot;\n state.channelsSnapshot = res;\n state.channelsLastSuccess = Date.now();\n } catch (err) {\n state.channelsError = String(err);\n } finally {\n state.channelsLoading = false;\n }\n}\n\nexport async function startWhatsAppLogin(state: ChannelsState, force: boolean) {\n if (!state.client || !state.connected || state.whatsappBusy) return;\n state.whatsappBusy = true;\n try {\n const res = (await state.client.request(\"web.login.start\", {\n force,\n timeoutMs: 30000,\n })) as { message?: string; qrDataUrl?: string };\n state.whatsappLoginMessage = res.message ?? null;\n state.whatsappLoginQrDataUrl = res.qrDataUrl ?? null;\n state.whatsappLoginConnected = null;\n } catch (err) {\n state.whatsappLoginMessage = String(err);\n state.whatsappLoginQrDataUrl = null;\n state.whatsappLoginConnected = null;\n } finally {\n state.whatsappBusy = false;\n }\n}\n\nexport async function waitWhatsAppLogin(state: ChannelsState) {\n if (!state.client || !state.connected || state.whatsappBusy) return;\n state.whatsappBusy = true;\n try {\n const res = (await state.client.request(\"web.login.wait\", {\n timeoutMs: 120000,\n })) as { connected?: boolean; message?: string };\n state.whatsappLoginMessage = res.message ?? null;\n state.whatsappLoginConnected = res.connected ?? null;\n if (res.connected) state.whatsappLoginQrDataUrl = null;\n } catch (err) {\n state.whatsappLoginMessage = String(err);\n state.whatsappLoginConnected = null;\n } finally {\n state.whatsappBusy = false;\n }\n}\n\nexport async function logoutWhatsApp(state: ChannelsState) {\n if (!state.client || !state.connected || state.whatsappBusy) return;\n state.whatsappBusy = true;\n try {\n await state.client.request(\"channels.logout\", { channel: \"whatsapp\" });\n state.whatsappLoginMessage = \"Logged out.\";\n state.whatsappLoginQrDataUrl = null;\n state.whatsappLoginConnected = null;\n } catch (err) {\n state.whatsappLoginMessage = String(err);\n } finally {\n state.whatsappBusy = false;\n }\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport type { HealthSnapshot, StatusSummary } from \"../types\";\n\nexport type DebugState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n debugLoading: boolean;\n debugStatus: StatusSummary | null;\n debugHealth: HealthSnapshot | null;\n debugModels: unknown[];\n debugHeartbeat: unknown | null;\n debugCallMethod: string;\n debugCallParams: string;\n debugCallResult: string | null;\n debugCallError: string | null;\n};\n\nexport async function loadDebug(state: DebugState) {\n if (!state.client || !state.connected) return;\n if (state.debugLoading) return;\n state.debugLoading = true;\n try {\n const [status, health, models, heartbeat] = await Promise.all([\n state.client.request(\"status\", {}),\n state.client.request(\"health\", {}),\n state.client.request(\"models.list\", {}),\n state.client.request(\"last-heartbeat\", {}),\n ]);\n state.debugStatus = status as StatusSummary;\n state.debugHealth = health as HealthSnapshot;\n const modelPayload = models as { models?: unknown[] } | undefined;\n state.debugModels = Array.isArray(modelPayload?.models) ? modelPayload?.models : [];\n state.debugHeartbeat = heartbeat as unknown;\n } catch (err) {\n state.debugCallError = String(err);\n } finally {\n state.debugLoading = false;\n }\n}\n\nexport async function callDebugMethod(state: DebugState) {\n if (!state.client || !state.connected) return;\n state.debugCallError = null;\n state.debugCallResult = null;\n try {\n const params = state.debugCallParams.trim()\n ? (JSON.parse(state.debugCallParams) as unknown)\n : {};\n const res = await state.client.request(state.debugCallMethod.trim(), params);\n state.debugCallResult = JSON.stringify(res, null, 2);\n } catch (err) {\n state.debugCallError = String(err);\n }\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport type { LogEntry, LogLevel } from \"../types\";\n\nexport type LogsState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n logsLoading: boolean;\n logsError: string | null;\n logsCursor: number | null;\n logsFile: string | null;\n logsEntries: LogEntry[];\n logsTruncated: boolean;\n logsLastFetchAt: number | null;\n logsLimit: number;\n logsMaxBytes: number;\n};\n\nconst LOG_BUFFER_LIMIT = 2000;\nconst LEVELS = new Set<LogLevel>([\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"]);\n\nfunction parseMaybeJsonString(value: unknown) {\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return null;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nfunction normalizeLevel(value: unknown): LogLevel | null {\n if (typeof value !== \"string\") return null;\n const lowered = value.toLowerCase() as LogLevel;\n return LEVELS.has(lowered) ? lowered : null;\n}\n\nexport function parseLogLine(line: string): LogEntry {\n if (!line.trim()) return { raw: line, message: line };\n try {\n const obj = JSON.parse(line) as Record<string, unknown>;\n const meta =\n obj && typeof obj._meta === \"object\" && obj._meta !== null\n ? (obj._meta as Record<string, unknown>)\n : null;\n const time =\n typeof obj.time === \"string\" ? obj.time : typeof meta?.date === \"string\" ? meta?.date : null;\n const level = normalizeLevel(meta?.logLevelName ?? meta?.level);\n\n const contextCandidate =\n typeof obj[\"0\"] === \"string\"\n ? (obj[\"0\"] as string)\n : typeof meta?.name === \"string\"\n ? (meta?.name as string)\n : null;\n const contextObj = parseMaybeJsonString(contextCandidate);\n let subsystem: string | null = null;\n if (contextObj) {\n if (typeof contextObj.subsystem === \"string\") subsystem = contextObj.subsystem;\n else if (typeof contextObj.module === \"string\") subsystem = contextObj.module;\n }\n if (!subsystem && contextCandidate && contextCandidate.length < 120) {\n subsystem = contextCandidate;\n }\n\n let message: string | null = null;\n if (typeof obj[\"1\"] === \"string\") message = obj[\"1\"] as string;\n else if (!contextObj && typeof obj[\"0\"] === \"string\") message = obj[\"0\"] as string;\n else if (typeof obj.message === \"string\") message = obj.message as string;\n\n return {\n raw: line,\n time,\n level,\n subsystem,\n message: message ?? line,\n meta: meta ?? undefined,\n };\n } catch {\n return { raw: line, message: line };\n }\n}\n\nexport async function loadLogs(state: LogsState, opts?: { reset?: boolean; quiet?: boolean }) {\n if (!state.client || !state.connected) return;\n if (state.logsLoading && !opts?.quiet) return;\n if (!opts?.quiet) state.logsLoading = true;\n state.logsError = null;\n try {\n const res = await state.client.request(\"logs.tail\", {\n cursor: opts?.reset ? undefined : (state.logsCursor ?? undefined),\n limit: state.logsLimit,\n maxBytes: state.logsMaxBytes,\n });\n const payload = res as {\n file?: string;\n cursor?: number;\n size?: number;\n lines?: unknown;\n truncated?: boolean;\n reset?: boolean;\n };\n const lines = Array.isArray(payload.lines)\n ? (payload.lines.filter((line) => typeof line === \"string\") as string[])\n : [];\n const entries = lines.map(parseLogLine);\n const shouldReset = Boolean(opts?.reset || payload.reset || state.logsCursor == null);\n state.logsEntries = shouldReset\n ? entries\n : [...state.logsEntries, ...entries].slice(-LOG_BUFFER_LIMIT);\n if (typeof payload.cursor === \"number\") state.logsCursor = payload.cursor;\n if (typeof payload.file === \"string\") state.logsFile = payload.file;\n state.logsTruncated = Boolean(payload.truncated);\n state.logsLastFetchAt = Date.now();\n } catch (err) {\n state.logsError = String(err);\n } finally {\n if (!opts?.quiet) state.logsLoading = false;\n }\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","import { getPublicKeyAsync, signAsync, utils } from \"@noble/ed25519\";\n\ntype StoredIdentity = {\n version: 1;\n deviceId: string;\n publicKey: string;\n privateKey: string;\n createdAtMs: number;\n};\n\nexport type DeviceIdentity = {\n deviceId: string;\n publicKey: string;\n privateKey: string;\n};\n\nconst STORAGE_KEY = \"openclaw-device-identity-v1\";\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/g, \"\");\n}\n\nfunction base64UrlDecode(input: string): Uint8Array {\n const normalized = input.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n const padded = normalized + \"=\".repeat((4 - (normalized.length % 4)) % 4);\n const binary = atob(padded);\n const out = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) out[i] = binary.charCodeAt(i);\n return out;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nasync function fingerprintPublicKey(publicKey: Uint8Array): Promise<string> {\n const hash = await crypto.subtle.digest(\"SHA-256\", publicKey);\n return bytesToHex(new Uint8Array(hash));\n}\n\nasync function generateIdentity(): Promise<DeviceIdentity> {\n const privateKey = utils.randomSecretKey();\n const publicKey = await getPublicKeyAsync(privateKey);\n const deviceId = await fingerprintPublicKey(publicKey);\n return {\n deviceId,\n publicKey: base64UrlEncode(publicKey),\n privateKey: base64UrlEncode(privateKey),\n };\n}\n\nexport async function loadOrCreateDeviceIdentity(): Promise<DeviceIdentity> {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw) {\n const parsed = JSON.parse(raw) as StoredIdentity;\n if (\n parsed?.version === 1 &&\n typeof parsed.deviceId === \"string\" &&\n typeof parsed.publicKey === \"string\" &&\n typeof parsed.privateKey === \"string\"\n ) {\n const derivedId = await fingerprintPublicKey(base64UrlDecode(parsed.publicKey));\n if (derivedId !== parsed.deviceId) {\n const updated: StoredIdentity = {\n ...parsed,\n deviceId: derivedId,\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));\n return {\n deviceId: derivedId,\n publicKey: parsed.publicKey,\n privateKey: parsed.privateKey,\n };\n }\n return {\n deviceId: parsed.deviceId,\n publicKey: parsed.publicKey,\n privateKey: parsed.privateKey,\n };\n }\n }\n } catch {\n // fall through to regenerate\n }\n\n const identity = await generateIdentity();\n const stored: StoredIdentity = {\n version: 1,\n deviceId: identity.deviceId,\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n createdAtMs: Date.now(),\n };\n localStorage.setItem(STORAGE_KEY, JSON.stringify(stored));\n return identity;\n}\n\nexport async function signDevicePayload(privateKeyBase64Url: string, payload: string) {\n const key = base64UrlDecode(privateKeyBase64Url);\n const data = new TextEncoder().encode(payload);\n const sig = await signAsync(data, key);\n return base64UrlEncode(sig);\n}\n","export type DeviceAuthEntry = {\n token: string;\n role: string;\n scopes: string[];\n updatedAtMs: number;\n};\n\ntype DeviceAuthStore = {\n version: 1;\n deviceId: string;\n tokens: Record<string, DeviceAuthEntry>;\n};\n\nconst STORAGE_KEY = \"openclaw.device.auth.v1\";\n\nfunction normalizeRole(role: string): string {\n return role.trim();\n}\n\nfunction normalizeScopes(scopes: string[] | undefined): string[] {\n if (!Array.isArray(scopes)) return [];\n const out = new Set<string>();\n for (const scope of scopes) {\n const trimmed = scope.trim();\n if (trimmed) out.add(trimmed);\n }\n return [...out].sort();\n}\n\nfunction readStore(): DeviceAuthStore | null {\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as DeviceAuthStore;\n if (!parsed || parsed.version !== 1) return null;\n if (!parsed.deviceId || typeof parsed.deviceId !== \"string\") return null;\n if (!parsed.tokens || typeof parsed.tokens !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStore(store: DeviceAuthStore) {\n try {\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(store));\n } catch {\n // best-effort\n }\n}\n\nexport function loadDeviceAuthToken(params: {\n deviceId: string;\n role: string;\n}): DeviceAuthEntry | null {\n const store = readStore();\n if (!store || store.deviceId !== params.deviceId) return null;\n const role = normalizeRole(params.role);\n const entry = store.tokens[role];\n if (!entry || typeof entry.token !== \"string\") return null;\n return entry;\n}\n\nexport function storeDeviceAuthToken(params: {\n deviceId: string;\n role: string;\n token: string;\n scopes?: string[];\n}): DeviceAuthEntry {\n const role = normalizeRole(params.role);\n const next: DeviceAuthStore = {\n version: 1,\n deviceId: params.deviceId,\n tokens: {},\n };\n const existing = readStore();\n if (existing && existing.deviceId === params.deviceId) {\n next.tokens = { ...existing.tokens };\n }\n const entry: DeviceAuthEntry = {\n token: params.token,\n role,\n scopes: normalizeScopes(params.scopes),\n updatedAtMs: Date.now(),\n };\n next.tokens[role] = entry;\n writeStore(next);\n return entry;\n}\n\nexport function clearDeviceAuthToken(params: { deviceId: string; role: string }) {\n const store = readStore();\n if (!store || store.deviceId !== params.deviceId) return;\n const role = normalizeRole(params.role);\n if (!store.tokens[role]) return;\n const next = { ...store, tokens: { ...store.tokens } };\n delete next.tokens[role];\n writeStore(next);\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport { loadOrCreateDeviceIdentity } from \"../device-identity\";\nimport { clearDeviceAuthToken, storeDeviceAuthToken } from \"../device-auth\";\n\nexport type DeviceTokenSummary = {\n role: string;\n scopes?: string[];\n createdAtMs?: number;\n rotatedAtMs?: number;\n revokedAtMs?: number;\n lastUsedAtMs?: number;\n};\n\nexport type PendingDevice = {\n requestId: string;\n deviceId: string;\n displayName?: string;\n role?: string;\n remoteIp?: string;\n isRepair?: boolean;\n ts?: number;\n};\n\nexport type PairedDevice = {\n deviceId: string;\n displayName?: string;\n roles?: string[];\n scopes?: string[];\n remoteIp?: string;\n tokens?: DeviceTokenSummary[];\n createdAtMs?: number;\n approvedAtMs?: number;\n};\n\nexport type DevicePairingList = {\n pending: PendingDevice[];\n paired: PairedDevice[];\n};\n\nexport type DevicesState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n devicesLoading: boolean;\n devicesError: string | null;\n devicesList: DevicePairingList | null;\n};\n\nexport async function loadDevices(state: DevicesState, opts?: { quiet?: boolean }) {\n if (!state.client || !state.connected) return;\n if (state.devicesLoading) return;\n state.devicesLoading = true;\n if (!opts?.quiet) state.devicesError = null;\n try {\n const res = (await state.client.request(\"device.pair.list\", {})) as DevicePairingList | null;\n state.devicesList = {\n pending: Array.isArray(res?.pending) ? res!.pending : [],\n paired: Array.isArray(res?.paired) ? res!.paired : [],\n };\n } catch (err) {\n if (!opts?.quiet) state.devicesError = String(err);\n } finally {\n state.devicesLoading = false;\n }\n}\n\nexport async function approveDevicePairing(state: DevicesState, requestId: string) {\n if (!state.client || !state.connected) return;\n try {\n await state.client.request(\"device.pair.approve\", { requestId });\n await loadDevices(state);\n } catch (err) {\n state.devicesError = String(err);\n }\n}\n\nexport async function rejectDevicePairing(state: DevicesState, requestId: string) {\n if (!state.client || !state.connected) return;\n const confirmed = window.confirm(\"Reject this device pairing request?\");\n if (!confirmed) return;\n try {\n await state.client.request(\"device.pair.reject\", { requestId });\n await loadDevices(state);\n } catch (err) {\n state.devicesError = String(err);\n }\n}\n\nexport async function rotateDeviceToken(\n state: DevicesState,\n params: { deviceId: string; role: string; scopes?: string[] },\n) {\n if (!state.client || !state.connected) return;\n try {\n const res = (await state.client.request(\"device.token.rotate\", params)) as\n | { token?: string; role?: string; deviceId?: string; scopes?: string[] }\n | undefined;\n if (res?.token) {\n const identity = await loadOrCreateDeviceIdentity();\n const role = res.role ?? params.role;\n if (res.deviceId === identity.deviceId || params.deviceId === identity.deviceId) {\n storeDeviceAuthToken({\n deviceId: identity.deviceId,\n role,\n token: res.token,\n scopes: res.scopes ?? params.scopes ?? [],\n });\n }\n window.prompt(\"New device token (copy and store securely):\", res.token);\n }\n await loadDevices(state);\n } catch (err) {\n state.devicesError = String(err);\n }\n}\n\nexport async function revokeDeviceToken(\n state: DevicesState,\n params: { deviceId: string; role: string },\n) {\n if (!state.client || !state.connected) return;\n const confirmed = window.confirm(`Revoke token for ${params.deviceId} (${params.role})?`);\n if (!confirmed) return;\n try {\n await state.client.request(\"device.token.revoke\", params);\n const identity = await loadOrCreateDeviceIdentity();\n if (params.deviceId === identity.deviceId) {\n clearDeviceAuthToken({ deviceId: identity.deviceId, role: params.role });\n }\n await loadDevices(state);\n } catch (err) {\n state.devicesError = String(err);\n }\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\n\nexport type NodesState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n nodesLoading: boolean;\n nodes: Array<Record<string, unknown>>;\n lastError: string | null;\n};\n\nexport async function loadNodes(state: NodesState, opts?: { quiet?: boolean }) {\n if (!state.client || !state.connected) return;\n if (state.nodesLoading) return;\n state.nodesLoading = true;\n if (!opts?.quiet) state.lastError = null;\n try {\n const res = (await state.client.request(\"node.list\", {})) as {\n nodes?: Array<Record<string, unknown>>;\n };\n state.nodes = Array.isArray(res.nodes) ? res.nodes : [];\n } catch (err) {\n if (!opts?.quiet) state.lastError = String(err);\n } finally {\n state.nodesLoading = false;\n }\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport { cloneConfigObject, removePathValue, setPathValue } from \"./config/form-utils\";\n\nexport type ExecApprovalsDefaults = {\n security?: string;\n ask?: string;\n askFallback?: string;\n autoAllowSkills?: boolean;\n};\n\nexport type ExecApprovalsAllowlistEntry = {\n id?: string;\n pattern: string;\n lastUsedAt?: number;\n lastUsedCommand?: string;\n lastResolvedPath?: string;\n};\n\nexport type ExecApprovalsAgent = ExecApprovalsDefaults & {\n allowlist?: ExecApprovalsAllowlistEntry[];\n};\n\nexport type ExecApprovalsFile = {\n version?: number;\n socket?: { path?: string };\n defaults?: ExecApprovalsDefaults;\n agents?: Record<string, ExecApprovalsAgent>;\n};\n\nexport type ExecApprovalsSnapshot = {\n path: string;\n exists: boolean;\n hash: string;\n file: ExecApprovalsFile;\n};\n\nexport type ExecApprovalsTarget = { kind: \"gateway\" } | { kind: \"node\"; nodeId: string };\n\nexport type ExecApprovalsState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n execApprovalsLoading: boolean;\n execApprovalsSaving: boolean;\n execApprovalsDirty: boolean;\n execApprovalsSnapshot: ExecApprovalsSnapshot | null;\n execApprovalsForm: ExecApprovalsFile | null;\n execApprovalsSelectedAgent: string | null;\n lastError: string | null;\n};\n\nfunction resolveExecApprovalsRpc(target?: ExecApprovalsTarget | null): {\n method: string;\n params: Record<string, unknown>;\n} | null {\n if (!target || target.kind === \"gateway\") {\n return { method: \"exec.approvals.get\", params: {} };\n }\n const nodeId = target.nodeId.trim();\n if (!nodeId) return null;\n return { method: \"exec.approvals.node.get\", params: { nodeId } };\n}\n\nfunction resolveExecApprovalsSaveRpc(\n target: ExecApprovalsTarget | null | undefined,\n params: { file: ExecApprovalsFile; baseHash: string },\n): { method: string; params: Record<string, unknown> } | null {\n if (!target || target.kind === \"gateway\") {\n return { method: \"exec.approvals.set\", params };\n }\n const nodeId = target.nodeId.trim();\n if (!nodeId) return null;\n return { method: \"exec.approvals.node.set\", params: { ...params, nodeId } };\n}\n\nexport async function loadExecApprovals(\n state: ExecApprovalsState,\n target?: ExecApprovalsTarget | null,\n) {\n if (!state.client || !state.connected) return;\n if (state.execApprovalsLoading) return;\n state.execApprovalsLoading = true;\n state.lastError = null;\n try {\n const rpc = resolveExecApprovalsRpc(target);\n if (!rpc) {\n state.lastError = \"Select a node before loading exec approvals.\";\n return;\n }\n const res = (await state.client.request(rpc.method, rpc.params)) as ExecApprovalsSnapshot;\n applyExecApprovalsSnapshot(state, res);\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.execApprovalsLoading = false;\n }\n}\n\nexport function applyExecApprovalsSnapshot(\n state: ExecApprovalsState,\n snapshot: ExecApprovalsSnapshot,\n) {\n state.execApprovalsSnapshot = snapshot;\n if (!state.execApprovalsDirty) {\n state.execApprovalsForm = cloneConfigObject(snapshot.file ?? {});\n }\n}\n\nexport async function saveExecApprovals(\n state: ExecApprovalsState,\n target?: ExecApprovalsTarget | null,\n) {\n if (!state.client || !state.connected) return;\n state.execApprovalsSaving = true;\n state.lastError = null;\n try {\n const baseHash = state.execApprovalsSnapshot?.hash;\n if (!baseHash) {\n state.lastError = \"Exec approvals hash missing; reload and retry.\";\n return;\n }\n const file = state.execApprovalsForm ?? state.execApprovalsSnapshot?.file ?? {};\n const rpc = resolveExecApprovalsSaveRpc(target, { file, baseHash });\n if (!rpc) {\n state.lastError = \"Select a node before saving exec approvals.\";\n return;\n }\n await state.client.request(rpc.method, rpc.params);\n state.execApprovalsDirty = false;\n await loadExecApprovals(state, target);\n } catch (err) {\n state.lastError = String(err);\n } finally {\n state.execApprovalsSaving = false;\n }\n}\n\nexport function updateExecApprovalsFormValue(\n state: ExecApprovalsState,\n path: Array<string | number>,\n value: unknown,\n) {\n const base = cloneConfigObject(\n state.execApprovalsForm ?? state.execApprovalsSnapshot?.file ?? {},\n );\n setPathValue(base, path, value);\n state.execApprovalsForm = base;\n state.execApprovalsDirty = true;\n}\n\nexport function removeExecApprovalsFormValue(\n state: ExecApprovalsState,\n path: Array<string | number>,\n) {\n const base = cloneConfigObject(\n state.execApprovalsForm ?? state.execApprovalsSnapshot?.file ?? {},\n );\n removePathValue(base, path);\n state.execApprovalsForm = base;\n state.execApprovalsDirty = true;\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport type { PresenceEntry } from \"../types\";\n\nexport type PresenceState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n presenceLoading: boolean;\n presenceEntries: PresenceEntry[];\n presenceError: string | null;\n presenceStatus: string | null;\n};\n\nexport async function loadPresence(state: PresenceState) {\n if (!state.client || !state.connected) return;\n if (state.presenceLoading) return;\n state.presenceLoading = true;\n state.presenceError = null;\n state.presenceStatus = null;\n try {\n const res = (await state.client.request(\"system-presence\", {})) as PresenceEntry[] | undefined;\n if (Array.isArray(res)) {\n state.presenceEntries = res;\n state.presenceStatus = res.length === 0 ? \"No instances yet.\" : null;\n } else {\n state.presenceEntries = [];\n state.presenceStatus = \"No presence payload.\";\n }\n } catch (err) {\n state.presenceError = String(err);\n } finally {\n state.presenceLoading = false;\n }\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport type { SkillStatusReport } from \"../types\";\n\nexport type SkillsState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n skillsLoading: boolean;\n skillsReport: SkillStatusReport | null;\n skillsError: string | null;\n skillsBusyKey: string | null;\n skillEdits: Record<string, string>;\n skillMessages: SkillMessageMap;\n};\n\nexport type SkillMessage = {\n kind: \"success\" | \"error\";\n message: string;\n};\n\nexport type SkillMessageMap = Record<string, SkillMessage>;\n\ntype LoadSkillsOptions = {\n clearMessages?: boolean;\n};\n\nfunction setSkillMessage(state: SkillsState, key: string, message?: SkillMessage) {\n if (!key.trim()) return;\n const next = { ...state.skillMessages };\n if (message) next[key] = message;\n else delete next[key];\n state.skillMessages = next;\n}\n\nfunction getErrorMessage(err: unknown) {\n if (err instanceof Error) return err.message;\n return String(err);\n}\n\nexport async function loadSkills(state: SkillsState, options?: LoadSkillsOptions) {\n if (options?.clearMessages && Object.keys(state.skillMessages).length > 0) {\n state.skillMessages = {};\n }\n if (!state.client || !state.connected) return;\n if (state.skillsLoading) return;\n state.skillsLoading = true;\n state.skillsError = null;\n try {\n const res = (await state.client.request(\"skills.status\", {})) as SkillStatusReport | undefined;\n if (res) state.skillsReport = res;\n } catch (err) {\n state.skillsError = getErrorMessage(err);\n } finally {\n state.skillsLoading = false;\n }\n}\n\nexport function updateSkillEdit(state: SkillsState, skillKey: string, value: string) {\n state.skillEdits = { ...state.skillEdits, [skillKey]: value };\n}\n\nexport async function updateSkillEnabled(state: SkillsState, skillKey: string, enabled: boolean) {\n if (!state.client || !state.connected) return;\n state.skillsBusyKey = skillKey;\n state.skillsError = null;\n try {\n await state.client.request(\"skills.update\", { skillKey, enabled });\n await loadSkills(state);\n setSkillMessage(state, skillKey, {\n kind: \"success\",\n message: enabled ? \"Skill enabled\" : \"Skill disabled\",\n });\n } catch (err) {\n const message = getErrorMessage(err);\n state.skillsError = message;\n setSkillMessage(state, skillKey, {\n kind: \"error\",\n message,\n });\n } finally {\n state.skillsBusyKey = null;\n }\n}\n\nexport async function saveSkillApiKey(state: SkillsState, skillKey: string) {\n if (!state.client || !state.connected) return;\n state.skillsBusyKey = skillKey;\n state.skillsError = null;\n try {\n const apiKey = state.skillEdits[skillKey] ?? \"\";\n await state.client.request(\"skills.update\", { skillKey, apiKey });\n await loadSkills(state);\n setSkillMessage(state, skillKey, {\n kind: \"success\",\n message: \"API key saved\",\n });\n } catch (err) {\n const message = getErrorMessage(err);\n state.skillsError = message;\n setSkillMessage(state, skillKey, {\n kind: \"error\",\n message,\n });\n } finally {\n state.skillsBusyKey = null;\n }\n}\n\nexport async function installSkill(\n state: SkillsState,\n skillKey: string,\n name: string,\n installId: string,\n) {\n if (!state.client || !state.connected) return;\n state.skillsBusyKey = skillKey;\n state.skillsError = null;\n try {\n const result = (await state.client.request(\"skills.install\", {\n name,\n installId,\n timeoutMs: 120000,\n })) as { ok?: boolean; message?: string };\n await loadSkills(state);\n setSkillMessage(state, skillKey, {\n kind: \"success\",\n message: result?.message ?? \"Installed\",\n });\n } catch (err) {\n const message = getErrorMessage(err);\n state.skillsError = message;\n setSkillMessage(state, skillKey, {\n kind: \"error\",\n message,\n });\n } finally {\n state.skillsBusyKey = null;\n }\n}\n","export type ThemeMode = \"system\" | \"light\" | \"dark\";\nexport type ResolvedTheme = \"light\" | \"dark\";\n\nexport function getSystemTheme(): ResolvedTheme {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return \"dark\";\n }\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nexport function resolveTheme(mode: ThemeMode): ResolvedTheme {\n if (mode === \"system\") return getSystemTheme();\n return mode;\n}\n","import type { ThemeMode } from \"./theme\";\n\nexport type ThemeTransitionContext = {\n element?: HTMLElement | null;\n pointerClientX?: number;\n pointerClientY?: number;\n};\n\nexport type ThemeTransitionOptions = {\n nextTheme: ThemeMode;\n applyTheme: () => void;\n context?: ThemeTransitionContext;\n currentTheme?: ThemeMode | null;\n};\n\ntype DocumentWithViewTransition = Document & {\n startViewTransition?: (callback: () => void) => { finished: Promise<void> };\n};\n\nconst clamp01 = (value: number) => {\n if (Number.isNaN(value)) return 0.5;\n if (value <= 0) return 0;\n if (value >= 1) return 1;\n return value;\n};\n\nconst hasReducedMotionPreference = () => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") {\n return false;\n }\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ?? false;\n};\n\nconst cleanupThemeTransition = (root: HTMLElement) => {\n root.classList.remove(\"theme-transition\");\n root.style.removeProperty(\"--theme-switch-x\");\n root.style.removeProperty(\"--theme-switch-y\");\n};\n\nexport const startThemeTransition = ({\n nextTheme,\n applyTheme,\n context,\n currentTheme,\n}: ThemeTransitionOptions) => {\n if (currentTheme === nextTheme) return;\n\n const documentReference = globalThis.document ?? null;\n if (!documentReference) {\n applyTheme();\n return;\n }\n\n const root = documentReference.documentElement;\n const document_ = documentReference as DocumentWithViewTransition;\n const prefersReducedMotion = hasReducedMotionPreference();\n\n const canUseViewTransition = Boolean(document_.startViewTransition) && !prefersReducedMotion;\n\n if (canUseViewTransition) {\n let xPercent = 0.5;\n let yPercent = 0.5;\n\n if (\n context?.pointerClientX !== undefined &&\n context?.pointerClientY !== undefined &&\n typeof window !== \"undefined\"\n ) {\n xPercent = clamp01(context.pointerClientX / window.innerWidth);\n yPercent = clamp01(context.pointerClientY / window.innerHeight);\n } else if (context?.element) {\n const rect = context.element.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0 && typeof window !== \"undefined\") {\n xPercent = clamp01((rect.left + rect.width / 2) / window.innerWidth);\n yPercent = clamp01((rect.top + rect.height / 2) / window.innerHeight);\n }\n }\n\n root.style.setProperty(\"--theme-switch-x\", `${xPercent * 100}%`);\n root.style.setProperty(\"--theme-switch-y\", `${yPercent * 100}%`);\n root.classList.add(\"theme-transition\");\n\n try {\n const transition = document_.startViewTransition?.(() => {\n applyTheme();\n });\n if (transition?.finished) {\n void transition.finished.finally(() => cleanupThemeTransition(root));\n } else {\n cleanupThemeTransition(root);\n }\n } catch {\n cleanupThemeTransition(root);\n applyTheme();\n }\n return;\n }\n\n applyTheme();\n cleanupThemeTransition(root);\n};\n","import { loadLogs } from \"./controllers/logs\";\nimport { loadNodes } from \"./controllers/nodes\";\nimport { loadDebug } from \"./controllers/debug\";\nimport type { OpenClawApp } from \"./app\";\n\ntype PollingHost = {\n nodesPollInterval: number | null;\n logsPollInterval: number | null;\n debugPollInterval: number | null;\n tab: string;\n};\n\nexport function startNodesPolling(host: PollingHost) {\n if (host.nodesPollInterval != null) return;\n host.nodesPollInterval = window.setInterval(\n () => void loadNodes(host as unknown as OpenClawApp, { quiet: true }),\n 5000,\n );\n}\n\nexport function stopNodesPolling(host: PollingHost) {\n if (host.nodesPollInterval == null) return;\n clearInterval(host.nodesPollInterval);\n host.nodesPollInterval = null;\n}\n\nexport function startLogsPolling(host: PollingHost) {\n if (host.logsPollInterval != null) return;\n host.logsPollInterval = window.setInterval(() => {\n if (host.tab !== \"logs\") return;\n void loadLogs(host as unknown as OpenClawApp, { quiet: true });\n }, 2000);\n}\n\nexport function stopLogsPolling(host: PollingHost) {\n if (host.logsPollInterval == null) return;\n clearInterval(host.logsPollInterval);\n host.logsPollInterval = null;\n}\n\nexport function startDebugPolling(host: PollingHost) {\n if (host.debugPollInterval != null) return;\n host.debugPollInterval = window.setInterval(() => {\n if (host.tab !== \"debug\") return;\n void loadDebug(host as unknown as OpenClawApp);\n }, 3000);\n}\n\nexport function stopDebugPolling(host: PollingHost) {\n if (host.debugPollInterval == null) return;\n clearInterval(host.debugPollInterval);\n host.debugPollInterval = null;\n}\n","import { loadConfig, loadConfigSchema } from \"./controllers/config\";\nimport { loadCronJobs, loadCronStatus } from \"./controllers/cron\";\nimport { loadChannels } from \"./controllers/channels\";\nimport { loadDebug } from \"./controllers/debug\";\nimport { loadLogs } from \"./controllers/logs\";\nimport { loadDevices } from \"./controllers/devices\";\nimport { loadNodes } from \"./controllers/nodes\";\nimport { loadExecApprovals } from \"./controllers/exec-approvals\";\nimport { loadPresence } from \"./controllers/presence\";\nimport { loadSessions } from \"./controllers/sessions\";\nimport { loadSkills } from \"./controllers/skills\";\nimport {\n inferBasePathFromPathname,\n normalizeBasePath,\n normalizePath,\n pathForTab,\n tabFromPath,\n type Tab,\n} from \"./navigation\";\nimport { saveSettings, type UiSettings } from \"./storage\";\nimport { resolveTheme, type ResolvedTheme, type ThemeMode } from \"./theme\";\nimport { startThemeTransition, type ThemeTransitionContext } from \"./theme-transition\";\nimport { scheduleChatScroll, scheduleLogsScroll } from \"./app-scroll\";\nimport {\n startLogsPolling,\n stopLogsPolling,\n startDebugPolling,\n stopDebugPolling,\n} from \"./app-polling\";\nimport { refreshChat } from \"./app-chat\";\nimport type { OpenClawApp } from \"./app\";\n\ntype SettingsHost = {\n settings: UiSettings;\n theme: ThemeMode;\n themeResolved: ResolvedTheme;\n applySessionKey: string;\n sessionKey: string;\n tab: Tab;\n connected: boolean;\n chatHasAutoScrolled: boolean;\n logsAtBottom: boolean;\n eventLog: unknown[];\n eventLogBuffer: unknown[];\n basePath: string;\n themeMedia: MediaQueryList | null;\n themeMediaHandler: ((event: MediaQueryListEvent) => void) | null;\n pendingGatewayUrl?: string | null;\n};\n\nexport function applySettings(host: SettingsHost, next: UiSettings) {\n const normalized = {\n ...next,\n lastActiveSessionKey: next.lastActiveSessionKey?.trim() || next.sessionKey.trim() || \"main\",\n };\n host.settings = normalized;\n saveSettings(normalized);\n if (next.theme !== host.theme) {\n host.theme = next.theme;\n applyResolvedTheme(host, resolveTheme(next.theme));\n }\n host.applySessionKey = host.settings.lastActiveSessionKey;\n}\n\nexport function setLastActiveSessionKey(host: SettingsHost, next: string) {\n const trimmed = next.trim();\n if (!trimmed) return;\n if (host.settings.lastActiveSessionKey === trimmed) return;\n applySettings(host, { ...host.settings, lastActiveSessionKey: trimmed });\n}\n\nexport function applySettingsFromUrl(host: SettingsHost) {\n if (!window.location.search) return;\n const params = new URLSearchParams(window.location.search);\n const tokenRaw = params.get(\"token\");\n const passwordRaw = params.get(\"password\");\n const sessionRaw = params.get(\"session\");\n const gatewayUrlRaw = params.get(\"gatewayUrl\");\n let shouldCleanUrl = false;\n\n if (tokenRaw != null) {\n const token = tokenRaw.trim();\n if (token && token !== host.settings.token) {\n applySettings(host, { ...host.settings, token });\n }\n params.delete(\"token\");\n shouldCleanUrl = true;\n }\n\n if (passwordRaw != null) {\n const password = passwordRaw.trim();\n if (password) {\n (host as { password: string }).password = password;\n }\n params.delete(\"password\");\n shouldCleanUrl = true;\n }\n\n if (sessionRaw != null) {\n const session = sessionRaw.trim();\n if (session) {\n host.sessionKey = session;\n applySettings(host, {\n ...host.settings,\n sessionKey: session,\n lastActiveSessionKey: session,\n });\n }\n }\n\n if (gatewayUrlRaw != null) {\n const gatewayUrl = gatewayUrlRaw.trim();\n if (gatewayUrl && gatewayUrl !== host.settings.gatewayUrl) {\n host.pendingGatewayUrl = gatewayUrl;\n }\n params.delete(\"gatewayUrl\");\n shouldCleanUrl = true;\n }\n\n if (!shouldCleanUrl) return;\n const url = new URL(window.location.href);\n url.search = params.toString();\n window.history.replaceState({}, \"\", url.toString());\n}\n\nexport function setTab(host: SettingsHost, next: Tab) {\n if (host.tab !== next) host.tab = next;\n if (next === \"chat\") host.chatHasAutoScrolled = false;\n if (next === \"logs\") startLogsPolling(host as unknown as Parameters<typeof startLogsPolling>[0]);\n else stopLogsPolling(host as unknown as Parameters<typeof stopLogsPolling>[0]);\n if (next === \"debug\")\n startDebugPolling(host as unknown as Parameters<typeof startDebugPolling>[0]);\n else stopDebugPolling(host as unknown as Parameters<typeof stopDebugPolling>[0]);\n void refreshActiveTab(host);\n syncUrlWithTab(host, next, false);\n}\n\nexport function setTheme(host: SettingsHost, next: ThemeMode, context?: ThemeTransitionContext) {\n const applyTheme = () => {\n host.theme = next;\n applySettings(host, { ...host.settings, theme: next });\n applyResolvedTheme(host, resolveTheme(next));\n };\n startThemeTransition({\n nextTheme: next,\n applyTheme,\n context,\n currentTheme: host.theme,\n });\n}\n\nexport async function refreshActiveTab(host: SettingsHost) {\n if (host.tab === \"overview\") await loadOverview(host);\n if (host.tab === \"channels\") await loadChannelsTab(host);\n if (host.tab === \"instances\") await loadPresence(host as unknown as OpenClawApp);\n if (host.tab === \"sessions\") await loadSessions(host as unknown as OpenClawApp);\n if (host.tab === \"cron\") await loadCron(host);\n if (host.tab === \"skills\") await loadSkills(host as unknown as OpenClawApp);\n if (host.tab === \"nodes\") {\n await loadNodes(host as unknown as OpenClawApp);\n await loadDevices(host as unknown as OpenClawApp);\n await loadConfig(host as unknown as OpenClawApp);\n await loadExecApprovals(host as unknown as OpenClawApp);\n }\n if (host.tab === \"chat\") {\n await refreshChat(host as unknown as Parameters<typeof refreshChat>[0]);\n scheduleChatScroll(\n host as unknown as Parameters<typeof scheduleChatScroll>[0],\n !host.chatHasAutoScrolled,\n );\n }\n if (host.tab === \"config\") {\n await loadConfigSchema(host as unknown as OpenClawApp);\n await loadConfig(host as unknown as OpenClawApp);\n }\n if (host.tab === \"debug\") {\n await loadDebug(host as unknown as OpenClawApp);\n host.eventLog = host.eventLogBuffer;\n }\n if (host.tab === \"logs\") {\n host.logsAtBottom = true;\n await loadLogs(host as unknown as OpenClawApp, { reset: true });\n scheduleLogsScroll(host as unknown as Parameters<typeof scheduleLogsScroll>[0], true);\n }\n}\n\nexport function inferBasePath() {\n if (typeof window === \"undefined\") return \"\";\n const configured = window.__OPENCLAW_CONTROL_UI_BASE_PATH__;\n if (typeof configured === \"string\" && configured.trim()) {\n return normalizeBasePath(configured);\n }\n return inferBasePathFromPathname(window.location.pathname);\n}\n\nexport function syncThemeWithSettings(host: SettingsHost) {\n host.theme = host.settings.theme ?? \"system\";\n applyResolvedTheme(host, resolveTheme(host.theme));\n}\n\nexport function applyResolvedTheme(host: SettingsHost, resolved: ResolvedTheme) {\n host.themeResolved = resolved;\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n root.dataset.theme = resolved;\n root.style.colorScheme = resolved;\n}\n\nexport function attachThemeListener(host: SettingsHost) {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n host.themeMedia = window.matchMedia(\"(prefers-color-scheme: dark)\");\n host.themeMediaHandler = (event) => {\n if (host.theme !== \"system\") return;\n applyResolvedTheme(host, event.matches ? \"dark\" : \"light\");\n };\n if (typeof host.themeMedia.addEventListener === \"function\") {\n host.themeMedia.addEventListener(\"change\", host.themeMediaHandler);\n return;\n }\n const legacy = host.themeMedia as MediaQueryList & {\n addListener: (cb: (event: MediaQueryListEvent) => void) => void;\n };\n legacy.addListener(host.themeMediaHandler);\n}\n\nexport function detachThemeListener(host: SettingsHost) {\n if (!host.themeMedia || !host.themeMediaHandler) return;\n if (typeof host.themeMedia.removeEventListener === \"function\") {\n host.themeMedia.removeEventListener(\"change\", host.themeMediaHandler);\n return;\n }\n const legacy = host.themeMedia as MediaQueryList & {\n removeListener: (cb: (event: MediaQueryListEvent) => void) => void;\n };\n legacy.removeListener(host.themeMediaHandler);\n host.themeMedia = null;\n host.themeMediaHandler = null;\n}\n\nexport function syncTabWithLocation(host: SettingsHost, replace: boolean) {\n if (typeof window === \"undefined\") return;\n const resolved = tabFromPath(window.location.pathname, host.basePath) ?? \"chat\";\n setTabFromRoute(host, resolved);\n syncUrlWithTab(host, resolved, replace);\n}\n\nexport function onPopState(host: SettingsHost) {\n if (typeof window === \"undefined\") return;\n const resolved = tabFromPath(window.location.pathname, host.basePath);\n if (!resolved) return;\n\n const url = new URL(window.location.href);\n const session = url.searchParams.get(\"session\")?.trim();\n if (session) {\n host.sessionKey = session;\n applySettings(host, {\n ...host.settings,\n sessionKey: session,\n lastActiveSessionKey: session,\n });\n }\n\n setTabFromRoute(host, resolved);\n}\n\nexport function setTabFromRoute(host: SettingsHost, next: Tab) {\n if (host.tab !== next) host.tab = next;\n if (next === \"chat\") host.chatHasAutoScrolled = false;\n if (next === \"logs\") startLogsPolling(host as unknown as Parameters<typeof startLogsPolling>[0]);\n else stopLogsPolling(host as unknown as Parameters<typeof stopLogsPolling>[0]);\n if (next === \"debug\")\n startDebugPolling(host as unknown as Parameters<typeof startDebugPolling>[0]);\n else stopDebugPolling(host as unknown as Parameters<typeof stopDebugPolling>[0]);\n if (host.connected) void refreshActiveTab(host);\n}\n\nexport function syncUrlWithTab(host: SettingsHost, tab: Tab, replace: boolean) {\n if (typeof window === \"undefined\") return;\n const targetPath = normalizePath(pathForTab(tab, host.basePath));\n const currentPath = normalizePath(window.location.pathname);\n const url = new URL(window.location.href);\n\n if (tab === \"chat\" && host.sessionKey) {\n url.searchParams.set(\"session\", host.sessionKey);\n } else {\n url.searchParams.delete(\"session\");\n }\n\n if (currentPath !== targetPath) {\n url.pathname = targetPath;\n }\n\n if (replace) {\n window.history.replaceState({}, \"\", url.toString());\n } else {\n window.history.pushState({}, \"\", url.toString());\n }\n}\n\nexport function syncUrlWithSessionKey(host: SettingsHost, sessionKey: string, replace: boolean) {\n if (typeof window === \"undefined\") return;\n const url = new URL(window.location.href);\n url.searchParams.set(\"session\", sessionKey);\n if (replace) window.history.replaceState({}, \"\", url.toString());\n else window.history.pushState({}, \"\", url.toString());\n}\n\nexport async function loadOverview(host: SettingsHost) {\n await Promise.all([\n loadChannels(host as unknown as OpenClawApp, false),\n loadPresence(host as unknown as OpenClawApp),\n loadSessions(host as unknown as OpenClawApp),\n loadCronStatus(host as unknown as OpenClawApp),\n loadDebug(host as unknown as OpenClawApp),\n ]);\n}\n\nexport async function loadChannelsTab(host: SettingsHost) {\n await Promise.all([\n loadChannels(host as unknown as OpenClawApp, true),\n loadConfigSchema(host as unknown as OpenClawApp),\n loadConfig(host as unknown as OpenClawApp),\n ]);\n}\n\nexport async function loadCron(host: SettingsHost) {\n await Promise.all([\n loadChannels(host as unknown as OpenClawApp, false),\n loadCronStatus(host as unknown as OpenClawApp),\n loadCronJobs(host as unknown as OpenClawApp),\n ]);\n}\n","import { abortChatRun, loadChatHistory, sendChatMessage } from \"./controllers/chat\";\nimport { loadSessions } from \"./controllers/sessions\";\nimport { generateUUID } from \"./uuid\";\nimport { resetToolStream } from \"./app-tool-stream\";\nimport { scheduleChatScroll } from \"./app-scroll\";\nimport { setLastActiveSessionKey } from \"./app-settings\";\nimport { normalizeBasePath } from \"./navigation\";\nimport type { GatewayHelloOk } from \"./gateway\";\nimport { parseAgentSessionKey } from \"../../../src/sessions/session-key-utils.js\";\nimport type { OpenClawApp } from \"./app\";\nimport type { ChatAttachment, ChatQueueItem } from \"./ui-types\";\n\ntype ChatHost = {\n connected: boolean;\n chatMessage: string;\n chatAttachments: ChatAttachment[];\n chatQueue: ChatQueueItem[];\n chatRunId: string | null;\n chatSending: boolean;\n sessionKey: string;\n basePath: string;\n hello: GatewayHelloOk | null;\n chatAvatarUrl: string | null;\n refreshSessionsAfterChat: Set<string>;\n};\n\nexport const CHAT_SESSIONS_ACTIVE_MINUTES = 10;\n\nexport function isChatBusy(host: ChatHost) {\n return host.chatSending || Boolean(host.chatRunId);\n}\n\nexport function isChatStopCommand(text: string) {\n const trimmed = text.trim();\n if (!trimmed) return false;\n const normalized = trimmed.toLowerCase();\n if (normalized === \"/stop\") return true;\n return (\n normalized === \"stop\" ||\n normalized === \"esc\" ||\n normalized === \"abort\" ||\n normalized === \"wait\" ||\n normalized === \"exit\"\n );\n}\n\nfunction isChatResetCommand(text: string) {\n const trimmed = text.trim();\n if (!trimmed) return false;\n const normalized = trimmed.toLowerCase();\n if (normalized === \"/new\" || normalized === \"/reset\") return true;\n return normalized.startsWith(\"/new \") || normalized.startsWith(\"/reset \");\n}\n\nexport async function handleAbortChat(host: ChatHost) {\n if (!host.connected) return;\n host.chatMessage = \"\";\n await abortChatRun(host as unknown as OpenClawApp);\n}\n\nfunction enqueueChatMessage(\n host: ChatHost,\n text: string,\n attachments?: ChatAttachment[],\n refreshSessions?: boolean,\n) {\n const trimmed = text.trim();\n const hasAttachments = Boolean(attachments && attachments.length > 0);\n if (!trimmed && !hasAttachments) return;\n host.chatQueue = [\n ...host.chatQueue,\n {\n id: generateUUID(),\n text: trimmed,\n createdAt: Date.now(),\n attachments: hasAttachments ? attachments?.map((att) => ({ ...att })) : undefined,\n refreshSessions,\n },\n ];\n}\n\nasync function sendChatMessageNow(\n host: ChatHost,\n message: string,\n opts?: {\n previousDraft?: string;\n restoreDraft?: boolean;\n attachments?: ChatAttachment[];\n previousAttachments?: ChatAttachment[];\n restoreAttachments?: boolean;\n refreshSessions?: boolean;\n },\n) {\n resetToolStream(host as unknown as Parameters<typeof resetToolStream>[0]);\n const runId = await sendChatMessage(host as unknown as OpenClawApp, message, opts?.attachments);\n const ok = Boolean(runId);\n if (!ok && opts?.previousDraft != null) {\n host.chatMessage = opts.previousDraft;\n }\n if (!ok && opts?.previousAttachments) {\n host.chatAttachments = opts.previousAttachments;\n }\n if (ok) {\n setLastActiveSessionKey(\n host as unknown as Parameters<typeof setLastActiveSessionKey>[0],\n host.sessionKey,\n );\n }\n if (ok && opts?.restoreDraft && opts.previousDraft?.trim()) {\n host.chatMessage = opts.previousDraft;\n }\n if (ok && opts?.restoreAttachments && opts.previousAttachments?.length) {\n host.chatAttachments = opts.previousAttachments;\n }\n scheduleChatScroll(host as unknown as Parameters<typeof scheduleChatScroll>[0]);\n if (ok && !host.chatRunId) {\n void flushChatQueue(host);\n }\n if (ok && opts?.refreshSessions && runId) {\n host.refreshSessionsAfterChat.add(runId);\n }\n return ok;\n}\n\nasync function flushChatQueue(host: ChatHost) {\n if (!host.connected || isChatBusy(host)) return;\n const [next, ...rest] = host.chatQueue;\n if (!next) return;\n host.chatQueue = rest;\n const ok = await sendChatMessageNow(host, next.text, {\n attachments: next.attachments,\n refreshSessions: next.refreshSessions,\n });\n if (!ok) {\n host.chatQueue = [next, ...host.chatQueue];\n }\n}\n\nexport function removeQueuedMessage(host: ChatHost, id: string) {\n host.chatQueue = host.chatQueue.filter((item) => item.id !== id);\n}\n\nexport async function handleSendChat(\n host: ChatHost,\n messageOverride?: string,\n opts?: { restoreDraft?: boolean },\n) {\n if (!host.connected) return;\n const previousDraft = host.chatMessage;\n const message = (messageOverride ?? host.chatMessage).trim();\n const attachments = host.chatAttachments ?? [];\n const attachmentsToSend = messageOverride == null ? attachments : [];\n const hasAttachments = attachmentsToSend.length > 0;\n\n // Allow sending with just attachments (no message text required)\n if (!message && !hasAttachments) return;\n\n if (isChatStopCommand(message)) {\n await handleAbortChat(host);\n return;\n }\n\n const refreshSessions = isChatResetCommand(message);\n if (messageOverride == null) {\n host.chatMessage = \"\";\n // Clear attachments when sending\n host.chatAttachments = [];\n }\n\n if (isChatBusy(host)) {\n enqueueChatMessage(host, message, attachmentsToSend, refreshSessions);\n return;\n }\n\n await sendChatMessageNow(host, message, {\n previousDraft: messageOverride == null ? previousDraft : undefined,\n restoreDraft: Boolean(messageOverride && opts?.restoreDraft),\n attachments: hasAttachments ? attachmentsToSend : undefined,\n previousAttachments: messageOverride == null ? attachments : undefined,\n restoreAttachments: Boolean(messageOverride && opts?.restoreDraft),\n refreshSessions,\n });\n}\n\nexport async function refreshChat(host: ChatHost) {\n await Promise.all([\n loadChatHistory(host as unknown as OpenClawApp),\n loadSessions(host as unknown as OpenClawApp, {\n activeMinutes: CHAT_SESSIONS_ACTIVE_MINUTES,\n }),\n refreshChatAvatar(host),\n ]);\n scheduleChatScroll(host as unknown as Parameters<typeof scheduleChatScroll>[0], true);\n}\n\nexport const flushChatQueueForEvent = flushChatQueue;\n\ntype SessionDefaultsSnapshot = {\n defaultAgentId?: string;\n};\n\nfunction resolveAgentIdForSession(host: ChatHost): string | null {\n const parsed = parseAgentSessionKey(host.sessionKey);\n if (parsed?.agentId) return parsed.agentId;\n const snapshot = host.hello?.snapshot as\n | { sessionDefaults?: SessionDefaultsSnapshot }\n | undefined;\n const fallback = snapshot?.sessionDefaults?.defaultAgentId?.trim();\n return fallback || \"main\";\n}\n\nfunction buildAvatarMetaUrl(basePath: string, agentId: string): string {\n const base = normalizeBasePath(basePath);\n const encoded = encodeURIComponent(agentId);\n return base ? `${base}/avatar/${encoded}?meta=1` : `/avatar/${encoded}?meta=1`;\n}\n\nexport async function refreshChatAvatar(host: ChatHost) {\n if (!host.connected) {\n host.chatAvatarUrl = null;\n return;\n }\n const agentId = resolveAgentIdForSession(host);\n if (!agentId) {\n host.chatAvatarUrl = null;\n return;\n }\n host.chatAvatarUrl = null;\n const url = buildAvatarMetaUrl(host.basePath, agentId);\n try {\n const res = await fetch(url, { method: \"GET\" });\n if (!res.ok) {\n host.chatAvatarUrl = null;\n return;\n }\n const data = (await res.json()) as { avatarUrl?: unknown };\n const avatarUrl = typeof data.avatarUrl === \"string\" ? data.avatarUrl.trim() : \"\";\n host.chatAvatarUrl = avatarUrl || null;\n } catch {\n host.chatAvatarUrl = null;\n }\n}\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>o,n=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,e={HTML:1,SVG:2,MATHML:3},l=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,d=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,f=o=>o?._$litDirective$,r=o=>void 0===o.strings,s=()=>document.createComment(\"\"),v=(o,n,e)=>{const l=o._$AA.parentNode,d=void 0===n?o._$AB:n._$AA;if(void 0===e){const i=l.insertBefore(s(),d),n=l.insertBefore(s(),d);e=new t(i,n,o,o.options)}else{const t=e._$AB.nextSibling,n=e._$AM,c=n!==o;if(c){let t;e._$AQ?.(o),e._$AM=o,void 0!==e._$AP&&(t=o._$AU)!==n._$AU&&e._$AP(t)}if(t!==d||c){let o=e._$AA;for(;o!==t;){const t=i(o).nextSibling;i(l).insertBefore(o,d),o=t}}}return e},u=(o,t,i=o)=>(o._$AI(t,i),o),m={},p=(o,t=m)=>o._$AH=t,M=o=>o._$AH,h=o=>{o._$AR(),o._$AA.remove()},j=o=>{o._$AR()};export{e as TemplateResultType,j as clearPart,M as getCommittedValue,f as getDirectiveClass,v as insertPart,d as isCompiledTemplateResult,c as isDirectiveResult,n as isPrimitive,r as isSingleExpression,l as isTemplateResult,h as removePart,u as setChildPartValue,p as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{isSingleExpression as i}from\"./directive-helpers.js\";import{Directive as t,PartType as e}from\"./directive.js\";export{directive}from\"./directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=(i,t)=>{const e=i._$AN;if(void 0===e)return!1;for(const i of e)i._$AO?.(t,!1),s(i,t);return!0},o=i=>{let t,e;do{if(void 0===(t=i._$AM))break;e=t._$AN,e.delete(i),i=t}while(0===e?.size)},r=i=>{for(let t;t=i._$AM;i=t){let e=t._$AN;if(void 0===e)t._$AN=e=new Set;else if(e.has(i))break;e.add(i),c(t)}};function h(i){void 0!==this._$AN?(o(this),this._$AM=i,r(this)):this._$AM=i}function n(i,t=!1,e=0){const r=this._$AH,h=this._$AN;if(void 0!==h&&0!==h.size)if(t)if(Array.isArray(r))for(let i=e;i<r.length;i++)s(r[i],!1),o(r[i]);else null!=r&&(s(r,!1),o(r));else s(this,i)}const c=i=>{i.type==e.CHILD&&(i._$AP??=n,i._$AQ??=h)};class f extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(i,t,e){super._$AT(i,t,e),r(this),this.isConnected=i._$AU}_$AO(i,t=!0){i!==this.isConnected&&(this.isConnected=i,i?this.reconnected?.():this.disconnected?.()),t&&(s(this,i),o(this))}setValue(t){if(i(this._$Ct))this._$Ct._$AI(t,this);else{const i=[...this._$Ct._$AH];i[this._$Ci]=t,this._$Ct._$AI(i,this,0)}}disconnected(){}reconnected(){}}export{f as AsyncDirective,t as Directive,e as PartType};\n//# sourceMappingURL=async-directive.js.map\n","import{nothing as t}from\"../lit-html.js\";import{AsyncDirective as i}from\"../async-directive.js\";import{directive as s}from\"../directive.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=()=>new h;class h{}const o=new WeakMap,n=s(class extends i{render(i){return t}update(i,[s]){const e=s!==this.G;return e&&void 0!==this.G&&this.rt(void 0),(e||this.lt!==this.ct)&&(this.G=s,this.ht=i.options?.host,this.rt(this.ct=i.element)),t}rt(t){if(this.isConnected||(t=void 0),\"function\"==typeof this.G){const i=this.ht??globalThis;let s=o.get(i);void 0===s&&(s=new WeakMap,o.set(i,s)),void 0!==s.get(this.G)&&this.G.call(this.ht,void 0),s.set(this.G,t),void 0!==t&&this.G.call(this.ht,t)}else this.G.value=t}get lt(){return\"function\"==typeof this.G?o.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}});export{e as createRef,n as ref};\n//# sourceMappingURL=ref.js.map\n","import{noChange as e}from\"../lit-html.js\";import{directive as s,Directive as t,PartType as r}from\"../directive.js\";import{getCommittedValue as l,setChildPartValue as o,insertPart as i,removePart as n,setCommittedValue as f}from\"../directive-helpers.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst u=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r},c=s(class extends t{constructor(e){if(super(e),e.type!==r.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(e,s,t){let r;void 0===t?t=s:void 0!==s&&(r=s);const l=[],o=[];let i=0;for(const s of e)l[i]=r?r(s,i):i,o[i]=t(s,i),i++;return{values:o,keys:l}}render(e,s,t){return this.dt(e,s,t).values}update(s,[t,r,c]){const d=l(s),{values:p,keys:a}=this.dt(t,r,c);if(!Array.isArray(d))return this.ut=a,p;const h=this.ut??=[],v=[];let m,y,x=0,j=d.length-1,k=0,w=p.length-1;for(;x<=j&&k<=w;)if(null===d[x])x++;else if(null===d[j])j--;else if(h[x]===a[k])v[k]=o(d[x],p[k]),x++,k++;else if(h[j]===a[w])v[w]=o(d[j],p[w]),j--,w--;else if(h[x]===a[w])v[w]=o(d[x],p[w]),i(s,v[w+1],d[x]),x++,w--;else if(h[j]===a[k])v[k]=o(d[j],p[k]),i(s,d[x],d[j]),j--,k++;else if(void 0===m&&(m=u(a,k,w),y=u(h,x,j)),m.has(h[x]))if(m.has(h[j])){const e=y.get(a[k]),t=void 0!==e?d[e]:null;if(null===t){const e=i(s,d[x]);o(e,p[k]),v[k]=e}else v[k]=o(t,p[k]),i(s,d[x],t),d[e]=null;k++}else n(d[j]),j--;else n(d[x]),x++;for(;k<=w;){const e=i(s,v[w+1]);o(e,p[k]),v[k++]=e}for(;x<=j;){const e=d[x++];null!==e&&n(e)}return this.ut=a,f(s,v),e}});export{c as repeat};\n//# sourceMappingURL=repeat.js.map\n","/**\n * Message normalization utilities for chat rendering.\n */\n\nimport type { NormalizedMessage, MessageContentItem } from \"../types/chat-types\";\n\n/**\n * Normalize a raw message object into a consistent structure.\n */\nexport function normalizeMessage(message: unknown): NormalizedMessage {\n const m = message as Record<string, unknown>;\n let role = typeof m.role === \"string\" ? m.role : \"unknown\";\n\n // Detect tool messages by common gateway shapes.\n // Some tool events come through as assistant role with tool_* items in the content array.\n const hasToolId = typeof m.toolCallId === \"string\" || typeof m.tool_call_id === \"string\";\n\n const contentRaw = m.content;\n const contentItems = Array.isArray(contentRaw) ? contentRaw : null;\n const hasToolContent =\n Array.isArray(contentItems) &&\n contentItems.some((item) => {\n const x = item as Record<string, unknown>;\n const t = String(x.type ?? \"\").toLowerCase();\n return t === \"toolresult\" || t === \"tool_result\";\n });\n\n const hasToolName =\n typeof (m as Record<string, unknown>).toolName === \"string\" ||\n typeof (m as Record<string, unknown>).tool_name === \"string\";\n\n if (hasToolId || hasToolContent || hasToolName) {\n role = \"toolResult\";\n }\n\n // Extract content\n let content: MessageContentItem[] = [];\n\n if (typeof m.content === \"string\") {\n content = [{ type: \"text\", text: m.content }];\n } else if (Array.isArray(m.content)) {\n content = m.content.map((item: Record<string, unknown>) => ({\n type: (item.type as MessageContentItem[\"type\"]) || \"text\",\n text: item.text as string | undefined,\n name: item.name as string | undefined,\n args: item.args || item.arguments,\n }));\n } else if (typeof m.text === \"string\") {\n content = [{ type: \"text\", text: m.text }];\n }\n\n const timestamp = typeof m.timestamp === \"number\" ? m.timestamp : Date.now();\n const id = typeof m.id === \"string\" ? m.id : undefined;\n\n return { role, content, timestamp, id };\n}\n\n/**\n * Normalize role for grouping purposes.\n */\nexport function normalizeRoleForGrouping(role: string): string {\n const lower = role.toLowerCase();\n // Preserve original casing when it's already a core role.\n if (role === \"user\" || role === \"User\") return role;\n if (role === \"assistant\") return \"assistant\";\n if (role === \"system\") return \"system\";\n // Keep tool-related roles distinct so the UI can style/toggle them.\n if (\n lower === \"toolresult\" ||\n lower === \"tool_result\" ||\n lower === \"tool\" ||\n lower === \"function\"\n ) {\n return \"tool\";\n }\n return role;\n}\n\n/**\n * Check if a message is a tool result message based on its role.\n */\nexport function isToolResultMessage(message: unknown): boolean {\n const m = message as Record<string, unknown>;\n const role = typeof m.role === \"string\" ? m.role.toLowerCase() : \"\";\n return role === \"toolresult\" || role === \"tool_result\";\n}\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\n * marked v17.0.1 - a markdown parser\n * Copyright (c) 2018-2025, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=L();function Z(u){T=u}var C={exec:()=>null};function k(u,e=\"\"){let t=typeof u==\"string\"?u:u.source,n={replace:(r,i)=>{let s=typeof i==\"string\"?i:i.source;return s=s.replace(m.caret,\"$1\"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var me=(()=>{try{return!!new RegExp(\"(?<=1)(?<!1)\")}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceTabs:/^\\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,unescapeTest:/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:u=>new RegExp(`^( {0,3}${u})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,\"i\")},xe=/^(?:[ \\t]*(?:\\n|$))+/,be=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,Te=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,N=/(?:[*+-]|\\d{1,9}[.)])/,re=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,se=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Oe=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),Q=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,we=/^[^\\n]+/,F=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,ye=k(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",F).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Pe=k(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,N).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",j=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,Se=k(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",j).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ie=k(Q).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),$e=k(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ie).getRegex(),U={blockquote:$e,code:be,def:ye,fences:Re,heading:Te,hr:I,html:Se,lheading:se,list:Pe,newline:xe,paragraph:ie,table:C,text:we},te=k(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),_e={...U,lheading:Oe,table:te,paragraph:k(Q).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",te).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Le={...U,html:k(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",j).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:C,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:k(Q).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",se).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Me=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,oe=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,D=/[\\p{P}\\p{S}]/u,K=/[\\s\\p{P}\\p{S}]/u,ae=/[^\\s\\p{P}\\p{S}]/u,Ce=k(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,K).getRegex(),le=/(?!~)[\\p{P}\\p{S}]/u,Ie=/(?!~)[\\s\\p{P}\\p{S}]/u,Ee=/(?:[^\\s\\p{P}\\p{S}]|~)/u,Be=k(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",me?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),ue=/^(?:\\*+(?:((?!\\*)punct)|[^\\s*]))|^_+(?:((?!_)punct)|([^\\s_]))/,qe=k(ue,\"u\").replace(/punct/g,D).getRegex(),ve=k(ue,\"u\").replace(/punct/g,le).getRegex(),pe=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",De=k(pe,\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,D).getRegex(),He=k(pe,\"gu\").replace(/notPunctSpace/g,Ee).replace(/punctSpace/g,Ie).replace(/punct/g,le).getRegex(),Ze=k(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,D).getRegex(),Ge=k(/\\\\(punct)/,\"gu\").replace(/punct/g,D).getRegex(),Ne=k(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Qe=k(j).replace(\"(?:-->|$)\",\"-->\").getRegex(),Fe=k(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",Qe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+[^`]*?`+(?!`)|[^\\[\\]\\\\`])*?/,je=k(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]*(?:\\n[ \\t]*)?)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),ce=k(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",F).getRegex(),he=k(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",F).getRegex(),Ue=k(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",ce).replace(\"nolink\",he).getRegex(),ne=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,W={_backpedal:C,anyPunctuation:Ge,autolink:Ne,blockSkip:Be,br:oe,code:ze,del:C,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ze,escape:Me,link:je,nolink:he,punctuation:Ce,reflink:ce,reflinkSearch:Ue,tag:Fe,text:Ae,url:C},Ke={...W,link:k(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:k(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},G={...W,emStrongRDelimAst:He,emStrongLDelim:ve,url:k(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",ne).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:k(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",ne).getRegex()},We={...G,br:k(oe).replace(\"{2,}\",\"*\").getRegex(),text:k(G.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},E={normal:U,gfm:_e,pedantic:Le},M={normal:W,gfm:G,breaks:We,pedantic:Ke};var Xe={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},ke=u=>Xe[u];function w(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,ke);return u}function X(u){try{u=encodeURI(u).replace(m.percentDecode,\"%\")}catch{return null}return u}function J(u,e){let t=u.replace(m.findPipe,(i,s,a)=>{let o=!1,l=s;for(;--l>=0&&a[l]===\"\\\\\";)o=!o;return o?\"|\":\" |\"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,\"|\");return n}function z(u,e,t){let n=u.length;if(n===0)return\"\";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function de(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]===\"\\\\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function ge(u,e,t,n,r){let i=e.href,s=e.title||null,a=u[1].replace(r.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let o={type:u[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function Je(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`\n`).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`\n`)}var y=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:t[0],codeBlockStyle:\"indented\",text:this.options.pedantic?n:z(n,`\n`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=Je(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=z(n,\"#\");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:\"heading\",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:z(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=z(t[0],`\n`).split(`\n`),r=\"\",i=\"\",s=[];for(;n.length>0;){let a=!1,o=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))o.push(n[l]),a=!0;else if(!a)o.push(n[l]);else break;n=n.slice(l);let p=o.join(`\n`),c=p.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");r=r?`${r}\n${p}`:p,i=i?`${i}\n${c}`:c;let g=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(c,s,!0),this.lexer.state.top=g,n.length===0)break;let h=s.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.blockquote(f);s[s.length-1]=O,r=r.substring(0,r.length-R.raw.length)+O.raw,i=i.substring(0,i.length-R.text.length)+O.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),O=this.list(f);s[s.length-1]=O,r=r.substring(0,r.length-h.raw.length)+O.raw,i=i.substring(0,i.length-R.raw.length)+O.raw,n=f.substring(s.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:\"list\",raw:\"\",ordered:r,start:r?+n.slice(0,-1):\"\",loose:!1,items:[]};n=r?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=r?n:\"[*+-]\");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let l=!1,p=\"\",c=\"\";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let g=t[2].split(`\n`,1)[0].replace(this.rules.other.listReplaceTabs,O=>\" \".repeat(3*O.length)),h=e.split(`\n`,1)[0],R=!g.trim(),f=0;if(this.options.pedantic?(f=2,c=g.trimStart()):R?f=t[1].length+1:(f=t[2].search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=g.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(p+=h+`\n`,e=e.substring(h.length+1),l=!0),!l){let O=this.rules.other.nextBulletRegex(f),V=this.rules.other.hrRegex(f),Y=this.rules.other.fencesBeginRegex(f),ee=this.rules.other.headingBeginRegex(f),fe=this.rules.other.htmlBeginRegex(f);for(;e;){let H=e.split(`\n`,1)[0],A;if(h=H,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),A=h):A=h.replace(this.rules.other.tabCharGlobal,\" \"),Y.test(h)||ee.test(h)||fe.test(h)||O.test(h)||V.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`\n`+A.slice(f);else{if(R||g.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||Y.test(g)||ee.test(g)||V.test(g))break;c+=`\n`+h}!R&&!h.trim()&&(R=!0),p+=H+`\n`,e=e.substring(H.length+1),g=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(a=!0)),i.items.push({type:\"list_item\",raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=p}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0]?.type===\"text\"||l.tokens[0]?.type===\"paragraph\"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,\"\"),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,\"\");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,\"\");break}}let p=this.rules.other.listTaskCheckbox.exec(l.raw);if(p){let c={type:\"checkbox\",raw:p[0]+\" \",checked:p[0]!==\"[ ]\"};l.checked=c.checked,i.loose?l.tokens[0]&&[\"paragraph\",\"text\"].includes(l.tokens[0].type)&&\"tokens\"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=c.raw+l.tokens[0].raw,l.tokens[0].text=c.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(c)):l.tokens.unshift({type:\"paragraph\",raw:c.raw,text:c.raw,tokens:[c]}):l.tokens.unshift(c)}}if(!i.loose){let p=l.tokens.filter(g=>g.type===\"space\"),c=p.length>0&&p.some(g=>this.rules.other.anyLine.test(g.raw));i.loose=c}}if(i.loose)for(let l of i.items){l.loose=!0;for(let p of l.tokens)p.type===\"text\"&&(p.type=\"paragraph\")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:\"html\",block:!0,raw:t[0],pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=J(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],s={type:\"table\",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push(\"right\"):this.rules.other.tableAlignCenter.test(a)?s.align.push(\"center\"):this.rules.other.tableAlignLeft.test(a)?s.align.push(\"left\"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(J(a,s.header.length).map((o,l)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:\"heading\",raw:t[0],depth:t[2].charAt(0)===\"=\"?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=z(n.slice(0,-1),\"\\\\\");if((n.length-s.length)%2===0)return}else{let s=de(t[2],\"()\");if(s===-2)return;if(s>-1){let o=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=\"\"}}let r=t[2],i=\"\";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):\"\";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),ge(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\"),title:i&&i.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:\"text\",raw:s,text:s}}return ge(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=0,c=r[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){p+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+p);let g=[...r[0]][0].length,h=e.slice(0,s+r.index+g+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:\"del\",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]===\"@\"?(n=t[1],r=\"mailto:\"+n):(n=t[1],r=n),{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]===\"@\")n=t[0],r=\"mailto:\"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(i!==t[0]);n=t[0],t[1]===\"www.\"?r=\"http://\"+t[0]:r=t[0]}return{type:\"link\",raw:t[0],text:n,href:r,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class u{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new y,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:E.normal,inline:M.normal};this.options.pedantic?(t.block=E.pedantic,t.inline=M.pedantic):this.options.gfm&&(t.block=E.gfm,this.options.breaks?t.inline=M.breaks:t.inline=M.gfm),this.tokenizer.rules=t}static get rules(){return{block:E,inline:M}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"paragraph\"||s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let s=1/0,a=e.slice(1),o;this.options.extensions.startBlock.forEach(l=>{o=l.call({lexer:this},a),typeof o==\"number\"&&o>=0&&(s=Math.min(s,o))}),s<1/0&&s>=0&&(i=e.substring(0,s+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let s=t.at(-1);n&&s?.type===\"paragraph\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type===\"text\"?(s.raw+=(s.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,s.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,r.index)+\"[\"+\"a\".repeat(r[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+\"[\"+\"a\".repeat(r[0].length-i-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a=\"\";for(;e;){s||(a=\"\"),s=!1;let o;if(this.options.extensions?.inline?.some(p=>(o=p.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let p=t.at(-1);o.type===\"text\"&&p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let p=1/0,c=e.slice(1),g;this.options.extensions.startInline.forEach(h=>{g=h.call({lexer:this},c),typeof g==\"number\"&&g>=0&&(p=Math.min(p,g))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!==\"_\"&&(a=o.raw.slice(-1)),s=!0;let p=t.at(-1);p?.type===\"text\"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(e){let p=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return t}};var P=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let r=(t||\"\").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,\"\")+`\n`;return r?'<pre><code class=\"language-'+w(r)+'\">'+(n?i:w(i,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?i:w(i,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,r=\"\";for(let a=0;a<e.items.length;a++){let o=e.items[a];r+=this.listitem(o)}let i=t?\"ol\":\"ul\",s=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+i+s+`>\n`+r+\"</\"+i+`>\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let i=0;i<e.header.length;i++)n+=this.tablecell(e.header[i]);t+=this.tablerow({text:n});let r=\"\";for(let i=0;i<e.rows.length;i++){let s=e.rows[i];n=\"\";for(let a=0;a<s.length;a++)n+=this.tablecell(s[a]);r+=this.tablerow({text:n})}return r&&(r=`<tbody>${r}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+r+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${w(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=X(e);if(i===null)return r;e=i;let s='<a href=\"'+e+'\"';return t&&(s+=' title=\"'+w(t)+'\"'),s+=\">\"+r+\"</a>\",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=X(e);if(i===null)return w(n);e=i;let s=`<img src=\"${e}\" alt=\"${n}\"`;return t&&(s+=` title=\"${w(t)}\"`),s+=\">\",s}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:w(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}checkbox({raw:e}){return e}};var b=class u{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new P,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e){let t=\"\";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let s=r,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(s.type)){t+=a||\"\";continue}}let i=r;switch(i.type){case\"space\":{t+=this.renderer.space(i);break}case\"hr\":{t+=this.renderer.hr(i);break}case\"heading\":{t+=this.renderer.heading(i);break}case\"code\":{t+=this.renderer.code(i);break}case\"table\":{t+=this.renderer.table(i);break}case\"blockquote\":{t+=this.renderer.blockquote(i);break}case\"list\":{t+=this.renderer.list(i);break}case\"checkbox\":{t+=this.renderer.checkbox(i);break}case\"html\":{t+=this.renderer.html(i);break}case\"def\":{t+=this.renderer.def(i);break}case\"paragraph\":{t+=this.renderer.paragraph(i);break}case\"text\":{t+=this.renderer.text(i);break}default:{let s='Token with \"'+i.type+'\" type was not found.';if(this.options.silent)return console.error(s),\"\";throw new Error(s)}}}return t}parseInline(e,t=this.renderer){let n=\"\";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(i.type)){n+=a||\"\";continue}}let s=i;switch(s.type){case\"escape\":{n+=t.text(s);break}case\"html\":{n+=t.html(s);break}case\"link\":{n+=t.link(s);break}case\"image\":{n+=t.image(s);break}case\"checkbox\":{n+=t.checkbox(s);break}case\"strong\":{n+=t.strong(s);break}case\"em\":{n+=t.em(s);break}case\"codespan\":{n+=t.codespan(s);break}case\"br\":{n+=t.br(s);break}case\"del\":{n+=t.del(s);break}case\"text\":{n+=t.text(s);break}default:{let a='Token with \"'+s.type+'\" type was not found.';if(this.options.silent)return console.error(a),\"\";throw new Error(a)}}}return n}};var S=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=L();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=P;TextRenderer=$;Lexer=x;Tokenizer=y;Hooks=S;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case\"table\":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case\"list\":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error(\"extension name required\");if(\"renderer\"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if(\"tokenizer\"in i){if(!i.level||i.level!==\"block\"&&i.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level===\"block\"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level===\"inline\"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}\"childTokens\"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new P(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if([\"options\",\"parser\"].includes(s))continue;let a=s,o=n.renderer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c||\"\"}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new y(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(s))continue;let a=s,o=n.tokenizer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new S;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if([\"options\",\"block\"].includes(s))continue;let a=s,o=n.hooks[a],l=i[a];S.passThroughHooks.has(s)?i[a]=p=>{if(this.defaults.async&&S.passThroughHooksRespectAsync.has(s))return(async()=>{let g=await o.call(i,p);return l.call(i,g)})();let c=o.call(i,p);return l.call(i,c)}:i[a]=(...p)=>{if(this.defaults.async)return(async()=>{let g=await o.apply(i,p);return g===!1&&(g=await l.apply(i,p)),g})();let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return a(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return a(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,p=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(p):p;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let r=\"<p>An error occurred:</p><pre>\"+w(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var _=new B;function d(u,e){return _.parse(u,e)}d.options=d.setOptions=function(u){return _.setOptions(u),d.defaults=_.defaults,Z(d.defaults),d};d.getDefaults=L;d.defaults=T;d.use=function(...u){return _.use(...u),d.defaults=_.defaults,Z(d.defaults),d};d.walkTokens=function(u,e){return _.walkTokens(u,e)};d.parseInline=_.parseInline;d.Parser=b;d.parser=b.parse;d.Renderer=P;d.TextRenderer=$;d.Lexer=x;d.lexer=x.lex;d.Tokenizer=y;d.Hooks=S;d.parse=d;var Dt=d.options,Ht=d.setOptions,Zt=d.use,Gt=d.walkTokens,Nt=d.parseInline,Qt=d,Ft=b.parse,jt=x.lex;export{S as Hooks,x as Lexer,B as Marked,b as Parser,P as Renderer,$ as TextRenderer,y as Tokenizer,T as defaults,L as getDefaults,jt as lexer,d as marked,Dt as options,Qt as parse,Nt as parseInline,Ft as parser,Ht as setOptions,Zt as use,Gt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","import DOMPurify from \"dompurify\";\nimport { marked } from \"marked\";\nimport { truncateText } from \"./format\";\n\nmarked.setOptions({\n gfm: true,\n breaks: true,\n mangle: false,\n});\n\nconst allowedTags = [\n \"a\",\n \"b\",\n \"blockquote\",\n \"br\",\n \"code\",\n \"del\",\n \"em\",\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"hr\",\n \"i\",\n \"li\",\n \"ol\",\n \"p\",\n \"pre\",\n \"strong\",\n \"table\",\n \"tbody\",\n \"td\",\n \"th\",\n \"thead\",\n \"tr\",\n \"ul\",\n];\n\nconst allowedAttrs = [\"class\", \"href\", \"rel\", \"target\", \"title\", \"start\"];\n\nlet hooksInstalled = false;\nconst MARKDOWN_CHAR_LIMIT = 140_000;\nconst MARKDOWN_PARSE_LIMIT = 40_000;\nconst MARKDOWN_CACHE_LIMIT = 200;\nconst MARKDOWN_CACHE_MAX_CHARS = 50_000;\nconst markdownCache = new Map<string, string>();\n\nfunction getCachedMarkdown(key: string): string | null {\n const cached = markdownCache.get(key);\n if (cached === undefined) return null;\n markdownCache.delete(key);\n markdownCache.set(key, cached);\n return cached;\n}\n\nfunction setCachedMarkdown(key: string, value: string) {\n markdownCache.set(key, value);\n if (markdownCache.size <= MARKDOWN_CACHE_LIMIT) return;\n const oldest = markdownCache.keys().next().value;\n if (oldest) markdownCache.delete(oldest);\n}\n\nfunction installHooks() {\n if (hooksInstalled) return;\n hooksInstalled = true;\n\n DOMPurify.addHook(\"afterSanitizeAttributes\", (node) => {\n if (!(node instanceof HTMLAnchorElement)) return;\n const href = node.getAttribute(\"href\");\n if (!href) return;\n node.setAttribute(\"rel\", \"noreferrer noopener\");\n node.setAttribute(\"target\", \"_blank\");\n });\n}\n\nexport function toSanitizedMarkdownHtml(markdown: string): string {\n const input = markdown.trim();\n if (!input) return \"\";\n installHooks();\n if (input.length <= MARKDOWN_CACHE_MAX_CHARS) {\n const cached = getCachedMarkdown(input);\n if (cached !== null) return cached;\n }\n const truncated = truncateText(input, MARKDOWN_CHAR_LIMIT);\n const suffix = truncated.truncated\n ? `\\n\\n… truncated (${truncated.total} chars, showing first ${truncated.text.length}).`\n : \"\";\n if (truncated.text.length > MARKDOWN_PARSE_LIMIT) {\n const escaped = escapeHtml(`${truncated.text}${suffix}`);\n const html = `<pre class=\"code-block\">${escaped}</pre>`;\n const sanitized = DOMPurify.sanitize(html, {\n ALLOWED_TAGS: allowedTags,\n ALLOWED_ATTR: allowedAttrs,\n });\n if (input.length <= MARKDOWN_CACHE_MAX_CHARS) {\n setCachedMarkdown(input, sanitized);\n }\n return sanitized;\n }\n const rendered = marked.parse(`${truncated.text}${suffix}`) as string;\n const sanitized = DOMPurify.sanitize(rendered, {\n ALLOWED_TAGS: allowedTags,\n ALLOWED_ATTR: allowedAttrs,\n });\n if (input.length <= MARKDOWN_CACHE_MAX_CHARS) {\n setCachedMarkdown(input, sanitized);\n }\n return sanitized;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#39;\");\n}\n","import { html, type TemplateResult } from \"lit\";\nimport { icons } from \"../icons\";\n\nconst COPIED_FOR_MS = 1500;\nconst ERROR_FOR_MS = 2000;\nconst COPY_LABEL = \"Copy as markdown\";\nconst COPIED_LABEL = \"Copied\";\nconst ERROR_LABEL = \"Copy failed\";\n\ntype CopyButtonOptions = {\n text: () => string;\n label?: string;\n};\n\nasync function copyTextToClipboard(text: string): Promise<boolean> {\n if (!text) return false;\n\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction setButtonLabel(button: HTMLButtonElement, label: string) {\n button.title = label;\n button.setAttribute(\"aria-label\", label);\n}\n\nfunction createCopyButton(options: CopyButtonOptions): TemplateResult {\n const idleLabel = options.label ?? COPY_LABEL;\n return html`\n <button\n class=\"chat-copy-btn\"\n type=\"button\"\n title=${idleLabel}\n aria-label=${idleLabel}\n @click=${async (e: Event) => {\n const btn = e.currentTarget as HTMLButtonElement | null;\n const iconContainer = btn?.querySelector(\".chat-copy-btn__icon\") as HTMLElement | null;\n\n if (!btn || btn.dataset.copying === \"1\") return;\n\n btn.dataset.copying = \"1\";\n btn.setAttribute(\"aria-busy\", \"true\");\n btn.disabled = true;\n\n const copied = await copyTextToClipboard(options.text());\n if (!btn.isConnected) return;\n\n delete btn.dataset.copying;\n btn.removeAttribute(\"aria-busy\");\n btn.disabled = false;\n\n if (!copied) {\n btn.dataset.error = \"1\";\n setButtonLabel(btn, ERROR_LABEL);\n\n window.setTimeout(() => {\n if (!btn.isConnected) return;\n delete btn.dataset.error;\n setButtonLabel(btn, idleLabel);\n }, ERROR_FOR_MS);\n return;\n }\n\n btn.dataset.copied = \"1\";\n setButtonLabel(btn, COPIED_LABEL);\n\n window.setTimeout(() => {\n if (!btn.isConnected) return;\n delete btn.dataset.copied;\n setButtonLabel(btn, idleLabel);\n }, COPIED_FOR_MS);\n }}\n >\n <span class=\"chat-copy-btn__icon\" aria-hidden=\"true\">\n <span class=\"chat-copy-btn__icon-copy\">${icons.copy}</span>\n <span class=\"chat-copy-btn__icon-check\">${icons.check}</span>\n </span>\n </button>\n `;\n}\n\nexport function renderCopyAsMarkdownButton(markdown: string): TemplateResult {\n return createCopyButton({ text: () => markdown, label: COPY_LABEL });\n}\n","import rawConfig from \"./tool-display.json\";\nimport type { IconName } from \"./icons\";\n\ntype ToolDisplayActionSpec = {\n label?: string;\n detailKeys?: string[];\n};\n\ntype ToolDisplaySpec = {\n icon?: string;\n title?: string;\n label?: string;\n detailKeys?: string[];\n actions?: Record<string, ToolDisplayActionSpec>;\n};\n\ntype ToolDisplayConfig = {\n version?: number;\n fallback?: ToolDisplaySpec;\n tools?: Record<string, ToolDisplaySpec>;\n};\n\nexport type ToolDisplay = {\n name: string;\n icon: IconName;\n title: string;\n label: string;\n verb?: string;\n detail?: string;\n};\n\nconst TOOL_DISPLAY_CONFIG = rawConfig as ToolDisplayConfig;\nconst FALLBACK = TOOL_DISPLAY_CONFIG.fallback ?? { icon: \"puzzle\" };\nconst TOOL_MAP = TOOL_DISPLAY_CONFIG.tools ?? {};\n\nfunction normalizeToolName(name?: string): string {\n return (name ?? \"tool\").trim();\n}\n\nfunction defaultTitle(name: string): string {\n const cleaned = name.replace(/_/g, \" \").trim();\n if (!cleaned) return \"Tool\";\n return cleaned\n .split(/\\s+/)\n .map((part) =>\n part.length <= 2 && part.toUpperCase() === part\n ? part\n : `${part.at(0)?.toUpperCase() ?? \"\"}${part.slice(1)}`,\n )\n .join(\" \");\n}\n\nfunction normalizeVerb(value?: string): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) return undefined;\n return trimmed.replace(/_/g, \" \");\n}\n\nfunction coerceDisplayValue(value: unknown): string | undefined {\n if (value === null || value === undefined) return undefined;\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (!trimmed) return undefined;\n const firstLine = trimmed.split(/\\r?\\n/)[0]?.trim() ?? \"\";\n if (!firstLine) return undefined;\n return firstLine.length > 160 ? `${firstLine.slice(0, 157)}…` : firstLine;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n const values = value\n .map((item) => coerceDisplayValue(item))\n .filter((item): item is string => Boolean(item));\n if (values.length === 0) return undefined;\n const preview = values.slice(0, 3).join(\", \");\n return values.length > 3 ? `${preview}…` : preview;\n }\n return undefined;\n}\n\nfunction lookupValueByPath(args: unknown, path: string): unknown {\n if (!args || typeof args !== \"object\") return undefined;\n let current: unknown = args;\n for (const segment of path.split(\".\")) {\n if (!segment) return undefined;\n if (!current || typeof current !== \"object\") return undefined;\n const record = current as Record<string, unknown>;\n current = record[segment];\n }\n return current;\n}\n\nfunction resolveDetailFromKeys(args: unknown, keys: string[]): string | undefined {\n for (const key of keys) {\n const value = lookupValueByPath(args, key);\n const display = coerceDisplayValue(value);\n if (display) return display;\n }\n return undefined;\n}\n\nfunction resolveReadDetail(args: unknown): string | undefined {\n if (!args || typeof args !== \"object\") return undefined;\n const record = args as Record<string, unknown>;\n const path = typeof record.path === \"string\" ? record.path : undefined;\n if (!path) return undefined;\n const offset = typeof record.offset === \"number\" ? record.offset : undefined;\n const limit = typeof record.limit === \"number\" ? record.limit : undefined;\n if (offset !== undefined && limit !== undefined) {\n return `${path}:${offset}-${offset + limit}`;\n }\n return path;\n}\n\nfunction resolveWriteDetail(args: unknown): string | undefined {\n if (!args || typeof args !== \"object\") return undefined;\n const record = args as Record<string, unknown>;\n const path = typeof record.path === \"string\" ? record.path : undefined;\n return path;\n}\n\nfunction resolveActionSpec(\n spec: ToolDisplaySpec | undefined,\n action: string | undefined,\n): ToolDisplayActionSpec | undefined {\n if (!spec || !action) return undefined;\n return spec.actions?.[action] ?? undefined;\n}\n\nexport function resolveToolDisplay(params: {\n name?: string;\n args?: unknown;\n meta?: string;\n}): ToolDisplay {\n const name = normalizeToolName(params.name);\n const key = name.toLowerCase();\n const spec = TOOL_MAP[key];\n const icon = (spec?.icon ?? FALLBACK.icon ?? \"puzzle\") as IconName;\n const title = spec?.title ?? defaultTitle(name);\n const label = spec?.label ?? name;\n const actionRaw =\n params.args && typeof params.args === \"object\"\n ? ((params.args as Record<string, unknown>).action as string | undefined)\n : undefined;\n const action = typeof actionRaw === \"string\" ? actionRaw.trim() : undefined;\n const actionSpec = resolveActionSpec(spec, action);\n const verb = normalizeVerb(actionSpec?.label ?? action);\n\n let detail: string | undefined;\n if (key === \"read\") detail = resolveReadDetail(params.args);\n if (!detail && (key === \"write\" || key === \"edit\" || key === \"attach\")) {\n detail = resolveWriteDetail(params.args);\n }\n\n const detailKeys = actionSpec?.detailKeys ?? spec?.detailKeys ?? FALLBACK.detailKeys ?? [];\n if (!detail && detailKeys.length > 0) {\n detail = resolveDetailFromKeys(params.args, detailKeys);\n }\n\n if (!detail && params.meta) {\n detail = params.meta;\n }\n\n if (detail) {\n detail = shortenHomeInString(detail);\n }\n\n return {\n name,\n icon,\n title,\n label,\n verb,\n detail,\n };\n}\n\nexport function formatToolDetail(display: ToolDisplay): string | undefined {\n const parts: string[] = [];\n if (display.verb) parts.push(display.verb);\n if (display.detail) parts.push(display.detail);\n if (parts.length === 0) return undefined;\n return parts.join(\" · \");\n}\n\nexport function formatToolSummary(display: ToolDisplay): string {\n const detail = formatToolDetail(display);\n return detail ? `${display.label}: ${detail}` : display.label;\n}\n\nfunction shortenHomeInString(input: string): string {\n if (!input) return input;\n return input.replace(/\\/Users\\/[^/]+/g, \"~\").replace(/\\/home\\/[^/]+/g, \"~\");\n}\n","/**\n * Chat-related constants for the UI layer.\n */\n\n/** Character threshold for showing tool output inline vs collapsed */\nexport const TOOL_INLINE_THRESHOLD = 80;\n\n/** Maximum lines to show in collapsed preview */\nexport const PREVIEW_MAX_LINES = 2;\n\n/** Maximum characters to show in collapsed preview */\nexport const PREVIEW_MAX_CHARS = 100;\n","/**\n * Helper functions for tool card rendering.\n */\n\nimport { PREVIEW_MAX_CHARS, PREVIEW_MAX_LINES } from \"./constants\";\n\n/**\n * Format tool output content for display in the sidebar.\n * Detects JSON and wraps it in a code block with formatting.\n */\nexport function formatToolOutputForSidebar(text: string): string {\n const trimmed = text.trim();\n // Try to detect and format JSON\n if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) {\n try {\n const parsed = JSON.parse(trimmed);\n return \"```json\\n\" + JSON.stringify(parsed, null, 2) + \"\\n```\";\n } catch {\n // Not valid JSON, return as-is\n }\n }\n return text;\n}\n\n/**\n * Get a truncated preview of tool output text.\n * Truncates to first N lines or first N characters, whichever is shorter.\n */\nexport function getTruncatedPreview(text: string): string {\n const allLines = text.split(\"\\n\");\n const lines = allLines.slice(0, PREVIEW_MAX_LINES);\n const preview = lines.join(\"\\n\");\n if (preview.length > PREVIEW_MAX_CHARS) {\n return preview.slice(0, PREVIEW_MAX_CHARS) + \"…\";\n }\n return lines.length < allLines.length ? preview + \"…\" : preview;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatToolDetail, resolveToolDisplay } from \"../tool-display\";\nimport { icons } from \"../icons\";\nimport type { ToolCard } from \"../types/chat-types\";\nimport { TOOL_INLINE_THRESHOLD } from \"./constants\";\nimport { formatToolOutputForSidebar, getTruncatedPreview } from \"./tool-helpers\";\nimport { isToolResultMessage } from \"./message-normalizer\";\nimport { extractTextCached } from \"./message-extract\";\n\nexport function extractToolCards(message: unknown): ToolCard[] {\n const m = message as Record<string, unknown>;\n const content = normalizeContent(m.content);\n const cards: ToolCard[] = [];\n\n for (const item of content) {\n const kind = String(item.type ?? \"\").toLowerCase();\n const isToolCall =\n [\"toolcall\", \"tool_call\", \"tooluse\", \"tool_use\"].includes(kind) ||\n (typeof item.name === \"string\" && item.arguments != null);\n if (isToolCall) {\n cards.push({\n kind: \"call\",\n name: (item.name as string) ?? \"tool\",\n args: coerceArgs(item.arguments ?? item.args),\n });\n }\n }\n\n for (const item of content) {\n const kind = String(item.type ?? \"\").toLowerCase();\n if (kind !== \"toolresult\" && kind !== \"tool_result\") continue;\n const text = extractToolText(item);\n const name = typeof item.name === \"string\" ? item.name : \"tool\";\n cards.push({ kind: \"result\", name, text });\n }\n\n if (isToolResultMessage(message) && !cards.some((card) => card.kind === \"result\")) {\n const name =\n (typeof m.toolName === \"string\" && m.toolName) ||\n (typeof m.tool_name === \"string\" && m.tool_name) ||\n \"tool\";\n const text = extractTextCached(message) ?? undefined;\n cards.push({ kind: \"result\", name, text });\n }\n\n return cards;\n}\n\nexport function renderToolCardSidebar(card: ToolCard, onOpenSidebar?: (content: string) => void) {\n const display = resolveToolDisplay({ name: card.name, args: card.args });\n const detail = formatToolDetail(display);\n const hasText = Boolean(card.text?.trim());\n\n const canClick = Boolean(onOpenSidebar);\n const handleClick = canClick\n ? () => {\n if (hasText) {\n onOpenSidebar!(formatToolOutputForSidebar(card.text!));\n return;\n }\n const info = `## ${display.label}\\n\\n${\n detail ? `**Command:** \\`${detail}\\`\\n\\n` : \"\"\n }*No output — tool completed successfully.*`;\n onOpenSidebar!(info);\n }\n : undefined;\n\n const isShort = hasText && (card.text?.length ?? 0) <= TOOL_INLINE_THRESHOLD;\n const showCollapsed = hasText && !isShort;\n const showInline = hasText && isShort;\n const isEmpty = !hasText;\n\n return html`\n <div\n class=\"chat-tool-card ${canClick ? \"chat-tool-card--clickable\" : \"\"}\"\n @click=${handleClick}\n role=${canClick ? \"button\" : nothing}\n tabindex=${canClick ? \"0\" : nothing}\n @keydown=${\n canClick\n ? (e: KeyboardEvent) => {\n if (e.key !== \"Enter\" && e.key !== \" \") return;\n e.preventDefault();\n handleClick?.();\n }\n : nothing\n }\n >\n <div class=\"chat-tool-card__header\">\n <div class=\"chat-tool-card__title\">\n <span class=\"chat-tool-card__icon\">${icons[display.icon]}</span>\n <span>${display.label}</span>\n </div>\n ${\n canClick\n ? html`<span class=\"chat-tool-card__action\">${hasText ? \"View\" : \"\"} ${icons.check}</span>`\n : nothing\n }\n ${isEmpty && !canClick ? html`<span class=\"chat-tool-card__status\">${icons.check}</span>` : nothing}\n </div>\n ${detail ? html`<div class=\"chat-tool-card__detail\">${detail}</div>` : nothing}\n ${\n isEmpty\n ? html`\n <div class=\"chat-tool-card__status-text muted\">Completed</div>\n `\n : nothing\n }\n ${\n showCollapsed\n ? html`<div class=\"chat-tool-card__preview mono\">${getTruncatedPreview(card.text!)}</div>`\n : nothing\n }\n ${showInline ? html`<div class=\"chat-tool-card__inline mono\">${card.text}</div>` : nothing}\n </div>\n `;\n}\n\nfunction normalizeContent(content: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(content)) return [];\n return content.filter(Boolean) as Array<Record<string, unknown>>;\n}\n\nfunction coerceArgs(value: unknown): unknown {\n if (typeof value !== \"string\") return value;\n const trimmed = value.trim();\n if (!trimmed) return value;\n if (!trimmed.startsWith(\"{\") && !trimmed.startsWith(\"[\")) return value;\n try {\n return JSON.parse(trimmed);\n } catch {\n return value;\n }\n}\n\nfunction extractToolText(item: Record<string, unknown>): string | undefined {\n if (typeof item.text === \"string\") return item.text;\n if (typeof item.content === \"string\") return item.content;\n return undefined;\n}\n","import { html, nothing } from \"lit\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\n\nimport type { AssistantIdentity } from \"../assistant-identity\";\nimport { toSanitizedMarkdownHtml } from \"../markdown\";\nimport type { MessageGroup } from \"../types/chat-types\";\nimport { renderCopyAsMarkdownButton } from \"./copy-as-markdown\";\nimport { isToolResultMessage, normalizeRoleForGrouping } from \"./message-normalizer\";\nimport {\n extractTextCached,\n extractThinkingCached,\n formatReasoningMarkdown,\n} from \"./message-extract\";\nimport { extractToolCards, renderToolCardSidebar } from \"./tool-cards\";\n\ntype ImageBlock = {\n url: string;\n alt?: string;\n};\n\nfunction extractImages(message: unknown): ImageBlock[] {\n const m = message as Record<string, unknown>;\n const content = m.content;\n const images: ImageBlock[] = [];\n\n if (Array.isArray(content)) {\n for (const block of content) {\n if (typeof block !== \"object\" || block === null) continue;\n const b = block as Record<string, unknown>;\n\n if (b.type === \"image\") {\n // Handle source object format (from sendChatMessage)\n const source = b.source as Record<string, unknown> | undefined;\n if (source?.type === \"base64\" && typeof source.data === \"string\") {\n const data = source.data as string;\n const mediaType = (source.media_type as string) || \"image/png\";\n // If data is already a data URL, use it directly\n const url = data.startsWith(\"data:\") ? data : `data:${mediaType};base64,${data}`;\n images.push({ url });\n } else if (typeof b.url === \"string\") {\n images.push({ url: b.url });\n }\n } else if (b.type === \"image_url\") {\n // OpenAI format\n const imageUrl = b.image_url as Record<string, unknown> | undefined;\n if (typeof imageUrl?.url === \"string\") {\n images.push({ url: imageUrl.url });\n }\n }\n }\n }\n\n return images;\n}\n\nexport function renderReadingIndicatorGroup(assistant?: AssistantIdentity) {\n return html`\n <div class=\"chat-group assistant\">\n ${renderAvatar(\"assistant\", assistant)}\n <div class=\"chat-group-messages\">\n <div class=\"chat-bubble chat-reading-indicator\" aria-hidden=\"true\">\n <span class=\"chat-reading-indicator__dots\">\n <span></span><span></span><span></span>\n </span>\n </div>\n </div>\n </div>\n `;\n}\n\nexport function renderStreamingGroup(\n text: string,\n startedAt: number,\n onOpenSidebar?: (content: string) => void,\n assistant?: AssistantIdentity,\n) {\n const timestamp = new Date(startedAt).toLocaleTimeString([], {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n const name = assistant?.name ?? \"Assistant\";\n\n return html`\n <div class=\"chat-group assistant\">\n ${renderAvatar(\"assistant\", assistant)}\n <div class=\"chat-group-messages\">\n ${renderGroupedMessage(\n {\n role: \"assistant\",\n content: [{ type: \"text\", text }],\n timestamp: startedAt,\n },\n { isStreaming: true, showReasoning: false },\n onOpenSidebar,\n )}\n <div class=\"chat-group-footer\">\n <span class=\"chat-sender-name\">${name}</span>\n <span class=\"chat-group-timestamp\">${timestamp}</span>\n </div>\n </div>\n </div>\n `;\n}\n\nexport function renderMessageGroup(\n group: MessageGroup,\n opts: {\n onOpenSidebar?: (content: string) => void;\n showReasoning: boolean;\n assistantName?: string;\n assistantAvatar?: string | null;\n },\n) {\n const normalizedRole = normalizeRoleForGrouping(group.role);\n const assistantName = opts.assistantName ?? \"Assistant\";\n const who =\n normalizedRole === \"user\"\n ? \"You\"\n : normalizedRole === \"assistant\"\n ? assistantName\n : normalizedRole;\n const roleClass =\n normalizedRole === \"user\" ? \"user\" : normalizedRole === \"assistant\" ? \"assistant\" : \"other\";\n const timestamp = new Date(group.timestamp).toLocaleTimeString([], {\n hour: \"numeric\",\n minute: \"2-digit\",\n });\n\n return html`\n <div class=\"chat-group ${roleClass}\">\n ${renderAvatar(group.role, {\n name: assistantName,\n avatar: opts.assistantAvatar ?? null,\n })}\n <div class=\"chat-group-messages\">\n ${group.messages.map((item, index) =>\n renderGroupedMessage(\n item.message,\n {\n isStreaming: group.isStreaming && index === group.messages.length - 1,\n showReasoning: opts.showReasoning,\n },\n opts.onOpenSidebar,\n ),\n )}\n <div class=\"chat-group-footer\">\n <span class=\"chat-sender-name\">${who}</span>\n <span class=\"chat-group-timestamp\">${timestamp}</span>\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderAvatar(role: string, assistant?: Pick<AssistantIdentity, \"name\" | \"avatar\">) {\n const normalized = normalizeRoleForGrouping(role);\n const assistantName = assistant?.name?.trim() || \"Assistant\";\n const assistantAvatar = assistant?.avatar?.trim() || \"\";\n const initial =\n normalized === \"user\"\n ? \"U\"\n : normalized === \"assistant\"\n ? assistantName.charAt(0).toUpperCase() || \"A\"\n : normalized === \"tool\"\n ? \"⚙\"\n : \"?\";\n const className =\n normalized === \"user\"\n ? \"user\"\n : normalized === \"assistant\"\n ? \"assistant\"\n : normalized === \"tool\"\n ? \"tool\"\n : \"other\";\n\n if (assistantAvatar && normalized === \"assistant\") {\n if (isAvatarUrl(assistantAvatar)) {\n return html`<img\n class=\"chat-avatar ${className}\"\n src=\"${assistantAvatar}\"\n alt=\"${assistantName}\"\n />`;\n }\n return html`<div class=\"chat-avatar ${className}\">${assistantAvatar}</div>`;\n }\n\n return html`<div class=\"chat-avatar ${className}\">${initial}</div>`;\n}\n\nfunction isAvatarUrl(value: string): boolean {\n return (\n /^https?:\\/\\//i.test(value) || /^data:image\\//i.test(value) || /^\\//.test(value) // Relative paths from avatar endpoint\n );\n}\n\nfunction renderMessageImages(images: ImageBlock[]) {\n if (images.length === 0) return nothing;\n\n return html`\n <div class=\"chat-message-images\">\n ${images.map(\n (img) => html`\n <img\n src=${img.url}\n alt=${img.alt ?? \"Attached image\"}\n class=\"chat-message-image\"\n @click=${() => window.open(img.url, \"_blank\")}\n />\n `,\n )}\n </div>\n `;\n}\n\nfunction renderGroupedMessage(\n message: unknown,\n opts: { isStreaming: boolean; showReasoning: boolean },\n onOpenSidebar?: (content: string) => void,\n) {\n const m = message as Record<string, unknown>;\n const role = typeof m.role === \"string\" ? m.role : \"unknown\";\n const isToolResult =\n isToolResultMessage(message) ||\n role.toLowerCase() === \"toolresult\" ||\n role.toLowerCase() === \"tool_result\" ||\n typeof m.toolCallId === \"string\" ||\n typeof m.tool_call_id === \"string\";\n\n const toolCards = extractToolCards(message);\n const hasToolCards = toolCards.length > 0;\n const images = extractImages(message);\n const hasImages = images.length > 0;\n\n const extractedText = extractTextCached(message);\n const extractedThinking =\n opts.showReasoning && role === \"assistant\" ? extractThinkingCached(message) : null;\n const markdownBase = extractedText?.trim() ? extractedText : null;\n const reasoningMarkdown = extractedThinking ? formatReasoningMarkdown(extractedThinking) : null;\n const markdown = markdownBase;\n const canCopyMarkdown = role === \"assistant\" && Boolean(markdown?.trim());\n\n const bubbleClasses = [\n \"chat-bubble\",\n canCopyMarkdown ? \"has-copy\" : \"\",\n opts.isStreaming ? \"streaming\" : \"\",\n \"fade-in\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (!markdown && hasToolCards && isToolResult) {\n return html`${toolCards.map((card) => renderToolCardSidebar(card, onOpenSidebar))}`;\n }\n\n if (!markdown && !hasToolCards && !hasImages) return nothing;\n\n return html`\n <div class=\"${bubbleClasses}\">\n ${canCopyMarkdown ? renderCopyAsMarkdownButton(markdown!) : nothing}\n ${renderMessageImages(images)}\n ${\n reasoningMarkdown\n ? html`<div class=\"chat-thinking\">${unsafeHTML(\n toSanitizedMarkdownHtml(reasoningMarkdown),\n )}</div>`\n : nothing\n }\n ${\n markdown\n ? html`<div class=\"chat-text\">${unsafeHTML(toSanitizedMarkdownHtml(markdown))}</div>`\n : nothing\n }\n ${toolCards.map((card) => renderToolCardSidebar(card, onOpenSidebar))}\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport { unsafeHTML } from \"lit/directives/unsafe-html.js\";\n\nimport { icons } from \"../icons\";\nimport { toSanitizedMarkdownHtml } from \"../markdown\";\n\nexport type MarkdownSidebarProps = {\n content: string | null;\n error: string | null;\n onClose: () => void;\n onViewRawText: () => void;\n};\n\nexport function renderMarkdownSidebar(props: MarkdownSidebarProps) {\n return html`\n <div class=\"sidebar-panel\">\n <div class=\"sidebar-header\">\n <div class=\"sidebar-title\">Tool Output</div>\n <button @click=${props.onClose} class=\"btn\" title=\"Close sidebar\">\n ${icons.x}\n </button>\n </div>\n <div class=\"sidebar-content\">\n ${\n props.error\n ? html`\n <div class=\"callout danger\">${props.error}</div>\n <button @click=${props.onViewRawText} class=\"btn\" style=\"margin-top: 12px;\">\n View Raw Text\n </button>\n `\n : props.content\n ? html`<div class=\"sidebar-markdown\">${unsafeHTML(toSanitizedMarkdownHtml(props.content))}</div>`\n : html`\n <div class=\"muted\">No content available</div>\n `\n }\n </div>\n </div>\n `;\n}\n","import { LitElement, html, css } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\n\n/**\n * A draggable divider for resizable split views.\n * Dispatches 'resize' events with { splitRatio: number } detail.\n */\n@customElement(\"resizable-divider\")\nexport class ResizableDivider extends LitElement {\n @property({ type: Number }) splitRatio = 0.6;\n @property({ type: Number }) minRatio = 0.4;\n @property({ type: Number }) maxRatio = 0.7;\n\n private isDragging = false;\n private startX = 0;\n private startRatio = 0;\n\n static styles = css`\n :host {\n width: 4px;\n cursor: col-resize;\n background: var(--border, #333);\n transition: background 150ms ease-out;\n flex-shrink: 0;\n position: relative;\n }\n \n :host::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: -4px;\n right: -4px;\n bottom: 0;\n }\n \n :host(:hover) {\n background: var(--accent, #007bff);\n }\n \n :host(.dragging) {\n background: var(--accent, #007bff);\n }\n `;\n\n render() {\n return html`\n \n `;\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.addEventListener(\"mousedown\", this.handleMouseDown);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\"mousedown\", this.handleMouseDown);\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n }\n\n private handleMouseDown = (e: MouseEvent) => {\n this.isDragging = true;\n this.startX = e.clientX;\n this.startRatio = this.splitRatio;\n this.classList.add(\"dragging\");\n\n document.addEventListener(\"mousemove\", this.handleMouseMove);\n document.addEventListener(\"mouseup\", this.handleMouseUp);\n\n e.preventDefault();\n };\n\n private handleMouseMove = (e: MouseEvent) => {\n if (!this.isDragging) return;\n\n const container = this.parentElement;\n if (!container) return;\n\n const containerWidth = container.getBoundingClientRect().width;\n const deltaX = e.clientX - this.startX;\n const deltaRatio = deltaX / containerWidth;\n\n let newRatio = this.startRatio + deltaRatio;\n newRatio = Math.max(this.minRatio, Math.min(this.maxRatio, newRatio));\n\n this.dispatchEvent(\n new CustomEvent(\"resize\", {\n detail: { splitRatio: newRatio },\n bubbles: true,\n composed: true,\n }),\n );\n };\n\n private handleMouseUp = () => {\n this.isDragging = false;\n this.classList.remove(\"dragging\");\n\n document.removeEventListener(\"mousemove\", this.handleMouseMove);\n document.removeEventListener(\"mouseup\", this.handleMouseUp);\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"resizable-divider\": ResizableDivider;\n }\n}\n","import { html, nothing } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { repeat } from \"lit/directives/repeat.js\";\nimport type { SessionsListResult } from \"../types\";\nimport type { ChatAttachment, ChatQueueItem } from \"../ui-types\";\nimport type { ChatItem, MessageGroup } from \"../types/chat-types\";\nimport { icons } from \"../icons\";\nimport { normalizeMessage, normalizeRoleForGrouping } from \"../chat/message-normalizer\";\nimport {\n renderMessageGroup,\n renderReadingIndicatorGroup,\n renderStreamingGroup,\n} from \"../chat/grouped-render\";\nimport { renderMarkdownSidebar } from \"./markdown-sidebar\";\nimport \"../components/resizable-divider\";\n\nexport type CompactionIndicatorStatus = {\n active: boolean;\n startedAt: number | null;\n completedAt: number | null;\n};\n\nexport type ChatProps = {\n sessionKey: string;\n onSessionKeyChange: (next: string) => void;\n thinkingLevel: string | null;\n showThinking: boolean;\n loading: boolean;\n sending: boolean;\n canAbort?: boolean;\n compactionStatus?: CompactionIndicatorStatus | null;\n messages: unknown[];\n toolMessages: unknown[];\n stream: string | null;\n streamStartedAt: number | null;\n assistantAvatarUrl?: string | null;\n draft: string;\n queue: ChatQueueItem[];\n connected: boolean;\n canSend: boolean;\n disabledReason: string | null;\n error: string | null;\n sessions: SessionsListResult | null;\n // Focus mode\n focusMode: boolean;\n // Sidebar state\n sidebarOpen?: boolean;\n sidebarContent?: string | null;\n sidebarError?: string | null;\n splitRatio?: number;\n assistantName: string;\n assistantAvatar: string | null;\n // Image attachments\n attachments?: ChatAttachment[];\n onAttachmentsChange?: (attachments: ChatAttachment[]) => void;\n // Event handlers\n onRefresh: () => void;\n onToggleFocusMode: () => void;\n onDraftChange: (next: string) => void;\n onSend: () => void;\n onAbort?: () => void;\n onQueueRemove: (id: string) => void;\n onNewSession: () => void;\n onOpenSidebar?: (content: string) => void;\n onCloseSidebar?: () => void;\n onSplitRatioChange?: (ratio: number) => void;\n onChatScroll?: (event: Event) => void;\n};\n\nconst COMPACTION_TOAST_DURATION_MS = 5000;\n\nfunction adjustTextareaHeight(el: HTMLTextAreaElement) {\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n}\n\nfunction renderCompactionIndicator(status: CompactionIndicatorStatus | null | undefined) {\n if (!status) return nothing;\n\n // Show \"compacting...\" while active\n if (status.active) {\n return html`\n <div class=\"callout info compaction-indicator compaction-indicator--active\">\n ${icons.loader} Compacting context...\n </div>\n `;\n }\n\n // Show \"compaction complete\" briefly after completion\n if (status.completedAt) {\n const elapsed = Date.now() - status.completedAt;\n if (elapsed < COMPACTION_TOAST_DURATION_MS) {\n return html`\n <div class=\"callout success compaction-indicator compaction-indicator--complete\">\n ${icons.check} Context compacted\n </div>\n `;\n }\n }\n\n return nothing;\n}\n\nfunction generateAttachmentId(): string {\n return `att-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n}\n\nfunction handlePaste(e: ClipboardEvent, props: ChatProps) {\n const items = e.clipboardData?.items;\n if (!items || !props.onAttachmentsChange) return;\n\n const imageItems: DataTransferItem[] = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (item.type.startsWith(\"image/\")) {\n imageItems.push(item);\n }\n }\n\n if (imageItems.length === 0) return;\n\n e.preventDefault();\n\n for (const item of imageItems) {\n const file = item.getAsFile();\n if (!file) continue;\n\n const reader = new FileReader();\n reader.onload = () => {\n const dataUrl = reader.result as string;\n const newAttachment: ChatAttachment = {\n id: generateAttachmentId(),\n dataUrl,\n mimeType: file.type,\n };\n const current = props.attachments ?? [];\n props.onAttachmentsChange?.([...current, newAttachment]);\n };\n reader.readAsDataURL(file);\n }\n}\n\nfunction renderAttachmentPreview(props: ChatProps) {\n const attachments = props.attachments ?? [];\n if (attachments.length === 0) return nothing;\n\n return html`\n <div class=\"chat-attachments\">\n ${attachments.map(\n (att) => html`\n <div class=\"chat-attachment\">\n <img\n src=${att.dataUrl}\n alt=\"Attachment preview\"\n class=\"chat-attachment__img\"\n />\n <button\n class=\"chat-attachment__remove\"\n type=\"button\"\n aria-label=\"Remove attachment\"\n @click=${() => {\n const next = (props.attachments ?? []).filter((a) => a.id !== att.id);\n props.onAttachmentsChange?.(next);\n }}\n >\n ${icons.x}\n </button>\n </div>\n `,\n )}\n </div>\n `;\n}\n\nexport function renderChat(props: ChatProps) {\n const canCompose = props.connected;\n const isBusy = props.sending || props.stream !== null;\n const canAbort = Boolean(props.canAbort && props.onAbort);\n const activeSession = props.sessions?.sessions?.find((row) => row.key === props.sessionKey);\n const reasoningLevel = activeSession?.reasoningLevel ?? \"off\";\n const showReasoning = props.showThinking && reasoningLevel !== \"off\";\n const assistantIdentity = {\n name: props.assistantName,\n avatar: props.assistantAvatar ?? props.assistantAvatarUrl ?? null,\n };\n\n const hasAttachments = (props.attachments?.length ?? 0) > 0;\n const composePlaceholder = props.connected\n ? hasAttachments\n ? \"Add a message or paste more images...\"\n : \"Message (↩ to send, Shift+↩ for line breaks, paste images)\"\n : \"Connect to the gateway to start chatting…\";\n\n const splitRatio = props.splitRatio ?? 0.6;\n const sidebarOpen = Boolean(props.sidebarOpen && props.onCloseSidebar);\n const thread = html`\n <div\n class=\"chat-thread\"\n role=\"log\"\n aria-live=\"polite\"\n @scroll=${props.onChatScroll}\n >\n ${\n props.loading\n ? html`\n <div class=\"muted\">Loading chat…</div>\n `\n : nothing\n }\n ${repeat(\n buildChatItems(props),\n (item) => item.key,\n (item) => {\n if (item.kind === \"reading-indicator\") {\n return renderReadingIndicatorGroup(assistantIdentity);\n }\n\n if (item.kind === \"stream\") {\n return renderStreamingGroup(\n item.text,\n item.startedAt,\n props.onOpenSidebar,\n assistantIdentity,\n );\n }\n\n if (item.kind === \"group\") {\n return renderMessageGroup(item, {\n onOpenSidebar: props.onOpenSidebar,\n showReasoning,\n assistantName: props.assistantName,\n assistantAvatar: assistantIdentity.avatar,\n });\n }\n\n return nothing;\n },\n )}\n </div>\n `;\n\n return html`\n <section class=\"card chat\">\n ${props.disabledReason ? html`<div class=\"callout\">${props.disabledReason}</div>` : nothing}\n\n ${props.error ? html`<div class=\"callout danger\">${props.error}</div>` : nothing}\n\n ${renderCompactionIndicator(props.compactionStatus)}\n\n ${\n props.focusMode\n ? html`\n <button\n class=\"chat-focus-exit\"\n type=\"button\"\n @click=${props.onToggleFocusMode}\n aria-label=\"Exit focus mode\"\n title=\"Exit focus mode\"\n >\n ${icons.x}\n </button>\n `\n : nothing\n }\n\n <div\n class=\"chat-split-container ${sidebarOpen ? \"chat-split-container--open\" : \"\"}\"\n >\n <div\n class=\"chat-main\"\n style=\"flex: ${sidebarOpen ? `0 0 ${splitRatio * 100}%` : \"1 1 100%\"}\"\n >\n ${thread}\n </div>\n\n ${\n sidebarOpen\n ? html`\n <resizable-divider\n .splitRatio=${splitRatio}\n @resize=${(e: CustomEvent) => props.onSplitRatioChange?.(e.detail.splitRatio)}\n ></resizable-divider>\n <div class=\"chat-sidebar\">\n ${renderMarkdownSidebar({\n content: props.sidebarContent ?? null,\n error: props.sidebarError ?? null,\n onClose: props.onCloseSidebar!,\n onViewRawText: () => {\n if (!props.sidebarContent || !props.onOpenSidebar) return;\n props.onOpenSidebar(`\\`\\`\\`\\n${props.sidebarContent}\\n\\`\\`\\``);\n },\n })}\n </div>\n `\n : nothing\n }\n </div>\n\n ${\n props.queue.length\n ? html`\n <div class=\"chat-queue\" role=\"status\" aria-live=\"polite\">\n <div class=\"chat-queue__title\">Queued (${props.queue.length})</div>\n <div class=\"chat-queue__list\">\n ${props.queue.map(\n (item) => html`\n <div class=\"chat-queue__item\">\n <div class=\"chat-queue__text\">\n ${\n item.text ||\n (item.attachments?.length ? `Image (${item.attachments.length})` : \"\")\n }\n </div>\n <button\n class=\"btn chat-queue__remove\"\n type=\"button\"\n aria-label=\"Remove queued message\"\n @click=${() => props.onQueueRemove(item.id)}\n >\n ${icons.x}\n </button>\n </div>\n `,\n )}\n </div>\n </div>\n `\n : nothing\n }\n\n <div class=\"chat-compose\">\n ${renderAttachmentPreview(props)}\n <div class=\"chat-compose__row\">\n <label class=\"field chat-compose__field\">\n <span>Message</span>\n <textarea\n ${ref((el) => el && adjustTextareaHeight(el as HTMLTextAreaElement))}\n .value=${props.draft}\n ?disabled=${!props.connected}\n @keydown=${(e: KeyboardEvent) => {\n if (e.key !== \"Enter\") return;\n if (e.isComposing || e.keyCode === 229) return;\n if (e.shiftKey) return; // Allow Shift+Enter for line breaks\n if (!props.connected) return;\n e.preventDefault();\n if (canCompose) props.onSend();\n }}\n @input=${(e: Event) => {\n const target = e.target as HTMLTextAreaElement;\n adjustTextareaHeight(target);\n props.onDraftChange(target.value);\n }}\n @paste=${(e: ClipboardEvent) => handlePaste(e, props)}\n placeholder=${composePlaceholder}\n ></textarea>\n </label>\n <div class=\"chat-compose__actions\">\n <button\n class=\"btn\"\n ?disabled=${!props.connected || (!canAbort && props.sending)}\n @click=${canAbort ? props.onAbort : props.onNewSession}\n >\n ${canAbort ? \"Stop\" : \"New session\"}\n </button>\n <button\n class=\"btn primary\"\n ?disabled=${!props.connected}\n @click=${props.onSend}\n >\n ${isBusy ? \"Queue\" : \"Send\"}<kbd class=\"btn-kbd\">↵</kbd>\n </button>\n </div>\n </div>\n </div>\n </section>\n `;\n}\n\nconst CHAT_HISTORY_RENDER_LIMIT = 200;\n\nfunction groupMessages(items: ChatItem[]): Array<ChatItem | MessageGroup> {\n const result: Array<ChatItem | MessageGroup> = [];\n let currentGroup: MessageGroup | null = null;\n\n for (const item of items) {\n if (item.kind !== \"message\") {\n if (currentGroup) {\n result.push(currentGroup);\n currentGroup = null;\n }\n result.push(item);\n continue;\n }\n\n const normalized = normalizeMessage(item.message);\n const role = normalizeRoleForGrouping(normalized.role);\n const timestamp = normalized.timestamp || Date.now();\n\n if (!currentGroup || currentGroup.role !== role) {\n if (currentGroup) result.push(currentGroup);\n currentGroup = {\n kind: \"group\",\n key: `group:${role}:${item.key}`,\n role,\n messages: [{ message: item.message, key: item.key }],\n timestamp,\n isStreaming: false,\n };\n } else {\n currentGroup.messages.push({ message: item.message, key: item.key });\n }\n }\n\n if (currentGroup) result.push(currentGroup);\n return result;\n}\n\nfunction buildChatItems(props: ChatProps): Array<ChatItem | MessageGroup> {\n const items: ChatItem[] = [];\n const history = Array.isArray(props.messages) ? props.messages : [];\n const tools = Array.isArray(props.toolMessages) ? props.toolMessages : [];\n const historyStart = Math.max(0, history.length - CHAT_HISTORY_RENDER_LIMIT);\n if (historyStart > 0) {\n items.push({\n kind: \"message\",\n key: \"chat:history:notice\",\n message: {\n role: \"system\",\n content: `Showing last ${CHAT_HISTORY_RENDER_LIMIT} messages (${historyStart} hidden).`,\n timestamp: Date.now(),\n },\n });\n }\n for (let i = historyStart; i < history.length; i++) {\n const msg = history[i];\n const normalized = normalizeMessage(msg);\n\n if (!props.showThinking && normalized.role.toLowerCase() === \"toolresult\") {\n continue;\n }\n\n items.push({\n kind: \"message\",\n key: messageKey(msg, i),\n message: msg,\n });\n }\n if (props.showThinking) {\n for (let i = 0; i < tools.length; i++) {\n items.push({\n kind: \"message\",\n key: messageKey(tools[i], i + history.length),\n message: tools[i],\n });\n }\n }\n\n if (props.stream !== null) {\n const key = `stream:${props.sessionKey}:${props.streamStartedAt ?? \"live\"}`;\n if (props.stream.trim().length > 0) {\n items.push({\n kind: \"stream\",\n key,\n text: props.stream,\n startedAt: props.streamStartedAt ?? Date.now(),\n });\n } else {\n items.push({ kind: \"reading-indicator\", key });\n }\n }\n\n return groupMessages(items);\n}\n\nfunction messageKey(message: unknown, index: number): string {\n const m = message as Record<string, unknown>;\n const toolCallId = typeof m.toolCallId === \"string\" ? m.toolCallId : \"\";\n if (toolCallId) return `tool:${toolCallId}`;\n const id = typeof m.id === \"string\" ? m.id : \"\";\n if (id) return `msg:${id}`;\n const messageId = typeof m.messageId === \"string\" ? m.messageId : \"\";\n if (messageId) return `msg:${messageId}`;\n const timestamp = typeof m.timestamp === \"number\" ? m.timestamp : null;\n const role = typeof m.role === \"string\" ? m.role : \"unknown\";\n if (timestamp != null) return `msg:${role}:${timestamp}:${index}`;\n return `msg:${role}:${index}`;\n}\n","import type { ConfigUiHints } from \"../types\";\n\nexport type JsonSchema = {\n type?: string | string[];\n title?: string;\n description?: string;\n properties?: Record<string, JsonSchema>;\n items?: JsonSchema | JsonSchema[];\n additionalProperties?: JsonSchema | boolean;\n enum?: unknown[];\n const?: unknown;\n default?: unknown;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n allOf?: JsonSchema[];\n nullable?: boolean;\n};\n\nexport function schemaType(schema: JsonSchema): string | undefined {\n if (!schema) return undefined;\n if (Array.isArray(schema.type)) {\n const filtered = schema.type.filter((t) => t !== \"null\");\n return filtered[0] ?? schema.type[0];\n }\n return schema.type;\n}\n\nexport function defaultValue(schema?: JsonSchema): unknown {\n if (!schema) return \"\";\n if (schema.default !== undefined) return schema.default;\n const type = schemaType(schema);\n switch (type) {\n case \"object\":\n return {};\n case \"array\":\n return [];\n case \"boolean\":\n return false;\n case \"number\":\n case \"integer\":\n return 0;\n case \"string\":\n return \"\";\n default:\n return \"\";\n }\n}\n\nexport function pathKey(path: Array<string | number>): string {\n return path.filter((segment) => typeof segment === \"string\").join(\".\");\n}\n\nexport function hintForPath(path: Array<string | number>, hints: ConfigUiHints) {\n const key = pathKey(path);\n const direct = hints[key];\n if (direct) return direct;\n const segments = key.split(\".\");\n for (const [hintKey, hint] of Object.entries(hints)) {\n if (!hintKey.includes(\"*\")) continue;\n const hintSegments = hintKey.split(\".\");\n if (hintSegments.length !== segments.length) continue;\n let match = true;\n for (let i = 0; i < segments.length; i += 1) {\n if (hintSegments[i] !== \"*\" && hintSegments[i] !== segments[i]) {\n match = false;\n break;\n }\n }\n if (match) return hint;\n }\n return undefined;\n}\n\nexport function humanize(raw: string) {\n return raw\n .replace(/_/g, \" \")\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/\\s+/g, \" \")\n .replace(/^./, (m) => m.toUpperCase());\n}\n\nexport function isSensitivePath(path: Array<string | number>): boolean {\n const key = pathKey(path).toLowerCase();\n return (\n key.includes(\"token\") ||\n key.includes(\"password\") ||\n key.includes(\"secret\") ||\n key.includes(\"apikey\") ||\n key.endsWith(\"key\")\n );\n}\n","import { html, nothing, type TemplateResult } from \"lit\";\nimport type { ConfigUiHints } from \"../types\";\nimport {\n defaultValue,\n hintForPath,\n humanize,\n isSensitivePath,\n pathKey,\n schemaType,\n type JsonSchema,\n} from \"./config-form.shared\";\n\nconst META_KEYS = new Set([\"title\", \"description\", \"default\", \"nullable\"]);\n\nfunction isAnySchema(schema: JsonSchema): boolean {\n const keys = Object.keys(schema ?? {}).filter((key) => !META_KEYS.has(key));\n return keys.length === 0;\n}\n\nfunction jsonValue(value: unknown): string {\n if (value === undefined) return \"\";\n try {\n return JSON.stringify(value, null, 2) ?? \"\";\n } catch {\n return \"\";\n }\n}\n\n// SVG Icons as template literals\nconst icons = {\n chevronDown: html`\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n `,\n plus: html`\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n `,\n minus: html`\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n `,\n trash: html`\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"3 6 5 6 21 6\"></polyline>\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>\n </svg>\n `,\n edit: html`\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path>\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>\n </svg>\n `,\n};\n\nexport function renderNode(params: {\n schema: JsonSchema;\n value: unknown;\n path: Array<string | number>;\n hints: ConfigUiHints;\n unsupported: Set<string>;\n disabled: boolean;\n showLabel?: boolean;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult | typeof nothing {\n const { schema, value, path, hints, unsupported, disabled, onPatch } = params;\n const showLabel = params.showLabel ?? true;\n const type = schemaType(schema);\n const hint = hintForPath(path, hints);\n const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));\n const help = hint?.help ?? schema.description;\n const key = pathKey(path);\n\n if (unsupported.has(key)) {\n return html`<div class=\"cfg-field cfg-field--error\">\n <div class=\"cfg-field__label\">${label}</div>\n <div class=\"cfg-field__error\">Unsupported schema node. Use Raw mode.</div>\n </div>`;\n }\n\n // Handle anyOf/oneOf unions\n if (schema.anyOf || schema.oneOf) {\n const variants = schema.anyOf ?? schema.oneOf ?? [];\n const nonNull = variants.filter(\n (v) => !(v.type === \"null\" || (Array.isArray(v.type) && v.type.includes(\"null\"))),\n );\n\n if (nonNull.length === 1) {\n return renderNode({ ...params, schema: nonNull[0] });\n }\n\n // Check if it's a set of literal values (enum-like)\n const extractLiteral = (v: JsonSchema): unknown | undefined => {\n if (v.const !== undefined) return v.const;\n if (v.enum && v.enum.length === 1) return v.enum[0];\n return undefined;\n };\n const literals = nonNull.map(extractLiteral);\n const allLiterals = literals.every((v) => v !== undefined);\n\n if (allLiterals && literals.length > 0 && literals.length <= 5) {\n // Use segmented control for small sets\n const resolvedValue = value ?? schema.default;\n return html`\n <div class=\"cfg-field\">\n ${showLabel ? html`<label class=\"cfg-field__label\">${label}</label>` : nothing}\n ${help ? html`<div class=\"cfg-field__help\">${help}</div>` : nothing}\n <div class=\"cfg-segmented\">\n ${literals.map(\n (lit, idx) => html`\n <button\n type=\"button\"\n class=\"cfg-segmented__btn ${lit === resolvedValue || String(lit) === String(resolvedValue) ? \"active\" : \"\"}\"\n ?disabled=${disabled}\n @click=${() => onPatch(path, lit)}\n >\n ${String(lit)}\n </button>\n `,\n )}\n </div>\n </div>\n `;\n }\n\n if (allLiterals && literals.length > 5) {\n // Use dropdown for larger sets\n return renderSelect({ ...params, options: literals, value: value ?? schema.default });\n }\n\n // Handle mixed primitive types\n const primitiveTypes = new Set(nonNull.map((variant) => schemaType(variant)).filter(Boolean));\n const normalizedTypes = new Set(\n [...primitiveTypes].map((v) => (v === \"integer\" ? \"number\" : v)),\n );\n\n if ([...normalizedTypes].every((v) => [\"string\", \"number\", \"boolean\"].includes(v as string))) {\n const hasString = normalizedTypes.has(\"string\");\n const hasNumber = normalizedTypes.has(\"number\");\n const hasBoolean = normalizedTypes.has(\"boolean\");\n\n if (hasBoolean && normalizedTypes.size === 1) {\n return renderNode({\n ...params,\n schema: { ...schema, type: \"boolean\", anyOf: undefined, oneOf: undefined },\n });\n }\n\n if (hasString || hasNumber) {\n return renderTextInput({\n ...params,\n inputType: hasNumber && !hasString ? \"number\" : \"text\",\n });\n }\n }\n }\n\n // Enum - use segmented for small, dropdown for large\n if (schema.enum) {\n const options = schema.enum;\n if (options.length <= 5) {\n const resolvedValue = value ?? schema.default;\n return html`\n <div class=\"cfg-field\">\n ${showLabel ? html`<label class=\"cfg-field__label\">${label}</label>` : nothing}\n ${help ? html`<div class=\"cfg-field__help\">${help}</div>` : nothing}\n <div class=\"cfg-segmented\">\n ${options.map(\n (opt) => html`\n <button\n type=\"button\"\n class=\"cfg-segmented__btn ${opt === resolvedValue || String(opt) === String(resolvedValue) ? \"active\" : \"\"}\"\n ?disabled=${disabled}\n @click=${() => onPatch(path, opt)}\n >\n ${String(opt)}\n </button>\n `,\n )}\n </div>\n </div>\n `;\n }\n return renderSelect({ ...params, options, value: value ?? schema.default });\n }\n\n // Object type - collapsible section\n if (type === \"object\") {\n return renderObject(params);\n }\n\n // Array type\n if (type === \"array\") {\n return renderArray(params);\n }\n\n // Boolean - toggle row\n if (type === \"boolean\") {\n const displayValue =\n typeof value === \"boolean\"\n ? value\n : typeof schema.default === \"boolean\"\n ? schema.default\n : false;\n return html`\n <label class=\"cfg-toggle-row ${disabled ? \"disabled\" : \"\"}\">\n <div class=\"cfg-toggle-row__content\">\n <span class=\"cfg-toggle-row__label\">${label}</span>\n ${help ? html`<span class=\"cfg-toggle-row__help\">${help}</span>` : nothing}\n </div>\n <div class=\"cfg-toggle\">\n <input\n type=\"checkbox\"\n .checked=${displayValue}\n ?disabled=${disabled}\n @change=${(e: Event) => onPatch(path, (e.target as HTMLInputElement).checked)}\n />\n <span class=\"cfg-toggle__track\"></span>\n </div>\n </label>\n `;\n }\n\n // Number/Integer\n if (type === \"number\" || type === \"integer\") {\n return renderNumberInput(params);\n }\n\n // String\n if (type === \"string\") {\n return renderTextInput({ ...params, inputType: \"text\" });\n }\n\n // Fallback\n return html`\n <div class=\"cfg-field cfg-field--error\">\n <div class=\"cfg-field__label\">${label}</div>\n <div class=\"cfg-field__error\">Unsupported type: ${type}. Use Raw mode.</div>\n </div>\n `;\n}\n\nfunction renderTextInput(params: {\n schema: JsonSchema;\n value: unknown;\n path: Array<string | number>;\n hints: ConfigUiHints;\n disabled: boolean;\n showLabel?: boolean;\n inputType: \"text\" | \"number\";\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult {\n const { schema, value, path, hints, disabled, onPatch, inputType } = params;\n const showLabel = params.showLabel ?? true;\n const hint = hintForPath(path, hints);\n const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));\n const help = hint?.help ?? schema.description;\n const isSensitive = hint?.sensitive ?? isSensitivePath(path);\n const placeholder =\n hint?.placeholder ??\n (isSensitive ? \"••••\" : schema.default !== undefined ? `Default: ${schema.default}` : \"\");\n const displayValue = value ?? \"\";\n\n return html`\n <div class=\"cfg-field\">\n ${showLabel ? html`<label class=\"cfg-field__label\">${label}</label>` : nothing}\n ${help ? html`<div class=\"cfg-field__help\">${help}</div>` : nothing}\n <div class=\"cfg-input-wrap\">\n <input\n type=${isSensitive ? \"password\" : inputType}\n class=\"cfg-input\"\n placeholder=${placeholder}\n .value=${displayValue == null ? \"\" : String(displayValue)}\n ?disabled=${disabled}\n @input=${(e: Event) => {\n const raw = (e.target as HTMLInputElement).value;\n if (inputType === \"number\") {\n if (raw.trim() === \"\") {\n onPatch(path, undefined);\n return;\n }\n const parsed = Number(raw);\n onPatch(path, Number.isNaN(parsed) ? raw : parsed);\n return;\n }\n onPatch(path, raw);\n }}\n @change=${(e: Event) => {\n if (inputType === \"number\") return;\n const raw = (e.target as HTMLInputElement).value;\n onPatch(path, raw.trim());\n }}\n />\n ${\n schema.default !== undefined\n ? html`\n <button\n type=\"button\"\n class=\"cfg-input__reset\"\n title=\"Reset to default\"\n ?disabled=${disabled}\n @click=${() => onPatch(path, schema.default)}\n >↺</button>\n `\n : nothing\n }\n </div>\n </div>\n `;\n}\n\nfunction renderNumberInput(params: {\n schema: JsonSchema;\n value: unknown;\n path: Array<string | number>;\n hints: ConfigUiHints;\n disabled: boolean;\n showLabel?: boolean;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult {\n const { schema, value, path, hints, disabled, onPatch } = params;\n const showLabel = params.showLabel ?? true;\n const hint = hintForPath(path, hints);\n const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));\n const help = hint?.help ?? schema.description;\n const displayValue = value ?? schema.default ?? \"\";\n const numValue = typeof displayValue === \"number\" ? displayValue : 0;\n\n return html`\n <div class=\"cfg-field\">\n ${showLabel ? html`<label class=\"cfg-field__label\">${label}</label>` : nothing}\n ${help ? html`<div class=\"cfg-field__help\">${help}</div>` : nothing}\n <div class=\"cfg-number\">\n <button\n type=\"button\"\n class=\"cfg-number__btn\"\n ?disabled=${disabled}\n @click=${() => onPatch(path, numValue - 1)}\n >−</button>\n <input\n type=\"number\"\n class=\"cfg-number__input\"\n .value=${displayValue == null ? \"\" : String(displayValue)}\n ?disabled=${disabled}\n @input=${(e: Event) => {\n const raw = (e.target as HTMLInputElement).value;\n const parsed = raw === \"\" ? undefined : Number(raw);\n onPatch(path, parsed);\n }}\n />\n <button\n type=\"button\"\n class=\"cfg-number__btn\"\n ?disabled=${disabled}\n @click=${() => onPatch(path, numValue + 1)}\n >+</button>\n </div>\n </div>\n `;\n}\n\nfunction renderSelect(params: {\n schema: JsonSchema;\n value: unknown;\n path: Array<string | number>;\n hints: ConfigUiHints;\n disabled: boolean;\n showLabel?: boolean;\n options: unknown[];\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult {\n const { schema, value, path, hints, disabled, options, onPatch } = params;\n const showLabel = params.showLabel ?? true;\n const hint = hintForPath(path, hints);\n const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));\n const help = hint?.help ?? schema.description;\n const resolvedValue = value ?? schema.default;\n const currentIndex = options.findIndex(\n (opt) => opt === resolvedValue || String(opt) === String(resolvedValue),\n );\n const unset = \"__unset__\";\n\n return html`\n <div class=\"cfg-field\">\n ${showLabel ? html`<label class=\"cfg-field__label\">${label}</label>` : nothing}\n ${help ? html`<div class=\"cfg-field__help\">${help}</div>` : nothing}\n <select\n class=\"cfg-select\"\n ?disabled=${disabled}\n .value=${currentIndex >= 0 ? String(currentIndex) : unset}\n @change=${(e: Event) => {\n const val = (e.target as HTMLSelectElement).value;\n onPatch(path, val === unset ? undefined : options[Number(val)]);\n }}\n >\n <option value=${unset}>Select...</option>\n ${options.map(\n (opt, idx) => html`\n <option value=${String(idx)}>${String(opt)}</option>\n `,\n )}\n </select>\n </div>\n `;\n}\n\nfunction renderObject(params: {\n schema: JsonSchema;\n value: unknown;\n path: Array<string | number>;\n hints: ConfigUiHints;\n unsupported: Set<string>;\n disabled: boolean;\n showLabel?: boolean;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult {\n const { schema, value, path, hints, unsupported, disabled, onPatch } = params;\n const showLabel = params.showLabel ?? true;\n const hint = hintForPath(path, hints);\n const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));\n const help = hint?.help ?? schema.description;\n\n const fallback = value ?? schema.default;\n const obj =\n fallback && typeof fallback === \"object\" && !Array.isArray(fallback)\n ? (fallback as Record<string, unknown>)\n : {};\n const props = schema.properties ?? {};\n const entries = Object.entries(props);\n\n // Sort by hint order\n const sorted = entries.sort((a, b) => {\n const orderA = hintForPath([...path, a[0]], hints)?.order ?? 0;\n const orderB = hintForPath([...path, b[0]], hints)?.order ?? 0;\n if (orderA !== orderB) return orderA - orderB;\n return a[0].localeCompare(b[0]);\n });\n\n const reserved = new Set(Object.keys(props));\n const additional = schema.additionalProperties;\n const allowExtra = Boolean(additional) && typeof additional === \"object\";\n\n // For top-level, don't wrap in collapsible\n if (path.length === 1) {\n return html`\n <div class=\"cfg-fields\">\n ${sorted.map(([propKey, node]) =>\n renderNode({\n schema: node,\n value: obj[propKey],\n path: [...path, propKey],\n hints,\n unsupported,\n disabled,\n onPatch,\n }),\n )}\n ${\n allowExtra\n ? renderMapField({\n schema: additional as JsonSchema,\n value: obj,\n path,\n hints,\n unsupported,\n disabled,\n reservedKeys: reserved,\n onPatch,\n })\n : nothing\n }\n </div>\n `;\n }\n\n // Nested objects get collapsible treatment\n return html`\n <details class=\"cfg-object\" open>\n <summary class=\"cfg-object__header\">\n <span class=\"cfg-object__title\">${label}</span>\n <span class=\"cfg-object__chevron\">${icons.chevronDown}</span>\n </summary>\n ${help ? html`<div class=\"cfg-object__help\">${help}</div>` : nothing}\n <div class=\"cfg-object__content\">\n ${sorted.map(([propKey, node]) =>\n renderNode({\n schema: node,\n value: obj[propKey],\n path: [...path, propKey],\n hints,\n unsupported,\n disabled,\n onPatch,\n }),\n )}\n ${\n allowExtra\n ? renderMapField({\n schema: additional as JsonSchema,\n value: obj,\n path,\n hints,\n unsupported,\n disabled,\n reservedKeys: reserved,\n onPatch,\n })\n : nothing\n }\n </div>\n </details>\n `;\n}\n\nfunction renderArray(params: {\n schema: JsonSchema;\n value: unknown;\n path: Array<string | number>;\n hints: ConfigUiHints;\n unsupported: Set<string>;\n disabled: boolean;\n showLabel?: boolean;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult {\n const { schema, value, path, hints, unsupported, disabled, onPatch } = params;\n const showLabel = params.showLabel ?? true;\n const hint = hintForPath(path, hints);\n const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));\n const help = hint?.help ?? schema.description;\n\n const itemsSchema = Array.isArray(schema.items) ? schema.items[0] : schema.items;\n if (!itemsSchema) {\n return html`\n <div class=\"cfg-field cfg-field--error\">\n <div class=\"cfg-field__label\">${label}</div>\n <div class=\"cfg-field__error\">Unsupported array schema. Use Raw mode.</div>\n </div>\n `;\n }\n\n const arr = Array.isArray(value) ? value : Array.isArray(schema.default) ? schema.default : [];\n\n return html`\n <div class=\"cfg-array\">\n <div class=\"cfg-array__header\">\n ${showLabel ? html`<span class=\"cfg-array__label\">${label}</span>` : nothing}\n <span class=\"cfg-array__count\">${arr.length} item${arr.length !== 1 ? \"s\" : \"\"}</span>\n <button\n type=\"button\"\n class=\"cfg-array__add\"\n ?disabled=${disabled}\n @click=${() => {\n const next = [...arr, defaultValue(itemsSchema)];\n onPatch(path, next);\n }}\n >\n <span class=\"cfg-array__add-icon\">${icons.plus}</span>\n Add\n </button>\n </div>\n ${help ? html`<div class=\"cfg-array__help\">${help}</div>` : nothing}\n\n ${\n arr.length === 0\n ? html`\n <div class=\"cfg-array__empty\">No items yet. Click \"Add\" to create one.</div>\n `\n : html`\n <div class=\"cfg-array__items\">\n ${arr.map(\n (item, idx) => html`\n <div class=\"cfg-array__item\">\n <div class=\"cfg-array__item-header\">\n <span class=\"cfg-array__item-index\">#${idx + 1}</span>\n <button\n type=\"button\"\n class=\"cfg-array__item-remove\"\n title=\"Remove item\"\n ?disabled=${disabled}\n @click=${() => {\n const next = [...arr];\n next.splice(idx, 1);\n onPatch(path, next);\n }}\n >\n ${icons.trash}\n </button>\n </div>\n <div class=\"cfg-array__item-content\">\n ${renderNode({\n schema: itemsSchema,\n value: item,\n path: [...path, idx],\n hints,\n unsupported,\n disabled,\n showLabel: false,\n onPatch,\n })}\n </div>\n </div>\n `,\n )}\n </div>\n `\n }\n </div>\n `;\n}\n\nfunction renderMapField(params: {\n schema: JsonSchema;\n value: Record<string, unknown>;\n path: Array<string | number>;\n hints: ConfigUiHints;\n unsupported: Set<string>;\n disabled: boolean;\n reservedKeys: Set<string>;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n}): TemplateResult {\n const { schema, value, path, hints, unsupported, disabled, reservedKeys, onPatch } = params;\n const anySchema = isAnySchema(schema);\n const entries = Object.entries(value ?? {}).filter(([key]) => !reservedKeys.has(key));\n\n return html`\n <div class=\"cfg-map\">\n <div class=\"cfg-map__header\">\n <span class=\"cfg-map__label\">Custom entries</span>\n <button\n type=\"button\"\n class=\"cfg-map__add\"\n ?disabled=${disabled}\n @click=${() => {\n const next = { ...(value ?? {}) };\n let index = 1;\n let key = `custom-${index}`;\n while (key in next) {\n index += 1;\n key = `custom-${index}`;\n }\n next[key] = anySchema ? {} : defaultValue(schema);\n onPatch(path, next);\n }}\n >\n <span class=\"cfg-map__add-icon\">${icons.plus}</span>\n Add Entry\n </button>\n </div>\n\n ${\n entries.length === 0\n ? html`\n <div class=\"cfg-map__empty\">No custom entries.</div>\n `\n : html`\n <div class=\"cfg-map__items\">\n ${entries.map(([key, entryValue]) => {\n const valuePath = [...path, key];\n const fallback = jsonValue(entryValue);\n return html`\n <div class=\"cfg-map__item\">\n <div class=\"cfg-map__item-key\">\n <input\n type=\"text\"\n class=\"cfg-input cfg-input--sm\"\n placeholder=\"Key\"\n .value=${key}\n ?disabled=${disabled}\n @change=${(e: Event) => {\n const nextKey = (e.target as HTMLInputElement).value.trim();\n if (!nextKey || nextKey === key) return;\n const next = { ...(value ?? {}) };\n if (nextKey in next) return;\n next[nextKey] = next[key];\n delete next[key];\n onPatch(path, next);\n }}\n />\n </div>\n <div class=\"cfg-map__item-value\">\n ${\n anySchema\n ? html`\n <textarea\n class=\"cfg-textarea cfg-textarea--sm\"\n placeholder=\"JSON value\"\n rows=\"2\"\n .value=${fallback}\n ?disabled=${disabled}\n @change=${(e: Event) => {\n const target = e.target as HTMLTextAreaElement;\n const raw = target.value.trim();\n if (!raw) {\n onPatch(valuePath, undefined);\n return;\n }\n try {\n onPatch(valuePath, JSON.parse(raw));\n } catch {\n target.value = fallback;\n }\n }}\n ></textarea>\n `\n : renderNode({\n schema,\n value: entryValue,\n path: valuePath,\n hints,\n unsupported,\n disabled,\n showLabel: false,\n onPatch,\n })\n }\n </div>\n <button\n type=\"button\"\n class=\"cfg-map__item-remove\"\n title=\"Remove entry\"\n ?disabled=${disabled}\n @click=${() => {\n const next = { ...(value ?? {}) };\n delete next[key];\n onPatch(path, next);\n }}\n >\n ${icons.trash}\n </button>\n </div>\n `;\n })}\n </div>\n `\n }\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\nimport type { ConfigUiHints } from \"../types\";\nimport { icons } from \"../icons\";\nimport { hintForPath, humanize, schemaType, type JsonSchema } from \"./config-form.shared\";\nimport { renderNode } from \"./config-form.node\";\n\nexport type ConfigFormProps = {\n schema: JsonSchema | null;\n uiHints: ConfigUiHints;\n value: Record<string, unknown> | null;\n disabled?: boolean;\n unsupportedPaths?: string[];\n searchQuery?: string;\n activeSection?: string | null;\n activeSubsection?: string | null;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n};\n\n// SVG Icons for section cards (Lucide-style)\nconst sectionIcons = {\n env: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n <path\n d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.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-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-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-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.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 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"\n ></path>\n </svg>\n `,\n update: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7 10 12 15 17 10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n `,\n agents: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path\n d=\"M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2z\"\n ></path>\n <circle cx=\"8\" cy=\"14\" r=\"1\"></circle>\n <circle cx=\"16\" cy=\"14\" r=\"1\"></circle>\n </svg>\n `,\n auth: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>\n </svg>\n `,\n channels: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>\n </svg>\n `,\n messages: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path>\n <polyline points=\"22,6 12,13 2,6\"></polyline>\n </svg>\n `,\n commands: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <polyline points=\"4 17 10 11 4 5\"></polyline>\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line>\n </svg>\n `,\n hooks: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path>\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>\n </svg>\n `,\n skills: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <polygon\n points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\n ></polygon>\n </svg>\n `,\n tools: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path\n d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"\n ></path>\n </svg>\n `,\n gateway: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line>\n <path\n d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\n ></path>\n </svg>\n `,\n wizard: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M15 4V2\"></path>\n <path d=\"M15 16v-2\"></path>\n <path d=\"M8 9h2\"></path>\n <path d=\"M20 9h2\"></path>\n <path d=\"M17.8 11.8 19 13\"></path>\n <path d=\"M15 9h0\"></path>\n <path d=\"M17.8 6.2 19 5\"></path>\n <path d=\"m3 21 9-9\"></path>\n <path d=\"M12.2 6.2 11 5\"></path>\n </svg>\n `,\n // Additional sections\n meta: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M12 20h9\"></path>\n <path d=\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z\"></path>\n </svg>\n `,\n logging: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14 2 14 8 20 8\"></polyline>\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line>\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line>\n <polyline points=\"10 9 9 9 8 9\"></polyline>\n </svg>\n `,\n browser: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <circle cx=\"12\" cy=\"12\" r=\"4\"></circle>\n <line x1=\"21.17\" y1=\"8\" x2=\"12\" y2=\"8\"></line>\n <line x1=\"3.95\" y1=\"6.06\" x2=\"8.54\" y2=\"14\"></line>\n <line x1=\"10.88\" y1=\"21.94\" x2=\"15.46\" y2=\"14\"></line>\n </svg>\n `,\n ui: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line>\n <line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line>\n </svg>\n `,\n models: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path\n d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"\n ></path>\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline>\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>\n </svg>\n `,\n bindings: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect>\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\"></line>\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\"></line>\n </svg>\n `,\n broadcast: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M4.9 19.1C1 15.2 1 8.8 4.9 4.9\"></path>\n <path d=\"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5\"></path>\n <circle cx=\"12\" cy=\"12\" r=\"2\"></circle>\n <path d=\"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5\"></path>\n <path d=\"M19.1 4.9C23 8.8 23 15.1 19.1 19\"></path>\n </svg>\n `,\n audio: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M9 18V5l12-2v13\"></path>\n <circle cx=\"6\" cy=\"18\" r=\"3\"></circle>\n <circle cx=\"18\" cy=\"16\" r=\"3\"></circle>\n </svg>\n `,\n session: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path>\n <circle cx=\"9\" cy=\"7\" r=\"4\"></circle>\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"></path>\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>\n </svg>\n `,\n cron: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n `,\n web: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line>\n <path\n d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\n ></path>\n </svg>\n `,\n discovery: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n </svg>\n `,\n canvasHost: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle>\n <polyline points=\"21 15 16 10 5 21\"></polyline>\n </svg>\n `,\n talk: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>\n </svg>\n `,\n plugins: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M12 2v6\"></path>\n <path d=\"m4.93 10.93 4.24 4.24\"></path>\n <path d=\"M2 12h6\"></path>\n <path d=\"m4.93 13.07 4.24-4.24\"></path>\n <path d=\"M12 22v-6\"></path>\n <path d=\"m19.07 13.07-4.24-4.24\"></path>\n <path d=\"M22 12h-6\"></path>\n <path d=\"m19.07 10.93-4.24 4.24\"></path>\n </svg>\n `,\n default: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14 2 14 8 20 8\"></polyline>\n </svg>\n `,\n};\n\n// Section metadata\nexport const SECTION_META: Record<string, { label: string; description: string }> = {\n env: {\n label: \"Environment Variables\",\n description: \"Environment variables passed to the gateway process\",\n },\n update: { label: \"Updates\", description: \"Auto-update settings and release channel\" },\n agents: { label: \"Agents\", description: \"Agent configurations, models, and identities\" },\n auth: { label: \"Authentication\", description: \"API keys and authentication profiles\" },\n channels: {\n label: \"Channels\",\n description: \"Messaging channels (Telegram, Discord, Slack, etc.)\",\n },\n messages: { label: \"Messages\", description: \"Message handling and routing settings\" },\n commands: { label: \"Commands\", description: \"Custom slash commands\" },\n hooks: { label: \"Hooks\", description: \"Webhooks and event hooks\" },\n skills: { label: \"Skills\", description: \"Skill packs and capabilities\" },\n tools: { label: \"Tools\", description: \"Tool configurations (browser, search, etc.)\" },\n gateway: { label: \"Gateway\", description: \"Gateway server settings (port, auth, binding)\" },\n wizard: { label: \"Setup Wizard\", description: \"Setup wizard state and history\" },\n // Additional sections\n meta: { label: \"Metadata\", description: \"Gateway metadata and version information\" },\n logging: { label: \"Logging\", description: \"Log levels and output configuration\" },\n browser: { label: \"Browser\", description: \"Browser automation settings\" },\n ui: { label: \"UI\", description: \"User interface preferences\" },\n models: { label: \"Models\", description: \"AI model configurations and providers\" },\n bindings: { label: \"Bindings\", description: \"Key bindings and shortcuts\" },\n broadcast: { label: \"Broadcast\", description: \"Broadcast and notification settings\" },\n audio: { label: \"Audio\", description: \"Audio input/output settings\" },\n session: { label: \"Session\", description: \"Session management and persistence\" },\n cron: { label: \"Cron\", description: \"Scheduled tasks and automation\" },\n web: { label: \"Web\", description: \"Web server and API settings\" },\n discovery: { label: \"Discovery\", description: \"Service discovery and networking\" },\n canvasHost: { label: \"Canvas Host\", description: \"Canvas rendering and display\" },\n talk: { label: \"Talk\", description: \"Voice and speech settings\" },\n plugins: { label: \"Plugins\", description: \"Plugin management and extensions\" },\n};\n\nfunction getSectionIcon(key: string) {\n return sectionIcons[key as keyof typeof sectionIcons] ?? sectionIcons.default;\n}\n\nfunction matchesSearch(key: string, schema: JsonSchema, query: string): boolean {\n if (!query) return true;\n const q = query.toLowerCase();\n const meta = SECTION_META[key];\n\n // Check key name\n if (key.toLowerCase().includes(q)) return true;\n\n // Check label and description\n if (meta) {\n if (meta.label.toLowerCase().includes(q)) return true;\n if (meta.description.toLowerCase().includes(q)) return true;\n }\n\n return schemaMatches(schema, q);\n}\n\nfunction schemaMatches(schema: JsonSchema, query: string): boolean {\n if (schema.title?.toLowerCase().includes(query)) return true;\n if (schema.description?.toLowerCase().includes(query)) return true;\n if (schema.enum?.some((value) => String(value).toLowerCase().includes(query))) return true;\n\n if (schema.properties) {\n for (const [propKey, propSchema] of Object.entries(schema.properties)) {\n if (propKey.toLowerCase().includes(query)) return true;\n if (schemaMatches(propSchema, query)) return true;\n }\n }\n\n if (schema.items) {\n const items = Array.isArray(schema.items) ? schema.items : [schema.items];\n for (const item of items) {\n if (item && schemaMatches(item, query)) return true;\n }\n }\n\n if (schema.additionalProperties && typeof schema.additionalProperties === \"object\") {\n if (schemaMatches(schema.additionalProperties, query)) return true;\n }\n\n const unions = schema.anyOf ?? schema.oneOf ?? schema.allOf;\n if (unions) {\n for (const entry of unions) {\n if (entry && schemaMatches(entry, query)) return true;\n }\n }\n\n return false;\n}\n\nexport function renderConfigForm(props: ConfigFormProps) {\n if (!props.schema) {\n return html`\n <div class=\"muted\">Schema unavailable.</div>\n `;\n }\n const schema = props.schema;\n const value = props.value ?? {};\n if (schemaType(schema) !== \"object\" || !schema.properties) {\n return html`\n <div class=\"callout danger\">Unsupported schema. Use Raw.</div>\n `;\n }\n const unsupported = new Set(props.unsupportedPaths ?? []);\n const properties = schema.properties;\n const searchQuery = props.searchQuery ?? \"\";\n const activeSection = props.activeSection;\n const activeSubsection = props.activeSubsection ?? null;\n\n const entries = Object.entries(properties).sort((a, b) => {\n const orderA = hintForPath([a[0]], props.uiHints)?.order ?? 50;\n const orderB = hintForPath([b[0]], props.uiHints)?.order ?? 50;\n if (orderA !== orderB) return orderA - orderB;\n return a[0].localeCompare(b[0]);\n });\n\n const filteredEntries = entries.filter(([key, node]) => {\n if (activeSection && key !== activeSection) return false;\n if (searchQuery && !matchesSearch(key, node, searchQuery)) return false;\n return true;\n });\n\n let subsectionContext: { sectionKey: string; subsectionKey: string; schema: JsonSchema } | null =\n null;\n if (activeSection && activeSubsection && filteredEntries.length === 1) {\n const sectionSchema = filteredEntries[0]?.[1];\n if (\n sectionSchema &&\n schemaType(sectionSchema) === \"object\" &&\n sectionSchema.properties &&\n sectionSchema.properties[activeSubsection]\n ) {\n subsectionContext = {\n sectionKey: activeSection,\n subsectionKey: activeSubsection,\n schema: sectionSchema.properties[activeSubsection],\n };\n }\n }\n\n if (filteredEntries.length === 0) {\n return html`\n <div class=\"config-empty\">\n <div class=\"config-empty__icon\">${icons.search}</div>\n <div class=\"config-empty__text\">\n ${searchQuery ? `No settings match \"${searchQuery}\"` : \"No settings in this section\"}\n </div>\n </div>\n `;\n }\n\n return html`\n <div class=\"config-form config-form--modern\">\n ${\n subsectionContext\n ? (() => {\n const { sectionKey, subsectionKey, schema: node } = subsectionContext;\n const hint = hintForPath([sectionKey, subsectionKey], props.uiHints);\n const label = hint?.label ?? node.title ?? humanize(subsectionKey);\n const description = hint?.help ?? node.description ?? \"\";\n const sectionValue = (value as Record<string, unknown>)[sectionKey];\n const scopedValue =\n sectionValue && typeof sectionValue === \"object\"\n ? (sectionValue as Record<string, unknown>)[subsectionKey]\n : undefined;\n const id = `config-section-${sectionKey}-${subsectionKey}`;\n return html`\n <section class=\"config-section-card\" id=${id}>\n <div class=\"config-section-card__header\">\n <span class=\"config-section-card__icon\">${getSectionIcon(sectionKey)}</span>\n <div class=\"config-section-card__titles\">\n <h3 class=\"config-section-card__title\">${label}</h3>\n ${\n description\n ? html`<p class=\"config-section-card__desc\">${description}</p>`\n : nothing\n }\n </div>\n </div>\n <div class=\"config-section-card__content\">\n ${renderNode({\n schema: node,\n value: scopedValue,\n path: [sectionKey, subsectionKey],\n hints: props.uiHints,\n unsupported,\n disabled: props.disabled ?? false,\n showLabel: false,\n onPatch: props.onPatch,\n })}\n </div>\n </section>\n `;\n })()\n : filteredEntries.map(([key, node]) => {\n const meta = SECTION_META[key] ?? {\n label: key.charAt(0).toUpperCase() + key.slice(1),\n description: node.description ?? \"\",\n };\n\n return html`\n <section class=\"config-section-card\" id=\"config-section-${key}\">\n <div class=\"config-section-card__header\">\n <span class=\"config-section-card__icon\">${getSectionIcon(key)}</span>\n <div class=\"config-section-card__titles\">\n <h3 class=\"config-section-card__title\">${meta.label}</h3>\n ${\n meta.description\n ? html`<p class=\"config-section-card__desc\">${meta.description}</p>`\n : nothing\n }\n </div>\n </div>\n <div class=\"config-section-card__content\">\n ${renderNode({\n schema: node,\n value: (value as Record<string, unknown>)[key],\n path: [key],\n hints: props.uiHints,\n unsupported,\n disabled: props.disabled ?? false,\n showLabel: false,\n onPatch: props.onPatch,\n })}\n </div>\n </section>\n `;\n })\n }\n </div>\n `;\n}\n","import { pathKey, schemaType, type JsonSchema } from \"./config-form.shared\";\n\nexport type ConfigSchemaAnalysis = {\n schema: JsonSchema | null;\n unsupportedPaths: string[];\n};\n\nconst META_KEYS = new Set([\"title\", \"description\", \"default\", \"nullable\"]);\n\nfunction isAnySchema(schema: JsonSchema): boolean {\n const keys = Object.keys(schema ?? {}).filter((key) => !META_KEYS.has(key));\n return keys.length === 0;\n}\n\nfunction normalizeEnum(values: unknown[]): { enumValues: unknown[]; nullable: boolean } {\n const filtered = values.filter((value) => value != null);\n const nullable = filtered.length !== values.length;\n const enumValues: unknown[] = [];\n for (const value of filtered) {\n if (!enumValues.some((existing) => Object.is(existing, value))) {\n enumValues.push(value);\n }\n }\n return { enumValues, nullable };\n}\n\nexport function analyzeConfigSchema(raw: unknown): ConfigSchemaAnalysis {\n if (!raw || typeof raw !== \"object\") {\n return { schema: null, unsupportedPaths: [\"<root>\"] };\n }\n return normalizeSchemaNode(raw as JsonSchema, []);\n}\n\nfunction normalizeSchemaNode(\n schema: JsonSchema,\n path: Array<string | number>,\n): ConfigSchemaAnalysis {\n const unsupported = new Set<string>();\n const normalized: JsonSchema = { ...schema };\n const pathLabel = pathKey(path) || \"<root>\";\n\n if (schema.anyOf || schema.oneOf || schema.allOf) {\n const union = normalizeUnion(schema, path);\n if (union) return union;\n return { schema, unsupportedPaths: [pathLabel] };\n }\n\n const nullable = Array.isArray(schema.type) && schema.type.includes(\"null\");\n const type =\n schemaType(schema) ?? (schema.properties || schema.additionalProperties ? \"object\" : undefined);\n normalized.type = type ?? schema.type;\n normalized.nullable = nullable || schema.nullable;\n\n if (normalized.enum) {\n const { enumValues, nullable: enumNullable } = normalizeEnum(normalized.enum);\n normalized.enum = enumValues;\n if (enumNullable) normalized.nullable = true;\n if (enumValues.length === 0) unsupported.add(pathLabel);\n }\n\n if (type === \"object\") {\n const properties = schema.properties ?? {};\n const normalizedProps: Record<string, JsonSchema> = {};\n for (const [key, value] of Object.entries(properties)) {\n const res = normalizeSchemaNode(value, [...path, key]);\n if (res.schema) normalizedProps[key] = res.schema;\n for (const entry of res.unsupportedPaths) unsupported.add(entry);\n }\n normalized.properties = normalizedProps;\n\n if (schema.additionalProperties === true) {\n unsupported.add(pathLabel);\n } else if (schema.additionalProperties === false) {\n normalized.additionalProperties = false;\n } else if (schema.additionalProperties && typeof schema.additionalProperties === \"object\") {\n if (!isAnySchema(schema.additionalProperties as JsonSchema)) {\n const res = normalizeSchemaNode(schema.additionalProperties as JsonSchema, [...path, \"*\"]);\n normalized.additionalProperties = res.schema ?? (schema.additionalProperties as JsonSchema);\n if (res.unsupportedPaths.length > 0) unsupported.add(pathLabel);\n }\n }\n } else if (type === \"array\") {\n const itemsSchema = Array.isArray(schema.items) ? schema.items[0] : schema.items;\n if (!itemsSchema) {\n unsupported.add(pathLabel);\n } else {\n const res = normalizeSchemaNode(itemsSchema, [...path, \"*\"]);\n normalized.items = res.schema ?? itemsSchema;\n if (res.unsupportedPaths.length > 0) unsupported.add(pathLabel);\n }\n } else if (\n type !== \"string\" &&\n type !== \"number\" &&\n type !== \"integer\" &&\n type !== \"boolean\" &&\n !normalized.enum\n ) {\n unsupported.add(pathLabel);\n }\n\n return {\n schema: normalized,\n unsupportedPaths: Array.from(unsupported),\n };\n}\n\nfunction normalizeUnion(\n schema: JsonSchema,\n path: Array<string | number>,\n): ConfigSchemaAnalysis | null {\n if (schema.allOf) return null;\n const union = schema.anyOf ?? schema.oneOf;\n if (!union) return null;\n\n const literals: unknown[] = [];\n const remaining: JsonSchema[] = [];\n let nullable = false;\n\n for (const entry of union) {\n if (!entry || typeof entry !== \"object\") return null;\n if (Array.isArray(entry.enum)) {\n const { enumValues, nullable: enumNullable } = normalizeEnum(entry.enum);\n literals.push(...enumValues);\n if (enumNullable) nullable = true;\n continue;\n }\n if (\"const\" in entry) {\n if (entry.const == null) {\n nullable = true;\n continue;\n }\n literals.push(entry.const);\n continue;\n }\n if (schemaType(entry) === \"null\") {\n nullable = true;\n continue;\n }\n remaining.push(entry);\n }\n\n if (literals.length > 0 && remaining.length === 0) {\n const unique: unknown[] = [];\n for (const value of literals) {\n if (!unique.some((existing) => Object.is(existing, value))) {\n unique.push(value);\n }\n }\n return {\n schema: {\n ...schema,\n enum: unique,\n nullable,\n anyOf: undefined,\n oneOf: undefined,\n allOf: undefined,\n },\n unsupportedPaths: [],\n };\n }\n\n if (remaining.length === 1) {\n const res = normalizeSchemaNode(remaining[0], path);\n if (res.schema) {\n res.schema.nullable = nullable || res.schema.nullable;\n }\n return res;\n }\n\n const primitiveTypes = [\"string\", \"number\", \"integer\", \"boolean\"];\n if (\n remaining.length > 0 &&\n literals.length === 0 &&\n remaining.every((entry) => entry.type && primitiveTypes.includes(String(entry.type)))\n ) {\n return {\n schema: {\n ...schema,\n nullable,\n },\n unsupportedPaths: [],\n };\n }\n\n return null;\n}\n","import { html, nothing } from \"lit\";\nimport type { ConfigUiHints } from \"../types\";\nimport { analyzeConfigSchema, renderConfigForm, SECTION_META } from \"./config-form\";\nimport { hintForPath, humanize, schemaType, type JsonSchema } from \"./config-form.shared\";\n\nexport type ConfigProps = {\n raw: string;\n originalRaw: string;\n valid: boolean | null;\n issues: unknown[];\n loading: boolean;\n saving: boolean;\n applying: boolean;\n updating: boolean;\n connected: boolean;\n schema: unknown | null;\n schemaLoading: boolean;\n uiHints: ConfigUiHints;\n formMode: \"form\" | \"raw\";\n formValue: Record<string, unknown> | null;\n originalValue: Record<string, unknown> | null;\n searchQuery: string;\n activeSection: string | null;\n activeSubsection: string | null;\n onRawChange: (next: string) => void;\n onFormModeChange: (mode: \"form\" | \"raw\") => void;\n onFormPatch: (path: Array<string | number>, value: unknown) => void;\n onSearchChange: (query: string) => void;\n onSectionChange: (section: string | null) => void;\n onSubsectionChange: (section: string | null) => void;\n onReload: () => void;\n onSave: () => void;\n onApply: () => void;\n onUpdate: () => void;\n};\n\n// SVG Icons for sidebar (Lucide-style)\nconst sidebarIcons = {\n all: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\n </svg>\n `,\n env: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n <path\n d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.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-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-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-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.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 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\"\n ></path>\n </svg>\n `,\n update: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7 10 12 15 17 10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n `,\n agents: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n d=\"M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2z\"\n ></path>\n <circle cx=\"8\" cy=\"14\" r=\"1\"></circle>\n <circle cx=\"16\" cy=\"14\" r=\"1\"></circle>\n </svg>\n `,\n auth: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\"></path>\n </svg>\n `,\n channels: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>\n </svg>\n `,\n messages: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"></path>\n <polyline points=\"22,6 12,13 2,6\"></polyline>\n </svg>\n `,\n commands: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"4 17 10 11 4 5\"></polyline>\n <line x1=\"12\" y1=\"19\" x2=\"20\" y2=\"19\"></line>\n </svg>\n `,\n hooks: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path>\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>\n </svg>\n `,\n skills: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polygon\n points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\n ></polygon>\n </svg>\n `,\n tools: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n d=\"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z\"\n ></path>\n </svg>\n `,\n gateway: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line>\n <path\n d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\n ></path>\n </svg>\n `,\n wizard: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 4V2\"></path>\n <path d=\"M15 16v-2\"></path>\n <path d=\"M8 9h2\"></path>\n <path d=\"M20 9h2\"></path>\n <path d=\"M17.8 11.8 19 13\"></path>\n <path d=\"M15 9h0\"></path>\n <path d=\"M17.8 6.2 19 5\"></path>\n <path d=\"m3 21 9-9\"></path>\n <path d=\"M12.2 6.2 11 5\"></path>\n </svg>\n `,\n // Additional sections\n meta: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M12 20h9\"></path>\n <path d=\"M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z\"></path>\n </svg>\n `,\n logging: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14 2 14 8 20 8\"></polyline>\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"></line>\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"></line>\n <polyline points=\"10 9 9 9 8 9\"></polyline>\n </svg>\n `,\n browser: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <circle cx=\"12\" cy=\"12\" r=\"4\"></circle>\n <line x1=\"21.17\" y1=\"8\" x2=\"12\" y2=\"8\"></line>\n <line x1=\"3.95\" y1=\"6.06\" x2=\"8.54\" y2=\"14\"></line>\n <line x1=\"10.88\" y1=\"21.94\" x2=\"15.46\" y2=\"14\"></line>\n </svg>\n `,\n ui: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line>\n <line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line>\n </svg>\n `,\n models: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path\n d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\"\n ></path>\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\"></polyline>\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\"></line>\n </svg>\n `,\n bindings: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect>\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\"></line>\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\"></line>\n </svg>\n `,\n broadcast: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M4.9 19.1C1 15.2 1 8.8 4.9 4.9\"></path>\n <path d=\"M7.8 16.2c-2.3-2.3-2.3-6.1 0-8.5\"></path>\n <circle cx=\"12\" cy=\"12\" r=\"2\"></circle>\n <path d=\"M16.2 7.8c2.3 2.3 2.3 6.1 0 8.5\"></path>\n <path d=\"M19.1 4.9C23 8.8 23 15.1 19.1 19\"></path>\n </svg>\n `,\n audio: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18V5l12-2v13\"></path>\n <circle cx=\"6\" cy=\"18\" r=\"3\"></circle>\n <circle cx=\"18\" cy=\"16\" r=\"3\"></circle>\n </svg>\n `,\n session: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"></path>\n <circle cx=\"9\" cy=\"7\" r=\"4\"></circle>\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"></path>\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\"></path>\n </svg>\n `,\n cron: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n `,\n web: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line>\n <path\n d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\n ></path>\n </svg>\n `,\n discovery: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line>\n </svg>\n `,\n canvasHost: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle>\n <polyline points=\"21 15 16 10 5 21\"></polyline>\n </svg>\n `,\n talk: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>\n </svg>\n `,\n plugins: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M12 2v6\"></path>\n <path d=\"m4.93 10.93 4.24 4.24\"></path>\n <path d=\"M2 12h6\"></path>\n <path d=\"m4.93 13.07 4.24-4.24\"></path>\n <path d=\"M12 22v-6\"></path>\n <path d=\"m19.07 13.07-4.24-4.24\"></path>\n <path d=\"M22 12h-6\"></path>\n <path d=\"m19.07 10.93-4.24 4.24\"></path>\n </svg>\n `,\n default: html`\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"></path>\n <polyline points=\"14 2 14 8 20 8\"></polyline>\n </svg>\n `,\n};\n\n// Section definitions\nconst SECTIONS: Array<{ key: string; label: string }> = [\n { key: \"env\", label: \"Environment\" },\n { key: \"update\", label: \"Updates\" },\n { key: \"agents\", label: \"Agents\" },\n { key: \"auth\", label: \"Authentication\" },\n { key: \"channels\", label: \"Channels\" },\n { key: \"messages\", label: \"Messages\" },\n { key: \"commands\", label: \"Commands\" },\n { key: \"hooks\", label: \"Hooks\" },\n { key: \"skills\", label: \"Skills\" },\n { key: \"tools\", label: \"Tools\" },\n { key: \"gateway\", label: \"Gateway\" },\n { key: \"wizard\", label: \"Setup Wizard\" },\n];\n\ntype SubsectionEntry = {\n key: string;\n label: string;\n description?: string;\n order: number;\n};\n\nconst ALL_SUBSECTION = \"__all__\";\n\nfunction getSectionIcon(key: string) {\n return sidebarIcons[key as keyof typeof sidebarIcons] ?? sidebarIcons.default;\n}\n\nfunction resolveSectionMeta(\n key: string,\n schema?: JsonSchema,\n): {\n label: string;\n description?: string;\n} {\n const meta = SECTION_META[key];\n if (meta) return meta;\n return {\n label: schema?.title ?? humanize(key),\n description: schema?.description ?? \"\",\n };\n}\n\nfunction resolveSubsections(params: {\n key: string;\n schema: JsonSchema | undefined;\n uiHints: ConfigUiHints;\n}): SubsectionEntry[] {\n const { key, schema, uiHints } = params;\n if (!schema || schemaType(schema) !== \"object\" || !schema.properties) return [];\n const entries = Object.entries(schema.properties).map(([subKey, node]) => {\n const hint = hintForPath([key, subKey], uiHints);\n const label = hint?.label ?? node.title ?? humanize(subKey);\n const description = hint?.help ?? node.description ?? \"\";\n const order = hint?.order ?? 50;\n return { key: subKey, label, description, order };\n });\n entries.sort((a, b) => (a.order !== b.order ? a.order - b.order : a.key.localeCompare(b.key)));\n return entries;\n}\n\nfunction computeDiff(\n original: Record<string, unknown> | null,\n current: Record<string, unknown> | null,\n): Array<{ path: string; from: unknown; to: unknown }> {\n if (!original || !current) return [];\n const changes: Array<{ path: string; from: unknown; to: unknown }> = [];\n\n function compare(orig: unknown, curr: unknown, path: string) {\n if (orig === curr) return;\n if (typeof orig !== typeof curr) {\n changes.push({ path, from: orig, to: curr });\n return;\n }\n if (typeof orig !== \"object\" || orig === null || curr === null) {\n if (orig !== curr) {\n changes.push({ path, from: orig, to: curr });\n }\n return;\n }\n if (Array.isArray(orig) && Array.isArray(curr)) {\n if (JSON.stringify(orig) !== JSON.stringify(curr)) {\n changes.push({ path, from: orig, to: curr });\n }\n return;\n }\n const origObj = orig as Record<string, unknown>;\n const currObj = curr as Record<string, unknown>;\n const allKeys = new Set([...Object.keys(origObj), ...Object.keys(currObj)]);\n for (const key of allKeys) {\n compare(origObj[key], currObj[key], path ? `${path}.${key}` : key);\n }\n }\n\n compare(original, current, \"\");\n return changes;\n}\n\nfunction truncateValue(value: unknown, maxLen = 40): string {\n let str: string;\n try {\n const json = JSON.stringify(value);\n str = json ?? String(value);\n } catch {\n str = String(value);\n }\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + \"...\";\n}\n\nexport function renderConfig(props: ConfigProps) {\n const validity = props.valid == null ? \"unknown\" : props.valid ? \"valid\" : \"invalid\";\n const analysis = analyzeConfigSchema(props.schema);\n const formUnsafe = analysis.schema ? analysis.unsupportedPaths.length > 0 : false;\n\n // Get available sections from schema\n const schemaProps = analysis.schema?.properties ?? {};\n const availableSections = SECTIONS.filter((s) => s.key in schemaProps);\n\n // Add any sections in schema but not in our list\n const knownKeys = new Set(SECTIONS.map((s) => s.key));\n const extraSections = Object.keys(schemaProps)\n .filter((k) => !knownKeys.has(k))\n .map((k) => ({ key: k, label: k.charAt(0).toUpperCase() + k.slice(1) }));\n\n const allSections = [...availableSections, ...extraSections];\n\n const activeSectionSchema =\n props.activeSection && analysis.schema && schemaType(analysis.schema) === \"object\"\n ? (analysis.schema.properties?.[props.activeSection] as JsonSchema | undefined)\n : undefined;\n const activeSectionMeta = props.activeSection\n ? resolveSectionMeta(props.activeSection, activeSectionSchema)\n : null;\n const subsections = props.activeSection\n ? resolveSubsections({\n key: props.activeSection,\n schema: activeSectionSchema,\n uiHints: props.uiHints,\n })\n : [];\n const allowSubnav =\n props.formMode === \"form\" && Boolean(props.activeSection) && subsections.length > 0;\n const isAllSubsection = props.activeSubsection === ALL_SUBSECTION;\n const effectiveSubsection = props.searchQuery\n ? null\n : isAllSubsection\n ? null\n : (props.activeSubsection ?? subsections[0]?.key ?? null);\n\n // Compute diff for showing changes (works for both form and raw modes)\n const diff = props.formMode === \"form\" ? computeDiff(props.originalValue, props.formValue) : [];\n const hasRawChanges = props.formMode === \"raw\" && props.raw !== props.originalRaw;\n const hasChanges = props.formMode === \"form\" ? diff.length > 0 : hasRawChanges;\n\n // Save/apply buttons require actual changes to be enabled.\n // Note: formUnsafe warns about unsupported schema paths but shouldn't block saving.\n const canSaveForm = Boolean(props.formValue) && !props.loading && Boolean(analysis.schema);\n const canSave =\n props.connected &&\n !props.saving &&\n hasChanges &&\n (props.formMode === \"raw\" ? true : canSaveForm);\n const canApply =\n props.connected &&\n !props.applying &&\n !props.updating &&\n hasChanges &&\n (props.formMode === \"raw\" ? true : canSaveForm);\n const canUpdate = props.connected && !props.applying && !props.updating;\n\n return html`\n <div class=\"config-layout\">\n <!-- Sidebar -->\n <aside class=\"config-sidebar\">\n <div class=\"config-sidebar__header\">\n <div class=\"config-sidebar__title\">Settings</div>\n <span class=\"pill pill--sm ${validity === \"valid\" ? \"pill--ok\" : validity === \"invalid\" ? \"pill--danger\" : \"\"}\">${validity}</span>\n </div>\n\n <!-- Search -->\n <div class=\"config-search\">\n <svg class=\"config-search__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\n <path d=\"M21 21l-4.35-4.35\"></path>\n </svg>\n <input\n type=\"text\"\n class=\"config-search__input\"\n placeholder=\"Search settings...\"\n .value=${props.searchQuery}\n @input=${(e: Event) => props.onSearchChange((e.target as HTMLInputElement).value)}\n />\n ${\n props.searchQuery\n ? html`\n <button\n class=\"config-search__clear\"\n @click=${() => props.onSearchChange(\"\")}\n >×</button>\n `\n : nothing\n }\n </div>\n\n <!-- Section nav -->\n <nav class=\"config-nav\">\n <button\n class=\"config-nav__item ${props.activeSection === null ? \"active\" : \"\"}\"\n @click=${() => props.onSectionChange(null)}\n >\n <span class=\"config-nav__icon\">${sidebarIcons.all}</span>\n <span class=\"config-nav__label\">All Settings</span>\n </button>\n ${allSections.map(\n (section) => html`\n <button\n class=\"config-nav__item ${props.activeSection === section.key ? \"active\" : \"\"}\"\n @click=${() => props.onSectionChange(section.key)}\n >\n <span class=\"config-nav__icon\">${getSectionIcon(section.key)}</span>\n <span class=\"config-nav__label\">${section.label}</span>\n </button>\n `,\n )}\n </nav>\n\n <!-- Mode toggle at bottom -->\n <div class=\"config-sidebar__footer\">\n <div class=\"config-mode-toggle\">\n <button\n class=\"config-mode-toggle__btn ${props.formMode === \"form\" ? \"active\" : \"\"}\"\n ?disabled=${props.schemaLoading || !props.schema}\n @click=${() => props.onFormModeChange(\"form\")}\n >\n Form\n </button>\n <button\n class=\"config-mode-toggle__btn ${props.formMode === \"raw\" ? \"active\" : \"\"}\"\n @click=${() => props.onFormModeChange(\"raw\")}\n >\n Raw\n </button>\n </div>\n </div>\n </aside>\n\n <!-- Main content -->\n <main class=\"config-main\">\n <!-- Action bar -->\n <div class=\"config-actions\">\n <div class=\"config-actions__left\">\n ${\n hasChanges\n ? html`\n <span class=\"config-changes-badge\">${props.formMode === \"raw\" ? \"Unsaved changes\" : `${diff.length} unsaved change${diff.length !== 1 ? \"s\" : \"\"}`}</span>\n `\n : html`\n <span class=\"config-status muted\">No changes</span>\n `\n }\n </div>\n <div class=\"config-actions__right\">\n <button class=\"btn btn--sm\" ?disabled=${props.loading} @click=${props.onReload}>\n ${props.loading ? \"Loading…\" : \"Reload\"}\n </button>\n <button\n class=\"btn btn--sm primary\"\n ?disabled=${!canSave}\n @click=${props.onSave}\n >\n ${props.saving ? \"Saving…\" : \"Save\"}\n </button>\n <button\n class=\"btn btn--sm\"\n ?disabled=${!canApply}\n @click=${props.onApply}\n >\n ${props.applying ? \"Applying…\" : \"Apply\"}\n </button>\n <button\n class=\"btn btn--sm\"\n ?disabled=${!canUpdate}\n @click=${props.onUpdate}\n >\n ${props.updating ? \"Updating…\" : \"Update\"}\n </button>\n </div>\n </div>\n\n <!-- Diff panel (form mode only - raw mode doesn't have granular diff) -->\n ${\n hasChanges && props.formMode === \"form\"\n ? html`\n <details class=\"config-diff\">\n <summary class=\"config-diff__summary\">\n <span>View ${diff.length} pending change${diff.length !== 1 ? \"s\" : \"\"}</span>\n <svg class=\"config-diff__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n </summary>\n <div class=\"config-diff__content\">\n ${diff.map(\n (change) => html`\n <div class=\"config-diff__item\">\n <div class=\"config-diff__path\">${change.path}</div>\n <div class=\"config-diff__values\">\n <span class=\"config-diff__from\">${truncateValue(change.from)}</span>\n <span class=\"config-diff__arrow\">→</span>\n <span class=\"config-diff__to\">${truncateValue(change.to)}</span>\n </div>\n </div>\n `,\n )}\n </div>\n </details>\n `\n : nothing\n }\n\n ${\n activeSectionMeta && props.formMode === \"form\"\n ? html`\n <div class=\"config-section-hero\">\n <div class=\"config-section-hero__icon\">${getSectionIcon(props.activeSection ?? \"\")}</div>\n <div class=\"config-section-hero__text\">\n <div class=\"config-section-hero__title\">${activeSectionMeta.label}</div>\n ${\n activeSectionMeta.description\n ? html`<div class=\"config-section-hero__desc\">${activeSectionMeta.description}</div>`\n : nothing\n }\n </div>\n </div>\n `\n : nothing\n }\n\n ${\n allowSubnav\n ? html`\n <div class=\"config-subnav\">\n <button\n class=\"config-subnav__item ${effectiveSubsection === null ? \"active\" : \"\"}\"\n @click=${() => props.onSubsectionChange(ALL_SUBSECTION)}\n >\n All\n </button>\n ${subsections.map(\n (entry) => html`\n <button\n class=\"config-subnav__item ${\n effectiveSubsection === entry.key ? \"active\" : \"\"\n }\"\n title=${entry.description || entry.label}\n @click=${() => props.onSubsectionChange(entry.key)}\n >\n ${entry.label}\n </button>\n `,\n )}\n </div>\n `\n : nothing\n }\n\n <!-- Form content -->\n <div class=\"config-content\">\n ${\n props.formMode === \"form\"\n ? html`\n ${\n props.schemaLoading\n ? html`\n <div class=\"config-loading\">\n <div class=\"config-loading__spinner\"></div>\n <span>Loading schema…</span>\n </div>\n `\n : renderConfigForm({\n schema: analysis.schema,\n uiHints: props.uiHints,\n value: props.formValue,\n disabled: props.loading || !props.formValue,\n unsupportedPaths: analysis.unsupportedPaths,\n onPatch: props.onFormPatch,\n searchQuery: props.searchQuery,\n activeSection: props.activeSection,\n activeSubsection: effectiveSubsection,\n })\n }\n ${\n formUnsafe\n ? html`\n <div class=\"callout danger\" style=\"margin-top: 12px\">\n Form view can't safely edit some fields. Use Raw to avoid losing config entries.\n </div>\n `\n : nothing\n }\n `\n : html`\n <label class=\"field config-raw-field\">\n <span>Raw JSON5</span>\n <textarea\n .value=${props.raw}\n @input=${(e: Event) =>\n props.onRawChange((e.target as HTMLTextAreaElement).value)}\n ></textarea>\n </label>\n `\n }\n </div>\n\n ${\n props.issues.length > 0\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n <pre class=\"code-block\">${JSON.stringify(props.issues, null, 2)}</pre>\n </div>`\n : nothing\n }\n </main>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport type { ChannelAccountSnapshot } from \"../types\";\nimport type { ChannelKey, ChannelsProps } from \"./channels.types\";\n\nexport function formatDuration(ms?: number | null) {\n if (!ms && ms !== 0) return \"n/a\";\n const sec = Math.round(ms / 1000);\n if (sec < 60) return `${sec}s`;\n const min = Math.round(sec / 60);\n if (min < 60) return `${min}m`;\n const hr = Math.round(min / 60);\n return `${hr}h`;\n}\n\nexport function channelEnabled(key: ChannelKey, props: ChannelsProps) {\n const snapshot = props.snapshot;\n const channels = snapshot?.channels as Record<string, unknown> | null;\n if (!snapshot || !channels) return false;\n const channelStatus = channels[key] as Record<string, unknown> | undefined;\n const configured = typeof channelStatus?.configured === \"boolean\" && channelStatus.configured;\n const running = typeof channelStatus?.running === \"boolean\" && channelStatus.running;\n const connected = typeof channelStatus?.connected === \"boolean\" && channelStatus.connected;\n const accounts = snapshot.channelAccounts?.[key] ?? [];\n const accountActive = accounts.some(\n (account) => account.configured || account.running || account.connected,\n );\n return configured || running || connected || accountActive;\n}\n\nexport function getChannelAccountCount(\n key: ChannelKey,\n channelAccounts?: Record<string, ChannelAccountSnapshot[]> | null,\n): number {\n return channelAccounts?.[key]?.length ?? 0;\n}\n\nexport function renderChannelAccountCount(\n key: ChannelKey,\n channelAccounts?: Record<string, ChannelAccountSnapshot[]> | null,\n) {\n const count = getChannelAccountCount(key, channelAccounts);\n if (count < 2) return nothing;\n return html`<div class=\"account-count\">Accounts (${count})</div>`;\n}\n","import { html } from \"lit\";\n\nimport type { ConfigUiHints } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { analyzeConfigSchema, renderNode, schemaType, type JsonSchema } from \"./config-form\";\n\ntype ChannelConfigFormProps = {\n channelId: string;\n configValue: Record<string, unknown> | null;\n schema: unknown | null;\n uiHints: ConfigUiHints;\n disabled: boolean;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n};\n\nfunction resolveSchemaNode(\n schema: JsonSchema | null,\n path: Array<string | number>,\n): JsonSchema | null {\n let current = schema;\n for (const key of path) {\n if (!current) return null;\n const type = schemaType(current);\n if (type === \"object\") {\n const properties = current.properties ?? {};\n if (typeof key === \"string\" && properties[key]) {\n current = properties[key];\n continue;\n }\n const additional = current.additionalProperties;\n if (typeof key === \"string\" && additional && typeof additional === \"object\") {\n current = additional as JsonSchema;\n continue;\n }\n return null;\n }\n if (type === \"array\") {\n if (typeof key !== \"number\") return null;\n const items = Array.isArray(current.items) ? current.items[0] : current.items;\n current = items ?? null;\n continue;\n }\n return null;\n }\n return current;\n}\n\nfunction resolveChannelValue(\n config: Record<string, unknown>,\n channelId: string,\n): Record<string, unknown> {\n const channels = (config.channels ?? {}) as Record<string, unknown>;\n const fromChannels = channels[channelId];\n const fallback = config[channelId];\n const resolved =\n (fromChannels && typeof fromChannels === \"object\"\n ? (fromChannels as Record<string, unknown>)\n : null) ??\n (fallback && typeof fallback === \"object\" ? (fallback as Record<string, unknown>) : null);\n return resolved ?? {};\n}\n\nexport function renderChannelConfigForm(props: ChannelConfigFormProps) {\n const analysis = analyzeConfigSchema(props.schema);\n const normalized = analysis.schema;\n if (!normalized) {\n return html`\n <div class=\"callout danger\">Schema unavailable. Use Raw.</div>\n `;\n }\n const node = resolveSchemaNode(normalized, [\"channels\", props.channelId]);\n if (!node) {\n return html`\n <div class=\"callout danger\">Channel config schema unavailable.</div>\n `;\n }\n const configValue = props.configValue ?? {};\n const value = resolveChannelValue(configValue, props.channelId);\n return html`\n <div class=\"config-form\">\n ${renderNode({\n schema: node,\n value,\n path: [\"channels\", props.channelId],\n hints: props.uiHints,\n unsupported: new Set(analysis.unsupportedPaths),\n disabled: props.disabled,\n showLabel: false,\n onPatch: props.onPatch,\n })}\n </div>\n `;\n}\n\nexport function renderChannelConfigSection(params: { channelId: string; props: ChannelsProps }) {\n const { channelId, props } = params;\n const disabled = props.configSaving || props.configSchemaLoading;\n return html`\n <div style=\"margin-top: 16px;\">\n ${\n props.configSchemaLoading\n ? html`\n <div class=\"muted\">Loading config schema…</div>\n `\n : renderChannelConfigForm({\n channelId,\n configValue: props.configForm,\n schema: props.configSchema,\n uiHints: props.configUiHints,\n disabled,\n onPatch: props.onConfigPatch,\n })\n }\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button\n class=\"btn primary\"\n ?disabled=${disabled || !props.configFormDirty}\n @click=${() => props.onConfigSave()}\n >\n ${props.configSaving ? \"Saving…\" : \"Save\"}\n </button>\n <button\n class=\"btn\"\n ?disabled=${disabled}\n @click=${() => props.onConfigReload()}\n >\n Reload\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { DiscordStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\n\nexport function renderDiscordCard(params: {\n props: ChannelsProps;\n discord?: DiscordStatus | null;\n accountCountLabel: unknown;\n}) {\n const { props, discord, accountCountLabel } = params;\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">Discord</div>\n <div class=\"card-sub\">Bot status and channel configuration.</div>\n ${accountCountLabel}\n\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${discord?.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${discord?.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${discord?.lastStartAt ? formatAgo(discord.lastStartAt) : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last probe</span>\n <span>${discord?.lastProbeAt ? formatAgo(discord.lastProbeAt) : \"n/a\"}</span>\n </div>\n </div>\n\n ${\n discord?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${discord.lastError}\n </div>`\n : nothing\n }\n\n ${\n discord?.probe\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n Probe ${discord.probe.ok ? \"ok\" : \"failed\"} ·\n ${discord.probe.status ?? \"\"} ${discord.probe.error ?? \"\"}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: \"discord\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Probe\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { GoogleChatStatus } from \"../types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\nimport type { ChannelsProps } from \"./channels.types\";\n\nexport function renderGoogleChatCard(params: {\n props: ChannelsProps;\n googleChat?: GoogleChatStatus | null;\n accountCountLabel: unknown;\n}) {\n const { props, googleChat, accountCountLabel } = params;\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">Google Chat</div>\n <div class=\"card-sub\">Chat API webhook status and channel configuration.</div>\n ${accountCountLabel}\n\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${googleChat ? (googleChat.configured ? \"Yes\" : \"No\") : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${googleChat ? (googleChat.running ? \"Yes\" : \"No\") : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Credential</span>\n <span>${googleChat?.credentialSource ?? \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Audience</span>\n <span>\n ${\n googleChat?.audienceType\n ? `${googleChat.audienceType}${googleChat.audience ? ` · ${googleChat.audience}` : \"\"}`\n : \"n/a\"\n }\n </span>\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${googleChat?.lastStartAt ? formatAgo(googleChat.lastStartAt) : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last probe</span>\n <span>${googleChat?.lastProbeAt ? formatAgo(googleChat.lastProbeAt) : \"n/a\"}</span>\n </div>\n </div>\n\n ${\n googleChat?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${googleChat.lastError}\n </div>`\n : nothing\n }\n\n ${\n googleChat?.probe\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n Probe ${googleChat.probe.ok ? \"ok\" : \"failed\"} ·\n ${googleChat.probe.status ?? \"\"} ${googleChat.probe.error ?? \"\"}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: \"googlechat\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Probe\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { IMessageStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\n\nexport function renderIMessageCard(params: {\n props: ChannelsProps;\n imessage?: IMessageStatus | null;\n accountCountLabel: unknown;\n}) {\n const { props, imessage, accountCountLabel } = params;\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">iMessage</div>\n <div class=\"card-sub\">macOS bridge status and channel configuration.</div>\n ${accountCountLabel}\n\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${imessage?.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${imessage?.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${imessage?.lastStartAt ? formatAgo(imessage.lastStartAt) : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last probe</span>\n <span>${imessage?.lastProbeAt ? formatAgo(imessage.lastProbeAt) : \"n/a\"}</span>\n </div>\n </div>\n\n ${\n imessage?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${imessage.lastError}\n </div>`\n : nothing\n }\n\n ${\n imessage?.probe\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n Probe ${imessage.probe.ok ? \"ok\" : \"failed\"} ·\n ${imessage.probe.error ?? \"\"}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: \"imessage\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Probe\n </button>\n </div>\n </div>\n `;\n}\n","/**\n * Nostr Profile Edit Form\n *\n * Provides UI for editing and publishing Nostr profile (kind:0).\n */\n\nimport { html, nothing, type TemplateResult } from \"lit\";\n\nimport type { NostrProfile as NostrProfileType } from \"../types\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface NostrProfileFormState {\n /** Current form values */\n values: NostrProfileType;\n /** Original values for dirty detection */\n original: NostrProfileType;\n /** Whether the form is currently submitting */\n saving: boolean;\n /** Whether import is in progress */\n importing: boolean;\n /** Last error message */\n error: string | null;\n /** Last success message */\n success: string | null;\n /** Validation errors per field */\n fieldErrors: Record<string, string>;\n /** Whether to show advanced fields */\n showAdvanced: boolean;\n}\n\nexport interface NostrProfileFormCallbacks {\n /** Called when a field value changes */\n onFieldChange: (field: keyof NostrProfileType, value: string) => void;\n /** Called when save is clicked */\n onSave: () => void;\n /** Called when import is clicked */\n onImport: () => void;\n /** Called when cancel is clicked */\n onCancel: () => void;\n /** Called when toggle advanced is clicked */\n onToggleAdvanced: () => void;\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction isFormDirty(state: NostrProfileFormState): boolean {\n const { values, original } = state;\n return (\n values.name !== original.name ||\n values.displayName !== original.displayName ||\n values.about !== original.about ||\n values.picture !== original.picture ||\n values.banner !== original.banner ||\n values.website !== original.website ||\n values.nip05 !== original.nip05 ||\n values.lud16 !== original.lud16\n );\n}\n\n// ============================================================================\n// Form Rendering\n// ============================================================================\n\nexport function renderNostrProfileForm(params: {\n state: NostrProfileFormState;\n callbacks: NostrProfileFormCallbacks;\n accountId: string;\n}): TemplateResult {\n const { state, callbacks, accountId } = params;\n const isDirty = isFormDirty(state);\n\n const renderField = (\n field: keyof NostrProfileType,\n label: string,\n opts: {\n type?: \"text\" | \"url\" | \"textarea\";\n placeholder?: string;\n maxLength?: number;\n help?: string;\n } = {},\n ) => {\n const { type = \"text\", placeholder, maxLength, help } = opts;\n const value = state.values[field] ?? \"\";\n const error = state.fieldErrors[field];\n\n const inputId = `nostr-profile-${field}`;\n\n if (type === \"textarea\") {\n return html`\n <div class=\"form-field\" style=\"margin-bottom: 12px;\">\n <label for=\"${inputId}\" style=\"display: block; margin-bottom: 4px; font-weight: 500;\">\n ${label}\n </label>\n <textarea\n id=\"${inputId}\"\n .value=${value}\n placeholder=${placeholder ?? \"\"}\n maxlength=${maxLength ?? 2000}\n rows=\"3\"\n style=\"width: 100%; padding: 8px; border: 1px solid var(--border-color); border-radius: 4px; resize: vertical; font-family: inherit;\"\n @input=${(e: InputEvent) => {\n const target = e.target as HTMLTextAreaElement;\n callbacks.onFieldChange(field, target.value);\n }}\n ?disabled=${state.saving}\n ></textarea>\n ${help ? html`<div style=\"font-size: 12px; color: var(--text-muted); margin-top: 2px;\">${help}</div>` : nothing}\n ${error ? html`<div style=\"font-size: 12px; color: var(--danger-color); margin-top: 2px;\">${error}</div>` : nothing}\n </div>\n `;\n }\n\n return html`\n <div class=\"form-field\" style=\"margin-bottom: 12px;\">\n <label for=\"${inputId}\" style=\"display: block; margin-bottom: 4px; font-weight: 500;\">\n ${label}\n </label>\n <input\n id=\"${inputId}\"\n type=${type}\n .value=${value}\n placeholder=${placeholder ?? \"\"}\n maxlength=${maxLength ?? 256}\n style=\"width: 100%; padding: 8px; border: 1px solid var(--border-color); border-radius: 4px;\"\n @input=${(e: InputEvent) => {\n const target = e.target as HTMLInputElement;\n callbacks.onFieldChange(field, target.value);\n }}\n ?disabled=${state.saving}\n />\n ${help ? html`<div style=\"font-size: 12px; color: var(--text-muted); margin-top: 2px;\">${help}</div>` : nothing}\n ${error ? html`<div style=\"font-size: 12px; color: var(--danger-color); margin-top: 2px;\">${error}</div>` : nothing}\n </div>\n `;\n };\n\n const renderPicturePreview = () => {\n const picture = state.values.picture;\n if (!picture) return nothing;\n\n return html`\n <div style=\"margin-bottom: 12px;\">\n <img\n src=${picture}\n alt=\"Profile picture preview\"\n style=\"max-width: 80px; max-height: 80px; border-radius: 50%; object-fit: cover; border: 2px solid var(--border-color);\"\n @error=${(e: Event) => {\n const img = e.target as HTMLImageElement;\n img.style.display = \"none\";\n }}\n @load=${(e: Event) => {\n const img = e.target as HTMLImageElement;\n img.style.display = \"block\";\n }}\n />\n </div>\n `;\n };\n\n return html`\n <div class=\"nostr-profile-form\" style=\"padding: 16px; background: var(--bg-secondary); border-radius: 8px; margin-top: 12px;\">\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"font-weight: 600; font-size: 16px;\">Edit Profile</div>\n <div style=\"font-size: 12px; color: var(--text-muted);\">Account: ${accountId}</div>\n </div>\n\n ${\n state.error\n ? html`<div class=\"callout danger\" style=\"margin-bottom: 12px;\">${state.error}</div>`\n : nothing\n }\n\n ${\n state.success\n ? html`<div class=\"callout success\" style=\"margin-bottom: 12px;\">${state.success}</div>`\n : nothing\n }\n\n ${renderPicturePreview()}\n\n ${renderField(\"name\", \"Username\", {\n placeholder: \"satoshi\",\n maxLength: 256,\n help: \"Short username (e.g., satoshi)\",\n })}\n\n ${renderField(\"displayName\", \"Display Name\", {\n placeholder: \"Satoshi Nakamoto\",\n maxLength: 256,\n help: \"Your full display name\",\n })}\n\n ${renderField(\"about\", \"Bio\", {\n type: \"textarea\",\n placeholder: \"Tell people about yourself...\",\n maxLength: 2000,\n help: \"A brief bio or description\",\n })}\n\n ${renderField(\"picture\", \"Avatar URL\", {\n type: \"url\",\n placeholder: \"https://example.com/avatar.jpg\",\n help: \"HTTPS URL to your profile picture\",\n })}\n\n ${\n state.showAdvanced\n ? html`\n <div style=\"border-top: 1px solid var(--border-color); padding-top: 12px; margin-top: 12px;\">\n <div style=\"font-weight: 500; margin-bottom: 12px; color: var(--text-muted);\">Advanced</div>\n\n ${renderField(\"banner\", \"Banner URL\", {\n type: \"url\",\n placeholder: \"https://example.com/banner.jpg\",\n help: \"HTTPS URL to a banner image\",\n })}\n\n ${renderField(\"website\", \"Website\", {\n type: \"url\",\n placeholder: \"https://example.com\",\n help: \"Your personal website\",\n })}\n\n ${renderField(\"nip05\", \"NIP-05 Identifier\", {\n placeholder: \"you@example.com\",\n help: \"Verifiable identifier (e.g., you@domain.com)\",\n })}\n\n ${renderField(\"lud16\", \"Lightning Address\", {\n placeholder: \"you@getalby.com\",\n help: \"Lightning address for tips (LUD-16)\",\n })}\n </div>\n `\n : nothing\n }\n\n <div style=\"display: flex; gap: 8px; margin-top: 16px; flex-wrap: wrap;\">\n <button\n class=\"btn primary\"\n @click=${callbacks.onSave}\n ?disabled=${state.saving || !isDirty}\n >\n ${state.saving ? \"Saving...\" : \"Save & Publish\"}\n </button>\n\n <button\n class=\"btn\"\n @click=${callbacks.onImport}\n ?disabled=${state.importing || state.saving}\n >\n ${state.importing ? \"Importing...\" : \"Import from Relays\"}\n </button>\n\n <button\n class=\"btn\"\n @click=${callbacks.onToggleAdvanced}\n >\n ${state.showAdvanced ? \"Hide Advanced\" : \"Show Advanced\"}\n </button>\n\n <button\n class=\"btn\"\n @click=${callbacks.onCancel}\n ?disabled=${state.saving}\n >\n Cancel\n </button>\n </div>\n\n ${\n isDirty\n ? html`\n <div style=\"font-size: 12px; color: var(--warning-color); margin-top: 8px\">\n You have unsaved changes\n </div>\n `\n : nothing\n }\n </div>\n `;\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\n/**\n * Create initial form state from existing profile\n */\nexport function createNostrProfileFormState(\n profile: NostrProfileType | undefined,\n): NostrProfileFormState {\n const values: NostrProfileType = {\n name: profile?.name ?? \"\",\n displayName: profile?.displayName ?? \"\",\n about: profile?.about ?? \"\",\n picture: profile?.picture ?? \"\",\n banner: profile?.banner ?? \"\",\n website: profile?.website ?? \"\",\n nip05: profile?.nip05 ?? \"\",\n lud16: profile?.lud16 ?? \"\",\n };\n\n return {\n values,\n original: { ...values },\n saving: false,\n importing: false,\n error: null,\n success: null,\n fieldErrors: {},\n showAdvanced: Boolean(profile?.banner || profile?.website || profile?.nip05 || profile?.lud16),\n };\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { ChannelAccountSnapshot, NostrStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\nimport {\n renderNostrProfileForm,\n type NostrProfileFormState,\n type NostrProfileFormCallbacks,\n} from \"./channels.nostr-profile-form\";\n\n/**\n * Truncate a pubkey for display (shows first and last 8 chars)\n */\nfunction truncatePubkey(pubkey: string | null | undefined): string {\n if (!pubkey) return \"n/a\";\n if (pubkey.length <= 20) return pubkey;\n return `${pubkey.slice(0, 8)}...${pubkey.slice(-8)}`;\n}\n\nexport function renderNostrCard(params: {\n props: ChannelsProps;\n nostr?: NostrStatus | null;\n nostrAccounts: ChannelAccountSnapshot[];\n accountCountLabel: unknown;\n /** Profile form state (optional - if provided, shows form) */\n profileFormState?: NostrProfileFormState | null;\n /** Profile form callbacks */\n profileFormCallbacks?: NostrProfileFormCallbacks | null;\n /** Called when Edit Profile is clicked */\n onEditProfile?: () => void;\n}) {\n const {\n props,\n nostr,\n nostrAccounts,\n accountCountLabel,\n profileFormState,\n profileFormCallbacks,\n onEditProfile,\n } = params;\n const primaryAccount = nostrAccounts[0];\n const summaryConfigured = nostr?.configured ?? primaryAccount?.configured ?? false;\n const summaryRunning = nostr?.running ?? primaryAccount?.running ?? false;\n const summaryPublicKey =\n nostr?.publicKey ?? (primaryAccount as { publicKey?: string } | undefined)?.publicKey;\n const summaryLastStartAt = nostr?.lastStartAt ?? primaryAccount?.lastStartAt ?? null;\n const summaryLastError = nostr?.lastError ?? primaryAccount?.lastError ?? null;\n const hasMultipleAccounts = nostrAccounts.length > 1;\n const showingForm = profileFormState !== null && profileFormState !== undefined;\n\n const renderAccountCard = (account: ChannelAccountSnapshot) => {\n const publicKey = (account as { publicKey?: string }).publicKey;\n const profile = (account as { profile?: { name?: string; displayName?: string } }).profile;\n const displayName = profile?.displayName ?? profile?.name ?? account.name ?? account.accountId;\n\n return html`\n <div class=\"account-card\">\n <div class=\"account-card-header\">\n <div class=\"account-card-title\">${displayName}</div>\n <div class=\"account-card-id\">${account.accountId}</div>\n </div>\n <div class=\"status-list account-card-status\">\n <div>\n <span class=\"label\">Running</span>\n <span>${account.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Configured</span>\n <span>${account.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Public Key</span>\n <span class=\"monospace\" title=\"${publicKey ?? \"\"}\">${truncatePubkey(publicKey)}</span>\n </div>\n <div>\n <span class=\"label\">Last inbound</span>\n <span>${account.lastInboundAt ? formatAgo(account.lastInboundAt) : \"n/a\"}</span>\n </div>\n ${\n account.lastError\n ? html`\n <div class=\"account-card-error\">${account.lastError}</div>\n `\n : nothing\n }\n </div>\n </div>\n `;\n };\n\n const renderProfileSection = () => {\n // If showing form, render the form instead of the read-only view\n if (showingForm && profileFormCallbacks) {\n return renderNostrProfileForm({\n state: profileFormState,\n callbacks: profileFormCallbacks,\n accountId: nostrAccounts[0]?.accountId ?? \"default\",\n });\n }\n\n const profile =\n (\n primaryAccount as\n | {\n profile?: {\n name?: string;\n displayName?: string;\n about?: string;\n picture?: string;\n nip05?: string;\n };\n }\n | undefined\n )?.profile ?? nostr?.profile;\n const { name, displayName, about, picture, nip05 } = profile ?? {};\n const hasAnyProfileData = name || displayName || about || picture || nip05;\n\n return html`\n <div style=\"margin-top: 16px; padding: 12px; background: var(--bg-secondary); border-radius: 8px;\">\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;\">\n <div style=\"font-weight: 500;\">Profile</div>\n ${\n summaryConfigured\n ? html`\n <button\n class=\"btn btn-sm\"\n @click=${onEditProfile}\n style=\"font-size: 12px; padding: 4px 8px;\"\n >\n Edit Profile\n </button>\n `\n : nothing\n }\n </div>\n ${\n hasAnyProfileData\n ? html`\n <div class=\"status-list\">\n ${\n picture\n ? html`\n <div style=\"margin-bottom: 8px;\">\n <img\n src=${picture}\n alt=\"Profile picture\"\n style=\"width: 48px; height: 48px; border-radius: 50%; object-fit: cover; border: 2px solid var(--border-color);\"\n @error=${(e: Event) => {\n (e.target as HTMLImageElement).style.display = \"none\";\n }}\n />\n </div>\n `\n : nothing\n }\n ${name ? html`<div><span class=\"label\">Name</span><span>${name}</span></div>` : nothing}\n ${\n displayName\n ? html`<div><span class=\"label\">Display Name</span><span>${displayName}</span></div>`\n : nothing\n }\n ${\n about\n ? html`<div><span class=\"label\">About</span><span style=\"max-width: 300px; overflow: hidden; text-overflow: ellipsis;\">${about}</span></div>`\n : nothing\n }\n ${nip05 ? html`<div><span class=\"label\">NIP-05</span><span>${nip05}</span></div>` : nothing}\n </div>\n `\n : html`\n <div style=\"color: var(--text-muted); font-size: 13px\">\n No profile set. Click \"Edit Profile\" to add your name, bio, and avatar.\n </div>\n `\n }\n </div>\n `;\n };\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">Nostr</div>\n <div class=\"card-sub\">Decentralized DMs via Nostr relays (NIP-04).</div>\n ${accountCountLabel}\n\n ${\n hasMultipleAccounts\n ? html`\n <div class=\"account-card-list\">\n ${nostrAccounts.map((account) => renderAccountCard(account))}\n </div>\n `\n : html`\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${summaryConfigured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${summaryRunning ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Public Key</span>\n <span class=\"monospace\" title=\"${summaryPublicKey ?? \"\"}\"\n >${truncatePubkey(summaryPublicKey)}</span\n >\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${summaryLastStartAt ? formatAgo(summaryLastStartAt) : \"n/a\"}</span>\n </div>\n </div>\n `\n }\n\n ${\n summaryLastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">${summaryLastError}</div>`\n : nothing\n }\n\n ${renderProfileSection()}\n\n ${renderChannelConfigSection({ channelId: \"nostr\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(false)}>Refresh</button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { SignalStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\n\nexport function renderSignalCard(params: {\n props: ChannelsProps;\n signal?: SignalStatus | null;\n accountCountLabel: unknown;\n}) {\n const { props, signal, accountCountLabel } = params;\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">Signal</div>\n <div class=\"card-sub\">signal-cli status and channel configuration.</div>\n ${accountCountLabel}\n\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${signal?.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${signal?.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Base URL</span>\n <span>${signal?.baseUrl ?? \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${signal?.lastStartAt ? formatAgo(signal.lastStartAt) : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last probe</span>\n <span>${signal?.lastProbeAt ? formatAgo(signal.lastProbeAt) : \"n/a\"}</span>\n </div>\n </div>\n\n ${\n signal?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${signal.lastError}\n </div>`\n : nothing\n }\n\n ${\n signal?.probe\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n Probe ${signal.probe.ok ? \"ok\" : \"failed\"} ·\n ${signal.probe.status ?? \"\"} ${signal.probe.error ?? \"\"}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: \"signal\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Probe\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { SlackStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\n\nexport function renderSlackCard(params: {\n props: ChannelsProps;\n slack?: SlackStatus | null;\n accountCountLabel: unknown;\n}) {\n const { props, slack, accountCountLabel } = params;\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">Slack</div>\n <div class=\"card-sub\">Socket mode status and channel configuration.</div>\n ${accountCountLabel}\n\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${slack?.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${slack?.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${slack?.lastStartAt ? formatAgo(slack.lastStartAt) : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last probe</span>\n <span>${slack?.lastProbeAt ? formatAgo(slack.lastProbeAt) : \"n/a\"}</span>\n </div>\n </div>\n\n ${\n slack?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${slack.lastError}\n </div>`\n : nothing\n }\n\n ${\n slack?.probe\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n Probe ${slack.probe.ok ? \"ok\" : \"failed\"} ·\n ${slack.probe.status ?? \"\"} ${slack.probe.error ?? \"\"}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: \"slack\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Probe\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { ChannelAccountSnapshot, TelegramStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\n\nexport function renderTelegramCard(params: {\n props: ChannelsProps;\n telegram?: TelegramStatus;\n telegramAccounts: ChannelAccountSnapshot[];\n accountCountLabel: unknown;\n}) {\n const { props, telegram, telegramAccounts, accountCountLabel } = params;\n const hasMultipleAccounts = telegramAccounts.length > 1;\n\n const renderAccountCard = (account: ChannelAccountSnapshot) => {\n const probe = account.probe as { bot?: { username?: string } } | undefined;\n const botUsername = probe?.bot?.username;\n const label = account.name || account.accountId;\n return html`\n <div class=\"account-card\">\n <div class=\"account-card-header\">\n <div class=\"account-card-title\">\n ${botUsername ? `@${botUsername}` : label}\n </div>\n <div class=\"account-card-id\">${account.accountId}</div>\n </div>\n <div class=\"status-list account-card-status\">\n <div>\n <span class=\"label\">Running</span>\n <span>${account.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Configured</span>\n <span>${account.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Last inbound</span>\n <span>${account.lastInboundAt ? formatAgo(account.lastInboundAt) : \"n/a\"}</span>\n </div>\n ${\n account.lastError\n ? html`\n <div class=\"account-card-error\">\n ${account.lastError}\n </div>\n `\n : nothing\n }\n </div>\n </div>\n `;\n };\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">Telegram</div>\n <div class=\"card-sub\">Bot status and channel configuration.</div>\n ${accountCountLabel}\n\n ${\n hasMultipleAccounts\n ? html`\n <div class=\"account-card-list\">\n ${telegramAccounts.map((account) => renderAccountCard(account))}\n </div>\n `\n : html`\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${telegram?.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${telegram?.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Mode</span>\n <span>${telegram?.mode ?? \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last start</span>\n <span>${telegram?.lastStartAt ? formatAgo(telegram.lastStartAt) : \"n/a\"}</span>\n </div>\n <div>\n <span class=\"label\">Last probe</span>\n <span>${telegram?.lastProbeAt ? formatAgo(telegram.lastProbeAt) : \"n/a\"}</span>\n </div>\n </div>\n `\n }\n\n ${\n telegram?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${telegram.lastError}\n </div>`\n : nothing\n }\n\n ${\n telegram?.probe\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n Probe ${telegram.probe.ok ? \"ok\" : \"failed\"} ·\n ${telegram.probe.status ?? \"\"} ${telegram.probe.error ?? \"\"}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: \"telegram\", props })}\n\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Probe\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type { WhatsAppStatus } from \"../types\";\nimport type { ChannelsProps } from \"./channels.types\";\nimport { renderChannelConfigSection } from \"./channels.config\";\nimport { formatDuration } from \"./channels.shared\";\n\nexport function renderWhatsAppCard(params: {\n props: ChannelsProps;\n whatsapp?: WhatsAppStatus;\n accountCountLabel: unknown;\n}) {\n const { props, whatsapp, accountCountLabel } = params;\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">WhatsApp</div>\n <div class=\"card-sub\">Link WhatsApp Web and monitor connection health.</div>\n ${accountCountLabel}\n\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${whatsapp?.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Linked</span>\n <span>${whatsapp?.linked ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${whatsapp?.running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Connected</span>\n <span>${whatsapp?.connected ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Last connect</span>\n <span>\n ${whatsapp?.lastConnectedAt ? formatAgo(whatsapp.lastConnectedAt) : \"n/a\"}\n </span>\n </div>\n <div>\n <span class=\"label\">Last message</span>\n <span>\n ${whatsapp?.lastMessageAt ? formatAgo(whatsapp.lastMessageAt) : \"n/a\"}\n </span>\n </div>\n <div>\n <span class=\"label\">Auth age</span>\n <span>\n ${whatsapp?.authAgeMs != null ? formatDuration(whatsapp.authAgeMs) : \"n/a\"}\n </span>\n </div>\n </div>\n\n ${\n whatsapp?.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${whatsapp.lastError}\n </div>`\n : nothing\n }\n\n ${\n props.whatsappMessage\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n ${props.whatsappMessage}\n </div>`\n : nothing\n }\n\n ${\n props.whatsappQrDataUrl\n ? html`<div class=\"qr-wrap\">\n <img src=${props.whatsappQrDataUrl} alt=\"WhatsApp QR\" />\n </div>`\n : nothing\n }\n\n <div class=\"row\" style=\"margin-top: 14px; flex-wrap: wrap;\">\n <button\n class=\"btn primary\"\n ?disabled=${props.whatsappBusy}\n @click=${() => props.onWhatsAppStart(false)}\n >\n ${props.whatsappBusy ? \"Working…\" : \"Show QR\"}\n </button>\n <button\n class=\"btn\"\n ?disabled=${props.whatsappBusy}\n @click=${() => props.onWhatsAppStart(true)}\n >\n Relink\n </button>\n <button\n class=\"btn\"\n ?disabled=${props.whatsappBusy}\n @click=${() => props.onWhatsAppWait()}\n >\n Wait for scan\n </button>\n <button\n class=\"btn danger\"\n ?disabled=${props.whatsappBusy}\n @click=${() => props.onWhatsAppLogout()}\n >\n Logout\n </button>\n <button class=\"btn\" @click=${() => props.onRefresh(true)}>\n Refresh\n </button>\n </div>\n\n ${renderChannelConfigSection({ channelId: \"whatsapp\", props })}\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport type {\n ChannelAccountSnapshot,\n ChannelUiMetaEntry,\n ChannelsStatusSnapshot,\n DiscordStatus,\n GoogleChatStatus,\n IMessageStatus,\n NostrProfile,\n NostrStatus,\n SignalStatus,\n SlackStatus,\n TelegramStatus,\n WhatsAppStatus,\n} from \"../types\";\nimport type { ChannelKey, ChannelsChannelData, ChannelsProps } from \"./channels.types\";\nimport { channelEnabled, renderChannelAccountCount } from \"./channels.shared\";\nimport { renderChannelConfigSection } from \"./channels.config\";\nimport { renderDiscordCard } from \"./channels.discord\";\nimport { renderGoogleChatCard } from \"./channels.googlechat\";\nimport { renderIMessageCard } from \"./channels.imessage\";\nimport { renderNostrCard } from \"./channels.nostr\";\nimport { renderSignalCard } from \"./channels.signal\";\nimport { renderSlackCard } from \"./channels.slack\";\nimport { renderTelegramCard } from \"./channels.telegram\";\nimport { renderWhatsAppCard } from \"./channels.whatsapp\";\n\nexport function renderChannels(props: ChannelsProps) {\n const channels = props.snapshot?.channels as Record<string, unknown> | null;\n const whatsapp = (channels?.whatsapp ?? undefined) as WhatsAppStatus | undefined;\n const telegram = (channels?.telegram ?? undefined) as TelegramStatus | undefined;\n const discord = (channels?.discord ?? null) as DiscordStatus | null;\n const googlechat = (channels?.googlechat ?? null) as GoogleChatStatus | null;\n const slack = (channels?.slack ?? null) as SlackStatus | null;\n const signal = (channels?.signal ?? null) as SignalStatus | null;\n const imessage = (channels?.imessage ?? null) as IMessageStatus | null;\n const nostr = (channels?.nostr ?? null) as NostrStatus | null;\n const channelOrder = resolveChannelOrder(props.snapshot);\n const orderedChannels = channelOrder\n .map((key, index) => ({\n key,\n enabled: channelEnabled(key, props),\n order: index,\n }))\n .sort((a, b) => {\n if (a.enabled !== b.enabled) return a.enabled ? -1 : 1;\n return a.order - b.order;\n });\n\n return html`\n <section class=\"grid grid-cols-2\">\n ${orderedChannels.map((channel) =>\n renderChannel(channel.key, props, {\n whatsapp,\n telegram,\n discord,\n googlechat,\n slack,\n signal,\n imessage,\n nostr,\n channelAccounts: props.snapshot?.channelAccounts ?? null,\n }),\n )}\n </section>\n\n <section class=\"card\" style=\"margin-top: 18px;\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Channel health</div>\n <div class=\"card-sub\">Channel status snapshots from the gateway.</div>\n </div>\n <div class=\"muted\">${props.lastSuccessAt ? formatAgo(props.lastSuccessAt) : \"n/a\"}</div>\n </div>\n ${\n props.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${props.lastError}\n </div>`\n : nothing\n }\n <pre class=\"code-block\" style=\"margin-top: 12px;\">\n${props.snapshot ? JSON.stringify(props.snapshot, null, 2) : \"No snapshot yet.\"}\n </pre>\n </section>\n `;\n}\n\nfunction resolveChannelOrder(snapshot: ChannelsStatusSnapshot | null): ChannelKey[] {\n if (snapshot?.channelMeta?.length) {\n return snapshot.channelMeta.map((entry) => entry.id) as ChannelKey[];\n }\n if (snapshot?.channelOrder?.length) {\n return snapshot.channelOrder;\n }\n return [\"whatsapp\", \"telegram\", \"discord\", \"googlechat\", \"slack\", \"signal\", \"imessage\", \"nostr\"];\n}\n\nfunction renderChannel(key: ChannelKey, props: ChannelsProps, data: ChannelsChannelData) {\n const accountCountLabel = renderChannelAccountCount(key, data.channelAccounts);\n switch (key) {\n case \"whatsapp\":\n return renderWhatsAppCard({\n props,\n whatsapp: data.whatsapp,\n accountCountLabel,\n });\n case \"telegram\":\n return renderTelegramCard({\n props,\n telegram: data.telegram,\n telegramAccounts: data.channelAccounts?.telegram ?? [],\n accountCountLabel,\n });\n case \"discord\":\n return renderDiscordCard({\n props,\n discord: data.discord,\n accountCountLabel,\n });\n case \"googlechat\":\n return renderGoogleChatCard({\n props,\n googlechat: data.googlechat,\n accountCountLabel,\n });\n case \"slack\":\n return renderSlackCard({\n props,\n slack: data.slack,\n accountCountLabel,\n });\n case \"signal\":\n return renderSignalCard({\n props,\n signal: data.signal,\n accountCountLabel,\n });\n case \"imessage\":\n return renderIMessageCard({\n props,\n imessage: data.imessage,\n accountCountLabel,\n });\n case \"nostr\": {\n const nostrAccounts = data.channelAccounts?.nostr ?? [];\n const primaryAccount = nostrAccounts[0];\n const accountId = primaryAccount?.accountId ?? \"default\";\n const profile =\n (primaryAccount as { profile?: NostrProfile | null } | undefined)?.profile ?? null;\n const showForm =\n props.nostrProfileAccountId === accountId ? props.nostrProfileFormState : null;\n const profileFormCallbacks = showForm\n ? {\n onFieldChange: props.onNostrProfileFieldChange,\n onSave: props.onNostrProfileSave,\n onImport: props.onNostrProfileImport,\n onCancel: props.onNostrProfileCancel,\n onToggleAdvanced: props.onNostrProfileToggleAdvanced,\n }\n : null;\n return renderNostrCard({\n props,\n nostr: data.nostr,\n nostrAccounts,\n accountCountLabel,\n profileFormState: showForm,\n profileFormCallbacks,\n onEditProfile: () => props.onNostrProfileEdit(accountId, profile),\n });\n }\n default:\n return renderGenericChannelCard(key, props, data.channelAccounts ?? {});\n }\n}\n\nfunction renderGenericChannelCard(\n key: ChannelKey,\n props: ChannelsProps,\n channelAccounts: Record<string, ChannelAccountSnapshot[]>,\n) {\n const label = resolveChannelLabel(props.snapshot, key);\n const status = props.snapshot?.channels?.[key] as Record<string, unknown> | undefined;\n const configured = typeof status?.configured === \"boolean\" ? status.configured : undefined;\n const running = typeof status?.running === \"boolean\" ? status.running : undefined;\n const connected = typeof status?.connected === \"boolean\" ? status.connected : undefined;\n const lastError = typeof status?.lastError === \"string\" ? status.lastError : undefined;\n const accounts = channelAccounts[key] ?? [];\n const accountCountLabel = renderChannelAccountCount(key, channelAccounts);\n\n return html`\n <div class=\"card\">\n <div class=\"card-title\">${label}</div>\n <div class=\"card-sub\">Channel status and configuration.</div>\n ${accountCountLabel}\n\n ${\n accounts.length > 0\n ? html`\n <div class=\"account-card-list\">\n ${accounts.map((account) => renderGenericAccount(account))}\n </div>\n `\n : html`\n <div class=\"status-list\" style=\"margin-top: 16px;\">\n <div>\n <span class=\"label\">Configured</span>\n <span>${configured == null ? \"n/a\" : configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Running</span>\n <span>${running == null ? \"n/a\" : running ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Connected</span>\n <span>${connected == null ? \"n/a\" : connected ? \"Yes\" : \"No\"}</span>\n </div>\n </div>\n `\n }\n\n ${\n lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${lastError}\n </div>`\n : nothing\n }\n\n ${renderChannelConfigSection({ channelId: key, props })}\n </div>\n `;\n}\n\nfunction resolveChannelMetaMap(\n snapshot: ChannelsStatusSnapshot | null,\n): Record<string, ChannelUiMetaEntry> {\n if (!snapshot?.channelMeta?.length) return {};\n return Object.fromEntries(snapshot.channelMeta.map((entry) => [entry.id, entry]));\n}\n\nfunction resolveChannelLabel(snapshot: ChannelsStatusSnapshot | null, key: string): string {\n const meta = resolveChannelMetaMap(snapshot)[key];\n return meta?.label ?? snapshot?.channelLabels?.[key] ?? key;\n}\n\nconst RECENT_ACTIVITY_THRESHOLD_MS = 10 * 60 * 1000; // 10 minutes\n\nfunction hasRecentActivity(account: ChannelAccountSnapshot): boolean {\n if (!account.lastInboundAt) return false;\n return Date.now() - account.lastInboundAt < RECENT_ACTIVITY_THRESHOLD_MS;\n}\n\nfunction deriveRunningStatus(account: ChannelAccountSnapshot): \"Yes\" | \"No\" | \"Active\" {\n if (account.running) return \"Yes\";\n // If we have recent inbound activity, the channel is effectively running\n if (hasRecentActivity(account)) return \"Active\";\n return \"No\";\n}\n\nfunction deriveConnectedStatus(account: ChannelAccountSnapshot): \"Yes\" | \"No\" | \"Active\" | \"n/a\" {\n if (account.connected === true) return \"Yes\";\n if (account.connected === false) return \"No\";\n // If connected is null/undefined but we have recent activity, show as active\n if (hasRecentActivity(account)) return \"Active\";\n return \"n/a\";\n}\n\nfunction renderGenericAccount(account: ChannelAccountSnapshot) {\n const runningStatus = deriveRunningStatus(account);\n const connectedStatus = deriveConnectedStatus(account);\n\n return html`\n <div class=\"account-card\">\n <div class=\"account-card-header\">\n <div class=\"account-card-title\">${account.name || account.accountId}</div>\n <div class=\"account-card-id\">${account.accountId}</div>\n </div>\n <div class=\"status-list account-card-status\">\n <div>\n <span class=\"label\">Running</span>\n <span>${runningStatus}</span>\n </div>\n <div>\n <span class=\"label\">Configured</span>\n <span>${account.configured ? \"Yes\" : \"No\"}</span>\n </div>\n <div>\n <span class=\"label\">Connected</span>\n <span>${connectedStatus}</span>\n </div>\n <div>\n <span class=\"label\">Last inbound</span>\n <span>${account.lastInboundAt ? formatAgo(account.lastInboundAt) : \"n/a\"}</span>\n </div>\n ${\n account.lastError\n ? html`\n <div class=\"account-card-error\">\n ${account.lastError}\n </div>\n `\n : nothing\n }\n </div>\n </div>\n `;\n}\n","import { formatAgo, formatDurationMs, formatMs } from \"./format\";\nimport type { CronJob, GatewaySessionRow, PresenceEntry } from \"./types\";\n\nexport function formatPresenceSummary(entry: PresenceEntry): string {\n const host = entry.host ?? \"unknown\";\n const ip = entry.ip ? `(${entry.ip})` : \"\";\n const mode = entry.mode ?? \"\";\n const version = entry.version ?? \"\";\n return `${host} ${ip} ${mode} ${version}`.trim();\n}\n\nexport function formatPresenceAge(entry: PresenceEntry): string {\n const ts = entry.ts ?? null;\n return ts ? formatAgo(ts) : \"n/a\";\n}\n\nexport function formatNextRun(ms?: number | null) {\n if (!ms) return \"n/a\";\n return `${formatMs(ms)} (${formatAgo(ms)})`;\n}\n\nexport function formatSessionTokens(row: GatewaySessionRow) {\n if (row.totalTokens == null) return \"n/a\";\n const total = row.totalTokens ?? 0;\n const ctx = row.contextTokens ?? 0;\n return ctx ? `${total} / ${ctx}` : String(total);\n}\n\nexport function formatEventPayload(payload: unknown): string {\n if (payload == null) return \"\";\n try {\n return JSON.stringify(payload, null, 2);\n } catch {\n return String(payload);\n }\n}\n\nexport function formatCronState(job: CronJob) {\n const state = job.state ?? {};\n const next = state.nextRunAtMs ? formatMs(state.nextRunAtMs) : \"n/a\";\n const last = state.lastRunAtMs ? formatMs(state.lastRunAtMs) : \"n/a\";\n const status = state.lastStatus ?? \"n/a\";\n return `${status} · next ${next} · last ${last}`;\n}\n\nexport function formatCronSchedule(job: CronJob) {\n const s = job.schedule;\n if (s.kind === \"at\") return `At ${formatMs(s.atMs)}`;\n if (s.kind === \"every\") return `Every ${formatDurationMs(s.everyMs)}`;\n return `Cron ${s.expr}${s.tz ? ` (${s.tz})` : \"\"}`;\n}\n\nexport function formatCronPayload(job: CronJob) {\n const p = job.payload;\n if (p.kind === \"systemEvent\") return `System: ${p.text}`;\n return `Agent: ${p.message}`;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatMs } from \"../format\";\nimport {\n formatCronPayload,\n formatCronSchedule,\n formatCronState,\n formatNextRun,\n} from \"../presenter\";\nimport type { ChannelUiMetaEntry, CronJob, CronRunLogEntry, CronStatus } from \"../types\";\nimport type { CronFormState } from \"../ui-types\";\n\nexport type CronProps = {\n loading: boolean;\n status: CronStatus | null;\n jobs: CronJob[];\n error: string | null;\n busy: boolean;\n form: CronFormState;\n channels: string[];\n channelLabels?: Record<string, string>;\n channelMeta?: ChannelUiMetaEntry[];\n runsJobId: string | null;\n runs: CronRunLogEntry[];\n onFormChange: (patch: Partial<CronFormState>) => void;\n onRefresh: () => void;\n onAdd: () => void;\n onToggle: (job: CronJob, enabled: boolean) => void;\n onRun: (job: CronJob) => void;\n onRemove: (job: CronJob) => void;\n onLoadRuns: (jobId: string) => void;\n};\n\nfunction buildChannelOptions(props: CronProps): string[] {\n const options = [\"last\", ...props.channels.filter(Boolean)];\n const current = props.form.channel?.trim();\n if (current && !options.includes(current)) {\n options.push(current);\n }\n const seen = new Set<string>();\n return options.filter((value) => {\n if (seen.has(value)) return false;\n seen.add(value);\n return true;\n });\n}\n\nfunction resolveChannelLabel(props: CronProps, channel: string): string {\n if (channel === \"last\") return \"last\";\n const meta = props.channelMeta?.find((entry) => entry.id === channel);\n if (meta?.label) return meta.label;\n return props.channelLabels?.[channel] ?? channel;\n}\n\nexport function renderCron(props: CronProps) {\n const channelOptions = buildChannelOptions(props);\n return html`\n <section class=\"grid grid-cols-2\">\n <div class=\"card\">\n <div class=\"card-title\">Scheduler</div>\n <div class=\"card-sub\">Gateway-owned cron scheduler status.</div>\n <div class=\"stat-grid\" style=\"margin-top: 16px;\">\n <div class=\"stat\">\n <div class=\"stat-label\">Enabled</div>\n <div class=\"stat-value\">\n ${props.status ? (props.status.enabled ? \"Yes\" : \"No\") : \"n/a\"}\n </div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-label\">Jobs</div>\n <div class=\"stat-value\">${props.status?.jobs ?? \"n/a\"}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-label\">Next wake</div>\n <div class=\"stat-value\">${formatNextRun(props.status?.nextWakeAtMs ?? null)}</div>\n </div>\n </div>\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Refreshing…\" : \"Refresh\"}\n </button>\n ${props.error ? html`<span class=\"muted\">${props.error}</span>` : nothing}\n </div>\n </div>\n\n <div class=\"card\">\n <div class=\"card-title\">New Job</div>\n <div class=\"card-sub\">Create a scheduled wakeup or agent run.</div>\n <div class=\"form-grid\" style=\"margin-top: 16px;\">\n <label class=\"field\">\n <span>Name</span>\n <input\n .value=${props.form.name}\n @input=${(e: Event) =>\n props.onFormChange({ name: (e.target as HTMLInputElement).value })}\n />\n </label>\n <label class=\"field\">\n <span>Description</span>\n <input\n .value=${props.form.description}\n @input=${(e: Event) =>\n props.onFormChange({ description: (e.target as HTMLInputElement).value })}\n />\n </label>\n <label class=\"field\">\n <span>Agent ID</span>\n <input\n .value=${props.form.agentId}\n @input=${(e: Event) =>\n props.onFormChange({ agentId: (e.target as HTMLInputElement).value })}\n placeholder=\"default\"\n />\n </label>\n <label class=\"field checkbox\">\n <span>Enabled</span>\n <input\n type=\"checkbox\"\n .checked=${props.form.enabled}\n @change=${(e: Event) =>\n props.onFormChange({ enabled: (e.target as HTMLInputElement).checked })}\n />\n </label>\n <label class=\"field\">\n <span>Schedule</span>\n <select\n .value=${props.form.scheduleKind}\n @change=${(e: Event) =>\n props.onFormChange({\n scheduleKind: (e.target as HTMLSelectElement)\n .value as CronFormState[\"scheduleKind\"],\n })}\n >\n <option value=\"every\">Every</option>\n <option value=\"at\">At</option>\n <option value=\"cron\">Cron</option>\n </select>\n </label>\n </div>\n ${renderScheduleFields(props)}\n <div class=\"form-grid\" style=\"margin-top: 12px;\">\n <label class=\"field\">\n <span>Session</span>\n <select\n .value=${props.form.sessionTarget}\n @change=${(e: Event) =>\n props.onFormChange({\n sessionTarget: (e.target as HTMLSelectElement)\n .value as CronFormState[\"sessionTarget\"],\n })}\n >\n <option value=\"main\">Main</option>\n <option value=\"isolated\">Isolated</option>\n </select>\n </label>\n <label class=\"field\">\n <span>Wake mode</span>\n <select\n .value=${props.form.wakeMode}\n @change=${(e: Event) =>\n props.onFormChange({\n wakeMode: (e.target as HTMLSelectElement).value as CronFormState[\"wakeMode\"],\n })}\n >\n <option value=\"next-heartbeat\">Next heartbeat</option>\n <option value=\"now\">Now</option>\n </select>\n </label>\n <label class=\"field\">\n <span>Payload</span>\n <select\n .value=${props.form.payloadKind}\n @change=${(e: Event) =>\n props.onFormChange({\n payloadKind: (e.target as HTMLSelectElement)\n .value as CronFormState[\"payloadKind\"],\n })}\n >\n <option value=\"systemEvent\">System event</option>\n <option value=\"agentTurn\">Agent turn</option>\n </select>\n </label>\n </div>\n <label class=\"field\" style=\"margin-top: 12px;\">\n <span>${props.form.payloadKind === \"systemEvent\" ? \"System text\" : \"Agent message\"}</span>\n <textarea\n .value=${props.form.payloadText}\n @input=${(e: Event) =>\n props.onFormChange({\n payloadText: (e.target as HTMLTextAreaElement).value,\n })}\n rows=\"4\"\n ></textarea>\n </label>\n\t ${\n props.form.payloadKind === \"agentTurn\"\n ? html`\n\t <div class=\"form-grid\" style=\"margin-top: 12px;\">\n <label class=\"field checkbox\">\n <span>Deliver</span>\n <input\n type=\"checkbox\"\n .checked=${props.form.deliver}\n @change=${(e: Event) =>\n props.onFormChange({\n deliver: (e.target as HTMLInputElement).checked,\n })}\n />\n\t </label>\n\t <label class=\"field\">\n\t <span>Channel</span>\n\t <select\n\t .value=${props.form.channel || \"last\"}\n\t @change=${(e: Event) =>\n props.onFormChange({\n channel: (e.target as HTMLSelectElement)\n .value as CronFormState[\"channel\"],\n })}\n\t >\n\t ${channelOptions.map(\n (channel) =>\n html`<option value=${channel}>\n ${resolveChannelLabel(props, channel)}\n </option>`,\n )}\n </select>\n </label>\n <label class=\"field\">\n <span>To</span>\n <input\n .value=${props.form.to}\n @input=${(e: Event) =>\n props.onFormChange({ to: (e.target as HTMLInputElement).value })}\n placeholder=\"+1555… or chat id\"\n />\n </label>\n <label class=\"field\">\n <span>Timeout (seconds)</span>\n <input\n .value=${props.form.timeoutSeconds}\n @input=${(e: Event) =>\n props.onFormChange({\n timeoutSeconds: (e.target as HTMLInputElement).value,\n })}\n />\n </label>\n ${\n props.form.sessionTarget === \"isolated\"\n ? html`\n <label class=\"field\">\n <span>Post to main prefix</span>\n <input\n .value=${props.form.postToMainPrefix}\n @input=${(e: Event) =>\n props.onFormChange({\n postToMainPrefix: (e.target as HTMLInputElement).value,\n })}\n />\n </label>\n `\n : nothing\n }\n </div>\n `\n : nothing\n }\n <div class=\"row\" style=\"margin-top: 14px;\">\n <button class=\"btn primary\" ?disabled=${props.busy} @click=${props.onAdd}>\n ${props.busy ? \"Saving…\" : \"Add job\"}\n </button>\n </div>\n </div>\n </section>\n\n <section class=\"card\" style=\"margin-top: 18px;\">\n <div class=\"card-title\">Jobs</div>\n <div class=\"card-sub\">All scheduled jobs stored in the gateway.</div>\n ${\n props.jobs.length === 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 12px\">No jobs yet.</div>\n `\n : html`\n <div class=\"list\" style=\"margin-top: 12px;\">\n ${props.jobs.map((job) => renderJob(job, props))}\n </div>\n `\n }\n </section>\n\n <section class=\"card\" style=\"margin-top: 18px;\">\n <div class=\"card-title\">Run history</div>\n <div class=\"card-sub\">Latest runs for ${props.runsJobId ?? \"(select a job)\"}.</div>\n ${\n props.runsJobId == null\n ? html`\n <div class=\"muted\" style=\"margin-top: 12px\">Select a job to inspect run history.</div>\n `\n : props.runs.length === 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 12px\">No runs yet.</div>\n `\n : html`\n <div class=\"list\" style=\"margin-top: 12px;\">\n ${props.runs.map((entry) => renderRun(entry))}\n </div>\n `\n }\n </section>\n `;\n}\n\nfunction renderScheduleFields(props: CronProps) {\n const form = props.form;\n if (form.scheduleKind === \"at\") {\n return html`\n <label class=\"field\" style=\"margin-top: 12px;\">\n <span>Run at</span>\n <input\n type=\"datetime-local\"\n .value=${form.scheduleAt}\n @input=${(e: Event) =>\n props.onFormChange({\n scheduleAt: (e.target as HTMLInputElement).value,\n })}\n />\n </label>\n `;\n }\n if (form.scheduleKind === \"every\") {\n return html`\n <div class=\"form-grid\" style=\"margin-top: 12px;\">\n <label class=\"field\">\n <span>Every</span>\n <input\n .value=${form.everyAmount}\n @input=${(e: Event) =>\n props.onFormChange({\n everyAmount: (e.target as HTMLInputElement).value,\n })}\n />\n </label>\n <label class=\"field\">\n <span>Unit</span>\n <select\n .value=${form.everyUnit}\n @change=${(e: Event) =>\n props.onFormChange({\n everyUnit: (e.target as HTMLSelectElement).value as CronFormState[\"everyUnit\"],\n })}\n >\n <option value=\"minutes\">Minutes</option>\n <option value=\"hours\">Hours</option>\n <option value=\"days\">Days</option>\n </select>\n </label>\n </div>\n `;\n }\n return html`\n <div class=\"form-grid\" style=\"margin-top: 12px;\">\n <label class=\"field\">\n <span>Expression</span>\n <input\n .value=${form.cronExpr}\n @input=${(e: Event) =>\n props.onFormChange({ cronExpr: (e.target as HTMLInputElement).value })}\n />\n </label>\n <label class=\"field\">\n <span>Timezone (optional)</span>\n <input\n .value=${form.cronTz}\n @input=${(e: Event) =>\n props.onFormChange({ cronTz: (e.target as HTMLInputElement).value })}\n />\n </label>\n </div>\n `;\n}\n\nfunction renderJob(job: CronJob, props: CronProps) {\n const isSelected = props.runsJobId === job.id;\n const itemClass = `list-item list-item-clickable${isSelected ? \" list-item-selected\" : \"\"}`;\n return html`\n <div class=${itemClass} @click=${() => props.onLoadRuns(job.id)}>\n <div class=\"list-main\">\n <div class=\"list-title\">${job.name}</div>\n <div class=\"list-sub\">${formatCronSchedule(job)}</div>\n <div class=\"muted\">${formatCronPayload(job)}</div>\n ${job.agentId ? html`<div class=\"muted\">Agent: ${job.agentId}</div>` : nothing}\n <div class=\"chip-row\" style=\"margin-top: 6px;\">\n <span class=\"chip\">${job.enabled ? \"enabled\" : \"disabled\"}</span>\n <span class=\"chip\">${job.sessionTarget}</span>\n <span class=\"chip\">${job.wakeMode}</span>\n </div>\n </div>\n <div class=\"list-meta\">\n <div>${formatCronState(job)}</div>\n <div class=\"row\" style=\"justify-content: flex-end; margin-top: 8px;\">\n <button\n class=\"btn\"\n ?disabled=${props.busy}\n @click=${(event: Event) => {\n event.stopPropagation();\n props.onToggle(job, !job.enabled);\n }}\n >\n ${job.enabled ? \"Disable\" : \"Enable\"}\n </button>\n <button\n class=\"btn\"\n ?disabled=${props.busy}\n @click=${(event: Event) => {\n event.stopPropagation();\n props.onRun(job);\n }}\n >\n Run\n </button>\n <button\n class=\"btn\"\n ?disabled=${props.busy}\n @click=${(event: Event) => {\n event.stopPropagation();\n props.onLoadRuns(job.id);\n }}\n >\n Runs\n </button>\n <button\n class=\"btn danger\"\n ?disabled=${props.busy}\n @click=${(event: Event) => {\n event.stopPropagation();\n props.onRemove(job);\n }}\n >\n Remove\n </button>\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderRun(entry: CronRunLogEntry) {\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${entry.status}</div>\n <div class=\"list-sub\">${entry.summary ?? \"\"}</div>\n </div>\n <div class=\"list-meta\">\n <div>${formatMs(entry.ts)}</div>\n <div class=\"muted\">${entry.durationMs ?? 0}ms</div>\n ${entry.error ? html`<div class=\"muted\">${entry.error}</div>` : nothing}\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatEventPayload } from \"../presenter\";\nimport type { EventLogEntry } from \"../app-events\";\n\nexport type DebugProps = {\n loading: boolean;\n status: Record<string, unknown> | null;\n health: Record<string, unknown> | null;\n models: unknown[];\n heartbeat: unknown;\n eventLog: EventLogEntry[];\n callMethod: string;\n callParams: string;\n callResult: string | null;\n callError: string | null;\n onCallMethodChange: (next: string) => void;\n onCallParamsChange: (next: string) => void;\n onRefresh: () => void;\n onCall: () => void;\n};\n\nexport function renderDebug(props: DebugProps) {\n const securityAudit =\n props.status && typeof props.status === \"object\"\n ? (props.status as { securityAudit?: { summary?: Record<string, number> } }).securityAudit\n : null;\n const securitySummary = securityAudit?.summary ?? null;\n const critical = securitySummary?.critical ?? 0;\n const warn = securitySummary?.warn ?? 0;\n const info = securitySummary?.info ?? 0;\n const securityTone = critical > 0 ? \"danger\" : warn > 0 ? \"warn\" : \"success\";\n const securityLabel =\n critical > 0 ? `${critical} critical` : warn > 0 ? `${warn} warnings` : \"No critical issues\";\n\n return html`\n <section class=\"grid grid-cols-2\">\n <div class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Snapshots</div>\n <div class=\"card-sub\">Status, health, and heartbeat data.</div>\n </div>\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Refreshing…\" : \"Refresh\"}\n </button>\n </div>\n <div class=\"stack\" style=\"margin-top: 12px;\">\n <div>\n <div class=\"muted\">Status</div>\n ${\n securitySummary\n ? html`<div class=\"callout ${securityTone}\" style=\"margin-top: 8px;\">\n Security audit: ${securityLabel}${info > 0 ? ` · ${info} info` : \"\"}. Run\n <span class=\"mono\">openclaw security audit --deep</span> for details.\n </div>`\n : nothing\n }\n <pre class=\"code-block\">${JSON.stringify(props.status ?? {}, null, 2)}</pre>\n </div>\n <div>\n <div class=\"muted\">Health</div>\n <pre class=\"code-block\">${JSON.stringify(props.health ?? {}, null, 2)}</pre>\n </div>\n <div>\n <div class=\"muted\">Last heartbeat</div>\n <pre class=\"code-block\">${JSON.stringify(props.heartbeat ?? {}, null, 2)}</pre>\n </div>\n </div>\n </div>\n\n <div class=\"card\">\n <div class=\"card-title\">Manual RPC</div>\n <div class=\"card-sub\">Send a raw gateway method with JSON params.</div>\n <div class=\"form-grid\" style=\"margin-top: 16px;\">\n <label class=\"field\">\n <span>Method</span>\n <input\n .value=${props.callMethod}\n @input=${(e: Event) => props.onCallMethodChange((e.target as HTMLInputElement).value)}\n placeholder=\"system-presence\"\n />\n </label>\n <label class=\"field\">\n <span>Params (JSON)</span>\n <textarea\n .value=${props.callParams}\n @input=${(e: Event) =>\n props.onCallParamsChange((e.target as HTMLTextAreaElement).value)}\n rows=\"6\"\n ></textarea>\n </label>\n </div>\n <div class=\"row\" style=\"margin-top: 12px;\">\n <button class=\"btn primary\" @click=${props.onCall}>Call</button>\n </div>\n ${\n props.callError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${props.callError}\n </div>`\n : nothing\n }\n ${\n props.callResult\n ? html`<pre class=\"code-block\" style=\"margin-top: 12px;\">${props.callResult}</pre>`\n : nothing\n }\n </div>\n </section>\n\n <section class=\"card\" style=\"margin-top: 18px;\">\n <div class=\"card-title\">Models</div>\n <div class=\"card-sub\">Catalog from models.list.</div>\n <pre class=\"code-block\" style=\"margin-top: 12px;\">${JSON.stringify(\n props.models ?? [],\n null,\n 2,\n )}</pre>\n </section>\n\n <section class=\"card\" style=\"margin-top: 18px;\">\n <div class=\"card-title\">Event Log</div>\n <div class=\"card-sub\">Latest gateway events.</div>\n ${\n props.eventLog.length === 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 12px\">No events yet.</div>\n `\n : html`\n <div class=\"list\" style=\"margin-top: 12px;\">\n ${props.eventLog.map(\n (evt) => html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${evt.event}</div>\n <div class=\"list-sub\">${new Date(evt.ts).toLocaleTimeString()}</div>\n </div>\n <div class=\"list-meta\">\n <pre class=\"code-block\">${formatEventPayload(evt.payload)}</pre>\n </div>\n </div>\n `,\n )}\n </div>\n `\n }\n </section>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatPresenceAge, formatPresenceSummary } from \"../presenter\";\nimport type { PresenceEntry } from \"../types\";\n\nexport type InstancesProps = {\n loading: boolean;\n entries: PresenceEntry[];\n lastError: string | null;\n statusMessage: string | null;\n onRefresh: () => void;\n};\n\nexport function renderInstances(props: InstancesProps) {\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Connected Instances</div>\n <div class=\"card-sub\">Presence beacons from the gateway and clients.</div>\n </div>\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Loading…\" : \"Refresh\"}\n </button>\n </div>\n ${\n props.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">\n ${props.lastError}\n </div>`\n : nothing\n }\n ${\n props.statusMessage\n ? html`<div class=\"callout\" style=\"margin-top: 12px;\">\n ${props.statusMessage}\n </div>`\n : nothing\n }\n <div class=\"list\" style=\"margin-top: 16px;\">\n ${\n props.entries.length === 0\n ? html`\n <div class=\"muted\">No instances reported yet.</div>\n `\n : props.entries.map((entry) => renderEntry(entry))\n }\n </div>\n </section>\n `;\n}\n\nfunction renderEntry(entry: PresenceEntry) {\n const lastInput = entry.lastInputSeconds != null ? `${entry.lastInputSeconds}s ago` : \"n/a\";\n const mode = entry.mode ?? \"unknown\";\n const roles = Array.isArray(entry.roles) ? entry.roles.filter(Boolean) : [];\n const scopes = Array.isArray(entry.scopes) ? entry.scopes.filter(Boolean) : [];\n const scopesLabel =\n scopes.length > 0\n ? scopes.length > 3\n ? `${scopes.length} scopes`\n : `scopes: ${scopes.join(\", \")}`\n : null;\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${entry.host ?? \"unknown host\"}</div>\n <div class=\"list-sub\">${formatPresenceSummary(entry)}</div>\n <div class=\"chip-row\">\n <span class=\"chip\">${mode}</span>\n ${roles.map((role) => html`<span class=\"chip\">${role}</span>`)}\n ${scopesLabel ? html`<span class=\"chip\">${scopesLabel}</span>` : nothing}\n ${entry.platform ? html`<span class=\"chip\">${entry.platform}</span>` : nothing}\n ${entry.deviceFamily ? html`<span class=\"chip\">${entry.deviceFamily}</span>` : nothing}\n ${\n entry.modelIdentifier\n ? html`<span class=\"chip\">${entry.modelIdentifier}</span>`\n : nothing\n }\n ${entry.version ? html`<span class=\"chip\">${entry.version}</span>` : nothing}\n </div>\n </div>\n <div class=\"list-meta\">\n <div>${formatPresenceAge(entry)}</div>\n <div class=\"muted\">Last input ${lastInput}</div>\n <div class=\"muted\">Reason ${entry.reason ?? \"\"}</div>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport type { LogEntry, LogLevel } from \"../types\";\n\nconst LEVELS: LogLevel[] = [\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"fatal\"];\n\nexport type LogsProps = {\n loading: boolean;\n error: string | null;\n file: string | null;\n entries: LogEntry[];\n filterText: string;\n levelFilters: Record<LogLevel, boolean>;\n autoFollow: boolean;\n truncated: boolean;\n onFilterTextChange: (next: string) => void;\n onLevelToggle: (level: LogLevel, enabled: boolean) => void;\n onToggleAutoFollow: (next: boolean) => void;\n onRefresh: () => void;\n onExport: (lines: string[], label: string) => void;\n onScroll: (event: Event) => void;\n};\n\nfunction formatTime(value?: string | null) {\n if (!value) return \"\";\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n return date.toLocaleTimeString();\n}\n\nfunction matchesFilter(entry: LogEntry, needle: string) {\n if (!needle) return true;\n const haystack = [entry.message, entry.subsystem, entry.raw]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n return haystack.includes(needle);\n}\n\nexport function renderLogs(props: LogsProps) {\n const needle = props.filterText.trim().toLowerCase();\n const levelFiltered = LEVELS.some((level) => !props.levelFilters[level]);\n const filtered = props.entries.filter((entry) => {\n if (entry.level && !props.levelFilters[entry.level]) return false;\n return matchesFilter(entry, needle);\n });\n const exportLabel = needle || levelFiltered ? \"filtered\" : \"visible\";\n\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Logs</div>\n <div class=\"card-sub\">Gateway file logs (JSONL).</div>\n </div>\n <div class=\"row\" style=\"gap: 8px;\">\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Loading…\" : \"Refresh\"}\n </button>\n <button\n class=\"btn\"\n ?disabled=${filtered.length === 0}\n @click=${() =>\n props.onExport(\n filtered.map((entry) => entry.raw),\n exportLabel,\n )}\n >\n Export ${exportLabel}\n </button>\n </div>\n </div>\n\n <div class=\"filters\" style=\"margin-top: 14px;\">\n <label class=\"field\" style=\"min-width: 220px;\">\n <span>Filter</span>\n <input\n .value=${props.filterText}\n @input=${(e: Event) => props.onFilterTextChange((e.target as HTMLInputElement).value)}\n placeholder=\"Search logs\"\n />\n </label>\n <label class=\"field checkbox\">\n <span>Auto-follow</span>\n <input\n type=\"checkbox\"\n .checked=${props.autoFollow}\n @change=${(e: Event) =>\n props.onToggleAutoFollow((e.target as HTMLInputElement).checked)}\n />\n </label>\n </div>\n\n <div class=\"chip-row\" style=\"margin-top: 12px;\">\n ${LEVELS.map(\n (level) => html`\n <label class=\"chip log-chip ${level}\">\n <input\n type=\"checkbox\"\n .checked=${props.levelFilters[level]}\n @change=${(e: Event) =>\n props.onLevelToggle(level, (e.target as HTMLInputElement).checked)}\n />\n <span>${level}</span>\n </label>\n `,\n )}\n </div>\n\n ${\n props.file\n ? html`<div class=\"muted\" style=\"margin-top: 10px;\">File: ${props.file}</div>`\n : nothing\n }\n ${\n props.truncated\n ? html`\n <div class=\"callout\" style=\"margin-top: 10px\">Log output truncated; showing latest chunk.</div>\n `\n : nothing\n }\n ${\n props.error\n ? html`<div class=\"callout danger\" style=\"margin-top: 10px;\">${props.error}</div>`\n : nothing\n }\n\n <div class=\"log-stream\" style=\"margin-top: 12px;\" @scroll=${props.onScroll}>\n ${\n filtered.length === 0\n ? html`\n <div class=\"muted\" style=\"padding: 12px\">No log entries.</div>\n `\n : filtered.map(\n (entry) => html`\n <div class=\"log-row\">\n <div class=\"log-time mono\">${formatTime(entry.time)}</div>\n <div class=\"log-level ${entry.level ?? \"\"}\">${entry.level ?? \"\"}</div>\n <div class=\"log-subsystem mono\">${entry.subsystem ?? \"\"}</div>\n <div class=\"log-message mono\">${entry.message ?? entry.raw}</div>\n </div>\n `,\n )\n }\n </div>\n </section>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { clampText, formatAgo, formatList } from \"../format\";\nimport type {\n ExecApprovalsAllowlistEntry,\n ExecApprovalsFile,\n ExecApprovalsSnapshot,\n} from \"../controllers/exec-approvals\";\nimport type {\n DevicePairingList,\n DeviceTokenSummary,\n PairedDevice,\n PendingDevice,\n} from \"../controllers/devices\";\n\nexport type NodesProps = {\n loading: boolean;\n nodes: Array<Record<string, unknown>>;\n devicesLoading: boolean;\n devicesError: string | null;\n devicesList: DevicePairingList | null;\n configForm: Record<string, unknown> | null;\n configLoading: boolean;\n configSaving: boolean;\n configDirty: boolean;\n configFormMode: \"form\" | \"raw\";\n execApprovalsLoading: boolean;\n execApprovalsSaving: boolean;\n execApprovalsDirty: boolean;\n execApprovalsSnapshot: ExecApprovalsSnapshot | null;\n execApprovalsForm: ExecApprovalsFile | null;\n execApprovalsSelectedAgent: string | null;\n execApprovalsTarget: \"gateway\" | \"node\";\n execApprovalsTargetNodeId: string | null;\n onRefresh: () => void;\n onDevicesRefresh: () => void;\n onDeviceApprove: (requestId: string) => void;\n onDeviceReject: (requestId: string) => void;\n onDeviceRotate: (deviceId: string, role: string, scopes?: string[]) => void;\n onDeviceRevoke: (deviceId: string, role: string) => void;\n onLoadConfig: () => void;\n onLoadExecApprovals: () => void;\n onBindDefault: (nodeId: string | null) => void;\n onBindAgent: (agentIndex: number, nodeId: string | null) => void;\n onSaveBindings: () => void;\n onExecApprovalsTargetChange: (kind: \"gateway\" | \"node\", nodeId: string | null) => void;\n onExecApprovalsSelectAgent: (agentId: string) => void;\n onExecApprovalsPatch: (path: Array<string | number>, value: unknown) => void;\n onExecApprovalsRemove: (path: Array<string | number>) => void;\n onSaveExecApprovals: () => void;\n};\n\nexport function renderNodes(props: NodesProps) {\n const bindingState = resolveBindingsState(props);\n const approvalsState = resolveExecApprovalsState(props);\n return html`\n ${renderExecApprovals(approvalsState)}\n ${renderBindings(bindingState)}\n ${renderDevices(props)}\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Nodes</div>\n <div class=\"card-sub\">Paired devices and live links.</div>\n </div>\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Loading…\" : \"Refresh\"}\n </button>\n </div>\n <div class=\"list\" style=\"margin-top: 16px;\">\n ${\n props.nodes.length === 0\n ? html`\n <div class=\"muted\">No nodes found.</div>\n `\n : props.nodes.map((n) => renderNode(n))\n }\n </div>\n </section>\n `;\n}\n\nfunction renderDevices(props: NodesProps) {\n const list = props.devicesList ?? { pending: [], paired: [] };\n const pending = Array.isArray(list.pending) ? list.pending : [];\n const paired = Array.isArray(list.paired) ? list.paired : [];\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Devices</div>\n <div class=\"card-sub\">Pairing requests + role tokens.</div>\n </div>\n <button class=\"btn\" ?disabled=${props.devicesLoading} @click=${props.onDevicesRefresh}>\n ${props.devicesLoading ? \"Loading…\" : \"Refresh\"}\n </button>\n </div>\n ${\n props.devicesError\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">${props.devicesError}</div>`\n : nothing\n }\n <div class=\"list\" style=\"margin-top: 16px;\">\n ${\n pending.length > 0\n ? html`\n <div class=\"muted\" style=\"margin-bottom: 8px;\">Pending</div>\n ${pending.map((req) => renderPendingDevice(req, props))}\n `\n : nothing\n }\n ${\n paired.length > 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 12px; margin-bottom: 8px;\">Paired</div>\n ${paired.map((device) => renderPairedDevice(device, props))}\n `\n : nothing\n }\n ${\n pending.length === 0 && paired.length === 0\n ? html`\n <div class=\"muted\">No paired devices.</div>\n `\n : nothing\n }\n </div>\n </section>\n `;\n}\n\nfunction renderPendingDevice(req: PendingDevice, props: NodesProps) {\n const name = req.displayName?.trim() || req.deviceId;\n const age = typeof req.ts === \"number\" ? formatAgo(req.ts) : \"n/a\";\n const role = req.role?.trim() ? `role: ${req.role}` : \"role: -\";\n const repair = req.isRepair ? \" · repair\" : \"\";\n const ip = req.remoteIp ? ` · ${req.remoteIp}` : \"\";\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${name}</div>\n <div class=\"list-sub\">${req.deviceId}${ip}</div>\n <div class=\"muted\" style=\"margin-top: 6px;\">\n ${role} · requested ${age}${repair}\n </div>\n </div>\n <div class=\"list-meta\">\n <div class=\"row\" style=\"justify-content: flex-end; gap: 8px; flex-wrap: wrap;\">\n <button class=\"btn btn--sm primary\" @click=${() => props.onDeviceApprove(req.requestId)}>\n Approve\n </button>\n <button class=\"btn btn--sm\" @click=${() => props.onDeviceReject(req.requestId)}>\n Reject\n </button>\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderPairedDevice(device: PairedDevice, props: NodesProps) {\n const name = device.displayName?.trim() || device.deviceId;\n const ip = device.remoteIp ? ` · ${device.remoteIp}` : \"\";\n const roles = `roles: ${formatList(device.roles)}`;\n const scopes = `scopes: ${formatList(device.scopes)}`;\n const tokens = Array.isArray(device.tokens) ? device.tokens : [];\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${name}</div>\n <div class=\"list-sub\">${device.deviceId}${ip}</div>\n <div class=\"muted\" style=\"margin-top: 6px;\">${roles} · ${scopes}</div>\n ${\n tokens.length === 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 6px\">Tokens: none</div>\n `\n : html`\n <div class=\"muted\" style=\"margin-top: 10px;\">Tokens</div>\n <div style=\"display: flex; flex-direction: column; gap: 8px; margin-top: 6px;\">\n ${tokens.map((token) => renderTokenRow(device.deviceId, token, props))}\n </div>\n `\n }\n </div>\n </div>\n `;\n}\n\nfunction renderTokenRow(deviceId: string, token: DeviceTokenSummary, props: NodesProps) {\n const status = token.revokedAtMs ? \"revoked\" : \"active\";\n const scopes = `scopes: ${formatList(token.scopes)}`;\n const when = formatAgo(token.rotatedAtMs ?? token.createdAtMs ?? token.lastUsedAtMs ?? null);\n return html`\n <div class=\"row\" style=\"justify-content: space-between; gap: 8px;\">\n <div class=\"list-sub\">${token.role} · ${status} · ${scopes} · ${when}</div>\n <div class=\"row\" style=\"justify-content: flex-end; gap: 6px; flex-wrap: wrap;\">\n <button\n class=\"btn btn--sm\"\n @click=${() => props.onDeviceRotate(deviceId, token.role, token.scopes)}\n >\n Rotate\n </button>\n ${\n token.revokedAtMs\n ? nothing\n : html`\n <button\n class=\"btn btn--sm danger\"\n @click=${() => props.onDeviceRevoke(deviceId, token.role)}\n >\n Revoke\n </button>\n `\n }\n </div>\n </div>\n `;\n}\n\ntype BindingAgent = {\n id: string;\n name?: string;\n index: number;\n isDefault: boolean;\n binding?: string | null;\n};\n\ntype BindingNode = {\n id: string;\n label: string;\n};\n\ntype BindingState = {\n ready: boolean;\n disabled: boolean;\n configDirty: boolean;\n configLoading: boolean;\n configSaving: boolean;\n defaultBinding?: string | null;\n agents: BindingAgent[];\n nodes: BindingNode[];\n onBindDefault: (nodeId: string | null) => void;\n onBindAgent: (agentIndex: number, nodeId: string | null) => void;\n onSave: () => void;\n onLoadConfig: () => void;\n formMode: \"form\" | \"raw\";\n};\n\ntype ExecSecurity = \"deny\" | \"allowlist\" | \"full\";\ntype ExecAsk = \"off\" | \"on-miss\" | \"always\";\n\ntype ExecApprovalsResolvedDefaults = {\n security: ExecSecurity;\n ask: ExecAsk;\n askFallback: ExecSecurity;\n autoAllowSkills: boolean;\n};\n\ntype ExecApprovalsAgentOption = {\n id: string;\n name?: string;\n isDefault?: boolean;\n};\n\ntype ExecApprovalsTargetNode = {\n id: string;\n label: string;\n};\n\ntype ExecApprovalsState = {\n ready: boolean;\n disabled: boolean;\n dirty: boolean;\n loading: boolean;\n saving: boolean;\n form: ExecApprovalsFile | null;\n defaults: ExecApprovalsResolvedDefaults;\n selectedScope: string;\n selectedAgent: Record<string, unknown> | null;\n agents: ExecApprovalsAgentOption[];\n allowlist: ExecApprovalsAllowlistEntry[];\n target: \"gateway\" | \"node\";\n targetNodeId: string | null;\n targetNodes: ExecApprovalsTargetNode[];\n onSelectScope: (agentId: string) => void;\n onSelectTarget: (kind: \"gateway\" | \"node\", nodeId: string | null) => void;\n onPatch: (path: Array<string | number>, value: unknown) => void;\n onRemove: (path: Array<string | number>) => void;\n onLoad: () => void;\n onSave: () => void;\n};\n\nconst EXEC_APPROVALS_DEFAULT_SCOPE = \"__defaults__\";\n\nconst SECURITY_OPTIONS: Array<{ value: ExecSecurity; label: string }> = [\n { value: \"deny\", label: \"Deny\" },\n { value: \"allowlist\", label: \"Allowlist\" },\n { value: \"full\", label: \"Full\" },\n];\n\nconst ASK_OPTIONS: Array<{ value: ExecAsk; label: string }> = [\n { value: \"off\", label: \"Off\" },\n { value: \"on-miss\", label: \"On miss\" },\n { value: \"always\", label: \"Always\" },\n];\n\nfunction resolveBindingsState(props: NodesProps): BindingState {\n const config = props.configForm;\n const nodes = resolveExecNodes(props.nodes);\n const { defaultBinding, agents } = resolveAgentBindings(config);\n const ready = Boolean(config);\n const disabled = props.configSaving || props.configFormMode === \"raw\";\n return {\n ready,\n disabled,\n configDirty: props.configDirty,\n configLoading: props.configLoading,\n configSaving: props.configSaving,\n defaultBinding,\n agents,\n nodes,\n onBindDefault: props.onBindDefault,\n onBindAgent: props.onBindAgent,\n onSave: props.onSaveBindings,\n onLoadConfig: props.onLoadConfig,\n formMode: props.configFormMode,\n };\n}\n\nfunction normalizeSecurity(value?: string): ExecSecurity {\n if (value === \"allowlist\" || value === \"full\" || value === \"deny\") return value;\n return \"deny\";\n}\n\nfunction normalizeAsk(value?: string): ExecAsk {\n if (value === \"always\" || value === \"off\" || value === \"on-miss\") return value;\n return \"on-miss\";\n}\n\nfunction resolveExecApprovalsDefaults(\n form: ExecApprovalsFile | null,\n): ExecApprovalsResolvedDefaults {\n const defaults = form?.defaults ?? {};\n return {\n security: normalizeSecurity(defaults.security),\n ask: normalizeAsk(defaults.ask),\n askFallback: normalizeSecurity(defaults.askFallback ?? \"deny\"),\n autoAllowSkills: Boolean(defaults.autoAllowSkills ?? false),\n };\n}\n\nfunction resolveConfigAgents(config: Record<string, unknown> | null): ExecApprovalsAgentOption[] {\n const agentsNode = (config?.agents ?? {}) as Record<string, unknown>;\n const list = Array.isArray(agentsNode.list) ? agentsNode.list : [];\n const agents: ExecApprovalsAgentOption[] = [];\n list.forEach((entry) => {\n if (!entry || typeof entry !== \"object\") return;\n const record = entry as Record<string, unknown>;\n const id = typeof record.id === \"string\" ? record.id.trim() : \"\";\n if (!id) return;\n const name = typeof record.name === \"string\" ? record.name.trim() : undefined;\n const isDefault = record.default === true;\n agents.push({ id, name: name || undefined, isDefault });\n });\n return agents;\n}\n\nfunction resolveExecApprovalsAgents(\n config: Record<string, unknown> | null,\n form: ExecApprovalsFile | null,\n): ExecApprovalsAgentOption[] {\n const configAgents = resolveConfigAgents(config);\n const approvalsAgents = Object.keys(form?.agents ?? {});\n const merged = new Map<string, ExecApprovalsAgentOption>();\n configAgents.forEach((agent) => merged.set(agent.id, agent));\n approvalsAgents.forEach((id) => {\n if (merged.has(id)) return;\n merged.set(id, { id });\n });\n const agents = Array.from(merged.values());\n if (agents.length === 0) {\n agents.push({ id: \"main\", isDefault: true });\n }\n agents.sort((a, b) => {\n if (a.isDefault && !b.isDefault) return -1;\n if (!a.isDefault && b.isDefault) return 1;\n const aLabel = a.name?.trim() ? a.name : a.id;\n const bLabel = b.name?.trim() ? b.name : b.id;\n return aLabel.localeCompare(bLabel);\n });\n return agents;\n}\n\nfunction resolveExecApprovalsScope(\n selected: string | null,\n agents: ExecApprovalsAgentOption[],\n): string {\n if (selected === EXEC_APPROVALS_DEFAULT_SCOPE) return EXEC_APPROVALS_DEFAULT_SCOPE;\n if (selected && agents.some((agent) => agent.id === selected)) return selected;\n return EXEC_APPROVALS_DEFAULT_SCOPE;\n}\n\nfunction resolveExecApprovalsState(props: NodesProps): ExecApprovalsState {\n const form = props.execApprovalsForm ?? props.execApprovalsSnapshot?.file ?? null;\n const ready = Boolean(form);\n const defaults = resolveExecApprovalsDefaults(form);\n const agents = resolveExecApprovalsAgents(props.configForm, form);\n const targetNodes = resolveExecApprovalsNodes(props.nodes);\n const target = props.execApprovalsTarget;\n let targetNodeId =\n target === \"node\" && props.execApprovalsTargetNodeId ? props.execApprovalsTargetNodeId : null;\n if (target === \"node\" && targetNodeId && !targetNodes.some((node) => node.id === targetNodeId)) {\n targetNodeId = null;\n }\n const selectedScope = resolveExecApprovalsScope(props.execApprovalsSelectedAgent, agents);\n const selectedAgent =\n selectedScope !== EXEC_APPROVALS_DEFAULT_SCOPE\n ? (((form?.agents ?? {})[selectedScope] as Record<string, unknown> | undefined) ?? null)\n : null;\n const allowlist = Array.isArray((selectedAgent as { allowlist?: unknown })?.allowlist)\n ? ((selectedAgent as { allowlist?: ExecApprovalsAllowlistEntry[] }).allowlist ?? [])\n : [];\n return {\n ready,\n disabled: props.execApprovalsSaving || props.execApprovalsLoading,\n dirty: props.execApprovalsDirty,\n loading: props.execApprovalsLoading,\n saving: props.execApprovalsSaving,\n form,\n defaults,\n selectedScope,\n selectedAgent,\n agents,\n allowlist,\n target,\n targetNodeId,\n targetNodes,\n onSelectScope: props.onExecApprovalsSelectAgent,\n onSelectTarget: props.onExecApprovalsTargetChange,\n onPatch: props.onExecApprovalsPatch,\n onRemove: props.onExecApprovalsRemove,\n onLoad: props.onLoadExecApprovals,\n onSave: props.onSaveExecApprovals,\n };\n}\n\nfunction renderBindings(state: BindingState) {\n const supportsBinding = state.nodes.length > 0;\n const defaultValue = state.defaultBinding ?? \"\";\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between; align-items: center;\">\n <div>\n <div class=\"card-title\">Exec node binding</div>\n <div class=\"card-sub\">\n Pin agents to a specific node when using <span class=\"mono\">exec host=node</span>.\n </div>\n </div>\n <button\n class=\"btn\"\n ?disabled=${state.disabled || !state.configDirty}\n @click=${state.onSave}\n >\n ${state.configSaving ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n\n ${\n state.formMode === \"raw\"\n ? html`\n <div class=\"callout warn\" style=\"margin-top: 12px\">\n Switch the Config tab to <strong>Form</strong> mode to edit bindings here.\n </div>\n `\n : nothing\n }\n\n ${\n !state.ready\n ? html`<div class=\"row\" style=\"margin-top: 12px; gap: 12px;\">\n <div class=\"muted\">Load config to edit bindings.</div>\n <button class=\"btn\" ?disabled=${state.configLoading} @click=${state.onLoadConfig}>\n ${state.configLoading ? \"Loading…\" : \"Load config\"}\n </button>\n </div>`\n : html`\n <div class=\"list\" style=\"margin-top: 16px;\">\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">Default binding</div>\n <div class=\"list-sub\">Used when agents do not override a node binding.</div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Node</span>\n <select\n ?disabled=${state.disabled || !supportsBinding}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value.trim();\n state.onBindDefault(value ? value : null);\n }}\n >\n <option value=\"\" ?selected=${defaultValue === \"\"}>Any node</option>\n ${state.nodes.map(\n (node) =>\n html`<option\n value=${node.id}\n ?selected=${defaultValue === node.id}\n >\n ${node.label}\n </option>`,\n )}\n </select>\n </label>\n ${\n !supportsBinding\n ? html`\n <div class=\"muted\">No nodes with system.run available.</div>\n `\n : nothing\n }\n </div>\n </div>\n\n ${\n state.agents.length === 0\n ? html`\n <div class=\"muted\">No agents found.</div>\n `\n : state.agents.map((agent) => renderAgentBinding(agent, state))\n }\n </div>\n `\n }\n </section>\n `;\n}\n\nfunction renderExecApprovals(state: ExecApprovalsState) {\n const ready = state.ready;\n const targetReady = state.target !== \"node\" || Boolean(state.targetNodeId);\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between; align-items: center;\">\n <div>\n <div class=\"card-title\">Exec approvals</div>\n <div class=\"card-sub\">\n Allowlist and approval policy for <span class=\"mono\">exec host=gateway/node</span>.\n </div>\n </div>\n <button\n class=\"btn\"\n ?disabled=${state.disabled || !state.dirty || !targetReady}\n @click=${state.onSave}\n >\n ${state.saving ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n\n ${renderExecApprovalsTarget(state)}\n\n ${\n !ready\n ? html`<div class=\"row\" style=\"margin-top: 12px; gap: 12px;\">\n <div class=\"muted\">Load exec approvals to edit allowlists.</div>\n <button class=\"btn\" ?disabled=${state.loading || !targetReady} @click=${state.onLoad}>\n ${state.loading ? \"Loading…\" : \"Load approvals\"}\n </button>\n </div>`\n : html`\n ${renderExecApprovalsTabs(state)}\n ${renderExecApprovalsPolicy(state)}\n ${\n state.selectedScope === EXEC_APPROVALS_DEFAULT_SCOPE\n ? nothing\n : renderExecApprovalsAllowlist(state)\n }\n `\n }\n </section>\n `;\n}\n\nfunction renderExecApprovalsTarget(state: ExecApprovalsState) {\n const hasNodes = state.targetNodes.length > 0;\n const nodeValue = state.targetNodeId ?? \"\";\n return html`\n <div class=\"list\" style=\"margin-top: 12px;\">\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">Target</div>\n <div class=\"list-sub\">\n Gateway edits local approvals; node edits the selected node.\n </div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Host</span>\n <select\n ?disabled=${state.disabled}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value;\n if (value === \"node\") {\n const first = state.targetNodes[0]?.id ?? null;\n state.onSelectTarget(\"node\", nodeValue || first);\n } else {\n state.onSelectTarget(\"gateway\", null);\n }\n }}\n >\n <option value=\"gateway\" ?selected=${state.target === \"gateway\"}>Gateway</option>\n <option value=\"node\" ?selected=${state.target === \"node\"}>Node</option>\n </select>\n </label>\n ${\n state.target === \"node\"\n ? html`\n <label class=\"field\">\n <span>Node</span>\n <select\n ?disabled=${state.disabled || !hasNodes}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value.trim();\n state.onSelectTarget(\"node\", value ? value : null);\n }}\n >\n <option value=\"\" ?selected=${nodeValue === \"\"}>Select node</option>\n ${state.targetNodes.map(\n (node) =>\n html`<option\n value=${node.id}\n ?selected=${nodeValue === node.id}\n >\n ${node.label}\n </option>`,\n )}\n </select>\n </label>\n `\n : nothing\n }\n </div>\n </div>\n ${\n state.target === \"node\" && !hasNodes\n ? html`\n <div class=\"muted\">No nodes advertise exec approvals yet.</div>\n `\n : nothing\n }\n </div>\n `;\n}\n\nfunction renderExecApprovalsTabs(state: ExecApprovalsState) {\n return html`\n <div class=\"row\" style=\"margin-top: 12px; gap: 8px; flex-wrap: wrap;\">\n <span class=\"label\">Scope</span>\n <div class=\"row\" style=\"gap: 8px; flex-wrap: wrap;\">\n <button\n class=\"btn btn--sm ${state.selectedScope === EXEC_APPROVALS_DEFAULT_SCOPE ? \"active\" : \"\"}\"\n @click=${() => state.onSelectScope(EXEC_APPROVALS_DEFAULT_SCOPE)}\n >\n Defaults\n </button>\n ${state.agents.map((agent) => {\n const label = agent.name?.trim() ? `${agent.name} (${agent.id})` : agent.id;\n return html`\n <button\n class=\"btn btn--sm ${state.selectedScope === agent.id ? \"active\" : \"\"}\"\n @click=${() => state.onSelectScope(agent.id)}\n >\n ${label}\n </button>\n `;\n })}\n </div>\n </div>\n `;\n}\n\nfunction renderExecApprovalsPolicy(state: ExecApprovalsState) {\n const isDefaults = state.selectedScope === EXEC_APPROVALS_DEFAULT_SCOPE;\n const defaults = state.defaults;\n const agent = state.selectedAgent ?? {};\n const basePath = isDefaults ? [\"defaults\"] : [\"agents\", state.selectedScope];\n const agentSecurity = typeof agent.security === \"string\" ? agent.security : undefined;\n const agentAsk = typeof agent.ask === \"string\" ? agent.ask : undefined;\n const agentAskFallback = typeof agent.askFallback === \"string\" ? agent.askFallback : undefined;\n const securityValue = isDefaults ? defaults.security : (agentSecurity ?? \"__default__\");\n const askValue = isDefaults ? defaults.ask : (agentAsk ?? \"__default__\");\n const askFallbackValue = isDefaults ? defaults.askFallback : (agentAskFallback ?? \"__default__\");\n const autoOverride =\n typeof agent.autoAllowSkills === \"boolean\" ? agent.autoAllowSkills : undefined;\n const autoEffective = autoOverride ?? defaults.autoAllowSkills;\n const autoIsDefault = autoOverride == null;\n\n return html`\n <div class=\"list\" style=\"margin-top: 16px;\">\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">Security</div>\n <div class=\"list-sub\">\n ${isDefaults ? \"Default security mode.\" : `Default: ${defaults.security}.`}\n </div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Mode</span>\n <select\n ?disabled=${state.disabled}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value;\n if (!isDefaults && value === \"__default__\") {\n state.onRemove([...basePath, \"security\"]);\n } else {\n state.onPatch([...basePath, \"security\"], value);\n }\n }}\n >\n ${\n !isDefaults\n ? html`<option value=\"__default__\" ?selected=${securityValue === \"__default__\"}>\n Use default (${defaults.security})\n </option>`\n : nothing\n }\n ${SECURITY_OPTIONS.map(\n (option) =>\n html`<option\n value=${option.value}\n ?selected=${securityValue === option.value}\n >\n ${option.label}\n </option>`,\n )}\n </select>\n </label>\n </div>\n </div>\n\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">Ask</div>\n <div class=\"list-sub\">\n ${isDefaults ? \"Default prompt policy.\" : `Default: ${defaults.ask}.`}\n </div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Mode</span>\n <select\n ?disabled=${state.disabled}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value;\n if (!isDefaults && value === \"__default__\") {\n state.onRemove([...basePath, \"ask\"]);\n } else {\n state.onPatch([...basePath, \"ask\"], value);\n }\n }}\n >\n ${\n !isDefaults\n ? html`<option value=\"__default__\" ?selected=${askValue === \"__default__\"}>\n Use default (${defaults.ask})\n </option>`\n : nothing\n }\n ${ASK_OPTIONS.map(\n (option) =>\n html`<option\n value=${option.value}\n ?selected=${askValue === option.value}\n >\n ${option.label}\n </option>`,\n )}\n </select>\n </label>\n </div>\n </div>\n\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">Ask fallback</div>\n <div class=\"list-sub\">\n ${\n isDefaults\n ? \"Applied when the UI prompt is unavailable.\"\n : `Default: ${defaults.askFallback}.`\n }\n </div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Fallback</span>\n <select\n ?disabled=${state.disabled}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value;\n if (!isDefaults && value === \"__default__\") {\n state.onRemove([...basePath, \"askFallback\"]);\n } else {\n state.onPatch([...basePath, \"askFallback\"], value);\n }\n }}\n >\n ${\n !isDefaults\n ? html`<option value=\"__default__\" ?selected=${askFallbackValue === \"__default__\"}>\n Use default (${defaults.askFallback})\n </option>`\n : nothing\n }\n ${SECURITY_OPTIONS.map(\n (option) =>\n html`<option\n value=${option.value}\n ?selected=${askFallbackValue === option.value}\n >\n ${option.label}\n </option>`,\n )}\n </select>\n </label>\n </div>\n </div>\n\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">Auto-allow skill CLIs</div>\n <div class=\"list-sub\">\n ${\n isDefaults\n ? \"Allow skill executables listed by the Gateway.\"\n : autoIsDefault\n ? `Using default (${defaults.autoAllowSkills ? \"on\" : \"off\"}).`\n : `Override (${autoEffective ? \"on\" : \"off\"}).`\n }\n </div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Enabled</span>\n <input\n type=\"checkbox\"\n ?disabled=${state.disabled}\n .checked=${autoEffective}\n @change=${(event: Event) => {\n const target = event.target as HTMLInputElement;\n state.onPatch([...basePath, \"autoAllowSkills\"], target.checked);\n }}\n />\n </label>\n ${\n !isDefaults && !autoIsDefault\n ? html`<button\n class=\"btn btn--sm\"\n ?disabled=${state.disabled}\n @click=${() => state.onRemove([...basePath, \"autoAllowSkills\"])}\n >\n Use default\n </button>`\n : nothing\n }\n </div>\n </div>\n </div>\n `;\n}\n\nfunction renderExecApprovalsAllowlist(state: ExecApprovalsState) {\n const allowlistPath = [\"agents\", state.selectedScope, \"allowlist\"];\n const entries = state.allowlist;\n return html`\n <div class=\"row\" style=\"margin-top: 18px; justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Allowlist</div>\n <div class=\"card-sub\">Case-insensitive glob patterns.</div>\n </div>\n <button\n class=\"btn btn--sm\"\n ?disabled=${state.disabled}\n @click=${() => {\n const next = [...entries, { pattern: \"\" }];\n state.onPatch(allowlistPath, next);\n }}\n >\n Add pattern\n </button>\n </div>\n <div class=\"list\" style=\"margin-top: 12px;\">\n ${\n entries.length === 0\n ? html`\n <div class=\"muted\">No allowlist entries yet.</div>\n `\n : entries.map((entry, index) => renderAllowlistEntry(state, entry, index))\n }\n </div>\n `;\n}\n\nfunction renderAllowlistEntry(\n state: ExecApprovalsState,\n entry: ExecApprovalsAllowlistEntry,\n index: number,\n) {\n const lastUsed = entry.lastUsedAt ? formatAgo(entry.lastUsedAt) : \"never\";\n const lastCommand = entry.lastUsedCommand ? clampText(entry.lastUsedCommand, 120) : null;\n const lastPath = entry.lastResolvedPath ? clampText(entry.lastResolvedPath, 120) : null;\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${entry.pattern?.trim() ? entry.pattern : \"New pattern\"}</div>\n <div class=\"list-sub\">Last used: ${lastUsed}</div>\n ${lastCommand ? html`<div class=\"list-sub mono\">${lastCommand}</div>` : nothing}\n ${lastPath ? html`<div class=\"list-sub mono\">${lastPath}</div>` : nothing}\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Pattern</span>\n <input\n type=\"text\"\n .value=${entry.pattern ?? \"\"}\n ?disabled=${state.disabled}\n @input=${(event: Event) => {\n const target = event.target as HTMLInputElement;\n state.onPatch(\n [\"agents\", state.selectedScope, \"allowlist\", index, \"pattern\"],\n target.value,\n );\n }}\n />\n </label>\n <button\n class=\"btn btn--sm danger\"\n ?disabled=${state.disabled}\n @click=${() => {\n if (state.allowlist.length <= 1) {\n state.onRemove([\"agents\", state.selectedScope, \"allowlist\"]);\n return;\n }\n state.onRemove([\"agents\", state.selectedScope, \"allowlist\", index]);\n }}\n >\n Remove\n </button>\n </div>\n </div>\n `;\n}\n\nfunction renderAgentBinding(agent: BindingAgent, state: BindingState) {\n const bindingValue = agent.binding ?? \"__default__\";\n const label = agent.name?.trim() ? `${agent.name} (${agent.id})` : agent.id;\n const supportsBinding = state.nodes.length > 0;\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${label}</div>\n <div class=\"list-sub\">\n ${agent.isDefault ? \"default agent\" : \"agent\"} ·\n ${\n bindingValue === \"__default__\"\n ? `uses default (${state.defaultBinding ?? \"any\"})`\n : `override: ${agent.binding}`\n }\n </div>\n </div>\n <div class=\"list-meta\">\n <label class=\"field\">\n <span>Binding</span>\n <select\n ?disabled=${state.disabled || !supportsBinding}\n @change=${(event: Event) => {\n const target = event.target as HTMLSelectElement;\n const value = target.value.trim();\n state.onBindAgent(agent.index, value === \"__default__\" ? null : value);\n }}\n >\n <option value=\"__default__\" ?selected=${bindingValue === \"__default__\"}>\n Use default\n </option>\n ${state.nodes.map(\n (node) =>\n html`<option\n value=${node.id}\n ?selected=${bindingValue === node.id}\n >\n ${node.label}\n </option>`,\n )}\n </select>\n </label>\n </div>\n </div>\n `;\n}\n\nfunction resolveExecNodes(nodes: Array<Record<string, unknown>>): BindingNode[] {\n const list: BindingNode[] = [];\n for (const node of nodes) {\n const commands = Array.isArray(node.commands) ? node.commands : [];\n const supports = commands.some((cmd) => String(cmd) === \"system.run\");\n if (!supports) continue;\n const nodeId = typeof node.nodeId === \"string\" ? node.nodeId.trim() : \"\";\n if (!nodeId) continue;\n const displayName =\n typeof node.displayName === \"string\" && node.displayName.trim()\n ? node.displayName.trim()\n : nodeId;\n list.push({\n id: nodeId,\n label: displayName === nodeId ? nodeId : `${displayName} · ${nodeId}`,\n });\n }\n list.sort((a, b) => a.label.localeCompare(b.label));\n return list;\n}\n\nfunction resolveExecApprovalsNodes(\n nodes: Array<Record<string, unknown>>,\n): ExecApprovalsTargetNode[] {\n const list: ExecApprovalsTargetNode[] = [];\n for (const node of nodes) {\n const commands = Array.isArray(node.commands) ? node.commands : [];\n const supports = commands.some(\n (cmd) =>\n String(cmd) === \"system.execApprovals.get\" || String(cmd) === \"system.execApprovals.set\",\n );\n if (!supports) continue;\n const nodeId = typeof node.nodeId === \"string\" ? node.nodeId.trim() : \"\";\n if (!nodeId) continue;\n const displayName =\n typeof node.displayName === \"string\" && node.displayName.trim()\n ? node.displayName.trim()\n : nodeId;\n list.push({\n id: nodeId,\n label: displayName === nodeId ? nodeId : `${displayName} · ${nodeId}`,\n });\n }\n list.sort((a, b) => a.label.localeCompare(b.label));\n return list;\n}\n\nfunction resolveAgentBindings(config: Record<string, unknown> | null): {\n defaultBinding?: string | null;\n agents: BindingAgent[];\n} {\n const fallbackAgent: BindingAgent = {\n id: \"main\",\n name: undefined,\n index: 0,\n isDefault: true,\n binding: null,\n };\n if (!config || typeof config !== \"object\") {\n return { defaultBinding: null, agents: [fallbackAgent] };\n }\n const tools = (config.tools ?? {}) as Record<string, unknown>;\n const exec = (tools.exec ?? {}) as Record<string, unknown>;\n const defaultBinding =\n typeof exec.node === \"string\" && exec.node.trim() ? exec.node.trim() : null;\n\n const agentsNode = (config.agents ?? {}) as Record<string, unknown>;\n const list = Array.isArray(agentsNode.list) ? agentsNode.list : [];\n if (list.length === 0) {\n return { defaultBinding, agents: [fallbackAgent] };\n }\n\n const agents: BindingAgent[] = [];\n list.forEach((entry, index) => {\n if (!entry || typeof entry !== \"object\") return;\n const record = entry as Record<string, unknown>;\n const id = typeof record.id === \"string\" ? record.id.trim() : \"\";\n if (!id) return;\n const name = typeof record.name === \"string\" ? record.name.trim() : undefined;\n const isDefault = record.default === true;\n const toolsEntry = (record.tools ?? {}) as Record<string, unknown>;\n const execEntry = (toolsEntry.exec ?? {}) as Record<string, unknown>;\n const binding =\n typeof execEntry.node === \"string\" && execEntry.node.trim() ? execEntry.node.trim() : null;\n agents.push({\n id,\n name: name || undefined,\n index,\n isDefault,\n binding,\n });\n });\n\n if (agents.length === 0) {\n agents.push(fallbackAgent);\n }\n\n return { defaultBinding, agents };\n}\n\nfunction renderNode(node: Record<string, unknown>) {\n const connected = Boolean(node.connected);\n const paired = Boolean(node.paired);\n const title =\n (typeof node.displayName === \"string\" && node.displayName.trim()) ||\n (typeof node.nodeId === \"string\" ? node.nodeId : \"unknown\");\n const caps = Array.isArray(node.caps) ? (node.caps as unknown[]) : [];\n const commands = Array.isArray(node.commands) ? (node.commands as unknown[]) : [];\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">${title}</div>\n <div class=\"list-sub\">\n ${typeof node.nodeId === \"string\" ? node.nodeId : \"\"}\n ${typeof node.remoteIp === \"string\" ? ` · ${node.remoteIp}` : \"\"}\n ${typeof node.version === \"string\" ? ` · ${node.version}` : \"\"}\n </div>\n <div class=\"chip-row\" style=\"margin-top: 6px;\">\n <span class=\"chip\">${paired ? \"paired\" : \"unpaired\"}</span>\n <span class=\"chip ${connected ? \"chip-ok\" : \"chip-warn\"}\">\n ${connected ? \"connected\" : \"offline\"}\n </span>\n ${caps.slice(0, 12).map((c) => html`<span class=\"chip\">${String(c)}</span>`)}\n ${commands.slice(0, 8).map((c) => html`<span class=\"chip\">${String(c)}</span>`)}\n </div>\n </div>\n </div>\n `;\n}\n","import { html } from \"lit\";\n\nimport type { GatewayHelloOk } from \"../gateway\";\nimport { formatAgo, formatDurationMs } from \"../format\";\nimport { formatNextRun } from \"../presenter\";\nimport type { UiSettings } from \"../storage\";\n\nexport type OverviewProps = {\n connected: boolean;\n hello: GatewayHelloOk | null;\n settings: UiSettings;\n password: string;\n lastError: string | null;\n presenceCount: number;\n sessionsCount: number | null;\n cronEnabled: boolean | null;\n cronNext: number | null;\n lastChannelsRefresh: number | null;\n onSettingsChange: (next: UiSettings) => void;\n onPasswordChange: (next: string) => void;\n onSessionKeyChange: (next: string) => void;\n onConnect: () => void;\n onRefresh: () => void;\n};\n\nexport function renderOverview(props: OverviewProps) {\n const snapshot = props.hello?.snapshot as\n | { uptimeMs?: number; policy?: { tickIntervalMs?: number } }\n | undefined;\n const uptime = snapshot?.uptimeMs ? formatDurationMs(snapshot.uptimeMs) : \"n/a\";\n const tick = snapshot?.policy?.tickIntervalMs ? `${snapshot.policy.tickIntervalMs}ms` : \"n/a\";\n const authHint = (() => {\n if (props.connected || !props.lastError) return null;\n const lower = props.lastError.toLowerCase();\n const authFailed = lower.includes(\"unauthorized\") || lower.includes(\"connect failed\");\n if (!authFailed) return null;\n const hasToken = Boolean(props.settings.token.trim());\n const hasPassword = Boolean(props.password.trim());\n if (!hasToken && !hasPassword) {\n return html`\n <div class=\"muted\" style=\"margin-top: 8px\">\n This gateway requires auth. Add a token or password, then click Connect.\n <div style=\"margin-top: 6px\">\n <span class=\"mono\">openclaw dashboard --no-open</span> → tokenized URL<br />\n <span class=\"mono\">openclaw doctor --generate-gateway-token</span> → set token\n </div>\n <div style=\"margin-top: 6px\">\n <a\n class=\"session-link\"\n href=\"https://docs.openclaw.ai/web/dashboard\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title=\"Control UI auth docs (opens in new tab)\"\n >Docs: Control UI auth</a\n >\n </div>\n </div>\n `;\n }\n return html`\n <div class=\"muted\" style=\"margin-top: 8px\">\n Auth failed. Re-copy a tokenized URL with\n <span class=\"mono\">openclaw dashboard --no-open</span>, or update the token, then click Connect.\n <div style=\"margin-top: 6px\">\n <a\n class=\"session-link\"\n href=\"https://docs.openclaw.ai/web/dashboard\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title=\"Control UI auth docs (opens in new tab)\"\n >Docs: Control UI auth</a\n >\n </div>\n </div>\n `;\n })();\n const insecureContextHint = (() => {\n if (props.connected || !props.lastError) return null;\n const isSecureContext = typeof window !== \"undefined\" ? window.isSecureContext : true;\n if (isSecureContext !== false) return null;\n const lower = props.lastError.toLowerCase();\n if (!lower.includes(\"secure context\") && !lower.includes(\"device identity required\")) {\n return null;\n }\n return html`\n <div class=\"muted\" style=\"margin-top: 8px\">\n This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open\n <span class=\"mono\">http://127.0.0.1:18789</span> on the gateway host.\n <div style=\"margin-top: 6px\">\n If you must stay on HTTP, set\n <span class=\"mono\">gateway.controlUi.allowInsecureAuth: true</span> (token-only).\n </div>\n <div style=\"margin-top: 6px\">\n <a\n class=\"session-link\"\n href=\"https://docs.openclaw.ai/gateway/tailscale\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title=\"Tailscale Serve docs (opens in new tab)\"\n >Docs: Tailscale Serve</a\n >\n <span class=\"muted\"> · </span>\n <a\n class=\"session-link\"\n href=\"https://docs.openclaw.ai/web/control-ui#insecure-http\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title=\"Insecure HTTP docs (opens in new tab)\"\n >Docs: Insecure HTTP</a\n >\n </div>\n </div>\n `;\n })();\n\n return html`\n <section class=\"grid grid-cols-2\">\n <div class=\"card\">\n <div class=\"card-title\">Gateway Access</div>\n <div class=\"card-sub\">Where the dashboard connects and how it authenticates.</div>\n <div class=\"form-grid\" style=\"margin-top: 16px;\">\n <label class=\"field\">\n <span>WebSocket URL</span>\n <input\n .value=${props.settings.gatewayUrl}\n @input=${(e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n props.onSettingsChange({ ...props.settings, gatewayUrl: v });\n }}\n placeholder=\"ws://100.x.y.z:18789\"\n />\n </label>\n <label class=\"field\">\n <span>Gateway Token</span>\n <input\n .value=${props.settings.token}\n @input=${(e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n props.onSettingsChange({ ...props.settings, token: v });\n }}\n placeholder=\"OPENCLAW_GATEWAY_TOKEN\"\n />\n </label>\n <label class=\"field\">\n <span>Password (not stored)</span>\n <input\n type=\"password\"\n .value=${props.password}\n @input=${(e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n props.onPasswordChange(v);\n }}\n placeholder=\"system or shared password\"\n />\n </label>\n <label class=\"field\">\n <span>Default Session Key</span>\n <input\n .value=${props.settings.sessionKey}\n @input=${(e: Event) => {\n const v = (e.target as HTMLInputElement).value;\n props.onSessionKeyChange(v);\n }}\n />\n </label>\n </div>\n <div class=\"row\" style=\"margin-top: 14px;\">\n <button class=\"btn\" @click=${() => props.onConnect()}>Connect</button>\n <button class=\"btn\" @click=${() => props.onRefresh()}>Refresh</button>\n <span class=\"muted\">Click Connect to apply connection changes.</span>\n </div>\n </div>\n\n <div class=\"card\">\n <div class=\"card-title\">Snapshot</div>\n <div class=\"card-sub\">Latest gateway handshake information.</div>\n <div class=\"stat-grid\" style=\"margin-top: 16px;\">\n <div class=\"stat\">\n <div class=\"stat-label\">Status</div>\n <div class=\"stat-value ${props.connected ? \"ok\" : \"warn\"}\">\n ${props.connected ? \"Connected\" : \"Disconnected\"}\n </div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-label\">Uptime</div>\n <div class=\"stat-value\">${uptime}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-label\">Tick Interval</div>\n <div class=\"stat-value\">${tick}</div>\n </div>\n <div class=\"stat\">\n <div class=\"stat-label\">Last Channels Refresh</div>\n <div class=\"stat-value\">\n ${props.lastChannelsRefresh ? formatAgo(props.lastChannelsRefresh) : \"n/a\"}\n </div>\n </div>\n </div>\n ${\n props.lastError\n ? html`<div class=\"callout danger\" style=\"margin-top: 14px;\">\n <div>${props.lastError}</div>\n ${authHint ?? \"\"}\n ${insecureContextHint ?? \"\"}\n </div>`\n : html`\n <div class=\"callout\" style=\"margin-top: 14px\">\n Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.\n </div>\n `\n }\n </div>\n </section>\n\n <section class=\"grid grid-cols-3\" style=\"margin-top: 18px;\">\n <div class=\"card stat-card\">\n <div class=\"stat-label\">Instances</div>\n <div class=\"stat-value\">${props.presenceCount}</div>\n <div class=\"muted\">Presence beacons in the last 5 minutes.</div>\n </div>\n <div class=\"card stat-card\">\n <div class=\"stat-label\">Sessions</div>\n <div class=\"stat-value\">${props.sessionsCount ?? \"n/a\"}</div>\n <div class=\"muted\">Recent session keys tracked by the gateway.</div>\n </div>\n <div class=\"card stat-card\">\n <div class=\"stat-label\">Cron</div>\n <div class=\"stat-value\">\n ${props.cronEnabled == null ? \"n/a\" : props.cronEnabled ? \"Enabled\" : \"Disabled\"}\n </div>\n <div class=\"muted\">Next wake ${formatNextRun(props.cronNext)}</div>\n </div>\n </section>\n\n <section class=\"card\" style=\"margin-top: 18px;\">\n <div class=\"card-title\">Notes</div>\n <div class=\"card-sub\">Quick reminders for remote control setups.</div>\n <div class=\"note-grid\" style=\"margin-top: 14px;\">\n <div>\n <div class=\"note-title\">Tailscale serve</div>\n <div class=\"muted\">\n Prefer serve mode to keep the gateway on loopback with tailnet auth.\n </div>\n </div>\n <div>\n <div class=\"note-title\">Session hygiene</div>\n <div class=\"muted\">Use /new or sessions.patch to reset context.</div>\n </div>\n <div>\n <div class=\"note-title\">Cron reminders</div>\n <div class=\"muted\">Use isolated sessions for recurring runs.</div>\n </div>\n </div>\n </section>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { formatAgo } from \"../format\";\nimport { formatSessionTokens } from \"../presenter\";\nimport { pathForTab } from \"../navigation\";\nimport type { GatewaySessionRow, SessionsListResult } from \"../types\";\n\nexport type SessionsProps = {\n loading: boolean;\n result: SessionsListResult | null;\n error: string | null;\n activeMinutes: string;\n limit: string;\n includeGlobal: boolean;\n includeUnknown: boolean;\n basePath: string;\n onFiltersChange: (next: {\n activeMinutes: string;\n limit: string;\n includeGlobal: boolean;\n includeUnknown: boolean;\n }) => void;\n onRefresh: () => void;\n onPatch: (\n key: string,\n patch: {\n label?: string | null;\n thinkingLevel?: string | null;\n verboseLevel?: string | null;\n reasoningLevel?: string | null;\n },\n ) => void;\n onDelete: (key: string) => void;\n};\n\nconst THINK_LEVELS = [\"\", \"off\", \"minimal\", \"low\", \"medium\", \"high\"] as const;\nconst BINARY_THINK_LEVELS = [\"\", \"off\", \"on\"] as const;\nconst VERBOSE_LEVELS = [\n { value: \"\", label: \"inherit\" },\n { value: \"off\", label: \"off (explicit)\" },\n { value: \"on\", label: \"on\" },\n] as const;\nconst REASONING_LEVELS = [\"\", \"off\", \"on\", \"stream\"] as const;\n\nfunction normalizeProviderId(provider?: string | null): string {\n if (!provider) return \"\";\n const normalized = provider.trim().toLowerCase();\n if (normalized === \"z.ai\" || normalized === \"z-ai\") return \"zai\";\n return normalized;\n}\n\nfunction isBinaryThinkingProvider(provider?: string | null): boolean {\n return normalizeProviderId(provider) === \"zai\";\n}\n\nfunction resolveThinkLevelOptions(provider?: string | null): readonly string[] {\n return isBinaryThinkingProvider(provider) ? BINARY_THINK_LEVELS : THINK_LEVELS;\n}\n\nfunction resolveThinkLevelDisplay(value: string, isBinary: boolean): string {\n if (!isBinary) return value;\n if (!value || value === \"off\") return value;\n return \"on\";\n}\n\nfunction resolveThinkLevelPatchValue(value: string, isBinary: boolean): string | null {\n if (!value) return null;\n if (!isBinary) return value;\n if (value === \"on\") return \"low\";\n return value;\n}\n\nexport function renderSessions(props: SessionsProps) {\n const rows = props.result?.sessions ?? [];\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Sessions</div>\n <div class=\"card-sub\">Active session keys and per-session overrides.</div>\n </div>\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Loading…\" : \"Refresh\"}\n </button>\n </div>\n\n <div class=\"filters\" style=\"margin-top: 14px;\">\n <label class=\"field\">\n <span>Active within (minutes)</span>\n <input\n .value=${props.activeMinutes}\n @input=${(e: Event) =>\n props.onFiltersChange({\n activeMinutes: (e.target as HTMLInputElement).value,\n limit: props.limit,\n includeGlobal: props.includeGlobal,\n includeUnknown: props.includeUnknown,\n })}\n />\n </label>\n <label class=\"field\">\n <span>Limit</span>\n <input\n .value=${props.limit}\n @input=${(e: Event) =>\n props.onFiltersChange({\n activeMinutes: props.activeMinutes,\n limit: (e.target as HTMLInputElement).value,\n includeGlobal: props.includeGlobal,\n includeUnknown: props.includeUnknown,\n })}\n />\n </label>\n <label class=\"field checkbox\">\n <span>Include global</span>\n <input\n type=\"checkbox\"\n .checked=${props.includeGlobal}\n @change=${(e: Event) =>\n props.onFiltersChange({\n activeMinutes: props.activeMinutes,\n limit: props.limit,\n includeGlobal: (e.target as HTMLInputElement).checked,\n includeUnknown: props.includeUnknown,\n })}\n />\n </label>\n <label class=\"field checkbox\">\n <span>Include unknown</span>\n <input\n type=\"checkbox\"\n .checked=${props.includeUnknown}\n @change=${(e: Event) =>\n props.onFiltersChange({\n activeMinutes: props.activeMinutes,\n limit: props.limit,\n includeGlobal: props.includeGlobal,\n includeUnknown: (e.target as HTMLInputElement).checked,\n })}\n />\n </label>\n </div>\n\n ${\n props.error\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">${props.error}</div>`\n : nothing\n }\n\n <div class=\"muted\" style=\"margin-top: 12px;\">\n ${props.result ? `Store: ${props.result.path}` : \"\"}\n </div>\n\n <div class=\"table\" style=\"margin-top: 16px;\">\n <div class=\"table-head\">\n <div>Key</div>\n <div>Label</div>\n <div>Kind</div>\n <div>Updated</div>\n <div>Tokens</div>\n <div>Thinking</div>\n <div>Verbose</div>\n <div>Reasoning</div>\n <div>Actions</div>\n </div>\n ${\n rows.length === 0\n ? html`\n <div class=\"muted\">No sessions found.</div>\n `\n : rows.map((row) =>\n renderRow(row, props.basePath, props.onPatch, props.onDelete, props.loading),\n )\n }\n </div>\n </section>\n `;\n}\n\nfunction renderRow(\n row: GatewaySessionRow,\n basePath: string,\n onPatch: SessionsProps[\"onPatch\"],\n onDelete: SessionsProps[\"onDelete\"],\n disabled: boolean,\n) {\n const updated = row.updatedAt ? formatAgo(row.updatedAt) : \"n/a\";\n const rawThinking = row.thinkingLevel ?? \"\";\n const isBinaryThinking = isBinaryThinkingProvider(row.modelProvider);\n const thinking = resolveThinkLevelDisplay(rawThinking, isBinaryThinking);\n const thinkLevels = resolveThinkLevelOptions(row.modelProvider);\n const verbose = row.verboseLevel ?? \"\";\n const reasoning = row.reasoningLevel ?? \"\";\n const displayName = row.displayName ?? row.key;\n const canLink = row.kind !== \"global\";\n const chatUrl = canLink\n ? `${pathForTab(\"chat\", basePath)}?session=${encodeURIComponent(row.key)}`\n : null;\n\n return html`\n <div class=\"table-row\">\n <div class=\"mono\">${\n canLink ? html`<a href=${chatUrl} class=\"session-link\">${displayName}</a>` : displayName\n }</div>\n <div>\n <input\n .value=${row.label ?? \"\"}\n ?disabled=${disabled}\n placeholder=\"(optional)\"\n @change=${(e: Event) => {\n const value = (e.target as HTMLInputElement).value.trim();\n onPatch(row.key, { label: value || null });\n }}\n />\n </div>\n <div>${row.kind}</div>\n <div>${updated}</div>\n <div>${formatSessionTokens(row)}</div>\n <div>\n <select\n .value=${thinking}\n ?disabled=${disabled}\n @change=${(e: Event) => {\n const value = (e.target as HTMLSelectElement).value;\n onPatch(row.key, {\n thinkingLevel: resolveThinkLevelPatchValue(value, isBinaryThinking),\n });\n }}\n >\n ${thinkLevels.map((level) => html`<option value=${level}>${level || \"inherit\"}</option>`)}\n </select>\n </div>\n <div>\n <select\n .value=${verbose}\n ?disabled=${disabled}\n @change=${(e: Event) => {\n const value = (e.target as HTMLSelectElement).value;\n onPatch(row.key, { verboseLevel: value || null });\n }}\n >\n ${VERBOSE_LEVELS.map(\n (level) => html`<option value=${level.value}>${level.label}</option>`,\n )}\n </select>\n </div>\n <div>\n <select\n .value=${reasoning}\n ?disabled=${disabled}\n @change=${(e: Event) => {\n const value = (e.target as HTMLSelectElement).value;\n onPatch(row.key, { reasoningLevel: value || null });\n }}\n >\n ${REASONING_LEVELS.map(\n (level) => html`<option value=${level}>${level || \"inherit\"}</option>`,\n )}\n </select>\n </div>\n <div>\n <button class=\"btn danger\" ?disabled=${disabled} @click=${() => onDelete(row.key)}>\n Delete\n </button>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport type { AppViewState } from \"../app-view-state\";\n\nfunction formatRemaining(ms: number): string {\n const remaining = Math.max(0, ms);\n const totalSeconds = Math.floor(remaining / 1000);\n if (totalSeconds < 60) return `${totalSeconds}s`;\n const minutes = Math.floor(totalSeconds / 60);\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n return `${hours}h`;\n}\n\nfunction renderMetaRow(label: string, value?: string | null) {\n if (!value) return nothing;\n return html`<div class=\"exec-approval-meta-row\"><span>${label}</span><span>${value}</span></div>`;\n}\n\nexport function renderExecApprovalPrompt(state: AppViewState) {\n const active = state.execApprovalQueue[0];\n if (!active) return nothing;\n const request = active.request;\n const remainingMs = active.expiresAtMs - Date.now();\n const remaining = remainingMs > 0 ? `expires in ${formatRemaining(remainingMs)}` : \"expired\";\n const queueCount = state.execApprovalQueue.length;\n return html`\n <div class=\"exec-approval-overlay\" role=\"dialog\" aria-live=\"polite\">\n <div class=\"exec-approval-card\">\n <div class=\"exec-approval-header\">\n <div>\n <div class=\"exec-approval-title\">Exec approval needed</div>\n <div class=\"exec-approval-sub\">${remaining}</div>\n </div>\n ${\n queueCount > 1\n ? html`<div class=\"exec-approval-queue\">${queueCount} pending</div>`\n : nothing\n }\n </div>\n <div class=\"exec-approval-command mono\">${request.command}</div>\n <div class=\"exec-approval-meta\">\n ${renderMetaRow(\"Host\", request.host)}\n ${renderMetaRow(\"Agent\", request.agentId)}\n ${renderMetaRow(\"Session\", request.sessionKey)}\n ${renderMetaRow(\"CWD\", request.cwd)}\n ${renderMetaRow(\"Resolved\", request.resolvedPath)}\n ${renderMetaRow(\"Security\", request.security)}\n ${renderMetaRow(\"Ask\", request.ask)}\n </div>\n ${\n state.execApprovalError\n ? html`<div class=\"exec-approval-error\">${state.execApprovalError}</div>`\n : nothing\n }\n <div class=\"exec-approval-actions\">\n <button\n class=\"btn primary\"\n ?disabled=${state.execApprovalBusy}\n @click=${() => state.handleExecApprovalDecision(\"allow-once\")}\n >\n Allow once\n </button>\n <button\n class=\"btn\"\n ?disabled=${state.execApprovalBusy}\n @click=${() => state.handleExecApprovalDecision(\"allow-always\")}\n >\n Always allow\n </button>\n <button\n class=\"btn danger\"\n ?disabled=${state.execApprovalBusy}\n @click=${() => state.handleExecApprovalDecision(\"deny\")}\n >\n Deny\n </button>\n </div>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport type { AppViewState } from \"../app-view-state\";\n\nexport function renderGatewayUrlConfirmation(state: AppViewState) {\n const { pendingGatewayUrl } = state;\n if (!pendingGatewayUrl) return nothing;\n\n return html`\n <div class=\"exec-approval-overlay\" role=\"dialog\" aria-modal=\"true\" aria-live=\"polite\">\n <div class=\"exec-approval-card\">\n <div class=\"exec-approval-header\">\n <div>\n <div class=\"exec-approval-title\">Change Gateway URL</div>\n <div class=\"exec-approval-sub\">This will reconnect to a different gateway server</div>\n </div>\n </div>\n <div class=\"exec-approval-command mono\">${pendingGatewayUrl}</div>\n <div class=\"callout danger\" style=\"margin-top: 12px;\">\n Only confirm if you trust this URL. Malicious URLs can compromise your system.\n </div>\n <div class=\"exec-approval-actions\">\n <button\n class=\"btn primary\"\n @click=${() => state.handleGatewayUrlConfirm()}\n >\n Confirm\n </button>\n <button\n class=\"btn\"\n @click=${() => state.handleGatewayUrlCancel()}\n >\n Cancel\n </button>\n </div>\n </div>\n </div>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport { clampText } from \"../format\";\nimport type { SkillStatusEntry, SkillStatusReport } from \"../types\";\nimport type { SkillMessageMap } from \"../controllers/skills\";\n\nexport type SkillsProps = {\n loading: boolean;\n report: SkillStatusReport | null;\n error: string | null;\n filter: string;\n edits: Record<string, string>;\n busyKey: string | null;\n messages: SkillMessageMap;\n onFilterChange: (next: string) => void;\n onRefresh: () => void;\n onToggle: (skillKey: string, enabled: boolean) => void;\n onEdit: (skillKey: string, value: string) => void;\n onSaveKey: (skillKey: string) => void;\n onInstall: (skillKey: string, name: string, installId: string) => void;\n};\n\nexport function renderSkills(props: SkillsProps) {\n const skills = props.report?.skills ?? [];\n const filter = props.filter.trim().toLowerCase();\n const filtered = filter\n ? skills.filter((skill) =>\n [skill.name, skill.description, skill.source].join(\" \").toLowerCase().includes(filter),\n )\n : skills;\n\n return html`\n <section class=\"card\">\n <div class=\"row\" style=\"justify-content: space-between;\">\n <div>\n <div class=\"card-title\">Skills</div>\n <div class=\"card-sub\">Bundled, managed, and workspace skills.</div>\n </div>\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Loading…\" : \"Refresh\"}\n </button>\n </div>\n\n <div class=\"filters\" style=\"margin-top: 14px;\">\n <label class=\"field\" style=\"flex: 1;\">\n <span>Filter</span>\n <input\n .value=${props.filter}\n @input=${(e: Event) => props.onFilterChange((e.target as HTMLInputElement).value)}\n placeholder=\"Search skills\"\n />\n </label>\n <div class=\"muted\">${filtered.length} shown</div>\n </div>\n\n ${\n props.error\n ? html`<div class=\"callout danger\" style=\"margin-top: 12px;\">${props.error}</div>`\n : nothing\n }\n\n ${\n filtered.length === 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 16px\">No skills found.</div>\n `\n : html`\n <div class=\"list\" style=\"margin-top: 16px;\">\n ${filtered.map((skill) => renderSkill(skill, props))}\n </div>\n `\n }\n </section>\n `;\n}\n\nfunction renderSkill(skill: SkillStatusEntry, props: SkillsProps) {\n const busy = props.busyKey === skill.skillKey;\n const apiKey = props.edits[skill.skillKey] ?? \"\";\n const message = props.messages[skill.skillKey] ?? null;\n const canInstall = skill.install.length > 0 && skill.missing.bins.length > 0;\n const missing = [\n ...skill.missing.bins.map((b) => `bin:${b}`),\n ...skill.missing.env.map((e) => `env:${e}`),\n ...skill.missing.config.map((c) => `config:${c}`),\n ...skill.missing.os.map((o) => `os:${o}`),\n ];\n const reasons: string[] = [];\n if (skill.disabled) reasons.push(\"disabled\");\n if (skill.blockedByAllowlist) reasons.push(\"blocked by allowlist\");\n return html`\n <div class=\"list-item\">\n <div class=\"list-main\">\n <div class=\"list-title\">\n ${skill.emoji ? `${skill.emoji} ` : \"\"}${skill.name}\n </div>\n <div class=\"list-sub\">${clampText(skill.description, 140)}</div>\n <div class=\"chip-row\" style=\"margin-top: 6px;\">\n <span class=\"chip\">${skill.source}</span>\n <span class=\"chip ${skill.eligible ? \"chip-ok\" : \"chip-warn\"}\">\n ${skill.eligible ? \"eligible\" : \"blocked\"}\n </span>\n ${\n skill.disabled\n ? html`\n <span class=\"chip chip-warn\">disabled</span>\n `\n : nothing\n }\n </div>\n ${\n missing.length > 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 6px;\">\n Missing: ${missing.join(\", \")}\n </div>\n `\n : nothing\n }\n ${\n reasons.length > 0\n ? html`\n <div class=\"muted\" style=\"margin-top: 6px;\">\n Reason: ${reasons.join(\", \")}\n </div>\n `\n : nothing\n }\n </div>\n <div class=\"list-meta\">\n <div class=\"row\" style=\"justify-content: flex-end; flex-wrap: wrap;\">\n <button\n class=\"btn\"\n ?disabled=${busy}\n @click=${() => props.onToggle(skill.skillKey, skill.disabled)}\n >\n ${skill.disabled ? \"Enable\" : \"Disable\"}\n </button>\n ${\n canInstall\n ? html`<button\n class=\"btn\"\n ?disabled=${busy}\n @click=${() => props.onInstall(skill.skillKey, skill.name, skill.install[0].id)}\n >\n ${busy ? \"Installing…\" : skill.install[0].label}\n </button>`\n : nothing\n }\n </div>\n ${\n message\n ? html`<div\n class=\"muted\"\n style=\"margin-top: 8px; color: ${\n message.kind === \"error\"\n ? \"var(--danger-color, #d14343)\"\n : \"var(--success-color, #0a7f5a)\"\n };\"\n >\n ${message.message}\n </div>`\n : nothing\n }\n ${\n skill.primaryEnv\n ? html`\n <div class=\"field\" style=\"margin-top: 10px;\">\n <span>API key</span>\n <input\n type=\"password\"\n .value=${apiKey}\n @input=${(e: Event) =>\n props.onEdit(skill.skillKey, (e.target as HTMLInputElement).value)}\n />\n </div>\n <button\n class=\"btn primary\"\n style=\"margin-top: 8px;\"\n ?disabled=${busy}\n @click=${() => props.onSaveKey(skill.skillKey)}\n >\n Save key\n </button>\n `\n : nothing\n }\n </div>\n </div>\n `;\n}\n","import { html } from \"lit\";\nimport { repeat } from \"lit/directives/repeat.js\";\n\nimport type { AppViewState } from \"./app-view-state\";\nimport { iconForTab, pathForTab, titleForTab, type Tab } from \"./navigation\";\nimport { icons } from \"./icons\";\nimport { loadChatHistory } from \"./controllers/chat\";\nimport { refreshChat } from \"./app-chat\";\nimport { syncUrlWithSessionKey } from \"./app-settings\";\nimport type { SessionsListResult } from \"./types\";\nimport type { ThemeMode } from \"./theme\";\nimport type { ThemeTransitionContext } from \"./theme-transition\";\n\nexport function renderTab(state: AppViewState, tab: Tab) {\n const href = pathForTab(tab, state.basePath);\n return html`\n <a\n href=${href}\n class=\"nav-item ${state.tab === tab ? \"active\" : \"\"}\"\n @click=${(event: MouseEvent) => {\n if (\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey\n ) {\n return;\n }\n event.preventDefault();\n state.setTab(tab);\n }}\n title=${titleForTab(tab)}\n >\n <span class=\"nav-item__icon\" aria-hidden=\"true\">${icons[iconForTab(tab)]}</span>\n <span class=\"nav-item__text\">${titleForTab(tab)}</span>\n </a>\n `;\n}\n\nexport function renderChatControls(state: AppViewState) {\n const mainSessionKey = resolveMainSessionKey(state.hello, state.sessionsResult);\n const sessionOptions = resolveSessionOptions(\n state.sessionKey,\n state.sessionsResult,\n mainSessionKey,\n );\n const disableThinkingToggle = state.onboarding;\n const disableFocusToggle = state.onboarding;\n const showThinking = state.onboarding ? false : state.settings.chatShowThinking;\n const focusActive = state.onboarding ? true : state.settings.chatFocusMode;\n // Refresh icon\n const refreshIcon = html`\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\"></path>\n <path d=\"M21 3v5h-5\"></path>\n </svg>\n `;\n const focusIcon = html`\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M4 7V4h3\"></path>\n <path d=\"M20 7V4h-3\"></path>\n <path d=\"M4 17v3h3\"></path>\n <path d=\"M20 17v3h-3\"></path>\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n </svg>\n `;\n return html`\n <div class=\"chat-controls\">\n <label class=\"field chat-controls__session\">\n <select\n .value=${state.sessionKey}\n ?disabled=${!state.connected}\n @change=${(e: Event) => {\n const next = (e.target as HTMLSelectElement).value;\n state.sessionKey = next;\n state.chatMessage = \"\";\n state.chatStream = null;\n state.chatStreamStartedAt = null;\n state.chatRunId = null;\n state.resetToolStream();\n state.resetChatScroll();\n state.applySettings({\n ...state.settings,\n sessionKey: next,\n lastActiveSessionKey: next,\n });\n void state.loadAssistantIdentity();\n syncUrlWithSessionKey(state, next, true);\n void loadChatHistory(state);\n }}\n >\n ${repeat(\n sessionOptions,\n (entry) => entry.key,\n (entry) =>\n html`<option value=${entry.key}>\n ${entry.displayName ?? entry.key}\n </option>`,\n )}\n </select>\n </label>\n <button\n class=\"btn btn--sm btn--icon\"\n ?disabled=${state.chatLoading || !state.connected}\n @click=${() => {\n state.resetToolStream();\n void refreshChat(state as unknown as Parameters<typeof refreshChat>[0]);\n }}\n title=\"Refresh chat data\"\n >\n ${refreshIcon}\n </button>\n <span class=\"chat-controls__separator\">|</span>\n <button\n class=\"btn btn--sm btn--icon ${showThinking ? \"active\" : \"\"}\"\n ?disabled=${disableThinkingToggle}\n @click=${() => {\n if (disableThinkingToggle) return;\n state.applySettings({\n ...state.settings,\n chatShowThinking: !state.settings.chatShowThinking,\n });\n }}\n aria-pressed=${showThinking}\n title=${\n disableThinkingToggle\n ? \"Disabled during onboarding\"\n : \"Toggle assistant thinking/working output\"\n }\n >\n ${icons.brain}\n </button>\n <button\n class=\"btn btn--sm btn--icon ${focusActive ? \"active\" : \"\"}\"\n ?disabled=${disableFocusToggle}\n @click=${() => {\n if (disableFocusToggle) return;\n state.applySettings({\n ...state.settings,\n chatFocusMode: !state.settings.chatFocusMode,\n });\n }}\n aria-pressed=${focusActive}\n title=${\n disableFocusToggle\n ? \"Disabled during onboarding\"\n : \"Toggle focus mode (hide sidebar + page header)\"\n }\n >\n ${focusIcon}\n </button>\n </div>\n `;\n}\n\ntype SessionDefaultsSnapshot = {\n mainSessionKey?: string;\n mainKey?: string;\n};\n\nfunction resolveMainSessionKey(\n hello: AppViewState[\"hello\"],\n sessions: SessionsListResult | null,\n): string | null {\n const snapshot = hello?.snapshot as { sessionDefaults?: SessionDefaultsSnapshot } | undefined;\n const mainSessionKey = snapshot?.sessionDefaults?.mainSessionKey?.trim();\n if (mainSessionKey) return mainSessionKey;\n const mainKey = snapshot?.sessionDefaults?.mainKey?.trim();\n if (mainKey) return mainKey;\n if (sessions?.sessions?.some((row) => row.key === \"main\")) return \"main\";\n return null;\n}\n\nfunction resolveSessionDisplayName(key: string, row?: SessionsListResult[\"sessions\"][number]) {\n const label = row?.label?.trim();\n if (label) return `${label} (${key})`;\n const displayName = row?.displayName?.trim();\n if (displayName) return displayName;\n return key;\n}\n\nfunction resolveSessionOptions(\n sessionKey: string,\n sessions: SessionsListResult | null,\n mainSessionKey?: string | null,\n) {\n const seen = new Set<string>();\n const options: Array<{ key: string; displayName?: string }> = [];\n\n const resolvedMain = mainSessionKey && sessions?.sessions?.find((s) => s.key === mainSessionKey);\n const resolvedCurrent = sessions?.sessions?.find((s) => s.key === sessionKey);\n\n // Add main session key first\n if (mainSessionKey) {\n seen.add(mainSessionKey);\n options.push({\n key: mainSessionKey,\n displayName: resolveSessionDisplayName(mainSessionKey, resolvedMain),\n });\n }\n\n // Add current session key next\n if (!seen.has(sessionKey)) {\n seen.add(sessionKey);\n options.push({\n key: sessionKey,\n displayName: resolveSessionDisplayName(sessionKey, resolvedCurrent),\n });\n }\n\n // Add sessions from the result\n if (sessions?.sessions) {\n for (const s of sessions.sessions) {\n if (!seen.has(s.key)) {\n seen.add(s.key);\n options.push({\n key: s.key,\n displayName: resolveSessionDisplayName(s.key, s),\n });\n }\n }\n }\n\n return options;\n}\n\nconst THEME_ORDER: ThemeMode[] = [\"system\", \"light\", \"dark\"];\n\nexport function renderThemeToggle(state: AppViewState) {\n const index = Math.max(0, THEME_ORDER.indexOf(state.theme));\n const applyTheme = (next: ThemeMode) => (event: MouseEvent) => {\n const element = event.currentTarget as HTMLElement;\n const context: ThemeTransitionContext = { element };\n if (event.clientX || event.clientY) {\n context.pointerClientX = event.clientX;\n context.pointerClientY = event.clientY;\n }\n state.setTheme(next, context);\n };\n\n return html`\n <div class=\"theme-toggle\" style=\"--theme-index: ${index};\">\n <div class=\"theme-toggle__track\" role=\"group\" aria-label=\"Theme\">\n <span class=\"theme-toggle__indicator\"></span>\n <button\n class=\"theme-toggle__button ${state.theme === \"system\" ? \"active\" : \"\"}\"\n @click=${applyTheme(\"system\")}\n aria-pressed=${state.theme === \"system\"}\n aria-label=\"System theme\"\n title=\"System\"\n >\n ${renderMonitorIcon()}\n </button>\n <button\n class=\"theme-toggle__button ${state.theme === \"light\" ? \"active\" : \"\"}\"\n @click=${applyTheme(\"light\")}\n aria-pressed=${state.theme === \"light\"}\n aria-label=\"Light theme\"\n title=\"Light\"\n >\n ${renderSunIcon()}\n </button>\n <button\n class=\"theme-toggle__button ${state.theme === \"dark\" ? \"active\" : \"\"}\"\n @click=${applyTheme(\"dark\")}\n aria-pressed=${state.theme === \"dark\"}\n aria-label=\"Dark theme\"\n title=\"Dark\"\n >\n ${renderMoonIcon()}\n </button>\n </div>\n </div>\n `;\n}\n\nfunction renderSunIcon() {\n return html`\n <svg class=\"theme-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"4\"></circle>\n <path d=\"M12 2v2\"></path>\n <path d=\"M12 20v2\"></path>\n <path d=\"m4.93 4.93 1.41 1.41\"></path>\n <path d=\"m17.66 17.66 1.41 1.41\"></path>\n <path d=\"M2 12h2\"></path>\n <path d=\"M20 12h2\"></path>\n <path d=\"m6.34 17.66-1.41 1.41\"></path>\n <path d=\"m19.07 4.93-1.41 1.41\"></path>\n </svg>\n `;\n}\n\nfunction renderMoonIcon() {\n return html`\n <svg class=\"theme-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path\n d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\n ></path>\n </svg>\n `;\n}\n\nfunction renderMonitorIcon() {\n return html`\n <svg class=\"theme-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect>\n <line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line>\n <line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line>\n </svg>\n `;\n}\n","import { html, nothing } from \"lit\";\n\nimport type { GatewayBrowserClient, GatewayHelloOk } from \"./gateway\";\nimport type { AppViewState } from \"./app-view-state\";\nimport { parseAgentSessionKey } from \"../../../src/routing/session-key.js\";\nimport {\n TAB_GROUPS,\n iconForTab,\n pathForTab,\n subtitleForTab,\n titleForTab,\n type Tab,\n} from \"./navigation\";\nimport { icons } from \"./icons\";\nimport type { UiSettings } from \"./storage\";\nimport type { ThemeMode } from \"./theme\";\nimport type { ThemeTransitionContext } from \"./theme-transition\";\nimport type {\n ConfigSnapshot,\n CronJob,\n CronRunLogEntry,\n CronStatus,\n HealthSnapshot,\n LogEntry,\n LogLevel,\n PresenceEntry,\n ChannelsStatusSnapshot,\n SessionsListResult,\n SkillStatusReport,\n StatusSummary,\n} from \"./types\";\nimport type { ChatQueueItem, CronFormState } from \"./ui-types\";\nimport { refreshChatAvatar } from \"./app-chat\";\nimport { renderChat } from \"./views/chat\";\nimport { renderConfig } from \"./views/config\";\nimport { renderChannels } from \"./views/channels\";\nimport { renderCron } from \"./views/cron\";\nimport { renderDebug } from \"./views/debug\";\nimport { renderInstances } from \"./views/instances\";\nimport { renderLogs } from \"./views/logs\";\nimport { renderNodes } from \"./views/nodes\";\nimport { renderOverview } from \"./views/overview\";\nimport { renderSessions } from \"./views/sessions\";\nimport { renderExecApprovalPrompt } from \"./views/exec-approval\";\nimport { renderGatewayUrlConfirmation } from \"./views/gateway-url-confirmation\";\nimport {\n approveDevicePairing,\n loadDevices,\n rejectDevicePairing,\n revokeDeviceToken,\n rotateDeviceToken,\n} from \"./controllers/devices\";\nimport { renderSkills } from \"./views/skills\";\nimport { renderChatControls, renderTab, renderThemeToggle } from \"./app-render.helpers\";\nimport { loadChannels } from \"./controllers/channels\";\nimport { loadPresence } from \"./controllers/presence\";\nimport { deleteSession, loadSessions, patchSession } from \"./controllers/sessions\";\nimport {\n installSkill,\n loadSkills,\n saveSkillApiKey,\n updateSkillEdit,\n updateSkillEnabled,\n type SkillMessage,\n} from \"./controllers/skills\";\nimport { loadNodes } from \"./controllers/nodes\";\nimport { loadChatHistory } from \"./controllers/chat\";\nimport {\n applyConfig,\n loadConfig,\n runUpdate,\n saveConfig,\n updateConfigFormValue,\n removeConfigFormValue,\n} from \"./controllers/config\";\nimport {\n loadExecApprovals,\n removeExecApprovalsFormValue,\n saveExecApprovals,\n updateExecApprovalsFormValue,\n} from \"./controllers/exec-approvals\";\nimport {\n loadCronRuns,\n toggleCronJob,\n runCronJob,\n removeCronJob,\n addCronJob,\n} from \"./controllers/cron\";\nimport { loadDebug, callDebugMethod } from \"./controllers/debug\";\nimport { loadLogs } from \"./controllers/logs\";\n\nconst AVATAR_DATA_RE = /^data:/i;\nconst AVATAR_HTTP_RE = /^https?:\\/\\//i;\n\nfunction resolveAssistantAvatarUrl(state: AppViewState): string | undefined {\n const list = state.agentsList?.agents ?? [];\n const parsed = parseAgentSessionKey(state.sessionKey);\n const agentId = parsed?.agentId ?? state.agentsList?.defaultId ?? \"main\";\n const agent = list.find((entry) => entry.id === agentId);\n const identity = agent?.identity;\n const candidate = identity?.avatarUrl ?? identity?.avatar;\n if (!candidate) return undefined;\n if (AVATAR_DATA_RE.test(candidate) || AVATAR_HTTP_RE.test(candidate)) return candidate;\n return identity?.avatarUrl;\n}\n\nexport function renderApp(state: AppViewState) {\n const presenceCount = state.presenceEntries.length;\n const sessionsCount = state.sessionsResult?.count ?? null;\n const cronNext = state.cronStatus?.nextWakeAtMs ?? null;\n const chatDisabledReason = state.connected ? null : \"Disconnected from gateway.\";\n const isChat = state.tab === \"chat\";\n const chatFocus = isChat && (state.settings.chatFocusMode || state.onboarding);\n const showThinking = state.onboarding ? false : state.settings.chatShowThinking;\n const assistantAvatarUrl = resolveAssistantAvatarUrl(state);\n const chatAvatarUrl = state.chatAvatarUrl ?? assistantAvatarUrl ?? null;\n\n return html`\n <div class=\"shell ${isChat ? \"shell--chat\" : \"\"} ${chatFocus ? \"shell--chat-focus\" : \"\"} ${state.settings.navCollapsed ? \"shell--nav-collapsed\" : \"\"} ${state.onboarding ? \"shell--onboarding\" : \"\"}\">\n <header class=\"topbar\">\n <div class=\"topbar-left\">\n <button\n class=\"nav-collapse-toggle\"\n @click=${() =>\n state.applySettings({\n ...state.settings,\n navCollapsed: !state.settings.navCollapsed,\n })}\n title=\"${state.settings.navCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\"\n aria-label=\"${state.settings.navCollapsed ? \"Expand sidebar\" : \"Collapse sidebar\"}\"\n >\n <span class=\"nav-collapse-toggle__icon\">${icons.menu}</span>\n </button>\n <div class=\"brand\">\n <div class=\"brand-logo\">\n <img src=\"https://mintcdn.com/clawhub/4rYvG-uuZrMK_URE/assets/pixel-lobster.svg?fit=max&auto=format&n=4rYvG-uuZrMK_URE&q=85&s=da2032e9eac3b5d9bfe7eb96ca6a8a26\" alt=\"OpenClaw\" />\n </div>\n <div class=\"brand-text\">\n <div class=\"brand-title\">OPENCLAW</div>\n <div class=\"brand-sub\">Gateway Dashboard</div>\n </div>\n </div>\n </div>\n <div class=\"topbar-status\">\n <div class=\"pill\">\n <span class=\"statusDot ${state.connected ? \"ok\" : \"\"}\"></span>\n <span>Health</span>\n <span class=\"mono\">${state.connected ? \"OK\" : \"Offline\"}</span>\n </div>\n ${renderThemeToggle(state)}\n </div>\n </header>\n <aside class=\"nav ${state.settings.navCollapsed ? \"nav--collapsed\" : \"\"}\">\n ${TAB_GROUPS.map((group) => {\n const isGroupCollapsed = state.settings.navGroupsCollapsed[group.label] ?? false;\n const hasActiveTab = group.tabs.some((tab) => tab === state.tab);\n return html`\n <div class=\"nav-group ${isGroupCollapsed && !hasActiveTab ? \"nav-group--collapsed\" : \"\"}\">\n <button\n class=\"nav-label\"\n @click=${() => {\n const next = { ...state.settings.navGroupsCollapsed };\n next[group.label] = !isGroupCollapsed;\n state.applySettings({\n ...state.settings,\n navGroupsCollapsed: next,\n });\n }}\n aria-expanded=${!isGroupCollapsed}\n >\n <span class=\"nav-label__text\">${group.label}</span>\n <span class=\"nav-label__chevron\">${isGroupCollapsed ? \"+\" : \"−\"}</span>\n </button>\n <div class=\"nav-group__items\">\n ${group.tabs.map((tab) => renderTab(state, tab))}\n </div>\n </div>\n `;\n })}\n <div class=\"nav-group nav-group--links\">\n <div class=\"nav-label nav-label--static\">\n <span class=\"nav-label__text\">Resources</span>\n </div>\n <div class=\"nav-group__items\">\n <a\n class=\"nav-item nav-item--external\"\n href=\"https://docs.openclaw.ai\"\n target=\"_blank\"\n rel=\"noreferrer\"\n title=\"Docs (opens in new tab)\"\n >\n <span class=\"nav-item__icon\" aria-hidden=\"true\">${icons.book}</span>\n <span class=\"nav-item__text\">Docs</span>\n </a>\n </div>\n </div>\n </aside>\n <main class=\"content ${isChat ? \"content--chat\" : \"\"}\">\n <section class=\"content-header\">\n <div>\n <div class=\"page-title\">${titleForTab(state.tab)}</div>\n <div class=\"page-sub\">${subtitleForTab(state.tab)}</div>\n </div>\n <div class=\"page-meta\">\n ${state.lastError ? html`<div class=\"pill danger\">${state.lastError}</div>` : nothing}\n ${isChat ? renderChatControls(state) : nothing}\n </div>\n </section>\n\n ${\n state.tab === \"overview\"\n ? renderOverview({\n connected: state.connected,\n hello: state.hello,\n settings: state.settings,\n password: state.password,\n lastError: state.lastError,\n presenceCount,\n sessionsCount,\n cronEnabled: state.cronStatus?.enabled ?? null,\n cronNext,\n lastChannelsRefresh: state.channelsLastSuccess,\n onSettingsChange: (next) => state.applySettings(next),\n onPasswordChange: (next) => (state.password = next),\n onSessionKeyChange: (next) => {\n state.sessionKey = next;\n state.chatMessage = \"\";\n state.resetToolStream();\n state.applySettings({\n ...state.settings,\n sessionKey: next,\n lastActiveSessionKey: next,\n });\n void state.loadAssistantIdentity();\n },\n onConnect: () => state.connect(),\n onRefresh: () => state.loadOverview(),\n })\n : nothing\n }\n\n ${\n state.tab === \"channels\"\n ? renderChannels({\n connected: state.connected,\n loading: state.channelsLoading,\n snapshot: state.channelsSnapshot,\n lastError: state.channelsError,\n lastSuccessAt: state.channelsLastSuccess,\n whatsappMessage: state.whatsappLoginMessage,\n whatsappQrDataUrl: state.whatsappLoginQrDataUrl,\n whatsappConnected: state.whatsappLoginConnected,\n whatsappBusy: state.whatsappBusy,\n configSchema: state.configSchema,\n configSchemaLoading: state.configSchemaLoading,\n configForm: state.configForm,\n configUiHints: state.configUiHints,\n configSaving: state.configSaving,\n configFormDirty: state.configFormDirty,\n nostrProfileFormState: state.nostrProfileFormState,\n nostrProfileAccountId: state.nostrProfileAccountId,\n onRefresh: (probe) => loadChannels(state, probe),\n onWhatsAppStart: (force) => state.handleWhatsAppStart(force),\n onWhatsAppWait: () => state.handleWhatsAppWait(),\n onWhatsAppLogout: () => state.handleWhatsAppLogout(),\n onConfigPatch: (path, value) => updateConfigFormValue(state, path, value),\n onConfigSave: () => state.handleChannelConfigSave(),\n onConfigReload: () => state.handleChannelConfigReload(),\n onNostrProfileEdit: (accountId, profile) =>\n state.handleNostrProfileEdit(accountId, profile),\n onNostrProfileCancel: () => state.handleNostrProfileCancel(),\n onNostrProfileFieldChange: (field, value) =>\n state.handleNostrProfileFieldChange(field, value),\n onNostrProfileSave: () => state.handleNostrProfileSave(),\n onNostrProfileImport: () => state.handleNostrProfileImport(),\n onNostrProfileToggleAdvanced: () => state.handleNostrProfileToggleAdvanced(),\n })\n : nothing\n }\n\n ${\n state.tab === \"instances\"\n ? renderInstances({\n loading: state.presenceLoading,\n entries: state.presenceEntries,\n lastError: state.presenceError,\n statusMessage: state.presenceStatus,\n onRefresh: () => loadPresence(state),\n })\n : nothing\n }\n\n ${\n state.tab === \"sessions\"\n ? renderSessions({\n loading: state.sessionsLoading,\n result: state.sessionsResult,\n error: state.sessionsError,\n activeMinutes: state.sessionsFilterActive,\n limit: state.sessionsFilterLimit,\n includeGlobal: state.sessionsIncludeGlobal,\n includeUnknown: state.sessionsIncludeUnknown,\n basePath: state.basePath,\n onFiltersChange: (next) => {\n state.sessionsFilterActive = next.activeMinutes;\n state.sessionsFilterLimit = next.limit;\n state.sessionsIncludeGlobal = next.includeGlobal;\n state.sessionsIncludeUnknown = next.includeUnknown;\n },\n onRefresh: () => loadSessions(state),\n onPatch: (key, patch) => patchSession(state, key, patch),\n onDelete: (key) => deleteSession(state, key),\n })\n : nothing\n }\n\n ${\n state.tab === \"cron\"\n ? renderCron({\n loading: state.cronLoading,\n status: state.cronStatus,\n jobs: state.cronJobs,\n error: state.cronError,\n busy: state.cronBusy,\n form: state.cronForm,\n channels: state.channelsSnapshot?.channelMeta?.length\n ? state.channelsSnapshot.channelMeta.map((entry) => entry.id)\n : (state.channelsSnapshot?.channelOrder ?? []),\n channelLabels: state.channelsSnapshot?.channelLabels ?? {},\n channelMeta: state.channelsSnapshot?.channelMeta ?? [],\n runsJobId: state.cronRunsJobId,\n runs: state.cronRuns,\n onFormChange: (patch) => (state.cronForm = { ...state.cronForm, ...patch }),\n onRefresh: () => state.loadCron(),\n onAdd: () => addCronJob(state),\n onToggle: (job, enabled) => toggleCronJob(state, job, enabled),\n onRun: (job) => runCronJob(state, job),\n onRemove: (job) => removeCronJob(state, job),\n onLoadRuns: (jobId) => loadCronRuns(state, jobId),\n })\n : nothing\n }\n\n ${\n state.tab === \"skills\"\n ? renderSkills({\n loading: state.skillsLoading,\n report: state.skillsReport,\n error: state.skillsError,\n filter: state.skillsFilter,\n edits: state.skillEdits,\n messages: state.skillMessages,\n busyKey: state.skillsBusyKey,\n onFilterChange: (next) => (state.skillsFilter = next),\n onRefresh: () => loadSkills(state, { clearMessages: true }),\n onToggle: (key, enabled) => updateSkillEnabled(state, key, enabled),\n onEdit: (key, value) => updateSkillEdit(state, key, value),\n onSaveKey: (key) => saveSkillApiKey(state, key),\n onInstall: (skillKey, name, installId) =>\n installSkill(state, skillKey, name, installId),\n })\n : nothing\n }\n\n ${\n state.tab === \"nodes\"\n ? renderNodes({\n loading: state.nodesLoading,\n nodes: state.nodes,\n devicesLoading: state.devicesLoading,\n devicesError: state.devicesError,\n devicesList: state.devicesList,\n configForm:\n state.configForm ??\n (state.configSnapshot?.config as Record<string, unknown> | null),\n configLoading: state.configLoading,\n configSaving: state.configSaving,\n configDirty: state.configFormDirty,\n configFormMode: state.configFormMode,\n execApprovalsLoading: state.execApprovalsLoading,\n execApprovalsSaving: state.execApprovalsSaving,\n execApprovalsDirty: state.execApprovalsDirty,\n execApprovalsSnapshot: state.execApprovalsSnapshot,\n execApprovalsForm: state.execApprovalsForm,\n execApprovalsSelectedAgent: state.execApprovalsSelectedAgent,\n execApprovalsTarget: state.execApprovalsTarget,\n execApprovalsTargetNodeId: state.execApprovalsTargetNodeId,\n onRefresh: () => loadNodes(state),\n onDevicesRefresh: () => loadDevices(state),\n onDeviceApprove: (requestId) => approveDevicePairing(state, requestId),\n onDeviceReject: (requestId) => rejectDevicePairing(state, requestId),\n onDeviceRotate: (deviceId, role, scopes) =>\n rotateDeviceToken(state, { deviceId, role, scopes }),\n onDeviceRevoke: (deviceId, role) => revokeDeviceToken(state, { deviceId, role }),\n onLoadConfig: () => loadConfig(state),\n onLoadExecApprovals: () => {\n const target =\n state.execApprovalsTarget === \"node\" && state.execApprovalsTargetNodeId\n ? { kind: \"node\" as const, nodeId: state.execApprovalsTargetNodeId }\n : { kind: \"gateway\" as const };\n return loadExecApprovals(state, target);\n },\n onBindDefault: (nodeId) => {\n if (nodeId) {\n updateConfigFormValue(state, [\"tools\", \"exec\", \"node\"], nodeId);\n } else {\n removeConfigFormValue(state, [\"tools\", \"exec\", \"node\"]);\n }\n },\n onBindAgent: (agentIndex, nodeId) => {\n const basePath = [\"agents\", \"list\", agentIndex, \"tools\", \"exec\", \"node\"];\n if (nodeId) {\n updateConfigFormValue(state, basePath, nodeId);\n } else {\n removeConfigFormValue(state, basePath);\n }\n },\n onSaveBindings: () => saveConfig(state),\n onExecApprovalsTargetChange: (kind, nodeId) => {\n state.execApprovalsTarget = kind;\n state.execApprovalsTargetNodeId = nodeId;\n state.execApprovalsSnapshot = null;\n state.execApprovalsForm = null;\n state.execApprovalsDirty = false;\n state.execApprovalsSelectedAgent = null;\n },\n onExecApprovalsSelectAgent: (agentId) => {\n state.execApprovalsSelectedAgent = agentId;\n },\n onExecApprovalsPatch: (path, value) =>\n updateExecApprovalsFormValue(state, path, value),\n onExecApprovalsRemove: (path) => removeExecApprovalsFormValue(state, path),\n onSaveExecApprovals: () => {\n const target =\n state.execApprovalsTarget === \"node\" && state.execApprovalsTargetNodeId\n ? { kind: \"node\" as const, nodeId: state.execApprovalsTargetNodeId }\n : { kind: \"gateway\" as const };\n return saveExecApprovals(state, target);\n },\n })\n : nothing\n }\n\n ${\n state.tab === \"chat\"\n ? renderChat({\n sessionKey: state.sessionKey,\n onSessionKeyChange: (next) => {\n state.sessionKey = next;\n state.chatMessage = \"\";\n state.chatAttachments = [];\n state.chatStream = null;\n state.chatStreamStartedAt = null;\n state.chatRunId = null;\n state.chatQueue = [];\n state.resetToolStream();\n state.resetChatScroll();\n state.applySettings({\n ...state.settings,\n sessionKey: next,\n lastActiveSessionKey: next,\n });\n void state.loadAssistantIdentity();\n void loadChatHistory(state);\n void refreshChatAvatar(state);\n },\n thinkingLevel: state.chatThinkingLevel,\n showThinking,\n loading: state.chatLoading,\n sending: state.chatSending,\n compactionStatus: state.compactionStatus,\n assistantAvatarUrl: chatAvatarUrl,\n messages: state.chatMessages,\n toolMessages: state.chatToolMessages,\n stream: state.chatStream,\n streamStartedAt: state.chatStreamStartedAt,\n draft: state.chatMessage,\n queue: state.chatQueue,\n connected: state.connected,\n canSend: state.connected,\n disabledReason: chatDisabledReason,\n error: state.lastError,\n sessions: state.sessionsResult,\n focusMode: chatFocus,\n onRefresh: () => {\n state.resetToolStream();\n return Promise.all([loadChatHistory(state), refreshChatAvatar(state)]);\n },\n onToggleFocusMode: () => {\n if (state.onboarding) return;\n state.applySettings({\n ...state.settings,\n chatFocusMode: !state.settings.chatFocusMode,\n });\n },\n onChatScroll: (event) => state.handleChatScroll(event),\n onDraftChange: (next) => (state.chatMessage = next),\n attachments: state.chatAttachments,\n onAttachmentsChange: (next) => (state.chatAttachments = next),\n onSend: () => state.handleSendChat(),\n canAbort: Boolean(state.chatRunId),\n onAbort: () => void state.handleAbortChat(),\n onQueueRemove: (id) => state.removeQueuedMessage(id),\n onNewSession: () => state.handleSendChat(\"/new\", { restoreDraft: true }),\n // Sidebar props for tool output viewing\n sidebarOpen: state.sidebarOpen,\n sidebarContent: state.sidebarContent,\n sidebarError: state.sidebarError,\n splitRatio: state.splitRatio,\n onOpenSidebar: (content: string) => state.handleOpenSidebar(content),\n onCloseSidebar: () => state.handleCloseSidebar(),\n onSplitRatioChange: (ratio: number) => state.handleSplitRatioChange(ratio),\n assistantName: state.assistantName,\n assistantAvatar: state.assistantAvatar,\n })\n : nothing\n }\n\n ${\n state.tab === \"config\"\n ? renderConfig({\n raw: state.configRaw,\n originalRaw: state.configRawOriginal,\n valid: state.configValid,\n issues: state.configIssues,\n loading: state.configLoading,\n saving: state.configSaving,\n applying: state.configApplying,\n updating: state.updateRunning,\n connected: state.connected,\n schema: state.configSchema,\n schemaLoading: state.configSchemaLoading,\n uiHints: state.configUiHints,\n formMode: state.configFormMode,\n formValue: state.configForm,\n originalValue: state.configFormOriginal,\n searchQuery: state.configSearchQuery,\n activeSection: state.configActiveSection,\n activeSubsection: state.configActiveSubsection,\n onRawChange: (next) => {\n state.configRaw = next;\n },\n onFormModeChange: (mode) => (state.configFormMode = mode),\n onFormPatch: (path, value) => updateConfigFormValue(state, path, value),\n onSearchChange: (query) => (state.configSearchQuery = query),\n onSectionChange: (section) => {\n state.configActiveSection = section;\n state.configActiveSubsection = null;\n },\n onSubsectionChange: (section) => (state.configActiveSubsection = section),\n onReload: () => loadConfig(state),\n onSave: () => saveConfig(state),\n onApply: () => applyConfig(state),\n onUpdate: () => runUpdate(state),\n })\n : nothing\n }\n\n ${\n state.tab === \"debug\"\n ? renderDebug({\n loading: state.debugLoading,\n status: state.debugStatus,\n health: state.debugHealth,\n models: state.debugModels,\n heartbeat: state.debugHeartbeat,\n eventLog: state.eventLog,\n callMethod: state.debugCallMethod,\n callParams: state.debugCallParams,\n callResult: state.debugCallResult,\n callError: state.debugCallError,\n onCallMethodChange: (next) => (state.debugCallMethod = next),\n onCallParamsChange: (next) => (state.debugCallParams = next),\n onRefresh: () => loadDebug(state),\n onCall: () => callDebugMethod(state),\n })\n : nothing\n }\n\n ${\n state.tab === \"logs\"\n ? renderLogs({\n loading: state.logsLoading,\n error: state.logsError,\n file: state.logsFile,\n entries: state.logsEntries,\n filterText: state.logsFilterText,\n levelFilters: state.logsLevelFilters,\n autoFollow: state.logsAutoFollow,\n truncated: state.logsTruncated,\n onFilterTextChange: (next) => (state.logsFilterText = next),\n onLevelToggle: (level, enabled) => {\n state.logsLevelFilters = { ...state.logsLevelFilters, [level]: enabled };\n },\n onToggleAutoFollow: (next) => (state.logsAutoFollow = next),\n onRefresh: () => loadLogs(state, { reset: true }),\n onExport: (lines, label) => state.exportLogs(lines, label),\n onScroll: (event) => state.handleLogsScroll(event),\n })\n : nothing\n }\n </main>\n ${renderExecApprovalPrompt(state)}\n ${renderGatewayUrlConfirmation(state)}\n </div>\n `;\n}\n","import type { LogLevel } from \"./types\";\nimport type { CronFormState } from \"./ui-types\";\n\nexport const DEFAULT_LOG_LEVEL_FILTERS: Record<LogLevel, boolean> = {\n trace: true,\n debug: true,\n info: true,\n warn: true,\n error: true,\n fatal: true,\n};\n\nexport const DEFAULT_CRON_FORM: CronFormState = {\n name: \"\",\n description: \"\",\n agentId: \"\",\n enabled: true,\n scheduleKind: \"every\",\n scheduleAt: \"\",\n everyAmount: \"30\",\n everyUnit: \"minutes\",\n cronExpr: \"0 7 * * *\",\n cronTz: \"\",\n sessionTarget: \"main\",\n wakeMode: \"next-heartbeat\",\n payloadKind: \"systemEvent\",\n payloadText: \"\",\n deliver: false,\n channel: \"last\",\n to: \"\",\n timeoutSeconds: \"\",\n postToMainPrefix: \"\",\n};\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport type { AgentsListResult } from \"../types\";\n\nexport type AgentsState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n agentsLoading: boolean;\n agentsError: string | null;\n agentsList: AgentsListResult | null;\n};\n\nexport async function loadAgents(state: AgentsState) {\n if (!state.client || !state.connected) return;\n if (state.agentsLoading) return;\n state.agentsLoading = true;\n state.agentsError = null;\n try {\n const res = (await state.client.request(\"agents.list\", {})) as AgentsListResult | undefined;\n if (res) state.agentsList = res;\n } catch (err) {\n state.agentsError = String(err);\n } finally {\n state.agentsLoading = false;\n }\n}\n","export const GATEWAY_CLIENT_IDS = {\n WEBCHAT_UI: \"webchat-ui\",\n CONTROL_UI: \"openclaw-control-ui\",\n WEBCHAT: \"webchat\",\n CLI: \"cli\",\n GATEWAY_CLIENT: \"gateway-client\",\n MACOS_APP: \"openclaw-macos\",\n IOS_APP: \"openclaw-ios\",\n ANDROID_APP: \"openclaw-android\",\n NODE_HOST: \"node-host\",\n TEST: \"test\",\n FINGERPRINT: \"fingerprint\",\n PROBE: \"openclaw-probe\",\n} as const;\n\nexport type GatewayClientId = (typeof GATEWAY_CLIENT_IDS)[keyof typeof GATEWAY_CLIENT_IDS];\n\n// Back-compat naming (internal): these values are IDs, not display names.\nexport const GATEWAY_CLIENT_NAMES = GATEWAY_CLIENT_IDS;\nexport type GatewayClientName = GatewayClientId;\n\nexport const GATEWAY_CLIENT_MODES = {\n WEBCHAT: \"webchat\",\n CLI: \"cli\",\n UI: \"ui\",\n BACKEND: \"backend\",\n NODE: \"node\",\n PROBE: \"probe\",\n TEST: \"test\",\n} as const;\n\nexport type GatewayClientMode = (typeof GATEWAY_CLIENT_MODES)[keyof typeof GATEWAY_CLIENT_MODES];\n\nexport type GatewayClientInfo = {\n id: GatewayClientId;\n displayName?: string;\n version: string;\n platform: string;\n deviceFamily?: string;\n modelIdentifier?: string;\n mode: GatewayClientMode;\n instanceId?: string;\n};\n\nconst GATEWAY_CLIENT_ID_SET = new Set<GatewayClientId>(Object.values(GATEWAY_CLIENT_IDS));\nconst GATEWAY_CLIENT_MODE_SET = new Set<GatewayClientMode>(Object.values(GATEWAY_CLIENT_MODES));\n\nexport function normalizeGatewayClientId(raw?: string | null): GatewayClientId | undefined {\n const normalized = raw?.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n return GATEWAY_CLIENT_ID_SET.has(normalized as GatewayClientId)\n ? (normalized as GatewayClientId)\n : undefined;\n}\n\nexport function normalizeGatewayClientName(raw?: string | null): GatewayClientName | undefined {\n return normalizeGatewayClientId(raw);\n}\n\nexport function normalizeGatewayClientMode(raw?: string | null): GatewayClientMode | undefined {\n const normalized = raw?.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n return GATEWAY_CLIENT_MODE_SET.has(normalized as GatewayClientMode)\n ? (normalized as GatewayClientMode)\n : undefined;\n}\n","export type DeviceAuthPayloadParams = {\n deviceId: string;\n clientId: string;\n clientMode: string;\n role: string;\n scopes: string[];\n signedAtMs: number;\n token?: string | null;\n nonce?: string | null;\n version?: \"v1\" | \"v2\";\n};\n\nexport function buildDeviceAuthPayload(params: DeviceAuthPayloadParams): string {\n const version = params.version ?? (params.nonce ? \"v2\" : \"v1\");\n const scopes = params.scopes.join(\",\");\n const token = params.token ?? \"\";\n const base = [\n version,\n params.deviceId,\n params.clientId,\n params.clientMode,\n params.role,\n scopes,\n String(params.signedAtMs),\n token,\n ];\n if (version === \"v2\") {\n base.push(params.nonce ?? \"\");\n }\n return base.join(\"|\");\n}\n","import { generateUUID } from \"./uuid\";\nimport {\n GATEWAY_CLIENT_MODES,\n GATEWAY_CLIENT_NAMES,\n type GatewayClientMode,\n type GatewayClientName,\n} from \"../../../src/gateway/protocol/client-info.js\";\nimport { buildDeviceAuthPayload } from \"../../../src/gateway/device-auth.js\";\nimport { loadOrCreateDeviceIdentity, signDevicePayload } from \"./device-identity\";\nimport { clearDeviceAuthToken, loadDeviceAuthToken, storeDeviceAuthToken } from \"./device-auth\";\n\nexport type GatewayEventFrame = {\n type: \"event\";\n event: string;\n payload?: unknown;\n seq?: number;\n stateVersion?: { presence: number; health: number };\n};\n\nexport type GatewayResponseFrame = {\n type: \"res\";\n id: string;\n ok: boolean;\n payload?: unknown;\n error?: { code: string; message: string; details?: unknown };\n};\n\nexport type GatewayHelloOk = {\n type: \"hello-ok\";\n protocol: number;\n features?: { methods?: string[]; events?: string[] };\n snapshot?: unknown;\n auth?: {\n deviceToken?: string;\n role?: string;\n scopes?: string[];\n issuedAtMs?: number;\n };\n policy?: { tickIntervalMs?: number };\n};\n\ntype Pending = {\n resolve: (value: unknown) => void;\n reject: (err: unknown) => void;\n};\n\nexport type GatewayBrowserClientOptions = {\n url: string;\n token?: string;\n password?: string;\n clientName?: GatewayClientName;\n clientVersion?: string;\n platform?: string;\n mode?: GatewayClientMode;\n instanceId?: string;\n onHello?: (hello: GatewayHelloOk) => void;\n onEvent?: (evt: GatewayEventFrame) => void;\n onClose?: (info: { code: number; reason: string }) => void;\n onGap?: (info: { expected: number; received: number }) => void;\n};\n\n// 4008 = application-defined code (browser rejects 1008 \"Policy Violation\")\nconst CONNECT_FAILED_CLOSE_CODE = 4008;\n\nexport class GatewayBrowserClient {\n private ws: WebSocket | null = null;\n private pending = new Map<string, Pending>();\n private closed = false;\n private lastSeq: number | null = null;\n private connectNonce: string | null = null;\n private connectSent = false;\n private connectTimer: number | null = null;\n private backoffMs = 800;\n\n constructor(private opts: GatewayBrowserClientOptions) {}\n\n start() {\n this.closed = false;\n this.connect();\n }\n\n stop() {\n this.closed = true;\n this.ws?.close();\n this.ws = null;\n this.flushPending(new Error(\"gateway client stopped\"));\n }\n\n get connected() {\n return this.ws?.readyState === WebSocket.OPEN;\n }\n\n private connect() {\n if (this.closed) return;\n this.ws = new WebSocket(this.opts.url);\n this.ws.onopen = () => this.queueConnect();\n this.ws.onmessage = (ev) => this.handleMessage(String(ev.data ?? \"\"));\n this.ws.onclose = (ev) => {\n const reason = String(ev.reason ?? \"\");\n this.ws = null;\n this.flushPending(new Error(`gateway closed (${ev.code}): ${reason}`));\n this.opts.onClose?.({ code: ev.code, reason });\n this.scheduleReconnect();\n };\n this.ws.onerror = () => {\n // ignored; close handler will fire\n };\n }\n\n private scheduleReconnect() {\n if (this.closed) return;\n const delay = this.backoffMs;\n this.backoffMs = Math.min(this.backoffMs * 1.7, 15_000);\n window.setTimeout(() => this.connect(), delay);\n }\n\n private flushPending(err: Error) {\n for (const [, p] of this.pending) p.reject(err);\n this.pending.clear();\n }\n\n private async sendConnect() {\n if (this.connectSent) return;\n this.connectSent = true;\n if (this.connectTimer !== null) {\n window.clearTimeout(this.connectTimer);\n this.connectTimer = null;\n }\n\n // crypto.subtle is only available in secure contexts (HTTPS, localhost).\n // Over plain HTTP, we skip device identity and fall back to token-only auth.\n // Gateways may reject this unless gateway.controlUi.allowInsecureAuth is enabled.\n const isSecureContext = typeof crypto !== \"undefined\" && !!crypto.subtle;\n\n const scopes = [\"operator.admin\", \"operator.approvals\", \"operator.pairing\"];\n const role = \"operator\";\n let deviceIdentity: Awaited<ReturnType<typeof loadOrCreateDeviceIdentity>> | null = null;\n let canFallbackToShared = false;\n let authToken = this.opts.token;\n\n if (isSecureContext) {\n deviceIdentity = await loadOrCreateDeviceIdentity();\n const storedToken = loadDeviceAuthToken({\n deviceId: deviceIdentity.deviceId,\n role,\n })?.token;\n authToken = storedToken ?? this.opts.token;\n canFallbackToShared = Boolean(storedToken && this.opts.token);\n }\n const auth =\n authToken || this.opts.password\n ? {\n token: authToken,\n password: this.opts.password,\n }\n : undefined;\n\n let device:\n | {\n id: string;\n publicKey: string;\n signature: string;\n signedAt: number;\n nonce: string | undefined;\n }\n | undefined;\n\n if (isSecureContext && deviceIdentity) {\n const signedAtMs = Date.now();\n const nonce = this.connectNonce ?? undefined;\n const payload = buildDeviceAuthPayload({\n deviceId: deviceIdentity.deviceId,\n clientId: this.opts.clientName ?? GATEWAY_CLIENT_NAMES.CONTROL_UI,\n clientMode: this.opts.mode ?? GATEWAY_CLIENT_MODES.WEBCHAT,\n role,\n scopes,\n signedAtMs,\n token: authToken ?? null,\n nonce,\n });\n const signature = await signDevicePayload(deviceIdentity.privateKey, payload);\n device = {\n id: deviceIdentity.deviceId,\n publicKey: deviceIdentity.publicKey,\n signature,\n signedAt: signedAtMs,\n nonce,\n };\n }\n const params = {\n minProtocol: 3,\n maxProtocol: 3,\n client: {\n id: this.opts.clientName ?? GATEWAY_CLIENT_NAMES.CONTROL_UI,\n version: this.opts.clientVersion ?? \"dev\",\n platform: this.opts.platform ?? navigator.platform ?? \"web\",\n mode: this.opts.mode ?? GATEWAY_CLIENT_MODES.WEBCHAT,\n instanceId: this.opts.instanceId,\n },\n role,\n scopes,\n device,\n caps: [],\n auth,\n userAgent: navigator.userAgent,\n locale: navigator.language,\n };\n\n void this.request<GatewayHelloOk>(\"connect\", params)\n .then((hello) => {\n if (hello?.auth?.deviceToken && deviceIdentity) {\n storeDeviceAuthToken({\n deviceId: deviceIdentity.deviceId,\n role: hello.auth.role ?? role,\n token: hello.auth.deviceToken,\n scopes: hello.auth.scopes ?? [],\n });\n }\n this.backoffMs = 800;\n this.opts.onHello?.(hello);\n })\n .catch(() => {\n if (canFallbackToShared && deviceIdentity) {\n clearDeviceAuthToken({ deviceId: deviceIdentity.deviceId, role });\n }\n this.ws?.close(CONNECT_FAILED_CLOSE_CODE, \"connect failed\");\n });\n }\n\n private handleMessage(raw: string) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return;\n }\n\n const frame = parsed as { type?: unknown };\n if (frame.type === \"event\") {\n const evt = parsed as GatewayEventFrame;\n if (evt.event === \"connect.challenge\") {\n const payload = evt.payload as { nonce?: unknown } | undefined;\n const nonce = payload && typeof payload.nonce === \"string\" ? payload.nonce : null;\n if (nonce) {\n this.connectNonce = nonce;\n void this.sendConnect();\n }\n return;\n }\n const seq = typeof evt.seq === \"number\" ? evt.seq : null;\n if (seq !== null) {\n if (this.lastSeq !== null && seq > this.lastSeq + 1) {\n this.opts.onGap?.({ expected: this.lastSeq + 1, received: seq });\n }\n this.lastSeq = seq;\n }\n try {\n this.opts.onEvent?.(evt);\n } catch (err) {\n console.error(\"[gateway] event handler error:\", err);\n }\n return;\n }\n\n if (frame.type === \"res\") {\n const res = parsed as GatewayResponseFrame;\n const pending = this.pending.get(res.id);\n if (!pending) return;\n this.pending.delete(res.id);\n if (res.ok) pending.resolve(res.payload);\n else pending.reject(new Error(res.error?.message ?? \"request failed\"));\n return;\n }\n }\n\n request<T = unknown>(method: string, params?: unknown): Promise<T> {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n return Promise.reject(new Error(\"gateway not connected\"));\n }\n const id = generateUUID();\n const frame = { type: \"req\", id, method, params };\n const p = new Promise<T>((resolve, reject) => {\n this.pending.set(id, { resolve: (v) => resolve(v as T), reject });\n });\n this.ws.send(JSON.stringify(frame));\n return p;\n }\n\n private queueConnect() {\n this.connectNonce = null;\n this.connectSent = false;\n if (this.connectTimer !== null) window.clearTimeout(this.connectTimer);\n this.connectTimer = window.setTimeout(() => {\n void this.sendConnect();\n }, 750);\n }\n}\n","export type ExecApprovalRequestPayload = {\n command: string;\n cwd?: string | null;\n host?: string | null;\n security?: string | null;\n ask?: string | null;\n agentId?: string | null;\n resolvedPath?: string | null;\n sessionKey?: string | null;\n};\n\nexport type ExecApprovalRequest = {\n id: string;\n request: ExecApprovalRequestPayload;\n createdAtMs: number;\n expiresAtMs: number;\n};\n\nexport type ExecApprovalResolved = {\n id: string;\n decision?: string | null;\n resolvedBy?: string | null;\n ts?: number | null;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nexport function parseExecApprovalRequested(payload: unknown): ExecApprovalRequest | null {\n if (!isRecord(payload)) return null;\n const id = typeof payload.id === \"string\" ? payload.id.trim() : \"\";\n const request = payload.request;\n if (!id || !isRecord(request)) return null;\n const command = typeof request.command === \"string\" ? request.command.trim() : \"\";\n if (!command) return null;\n const createdAtMs = typeof payload.createdAtMs === \"number\" ? payload.createdAtMs : 0;\n const expiresAtMs = typeof payload.expiresAtMs === \"number\" ? payload.expiresAtMs : 0;\n if (!createdAtMs || !expiresAtMs) return null;\n return {\n id,\n request: {\n command,\n cwd: typeof request.cwd === \"string\" ? request.cwd : null,\n host: typeof request.host === \"string\" ? request.host : null,\n security: typeof request.security === \"string\" ? request.security : null,\n ask: typeof request.ask === \"string\" ? request.ask : null,\n agentId: typeof request.agentId === \"string\" ? request.agentId : null,\n resolvedPath: typeof request.resolvedPath === \"string\" ? request.resolvedPath : null,\n sessionKey: typeof request.sessionKey === \"string\" ? request.sessionKey : null,\n },\n createdAtMs,\n expiresAtMs,\n };\n}\n\nexport function parseExecApprovalResolved(payload: unknown): ExecApprovalResolved | null {\n if (!isRecord(payload)) return null;\n const id = typeof payload.id === \"string\" ? payload.id.trim() : \"\";\n if (!id) return null;\n return {\n id,\n decision: typeof payload.decision === \"string\" ? payload.decision : null,\n resolvedBy: typeof payload.resolvedBy === \"string\" ? payload.resolvedBy : null,\n ts: typeof payload.ts === \"number\" ? payload.ts : null,\n };\n}\n\nexport function pruneExecApprovalQueue(queue: ExecApprovalRequest[]): ExecApprovalRequest[] {\n const now = Date.now();\n return queue.filter((entry) => entry.expiresAtMs > now);\n}\n\nexport function addExecApproval(\n queue: ExecApprovalRequest[],\n entry: ExecApprovalRequest,\n): ExecApprovalRequest[] {\n const next = pruneExecApprovalQueue(queue).filter((item) => item.id !== entry.id);\n next.push(entry);\n return next;\n}\n\nexport function removeExecApproval(\n queue: ExecApprovalRequest[],\n id: string,\n): ExecApprovalRequest[] {\n return pruneExecApprovalQueue(queue).filter((entry) => entry.id !== id);\n}\n","import type { GatewayBrowserClient } from \"../gateway\";\nimport { normalizeAssistantIdentity, type AssistantIdentity } from \"../assistant-identity\";\n\nexport type AssistantIdentityState = {\n client: GatewayBrowserClient | null;\n connected: boolean;\n sessionKey: string;\n assistantName: string;\n assistantAvatar: string | null;\n assistantAgentId: string | null;\n};\n\nexport async function loadAssistantIdentity(\n state: AssistantIdentityState,\n opts?: { sessionKey?: string },\n) {\n if (!state.client || !state.connected) return;\n const sessionKey = opts?.sessionKey?.trim() || state.sessionKey.trim();\n const params = sessionKey ? { sessionKey } : {};\n try {\n const res = (await state.client.request(\"agent.identity.get\", params)) as\n | Partial<AssistantIdentity>\n | undefined;\n if (!res) return;\n const normalized = normalizeAssistantIdentity(res);\n state.assistantName = normalized.name;\n state.assistantAvatar = normalized.avatar;\n state.assistantAgentId = normalized.agentId ?? null;\n } catch {\n // Ignore errors; keep last known identity.\n }\n}\n","import { loadChatHistory } from \"./controllers/chat\";\nimport { loadDevices } from \"./controllers/devices\";\nimport { loadNodes } from \"./controllers/nodes\";\nimport { loadAgents } from \"./controllers/agents\";\nimport type { GatewayEventFrame, GatewayHelloOk } from \"./gateway\";\nimport { GatewayBrowserClient } from \"./gateway\";\nimport type { EventLogEntry } from \"./app-events\";\nimport type { AgentsListResult, PresenceEntry, HealthSnapshot, StatusSummary } from \"./types\";\nimport type { Tab } from \"./navigation\";\nimport type { UiSettings } from \"./storage\";\nimport { handleAgentEvent, resetToolStream, type AgentEventPayload } from \"./app-tool-stream\";\nimport { CHAT_SESSIONS_ACTIVE_MINUTES, flushChatQueueForEvent } from \"./app-chat\";\nimport { applySettings, loadCron, refreshActiveTab, setLastActiveSessionKey } from \"./app-settings\";\nimport { handleChatEvent, type ChatEventPayload } from \"./controllers/chat\";\nimport {\n addExecApproval,\n parseExecApprovalRequested,\n parseExecApprovalResolved,\n removeExecApproval,\n} from \"./controllers/exec-approval\";\nimport type { OpenClawApp } from \"./app\";\nimport type { ExecApprovalRequest } from \"./controllers/exec-approval\";\nimport { loadAssistantIdentity } from \"./controllers/assistant-identity\";\nimport { loadSessions } from \"./controllers/sessions\";\n\ntype GatewayHost = {\n settings: UiSettings;\n password: string;\n client: GatewayBrowserClient | null;\n connected: boolean;\n hello: GatewayHelloOk | null;\n lastError: string | null;\n onboarding?: boolean;\n eventLogBuffer: EventLogEntry[];\n eventLog: EventLogEntry[];\n tab: Tab;\n presenceEntries: PresenceEntry[];\n presenceError: string | null;\n presenceStatus: StatusSummary | null;\n agentsLoading: boolean;\n agentsList: AgentsListResult | null;\n agentsError: string | null;\n debugHealth: HealthSnapshot | null;\n assistantName: string;\n assistantAvatar: string | null;\n assistantAgentId: string | null;\n sessionKey: string;\n chatRunId: string | null;\n refreshSessionsAfterChat: Set<string>;\n execApprovalQueue: ExecApprovalRequest[];\n execApprovalError: string | null;\n};\n\ntype SessionDefaultsSnapshot = {\n defaultAgentId?: string;\n mainKey?: string;\n mainSessionKey?: string;\n scope?: string;\n};\n\nfunction normalizeSessionKeyForDefaults(\n value: string | undefined,\n defaults: SessionDefaultsSnapshot,\n): string {\n const raw = (value ?? \"\").trim();\n const mainSessionKey = defaults.mainSessionKey?.trim();\n if (!mainSessionKey) return raw;\n if (!raw) return mainSessionKey;\n const mainKey = defaults.mainKey?.trim() || \"main\";\n const defaultAgentId = defaults.defaultAgentId?.trim();\n const isAlias =\n raw === \"main\" ||\n raw === mainKey ||\n (defaultAgentId &&\n (raw === `agent:${defaultAgentId}:main` || raw === `agent:${defaultAgentId}:${mainKey}`));\n return isAlias ? mainSessionKey : raw;\n}\n\nfunction applySessionDefaults(host: GatewayHost, defaults?: SessionDefaultsSnapshot) {\n if (!defaults?.mainSessionKey) return;\n const resolvedSessionKey = normalizeSessionKeyForDefaults(host.sessionKey, defaults);\n const resolvedSettingsSessionKey = normalizeSessionKeyForDefaults(\n host.settings.sessionKey,\n defaults,\n );\n const resolvedLastActiveSessionKey = normalizeSessionKeyForDefaults(\n host.settings.lastActiveSessionKey,\n defaults,\n );\n const nextSessionKey = resolvedSessionKey || resolvedSettingsSessionKey || host.sessionKey;\n const nextSettings = {\n ...host.settings,\n sessionKey: resolvedSettingsSessionKey || nextSessionKey,\n lastActiveSessionKey: resolvedLastActiveSessionKey || nextSessionKey,\n };\n const shouldUpdateSettings =\n nextSettings.sessionKey !== host.settings.sessionKey ||\n nextSettings.lastActiveSessionKey !== host.settings.lastActiveSessionKey;\n if (nextSessionKey !== host.sessionKey) {\n host.sessionKey = nextSessionKey;\n }\n if (shouldUpdateSettings) {\n applySettings(host as unknown as Parameters<typeof applySettings>[0], nextSettings);\n }\n}\n\nexport function connectGateway(host: GatewayHost) {\n host.lastError = null;\n host.hello = null;\n host.connected = false;\n host.execApprovalQueue = [];\n host.execApprovalError = null;\n\n host.client?.stop();\n host.client = new GatewayBrowserClient({\n url: host.settings.gatewayUrl,\n token: host.settings.token.trim() ? host.settings.token : undefined,\n password: host.password.trim() ? host.password : undefined,\n clientName: \"openclaw-control-ui\",\n mode: \"webchat\",\n onHello: (hello) => {\n host.connected = true;\n host.lastError = null;\n host.hello = hello;\n applySnapshot(host, hello);\n // Reset orphaned chat run state from before disconnect.\n // Any in-flight run's final event was lost during the disconnect window.\n host.chatRunId = null;\n (host as unknown as { chatStream: string | null }).chatStream = null;\n (host as unknown as { chatStreamStartedAt: number | null }).chatStreamStartedAt = null;\n resetToolStream(host as unknown as Parameters<typeof resetToolStream>[0]);\n void loadAssistantIdentity(host as unknown as OpenClawApp);\n void loadAgents(host as unknown as OpenClawApp);\n void loadNodes(host as unknown as OpenClawApp, { quiet: true });\n void loadDevices(host as unknown as OpenClawApp, { quiet: true });\n void refreshActiveTab(host as unknown as Parameters<typeof refreshActiveTab>[0]);\n },\n onClose: ({ code, reason }) => {\n host.connected = false;\n // Code 1012 = Service Restart (expected during config saves, don't show as error)\n if (code !== 1012) {\n host.lastError = `disconnected (${code}): ${reason || \"no reason\"}`;\n }\n },\n onEvent: (evt) => handleGatewayEvent(host, evt),\n onGap: ({ expected, received }) => {\n host.lastError = `event gap detected (expected seq ${expected}, got ${received}); refresh recommended`;\n },\n });\n host.client.start();\n}\n\nexport function handleGatewayEvent(host: GatewayHost, evt: GatewayEventFrame) {\n try {\n handleGatewayEventUnsafe(host, evt);\n } catch (err) {\n console.error(\"[gateway] handleGatewayEvent error:\", evt.event, err);\n }\n}\n\nfunction handleGatewayEventUnsafe(host: GatewayHost, evt: GatewayEventFrame) {\n host.eventLogBuffer = [\n { ts: Date.now(), event: evt.event, payload: evt.payload },\n ...host.eventLogBuffer,\n ].slice(0, 250);\n if (host.tab === \"debug\") {\n host.eventLog = host.eventLogBuffer;\n }\n\n if (evt.event === \"agent\") {\n if (host.onboarding) return;\n handleAgentEvent(\n host as unknown as Parameters<typeof handleAgentEvent>[0],\n evt.payload as AgentEventPayload | undefined,\n );\n return;\n }\n\n if (evt.event === \"chat\") {\n const payload = evt.payload as ChatEventPayload | undefined;\n if (payload?.sessionKey) {\n setLastActiveSessionKey(\n host as unknown as Parameters<typeof setLastActiveSessionKey>[0],\n payload.sessionKey,\n );\n }\n const state = handleChatEvent(host as unknown as OpenClawApp, payload);\n if (state === \"final\" || state === \"error\" || state === \"aborted\") {\n resetToolStream(host as unknown as Parameters<typeof resetToolStream>[0]);\n void flushChatQueueForEvent(host as unknown as Parameters<typeof flushChatQueueForEvent>[0]);\n const runId = payload?.runId;\n if (runId && host.refreshSessionsAfterChat.has(runId)) {\n host.refreshSessionsAfterChat.delete(runId);\n if (state === \"final\") {\n void loadSessions(host as unknown as OpenClawApp, {\n activeMinutes: CHAT_SESSIONS_ACTIVE_MINUTES,\n });\n }\n }\n }\n if (state === \"final\") void loadChatHistory(host as unknown as OpenClawApp);\n return;\n }\n\n if (evt.event === \"presence\") {\n const payload = evt.payload as { presence?: PresenceEntry[] } | undefined;\n if (payload?.presence && Array.isArray(payload.presence)) {\n host.presenceEntries = payload.presence;\n host.presenceError = null;\n host.presenceStatus = null;\n }\n return;\n }\n\n if (evt.event === \"cron\" && host.tab === \"cron\") {\n void loadCron(host as unknown as Parameters<typeof loadCron>[0]);\n }\n\n if (evt.event === \"device.pair.requested\" || evt.event === \"device.pair.resolved\") {\n void loadDevices(host as unknown as OpenClawApp, { quiet: true });\n }\n\n if (evt.event === \"exec.approval.requested\") {\n const entry = parseExecApprovalRequested(evt.payload);\n if (entry) {\n host.execApprovalQueue = addExecApproval(host.execApprovalQueue, entry);\n host.execApprovalError = null;\n const delay = Math.max(0, entry.expiresAtMs - Date.now() + 500);\n window.setTimeout(() => {\n host.execApprovalQueue = removeExecApproval(host.execApprovalQueue, entry.id);\n }, delay);\n }\n return;\n }\n\n if (evt.event === \"exec.approval.resolved\") {\n const resolved = parseExecApprovalResolved(evt.payload);\n if (resolved) {\n host.execApprovalQueue = removeExecApproval(host.execApprovalQueue, resolved.id);\n }\n }\n}\n\nexport function applySnapshot(host: GatewayHost, hello: GatewayHelloOk) {\n const snapshot = hello.snapshot as\n | {\n presence?: PresenceEntry[];\n health?: HealthSnapshot;\n sessionDefaults?: SessionDefaultsSnapshot;\n }\n | undefined;\n if (snapshot?.presence && Array.isArray(snapshot.presence)) {\n host.presenceEntries = snapshot.presence;\n }\n if (snapshot?.health) {\n host.debugHealth = snapshot.health;\n }\n if (snapshot?.sessionDefaults) {\n applySessionDefaults(host, snapshot.sessionDefaults);\n }\n}\n","import type { Tab } from \"./navigation\";\nimport { connectGateway } from \"./app-gateway\";\nimport {\n applySettingsFromUrl,\n attachThemeListener,\n detachThemeListener,\n inferBasePath,\n syncTabWithLocation,\n syncThemeWithSettings,\n} from \"./app-settings\";\nimport { observeTopbar, scheduleChatScroll, scheduleLogsScroll } from \"./app-scroll\";\nimport {\n startLogsPolling,\n startNodesPolling,\n stopLogsPolling,\n stopNodesPolling,\n startDebugPolling,\n stopDebugPolling,\n} from \"./app-polling\";\n\ntype LifecycleHost = {\n basePath: string;\n tab: Tab;\n chatHasAutoScrolled: boolean;\n chatLoading: boolean;\n chatMessages: unknown[];\n chatToolMessages: unknown[];\n chatStream: string;\n logsAutoFollow: boolean;\n logsAtBottom: boolean;\n logsEntries: unknown[];\n popStateHandler: () => void;\n topbarObserver: ResizeObserver | null;\n};\n\nexport function handleConnected(host: LifecycleHost) {\n host.basePath = inferBasePath();\n applySettingsFromUrl(host as unknown as Parameters<typeof applySettingsFromUrl>[0]);\n syncTabWithLocation(host as unknown as Parameters<typeof syncTabWithLocation>[0], true);\n syncThemeWithSettings(host as unknown as Parameters<typeof syncThemeWithSettings>[0]);\n attachThemeListener(host as unknown as Parameters<typeof attachThemeListener>[0]);\n window.addEventListener(\"popstate\", host.popStateHandler);\n connectGateway(host as unknown as Parameters<typeof connectGateway>[0]);\n startNodesPolling(host as unknown as Parameters<typeof startNodesPolling>[0]);\n if (host.tab === \"logs\") {\n startLogsPolling(host as unknown as Parameters<typeof startLogsPolling>[0]);\n }\n if (host.tab === \"debug\") {\n startDebugPolling(host as unknown as Parameters<typeof startDebugPolling>[0]);\n }\n}\n\nexport function handleFirstUpdated(host: LifecycleHost) {\n observeTopbar(host as unknown as Parameters<typeof observeTopbar>[0]);\n}\n\nexport function handleDisconnected(host: LifecycleHost) {\n window.removeEventListener(\"popstate\", host.popStateHandler);\n stopNodesPolling(host as unknown as Parameters<typeof stopNodesPolling>[0]);\n stopLogsPolling(host as unknown as Parameters<typeof stopLogsPolling>[0]);\n stopDebugPolling(host as unknown as Parameters<typeof stopDebugPolling>[0]);\n detachThemeListener(host as unknown as Parameters<typeof detachThemeListener>[0]);\n host.topbarObserver?.disconnect();\n host.topbarObserver = null;\n}\n\nexport function handleUpdated(host: LifecycleHost, changed: Map<PropertyKey, unknown>) {\n if (\n host.tab === \"chat\" &&\n (changed.has(\"chatMessages\") ||\n changed.has(\"chatToolMessages\") ||\n changed.has(\"chatStream\") ||\n changed.has(\"chatLoading\") ||\n changed.has(\"tab\"))\n ) {\n const forcedByTab = changed.has(\"tab\");\n const forcedByLoad =\n changed.has(\"chatLoading\") &&\n changed.get(\"chatLoading\") === true &&\n host.chatLoading === false;\n scheduleChatScroll(\n host as unknown as Parameters<typeof scheduleChatScroll>[0],\n forcedByTab || forcedByLoad || !host.chatHasAutoScrolled,\n );\n }\n if (\n host.tab === \"logs\" &&\n (changed.has(\"logsEntries\") || changed.has(\"logsAutoFollow\") || changed.has(\"tab\"))\n ) {\n if (host.logsAutoFollow && host.logsAtBottom) {\n scheduleLogsScroll(\n host as unknown as Parameters<typeof scheduleLogsScroll>[0],\n changed.has(\"tab\") || changed.has(\"logsAutoFollow\"),\n );\n }\n }\n}\n","import {\n loadChannels,\n logoutWhatsApp,\n startWhatsAppLogin,\n waitWhatsAppLogin,\n} from \"./controllers/channels\";\nimport { loadConfig, saveConfig } from \"./controllers/config\";\nimport type { OpenClawApp } from \"./app\";\nimport type { NostrProfile } from \"./types\";\nimport { createNostrProfileFormState } from \"./views/channels.nostr-profile-form\";\n\nexport async function handleWhatsAppStart(host: OpenClawApp, force: boolean) {\n await startWhatsAppLogin(host, force);\n await loadChannels(host, true);\n}\n\nexport async function handleWhatsAppWait(host: OpenClawApp) {\n await waitWhatsAppLogin(host);\n await loadChannels(host, true);\n}\n\nexport async function handleWhatsAppLogout(host: OpenClawApp) {\n await logoutWhatsApp(host);\n await loadChannels(host, true);\n}\n\nexport async function handleChannelConfigSave(host: OpenClawApp) {\n await saveConfig(host);\n await loadConfig(host);\n await loadChannels(host, true);\n}\n\nexport async function handleChannelConfigReload(host: OpenClawApp) {\n await loadConfig(host);\n await loadChannels(host, true);\n}\n\nfunction parseValidationErrors(details: unknown): Record<string, string> {\n if (!Array.isArray(details)) return {};\n const errors: Record<string, string> = {};\n for (const entry of details) {\n if (typeof entry !== \"string\") continue;\n const [rawField, ...rest] = entry.split(\":\");\n if (!rawField || rest.length === 0) continue;\n const field = rawField.trim();\n const message = rest.join(\":\").trim();\n if (field && message) errors[field] = message;\n }\n return errors;\n}\n\nfunction resolveNostrAccountId(host: OpenClawApp): string {\n const accounts = host.channelsSnapshot?.channelAccounts?.nostr ?? [];\n return accounts[0]?.accountId ?? host.nostrProfileAccountId ?? \"default\";\n}\n\nfunction buildNostrProfileUrl(accountId: string, suffix = \"\"): string {\n return `/api/channels/nostr/${encodeURIComponent(accountId)}/profile${suffix}`;\n}\n\nexport function handleNostrProfileEdit(\n host: OpenClawApp,\n accountId: string,\n profile: NostrProfile | null,\n) {\n host.nostrProfileAccountId = accountId;\n host.nostrProfileFormState = createNostrProfileFormState(profile ?? undefined);\n}\n\nexport function handleNostrProfileCancel(host: OpenClawApp) {\n host.nostrProfileFormState = null;\n host.nostrProfileAccountId = null;\n}\n\nexport function handleNostrProfileFieldChange(\n host: OpenClawApp,\n field: keyof NostrProfile,\n value: string,\n) {\n const state = host.nostrProfileFormState;\n if (!state) return;\n host.nostrProfileFormState = {\n ...state,\n values: {\n ...state.values,\n [field]: value,\n },\n fieldErrors: {\n ...state.fieldErrors,\n [field]: \"\",\n },\n };\n}\n\nexport function handleNostrProfileToggleAdvanced(host: OpenClawApp) {\n const state = host.nostrProfileFormState;\n if (!state) return;\n host.nostrProfileFormState = {\n ...state,\n showAdvanced: !state.showAdvanced,\n };\n}\n\nexport async function handleNostrProfileSave(host: OpenClawApp) {\n const state = host.nostrProfileFormState;\n if (!state || state.saving) return;\n const accountId = resolveNostrAccountId(host);\n\n host.nostrProfileFormState = {\n ...state,\n saving: true,\n error: null,\n success: null,\n fieldErrors: {},\n };\n\n try {\n const response = await fetch(buildNostrProfileUrl(accountId), {\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(state.values),\n });\n const data = (await response.json().catch(() => null)) as {\n ok?: boolean;\n error?: string;\n details?: unknown;\n persisted?: boolean;\n } | null;\n\n if (!response.ok || data?.ok === false || !data) {\n const errorMessage = data?.error ?? `Profile update failed (${response.status})`;\n host.nostrProfileFormState = {\n ...state,\n saving: false,\n error: errorMessage,\n success: null,\n fieldErrors: parseValidationErrors(data?.details),\n };\n return;\n }\n\n if (!data.persisted) {\n host.nostrProfileFormState = {\n ...state,\n saving: false,\n error: \"Profile publish failed on all relays.\",\n success: null,\n };\n return;\n }\n\n host.nostrProfileFormState = {\n ...state,\n saving: false,\n error: null,\n success: \"Profile published to relays.\",\n fieldErrors: {},\n original: { ...state.values },\n };\n await loadChannels(host, true);\n } catch (err) {\n host.nostrProfileFormState = {\n ...state,\n saving: false,\n error: `Profile update failed: ${String(err)}`,\n success: null,\n };\n }\n}\n\nexport async function handleNostrProfileImport(host: OpenClawApp) {\n const state = host.nostrProfileFormState;\n if (!state || state.importing) return;\n const accountId = resolveNostrAccountId(host);\n\n host.nostrProfileFormState = {\n ...state,\n importing: true,\n error: null,\n success: null,\n };\n\n try {\n const response = await fetch(buildNostrProfileUrl(accountId, \"/import\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ autoMerge: true }),\n });\n const data = (await response.json().catch(() => null)) as {\n ok?: boolean;\n error?: string;\n imported?: NostrProfile;\n merged?: NostrProfile;\n saved?: boolean;\n } | null;\n\n if (!response.ok || data?.ok === false || !data) {\n const errorMessage = data?.error ?? `Profile import failed (${response.status})`;\n host.nostrProfileFormState = {\n ...state,\n importing: false,\n error: errorMessage,\n success: null,\n };\n return;\n }\n\n const merged = data.merged ?? data.imported ?? null;\n const nextValues = merged ? { ...state.values, ...merged } : state.values;\n const showAdvanced = Boolean(\n nextValues.banner || nextValues.website || nextValues.nip05 || nextValues.lud16,\n );\n\n host.nostrProfileFormState = {\n ...state,\n importing: false,\n values: nextValues,\n error: null,\n success: data.saved\n ? \"Profile imported from relays. Review and publish.\"\n : \"Profile imported. Review and publish.\",\n showAdvanced,\n };\n\n if (data.saved) {\n await loadChannels(host, true);\n }\n } catch (err) {\n host.nostrProfileFormState = {\n ...state,\n importing: false,\n error: `Profile import failed: ${String(err)}`,\n success: null,\n };\n }\n}\n","import { LitElement, html, nothing } from \"lit\";\nimport { customElement, state } from \"lit/decorators.js\";\n\nimport type { GatewayBrowserClient, GatewayHelloOk } from \"./gateway\";\nimport { resolveInjectedAssistantIdentity } from \"./assistant-identity\";\nimport { loadSettings, type UiSettings } from \"./storage\";\nimport { renderApp } from \"./app-render\";\nimport type { Tab } from \"./navigation\";\nimport type { ResolvedTheme, ThemeMode } from \"./theme\";\nimport type {\n AgentsListResult,\n ConfigSnapshot,\n ConfigUiHints,\n CronJob,\n CronRunLogEntry,\n CronStatus,\n HealthSnapshot,\n LogEntry,\n LogLevel,\n PresenceEntry,\n ChannelsStatusSnapshot,\n SessionsListResult,\n SkillStatusReport,\n StatusSummary,\n NostrProfile,\n} from \"./types\";\nimport { type ChatAttachment, type ChatQueueItem, type CronFormState } from \"./ui-types\";\nimport type { EventLogEntry } from \"./app-events\";\nimport { DEFAULT_CRON_FORM, DEFAULT_LOG_LEVEL_FILTERS } from \"./app-defaults\";\nimport type { ExecApprovalsFile, ExecApprovalsSnapshot } from \"./controllers/exec-approvals\";\nimport type { DevicePairingList } from \"./controllers/devices\";\nimport type { ExecApprovalRequest } from \"./controllers/exec-approval\";\nimport {\n resetToolStream as resetToolStreamInternal,\n type ToolStreamEntry,\n} from \"./app-tool-stream\";\nimport {\n exportLogs as exportLogsInternal,\n handleChatScroll as handleChatScrollInternal,\n handleLogsScroll as handleLogsScrollInternal,\n resetChatScroll as resetChatScrollInternal,\n} from \"./app-scroll\";\nimport { connectGateway as connectGatewayInternal } from \"./app-gateway\";\nimport {\n handleConnected,\n handleDisconnected,\n handleFirstUpdated,\n handleUpdated,\n} from \"./app-lifecycle\";\nimport {\n applySettings as applySettingsInternal,\n loadCron as loadCronInternal,\n loadOverview as loadOverviewInternal,\n setTab as setTabInternal,\n setTheme as setThemeInternal,\n onPopState as onPopStateInternal,\n} from \"./app-settings\";\nimport {\n handleAbortChat as handleAbortChatInternal,\n handleSendChat as handleSendChatInternal,\n removeQueuedMessage as removeQueuedMessageInternal,\n} from \"./app-chat\";\nimport {\n handleChannelConfigReload as handleChannelConfigReloadInternal,\n handleChannelConfigSave as handleChannelConfigSaveInternal,\n handleNostrProfileCancel as handleNostrProfileCancelInternal,\n handleNostrProfileEdit as handleNostrProfileEditInternal,\n handleNostrProfileFieldChange as handleNostrProfileFieldChangeInternal,\n handleNostrProfileImport as handleNostrProfileImportInternal,\n handleNostrProfileSave as handleNostrProfileSaveInternal,\n handleNostrProfileToggleAdvanced as handleNostrProfileToggleAdvancedInternal,\n handleWhatsAppLogout as handleWhatsAppLogoutInternal,\n handleWhatsAppStart as handleWhatsAppStartInternal,\n handleWhatsAppWait as handleWhatsAppWaitInternal,\n} from \"./app-channels\";\nimport type { NostrProfileFormState } from \"./views/channels.nostr-profile-form\";\nimport { loadAssistantIdentity as loadAssistantIdentityInternal } from \"./controllers/assistant-identity\";\n\ndeclare global {\n interface Window {\n __OPENCLAW_CONTROL_UI_BASE_PATH__?: string;\n }\n}\n\nconst injectedAssistantIdentity = resolveInjectedAssistantIdentity();\n\nfunction resolveOnboardingMode(): boolean {\n if (!window.location.search) return false;\n const params = new URLSearchParams(window.location.search);\n const raw = params.get(\"onboarding\");\n if (!raw) return false;\n const normalized = raw.trim().toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\";\n}\n\n@customElement(\"openclaw-app\")\nexport class OpenClawApp extends LitElement {\n @state() settings: UiSettings = loadSettings();\n @state() password = \"\";\n @state() tab: Tab = \"chat\";\n @state() onboarding = resolveOnboardingMode();\n @state() connected = false;\n @state() theme: ThemeMode = this.settings.theme ?? \"system\";\n @state() themeResolved: ResolvedTheme = \"dark\";\n @state() hello: GatewayHelloOk | null = null;\n @state() lastError: string | null = null;\n @state() eventLog: EventLogEntry[] = [];\n private eventLogBuffer: EventLogEntry[] = [];\n private toolStreamSyncTimer: number | null = null;\n private sidebarCloseTimer: number | null = null;\n\n @state() assistantName = injectedAssistantIdentity.name;\n @state() assistantAvatar = injectedAssistantIdentity.avatar;\n @state() assistantAgentId = injectedAssistantIdentity.agentId ?? null;\n\n @state() sessionKey = this.settings.sessionKey;\n @state() chatLoading = false;\n @state() chatSending = false;\n @state() chatMessage = \"\";\n @state() chatMessages: unknown[] = [];\n @state() chatToolMessages: unknown[] = [];\n @state() chatStream: string | null = null;\n @state() chatStreamStartedAt: number | null = null;\n @state() chatRunId: string | null = null;\n @state() compactionStatus: import(\"./app-tool-stream\").CompactionStatus | null = null;\n @state() chatAvatarUrl: string | null = null;\n @state() chatThinkingLevel: string | null = null;\n @state() chatQueue: ChatQueueItem[] = [];\n @state() chatAttachments: ChatAttachment[] = [];\n // Sidebar state for tool output viewing\n @state() sidebarOpen = false;\n @state() sidebarContent: string | null = null;\n @state() sidebarError: string | null = null;\n @state() splitRatio = this.settings.splitRatio;\n\n @state() nodesLoading = false;\n @state() nodes: Array<Record<string, unknown>> = [];\n @state() devicesLoading = false;\n @state() devicesError: string | null = null;\n @state() devicesList: DevicePairingList | null = null;\n @state() execApprovalsLoading = false;\n @state() execApprovalsSaving = false;\n @state() execApprovalsDirty = false;\n @state() execApprovalsSnapshot: ExecApprovalsSnapshot | null = null;\n @state() execApprovalsForm: ExecApprovalsFile | null = null;\n @state() execApprovalsSelectedAgent: string | null = null;\n @state() execApprovalsTarget: \"gateway\" | \"node\" = \"gateway\";\n @state() execApprovalsTargetNodeId: string | null = null;\n @state() execApprovalQueue: ExecApprovalRequest[] = [];\n @state() execApprovalBusy = false;\n @state() execApprovalError: string | null = null;\n @state() pendingGatewayUrl: string | null = null;\n\n @state() configLoading = false;\n @state() configRaw = \"{\\n}\\n\";\n @state() configRawOriginal = \"\";\n @state() configValid: boolean | null = null;\n @state() configIssues: unknown[] = [];\n @state() configSaving = false;\n @state() configApplying = false;\n @state() updateRunning = false;\n @state() applySessionKey = this.settings.lastActiveSessionKey;\n @state() configSnapshot: ConfigSnapshot | null = null;\n @state() configSchema: unknown | null = null;\n @state() configSchemaVersion: string | null = null;\n @state() configSchemaLoading = false;\n @state() configUiHints: ConfigUiHints = {};\n @state() configForm: Record<string, unknown> | null = null;\n @state() configFormOriginal: Record<string, unknown> | null = null;\n @state() configFormDirty = false;\n @state() configFormMode: \"form\" | \"raw\" = \"form\";\n @state() configSearchQuery = \"\";\n @state() configActiveSection: string | null = null;\n @state() configActiveSubsection: string | null = null;\n\n @state() channelsLoading = false;\n @state() channelsSnapshot: ChannelsStatusSnapshot | null = null;\n @state() channelsError: string | null = null;\n @state() channelsLastSuccess: number | null = null;\n @state() whatsappLoginMessage: string | null = null;\n @state() whatsappLoginQrDataUrl: string | null = null;\n @state() whatsappLoginConnected: boolean | null = null;\n @state() whatsappBusy = false;\n @state() nostrProfileFormState: NostrProfileFormState | null = null;\n @state() nostrProfileAccountId: string | null = null;\n\n @state() presenceLoading = false;\n @state() presenceEntries: PresenceEntry[] = [];\n @state() presenceError: string | null = null;\n @state() presenceStatus: string | null = null;\n\n @state() agentsLoading = false;\n @state() agentsList: AgentsListResult | null = null;\n @state() agentsError: string | null = null;\n\n @state() sessionsLoading = false;\n @state() sessionsResult: SessionsListResult | null = null;\n @state() sessionsError: string | null = null;\n @state() sessionsFilterActive = \"\";\n @state() sessionsFilterLimit = \"120\";\n @state() sessionsIncludeGlobal = true;\n @state() sessionsIncludeUnknown = false;\n\n @state() cronLoading = false;\n @state() cronJobs: CronJob[] = [];\n @state() cronStatus: CronStatus | null = null;\n @state() cronError: string | null = null;\n @state() cronForm: CronFormState = { ...DEFAULT_CRON_FORM };\n @state() cronRunsJobId: string | null = null;\n @state() cronRuns: CronRunLogEntry[] = [];\n @state() cronBusy = false;\n\n @state() skillsLoading = false;\n @state() skillsReport: SkillStatusReport | null = null;\n @state() skillsError: string | null = null;\n @state() skillsFilter = \"\";\n @state() skillEdits: Record<string, string> = {};\n @state() skillsBusyKey: string | null = null;\n @state() skillMessages: Record<string, SkillMessage> = {};\n\n @state() debugLoading = false;\n @state() debugStatus: StatusSummary | null = null;\n @state() debugHealth: HealthSnapshot | null = null;\n @state() debugModels: unknown[] = [];\n @state() debugHeartbeat: unknown | null = null;\n @state() debugCallMethod = \"\";\n @state() debugCallParams = \"{}\";\n @state() debugCallResult: string | null = null;\n @state() debugCallError: string | null = null;\n\n @state() logsLoading = false;\n @state() logsError: string | null = null;\n @state() logsFile: string | null = null;\n @state() logsEntries: LogEntry[] = [];\n @state() logsFilterText = \"\";\n @state() logsLevelFilters: Record<LogLevel, boolean> = {\n ...DEFAULT_LOG_LEVEL_FILTERS,\n };\n @state() logsAutoFollow = true;\n @state() logsTruncated = false;\n @state() logsCursor: number | null = null;\n @state() logsLastFetchAt: number | null = null;\n @state() logsLimit = 500;\n @state() logsMaxBytes = 250_000;\n @state() logsAtBottom = true;\n\n client: GatewayBrowserClient | null = null;\n private chatScrollFrame: number | null = null;\n private chatScrollTimeout: number | null = null;\n private chatHasAutoScrolled = false;\n private chatUserNearBottom = true;\n private nodesPollInterval: number | null = null;\n private logsPollInterval: number | null = null;\n private debugPollInterval: number | null = null;\n private logsScrollFrame: number | null = null;\n private toolStreamById = new Map<string, ToolStreamEntry>();\n private toolStreamOrder: string[] = [];\n refreshSessionsAfterChat = new Set<string>();\n basePath = \"\";\n private popStateHandler = () =>\n onPopStateInternal(this as unknown as Parameters<typeof onPopStateInternal>[0]);\n private themeMedia: MediaQueryList | null = null;\n private themeMediaHandler: ((event: MediaQueryListEvent) => void) | null = null;\n private topbarObserver: ResizeObserver | null = null;\n\n createRenderRoot() {\n return this;\n }\n\n connectedCallback() {\n super.connectedCallback();\n handleConnected(this as unknown as Parameters<typeof handleConnected>[0]);\n }\n\n protected firstUpdated() {\n handleFirstUpdated(this as unknown as Parameters<typeof handleFirstUpdated>[0]);\n }\n\n disconnectedCallback() {\n handleDisconnected(this as unknown as Parameters<typeof handleDisconnected>[0]);\n super.disconnectedCallback();\n }\n\n protected updated(changed: Map<PropertyKey, unknown>) {\n handleUpdated(this as unknown as Parameters<typeof handleUpdated>[0], changed);\n }\n\n connect() {\n connectGatewayInternal(this as unknown as Parameters<typeof connectGatewayInternal>[0]);\n }\n\n handleChatScroll(event: Event) {\n handleChatScrollInternal(\n this as unknown as Parameters<typeof handleChatScrollInternal>[0],\n event,\n );\n }\n\n handleLogsScroll(event: Event) {\n handleLogsScrollInternal(\n this as unknown as Parameters<typeof handleLogsScrollInternal>[0],\n event,\n );\n }\n\n exportLogs(lines: string[], label: string) {\n exportLogsInternal(lines, label);\n }\n\n resetToolStream() {\n resetToolStreamInternal(this as unknown as Parameters<typeof resetToolStreamInternal>[0]);\n }\n\n resetChatScroll() {\n resetChatScrollInternal(this as unknown as Parameters<typeof resetChatScrollInternal>[0]);\n }\n\n async loadAssistantIdentity() {\n await loadAssistantIdentityInternal(this);\n }\n\n applySettings(next: UiSettings) {\n applySettingsInternal(this as unknown as Parameters<typeof applySettingsInternal>[0], next);\n }\n\n setTab(next: Tab) {\n setTabInternal(this as unknown as Parameters<typeof setTabInternal>[0], next);\n }\n\n setTheme(next: ThemeMode, context?: Parameters<typeof setThemeInternal>[2]) {\n setThemeInternal(this as unknown as Parameters<typeof setThemeInternal>[0], next, context);\n }\n\n async loadOverview() {\n await loadOverviewInternal(this as unknown as Parameters<typeof loadOverviewInternal>[0]);\n }\n\n async loadCron() {\n await loadCronInternal(this as unknown as Parameters<typeof loadCronInternal>[0]);\n }\n\n async handleAbortChat() {\n await handleAbortChatInternal(this as unknown as Parameters<typeof handleAbortChatInternal>[0]);\n }\n\n removeQueuedMessage(id: string) {\n removeQueuedMessageInternal(\n this as unknown as Parameters<typeof removeQueuedMessageInternal>[0],\n id,\n );\n }\n\n async handleSendChat(\n messageOverride?: string,\n opts?: Parameters<typeof handleSendChatInternal>[2],\n ) {\n await handleSendChatInternal(\n this as unknown as Parameters<typeof handleSendChatInternal>[0],\n messageOverride,\n opts,\n );\n }\n\n async handleWhatsAppStart(force: boolean) {\n await handleWhatsAppStartInternal(this, force);\n }\n\n async handleWhatsAppWait() {\n await handleWhatsAppWaitInternal(this);\n }\n\n async handleWhatsAppLogout() {\n await handleWhatsAppLogoutInternal(this);\n }\n\n async handleChannelConfigSave() {\n await handleChannelConfigSaveInternal(this);\n }\n\n async handleChannelConfigReload() {\n await handleChannelConfigReloadInternal(this);\n }\n\n handleNostrProfileEdit(accountId: string, profile: NostrProfile | null) {\n handleNostrProfileEditInternal(this, accountId, profile);\n }\n\n handleNostrProfileCancel() {\n handleNostrProfileCancelInternal(this);\n }\n\n handleNostrProfileFieldChange(field: keyof NostrProfile, value: string) {\n handleNostrProfileFieldChangeInternal(this, field, value);\n }\n\n async handleNostrProfileSave() {\n await handleNostrProfileSaveInternal(this);\n }\n\n async handleNostrProfileImport() {\n await handleNostrProfileImportInternal(this);\n }\n\n handleNostrProfileToggleAdvanced() {\n handleNostrProfileToggleAdvancedInternal(this);\n }\n\n async handleExecApprovalDecision(decision: \"allow-once\" | \"allow-always\" | \"deny\") {\n const active = this.execApprovalQueue[0];\n if (!active || !this.client || this.execApprovalBusy) return;\n this.execApprovalBusy = true;\n this.execApprovalError = null;\n try {\n await this.client.request(\"exec.approval.resolve\", {\n id: active.id,\n decision,\n });\n this.execApprovalQueue = this.execApprovalQueue.filter((entry) => entry.id !== active.id);\n } catch (err) {\n this.execApprovalError = `Exec approval failed: ${String(err)}`;\n } finally {\n this.execApprovalBusy = false;\n }\n }\n\n handleGatewayUrlConfirm() {\n const nextGatewayUrl = this.pendingGatewayUrl;\n if (!nextGatewayUrl) return;\n this.pendingGatewayUrl = null;\n applySettingsInternal(this as unknown as Parameters<typeof applySettingsInternal>[0], {\n ...this.settings,\n gatewayUrl: nextGatewayUrl,\n });\n this.connect();\n }\n\n handleGatewayUrlCancel() {\n this.pendingGatewayUrl = null;\n }\n\n // Sidebar handlers for tool output viewing\n handleOpenSidebar(content: string) {\n if (this.sidebarCloseTimer != null) {\n window.clearTimeout(this.sidebarCloseTimer);\n this.sidebarCloseTimer = null;\n }\n this.sidebarContent = content;\n this.sidebarError = null;\n this.sidebarOpen = true;\n }\n\n handleCloseSidebar() {\n this.sidebarOpen = false;\n // Clear content after transition\n if (this.sidebarCloseTimer != null) {\n window.clearTimeout(this.sidebarCloseTimer);\n }\n this.sidebarCloseTimer = window.setTimeout(() => {\n if (this.sidebarOpen) return;\n this.sidebarContent = null;\n this.sidebarError = null;\n this.sidebarCloseTimer = null;\n }, 200);\n }\n\n handleSplitRatioChange(ratio: number) {\n const newRatio = Math.max(0.4, Math.min(0.7, ratio));\n this.splitRatio = newRatio;\n this.applySettings({ ...this.settings, splitRatio: newRatio });\n }\n\n render() {\n return renderApp(this);\n }\n}\n"],"names":["t","e","s","o","n$5","r","n","i","S","c","h","a","l","p","d","u","f","b","y$2","y","v","_","m","g","$","x","E","A","C","P","V","N","S$1","I","L","z","H","M","R","k","Z","I$2","Z$1","j","B","D","MAX_ASSISTANT_NAME","MAX_ASSISTANT_AVATAR","DEFAULT_ASSISTANT_NAME","coerceIdentityValue","value","maxLength","trimmed","normalizeAssistantIdentity","input","name","avatar","resolveInjectedAssistantIdentity","KEY","loadSettings","defaults","raw","parsed","saveSettings","next","parseAgentSessionKey","sessionKey","parts","agentId","rest","TAB_GROUPS","TAB_PATHS","PATH_TO_TAB","tab","path","normalizeBasePath","basePath","base","normalizePath","normalized","pathForTab","tabFromPath","pathname","inferBasePathFromPathname","segments","candidate","prefix","iconForTab","titleForTab","subtitleForTab","icons","html","QUICK_TAG_RE","FINAL_TAG_RE","THINKING_TAG_RE","findCodeRegions","text","regions","fencedRe","match","start","inlineRe","end","isInsideCode","pos","applyTrim","mode","stripReasoningTagsFromText","options","cleaned","finalMatches","preCodeRegions","codeRegions","result","lastIndex","inThinking","idx","isClose","formatMs","ms","formatAgo","diff","sec","min","hr","formatDurationMs","formatList","values","clampText","max","truncateText","toNumber","fallback","stripThinkingTags","ENVELOPE_PREFIX","ENVELOPE_CHANNELS","textCache","thinkingCache","looksLikeEnvelopeHeader","header","label","stripEnvelope","extractText","message","role","content","item","joined","extractTextCached","obj","extractThinking","rawText","extractRawText","extracted","extractThinkingCached","formatReasoningMarkdown","lines","line","warnedWeakCrypto","uuidFromBytes","bytes","hex","weakRandomBytes","now","warnWeakCryptoOnce","generateUUID","cryptoLike","loadChatHistory","state","res","err","dataUrlToBase64","dataUrl","sendChatMessage","attachments","msg","hasAttachments","contentBlocks","att","runId","apiAttachments","error","abortChatRun","handleChatEvent","payload","current","loadSessions","overrides","includeGlobal","includeUnknown","activeMinutes","limit","params","patchSession","key","patch","deleteSession","TOOL_STREAM_LIMIT","TOOL_STREAM_THROTTLE_MS","TOOL_OUTPUT_CHAR_LIMIT","extractToolOutputText","record","entry","part","formatToolOutput","contentText","truncated","buildToolStreamMessage","trimToolStream","host","overflow","removed","id","syncToolStreamMessages","flushToolStreamSync","scheduleToolStreamSync","force","resetToolStream","COMPACTION_TOAST_DURATION_MS","handleCompactionEvent","data","phase","handleAgentEvent","toolCallId","args","output","scheduleChatScroll","pickScrollTarget","container","overflowY","target","distanceFromBottom","retryDelay","latest","latestDistanceFromBottom","scheduleLogsScroll","handleChatScroll","event","handleLogsScroll","resetChatScroll","exportLogs","blob","url","anchor","stamp","observeTopbar","topbar","update","height","cloneConfigObject","serializeConfigForm","form","setPathValue","nextKey","lastKey","removePathValue","loadConfig","applyConfigSnapshot","loadConfigSchema","applyConfigSchema","snapshot","rawFromSnapshot","saveConfig","baseHash","applyConfig","runUpdate","updateConfigFormValue","removeConfigFormValue","loadCronStatus","loadCronJobs","buildCronSchedule","amount","unit","expr","buildCronPayload","timeoutSeconds","addCronJob","schedule","job","toggleCronJob","enabled","runCronJob","loadCronRuns","removeCronJob","jobId","loadChannels","probe","startWhatsAppLogin","waitWhatsAppLogin","logoutWhatsApp","loadDebug","status","health","models","heartbeat","modelPayload","callDebugMethod","LOG_BUFFER_LIMIT","LEVELS","parseMaybeJsonString","normalizeLevel","lowered","parseLogLine","meta","time","level","contextCandidate","contextObj","subsystem","loadLogs","opts","entries","shouldReset","ed25519_CURVE","Gx","Gy","_a","_d","L2","captureTrace","isBig","isStr","isBytes","abytes","length","title","len","needsLen","ofLen","got","u8n","u8fr","buf","padh","pad","bytesToHex","_ch","ch","hexToBytes","hl","al","array","ai","hi","n1","n2","cr","subtle","concatBytes","arrs","sum","randomBytes","big","assertRange","modN","invert","num","md","q","callHash","fn","hashes","apoint","Point","B256","X","Y","T","zip215","normed","lastByte","bytesToNumLE","y2","isValid","uvRatio","isXOdd","isLastByteOdd","X2","Y2","Z2","Z4","aX2","left","right","XY","ZT","other","X1","Y1","Z1","X1Z2","X2Z1","Y1Z2","Y2Z1","x1y1","G","F","X3","Y3","T3","Z3","T1","T2","safe","wNAF","scalar","iz","numTo32bLE","pow2","power","pow_2_252_3","b2","b4","b5","b10","b20","b40","b80","b160","b240","b250","RM1","v3","v7","pow","vx2","root1","root2","useRoot1","useRoot2","noRoot","modL_LE","hash","sha512a","sha512s","hash2extK","hashed","head","point","pointBytes","getExtendedPublicKeyAsync","secretKey","getExtendedPublicKey","getPublicKeyAsync","hashFinishA","_sign","rBytes","signAsync","randomSecretKey","seed","utils","W","scalarBits","pwindows","pwindowSize","precompute","points","w","Gpows","ctneg","cnd","comp","pow_2_w","maxNum","mask","shiftBy","wbits","off","offF","offP","isEven","isNeg","STORAGE_KEY","base64UrlEncode","binary","byte","base64UrlDecode","padded","out","fingerprintPublicKey","publicKey","generateIdentity","privateKey","loadOrCreateDeviceIdentity","derivedId","updated","identity","stored","signDevicePayload","privateKeyBase64Url","sig","normalizeRole","normalizeScopes","scopes","scope","readStore","writeStore","store","loadDeviceAuthToken","storeDeviceAuthToken","existing","clearDeviceAuthToken","loadDevices","approveDevicePairing","requestId","rejectDevicePairing","rotateDeviceToken","revokeDeviceToken","loadNodes","resolveExecApprovalsRpc","nodeId","resolveExecApprovalsSaveRpc","loadExecApprovals","rpc","applyExecApprovalsSnapshot","saveExecApprovals","file","updateExecApprovalsFormValue","removeExecApprovalsFormValue","loadPresence","setSkillMessage","getErrorMessage","loadSkills","updateSkillEdit","skillKey","updateSkillEnabled","saveSkillApiKey","apiKey","installSkill","installId","getSystemTheme","resolveTheme","clamp01","hasReducedMotionPreference","cleanupThemeTransition","root","startThemeTransition","nextTheme","applyTheme","context","currentTheme","documentReference","document_","prefersReducedMotion","xPercent","yPercent","rect","transition","startNodesPolling","stopNodesPolling","startLogsPolling","stopLogsPolling","startDebugPolling","stopDebugPolling","applySettings","applyResolvedTheme","setLastActiveSessionKey","applySettingsFromUrl","tokenRaw","passwordRaw","sessionRaw","gatewayUrlRaw","shouldCleanUrl","token","password","session","gatewayUrl","setTab","refreshActiveTab","syncUrlWithTab","setTheme","loadOverview","loadChannelsTab","loadCron","refreshChat","inferBasePath","configured","syncThemeWithSettings","resolved","attachThemeListener","detachThemeListener","syncTabWithLocation","replace","setTabFromRoute","onPopState","targetPath","currentPath","syncUrlWithSessionKey","CHAT_SESSIONS_ACTIVE_MINUTES","isChatBusy","isChatStopCommand","isChatResetCommand","handleAbortChat","enqueueChatMessage","refreshSessions","sendChatMessageNow","ok","flushChatQueue","removeQueuedMessage","handleSendChat","messageOverride","previousDraft","attachmentsToSend","refreshChatAvatar","flushChatQueueForEvent","resolveAgentIdForSession","buildAvatarMetaUrl","encoded","avatarUrl","normalizeMessage","hasToolId","contentRaw","contentItems","hasToolContent","hasToolName","timestamp","normalizeRoleForGrouping","lower","isToolResultMessage","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","func","thisArg","_len","_key","Func","_len2","_key2","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","_len3","_key3","_len4","_key4","addToSet","set","transformCaseFunc","element","lcElement","cleanArray","index","clone","object","newObject","property","lookupGetter","prop","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","suffix","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","window","DOMPurify","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","EXTRA_ELEMENT_HANDLING","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","parentTagName","_forceRemove","node","_removeAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","body","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","hook","_sanitizeElements","_isBasicCustomElement","parentNode","childNodes","childCount","childClone","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","me","xe","be","Re","Te","re","se","Oe","Q","we","ye","Pe","Se","ie","$e","U","te","_e","Le","Me","ze","oe","Ae","K","ae","Ce","le","Ie","Ee","Be","ue","qe","ve","pe","De","He","Ze","Ge","Ne","Qe","Fe","je","ce","he","Ue","ne","Ke","We","Xe","ke","J","de","ge","Je","O","ee","fe","marked","allowedTags","allowedAttrs","hooksInstalled","MARKDOWN_CHAR_LIMIT","MARKDOWN_PARSE_LIMIT","MARKDOWN_CACHE_LIMIT","MARKDOWN_CACHE_MAX_CHARS","markdownCache","getCachedMarkdown","cached","setCachedMarkdown","oldest","installHooks","toSanitizedMarkdownHtml","markdown","escapeHtml","sanitized","rendered","COPIED_FOR_MS","ERROR_FOR_MS","COPY_LABEL","COPIED_LABEL","ERROR_LABEL","copyTextToClipboard","setButtonLabel","button","createCopyButton","idleLabel","btn","copied","renderCopyAsMarkdownButton","TOOL_DISPLAY_CONFIG","rawConfig","FALLBACK","TOOL_MAP","normalizeToolName","defaultTitle","normalizeVerb","coerceDisplayValue","firstLine","preview","lookupValueByPath","segment","resolveDetailFromKeys","keys","display","resolveReadDetail","offset","resolveWriteDetail","resolveActionSpec","spec","action","resolveToolDisplay","icon","actionRaw","actionSpec","verb","detail","detailKeys","shortenHomeInString","formatToolDetail","TOOL_INLINE_THRESHOLD","PREVIEW_MAX_LINES","PREVIEW_MAX_CHARS","formatToolOutputForSidebar","getTruncatedPreview","allLines","extractToolCards","normalizeContent","cards","kind","coerceArgs","extractToolText","card","renderToolCardSidebar","onOpenSidebar","hasText","canClick","handleClick","info","isShort","showCollapsed","showInline","isEmpty","nothing","extractImages","images","block","source","mediaType","imageUrl","renderReadingIndicatorGroup","assistant","renderAvatar","renderStreamingGroup","startedAt","renderGroupedMessage","renderMessageGroup","group","normalizedRole","assistantName","who","roleClass","assistantAvatar","initial","className","isAvatarUrl","renderMessageImages","img","isToolResult","toolCards","hasToolCards","hasImages","extractedText","extractedThinking","markdownBase","reasoningMarkdown","canCopyMarkdown","bubbleClasses","unsafeHTML","renderMarkdownSidebar","props","ResizableDivider","LitElement","containerWidth","deltaRatio","newRatio","css","__decorateClass","customElement","adjustTextareaHeight","el","renderCompactionIndicator","generateAttachmentId","handlePaste","items","imageItems","reader","newAttachment","renderAttachmentPreview","renderChat","canCompose","isBusy","canAbort","reasoningLevel","row","showReasoning","assistantIdentity","composePlaceholder","splitRatio","sidebarOpen","thread","repeat","buildChatItems","ref","CHAT_HISTORY_RENDER_LIMIT","groupMessages","currentGroup","history","tools","historyStart","messageKey","messageId","schemaType","schema","defaultValue","pathKey","hintForPath","hints","direct","hintKey","hint","hintSegments","humanize","isSensitivePath","META_KEYS","isAnySchema","jsonValue","renderNode","unsupported","disabled","onPatch","showLabel","type","help","nonNull","extractLiteral","literals","allLiterals","resolvedValue","lit","renderSelect","primitiveTypes","variant","normalizedTypes","hasString","hasNumber","renderTextInput","opt","renderObject","renderArray","displayValue","renderNumberInput","inputType","isSensitive","placeholder","numValue","currentIndex","unset","val","sorted","orderA","orderB","reserved","additional","allowExtra","propKey","renderMapField","itemsSchema","arr","reservedKeys","anySchema","entryValue","valuePath","sectionIcons","SECTION_META","getSectionIcon","matchesSearch","query","schemaMatches","propSchema","unions","renderConfigForm","properties","searchQuery","activeSection","activeSubsection","filteredEntries","subsectionContext","sectionSchema","sectionKey","subsectionKey","description","sectionValue","scopedValue","normalizeEnum","filtered","nullable","enumValues","analyzeConfigSchema","normalizeSchemaNode","pathLabel","union","normalizeUnion","enumNullable","normalizedProps","remaining","unique","sidebarIcons","SECTIONS","ALL_SUBSECTION","resolveSectionMeta","resolveSubsections","uiHints","subKey","order","computeDiff","original","changes","compare","orig","curr","origObj","currObj","allKeys","truncateValue","maxLen","str","renderConfig","validity","analysis","formUnsafe","schemaProps","availableSections","knownKeys","extraSections","allSections","activeSectionSchema","activeSectionMeta","subsections","allowSubnav","isAllSubsection","effectiveSubsection","hasRawChanges","hasChanges","canSaveForm","canSave","canApply","canUpdate","section","change","formatDuration","channelEnabled","channels","channelStatus","running","connected","accountActive","account","getChannelAccountCount","channelAccounts","renderChannelAccountCount","count","resolveSchemaNode","resolveChannelValue","config","channelId","fromChannels","renderChannelConfigForm","configValue","renderChannelConfigSection","renderDiscordCard","discord","accountCountLabel","renderGoogleChatCard","googleChat","renderIMessageCard","imessage","isFormDirty","renderNostrProfileForm","callbacks","accountId","isDirty","renderField","field","inputId","renderPicturePreview","picture","createNostrProfileFormState","profile","truncatePubkey","pubkey","renderNostrCard","nostr","nostrAccounts","profileFormState","profileFormCallbacks","onEditProfile","primaryAccount","summaryConfigured","summaryRunning","summaryPublicKey","summaryLastStartAt","summaryLastError","hasMultipleAccounts","showingForm","renderAccountCard","displayName","renderProfileSection","about","nip05","hasAnyProfileData","renderSignalCard","signal","renderSlackCard","slack","renderTelegramCard","telegram","telegramAccounts","botUsername","renderWhatsAppCard","whatsapp","renderChannels","orderedChannels","resolveChannelOrder","channel","renderChannel","showForm","renderGenericChannelCard","resolveChannelLabel","lastError","accounts","renderGenericAccount","resolveChannelMetaMap","RECENT_ACTIVITY_THRESHOLD_MS","hasRecentActivity","deriveRunningStatus","deriveConnectedStatus","runningStatus","connectedStatus","formatPresenceSummary","ip","version","formatPresenceAge","ts","formatNextRun","formatSessionTokens","total","ctx","formatEventPayload","formatCronState","last","formatCronSchedule","formatCronPayload","buildChannelOptions","seen","renderCron","channelOptions","renderScheduleFields","renderJob","renderRun","itemClass","renderDebug","securitySummary","critical","warn","securityTone","securityLabel","evt","renderInstances","renderEntry","lastInput","roles","scopesLabel","formatTime","date","matchesFilter","needle","renderLogs","levelFiltered","exportLabel","renderNodes","bindingState","resolveBindingsState","approvalsState","resolveExecApprovalsState","renderExecApprovals","renderBindings","renderDevices","list","pending","paired","req","renderPendingDevice","device","renderPairedDevice","age","repair","tokens","renderTokenRow","deviceId","when","EXEC_APPROVALS_DEFAULT_SCOPE","SECURITY_OPTIONS","ASK_OPTIONS","nodes","resolveExecNodes","defaultBinding","agents","resolveAgentBindings","ready","normalizeSecurity","normalizeAsk","resolveExecApprovalsDefaults","resolveConfigAgents","agentsNode","isDefault","resolveExecApprovalsAgents","configAgents","approvalsAgents","merged","agent","aLabel","bLabel","resolveExecApprovalsScope","selected","targetNodes","resolveExecApprovalsNodes","targetNodeId","selectedScope","selectedAgent","allowlist","supportsBinding","renderAgentBinding","targetReady","renderExecApprovalsTarget","renderExecApprovalsTabs","renderExecApprovalsPolicy","renderExecApprovalsAllowlist","hasNodes","nodeValue","first","isDefaults","agentSecurity","agentAsk","agentAskFallback","securityValue","askValue","askFallbackValue","autoOverride","autoEffective","autoIsDefault","option","allowlistPath","renderAllowlistEntry","lastUsed","lastCommand","lastPath","bindingValue","cmd","fallbackAgent","exec","execEntry","binding","caps","commands","renderOverview","uptime","tick","authHint","hasToken","hasPassword","insecureContextHint","THINK_LEVELS","BINARY_THINK_LEVELS","VERBOSE_LEVELS","REASONING_LEVELS","normalizeProviderId","provider","isBinaryThinkingProvider","resolveThinkLevelOptions","resolveThinkLevelDisplay","isBinary","resolveThinkLevelPatchValue","renderSessions","rows","renderRow","onDelete","rawThinking","isBinaryThinking","thinking","thinkLevels","verbose","reasoning","canLink","chatUrl","formatRemaining","totalSeconds","minutes","renderMetaRow","renderExecApprovalPrompt","active","request","remainingMs","queueCount","renderGatewayUrlConfirmation","pendingGatewayUrl","renderSkills","skills","filter","skill","renderSkill","busy","canInstall","missing","reasons","renderTab","href","renderChatControls","mainSessionKey","resolveMainSessionKey","sessionOptions","resolveSessionOptions","disableThinkingToggle","disableFocusToggle","showThinking","focusActive","refreshIcon","focusIcon","hello","sessions","mainKey","resolveSessionDisplayName","resolvedMain","resolvedCurrent","THEME_ORDER","renderThemeToggle","renderMonitorIcon","renderSunIcon","renderMoonIcon","AVATAR_DATA_RE","AVATAR_HTTP_RE","resolveAssistantAvatarUrl","renderApp","presenceCount","sessionsCount","cronNext","chatDisabledReason","isChat","chatFocus","assistantAvatarUrl","chatAvatarUrl","isGroupCollapsed","hasActiveTab","agentIndex","ratio","DEFAULT_LOG_LEVEL_FILTERS","DEFAULT_CRON_FORM","loadAgents","GATEWAY_CLIENT_IDS","GATEWAY_CLIENT_NAMES","GATEWAY_CLIENT_MODES","buildDeviceAuthPayload","CONNECT_FAILED_CLOSE_CODE","GatewayBrowserClient","ev","reason","delay","isSecureContext","deviceIdentity","canFallbackToShared","authToken","storedToken","auth","signedAtMs","nonce","signature","frame","seq","method","resolve","reject","isRecord","parseExecApprovalRequested","command","createdAtMs","expiresAtMs","parseExecApprovalResolved","pruneExecApprovalQueue","queue","addExecApproval","removeExecApproval","loadAssistantIdentity","normalizeSessionKeyForDefaults","defaultAgentId","applySessionDefaults","resolvedSessionKey","resolvedSettingsSessionKey","resolvedLastActiveSessionKey","nextSessionKey","nextSettings","shouldUpdateSettings","connectGateway","applySnapshot","code","handleGatewayEvent","expected","received","handleGatewayEventUnsafe","handleConnected","handleFirstUpdated","handleDisconnected","handleUpdated","changed","forcedByTab","forcedByLoad","handleWhatsAppStart","handleWhatsAppWait","handleWhatsAppLogout","handleChannelConfigSave","handleChannelConfigReload","parseValidationErrors","details","errors","rawField","resolveNostrAccountId","buildNostrProfileUrl","handleNostrProfileEdit","handleNostrProfileCancel","handleNostrProfileFieldChange","handleNostrProfileToggleAdvanced","handleNostrProfileSave","response","errorMessage","handleNostrProfileImport","nextValues","showAdvanced","injectedAssistantIdentity","resolveOnboardingMode","OpenClawApp","onPopStateInternal","connectGatewayInternal","handleChatScrollInternal","handleLogsScrollInternal","exportLogsInternal","resetToolStreamInternal","resetChatScrollInternal","loadAssistantIdentityInternal","applySettingsInternal","setTabInternal","setThemeInternal","loadOverviewInternal","loadCronInternal","handleAbortChatInternal","removeQueuedMessageInternal","handleSendChatInternal","handleWhatsAppStartInternal","handleWhatsAppWaitInternal","handleWhatsAppLogoutInternal","handleChannelConfigSaveInternal","handleChannelConfigReloadInternal","handleNostrProfileEditInternal","handleNostrProfileCancelInternal","handleNostrProfileFieldChangeInternal","handleNostrProfileSaveInternal","handleNostrProfileImportInternal","handleNostrProfileToggleAdvancedInternal","decision","nextGatewayUrl"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,26,39,40,41,42,43,45,46,47]}