@juspay/shooter 1.21.0 → 1.23.0

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 (221) hide show
  1. package/.claude/hooks/notifier.cjs +94 -1
  2. package/build/client/_app/immutable/assets/2.JWRrnR-w.css +1 -0
  3. package/build/client/_app/immutable/assets/2.JWRrnR-w.css.br +0 -0
  4. package/build/client/_app/immutable/assets/2.JWRrnR-w.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{DOEXXmsh.js → Bj5wFimK.js} +2 -2
  6. package/build/client/_app/immutable/chunks/Bj5wFimK.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/Bj5wFimK.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{EqMAkEha.js → BjYr_-Ss.js} +1 -1
  9. package/build/client/_app/immutable/chunks/BjYr_-Ss.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/BjYr_-Ss.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/C4Hns_Wl.js +1 -0
  12. package/build/client/_app/immutable/chunks/C4Hns_Wl.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/C4Hns_Wl.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/DULfdsh6.js +6 -0
  15. package/build/client/_app/immutable/chunks/DULfdsh6.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/DULfdsh6.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{BmfLecb1.js → fcNfTA-E.js} +1 -1
  18. package/build/client/_app/immutable/chunks/fcNfTA-E.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/fcNfTA-E.js.gz +0 -0
  20. package/build/client/_app/immutable/entry/{app.CeSxgGat.js → app.Bvoqymnp.js} +2 -2
  21. package/build/client/_app/immutable/entry/app.Bvoqymnp.js.br +0 -0
  22. package/build/client/_app/immutable/entry/app.Bvoqymnp.js.gz +0 -0
  23. package/build/client/_app/immutable/entry/start.BqXCPPZJ.js +1 -0
  24. package/build/client/_app/immutable/entry/start.BqXCPPZJ.js.br +2 -0
  25. package/build/client/_app/immutable/entry/start.BqXCPPZJ.js.gz +0 -0
  26. package/build/client/_app/immutable/nodes/{0.oaPwxh1O.js → 0.Bv_TwEnq.js} +1 -1
  27. package/build/client/_app/immutable/nodes/0.Bv_TwEnq.js.br +0 -0
  28. package/build/client/_app/immutable/nodes/0.Bv_TwEnq.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{1.DMPyoM-M.js → 1.7lffTIeb.js} +1 -1
  30. package/build/client/_app/immutable/nodes/1.7lffTIeb.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/1.7lffTIeb.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{10.Cbm7nQKK.js → 10.ChiIrIDl.js} +1 -1
  33. package/build/client/_app/immutable/nodes/10.ChiIrIDl.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/10.ChiIrIDl.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{11.CKmZjP_a.js → 11.DO3vyXEv.js} +2 -2
  36. package/build/client/_app/immutable/nodes/11.DO3vyXEv.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/{11.CKmZjP_a.js.gz → 11.DO3vyXEv.js.gz} +0 -0
  38. package/build/client/_app/immutable/nodes/2.iMIqsE7n.js +23 -0
  39. package/build/client/_app/immutable/nodes/2.iMIqsE7n.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/2.iMIqsE7n.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{3.BgLpGnzb.js → 3.CArnSHOO.js} +1 -1
  42. package/build/client/_app/immutable/nodes/3.CArnSHOO.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/3.CArnSHOO.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{5.Avc1-gVb.js → 5.DziEu9rx.js} +1 -1
  45. package/build/client/_app/immutable/nodes/5.DziEu9rx.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/5.DziEu9rx.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{6.Dw2wEssJ.js → 6.B8l1RwkB.js} +1 -1
  48. package/build/client/_app/immutable/nodes/6.B8l1RwkB.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/6.B8l1RwkB.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{7.DwKZjoBg.js → 7.BPyfhDis.js} +1 -1
  51. package/build/client/_app/immutable/nodes/7.BPyfhDis.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/7.BPyfhDis.js.gz +0 -0
  53. package/build/client/_app/immutable/nodes/{8.ZUAI6g5E.js → 8.D_vszZ9E.js} +1 -1
  54. package/build/client/_app/immutable/nodes/8.D_vszZ9E.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/8.D_vszZ9E.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/{9.I_KGXPwB.js → 9.Drah-do-.js} +1 -1
  57. package/build/client/_app/immutable/nodes/9.Drah-do-.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/9.Drah-do-.js.gz +0 -0
  59. package/build/client/_app/version.json +1 -1
  60. package/build/client/_app/version.json.br +0 -0
  61. package/build/client/_app/version.json.gz +0 -0
  62. package/build/pty-holder.cjs +6 -0
  63. package/build/server/chunks/{0-vrTNAfZB.js → 0-DAB_6Vm1.js} +2 -2
  64. package/build/server/chunks/{0-vrTNAfZB.js.map → 0-DAB_6Vm1.js.map} +1 -1
  65. package/build/server/chunks/{1-nbr-bOoF.js → 1-D-qMYaCx.js} +2 -2
  66. package/build/server/chunks/{1-nbr-bOoF.js.map → 1-D-qMYaCx.js.map} +1 -1
  67. package/build/server/chunks/{10-ChyvvJ6w.js → 10-CeFFGo-X.js} +2 -2
  68. package/build/server/chunks/{10-ChyvvJ6w.js.map → 10-CeFFGo-X.js.map} +1 -1
  69. package/build/server/chunks/{11-6ZAjL3uU.js → 11-DRMu_ATU.js} +2 -2
  70. package/build/server/chunks/{11-6ZAjL3uU.js.map → 11-DRMu_ATU.js.map} +1 -1
  71. package/build/server/chunks/{2-DWFRVDWJ.js → 2-B7OLBMNH.js} +4 -4
  72. package/build/server/chunks/{2-DWFRVDWJ.js.map → 2-B7OLBMNH.js.map} +1 -1
  73. package/build/server/chunks/{3-CKANM_WM.js → 3-B38ZarLw.js} +2 -2
  74. package/build/server/chunks/{3-CKANM_WM.js.map → 3-B38ZarLw.js.map} +1 -1
  75. package/build/server/chunks/{5-BxVjs2qi.js → 5-D-Uv1voC.js} +2 -2
  76. package/build/server/chunks/{5-BxVjs2qi.js.map → 5-D-Uv1voC.js.map} +1 -1
  77. package/build/server/chunks/{6-Cbf1AAMQ.js → 6-DP46cUej.js} +2 -2
  78. package/build/server/chunks/{6-Cbf1AAMQ.js.map → 6-DP46cUej.js.map} +1 -1
  79. package/build/server/chunks/{7-CMK2quEf.js → 7-B29_3ar6.js} +2 -2
  80. package/build/server/chunks/{7-CMK2quEf.js.map → 7-B29_3ar6.js.map} +1 -1
  81. package/build/server/chunks/{8-DhdfkfDM.js → 8-DCnSDVrX.js} +2 -2
  82. package/build/server/chunks/{8-DhdfkfDM.js.map → 8-DCnSDVrX.js.map} +1 -1
  83. package/build/server/chunks/{9-CPpxtRM5.js → 9-BwqDc8wC.js} +2 -2
  84. package/build/server/chunks/{9-CPpxtRM5.js.map → 9-BwqDc8wC.js.map} +1 -1
  85. package/build/server/chunks/_page.svelte-8OFzwdNA.js +758 -0
  86. package/build/server/chunks/_page.svelte-8OFzwdNA.js.map +1 -0
  87. package/build/server/chunks/{_server.ts-BWVlO8iV.js → _server.ts-05JJOdcX.js} +15 -12
  88. package/build/server/chunks/_server.ts-05JJOdcX.js.map +1 -0
  89. package/build/server/chunks/{_server.ts-BevnuePu.js → _server.ts-BCljU9Sg.js} +7 -3
  90. package/build/server/chunks/_server.ts-BCljU9Sg.js.map +1 -0
  91. package/build/server/chunks/{_server.ts-D-vgx5UZ.js → _server.ts-BTmknWpO.js} +2 -2
  92. package/build/server/chunks/{_server.ts-D-vgx5UZ.js.map → _server.ts-BTmknWpO.js.map} +1 -1
  93. package/build/server/chunks/{_server.ts-tChyh9FX.js → _server.ts-BXhmLZwN.js} +4 -2
  94. package/build/server/chunks/{_server.ts-tChyh9FX.js.map → _server.ts-BXhmLZwN.js.map} +1 -1
  95. package/build/server/chunks/{_server.ts-CvJKTS3Z.js → _server.ts-BbRSpB74.js} +4 -2
  96. package/build/server/chunks/{_server.ts-CvJKTS3Z.js.map → _server.ts-BbRSpB74.js.map} +1 -1
  97. package/build/server/chunks/{_server.ts-CC2K8-L2.js → _server.ts-Blx6TuRU.js} +4 -2
  98. package/build/server/chunks/_server.ts-Blx6TuRU.js.map +1 -0
  99. package/build/server/chunks/_server.ts-C6NRpe7e.js +33 -0
  100. package/build/server/chunks/_server.ts-C6NRpe7e.js.map +1 -0
  101. package/build/server/chunks/_server.ts-CGqCOCdK.js +53 -0
  102. package/build/server/chunks/_server.ts-CGqCOCdK.js.map +1 -0
  103. package/build/server/chunks/{_server.ts-X1R7L_QI.js → _server.ts-CYWXjihn.js} +4 -2
  104. package/build/server/chunks/{_server.ts-X1R7L_QI.js.map → _server.ts-CYWXjihn.js.map} +1 -1
  105. package/build/server/chunks/{_server.ts-CD7JP3fz.js → _server.ts-D0___krA.js} +4 -2
  106. package/build/server/chunks/_server.ts-D0___krA.js.map +1 -0
  107. package/build/server/chunks/{_server.ts-VzDcFFgy.js → _server.ts-DPHRUFYS.js} +4 -2
  108. package/build/server/chunks/_server.ts-DPHRUFYS.js.map +1 -0
  109. package/build/server/chunks/{_server.ts-D0zRDSx0.js → _server.ts-D_WRex0k.js} +4 -2
  110. package/build/server/chunks/_server.ts-D_WRex0k.js.map +1 -0
  111. package/build/server/chunks/{_server.ts-CA5KUENM.js → _server.ts-Da1kSClZ.js} +4 -2
  112. package/build/server/chunks/_server.ts-Da1kSClZ.js.map +1 -0
  113. package/build/server/chunks/{_server.ts-Dp-hXW_I.js → _server.ts-l3cd4Cto.js} +4 -2
  114. package/build/server/chunks/_server.ts-l3cd4Cto.js.map +1 -0
  115. package/build/server/chunks/{library-apns-Dl3iRE2h.js → library-apns-D8RPINlv.js} +62 -7
  116. package/build/server/chunks/library-apns-D8RPINlv.js.map +1 -0
  117. package/build/server/chunks/{pending-requests-C9p57WoU.js → pending-requests-8rWjrF6d.js} +3 -2
  118. package/build/server/chunks/pending-requests-8rWjrF6d.js.map +1 -0
  119. package/build/server/chunks/presence-store-Bx_g0-Gd.js +23 -0
  120. package/build/server/chunks/presence-store-Bx_g0-Gd.js.map +1 -0
  121. package/build/server/chunks/{pty-manager-ZqXqa-6A.js → pty-manager-DDjG7DlH.js} +297 -31
  122. package/build/server/chunks/pty-manager-DDjG7DlH.js.map +1 -0
  123. package/build/server/chunks/shooter-home-4f_HkdGI.js +10 -0
  124. package/build/server/chunks/shooter-home-4f_HkdGI.js.map +1 -0
  125. package/build/server/index.js +1 -1
  126. package/build/server/index.js.map +1 -1
  127. package/build/server/manifest.js +38 -24
  128. package/build/server/manifest.js.map +1 -1
  129. package/package.json +4 -2
  130. package/server.ts +2 -2
  131. package/src/lib/modules/client/common/index.ts +1 -0
  132. package/src/lib/modules/client/common/presence.ts +47 -0
  133. package/src/lib/modules/client/dashboard/AutopilotPanel.svelte +188 -4
  134. package/src/lib/modules/client/dashboard/autopilot-driver.svelte.ts +681 -0
  135. package/src/lib/modules/client/dashboard/decide-injection.ts +127 -0
  136. package/src/lib/modules/client/dashboard/store.svelte.ts +65 -24
  137. package/src/lib/modules/client/neurolink/fetch-proxy.ts +38 -1
  138. package/src/lib/modules/client/terminal/xterm-wrapper.ts +52 -12
  139. package/src/lib/modules/server/apn/apns-payload.ts +50 -0
  140. package/src/lib/modules/server/apn/library-apns.ts +50 -8
  141. package/src/lib/modules/server/apn/pending-requests.ts +3 -1
  142. package/src/lib/modules/server/sessions/autopilot-context.ts +57 -0
  143. package/src/lib/modules/server/sessions/autopilot-engine.ts +148 -43
  144. package/src/lib/modules/server/sessions/litellm-client.ts +90 -34
  145. package/src/lib/modules/server/sessions/next-step-consensus.ts +27 -2
  146. package/src/lib/modules/server/sessions/summary-store.ts +3 -1
  147. package/src/lib/modules/server/terminal/agent-launch.ts +26 -0
  148. package/src/lib/modules/server/terminal/pty-holder.cjs +6 -0
  149. package/src/lib/modules/server/terminal/pty-manager.ts +292 -38
  150. package/src/lib/modules/server/terminal/session-watcher.ts +12 -2
  151. package/src/lib/modules/server/terminal/terminal-emulator.ts +102 -0
  152. package/src/lib/modules/server/terminal/terminal-store.ts +3 -1
  153. package/src/lib/modules/server/utils/shooter-home.ts +16 -0
  154. package/src/lib/modules/server/ws/presence-store.ts +50 -0
  155. package/src/lib/modules/server/ws/server.ts +18 -2
  156. package/src/lib/modules/server/ws/terminal-handler.ts +11 -6
  157. package/src/lib/types/autopilot.ts +65 -0
  158. package/src/lib/types/generated/WsProtocol.ts +10 -1
  159. package/src/lib/types/server.ts +27 -1
  160. package/src/lib/types/terminal-client.ts +3 -0
  161. package/src/lib/types/ws.ts +3 -2
  162. package/src/routes/api/autopilot/goal/+server.ts +72 -0
  163. package/src/routes/api/neurolink-proxy/+server.ts +8 -2
  164. package/src/routes/api/notify/+server.ts +22 -15
  165. package/src/routes/api/presence/+server.ts +39 -0
  166. package/src/routes/api/ws-status/+server.ts +8 -5
  167. package/build/client/_app/immutable/assets/2.BHi6pjT2.css +0 -1
  168. package/build/client/_app/immutable/assets/2.BHi6pjT2.css.br +0 -0
  169. package/build/client/_app/immutable/assets/2.BHi6pjT2.css.gz +0 -0
  170. package/build/client/_app/immutable/chunks/BmfLecb1.js.br +0 -0
  171. package/build/client/_app/immutable/chunks/BmfLecb1.js.gz +0 -0
  172. package/build/client/_app/immutable/chunks/CRkG7oE4.js +0 -1
  173. package/build/client/_app/immutable/chunks/CRkG7oE4.js.br +0 -0
  174. package/build/client/_app/immutable/chunks/CRkG7oE4.js.gz +0 -0
  175. package/build/client/_app/immutable/chunks/DOEXXmsh.js.br +0 -0
  176. package/build/client/_app/immutable/chunks/DOEXXmsh.js.gz +0 -0
  177. package/build/client/_app/immutable/chunks/EqMAkEha.js.br +0 -0
  178. package/build/client/_app/immutable/chunks/EqMAkEha.js.gz +0 -0
  179. package/build/client/_app/immutable/chunks/J5-Cr5oR.js +0 -6
  180. package/build/client/_app/immutable/chunks/J5-Cr5oR.js.br +0 -0
  181. package/build/client/_app/immutable/chunks/J5-Cr5oR.js.gz +0 -0
  182. package/build/client/_app/immutable/entry/app.CeSxgGat.js.br +0 -0
  183. package/build/client/_app/immutable/entry/app.CeSxgGat.js.gz +0 -0
  184. package/build/client/_app/immutable/entry/start.DrnJFwxA.js +0 -1
  185. package/build/client/_app/immutable/entry/start.DrnJFwxA.js.br +0 -2
  186. package/build/client/_app/immutable/entry/start.DrnJFwxA.js.gz +0 -0
  187. package/build/client/_app/immutable/nodes/0.oaPwxh1O.js.br +0 -0
  188. package/build/client/_app/immutable/nodes/0.oaPwxh1O.js.gz +0 -0
  189. package/build/client/_app/immutable/nodes/1.DMPyoM-M.js.br +0 -0
  190. package/build/client/_app/immutable/nodes/1.DMPyoM-M.js.gz +0 -0
  191. package/build/client/_app/immutable/nodes/10.Cbm7nQKK.js.br +0 -0
  192. package/build/client/_app/immutable/nodes/10.Cbm7nQKK.js.gz +0 -0
  193. package/build/client/_app/immutable/nodes/11.CKmZjP_a.js.br +0 -0
  194. package/build/client/_app/immutable/nodes/2.zlrdNFtH.js +0 -13
  195. package/build/client/_app/immutable/nodes/2.zlrdNFtH.js.br +0 -0
  196. package/build/client/_app/immutable/nodes/2.zlrdNFtH.js.gz +0 -0
  197. package/build/client/_app/immutable/nodes/3.BgLpGnzb.js.br +0 -0
  198. package/build/client/_app/immutable/nodes/3.BgLpGnzb.js.gz +0 -0
  199. package/build/client/_app/immutable/nodes/5.Avc1-gVb.js.br +0 -0
  200. package/build/client/_app/immutable/nodes/5.Avc1-gVb.js.gz +0 -0
  201. package/build/client/_app/immutable/nodes/6.Dw2wEssJ.js.br +0 -0
  202. package/build/client/_app/immutable/nodes/6.Dw2wEssJ.js.gz +0 -0
  203. package/build/client/_app/immutable/nodes/7.DwKZjoBg.js.br +0 -0
  204. package/build/client/_app/immutable/nodes/7.DwKZjoBg.js.gz +0 -0
  205. package/build/client/_app/immutable/nodes/8.ZUAI6g5E.js.br +0 -0
  206. package/build/client/_app/immutable/nodes/8.ZUAI6g5E.js.gz +0 -0
  207. package/build/client/_app/immutable/nodes/9.I_KGXPwB.js.br +0 -0
  208. package/build/client/_app/immutable/nodes/9.I_KGXPwB.js.gz +0 -0
  209. package/build/server/chunks/_page.svelte-tBuIq8Pg.js +0 -159
  210. package/build/server/chunks/_page.svelte-tBuIq8Pg.js.map +0 -1
  211. package/build/server/chunks/_server.ts-BWVlO8iV.js.map +0 -1
  212. package/build/server/chunks/_server.ts-BevnuePu.js.map +0 -1
  213. package/build/server/chunks/_server.ts-CA5KUENM.js.map +0 -1
  214. package/build/server/chunks/_server.ts-CC2K8-L2.js.map +0 -1
  215. package/build/server/chunks/_server.ts-CD7JP3fz.js.map +0 -1
  216. package/build/server/chunks/_server.ts-D0zRDSx0.js.map +0 -1
  217. package/build/server/chunks/_server.ts-Dp-hXW_I.js.map +0 -1
  218. package/build/server/chunks/_server.ts-VzDcFFgy.js.map +0 -1
  219. package/build/server/chunks/library-apns-Dl3iRE2h.js.map +0 -1
  220. package/build/server/chunks/pending-requests-C9p57WoU.js.map +0 -1
  221. package/build/server/chunks/pty-manager-ZqXqa-6A.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_page.svelte-8OFzwdNA.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_page.svelte.js"],"sourcesContent":["import { ad as head, ab as escape_html, a1 as derived, ae as ensure_array_like } from \"../../chunks/index.js\";\nimport { g as goto } from \"../../chunks/client.js\";\nimport { R as RefreshSvg, E as EmptyState, c as clearCache } from \"../../chunks/cache.js\";\nimport { S as SettingsSvg } from \"../../chunks/settings.js\";\nimport \"../../chunks/markdown.js\";\nimport { o as onDestroy } from \"../../chunks/index-server.js\";\nimport { B as Button } from \"../../chunks/Button.js\";\n/* empty css */\nimport { I as Icon } from \"../../chunks/Icon.js\";\nimport { S as Shimmer } from \"../../chunks/Shimmer.js\";\nimport { S as SvelteMap, a as SvelteSet } from \"../../chunks/index-server2.js\";\nconst DEFAULT_INJECTION_POLICY = {\n humanGraceMs: 5e3,\n injectConfidence: 0.7,\n maxAutoActions: 8,\n minIntervalMs: 3e4\n};\nconst MAX_COMMAND_LENGTH = 400;\nconst DANGEROUS_PATTERNS = [\n /\\brm\\s+-[a-z]*r[a-z]*f?\\s+(\\/|~|\\/\\*|\\$home)/i,\n // rm -rf /, rm -rf ~, rm -rf /*\n /\\brm\\s+-[a-z]*f[a-z]*r?\\s+(\\/|~|\\/\\*|\\$home)/i,\n // rm -fr variants\n /:\\(\\)\\s*\\{\\s*:\\s*\\|\\s*:\\s*&\\s*\\}\\s*;\\s*:/,\n // classic fork bomb :(){ :|:& };:\n /\\bdd\\b[^\\n]*\\bof=\\/dev\\//i,\n // dd of=/dev/...\n />\\s*\\/dev\\/(sd|nvme|disk|hd)/i,\n // redirect onto a raw disk\n /\\bmkfs(\\.[a-z0-9]+)?\\b/i,\n // mkfs, mkfs.ext4, ...\n /\\b(shutdown|reboot|halt|poweroff)\\b/i\n // power state\n];\nfunction decideInjection(state, consensus, now, policy = DEFAULT_INJECTION_POLICY, opts = {}) {\n const top = consensus.steps[0];\n if (!top) {\n return { act: false, reason: \"no consensus step\" };\n }\n if (top.tentative && !opts.allowTentative) {\n return { act: false, reason: \"consensus is tentative (no quorum)\" };\n }\n if (!state.isManaged) {\n return { act: false, reason: \"terminal is external / read-only (cannot inject)\" };\n }\n if (state.lastEventType !== \"agent-idle\") {\n return { act: false, reason: `agent not idle (last event: ${state.lastEventType})` };\n }\n if (now - state.lastActivityAt < policy.humanGraceMs) {\n return { act: false, reason: \"recent activity — within human grace window\" };\n }\n if (now - state.lastInjectedAt < policy.minIntervalMs) {\n return { act: false, reason: \"rate-limited (min inject interval)\" };\n }\n if (state.autoActionCount >= policy.maxAutoActions) {\n return { act: false, reason: \"circuit breaker — max consecutive auto-actions reached\" };\n }\n if (top.confidence < policy.injectConfidence) {\n return { act: false, reason: `confidence ${top.confidence.toFixed(2)} below floor` };\n }\n if (state.lastActedStep !== null && normalizeStep(top.text) === state.lastActedStep) {\n return { act: false, reason: \"already acted on this step\" };\n }\n return { act: true, reason: \"idle + high-confidence consensus\", step: top };\n}\nfunction guardCommand(command, lastInjectedCommand) {\n const trimmed = command.trim();\n if (trimmed.length === 0) {\n return { command: trimmed, reason: \"empty command\", safe: false };\n }\n if (/[\\r\\n]/.test(command)) {\n return {\n command: trimmed,\n reason: \"multi-line command rejected (single command only)\",\n safe: false\n };\n }\n if (trimmed.length > MAX_COMMAND_LENGTH) {\n return { command: trimmed, reason: `command too long (> ${MAX_COMMAND_LENGTH})`, safe: false };\n }\n for (const pattern of DANGEROUS_PATTERNS) {\n if (pattern.test(trimmed)) {\n return { command: trimmed, reason: \"matches a dangerous-command pattern\", safe: false };\n }\n }\n if (lastInjectedCommand !== null && trimmed === lastInjectedCommand.trim()) {\n return { command: trimmed, reason: \"duplicate of last injected command\", safe: false };\n }\n return { command: trimmed, reason: \"ok\", safe: true };\n}\nfunction normalizeStep(text) {\n return text.toLowerCase().trim().replace(/\\s+/g, \" \").replace(/[.,;:!?]+$/, \"\");\n}\nconst AUTONOMY_KEY = \"shooter_autonomy\";\nconst POLL_INTERVAL_MS = 6e3;\nconst RECONNECT_MS = 3e3;\nconst OPEN_TIMEOUT_MS = 5e3;\nconst MAX_ACTIONS = 40;\nconst IDLE_RESUME_WINDOW_MS = 12e4;\nconst AGENT_SUBMIT_DELAY_MS = 120;\nconst SAFE_ID = /^[A-Za-z0-9_-]+$/;\nconst SAFE_COMMAND_HEADS = /* @__PURE__ */ new Set([\n \"bun\",\n \"cargo\",\n \"cat\",\n \"deno\",\n \"echo\",\n \"eslint\",\n \"git\",\n \"go\",\n \"jest\",\n \"ls\",\n \"make\",\n \"node\",\n \"npm\",\n \"npx\",\n \"pnpm\",\n \"prettier\",\n \"pwd\",\n \"python\",\n \"python3\",\n \"tsc\",\n \"vitest\",\n \"yarn\"\n]);\nconst AGENT_COMMANDS = /* @__PURE__ */ new Set([\"claude\", \"opencode\"]);\nclass AutopilotDriver {\n actions = [];\n enabled = false;\n apiKey = \"\";\n deps;\n eventsWs = null;\n pollTimer = null;\n reconnectTimer = null;\n started = false;\n // eslint-disable-next-line svelte/prefer-svelte-reactivity -- internal, non-reactive bookkeeping\n terminals = /* @__PURE__ */ new Map();\n constructor(deps) {\n this.deps = {\n now: deps?.now ?? (() => Date.now()),\n produceCommand: deps?.produceCommand ?? defaultProduceCommand\n };\n this.enabled = readPersistedAutonomy();\n }\n setEnabled(value) {\n this.enabled = value;\n try {\n localStorage.setItem(AUTONOMY_KEY, JSON.stringify({ enabled: value }));\n } catch {\n }\n }\n start(apiKey) {\n this.apiKey = apiKey;\n if (this.started) {\n return;\n }\n this.started = true;\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"shooter:wake\", this.onWake);\n }\n void this.connectEvents();\n void this.refresh();\n this.pollTimer = setInterval(() => void this.refresh(), POLL_INTERVAL_MS);\n }\n stop() {\n this.started = false;\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"shooter:wake\", this.onWake);\n }\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = null;\n }\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n if (this.eventsWs) {\n this.eventsWs.onclose = null;\n this.eventsWs.close();\n this.eventsWs = null;\n }\n for (const rt of this.terminals.values()) {\n rt.injectSocket?.close();\n rt.injectSocket = null;\n }\n }\n async connectEvents() {\n const ticket = await this.getTicket();\n if (!ticket || !this.started) {\n return;\n }\n const wsBase = window.location.origin.replace(/^http/, \"ws\");\n const ws = new WebSocket(`${wsBase}/ws/events?ticket=${ticket}`);\n this.eventsWs = ws;\n ws.onmessage = (msg) => {\n try {\n const raw = JSON.parse(msg.data);\n if (raw && typeof raw === \"object\") {\n this.handleEvent(raw);\n }\n } catch {\n }\n };\n ws.onclose = () => {\n this.eventsWs = null;\n if (this.started) {\n this.scheduleReconnect();\n }\n };\n ws.onerror = () => {\n };\n }\n createRuntime(terminalId) {\n const rt = {\n autoActionCount: 0,\n busy: false,\n command: \"\",\n consensus: null,\n injectSocket: null,\n isManaged: false,\n lastActedStep: null,\n lastActivityAt: 0,\n lastCommand: null,\n lastEventAt: 0,\n lastEventType: \"\",\n lastInjectedAt: 0,\n recentOutput: \"\"\n };\n this.terminals.set(terminalId, rt);\n return rt;\n }\n async evaluate(terminalId) {\n if (!this.enabled) {\n return;\n }\n const rt = this.terminals.get(terminalId);\n if (!rt || rt.busy || !rt.consensus) {\n return;\n }\n const state = {\n autoActionCount: rt.autoActionCount,\n isManaged: rt.isManaged,\n lastActedStep: rt.lastActedStep,\n lastActivityAt: rt.lastActivityAt,\n lastEventType: rt.lastEventType,\n lastInjectedAt: rt.lastInjectedAt\n };\n const decision = decideInjection(state, rt.consensus, this.deps.now(), void 0, { allowTentative: isAgentCommand(rt.command) });\n if (!decision.act || !decision.step) {\n return;\n }\n rt.busy = true;\n try {\n const isAgent = isAgentCommand(rt.command);\n let command;\n try {\n command = await this.deps.produceCommand({\n apiKey: this.apiKey,\n isAgentTerminal: isAgent,\n recentOutput: rt.recentOutput,\n step: decision.step,\n terminalId\n });\n } catch {\n command = null;\n }\n if (!command) {\n this.log(terminalId, \"skipped\", `no command for: ${decision.step.text.slice(0, 60)}`);\n return;\n }\n const candidate = isAgent ? command.replace(/\\s*[\\r\\n]+\\s*/g, \" \").trim() : command;\n const verdict = guardCommand(candidate, rt.lastCommand);\n if (!verdict.safe) {\n rt.lastActedStep = normalizeStep(decision.step.text);\n this.log(terminalId, \"skipped\", `guard: ${verdict.reason}`);\n return;\n }\n const ok = await this.inject(terminalId, verdict.command);\n if (ok) {\n rt.lastInjectedAt = this.deps.now();\n rt.lastCommand = verdict.command;\n rt.lastActedStep = normalizeStep(decision.step.text);\n rt.autoActionCount += 1;\n this.log(terminalId, \"injected\", verdict.command);\n } else {\n this.log(terminalId, \"error\", `inject failed: ${verdict.command}`);\n }\n } finally {\n rt.busy = false;\n }\n }\n async fetchSummaries() {\n try {\n const res = await fetch(\"/api/summaries?limit=30\", { headers: { Authorization: `Bearer ${this.apiKey}` } });\n if (!res.ok) {\n return;\n }\n const body = await res.json();\n const latest = /* @__PURE__ */ new Set();\n for (const rec of body.summaries ?? []) {\n const tid = rec.terminalId;\n if (!tid || latest.has(tid)) {\n continue;\n }\n const rt = this.terminals.get(tid);\n if (!rt) {\n continue;\n }\n latest.add(tid);\n rt.consensus = { agentCount: 5, quorum: 3, steps: parseSteps(rec.nextSteps) };\n const createdMs = Date.parse(rec.createdAt);\n if (rec.trigger === \"agent-idle\" && Number.isFinite(createdMs) && createdMs >= rt.lastEventAt && this.deps.now() - createdMs < IDLE_RESUME_WINDOW_MS) {\n rt.lastEventType = \"agent-idle\";\n }\n }\n } catch {\n }\n }\n async fetchTerminals() {\n try {\n const res = await fetch(\"/api/terminals\", { headers: { Authorization: `Bearer ${this.apiKey}` } });\n if (!res.ok) {\n return;\n }\n const body = await res.json();\n const seen = /* @__PURE__ */ new Set();\n for (const t of body.terminals ?? []) {\n if (t.exitedAt !== null || t.status === \"exited\") {\n continue;\n }\n seen.add(t.id);\n const rt = this.terminals.get(t.id) ?? this.createRuntime(t.id);\n rt.isManaged = true;\n rt.command = t.command ?? \"\";\n }\n for (const id of [...this.terminals.keys()]) {\n if (!seen.has(id)) {\n this.terminals.get(id)?.injectSocket?.close();\n this.terminals.delete(id);\n }\n }\n } catch {\n }\n }\n async getTicket() {\n try {\n const res = await fetch(\"/api/ws-ticket\", {\n headers: { Authorization: `Bearer ${this.apiKey}` },\n method: \"POST\"\n });\n if (!res.ok) {\n return null;\n }\n const { ticket } = await res.json();\n return ticket;\n } catch {\n return null;\n }\n }\n handleEvent(raw) {\n const type = typeof raw.type === \"string\" ? raw.type : \"\";\n const terminalId = typeof raw.terminalId === \"string\" ? raw.terminalId : \"\";\n if (!type || type === \"welcome\" || !terminalId) {\n return;\n }\n const rt = this.terminals.get(terminalId);\n if (!rt) {\n return;\n }\n rt.lastEventType = type;\n rt.lastEventAt = this.deps.now();\n if (type !== \"agent-idle\" && type !== \"agent-question\") {\n rt.lastActivityAt = this.deps.now();\n }\n if (type === \"tool-completed\" && raw.success === true) {\n rt.autoActionCount = 0;\n }\n if (type === \"agent-idle\" && this.enabled) {\n void this.evaluate(terminalId);\n }\n }\n async inject(terminalId, command) {\n const rt = this.terminals.get(terminalId);\n if (!rt) {\n return false;\n }\n if (!SAFE_ID.test(terminalId)) {\n return false;\n }\n let ws = rt.injectSocket;\n if (!ws || ws.readyState > WebSocket.OPEN) {\n const ticket = await this.getTicket();\n if (!ticket) {\n return false;\n }\n const wsBase = window.location.origin.replace(/^http/, \"ws\");\n ws = new WebSocket(`${wsBase}/ws/terminal/${encodeURIComponent(terminalId)}?ticket=${encodeURIComponent(ticket)}`);\n rt.injectSocket = ws;\n const opened = await waitForOpen(ws);\n if (!opened) {\n rt.injectSocket = null;\n return false;\n }\n }\n if (ws.readyState !== WebSocket.OPEN) {\n return false;\n }\n if (isAgentCommand(rt.command)) {\n const prompt = command.replace(/\\s*[\\r\\n]+\\s*/g, \" \").trim();\n if (!prompt) {\n return false;\n }\n ws.send(JSON.stringify({ data: prompt, type: \"input\" }));\n await delay(AGENT_SUBMIT_DELAY_MS);\n if (ws.readyState !== WebSocket.OPEN) {\n return false;\n }\n ws.send(JSON.stringify({ data: \"\\r\", type: \"input\" }));\n return true;\n }\n ws.send(JSON.stringify({ data: `${command}\\r`, type: \"input\" }));\n return true;\n }\n log(terminalId, kind, detail) {\n this.actions = [\n { at: this.deps.now(), detail, kind, terminalId },\n ...this.actions\n ].slice(0, MAX_ACTIONS);\n }\n onWake = () => {\n void this.refresh();\n };\n async refresh() {\n if (!this.apiKey) {\n return;\n }\n await Promise.allSettled([this.fetchTerminals(), this.fetchSummaries()]);\n if (this.enabled) {\n for (const id of this.terminals.keys()) {\n void this.evaluate(id);\n }\n }\n }\n scheduleReconnect() {\n if (this.reconnectTimer) {\n return;\n }\n this.reconnectTimer = setTimeout(\n () => {\n this.reconnectTimer = null;\n void this.connectEvents();\n },\n RECONNECT_MS\n );\n }\n}\nasync function defaultProduceCommand(input) {\n if (input.isAgentTerminal) {\n const prompt = input.step.text.trim();\n return prompt.length > 0 ? prompt : null;\n }\n const native = await tryNativeDecide(input);\n if (native) {\n return native;\n }\n const litellm = await litellmProduceCommand(input);\n if (litellm) {\n return litellm;\n }\n const text = input.step.text.trim();\n const backticked = /`([^`]+)`/.exec(text);\n if (backticked) {\n return backticked[1].trim();\n }\n const head2 = text.split(/\\s+/)[0]?.toLowerCase();\n if (head2 && SAFE_COMMAND_HEADS.has(head2) && !/[\\r\\n]/.test(text) && text.length < 80) {\n return text;\n }\n return null;\n}\nfunction delay(ms) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\nfunction isAgentCommand(command) {\n const firstToken = command.trim().split(/\\s+/)[0] ?? \"\";\n const base = firstToken.split(\"/\").pop() ?? \"\";\n return AGENT_COMMANDS.has(base);\n}\nasync function litellmProduceCommand(input) {\n const base = readProcessEnv(\"LITELLM_BASE_URL\");\n if (!base || !input.apiKey) {\n return null;\n }\n const model = readProcessEnv(\"LITELLM_MODEL\") || \"open-large\";\n const userPrompt = `Recent terminal output:\n${input.recentOutput.slice(-2e3)}\n\nSuggested next step: ${input.step.text}\n\nReply with ONLY the single shell command to run next — no prose, no backticks, no explanation.`;\n try {\n const res = await fetch(\"/api/neurolink-proxy\", {\n body: JSON.stringify({\n body: {\n max_tokens: 60,\n messages: [\n {\n content: \"You are a coding-session copilot. Output ONLY the next shell command.\",\n role: \"system\"\n },\n { content: userPrompt, role: \"user\" }\n ],\n model,\n temperature: 0\n },\n headers: {},\n provider: \"litellm\",\n url: `${base}/chat/completions`\n }),\n headers: {\n Authorization: `Bearer ${input.apiKey}`,\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\"\n });\n if (!res.ok) {\n return null;\n }\n const data = await res.json();\n const content = data.choices?.[0]?.message?.content;\n if (typeof content !== \"string\") {\n return null;\n }\n const cmd = content.trim().replace(/^`+|`+$/g, \"\").trim();\n return cmd.length > 0 ? cmd : null;\n } catch {\n return null;\n }\n}\nfunction parseSteps(json) {\n try {\n const parsed = JSON.parse(json);\n if (!Array.isArray(parsed)) {\n return [];\n }\n return parsed.filter((el) => typeof el === \"object\" && el !== null && typeof el.text === \"string\" && typeof el.confidence === \"number\");\n } catch {\n return [];\n }\n}\nfunction readPersistedAutonomy() {\n if (typeof localStorage === \"undefined\") {\n return false;\n }\n try {\n const raw = localStorage.getItem(AUTONOMY_KEY);\n if (!raw) {\n return false;\n }\n const parsed = JSON.parse(raw);\n return Boolean(parsed?.enabled);\n } catch {\n return false;\n }\n}\nfunction readProcessEnv(key) {\n const proc = window[\"process\"];\n const value = proc?.env?.[key];\n return typeof value === \"string\" ? value : \"\";\n}\nfunction tryNativeDecide(input) {\n const bridge = window.ShooterBridge;\n if (typeof bridge?.agentDecide !== \"function\") {\n return Promise.resolve(null);\n }\n const ctx = `Recent terminal output:\n${input.recentOutput.slice(-2e3)}\n\nSuggested next step: ${input.step.text}\n\nReply with the single shell command to run next.`;\n return bridge.agentDecide(ctx).then((c) => typeof c === \"string\" && c.trim().length > 0 ? c.trim() : null).catch(() => null);\n}\nfunction waitForOpen(ws) {\n if (ws.readyState === WebSocket.OPEN) {\n return Promise.resolve(true);\n }\n return new Promise((resolve) => {\n const timer = setTimeout(\n () => {\n ws.close();\n resolve(false);\n },\n OPEN_TIMEOUT_MS\n );\n ws.addEventListener(\"open\", () => {\n clearTimeout(timer);\n resolve(true);\n });\n ws.addEventListener(\"error\", () => {\n clearTimeout(timer);\n ws.close();\n resolve(false);\n });\n });\n}\nnew AutopilotDriver();\nconst ACTIVE_THRESHOLD_MS = 3e4;\nlet sessions = [];\nconst summarizers = new SvelteMap();\nconst sessionSockets = new SvelteMap();\nconst pendingSessionSockets = new SvelteSet();\nfunction disconnect() {\n for (const [, sock] of sessionSockets) {\n sock.onclose = null;\n sock.close();\n }\n sessionSockets.clear();\n pendingSessionSockets.clear();\n summarizers.clear();\n}\nfunction getCards() {\n const now = Date.now();\n return sortSessions(sessions).map((s) => {\n const createdMs = Date.parse(s.createdAt);\n const lastEventTs = s.events.length > 0 ? Date.parse(s.events[s.events.length - 1].timestamp) : 0;\n return {\n ...s,\n duration: now - createdMs,\n goal: s.goal,\n // Ensure goal is mapped\n isActive: lastEventTs > 0 && now - lastEventTs < ACTIVE_THRESHOLD_MS,\n isSummarizing: s.isSummarizing,\n // Ensure isSummarizing is mapped\n summary: s.summary\n // Ensure summary is mapped\n };\n });\n}\nfunction sortSessions(list) {\n return [...list].sort((a, b) => {\n const order = { error: 2, exited: 3, idle: 1, running: 0 };\n const rankA = order[a.status];\n const rankB = order[b.status];\n if (rankA !== rankB) {\n return rankA - rankB;\n }\n if (a.status !== \"exited\" && b.status !== \"exited\") {\n return b.createdAt.localeCompare(a.createdAt);\n }\n const exitA = a.exitedAt ?? a.createdAt;\n const exitB = b.exitedAt ?? b.createdAt;\n return exitB.localeCompare(exitA);\n });\n}\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let projects = [];\n let loading = false;\n const cards = derived(getCards);\n onDestroy(() => {\n disconnect();\n });\n async function fetchSessions(append = false, bustCache = false) {\n {\n return;\n }\n }\n async function forceRefresh() {\n loading = true;\n clearCache(\"shooter_projects\");\n await fetchSessions(false, true);\n }\n function navigateToConfig() {\n void goto();\n }\n function totalSessionCount() {\n return projects.reduce((sum, p) => sum + p.sessionCount, 0);\n }\n head(\"1uha8ag\", $$renderer2, ($$renderer3) => {\n $$renderer3.title(($$renderer4) => {\n $$renderer4.push(`<title>Dashboard - Shooter</title>`);\n });\n $$renderer3.push(`<meta name=\"description\" content=\"Active terminals and Claude Code sessions\"/>`);\n });\n $$renderer2.push(`<main class=\"main\"><div class=\"page-header\"><div class=\"page-header-content\"><div><h1 class=\"page-title\">Dashboard</h1> <p class=\"page-description\">Active terminals and Claude Code sessions</p></div> <div class=\"page-actions\">`);\n Button($$renderer2, {\n classes: \"btn-secondary\",\n onclick: forceRefresh,\n disabled: loading,\n children: ($$renderer3) => {\n Icon($$renderer3, { svg: RefreshSvg, classes: \"icon-14\" });\n $$renderer3.push(`<!----> Refresh`);\n },\n $$slots: { default: true }\n });\n $$renderer2.push(`<!----></div></div> `);\n if (projects.length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"stats-bar svelte-1uha8ag\"><div class=\"stat-chip svelte-1uha8ag\"><span class=\"stat-value svelte-1uha8ag\">${escape_html(projects.length)}</span> <span class=\"stat-label svelte-1uha8ag\">${escape_html(projects.length === 1 ? \"project\" : \"projects\")}</span></div> <div class=\"stat-chip svelte-1uha8ag\"><span class=\"stat-value svelte-1uha8ag\">${escape_html(totalSessionCount())}</span> <span class=\"stat-label svelte-1uha8ag\">${escape_html(totalSessionCount() === 1 ? \"session\" : \"sessions\")}</span></div> `);\n if (cards().length > 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"stat-chip stat-chip-active svelte-1uha8ag\"><span class=\"stat-value svelte-1uha8ag\">${escape_html(cards().length)}</span> <span class=\"stat-label svelte-1uha8ag\">active</span></div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--></div> `);\n {\n $$renderer2.push(\"<!--[-1-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (loading && projects.length === 0 && cards().length === 0) {\n $$renderer2.push(\"<!--[0-->\");\n $$renderer2.push(`<div class=\"loading-container\"><!--[-->`);\n const each_array = ensure_array_like(Array(3));\n for (let i = 0, $$length = each_array.length; i < $$length; i++) {\n each_array[i];\n Shimmer($$renderer2, { classes: \"shimmer-card\" });\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[1-->\");\n {\n let icon = function($$renderer3) {\n Icon($$renderer3, { svg: SettingsSvg, classes: \"icon-24\" });\n };\n EmptyState($$renderer2, {\n title: \"Configuration Required\",\n description: \"Set up your API credentials to start tracking sessions\",\n icon,\n children: ($$renderer3) => {\n Button($$renderer3, {\n classes: \"btn-primary\",\n onclick: navigateToConfig,\n text: \"Configure Settings\"\n });\n }\n });\n }\n }\n $$renderer2.push(`<!--]--></main>`);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAWA,MAAM,wBAAwB,GAAG;AACjC,EAAE,YAAY,EAAE,GAAG;AACnB,EAAE,gBAAgB,EAAE,GAAG;AACvB,EAAE,cAAc,EAAE,CAAC;AACnB,EAAE,aAAa,EAAE;AACjB,CAAC;AACD,MAAM,kBAAkB,GAAG,GAAG;AAC9B,MAAM,kBAAkB,GAAG;AAC3B,EAAE,+CAA+C;AACjD;AACA,EAAE,+CAA+C;AACjD;AACA,EAAE,0CAA0C;AAC5C;AACA,EAAE,2BAA2B;AAC7B;AACA,EAAE,+BAA+B;AACjC;AACA,EAAE,yBAAyB;AAC3B;AACA,EAAE;AACF;AACA,CAAC;AACD,SAAS,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,wBAAwB,EAAE,IAAI,GAAG,EAAE,EAAE;AAC9F,EAAE,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAChC,EAAE,IAAI,CAAC,GAAG,EAAE;AACZ,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE;AACtD,EAAE;AACF,EAAE,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AAC7C,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE;AACvE,EAAE;AACF,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;AACxB,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,kDAAkD,EAAE;AACrF,EAAE;AACF,EAAE,IAAI,KAAK,CAAC,aAAa,KAAK,YAAY,EAAE;AAC5C,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,4BAA4B,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;AACxF,EAAE;AACF,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE;AACxD,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,6CAA6C,EAAE;AAChF,EAAE;AACF,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE;AACzD,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,oCAAoC,EAAE;AACvE,EAAE;AACF,EAAE,IAAI,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,cAAc,EAAE;AACtD,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,wDAAwD,EAAE;AAC3F,EAAE;AACF,EAAE,IAAI,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,gBAAgB,EAAE;AAChD,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;AACxF,EAAE;AACF,EAAE,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,aAAa,EAAE;AACvF,IAAI,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE;AAC/D,EAAE;AACF,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,kCAAkC,EAAE,IAAI,EAAE,GAAG,EAAE;AAC7E;AACA,SAAS,YAAY,CAAC,OAAO,EAAE,mBAAmB,EAAE;AACpD,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE;AAChC,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,IAAI,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE;AACrE,EAAE;AACF,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC9B,IAAI,OAAO;AACX,MAAM,OAAO,EAAE,OAAO;AACtB,MAAM,MAAM,EAAE,mDAAmD;AACjE,MAAM,IAAI,EAAE;AACZ,KAAK;AACL,EAAE;AACF,EAAE,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE;AAC3C,IAAI,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;AAClG,EAAE;AACF,EAAE,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE;AAC5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC/B,MAAM,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,qCAAqC,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7F,IAAI;AACJ,EAAE;AACF,EAAE,IAAI,mBAAmB,KAAK,IAAI,IAAI,OAAO,KAAK,mBAAmB,CAAC,IAAI,EAAE,EAAE;AAC9E,IAAI,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,oCAAoC,EAAE,IAAI,EAAE,KAAK,EAAE;AAC1F,EAAE;AACF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACvD;AACA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B,EAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;AACjF;AACA,MAAM,YAAY,GAAG,kBAAkB;AACvC,MAAM,gBAAgB,GAAG,GAAG;AAC5B,MAAM,YAAY,GAAG,GAAG;AACxB,MAAM,eAAe,GAAG,GAAG;AAC3B,MAAM,WAAW,GAAG,EAAE;AACtB,MAAM,qBAAqB,GAAG,IAAI;AAClC,MAAM,qBAAqB,GAAG,GAAG;AACjC,MAAM,OAAO,GAAG,kBAAkB;AAClC,MAAM,kBAAkB,mBAAmB,IAAI,GAAG,CAAC;AACnD,EAAE,KAAK;AACP,EAAE,OAAO;AACT,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,KAAK;AACP,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,KAAK;AACP,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,UAAU;AACZ,EAAE,KAAK;AACP,EAAE,QAAQ;AACV,EAAE,SAAS;AACX,EAAE,KAAK;AACP,EAAE,QAAQ;AACV,EAAE;AACF,CAAC,CAAC;AACF,MAAM,cAAc,mBAAmB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AACtE,MAAM,eAAe,CAAC;AACtB,EAAE,OAAO,GAAG,EAAE;AACd,EAAE,OAAO,GAAG,KAAK;AACjB,EAAE,MAAM,GAAG,EAAE;AACb,EAAE,IAAI;AACN,EAAE,QAAQ,GAAG,IAAI;AACjB,EAAE,SAAS,GAAG,IAAI;AAClB,EAAE,cAAc,GAAG,IAAI;AACvB,EAAE,OAAO,GAAG,KAAK;AACjB;AACA,EAAE,SAAS,mBAAmB,IAAI,GAAG,EAAE;AACvC,EAAE,WAAW,CAAC,IAAI,EAAE;AACpB,IAAI,IAAI,CAAC,IAAI,GAAG;AAChB,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;AAC1C,MAAM,cAAc,EAAE,IAAI,EAAE,cAAc,IAAI;AAC9C,KAAK;AACL,IAAI,IAAI,CAAC,OAAO,GAAG,qBAAqB,EAAE;AAC1C,EAAE;AACF,EAAE,UAAU,CAAC,KAAK,EAAE;AACpB,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK;AACxB,IAAI,IAAI;AACR,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5E,IAAI,CAAC,CAAC,MAAM;AACZ,IAAI;AACJ,EAAE;AACF,EAAE,KAAK,CAAC,MAAM,EAAE;AAChB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM;AACxB,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM;AACN,IAAI;AACJ,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACvC,MAAM,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1D,IAAI;AACJ,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;AAC7B,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE;AACvB,IAAI,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC;AAC7E,EAAE;AACF,EAAE,IAAI,GAAG;AACT,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK;AACxB,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACvC,MAAM,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;AAC7D,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE;AACxB,MAAM,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AACnC,MAAM,IAAI,CAAC,SAAS,GAAG,IAAI;AAC3B,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACvC,MAAM,IAAI,CAAC,cAAc,GAAG,IAAI;AAChC,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI;AAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC3B,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC1B,IAAI;AACJ,IAAI,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE;AAC9C,MAAM,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE;AAC9B,MAAM,EAAE,CAAC,YAAY,GAAG,IAAI;AAC5B,IAAI;AACJ,EAAE;AACF,EAAE,MAAM,aAAa,GAAG;AACxB,IAAI,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AACzC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAClC,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AAChE,IAAI,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;AACpE,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE;AACtB,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,GAAG,KAAK;AAC5B,MAAM,IAAI;AACV,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC5C,UAAU,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAC/B,QAAQ;AACR,MAAM,CAAC,CAAC,MAAM;AACd,MAAM;AACN,IAAI,CAAC;AACL,IAAI,EAAE,CAAC,OAAO,GAAG,MAAM;AACvB,MAAM,IAAI,CAAC,QAAQ,GAAG,IAAI;AAC1B,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,MAAM;AACN,IAAI,CAAC;AACL,IAAI,EAAE,CAAC,OAAO,GAAG,MAAM;AACvB,IAAI,CAAC;AACL,EAAE;AACF,EAAE,aAAa,CAAC,UAAU,EAAE;AAC5B,IAAI,MAAM,EAAE,GAAG;AACf,MAAM,eAAe,EAAE,CAAC;AACxB,MAAM,IAAI,EAAE,KAAK;AACjB,MAAM,OAAO,EAAE,EAAE;AACjB,MAAM,SAAS,EAAE,IAAI;AACrB,MAAM,YAAY,EAAE,IAAI;AACxB,MAAM,SAAS,EAAE,KAAK;AACtB,MAAM,aAAa,EAAE,IAAI;AACzB,MAAM,cAAc,EAAE,CAAC;AACvB,MAAM,WAAW,EAAE,IAAI;AACvB,MAAM,WAAW,EAAE,CAAC;AACpB,MAAM,aAAa,EAAE,EAAE;AACvB,MAAM,cAAc,EAAE,CAAC;AACvB,MAAM,YAAY,EAAE;AACpB,KAAK;AACL,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;AACtC,IAAI,OAAO,EAAE;AACb,EAAE;AACF,EAAE,MAAM,QAAQ,CAAC,UAAU,EAAE;AAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACvB,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7C,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;AACzC,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG;AAClB,MAAM,eAAe,EAAE,EAAE,CAAC,eAAe;AACzC,MAAM,SAAS,EAAE,EAAE,CAAC,SAAS;AAC7B,MAAM,aAAa,EAAE,EAAE,CAAC,aAAa;AACrC,MAAM,cAAc,EAAE,EAAE,CAAC,cAAc;AACvC,MAAM,aAAa,EAAE,EAAE,CAAC,aAAa;AACrC,MAAM,cAAc,EAAE,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AAClI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACzC,MAAM;AACN,IAAI;AACJ,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI;AAClB,IAAI,IAAI;AACR,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC;AAChD,MAAM,IAAI,OAAO;AACjB,MAAM,IAAI;AACV,QAAQ,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC;AACjD,UAAU,MAAM,EAAE,IAAI,CAAC,MAAM;AAC7B,UAAU,eAAe,EAAE,OAAO;AAClC,UAAU,YAAY,EAAE,EAAE,CAAC,YAAY;AACvC,UAAU,IAAI,EAAE,QAAQ,CAAC,IAAI;AAC7B,UAAU;AACV,SAAS,CAAC;AACV,MAAM,CAAC,CAAC,MAAM;AACd,QAAQ,OAAO,GAAG,IAAI;AACtB,MAAM;AACN,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7F,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,OAAO;AACzF,MAAM,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,WAAW,CAAC;AAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACzB,QAAQ,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5D,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AACnE,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;AAC/D,MAAM,IAAI,EAAE,EAAE;AACd,QAAQ,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAC3C,QAAQ,EAAE,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;AACxC,QAAQ,EAAE,CAAC,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5D,QAAQ,EAAE,CAAC,eAAe,IAAI,CAAC;AAC/B,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;AACzD,MAAM,CAAC,MAAM;AACb,QAAQ,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,MAAM;AACN,IAAI,CAAC,SAAS;AACd,MAAM,EAAE,CAAC,IAAI,GAAG,KAAK;AACrB,IAAI;AACJ,EAAE;AACF,EAAE,MAAM,cAAc,GAAG;AACzB,IAAI,IAAI;AACR,MAAM,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;AACjH,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACnB,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACnC,MAAM,MAAM,MAAM,mBAAmB,IAAI,GAAG,EAAE;AAC9C,MAAM,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE;AAC9C,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU;AAClC,QAAQ,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACrC,UAAU;AACV,QAAQ;AACR,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1C,QAAQ,IAAI,CAAC,EAAE,EAAE;AACjB,UAAU;AACV,QAAQ;AACR,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACvB,QAAQ,EAAE,CAAC,SAAS,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACrF,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;AACnD,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,qBAAqB,EAAE;AAC9J,UAAU,EAAE,CAAC,aAAa,GAAG,YAAY;AACzC,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,CAAC,MAAM;AACZ,IAAI;AACJ,EAAE;AACF,EAAE,MAAM,cAAc,GAAG;AACzB,IAAI,IAAI;AACR,MAAM,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;AACxG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACnB,QAAQ;AACR,MAAM;AACN,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACnC,MAAM,MAAM,IAAI,mBAAmB,IAAI,GAAG,EAAE;AAC5C,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE;AAC5C,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE;AAC1D,UAAU;AACV,QAAQ;AACR,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACtB,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,QAAQ,EAAE,CAAC,SAAS,GAAG,IAAI;AAC3B,QAAQ,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE;AACpC,MAAM;AACN,MAAM,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE;AACnD,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAC3B,UAAU,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;AACvD,UAAU,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AACnC,QAAQ;AACR,MAAM;AACN,IAAI,CAAC,CAAC,MAAM;AACZ,IAAI;AACJ,EAAE;AACF,EAAE,MAAM,SAAS,GAAG;AACpB,IAAI,IAAI;AACR,MAAM,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE;AAChD,QAAQ,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE;AAC3D,QAAQ,MAAM,EAAE;AAChB,OAAO,CAAC;AACR,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACnB,QAAQ,OAAO,IAAI;AACnB,MAAM;AACN,MAAM,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACzC,MAAM,OAAO,MAAM;AACnB,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,EAAE;AACF,EAAE,WAAW,CAAC,GAAG,EAAE;AACnB,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE;AAC7D,IAAI,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,GAAG,GAAG,CAAC,UAAU,GAAG,EAAE;AAC/E,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,EAAE;AACpD,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7C,IAAI,IAAI,CAAC,EAAE,EAAE;AACb,MAAM;AACN,IAAI;AACJ,IAAI,EAAE,CAAC,aAAa,GAAG,IAAI;AAC3B,IAAI,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACpC,IAAI,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,gBAAgB,EAAE;AAC5D,MAAM,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACzC,IAAI;AACJ,IAAI,IAAI,IAAI,KAAK,gBAAgB,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE;AAC3D,MAAM,EAAE,CAAC,eAAe,GAAG,CAAC;AAC5B,IAAI;AACJ,IAAI,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;AAC/C,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACpC,IAAI;AACJ,EAAE;AACF,EAAE,MAAM,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE;AACpC,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC7C,IAAI,IAAI,CAAC,EAAE,EAAE;AACb,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACnC,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;AAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,EAAE;AAC/C,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AAC3C,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;AAClE,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxH,MAAM,EAAE,CAAC,YAAY,GAAG,EAAE;AAC1B,MAAM,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC;AAC1C,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,QAAQ,EAAE,CAAC,YAAY,GAAG,IAAI;AAC9B,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,IAAI;AACJ,IAAI,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AAC1C,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,IAAI,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;AACpC,MAAM,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;AAClE,MAAM,IAAI,CAAC,MAAM,EAAE;AACnB,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9D,MAAM,MAAM,KAAK,CAAC,qBAAqB,CAAC;AACxC,MAAM,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AAC5C,QAAQ,OAAO,KAAK;AACpB,MAAM;AACN,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AAC5D,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACpE,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;AAChC,IAAI,IAAI,CAAC,OAAO,GAAG;AACnB,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;AACvD,MAAM,GAAG,IAAI,CAAC;AACd,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AAC3B,EAAE;AACF,EAAE,MAAM,GAAG,MAAM;AACjB,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE;AACvB,EAAE,CAAC;AACH,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACtB,MAAM;AACN,IAAI;AACJ,IAAI,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC5E,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE;AACtB,MAAM,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE;AAC9C,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC9B,MAAM;AACN,IAAI;AACJ,EAAE;AACF,EAAE,iBAAiB,GAAG;AACtB,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAC7B,MAAM;AACN,IAAI;AACJ,IAAI,IAAI,CAAC,cAAc,GAAG,UAAU;AACpC,MAAM,MAAM;AACZ,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;AAClC,QAAQ,KAAK,IAAI,CAAC,aAAa,EAAE;AACjC,MAAM,CAAC;AACP,MAAM;AACN,KAAK;AACL,EAAE;AACF;AACA,eAAe,qBAAqB,CAAC,KAAK,EAAE;AAC5C,EAAE,IAAI,KAAK,CAAC,eAAe,EAAE;AAC7B,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI;AAC5C,EAAE;AACF,EAAE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC;AAC7C,EAAE,IAAI,MAAM,EAAE;AACd,IAAI,OAAO,MAAM;AACjB,EAAE;AACF,EAAE,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,KAAK,CAAC;AACpD,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,OAAO,OAAO;AAClB,EAAE;AACF,EAAE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACrC,EAAE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,EAAE,IAAI,UAAU,EAAE;AAClB,IAAI,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/B,EAAE;AACF,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE;AACnD,EAAE,IAAI,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE;AAC1F,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,OAAO,IAAI;AACb;AACA,SAAS,KAAK,CAAC,EAAE,EAAE;AACnB,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;AAC3B,EAAE,CAAC,CAAC;AACJ;AACA,SAAS,cAAc,CAAC,OAAO,EAAE;AACjC,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACzD,EAAE,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;AAChD,EAAE,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC;AACA,eAAe,qBAAqB,CAAC,KAAK,EAAE;AAC5C,EAAE,MAAM,IAAI,GAAG,cAAc,CAAC,kBAAkB,CAAC;AACjD,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC9B,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,MAAM,KAAK,GAAG,cAAc,CAAC,eAAe,CAAC,IAAI,YAAY;AAC/D,EAAE,MAAM,UAAU,GAAG,CAAC;AACtB,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEhC,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;;AAEtC,8FAA8F,CAAC;AAC/F,EAAE,IAAI;AACN,IAAI,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,sBAAsB,EAAE;AACpD,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AAC3B,QAAQ,IAAI,EAAE;AACd,UAAU,UAAU,EAAE,EAAE;AACxB,UAAU,QAAQ,EAAE;AACpB,YAAY;AACZ,cAAc,OAAO,EAAE,uEAAuE;AAC9F,cAAc,IAAI,EAAE;AACpB,aAAa;AACb,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM;AAC/C,WAAW;AACX,UAAU,KAAK;AACf,UAAU,WAAW,EAAE;AACvB,SAAS;AACT,QAAQ,OAAO,EAAE,EAAE;AACnB,QAAQ,QAAQ,EAAE,SAAS;AAC3B,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB;AACtC,OAAO,CAAC;AACR,MAAM,OAAO,EAAE;AACf,QAAQ,aAAa,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/C,QAAQ,cAAc,EAAE;AACxB,OAAO;AACP,MAAM,MAAM,EAAE;AACd,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACjB,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACjC,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO;AACvD,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACrC,MAAM,OAAO,IAAI;AACjB,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;AAC7D,IAAI,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI;AACtC,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,IAAI;AACf,EAAE;AACF;AACA,SAAS,UAAU,CAAC,IAAI,EAAE;AAC1B,EAAE,IAAI;AACN,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACnC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAChC,MAAM,OAAO,EAAE;AACf,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,QAAQ,CAAC;AAC3I,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,EAAE;AACb,EAAE;AACF;AACA,SAAS,qBAAqB,GAAG;AACjC,EAAE,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AAC3C,IAAI,OAAO,KAAK;AAChB,EAAE;AACF,EAAE,IAAI;AACN,IAAI,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC;AAClD,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,OAAO,KAAK;AAClB,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,IAAI,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;AACnC,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,KAAK;AAChB,EAAE;AACF;AACA,SAAS,cAAc,CAAC,GAAG,EAAE;AAC7B,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAChC,EAAE,MAAM,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;AAChC,EAAE,OAAO,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE;AAC/C;AACA,SAAS,eAAe,CAAC,KAAK,EAAE;AAChC,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa;AACrC,EAAE,IAAI,OAAO,MAAM,EAAE,WAAW,KAAK,UAAU,EAAE;AACjD,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAChC,EAAE;AACF,EAAE,MAAM,GAAG,GAAG,CAAC;AACf,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;;AAEhC,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;;AAEtC,gDAAgD,CAAC;AACjD,EAAE,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AAC9H;AACA,SAAS,WAAW,CAAC,EAAE,EAAE;AACzB,EAAE,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE;AACxC,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AAChC,EAAE;AACF,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAClC,IAAI,MAAM,KAAK,GAAG,UAAU;AAC5B,MAAM,MAAM;AACZ,QAAQ,EAAE,CAAC,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,KAAK,CAAC;AACtB,MAAM,CAAC;AACP,MAAM;AACN,KAAK;AACL,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;AACtC,MAAM,YAAY,CAAC,KAAK,CAAC;AACzB,MAAM,OAAO,CAAC,IAAI,CAAC;AACnB,IAAI,CAAC,CAAC;AACN,IAAI,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AACvC,MAAM,YAAY,CAAC,KAAK,CAAC;AACzB,MAAM,EAAE,CAAC,KAAK,EAAE;AAChB,MAAM,OAAO,CAAC,KAAK,CAAC;AACpB,IAAI,CAAC,CAAC;AACN,EAAE,CAAC,CAAC;AACJ;AACA,IAAI,eAAe,EAAE;AACrB,MAAM,mBAAmB,GAAG,GAAG;AAC/B,IAAI,QAAQ,GAAG,EAAE;AACjB,MAAM,WAAW,GAAG,IAAI,SAAS,EAAE;AACnC,MAAM,cAAc,GAAG,IAAI,SAAS,EAAE;AACtC,MAAM,qBAAqB,GAAG,IAAI,SAAS,EAAE;AAC7C,SAAS,UAAU,GAAG;AACtB,EAAE,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE;AACzC,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI;AACvB,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,EAAE;AACF,EAAE,cAAc,CAAC,KAAK,EAAE;AACxB,EAAE,qBAAqB,CAAC,KAAK,EAAE;AAC/B,EAAE,WAAW,CAAC,KAAK,EAAE;AACrB;AACA,SAAS,QAAQ,GAAG;AACpB,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACxB,EAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;AAC3C,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7C,IAAI,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC;AACrG,IAAI,OAAO;AACX,MAAM,GAAG,CAAC;AACV,MAAM,QAAQ,EAAE,GAAG,GAAG,SAAS;AAC/B,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI;AAClB;AACA,MAAM,QAAQ,EAAE,WAAW,GAAG,CAAC,IAAI,GAAG,GAAG,WAAW,GAAG,mBAAmB;AAC1E,MAAM,aAAa,EAAE,CAAC,CAAC,aAAa;AACpC;AACA,MAAM,OAAO,EAAE,CAAC,CAAC;AACjB;AACA,KAAK;AACL,EAAE,CAAC,CAAC;AACJ;AACA,SAAS,YAAY,CAAC,IAAI,EAAE;AAC5B,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAClC,IAAI,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;AAC9D,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;AACjC,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE;AACzB,MAAM,OAAO,KAAK,GAAG,KAAK;AAC1B,IAAI;AACJ,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE;AACxD,MAAM,OAAO,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS;AAC3C,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS;AAC3C,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AACrC,EAAE,CAAC,CAAC;AACJ;AACA,SAAS,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE;AACpC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK;AACxC,IAAI,IAAI,QAAQ,GAAG,EAAE;AACrB,IAAI,IAAI,OAAO,GAAG,KAAK;AACvB,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;AACnC,IAAI,SAAS,CAAC,MAAM;AACpB,MAAM,UAAU,EAAE;AAClB,IAAI,CAAC,CAAC;AACN,IAAI,eAAe,aAAa,CAAC,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE;AACpE,MAAM;AACN,QAAQ;AACR,MAAM;AACN,IAAI;AACJ,IAAI,eAAe,YAAY,GAAG;AAClC,MAAM,OAAO,GAAG,IAAI;AACpB,MAAM,UAAU,CAAC,kBAAkB,CAAC;AACpC,MAAM,MAAM,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;AACtC,IAAI;AACJ,IAAI,SAAS,gBAAgB,GAAG;AAChC,MAAM,KAAK,IAAI,EAAE;AACjB,IAAI;AACJ,IAAI,SAAS,iBAAiB,GAAG;AACjC,MAAM,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;AACjE,IAAI;AACJ,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,WAAW,KAAK;AAClD,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK;AACzC,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,kCAAkC,CAAC,CAAC;AAC9D,MAAM,CAAC,CAAC;AACR,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,8EAA8E,CAAC,CAAC;AACxG,IAAI,CAAC,CAAC;AACN,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,kOAAkO,CAAC,CAAC;AAC1P,IAAI,MAAM,CAAC,WAAW,EAAE;AACxB,MAAM,OAAO,EAAE,eAAe;AAC9B,MAAM,OAAO,EAAE,YAAY;AAC3B,MAAM,QAAQ,EAAE,OAAO;AACvB,MAAM,QAAQ,EAAE,CAAC,WAAW,KAAK;AACjC,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAClE,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;AAC3C,MAAM,CAAC;AACP,MAAM,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI;AAC9B,KAAK,CAAC;AACN,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAC5C,IAAI,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,oHAAoH,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,gDAAgD,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC,4FAA4F,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC,gDAAgD,EAAE,WAAW,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC;AAC1hB,MAAM,IAAI,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,QAAQ,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,+FAA+F,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,mEAAmE,CAAC,CAAC;AAC5N,MAAM,CAAC,MAAM;AACb,QAAQ,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,MAAM;AACN,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACxC,IAAI,CAAC,MAAM;AACX,MAAM,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AACpC,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;AACvC,IAAI;AACJ,MAAM,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AACpC,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AACjC,IAAI,IAAI,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAClE,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,uCAAuC,CAAC,CAAC;AACjE,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;AACvE,QAAQ,UAAU,CAAC,CAAC,CAAC;AACrB,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;AACzD,MAAM;AACN,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACxC,IAAI,CAAC,MAAM;AACX,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,MAAM;AACN,QAAQ,IAAI,IAAI,GAAG,SAAS,WAAW,EAAE;AACzC,UAAU,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACrE,QAAQ,CAAC;AACT,QAAQ,UAAU,CAAC,WAAW,EAAE;AAChC,UAAU,KAAK,EAAE,wBAAwB;AACzC,UAAU,WAAW,EAAE,wDAAwD;AAC/E,UAAU,IAAI;AACd,UAAU,QAAQ,EAAE,CAAC,WAAW,KAAK;AACrC,YAAY,MAAM,CAAC,WAAW,EAAE;AAChC,cAAc,OAAO,EAAE,aAAa;AACpC,cAAc,OAAO,EAAE,gBAAgB;AACvC,cAAc,IAAI,EAAE;AACpB,aAAa,CAAC;AACd,UAAU;AACV,SAAS,CAAC;AACV,MAAM;AACN,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC;AACvC,EAAE,CAAC,CAAC;AACJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { b as private_env } from './shared-server-DaWdgxVh.js';
