@readymadeit/mcp 0.0.0-stage → 0.1.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 (916) hide show
  1. package/README.md +114 -2
  2. package/bundle/LICENSE +201 -0
  3. package/bundle/boards/aggregator-demo-board.json +54 -0
  4. package/bundle/boards/alpaca-board.json +316 -0
  5. package/bundle/boards/animate-board.json +159 -0
  6. package/bundle/boards/ascii-art-demo-board.json +33 -0
  7. package/bundle/boards/ascii-cam-board.json +184 -0
  8. package/bundle/boards/asset-demo-board.json +54 -0
  9. package/bundle/boards/audio-encode-demo-board.json +153 -0
  10. package/bundle/boards/audiolize-board.json +152 -0
  11. package/bundle/boards/batcher-demo-board.json +43 -0
  12. package/bundle/boards/buffer-demo-board.json +53 -0
  13. package/bundle/boards/cache-demo-board.json +59 -0
  14. package/bundle/boards/camera-demo-board.json +28 -0
  15. package/bundle/boards/canvas-demo-board.json +55 -0
  16. package/bundle/boards/changes-demo-board.json +60 -0
  17. package/bundle/boards/court-booking-browser-demo-board.json +221 -0
  18. package/bundle/boards/court-booking-demo-board.json +218 -0
  19. package/bundle/boards/current-time-board.json +32 -0
  20. package/bundle/boards/debounce-demo-board.json +43 -0
  21. package/bundle/boards/decrypt-demo-board.json +47 -0
  22. package/bundle/boards/delay-demo-board.json +28 -0
  23. package/bundle/boards/detect-demo-board.json +64 -0
  24. package/bundle/boards/document-extract-demo-board.json +55 -0
  25. package/bundle/boards/dropitapp-board.json +138 -0
  26. package/bundle/boards/encode-demo-board.json +39 -0
  27. package/bundle/boards/encrypt-board.json +185 -0
  28. package/bundle/boards/encrypt-demo-board.json +39 -0
  29. package/bundle/boards/face-alert-board.json +181 -0
  30. package/bundle/boards/fetcher-demo-board.json +40 -0
  31. package/bundle/boards/fft-demo-board.json +28 -0
  32. package/bundle/boards/filter-demo-board.json +55 -0
  33. package/bundle/boards/flat-map-demo-board.json +42 -0
  34. package/bundle/boards/frame-limit-test-board.json +130 -0
  35. package/bundle/boards/game-board.json +413 -0
  36. package/bundle/boards/game-of-life-board.json +139 -0
  37. package/bundle/boards/game-of-life-demo-board.json +34 -0
  38. package/bundle/boards/gather-demo-board.json +62 -0
  39. package/bundle/boards/group-by-demo-board.json +62 -0
  40. package/bundle/boards/hacker-demo-board.json +45 -0
  41. package/bundle/boards/hacker-news-board.json +741 -0
  42. package/bundle/boards/hash-demo-board.json +40 -0
  43. package/bundle/boards/health-log-browser-demo-board.json +537 -0
  44. package/bundle/boards/health-log-demo-board.json +498 -0
  45. package/bundle/boards/helloworld-board.json +57 -0
  46. package/bundle/boards/hold-demo-board.json +67 -0
  47. package/bundle/boards/hold-scopes-demo-board.json +141 -0
  48. package/bundle/boards/http-client-browser-demo-board.json +379 -0
  49. package/bundle/boards/http-client-demo-board.json +380 -0
  50. package/bundle/boards/image-picker-demo-board.json +22 -0
  51. package/bundle/boards/imap-email-demo-board.json +35 -0
  52. package/bundle/boards/injector-demo-board.json +55 -0
  53. package/bundle/boards/iterator-demo-board.json +55 -0
  54. package/bundle/boards/limit-demo-board.json +66 -0
  55. package/bundle/boards/link-debugger.json +32 -0
  56. package/bundle/boards/live-location-demo-board.json +93 -0
  57. package/bundle/boards/live-radio-cloud-demo-board.json +216 -0
  58. package/bundle/boards/live-radio-cloud-direct-demo-board.json +311 -0
  59. package/bundle/boards/live-radio-demo-board.json +211 -0
  60. package/bundle/boards/live-radio-members-demo-board.json +314 -0
  61. package/bundle/boards/local-storage-demo-board.json +30 -0
  62. package/bundle/boards/lz-compress-demo-board.json +52 -0
  63. package/bundle/boards/map-demo-board.json +46 -0
  64. package/bundle/boards/match-filter-demo-board.json +43 -0
  65. package/bundle/boards/meeting-poll-browser-demo-board.json +649 -0
  66. package/bundle/boards/meeting-poll-demo-board.json +650 -0
  67. package/bundle/boards/microphone-monitor-demo-board.json +28 -0
  68. package/bundle/boards/microphone-speaker-demo-board.json +86 -0
  69. package/bundle/boards/monitor-demo-board.json +52 -0
  70. package/bundle/boards/mounted-endpoint-demo-board-hkp-rt.json +84 -0
  71. package/bundle/boards/mounted-endpoint-demo-board.json +84 -0
  72. package/bundle/boards/nested-rhythm-demo-board.json +1160 -0
  73. package/bundle/boards/next-bus-board.json +52 -0
  74. package/bundle/boards/next-bus-switch-board.json +79 -0
  75. package/bundle/boards/night-groove-demo-board.json +742 -0
  76. package/bundle/boards/noise-alert-board.json +146 -0
  77. package/bundle/boards/offer-followup-demo-board.json +291 -0
  78. package/bundle/boards/offer-intake-demo-board.json +289 -0
  79. package/bundle/boards/offer-intake-hetzner-demo-board.json +286 -0
  80. package/bundle/boards/offer-intake-imap-demo-board.json +289 -0
  81. package/bundle/boards/offer-intake-imap-hetzner-demo-board.json +354 -0
  82. package/bundle/boards/p2p-receiver-demo-board.json +65 -0
  83. package/bundle/boards/p2p-sender-demo-board.json +94 -0
  84. package/bundle/boards/pad-groove-demo-board.json +644 -0
  85. package/bundle/boards/peer-chat-board.json +109 -0
  86. package/bundle/boards/peer-chat-node-board.json +97 -0
  87. package/bundle/boards/qr-code-demo-board.json +22 -0
  88. package/bundle/boards/queue-demo-board.json +239 -0
  89. package/bundle/boards/reduce-demo-board.json +54 -0
  90. package/bundle/boards/remote-named-demo-board-hkp-rt.json +61 -0
  91. package/bundle/boards/remote-named-demo-board.json +61 -0
  92. package/bundle/boards/rss-demo-board.json +530 -0
  93. package/bundle/boards/rss-radio-board.json +515 -0
  94. package/bundle/boards/rss-radio-brief-one-board.json +237 -0
  95. package/bundle/boards/rss-radio-editor-unit-board.json +555 -0
  96. package/bundle/boards/rss-radio-library-unit-board.json +293 -0
  97. package/bundle/boards/rss-radio-unit-board.json +809 -0
  98. package/bundle/boards/rss-radio-voice-unit-board.json +146 -0
  99. package/bundle/boards/runtime-configs/hold-example.json +41 -0
  100. package/bundle/boards/runtime-configs/injector-example.json +23 -0
  101. package/bundle/boards/runtime-configs/speech-to-text-example.json +35 -0
  102. package/bundle/boards/runtime-configs/text-generation-example.json +31 -0
  103. package/bundle/boards/runtime-configs/text-to-speech-example.json +28 -0
  104. package/bundle/boards/runtime-configs/text-to-speech-inflect-example.json +28 -0
  105. package/bundle/boards/runtime-configs/ws-audio-playback-example.json +23 -0
  106. package/bundle/boards/select-demo-board.json +32 -0
  107. package/bundle/boards/send-ntfy-board.json +52 -0
  108. package/bundle/boards/shared-costs-demo-board.json +361 -0
  109. package/bundle/boards/sign-demo-board.json +41 -0
  110. package/bundle/boards/skill-router-demo-board.json +210 -0
  111. package/bundle/boards/smooth-demo-board.json +91 -0
  112. package/bundle/boards/smtp-email-demo-board.json +34 -0
  113. package/bundle/boards/sort-demo-board.json +55 -0
  114. package/bundle/boards/sound-demo-board.json +65 -0
  115. package/bundle/boards/spectral-modifier-board.json +98 -0
  116. package/bundle/boards/speech-synth-demo-board.json +37 -0
  117. package/bundle/boards/speech-to-text-demo-board.json +146 -0
  118. package/bundle/boards/spotify-board.json +75 -0
  119. package/bundle/boards/spread-demo-board.json +35 -0
  120. package/bundle/boards/sql-demo-board.json +56 -0
  121. package/bundle/boards/sql-explorer-board.json +447 -0
  122. package/bundle/boards/sql-explorer-node-board.json +474 -0
  123. package/bundle/boards/sql-import-board.json +156 -0
  124. package/bundle/boards/state-demo-board.json +65 -0
  125. package/bundle/boards/stopper-demo-board.json +40 -0
  126. package/bundle/boards/storage-demo-board.json +193 -0
  127. package/bundle/boards/store-demo-board.json +63 -0
  128. package/bundle/boards/swimlanes-demo-board.json +197 -0
  129. package/bundle/boards/switch-demo-board.json +51 -0
  130. package/bundle/boards/syn-board.json +19 -0
  131. package/bundle/boards/syn-booking-unit-board.json +998 -0
  132. package/bundle/boards/syn-conversations-anthropic-demo-board.json +925 -0
  133. package/bundle/boards/syn-conversations-demo-board.json +925 -0
  134. package/bundle/boards/syn-hotels-unit-board.json +287 -0
  135. package/bundle/boards/syn-mail-desk-board.json +25 -0
  136. package/bundle/boards/syn-mail-desk-unit-board.json +254 -0
  137. package/bundle/boards/telegram-listener-demo-board.json +31 -0
  138. package/bundle/boards/text-generation-anthropic-demo-board.json +66 -0
  139. package/bundle/boards/text-generation-demo-board.json +51 -0
  140. package/bundle/boards/text-generation-local-demo-board.json +80 -0
  141. package/bundle/boards/text-to-speech-demo-board.json +58 -0
  142. package/bundle/boards/timeline-demo-board.json +477 -0
  143. package/bundle/boards/timer-demo-board.json +35 -0
  144. package/bundle/boards/tracks-demo-board.json +95 -0
  145. package/bundle/boards/trigger-pad-demo-board.json +47 -0
  146. package/bundle/boards/triggerpad-board.json +31 -0
  147. package/bundle/boards/triggerpad-recorder-board.json +56 -0
  148. package/bundle/boards/uuid-generator-demo-board.json +166 -0
  149. package/bundle/boards/voice-assistant-demo-board.json +230 -0
  150. package/bundle/boards/voice-assistant-hkp-rt-demo-board.json +239 -0
  151. package/bundle/boards/voice-assistant-local-demo-board.json +232 -0
  152. package/bundle/boards/voice-assistant-skills-demo-board.json +316 -0
  153. package/bundle/boards/voice-assistant-skills-local-demo-board.json +316 -0
  154. package/bundle/boards/xy-pad-demo-board.json +36 -0
  155. package/bundle/docs/content/board-json.md +277 -0
  156. package/bundle/docs/content/boards/alpaca-board.md +56 -0
  157. package/bundle/docs/content/boards/animate-board.md +40 -0
  158. package/bundle/docs/content/boards/ascii-cam-board.md +37 -0
  159. package/bundle/docs/content/boards/audiolize-board.md +47 -0
  160. package/bundle/docs/content/boards/court-booking-browser-demo-board.md +43 -0
  161. package/bundle/docs/content/boards/court-booking-demo-board.md +120 -0
  162. package/bundle/docs/content/boards/current-time-board.md +32 -0
  163. package/bundle/docs/content/boards/dropitapp-board.md +57 -0
  164. package/bundle/docs/content/boards/encrypt-board.md +36 -0
  165. package/bundle/docs/content/boards/face-alert-board.md +50 -0
  166. package/bundle/docs/content/boards/game-board.md +69 -0
  167. package/bundle/docs/content/boards/game-of-life-board.md +47 -0
  168. package/bundle/docs/content/boards/hacker-news-board.md +76 -0
  169. package/bundle/docs/content/boards/health-log-browser-demo-board.md +56 -0
  170. package/bundle/docs/content/boards/health-log-demo-board.md +138 -0
  171. package/bundle/docs/content/boards/helloworld-board.md +40 -0
  172. package/bundle/docs/content/boards/link-debugger.md +31 -0
  173. package/bundle/docs/content/boards/live-radio-cloud-demo-board.md +70 -0
  174. package/bundle/docs/content/boards/live-radio-cloud-direct-demo-board.md +89 -0
  175. package/bundle/docs/content/boards/live-radio-demo-board.md +102 -0
  176. package/bundle/docs/content/boards/live-radio-members-demo-board.md +91 -0
  177. package/bundle/docs/content/boards/meeting-poll-browser-demo-board.md +45 -0
  178. package/bundle/docs/content/boards/meeting-poll-demo-board.md +121 -0
  179. package/bundle/docs/content/boards/mounted-endpoint-demo-board-hkp-rt.md +50 -0
  180. package/bundle/docs/content/boards/nested-rhythm-demo-board.md +165 -0
  181. package/bundle/docs/content/boards/next-bus-board.md +38 -0
  182. package/bundle/docs/content/boards/next-bus-switch-board.md +44 -0
  183. package/bundle/docs/content/boards/night-groove-demo-board.md +110 -0
  184. package/bundle/docs/content/boards/noise-alert-board.md +44 -0
  185. package/bundle/docs/content/boards/pad-groove-demo-board.md +93 -0
  186. package/bundle/docs/content/boards/peer-chat-board.md +49 -0
  187. package/bundle/docs/content/boards/peer-chat-node-board.md +47 -0
  188. package/bundle/docs/content/boards/rss-radio-board.md +221 -0
  189. package/bundle/docs/content/boards/send-ntfy-board.md +33 -0
  190. package/bundle/docs/content/boards/shared-costs-demo-board.md +65 -0
  191. package/bundle/docs/content/boards/spectral-modifier-board.md +55 -0
  192. package/bundle/docs/content/boards/spotify-board.md +46 -0
  193. package/bundle/docs/content/boards/sql-explorer-board.md +70 -0
  194. package/bundle/docs/content/boards/sql-explorer-node-board.md +76 -0
  195. package/bundle/docs/content/boards/sql-import-board.md +37 -0
  196. package/bundle/docs/content/boards/swimlanes-demo-board.md +148 -0
  197. package/bundle/docs/content/boards/syn-mail-desk-board.md +52 -0
  198. package/bundle/docs/content/boards/timeline-demo-board.md +115 -0
  199. package/bundle/docs/content/boards/triggerpad-board.md +32 -0
  200. package/bundle/docs/content/boards/triggerpad-recorder-board.md +52 -0
  201. package/bundle/docs/content/boards/voice-assistant-demo-board.md +51 -0
  202. package/bundle/docs/content/concepts/assets.md +245 -0
  203. package/bundle/docs/content/concepts/blocks.md +300 -0
  204. package/bundle/docs/content/concepts/board-assistant.md +307 -0
  205. package/bundle/docs/content/concepts/board.md +265 -0
  206. package/bundle/docs/content/concepts/cloud-boards.md +803 -0
  207. package/bundle/docs/content/concepts/coordinator.md +297 -0
  208. package/bundle/docs/content/concepts/logging.md +293 -0
  209. package/bundle/docs/content/concepts/mounts.md +314 -0
  210. package/bundle/docs/content/concepts/presets.md +360 -0
  211. package/bundle/docs/content/concepts/remotes.md +423 -0
  212. package/bundle/docs/content/concepts/runtime.md +664 -0
  213. package/bundle/docs/content/concepts/scopes.md +256 -0
  214. package/bundle/docs/content/concepts/service.md +227 -0
  215. package/bundle/docs/content/concepts/units.md +321 -0
  216. package/bundle/docs/content/introduction.md +163 -0
  217. package/bundle/docs/content/llm/circle-text-board.json +55 -0
  218. package/bundle/docs/content/llm/howto-workflow.md +369 -0
  219. package/bundle/docs/content/repository.md +161 -0
  220. package/bundle/docs/content/services/aggregator.md +76 -0
  221. package/bundle/docs/content/services/analyzer.md +44 -0
  222. package/bundle/docs/content/services/ascii-art.md +58 -0
  223. package/bundle/docs/content/services/asset.md +88 -0
  224. package/bundle/docs/content/services/audio-editor.md +57 -0
  225. package/bundle/docs/content/services/audio-encode.md +115 -0
  226. package/bundle/docs/content/services/audio-io.md +173 -0
  227. package/bundle/docs/content/services/batcher.md +49 -0
  228. package/bundle/docs/content/services/board-service.md +48 -0
  229. package/bundle/docs/content/services/browser-sub-service.md +75 -0
  230. package/bundle/docs/content/services/buffer.md +70 -0
  231. package/bundle/docs/content/services/cache.md +92 -0
  232. package/bundle/docs/content/services/camera.md +85 -0
  233. package/bundle/docs/content/services/canvas.md +196 -0
  234. package/bundle/docs/content/services/changes.md +87 -0
  235. package/bundle/docs/content/services/chunked-file-provider.md +63 -0
  236. package/bundle/docs/content/services/communication-dispatcher.md +190 -0
  237. package/bundle/docs/content/services/configurator.md +66 -0
  238. package/bundle/docs/content/services/conversations.md +244 -0
  239. package/bundle/docs/content/services/debounce.md +45 -0
  240. package/bundle/docs/content/services/decrypt.md +53 -0
  241. package/bundle/docs/content/services/delay.md +55 -0
  242. package/bundle/docs/content/services/detect.md +101 -0
  243. package/bundle/docs/content/services/document-extract.md +174 -0
  244. package/bundle/docs/content/services/download.md +67 -0
  245. package/bundle/docs/content/services/encode.md +63 -0
  246. package/bundle/docs/content/services/encrypt.md +53 -0
  247. package/bundle/docs/content/services/fetcher.md +122 -0
  248. package/bundle/docs/content/services/fft.md +96 -0
  249. package/bundle/docs/content/services/file-source.md +67 -0
  250. package/bundle/docs/content/services/filesystem.md +157 -0
  251. package/bundle/docs/content/services/filter.md +133 -0
  252. package/bundle/docs/content/services/flat-map.md +62 -0
  253. package/bundle/docs/content/services/game-of-life.md +93 -0
  254. package/bundle/docs/content/services/gather.md +135 -0
  255. package/bundle/docs/content/services/gif-encoder.md +56 -0
  256. package/bundle/docs/content/services/github.md +85 -0
  257. package/bundle/docs/content/services/group-by.md +54 -0
  258. package/bundle/docs/content/services/hacker.md +79 -0
  259. package/bundle/docs/content/services/hash.md +59 -0
  260. package/bundle/docs/content/services/hold.md +182 -0
  261. package/bundle/docs/content/services/http-relay-client.md +48 -0
  262. package/bundle/docs/content/services/http-uploader.md +62 -0
  263. package/bundle/docs/content/services/http.md +424 -0
  264. package/bundle/docs/content/services/if.md +79 -0
  265. package/bundle/docs/content/services/ifft.md +46 -0
  266. package/bundle/docs/content/services/image-picker.md +50 -0
  267. package/bundle/docs/content/services/imap-email.md +104 -0
  268. package/bundle/docs/content/services/injector.md +129 -0
  269. package/bundle/docs/content/services/input.md +90 -0
  270. package/bundle/docs/content/services/iterator.md +186 -0
  271. package/bundle/docs/content/services/join.md +153 -0
  272. package/bundle/docs/content/services/limit.md +47 -0
  273. package/bundle/docs/content/services/local-storage.md +47 -0
  274. package/bundle/docs/content/services/looper.md +62 -0
  275. package/bundle/docs/content/services/lz-compress.md +52 -0
  276. package/bundle/docs/content/services/map.md +257 -0
  277. package/bundle/docs/content/services/match-filter.md +38 -0
  278. package/bundle/docs/content/services/microphone-monitor.md +66 -0
  279. package/bundle/docs/content/services/monitor.md +67 -0
  280. package/bundle/docs/content/services/ollama.md +116 -0
  281. package/bundle/docs/content/services/openai-prompt.md +74 -0
  282. package/bundle/docs/content/services/output.md +107 -0
  283. package/bundle/docs/content/services/peer-socket.md +61 -0
  284. package/bundle/docs/content/services/qr-code.md +48 -0
  285. package/bundle/docs/content/services/queue.md +201 -0
  286. package/bundle/docs/content/services/reduce.md +51 -0
  287. package/bundle/docs/content/services/rss.md +232 -0
  288. package/bundle/docs/content/services/select.md +47 -0
  289. package/bundle/docs/content/services/sign.md +53 -0
  290. package/bundle/docs/content/services/skill-router.md +154 -0
  291. package/bundle/docs/content/services/smooth.md +59 -0
  292. package/bundle/docs/content/services/smtp-email.md +129 -0
  293. package/bundle/docs/content/services/sort.md +48 -0
  294. package/bundle/docs/content/services/sound.md +87 -0
  295. package/bundle/docs/content/services/speech-synth.md +46 -0
  296. package/bundle/docs/content/services/speech-to-text.md +172 -0
  297. package/bundle/docs/content/services/spotify.md +77 -0
  298. package/bundle/docs/content/services/spread.md +111 -0
  299. package/bundle/docs/content/services/sql.md +491 -0
  300. package/bundle/docs/content/services/state.md +57 -0
  301. package/bundle/docs/content/services/static.md +47 -0
  302. package/bundle/docs/content/services/stopper.md +55 -0
  303. package/bundle/docs/content/services/storage.md +155 -0
  304. package/bundle/docs/content/services/store.md +255 -0
  305. package/bundle/docs/content/services/sub-service.md +152 -0
  306. package/bundle/docs/content/services/switch.md +67 -0
  307. package/bundle/docs/content/services/telegram-listener.md +76 -0
  308. package/bundle/docs/content/services/text-generation.md +390 -0
  309. package/bundle/docs/content/services/text-to-speech.md +130 -0
  310. package/bundle/docs/content/services/timeline.md +333 -0
  311. package/bundle/docs/content/services/timer.md +113 -0
  312. package/bundle/docs/content/services/tracks.md +207 -0
  313. package/bundle/docs/content/services/trigger-pad.md +68 -0
  314. package/bundle/docs/content/services/uuid-generator.md +48 -0
  315. package/bundle/docs/content/services/wav-reader.md +66 -0
  316. package/bundle/docs/content/services/websocket.md +189 -0
  317. package/bundle/docs/content/services/workflow-board-builder.md +65 -0
  318. package/bundle/docs/content/services/xy-pad.md +60 -0
  319. package/bundle/docs/content/targets.md +434 -0
  320. package/bundle/docs/content/testing.md +263 -0
  321. package/bundle/docs/content/vocabulary.md +171 -0
  322. package/bundle/hkp-frontend/src/runtime/browser/BrowserRegistry.tsx +141 -0
  323. package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntime.tsx +202 -0
  324. package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntimeApi.ts +306 -0
  325. package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntimeApp.ts +310 -0
  326. package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntimeScope.ts +500 -0
  327. package/bundle/hkp-frontend/src/runtime/browser/UIRegistry.ts +150 -0
  328. package/bundle/hkp-frontend/src/runtime/browser/assetResolver.ts +123 -0
  329. package/bundle/hkp-frontend/src/runtime/browser/pipelineNames.ts +65 -0
  330. package/bundle/hkp-frontend/src/runtime/browser/registry/Default.ts +237 -0
  331. package/bundle/hkp-frontend/src/runtime/browser/services/Aggregator.ts +127 -0
  332. package/bundle/hkp-frontend/src/runtime/browser/services/AggregatorUI.tsx +83 -0
  333. package/bundle/hkp-frontend/src/runtime/browser/services/Analyzer.tsx +43 -0
  334. package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/Bars.tsx +33 -0
  335. package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/HorizontalSpectrogram.tsx +53 -0
  336. package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/VerticalSpectogram.tsx +56 -0
  337. package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/Waveform.tsx +109 -0
  338. package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/index.tsx +99 -0
  339. package/bundle/hkp-frontend/src/runtime/browser/services/AsciiArt.ts +119 -0
  340. package/bundle/hkp-frontend/src/runtime/browser/services/AsciiArtUI.tsx +131 -0
  341. package/bundle/hkp-frontend/src/runtime/browser/services/Asset.ts +125 -0
  342. package/bundle/hkp-frontend/src/runtime/browser/services/AssetUI.tsx +37 -0
  343. package/bundle/hkp-frontend/src/runtime/browser/services/AudioDeviceSettings.tsx +56 -0
  344. package/bundle/hkp-frontend/src/runtime/browser/services/AudioEditor.ts +129 -0
  345. package/bundle/hkp-frontend/src/runtime/browser/services/AudioEditorUI.tsx +549 -0
  346. package/bundle/hkp-frontend/src/runtime/browser/services/AudioInput.ts +298 -0
  347. package/bundle/hkp-frontend/src/runtime/browser/services/AudioInputUI.tsx +257 -0
  348. package/bundle/hkp-frontend/src/runtime/browser/services/AudioOutput.ts +189 -0
  349. package/bundle/hkp-frontend/src/runtime/browser/services/AudioOutputUI.tsx +63 -0
  350. package/bundle/hkp-frontend/src/runtime/browser/services/Batcher.ts +11 -0
  351. package/bundle/hkp-frontend/src/runtime/browser/services/BoardService.tsx +86 -0
  352. package/bundle/hkp-frontend/src/runtime/browser/services/BoardServiceUI.tsx +410 -0
  353. package/bundle/hkp-frontend/src/runtime/browser/services/BrowserGather.ts +311 -0
  354. package/bundle/hkp-frontend/src/runtime/browser/services/BrowserIterator.ts +167 -0
  355. package/bundle/hkp-frontend/src/runtime/browser/services/BrowserSubService.tsx +583 -0
  356. package/bundle/hkp-frontend/src/runtime/browser/services/BrowserSubServiceUI.tsx +187 -0
  357. package/bundle/hkp-frontend/src/runtime/browser/services/BrowserTracks.tsx +477 -0
  358. package/bundle/hkp-frontend/src/runtime/browser/services/Buffer.ts +11 -0
  359. package/bundle/hkp-frontend/src/runtime/browser/services/Cache.ts +134 -0
  360. package/bundle/hkp-frontend/src/runtime/browser/services/CacheUI.tsx +125 -0
  361. package/bundle/hkp-frontend/src/runtime/browser/services/Camera.ts +90 -0
  362. package/bundle/hkp-frontend/src/runtime/browser/services/CameraUI.tsx +321 -0
  363. package/bundle/hkp-frontend/src/runtime/browser/services/Canvas.ts +139 -0
  364. package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/canvasDraw.ts +543 -0
  365. package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/canvasUtils.ts +39 -0
  366. package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/index.tsx +287 -0
  367. package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/tests/canvasDraw.test.ts +355 -0
  368. package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/tests/canvasUtils.test.ts +89 -0
  369. package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/tests/fullscreen.test.tsx +26 -0
  370. package/bundle/hkp-frontend/src/runtime/browser/services/Changes.ts +201 -0
  371. package/bundle/hkp-frontend/src/runtime/browser/services/ChangesUI.tsx +85 -0
  372. package/bundle/hkp-frontend/src/runtime/browser/services/ChunkedFileProvider.tsx +183 -0
  373. package/bundle/hkp-frontend/src/runtime/browser/services/Configurator.ts +258 -0
  374. package/bundle/hkp-frontend/src/runtime/browser/services/ConfiguratorUI.tsx +83 -0
  375. package/bundle/hkp-frontend/src/runtime/browser/services/ConsideredHacker.tsx +28 -0
  376. package/bundle/hkp-frontend/src/runtime/browser/services/Debounce.ts +75 -0
  377. package/bundle/hkp-frontend/src/runtime/browser/services/DebounceUI.tsx +70 -0
  378. package/bundle/hkp-frontend/src/runtime/browser/services/Decrypt.ts +127 -0
  379. package/bundle/hkp-frontend/src/runtime/browser/services/DecryptUI.tsx +39 -0
  380. package/bundle/hkp-frontend/src/runtime/browser/services/Delay.tsx +110 -0
  381. package/bundle/hkp-frontend/src/runtime/browser/services/Detect.ts +214 -0
  382. package/bundle/hkp-frontend/src/runtime/browser/services/DetectUI.tsx +86 -0
  383. package/bundle/hkp-frontend/src/runtime/browser/services/Download.ts +120 -0
  384. package/bundle/hkp-frontend/src/runtime/browser/services/DownloadUI.tsx +61 -0
  385. package/bundle/hkp-frontend/src/runtime/browser/services/Encode.ts +138 -0
  386. package/bundle/hkp-frontend/src/runtime/browser/services/EncodeUI.tsx +52 -0
  387. package/bundle/hkp-frontend/src/runtime/browser/services/Encrypt.ts +125 -0
  388. package/bundle/hkp-frontend/src/runtime/browser/services/EncryptUI.tsx +39 -0
  389. package/bundle/hkp-frontend/src/runtime/browser/services/FFT.tsx +238 -0
  390. package/bundle/hkp-frontend/src/runtime/browser/services/FFTUI.tsx +112 -0
  391. package/bundle/hkp-frontend/src/runtime/browser/services/FeedbackService.ts +247 -0
  392. package/bundle/hkp-frontend/src/runtime/browser/services/FeedbackServiceUI.tsx +35 -0
  393. package/bundle/hkp-frontend/src/runtime/browser/services/Fetcher.tsx +232 -0
  394. package/bundle/hkp-frontend/src/runtime/browser/services/FetcherUI.tsx +154 -0
  395. package/bundle/hkp-frontend/src/runtime/browser/services/FileSource.tsx +171 -0
  396. package/bundle/hkp-frontend/src/runtime/browser/services/Filter.tsx +18 -0
  397. package/bundle/hkp-frontend/src/runtime/browser/services/FilterUI.tsx +89 -0
  398. package/bundle/hkp-frontend/src/runtime/browser/services/FlatMap.ts +68 -0
  399. package/bundle/hkp-frontend/src/runtime/browser/services/FlatMapUI.tsx +38 -0
  400. package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLife.ts +210 -0
  401. package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLifeRenderer.ts +182 -0
  402. package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLifeRendererUI.tsx +48 -0
  403. package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLifeUI.tsx +58 -0
  404. package/bundle/hkp-frontend/src/runtime/browser/services/GatherUI.tsx +84 -0
  405. package/bundle/hkp-frontend/src/runtime/browser/services/GifEncoder.tsx +651 -0
  406. package/bundle/hkp-frontend/src/runtime/browser/services/GithubAPI.ts +294 -0
  407. package/bundle/hkp-frontend/src/runtime/browser/services/GithubComponents.tsx +389 -0
  408. package/bundle/hkp-frontend/src/runtime/browser/services/GithubSink.tsx +109 -0
  409. package/bundle/hkp-frontend/src/runtime/browser/services/GithubSinkUI.tsx +143 -0
  410. package/bundle/hkp-frontend/src/runtime/browser/services/GithubSource.tsx +86 -0
  411. package/bundle/hkp-frontend/src/runtime/browser/services/GithubSourceUI.tsx +162 -0
  412. package/bundle/hkp-frontend/src/runtime/browser/services/GroupBy.ts +11 -0
  413. package/bundle/hkp-frontend/src/runtime/browser/services/HTTPUploader.ts +102 -0
  414. package/bundle/hkp-frontend/src/runtime/browser/services/Hacker.ts +73 -0
  415. package/bundle/hkp-frontend/src/runtime/browser/services/HackerUI.tsx +134 -0
  416. package/bundle/hkp-frontend/src/runtime/browser/services/Hash.ts +134 -0
  417. package/bundle/hkp-frontend/src/runtime/browser/services/HashUI.tsx +45 -0
  418. package/bundle/hkp-frontend/src/runtime/browser/services/Hold.ts +288 -0
  419. package/bundle/hkp-frontend/src/runtime/browser/services/HoldUI.tsx +43 -0
  420. package/bundle/hkp-frontend/src/runtime/browser/services/HttpClient.ts +558 -0
  421. package/bundle/hkp-frontend/src/runtime/browser/services/HttpClientUI.tsx +212 -0
  422. package/bundle/hkp-frontend/src/runtime/browser/services/HttpUploaderTokenInjector.ts +149 -0
  423. package/bundle/hkp-frontend/src/runtime/browser/services/IfService.ts +231 -0
  424. package/bundle/hkp-frontend/src/runtime/browser/services/IfServiceUI.tsx +50 -0
  425. package/bundle/hkp-frontend/src/runtime/browser/services/ImagePicker.tsx +118 -0
  426. package/bundle/hkp-frontend/src/runtime/browser/services/Injector.ts +61 -0
  427. package/bundle/hkp-frontend/src/runtime/browser/services/InjectorUI.tsx +389 -0
  428. package/bundle/hkp-frontend/src/runtime/browser/services/Input.ts +214 -0
  429. package/bundle/hkp-frontend/src/runtime/browser/services/InputUI.tsx +71 -0
  430. package/bundle/hkp-frontend/src/runtime/browser/services/IteratorUI.tsx +59 -0
  431. package/bundle/hkp-frontend/src/runtime/browser/services/LZCompress.ts +63 -0
  432. package/bundle/hkp-frontend/src/runtime/browser/services/Limit.ts +39 -0
  433. package/bundle/hkp-frontend/src/runtime/browser/services/LimitUI.tsx +41 -0
  434. package/bundle/hkp-frontend/src/runtime/browser/services/LocalStorage.ts +65 -0
  435. package/bundle/hkp-frontend/src/runtime/browser/services/LocalStorageUI.tsx +72 -0
  436. package/bundle/hkp-frontend/src/runtime/browser/services/Map.ts +14 -0
  437. package/bundle/hkp-frontend/src/runtime/browser/services/MapUI.tsx +334 -0
  438. package/bundle/hkp-frontend/src/runtime/browser/services/MapUIModeAssist.tsx +61 -0
  439. package/bundle/hkp-frontend/src/runtime/browser/services/MatchFilter.ts +11 -0
  440. package/bundle/hkp-frontend/src/runtime/browser/services/MicrophoneMonitor.ts +190 -0
  441. package/bundle/hkp-frontend/src/runtime/browser/services/MicrophoneMonitorUI.tsx +94 -0
  442. package/bundle/hkp-frontend/src/runtime/browser/services/Monitor.tsx +15 -0
  443. package/bundle/hkp-frontend/src/runtime/browser/services/MonitorUI.tsx +281 -0
  444. package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPrompt.ts +237 -0
  445. package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/BusyIndicator.tsx +18 -0
  446. package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/PromptInput.tsx +71 -0
  447. package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/StreamingPreview.tsx +24 -0
  448. package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/index.tsx +156 -0
  449. package/bundle/hkp-frontend/src/runtime/browser/services/OpenAIPrompt.ts +254 -0
  450. package/bundle/hkp-frontend/src/runtime/browser/services/OpenAIPromptUI.tsx +189 -0
  451. package/bundle/hkp-frontend/src/runtime/browser/services/Output.tsx +145 -0
  452. package/bundle/hkp-frontend/src/runtime/browser/services/OutputUI.tsx +118 -0
  453. package/bundle/hkp-frontend/src/runtime/browser/services/PeerChatTemplate.json +43 -0
  454. package/bundle/hkp-frontend/src/runtime/browser/services/PeerConnection.ts +260 -0
  455. package/bundle/hkp-frontend/src/runtime/browser/services/PeerSocket.tsx +268 -0
  456. package/bundle/hkp-frontend/src/runtime/browser/services/PeerSocketReceiverTemplate.json +29 -0
  457. package/bundle/hkp-frontend/src/runtime/browser/services/PeerSocketUI.tsx +341 -0
  458. package/bundle/hkp-frontend/src/runtime/browser/services/PlaceholderUI.tsx +72 -0
  459. package/bundle/hkp-frontend/src/runtime/browser/services/QrCode.ts +63 -0
  460. package/bundle/hkp-frontend/src/runtime/browser/services/QrCodeUI.tsx +197 -0
  461. package/bundle/hkp-frontend/src/runtime/browser/services/Select.ts +40 -0
  462. package/bundle/hkp-frontend/src/runtime/browser/services/SelectUI.tsx +41 -0
  463. package/bundle/hkp-frontend/src/runtime/browser/services/ServiceBase.ts +50 -0
  464. package/bundle/hkp-frontend/src/runtime/browser/services/SetRuntimeVariable.ts +65 -0
  465. package/bundle/hkp-frontend/src/runtime/browser/services/SetRuntimeVariableUI.tsx +50 -0
  466. package/bundle/hkp-frontend/src/runtime/browser/services/Sign.ts +182 -0
  467. package/bundle/hkp-frontend/src/runtime/browser/services/SignUI.tsx +55 -0
  468. package/bundle/hkp-frontend/src/runtime/browser/services/Smooth.ts +101 -0
  469. package/bundle/hkp-frontend/src/runtime/browser/services/SmoothUI.tsx +50 -0
  470. package/bundle/hkp-frontend/src/runtime/browser/services/Sort.ts +59 -0
  471. package/bundle/hkp-frontend/src/runtime/browser/services/SortUI.tsx +61 -0
  472. package/bundle/hkp-frontend/src/runtime/browser/services/Sound.ts +541 -0
  473. package/bundle/hkp-frontend/src/runtime/browser/services/SoundUI.tsx +183 -0
  474. package/bundle/hkp-frontend/src/runtime/browser/services/SpeechSynth.ts +56 -0
  475. package/bundle/hkp-frontend/src/runtime/browser/services/SpeechSynthUI.tsx +108 -0
  476. package/bundle/hkp-frontend/src/runtime/browser/services/Spotify.tsx +111 -0
  477. package/bundle/hkp-frontend/src/runtime/browser/services/SpotifyAPI.ts +113 -0
  478. package/bundle/hkp-frontend/src/runtime/browser/services/SpotifyComponents.tsx +104 -0
  479. package/bundle/hkp-frontend/src/runtime/browser/services/SpotifyUI.tsx +186 -0
  480. package/bundle/hkp-frontend/src/runtime/browser/services/Spread.ts +117 -0
  481. package/bundle/hkp-frontend/src/runtime/browser/services/SpreadUI.tsx +38 -0
  482. package/bundle/hkp-frontend/src/runtime/browser/services/Sql.ts +448 -0
  483. package/bundle/hkp-frontend/src/runtime/browser/services/SqlInspector.tsx +332 -0
  484. package/bundle/hkp-frontend/src/runtime/browser/services/SqlUI.tsx +226 -0
  485. package/bundle/hkp-frontend/src/runtime/browser/services/State.ts +149 -0
  486. package/bundle/hkp-frontend/src/runtime/browser/services/Stopper.ts +29 -0
  487. package/bundle/hkp-frontend/src/runtime/browser/services/Switch.tsx +419 -0
  488. package/bundle/hkp-frontend/src/runtime/browser/services/SwitchUI.tsx +171 -0
  489. package/bundle/hkp-frontend/src/runtime/browser/services/TickRuleDelta.ts +101 -0
  490. package/bundle/hkp-frontend/src/runtime/browser/services/TickRuleDeltaUI.tsx +56 -0
  491. package/bundle/hkp-frontend/src/runtime/browser/services/Timeline.ts +709 -0
  492. package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/TimelinePanel.tsx +79 -0
  493. package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/TimelineRows.tsx +574 -0
  494. package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/Transport.tsx +141 -0
  495. package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/index.tsx +119 -0
  496. package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/model.ts +425 -0
  497. package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/parts.tsx +708 -0
  498. package/bundle/hkp-frontend/src/runtime/browser/services/Timer.ts +15 -0
  499. package/bundle/hkp-frontend/src/runtime/browser/services/TimerUI.tsx +213 -0
  500. package/bundle/hkp-frontend/src/runtime/browser/services/TracksUI.tsx +81 -0
  501. package/bundle/hkp-frontend/src/runtime/browser/services/TriggerPad.ts +108 -0
  502. package/bundle/hkp-frontend/src/runtime/browser/services/TriggerPadUI.tsx +160 -0
  503. package/bundle/hkp-frontend/src/runtime/browser/services/UuidGenerator.ts +74 -0
  504. package/bundle/hkp-frontend/src/runtime/browser/services/UuidGeneratorUI.tsx +59 -0
  505. package/bundle/hkp-frontend/src/runtime/browser/services/WaveformDisplay.tsx +104 -0
  506. package/bundle/hkp-frontend/src/runtime/browser/services/WebsocketClient.ts +114 -0
  507. package/bundle/hkp-frontend/src/runtime/browser/services/WebsocketClientUI.tsx +42 -0
  508. package/bundle/hkp-frontend/src/runtime/browser/services/WorkflowBoardBuilder.ts +499 -0
  509. package/bundle/hkp-frontend/src/runtime/browser/services/WorkflowBoardBuilderUI.tsx +521 -0
  510. package/bundle/hkp-frontend/src/runtime/browser/services/XYPad.ts +68 -0
  511. package/bundle/hkp-frontend/src/runtime/browser/services/XYPadUI.tsx +274 -0
  512. package/bundle/hkp-frontend/src/runtime/browser/services/audio/audioHelper.ts +36 -0
  513. package/bundle/hkp-frontend/src/runtime/browser/services/base/Batcher.ts +76 -0
  514. package/bundle/hkp-frontend/src/runtime/browser/services/base/Buffer.ts +142 -0
  515. package/bundle/hkp-frontend/src/runtime/browser/services/base/Filter.ts +125 -0
  516. package/bundle/hkp-frontend/src/runtime/browser/services/base/GroupBy.ts +101 -0
  517. package/bundle/hkp-frontend/src/runtime/browser/services/base/Map.ts +543 -0
  518. package/bundle/hkp-frontend/src/runtime/browser/services/base/MatchFilter.ts +49 -0
  519. package/bundle/hkp-frontend/src/runtime/browser/services/base/Monitor.ts +75 -0
  520. package/bundle/hkp-frontend/src/runtime/browser/services/base/Reduce.ts +74 -0
  521. package/bundle/hkp-frontend/src/runtime/browser/services/base/Timer.ts +342 -0
  522. package/bundle/hkp-frontend/src/runtime/browser/services/base/bundle.js +7375 -0
  523. package/bundle/hkp-frontend/src/runtime/browser/services/base/eval.ts +208 -0
  524. package/bundle/hkp-frontend/src/runtime/browser/services/base/expressionEval.ts +223 -0
  525. package/bundle/hkp-frontend/src/runtime/browser/services/base/helpers.ts +10 -0
  526. package/bundle/hkp-frontend/src/runtime/browser/services/base/index.ts +37 -0
  527. package/bundle/hkp-frontend/src/runtime/browser/services/camera/videoCapture.ts +78 -0
  528. package/bundle/hkp-frontend/src/runtime/browser/services/changes-modes.ts +9 -0
  529. package/bundle/hkp-frontend/src/runtime/browser/services/colorpalette.ts +26 -0
  530. package/bundle/hkp-frontend/src/runtime/browser/services/detect/DetectionPreview.tsx +76 -0
  531. package/bundle/hkp-frontend/src/runtime/browser/services/detect/mediapipe.ts +34 -0
  532. package/bundle/hkp-frontend/src/runtime/browser/services/detect/models/README.md +14 -0
  533. package/bundle/hkp-frontend/src/runtime/browser/services/detect/models/blaze_face_short_range.tflite +0 -0
  534. package/bundle/hkp-frontend/src/runtime/browser/services/detect-modes.ts +7 -0
  535. package/bundle/hkp-frontend/src/runtime/browser/services/encode-modes.ts +10 -0
  536. package/bundle/hkp-frontend/src/runtime/browser/services/helpers.ts +300 -0
  537. package/bundle/hkp-frontend/src/runtime/browser/services/http-client-methods.ts +10 -0
  538. package/bundle/hkp-frontend/src/runtime/browser/services/sql-database.ts +594 -0
  539. package/bundle/hkp-frontend/src/runtime/browser/services/sql-dump.ts +192 -0
  540. package/bundle/hkp-frontend/src/runtime/browser/services/sql-inspect.ts +130 -0
  541. package/bundle/hkp-frontend/src/runtime/browser/services/sql-inspector.css +155 -0
  542. package/bundle/hkp-frontend/src/runtime/browser/services/sql-modes.ts +27 -0
  543. package/bundle/hkp-frontend/src/runtime/browser/services/tests/TESTING_APPROACH.md +169 -0
  544. package/bundle/hkp-frontend/src/runtime/browser/services/tests/__snapshots__/service-ui.future-enhancements.test.tsx.snap +5 -0
  545. package/bundle/hkp-frontend/src/runtime/browser/services/tests/audio-input-permissions.test.ts +42 -0
  546. package/bundle/hkp-frontend/src/runtime/browser/services/tests/audiolizeLanes.test.ts +70 -0
  547. package/bundle/hkp-frontend/src/runtime/browser/services/tests/browser-scopes.test.ts +305 -0
  548. package/bundle/hkp-frontend/src/runtime/browser/services/tests/cache-service.test.ts +53 -0
  549. package/bundle/hkp-frontend/src/runtime/browser/services/tests/camera-video-capture.test.ts +24 -0
  550. package/bundle/hkp-frontend/src/runtime/browser/services/tests/changes-service.test.ts +133 -0
  551. package/bundle/hkp-frontend/src/runtime/browser/services/tests/crypto-secrets.test.ts +196 -0
  552. package/bundle/hkp-frontend/src/runtime/browser/services/tests/detect-service.test.ts +119 -0
  553. package/bundle/hkp-frontend/src/runtime/browser/services/tests/download.test.ts +100 -0
  554. package/bundle/hkp-frontend/src/runtime/browser/services/tests/expressionEval.test.ts +117 -0
  555. package/bundle/hkp-frontend/src/runtime/browser/services/tests/fetcher-panel.test.tsx +35 -0
  556. package/bundle/hkp-frontend/src/runtime/browser/services/tests/fetcher-service.test.ts +80 -0
  557. package/bundle/hkp-frontend/src/runtime/browser/services/tests/filter-service.test.ts +37 -0
  558. package/bundle/hkp-frontend/src/runtime/browser/services/tests/github-secrets.test.ts +108 -0
  559. package/bundle/hkp-frontend/src/runtime/browser/services/tests/group-by-board.test.ts +42 -0
  560. package/bundle/hkp-frontend/src/runtime/browser/services/tests/hold-service.test.ts +199 -0
  561. package/bundle/hkp-frontend/src/runtime/browser/services/tests/http-client-service.test.ts +474 -0
  562. package/bundle/hkp-frontend/src/runtime/browser/services/tests/http-uploader-token-injector.test.ts +152 -0
  563. package/bundle/hkp-frontend/src/runtime/browser/services/tests/iterator-gather-service.test.ts +277 -0
  564. package/bundle/hkp-frontend/src/runtime/browser/services/tests/map-service.test.ts +1047 -0
  565. package/bundle/hkp-frontend/src/runtime/browser/services/tests/map-ui.test.tsx +70 -0
  566. package/bundle/hkp-frontend/src/runtime/browser/services/tests/nested-rhythm-board.test.ts +311 -0
  567. package/bundle/hkp-frontend/src/runtime/browser/services/tests/night-groove-board.test.ts +290 -0
  568. package/bundle/hkp-frontend/src/runtime/browser/services/tests/pad-groove-board.test.ts +230 -0
  569. package/bundle/hkp-frontend/src/runtime/browser/services/tests/peer-host-discovery.test.ts +77 -0
  570. package/bundle/hkp-frontend/src/runtime/browser/services/tests/peer-socket-discovery.test.ts +69 -0
  571. package/bundle/hkp-frontend/src/runtime/browser/services/tests/pipeline-names.test.ts +63 -0
  572. package/bundle/hkp-frontend/src/runtime/browser/services/tests/secret-canary.test.ts +121 -0
  573. package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-modules.contract.test.ts +229 -0
  574. package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.advanced.test.tsx +670 -0
  575. package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.future-enhancements.test.tsx +219 -0
  576. package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.integration.test.tsx +432 -0
  577. package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.smoke.test.tsx +140 -0
  578. package/bundle/hkp-frontend/src/runtime/browser/services/tests/sound-service.test.ts +293 -0
  579. package/bundle/hkp-frontend/src/runtime/browser/services/tests/spread-service.test.ts +137 -0
  580. package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql-dump.test.ts +172 -0
  581. package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql-inspect.test.ts +163 -0
  582. package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql-inspector.test.tsx +121 -0
  583. package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql.test.ts +702 -0
  584. package/bundle/hkp-frontend/src/runtime/browser/services/tests/sub-service-in-block.test.tsx +84 -0
  585. package/bundle/hkp-frontend/src/runtime/browser/services/tests/switch-service.test.ts +254 -0
  586. package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-board.test.ts +218 -0
  587. package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-service.test.ts +1002 -0
  588. package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-ui-model.test.ts +230 -0
  589. package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-ui.test.tsx +371 -0
  590. package/bundle/hkp-frontend/src/runtime/browser/services/tests/timer-service.test.ts +902 -0
  591. package/bundle/hkp-frontend/src/runtime/browser/services/tests/tracks-service.test.ts +275 -0
  592. package/bundle/hkp-frontend/src/runtime/browser/services/tests/tracks-ui.test.tsx +126 -0
  593. package/bundle/hkp-frontend/src/runtime/browser/services/tests/triggerpad-recorder-board.test.ts +100 -0
  594. package/bundle/hkp-frontend/src/runtime/browser/services/tests/uuid-generator-service.test.ts +214 -0
  595. package/bundle/hkp-frontend/src/runtime/browser/services/timeline-core.ts +410 -0
  596. package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/DefaultWorkflowBoard.ts +90 -0
  597. package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/RefinementSession.ts +121 -0
  598. package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/SystemPromptCatalog.ts +245 -0
  599. package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/catalog/browser-service-specs.json +110 -0
  600. package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/catalog/runtime-capabilities.json +37 -0
  601. package/bundle/hkp-frontend/src/runtime/browser/tests/asset-service.test.ts +73 -0
  602. package/bundle/hkp-frontend/src/runtime/browser/tests/board-persistence.integration.test.tsx +391 -0
  603. package/bundle/hkp-frontend/src/runtime/browser/tests/browser-runtime.identity-binding.test.tsx +81 -0
  604. package/bundle/hkp-frontend/src/runtime/browser/tests/demo-boards.regression.test.tsx +386 -0
  605. package/bundle/hkp-frontend/src/runtime/browser/tests/failed-call-lifecycle.test.ts +56 -0
  606. package/bundle/hkp-frontend/src/runtime/browser/tests/http-client.integration.test.ts +146 -0
  607. package/bundle/hkp-frontend/src/runtime/browser/tests/nested-run.integration.test.ts +415 -0
  608. package/bundle/hkp-frontend/src/runtime/browser/tests/replay-next.test.ts +391 -0
  609. package/bundle/hkp-frontend/src/runtime/browser/tests/rerun.test.ts +71 -0
  610. package/bundle/hkp-frontend/src/runtime/browser/tests/run-no-input.test.ts +72 -0
  611. package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-add.integration.test.tsx +256 -0
  612. package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-operations.integration.test.tsx +310 -0
  613. package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-processing.integration.test.ts +311 -0
  614. package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-removal.integration.test.tsx +454 -0
  615. package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-update.identity.integration.test.tsx +145 -0
  616. package/bundle/hkp-frontend/src/runtime/browser/tests/service-operations.integration.test.tsx +511 -0
  617. package/bundle/hkp-node/src/address.ts +72 -0
  618. package/bundle/hkp-node/src/assets.ts +582 -0
  619. package/bundle/hkp-node/src/auth.ts +369 -0
  620. package/bundle/hkp-node/src/callReport.ts +281 -0
  621. package/bundle/hkp-node/src/coordinator/auth.ts +85 -0
  622. package/bundle/hkp-node/src/coordinator/binaryFrame.ts +189 -0
  623. package/bundle/hkp-node/src/coordinator/boardStore.ts +0 -0
  624. package/bundle/hkp-node/src/coordinator/bridge.ts +242 -0
  625. package/bundle/hkp-node/src/coordinator/bridgeProtocol.ts +200 -0
  626. package/bundle/hkp-node/src/coordinator/coordinator.ts +594 -0
  627. package/bundle/hkp-node/src/coordinator/facadeAccess.ts +426 -0
  628. package/bundle/hkp-node/src/coordinator/fileBoardStore.ts +159 -0
  629. package/bundle/hkp-node/src/coordinator/frameLimits.ts +41 -0
  630. package/bundle/hkp-node/src/coordinator/index.ts +12 -0
  631. package/bundle/hkp-node/src/coordinator/join.ts +62 -0
  632. package/bundle/hkp-node/src/coordinator/logStore.ts +335 -0
  633. package/bundle/hkp-node/src/coordinator/members.ts +133 -0
  634. package/bundle/hkp-node/src/coordinator/mount.ts +124 -0
  635. package/bundle/hkp-node/src/coordinator/participantProtocol.ts +169 -0
  636. package/bundle/hkp-node/src/coordinator/participants.ts +666 -0
  637. package/bundle/hkp-node/src/coordinator/router.ts +416 -0
  638. package/bundle/hkp-node/src/coordinator/session.ts +1610 -0
  639. package/bundle/hkp-node/src/coordinator/types.ts +95 -0
  640. package/bundle/hkp-node/src/coordinatorLinks.ts +712 -0
  641. package/bundle/hkp-node/src/credentialedFetch.ts +122 -0
  642. package/bundle/hkp-node/src/egress.ts +344 -0
  643. package/bundle/hkp-node/src/expressionEval.ts +223 -0
  644. package/bundle/hkp-node/src/index.ts +470 -0
  645. package/bundle/hkp-node/src/instance.ts +172 -0
  646. package/bundle/hkp-node/src/mounts.ts +296 -0
  647. package/bundle/hkp-node/src/origins.ts +201 -0
  648. package/bundle/hkp-node/src/reset.ts +187 -0
  649. package/bundle/hkp-node/src/runtime.ts +1345 -0
  650. package/bundle/hkp-node/src/secrets.ts +292 -0
  651. package/bundle/hkp-node/src/server.ts +2120 -0
  652. package/bundle/hkp-node/src/services/asset.ts +150 -0
  653. package/bundle/hkp-node/src/services/claudeModels.ts +370 -0
  654. package/bundle/hkp-node/src/services/communication-dispatcher.ts +735 -0
  655. package/bundle/hkp-node/src/services/conversations.ts +914 -0
  656. package/bundle/hkp-node/src/services/database.ts +386 -0
  657. package/bundle/hkp-node/src/services/document-extract.ts +575 -0
  658. package/bundle/hkp-node/src/services/expression.ts +417 -0
  659. package/bundle/hkp-node/src/services/fileStore.ts +369 -0
  660. package/bundle/hkp-node/src/services/filesystem.ts +280 -0
  661. package/bundle/hkp-node/src/services/gather.ts +335 -0
  662. package/bundle/hkp-node/src/services/hold.ts +275 -0
  663. package/bundle/hkp-node/src/services/http-client.ts +525 -0
  664. package/bundle/hkp-node/src/services/http-server.ts +1222 -0
  665. package/bundle/hkp-node/src/services/imap-email.ts +627 -0
  666. package/bundle/hkp-node/src/services/injector.ts +135 -0
  667. package/bundle/hkp-node/src/services/iterator.ts +203 -0
  668. package/bundle/hkp-node/src/services/join.ts +226 -0
  669. package/bundle/hkp-node/src/services/map.ts +632 -0
  670. package/bundle/hkp-node/src/services/monitor.ts +128 -0
  671. package/bundle/hkp-node/src/services/nested-pipeline.ts +405 -0
  672. package/bundle/hkp-node/src/services/peer-server.ts +268 -0
  673. package/bundle/hkp-node/src/services/queue-store.ts +301 -0
  674. package/bundle/hkp-node/src/services/queue.ts +316 -0
  675. package/bundle/hkp-node/src/services/recordStore.ts +341 -0
  676. package/bundle/hkp-node/src/services/rss-parse.ts +281 -0
  677. package/bundle/hkp-node/src/services/rss.ts +392 -0
  678. package/bundle/hkp-node/src/services/smtp-email.ts +398 -0
  679. package/bundle/hkp-node/src/services/spread.ts +153 -0
  680. package/bundle/hkp-node/src/services/sql-dump.ts +192 -0
  681. package/bundle/hkp-node/src/services/sql.ts +429 -0
  682. package/bundle/hkp-node/src/services/stopper.ts +69 -0
  683. package/bundle/hkp-node/src/services/storage.ts +332 -0
  684. package/bundle/hkp-node/src/services/store.ts +609 -0
  685. package/bundle/hkp-node/src/services/stream.ts +367 -0
  686. package/bundle/hkp-node/src/services/sub-service.ts +600 -0
  687. package/bundle/hkp-node/src/services/telegram-listener.ts +263 -0
  688. package/bundle/hkp-node/src/services/telegram-sender.ts +136 -0
  689. package/bundle/hkp-node/src/services/text-generation.ts +1249 -0
  690. package/bundle/hkp-node/src/services/timer.ts +273 -0
  691. package/bundle/hkp-node/src/services/tracks.ts +381 -0
  692. package/bundle/hkp-node/src/services/websocket-reader.ts +364 -0
  693. package/bundle/hkp-node/src/types.ts +465 -0
  694. package/bundle/hkp-node/src/wsTickets.ts +77 -0
  695. package/bundle/hkp-node/src/yas.ts +95 -0
  696. package/bundle/hkp-python/src/hkp/__init__.py +1 -0
  697. package/bundle/hkp-python/src/hkp/__main__.py +241 -0
  698. package/bundle/hkp-python/src/hkp/address.py +56 -0
  699. package/bundle/hkp-python/src/hkp/assets.py +439 -0
  700. package/bundle/hkp-python/src/hkp/auth.py +252 -0
  701. package/bundle/hkp-python/src/hkp/binary_frame.py +100 -0
  702. package/bundle/hkp-python/src/hkp/call_report.py +201 -0
  703. package/bundle/hkp-python/src/hkp/coordinator_links.py +667 -0
  704. package/bundle/hkp-python/src/hkp/data.py +118 -0
  705. package/bundle/hkp-python/src/hkp/egress.py +310 -0
  706. package/bundle/hkp-python/src/hkp/mount.py +46 -0
  707. package/bundle/hkp-python/src/hkp/mounts.py +288 -0
  708. package/bundle/hkp-python/src/hkp/origins.py +169 -0
  709. package/bundle/hkp-python/src/hkp/runtime.py +1131 -0
  710. package/bundle/hkp-python/src/hkp/secrets.py +261 -0
  711. package/bundle/hkp-python/src/hkp/server.py +1714 -0
  712. package/bundle/hkp-python/src/hkp/services/__init__.py +0 -0
  713. package/bundle/hkp-python/src/hkp/services/asset.py +123 -0
  714. package/bundle/hkp-python/src/hkp/services/audio_encode.py +190 -0
  715. package/bundle/hkp-python/src/hkp/services/expression.py +942 -0
  716. package/bundle/hkp-python/src/hkp/services/gather.py +266 -0
  717. package/bundle/hkp-python/src/hkp/services/hold.py +246 -0
  718. package/bundle/hkp-python/src/hkp/services/http_client.py +444 -0
  719. package/bundle/hkp-python/src/hkp/services/http_server.py +790 -0
  720. package/bundle/hkp-python/src/hkp/services/iterator.py +141 -0
  721. package/bundle/hkp-python/src/hkp/services/join.py +173 -0
  722. package/bundle/hkp-python/src/hkp/services/map_service.py +452 -0
  723. package/bundle/hkp-python/src/hkp/services/monitor.py +99 -0
  724. package/bundle/hkp-python/src/hkp/services/nested_pipeline.py +278 -0
  725. package/bundle/hkp-python/src/hkp/services/skill_router.py +388 -0
  726. package/bundle/hkp-python/src/hkp/services/speech_to_text.py +186 -0
  727. package/bundle/hkp-python/src/hkp/services/spread.py +114 -0
  728. package/bundle/hkp-python/src/hkp/services/stopper.py +59 -0
  729. package/bundle/hkp-python/src/hkp/services/sub_service.py +417 -0
  730. package/bundle/hkp-python/src/hkp/services/text_generation.py +498 -0
  731. package/bundle/hkp-python/src/hkp/services/text_to_speech.py +237 -0
  732. package/bundle/hkp-python/src/hkp/services/timer.py +267 -0
  733. package/bundle/hkp-python/src/hkp/services/tracks.py +251 -0
  734. package/bundle/hkp-python/src/hkp/types.py +412 -0
  735. package/bundle/hkp-python/src/hkp/ws_tickets.py +54 -0
  736. package/bundle/hkp-python/src/hkp/yas.py +192 -0
  737. package/bundle/hkp-rt/lib/CMakeLists.txt +193 -0
  738. package/bundle/hkp-rt/lib/hkp-bundles/CMakeLists.txt +55 -0
  739. package/bundle/hkp-rt/lib/hkp-bundles/plugin_register.cpp +14 -0
  740. package/bundle/hkp-rt/lib/include/app.h +201 -0
  741. package/bundle/hkp-rt/lib/include/assets.h +239 -0
  742. package/bundle/hkp-rt/lib/include/auth.h +167 -0
  743. package/bundle/hkp-rt/lib/include/call_report.h +197 -0
  744. package/bundle/hkp-rt/lib/include/coordinator_links.h +127 -0
  745. package/bundle/hkp-rt/lib/include/discovery_hooks.h +29 -0
  746. package/bundle/hkp-rt/lib/include/egress.h +379 -0
  747. package/bundle/hkp-rt/lib/include/files.h +275 -0
  748. package/bundle/hkp-rt/lib/include/log_entry.h +131 -0
  749. package/bundle/hkp-rt/lib/include/mounts.h +139 -0
  750. package/bundle/hkp-rt/lib/include/origins.h +363 -0
  751. package/bundle/hkp-rt/lib/include/registry.h +119 -0
  752. package/bundle/hkp-rt/lib/include/secrets.h +414 -0
  753. package/bundle/hkp-rt/lib/include/server.h +122 -0
  754. package/bundle/hkp-rt/lib/include/service.h +190 -0
  755. package/bundle/hkp-rt/lib/include/slot_store.h +41 -0
  756. package/bundle/hkp-rt/lib/include/standalone_config.h +253 -0
  757. package/bundle/hkp-rt/lib/include/types/audio.h +3 -0
  758. package/bundle/hkp-rt/lib/include/types/data.h +152 -0
  759. package/bundle/hkp-rt/lib/include/types/message.h +56 -0
  760. package/bundle/hkp-rt/lib/include/types/models.h +154 -0
  761. package/bundle/hkp-rt/lib/include/types/owns_me.h +19 -0
  762. package/bundle/hkp-rt/lib/include/types/ringbuffer.h +86 -0
  763. package/bundle/hkp-rt/lib/include/types/types.h +33 -0
  764. package/bundle/hkp-rt/lib/include/types/validation.h +205 -0
  765. package/bundle/hkp-rt/lib/src/address.h +88 -0
  766. package/bundle/hkp-rt/lib/src/app.cpp +591 -0
  767. package/bundle/hkp-rt/lib/src/assets.cpp +686 -0
  768. package/bundle/hkp-rt/lib/src/binary_frame.h +154 -0
  769. package/bundle/hkp-rt/lib/src/common/expression.h +1481 -0
  770. package/bundle/hkp-rt/lib/src/common/inja.h +36 -0
  771. package/bundle/hkp-rt/lib/src/common/link_socket.cpp +437 -0
  772. package/bundle/hkp-rt/lib/src/common/link_socket.h +97 -0
  773. package/bundle/hkp-rt/lib/src/common/realtime_wakeup.h +120 -0
  774. package/bundle/hkp-rt/lib/src/common/stream_broadcast.h +250 -0
  775. package/bundle/hkp-rt/lib/src/common/string_util.h +31 -0
  776. package/bundle/hkp-rt/lib/src/common/websocket_client_session.cpp +217 -0
  777. package/bundle/hkp-rt/lib/src/common/websocket_client_session.h +37 -0
  778. package/bundle/hkp-rt/lib/src/common/websocket_config.h +119 -0
  779. package/bundle/hkp-rt/lib/src/common/websocket_protocol.h +32 -0
  780. package/bundle/hkp-rt/lib/src/common/websocket_server.cpp +82 -0
  781. package/bundle/hkp-rt/lib/src/common/websocket_server.h +57 -0
  782. package/bundle/hkp-rt/lib/src/common/websocket_server_listener.cpp +115 -0
  783. package/bundle/hkp-rt/lib/src/common/websocket_server_listener.h +35 -0
  784. package/bundle/hkp-rt/lib/src/common/websocket_server_session.cpp +172 -0
  785. package/bundle/hkp-rt/lib/src/common/websocket_server_session.h +53 -0
  786. package/bundle/hkp-rt/lib/src/common.h +13 -0
  787. package/bundle/hkp-rt/lib/src/coordinator_links.cpp +1142 -0
  788. package/bundle/hkp-rt/lib/src/discovery/discovery.cpp +707 -0
  789. package/bundle/hkp-rt/lib/src/discovery/discovery.h +89 -0
  790. package/bundle/hkp-rt/lib/src/http/auth.cpp +569 -0
  791. package/bundle/hkp-rt/lib/src/http/front_door.cpp +518 -0
  792. package/bundle/hkp-rt/lib/src/http/front_door.h +131 -0
  793. package/bundle/hkp-rt/lib/src/http/server.cpp +1539 -0
  794. package/bundle/hkp-rt/lib/src/http/ws_tickets.h +125 -0
  795. package/bundle/hkp-rt/lib/src/mount.h +63 -0
  796. package/bundle/hkp-rt/lib/src/process_context.h +335 -0
  797. package/bundle/hkp-rt/lib/src/process_depth.h +20 -0
  798. package/bundle/hkp-rt/lib/src/registry.cpp +233 -0
  799. package/bundle/hkp-rt/lib/src/runtime.cpp +986 -0
  800. package/bundle/hkp-rt/lib/src/runtime.h +225 -0
  801. package/bundle/hkp-rt/lib/src/runtime_host.h +180 -0
  802. package/bundle/hkp-rt/lib/src/service.cpp +315 -0
  803. package/bundle/hkp-rt/lib/src/services/asset.h +185 -0
  804. package/bundle/hkp-rt/lib/src/services/audio_encode.cpp +372 -0
  805. package/bundle/hkp-rt/lib/src/services/audio_encode.h +97 -0
  806. package/bundle/hkp-rt/lib/src/services/cache.h +362 -0
  807. package/bundle/hkp-rt/lib/src/services/cache_subservices.h +463 -0
  808. package/bundle/hkp-rt/lib/src/services/core_audio.cpp +384 -0
  809. package/bundle/hkp-rt/lib/src/services/core_audio.h +22 -0
  810. package/bundle/hkp-rt/lib/src/services/core_input.h +337 -0
  811. package/bundle/hkp-rt/lib/src/services/core_output.h +370 -0
  812. package/bundle/hkp-rt/lib/src/services/ffmpeg/detail.cpp +749 -0
  813. package/bundle/hkp-rt/lib/src/services/ffmpeg/detail.h +29 -0
  814. package/bundle/hkp-rt/lib/src/services/ffmpeg/ffmpeg.cpp +193 -0
  815. package/bundle/hkp-rt/lib/src/services/ffmpeg/ffmpeg.h +40 -0
  816. package/bundle/hkp-rt/lib/src/services/ffmpeg/types.h +120 -0
  817. package/bundle/hkp-rt/lib/src/services/fft_service.h +190 -0
  818. package/bundle/hkp-rt/lib/src/services/filesystem.h +309 -0
  819. package/bundle/hkp-rt/lib/src/services/filter.h +208 -0
  820. package/bundle/hkp-rt/lib/src/services/gather.h +272 -0
  821. package/bundle/hkp-rt/lib/src/services/hold.h +304 -0
  822. package/bundle/hkp-rt/lib/src/services/http_client.cpp +347 -0
  823. package/bundle/hkp-rt/lib/src/services/http_client.h +67 -0
  824. package/bundle/hkp-rt/lib/src/services/http_client_impl.h +45 -0
  825. package/bundle/hkp-rt/lib/src/services/http_client_template_examples.md +202 -0
  826. package/bundle/hkp-rt/lib/src/services/http_server/http_listener.cpp +130 -0
  827. package/bundle/hkp-rt/lib/src/services/http_server/http_listener.h +33 -0
  828. package/bundle/hkp-rt/lib/src/services/http_server/http_server.cpp +351 -0
  829. package/bundle/hkp-rt/lib/src/services/http_server/http_server.h +79 -0
  830. package/bundle/hkp-rt/lib/src/services/http_server/http_server_impl.cpp +230 -0
  831. package/bundle/hkp-rt/lib/src/services/http_server/http_server_impl.h +64 -0
  832. package/bundle/hkp-rt/lib/src/services/http_server/http_server_subservices.cpp +950 -0
  833. package/bundle/hkp-rt/lib/src/services/http_server/http_server_subservices.h +253 -0
  834. package/bundle/hkp-rt/lib/src/services/http_server/http_session.cpp +495 -0
  835. package/bundle/hkp-rt/lib/src/services/http_server/http_session.h +169 -0
  836. package/bundle/hkp-rt/lib/src/services/http_server/http_stream_listener.cpp +270 -0
  837. package/bundle/hkp-rt/lib/src/services/http_server/http_stream_listener.h +104 -0
  838. package/bundle/hkp-rt/lib/src/services/http_server/request_decode.h +164 -0
  839. package/bundle/hkp-rt/lib/src/services/if_service.h +210 -0
  840. package/bundle/hkp-rt/lib/src/services/ifft_service.h +198 -0
  841. package/bundle/hkp-rt/lib/src/services/injector.h +162 -0
  842. package/bundle/hkp-rt/lib/src/services/iterator.h +201 -0
  843. package/bundle/hkp-rt/lib/src/services/map.h +641 -0
  844. package/bundle/hkp-rt/lib/src/services/monitor.h +161 -0
  845. package/bundle/hkp-rt/lib/src/services/mp3_frames.h +119 -0
  846. package/bundle/hkp-rt/lib/src/services/mp4_to_wav.cpp +281 -0
  847. package/bundle/hkp-rt/lib/src/services/mp4_to_wav.h +263 -0
  848. package/bundle/hkp-rt/lib/src/services/peer_server/peer_registry.cpp +88 -0
  849. package/bundle/hkp-rt/lib/src/services/peer_server/peer_registry.h +43 -0
  850. package/bundle/hkp-rt/lib/src/services/peer_server/peer_server.h +163 -0
  851. package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_listener.cpp +133 -0
  852. package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_listener.h +46 -0
  853. package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_session.cpp +165 -0
  854. package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_session.h +44 -0
  855. package/bundle/hkp-rt/lib/src/services/peer_server/peer_ws_session.cpp +184 -0
  856. package/bundle/hkp-rt/lib/src/services/peer_server/peer_ws_session.h +55 -0
  857. package/bundle/hkp-rt/lib/src/services/receiver_session.h +172 -0
  858. package/bundle/hkp-rt/lib/src/services/root_certificates.h +3959 -0
  859. package/bundle/hkp-rt/lib/src/services/sha256_openssl.h +49 -0
  860. package/bundle/hkp-rt/lib/src/services/speech_http.h +306 -0
  861. package/bundle/hkp-rt/lib/src/services/speech_to_text.cpp +595 -0
  862. package/bundle/hkp-rt/lib/src/services/speech_to_text.h +69 -0
  863. package/bundle/hkp-rt/lib/src/services/static.cpp +45 -0
  864. package/bundle/hkp-rt/lib/src/services/static.h +41 -0
  865. package/bundle/hkp-rt/lib/src/services/stopper.h +72 -0
  866. package/bundle/hkp-rt/lib/src/services/sub_service.h +286 -0
  867. package/bundle/hkp-rt/lib/src/services/text_generation.cpp +1132 -0
  868. package/bundle/hkp-rt/lib/src/services/text_generation.h +71 -0
  869. package/bundle/hkp-rt/lib/src/services/text_to_speech.cpp +853 -0
  870. package/bundle/hkp-rt/lib/src/services/text_to_speech.h +97 -0
  871. package/bundle/hkp-rt/lib/src/services/timer.h +300 -0
  872. package/bundle/hkp-rt/lib/src/services/tracks.h +397 -0
  873. package/bundle/hkp-rt/lib/src/services/tts_inflect.cpp +149 -0
  874. package/bundle/hkp-rt/lib/src/services/tts_inflect.h +82 -0
  875. package/bundle/hkp-rt/lib/src/services/wav_reader.h +213 -0
  876. package/bundle/hkp-rt/lib/src/services/websocket_client_service.h +182 -0
  877. package/bundle/hkp-rt/lib/src/services/websocket_reader.h +148 -0
  878. package/bundle/hkp-rt/lib/src/services/websocket_server_service.h +196 -0
  879. package/bundle/hkp-rt/lib/src/services/websocket_writer.cpp +641 -0
  880. package/bundle/hkp-rt/lib/src/services/websocket_writer.h +117 -0
  881. package/bundle/hkp-rt/lib/src/sub_runtime.cpp +234 -0
  882. package/bundle/hkp-rt/lib/src/sub_runtime.h +160 -0
  883. package/bundle/hkp-rt/lib/src/types/data.cpp +237 -0
  884. package/bundle/hkp-rt/lib/src/types/message.cpp +148 -0
  885. package/bundle/hkp-rt/lib/src/types/models.cpp +83 -0
  886. package/bundle/hkp-rt/lib/src/types/ringbuffer.cpp +336 -0
  887. package/bundle/hkp-rt/lib/src/uuid.h +12 -0
  888. package/bundle/readymade-mcp-commits.json +5 -0
  889. package/dist/cli.d.ts +3 -0
  890. package/dist/cli.d.ts.map +1 -0
  891. package/dist/cli.js +79 -0
  892. package/dist/git.d.ts +8 -0
  893. package/dist/git.d.ts.map +1 -0
  894. package/dist/git.js +53 -0
  895. package/dist/http.d.ts +17 -0
  896. package/dist/http.d.ts.map +1 -0
  897. package/dist/http.js +130 -0
  898. package/dist/index.d.ts +7 -0
  899. package/dist/index.d.ts.map +1 -0
  900. package/dist/index.js +6 -0
  901. package/dist/repository.d.ts +49 -0
  902. package/dist/repository.d.ts.map +1 -0
  903. package/dist/repository.js +452 -0
  904. package/dist/schemas.d.ts +156 -0
  905. package/dist/schemas.d.ts.map +1 -0
  906. package/dist/schemas.js +43 -0
  907. package/dist/server.d.ts +4 -0
  908. package/dist/server.d.ts.map +1 -0
  909. package/dist/server.js +83 -0
  910. package/dist/types.d.ts +63 -0
  911. package/dist/types.d.ts.map +1 -0
  912. package/dist/types.js +20 -0
  913. package/dist/validation.d.ts +9 -0
  914. package/dist/validation.d.ts.map +1 -0
  915. package/dist/validation.js +101 -0
  916. package/package.json +52 -4
