@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.
- package/README.md +114 -2
- package/bundle/LICENSE +201 -0
- package/bundle/boards/aggregator-demo-board.json +54 -0
- package/bundle/boards/alpaca-board.json +316 -0
- package/bundle/boards/animate-board.json +159 -0
- package/bundle/boards/ascii-art-demo-board.json +33 -0
- package/bundle/boards/ascii-cam-board.json +184 -0
- package/bundle/boards/asset-demo-board.json +54 -0
- package/bundle/boards/audio-encode-demo-board.json +153 -0
- package/bundle/boards/audiolize-board.json +152 -0
- package/bundle/boards/batcher-demo-board.json +43 -0
- package/bundle/boards/buffer-demo-board.json +53 -0
- package/bundle/boards/cache-demo-board.json +59 -0
- package/bundle/boards/camera-demo-board.json +28 -0
- package/bundle/boards/canvas-demo-board.json +55 -0
- package/bundle/boards/changes-demo-board.json +60 -0
- package/bundle/boards/court-booking-browser-demo-board.json +221 -0
- package/bundle/boards/court-booking-demo-board.json +218 -0
- package/bundle/boards/current-time-board.json +32 -0
- package/bundle/boards/debounce-demo-board.json +43 -0
- package/bundle/boards/decrypt-demo-board.json +47 -0
- package/bundle/boards/delay-demo-board.json +28 -0
- package/bundle/boards/detect-demo-board.json +64 -0
- package/bundle/boards/document-extract-demo-board.json +55 -0
- package/bundle/boards/dropitapp-board.json +138 -0
- package/bundle/boards/encode-demo-board.json +39 -0
- package/bundle/boards/encrypt-board.json +185 -0
- package/bundle/boards/encrypt-demo-board.json +39 -0
- package/bundle/boards/face-alert-board.json +181 -0
- package/bundle/boards/fetcher-demo-board.json +40 -0
- package/bundle/boards/fft-demo-board.json +28 -0
- package/bundle/boards/filter-demo-board.json +55 -0
- package/bundle/boards/flat-map-demo-board.json +42 -0
- package/bundle/boards/frame-limit-test-board.json +130 -0
- package/bundle/boards/game-board.json +413 -0
- package/bundle/boards/game-of-life-board.json +139 -0
- package/bundle/boards/game-of-life-demo-board.json +34 -0
- package/bundle/boards/gather-demo-board.json +62 -0
- package/bundle/boards/group-by-demo-board.json +62 -0
- package/bundle/boards/hacker-demo-board.json +45 -0
- package/bundle/boards/hacker-news-board.json +741 -0
- package/bundle/boards/hash-demo-board.json +40 -0
- package/bundle/boards/health-log-browser-demo-board.json +537 -0
- package/bundle/boards/health-log-demo-board.json +498 -0
- package/bundle/boards/helloworld-board.json +57 -0
- package/bundle/boards/hold-demo-board.json +67 -0
- package/bundle/boards/hold-scopes-demo-board.json +141 -0
- package/bundle/boards/http-client-browser-demo-board.json +379 -0
- package/bundle/boards/http-client-demo-board.json +380 -0
- package/bundle/boards/image-picker-demo-board.json +22 -0
- package/bundle/boards/imap-email-demo-board.json +35 -0
- package/bundle/boards/injector-demo-board.json +55 -0
- package/bundle/boards/iterator-demo-board.json +55 -0
- package/bundle/boards/limit-demo-board.json +66 -0
- package/bundle/boards/link-debugger.json +32 -0
- package/bundle/boards/live-location-demo-board.json +93 -0
- package/bundle/boards/live-radio-cloud-demo-board.json +216 -0
- package/bundle/boards/live-radio-cloud-direct-demo-board.json +311 -0
- package/bundle/boards/live-radio-demo-board.json +211 -0
- package/bundle/boards/live-radio-members-demo-board.json +314 -0
- package/bundle/boards/local-storage-demo-board.json +30 -0
- package/bundle/boards/lz-compress-demo-board.json +52 -0
- package/bundle/boards/map-demo-board.json +46 -0
- package/bundle/boards/match-filter-demo-board.json +43 -0
- package/bundle/boards/meeting-poll-browser-demo-board.json +649 -0
- package/bundle/boards/meeting-poll-demo-board.json +650 -0
- package/bundle/boards/microphone-monitor-demo-board.json +28 -0
- package/bundle/boards/microphone-speaker-demo-board.json +86 -0
- package/bundle/boards/monitor-demo-board.json +52 -0
- package/bundle/boards/mounted-endpoint-demo-board-hkp-rt.json +84 -0
- package/bundle/boards/mounted-endpoint-demo-board.json +84 -0
- package/bundle/boards/nested-rhythm-demo-board.json +1160 -0
- package/bundle/boards/next-bus-board.json +52 -0
- package/bundle/boards/next-bus-switch-board.json +79 -0
- package/bundle/boards/night-groove-demo-board.json +742 -0
- package/bundle/boards/noise-alert-board.json +146 -0
- package/bundle/boards/offer-followup-demo-board.json +291 -0
- package/bundle/boards/offer-intake-demo-board.json +289 -0
- package/bundle/boards/offer-intake-hetzner-demo-board.json +286 -0
- package/bundle/boards/offer-intake-imap-demo-board.json +289 -0
- package/bundle/boards/offer-intake-imap-hetzner-demo-board.json +354 -0
- package/bundle/boards/p2p-receiver-demo-board.json +65 -0
- package/bundle/boards/p2p-sender-demo-board.json +94 -0
- package/bundle/boards/pad-groove-demo-board.json +644 -0
- package/bundle/boards/peer-chat-board.json +109 -0
- package/bundle/boards/peer-chat-node-board.json +97 -0
- package/bundle/boards/qr-code-demo-board.json +22 -0
- package/bundle/boards/queue-demo-board.json +239 -0
- package/bundle/boards/reduce-demo-board.json +54 -0
- package/bundle/boards/remote-named-demo-board-hkp-rt.json +61 -0
- package/bundle/boards/remote-named-demo-board.json +61 -0
- package/bundle/boards/rss-demo-board.json +530 -0
- package/bundle/boards/rss-radio-board.json +515 -0
- package/bundle/boards/rss-radio-brief-one-board.json +237 -0
- package/bundle/boards/rss-radio-editor-unit-board.json +555 -0
- package/bundle/boards/rss-radio-library-unit-board.json +293 -0
- package/bundle/boards/rss-radio-unit-board.json +809 -0
- package/bundle/boards/rss-radio-voice-unit-board.json +146 -0
- package/bundle/boards/runtime-configs/hold-example.json +41 -0
- package/bundle/boards/runtime-configs/injector-example.json +23 -0
- package/bundle/boards/runtime-configs/speech-to-text-example.json +35 -0
- package/bundle/boards/runtime-configs/text-generation-example.json +31 -0
- package/bundle/boards/runtime-configs/text-to-speech-example.json +28 -0
- package/bundle/boards/runtime-configs/text-to-speech-inflect-example.json +28 -0
- package/bundle/boards/runtime-configs/ws-audio-playback-example.json +23 -0
- package/bundle/boards/select-demo-board.json +32 -0
- package/bundle/boards/send-ntfy-board.json +52 -0
- package/bundle/boards/shared-costs-demo-board.json +361 -0
- package/bundle/boards/sign-demo-board.json +41 -0
- package/bundle/boards/skill-router-demo-board.json +210 -0
- package/bundle/boards/smooth-demo-board.json +91 -0
- package/bundle/boards/smtp-email-demo-board.json +34 -0
- package/bundle/boards/sort-demo-board.json +55 -0
- package/bundle/boards/sound-demo-board.json +65 -0
- package/bundle/boards/spectral-modifier-board.json +98 -0
- package/bundle/boards/speech-synth-demo-board.json +37 -0
- package/bundle/boards/speech-to-text-demo-board.json +146 -0
- package/bundle/boards/spotify-board.json +75 -0
- package/bundle/boards/spread-demo-board.json +35 -0
- package/bundle/boards/sql-demo-board.json +56 -0
- package/bundle/boards/sql-explorer-board.json +447 -0
- package/bundle/boards/sql-explorer-node-board.json +474 -0
- package/bundle/boards/sql-import-board.json +156 -0
- package/bundle/boards/state-demo-board.json +65 -0
- package/bundle/boards/stopper-demo-board.json +40 -0
- package/bundle/boards/storage-demo-board.json +193 -0
- package/bundle/boards/store-demo-board.json +63 -0
- package/bundle/boards/swimlanes-demo-board.json +197 -0
- package/bundle/boards/switch-demo-board.json +51 -0
- package/bundle/boards/syn-board.json +19 -0
- package/bundle/boards/syn-booking-unit-board.json +998 -0
- package/bundle/boards/syn-conversations-anthropic-demo-board.json +925 -0
- package/bundle/boards/syn-conversations-demo-board.json +925 -0
- package/bundle/boards/syn-hotels-unit-board.json +287 -0
- package/bundle/boards/syn-mail-desk-board.json +25 -0
- package/bundle/boards/syn-mail-desk-unit-board.json +254 -0
- package/bundle/boards/telegram-listener-demo-board.json +31 -0
- package/bundle/boards/text-generation-anthropic-demo-board.json +66 -0
- package/bundle/boards/text-generation-demo-board.json +51 -0
- package/bundle/boards/text-generation-local-demo-board.json +80 -0
- package/bundle/boards/text-to-speech-demo-board.json +58 -0
- package/bundle/boards/timeline-demo-board.json +477 -0
- package/bundle/boards/timer-demo-board.json +35 -0
- package/bundle/boards/tracks-demo-board.json +95 -0
- package/bundle/boards/trigger-pad-demo-board.json +47 -0
- package/bundle/boards/triggerpad-board.json +31 -0
- package/bundle/boards/triggerpad-recorder-board.json +56 -0
- package/bundle/boards/uuid-generator-demo-board.json +166 -0
- package/bundle/boards/voice-assistant-demo-board.json +230 -0
- package/bundle/boards/voice-assistant-hkp-rt-demo-board.json +239 -0
- package/bundle/boards/voice-assistant-local-demo-board.json +232 -0
- package/bundle/boards/voice-assistant-skills-demo-board.json +316 -0
- package/bundle/boards/voice-assistant-skills-local-demo-board.json +316 -0
- package/bundle/boards/xy-pad-demo-board.json +36 -0
- package/bundle/docs/content/board-json.md +277 -0
- package/bundle/docs/content/boards/alpaca-board.md +56 -0
- package/bundle/docs/content/boards/animate-board.md +40 -0
- package/bundle/docs/content/boards/ascii-cam-board.md +37 -0
- package/bundle/docs/content/boards/audiolize-board.md +47 -0
- package/bundle/docs/content/boards/court-booking-browser-demo-board.md +43 -0
- package/bundle/docs/content/boards/court-booking-demo-board.md +120 -0
- package/bundle/docs/content/boards/current-time-board.md +32 -0
- package/bundle/docs/content/boards/dropitapp-board.md +57 -0
- package/bundle/docs/content/boards/encrypt-board.md +36 -0
- package/bundle/docs/content/boards/face-alert-board.md +50 -0
- package/bundle/docs/content/boards/game-board.md +69 -0
- package/bundle/docs/content/boards/game-of-life-board.md +47 -0
- package/bundle/docs/content/boards/hacker-news-board.md +76 -0
- package/bundle/docs/content/boards/health-log-browser-demo-board.md +56 -0
- package/bundle/docs/content/boards/health-log-demo-board.md +138 -0
- package/bundle/docs/content/boards/helloworld-board.md +40 -0
- package/bundle/docs/content/boards/link-debugger.md +31 -0
- package/bundle/docs/content/boards/live-radio-cloud-demo-board.md +70 -0
- package/bundle/docs/content/boards/live-radio-cloud-direct-demo-board.md +89 -0
- package/bundle/docs/content/boards/live-radio-demo-board.md +102 -0
- package/bundle/docs/content/boards/live-radio-members-demo-board.md +91 -0
- package/bundle/docs/content/boards/meeting-poll-browser-demo-board.md +45 -0
- package/bundle/docs/content/boards/meeting-poll-demo-board.md +121 -0
- package/bundle/docs/content/boards/mounted-endpoint-demo-board-hkp-rt.md +50 -0
- package/bundle/docs/content/boards/nested-rhythm-demo-board.md +165 -0
- package/bundle/docs/content/boards/next-bus-board.md +38 -0
- package/bundle/docs/content/boards/next-bus-switch-board.md +44 -0
- package/bundle/docs/content/boards/night-groove-demo-board.md +110 -0
- package/bundle/docs/content/boards/noise-alert-board.md +44 -0
- package/bundle/docs/content/boards/pad-groove-demo-board.md +93 -0
- package/bundle/docs/content/boards/peer-chat-board.md +49 -0
- package/bundle/docs/content/boards/peer-chat-node-board.md +47 -0
- package/bundle/docs/content/boards/rss-radio-board.md +221 -0
- package/bundle/docs/content/boards/send-ntfy-board.md +33 -0
- package/bundle/docs/content/boards/shared-costs-demo-board.md +65 -0
- package/bundle/docs/content/boards/spectral-modifier-board.md +55 -0
- package/bundle/docs/content/boards/spotify-board.md +46 -0
- package/bundle/docs/content/boards/sql-explorer-board.md +70 -0
- package/bundle/docs/content/boards/sql-explorer-node-board.md +76 -0
- package/bundle/docs/content/boards/sql-import-board.md +37 -0
- package/bundle/docs/content/boards/swimlanes-demo-board.md +148 -0
- package/bundle/docs/content/boards/syn-mail-desk-board.md +52 -0
- package/bundle/docs/content/boards/timeline-demo-board.md +115 -0
- package/bundle/docs/content/boards/triggerpad-board.md +32 -0
- package/bundle/docs/content/boards/triggerpad-recorder-board.md +52 -0
- package/bundle/docs/content/boards/voice-assistant-demo-board.md +51 -0
- package/bundle/docs/content/concepts/assets.md +245 -0
- package/bundle/docs/content/concepts/blocks.md +300 -0
- package/bundle/docs/content/concepts/board-assistant.md +307 -0
- package/bundle/docs/content/concepts/board.md +265 -0
- package/bundle/docs/content/concepts/cloud-boards.md +803 -0
- package/bundle/docs/content/concepts/coordinator.md +297 -0
- package/bundle/docs/content/concepts/logging.md +293 -0
- package/bundle/docs/content/concepts/mounts.md +314 -0
- package/bundle/docs/content/concepts/presets.md +360 -0
- package/bundle/docs/content/concepts/remotes.md +423 -0
- package/bundle/docs/content/concepts/runtime.md +664 -0
- package/bundle/docs/content/concepts/scopes.md +256 -0
- package/bundle/docs/content/concepts/service.md +227 -0
- package/bundle/docs/content/concepts/units.md +321 -0
- package/bundle/docs/content/introduction.md +163 -0
- package/bundle/docs/content/llm/circle-text-board.json +55 -0
- package/bundle/docs/content/llm/howto-workflow.md +369 -0
- package/bundle/docs/content/repository.md +161 -0
- package/bundle/docs/content/services/aggregator.md +76 -0
- package/bundle/docs/content/services/analyzer.md +44 -0
- package/bundle/docs/content/services/ascii-art.md +58 -0
- package/bundle/docs/content/services/asset.md +88 -0
- package/bundle/docs/content/services/audio-editor.md +57 -0
- package/bundle/docs/content/services/audio-encode.md +115 -0
- package/bundle/docs/content/services/audio-io.md +173 -0
- package/bundle/docs/content/services/batcher.md +49 -0
- package/bundle/docs/content/services/board-service.md +48 -0
- package/bundle/docs/content/services/browser-sub-service.md +75 -0
- package/bundle/docs/content/services/buffer.md +70 -0
- package/bundle/docs/content/services/cache.md +92 -0
- package/bundle/docs/content/services/camera.md +85 -0
- package/bundle/docs/content/services/canvas.md +196 -0
- package/bundle/docs/content/services/changes.md +87 -0
- package/bundle/docs/content/services/chunked-file-provider.md +63 -0
- package/bundle/docs/content/services/communication-dispatcher.md +190 -0
- package/bundle/docs/content/services/configurator.md +66 -0
- package/bundle/docs/content/services/conversations.md +244 -0
- package/bundle/docs/content/services/debounce.md +45 -0
- package/bundle/docs/content/services/decrypt.md +53 -0
- package/bundle/docs/content/services/delay.md +55 -0
- package/bundle/docs/content/services/detect.md +101 -0
- package/bundle/docs/content/services/document-extract.md +174 -0
- package/bundle/docs/content/services/download.md +67 -0
- package/bundle/docs/content/services/encode.md +63 -0
- package/bundle/docs/content/services/encrypt.md +53 -0
- package/bundle/docs/content/services/fetcher.md +122 -0
- package/bundle/docs/content/services/fft.md +96 -0
- package/bundle/docs/content/services/file-source.md +67 -0
- package/bundle/docs/content/services/filesystem.md +157 -0
- package/bundle/docs/content/services/filter.md +133 -0
- package/bundle/docs/content/services/flat-map.md +62 -0
- package/bundle/docs/content/services/game-of-life.md +93 -0
- package/bundle/docs/content/services/gather.md +135 -0
- package/bundle/docs/content/services/gif-encoder.md +56 -0
- package/bundle/docs/content/services/github.md +85 -0
- package/bundle/docs/content/services/group-by.md +54 -0
- package/bundle/docs/content/services/hacker.md +79 -0
- package/bundle/docs/content/services/hash.md +59 -0
- package/bundle/docs/content/services/hold.md +182 -0
- package/bundle/docs/content/services/http-relay-client.md +48 -0
- package/bundle/docs/content/services/http-uploader.md +62 -0
- package/bundle/docs/content/services/http.md +424 -0
- package/bundle/docs/content/services/if.md +79 -0
- package/bundle/docs/content/services/ifft.md +46 -0
- package/bundle/docs/content/services/image-picker.md +50 -0
- package/bundle/docs/content/services/imap-email.md +104 -0
- package/bundle/docs/content/services/injector.md +129 -0
- package/bundle/docs/content/services/input.md +90 -0
- package/bundle/docs/content/services/iterator.md +186 -0
- package/bundle/docs/content/services/join.md +153 -0
- package/bundle/docs/content/services/limit.md +47 -0
- package/bundle/docs/content/services/local-storage.md +47 -0
- package/bundle/docs/content/services/looper.md +62 -0
- package/bundle/docs/content/services/lz-compress.md +52 -0
- package/bundle/docs/content/services/map.md +257 -0
- package/bundle/docs/content/services/match-filter.md +38 -0
- package/bundle/docs/content/services/microphone-monitor.md +66 -0
- package/bundle/docs/content/services/monitor.md +67 -0
- package/bundle/docs/content/services/ollama.md +116 -0
- package/bundle/docs/content/services/openai-prompt.md +74 -0
- package/bundle/docs/content/services/output.md +107 -0
- package/bundle/docs/content/services/peer-socket.md +61 -0
- package/bundle/docs/content/services/qr-code.md +48 -0
- package/bundle/docs/content/services/queue.md +201 -0
- package/bundle/docs/content/services/reduce.md +51 -0
- package/bundle/docs/content/services/rss.md +232 -0
- package/bundle/docs/content/services/select.md +47 -0
- package/bundle/docs/content/services/sign.md +53 -0
- package/bundle/docs/content/services/skill-router.md +154 -0
- package/bundle/docs/content/services/smooth.md +59 -0
- package/bundle/docs/content/services/smtp-email.md +129 -0
- package/bundle/docs/content/services/sort.md +48 -0
- package/bundle/docs/content/services/sound.md +87 -0
- package/bundle/docs/content/services/speech-synth.md +46 -0
- package/bundle/docs/content/services/speech-to-text.md +172 -0
- package/bundle/docs/content/services/spotify.md +77 -0
- package/bundle/docs/content/services/spread.md +111 -0
- package/bundle/docs/content/services/sql.md +491 -0
- package/bundle/docs/content/services/state.md +57 -0
- package/bundle/docs/content/services/static.md +47 -0
- package/bundle/docs/content/services/stopper.md +55 -0
- package/bundle/docs/content/services/storage.md +155 -0
- package/bundle/docs/content/services/store.md +255 -0
- package/bundle/docs/content/services/sub-service.md +152 -0
- package/bundle/docs/content/services/switch.md +67 -0
- package/bundle/docs/content/services/telegram-listener.md +76 -0
- package/bundle/docs/content/services/text-generation.md +390 -0
- package/bundle/docs/content/services/text-to-speech.md +130 -0
- package/bundle/docs/content/services/timeline.md +333 -0
- package/bundle/docs/content/services/timer.md +113 -0
- package/bundle/docs/content/services/tracks.md +207 -0
- package/bundle/docs/content/services/trigger-pad.md +68 -0
- package/bundle/docs/content/services/uuid-generator.md +48 -0
- package/bundle/docs/content/services/wav-reader.md +66 -0
- package/bundle/docs/content/services/websocket.md +189 -0
- package/bundle/docs/content/services/workflow-board-builder.md +65 -0
- package/bundle/docs/content/services/xy-pad.md +60 -0
- package/bundle/docs/content/targets.md +434 -0
- package/bundle/docs/content/testing.md +263 -0
- package/bundle/docs/content/vocabulary.md +171 -0
- package/bundle/hkp-frontend/src/runtime/browser/BrowserRegistry.tsx +141 -0
- package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntime.tsx +202 -0
- package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntimeApi.ts +306 -0
- package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntimeApp.ts +310 -0
- package/bundle/hkp-frontend/src/runtime/browser/BrowserRuntimeScope.ts +500 -0
- package/bundle/hkp-frontend/src/runtime/browser/UIRegistry.ts +150 -0
- package/bundle/hkp-frontend/src/runtime/browser/assetResolver.ts +123 -0
- package/bundle/hkp-frontend/src/runtime/browser/pipelineNames.ts +65 -0
- package/bundle/hkp-frontend/src/runtime/browser/registry/Default.ts +237 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Aggregator.ts +127 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AggregatorUI.tsx +83 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Analyzer.tsx +43 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/Bars.tsx +33 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/HorizontalSpectrogram.tsx +53 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/VerticalSpectogram.tsx +56 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/Waveform.tsx +109 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AnalyzerUI/index.tsx +99 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AsciiArt.ts +119 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AsciiArtUI.tsx +131 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Asset.ts +125 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AssetUI.tsx +37 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioDeviceSettings.tsx +56 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioEditor.ts +129 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioEditorUI.tsx +549 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioInput.ts +298 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioInputUI.tsx +257 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioOutput.ts +189 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/AudioOutputUI.tsx +63 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Batcher.ts +11 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BoardService.tsx +86 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BoardServiceUI.tsx +410 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BrowserGather.ts +311 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BrowserIterator.ts +167 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BrowserSubService.tsx +583 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BrowserSubServiceUI.tsx +187 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/BrowserTracks.tsx +477 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Buffer.ts +11 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Cache.ts +134 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CacheUI.tsx +125 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Camera.ts +90 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CameraUI.tsx +321 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Canvas.ts +139 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/canvasDraw.ts +543 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/canvasUtils.ts +39 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/index.tsx +287 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/tests/canvasDraw.test.ts +355 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/tests/canvasUtils.test.ts +89 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/CanvasUI/tests/fullscreen.test.tsx +26 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Changes.ts +201 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/ChangesUI.tsx +85 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/ChunkedFileProvider.tsx +183 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Configurator.ts +258 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/ConfiguratorUI.tsx +83 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/ConsideredHacker.tsx +28 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Debounce.ts +75 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/DebounceUI.tsx +70 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Decrypt.ts +127 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/DecryptUI.tsx +39 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Delay.tsx +110 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Detect.ts +214 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/DetectUI.tsx +86 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Download.ts +120 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/DownloadUI.tsx +61 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Encode.ts +138 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/EncodeUI.tsx +52 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Encrypt.ts +125 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/EncryptUI.tsx +39 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FFT.tsx +238 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FFTUI.tsx +112 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FeedbackService.ts +247 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FeedbackServiceUI.tsx +35 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Fetcher.tsx +232 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FetcherUI.tsx +154 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FileSource.tsx +171 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Filter.tsx +18 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FilterUI.tsx +89 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FlatMap.ts +68 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/FlatMapUI.tsx +38 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLife.ts +210 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLifeRenderer.ts +182 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLifeRendererUI.tsx +48 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GameOfLifeUI.tsx +58 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GatherUI.tsx +84 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GifEncoder.tsx +651 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GithubAPI.ts +294 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GithubComponents.tsx +389 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GithubSink.tsx +109 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GithubSinkUI.tsx +143 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GithubSource.tsx +86 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GithubSourceUI.tsx +162 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/GroupBy.ts +11 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HTTPUploader.ts +102 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Hacker.ts +73 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HackerUI.tsx +134 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Hash.ts +134 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HashUI.tsx +45 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Hold.ts +288 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HoldUI.tsx +43 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HttpClient.ts +558 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HttpClientUI.tsx +212 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/HttpUploaderTokenInjector.ts +149 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/IfService.ts +231 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/IfServiceUI.tsx +50 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/ImagePicker.tsx +118 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Injector.ts +61 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/InjectorUI.tsx +389 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Input.ts +214 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/InputUI.tsx +71 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/IteratorUI.tsx +59 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/LZCompress.ts +63 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Limit.ts +39 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/LimitUI.tsx +41 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/LocalStorage.ts +65 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/LocalStorageUI.tsx +72 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Map.ts +14 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/MapUI.tsx +334 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/MapUIModeAssist.tsx +61 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/MatchFilter.ts +11 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/MicrophoneMonitor.ts +190 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/MicrophoneMonitorUI.tsx +94 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Monitor.tsx +15 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/MonitorUI.tsx +281 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPrompt.ts +237 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/BusyIndicator.tsx +18 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/PromptInput.tsx +71 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/StreamingPreview.tsx +24 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OllamaPromptUI/index.tsx +156 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OpenAIPrompt.ts +254 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OpenAIPromptUI.tsx +189 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Output.tsx +145 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/OutputUI.tsx +118 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/PeerChatTemplate.json +43 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/PeerConnection.ts +260 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/PeerSocket.tsx +268 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/PeerSocketReceiverTemplate.json +29 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/PeerSocketUI.tsx +341 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/PlaceholderUI.tsx +72 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/QrCode.ts +63 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/QrCodeUI.tsx +197 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Select.ts +40 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SelectUI.tsx +41 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/ServiceBase.ts +50 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SetRuntimeVariable.ts +65 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SetRuntimeVariableUI.tsx +50 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Sign.ts +182 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SignUI.tsx +55 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Smooth.ts +101 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SmoothUI.tsx +50 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Sort.ts +59 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SortUI.tsx +61 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Sound.ts +541 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SoundUI.tsx +183 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SpeechSynth.ts +56 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SpeechSynthUI.tsx +108 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Spotify.tsx +111 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SpotifyAPI.ts +113 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SpotifyComponents.tsx +104 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SpotifyUI.tsx +186 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Spread.ts +117 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SpreadUI.tsx +38 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Sql.ts +448 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SqlInspector.tsx +332 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SqlUI.tsx +226 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/State.ts +149 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Stopper.ts +29 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Switch.tsx +419 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/SwitchUI.tsx +171 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TickRuleDelta.ts +101 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TickRuleDeltaUI.tsx +56 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Timeline.ts +709 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/TimelinePanel.tsx +79 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/TimelineRows.tsx +574 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/Transport.tsx +141 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/index.tsx +119 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/model.ts +425 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimelineUI/parts.tsx +708 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/Timer.ts +15 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TimerUI.tsx +213 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TracksUI.tsx +81 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TriggerPad.ts +108 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/TriggerPadUI.tsx +160 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/UuidGenerator.ts +74 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/UuidGeneratorUI.tsx +59 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/WaveformDisplay.tsx +104 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/WebsocketClient.ts +114 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/WebsocketClientUI.tsx +42 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/WorkflowBoardBuilder.ts +499 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/WorkflowBoardBuilderUI.tsx +521 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/XYPad.ts +68 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/XYPadUI.tsx +274 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/audio/audioHelper.ts +36 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Batcher.ts +76 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Buffer.ts +142 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Filter.ts +125 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/GroupBy.ts +101 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Map.ts +543 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/MatchFilter.ts +49 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Monitor.ts +75 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Reduce.ts +74 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/Timer.ts +342 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/bundle.js +7375 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/eval.ts +208 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/expressionEval.ts +223 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/helpers.ts +10 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/base/index.ts +37 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/camera/videoCapture.ts +78 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/changes-modes.ts +9 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/colorpalette.ts +26 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/detect/DetectionPreview.tsx +76 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/detect/mediapipe.ts +34 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/detect/models/README.md +14 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/detect/models/blaze_face_short_range.tflite +0 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/detect-modes.ts +7 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/encode-modes.ts +10 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/helpers.ts +300 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/http-client-methods.ts +10 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/sql-database.ts +594 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/sql-dump.ts +192 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/sql-inspect.ts +130 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/sql-inspector.css +155 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/sql-modes.ts +27 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/TESTING_APPROACH.md +169 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/__snapshots__/service-ui.future-enhancements.test.tsx.snap +5 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/audio-input-permissions.test.ts +42 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/audiolizeLanes.test.ts +70 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/browser-scopes.test.ts +305 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/cache-service.test.ts +53 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/camera-video-capture.test.ts +24 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/changes-service.test.ts +133 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/crypto-secrets.test.ts +196 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/detect-service.test.ts +119 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/download.test.ts +100 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/expressionEval.test.ts +117 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/fetcher-panel.test.tsx +35 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/fetcher-service.test.ts +80 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/filter-service.test.ts +37 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/github-secrets.test.ts +108 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/group-by-board.test.ts +42 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/hold-service.test.ts +199 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/http-client-service.test.ts +474 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/http-uploader-token-injector.test.ts +152 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/iterator-gather-service.test.ts +277 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/map-service.test.ts +1047 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/map-ui.test.tsx +70 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/nested-rhythm-board.test.ts +311 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/night-groove-board.test.ts +290 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/pad-groove-board.test.ts +230 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/peer-host-discovery.test.ts +77 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/peer-socket-discovery.test.ts +69 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/pipeline-names.test.ts +63 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/secret-canary.test.ts +121 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-modules.contract.test.ts +229 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.advanced.test.tsx +670 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.future-enhancements.test.tsx +219 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.integration.test.tsx +432 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/service-ui.smoke.test.tsx +140 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/sound-service.test.ts +293 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/spread-service.test.ts +137 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql-dump.test.ts +172 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql-inspect.test.ts +163 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql-inspector.test.tsx +121 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/sql.test.ts +702 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/sub-service-in-block.test.tsx +84 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/switch-service.test.ts +254 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-board.test.ts +218 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-service.test.ts +1002 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-ui-model.test.ts +230 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/timeline-ui.test.tsx +371 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/timer-service.test.ts +902 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/tracks-service.test.ts +275 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/tracks-ui.test.tsx +126 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/triggerpad-recorder-board.test.ts +100 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/tests/uuid-generator-service.test.ts +214 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/timeline-core.ts +410 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/DefaultWorkflowBoard.ts +90 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/RefinementSession.ts +121 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/SystemPromptCatalog.ts +245 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/catalog/browser-service-specs.json +110 -0
- package/bundle/hkp-frontend/src/runtime/browser/services/workflow-prompt/catalog/runtime-capabilities.json +37 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/asset-service.test.ts +73 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/board-persistence.integration.test.tsx +391 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/browser-runtime.identity-binding.test.tsx +81 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/demo-boards.regression.test.tsx +386 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/failed-call-lifecycle.test.ts +56 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/http-client.integration.test.ts +146 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/nested-run.integration.test.ts +415 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/replay-next.test.ts +391 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/rerun.test.ts +71 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/run-no-input.test.ts +72 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-add.integration.test.tsx +256 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-operations.integration.test.tsx +310 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-processing.integration.test.ts +311 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-removal.integration.test.tsx +454 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/runtime-update.identity.integration.test.tsx +145 -0
- package/bundle/hkp-frontend/src/runtime/browser/tests/service-operations.integration.test.tsx +511 -0
- package/bundle/hkp-node/src/address.ts +72 -0
- package/bundle/hkp-node/src/assets.ts +582 -0
- package/bundle/hkp-node/src/auth.ts +369 -0
- package/bundle/hkp-node/src/callReport.ts +281 -0
- package/bundle/hkp-node/src/coordinator/auth.ts +85 -0
- package/bundle/hkp-node/src/coordinator/binaryFrame.ts +189 -0
- package/bundle/hkp-node/src/coordinator/boardStore.ts +0 -0
- package/bundle/hkp-node/src/coordinator/bridge.ts +242 -0
- package/bundle/hkp-node/src/coordinator/bridgeProtocol.ts +200 -0
- package/bundle/hkp-node/src/coordinator/coordinator.ts +594 -0
- package/bundle/hkp-node/src/coordinator/facadeAccess.ts +426 -0
- package/bundle/hkp-node/src/coordinator/fileBoardStore.ts +159 -0
- package/bundle/hkp-node/src/coordinator/frameLimits.ts +41 -0
- package/bundle/hkp-node/src/coordinator/index.ts +12 -0
- package/bundle/hkp-node/src/coordinator/join.ts +62 -0
- package/bundle/hkp-node/src/coordinator/logStore.ts +335 -0
- package/bundle/hkp-node/src/coordinator/members.ts +133 -0
- package/bundle/hkp-node/src/coordinator/mount.ts +124 -0
- package/bundle/hkp-node/src/coordinator/participantProtocol.ts +169 -0
- package/bundle/hkp-node/src/coordinator/participants.ts +666 -0
- package/bundle/hkp-node/src/coordinator/router.ts +416 -0
- package/bundle/hkp-node/src/coordinator/session.ts +1610 -0
- package/bundle/hkp-node/src/coordinator/types.ts +95 -0
- package/bundle/hkp-node/src/coordinatorLinks.ts +712 -0
- package/bundle/hkp-node/src/credentialedFetch.ts +122 -0
- package/bundle/hkp-node/src/egress.ts +344 -0
- package/bundle/hkp-node/src/expressionEval.ts +223 -0
- package/bundle/hkp-node/src/index.ts +470 -0
- package/bundle/hkp-node/src/instance.ts +172 -0
- package/bundle/hkp-node/src/mounts.ts +296 -0
- package/bundle/hkp-node/src/origins.ts +201 -0
- package/bundle/hkp-node/src/reset.ts +187 -0
- package/bundle/hkp-node/src/runtime.ts +1345 -0
- package/bundle/hkp-node/src/secrets.ts +292 -0
- package/bundle/hkp-node/src/server.ts +2120 -0
- package/bundle/hkp-node/src/services/asset.ts +150 -0
- package/bundle/hkp-node/src/services/claudeModels.ts +370 -0
- package/bundle/hkp-node/src/services/communication-dispatcher.ts +735 -0
- package/bundle/hkp-node/src/services/conversations.ts +914 -0
- package/bundle/hkp-node/src/services/database.ts +386 -0
- package/bundle/hkp-node/src/services/document-extract.ts +575 -0
- package/bundle/hkp-node/src/services/expression.ts +417 -0
- package/bundle/hkp-node/src/services/fileStore.ts +369 -0
- package/bundle/hkp-node/src/services/filesystem.ts +280 -0
- package/bundle/hkp-node/src/services/gather.ts +335 -0
- package/bundle/hkp-node/src/services/hold.ts +275 -0
- package/bundle/hkp-node/src/services/http-client.ts +525 -0
- package/bundle/hkp-node/src/services/http-server.ts +1222 -0
- package/bundle/hkp-node/src/services/imap-email.ts +627 -0
- package/bundle/hkp-node/src/services/injector.ts +135 -0
- package/bundle/hkp-node/src/services/iterator.ts +203 -0
- package/bundle/hkp-node/src/services/join.ts +226 -0
- package/bundle/hkp-node/src/services/map.ts +632 -0
- package/bundle/hkp-node/src/services/monitor.ts +128 -0
- package/bundle/hkp-node/src/services/nested-pipeline.ts +405 -0
- package/bundle/hkp-node/src/services/peer-server.ts +268 -0
- package/bundle/hkp-node/src/services/queue-store.ts +301 -0
- package/bundle/hkp-node/src/services/queue.ts +316 -0
- package/bundle/hkp-node/src/services/recordStore.ts +341 -0
- package/bundle/hkp-node/src/services/rss-parse.ts +281 -0
- package/bundle/hkp-node/src/services/rss.ts +392 -0
- package/bundle/hkp-node/src/services/smtp-email.ts +398 -0
- package/bundle/hkp-node/src/services/spread.ts +153 -0
- package/bundle/hkp-node/src/services/sql-dump.ts +192 -0
- package/bundle/hkp-node/src/services/sql.ts +429 -0
- package/bundle/hkp-node/src/services/stopper.ts +69 -0
- package/bundle/hkp-node/src/services/storage.ts +332 -0
- package/bundle/hkp-node/src/services/store.ts +609 -0
- package/bundle/hkp-node/src/services/stream.ts +367 -0
- package/bundle/hkp-node/src/services/sub-service.ts +600 -0
- package/bundle/hkp-node/src/services/telegram-listener.ts +263 -0
- package/bundle/hkp-node/src/services/telegram-sender.ts +136 -0
- package/bundle/hkp-node/src/services/text-generation.ts +1249 -0
- package/bundle/hkp-node/src/services/timer.ts +273 -0
- package/bundle/hkp-node/src/services/tracks.ts +381 -0
- package/bundle/hkp-node/src/services/websocket-reader.ts +364 -0
- package/bundle/hkp-node/src/types.ts +465 -0
- package/bundle/hkp-node/src/wsTickets.ts +77 -0
- package/bundle/hkp-node/src/yas.ts +95 -0
- package/bundle/hkp-python/src/hkp/__init__.py +1 -0
- package/bundle/hkp-python/src/hkp/__main__.py +241 -0
- package/bundle/hkp-python/src/hkp/address.py +56 -0
- package/bundle/hkp-python/src/hkp/assets.py +439 -0
- package/bundle/hkp-python/src/hkp/auth.py +252 -0
- package/bundle/hkp-python/src/hkp/binary_frame.py +100 -0
- package/bundle/hkp-python/src/hkp/call_report.py +201 -0
- package/bundle/hkp-python/src/hkp/coordinator_links.py +667 -0
- package/bundle/hkp-python/src/hkp/data.py +118 -0
- package/bundle/hkp-python/src/hkp/egress.py +310 -0
- package/bundle/hkp-python/src/hkp/mount.py +46 -0
- package/bundle/hkp-python/src/hkp/mounts.py +288 -0
- package/bundle/hkp-python/src/hkp/origins.py +169 -0
- package/bundle/hkp-python/src/hkp/runtime.py +1131 -0
- package/bundle/hkp-python/src/hkp/secrets.py +261 -0
- package/bundle/hkp-python/src/hkp/server.py +1714 -0
- package/bundle/hkp-python/src/hkp/services/__init__.py +0 -0
- package/bundle/hkp-python/src/hkp/services/asset.py +123 -0
- package/bundle/hkp-python/src/hkp/services/audio_encode.py +190 -0
- package/bundle/hkp-python/src/hkp/services/expression.py +942 -0
- package/bundle/hkp-python/src/hkp/services/gather.py +266 -0
- package/bundle/hkp-python/src/hkp/services/hold.py +246 -0
- package/bundle/hkp-python/src/hkp/services/http_client.py +444 -0
- package/bundle/hkp-python/src/hkp/services/http_server.py +790 -0
- package/bundle/hkp-python/src/hkp/services/iterator.py +141 -0
- package/bundle/hkp-python/src/hkp/services/join.py +173 -0
- package/bundle/hkp-python/src/hkp/services/map_service.py +452 -0
- package/bundle/hkp-python/src/hkp/services/monitor.py +99 -0
- package/bundle/hkp-python/src/hkp/services/nested_pipeline.py +278 -0
- package/bundle/hkp-python/src/hkp/services/skill_router.py +388 -0
- package/bundle/hkp-python/src/hkp/services/speech_to_text.py +186 -0
- package/bundle/hkp-python/src/hkp/services/spread.py +114 -0
- package/bundle/hkp-python/src/hkp/services/stopper.py +59 -0
- package/bundle/hkp-python/src/hkp/services/sub_service.py +417 -0
- package/bundle/hkp-python/src/hkp/services/text_generation.py +498 -0
- package/bundle/hkp-python/src/hkp/services/text_to_speech.py +237 -0
- package/bundle/hkp-python/src/hkp/services/timer.py +267 -0
- package/bundle/hkp-python/src/hkp/services/tracks.py +251 -0
- package/bundle/hkp-python/src/hkp/types.py +412 -0
- package/bundle/hkp-python/src/hkp/ws_tickets.py +54 -0
- package/bundle/hkp-python/src/hkp/yas.py +192 -0
- package/bundle/hkp-rt/lib/CMakeLists.txt +193 -0
- package/bundle/hkp-rt/lib/hkp-bundles/CMakeLists.txt +55 -0
- package/bundle/hkp-rt/lib/hkp-bundles/plugin_register.cpp +14 -0
- package/bundle/hkp-rt/lib/include/app.h +201 -0
- package/bundle/hkp-rt/lib/include/assets.h +239 -0
- package/bundle/hkp-rt/lib/include/auth.h +167 -0
- package/bundle/hkp-rt/lib/include/call_report.h +197 -0
- package/bundle/hkp-rt/lib/include/coordinator_links.h +127 -0
- package/bundle/hkp-rt/lib/include/discovery_hooks.h +29 -0
- package/bundle/hkp-rt/lib/include/egress.h +379 -0
- package/bundle/hkp-rt/lib/include/files.h +275 -0
- package/bundle/hkp-rt/lib/include/log_entry.h +131 -0
- package/bundle/hkp-rt/lib/include/mounts.h +139 -0
- package/bundle/hkp-rt/lib/include/origins.h +363 -0
- package/bundle/hkp-rt/lib/include/registry.h +119 -0
- package/bundle/hkp-rt/lib/include/secrets.h +414 -0
- package/bundle/hkp-rt/lib/include/server.h +122 -0
- package/bundle/hkp-rt/lib/include/service.h +190 -0
- package/bundle/hkp-rt/lib/include/slot_store.h +41 -0
- package/bundle/hkp-rt/lib/include/standalone_config.h +253 -0
- package/bundle/hkp-rt/lib/include/types/audio.h +3 -0
- package/bundle/hkp-rt/lib/include/types/data.h +152 -0
- package/bundle/hkp-rt/lib/include/types/message.h +56 -0
- package/bundle/hkp-rt/lib/include/types/models.h +154 -0
- package/bundle/hkp-rt/lib/include/types/owns_me.h +19 -0
- package/bundle/hkp-rt/lib/include/types/ringbuffer.h +86 -0
- package/bundle/hkp-rt/lib/include/types/types.h +33 -0
- package/bundle/hkp-rt/lib/include/types/validation.h +205 -0
- package/bundle/hkp-rt/lib/src/address.h +88 -0
- package/bundle/hkp-rt/lib/src/app.cpp +591 -0
- package/bundle/hkp-rt/lib/src/assets.cpp +686 -0
- package/bundle/hkp-rt/lib/src/binary_frame.h +154 -0
- package/bundle/hkp-rt/lib/src/common/expression.h +1481 -0
- package/bundle/hkp-rt/lib/src/common/inja.h +36 -0
- package/bundle/hkp-rt/lib/src/common/link_socket.cpp +437 -0
- package/bundle/hkp-rt/lib/src/common/link_socket.h +97 -0
- package/bundle/hkp-rt/lib/src/common/realtime_wakeup.h +120 -0
- package/bundle/hkp-rt/lib/src/common/stream_broadcast.h +250 -0
- package/bundle/hkp-rt/lib/src/common/string_util.h +31 -0
- package/bundle/hkp-rt/lib/src/common/websocket_client_session.cpp +217 -0
- package/bundle/hkp-rt/lib/src/common/websocket_client_session.h +37 -0
- package/bundle/hkp-rt/lib/src/common/websocket_config.h +119 -0
- package/bundle/hkp-rt/lib/src/common/websocket_protocol.h +32 -0
- package/bundle/hkp-rt/lib/src/common/websocket_server.cpp +82 -0
- package/bundle/hkp-rt/lib/src/common/websocket_server.h +57 -0
- package/bundle/hkp-rt/lib/src/common/websocket_server_listener.cpp +115 -0
- package/bundle/hkp-rt/lib/src/common/websocket_server_listener.h +35 -0
- package/bundle/hkp-rt/lib/src/common/websocket_server_session.cpp +172 -0
- package/bundle/hkp-rt/lib/src/common/websocket_server_session.h +53 -0
- package/bundle/hkp-rt/lib/src/common.h +13 -0
- package/bundle/hkp-rt/lib/src/coordinator_links.cpp +1142 -0
- package/bundle/hkp-rt/lib/src/discovery/discovery.cpp +707 -0
- package/bundle/hkp-rt/lib/src/discovery/discovery.h +89 -0
- package/bundle/hkp-rt/lib/src/http/auth.cpp +569 -0
- package/bundle/hkp-rt/lib/src/http/front_door.cpp +518 -0
- package/bundle/hkp-rt/lib/src/http/front_door.h +131 -0
- package/bundle/hkp-rt/lib/src/http/server.cpp +1539 -0
- package/bundle/hkp-rt/lib/src/http/ws_tickets.h +125 -0
- package/bundle/hkp-rt/lib/src/mount.h +63 -0
- package/bundle/hkp-rt/lib/src/process_context.h +335 -0
- package/bundle/hkp-rt/lib/src/process_depth.h +20 -0
- package/bundle/hkp-rt/lib/src/registry.cpp +233 -0
- package/bundle/hkp-rt/lib/src/runtime.cpp +986 -0
- package/bundle/hkp-rt/lib/src/runtime.h +225 -0
- package/bundle/hkp-rt/lib/src/runtime_host.h +180 -0
- package/bundle/hkp-rt/lib/src/service.cpp +315 -0
- package/bundle/hkp-rt/lib/src/services/asset.h +185 -0
- package/bundle/hkp-rt/lib/src/services/audio_encode.cpp +372 -0
- package/bundle/hkp-rt/lib/src/services/audio_encode.h +97 -0
- package/bundle/hkp-rt/lib/src/services/cache.h +362 -0
- package/bundle/hkp-rt/lib/src/services/cache_subservices.h +463 -0
- package/bundle/hkp-rt/lib/src/services/core_audio.cpp +384 -0
- package/bundle/hkp-rt/lib/src/services/core_audio.h +22 -0
- package/bundle/hkp-rt/lib/src/services/core_input.h +337 -0
- package/bundle/hkp-rt/lib/src/services/core_output.h +370 -0
- package/bundle/hkp-rt/lib/src/services/ffmpeg/detail.cpp +749 -0
- package/bundle/hkp-rt/lib/src/services/ffmpeg/detail.h +29 -0
- package/bundle/hkp-rt/lib/src/services/ffmpeg/ffmpeg.cpp +193 -0
- package/bundle/hkp-rt/lib/src/services/ffmpeg/ffmpeg.h +40 -0
- package/bundle/hkp-rt/lib/src/services/ffmpeg/types.h +120 -0
- package/bundle/hkp-rt/lib/src/services/fft_service.h +190 -0
- package/bundle/hkp-rt/lib/src/services/filesystem.h +309 -0
- package/bundle/hkp-rt/lib/src/services/filter.h +208 -0
- package/bundle/hkp-rt/lib/src/services/gather.h +272 -0
- package/bundle/hkp-rt/lib/src/services/hold.h +304 -0
- package/bundle/hkp-rt/lib/src/services/http_client.cpp +347 -0
- package/bundle/hkp-rt/lib/src/services/http_client.h +67 -0
- package/bundle/hkp-rt/lib/src/services/http_client_impl.h +45 -0
- package/bundle/hkp-rt/lib/src/services/http_client_template_examples.md +202 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_listener.cpp +130 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_listener.h +33 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_server.cpp +351 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_server.h +79 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_server_impl.cpp +230 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_server_impl.h +64 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_server_subservices.cpp +950 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_server_subservices.h +253 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_session.cpp +495 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_session.h +169 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_stream_listener.cpp +270 -0
- package/bundle/hkp-rt/lib/src/services/http_server/http_stream_listener.h +104 -0
- package/bundle/hkp-rt/lib/src/services/http_server/request_decode.h +164 -0
- package/bundle/hkp-rt/lib/src/services/if_service.h +210 -0
- package/bundle/hkp-rt/lib/src/services/ifft_service.h +198 -0
- package/bundle/hkp-rt/lib/src/services/injector.h +162 -0
- package/bundle/hkp-rt/lib/src/services/iterator.h +201 -0
- package/bundle/hkp-rt/lib/src/services/map.h +641 -0
- package/bundle/hkp-rt/lib/src/services/monitor.h +161 -0
- package/bundle/hkp-rt/lib/src/services/mp3_frames.h +119 -0
- package/bundle/hkp-rt/lib/src/services/mp4_to_wav.cpp +281 -0
- package/bundle/hkp-rt/lib/src/services/mp4_to_wav.h +263 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_registry.cpp +88 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_registry.h +43 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_server.h +163 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_listener.cpp +133 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_listener.h +46 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_session.cpp +165 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_server_session.h +44 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_ws_session.cpp +184 -0
- package/bundle/hkp-rt/lib/src/services/peer_server/peer_ws_session.h +55 -0
- package/bundle/hkp-rt/lib/src/services/receiver_session.h +172 -0
- package/bundle/hkp-rt/lib/src/services/root_certificates.h +3959 -0
- package/bundle/hkp-rt/lib/src/services/sha256_openssl.h +49 -0
- package/bundle/hkp-rt/lib/src/services/speech_http.h +306 -0
- package/bundle/hkp-rt/lib/src/services/speech_to_text.cpp +595 -0
- package/bundle/hkp-rt/lib/src/services/speech_to_text.h +69 -0
- package/bundle/hkp-rt/lib/src/services/static.cpp +45 -0
- package/bundle/hkp-rt/lib/src/services/static.h +41 -0
- package/bundle/hkp-rt/lib/src/services/stopper.h +72 -0
- package/bundle/hkp-rt/lib/src/services/sub_service.h +286 -0
- package/bundle/hkp-rt/lib/src/services/text_generation.cpp +1132 -0
- package/bundle/hkp-rt/lib/src/services/text_generation.h +71 -0
- package/bundle/hkp-rt/lib/src/services/text_to_speech.cpp +853 -0
- package/bundle/hkp-rt/lib/src/services/text_to_speech.h +97 -0
- package/bundle/hkp-rt/lib/src/services/timer.h +300 -0
- package/bundle/hkp-rt/lib/src/services/tracks.h +397 -0
- package/bundle/hkp-rt/lib/src/services/tts_inflect.cpp +149 -0
- package/bundle/hkp-rt/lib/src/services/tts_inflect.h +82 -0
- package/bundle/hkp-rt/lib/src/services/wav_reader.h +213 -0
- package/bundle/hkp-rt/lib/src/services/websocket_client_service.h +182 -0
- package/bundle/hkp-rt/lib/src/services/websocket_reader.h +148 -0
- package/bundle/hkp-rt/lib/src/services/websocket_server_service.h +196 -0
- package/bundle/hkp-rt/lib/src/services/websocket_writer.cpp +641 -0
- package/bundle/hkp-rt/lib/src/services/websocket_writer.h +117 -0
- package/bundle/hkp-rt/lib/src/sub_runtime.cpp +234 -0
- package/bundle/hkp-rt/lib/src/sub_runtime.h +160 -0
- package/bundle/hkp-rt/lib/src/types/data.cpp +237 -0
- package/bundle/hkp-rt/lib/src/types/message.cpp +148 -0
- package/bundle/hkp-rt/lib/src/types/models.cpp +83 -0
- package/bundle/hkp-rt/lib/src/types/ringbuffer.cpp +336 -0
- package/bundle/hkp-rt/lib/src/uuid.h +12 -0
- package/bundle/readymade-mcp-commits.json +5 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +79 -0
- package/dist/git.d.ts +8 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +53 -0
- package/dist/http.d.ts +17 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +130 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/repository.d.ts +49 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +452 -0
- package/dist/schemas.d.ts +156 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +43 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +83 -0
- package/dist/types.d.ts +63 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +20 -0
- package/dist/validation.d.ts +9 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +101 -0
- package/package.json +52 -4
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# Board JSON
|
|
2
|
+
|
|
3
|
+
Every board is a single JSON document — readable, diffable, and the whole of what a board is.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The shape
|
|
8
|
+
|
|
9
|
+
Two keys carry a board, and they are the two the loader actually insists on
|
|
10
|
+
(`isBoardDescriptor` checks for these and nothing else):
|
|
11
|
+
|
|
12
|
+
| Key | |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `runtimes` | an ordered array of execution environments. **Order is the chain**: the result of one becomes the input of the next |
|
|
15
|
+
| `services` | a map from runtime id to that runtime's ordered service list. **Order is the pipeline** |
|
|
16
|
+
|
|
17
|
+
Everything else is optional:
|
|
18
|
+
|
|
19
|
+
| Key | |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `boardName` | display name |
|
|
22
|
+
| `description` | a sentence about the board, shown where boards are listed |
|
|
23
|
+
| `facade` | the app-like surface of widgets drawn over the board |
|
|
24
|
+
| `unit` | what this board imports and exports, if it is used as a unit |
|
|
25
|
+
| `units` | the boards this one is assembled from → `concepts/units.md` |
|
|
26
|
+
| `blocks` | services defined once and used by reference wherever a pipeline names them → `concepts/blocks.md` |
|
|
27
|
+
| `assets` | content — a page, a script, an image — declared once as descriptors and named from service state as `hkp-asset://<id>` → `concepts/assets.md` |
|
|
28
|
+
| `registry` | what a runtime reported it could build. Written by machinery, not authored |
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"boardName": "My Board",
|
|
33
|
+
"description": "optional, shown in the board list",
|
|
34
|
+
"runtimes": [ /* runtime descriptors, in chain order */ ],
|
|
35
|
+
"services": {
|
|
36
|
+
"<runtimeId>": [ /* service instances, in pipeline order */ ]
|
|
37
|
+
},
|
|
38
|
+
"facade": { /* optional */ },
|
|
39
|
+
"units": [ /* optional */ ]
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
There is no version field and no schema URL. A board is read by the code that
|
|
44
|
+
holds these types (`hkp-frontend/src/types.ts`), and unknown keys are carried
|
|
45
|
+
along rather than rejected.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Runtime descriptor
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"id": "my-runtime",
|
|
54
|
+
"name": "My Runtime",
|
|
55
|
+
"type": "rest",
|
|
56
|
+
"url": "https://server.example.com",
|
|
57
|
+
"color": "#7c3aed",
|
|
58
|
+
"state": { "minimized": false, "wrapServices": true }
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| Field | |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `id` | **required.** The stable key everything else in the document uses — the `services` map, mount references, the chain |
|
|
65
|
+
| `name` | **required.** A display label, and what `processRuntimeByName` matches |
|
|
66
|
+
| `type` | **required.** `browser`, `rest` or `graphql` |
|
|
67
|
+
| `url` | for a remote runtime: an address the person wrote |
|
|
68
|
+
| `remote` | for a remote runtime: the **name** of a runtime server, looked up among the remotes the client opening the board keeps |
|
|
69
|
+
| `color`, `bundles` | presentation, and plugin libraries to load. Beside `state`, not inside it |
|
|
70
|
+
| `state` | per-runtime settings — see below |
|
|
71
|
+
|
|
72
|
+
**Two older spellings still load**: `realtime` means `rest` and `remote` means
|
|
73
|
+
`graphql`. Boards in the wild carry them, so anything comparing a type should
|
|
74
|
+
compare canonical forms (`toCanonicalRuntimeClassType`).
|
|
75
|
+
|
|
76
|
+
A remote runtime carries **exactly one** of `url` and `remote`. Both is an
|
|
77
|
+
error, not a preference: a name resolves differently for each
|
|
78
|
+
person, so a board that could fall back from a name to an address would give
|
|
79
|
+
whoever wrote it two attempts at making a client dial something. A board with a
|
|
80
|
+
`url` and nothing else is valid forever — nothing here asks an existing board to
|
|
81
|
+
change.
|
|
82
|
+
|
|
83
|
+
Three names are the same in every board that uses them: `embedded`, the hkp-rt
|
|
84
|
+
the Readymade app that opened the board embeds, and `node` and `python`, the
|
|
85
|
+
hkp-node and the hkp-python the person opening it keeps under those names. A
|
|
86
|
+
board meant to be handed on uses them rather than an address, which is one
|
|
87
|
+
person's → `concepts/remotes.md`.
|
|
88
|
+
|
|
89
|
+
The address a `remote` resolves to is **never written into the
|
|
90
|
+
document**. It lives with the running board on the client that resolved it, and
|
|
91
|
+
a save writes the name back → `concepts/remotes.md`.
|
|
92
|
+
|
|
93
|
+
A `url` need not be a plain address:
|
|
94
|
+
|
|
95
|
+
- `HKP_RUNTIME_HOST` is substituted at load, for boards written before the host
|
|
96
|
+
is known;
|
|
97
|
+
- `hkp://remotes/<name>` addresses the runtime the app itself embeds →
|
|
98
|
+
`concepts/runtime.md`. It is a name in a url's clothing — the spelling from
|
|
99
|
+
before `remote` existed — and counts as one: it cannot sit beside a `remote`.
|
|
100
|
+
It names one app's runtime by that app's name for it; a board meant for
|
|
101
|
+
whichever app opens it says `"remote": "embedded"` instead →
|
|
102
|
+
`concepts/remotes.md`.
|
|
103
|
+
|
|
104
|
+
`state` holds what the runtime remembers between loads: display preferences like
|
|
105
|
+
`minimized` and `wrapServices`, and — once a board is deployed and logging is
|
|
106
|
+
switched on — `logging`, `logLevel` and `logData` → `concepts/logging.md`.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Service instance
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"uuid": "timer-svc",
|
|
115
|
+
"serviceId": "hookup.to/service/timer",
|
|
116
|
+
"serviceName": "Timer",
|
|
117
|
+
"state": {
|
|
118
|
+
"periodic": true,
|
|
119
|
+
"periodicValue": 300,
|
|
120
|
+
"periodicUnit": "ms",
|
|
121
|
+
"running": true
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
| Field | |
|
|
127
|
+
|---|---|
|
|
128
|
+
| `uuid` | **required.** Unique *within its runtime* — see below |
|
|
129
|
+
| `serviceId` | **required.** What the runtime looks up to build the service |
|
|
130
|
+
| `serviceName` | **required in practice.** A display label with no effect on behaviour |
|
|
131
|
+
| `state` | whatever the service last reported |
|
|
132
|
+
|
|
133
|
+
A `sub-service` reports two further fields, which is what makes it a
|
|
134
|
+
**scope** (`concepts/scopes.md`):
|
|
135
|
+
|
|
136
|
+
| Field in `state` | |
|
|
137
|
+
|---|---|
|
|
138
|
+
| `stopPropagation` | whether what its pipeline produced leaves the service. Absent means `false` |
|
|
139
|
+
| `scope` | what the services inside can see — today `{ "slots": "own" \| "inherit" }` |
|
|
140
|
+
|
|
141
|
+
Both are reported even at their defaults, so a saved board says outright what
|
|
142
|
+
each scope does with its answer and its cells rather than leaving a reader to
|
|
143
|
+
infer a boundary from what follows it.
|
|
144
|
+
|
|
145
|
+
### The uuid is scoped to its runtime, not the board
|
|
146
|
+
|
|
147
|
+
Two runtimes may each hold a service called `intake`; that has always been
|
|
148
|
+
legal, and composing boards from units depends on it — a unit contributes whole
|
|
149
|
+
runtimes, and its service uuids are never rewritten because the runtime already
|
|
150
|
+
scopes them (`concepts/units.md`).
|
|
151
|
+
|
|
152
|
+
The consequence: nothing addresses a service by uuid alone. A facade widget, a
|
|
153
|
+
mount reference, a configure call — each names the runtime and the uuid
|
|
154
|
+
together.
|
|
155
|
+
|
|
156
|
+
### A service inside another is addressed by the path to it
|
|
157
|
+
|
|
158
|
+
A `sub-service` holds a pipeline of its own, and what is in it is not in the
|
|
159
|
+
runtime's list. Those services are named by the path through the services
|
|
160
|
+
holding them, dot-separated:
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{ "serviceUuid": "list.kept-articles", "path": "rows" }
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
`serviceUuid` is the address and `path` is still the field inside that service's
|
|
167
|
+
state, so the two stay separable however deep the nesting goes —
|
|
168
|
+
`read.list.feed-doc` is three services, not a field called `list`.
|
|
169
|
+
|
|
170
|
+
The separator is a dot because a service address is carried in a URL path
|
|
171
|
+
segment, which a slash would split — the same constraint that decided the
|
|
172
|
+
separator between a unit's name and its runtime ids (`concepts/units.md`).
|
|
173
|
+
|
|
174
|
+
A flat uuid is always tried first, so a board whose service uuid happens to
|
|
175
|
+
contain a dot goes on meaning that service. See `concepts/scopes.md`.
|
|
176
|
+
|
|
177
|
+
### An entry may name a block instead
|
|
178
|
+
|
|
179
|
+
Anywhere a service instance may stand, a **use** of one of the board's `blocks`
|
|
180
|
+
may stand instead — an entry with `block` and no `serviceId`:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{ "block": "note", "instanceId": "kick", "params": { "trigger": "kick" } }
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Opening the board expands it into the service the block defines, and saving
|
|
187
|
+
writes it back as it is written here. → `concepts/blocks.md`
|
|
188
|
+
|
|
189
|
+
A use says nothing but `block`, `instanceId` or `uuid`, `serviceName` and
|
|
190
|
+
`params`; an object saying anything else is data. Below a runtime's own list —
|
|
191
|
+
where a service may hold arrays of data of its own — entries are read as uses
|
|
192
|
+
only in a document that defines blocks, so a board without any opens with its
|
|
193
|
+
services' state untouched.
|
|
194
|
+
|
|
195
|
+
### `serviceId` is the one that matters
|
|
196
|
+
|
|
197
|
+
It is what the registry resolves. When a board names an id the registry no
|
|
198
|
+
longer has, the service is not built: the board still opens, looking fine, minus
|
|
199
|
+
a piece. That failure is quiet enough that two test suites exist to catch it →
|
|
200
|
+
`testing.md`.
|
|
201
|
+
|
|
202
|
+
`serviceName` exists so the JSON reads without consulting a registry. Renaming
|
|
203
|
+
it changes nothing.
|
|
204
|
+
|
|
205
|
+
### `state` is a report, not a form
|
|
206
|
+
|
|
207
|
+
A service's state is what that service last said about itself, which means it
|
|
208
|
+
holds both what you configured and anything the machinery wrote there. Keys
|
|
209
|
+
beginning `__hkp` are reserved for that machinery — `__hkpMount` is the address
|
|
210
|
+
a mount currently has (`concepts/mounts.md`) — and a service must not use such a
|
|
211
|
+
name for anything of its own.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## What a board does and does not contain
|
|
216
|
+
|
|
217
|
+
**No secret values.** A credential appears only as a reference —
|
|
218
|
+
`{{secret.smtp}}` — which is resolved at the point of use and never reported
|
|
219
|
+
back through `getState`. That is what makes a board safe to commit and to share,
|
|
220
|
+
and it is a designed property rather than a convention: a resolved value cannot
|
|
221
|
+
travel back out the way it came in.
|
|
222
|
+
|
|
223
|
+
**No content that belongs elsewhere.** A service that serves or loads content
|
|
224
|
+
holds a reference to one of the board's `assets` — `hkp-asset://player` — rather
|
|
225
|
+
than the content itself, and each runtime resolves it where it is used. An asset
|
|
226
|
+
can be inline in the document, or a URL the runtime fetches.
|
|
227
|
+
|
|
228
|
+
**But not free of machine-written state.** Since `state` is a report, a board can
|
|
229
|
+
carry a resolved endpoint or a port the system assigned. A runtime asked for
|
|
230
|
+
`"port": 0` is given a free one, and saving the board writes down the one it
|
|
231
|
+
got.
|
|
232
|
+
|
|
233
|
+
**Complete, but not self-contained.** The document says everything about the
|
|
234
|
+
board. It does not carry the things the board *reaches* — a board naming a
|
|
235
|
+
runtime on a machine at your desk is a board about your desk, and it opens
|
|
236
|
+
elsewhere only as far as that runtime is reachable.
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Working with the document
|
|
241
|
+
|
|
242
|
+
The board menu is where the JSON itself is reachable:
|
|
243
|
+
|
|
244
|
+
| | |
|
|
245
|
+
|---|---|
|
|
246
|
+
| **Edit Board Source** | shows the document and rebuilds the board from whatever you apply |
|
|
247
|
+
| **Download Source** | writes it to a file |
|
|
248
|
+
| **Create share link** | packs it into a URL, so sharing a board is sharing an address |
|
|
249
|
+
|
|
250
|
+
A board can also be opened straight from a link — which is how every demo board
|
|
251
|
+
on this site opens in the playground.
|
|
252
|
+
|
|
253
|
+
Committing boards to git gives a readable history: adding a service appends one
|
|
254
|
+
object to an array, changing a setting updates one value in a `state` object. No
|
|
255
|
+
binary blobs and no generated identifiers, so a diff shows what somebody
|
|
256
|
+
actually changed.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## Where it lives in the code
|
|
261
|
+
|
|
262
|
+
| Concern | Where |
|
|
263
|
+
|---|---|
|
|
264
|
+
| The types | `hkp-frontend/src/types.ts` (`BoardDescriptor`, `RuntimeDescriptor`, `ServiceDescriptor`) |
|
|
265
|
+
| What counts as a board | `hkp-frontend/src/types.ts` (`isBoardDescriptor`) |
|
|
266
|
+
| Reading and writing one | `hkp-frontend/src/core/boardPersistence.ts` |
|
|
267
|
+
| Facade shape | `hkp-frontend/src/facade/types.ts` |
|
|
268
|
+
| Unit and composition shape | `hkp-frontend/src/runtime/board/units.ts` |
|
|
269
|
+
| Blocks and their uses | `hkp-frontend/src/runtime/board/blocks.ts`, `hkp-frontend/src/core/linkBlocks.ts` |
|
|
270
|
+
| Assets and references to them | `hkp-frontend/src/runtime/board/assets.ts` |
|
|
271
|
+
| Example boards | `boards/` |
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
See also: **Board** (`concepts/board.md`) for what the document means when it is
|
|
276
|
+
running, and **Units and compositions** (`concepts/units.md`) for assembling one
|
|
277
|
+
board out of several.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Alpaca Markets
|
|
2
|
+
|
|
3
|
+
A live stock trade feed over an authenticated WebSocket, where the interesting
|
|
4
|
+
part is not the data but the handshake — a three-step login conducted by
|
|
5
|
+
services that feed their own output back into themselves.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It connects to Alpaca's market data stream, authenticates, subscribes to trades,
|
|
10
|
+
and shows them in a table with a running volume delta.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [browser runtime](../concepts/runtime.md). Four services at the top level,
|
|
15
|
+
and the first one contains the whole protocol.
|
|
16
|
+
|
|
17
|
+
**1. Alpaca Feed Feedback** — a Feedback service wrapping a sub-pipeline. A
|
|
18
|
+
WebSocket handshake is a conversation: connect, be told to authenticate, send
|
|
19
|
+
credentials, be told you are authenticated, subscribe, be told you are
|
|
20
|
+
subscribed. Each of the server's replies has to produce the next message. That
|
|
21
|
+
is a loop, and feedback is how this board expresses one — the inner pipeline's
|
|
22
|
+
output goes back in as its input until `handshakeComplete` is set, at which
|
|
23
|
+
point `skipFeedbackWhen` opens the loop and messages flow on downstream.
|
|
24
|
+
|
|
25
|
+
Inside it:
|
|
26
|
+
|
|
27
|
+
- **Alpaca Stream**, a WebSocket client on `wss://stream.data.alpaca.markets/v2/iex`.
|
|
28
|
+
- **Unpack**, a [Map](../services/map.md) taking one message out of the array.
|
|
29
|
+
- **Auth**, an [If](../services/if.md) matching `T == 'success' && msg == 'connected'`,
|
|
30
|
+
whose sub-pipeline builds the auth message.
|
|
31
|
+
- **Subscribe**, an If matching `msg == 'authenticated'`, building the
|
|
32
|
+
subscribe message.
|
|
33
|
+
- **Detect Subscribe Ack**, an If matching `T == 'subscription'`, which sets the
|
|
34
|
+
runtime variable `handshakeComplete` and then
|
|
35
|
+
[Stops](../services/stopper.md) — the acknowledgement itself is not trade
|
|
36
|
+
data and should go no further.
|
|
37
|
+
|
|
38
|
+
**2. Format Trade** — a [Map](../services/map.md) shaping each trade for display.
|
|
39
|
+
|
|
40
|
+
**3. Volume Delta** — computes the change per 1000 ms interval.
|
|
41
|
+
|
|
42
|
+
**4. Trade Feed** — a [Monitor](../services/monitor.md) keeping the last 100.
|
|
43
|
+
|
|
44
|
+
## Why it is worth reading
|
|
45
|
+
|
|
46
|
+
Most boards on this page are a line. This one is a state machine, and it is
|
|
47
|
+
built out of the same parts: three `If` services standing in for three states,
|
|
48
|
+
a runtime variable as the flag, a stopper to swallow the message that only meant
|
|
49
|
+
"ready", and feedback to run the whole thing until it settles. No branching
|
|
50
|
+
syntax appears anywhere — see [control flow](../concepts/runtime.md#control-flow).
|
|
51
|
+
|
|
52
|
+
## Try it
|
|
53
|
+
|
|
54
|
+
It needs an Alpaca API key and secret, entered in the facade's two text inputs.
|
|
55
|
+
The JSON input holds the subscription request, so you can change which symbols
|
|
56
|
+
it follows without touching the board.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Animate
|
|
2
|
+
|
|
3
|
+
A hand-drawn parallax scene — sun, clouds, two ranks of trees, a walker — drawn
|
|
4
|
+
25 times a second and recordable as a GIF. Every layer is a template, and the
|
|
5
|
+
scene is what you get when five of them run from the same tick.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It animates a looping landscape on a canvas. Each element moves at its own
|
|
10
|
+
speed, which is all parallax is, and a recorder on the end of the chain can
|
|
11
|
+
capture the result as an animated GIF without anything else changing.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
One [browser runtime](../concepts/runtime.md), five services, and the whole
|
|
16
|
+
scene comes out of the third one.
|
|
17
|
+
|
|
18
|
+
1. [Timer](../services/timer.md) ticks every 40 ms — 25 frames a second.
|
|
19
|
+
2. [Tracks](../services/tracks.md) is where the drawing happens. It runs five
|
|
20
|
+
named tracks over that one tick, each a single [Map](../services/map.md)
|
|
21
|
+
producing the draw commands for one layer: `☀️`, `☁️`, `🌳`, `🌲`, `🚶♀️`. The
|
|
22
|
+
tracks are named with the emoji of the thing they draw, which reads better in
|
|
23
|
+
the overview than `layer-3` would. Running `serial` means their outputs are
|
|
24
|
+
reduced in order, so the list of shapes comes back stacked back-to-front.
|
|
25
|
+
3. [Monitor](../services/monitor.md) shows the combined frame as data, which is
|
|
26
|
+
how you debug a drawing that has gone wrong.
|
|
27
|
+
4. [Canvas](../services/canvas.md) draws it, clearing between frames and
|
|
28
|
+
capturing each one because `capture` is on.
|
|
29
|
+
5. [GIF Recorder](../services/gif-encoder.md) collects captured frames while
|
|
30
|
+
`recording` is set, up to 300 of them, and writes `animation.gif`.
|
|
31
|
+
|
|
32
|
+
The interesting part is step 2. Nothing wires the sun to the clouds; five
|
|
33
|
+
independent templates each answer the same tick, and *fan-out then reduce* is
|
|
34
|
+
the only structure needed to compose a picture out of layers. Adding a sixth
|
|
35
|
+
layer is adding a sixth track.
|
|
36
|
+
|
|
37
|
+
## Try it
|
|
38
|
+
|
|
39
|
+
Open it and it runs. To record, set the GIF Recorder's `recording` to true,
|
|
40
|
+
let it collect frames, then turn it off to get the file.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# ASCII Cam
|
|
2
|
+
|
|
3
|
+
The camera, three times a second, rendered as text. A short chain that turns a
|
|
4
|
+
live video frame into a grid of characters and shows it — with a facade so it
|
|
5
|
+
can be used without seeing any of that.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It shows what your webcam sees, drawn in ASCII, with knobs for the character
|
|
10
|
+
grid and a switch to invert it.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [browser runtime](../concepts/runtime.md) — the camera and the display are
|
|
15
|
+
both in the page, so nothing leaves it. No frame is uploaded anywhere.
|
|
16
|
+
|
|
17
|
+
1. [Timer](../services/timer.md) ticks every 300 ms and fires immediately. This
|
|
18
|
+
is the frame rate: the camera is sampled on demand rather than streaming.
|
|
19
|
+
2. [Camera](../services/camera.md) captures one frame per tick.
|
|
20
|
+
3. [ASCII Art](../services/ascii-art.md) reduces the frame to a 100 × 60 grid of
|
|
21
|
+
characters, optionally inverted.
|
|
22
|
+
4. [Monitor](../services/monitor.md) displays it in `ascii` mode at 550 × 500.
|
|
23
|
+
|
|
24
|
+
Monitor is doing display duty here rather than debugging duty — in `ascii` mode
|
|
25
|
+
it is the screen, which is why the board needs no canvas.
|
|
26
|
+
|
|
27
|
+
## The facade
|
|
28
|
+
|
|
29
|
+
One panel, `ASCII Cam`, holds the camera view, two knobs for the grid
|
|
30
|
+
dimensions, four buttons and a line of text. The knobs write straight into the
|
|
31
|
+
ASCII Art service's `cols` and `rows`, so turning one re-renders at a different
|
|
32
|
+
resolution. That is the whole point of a [facade](../concepts/board.md#the-facade):
|
|
33
|
+
the person using it adjusts a knob, not a service's state.
|
|
34
|
+
|
|
35
|
+
## Try it
|
|
36
|
+
|
|
37
|
+
It needs camera permission, and the browser will ask. Everything runs locally.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Audiolize
|
|
2
|
+
|
|
3
|
+
Wikipedia's live edit stream, played as music. Every edit anywhere in Wikipedia
|
|
4
|
+
arrives as an event; the board turns each one into a note and plays what comes
|
|
5
|
+
out.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It opens the public Wikimedia recent-changes stream and sonifies it. Small edits
|
|
10
|
+
become one voice, large ones another, and the result is a rhythm that follows
|
|
11
|
+
how busy Wikipedia happens to be.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
One [browser runtime](../concepts/runtime.md). The whole thing is four services,
|
|
16
|
+
two of which are [Tracks](../services/tracks.md) doing different jobs.
|
|
17
|
+
|
|
18
|
+
1. **Wikipedia Recent Changes**, an [Input](../services/input.md), holds a
|
|
19
|
+
persistent connection to `stream.wikimedia.org` and injects every message as
|
|
20
|
+
a new pipeline trigger. This is the board's clock — it has no timer, because
|
|
21
|
+
the data arrives on its own schedule.
|
|
22
|
+
2. **Notes**, a [Tracks](../services/tracks.md), maps one edit into two possible
|
|
23
|
+
notes over two tracks, `snare` and `bass`, each a [Map](../services/map.md)
|
|
24
|
+
deciding what that edit sounds like.
|
|
25
|
+
3. **Aggregates**, a second [Tracks](../services/tracks.md), is the musical
|
|
26
|
+
part. Each track picks its note out and hands it to an
|
|
27
|
+
[Aggregator](../services/aggregator.md) with an interval:
|
|
28
|
+
- `snare` aggregates over **90 ms**, taking the most frequently occurring
|
|
29
|
+
note (`val_max_occ`) in that window.
|
|
30
|
+
- `bass` aggregates over **180 ms** — half the rate, so it plays half as
|
|
31
|
+
often.
|
|
32
|
+
|
|
33
|
+
Its `reduce` track then collapses whatever the two produced into a single
|
|
34
|
+
thing to play.
|
|
35
|
+
4. [Sound](../services/sound.md) plays it.
|
|
36
|
+
|
|
37
|
+
## Why the aggregators are the design
|
|
38
|
+
|
|
39
|
+
Wikipedia edits do not arrive on a beat; they arrive in bursts. Feeding them
|
|
40
|
+
straight to a synthesiser would produce noise. The two aggregation windows
|
|
41
|
+
impose a tempo — one fast voice, one at half speed — so the music has a pulse
|
|
42
|
+
that the data does not. Changing the feel of this board means changing two
|
|
43
|
+
numbers.
|
|
44
|
+
|
|
45
|
+
It is also a clean example of fan-out and reduce being used twice in a row for
|
|
46
|
+
different reasons: first to *derive* two interpretations of one event, then to
|
|
47
|
+
*rate-limit* each one independently before they are recombined.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Court Booking (Browser)
|
|
2
|
+
|
|
3
|
+
[Court Booking](./court-booking-demo-board.md) with the database moved into the
|
|
4
|
+
browser. The same three courts, the same calendar, the same statements — and
|
|
5
|
+
nothing to install.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It draws the day as a calendar — one column per court, one row per hour — and
|
|
10
|
+
lets you take or give back an hour by tapping a cell. Your bookings are still
|
|
11
|
+
there the next time you open the board.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
One browser runtime, three [SQL](../services/sql.md) services. They are the
|
|
16
|
+
other board's services, unchanged: the `sql` service exists in both runtimes
|
|
17
|
+
with one contract, and both runtimes are SQLite, so moving the board meant
|
|
18
|
+
changing the runtime it sits in and nothing else.
|
|
19
|
+
|
|
20
|
+
In the browser, SQL runs SQLite compiled to WebAssembly and keeps the database
|
|
21
|
+
in this browser's storage. The two club rules are still unique indexes in the
|
|
22
|
+
schema, and **The day** still returns cells that already know what they are.
|
|
23
|
+
|
|
24
|
+
## What moving it cost
|
|
25
|
+
|
|
26
|
+
The club. On hkp-node the tables belong to a server, and every member sees the
|
|
27
|
+
same day from their own device. Here they belong to this browser, so the only
|
|
28
|
+
member there is to be is whoever is signed in at this screen.
|
|
29
|
+
|
|
30
|
+
Who is booking is decided by the same statements as on the server: whoever is
|
|
31
|
+
signed in to the app, named on the line above the calendar. Signed out, the
|
|
32
|
+
calendar is drawn but offers no hour. In a browser nothing verifies the
|
|
33
|
+
account — the browser is the person — so what it buys is that the board is the
|
|
34
|
+
same board on both runtimes, not that anybody is kept out.
|
|
35
|
+
|
|
36
|
+
So this is the version for trying the board, or for booking something that is
|
|
37
|
+
yours to share out — a room at home, a shared car. For a real club, run
|
|
38
|
+
[Court Booking](./court-booking-demo-board.md) on hkp-node.
|
|
39
|
+
|
|
40
|
+
## Try it
|
|
41
|
+
|
|
42
|
+
Open it signed in. The schema is created on first run, and the bookings are kept in the
|
|
43
|
+
browser's IndexedDB under the database name `tennis`.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Court Booking
|
|
2
|
+
|
|
3
|
+
Three courts, an hourly calendar from 07:00 to 22:00, one hour per member per
|
|
4
|
+
day. A small booking system where both club rules are enforced by the database
|
|
5
|
+
rather than by the board.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It draws the day as a calendar — one column per court, one row per hour — and
|
|
10
|
+
lets a member take or give back an hour by tapping a cell.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [REST runtime](../concepts/runtime.md#the-servers) on hkp-node, three
|
|
15
|
+
services, all [SQL](../services/sql.md):
|
|
16
|
+
|
|
17
|
+
1. **Give an hour back** — releases a booking.
|
|
18
|
+
2. **Take an hour** — makes one.
|
|
19
|
+
3. **The day** — returns the whole day as cells that already know what they are:
|
|
20
|
+
free, yours, or somebody else's.
|
|
21
|
+
|
|
22
|
+
The [calendar widget](../concepts/board.md#the-facade) draws whatever that last
|
|
23
|
+
query returns. It contains no rules of its own.
|
|
24
|
+
|
|
25
|
+
## The rules are indexes, not logic
|
|
26
|
+
|
|
27
|
+
Two club rules — *a slot is bookable once*, and *a member gets one hour a day* —
|
|
28
|
+
are **unique indexes** in the schema. Not checks in the board, not conditions in
|
|
29
|
+
a template.
|
|
30
|
+
|
|
31
|
+
That distinction earns its keep the moment two members tap the same slot at the
|
|
32
|
+
same instant. A board that checked availability and then booked would have a gap
|
|
33
|
+
between the two, and both taps would succeed. A unique index has no gap: the
|
|
34
|
+
second insert fails, and the failure is the answer.
|
|
35
|
+
|
|
36
|
+
It also means the rules cannot be bypassed by another board, a direct query, or
|
|
37
|
+
a future version of this one that forgets them.
|
|
38
|
+
|
|
39
|
+
Whoever loses is told. A tap that asked for a free hour and did not get it —
|
|
40
|
+
because somebody else took it first, because the member already holds an hour
|
|
41
|
+
that day, or because it was never theirs to take — comes back with a `notice`
|
|
42
|
+
on the day **The day** returns (*Court 2 at 18:00 was just taken by someone
|
|
43
|
+
else.*), and the facade raises it as a toast. It is the same value on every
|
|
44
|
+
cell, so the notice reads it from the first, and empty on every other tap.
|
|
45
|
+
Because a member's notifications go to that member alone, only the person who
|
|
46
|
+
tapped sees it.
|
|
47
|
+
|
|
48
|
+
## One query draws the screen
|
|
49
|
+
|
|
50
|
+
**The day** returns cells already carrying their own state, so the widget
|
|
51
|
+
performs no interpretation — it draws what it was given. Every tap enters the
|
|
52
|
+
same pipeline and the query at the end re-reads what changed, which is why the
|
|
53
|
+
calendar is correct after somebody else's booking without anything having to
|
|
54
|
+
push an update.
|
|
55
|
+
|
|
56
|
+
## Who is booking
|
|
57
|
+
|
|
58
|
+
Every hour is booked in somebody's name, and the board never takes that name
|
|
59
|
+
from the request. Each statement uses the verified caller directly:
|
|
60
|
+
|
|
61
|
+
```sql
|
|
62
|
+
$caller_email
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`$caller_email` is the address of whoever began the run, **stated by the server
|
|
66
|
+
that verified their sign-in** — see
|
|
67
|
+
[SQL: who is calling](../services/sql.md#who-is-calling). There is no member
|
|
68
|
+
field in the facade or its process payloads. Without a signed-in caller with a
|
|
69
|
+
verified address, the board displays its calendar but offers no bookable hours.
|
|
70
|
+
A timer, mount request, or forged identity field therefore books nothing.
|
|
71
|
+
|
|
72
|
+
This is what makes the board safe to **share**. Deployed to a coordinator and
|
|
73
|
+
[shared with a club](../concepts/cloud-boards.md#sharing-a-board-members),
|
|
74
|
+
every tap of every member enters the same pipeline in the owner's database,
|
|
75
|
+
and a member's client is free to send any payload it likes. It can claim to be
|
|
76
|
+
someone else; the statements do not ask it. What it sends is also held to the
|
|
77
|
+
club's week, courts and whole hours by the insert itself, since the facade's
|
|
78
|
+
buttons are not the only thing that can call it.
|
|
79
|
+
|
|
80
|
+
Other members are never shown an address. A taken hour is labelled with the
|
|
81
|
+
name the club's member list gave its holder when they booked, and *Member*
|
|
82
|
+
where it gave none.
|
|
83
|
+
|
|
84
|
+
## The facade
|
|
85
|
+
|
|
86
|
+
One panel: the calendar, the days of the week above it, and a line saying who
|
|
87
|
+
is booking and for which day — *Booking as Anna on 2026-10-09*. The name is the
|
|
88
|
+
signed-in account (`{ "$user": "name" }`), the day is the one **The day** last
|
|
89
|
+
returned. That line is for the person reading it — nothing the server acts on —
|
|
90
|
+
and there is no editable booking identity.
|
|
91
|
+
|
|
92
|
+
## Sharing it with a club
|
|
93
|
+
|
|
94
|
+
1. Deploy the board to a coordinator.
|
|
95
|
+
2. Open it in Cloud Boards and choose **Members**: one entry per person, the
|
|
96
|
+
address they sign in with and the name the others should see.
|
|
97
|
+
3. Send them the link from *Copy link*. It opens only for somebody on the list.
|
|
98
|
+
|
|
99
|
+
Each member sees the calendar from their own side and nothing else of the
|
|
100
|
+
board. One thing to know: a member's calendar is redrawn by their own actions,
|
|
101
|
+
so somebody else's booking shows on their next tap rather than at once.
|
|
102
|
+
|
|
103
|
+
## Try it
|
|
104
|
+
|
|
105
|
+
Needs a signed-in account and an hkp-node kept under the name `node` in
|
|
106
|
+
*Manage runtime servers*. The schema is created on
|
|
107
|
+
first run, in a table of its own (`court_booking`) — the board's earlier
|
|
108
|
+
`booking` table is left as it was.
|
|
109
|
+
|
|
110
|
+
## Building something of your own on it
|
|
111
|
+
|
|
112
|
+
This board is a starting point, not a finished product: there are no payments,
|
|
113
|
+
no reminders, and one club. What it does have is the part that is expensive to
|
|
114
|
+
add later — the rules held by the database rather than the board, and a caller
|
|
115
|
+
the server vouches for.
|
|
116
|
+
|
|
117
|
+
If you take it further and sell what you build, a commercial licence is the paid
|
|
118
|
+
alternative to the AGPL: your product under your own name, with your own source
|
|
119
|
+
closed. The **Open-source licences** page on the website says what it covers and
|
|
120
|
+
who needs none of it.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Current Time
|
|
2
|
+
|
|
3
|
+
A two-service board that answers with the date and time as a sentence somebody
|
|
4
|
+
could say out loud. It exists to be called by another board rather than opened
|
|
5
|
+
on its own.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Given any trigger, it returns `{ "text": "Today it's Friday, July, 17. 2026 21:13" }`.
|
|
10
|
+
That is the whole contract.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [browser runtime](../concepts/runtime.md), two services.
|
|
15
|
+
|
|
16
|
+
1. **Build Sentence**, a [Map](../services/map.md) in `replace` mode, formats
|
|
17
|
+
the current date and time into a speakable string.
|
|
18
|
+
2. **Sentence**, a [Monitor](../services/monitor.md), reports it so you can see
|
|
19
|
+
the answer when the board is open by itself.
|
|
20
|
+
|
|
21
|
+
## Why it is a board and not a service
|
|
22
|
+
|
|
23
|
+
This is a **skill target**: the Voice Assistant with skills board
|
|
24
|
+
(`boards/voice-assistant-skills-demo-board.json`) routes a spoken request here
|
|
25
|
+
through
|
|
26
|
+
[Skill Router](../services/skill-router.md), and the calling board's
|
|
27
|
+
[text-to-speech](../services/text-to-speech.md) reads the returned `text` aloud.
|
|
28
|
+
|
|
29
|
+
Phrasing a skill as a board rather than a service is what makes it replaceable
|
|
30
|
+
without touching the assistant. The dispatcher finds it **by name**, so the
|
|
31
|
+
board has to be saved locally as `current time` for the lookup to succeed — see
|
|
32
|
+
[Board Service](../services/board-service.md) for how one board plays another.
|