@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,165 @@
|
|
|
1
|
+
# Nested Rhythm
|
|
2
|
+
|
|
3
|
+
A drum groove with no sequencer, no step grid and no wiring: every hit is timed
|
|
4
|
+
by where it sits in a nest of sub-services. Four patterns to choose from, each
|
|
5
|
+
built from the same kind of blocks. The tempo and the pattern are set in one
|
|
6
|
+
place, and every level of the nest reads them from there.
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
|
|
10
|
+
Press **Play** and it loops a one-bar groove until you press **Stop**. Pick a
|
|
11
|
+
pattern and it takes over at the next bar line. Turn **Tempo** and the whole
|
|
12
|
+
groove follows. The playground shows the playhead: each
|
|
13
|
+
service lights up while it runs, and a waiting Timer stays lit for as long as
|
|
14
|
+
it waits, so you can watch the bar move down through the levels.
|
|
15
|
+
|
|
16
|
+
## How it works
|
|
17
|
+
|
|
18
|
+
One [browser runtime](../concepts/runtime.md) holding one
|
|
19
|
+
[scope](../concepts/scopes.md), the **Groove**. Every bar starts with the clock
|
|
20
|
+
ticking; **Which pattern** reads the chosen pattern's name out of a slot, and a
|
|
21
|
+
[Switch](../services/switch.md) routes the bar into the pattern of that name.
|
|
22
|
+
Each pattern is a [Browser Sub-Service](../services/browser-sub-service.md)
|
|
23
|
+
holding four more, one per beat, and each beat holds the **Notes** that fall
|
|
24
|
+
in it:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Groove (scope: own slots)
|
|
28
|
+
├─ Tempo (Hold → slot "tempo", 120)
|
|
29
|
+
├─ Pattern (Hold → slot "pattern", "straight")
|
|
30
|
+
├─ One bar (Timer, every 4 beats)
|
|
31
|
+
├─ Which pattern (Hold ← slot "pattern")
|
|
32
|
+
└─ Patterns (Switch)
|
|
33
|
+
├─ Straight (inherits slots)
|
|
34
|
+
│ ├─ Beat 1 (inherits slots)
|
|
35
|
+
│ │ ├─ Kick Note: 0 · kick · 0
|
|
36
|
+
│ │ ├─ Hi-hat Note: 0 · hi-hat · ½
|
|
37
|
+
│ │ │ ├─ Wait before (Timer, 0 beats)
|
|
38
|
+
│ │ │ ├─ Sound (Sound: hi-hat)
|
|
39
|
+
│ │ │ └─ Wait after (Timer, ½ beat)
|
|
40
|
+
│ │ └─ Hi-hat Note: 0 · quieter hi-hat · ½
|
|
41
|
+
│ ├─ Beat 2
|
|
42
|
+
│ │ ├─ Snare Note: 0 · snare · 0
|
|
43
|
+
│ │ └─ …
|
|
44
|
+
│ ├─ Beat 3
|
|
45
|
+
│ └─ Beat 4
|
|
46
|
+
├─ Shuffle
|
|
47
|
+
├─ Four on the floor
|
|
48
|
+
└─ Funk
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The Note is the board's one [block](../concepts/blocks.md): defined once, used
|
|
52
|
+
for every drum hit, with four parameters given at each use —
|
|
53
|
+
|
|
54
|
+
| Parameter | What it is |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `waitBefore` | beats to wait before the sound |
|
|
57
|
+
| `sound` | which drum: `kick`, `snare`, `hihat` |
|
|
58
|
+
| `waitAfter` | beats to wait after it |
|
|
59
|
+
| `volume` | 0 to 1 |
|
|
60
|
+
|
|
61
|
+
A Timer that is not periodic holds whatever it is given for its delay, then
|
|
62
|
+
passes it on, and one of zero passes it on at once. A sub-service answers once
|
|
63
|
+
its pipeline has, so **a Note lasts as long as its two waits**, a beat as
|
|
64
|
+
long as its Notes, and a bar as long as its four beats. A Note with nothing after it sounds together with the next
|
|
65
|
+
one: the kick and the first hi-hat land on the same instant because the kick
|
|
66
|
+
waits for nothing.
|
|
67
|
+
|
|
68
|
+
Each Note carries its own stretch of time, so it can be read, moved or changed
|
|
69
|
+
without working out what its neighbours do. That is the reason for two waits
|
|
70
|
+
where one would do: a wait before the sound could always be written as a wait
|
|
71
|
+
after the note before it, but then shaping one note would mean editing
|
|
72
|
+
another.
|
|
73
|
+
|
|
74
|
+
## The patterns
|
|
75
|
+
|
|
76
|
+
Every pattern is four beats of Notes. What makes them different is only which
|
|
77
|
+
drums are in them and how their waits are split:
|
|
78
|
+
|
|
79
|
+
| Pattern | Kick | Snare | Hi-hat |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| **Straight** | 1 | 2, 4 | every eighth |
|
|
82
|
+
| **Shuffle** | 1, 3 | 2, 4 | every eighth, swung |
|
|
83
|
+
| **Four on the floor** | every beat | 2, 4 | the off-beats |
|
|
84
|
+
| **Funk** | 1, the "and" of 2, the "and" of 3 | 2, 4 | every sixteenth |
|
|
85
|
+
|
|
86
|
+
Straight and Shuffle show what the wait before is for. A straight hi-hat is
|
|
87
|
+
`0 · hi-hat · ½`: it plays, then takes half a beat. The Shuffle's second
|
|
88
|
+
hi-hat of each beat is `⅙ · hi-hat · ⅓`: it still takes half a beat, but plays
|
|
89
|
+
a sixth of a beat into it, which lands it two thirds of the way through the
|
|
90
|
+
beat. The swing lives in that one note; the Note before it is a plain eighth.
|
|
91
|
+
|
|
92
|
+
The Funk's pushed kicks are the same idea without a wait: a `0 · kick · 0` Note
|
|
93
|
+
just before the third sixteenth of a beat sounds with that hi-hat, on the
|
|
94
|
+
"and".
|
|
95
|
+
|
|
96
|
+
A pattern is chosen once per bar, when Which pattern reads the slot, so a new
|
|
97
|
+
choice never cuts into the bar that is playing.
|
|
98
|
+
|
|
99
|
+
## Where the tempo lives
|
|
100
|
+
|
|
101
|
+
No Timer on the board knows how long anything takes. Each one waits a number
|
|
102
|
+
of [**beats**](../services/timer.md#beats), and looks the tempo up in a
|
|
103
|
+
[slot](../services/hold.md#where-its-cells-live) called `tempo` each time it
|
|
104
|
+
waits.
|
|
105
|
+
|
|
106
|
+
The slot belongs to the Groove, which keeps its cells to itself
|
|
107
|
+
(`scope: { slots: "own" }`); the **Tempo** Hold writes the board's tempo into
|
|
108
|
+
it. Every scope inside says `scope: { slots: "inherit" }`, meaning *my cells
|
|
109
|
+
are the ones of whatever holds me*. So a Note asks its beat, which asks the
|
|
110
|
+
pattern's bar, which asks the Groove. The Switch between them is not a scope
|
|
111
|
+
and passes the question straight through: a case is a branch of the pipeline
|
|
112
|
+
around it. The Note is written without knowing where the tempo is set, or that
|
|
113
|
+
it is set at all.
|
|
114
|
+
|
|
115
|
+
That default matters: a scope keeps its cells to itself unless it says
|
|
116
|
+
otherwise, so a reusable block cannot pick up a slot by accident. Here each
|
|
117
|
+
level opts in, and the board says so.
|
|
118
|
+
|
|
119
|
+
The Tempo knob configures the Hold, which writes the slot. The next wait
|
|
120
|
+
anywhere in the nest reads the new tempo, and the clock applies it from the
|
|
121
|
+
bar after the one already scheduled. The pattern buttons do the same with the
|
|
122
|
+
Pattern Hold. The board saves the tempo and pattern last set, so the groove
|
|
123
|
+
comes back as it was left.
|
|
124
|
+
|
|
125
|
+
## Why one block
|
|
126
|
+
|
|
127
|
+
An earlier version of this board built each pattern from blocks for a beat,
|
|
128
|
+
two beats, a swung beat and so on, each defined once and used wherever it
|
|
129
|
+
recurred. It wrote less down, but the blocks were whatever happened to repeat
|
|
130
|
+
across the four patterns: add a fifth pattern and the best grouping changes.
|
|
131
|
+
A musician changing a pattern thinks in notes, not in which repeats a block
|
|
132
|
+
happens to capture. One Note block with four parameters fits any pattern, and
|
|
133
|
+
a new pattern is four new beats of Notes.
|
|
134
|
+
|
|
135
|
+
The beats are plain sub-services, not blocks: they are there to give a bar the
|
|
136
|
+
shape a musician reads it in, not to be reused. Each one is exactly a beat
|
|
137
|
+
long, so a beat can be opened, read and changed on its own, and its Notes'
|
|
138
|
+
waits add up to one.
|
|
139
|
+
|
|
140
|
+
## Timing
|
|
141
|
+
|
|
142
|
+
The clock starts every bar, so the drums never drift apart over time. Within
|
|
143
|
+
a bar each wait runs a couple of milliseconds late in the browser, and those
|
|
144
|
+
add up to around 20 ms by the last eighth before the next tick starts the bar
|
|
145
|
+
fresh. Turning the tempo mid-bar gives one uneven bar: the waits still ahead
|
|
146
|
+
play at the new tempo, but the next tick was already scheduled at the old one.
|
|
147
|
+
|
|
148
|
+
**Stop** does two things: it stops the clock, and it
|
|
149
|
+
[cancels](../services/browser-sub-service.md#commands) the Groove. Cancelling
|
|
150
|
+
ends the bar already playing where it is, so the groove stops at once rather
|
|
151
|
+
than at the end of the bar.
|
|
152
|
+
|
|
153
|
+
A drum is heard after the latency of the audio output, which the Sound panels
|
|
154
|
+
show. On wired speakers it is a few milliseconds; a Bluetooth device can add a
|
|
155
|
+
couple of hundred, and then the playhead in the playground runs visibly ahead
|
|
156
|
+
of what you hear.
|
|
157
|
+
|
|
158
|
+
## Try it
|
|
159
|
+
|
|
160
|
+
Press **Play**, then switch between the patterns and turn **Tempo**. Open the
|
|
161
|
+
Shuffle in the playground and set the `waitBefore` of a swung hi-hat to 0.25
|
|
162
|
+
with a `waitAfter` of 0.25 for a harder swing on that one eighth — the others
|
|
163
|
+
keep theirs. Or add a Note: a `0 · snare · 0` at volume 0.2, placed just
|
|
164
|
+
before the second hi-hat of Straight's Beat 2, sounds with it — a ghost snare on the
|
|
165
|
+
"and" of 2, and nothing else in the bar moves.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Next Bus
|
|
2
|
+
|
|
3
|
+
Asks Berlin's public transport API when the next bus leaves and answers with a
|
|
4
|
+
sentence somebody could say out loud. A skill target: built to be called by the
|
|
5
|
+
voice assistant, not opened on its own.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It returns `{ "text": "The next bus leaves in 7 minutes." }`, or a fallback
|
|
10
|
+
sentence when nothing is departing in the window it asked about.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [browser runtime](../concepts/runtime.md), four services, no state.
|
|
15
|
+
|
|
16
|
+
1. **Fetch Departures**, a [Fetcher](../services/fetcher.md), GETs from
|
|
17
|
+
`v6.bvg.transport.rest` for one stop and one direction, ten minutes ahead.
|
|
18
|
+
2. **Pick Departure**, a [Map](../services/map.md) in `replace` mode, takes the
|
|
19
|
+
first departure's `when` timestamp.
|
|
20
|
+
3. **Build Sentence**, another [Map](../services/map.md), turns the difference
|
|
21
|
+
between then and now into minutes and wraps it in a sentence.
|
|
22
|
+
4. **Sentence**, a [Monitor](../services/monitor.md), reports the answer.
|
|
23
|
+
|
|
24
|
+
Which stop it watches is the Fetcher's `url` and nothing else — change the
|
|
25
|
+
`stops/…` and `direction` ids there to point it somewhere else.
|
|
26
|
+
|
|
27
|
+
## Why it is a board
|
|
28
|
+
|
|
29
|
+
The Voice Assistant with skills board
|
|
30
|
+
(`boards/voice-assistant-skills-demo-board.json`) dispatches to this one by name
|
|
31
|
+
through
|
|
32
|
+
[Skill Router](../services/skill-router.md), and reads the returned `text` aloud
|
|
33
|
+
with [text-to-speech](../services/text-to-speech.md). Save it locally as
|
|
34
|
+
`next bus` or the dispatcher will not find it.
|
|
35
|
+
|
|
36
|
+
[Next Bus Switch](./next-bus-switch-board.md) is the same board with the
|
|
37
|
+
sentence-building moved into a [Switch](../services/switch.md); it is worth
|
|
38
|
+
reading the two together.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Next Bus Switch
|
|
2
|
+
|
|
3
|
+
The same job as [Next Bus](./next-bus-board.md) — when does the next bus leave —
|
|
4
|
+
built so that the "or else" is a branch in the board rather than a conditional
|
|
5
|
+
hidden inside a template string.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Identical output: a speakable sentence about the next departure, or a sentence
|
|
10
|
+
saying there is not one.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
One [browser runtime](../concepts/runtime.md).
|
|
15
|
+
|
|
16
|
+
1. **Fetch Departures**, a [Fetcher](../services/fetcher.md), asks
|
|
17
|
+
`v6.bvg.transport.rest` for the next ten minutes at one stop.
|
|
18
|
+
2. **Pick Departure**, a [Map](../services/map.md), takes the first upcoming one.
|
|
19
|
+
3. **Branch Sentence**, a [Switch](../services/switch.md), is the difference.
|
|
20
|
+
Its matched case runs a [Map](../services/map.md) building
|
|
21
|
+
*"The bus leaves in N minutes at HH:mm."*; its `default` case runs a
|
|
22
|
+
different Map answering *"I found no upcoming departures."*
|
|
23
|
+
4. **Sentence**, a [Monitor](../services/monitor.md).
|
|
24
|
+
|
|
25
|
+
## Why this version exists
|
|
26
|
+
|
|
27
|
+
In [Next Bus](./next-bus-board.md) the missing-departure case is handled inside
|
|
28
|
+
the template that builds the sentence — a conditional expressed as an
|
|
29
|
+
expression. It works, and it is the shorter board.
|
|
30
|
+
|
|
31
|
+
This version makes the two outcomes two visible paths. You can see at a glance
|
|
32
|
+
that there are exactly two answers, and each one is a plain template with no
|
|
33
|
+
branching in it. That is the trade the
|
|
34
|
+
[structured-flow principle](../concepts/runtime.md#control-flow) is about:
|
|
35
|
+
a conditional inside a string is invisible, a Switch is a thing you can point
|
|
36
|
+
at.
|
|
37
|
+
|
|
38
|
+
Both are correct. Which one is better depends on whether the board is something
|
|
39
|
+
you will come back to.
|
|
40
|
+
|
|
41
|
+
## Try it
|
|
42
|
+
|
|
43
|
+
Save it as `next bus switch` and point the skill router's *next bus departure*
|
|
44
|
+
skill at it to use this version instead.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Night Groove
|
|
2
|
+
|
|
3
|
+
The [Timeline demo](./timeline-demo-board.md)'s night sky with a drum groove
|
|
4
|
+
under it. One timeline plays both: it counts in beats, and its placements say
|
|
5
|
+
when each drum and each image comes in. Four bars long and looping, with a
|
|
6
|
+
tempo knob that speeds up the band and the sky together.
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
|
|
10
|
+
Press **Play**. The hi-hats start on the first beat, and a star pops in on each
|
|
11
|
+
beat of the first bar. On the second bar the kick comes in, four to the bar,
|
|
12
|
+
and a rocket launches with it; a moon appears in the corner and beats with
|
|
13
|
+
every kick. On the third bar the snare lands on the backbeat and the planet
|
|
14
|
+
arrives. The last two beats are a snare fill, and a comet crosses the sky
|
|
15
|
+
while it plays. Then it all starts over.
|
|
16
|
+
|
|
17
|
+
**Pause** holds the picture and silences the band at once; **Play** carries on
|
|
18
|
+
from there. **Stop** goes back to the start. Turning **Tempo** changes how long
|
|
19
|
+
a beat lasts, from the next frame on, for the drums and the pictures alike.
|
|
20
|
+
|
|
21
|
+
## How it works
|
|
22
|
+
|
|
23
|
+
One [browser runtime](../concepts/runtime.md) with five services:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Tempo (Hold, writes 120 into the slot "tempo")
|
|
27
|
+
Show (Timeline, own clock in beats: 16, looping, 60 fps)
|
|
28
|
+
Band (Tracks, one track per drum; passes the frame on)
|
|
29
|
+
├─ hats Drum · hihat on 0 and ½ of every beat
|
|
30
|
+
├─ kick Drum · kick on every beat
|
|
31
|
+
├─ snare Drum · snare on the second of every two beats
|
|
32
|
+
└─ fill Drum · six snares over two beats
|
|
33
|
+
Scene (Tracks, one track per picture, run in order)
|
|
34
|
+
├─ sky Timeline, reads the Show's time
|
|
35
|
+
├─ moon Timeline, takes the name "kick"
|
|
36
|
+
├─ planet Pop
|
|
37
|
+
├─ star-1 … star-4 Pop
|
|
38
|
+
├─ rocket Fly
|
|
39
|
+
└─ comet Fly
|
|
40
|
+
Canvas (draws the Scene's answer)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The **Show** keeps the clock, sixty times a second. It counts in
|
|
44
|
+
[beats](../services/timeline.md#where-time-comes-from), and a beat is as long
|
|
45
|
+
as the tempo held in the slot `tempo` says. **Tempo** is a
|
|
46
|
+
[Hold](../services/hold.md) that writes 120 there when the board loads, and
|
|
47
|
+
the knob writes a new value into it.
|
|
48
|
+
|
|
49
|
+
Every frame goes to the **Band** first. It is a [Tracks](../services/tracks.md)
|
|
50
|
+
service whose tracks only make a sound; its reducer answers with the frame it
|
|
51
|
+
was given, so the **Scene** behind it receives the Show's frame, not the Band's
|
|
52
|
+
answers. The Scene then draws as the Timeline demo does.
|
|
53
|
+
|
|
54
|
+
## The Drum block
|
|
55
|
+
|
|
56
|
+
The drums are written once, as a [block](../concepts/blocks.md) of three
|
|
57
|
+
services:
|
|
58
|
+
|
|
59
|
+
| Service | What it does |
|
|
60
|
+
|---|---|
|
|
61
|
+
| **Loop** | A timeline driven by the Show, a few beats long and looping, with an [action](../services/timeline.md) at each hit |
|
|
62
|
+
| **On a hit** | A [Filter](../services/filter.md) that lets a frame through only when an action fell in it |
|
|
63
|
+
| **Sound** | A [Sound](../services/sound.md) in drums mode that plays its drum for every frame it is given |
|
|
64
|
+
|
|
65
|
+
A use says which drum, how loud, how long its loop is and where the hits lie:
|
|
66
|
+
|
|
67
|
+
| Use | Drum | Loop | Hits at | Volume |
|
|
68
|
+
|---|---|---|---|---|
|
|
69
|
+
| `hats` | hihat | 1 beat | 0, 0.5 | 0.35 |
|
|
70
|
+
| `kick` | kick | 1 beat | 0 | 0.9 |
|
|
71
|
+
| `snare` | snare | 2 beats | 1 | 0.7 |
|
|
72
|
+
| `fill` | snare | 2 beats | 0, 0.5, 1, 1.25, 1.5, 1.75 | 0.5 |
|
|
73
|
+
|
|
74
|
+
Nothing is scheduled. A hit is an action on a timeline, and the timeline works
|
|
75
|
+
out from each frame's time which actions it passed. That is why Pause silences
|
|
76
|
+
the band: no frame, no hit. It also means a hit sounds with the first frame
|
|
77
|
+
after its moment, up to a sixtieth of a second late.
|
|
78
|
+
|
|
79
|
+
## Placements
|
|
80
|
+
|
|
81
|
+
The Show's [placements](../services/timeline.md#placements) arrange sound and
|
|
82
|
+
picture the same way, by name, in beats:
|
|
83
|
+
|
|
84
|
+
| Beat | For | Sound | Picture |
|
|
85
|
+
|---|---|---|---|
|
|
86
|
+
| 0 | 16 | `hats` | |
|
|
87
|
+
| 0, 1, 2, 3 | 4 each | | `star-1` … `star-4` |
|
|
88
|
+
| 4 | 12 | `kick` | the moon, which takes `kick` too |
|
|
89
|
+
| 4 | 8 | | `rocket` |
|
|
90
|
+
| 8 | 6 | `snare` | `planet` |
|
|
91
|
+
| 12 | 2 | | `star-1`, again |
|
|
92
|
+
| 14 | 2 | `fill` | `comet` |
|
|
93
|
+
|
|
94
|
+
A drum's loop **repeats** for as long as its placement lasts: the kick's one-beat
|
|
95
|
+
loop plays twelve times. A picture that does not loop is **stretched** to its
|
|
96
|
+
placement, as in the Timeline demo: Pop is three beats of its own, played over
|
|
97
|
+
four.
|
|
98
|
+
|
|
99
|
+
The moon shows that a name can be taken twice. The Show places `kick` once;
|
|
100
|
+
the kick's drum and the moon's timeline both take it. The moon loops one beat,
|
|
101
|
+
its radius jumping to 10 % on the beat and easing back to 7 %, so it is on
|
|
102
|
+
screen exactly while the kick plays and swells on every kick.
|
|
103
|
+
|
|
104
|
+
## Try it
|
|
105
|
+
|
|
106
|
+
Open the Show's timeline and drag the `snare` placement to start on beat 4:
|
|
107
|
+
the backbeat and the planet still arrive separately, because the planet has
|
|
108
|
+
its own placement. Set the moon's `placement` to `snare` and it rises with the
|
|
109
|
+
snare instead, on the third bar. Turn the tempo right down and watch the
|
|
110
|
+
stars pop in slow motion, one per beat.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Noise Alert
|
|
2
|
+
|
|
3
|
+
Watches the microphone level and sends a push notification when a room gets too
|
|
4
|
+
loud. Four services, one of which exists purely to stop it firing forty times a
|
|
5
|
+
second.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It measures sound level continuously, and when the level crosses a threshold you
|
|
10
|
+
set, posts a message to an [ntfy.sh](https://ntfy.sh) topic — which arrives on
|
|
11
|
+
your phone.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
One [browser runtime](../concepts/runtime.md). Audio never leaves the page; only
|
|
16
|
+
the alert does.
|
|
17
|
+
|
|
18
|
+
1. [Microphone Monitor](../services/microphone-monitor.md) samples the input
|
|
19
|
+
level every 50 ms. It starts stopped, because a board that grabs the
|
|
20
|
+
microphone the moment it loads would be rude.
|
|
21
|
+
2. [Filter](../services/filter.md) is the threshold. Below it, the filter stops
|
|
22
|
+
propagation and the rest of the chain never runs — which is the ordinary way
|
|
23
|
+
to express "only when" without a branch.
|
|
24
|
+
3. [Debounce](../services/debounce.md) holds a three-second cooldown. Without it
|
|
25
|
+
a single loud noise would send twenty notifications, because the level stays
|
|
26
|
+
over the line for as long as the noise lasts.
|
|
27
|
+
4. [Fetcher](../services/fetcher.md) POSTs to the ntfy topic. Its body is an
|
|
28
|
+
expression, not a fixed string —
|
|
29
|
+
`concat('Noise threshold exceeded! Level: ', string(round(params.levelDb, 1)), ' dB')` —
|
|
30
|
+
so the measured level travels with the alert.
|
|
31
|
+
|
|
32
|
+
Steps 2 and 3 are the whole design. The measurement is trivial; making it fire
|
|
33
|
+
*once per event* rather than once per sample is the part that takes thought, and
|
|
34
|
+
it is two services rather than any code.
|
|
35
|
+
|
|
36
|
+
## The facade
|
|
37
|
+
|
|
38
|
+
A level meter shows the live reading, a knob sets the threshold, two buttons
|
|
39
|
+
start and stop the monitor, and a text input holds the ntfy topic.
|
|
40
|
+
|
|
41
|
+
## Try it
|
|
42
|
+
|
|
43
|
+
Replace `YOUR_TOPIC_NAME` in the Fetcher URL with a topic of your own, subscribe
|
|
44
|
+
to it in the ntfy app, then start the monitor and make a noise.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Pad Groove
|
|
2
|
+
|
|
3
|
+
A four-chord song with no picture: a soft pad, a bass line and the drums from
|
|
4
|
+
[Night Groove](./night-groove-demo-board.md), arranged on one
|
|
5
|
+
[timeline](../services/timeline.md) that counts in beats. Eight bars long and
|
|
6
|
+
looping, with a tempo knob.
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
|
|
10
|
+
Press **Play**. For two bars the pad plays alone: A minor 7, F major 7,
|
|
11
|
+
C major and G major, a chord a bar, each swelling in and fading into the
|
|
12
|
+
next. The hi-hats join on the third bar. On the fifth the bass and the kick
|
|
13
|
+
come in together, and on the seventh the snare lands on the backbeat. The last
|
|
14
|
+
two beats are a snare fill, and the song starts over with the pad.
|
|
15
|
+
|
|
16
|
+
**Pause** stops anything new from playing and **Play** carries on from there;
|
|
17
|
+
**Stop** goes back to the start. A chord already sounding plays out its bar and
|
|
18
|
+
its release either way. **Tempo** changes how long a beat lasts, from the next
|
|
19
|
+
frame on, and the chords are held for their bar at the new tempo.
|
|
20
|
+
|
|
21
|
+
## How it works
|
|
22
|
+
|
|
23
|
+
One [browser runtime](../concepts/runtime.md) with three services:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Tempo (Hold, writes 96 into the slot "tempo")
|
|
27
|
+
Song (Timeline, own clock in beats: 32, looping, 60 fps)
|
|
28
|
+
Band (Tracks, one track per part)
|
|
29
|
+
├─ pad Notes · soft wave, a chord a bar
|
|
30
|
+
├─ bass Notes · triangle wave, four notes a bar
|
|
31
|
+
├─ hats Drum · hihat on 0 and ½ of every beat
|
|
32
|
+
├─ kick Drum · kick on 0 and 2½ of every bar
|
|
33
|
+
├─ snare Drum · snare on the second of every two beats
|
|
34
|
+
└─ fill Drum · six snares over two beats
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The **Song** keeps the clock and counts in beats of the tempo held in the slot
|
|
38
|
+
`tempo`. Every frame carries that tempo along with the time, and the **Band**
|
|
39
|
+
gives each frame to every part. A part that is not placed answers null at once
|
|
40
|
+
and plays nothing.
|
|
41
|
+
|
|
42
|
+
## Two blocks
|
|
43
|
+
|
|
44
|
+
Every part is a use of one of two [blocks](../concepts/blocks.md). **Drum** is
|
|
45
|
+
Night Groove's: a loop of hits and a [Sound](../services/sound.md) that plays
|
|
46
|
+
one drum. **Notes** is its melodic counterpart:
|
|
47
|
+
|
|
48
|
+
| Service | What it does |
|
|
49
|
+
|---|---|
|
|
50
|
+
| **Loop** | A timeline driven by the Song, a few beats long and looping, with an action for every note: `{ "at": 4, "data": { "note": "F3" } }` |
|
|
51
|
+
| **On a note** | A [Filter](../services/filter.md) that lets a frame through only when a note fell in it |
|
|
52
|
+
| **Notes and tempo** | A [Map](../services/map.md) that keeps the notes due and the frame's tempo: `{ "notes": [...], "tempo": 96 }` |
|
|
53
|
+
| **Synth** | A Sound in synth mode that plays every note it is given at once |
|
|
54
|
+
|
|
55
|
+
A chord is several actions at the same moment: a timeline fires every action
|
|
56
|
+
due in a frame, in list order, so the four notes of a chord reach the synth
|
|
57
|
+
together.
|
|
58
|
+
|
|
59
|
+
| Use | Wave | Loop | Attack | Held for | Release | Volume |
|
|
60
|
+
|---|---|---|---|---|---|---|
|
|
61
|
+
| `pad` | soft | 16 beats | 0.8 s | 4 beats | 1.6 s | 0.09 per note |
|
|
62
|
+
| `bass` | triangle | 16 beats | 0.01 s | 0.4 beats | 0.12 s | 0.45 |
|
|
63
|
+
|
|
64
|
+
Note lengths are in **beats**, which is why the tempo travels in the frame.
|
|
65
|
+
A service inside a [Tracks](../services/tracks.md) track sees only the slots
|
|
66
|
+
of its track, not the `tempo` slot the Song reads. So the Song puts the tempo
|
|
67
|
+
it counted at on every frame, the Map hands it to the synth with the notes,
|
|
68
|
+
and the synth holds each note for its beats at that tempo. The pad's release
|
|
69
|
+
starts after its bar, so each chord fades out while the next one swells in.
|
|
70
|
+
|
|
71
|
+
## Placements
|
|
72
|
+
|
|
73
|
+
| Beat | For | Part |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| 0 | 32 | `pad` |
|
|
76
|
+
| 8 | 24 | `hats` |
|
|
77
|
+
| 16 | 16 | `bass`, `kick` |
|
|
78
|
+
| 24 | 6 | `snare` |
|
|
79
|
+
| 30 | 2 | `fill` |
|
|
80
|
+
|
|
81
|
+
A looping part **repeats** for as long as its placement lasts, from the moment
|
|
82
|
+
it is placed. The pad and the bass each loop four bars. The bass comes in on
|
|
83
|
+
beat 16, where the pad's loop starts over, so the first note of the bass is
|
|
84
|
+
under the first chord of the pad. Placed on beat 8 instead, the bass would
|
|
85
|
+
play A under the C major chord.
|
|
86
|
+
|
|
87
|
+
## Try it
|
|
88
|
+
|
|
89
|
+
Open the pad's use and give it a `wave` of `organ`, or a `release` of 3 for a
|
|
90
|
+
wash of overlapping chords. Drag the `bass` placement in the Song's timeline to
|
|
91
|
+
beat 8 and hear it come in on the wrong chord, then to beat 0, where both loops
|
|
92
|
+
start together again. Turn the tempo down to 60: the chords stretch with the
|
|
93
|
+
bars.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Peer Chat
|
|
2
|
+
|
|
3
|
+
Two people, two browsers, no server in between. Four services and a public
|
|
4
|
+
signalling host are enough for a working chat.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
Type a message; it appears in the other person's window. Both sides run the same
|
|
9
|
+
board, each naming itself and the other.
|
|
10
|
+
|
|
11
|
+
## How it works
|
|
12
|
+
|
|
13
|
+
One [browser runtime](../concepts/runtime.md).
|
|
14
|
+
|
|
15
|
+
1. **Message**, an [Injector](../services/injector.md) in plain-text mode, is
|
|
16
|
+
the composer.
|
|
17
|
+
2. [Peer Socket](../services/peer-socket.md) in *Receive and Send* does the
|
|
18
|
+
rest. It registers under a `peerName`, dials `targetPeer`, and pushes
|
|
19
|
+
anything that arrives downstream on its own — independently of anything you
|
|
20
|
+
type.
|
|
21
|
+
3. **Incoming Messages**, a [Monitor](../services/monitor.md), keeps the thread.
|
|
22
|
+
4. [Stopper](../services/stopper.md) ends the chain.
|
|
23
|
+
|
|
24
|
+
## Why the stopper is there
|
|
25
|
+
|
|
26
|
+
Peer Socket both sends what it receives from upstream and injects what arrives
|
|
27
|
+
from the network. Without a stopper the injected message would continue past the
|
|
28
|
+
monitor and, in a longer board, be treated as a fresh trigger. Ending the chain
|
|
29
|
+
explicitly says *this value has arrived, not departed*.
|
|
30
|
+
|
|
31
|
+
## Signalling, and what "no server" means
|
|
32
|
+
|
|
33
|
+
WebRTC still needs a rendezvous to introduce two browsers — here
|
|
34
|
+
`peerjs.hookitapp.com`. Once the connection is up, messages go directly between
|
|
35
|
+
the two peers and the signalling host sees none of them.
|
|
36
|
+
|
|
37
|
+
If you would rather not depend on a public host,
|
|
38
|
+
[Peer Chat over Node](./peer-chat-node-board.md) is the same board with the
|
|
39
|
+
signalling server moved onto a runtime of your own.
|
|
40
|
+
|
|
41
|
+
## The facade
|
|
42
|
+
|
|
43
|
+
Two lines of text showing the local and remote peer names, a button, and a
|
|
44
|
+
[message list](../concepts/board.md#the-facade) with a composer.
|
|
45
|
+
|
|
46
|
+
## Try it
|
|
47
|
+
|
|
48
|
+
Open it in two browsers. Swap `peerName` and `targetPeer` between them so each
|
|
49
|
+
names itself and the other.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Peer Chat over Node
|
|
2
|
+
|
|
3
|
+
The same chat as [Peer Chat](./peer-chat-board.md), with the signalling server
|
|
4
|
+
moved out of somebody else's cloud and onto a runtime you run. A good, small
|
|
5
|
+
example of a [mount](../concepts/mounts.md).
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Identical behaviour: messages typed in one browser appear in another. What
|
|
10
|
+
changes is who introduces the two peers.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
Two runtimes.
|
|
15
|
+
|
|
16
|
+
### Browser
|
|
17
|
+
|
|
18
|
+
1. **Message**, an [Injector](../services/injector.md).
|
|
19
|
+
2. [Peer Socket](../services/peer-socket.md) in *Receive and Send*. Instead of
|
|
20
|
+
naming a public host it carries
|
|
21
|
+
`hkp-mount://chat-node/chat-peer-server-svc` — a reference to the service on
|
|
22
|
+
the other runtime, resolved to a real address when the board loads.
|
|
23
|
+
3. **Incoming Messages**, a [Monitor](../services/monitor.md).
|
|
24
|
+
4. [Stopper](../services/stopper.md).
|
|
25
|
+
|
|
26
|
+
### Node
|
|
27
|
+
|
|
28
|
+
1. **Peer Server** hosts the signalling endpoint. It binds no port of its own:
|
|
29
|
+
its runtime gives it a path on the server it already has, and publishes the
|
|
30
|
+
address as `__hkpMount`.
|
|
31
|
+
2. **Peer Events**, a [Monitor](../services/monitor.md), shows peers arriving
|
|
32
|
+
and leaving, because `emitEvents` is on.
|
|
33
|
+
|
|
34
|
+
## Why this is the interesting version
|
|
35
|
+
|
|
36
|
+
The peer-to-peer part is unchanged — messages still travel directly between
|
|
37
|
+
browsers. What moved is the one piece that could not be peer-to-peer, and moving
|
|
38
|
+
it took no code: a service that hosts an endpoint, and a reference to that
|
|
39
|
+
service where an address would otherwise be.
|
|
40
|
+
|
|
41
|
+
Because the address is [derived rather than drawn](../concepts/mounts.md), it
|
|
42
|
+
survives restarts. A board saved today still points at the right place tomorrow.
|
|
43
|
+
|
|
44
|
+
## Try it
|
|
45
|
+
|
|
46
|
+
It needs an hkp-node kept under the name `node` in *Manage runtime servers*.
|
|
47
|
+
Open the board in two browsers, both keeping the same server under that name.
|