@agentdeck/bridge 0.2.1 → 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 +1025 -94
  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
@@ -1,64 +0,0 @@
1
- /**
2
- * APME Rubric Auto-Tuner — Phase 3.
3
- *
4
- * Closes the improvement loop between deterministic results, the LLM judge,
5
- * and the user's vibe check. Algorithm (OPRO-style, ACE-inspired):
6
- *
7
- * 1. Collect recent runs + their evals + vibe feedback.
8
- * 2. Detect disagreement samples:
9
- * - tests_pass=1 but llm_judge.overall<0.5 (false negative)
10
- * - tests_pass=0 but llm_judge.overall>0.8 (false positive)
11
- * - user vibe rejected but judge.overall>0.7
12
- * - user vibe approved but judge.overall<0.5
13
- * 3. Compute baseline correlation between llm_judge.overall and vibe.
14
- * 4. Ask the same judge backend to propose a new rubric prompt + weights,
15
- * conditioned on the disagreement samples (this is OPRO's meta-optimizer
16
- * step — the model learns from its own mistakes).
17
- * 5. Shadow-score the samples under the proposed rubric; keep it only if
18
- * vibe-correlation improves. Never auto-accept a worse rubric.
19
- * 6. On accept, append to `rubrics` with parentVer lineage; on reject, log
20
- * the attempt so a human can inspect later.
21
- *
22
- * The tuner never silently falls back to a different backend per the
23
- * cost-sensitive defaults contract.
24
- */
25
- import type { ApmeStore } from './store.js';
26
- import type { ApmeConfig, ApmeJudgeConfig } from './settings.js';
27
- export interface DisagreementSample {
28
- runId: string;
29
- taskPrompt: string;
30
- judgeOverall: number | null;
31
- testsPass: number | null;
32
- vibe: 'approve' | 'reject' | 'neutral' | null;
33
- note: string;
34
- }
35
- export interface TuneOutcome {
36
- accepted: boolean;
37
- reason: string;
38
- baselineCorrelation: number | null;
39
- proposedCorrelation: number | null;
40
- newVersion: number | null;
41
- }
42
- export declare class ApmeTuner {
43
- private readonly store;
44
- private configOverride;
45
- private judgeOverride;
46
- constructor(store: ApmeStore);
47
- _setConfig(cfg: ApmeConfig): void;
48
- _setJudgeFn(fn: ((prompt: string, cfg: ApmeJudgeConfig) => Promise<string>) | null): void;
49
- /** Trigger a tuning pass. Returns the new rubric version if accepted. */
50
- tune(): Promise<TuneOutcome>;
51
- /** Check if the current rubric should be re-tuned. */
52
- shouldRetune(): Promise<boolean>;
53
- }
54
- export declare function collectDisagreements(store: ApmeStore, limit: number): DisagreementSample[];
55
- export declare function vibeCorrelation(samples: DisagreementSample[]): number | null;
56
- export declare function correlation(xs: number[], ys: number[]): number | null;
57
- export interface RubricProposal {
58
- prompt: string;
59
- weights: Record<string, number>;
60
- notes?: string;
61
- }
62
- export declare function parseProposal(text: string): RubricProposal | null;
63
- export declare function extractOverall(text: string): number | null;
64
- //# sourceMappingURL=tuner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tuner.d.ts","sourceRoot":"","sources":["../../src/apme/tuner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMjE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAID,qBAAa,SAAS;IAIR,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHlC,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,aAAa,CAA4E;gBAEpE,KAAK,EAAE,SAAS;IAE7C,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IACjC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAIzF,yEAAyE;IACnE,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAiGlC,sDAAsD;IAChD,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CAQvC;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAqC1F;AAID,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,GAAG,IAAI,CAM5E;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAgBrE;AAgDD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAoBjE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa1D"}
@@ -1,297 +0,0 @@
1
- /**
2
- * APME Rubric Auto-Tuner — Phase 3.
3
- *
4
- * Closes the improvement loop between deterministic results, the LLM judge,
5
- * and the user's vibe check. Algorithm (OPRO-style, ACE-inspired):
6
- *
7
- * 1. Collect recent runs + their evals + vibe feedback.
8
- * 2. Detect disagreement samples:
9
- * - tests_pass=1 but llm_judge.overall<0.5 (false negative)
10
- * - tests_pass=0 but llm_judge.overall>0.8 (false positive)
11
- * - user vibe rejected but judge.overall>0.7
12
- * - user vibe approved but judge.overall<0.5
13
- * 3. Compute baseline correlation between llm_judge.overall and vibe.
14
- * 4. Ask the same judge backend to propose a new rubric prompt + weights,
15
- * conditioned on the disagreement samples (this is OPRO's meta-optimizer
16
- * step — the model learns from its own mistakes).
17
- * 5. Shadow-score the samples under the proposed rubric; keep it only if
18
- * vibe-correlation improves. Never auto-accept a worse rubric.
19
- * 6. On accept, append to `rubrics` with parentVer lineage; on reject, log
20
- * the attempt so a human can inspect later.
21
- *
22
- * The tuner never silently falls back to a different backend per the
23
- * cost-sensitive defaults contract.
24
- */
25
- import { debug } from '../logger.js';
26
- import { loadApmeConfig } from './settings.js';
27
- import { callJudge } from './runner.js';
28
- // ─── Tuner ─────────────────────────────────────────────────────────────────────
29
- export class ApmeTuner {
30
- store;
31
- configOverride = null;
32
- judgeOverride = null;
33
- constructor(store) {
34
- this.store = store;
35
- }
36
- _setConfig(cfg) { this.configOverride = cfg; }
37
- _setJudgeFn(fn) {
38
- this.judgeOverride = fn;
39
- }
40
- /** Trigger a tuning pass. Returns the new rubric version if accepted. */
41
- async tune() {
42
- if (!this.store.enabled) {
43
- return { accepted: false, reason: 'store disabled', baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
44
- }
45
- const cfg = this.configOverride ?? loadApmeConfig();
46
- if (!cfg.autoTune) {
47
- return { accepted: false, reason: 'autoTune disabled', baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
48
- }
49
- const samples = collectDisagreements(this.store, 30);
50
- if (samples.length < 3) {
51
- return { accepted: false, reason: `insufficient samples (${samples.length}/3)`, baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
52
- }
53
- const rubric = this.store.getCurrentRubric('general');
54
- if (!rubric) {
55
- return { accepted: false, reason: 'no base rubric', baselineCorrelation: null, proposedCorrelation: null, newVersion: null };
56
- }
57
- const baseline = vibeCorrelation(samples);
58
- debug('APME', `tune baseline correlation=${baseline ?? 'n/a'} samples=${samples.length}`);
59
- // Ask the judge to propose a new rubric.
60
- const metaPrompt = buildMetaPrompt(rubric.prompt, rubric.weights, samples);
61
- let judgeText;
62
- try {
63
- judgeText = this.judgeOverride
64
- ? await this.judgeOverride(metaPrompt, cfg.judge)
65
- : await callJudge(metaPrompt, cfg.judge);
66
- }
67
- catch (err) {
68
- debug('APME', `tune judge call failed: ${String(err)}`);
69
- return { accepted: false, reason: `judge call failed: ${String(err)}`, baselineCorrelation: baseline, proposedCorrelation: null, newVersion: null };
70
- }
71
- const proposed = parseProposal(judgeText);
72
- if (!proposed) {
73
- return { accepted: false, reason: 'proposal unparseable', baselineCorrelation: baseline, proposedCorrelation: null, newVersion: null };
74
- }
75
- // Shadow-score: re-run the judge on each disagreement sample using the
76
- // proposed rubric. Correlate the new overall scores against user vibe.
77
- const shadowScores = [];
78
- for (const sample of samples) {
79
- if (!sample.vibe || sample.vibe === 'neutral')
80
- continue;
81
- const scorePrompt = buildShadowPrompt(proposed.prompt, sample);
82
- let shadowText;
83
- try {
84
- shadowText = this.judgeOverride
85
- ? await this.judgeOverride(scorePrompt, cfg.judge)
86
- : await callJudge(scorePrompt, cfg.judge);
87
- }
88
- catch (err) {
89
- debug('APME', `tune shadow call failed: ${String(err)}`);
90
- continue;
91
- }
92
- const overall = extractOverall(shadowText);
93
- if (overall !== null) {
94
- shadowScores.push({ judgeOverall: overall, vibe: sample.vibe });
95
- }
96
- }
97
- const proposedCorr = shadowScores.length >= 3 ? correlation(shadowScores.map((s) => s.judgeOverall), shadowScores.map((s) => vibeToNumber(s.vibe))) : null;
98
- debug('APME', `tune proposed correlation=${proposedCorr ?? 'n/a'} shadow=${shadowScores.length}`);
99
- const improves = (baseline === null || proposedCorr !== null) &&
100
- (proposedCorr ?? -Infinity) > (baseline ?? -Infinity) + 0.05;
101
- if (!improves) {
102
- return {
103
- accepted: false,
104
- reason: `proposed correlation did not improve (baseline=${baseline ?? 'n/a'}, proposed=${proposedCorr ?? 'n/a'})`,
105
- baselineCorrelation: baseline,
106
- proposedCorrelation: proposedCorr,
107
- newVersion: null,
108
- };
109
- }
110
- const newVersion = this.store.appendRubric({
111
- purpose: rubric.purpose,
112
- prompt: proposed.prompt,
113
- weights: JSON.stringify(proposed.weights),
114
- createdAt: Date.now(),
115
- parentVer: rubric.version,
116
- notes: `auto-tune: baseline=${baseline ?? 'n/a'} → proposed=${proposedCorr ?? 'n/a'} over ${shadowScores.length} samples`,
117
- });
118
- debug('APME', `tune accepted v${newVersion} (parent=${rubric.version})`);
119
- return {
120
- accepted: true,
121
- reason: `correlation improved ${baseline ?? 'n/a'} → ${proposedCorr ?? 'n/a'}`,
122
- baselineCorrelation: baseline,
123
- proposedCorrelation: proposedCorr,
124
- newVersion,
125
- };
126
- }
127
- /** Check if the current rubric should be re-tuned. */
128
- async shouldRetune() {
129
- if (!this.store.enabled)
130
- return false;
131
- const samples = collectDisagreements(this.store, 30);
132
- if (samples.length < 10)
133
- return false;
134
- const corr = vibeCorrelation(samples);
135
- // Low correlation with user vibe ⇒ rubric drifted.
136
- return corr !== null && corr < 0.4;
137
- }
138
- }
139
- // ─── Disagreement detection ───────────────────────────────────────────────────
140
- export function collectDisagreements(store, limit) {
141
- const runs = store.listRuns({ limit: Math.max(limit * 3, 60) });
142
- const out = [];
143
- for (const run of runs) {
144
- const evals = store.listEvalsForRun(run.id);
145
- const tests = evals.find((e) => e.layer === 'deterministic' && e.metric === 'tests_pass');
146
- const judge = evals.find((e) => e.layer === 'llm_judge' && e.metric === 'overall');
147
- const vibeRow = store.latestVibeForRun(run.id);
148
- const vibeVerdict = vibeRow ? vibeRow.verdict : null;
149
- const judgeOverall = judge?.score ?? null;
150
- const testsPass = tests?.score ?? null;
151
- // Disagreement heuristics:
152
- let note = '';
153
- if (tests && judge && tests.score === 1 && judge.score < 0.5)
154
- note = 'tests pass but judge fails';
155
- else if (tests && judge && tests.score === 0 && judge.score > 0.8)
156
- note = 'tests fail but judge passes';
157
- else if (vibeVerdict === 'reject' && judge && judge.score > 0.7)
158
- note = 'user rejected but judge approved';
159
- else if (vibeVerdict === 'approve' && judge && judge.score < 0.5)
160
- note = 'user approved but judge rejected';
161
- else if (vibeVerdict && vibeVerdict !== 'neutral' && judge) {
162
- // Even without explicit disagreement, vibe-labeled runs are valuable.
163
- note = 'vibe labeled';
164
- }
165
- else {
166
- continue;
167
- }
168
- out.push({
169
- runId: run.id,
170
- taskPrompt: (run.taskPrompt ?? '').slice(0, 400),
171
- judgeOverall,
172
- testsPass,
173
- vibe: vibeVerdict,
174
- note,
175
- });
176
- if (out.length >= limit)
177
- break;
178
- }
179
- return out;
180
- }
181
- // ─── Correlation math ─────────────────────────────────────────────────────────
182
- export function vibeCorrelation(samples) {
183
- const pairs = samples
184
- .filter((s) => s.vibe && s.vibe !== 'neutral' && s.judgeOverall !== null)
185
- .map((s) => [s.judgeOverall, vibeToNumber(s.vibe)]);
186
- if (pairs.length < 3)
187
- return null;
188
- return correlation(pairs.map((p) => p[0]), pairs.map((p) => p[1]));
189
- }
190
- export function correlation(xs, ys) {
191
- if (xs.length !== ys.length || xs.length < 2)
192
- return null;
193
- const n = xs.length;
194
- const mx = xs.reduce((a, b) => a + b, 0) / n;
195
- const my = ys.reduce((a, b) => a + b, 0) / n;
196
- let num = 0, dx = 0, dy = 0;
197
- for (let i = 0; i < n; i++) {
198
- const a = xs[i] - mx;
199
- const b = ys[i] - my;
200
- num += a * b;
201
- dx += a * a;
202
- dy += b * b;
203
- }
204
- const denom = Math.sqrt(dx * dy);
205
- if (denom === 0)
206
- return null;
207
- return num / denom;
208
- }
209
- function vibeToNumber(v) {
210
- if (v === 'approve')
211
- return 1;
212
- if (v === 'reject')
213
- return 0;
214
- return 0.5;
215
- }
216
- // ─── Meta-prompts ─────────────────────────────────────────────────────────────
217
- function buildMetaPrompt(currentPrompt, currentWeights, samples) {
218
- const lines = [];
219
- lines.push('You are a rubric meta-optimizer. The current judge rubric disagrees with ground truth on the following samples.');
220
- lines.push('Propose a *revised* rubric prompt and axis weights that would resolve these disagreements while staying concise (<800 chars).');
221
- lines.push('');
222
- lines.push('--- CURRENT RUBRIC PROMPT ---');
223
- lines.push(currentPrompt);
224
- lines.push('');
225
- lines.push(`--- CURRENT WEIGHTS ---`);
226
- lines.push(currentWeights);
227
- lines.push('');
228
- lines.push('--- DISAGREEMENT SAMPLES ---');
229
- for (const s of samples) {
230
- lines.push(`- runId=${s.runId} tests_pass=${s.testsPass ?? 'n/a'} judge_overall=${s.judgeOverall ?? 'n/a'} vibe=${s.vibe ?? 'n/a'} :: ${s.note}`);
231
- if (s.taskPrompt)
232
- lines.push(` task: ${s.taskPrompt}`);
233
- }
234
- lines.push('');
235
- lines.push('Respond with strict JSON only:');
236
- lines.push('{"prompt":"...","weights":{"intent":N,"correctness":N,"style":N,"convention":N},"notes":"..."}');
237
- return lines.join('\n');
238
- }
239
- function buildShadowPrompt(newRubricPrompt, sample) {
240
- return [
241
- newRubricPrompt,
242
- '',
243
- '--- SAMPLE ---',
244
- `task: ${sample.taskPrompt || '(not captured)'}`,
245
- `tests_pass: ${sample.testsPass ?? 'n/a'}`,
246
- `prior_judge_overall: ${sample.judgeOverall ?? 'n/a'}`,
247
- `user_vibe: ${sample.vibe ?? 'n/a'}`,
248
- '',
249
- 'Respond with strict JSON only: {"overall":N,"reasoning":"..."}',
250
- ].join('\n');
251
- }
252
- export function parseProposal(text) {
253
- const match = text.match(/\{[\s\S]*\}/);
254
- if (!match)
255
- return null;
256
- try {
257
- const obj = JSON.parse(match[0]);
258
- if (typeof obj.prompt !== 'string' || obj.prompt.length < 20)
259
- return null;
260
- if (!obj.weights || typeof obj.weights !== 'object')
261
- return null;
262
- const weights = {};
263
- for (const [k, v] of Object.entries(obj.weights)) {
264
- if (typeof v === 'number' && isFinite(v) && v >= 0)
265
- weights[k] = v;
266
- }
267
- if (Object.keys(weights).length === 0)
268
- return null;
269
- return {
270
- prompt: obj.prompt,
271
- weights,
272
- notes: typeof obj.notes === 'string' ? obj.notes : undefined,
273
- };
274
- }
275
- catch {
276
- return null;
277
- }
278
- }
279
- export function extractOverall(text) {
280
- const match = text.match(/\{[\s\S]*\}/);
281
- if (!match)
282
- return null;
283
- try {
284
- const obj = JSON.parse(match[0]);
285
- const v = obj.overall;
286
- if (typeof v !== 'number' || !isFinite(v))
287
- return null;
288
- let n = v;
289
- if (n > 1 && n <= 10)
290
- n = n / 10;
291
- return Math.max(0, Math.min(1, n));
292
- }
293
- catch {
294
- return null;
295
- }
296
- }
297
- //# sourceMappingURL=tuner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tuner.js","sourceRoot":"","sources":["../../src/apme/tuner.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * D200H HID Protocol — D200-compatible 1024-byte packet protocol
3
- *
4
- * Packet structure:
5
- * [0-1] Header: 0x7C 0x7C
6
- * [2-3] Command: big-endian uint16
7
- * [4-7] Length: little-endian uint32
8
- * [8-1023] Payload (zero-padded)
9
- *
10
- * Image delivery: ZIP(manifest.json + icons/*.png) sent in chunked 1024-byte packets.
11
- * ZIP quirk: bytes at offset 1016, 2040, 3064... must NOT be 0x00 or 0x7C.
12
- */
13
- export declare const CMD: {
14
- readonly SET_BUTTONS: 1;
15
- readonly PARTIAL_UPDATE: 13;
16
- readonly SET_SMALL_WINDOW: 6;
17
- readonly SET_BRIGHTNESS: 10;
18
- readonly SET_LABEL_STYLE: 11;
19
- readonly IN_BUTTON: 257;
20
- readonly IN_DEVICE_INFO: 771;
21
- };
22
- export declare function buildPacket(command: number, payload: Buffer, totalLength?: number): Buffer;
23
- /**
24
- * Build all packets for a ZIP file transfer (SET_BUTTONS or PARTIAL_UPDATE).
25
- * First packet has the header; subsequent packets are raw 1024-byte chunks.
26
- */
27
- export declare function buildZipPackets(zipData: Buffer, command?: number): Buffer[];
28
- export declare function buildBrightnessPacket(brightness: number): Buffer;
29
- export declare function buildSmallWindowPacket(mode: number, cpu: number, mem: number, time: string, gpu: number): Buffer;
30
- export interface ButtonEvent {
31
- index: number;
32
- pressed: boolean;
33
- state: number;
34
- }
35
- export interface DeviceInfo {
36
- serialNumber: string;
37
- firmwareVersion: string;
38
- deviceType: string;
39
- hardwareVersion: string;
40
- }
41
- export type IncomingEvent = {
42
- type: 'button';
43
- data: ButtonEvent;
44
- } | {
45
- type: 'device_info';
46
- data: DeviceInfo;
47
- } | {
48
- type: 'unknown';
49
- command: number;
50
- raw: Buffer;
51
- };
52
- export declare function parseIncoming(data: Buffer): IncomingEvent | null;
53
- /**
54
- * Check if a ZIP has invalid bytes at 1024-byte chunk boundaries.
55
- * At offset 1016, 2040, 3064... the byte must not be 0x00 or 0x7C.
56
- */
57
- export declare function validateZipBoundaries(zipData: Buffer): boolean;
58
- /**
59
- * Generate a random dummy string to pad the ZIP until boundaries are valid.
60
- */
61
- export declare function generateDummyPadding(attempt: number): string;
62
- //# sourceMappingURL=hid-protocol.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hid-protocol.d.ts","sourceRoot":"","sources":["../../src/d200h/hid-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,eAAO,MAAM,GAAG;;;;;;;;CAQN,CAAC;AAIX,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAY1F;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAwB,GAAG,MAAM,EAAE,CAiB5F;AAED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhH;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAoChE;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -1,124 +0,0 @@
1
- /**
2
- * D200H HID Protocol — D200-compatible 1024-byte packet protocol
3
- *
4
- * Packet structure:
5
- * [0-1] Header: 0x7C 0x7C
6
- * [2-3] Command: big-endian uint16
7
- * [4-7] Length: little-endian uint32
8
- * [8-1023] Payload (zero-padded)
9
- *
10
- * Image delivery: ZIP(manifest.json + icons/*.png) sent in chunked 1024-byte packets.
11
- * ZIP quirk: bytes at offset 1016, 2040, 3064... must NOT be 0x00 or 0x7C.
12
- */
13
- import { randomBytes } from 'crypto';
14
- const TAG = 'd200h-hid';
15
- const PACKET_SIZE = 1024;
16
- const HEADER = Buffer.from([0x7c, 0x7c]);
17
- const INVALID_BOUNDARY_BYTES = [0x00, 0x7c];
18
- // --- Commands ---
19
- export const CMD = {
20
- SET_BUTTONS: 0x0001,
21
- PARTIAL_UPDATE: 0x000d,
22
- SET_SMALL_WINDOW: 0x0006,
23
- SET_BRIGHTNESS: 0x000a,
24
- SET_LABEL_STYLE: 0x000b,
25
- IN_BUTTON: 0x0101,
26
- IN_DEVICE_INFO: 0x0303,
27
- };
28
- // --- Packet building ---
29
- export function buildPacket(command, payload, totalLength) {
30
- const pkt = Buffer.alloc(PACKET_SIZE, 0);
31
- // Header
32
- pkt[0] = 0x7c;
33
- pkt[1] = 0x7c;
34
- // Command (big-endian uint16)
35
- pkt.writeUInt16BE(command, 2);
36
- // Length (little-endian uint32) — total file size for multi-packet, else payload length
37
- pkt.writeUInt32LE(totalLength ?? payload.length, 4);
38
- // Payload
39
- payload.copy(pkt, 8, 0, Math.min(payload.length, PACKET_SIZE - 8));
40
- return pkt;
41
- }
42
- /**
43
- * Build all packets for a ZIP file transfer (SET_BUTTONS or PARTIAL_UPDATE).
44
- * First packet has the header; subsequent packets are raw 1024-byte chunks.
45
- */
46
- export function buildZipPackets(zipData, command = CMD.SET_BUTTONS) {
47
- const packets = [];
48
- const fileSize = zipData.length;
49
- // First packet: header(8) + first chunk
50
- const firstChunkSize = PACKET_SIZE - 8;
51
- const firstChunk = zipData.subarray(0, firstChunkSize);
52
- packets.push(buildPacket(command, firstChunk, fileSize));
53
- // Remaining chunks (raw, no header)
54
- for (let offset = firstChunkSize; offset < fileSize; offset += PACKET_SIZE) {
55
- const chunk = Buffer.alloc(PACKET_SIZE, 0);
56
- zipData.copy(chunk, 0, offset, Math.min(offset + PACKET_SIZE, fileSize));
57
- packets.push(chunk);
58
- }
59
- return packets;
60
- }
61
- export function buildBrightnessPacket(brightness) {
62
- const val = Math.max(0, Math.min(100, Math.round(brightness)));
63
- return buildPacket(CMD.SET_BRIGHTNESS, Buffer.from(String(val), 'utf-8'));
64
- }
65
- export function buildSmallWindowPacket(mode, cpu, mem, time, gpu) {
66
- const data = `${mode}|${cpu}|${mem}|${time}|${gpu}`;
67
- return buildPacket(CMD.SET_SMALL_WINDOW, Buffer.from(data, 'utf-8'));
68
- }
69
- export function parseIncoming(data) {
70
- if (data.length < 8)
71
- return null;
72
- if (data[0] !== 0x7c || data[1] !== 0x7c)
73
- return null;
74
- const command = data.readUInt16BE(2);
75
- if (command === CMD.IN_BUTTON && data.length >= 12) {
76
- return {
77
- type: 'button',
78
- data: {
79
- state: data[8],
80
- index: data[9],
81
- pressed: data[11] === 0x01,
82
- },
83
- };
84
- }
85
- if (command === CMD.IN_DEVICE_INFO) {
86
- try {
87
- const jsonStr = data.subarray(8).toString('ascii').split('\0')[0];
88
- const info = JSON.parse(jsonStr);
89
- return {
90
- type: 'device_info',
91
- data: {
92
- serialNumber: info.SerialNumber ?? '',
93
- firmwareVersion: info.Dversion ?? '',
94
- deviceType: info.DeviceType ?? '',
95
- hardwareVersion: info.HardwareVersion ?? '',
96
- },
97
- };
98
- }
99
- catch {
100
- return { type: 'unknown', command, raw: data };
101
- }
102
- }
103
- return { type: 'unknown', command, raw: data };
104
- }
105
- // --- ZIP validation (boundary byte workaround) ---
106
- /**
107
- * Check if a ZIP has invalid bytes at 1024-byte chunk boundaries.
108
- * At offset 1016, 2040, 3064... the byte must not be 0x00 or 0x7C.
109
- */
110
- export function validateZipBoundaries(zipData) {
111
- for (let i = 1016; i < zipData.length; i += PACKET_SIZE) {
112
- if (INVALID_BOUNDARY_BYTES.includes(zipData[i])) {
113
- return false;
114
- }
115
- }
116
- return true;
117
- }
118
- /**
119
- * Generate a random dummy string to pad the ZIP until boundaries are valid.
120
- */
121
- export function generateDummyPadding(attempt) {
122
- return 'AgentDeck ' + randomBytes(8 * (attempt + 1)).toString('hex');
123
- }
124
- //# sourceMappingURL=hid-protocol.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hid-protocol.js","sourceRoot":"","sources":["../../src/d200h/hid-protocol.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- /**
2
- * D200H Image Renderer — Renders AgentDeck state as 196×196 PNG key icons
3
- * using the shared SVG renderers (same visual output as Stream Deck plugin).
4
- *
5
- * Pipeline: state → shared SVG generators (144×144) → resvg rasterize (196×196 PNG) → ZIP
6
- *
7
- * Falls back to solid-color PNGs if resvg-js is not available.
8
- */
9
- import type { SessionInfo, PromptOption } from '@agentdeck/shared';
10
- /** Initialize the renderer (call once at module start). */
11
- export declare function initRenderer(): Promise<void>;
12
- export interface DashState {
13
- state: string;
14
- projectName: string;
15
- modelName: string;
16
- mode: string;
17
- agentType: string;
18
- fiveHourPercent: number;
19
- sevenDayPercent: number;
20
- totalTokens: number;
21
- totalCost: number;
22
- options: PromptOption[];
23
- currentTool: string;
24
- allSessions: SessionInfo[];
25
- }
26
- export declare function parseState(evt: any): DashState;
27
- /**
28
- * Render the full AgentDeck dashboard as a ZIP ready for SET_BUTTONS.
29
- * Uses shared SVG renderers → resvg rasterization for SD+-quality output.
30
- */
31
- export declare function renderDashboardZip(stateEvt: any): Buffer;
32
- /**
33
- * Create a simple hash of the visual state for change detection.
34
- */
35
- export declare function stateHash(stateEvt: any): string;
36
- //# sourceMappingURL=image-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-renderer.d.ts","sourceRoot":"","sources":["../../src/d200h/image-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAcH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA6BnE,2DAA2D;AAC3D,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAqDD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,CAiB9C;AA+WD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAmExD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,GAAG,GAAG,MAAM,CAI/C"}