@@ -0,0 +1,664 @@
1
+ # Runtime
2
+
3
+ Where services actually run. A board has one or more, they are chained in order, and each one is a place with different capabilities — a browser tab, a Node process, a Python process, a C++ binary.
4
+
5
+ ---
6
+
7
+ ## Why there is more than one
8
+
9
+ A board is one app, but the things an app does do not all belong in the same
10
+ place. Drawing on a canvas belongs in the browser. Reading IMAP belongs on a
11
+ server. Running Whisper belongs where the model is. Audio DSP belongs in C++.
12
+
13
+ A **runtime** is that place. Splitting a board across several is what lets one
14
+ app span them, and the chain between them is what makes it one app rather than
15
+ several.
16
+
17
+ | Runtime | Language | How the browser talks to it | Typically used for |
18
+ |---|---|---|---|
19
+ | Browser | TypeScript | direct JS call — same process as the UI | UI, interaction, fast iteration, most services |
20
+ | hkp-node | TypeScript | REST + WebSocket | messaging, server I/O, webhooks |
21
+ | hkp-python | Python | REST + WebSocket | AI/ML, model inference |
22
+ | hkp-rt | C++ | REST + WebSocket | audio, high performance, embedded in the app |
23
+ | hkp-go | Go | REST | in development |
24
+ | GraphQL | — | GraphQL | legacy; one integration |
25
+
26
+ Not every service exists on every runtime. Where the same service id exists in
27
+ two runtimes it is meant to be the same *concept* with the same state contract —
28
+ `http-client` in node and hkp-rt share a UI panel for exactly that reason.
29
+
30
+ ### Choosing where a step runs is a real decision
31
+
32
+ The same step can often be placed in more than one runtime, and where you put it
33
+ decides three things that no amount of configuration can change afterwards:
34
+
35
+ **Where the data goes.** A runtime is a physical place. A step in the browser
36
+ runtime on your laptop keeps its data on your laptop; the same step in a runtime
37
+ on a server puts that data on the server. This is not a privacy policy, it is
38
+ which machine the bytes are on. A board that transcribes a recording locally and
39
+ sends only the resulting text onwards is not promising that — it is what the
40
+ board does.
41
+
42
+ **What it can reach.** A runtime can touch only what its host can touch: the
43
+ microphone and camera of the device in your hand, an audio interface plugged
44
+ into it, files on that machine, a device on that network segment and nothing
45
+ else. If a board needs a thing, it needs a runtime on the host that has it.
46
+
47
+ **What it can afford.** Compute, memory, and the models installed. A phone can
48
+ drive a small speech model; a workstation can run a large one; a cheap always-on
49
+ box can do neither but never sleeps. Placement is how the work is matched to the
50
+ hardware — which is why the same service ids exist on several runtimes, so
51
+ moving a step is moving it in the list rather than rewriting it.
52
+
53
+
54
+ ### Choosing, in practice
55
+
56
+ Four worked cases, to make those three axes concrete:
57
+
58
+ **Transcribing a private recording.** The audio should not leave the device, and
59
+ transcription needs a model. Put speech-to-text in a local runtime — hkp-rt
60
+ embedded in Readymade, or hkp-python on your own machine — and let only the
61
+ resulting text continue. The privacy property is structural: no step in the
62
+ board sends audio anywhere.
63
+
64
+ **A chat bot that answers while you sleep.** None of it can live in a browser,
65
+ because there is no browser open. Messaging belongs in hkp-node on a server, and
66
+ the board wants deploying so a coordinator keeps it running — see
67
+ `concepts/cloud-boards.md`.
68
+
69
+ **A live audio analyser with a UI.** Split it: capture and FFT in hkp-rt where
70
+ the sample buffers are, the display in the browser runtime where the person is.
71
+ What crosses between them is the analysis, not the audio.
72
+
73
+ **A model too big for your laptop.** Put hkp-python on the machine that has the
74
+ memory and leave everything else where it was. Only the prompt and the answer
75
+ travel.
76
+
77
+ The pattern in all four: put each step where its data should be and where its
78
+ work can happen, and let the board carry the results between them.
79
+
80
+ A consequence worth saying out loud: a board is portable in the sense that the
81
+ document is complete and the same JSON opens anywhere — but "anywhere" means
82
+ anywhere the runtimes it names can be reached. **A board built against a machine
83
+ on your desk is a board about your desk.** When one that worked yesterday will
84
+ not open, the runtime URL is the first thing to check.
85
+
86
+ ---
87
+
88
+ ## Where a runtime comes from
89
+
90
+ A board names runtimes; something has to be there to be named.
91
+
92
+ ### The browser runtime: nothing to run
93
+
94
+ It is the tab. Adding one to a board takes no credentials, no address and no
95
+ server, which is why it is the one a board starts with and the one every example
96
+ assumes. A board may hold several; they run independently and share nothing, the
97
+ same isolation any two runtimes have.
98
+
99
+ What it does need is **permission**, for the services that reach hardware. A
100
+ camera or microphone service triggers the browser's own permission prompt the
101
+ first time it starts; denied, the service reports the failure in its panel and
102
+ recovers when the permission is granted and the page reloaded — the rest of the
103
+ board is untouched, because a permission belongs to the service asking, not to
104
+ the board. In the packaged desktop app the same permissions are declared in the
105
+ application bundle and granted once by the operating system.
106
+
107
+ ### The servers
108
+
109
+ | Runtime | Started by | Listens on |
110
+ |---|---|---|
111
+ | hkp-node | `HKP_INSTANCE=<name> npx hkp-node`, a global install, or `docker run -p 8080:8080 -e HKP_INSTANCE=<name> cbastuck/hkp-node` | `PORT`, default 8080 |
112
+ | hkp-python | `hkp-python` from its virtualenv | `PORT`, default 8080 |
113
+ | hkp-rt | embedded in the Readymade app — it is already running when the app is | the app's `runtimePort`, off unless external access is enabled |
114
+
115
+ hkp-node and hkp-python take the same environment, because they answer the same
116
+ API: `PORT`, `HOST` (default `0.0.0.0`), `ALLOWED_ORIGINS`, and `EXTERNAL_HOST`.
117
+
118
+ An hkp-node is also a named **instance**, and will not start without one:
119
+ `HKP_INSTANCE` names the folder everything it keeps between runs lives in,
120
+ `~/.hkp/node-<instance>/` — its boards' data, the tickets it reconnects to
121
+ coordinators with, the boards it coordinates, its mount secret. A server's state
122
+ is otherwise invisible to whoever starts the next one, and two servers on one
123
+ machine would restore each other's tickets and deployed boards without a word.
124
+ Restarting under the same name is the same server; a second server is refused
125
+ while one is running as that instance. `hkp-node reset --yes` moves that folder
126
+ aside — to `~/.hkp/node-<instance>.reset-<date>T<hh-mm>/` — so the next start
127
+ begins with nothing restored.
128
+
129
+ `EXTERNAL_HOST` is the one worth understanding, because it is not the address the
130
+ server binds — it is the address the server *writes into what it hands back*: the
131
+ `outputUrl` a client is told to open its socket on, and the mount addresses it
132
+ publishes. It defaults to `127.0.0.1`, which is right until something on another
133
+ machine has to reach it, and then a runtime that binds every interface still
134
+ hands out an address only the host can dial. That is what makes a runtime look
135
+ provisioned and unreachable at once, and setting it to the LAN address is the fix.
136
+
137
+ ### Who may call a server from a browser
138
+
139
+ A runtime server on a person's own machine usually runs without
140
+ authentication, on the grounds that only that machine can reach it. That keeps
141
+ other machines out. It does not keep out a web page: every site open in a
142
+ browser on the machine can address `127.0.0.1`, and a board's runtime is not
143
+ something a stranger's page should be able to build.
144
+
145
+ So a request that carries no credential is let in only when it does not come
146
+ from a foreign page, and that is decided from what a browser states and a page
147
+ cannot forge:
148
+
149
+ | The request says | It is |
150
+ |---|---|
151
+ | no `Origin` | a caller that is not a browser — a coordinator, another runtime, `curl` — and is let in |
152
+ | an `Origin` the server allows | let in, and told it may read the answer |
153
+ | any other `Origin` | refused |
154
+ | no `Origin`, and `Sec-Fetch-Site: cross-site` | a page fetching the address as an image or a script; refused |
155
+ | a `Host` that is a name the server was not given | a page that resolved its own name to this machine; refused |
156
+ | `Forwarded`, `X-Forwarded-For` or `X-Real-IP` | a request a proxy passed on; refused (below) |
157
+
158
+ What a server allows without being told is the origins Readymade's own apps
159
+ run from and any page served from the machine itself, whatever its port. Every
160
+ other site — the playground on the public website included — is allowed at the
161
+ server's end and nowhere else: `ALLOWED_ORIGINS` for hkp-node, hkp-python and a
162
+ standalone hkp-rt, which replaces the default with exactly what it names; and
163
+ **Settings → Access → Allowed websites** in the Readymade app, which adds to it
164
+ and applies at once.
165
+
166
+ **Behind a proxy, where a request comes from says nothing.** A reverse proxy
167
+ on the same host — nginx, Caddy — makes every caller a loopback one, at a name
168
+ the server knows. So a request that says a proxy passed it on is never let in
169
+ for where it comes from: a server without auth refuses it, and hkp-rt's pass
170
+ for loopback callers does not apply to it — it has to carry a token. A proxy
171
+ that adds none of those headers cannot be told apart, which is why a loopback
172
+ bind is a boundary only while nothing forwards to it: put a server behind a
173
+ proxy only with authentication on.
174
+
175
+ A refusal is a `403` with nothing in it a page can read. To the page that was
176
+ refused it is indistinguishable from a server that is not running, and that is
177
+ the point: a site somebody merely has open learns nothing about what runs on
178
+ their machine. The playground therefore says both things when a board's server
179
+ gives no answer — it is not running, or it does not allow this page — with
180
+ what to change for each, and waits. **Check again** asks the server once more,
181
+ and the board carries on by itself the moment it answers.
182
+
183
+ Three things this does not cover. A request carrying a verified token is let
184
+ in by the token, and the origin list then says only which pages may send one.
185
+ A mount is reachable by anyone holding its address, as it is meant to be. And
186
+ another *program* on the same machine — or another account on it — is not a
187
+ browser, states no origin and is let in: a loopback bind is a boundary against
188
+ other machines and, with this, against web pages, not against the machine's own
189
+ software.
190
+
191
+ ### Where a hosted server may connect
192
+
193
+ The other direction. A board names destinations — an HTTP Client's URL, a feed,
194
+ an asset, a mail server, a model's base URL — and the server dials them. On a
195
+ person's own machine that is the point: a board talks to the printer, the NAS,
196
+ a model on the LAN. On a server other people's boards run on it is not: that
197
+ server's loopback, its private network and a cloud provider's metadata endpoint
198
+ (`169.254.169.254`, which hands out the machine's credentials) are reachable
199
+ from where it runs and are not a board's to reach.
200
+
201
+ So a server is told it is hosted with **`HKP_EGRESS=public`**, the same in
202
+ hkp-node, hkp-python and a standalone hkp-rt. A destination is then reached only
203
+ when every address its name resolves to is a public internet address — never
204
+ `127.0.0.0/8`, the private ranges (`10/8`, `172.16/12`, `192.168/16`), shared
205
+ address space (`100.64/10`), link-local (`169.254/16`), the IPv6 equivalents, or
206
+ an IPv6 address carrying one of those. Unset, nothing is refused; the desktop
207
+ app's embedded runtime is never told otherwise.
208
+
209
+ - **Judged on the address connected to**, not on the name a board wrote: a name
210
+ can be pointed anywhere, and repointed between being checked and being
211
+ dialled. Every redirect hop is judged the same way, and so is every spelling
212
+ of an address (`2130706433` is `127.0.0.1`).
213
+ - **`HKP_EGRESS_ALLOW`** lists addresses or ranges reached anyway, an internal
214
+ model server for instance. Addresses, not names, for the same reason.
215
+ - **A refusal says so** — "This server does not reach private addresses
216
+ (10.0.0.5)" — where it would otherwise be a timeout or a misleading hint.
217
+ - **What the operator configured is not judged:** the link to a coordinator,
218
+ the token issuer's keys, a model downloaded from a fixed release address.
219
+
220
+ The rule lives in one place per runtime (`hkp-node/src/egress.ts`,
221
+ `hkp-python/src/hkp/egress.py`, `hkp-rt/lib/include/egress.h`), and each
222
+ runtime's tests read its sources and fail on any other way of opening a
223
+ connection, so a service added later cannot quietly go around it.
224
+
225
+ On a machine you run, add the same rule in its **firewall** as a backstop: drop
226
+ the hosted process's traffic to those ranges (by its user, with
227
+ `iptables`/`nftables` owner matching, or as a container's egress policy). It
228
+ covers what code cannot — a library opening a socket nobody listed. Mind what
229
+ the server itself needs on the private network: another runtime's mount on the
230
+ same host, the coordinator, a database. The code-level rule exempts those by
231
+ where they come from; a firewall rule sees one process and has to be told.
232
+
233
+ ### What a token must carry
234
+
235
+ Every server checks a token the same way (hkp-node `src/auth.ts`,
236
+ hkp-python `hkp/auth.py`, hkp-rt `http/auth.cpp`, the website's `api/auth.php`):
237
+ signed with RS256 by a key of the issuer it names, that issuer being
238
+ `https://<AUTH0_DOMAIN>/`; addressed to one of the accepted audiences
239
+ (`AUTH0_AUDIENCE`); carrying an expiry that has not passed and a subject; and
240
+ not used before its `nbf`. Expiry and subject must be *there* — a check that
241
+ only applied when they were present would accept a token without them. A minute
242
+ of clock skew is allowed. On the desktop, an issuer listed in `settings.json`
243
+ without audiences accepts nothing, rather than a token minted for any
244
+ application of its tenant.
245
+
246
+ ### Opening a socket without the token in its address
247
+
248
+ A browser cannot set a header on a WebSocket handshake, so a token that
249
+ authenticated one would have to ride in the address — and an address is what
250
+ proxies and access logs keep. So the browser buys a **ticket** first:
251
+ `POST <server>/ws-tickets` with its token in the `Authorization` header, like
252
+ any request, answered with a random value good for one socket, for 30 seconds.
253
+ The socket is opened with `?ticket=` (`hkp-frontend/src/runtime/rest/wsTicket.ts`).
254
+ A ticket remembers what checking the token found — who the caller is, and
255
+ whether the allowlist lets them own — so a coordinator's bridge, which members
256
+ not on the allowlist open too, is judged exactly as the token would have been.
257
+
258
+ Every runtime server and coordinator issues them. `?access_token=` is still
259
+ accepted from a client that predates tickets, and the browser falls back to it
260
+ only for a server that has no `/ws-tickets` route.
261
+
262
+ ### What an expression may reach
263
+
264
+ A Map's terms and a Filter's predicate are expressions a board wrote, evaluated
265
+ inside the runtime — on a hosted server, inside a process everyone it lets in
266
+ shares. The evaluator (hkp-node `src/expressionEval.ts`, and its twin in the
267
+ browser runtime) is kept in the repository and changed like security code:
268
+ an expression reads and calls what its scope hands it and nothing else. It has
269
+ no assignment, a name is only one of the scope's own properties, and
270
+ `constructor`, `prototype`, `__proto__` and every other `__` member are refused
271
+ however they are reached, which closes the way from a value to the code behind
272
+ it.
273
+
274
+ ### Where a board may read and write files
275
+
276
+ A board is a document somebody wrote, and opening one builds its runtimes. A
277
+ service on hkp-rt that opens a path the board names — a
278
+ [Filesystem](../services/filesystem.md)'s file, a Monitor's log, a Cache's
279
+ folder, a WAV to read — would otherwise open it wherever it is: beside the
280
+ desktop app that is `~/.hkp`, which holds the vault, the remembered grants and
281
+ the settings that say which websites may call the runtime; on a server it is the
282
+ mount secret, the coordinator tickets and the process's environment.
283
+
284
+ So hkp-rt opens such a path only inside a **folder it was given**:
285
+
286
+ | hkp-rt runs as | Default folder | Others |
287
+ |---|---|---|
288
+ | the desktop app's runtime | `~/.hkp/cpp/files` | **Settings → Access → Folders boards may use**, applied at once. A folder holding `~/.hkp`, or inside it, is refused — the home folder among them |
289
+ | a standalone server | `HKP_FILES_DIR`, else `~/.hkp/cpp/files`; empty for none | `HKP_FILES_ALLOW`, absolute paths separated as `PATH` is |
290
+ | the iOS and Android apps' runtime | none | — |
291
+
292
+ A relative path is taken from the default folder, which is what makes a board
293
+ that writes `"recordings"` portable. A path is judged on what it is rather than
294
+ how it is spelled: `..` and symlinks are followed before it is compared, and a
295
+ name that arrives with the data — a file inside a configured folder, a cache
296
+ entry's name — is taken inside that folder whatever it says. The rule lives in
297
+ one place (`hkp-rt/lib/include/files.h`); every service resolves through it, and
298
+ a test fails on a file opened any other way. The test reads hkp-rt's own sources,
299
+ so a library that opens files is closed where it is set up: Inja's `include`,
300
+ which would read any path a template names, is switched off wherever hkp-rt
301
+ renders one (`hkp-rt/lib/src/common/inja.h`).
302
+
303
+ What it does not cover: hkp-rt has one tenant, so everyone a hosted server lets
304
+ in shares its folders; paths the operator names — a runtime config, plugins —
305
+ are the operator's; and a folder should hold nothing but what boards may have,
306
+ because a board that may write there may write all of it. The models the speech
307
+ and text-generation services load are named by path too and are not confined:
308
+ the model library reads them, and a file that is not a model fails to load.
309
+ The one way any of it comes back is speech-to-text's `tokensPath`, the
310
+ vocabulary a transcript is spelled from: a file shaped like one, should it load,
311
+ spells the transcript.
312
+
313
+ ### Adding one to a board
314
+
315
+ In the app: the runtimes menu, **add an external runtime**, a name and a host URL
316
+ (`http://localhost:8080`). The name is yours; the URL is what is dialled.
317
+
318
+ A saved server and the board are separate things, joined by the server's
319
+ **name**. The list of servers is the host's — kept by whoever is running the
320
+ app, edited and deleted there — and a runtime added from it gives the board the
321
+ name and nothing else: `"remote": "node"` for a server that answers to `node`,
322
+ `"remote": "Laptop"` for one that is only called that. The board holds no
323
+ address at all, and opens on whichever server the person opening it keeps under
324
+ that name, on whatever port and machine that is for them.
325
+
326
+ So a board depends on the name staying answered. Renaming a server keeps the
327
+ old name as an alias, and a name nobody is kept under any more is asked about
328
+ when the board opens — *which runtime server is `Laptop`?* — rather than left
329
+ to fail (`concepts/remotes.md`). A board that carries a `url` instead, written
330
+ by hand or from before any of this, still opens exactly as it did.
331
+
332
+ `hkp://remotes/<name>` is the other way in, and it means something narrower than
333
+ it looks: it addresses the runtime **the app itself hosts**, under the name that
334
+ app runs as — every other remote is listed with its real URL. A name that is not
335
+ the app's own therefore names nothing and is refused, rather than being quietly
336
+ answered by whichever runtime happens to be embedded
337
+ (`meander/backend/remoteRoute.h`). A board pinned to a runtime that is
338
+ not running should fail visibly, not run somewhere else.
339
+
340
+ ---
341
+
342
+ ## The chain
343
+
344
+ Runtimes run **in board order**: the output of one is the input of the next.
345
+
346
+ ```
347
+ runtimes[0] → runtimes[1] → runtimes[2]
348
+ ```
349
+
350
+ The step between two runtimes is `onRuntimeResult()` in
351
+ `hkp-frontend/src/views/playground/Board/index.tsx`: when a runtime finishes, it
352
+ finds the next runtime in the array and calls its `processRuntime()`. Two things
353
+ about that step are worth knowing:
354
+
355
+ - **`null` stops the board.** The chain only continues `if (result !== null)`.
356
+ The same value that stops a pipeline inside a runtime also stops the chain
357
+ between them.
358
+ - **The board is driven from the first runtime.** The `playBoard` action calls
359
+ `processRuntime` on `runtimes[0]`; everything after that is the chain. A
360
+ service can also emit on its own (a Timer, an HTTP request arriving), which
361
+ starts the chain from wherever that service sits.
362
+
363
+ For a deployed board the same chaining is done by the coordinator
364
+ (`routeResult()` / `nextRuntime()` in `hkp-node/src/coordinator/session.ts`),
365
+ including the case where the next runtime is a browser runtime it must reach
366
+ over the bridge.
367
+
368
+ Either way the result passes **through whoever runs the board** — runtimes do
369
+ not dial each other — and it travels on the sockets each runtime already has to
370
+ it. What cannot be JSON goes as a YAS frame: a `FloatRingBuffer`, and bytes,
371
+ which arrive in the next runtime as bytes (`Uint8Array` in the browser, a
372
+ `Buffer` in hkp-node, `BinaryData` in hkp-rt and hkp-python) — an encoder's
373
+ output handed to a server in another runtime, say. Everything else is JSON.
374
+ Results enter the next runtime in the order they were produced.
375
+
376
+ ---
377
+
378
+ ## What crosses a runtime boundary
379
+
380
+ Because a runtime is a physical place, it is worth being precise about what
381
+ actually leaves one.
382
+
383
+ In normal operation:
384
+
385
+ | What crosses | When |
386
+ |---|---|
387
+ | **The result** a runtime hands to the next | every pass — this is the flow the board describes |
388
+ | **Configuration**, and the state a service reports back | whenever a service is configured or reports; the coordinator keeps the last state of every service, which is how whole-board questions are answered |
389
+ | **Log entries** | only while the board has logging switched on — see `concepts/logging.md` |
390
+
391
+ Everything else — the intermediate values passing between the services inside
392
+ one runtime — stays there. A runtime is a box that can be closed.
393
+
394
+ **With one exception, and it is the useful one.** Attach a UI to a runtime and
395
+ it reports each call its services make: a pair of notifications around every
396
+ call (`{__internal: {state: "call-process"}}` before it,
397
+ `"call-process-finished"` after it). That is what makes the panels live: the
398
+ processing indicator, the output plug lighting, the overview's activity.
399
+
400
+ **What a report carries depends on Capture mode.** Without it, a report says
401
+ only that the call happened and, when it ends, whether it passed nothing on
402
+ (`stopped: true`). With it, a report also carries the value going in and the
403
+ value coming out, which is what the Flow Inspector shows. What passes between
404
+ the services of a run is private, and only what a board outputs is public. So
405
+ the values leave a runtime only while someone building the board asks to see
406
+ them:
407
+
408
+ - **The switch** is the Capture button beside the toolbar's Play buttons, or
409
+ for a deployed board its owner's in the Cloud Boards view. Opening the
410
+ inspector while it is off asks whether to turn it on. On a phone it is the
411
+ round button beside Play in the top bar, and in a deployed board's top bar
412
+ on the Cloud tab. A service's card, tapped, expands to show what it passed on
413
+ last, with its own panel a tap further (**UI**), and its **Inspect** opens
414
+ the inspector, which is also **Flow** in the
415
+ service's sheet; both ask the same question in place
416
+ (`views/playground/mobile/capture.tsx`, `MobileFlowInspector.tsx`).
417
+ - **It is never saved.** It is not in the board document or a runtime's
418
+ configuration (`PATCH /runtimes/:id/state` sets it on a running runtime and
419
+ answers it, and nothing builds a runtime with it). A board always opens with
420
+ it off. A deployed board's coordinator holds it in its session only, and it
421
+ ends when the owner's last bridge to the board closes.
422
+ - **Where it is applied:** where a report leaves. In hkp-node and hkp-python
423
+ that is the server's two exits, the notification socket and the coordinator
424
+ link (`outgoingPayload`). In hkp-rt it is where the report is made, which a
425
+ nested pipeline asks of the runtime around it (`capturesCalls`). In the
426
+ browser it is `serviceState.ts`. A pipeline nested at any depth follows the
427
+ runtime that holds it.
428
+
429
+ Even with Capture mode on, a report carries a value only up to 5 MiB. Above
430
+ that, a description takes its place, `{"__hkpTooLarge": {type, bytes, exact,
431
+ preview}}`: what the value is, how large (`exact` is false where counting
432
+ stopped at the limit), and how it begins. The Flow Inspector shows the
433
+ description and will not run it again. Without the limit, a value that never
434
+ needs to leave its runtime would leave it anyway, once for every service it
435
+ passes through. On a deployed board that is past the coordinator's frame limit,
436
+ and enough to close the runtime's connection. The rule is the same in every
437
+ runtime (`callReport.ts`, `call_report.py`, `call_report.h`).
438
+
439
+ A phone keeps what the inspector shows for the **whole board** rather than per
440
+ service frame: it opens a service only when asked, so a history begun then
441
+ would miss everything before it. The mobile canvas listens to every service a
442
+ runtime holds from the moment the board is shown (`boardFlow.tsx`), and the
443
+ same listening lights a service's card while it runs. Both read a report with
444
+ the desktop's rule (`readCallReport` in
445
+ `ui-components/service/flowRecords.ts`). A service nested inside another is
446
+ not listened to there yet.
447
+
448
+ When nothing is attached, nothing is sent at all. This is not a filter applied
449
+ afterwards: the browser drops a notification with no target (`hasCallbacks`),
450
+ and a runtime server returns early when its socket set is empty
451
+ (`sendJsonNotification`).
452
+
453
+ The caveat is a service's own notifications. A Monitor shows what passed
454
+ through it, and an error message can quote a value. Capture mode covers call
455
+ reports, not what a service chooses to say. And **a deployed board's
456
+ coordinator holds its own socket to every runtime it provisioned**, so on a
457
+ deployed board, assume there is always a listener for what services say. A step
458
+ whose intermediate data must not leave its machine belongs on a board you own
459
+ yourself.
460
+
461
+ ---
462
+
463
+ ## Inside a runtime: the pipeline
464
+
465
+ Each runtime owns an **ordered list of services**, and that order is the wiring.
466
+ The browser's loop (`BrowserRuntimeScope.next()`) is the shortest illustration of
467
+ the contract every runtime implements:
468
+
469
+ ```ts
470
+ for (let i = position + 1; !!services[i] && result !== null; ++i) {
471
+ svc = services[i];
472
+ if (svc && !svc.bypass) {
473
+ result = await svc.process(params);
474
+ params = result;
475
+ }
476
+ }
477
+ ```
478
+
479
+ Three things fall out of those five lines: services run in order, a **bypassed**
480
+ service is skipped rather than removed, and `null` ends the pass. `next()` also
481
+ takes a *starting* service — which is what makes the pull and early-return
482
+ patterns below possible.
483
+
484
+ ### Control flow
485
+
486
+ Four mechanisms, and they are not all implemented everywhere:
487
+
488
+ | Mechanism | How | Runtimes |
489
+ |---|---|---|
490
+ | **Stop** | return `null` — nothing downstream, and nothing in the next runtime, runs | all |
491
+ | **Early return** | return a `ControlFlowData` / `makeEarlyReturn` — skip the rest of this pipeline but carry a result out | hkp-rt, hkp-python |
492
+ | **Inversion of control (pull)** | return `null`, then drive the services after you yourself and act on their result | all (`app.next`, `host.processFrom`, `next()` / `nextAsync()`) |
493
+ | **Deferred / multi-emit** | answer later: `deferCompletion()` returns Null and suppresses the finish event, a later `emit()` delivers the real result | hkp-rt (`emitResult` in node) |
494
+
495
+ hkp-node and the browser break on `null`/`undefined` only — do not write a board
496
+ that relies on early return there. The loops to read are
497
+ `hkp-rt/lib/src/runtime.cpp` (`processFrom`), `hkp-node/src/runtime.ts`
498
+ (`processFromIndex`), `hkp-python/src/hkp/runtime.py`, and
499
+ `BrowserRuntimeScope.next`.
500
+
501
+ The canonical use of pull is a cache: on a **hit** it early-returns the cached
502
+ value; on a **miss** it stops the push, lets the services behind it fetch, keeps
503
+ what they produced, and emits that.
504
+
505
+ ---
506
+
507
+ ## Leaving the line
508
+
509
+ The chain and the pipeline are the default shape, not the only one. A service can
510
+ reach a *named* service or runtime and act on it directly:
511
+
512
+ | Mechanism | What it does | Where |
513
+ |---|---|---|
514
+ | `app.getServiceById(uuid)` | the live instance of another service in this runtime | `AppImpl` |
515
+ | `app.configureService` / `configureServiceInRuntime(runtimeId, uuid, config)` | reconfigure a service here or on another runtime | `AppImpl` |
516
+ | `app.processRuntimeByName(name, params)` | run a whole runtime by its name, out of order | `AppImpl` |
517
+ | `app.next(svc, result)` | emit as if `svc` had just produced this — the services after it run, it does not | `AppImpl` |
518
+ | **Configurator** service | calls `configure()` on `targetServiceUuid` (+ optional `targetRuntime`), then stops by default | `services/Configurator.ts` |
519
+
520
+ These exist for actions such as a panel reconfiguring a service elsewhere on
521
+ the board. Processing still follows the ordered services or a nested pipeline.
522
+
523
+ **They are `goto`, and they cost what `goto` costs.** Two parts of the board now
524
+ know about each other, neither can be moved or reused alone, and the ordered list
525
+ no longer tells you what runs. Every such reference is also a field the generic
526
+ machinery must know by name — `targetServiceUuid`, `targetRuntime` and friends
527
+ are in `KNOWN_REFERENCE_FIELDS` (`core/forkBoard.ts`) precisely so a fork can
528
+ rewrite them; anything a service invents for itself is not carried across.
529
+
530
+ So: use them when the shape really is a cycle, and reach for **nesting** first
531
+ everywhere else. A nested pipeline is a step in the outer one — the host knows
532
+ its pipeline, the pipeline knows nothing of its host — and that ignorance is what
533
+ makes the group movable and readable. `join` is the pattern to imitate: a nested
534
+ pipeline whose result is merged *beside* the input, so a value can be computed
535
+ where it is needed instead of fetched from somewhere that has to be named.
536
+
537
+ ---
538
+
539
+ ## How the browser talks to a runtime
540
+
541
+ Three abstractions, all in `hkp-frontend/src/types.ts`:
542
+
543
+ | | What it is |
544
+ |---|---|
545
+ | `RuntimeApi` | the verbs, per runtime *type*: `addRuntime`, `restoreRuntime`, `processRuntime`, `addService`, `configureService`, `getServiceConfig`, `rearrangeServices`, … |
546
+ | `RuntimeScope` | one *live* runtime: its descriptor, its registry, `onResult`, and how to close it |
547
+ | `AppImpl` | what a **service** may do — `notify`, `next`, `log`, `createSubService`, `coordinator`, … |
548
+
549
+ There is one `RuntimeApi` implementation per runtime type
550
+ (`runtime/browser/BrowserRuntimeApi.ts`, `runtime/rest/RuntimeRestApi.ts`,
551
+ `runtime/graphql/…`), and the board picks the one matching `runtime.type`. This
552
+ is the seam that lets a cloud board swap in a REST api that talks over the
553
+ coordinator's bridge instead of dialling the runtime
554
+ (`views/cloud/bridgeRuntimeApi.ts`) without anything else noticing.
555
+
556
+ Runtime types carry two deprecated aliases — `realtime` → `rest` and `remote` →
557
+ `graphql` — normalised by `toCanonicalRuntimeClassType()`. Boards in the wild
558
+ still use them, so always compare canonical forms.
559
+
560
+ ---
561
+
562
+ ## Provisioning: `GET` attaches, `POST` provisions
563
+
564
+ For a remote runtime, `restoreRuntime()` in `runtime/rest/RuntimeRestApi.ts`:
565
+
566
+ 1. `attachRuntime()` — `GET /runtimes`, find this id, and compare **service
567
+ identity only** (uuid + serviceId, in order — never state, which legitimately
568
+ drifts). Same board still running there? Attach to it, and re-push secrets,
569
+ because a runtime that restarted still has its services and no longer has
570
+ their credentials.
571
+ 2. Otherwise `POST /runtimes` and build it.
572
+
573
+ > The verb is the intent; no server infers it.
574
+
575
+ A `RuntimeRestScope` then opens **one WebSocket per runtime** to the `outputUrl`
576
+ the server returned. That socket carries results and notifications — and it is
577
+ also what keeps the runtime alive, because of the lifecycle flag below.
578
+
579
+ ### Lifecycle is declared, never inferred
580
+
581
+ In the create payload, by whoever creates the runtime:
582
+
583
+ | `garbageCollected` | Meaning | Who sends it |
584
+ |---|---|---|
585
+ | `true` | reap when the last client socket closes | a browser — its runtimes should not outlive the tab |
586
+ | absent / `false` | persist until an explicit `DELETE` | a coordinator, a config file, a script |
587
+
588
+ The default is persist, and a runtime nobody ever connected to is never reaped:
589
+ cleanup happens when a client *goes away*. All three servers honour it, pinned by
590
+ `hkp-node/tests/runtime-lifecycle.test.ts`,
591
+ `hkp-python/tests/test_runtime_lifecycle.py`,
592
+ `hkp-rt/tests/runtime_lifecycle.test.cpp`.
593
+
594
+ ---
595
+
596
+ ## Multi-tenancy
597
+
598
+ A runtime server is shared. Runtimes are namespaced by the authenticated `sub`,
599
+ so two people loading the same board each get their own runtime rather than
600
+ fighting over one (`TenantRuntimes` in `hkp-node/src/runtime.ts`). Every route
601
+ resolves runtimes through one of those views, so a handler cannot reach another
602
+ tenant's runtime even by id.
603
+
604
+ This is also why a service that must be reachable from outside cannot bind a
605
+ port of its own — see `concepts/mounts.md`.
606
+
607
+ ---
608
+
609
+ ## What a runtime carries besides services
610
+
611
+ - **A registry**: what services this runtime can create. Sent back when the
612
+ runtime is provisioned, and used to offer the right service list and pick the
613
+ right UI panel (`ServiceRegistry` per runtime id).
614
+ - **A server kind**: remote servers report what they are (`"server": "node"`,
615
+ `"python"`, `"c++"`) beside the registry, and the runtime header shows it
616
+ next to the `rest` badge. It lives on the live scope, never in the board — the
617
+ same board can point a runtime at a different server tomorrow.
618
+ - **State**: presentation and per-runtime settings, e.g. `color`,
619
+ `wrapServices`, `minimized`, `logData` — `runtime.state` in the board.
620
+ - **Where it runs**, for remote runtimes: a `url`, or a `remote` — the name of
621
+ a runtime server the client opening the board keeps (`embedded`, `node`,
622
+ `python`, or a name of the person's own; `concepts/remotes.md`).
623
+ `hkp://remotes/<name>` addresses the app's own embedded runtime (above);
624
+ `HKP_RUNTIME_HOST` is substituted at load for boards that cannot know the host
625
+ when they are written.
626
+ - **Bundles**: optional plugin libraries a runtime loads (`bundles[]`).
627
+ - **Custom actions**: host-level buttons a runtime can offer.
628
+
629
+ ---
630
+
631
+ ## Sub-runtimes
632
+
633
+ Every runtime supports a `sub-service`: a service that owns an ordered pipeline
634
+ of its own and runs it as one step of the outer pipeline. That nested pipeline is
635
+ a full runtime pass with the same rules — which is what makes reusable
636
+ higher-level building blocks possible, and what `http-server-subservices` uses to
637
+ answer a request with a pipeline rather than a single service.
638
+
639
+ Implementations: `runtime/browser/services/BrowserSubService.tsx`,
640
+ `hkp-node/src/services/sub-service.ts`, `hkp-rt/lib/src/services/sub_service.h`
641
+ (+ `sub_runtime.cpp`).
642
+
643
+ ---
644
+
645
+ ## Rough index into the source
646
+
647
+ | Concern | Where |
648
+ |---|---|
649
+ | Types (`RuntimeDescriptor`, `RuntimeApi`, `RuntimeScope`, `AppImpl`) | `hkp-frontend/src/types.ts` |
650
+ | Runtime-to-runtime chain | `hkp-frontend/src/views/playground/Board/index.tsx` (`onRuntimeResult`) |
651
+ | Browser runtime | `hkp-frontend/src/runtime/browser/` (`BrowserRuntimeApi.ts`, `BrowserRuntimeScope.ts`, `BrowserRuntimeApp.ts`) |
652
+ | REST runtime client | `hkp-frontend/src/runtime/rest/` (`RuntimeRestApi.ts`, `RuntimeRestScope.ts`, `Message.ts`) |
653
+ | Board load / restore | `hkp-frontend/src/core/boardPersistence.ts` |
654
+ | Node runtime + tenancy | `hkp-node/src/runtime.ts` |
655
+ | Python runtime | `hkp-python/src/hkp/runtime.py` |
656
+ | C++ runtime + sub-runtime | `hkp-rt/lib/src/runtime.cpp`, `sub_runtime.cpp` |
657
+ | Folders an hkp-rt board may use | `hkp-rt/lib/include/files.h`; the desktop's in `meander/backend/fileFolders.h` |
658
+ | Chain for deployed boards | `hkp-node/src/coordinator/session.ts` (`routeResult`, `nextRuntime`) |
659
+
660
+ ---
661
+
662
+ See also: **Board** (`concepts/board.md`), **Service** (`concepts/service.md`),
663
+ **Mounts** (`concepts/mounts.md`), **Units and compositions**
664
+ (`concepts/units.md`) — the runtime is the axis a unit is projected along.