@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,70 @@
|
|
|
1
|
+
# Live Radio (Cloud Relay)
|
|
2
|
+
|
|
3
|
+
[Live Radio](./live-radio-demo-board.md), but for listeners anywhere on the
|
|
4
|
+
internet. The microphone stays at home. One stream goes up to a relay in the
|
|
5
|
+
cloud, and the relay passes it on to everyone listening.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Press Start and the home machine goes on air through the relay. Share the QR
|
|
10
|
+
code or the player address; whoever opens it hears the microphone about half a
|
|
11
|
+
second late. The home machine needs no open port or public address, and it
|
|
12
|
+
uploads a single stream however many people listen.
|
|
13
|
+
|
|
14
|
+
## How it works
|
|
15
|
+
|
|
16
|
+
Two [REST runtimes](../concepts/runtime.md): hkp-rt at home, hkp-node in the
|
|
17
|
+
cloud. The relay follows the home runtime, so what the home runtime produces is
|
|
18
|
+
what the relay is given — [the chain](../concepts/runtime.md#the-chain), as on
|
|
19
|
+
any board. The MP3 frames travel as bytes all the way.
|
|
20
|
+
|
|
21
|
+
### Home (hkp-rt)
|
|
22
|
+
|
|
23
|
+
1. [core-input](../services/audio-io.md#core-input) captures the microphone. The
|
|
24
|
+
audio thread only appends and signals; everything after it runs on the
|
|
25
|
+
runtime's event loop.
|
|
26
|
+
2. [Audio Encode](../services/audio-encode.md) in `stream` mode: one MP3
|
|
27
|
+
encoder for the whole broadcast, emitting whole frames. They are the home
|
|
28
|
+
runtime's result, and go on to the relay.
|
|
29
|
+
|
|
30
|
+
### Relay (hkp-node)
|
|
31
|
+
|
|
32
|
+
1. [http-server-subservices](../services/http.md#streaming) declares a `stream`
|
|
33
|
+
at `/live.mp3` and passes each pass it is given to everyone connected there.
|
|
34
|
+
Every other request is answered by `onRequest`:
|
|
35
|
+
- **Player page**, a [Map](../services/map.md) answering with an
|
|
36
|
+
[answer envelope](../services/http.md#what-a-handler-may-answer-with) whose
|
|
37
|
+
body names one of the board's [assets](../concepts/assets.md): the script
|
|
38
|
+
for `/player.js`, the page for anything else. The page and its script are
|
|
39
|
+
the assets **player** and **player-js** — edit them in the asset view, and
|
|
40
|
+
the next listener to open the address gets the new version.
|
|
41
|
+
2. **End Of Chain**, a [Stopper](../services/stopper.md): nothing needs to go
|
|
42
|
+
back.
|
|
43
|
+
|
|
44
|
+
The relay's address is a mount (`/hosted/<id>`): it stays the same across
|
|
45
|
+
restarts and redeploys and cannot be guessed, and it is all a listener needs.
|
|
46
|
+
|
|
47
|
+
## The window is part of the path
|
|
48
|
+
|
|
49
|
+
Runtimes do not dial each other: a result goes from one runtime to whoever runs
|
|
50
|
+
the board, and from there to the next. Here that is this window, on the same
|
|
51
|
+
machine as the home runtime, so the detour costs next to nothing — but the
|
|
52
|
+
board has to stay open while it is on air, and every frame passes through the
|
|
53
|
+
window's main thread. If the uplink stalls while the connection to the relay
|
|
54
|
+
stays open, the frames wait rather than being dropped, and listeners fall behind
|
|
55
|
+
for good. While that connection is closed — before it first opens, or between a
|
|
56
|
+
drop and the reconnect — there is nowhere for them to wait: those frames are
|
|
57
|
+
dropped, and listeners hear a gap. The window's console says how many bytes.
|
|
58
|
+
|
|
59
|
+
[Live Radio (Cloud, direct)](./live-radio-cloud-direct-demo-board.md) connects
|
|
60
|
+
the home runtime to the relay itself instead, and keeps at most about a second
|
|
61
|
+
waiting: pick it when latency has to stay bounded on a poor uplink, or when the
|
|
62
|
+
window may be busy.
|
|
63
|
+
|
|
64
|
+
## Try it
|
|
65
|
+
|
|
66
|
+
1. Open the board in the Readymade app at home — the **Home** runtime names
|
|
67
|
+
the app's own runtime (`"remote": "embedded"`) — and run hkp-node somewhere
|
|
68
|
+
reachable. Point the **Relay** runtime's URL at the hkp-node server.
|
|
69
|
+
2. Load the board and press Start.
|
|
70
|
+
3. Share the QR code or the player address.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Live Radio (Cloud, direct)
|
|
2
|
+
|
|
3
|
+
[Live Radio (Cloud Relay)](./live-radio-cloud-demo-board.md), with the home
|
|
4
|
+
runtime connecting to the relay itself. In the Cloud Relay board the stream
|
|
5
|
+
travels the way every result does, through the window running the board; here
|
|
6
|
+
it goes straight from home to the relay over a WebSocket of its own, which
|
|
7
|
+
keeps at most about a second of audio waiting. On a poor uplink listeners skip
|
|
8
|
+
ahead instead of falling behind, and a busy window cannot hold the stream up.
|
|
9
|
+
The price is a writer, a mount reference and a shared secret.
|
|
10
|
+
|
|
11
|
+
## What it does
|
|
12
|
+
|
|
13
|
+
Press Start and the home machine goes on air through the relay. Share the QR
|
|
14
|
+
code or the player address; whoever opens it hears the microphone about half a
|
|
15
|
+
second late. The home machine needs no open port or public address, and it
|
|
16
|
+
uploads a single stream however many people listen.
|
|
17
|
+
|
|
18
|
+
## How it works
|
|
19
|
+
|
|
20
|
+
Two [REST runtimes](../concepts/runtime.md): hkp-rt at home, hkp-node in the
|
|
21
|
+
cloud.
|
|
22
|
+
|
|
23
|
+
### Home (hkp-rt)
|
|
24
|
+
|
|
25
|
+
1. [core-input](../services/audio-io.md#core-input) captures the microphone. The
|
|
26
|
+
audio thread only appends and signals; everything after it runs on the
|
|
27
|
+
runtime's event loop.
|
|
28
|
+
2. [Audio Encode](../services/audio-encode.md) in `stream` mode: one MP3
|
|
29
|
+
encoder for the whole broadcast, emitting whole frames.
|
|
30
|
+
3. [websocket-writer](../services/websocket.md#websocket-writer) sends each
|
|
31
|
+
chunk to the relay over a WebSocket it opens itself. Its `url` is
|
|
32
|
+
`hkp-mount://relay/ingest`, a reference to the relay's reader that the board
|
|
33
|
+
resolves once the relay has an address. The `Authorization` header carries
|
|
34
|
+
the key from the secret `radio-ingest`. If the connection drops, it
|
|
35
|
+
reconnects on its own. About a second of audio waits while it does; anything
|
|
36
|
+
older is dropped.
|
|
37
|
+
4. **End Of Chain**, a [Stopper](../services/stopper.md): nothing needs to go on
|
|
38
|
+
to the browser.
|
|
39
|
+
|
|
40
|
+
### Relay (hkp-node)
|
|
41
|
+
|
|
42
|
+
1. **Uplink**, a [websocket-reader](../services/websocket.md#on-hkp-node), takes
|
|
43
|
+
the home runtime's connection, but only with the key `{{secret.radio-ingest}}`,
|
|
44
|
+
and only one at a time (`exclusive`): a reconnecting home runtime replaces
|
|
45
|
+
its old connection. Each message it receives is a pass through the services
|
|
46
|
+
after it.
|
|
47
|
+
2. [http-server-subservices](../services/http.md#streaming) declares a `stream`
|
|
48
|
+
at `/live.mp3` and passes each pass it is given to everyone connected there.
|
|
49
|
+
Every other request is answered by `onRequest`:
|
|
50
|
+
- **Player page**, a [Map](../services/map.md) answering with an
|
|
51
|
+
[answer envelope](../services/http.md#what-a-handler-may-answer-with) whose
|
|
52
|
+
body names one of the board's [assets](../concepts/assets.md): the script
|
|
53
|
+
for `/player.js`, the page for anything else. The page and its script are
|
|
54
|
+
the assets **player** and **player-js** — edit them in the asset view, and
|
|
55
|
+
the next listener to open the address gets the new version.
|
|
56
|
+
3. **End Of Chain**, a [Stopper](../services/stopper.md).
|
|
57
|
+
|
|
58
|
+
From **Radio** on, the relay is the same as in
|
|
59
|
+
[Live Radio (Cloud Relay)](./live-radio-cloud-demo-board.md); only how the
|
|
60
|
+
stream arrives differs.
|
|
61
|
+
|
|
62
|
+
Both addresses are mounts (`/hosted/<id>`): they stay the same across restarts
|
|
63
|
+
and redeploys and cannot be guessed. The key decides who may broadcast; the
|
|
64
|
+
player address is all a listener needs.
|
|
65
|
+
|
|
66
|
+
## Latency
|
|
67
|
+
|
|
68
|
+
Measured on loopback with the relay on hkp-node:
|
|
69
|
+
|
|
70
|
+
| Listener | Behind live |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| Chrome, player page | 0.3 s buffered |
|
|
73
|
+
| WebKit (Safari), player page | 0.4–0.5 s buffered |
|
|
74
|
+
|
|
75
|
+
Add the network: one hop up from home to the relay and one down to the
|
|
76
|
+
listener.
|
|
77
|
+
|
|
78
|
+
## Try it
|
|
79
|
+
|
|
80
|
+
1. Open the board in the Readymade app at home — the **Home** runtime names
|
|
81
|
+
the app's own runtime (`"remote": "embedded"`) — and run hkp-node somewhere
|
|
82
|
+
reachable. Point the **Relay** runtime's URL at the hkp-node server.
|
|
83
|
+
2. Load the board. When asked, give the secret `radio-ingest` a value; any long
|
|
84
|
+
random string will do.
|
|
85
|
+
3. Press Start. The uplink dot turns green once the home runtime is connected.
|
|
86
|
+
4. Share the QR code or the player address.
|
|
87
|
+
|
|
88
|
+
If the relay sits behind a reverse proxy, make sure the proxy passes WebSocket
|
|
89
|
+
upgrades on `/hosted/`. The stream itself asks nginx not to buffer it.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Live Radio
|
|
2
|
+
|
|
3
|
+
Your microphone as a radio station: captured, encoded to MP3 as it arrives, and
|
|
4
|
+
streamed to anyone who opens the URL. Two services do the work, and the
|
|
5
|
+
arrangement between them is what the board is about.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Press Start and the board goes on air. Open the stream URL in a browser tab or
|
|
10
|
+
VLC, or scan the QR code with a phone, and you hear the microphone with a delay
|
|
11
|
+
of a fraction of a second plus whatever the player chooses to buffer. Listeners
|
|
12
|
+
can come and go at any time; they all hear the same stream.
|
|
13
|
+
|
|
14
|
+
## How it works
|
|
15
|
+
|
|
16
|
+
One [REST runtime](../concepts/runtime.md) on hkp-rt. Nothing passes through the
|
|
17
|
+
browser except the controls.
|
|
18
|
+
|
|
19
|
+
1. [core-input](../services/audio-io.md#core-input) captures the microphone. Its
|
|
20
|
+
callback runs on the realtime audio thread and does only two things: it
|
|
21
|
+
appends the samples to a ring buffer and signals. `deferPropagation` is on,
|
|
22
|
+
so everything after it runs on the runtime's event loop instead. The ring
|
|
23
|
+
buffer carries the samples across, so a pass that starts a little late reads
|
|
24
|
+
everything that arrived in the meantime.
|
|
25
|
+
2. [http-server-subservices](../services/http.md#streaming) declares a `stream`
|
|
26
|
+
at `/live.mp3`. Its `onProcess` pipeline holds the encoder, so every pass
|
|
27
|
+
encodes once and the result goes to every listener at once.
|
|
28
|
+
- [Audio Encode](../services/audio-encode.md) in `stream` mode keeps one MP3
|
|
29
|
+
encoder alive across all passes. Each pass hands it the new samples and
|
|
30
|
+
passes on only the frames that are finished, as whole frames, so a
|
|
31
|
+
listener can join between any two chunks.
|
|
32
|
+
|
|
33
|
+
- **Player page**, a [Static](../services/static.md) in `onRequest`, answers
|
|
34
|
+
every other request with a small web page that plays the stream (see
|
|
35
|
+
below).
|
|
36
|
+
3. **End Of Chain**, a [Stopper](../services/stopper.md). The endpoint has
|
|
37
|
+
already written each chunk to its listeners. Without the Stopper, the chunk
|
|
38
|
+
would also become the runtime's result and be sent to the browser forty
|
|
39
|
+
times a second, where nothing needs it.
|
|
40
|
+
|
|
41
|
+
The encoder sits inside the endpoint rather than after the microphone because
|
|
42
|
+
encoding and serving belong together. The outer chain only hands PCM to an
|
|
43
|
+
endpoint, so the microphone could be swapped for any other sound source without
|
|
44
|
+
touching the rest.
|
|
45
|
+
|
|
46
|
+
## The three threads
|
|
47
|
+
|
|
48
|
+
- **Audio thread.** Appends and signals, nothing else. No allocation, no locks
|
|
49
|
+
and no logging, whatever happens downstream.
|
|
50
|
+
- **Event loop.** Encodes, then hands each chunk to every listener's queue.
|
|
51
|
+
Nothing on this thread waits on the network.
|
|
52
|
+
- **Server thread.** Writes to each connection asynchronously. A listener on a
|
|
53
|
+
slow connection falls behind on its own. Past `maxQueueBytes` it loses its
|
|
54
|
+
oldest unsent audio and jumps back near the live edge, so neither the stream
|
|
55
|
+
nor anyone else waits for it.
|
|
56
|
+
|
|
57
|
+
## The player page
|
|
58
|
+
|
|
59
|
+
A browser that opens the `.mp3` directly decides for itself how much to buffer,
|
|
60
|
+
and it never catches up afterwards. Measured on this board:
|
|
61
|
+
|
|
62
|
+
| Player | Behind live |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| Chrome, `.mp3` opened directly | 2.3 s |
|
|
65
|
+
| Safari, `.mp3` opened directly | 5.4 s |
|
|
66
|
+
| Chrome, player page | 0.3–0.5 s |
|
|
67
|
+
| Safari (WebKit), player page | 0.4–0.5 s |
|
|
68
|
+
| VLC, default settings | ~1.4 s (`--network-caching=200` brings it down) |
|
|
69
|
+
|
|
70
|
+
The page fetches the stream itself and passes each piece to the browser's Media
|
|
71
|
+
Source Extensions (`ManagedMediaSource` on iOS) as it arrives. It keeps about
|
|
72
|
+
0.4 s buffered, plays 5% faster when it drifts behind, and jumps only when it
|
|
73
|
+
has fallen more than two seconds behind. Stop closes its connection, so a
|
|
74
|
+
stopped listener is not counted; Listen starts again at the live edge. A browser
|
|
75
|
+
without Media Source Extensions falls back to a plain `<audio>` element.
|
|
76
|
+
|
|
77
|
+
The page is board content: it sits in the Static's `out` as an
|
|
78
|
+
[answer envelope](../services/http.md#what-a-handler-may-answer-with) and can be
|
|
79
|
+
edited like any other state. It plays `live.mp3` next to wherever it is served,
|
|
80
|
+
so if you rename the stream's `path`, change that name in the page too. To let
|
|
81
|
+
people outside your network listen, see
|
|
82
|
+
[Live Radio (Cloud Relay)](./live-radio-cloud-demo-board.md).
|
|
83
|
+
|
|
84
|
+
## The facade
|
|
85
|
+
|
|
86
|
+
A status dot for the endpoint, a listener count, a QR code for the player page,
|
|
87
|
+
the page's address and the raw stream URL (for VLC), both copyable, and
|
|
88
|
+
Start/Stop buttons. Start brings up the endpoint before the
|
|
89
|
+
microphone, so the first samples have somewhere to go; Stop does the reverse.
|
|
90
|
+
|
|
91
|
+
## Try it
|
|
92
|
+
|
|
93
|
+
Open the board in the Readymade app. Its runtime names the app's own runtime
|
|
94
|
+
(`"remote": "embedded"`), so there is no address to set and no port that has to
|
|
95
|
+
be free. To run it from the playground in a browser against an hkp-rt you
|
|
96
|
+
started yourself, keep that server under the name `embedded` in *Manage runtime
|
|
97
|
+
servers* — outside the app it is a name like any other. Check the
|
|
98
|
+
microphone's **Channels** in its panel: the encoder is set to `1`, which matches
|
|
99
|
+
a built-in mic. For a two-channel interface, set the encoder's `channels` to `2`. If the device
|
|
100
|
+
will not run at the 48 kHz the board asks for, the board says so when you press
|
|
101
|
+
Start; set the encoder's `sampleRate` to the rate the microphone reports.
|
|
102
|
+
The stream is served on port 8890 on your LAN address.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Live Radio (Members)
|
|
2
|
+
|
|
3
|
+
[Live Radio (Cloud, direct)](./live-radio-cloud-direct-demo-board.md), made to
|
|
4
|
+
be deployed and shared. Your microphone is the station; the people you share
|
|
5
|
+
the board with are its listeners, and they are the only ones told where to
|
|
6
|
+
tune in.
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
|
|
10
|
+
Deploy the board, add the people who should hear you, and send them the link
|
|
11
|
+
from *Copy link*. Each of them signs in, and is shown the player's address,
|
|
12
|
+
a QR code for a phone, and how many are listening. They open the player and
|
|
13
|
+
tap Listen; you press **Go on air**.
|
|
14
|
+
|
|
15
|
+
Once deployed, the board runs with nobody watching. The audio goes straight
|
|
16
|
+
from the app to the relay and on to every listener, never through the
|
|
17
|
+
coordinator or a window, so it keeps broadcasting for as long as the Readymade
|
|
18
|
+
app on your machine runs.
|
|
19
|
+
|
|
20
|
+
## How it works
|
|
21
|
+
|
|
22
|
+
Two [REST runtimes](../concepts/runtime.md), the same as in
|
|
23
|
+
[Live Radio (Cloud, direct)](./live-radio-cloud-direct-demo-board.md): hkp-rt
|
|
24
|
+
in the app, capturing, encoding and sending; hkp-node in the cloud, taking the
|
|
25
|
+
stream in over **Uplink** and passing it to every listener from **Relay**,
|
|
26
|
+
which also serves the player page from the board's
|
|
27
|
+
[assets](../concepts/assets.md). What is different is when each part runs and
|
|
28
|
+
who is shown what.
|
|
29
|
+
|
|
30
|
+
**The relay is up for as long as the board runs.** Uplink and Relay are not
|
|
31
|
+
bypassed, so the player's address exists from the moment the board is built
|
|
32
|
+
until it is stopped. Going on air switches only the microphone and the
|
|
33
|
+
writer. Off air, a listener's player stays connected and waits; stopping the
|
|
34
|
+
board takes the relay down with everything else, and a player that finds
|
|
35
|
+
nothing at its address says so instead of retrying.
|
|
36
|
+
|
|
37
|
+
**The player's address is a [mount](../concepts/mounts.md).** Like every
|
|
38
|
+
mount it is unguessable rather than guarded: whoever holds it can listen. Relay
|
|
39
|
+
names its mount `player` (`mountName`), so the address survives restarts and
|
|
40
|
+
redeploys, and changes only when that name does.
|
|
41
|
+
|
|
42
|
+
## Who is shown what
|
|
43
|
+
|
|
44
|
+
The facade has two panels. **Live Radio** is everybody's: the uplink's dot, the
|
|
45
|
+
number listening, the QR code, the player's address — a link, through
|
|
46
|
+
`"href": "{{value}}"` — and the stream's address for VLC. **Station** is kept
|
|
47
|
+
for the owner (`"visibleTo": "owner"`): the uplink's state and errors, and
|
|
48
|
+
**Go on air** / **Go off air**. So is the notice raising the microphone's
|
|
49
|
+
errors.
|
|
50
|
+
|
|
51
|
+
A member is [sent a projection](../concepts/cloud-boards.md#sharing-a-board-members),
|
|
52
|
+
and what is kept for the owner is left out of it before anything is read from
|
|
53
|
+
it. Of the board, a member is sent Relay's address, stream address and
|
|
54
|
+
listener count, and the writer's status — not the Station panel, not the
|
|
55
|
+
ingest endpoint, not the header carrying `radio-ingest`, and not the
|
|
56
|
+
microphone's errors. Going on air is a configure, which a member is refused
|
|
57
|
+
anyway; they are not offered it.
|
|
58
|
+
|
|
59
|
+
## Sharing it
|
|
60
|
+
|
|
61
|
+
1. Deploy the board to a coordinator from the Readymade desktop app (below).
|
|
62
|
+
2. Open it in Cloud Boards and choose **Members**: one entry per person, the
|
|
63
|
+
address they sign in with and the name you know them by.
|
|
64
|
+
3. Send them the link from *Copy link*. It opens only for somebody on the list.
|
|
65
|
+
4. Press **Go on air**.
|
|
66
|
+
|
|
67
|
+
The address is the same for everybody, and nothing stops a member passing it
|
|
68
|
+
on. Removing somebody from the list closes their view of the board, but not
|
|
69
|
+
what they remember. To cut them off, move the address: give Relay's
|
|
70
|
+
`mountName` a new value in the playground and deploy again. Every listener is
|
|
71
|
+
disconnected, the old address answers nothing, and everybody still on the list
|
|
72
|
+
is shown the new one when they open the link.
|
|
73
|
+
|
|
74
|
+
## Try it
|
|
75
|
+
|
|
76
|
+
- **Deploy from the desktop app.** The Home runtime is the hkp-rt the app
|
|
77
|
+
embeds (`"remote": "embedded"`). A phone's embedded runtime cannot join a
|
|
78
|
+
coordinator, and the deploy preflight says so.
|
|
79
|
+
- **The Relay runs on the hkp-node you keep as the remote `node`**, and has to
|
|
80
|
+
be reachable from wherever your listeners are: the player's address is on
|
|
81
|
+
that server. If it sits behind a reverse proxy, the proxy has to pass
|
|
82
|
+
WebSocket upgrades on `/hosted/`.
|
|
83
|
+
- **Give the secret `radio-ingest` a value** when asked; any long random string
|
|
84
|
+
will do. It is handed to your two runtime servers, not to the coordinator,
|
|
85
|
+
and they keep it in memory only — after either restarts, deploy again.
|
|
86
|
+
- The encoder's channels must match what the Microphone panel reports under
|
|
87
|
+
Channels: 1 for a built-in mic, 2 for most interfaces.
|
|
88
|
+
|
|
89
|
+
Opened in the playground rather than deployed, it is the
|
|
90
|
+
[direct](./live-radio-cloud-direct-demo-board.md) board with its relay always
|
|
91
|
+
up: you are its owner, and see both panels.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Meeting Poll (Browser)
|
|
2
|
+
|
|
3
|
+
[Meeting Poll](./meeting-poll-demo-board.md) with the database moved into the
|
|
4
|
+
browser. The same polls, the same rules, the same statements — and nothing to
|
|
5
|
+
install.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Call a meeting, put up dates, say which ones work, close the poll when a date
|
|
10
|
+
is settled. Your polls are still there the next time you open the board.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One browser runtime, twelve [SQL](../services/sql.md) services. They are the
|
|
15
|
+
other board's services, unchanged: the `sql` service exists in both runtimes
|
|
16
|
+
with one contract, and both runtimes are SQLite, so moving the board meant
|
|
17
|
+
changing the runtime it sits in and nothing else.
|
|
18
|
+
|
|
19
|
+
In the browser, SQL runs SQLite compiled to WebAssembly and keeps the database
|
|
20
|
+
in this browser's storage. The rules are still the schema's — only the
|
|
21
|
+
organiser puts up dates, a closed poll takes nothing more, a person answers a
|
|
22
|
+
date once — so the database still refuses what the page would not have
|
|
23
|
+
offered, and says why.
|
|
24
|
+
|
|
25
|
+
## What moving it cost
|
|
26
|
+
|
|
27
|
+
The team. On hkp-node the tables belong to a server, and every member answers
|
|
28
|
+
from their own device as themselves. Here they belong to this browser, so the
|
|
29
|
+
only person there is to be is whoever is signed in at this screen.
|
|
30
|
+
|
|
31
|
+
Who is answering is decided by the same statements as on the server: whoever
|
|
32
|
+
is signed in to the app. A browser runs its signed-in person's own runtimes, so
|
|
33
|
+
that person is the board's owner here and both organises and answers. Signed
|
|
34
|
+
out, the poll is drawn but takes no answer. Nothing verifies the account — the
|
|
35
|
+
browser is the person — so what it buys is that the board is the same board on
|
|
36
|
+
both runtimes, not that anybody is kept out.
|
|
37
|
+
|
|
38
|
+
So this is the version for trying the board. To put a date to a team, run
|
|
39
|
+
[Meeting Poll](./meeting-poll-demo-board.md) on hkp-node, deploy it and share
|
|
40
|
+
it with them.
|
|
41
|
+
|
|
42
|
+
## Try it
|
|
43
|
+
|
|
44
|
+
Open it signed in. The schema is created on first run, and the polls are kept
|
|
45
|
+
in the browser's IndexedDB under the database name `meetings`.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Meeting Poll
|
|
2
|
+
|
|
3
|
+
Dates for a meeting, answered by everybody it is put to. The board's owner
|
|
4
|
+
calls a meeting and puts up times; everybody else says which ones work for
|
|
5
|
+
them — none, one, or all.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
A Doodle-shaped poll. Call a meeting, propose dates, collect answers, close the
|
|
10
|
+
poll when a date is settled.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [REST runtime](../concepts/runtime.md#the-servers) on hkp-node. Twelve
|
|
15
|
+
[SQL](../services/sql.md) services: seven that change something and five that
|
|
16
|
+
read it back.
|
|
17
|
+
|
|
18
|
+
**Actions** — Who is here · Call a meeting · Put up a date · Withdraw a date ·
|
|
19
|
+
Works for me · Take an answer back · Close or reopen
|
|
20
|
+
|
|
21
|
+
**Queries** — The dates · The meeting · What the owner runs · Dates to
|
|
22
|
+
withdraw · Every meeting
|
|
23
|
+
|
|
24
|
+
Every tap in the facade enters the same pipeline, and the queries at its end
|
|
25
|
+
re-read what it just changed. There is no separate refresh path and no cached
|
|
26
|
+
copy of the poll in the board, so what you see after an action is what the
|
|
27
|
+
database now says — including any change somebody else made in the meantime.
|
|
28
|
+
|
|
29
|
+
Which meeting is shown is the one a person last picked, and until they pick
|
|
30
|
+
one, the meeting called last — so somebody opening the board for the first time
|
|
31
|
+
lands on the poll they were sent it for. Answering a date keeps them on its
|
|
32
|
+
meeting, even after a newer one is called. Switching to another is done on
|
|
33
|
+
**Vote** itself, from **Meetings** above the dates — a member is not shown
|
|
34
|
+
**Organise** at all.
|
|
35
|
+
|
|
36
|
+
## The rules live in the schema
|
|
37
|
+
|
|
38
|
+
None of them is board logic:
|
|
39
|
+
|
|
40
|
+
- **That only the owner calls a meeting** — a trigger.
|
|
41
|
+
- **That a date belongs to a meeting, put up by whoever called it** — two triggers.
|
|
42
|
+
- **Whether a closed poll still takes a date or an answer** — two triggers.
|
|
43
|
+
- **That a person answers a date once** — a unique index.
|
|
44
|
+
|
|
45
|
+
The board therefore never offers something the database would refuse, and when a
|
|
46
|
+
refusal does happen — two people acting at once, a stale page, a client sending
|
|
47
|
+
what the facade would not — the error says *why*, because the constraint that
|
|
48
|
+
fired names itself.
|
|
49
|
+
|
|
50
|
+
Keeping these in the schema rather than the pipeline is the same argument as in
|
|
51
|
+
[Court Booking](./court-booking-demo-board.md): a check followed by a write has
|
|
52
|
+
a gap between them, and a constraint does not.
|
|
53
|
+
|
|
54
|
+
## Who is answering, and who organises
|
|
55
|
+
|
|
56
|
+
Every answer is given in somebody's name, and the board never takes that name
|
|
57
|
+
from the request. The statements use the verified caller directly —
|
|
58
|
+
`$caller_email`, the address the server that verified their sign-in states —
|
|
59
|
+
and there is no "you are" field in the facade or its payloads. Without a
|
|
60
|
+
signed-in caller with a verified address the board shows the poll but takes no
|
|
61
|
+
answers.
|
|
62
|
+
|
|
63
|
+
What somebody may *do* is read the same way. `$caller_role` is what the person
|
|
64
|
+
is to the board — `owner` or `member` — stated by whoever admitted them
|
|
65
|
+
([SQL: who is calling](../services/sql.md#who-is-calling)). Calling a meeting
|
|
66
|
+
records the caller as its organiser only when that role is `owner`; anybody
|
|
67
|
+
else's call names nobody, and the schema refuses it with *only the board's
|
|
68
|
+
owner can call a meeting*. Putting up dates, withdrawing them and closing the
|
|
69
|
+
poll are then the organiser's, which is the owner.
|
|
70
|
+
|
|
71
|
+
Others are never shown an address. Each person's name is the one the board's
|
|
72
|
+
member list gives them, recorded by **Who is here** as they come by; a voter
|
|
73
|
+
the list names nothing is *a member*, and the owner, whom their own list need
|
|
74
|
+
not name, is *the organiser*.
|
|
75
|
+
|
|
76
|
+
## The facade
|
|
77
|
+
|
|
78
|
+
Two tabs. **Vote** — *Which dates work?* — is what most people ever see: who is
|
|
79
|
+
answering (`{ "$user": "name" }`), the meetings to switch between, the one
|
|
80
|
+
picked and whose it is, and one row per date. **Organise** — *The
|
|
81
|
+
meeting* — is the owner's: the meetings to pick from, then for the one picked,
|
|
82
|
+
putting up a date, closing the poll and withdrawing dates, and calling a new
|
|
83
|
+
meeting. `defaultTab` is Vote, because answering is the
|
|
84
|
+
common case and setting up happens once.
|
|
85
|
+
|
|
86
|
+
Organise is kept for the owner (`"visibleTo": "owner"` on its tab): deployed
|
|
87
|
+
and shared, the coordinator leaves the tab and its panel out of the facade a
|
|
88
|
+
member is sent, so a member sees Vote alone. Its controls are also drawn from
|
|
89
|
+
rows only the owner is given, because who organises a meeting is the
|
|
90
|
+
database's to decide — **What the owner runs** and **Dates to withdraw** end
|
|
91
|
+
in `WHERE $caller_role = 'owner'`. Neither is what keeps the poll safe: Vote
|
|
92
|
+
reaches the same entry point, which takes any payload, and it is the
|
|
93
|
+
statements behind it that refuse.
|
|
94
|
+
|
|
95
|
+
## Sharing it with a team
|
|
96
|
+
|
|
97
|
+
1. Deploy the board to a coordinator.
|
|
98
|
+
2. Open it in Cloud Boards and choose **Members**: one entry per person, the
|
|
99
|
+
address they sign in with and the name the others should see. Add yourself
|
|
100
|
+
too if you want to be called something other than *the organiser*.
|
|
101
|
+
3. Open it from Cloud Boards — it opens on its facade — and call a meeting and
|
|
102
|
+
put up its dates on **Organise**.
|
|
103
|
+
4. Send everybody the link from *Copy link*. It opens only for somebody on the
|
|
104
|
+
list.
|
|
105
|
+
|
|
106
|
+
Each member sees the poll from their own side — their answers marked as theirs,
|
|
107
|
+
everybody else's by name. One thing to know: a member's view is redrawn by their
|
|
108
|
+
own actions, so somebody else's answer shows on their next tap rather than at
|
|
109
|
+
once.
|
|
110
|
+
|
|
111
|
+
## Try it
|
|
112
|
+
|
|
113
|
+
Needs a signed-in account and an hkp-node kept under the name `node` in
|
|
114
|
+
*Manage runtime servers*. Opened in the playground you are the board's owner:
|
|
115
|
+
call a meeting on **Organise** to start. The schema is created on first run, in
|
|
116
|
+
a database of its own (`meetings`) — the board's earlier `meeting-poll`
|
|
117
|
+
database is left as it was, and its polls are not carried over. They named
|
|
118
|
+
people by whatever was typed rather than by a verified address, so not one of
|
|
119
|
+
them would match a caller; and since the schema only creates what is missing,
|
|
120
|
+
opened on the old database it would have kept the old tables and rules beside
|
|
121
|
+
the new ones.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Mounted Endpoint (hkp-rt)
|
|
2
|
+
|
|
3
|
+
Two runtimes on the same C++ server, one hosting an HTTP endpoint and the other
|
|
4
|
+
calling it — without either one knowing the address in advance. This is what a
|
|
5
|
+
[mount](../concepts/mounts.md) is for.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Every five seconds the caller requests `/hello` from an endpoint hosted by the
|
|
10
|
+
other runtime, and the reply appears in a monitor.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
Two [REST runtimes](../concepts/runtime.md#the-servers), both on the hkp-rt
|
|
15
|
+
the Readymade app embeds, named as `"remote": "embedded"`.
|
|
16
|
+
|
|
17
|
+
### Endpoint
|
|
18
|
+
|
|
19
|
+
1. **Echo Endpoint**, an `http-server-subservices` in `process_on_session` mode,
|
|
20
|
+
binds no port. Its runtime gives it a path on the server's own listener and
|
|
21
|
+
publishes the resulting address in its state as `__hkpMount`. Its nested
|
|
22
|
+
pipeline — a single [Map](../services/map.md) — is what answers the caller.
|
|
23
|
+
2. **End Of Chain**, a [Stopper](../services/stopper.md). The nested pipeline
|
|
24
|
+
already answered the HTTP request; letting the value continue down the outer
|
|
25
|
+
chain would be a second, meaningless run.
|
|
26
|
+
|
|
27
|
+
### Caller
|
|
28
|
+
|
|
29
|
+
1. **Every 5 seconds**, a [Timer](../services/timer.md).
|
|
30
|
+
2. **Call The Endpoint**, an [HTTP client](../services/http.md), whose `url` is
|
|
31
|
+
`hkp-mount://endpoint-node/echo-server` — a *reference to the service*, not
|
|
32
|
+
an address.
|
|
33
|
+
3. **Response**, a [Monitor](../services/monitor.md).
|
|
34
|
+
|
|
35
|
+
## The point
|
|
36
|
+
|
|
37
|
+
The endpoint's address is assigned when the board loads, so it cannot be written
|
|
38
|
+
into the board. Rather than hard-coding one, the caller names the service that
|
|
39
|
+
owns it, and the board's [coordinator](../concepts/coordinator.md) resolves that
|
|
40
|
+
reference into a real address — handing it over in a separate field so the board
|
|
41
|
+
still says what it *meant* when you save it again.
|
|
42
|
+
|
|
43
|
+
Runtime ids are namespaced per user, so `endpoint-node` here never collides with
|
|
44
|
+
somebody else's runtime of the same name on the same server.
|
|
45
|
+
|
|
46
|
+
## Try it
|
|
47
|
+
|
|
48
|
+
Open it in the Readymade app, whose own runtime both of them name. The browser
|
|
49
|
+
variant of the same idea is `mounted-endpoint-demo-board.json`, on the
|
|
50
|
+
[Mounts](../concepts/mounts.md) page.
|