2
- import { L as LibraryAPNsService } from './library-apns-Dl3iRE2h.js';
3
- import { c as createPendingRequest } from './pending-requests-C9p57WoU.js';
2
+ import { L as LibraryAPNsService } from './library-apns-D8RPINlv.js';
3
+ import { c as createPendingRequest } from './pending-requests-8rWjrF6d.js';
4
4
  import { v as validateAuth } from './auth-DuunT7Cg.js';
5
5
  import admin from 'firebase-admin';
6
6
  import { t as toErrorMessage } from './error-DDXB3duW.js';
@@ -14,6 +14,7 @@ import 'child_process';
14
14
  import 'jsonwebtoken';
15
15
  import 'util';
16
16
  import 'better-sqlite3';
17
+ import './shooter-home-4f_HkdGI.js';
17
18
  import 'crypto';
18
19
  import './registry-D4J_CuzW.js';
19
20
  import './qwen-reader-DGfUbKaJ.js';
@@ -193,12 +194,6 @@ function intelligentNotificationFilter(title, message, data, waitForResponse = f
193
194
  send: true
194
195
  };
195
196
  }
196
- if (source === "stop-hook") {
197
- return {
198
- reason: "Stop hook completion notification - session finished",
199
- send: true
200
- };
201
- }
202
197
  const spamPatterns = [
203
198
  /PreToolUse/i,
204
199
  // Any PreToolUse notifications
@@ -256,12 +251,18 @@ function isDuplicateNotification(title, message, data, waitForResponse = false)
256
251
  notificationCache.delete(k);
257
252
  }
