@agentdeck/bridge 0.2.2 → 0.2.3

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 (383) hide show
  1. package/assets/fonts/IBMPlexSans-Bold.ttf +0 -0
  2. package/assets/fonts/IBMPlexSans-Regular.ttf +0 -0
  3. package/assets/fonts/JetBrainsMono-Bold.ttf +0 -0
  4. package/assets/fonts/JetBrainsMono-Regular.ttf +0 -0
  5. package/assets/fonts/LICENSES.md +22 -0
  6. package/dist/adapters/claude-code.d.ts +6 -0
  7. package/dist/adapters/claude-code.d.ts.map +1 -1
  8. package/dist/adapters/claude-code.js +8 -0
  9. package/dist/adapters/claude-code.js.map +1 -1
  10. package/dist/adapters/openclaw.d.ts +24 -0
  11. package/dist/adapters/openclaw.d.ts.map +1 -1
  12. package/dist/adapters/openclaw.js +291 -35
  13. package/dist/adapters/openclaw.js.map +1 -1
  14. package/dist/adapters/opencode-adapter.d.ts +59 -0
  15. package/dist/adapters/opencode-adapter.d.ts.map +1 -1
  16. package/dist/adapters/opencode-adapter.js +297 -35
  17. package/dist/adapters/opencode-adapter.js.map +1 -1
  18. package/dist/adb-reverse.d.ts +1 -1
  19. package/dist/adb-reverse.js +1 -1
  20. package/dist/antigravity-local.d.ts +1 -0
  21. package/dist/antigravity-local.d.ts.map +1 -1
  22. package/dist/antigravity-local.js +33 -0
  23. package/dist/antigravity-local.js.map +1 -1
  24. package/dist/apme/adapters/claude-hook.d.ts.map +1 -1
  25. package/dist/apme/adapters/claude-hook.js +5 -0
  26. package/dist/apme/adapters/claude-hook.js.map +1 -1
  27. package/dist/apme/adapters/codex-hook.d.ts +17 -0
  28. package/dist/apme/adapters/codex-hook.d.ts.map +1 -0
  29. package/dist/apme/adapters/codex-hook.js +95 -0
  30. package/dist/apme/adapters/codex-hook.js.map +1 -0
  31. package/dist/apme/adapters/codex-turn-manager.d.ts +86 -0
  32. package/dist/apme/adapters/codex-turn-manager.d.ts.map +1 -0
  33. package/dist/apme/adapters/codex-turn-manager.js +496 -0
  34. package/dist/apme/adapters/codex-turn-manager.js.map +1 -0
  35. package/dist/apme/adapters/openclaw-hook.d.ts +99 -0
  36. package/dist/apme/adapters/openclaw-hook.d.ts.map +1 -0
  37. package/dist/apme/adapters/openclaw-hook.js +234 -0
  38. package/dist/apme/adapters/openclaw-hook.js.map +1 -0
  39. package/dist/apme/adapters/opencode-hook.d.ts +56 -0
  40. package/dist/apme/adapters/opencode-hook.d.ts.map +1 -0
  41. package/dist/apme/adapters/opencode-hook.js +182 -0
  42. package/dist/apme/adapters/opencode-hook.js.map +1 -0
  43. package/dist/apme/adapters/timeline.d.ts.map +1 -1
  44. package/dist/apme/adapters/timeline.js +6 -1
  45. package/dist/apme/adapters/timeline.js.map +1 -1
  46. package/dist/apme/antigravity-transcript.d.ts +18 -0
  47. package/dist/apme/antigravity-transcript.d.ts.map +1 -0
  48. package/dist/apme/antigravity-transcript.js +94 -0
  49. package/dist/apme/antigravity-transcript.js.map +1 -0
  50. package/dist/apme/classify-turn.d.ts +13 -0
  51. package/dist/apme/classify-turn.d.ts.map +1 -0
  52. package/dist/apme/classify-turn.js +49 -0
  53. package/dist/apme/classify-turn.js.map +1 -0
  54. package/dist/apme/claude-transcript-reader.d.ts +10 -0
  55. package/dist/apme/claude-transcript-reader.d.ts.map +1 -1
  56. package/dist/apme/claude-transcript-reader.js +35 -0
  57. package/dist/apme/claude-transcript-reader.js.map +1 -1
  58. package/dist/apme/collector.d.ts +129 -6
  59. package/dist/apme/collector.d.ts.map +1 -1
  60. package/dist/apme/collector.js +470 -23
  61. package/dist/apme/collector.js.map +1 -1
  62. package/dist/apme/dashboard-html.d.ts.map +1 -1
  63. package/dist/apme/dashboard-html.js +87 -11
  64. package/dist/apme/dashboard-html.js.map +1 -1
  65. package/dist/apme/http.d.ts.map +1 -1
  66. package/dist/apme/http.js +43 -6
  67. package/dist/apme/http.js.map +1 -1
  68. package/dist/apme/index.d.ts +26 -5
  69. package/dist/apme/index.d.ts.map +1 -1
  70. package/dist/apme/index.js +135 -9
  71. package/dist/apme/index.js.map +1 -1
  72. package/dist/apme/pareto.d.ts +39 -0
  73. package/dist/apme/pareto.d.ts.map +1 -0
  74. package/dist/apme/pareto.js +59 -0
  75. package/dist/apme/pareto.js.map +1 -0
  76. package/dist/apme/recommend.d.ts +3 -0
  77. package/dist/apme/recommend.d.ts.map +1 -1
  78. package/dist/apme/recommend.js +43 -1
  79. package/dist/apme/recommend.js.map +1 -1
  80. package/dist/apme/runner.d.ts +92 -4
  81. package/dist/apme/runner.d.ts.map +1 -1
  82. package/dist/apme/runner.js +586 -70
  83. package/dist/apme/runner.js.map +1 -1
  84. package/dist/apme/sample-to-timeline.d.ts +26 -0
  85. package/dist/apme/sample-to-timeline.d.ts.map +1 -0
  86. package/dist/apme/sample-to-timeline.js +95 -0
  87. package/dist/apme/sample-to-timeline.js.map +1 -0
  88. package/dist/apme/scorers/index.d.ts +47 -0
  89. package/dist/apme/scorers/index.d.ts.map +1 -0
  90. package/dist/apme/scorers/index.js +96 -0
  91. package/dist/apme/scorers/index.js.map +1 -0
  92. package/dist/apme/settings.d.ts +14 -10
  93. package/dist/apme/settings.d.ts.map +1 -1
  94. package/dist/apme/settings.js +34 -8
  95. package/dist/apme/settings.js.map +1 -1
  96. package/dist/apme/store.d.ts +33 -1
  97. package/dist/apme/store.d.ts.map +1 -1
  98. package/dist/apme/store.js +334 -25
  99. package/dist/apme/store.js.map +1 -1
  100. package/dist/awaiting-overlay.d.ts +99 -0
  101. package/dist/awaiting-overlay.d.ts.map +1 -0
  102. package/dist/awaiting-overlay.js +148 -0
  103. package/dist/awaiting-overlay.js.map +1 -0
  104. package/dist/ble-sync-spawn.d.ts +63 -0
  105. package/dist/ble-sync-spawn.d.ts.map +1 -0
  106. package/dist/ble-sync-spawn.js +196 -0
  107. package/dist/ble-sync-spawn.js.map +1 -0
  108. package/dist/bridge-core.d.ts +24 -1
  109. package/dist/bridge-core.d.ts.map +1 -1
  110. package/dist/bridge-core.js +157 -24
  111. package/dist/bridge-core.js.map +1 -1
  112. package/dist/broadcast.d.ts +3 -0
  113. package/dist/broadcast.d.ts.map +1 -0
  114. package/dist/broadcast.js +122 -0
  115. package/dist/broadcast.js.map +1 -0
  116. package/dist/check-deps.d.ts.map +1 -1
  117. package/dist/check-deps.js +25 -9
  118. package/dist/check-deps.js.map +1 -1
  119. package/dist/cli.d.ts +15 -1
  120. package/dist/cli.d.ts.map +1 -1
  121. package/dist/cli.js +1021 -93
  122. package/dist/cli.js.map +1 -1
  123. package/dist/codex-auth.d.ts +21 -0
  124. package/dist/codex-auth.d.ts.map +1 -1
  125. package/dist/codex-auth.js +52 -1
  126. package/dist/codex-auth.js.map +1 -1
  127. package/dist/codex-output-parser.d.ts +8 -0
  128. package/dist/codex-output-parser.d.ts.map +1 -1
  129. package/dist/codex-output-parser.js +110 -25
  130. package/dist/codex-output-parser.js.map +1 -1
  131. package/dist/codex-rate-limits.d.ts +16 -0
  132. package/dist/codex-rate-limits.d.ts.map +1 -0
  133. package/dist/codex-rate-limits.js +197 -0
  134. package/dist/codex-rate-limits.js.map +1 -0
  135. package/dist/codex-rollout-response.d.ts +31 -0
  136. package/dist/codex-rollout-response.d.ts.map +1 -0
  137. package/dist/codex-rollout-response.js +135 -0
  138. package/dist/codex-rollout-response.js.map +1 -0
  139. package/dist/daemon-server.d.ts +85 -0
  140. package/dist/daemon-server.d.ts.map +1 -1
  141. package/dist/daemon-server.js +1627 -159
  142. package/dist/daemon-server.js.map +1 -1
  143. package/dist/daemon.js +15 -6
  144. package/dist/daemon.js.map +1 -1
  145. package/dist/display-dim.d.ts +9 -0
  146. package/dist/display-dim.d.ts.map +1 -0
  147. package/dist/display-dim.js +53 -0
  148. package/dist/display-dim.js.map +1 -0
  149. package/dist/display-monitor.d.ts +15 -2
  150. package/dist/display-monitor.d.ts.map +1 -1
  151. package/dist/display-monitor.js +104 -26
  152. package/dist/display-monitor.js.map +1 -1
  153. package/dist/esp32-serial.d.ts +160 -1
  154. package/dist/esp32-serial.d.ts.map +1 -1
  155. package/dist/esp32-serial.js +950 -153
  156. package/dist/esp32-serial.js.map +1 -1
  157. package/dist/fallback-task-timeline.d.ts +42 -0
  158. package/dist/fallback-task-timeline.d.ts.map +1 -0
  159. package/dist/fallback-task-timeline.js +112 -0
  160. package/dist/fallback-task-timeline.js.map +1 -0
  161. package/dist/foundation-models-helper.d.ts +11 -0
  162. package/dist/foundation-models-helper.d.ts.map +1 -0
  163. package/dist/foundation-models-helper.js +241 -0
  164. package/dist/foundation-models-helper.js.map +1 -0
  165. package/dist/hook-migration.js +1 -1
  166. package/dist/hook-migration.js.map +1 -1
  167. package/dist/hook-server.d.ts +2 -3
  168. package/dist/hook-server.d.ts.map +1 -1
  169. package/dist/hook-server.js +22 -10
  170. package/dist/hook-server.js.map +1 -1
  171. package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts +33 -0
  172. package/dist/idotmatrix/idotmatrix-daemon-sync.d.ts.map +1 -0
  173. package/dist/idotmatrix/idotmatrix-daemon-sync.js +164 -0
  174. package/dist/idotmatrix/idotmatrix-daemon-sync.js.map +1 -0
  175. package/dist/idotmatrix/idotmatrix-discover.d.ts +18 -0
  176. package/dist/idotmatrix/idotmatrix-discover.d.ts.map +1 -0
  177. package/dist/idotmatrix/idotmatrix-discover.js +85 -0
  178. package/dist/idotmatrix/idotmatrix-discover.js.map +1 -0
  179. package/dist/idotmatrix/idotmatrix-settings.d.ts +20 -0
  180. package/dist/idotmatrix/idotmatrix-settings.d.ts.map +1 -0
  181. package/dist/idotmatrix/idotmatrix-settings.js +57 -0
  182. package/dist/idotmatrix/idotmatrix-settings.js.map +1 -0
  183. package/dist/index.d.ts.map +1 -1
  184. package/dist/index.js +215 -179
  185. package/dist/index.js.map +1 -1
  186. package/dist/log-stream.d.ts +15 -16
  187. package/dist/log-stream.d.ts.map +1 -1
  188. package/dist/log-stream.js +18 -96
  189. package/dist/log-stream.js.map +1 -1
  190. package/dist/logger.d.ts.map +1 -1
  191. package/dist/logger.js +12 -3
  192. package/dist/logger.js.map +1 -1
  193. package/dist/mdns.d.ts +17 -0
  194. package/dist/mdns.d.ts.map +1 -1
  195. package/dist/mdns.js +52 -18
  196. package/dist/mdns.js.map +1 -1
  197. package/dist/modules/adb-module.d.ts +1 -1
  198. package/dist/modules/adb-module.d.ts.map +1 -1
  199. package/dist/modules/adb-module.js +4 -3
  200. package/dist/modules/adb-module.js.map +1 -1
  201. package/dist/modules/broadcast-module.d.ts +17 -0
  202. package/dist/modules/broadcast-module.d.ts.map +1 -0
  203. package/dist/modules/broadcast-module.js +26 -0
  204. package/dist/modules/broadcast-module.js.map +1 -0
  205. package/dist/modules/idotmatrix-module.d.ts +9 -0
  206. package/dist/modules/idotmatrix-module.d.ts.map +1 -0
  207. package/dist/modules/idotmatrix-module.js +46 -0
  208. package/dist/modules/idotmatrix-module.js.map +1 -0
  209. package/dist/modules/index.d.ts +3 -1
  210. package/dist/modules/index.d.ts.map +1 -1
  211. package/dist/modules/index.js +9 -3
  212. package/dist/modules/index.js.map +1 -1
  213. package/dist/modules/pixoo-module.d.ts.map +1 -1
  214. package/dist/modules/pixoo-module.js +14 -4
  215. package/dist/modules/pixoo-module.js.map +1 -1
  216. package/dist/modules/serial-module.d.ts +4 -0
  217. package/dist/modules/serial-module.d.ts.map +1 -1
  218. package/dist/modules/serial-module.js +14 -12
  219. package/dist/modules/serial-module.js.map +1 -1
  220. package/dist/modules/timebox-module.d.ts +9 -0
  221. package/dist/modules/timebox-module.d.ts.map +1 -0
  222. package/dist/modules/timebox-module.js +46 -0
  223. package/dist/modules/timebox-module.js.map +1 -0
  224. package/dist/modules/types.d.ts +4 -2
  225. package/dist/modules/types.d.ts.map +1 -1
  226. package/dist/openclaw-session.d.ts +18 -0
  227. package/dist/openclaw-session.d.ts.map +1 -0
  228. package/dist/openclaw-session.js +34 -0
  229. package/dist/openclaw-session.js.map +1 -0
  230. package/dist/output-parser.d.ts +30 -0
  231. package/dist/output-parser.d.ts.map +1 -1
  232. package/dist/output-parser.js +125 -9
  233. package/dist/output-parser.js.map +1 -1
  234. package/dist/passive-observer.d.ts +26 -0
  235. package/dist/passive-observer.d.ts.map +1 -1
  236. package/dist/passive-observer.js +258 -49
  237. package/dist/passive-observer.js.map +1 -1
  238. package/dist/permission-resolver.d.ts +47 -0
  239. package/dist/permission-resolver.d.ts.map +1 -0
  240. package/dist/permission-resolver.js +103 -0
  241. package/dist/permission-resolver.js.map +1 -0
  242. package/dist/pixoo/micro-glyphs.d.ts +49 -0
  243. package/dist/pixoo/micro-glyphs.d.ts.map +1 -0
  244. package/dist/pixoo/micro-glyphs.js +276 -0
  245. package/dist/pixoo/micro-glyphs.js.map +1 -0
  246. package/dist/pixoo/pixoo-bridge.d.ts +2 -2
  247. package/dist/pixoo/pixoo-bridge.d.ts.map +1 -1
  248. package/dist/pixoo/pixoo-bridge.js +93 -25
  249. package/dist/pixoo/pixoo-bridge.js.map +1 -1
  250. package/dist/pixoo/pixoo-camera.d.ts +19 -3
  251. package/dist/pixoo/pixoo-camera.d.ts.map +1 -1
  252. package/dist/pixoo/pixoo-camera.js +62 -27
  253. package/dist/pixoo/pixoo-camera.js.map +1 -1
  254. package/dist/pixoo/pixoo-client.d.ts +13 -3
  255. package/dist/pixoo/pixoo-client.d.ts.map +1 -1
  256. package/dist/pixoo/pixoo-client.js +51 -22
  257. package/dist/pixoo/pixoo-client.js.map +1 -1
  258. package/dist/pixoo/pixoo-discover.d.ts +37 -0
  259. package/dist/pixoo/pixoo-discover.d.ts.map +1 -0
  260. package/dist/pixoo/pixoo-discover.js +105 -0
  261. package/dist/pixoo/pixoo-discover.js.map +1 -0
  262. package/dist/pixoo/pixoo-renderer.d.ts +8 -3
  263. package/dist/pixoo/pixoo-renderer.d.ts.map +1 -1
  264. package/dist/pixoo/pixoo-renderer.js +189 -60
  265. package/dist/pixoo/pixoo-renderer.js.map +1 -1
  266. package/dist/pixoo/pixoo-settings.d.ts +6 -0
  267. package/dist/pixoo/pixoo-settings.d.ts.map +1 -1
  268. package/dist/pixoo/pixoo-settings.js +9 -0
  269. package/dist/pixoo/pixoo-settings.js.map +1 -1
  270. package/dist/pixoo/pixoo-sprites.d.ts +60 -11
  271. package/dist/pixoo/pixoo-sprites.d.ts.map +1 -1
  272. package/dist/pixoo/pixoo-sprites.js +512 -209
  273. package/dist/pixoo/pixoo-sprites.js.map +1 -1
  274. package/dist/pty-manager.d.ts.map +1 -1
  275. package/dist/pty-manager.js +8 -2
  276. package/dist/pty-manager.js.map +1 -1
  277. package/dist/session-activity.d.ts +14 -0
  278. package/dist/session-activity.d.ts.map +1 -0
  279. package/dist/session-activity.js +160 -0
  280. package/dist/session-activity.js.map +1 -0
  281. package/dist/session-aggregator.d.ts +17 -0
  282. package/dist/session-aggregator.d.ts.map +1 -1
  283. package/dist/session-aggregator.js +48 -9
  284. package/dist/session-aggregator.js.map +1 -1
  285. package/dist/session-registry.d.ts +71 -3
  286. package/dist/session-registry.d.ts.map +1 -1
  287. package/dist/session-registry.js +137 -8
  288. package/dist/session-registry.js.map +1 -1
  289. package/dist/session-timeline-relay.d.ts.map +1 -1
  290. package/dist/session-timeline-relay.js +13 -4
  291. package/dist/session-timeline-relay.js.map +1 -1
  292. package/dist/session-transcript-timeline.d.ts +49 -0
  293. package/dist/session-transcript-timeline.d.ts.map +1 -0
  294. package/dist/session-transcript-timeline.js +276 -0
  295. package/dist/session-transcript-timeline.js.map +1 -0
  296. package/dist/state-machine.d.ts +6 -1
  297. package/dist/state-machine.d.ts.map +1 -1
  298. package/dist/state-machine.js +86 -28
  299. package/dist/state-machine.js.map +1 -1
  300. package/dist/timebox/timebox-daemon-sync.d.ts +19 -0
  301. package/dist/timebox/timebox-daemon-sync.d.ts.map +1 -0
  302. package/dist/timebox/timebox-daemon-sync.js +135 -0
  303. package/dist/timebox/timebox-daemon-sync.js.map +1 -0
  304. package/dist/timebox/timebox-discover.d.ts +19 -0
  305. package/dist/timebox/timebox-discover.d.ts.map +1 -0
  306. package/dist/timebox/timebox-discover.js +87 -0
  307. package/dist/timebox/timebox-discover.js.map +1 -0
  308. package/dist/timebox/timebox-settings.d.ts +32 -0
  309. package/dist/timebox/timebox-settings.d.ts.map +1 -0
  310. package/dist/timebox/timebox-settings.js +80 -0
  311. package/dist/timebox/timebox-settings.js.map +1 -0
  312. package/dist/timeline-store.d.ts +63 -3
  313. package/dist/timeline-store.d.ts.map +1 -1
  314. package/dist/timeline-store.js +292 -14
  315. package/dist/timeline-store.js.map +1 -1
  316. package/dist/timeline-summarizer.d.ts.map +1 -1
  317. package/dist/timeline-summarizer.js +29 -5
  318. package/dist/timeline-summarizer.js.map +1 -1
  319. package/dist/tui/ansi.d.ts +0 -4
  320. package/dist/tui/ansi.d.ts.map +1 -1
  321. package/dist/tui/ansi.js +14 -7
  322. package/dist/tui/ansi.js.map +1 -1
  323. package/dist/tui/dashboard.d.ts +1 -0
  324. package/dist/tui/dashboard.d.ts.map +1 -1
  325. package/dist/tui/dashboard.js +24 -7
  326. package/dist/tui/dashboard.js.map +1 -1
  327. package/dist/tui/renderer.d.ts +36 -0
  328. package/dist/tui/renderer.d.ts.map +1 -1
  329. package/dist/tui/renderer.js +303 -119
  330. package/dist/tui/renderer.js.map +1 -1
  331. package/dist/tui/terrarium.d.ts.map +1 -1
  332. package/dist/tui/terrarium.js +37 -49
  333. package/dist/tui/terrarium.js.map +1 -1
  334. package/dist/types.d.ts +2 -2
  335. package/dist/types.d.ts.map +1 -1
  336. package/dist/types.js +2 -2
  337. package/dist/types.js.map +1 -1
  338. package/dist/usage-api.d.ts.map +1 -1
  339. package/dist/usage-api.js +7 -1
  340. package/dist/usage-api.js.map +1 -1
  341. package/dist/usage-event.d.ts +10 -3
  342. package/dist/usage-event.d.ts.map +1 -1
  343. package/dist/usage-event.js +74 -12
  344. package/dist/usage-event.js.map +1 -1
  345. package/dist/utility-proxy.d.ts.map +1 -1
  346. package/dist/utility-proxy.js +8 -0
  347. package/dist/utility-proxy.js.map +1 -1
  348. package/dist/utils/project-name.d.ts +3 -0
  349. package/dist/utils/project-name.d.ts.map +1 -1
  350. package/dist/utils/project-name.js +44 -2
  351. package/dist/utils/project-name.js.map +1 -1
  352. package/dist/windows-service.d.ts +26 -0
  353. package/dist/windows-service.d.ts.map +1 -0
  354. package/dist/windows-service.js +145 -0
  355. package/dist/windows-service.js.map +1 -0
  356. package/dist/ws-server.d.ts +22 -1
  357. package/dist/ws-server.d.ts.map +1 -1
  358. package/dist/ws-server.js +89 -4
  359. package/dist/ws-server.js.map +1 -1
  360. package/fm-helper/AgentDeckFMHelper.swift +112 -0
  361. package/package.json +9 -3
  362. package/scripts/build-fm-helper.mjs +26 -0
  363. package/LICENSE +0 -21
  364. package/dist/apme/tuner.d.ts +0 -64
  365. package/dist/apme/tuner.d.ts.map +0 -1
  366. package/dist/apme/tuner.js +0 -297
  367. package/dist/apme/tuner.js.map +0 -1
  368. package/dist/d200h/hid-protocol.d.ts +0 -62
  369. package/dist/d200h/hid-protocol.d.ts.map +0 -1
  370. package/dist/d200h/hid-protocol.js +0 -124
  371. package/dist/d200h/hid-protocol.js.map +0 -1
  372. package/dist/d200h/image-renderer.d.ts +0 -36
  373. package/dist/d200h/image-renderer.d.ts.map +0 -1
  374. package/dist/d200h/image-renderer.js +0 -487
  375. package/dist/d200h/image-renderer.js.map +0 -1
  376. package/dist/modules/d200h-module.d.ts +0 -43
  377. package/dist/modules/d200h-module.d.ts.map +0 -1
  378. package/dist/modules/d200h-module.js +0 -360
  379. package/dist/modules/d200h-module.js.map +0 -1
  380. package/dist/modules/d200h-renderer.d.ts +0 -7
  381. package/dist/modules/d200h-renderer.d.ts.map +0 -1
  382. package/dist/modules/d200h-renderer.js +0 -321
  383. package/dist/modules/d200h-renderer.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ import { debug } from './logger.js';