258
253
  }
254
+ notificationCache.set(key, now);
259
255
  return false;
260
256
  }
261
- function recordNotification(title, message, data) {
257
+ function notificationKey(title, message, data) {
262
258
  const dataRecord = data;
263
- const key = dataRecord?.dedupKey ? dataRecord.dedupKey : `${title}|${message}|${data?.category || "unknown"}`;
264
- notificationCache.set(key, Date.now());
259
+ return dataRecord?.dedupKey ?? `${title}|${message}|${data?.category || "unknown"}`;
260
+ }
261
+ function recordNotification(title, message, data) {
262
+ notificationCache.set(notificationKey(title, message, data), Date.now());
263
+ }
264
+ function releaseNotification(title, message, data) {
265
+ notificationCache.delete(notificationKey(title, message, data));
265
266
  }
266
267
  const POST = async ({ request }) => {
267
268
  try {
@@ -408,6 +409,7 @@ const POST = async ({ request }) => {
408
409
  });
409
410
  } else {
410
411
  console.error(`[notify] FCM delivery failed: ${fcmResult.error}`);
412
+ releaseNotification(title, message, data);
411
413
  addNotification(
412
414
  buildNotificationRecord(
413
415
  canonicalRequestId,
@@ -472,6 +474,7 @@ const POST = async ({ request }) => {
472
474
  } catch (notificationError) {
473
475
  const notifErrMsg = toErrorMessage(notificationError);
474
476
  console.error(`[notify] APNs delivery failed: ${notifErrMsg}`);
477
+ releaseNotification(title, message, data);
475
478
  addNotification(
476
479
  buildNotificationRecord(canonicalRequestId, title, message, "failed", data, notifErrMsg)
477
480
  );
@@ -513,4 +516,4 @@ const GET = ({ request, url }) => {
513
516
  };
514
517
 
515
518
  export { GET, POST };
516
- //# sourceMappingURL=_server.ts-BWVlO8iV.js.map
519
+ //# sourceMappingURL=_server.ts-05JJOdcX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-05JJOdcX.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/notify/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LibraryAPNsService } from \"../../../../chunks/library-apns.js\";\nimport { c as createPendingRequest } from \"../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport admin from \"firebase-admin\";\nimport { t as toErrorMessage } from \"../../../../chunks/error.js\";\nimport { b as broadcastEvent } from \"../../../../chunks/guest-registry.js\";\nimport { existsSync, readFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\nimport \"../../../../chunks/super-session-handler.js\";\nimport { json } from \"@sveltejs/kit\";\nconst MAX_HISTORY = 100;\nconst history = [];\nfunction addNotification(record) {\n history.unshift(record);\n if (history.length > MAX_HISTORY) {\n history.length = MAX_HISTORY;\n }\n}\nfunction getNotifications(limit = 50) {\n return history.slice(0, limit);\n}\nlet app = null;\nfunction isFCMConfigured() {\n return !!(process.env.FCM_PROJECT_ID && process.env.FCM_CLIENT_EMAIL && process.env.FCM_PRIVATE_KEY);\n}\nasync function sendFCMNotification(deviceToken, payload) {\n try {\n const fcmApp = getApp();\n const message = {\n android: {\n priority: \"high\",\n // Ensures delivery even in Doze mode\n ttl: 3e5\n // 5 minutes TTL (matches pending request expiry)\n },\n data: {\n body: payload.body || payload.message || \"\",\n category: payload.category ?? (typeof payload.data?.category === \"string\" ? payload.data.category : \"\"),\n project: typeof payload.data?.project === \"string\" ? payload.data.project : \"\",\n requestId: typeof payload.data?.requestId === \"string\" ? payload.data.requestId : \"\",\n source: typeof payload.data?.source === \"string\" ? payload.data.source : \"\",\n subtitle: payload.subtitle ?? \"\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title: payload.title,\n toolInput: payload.data?.toolInput ? JSON.stringify(payload.data.toolInput) : \"\",\n toolName: typeof payload.data?.toolName === \"string\" ? payload.data.toolName : \"\",\n type: typeof payload.data?.type === \"string\" ? payload.data.type : \"\"\n },\n token: deviceToken\n };\n const messageId = await admin.messaging(fcmApp).send(message);\n return { messageId, success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(\"[FCM] Send failed:\", errorMessage);\n return { error: errorMessage, success: false };\n }\n}\nfunction getApp() {\n if (!app) {\n const projectId = process.env.FCM_PROJECT_ID;\n const clientEmail = process.env.FCM_CLIENT_EMAIL;\n const privateKey = process.env.FCM_PRIVATE_KEY?.replace(/\\\\n/g, \"\\n\");\n if (!projectId || !clientEmail || !privateKey) {\n throw new Error(\n \"FCM not configured: missing FCM_PROJECT_ID, FCM_CLIENT_EMAIL, or FCM_PRIVATE_KEY\"\n );\n }\n app = admin.initializeApp({\n credential: admin.credential.cert({ clientEmail, privateKey, projectId })\n });\n }\n return app;\n}\nfunction readPersistedDeviceToken(platform) {\n const tokensFile = join(homedir(), \".shooter\", \"device-tokens.json\");\n if (!existsSync(tokensFile)) {\n return void 0;\n }\n try {\n const parsed = JSON.parse(readFileSync(tokensFile, \"utf-8\"));\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n const value = parsed[platform];\n return typeof value === \"string\" && value ? value : void 0;\n }\n } catch {\n }\n return void 0;\n}\nlet apnsSingleton = null;\nfunction getAPNsClient() {\n if (!apnsSingleton) {\n apnsSingleton = new LibraryAPNsService();\n }\n return apnsSingleton;\n}\nconst notificationCache = /* @__PURE__ */ new Map();\nconst DEDUP_WINDOW = 1e4;\nfunction broadcastHookEvent(body) {\n const data = body.data ?? {};\n const eventType = typeof data.eventType === \"string\" ? data.eventType : typeof body.eventType === \"string\" ? body.eventType : \"\";\n const tool = typeof data.tool === \"string\" ? data.tool : \"\";\n const terminalId = typeof data.terminalId === \"string\" ? data.terminalId : void 0;\n const sessionId = typeof data.sessionId === \"string\" ? data.sessionId : void 0;\n switch (eventType) {\n case \"error\":\n broadcastEvent({\n error: typeof data.error === \"string\" ? data.error : typeof data.message === \"string\" ? data.message : \"Unknown error\",\n terminalId,\n tool,\n type: \"tool-failed\"\n });\n break;\n case \"idle_input\":\n case \"session.idle\":\n broadcastEvent({\n message: typeof data.message === \"string\" ? data.message : \"\",\n sessionId,\n terminalId,\n type: \"agent-idle\"\n });\n break;\n case \"permission\":\n case \"permission_notification\":\n if (data.requestId && data.toolName) {\n broadcastEvent({\n input: typeof data.toolInput === \"object\" && data.toolInput !== null ? data.toolInput : {},\n requestId: data.requestId,\n tool: data.toolName,\n type: \"permission-requested\"\n });\n }\n break;\n case \"question\":\n broadcastEvent({\n message: typeof data.message === \"string\" ? data.message : \"\",\n sessionId,\n terminalId,\n type: \"agent-question\"\n });\n break;\n case \"tool.after\":\n broadcastEvent({ success: true, terminalId, tool, type: \"tool-completed\" });\n break;\n case \"tool.before\":\n broadcastEvent({\n command: typeof data.command === \"string\" ? data.command : \"\",\n filePath: typeof data.filePath === \"string\" ? data.filePath : typeof data.files === \"string\" ? data.files : \"\",\n terminalId,\n tool,\n type: \"tool-started\"\n });\n break;\n }\n}\nfunction buildNotificationRecord(id, title, message, status, data, error) {\n return {\n category: data?.category ?? null,\n data: data ?? null,\n error: error ?? null,\n id,\n message,\n project: data?.project ?? null,\n source: data?.source ?? null,\n status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n title,\n tool: data?.tool ?? null\n };\n}\nfunction intelligentNotificationFilter(title, message, data, waitForResponse = false) {\n const source = data?.source || \"unknown\";\n if (isDuplicateNotification(title, message, data, waitForResponse)) {\n return {\n reason: \"Duplicate notification within 10-second window\",\n send: false\n };\n }\n if (source === \"smart-completion-detector\" || source === \"shooter-completion-detector\") {\n return {\n reason: \"Smart completion detector - completion or intervention needed\",\n send: true\n };\n }\n const spamPatterns = [\n /PreToolUse/i,\n // Any PreToolUse notifications\n /PostToolUse/i,\n // Any PostToolUse notifications\n /^(Read|Write|Edit|Bash)\\s+Starting\\s*\\|\\s*\\w+$/i,\n // Only basic tool starting patterns\n /^unknown\\s*\\|\\s*\\w+$/i\n // Only \"unknown | projectname\" exactly\n ];\n const isSpam = spamPatterns.some((pattern) => pattern.test(title) || pattern.test(message));\n if (isSpam) {\n return {\n reason: \"Filtered spam notification from old hook system\",\n send: false\n };\n }\n const importantPatterns = [\n /session complete/i,\n /intervention needed/i,\n /error/i,\n /failed/i,\n /blocked/i,\n /attention/i\n ];\n const isImportant = importantPatterns.some(\n (pattern) => pattern.test(title) || pattern.test(message)\n );\n if (isImportant) {\n return {\n reason: \"Important notification - completion or intervention\",\n send: true\n };\n }\n return {\n reason: \"General notification - allowing by default\",\n send: true\n };\n}\nfunction isDuplicateNotification(title, message, data, waitForResponse = false) {\n if (waitForResponse) {\n return false;\n }\n const dataRecord = data;\n const key = dataRecord?.dedupKey ? dataRecord.dedupKey : `${title}|${message}|${data?.category || \"unknown\"}`;\n const now = Date.now();\n if (notificationCache.has(key)) {\n const lastSent = notificationCache.get(key) ?? 0;\n if (now - lastSent < DEDUP_WINDOW) {\n return true;\n }\n }\n for (const [k, v] of notificationCache.entries()) {\n if (now - v > DEDUP_WINDOW) {\n notificationCache.delete(k);\n }\n }\n notificationCache.set(key, now);\n return false;\n}\nfunction notificationKey(title, message, data) {\n const dataRecord = data;\n return dataRecord?.dedupKey ?? `${title}|${message}|${data?.category || \"unknown\"}`;\n}\nfunction recordNotification(title, message, data) {\n notificationCache.set(notificationKey(title, message, data), Date.now());\n}\nfunction releaseNotification(title, message, data) {\n notificationCache.delete(notificationKey(title, message, data));\n}\nconst POST = async ({ request }) => {\n try {\n const apnsClient = getAPNsClient();\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const rawBody = await request.json();\n if (!rawBody || typeof rawBody !== \"object\" || Array.isArray(rawBody)) {\n return json({ error: \"Request body must be a JSON object\" }, { status: 400 });\n }\n const body = rawBody;\n const data = body.data;\n const requestDeviceToken = body.deviceToken;\n const message = body.message;\n const title = body.title;\n const subtitle = typeof body.subtitle === \"string\" ? body.subtitle : void 0;\n const skipPush = typeof body.skipPush === \"boolean\" ? body.skipPush : false;\n const waitForResponse = typeof body.waitForResponse === \"boolean\" ? body.waitForResponse : false;\n const forcePush = typeof body.forcePush === \"boolean\" ? body.forcePush : false;\n const notificationCategory = typeof body.notificationCategory === \"string\" && body.notificationCategory.length > 0 ? body.notificationCategory : void 0;\n const question = typeof body.question === \"string\" ? body.question : void 0;\n const options = Array.isArray(body.options) && body.options.every((o) => o && typeof o === \"object\") ? body.options : void 0;\n const responseKindRaw = body.responseKind;\n const responseKind = responseKindRaw === \"hook\" || responseKindRaw === \"pty\" || responseKindRaw === \"info\" ? responseKindRaw : void 0;\n try {\n broadcastHookEvent(body);\n } catch {\n }\n if (!title || typeof title !== \"string\" || !message || typeof message !== \"string\") {\n return json({ error: \"Title and message are required and must be strings\" }, { status: 400 });\n }\n if (requestDeviceToken !== void 0 && typeof requestDeviceToken !== \"string\") {\n return json({ error: \"deviceToken must be a string\" }, { status: 400 });\n }\n const requestId = Math.random().toString(36).substring(2, 15);\n const dataRequestId = typeof data?.requestId === \"string\" ? data.requestId : void 0;\n const canonicalRequestId = dataRequestId || requestId;\n const shouldSendNotification = intelligentNotificationFilter(\n title,\n message,\n data,\n waitForResponse\n );\n if (!shouldSendNotification.send) {\n addNotification(\n buildNotificationRecord(\n canonicalRequestId,\n title,\n message,\n \"filtered\",\n data,\n shouldSendNotification.reason\n )\n );\n return json({\n message: \"Notification filtered (not sent)\",\n reason: shouldSendNotification.reason,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n if (skipPush && !forcePush) {\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n options,\n question: question ?? null,\n responseKind: responseKind ?? \"hook\",\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(buildNotificationRecord(canonicalRequestId, title, message, \"skipped\", data));\n return json({\n message: \"Push skipped (WebSocket clients connected)\",\n requestId: canonicalRequestId,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n const payload = {\n badge: 1,\n body: message,\n // notificationCategory wins when explicitly set so plan-mode /\n // elicitation flows can pick CLAUDE_PLAN_APPROVAL / CHOICE_2..4.\n // Falls back to CLAUDE_PERMISSION for the legacy bidirectional\n // permission flow when only waitForResponse is provided.\n category: notificationCategory ?? (waitForResponse ? \"CLAUDE_PERMISSION\" : void 0),\n data: {\n ...data,\n requestId: canonicalRequestId,\n source: \"modern-apns-api\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n waitForResponse: waitForResponse || false\n },\n message: null,\n sound: \"default\",\n ...subtitle ? { subtitle } : {},\n title\n };\n const platform = private_env.DEVICE_PLATFORM || \"ios\";\n if (platform === \"android\") {\n if (!isFCMConfigured()) {\n return json(\n {\n details: \"Missing FCM_PROJECT_ID, FCM_CLIENT_EMAIL, or FCM_PRIVATE_KEY environment variables\",\n error: \"FCM not configured\"\n },\n { status: 500 }\n );\n }\n const androidToken = requestDeviceToken?.trim() || private_env.ANDROID_DEVICE_TOKEN?.trim() || readPersistedDeviceToken(\"android\");\n if (!androidToken) {\n return json(\n {\n details: \"No Android device token available — set ANDROID_DEVICE_TOKEN, pass deviceToken in the request body, or open the Android app so it can auto-register its FCM token.\",\n error: \"No device token configured\"\n },\n { status: 500 }\n );\n }\n const fcmResult = await sendFCMNotification(androidToken, payload);\n if (fcmResult.success) {\n recordNotification(title, message, data);\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n options,\n question: question ?? null,\n responseKind: responseKind ?? \"hook\",\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(buildNotificationRecord(canonicalRequestId, title, message, \"sent\", data));\n return json({\n message: \"Notification sent successfully\",\n requestId: canonicalRequestId,\n result: { messageId: fcmResult.messageId },\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } else {\n console.error(`[notify] FCM delivery failed: ${fcmResult.error}`);\n releaseNotification(title, message, data);\n addNotification(\n buildNotificationRecord(\n canonicalRequestId,\n title,\n message,\n \"failed\",\n data,\n fcmResult.error\n )\n );\n return json(\n {\n details: fcmResult.error,\n error: \"Failed to send notification\",\n requestId: canonicalRequestId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n } else {\n if (!apnsClient.isConfigured()) {\n return json(\n {\n details: \"Missing APNS_KEY, APNS_KEY_ID, or APNS_TEAM_ID environment variables\",\n error: \"APNs client not configured\"\n },\n { status: 500 }\n );\n }\n const deviceToken = requestDeviceToken?.trim() || private_env.DEVICE_TOKEN?.trim();\n if (!deviceToken) {\n return json(\n {\n details: \"DEVICE_TOKEN environment variable is missing and no deviceToken in request body\",\n error: \"No device token configured\"\n },\n { status: 500 }\n );\n }\n try {\n const result = await apnsClient.sendNotification(deviceToken, payload);\n recordNotification(title, message, data);\n if (waitForResponse) {\n createPendingRequest(canonicalRequestId, {\n options,\n question: question ?? null,\n responseKind: responseKind ?? \"hook\",\n sessionId: data?.sessionId || \"\",\n toolInput: data?.toolInput || {},\n toolName: data?.toolName || \"\"\n });\n }\n addNotification(buildNotificationRecord(canonicalRequestId, title, message, \"sent\", data));\n return json({\n message: \"Notification sent successfully\",\n requestId: canonicalRequestId,\n result,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (notificationError) {\n const notifErrMsg = toErrorMessage(notificationError);\n console.error(`[notify] APNs delivery failed: ${notifErrMsg}`);\n releaseNotification(title, message, data);\n addNotification(\n buildNotificationRecord(canonicalRequestId, title, message, \"failed\", data, notifErrMsg)\n );\n return json(\n {\n details: notifErrMsg,\n error: \"Failed to send notification\",\n requestId: canonicalRequestId,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n }\n } catch (error) {\n console.error(\"Notification error:\", error);\n return json(\n {\n details: toErrorMessage(error),\n error: \"Failed to send notification\",\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n },\n { status: 500 }\n );\n }\n};\nconst GET = ({ request, url }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const limit = parseInt(url.searchParams.get(\"limit\") || \"50\");\n const notifications = getNotifications(limit);\n return json({\n count: notifications.length,\n notifications,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
@@ -71,10 +71,14 @@ const POST = async ({ request }) => {
71
71
  ...normalizedReqHeaders
72
72
  };
73
73
  if (provider === "anthropic") {
74
- forwardHeaders["x-api-key"] = apiKeyEnv.anthropic;
74
+ if (apiKeyEnv.anthropic) {
75
+ forwardHeaders["x-api-key"] = apiKeyEnv.anthropic;
76
+ }
75
77
  forwardHeaders["anthropic-version"] = forwardHeaders["anthropic-version"] ?? "2023-06-01";
76
78
  } else if (provider === "google-ai") {
77
- forwardHeaders["x-goog-api-key"] = apiKeyEnv["google-ai"];
79
+ if (apiKeyEnv["google-ai"]) {
80
+ forwardHeaders["x-goog-api-key"] = apiKeyEnv["google-ai"];
81
+ }
78
82
  } else if (provider === "openai") {
79
83
  if (apiKeyEnv.openai) {
80
84
  forwardHeaders.Authorization = `Bearer ${apiKeyEnv.openai}`;
@@ -116,4 +120,4 @@ const POST = async ({ request }) => {
116
120
  };
117
121
 
118
122
  export { POST };
119
- //# sourceMappingURL=_server.ts-BevnuePu.js.map
123
+ //# sourceMappingURL=_server.ts-BCljU9Sg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-BCljU9Sg.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/neurolink-proxy/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst ALLOWED_CLIENT_HEADERS = {\n anthropic: /* @__PURE__ */ new Set([\"anthropic-beta\", \"anthropic-version\"]),\n \"google-ai\": /* @__PURE__ */ new Set([]),\n litellm: /* @__PURE__ */ new Set([]),\n mistral: /* @__PURE__ */ new Set([]),\n openai: /* @__PURE__ */ new Set([\"openai-organization\", \"openai-project\"])\n};\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let payload;\n try {\n payload = await request.json();\n } catch {\n return json({ error: \"Invalid JSON body\" }, { status: 400 });\n }\n if (!payload || typeof payload !== \"object\" || typeof payload.provider !== \"string\" || typeof payload.url !== \"string\" || !payload.headers || typeof payload.headers !== \"object\") {\n return json({ error: \"Invalid proxy payload\" }, { status: 400 });\n }\n const {\n body,\n headers: reqHeaders,\n provider,\n url\n } = payload;\n const ALLOWED_PREFIXES = {\n anthropic: \"https://api.anthropic.com/\",\n \"google-ai\": \"https://generativelanguage.googleapis.com/\",\n mistral: \"https://api.mistral.ai/\",\n openai: \"https://api.openai.com/\"\n };\n if (provider === \"litellm\") {\n const rawBase = private_env.LITELLM_BASE_URL?.trim();\n if (!rawBase) {\n return json({ error: \"LiteLLM is not configured on this server\" }, { status: 403 });\n }\n const litellmPrefix = `${rawBase.replace(/\\/+$/, \"\")}/`;\n if (!url.startsWith(litellmPrefix)) {\n return json({ error: `Provider \"${provider}\" or URL not allowed` }, { status: 403 });\n }\n } else {\n const allowedPrefix = ALLOWED_PREFIXES[provider];\n if (!allowedPrefix || !url.startsWith(allowedPrefix)) {\n return json({ error: `Provider \"${provider}\" or URL not allowed` }, { status: 403 });\n }\n }\n const apiKeyEnv = {\n anthropic: private_env.ANTHROPIC_API_KEY ?? \"\",\n \"google-ai\": private_env.GOOGLE_AI_API_KEY ?? \"\",\n litellm: private_env.LITELLM_API_KEY ?? \"\",\n mistral: private_env.MISTRAL_API_KEY ?? \"\",\n openai: private_env.OPENAI_API_KEY ?? \"\"\n };\n const allowedForProvider = ALLOWED_CLIENT_HEADERS[provider] ?? /* @__PURE__ */ new Set();\n const normalizedReqHeaders = {};\n for (const [k, v] of Object.entries(reqHeaders)) {\n const key = k.toLowerCase();\n if (allowedForProvider.has(key)) {\n normalizedReqHeaders[key] = v;\n }\n }\n const forwardHeaders = {\n \"Content-Type\": \"application/json\",\n ...normalizedReqHeaders\n };\n if (provider === \"anthropic\") {\n if (apiKeyEnv.anthropic) {\n forwardHeaders[\"x-api-key\"] = apiKeyEnv.anthropic;\n }\n forwardHeaders[\"anthropic-version\"] = forwardHeaders[\"anthropic-version\"] ?? \"2023-06-01\";\n } else if (provider === \"google-ai\") {\n if (apiKeyEnv[\"google-ai\"]) {\n forwardHeaders[\"x-goog-api-key\"] = apiKeyEnv[\"google-ai\"];\n }\n } else if (provider === \"openai\") {\n if (apiKeyEnv.openai) {\n forwardHeaders.Authorization = `Bearer ${apiKeyEnv.openai}`;\n }\n } else if (provider === \"mistral\") {\n if (apiKeyEnv.mistral) {\n forwardHeaders.Authorization = `Bearer ${apiKeyEnv.mistral}`;\n }\n } else if (provider === \"litellm\") {\n if (apiKeyEnv.litellm) {\n forwardHeaders.Authorization = `Bearer ${apiKeyEnv.litellm}`;\n }\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => {\n controller.abort();\n }, 3e4);\n let resp;\n try {\n resp = await fetch(url, {\n body: JSON.stringify(body),\n headers: forwardHeaders,\n method: \"POST\",\n signal: controller.signal\n });\n } catch (err) {\n clearTimeout(timeout);\n const message = err instanceof Error ? err.message : \"Upstream request failed\";\n return json({ error: message }, { status: 502 });\n }\n clearTimeout(timeout);\n let data;\n try {\n data = await resp.json();\n } catch {\n return json({ error: \"Upstream returned non-JSON response\" }, { status: 502 });\n }\n return json(data, { status: resp.status });\n};\nexport {\n POST\n};\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { b as private_env } from './shared-server-DaWdgxVh.js';
2
- import { L as LibraryAPNsService } from './library-apns-Dl3iRE2h.js';
2
+ import { L as LibraryAPNsService } from './library-apns-D8RPINlv.js';
3
3
  import { v as validateAuth } from './auth-DuunT7Cg.js';
4
4
  import { j as json } from './index-CoD1IJuy.js';
5
5
  import 'child_process';
@@ -36,4 +36,4 @@ const GET = ({ request }) => {
36
36
  };
37
37
 
38
38
  export { GET };
39
- //# sourceMappingURL=_server.ts-D-vgx5UZ.js.map
39
+ //# sourceMappingURL=_server.ts-BTmknWpO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-D-vgx5UZ.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/debug/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LibraryAPNsService } from \"../../../../chunks/library-apns.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const apnsClient = new LibraryAPNsService();\n const deviceToken = private_env.DEVICE_TOKEN?.trim();\n return json({\n apns: {\n configured: apnsClient.isConfigured(),\n environment: private_env.APNS_PRODUCTION === \"true\" ? \"production\" : \"sandbox\",\n hasBundleId: !!private_env.APNS_BUNDLE_ID,\n hasKey: !!private_env.APNS_KEY,\n hasKeyId: !!private_env.APNS_KEY_ID,\n hasTeamId: !!private_env.APNS_TEAM_ID\n },\n deviceToken: {\n exists: !!deviceToken,\n length: deviceToken ? deviceToken.length : 0,\n valid: deviceToken ? /^[a-f0-9]{64}$/i.test(deviceToken) : false\n },\n environment: private_env.NODE_ENV || \"development\",\n hasApiKey: !!private_env.API_KEY,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;;AAIK,MAAC,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK;AAC7B,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE;AAC7C,EAAE,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE;AACtD,EAAE,OAAO,IAAI,CAAC;AACd,IAAI,IAAI,EAAE;AACV,MAAM,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE;AAC3C,MAAM,WAAW,EAAE,WAAW,CAAC,eAAe,KAAK,MAAM,GAAG,YAAY,GAAG,SAAS;AACpF,MAAM,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc;AAC/C,MAAM,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ;AACpC,MAAM,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW;AACzC,MAAM,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC;AAC/B,KAAK;AACL,IAAI,WAAW,EAAE;AACjB,MAAM,MAAM,EAAE,CAAC,CAAC,WAAW;AAC3B,MAAM,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAClD,MAAM,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG;AACjE,KAAK;AACL,IAAI,WAAW,EAAE,WAAW,CAAC,QAAQ,IAAI,aAAa;AACtD,IAAI,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO;AACpC,IAAI,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACvD,GAAG,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"_server.ts-BTmknWpO.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/debug/_server.ts.js"],"sourcesContent":["import { b as private_env } from \"../../../../chunks/shared-server.js\";\nimport { L as LibraryAPNsService } from \"../../../../chunks/library-apns.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const apnsClient = new LibraryAPNsService();\n const deviceToken = private_env.DEVICE_TOKEN?.trim();\n return json({\n apns: {\n configured: apnsClient.isConfigured(),\n environment: private_env.APNS_PRODUCTION === \"true\" ? \"production\" : \"sandbox\",\n hasBundleId: !!private_env.APNS_BUNDLE_ID,\n hasKey: !!private_env.APNS_KEY,\n hasKeyId: !!private_env.APNS_KEY_ID,\n hasTeamId: !!private_env.APNS_TEAM_ID\n },\n deviceToken: {\n exists: !!deviceToken,\n length: deviceToken ? deviceToken.length : 0,\n valid: deviceToken ? /^[a-f0-9]{64}$/i.test(deviceToken) : false\n },\n environment: private_env.NODE_ENV || \"development\",\n hasApiKey: !!private_env.API_KEY,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;;AAIK,MAAC,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK;AAC7B,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,MAAM,UAAU,GAAG,IAAI,kBAAkB,EAAE;AAC7C,EAAE,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,EAAE;AACtD,EAAE,OAAO,IAAI,CAAC;AACd,IAAI,IAAI,EAAE;AACV,MAAM,UAAU,EAAE,UAAU,CAAC,YAAY,EAAE;AAC3C,MAAM,WAAW,EAAE,WAAW,CAAC,eAAe,KAAK,MAAM,GAAG,YAAY,GAAG,SAAS;AACpF,MAAM,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,cAAc;AAC/C,MAAM,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ;AACpC,MAAM,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW;AACzC,MAAM,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC;AAC/B,KAAK;AACL,IAAI,WAAW,EAAE;AACjB,MAAM,MAAM,EAAE,CAAC,CAAC,WAAW;AAC3B,MAAM,MAAM,EAAE,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AAClD,MAAM,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG;AACjE,KAAK;AACL,IAAI,WAAW,EAAE,WAAW,CAAC,QAAQ,IAAI,aAAa;AACtD,IAAI,SAAS,EAAE,CAAC,CAAC,WAAW,CAAC,OAAO;AACpC,IAAI,SAAS,EAAE,iBAAiB,IAAI,IAAI,EAAE,EAAE,WAAW;AACvD,GAAG,CAAC;AACJ;;;;"}
@@ -1,4 +1,4 @@
1
- import { a as cleanup, b as getDecision, s as setDecision, g as getRichRequest } from './pending-requests-C9p57WoU.js';
1
+ import { a as cleanup, b as getDecision, s as setDecision, g as getRichRequest } from './pending-requests-8rWjrF6d.js';
2
2
  import { v as validateAuth } from './auth-DuunT7Cg.js';
3
3
  import { t as toErrorMessage } from './error-DDXB3duW.js';
4
4
  import 'type-decoder';
@@ -6,6 +6,8 @@ import { j as json } from './index-CoD1IJuy.js';
6
6
  import 'better-sqlite3';
7
7
  import 'fs';
8
8
  import 'path';
9
+ import './shooter-home-4f_HkdGI.js';
10
+ import 'os';
9
11
  import './shared-server-DaWdgxVh.js';
10
12
  import 'crypto';
11
13
 
@@ -100,4 +102,4 @@ const GET = ({ request, url }) => {
100
102
  };
101
103
 
102
104
  export { GET, POST };
103
- //# sourceMappingURL=_server.ts-tChyh9FX.js.map
105
+ //# sourceMappingURL=_server.ts-BXhmLZwN.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-tChyh9FX.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/response/_server.ts.js"],"sourcesContent":["import { a as cleanup, b as getDecision, s as setDecision, g as getRichRequest } from \"../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { t as toErrorMessage } from \"../../../../chunks/error.js\";\nimport \"type-decoder\";\nimport { json } from \"@sveltejs/kit\";\nconst DECISION_KINDS = [\n \"allow\",\n \"deny\",\n \"option_1\",\n \"option_2\",\n \"option_3\",\n \"option_4\",\n \"plan_accept\",\n \"plan_auto\",\n \"plan_keep\",\n \"plan_review\"\n];\nfunction isDecisionKind(value) {\n return typeof value === \"string\" && DECISION_KINDS.includes(value);\n}\nconst POST = async ({ request }) => {\n cleanup();\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON in request body\" }, { status: 400 });\n }\n try {\n const { decision, requestId } = body;\n if (typeof requestId !== \"string\" || requestId.length === 0) {\n return json({ error: \"requestId must be a non-empty string\" }, { status: 400 });\n }\n if (!isDecisionKind(decision)) {\n return json(\n {\n error: \"decision must be one of allow, deny, option_1..4, plan_auto, plan_accept, plan_review, plan_keep\"\n },\n { status: 400 }\n );\n }\n const decisionTyped = decision;\n const found = setDecision(requestId, decisionTyped);\n if (!found) {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n const entry = getRichRequest(requestId);\n const responseKind = entry?.responseKind ?? \"hook\";\n console.log(\n `[response] Decision received: ${decisionTyped} for request ${requestId} (responseKind=${responseKind})`\n );\n if (responseKind === \"pty\") {\n return json({\n message: \"Decision recorded; PTY routing not yet implemented\",\n responseKind,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n return json({\n message: \"Decision recorded\",\n responseKind,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n console.error(\"[response] Failed to process response:\", toErrorMessage(error));\n return json({ error: \"Failed to process response\" }, { status: 500 });\n }\n};\nconst GET = ({ request, url }) => {\n cleanup();\n const authErr = validateAuth(request);\n if (authErr) {\n return authErr;\n }\n const requestId = url.searchParams.get(\"requestId\");\n if (!requestId) {\n return json({ error: \"requestId query parameter is required\" }, { status: 400 });\n }\n const result = getDecision(requestId);\n if (result.status === \"not_found\") {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n return json({\n decision: result.decision ?? null,\n status: result.status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_server.ts-BXhmLZwN.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/response/_server.ts.js"],"sourcesContent":["import { a as cleanup, b as getDecision, s as setDecision, g as getRichRequest } from \"../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { t as toErrorMessage } from \"../../../../chunks/error.js\";\nimport \"type-decoder\";\nimport { json } from \"@sveltejs/kit\";\nconst DECISION_KINDS = [\n \"allow\",\n \"deny\",\n \"option_1\",\n \"option_2\",\n \"option_3\",\n \"option_4\",\n \"plan_accept\",\n \"plan_auto\",\n \"plan_keep\",\n \"plan_review\"\n];\nfunction isDecisionKind(value) {\n return typeof value === \"string\" && DECISION_KINDS.includes(value);\n}\nconst POST = async ({ request }) => {\n cleanup();\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON in request body\" }, { status: 400 });\n }\n try {\n const { decision, requestId } = body;\n if (typeof requestId !== \"string\" || requestId.length === 0) {\n return json({ error: \"requestId must be a non-empty string\" }, { status: 400 });\n }\n if (!isDecisionKind(decision)) {\n return json(\n {\n error: \"decision must be one of allow, deny, option_1..4, plan_auto, plan_accept, plan_review, plan_keep\"\n },\n { status: 400 }\n );\n }\n const decisionTyped = decision;\n const found = setDecision(requestId, decisionTyped);\n if (!found) {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n const entry = getRichRequest(requestId);\n const responseKind = entry?.responseKind ?? \"hook\";\n console.log(\n `[response] Decision received: ${decisionTyped} for request ${requestId} (responseKind=${responseKind})`\n );\n if (responseKind === \"pty\") {\n return json({\n message: \"Decision recorded; PTY routing not yet implemented\",\n responseKind,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n return json({\n message: \"Decision recorded\",\n responseKind,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n console.error(\"[response] Failed to process response:\", toErrorMessage(error));\n return json({ error: \"Failed to process response\" }, { status: 500 });\n }\n};\nconst GET = ({ request, url }) => {\n cleanup();\n const authErr = validateAuth(request);\n if (authErr) {\n return authErr;\n }\n const requestId = url.searchParams.get(\"requestId\");\n if (!requestId) {\n return json({ error: \"requestId query parameter is required\" }, { status: 400 });\n }\n const result = getDecision(requestId);\n if (result.status === \"not_found\") {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n return json({\n decision: result.decision ?? null,\n status: result.status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
- import { g as getRichRequest } from './pending-requests-C9p57WoU.js';
1
+ import { g as getRichRequest } from './pending-requests-8rWjrF6d.js';
2
2
  import { v as validateAuth } from './auth-DuunT7Cg.js';
3
3
  import { j as json } from './index-CoD1IJuy.js';
4
4
  import 'better-sqlite3';
5
5
  import 'fs';
6
6
  import 'path';
7
+ import './shooter-home-4f_HkdGI.js';
8
+ import 'os';
7
9
  import './shared-server-DaWdgxVh.js';
8
10
  import 'crypto';
9
11
 
@@ -32,4 +34,4 @@ const GET = ({ params, request }) => {
32
34
  };
33
35
 
34
36
  export { GET };
35
- //# sourceMappingURL=_server.ts-CvJKTS3Z.js.map
37
+ //# sourceMappingURL=_server.ts-BbRSpB74.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_server.ts-CvJKTS3Z.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/decide/_requestId_/_server.ts.js"],"sourcesContent":["import { g as getRichRequest } from \"../../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ params, request }) => {\n const authErr = validateAuth(request);\n if (authErr) {\n return authErr;\n }\n const requestId = params.requestId;\n if (!requestId) {\n return json({ error: \"requestId path parameter is required\" }, { status: 400 });\n }\n const entry = getRichRequest(requestId);\n if (!entry) {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n const payload = {\n options: entry.options,\n question: entry.question ?? \"\",\n requestId: entry.requestId,\n responseKind: entry.responseKind,\n toolInput: entry.toolInput,\n toolName: entry.toolName\n };\n return json(payload);\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;AAGK,MAAC,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;AACrC,EAAE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;AACvC,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,OAAO,OAAO;AAClB,EAAE;AACF,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AACpC,EAAE,IAAI,CAAC,SAAS,EAAE;AAClB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnF,EAAE;AACF,EAAE,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC;AACzC,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3E,EAAE;AACF,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,OAAO,EAAE,KAAK,CAAC,OAAO;AAC1B,IAAI,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;AAClC,IAAI,SAAS,EAAE,KAAK,CAAC,SAAS;AAC9B,IAAI,YAAY,EAAE,KAAK,CAAC,YAAY;AACpC,IAAI,SAAS,EAAE,KAAK,CAAC,SAAS;AAC9B,IAAI,QAAQ,EAAE,KAAK,CAAC;AACpB,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB;;;;"}
1
+ {"version":3,"file":"_server.ts-BbRSpB74.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/decide/_requestId_/_server.ts.js"],"sourcesContent":["import { g as getRichRequest } from \"../../../../../chunks/pending-requests.js\";\nimport { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ params, request }) => {\n const authErr = validateAuth(request);\n if (authErr) {\n return authErr;\n }\n const requestId = params.requestId;\n if (!requestId) {\n return json({ error: \"requestId path parameter is required\" }, { status: 400 });\n }\n const entry = getRichRequest(requestId);\n if (!entry) {\n return json({ error: \"Request not found or expired\" }, { status: 404 });\n }\n const payload = {\n options: entry.options,\n question: entry.question ?? \"\",\n requestId: entry.requestId,\n responseKind: entry.responseKind,\n toolInput: entry.toolInput,\n toolName: entry.toolName\n };\n return json(payload);\n};\nexport {\n GET\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAGK,MAAC,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;AACrC,EAAE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;AACvC,EAAE,IAAI,OAAO,EAAE;AACf,IAAI,OAAO,OAAO;AAClB,EAAE;AACF,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS;AACpC,EAAE,IAAI,CAAC,SAAS,EAAE;AAClB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnF,EAAE;AACF,EAAE,MAAM,KAAK,GAAG,cAAc,CAAC,SAAS,CAAC;AACzC,EAAE,IAAI,CAAC,KAAK,EAAE;AACd,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3E,EAAE;AACF,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,OAAO,EAAE,KAAK,CAAC,OAAO;AAC1B,IAAI,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;AAClC,IAAI,SAAS,EAAE,KAAK,CAAC,SAAS;AAC9B,IAAI,YAAY,EAAE,KAAK,CAAC,YAAY;AACpC,IAAI,SAAS,EAAE,KAAK,CAAC,SAAS;AAC9B,IAAI,QAAQ,EAAE,KAAK,CAAC;AACpB,GAAG;AACH,EAAE,OAAO,IAAI,CAAC,OAAO,CAAC;AACtB;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { v as validateAuth } from './auth-DuunT7Cg.js';
2
- import { p as ptyManager } from './pty-manager-ZqXqa-6A.js';
2
+ import { p as ptyManager } from './pty-manager-DDjG7DlH.js';
3
3
  import { r as resolveAccess } from './share-auth-BS7JuiHf.js';
4
4
  import { s as shareStore } from './share-store-B9jMpVg0.js';
5
5
  import { t as toErrorMessage } from './error-DDXB3duW.js';
@@ -18,6 +18,8 @@ import './registry-D4J_CuzW.js';
18
18
  import 'better-sqlite3';
19
19
  import './coordinator-DMU_ADXf.js';
20
20
  import 'net';
21
+ import 'node:module';
22
+ import './shooter-home-4f_HkdGI.js';
21
23
 
22
24
  function lastScrollbackLine(scrollback) {
23
25
  if (!scrollback) {
@@ -102,4 +104,4 @@ const DELETE = ({ params, request }) => {
102
104
  };
103
105
 
104
106
  export { DELETE, GET };
105
- //# sourceMappingURL=_server.ts-CC2K8-L2.js.map
107
+ //# sourceMappingURL=_server.ts-Blx6TuRU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-Blx6TuRU.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/terminals/_id_/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { p as ptyManager } from \"../../../../../chunks/pty-manager.js\";\nimport { r as resolveAccess } from \"../../../../../chunks/share-auth.js\";\nimport { s as shareStore } from \"../../../../../chunks/share-store.js\";\nimport { t as toErrorMessage } from \"../../../../../chunks/error.js\";\nimport { c as closeGuests } from \"../../../../../chunks/guest-registry.js\";\nimport { json } from \"@sveltejs/kit\";\nfunction lastScrollbackLine(scrollback) {\n if (!scrollback) {\n return null;\n }\n const lines = scrollback.trimEnd().split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i].trim();\n if (line) {\n return line.slice(0, 200);\n }\n }\n return null;\n}\nconst GET = ({ params, request }) => {\n const access = resolveAccess(request, params.id);\n if (!access) {\n return json({ error: \"Unauthorized\" }, { status: 401 });\n }\n try {\n const terminal = ptyManager.get(params.id);\n if (!terminal) {\n return json({ error: \"Terminal not found\" }, { status: 404 });\n }\n return json({\n args: terminal.args,\n clientCount: terminal.clients.size,\n cols: terminal.cols,\n command: terminal.command,\n createdAt: terminal.createdAt.toISOString(),\n cwd: terminal.cwd,\n exitCode: terminal.exitCode,\n exitedAt: terminal.exitedAt?.toISOString() ?? null,\n id: terminal.id,\n lastOutput: lastScrollbackLine(terminal.scrollback),\n pid: terminal.pid,\n rows: terminal.rows,\n sessionWs: `/ws/session/${terminal.id}`,\n status: terminal.status,\n timestamp: (/* @__PURE__ */ new Date()).toISOString(),\n ws: `/ws/terminal/${terminal.id}`,\n ...access.level === \"guest\" ? { shareMode: access.mode } : {}\n });\n } catch (error) {\n console.error(\"[terminals] Failed to get terminal:\", toErrorMessage(error));\n return json({ error: \"Failed to get terminal\" }, { status: 500 });\n }\n};\nconst DELETE = ({ params, request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n try {\n const terminal = ptyManager.get(params.id);\n if (!terminal) {\n return json({ error: \"Terminal not found\" }, { status: 404 });\n }\n if (terminal.status === \"exited\") {\n ptyManager.remove(params.id);\n shareStore.deleteShare(params.id);\n closeGuests(params.id);\n console.log(`[terminals] Removed exited terminal ${params.id}`);\n return json({\n removed: true,\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n }\n ptyManager.kill(params.id);\n shareStore.deleteShare(params.id);\n closeGuests(params.id);\n console.log(`[terminals] Killed terminal ${params.id} (pid=${terminal.pid})`);\n return json({\n success: true,\n timestamp: (/* @__PURE__ */ new Date()).toISOString()\n });\n } catch (error) {\n console.error(\"[terminals] Failed to kill terminal:\", toErrorMessage(error));\n return json({ error: \"Failed to kill terminal\" }, { status: 500 });\n }\n};\nexport {\n DELETE,\n GET\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { v as validateAuth } from './auth-DuunT7Cg.js';
2
+ import { i as isViewerPresent, h as hasEverReported, r as reportPresence } from './presence-store-Bx_g0-Gd.js';
3
+ import { j as json } from './index-CoD1IJuy.js';
4
+ import './shared-server-DaWdgxVh.js';
5
+ import 'crypto';
6
+
7
+ const GET = ({ request }) => {
8
+ const authError = validateAuth(request);
9
+ if (authError) {
10
+ return authError;
11
+ }
12
+ return json({ everReported: hasEverReported(), present: isViewerPresent() });
13
+ };
14
+ const POST = async ({ request }) => {
15
+ const authError = validateAuth(request);
16
+ if (authError) {
17
+ return authError;
18
+ }
19
+ let body;
20
+ try {
21
+ body = await request.json();
22
+ } catch {
23
+ return json({ error: "Invalid JSON body" }, { status: 400 });
24
+ }
25
+ if (body.state !== "foreground" && body.state !== "background") {
26
+ return json({ error: "state must be 'foreground' or 'background'" }, { status: 400 });
27
+ }
28
+ reportPresence(body.state);
29
+ return json({ everReported: hasEverReported(), present: isViewerPresent(), state: body.state });
30
+ };
31
+
32
+ export { GET, POST };
33
+ //# sourceMappingURL=_server.ts-C6NRpe7e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-C6NRpe7e.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/presence/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../chunks/auth.js\";\nimport { i as isViewerPresent, h as hasEverReported, r as reportPresence } from \"../../../../chunks/presence-store.js\";\nimport { json } from \"@sveltejs/kit\";\nconst GET = ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n return json({ everReported: hasEverReported(), present: isViewerPresent() });\n};\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON body\" }, { status: 400 });\n }\n if (body.state !== \"foreground\" && body.state !== \"background\") {\n return json({ error: \"state must be 'foreground' or 'background'\" }, { status: 400 });\n }\n reportPresence(body.state);\n return json({ everReported: hasEverReported(), present: isViewerPresent(), state: body.state });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":";;;;;;AAGK,MAAC,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK;AAC7B,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,OAAO,IAAI,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,CAAC;AAC9E;AACK,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,IAAI,IAAI;AACV,EAAE,IAAI;AACN,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;AAC/B,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAChE,EAAE;AACF,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,EAAE;AAClE,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,4CAA4C,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACzF,EAAE;AACF,EAAE,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,EAAE,OAAO,IAAI,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACjG;;;;"}
@@ -0,0 +1,53 @@
1
+ import { v as validateAuth } from './auth-DuunT7Cg.js';
2
+ import { j as json } from './index-CoD1IJuy.js';
3
+ import './shared-server-DaWdgxVh.js';
4
+ import 'crypto';
5
+
6
+ function control() {
7
+ return globalThis.__shooter_autopilot;
8
+ }
9
+ const GET = ({ request, url }) => {
10
+ const authError = validateAuth(request);
11
+ if (authError) {
12
+ return authError;
13
+ }
14
+ const terminalId = url.searchParams.get("terminalId") ?? "";
15
+ if (!terminalId) {
16
+ return json({ error: "terminalId query param is required" }, { status: 400 });
17
+ }
18
+ const ctrl = control();
19
+ if (!ctrl?.getGoal) {
20
+ return json({ error: "autopilot engine not running", running: false }, { status: 503 });
21
+ }
22
+ return json({ goal: ctrl.getGoal(terminalId) ?? null, running: true });
23
+ };
24
+ const POST = async ({ request }) => {
25
+ const authError = validateAuth(request);
26
+ if (authError) {
27
+ return authError;
28
+ }
29
+ let body;
30
+ try {
31
+ body = await request.json();
32
+ } catch {
33
+ return json({ error: "Invalid JSON body" }, { status: 400 });
34
+ }
35
+ if (typeof body.terminalId !== "string" || body.terminalId.length === 0) {
36
+ return json({ error: "terminalId must be a non-empty string" }, { status: 400 });
37
+ }
38
+ if (typeof body.goal !== "string") {
39
+ return json({ error: "goal must be a string" }, { status: 400 });
40
+ }
41
+ if (body.goal.length > 500) {
42
+ return json({ error: "goal must be 500 characters or fewer" }, { status: 400 });
43
+ }
44
+ const ctrl = control();
45
+ if (!ctrl?.setGoal) {
46
+ return json({ error: "autopilot engine not running", running: false }, { status: 503 });
47
+ }
48
+ ctrl.setGoal(body.terminalId, body.goal);
49
+ return json({ goal: body.goal.trim() || null, running: true, terminalId: body.terminalId });
50
+ };
51
+
52
+ export { GET, POST };
53
+ //# sourceMappingURL=_server.ts-CGqCOCdK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_server.ts-CGqCOCdK.js","sources":["../../../.svelte-kit/adapter-node/entries/endpoints/api/autopilot/goal/_server.ts.js"],"sourcesContent":["import { v as validateAuth } from \"../../../../../chunks/auth.js\";\nimport { json } from \"@sveltejs/kit\";\nfunction control() {\n return globalThis.__shooter_autopilot;\n}\nconst GET = ({ request, url }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n const terminalId = url.searchParams.get(\"terminalId\") ?? \"\";\n if (!terminalId) {\n return json({ error: \"terminalId query param is required\" }, { status: 400 });\n }\n const ctrl = control();\n if (!ctrl?.getGoal) {\n return json({ error: \"autopilot engine not running\", running: false }, { status: 503 });\n }\n return json({ goal: ctrl.getGoal(terminalId) ?? null, running: true });\n};\nconst POST = async ({ request }) => {\n const authError = validateAuth(request);\n if (authError) {\n return authError;\n }\n let body;\n try {\n body = await request.json();\n } catch {\n return json({ error: \"Invalid JSON body\" }, { status: 400 });\n }\n if (typeof body.terminalId !== \"string\" || body.terminalId.length === 0) {\n return json({ error: \"terminalId must be a non-empty string\" }, { status: 400 });\n }\n if (typeof body.goal !== \"string\") {\n return json({ error: \"goal must be a string\" }, { status: 400 });\n }\n if (body.goal.length > 500) {\n return json({ error: \"goal must be 500 characters or fewer\" }, { status: 400 });\n }\n const ctrl = control();\n if (!ctrl?.setGoal) {\n return json({ error: \"autopilot engine not running\", running: false }, { status: 503 });\n }\n ctrl.setGoal(body.terminalId, body.goal);\n return json({ goal: body.goal.trim() || null, running: true, terminalId: body.terminalId });\n};\nexport {\n GET,\n POST\n};\n"],"names":[],"mappings":";;;;;AAEA,SAAS,OAAO,GAAG;AACnB,EAAE,OAAO,UAAU,CAAC,mBAAmB;AACvC;AACK,MAAC,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK;AAClC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;AAC7D,EAAE,IAAI,CAAC,UAAU,EAAE;AACnB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACjF,EAAE;AACF,EAAE,MAAM,IAAI,GAAG,OAAO,EAAE;AACxB,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3F,EAAE;AACF,EAAE,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACxE;AACK,MAAC,IAAI,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK;AACpC,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;AACzC,EAAE,IAAI,SAAS,EAAE;AACjB,IAAI,OAAO,SAAS;AACpB,EAAE;AACF,EAAE,IAAI,IAAI;AACV,EAAE,IAAI;AACN,IAAI,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE;AAC/B,EAAE,CAAC,CAAC,MAAM;AACV,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAChE,EAAE;AACF,EAAE,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3E,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACpF,EAAE;AACF,EAAE,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACrC,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACpE,EAAE;AACF,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AAC9B,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnF,EAAE;AACF,EAAE,MAAM,IAAI,GAAG,OAAO,EAAE;AACxB,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;AACtB,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,8BAA8B,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC3F,EAAE;AACF,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1C,EAAE,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC7F;;;;"}