2
+ const pending = new Map();
3
+ function buildDecisionBody(decision) {
4
+ return JSON.stringify({
5
+ hookSpecificOutput: {
6
+ hookEventName: 'PreToolUse',
7
+ permissionDecision: decision,
8
+ },
9
+ });
10
+ }
11
+ /** End a held response with a decision and drop the entry. Safe if the socket
12
+ * is already gone. */
13
+ function endWith(key, entry, decision) {
14
+ clearTimeout(entry.timer);
15
+ pending.delete(key);
16
+ try {
17
+ entry.res.writeHead(200, { 'Content-Type': 'application/json' });
18
+ entry.res.end(buildDecisionBody(decision));
19
+ }
20
+ catch {
21
+ /* client disconnected */
22
+ }
23
+ try {
24
+ entry.onResolved?.(decision);
25
+ }
26
+ catch { /* callback must never throw the resolver */ }
27
+ }
28
+ /**
29
+ * Register a held hook response. Auto-resolves to `ask` after `timeoutMs` so a
30
+ * never-answered prompt falls back to Claude's own terminal prompt. The hook's
31
+ * curl `--max-time` must exceed `timeoutMs` so this fallback reaches Claude
32
+ * before curl gives up.
33
+ */
34
+ export function registerPending(requestId, res, opts) {
35
+ // Defensive: if a stale entry exists under this id, resolve it to ask first.
36
+ const existing = pending.get(requestId);
37
+ if (existing)
38
+ endWith(requestId, existing, 'ask');
39
+ const timer = setTimeout(() => {
40
+ const entry = pending.get(requestId);
41
+ if (entry) {
42
+ debug('permission', `pending ${requestId} timed out → ask`);
43
+ endWith(requestId, entry, 'ask');
44
+ }
45
+ }, opts.timeoutMs);
46
+ pending.set(requestId, {
47
+ res,
48
+ timer,
49
+ sessionId: opts.sessionId,
50
+ tool: opts.tool,
51
+ createdAt: Date.now(),
52
+ onResolved: opts.onResolved,
53
+ });
54
+ debug('permission', `registered pending ${requestId} (tool=${opts.tool ?? '?'} session=${opts.sessionId ?? '?'})`);
55
+ }
56
+ /**
57
+ * Resolve a pending request from a device decision. Returns the affected
58
+ * sessionId (so the caller can clear the awaiting overlay + rebroadcast), or
59
+ * null if no such pending request exists (already resolved / unknown id).
60
+ */
61
+ export function resolvePending(requestId, decision) {
62
+ const entry = pending.get(requestId);
63
+ if (!entry)
64
+ return null;
65
+ const sessionId = entry.sessionId ?? null;
66
+ endWith(requestId, entry, decision);
67
+ debug('permission', `resolved pending ${requestId} → ${decision}`);
68
+ return sessionId;
69
+ }
70
+ /** Drop a pending entry without sending a decision (e.g. the hook's socket
71
+ * closed because Claude moved on). The held response is already dead. */
72
+ export function abandonPending(requestId) {
73
+ const entry = pending.get(requestId);
74
+ if (!entry)
75
+ return;
76
+ clearTimeout(entry.timer);
77
+ pending.delete(requestId);
78
+ }
79
+ /** Sweep entries older than maxAgeMs (backstop for any timer that didn't fire),
80
+ * resolving them to `ask`. Returns the number swept. */
81
+ export function sweepStalePending(maxAgeMs, now = Date.now()) {
82
+ let swept = 0;
83
+ for (const [key, entry] of Array.from(pending.entries())) {
84
+ if (now - entry.createdAt > maxAgeMs) {
85
+ endWith(key, entry, 'ask');
86
+ swept++;
87
+ }
88
+ }
89
+ if (swept > 0)
90
+ debug('permission', `swept ${swept} stale pending requests`);
91
+ return swept;
92
+ }
93
+ /** Resolve all pending to `ask` and clear — used on daemon shutdown. */
94
+ export function drainAllPending() {
95
+ for (const [key, entry] of Array.from(pending.entries())) {
96
+ endWith(key, entry, 'ask');
97
+ }
98
+ }
99
+ /** Test/diagnostic helper. */
100
+ export function _pendingCount() {
101
+ return pending.size;
102
+ }
103
+ //# sourceMappingURL=permission-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-resolver.js","sourceRoot":"","sources":["../src/permission-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Native 11×11 creature glyphs for the Timebox Mini micro layout.
3
+ *
4
+ * The Timebox Mini has only 121 LEDs. Downscaling the 32×32 terrarium creature to
5
+ * 11×11 bottoms out at a fuzzy silhouette — so for this device the creatures are
6
+ * **hand-authored directly at 11×11** as bold, high-contrast bitmaps. Every pixel
7
+ * is intentional, which is dramatically more legible than any downscale. Treat
8
+ * this screen as a status badge, not a shrunken aquarium: one dominant creature,
9
+ * no labels, no HUD chrome, and only the pixels that identify the canonical mark.
10
+ *
11
+ * The glyphs are the canonical brand marks (matching assets/logos/*_creature_gen.png
12
+ * and design/brand/*.svg), not loose creature approximations:
13
+ * Claude → rusty robot (rectangular body, dark cutout eyes, arms, legs)
14
+ * Codex → lavender cloud carrying a white `>_` terminal prompt
15
+ * OpenClaw→ red lobster (side claws, antennae, teal eyes)
16
+ * OpenCode→ hollow rectangular ring logo
17
+ * Antigravity→ peak/arc logo
18
+ * The MicroCreature keys are legacy internal codenames kept for the renderer
19
+ * mapping — only the art behind them is brand-true.
20
+ *
21
+ * Each glyph is an 11-row × 11-col string grid. Characters map to colors:
22
+ * '.' transparent (shows the status-color background)
23
+ * 'B' body 'A' arm/antenna/leg 'C' claw 'D' joint/shadow 'E' eye 'K' cutout 'M' prompt mark 'F' logo frame
24
+ * Antigravity additionally uses gradient bands: L/T/Q/Y/O/R/P/V/U/N plus K for black cutout.
25
+ * `work` is an optional second frame for a simple processing animation (leg wiggle).
26
+ */
27
+ export type RGB = readonly [number, number, number];
28
+ export type MicroCreature = 'octopus' | 'jellyfish' | 'opencode' | 'crayfish' | 'antigravity';
29
+ export type MicroState = 'idle' | 'working' | 'asking';
30
+ export declare const MICRO_SIZE = 11;
31
+ /**
32
+ * Dark status-color field so the bright creature pops.
33
+ *
34
+ * Idle is a steady green so a resting session reads as calm/still. Both active
35
+ * states animate the field so the tiny panel visibly "does something" while the
36
+ * agent is busy — the device only re-pushes when the frame changes, so a
37
+ * breathing field is also what keeps working sessions live on screen:
38
+ * • processing → a slow blue "breathing" pulse (calm, ~3s cycle)
39
+ * • awaiting → a faster, brighter amber pulse (urgent)
40
+ * Error is a steady deep red (no motion — a frozen alarm reads as more severe).
41
+ */
42
+ export declare function microStatusBg(state: 'idle' | 'processing' | 'awaiting' | 'error', animFrame: number): RGB;
43
+ /**
44
+ * Paint a creature glyph onto an 11×11 RGB buffer (only non-transparent pixels).
45
+ * `working` alternates two leg frames; `asking` reuses the idle pose (the amber
46
+ * field already signals "awaiting").
47
+ */
48
+ export declare function paintMicroGlyph(buf: Uint8Array, creature: MicroCreature, state: MicroState, animFrame: number): void;
49
+ //# sourceMappingURL=micro-glyphs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro-glyphs.d.ts","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACpD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;AAC9F,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEvD,eAAO,MAAM,UAAU,KAAK,CAAC;AA6M7B;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,GAAG,OAAO,EACnD,SAAS,EAAE,MAAM,GAChB,GAAG,CAeL;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAoBN"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Native 11×11 creature glyphs for the Timebox Mini micro layout.
3
+ *
4
+ * The Timebox Mini has only 121 LEDs. Downscaling the 32×32 terrarium creature to
5
+ * 11×11 bottoms out at a fuzzy silhouette — so for this device the creatures are
6
+ * **hand-authored directly at 11×11** as bold, high-contrast bitmaps. Every pixel
7
+ * is intentional, which is dramatically more legible than any downscale. Treat
8
+ * this screen as a status badge, not a shrunken aquarium: one dominant creature,
9
+ * no labels, no HUD chrome, and only the pixels that identify the canonical mark.
10
+ *
11
+ * The glyphs are the canonical brand marks (matching assets/logos/*_creature_gen.png
12
+ * and design/brand/*.svg), not loose creature approximations:
13
+ * Claude → rusty robot (rectangular body, dark cutout eyes, arms, legs)
14
+ * Codex → lavender cloud carrying a white `>_` terminal prompt
15
+ * OpenClaw→ red lobster (side claws, antennae, teal eyes)
16
+ * OpenCode→ hollow rectangular ring logo
17
+ * Antigravity→ peak/arc logo
18
+ * The MicroCreature keys are legacy internal codenames kept for the renderer
19
+ * mapping — only the art behind them is brand-true.
20
+ *
21
+ * Each glyph is an 11-row × 11-col string grid. Characters map to colors:
22
+ * '.' transparent (shows the status-color background)
23
+ * 'B' body 'A' arm/antenna/leg 'C' claw 'D' joint/shadow 'E' eye 'K' cutout 'M' prompt mark 'F' logo frame
24
+ * Antigravity additionally uses gradient bands: L/T/Q/Y/O/R/P/V/U/N plus K for black cutout.
25
+ * `work` is an optional second frame for a simple processing animation (leg wiggle).
26
+ */
27
+ export const MICRO_SIZE = 11;
28
+ // Claude Code — rusty robot (design/brand/claudecode.svg): broad rectangular
29
+ // body, full-width side arms, straight vertical legs, and two narrow vertical
30
+ // cutout eyes. The eyes occupy two LED rows because the SVG holes are taller
31
+ // than they are wide; the legs stay aligned instead of wiggling.
32
+ const OCTOPUS = {
33
+ // `E` is the lit "active" eye used only in the work pose: the rusty robot's
34
+ // dark cutout eyes (`K`) light up cyan while it is processing, so the panel
35
+ // reads as "thinking" at a glance instead of a frozen idle robot.
36
+ colors: { B: [235, 130, 90], D: [150, 84, 64], K: [0, 0, 0], E: [120, 226, 255] },
37
+ idle: [
38
+ '...........',
39
+ '.BBBBBBBBB.',
40
+ '.BBBBBBBBB.',
41
+ '.BBKBBBKBB.',
42
+ '.BBKBBBKBB.',
43
+ 'BBBBBBBBBBB',
44
+ 'BBBBBBBBBBB',
45
+ '.BBBBBBBBB.',
46
+ '..BB...BB..',
47
+ '..BB...BB..',
48
+ '...........',
49
+ ],
50
+ // Working: eyes light up + the legs take a stride (left up / right planted),
51
+ // so the alternation with `idle` gives a visible blink + walk while busy.
52
+ work: [
53
+ '...........',
54
+ '.BBBBBBBBB.',
55
+ '.BBBBBBBBB.',
56
+ '.BBEBBBEBB.',
57
+ '.BBEBBBEBB.',
58
+ 'BBBBBBBBBBB',
59
+ 'BBBBBBBBBBB',
60
+ '.BBBBBBBBB.',
61
+ '..BB...BB..',
62
+ '...B...BB..',
63
+ '...........',
64
+ ],
65
+ };
66
+ // Codex — lavender cloud (assets/logos/cloud_creature_gen.png, design/brand/codex.svg):
67
+ // puffy cloud outline with no dangling legs, plus an oversized `>_` prompt. The
68
+ // prompt is deliberately brighter than the body so it survives the LED diffuser.
69
+ const JELLYFISH = {
70
+ // `M` is PURE white (not off-white) and the body is a deeper indigo than the
71
+ // old lavender so the `>_` prompt actually pops on the LED diffuser instead of
72
+ // washing into the cloud. The mark is a bold 2px chevron + full-width cursor.
73
+ colors: { B: [86, 92, 220], M: [255, 255, 255] },
74
+ idle: [
75
+ '...........',
76
+ '...BBBBB...',
77
+ '.BBBBBBBBB.',
78
+ 'BBBBBBBBBBB',
79
+ 'BBMMBBBBBBB',
80
+ 'BBBMMBBBBBB',
81
+ 'BBMMBBBBBBB',
82
+ 'BBBBBBBBBBB',
83
+ 'BBBMMMMMBBB',
84
+ '.BBBBBBBBB.',
85
+ '...BBBBB...',
86
+ ],
87
+ // Working: the cursor blinks off so the alternation reads as a live terminal
88
+ // prompt (chevron steady, underscore pulsing) while Codex is processing.
89
+ work: [
90
+ '...........',
91
+ '...BBBBB...',
92
+ '.BBBBBBBBB.',
93
+ 'BBBBBBBBBBB',
94
+ 'BBMMBBBBBBB',
95
+ 'BBBMMBBBBBB',
96
+ 'BBMMBBBBBBB',
97
+ 'BBBBBBBBBBB',
98
+ 'BBBBBBBBBBB',
99
+ '.BBBBBBBBB.',
100
+ '...BBBBB...',
101
+ ],
102
+ };
103
+ // OpenCode — canonical opencode.svg: a single tall rectangular ring, not two
104
+ // overlapping squares and not a filled core. Light stroke so it reads on LEDs
105
+ // (#3a3a3a brand gray is too dark for this panel).
106
+ const OPENCODE = {
107
+ colors: { F: [232, 232, 232] },
108
+ idle: [
109
+ '...........',
110
+ '..FFFFFFF..',
111
+ '..FFFFFFF..',
112
+ '..FF...FF..',
113
+ '..FF...FF..',
114
+ '..FF...FF..',
115
+ '..FF...FF..',
116
+ '..FF...FF..',
117
+ '..FFFFFFF..',
118
+ '..FFFFFFF..',
119
+ '...........',
120
+ ],
121
+ // Working: the ring thickens inward (hole narrows to 1px), so the alternation
122
+ // with `idle` reads as a steady pulse while OpenCode is processing.
123
+ work: [
124
+ '...........',
125
+ '..FFFFFFF..',
126
+ '..FFFFFFF..',
127
+ '..FFF.FFF..',
128
+ '..FFF.FFF..',
129
+ '..FFF.FFF..',
130
+ '..FFF.FFF..',
131
+ '..FFF.FFF..',
132
+ '..FFFFFFF..',
133
+ '..FFFFFFF..',
134
+ '...........',
135
+ ],
136
+ };
137
+ // Antigravity — rainbow peak/arc mark, simplified for an 11×11 matrix. The
138
+ // central hollow is transparent, not black, so the status field shows through
139
+ // like the open space in the official arc silhouette.
140
+ const ANTIGRAVITY = {
141
+ colors: {
142
+ L: [92, 214, 77],
143
+ T: [31, 198, 179],
144
+ Q: [58, 199, 235],
145
+ Y: [245, 203, 36],
146
+ O: [255, 132, 16],
147
+ R: [255, 82, 65],
148
+ P: [183, 92, 182],
149
+ V: [102, 111, 225],
150
+ U: [36, 126, 255],
151
+ N: [41, 184, 238],
152
+ },
153
+ idle: [
154
+ '.....O.....',
155
+ '....YOR....',
156
+ '...LYORP...',
157
+ '...LYORPV..',
158
+ '...LTQRPV..',
159
+ '..LTQRPVU..',
160
+ '..TQ...VU..',
161
+ '..Q.....U..',
162
+ '.NQ.....UU.',
163
+ '.N.......UU',
164
+ '...........',
165
+ ],
166
+ work: [
167
+ '....YO.....',
168
+ '....YORP...',
169
+ '...LYORPV..',
170
+ '...LTQRPV..',
171
+ '..LTQRPVU..',
172
+ '..TQ...VU..',
173
+ '..Q.....U..',
174
+ '.NQ.....UU.',
175
+ '.N.......UU',
176
+ '...........',
177
+ '...........',
178
+ ],
179
+ };
180
+ // OpenClaw — red mechanical lobster (assets/logos/lobster_creature_gen.png,
181
+ // Pixoo LOD): side claws, small antennae, teal eyes, and a tapered body. The
182
+ // full asset's raised claws are too tall for 11px and read as a different head.
183
+ const CRAYFISH = {
184
+ colors: { B: [255, 92, 92], C: [210, 52, 52], A: [225, 180, 170], E: [0, 229, 204] },
185
+ idle: [
186
+ '...A...A...',
187
+ '....A.A....',
188
+ '....BBB....',
189
+ '...BEBEB...',
190
+ 'C.BBBBBBB.C',
191
+ 'CC.BBBBB.CC',
192
+ '.CBBBBBBB.C',
193
+ '..BBBBBBB..',
194
+ '...BBBBB...',
195
+ '...BB.BB...',
196
+ '..BB...BB..',
197
+ ],
198
+ work: [
199
+ '....A.A....',
200
+ '...A...A...',
201
+ '....BBB....',
202
+ '...BEBEB...',
203
+ '.CBBBBBBB.C',
204
+ 'CC.BBBBB.CC',
205
+ 'C.BBBBBBB.C',
206
+ '..BBBBBBB..',
207
+ '...BBBBB...',
208
+ '...B.B.B...',
209
+ '..BB...BB..',
210
+ ],
211
+ };
212
+ const GLYPHS = {
213
+ octopus: OCTOPUS,
214
+ jellyfish: JELLYFISH,
215
+ opencode: OPENCODE,
216
+ crayfish: CRAYFISH,
217
+ antigravity: ANTIGRAVITY,
218
+ };
219
+ /**
220
+ * Dark status-color field so the bright creature pops.
221
+ *
222
+ * Idle is a steady green so a resting session reads as calm/still. Both active
223
+ * states animate the field so the tiny panel visibly "does something" while the
224
+ * agent is busy — the device only re-pushes when the frame changes, so a
225
+ * breathing field is also what keeps working sessions live on screen:
226
+ * • processing → a slow blue "breathing" pulse (calm, ~3s cycle)
227
+ * • awaiting → a faster, brighter amber pulse (urgent)
228
+ * Error is a steady deep red (no motion — a frozen alarm reads as more severe).
229
+ */
230
+ export function microStatusBg(state, animFrame) {
231
+ switch (state) {
232
+ case 'error': return [64, 18, 18];
233
+ case 'awaiting': {
234
+ const p = 0.78 + 0.22 * ((Math.sin(animFrame * 0.25) + 1) / 2);
235
+ return [Math.round(74 * p), Math.round(50 * p), Math.round(10 * p)];
236
+ }
237
+ case 'processing': {
238
+ // Breathe between a dim floor and a brighter blue on a ~3s cycle. Sampled
239
+ // at the device's ~1.5s poll this reads as a steady "working" heartbeat.
240
+ const p = 0.68 + 0.32 * ((Math.sin(animFrame * 0.18) + 1) / 2);
241
+ return [Math.round(16 * p), Math.round(40 * p), Math.round(88 * p)];
242
+ }
243
+ default: return [16, 56, 28];
244
+ }
245
+ }
246
+ /**
247
+ * Paint a creature glyph onto an 11×11 RGB buffer (only non-transparent pixels).
248
+ * `working` alternates two leg frames; `asking` reuses the idle pose (the amber
249
+ * field already signals "awaiting").
250
+ */
251
+ export function paintMicroGlyph(buf, creature, state, animFrame) {
252
+ const g = GLYPHS[creature];
253
+ const grid = state === 'working' && g.work && ((animFrame >> 2) & 1) ? g.work : g.idle;
254
+ const drift = creature === 'antigravity' ? Math.floor(animFrame / 6) % 4 : 0;
255
+ const offsetX = creature === 'antigravity' && state === 'working'
256
+ ? (drift === 1 ? 1 : drift === 3 ? -1 : 0)
257
+ : 0;
258
+ const offsetY = creature === 'antigravity' && state !== 'idle' && (drift === 0 || drift === 1) ? -1 : 0;
259
+ for (let y = 0; y < MICRO_SIZE; y++) {
260
+ const row = grid[y];
261
+ for (let x = 0; x < MICRO_SIZE; x++) {
262
+ const col = g.colors[row[x]];
263
+ if (!col)
264
+ continue;
265
+ const dx = x + offsetX;
266
+ const dy = y + offsetY;
267
+ if (dx < 0 || dx >= MICRO_SIZE || dy < 0 || dy >= MICRO_SIZE)
268
+ continue;
269
+ const i = (dy * MICRO_SIZE + dx) * 3;
270
+ buf[i] = col[0];
271
+ buf[i + 1] = col[1];
272
+ buf[i + 2] = col[2];
273
+ }
274
+ }
275
+ }
276
+ //# sourceMappingURL=micro-glyphs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"micro-glyphs.js","sourceRoot":"","sources":["../../src/pixoo/micro-glyphs.ts"],"names":[],"mappings":"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"}
@@ -42,9 +42,9 @@ export declare function getPixooDeviceDetails(): Array<{
42
42
  * Render a fresh frame using current cached state.
43
43
  * Used by the live preview endpoint when no Pixoo device is connected.
44
44
  */
45
- export declare function renderPreviewFrame(): Uint8Array;
45
+ export declare function renderPreviewFrame(size?: 11 | 32 | 64, layout?: 'standard' | 'micro'): Uint8Array;
46
46
  /**
47
47
  * Get the last calculated frame.
48
48
  */
49
- export declare function getLastFrame(): Uint8Array | null;
49
+ export declare function getLastFrame(size?: 11 | 32 | 64, layout?: 'standard' | 'micro'): Uint8Array | null;
50
50
  //# sourceMappingURL=pixoo-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pixoo-bridge.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAW7E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiCD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAExE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAwCnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAwDvD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BrD;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAG3E;AAED,+BAA+B;AAC/B,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAG5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED,uCAAuC;AACvC,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,qBAAqB,IAAI,KAAK,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAYD;AAsCD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,GAAG,IAAI,CAEhD"}
1
+ {"version":3,"file":"pixoo-bridge.d.ts","sourceRoot":"","sources":["../../src/pixoo/pixoo-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAgC,MAAM,aAAa,CAAC;AAW7E,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2CD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAExE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAwCnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAmFvD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BrD;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAG3E;AAED,+BAA+B;AAC/B,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAG5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAO/C;AAED,uCAAuC;AACvC,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,qBAAqB,IAAI,KAAK,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAYD;AA8ED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,GAAE,UAAU,GAAG,OAAoB,GAAG,UAAU,CAE7G;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,GAAE,UAAU,GAAG,OAAoB,GAAG,UAAU,GAAG,IAAI,CAE9G"}