@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,57 @@
|
|
|
1
|
+
# DropApp
|
|
2
|
+
|
|
3
|
+
AirDrop, built out of parts: pick an image on a phone, chunk it, upload it to a
|
|
4
|
+
runtime on your own machine, and hand the phone its interface as a QR code.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
It shows a QR code. Scan it with a phone and you get a picker; choose an image
|
|
9
|
+
and it lands in a `dropitapp` folder on the machine running the server runtime —
|
|
10
|
+
inside the folder that runtime gives boards, `~/.hkp/cpp/files` in the desktop
|
|
11
|
+
app.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
Two runtimes: a browser one that builds and serves the phone's interface, and a
|
|
16
|
+
REST one that receives the file.
|
|
17
|
+
|
|
18
|
+
### UI — the browser
|
|
19
|
+
|
|
20
|
+
1. **Phone Board**, a [Sub-Service](../services/sub-service.md) in `source`
|
|
21
|
+
mode, *contains a whole second board* called **AirDrop Phone** — an
|
|
22
|
+
[Image Picker](../services/image-picker.md), a
|
|
23
|
+
[Chunked File Provider](../services/chunked-file-provider.md) and an
|
|
24
|
+
[HTTP Uploader](../services/http-uploader.md) pointed at
|
|
25
|
+
`HKP_RUNTIME_URL/runtimes/upload-server`. That inner board never runs here;
|
|
26
|
+
it is cargo.
|
|
27
|
+
2. **HTTP Uploader Token Injector** puts the credential the upload will need
|
|
28
|
+
into that inner board — at hand-out time, so the token is not sitting in the
|
|
29
|
+
saved document.
|
|
30
|
+
3. [LZ Compress](../services/lz-compress.md) compresses the inner board.
|
|
31
|
+
4. **URL Builder**, a [Map](../services/map.md), wraps it in a playground URL.
|
|
32
|
+
5. [QR Code](../services/qr-code.md) renders that URL.
|
|
33
|
+
|
|
34
|
+
### Upload Server — a REST runtime
|
|
35
|
+
|
|
36
|
+
A single [Filesystem](../services/filesystem.md) service in `write` mode,
|
|
37
|
+
writing to `dropitapp`: a relative path, so it lands in the runtime's default
|
|
38
|
+
folder for boards, whichever machine that is.
|
|
39
|
+
|
|
40
|
+
## Why the phone's board is cargo
|
|
41
|
+
|
|
42
|
+
The phone is not running an app you installed; it is running a board that this
|
|
43
|
+
board handed it, encoded in the QR code it scanned. The interesting consequence
|
|
44
|
+
is that changing what the phone does means editing the sub-service's pipeline
|
|
45
|
+
and re-showing the code — there is nothing to deploy, and nothing on the phone
|
|
46
|
+
to update.
|
|
47
|
+
|
|
48
|
+
The chunking matters too: [Chunked File Provider](../services/chunked-file-provider.md)
|
|
49
|
+
breaks the image into pieces so a large photo uploads as a sequence rather than
|
|
50
|
+
one request that may not survive a phone's connection.
|
|
51
|
+
|
|
52
|
+
## Try it
|
|
53
|
+
|
|
54
|
+
Open it in the Readymade desktop app: the upload runtime names the app's own
|
|
55
|
+
runtime (`"remote": "embedded"`), and the phone must be able to reach that
|
|
56
|
+
runtime's URL. To save somewhere else, add the folder under *Folders boards may
|
|
57
|
+
use* in the app's settings and type its path into *Save folder*.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Encrypt / Decrypt
|
|
2
|
+
|
|
3
|
+
Two independent runtimes, one encrypting and one decrypting, sharing nothing but
|
|
4
|
+
a passphrase you type into both. The smallest board that shows a runtime is a
|
|
5
|
+
boundary and not just a list.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Type text in the Encrypt panel and see the AES ciphertext. Paste ciphertext into
|
|
10
|
+
the Decrypt panel, give it the same secret, and get the text back.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
Two [browser runtimes](../concepts/runtime.md).
|
|
15
|
+
|
|
16
|
+
**Encrypt** — [Injector](../services/injector.md) takes the input,
|
|
17
|
+
[Encrypt](../services/encrypt.md) applies AES with the configured secret, and
|
|
18
|
+
[Monitor](../services/monitor.md) shows the result.
|
|
19
|
+
|
|
20
|
+
**Decrypt** — [Decrypt](../services/decrypt.md) reverses it with its own copy of
|
|
21
|
+
the secret, and a [Monitor](../services/monitor.md) shows the plaintext.
|
|
22
|
+
|
|
23
|
+
## Why they are separate
|
|
24
|
+
|
|
25
|
+
Nothing connects the two. The second runtime does not receive the first one's
|
|
26
|
+
output; you carry the ciphertext across by hand, which is the point — it
|
|
27
|
+
demonstrates that the ciphertext is all that is needed, and that the secret is
|
|
28
|
+
configured independently at each end rather than travelling with the message.
|
|
29
|
+
|
|
30
|
+
Set the two secrets differently and decryption fails, which is the correct
|
|
31
|
+
behaviour and worth seeing once.
|
|
32
|
+
|
|
33
|
+
## The facade
|
|
34
|
+
|
|
35
|
+
Two panels, Encrypt and Decrypt, each with a text input for the message, a text
|
|
36
|
+
input for the secret, and a line of text for the result.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Face Alert
|
|
2
|
+
|
|
3
|
+
Watches the camera and sends a push notification when a face appears. Seven
|
|
4
|
+
services and a block, none of which knows what the others are for.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
Twice a second it looks at the camera. When a face comes into view — not while
|
|
9
|
+
it stays there — it posts a message to an [ntfy](https://ntfy.sh) topic, which
|
|
10
|
+
arrives on your phone. The image never leaves the device; only the message
|
|
11
|
+
does.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
One [browser runtime](../concepts/runtime.md).
|
|
16
|
+
|
|
17
|
+
1. A [Timer](../services/timer.md) ticks every 500 ms.
|
|
18
|
+
2. [Camera](../services/camera.md) captures a frame on each tick.
|
|
19
|
+
3. [Detect](../services/detect.md) finds the faces in it with a model shipped
|
|
20
|
+
with the app, and reports on **every** frame — `count: 0` included.
|
|
21
|
+
4. [Changes](../services/changes.md) watches `params.count > 0` and lets a frame
|
|
22
|
+
through only when that **becomes true**. This is the step that turns "a face
|
|
23
|
+
is there" (every frame) into "a face appeared" (once).
|
|
24
|
+
5. [Debounce](../services/debounce.md) holds a 30-second cooldown, so a face
|
|
25
|
+
that the detector loses and finds again for a moment does not notify twice.
|
|
26
|
+
6. [Map](../services/map.md) writes the message.
|
|
27
|
+
7. The **ntfy notification** [block](../concepts/blocks.md) sends it — the one
|
|
28
|
+
the build ships in its [preset library](../concepts/presets.md), copied into
|
|
29
|
+
this board so it opens anywhere. Its topic, title, priority and tags are the
|
|
30
|
+
block's params, set on its bar; the topic is made at random for this board.
|
|
31
|
+
|
|
32
|
+
Steps 3 to 5 are the design, and each is a different question: *what is there*,
|
|
33
|
+
*is that new*, *is it too soon*. None of them is specific to faces — the same
|
|
34
|
+
chain turns any repeated report into an alert.
|
|
35
|
+
|
|
36
|
+
## The facade
|
|
37
|
+
|
|
38
|
+
What the board sees — the camera's frame with each face it found outlined, the
|
|
39
|
+
`detect` widget — and how many faces are in view. The camera widget is there
|
|
40
|
+
too, drawing nothing (`"preview": false`): it is what captures the frames, and
|
|
41
|
+
the picture worth showing is the one after Detect.
|
|
42
|
+
|
|
43
|
+
## Try it
|
|
44
|
+
|
|
45
|
+
Open the board and allow the camera. The ntfy block is given a random topic of
|
|
46
|
+
its own the first time the board opens — anyone who knows a topic on ntfy.sh can
|
|
47
|
+
read it, so a shared default would tell strangers when someone is in front of
|
|
48
|
+
your camera. Copy it from `topic` on the block's bar in the board view,
|
|
49
|
+
subscribe to it in the ntfy app, and **save the board** so it keeps that topic.
|
|
50
|
+
Then look into the camera.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Breakout Game
|
|
2
|
+
|
|
3
|
+
A playable Breakout, split across four runtimes, with a phone as the paddle
|
|
4
|
+
controller. The most elaborate browser-only board here, and the best example of
|
|
5
|
+
services reaching sideways rather than only forwards.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
A ball, a bar, and bricks on a canvas at 50 frames a second. You control the bar
|
|
10
|
+
with an on-screen XY pad — or by scanning a QR code and using your phone.
|
|
11
|
+
|
|
12
|
+
## How it works
|
|
13
|
+
|
|
14
|
+
Four [browser runtimes](../concepts/runtime.md). Three of them are the game; the
|
|
15
|
+
fourth exists to hand a controller to a second device.
|
|
16
|
+
|
|
17
|
+
### Input
|
|
18
|
+
|
|
19
|
+
1. [Peer Socket](../services/peer-socket.md) in *Receive only*, registered as
|
|
20
|
+
`breakout-host`, listening for `breakout-phone`.
|
|
21
|
+
2. [XY Pad](../services/xy-pad.md) — the on-screen control, for playing without
|
|
22
|
+
a phone.
|
|
23
|
+
3. **Map Input**, a [Map](../services/map.md), normalises whichever arrived.
|
|
24
|
+
4. **Send to Cache**, a [Configurator](../services/configurator.md), writes the
|
|
25
|
+
position into the `game` runtime's cache. It does **not** pass through: the
|
|
26
|
+
input chain ends here, having deposited a value somewhere else.
|
|
27
|
+
|
|
28
|
+
### Game
|
|
29
|
+
|
|
30
|
+
1. [Timer](../services/timer.md) at 20 ms — the game loop.
|
|
31
|
+
2. **State Cache**, a [Cache](../services/cache.md), holds the world between
|
|
32
|
+
frames. A pipeline is stateless, so the state has to live in a service, and
|
|
33
|
+
this is it.
|
|
34
|
+
3. **Game Logic**, a [Map](../services/map.md), advances the world one step.
|
|
35
|
+
4. **Cache Game State**, a [Configurator](../services/configurator.md), writes
|
|
36
|
+
the new world back — this one *does* pass through, so the frame continues.
|
|
37
|
+
5. [Tracks](../services/tracks.md) draws it: one track for the ball, one for
|
|
38
|
+
the bar.
|
|
39
|
+
|
|
40
|
+
### Canvas
|
|
41
|
+
|
|
42
|
+
[Canvas](../services/canvas.md) draws the frame and reports its size. **Cache
|
|
43
|
+
Size** then writes that size back into the game runtime's cache, but only
|
|
44
|
+
through a [Filter](../services/filter.md) that stops unless the size actually
|
|
45
|
+
changed — otherwise the game state would be rewritten fifty times a second for
|
|
46
|
+
nothing.
|
|
47
|
+
|
|
48
|
+
### Phone Controller
|
|
49
|
+
|
|
50
|
+
A [Sub-Service](../services/sub-service.md) in `source` mode holds an entire
|
|
51
|
+
second board — *Breakout Controller* — containing an
|
|
52
|
+
[XY Pad](../services/xy-pad.md) and a [Peer Socket](../services/peer-socket.md)
|
|
53
|
+
in *Send only*. That inner board is
|
|
54
|
+
[LZ-compressed](../services/lz-compress.md) into a URL, which becomes the QR
|
|
55
|
+
code you scan. Open it on a phone and the phone is now the paddle, talking
|
|
56
|
+
directly to the host over WebRTC.
|
|
57
|
+
|
|
58
|
+
## Why it is built this way
|
|
59
|
+
|
|
60
|
+
Three of the four runtimes write into the same cache using
|
|
61
|
+
[Configurator](../services/configurator.md) rather than passing values along a
|
|
62
|
+
line. Input arrives on its own schedule, the canvas resizes whenever the window
|
|
63
|
+
does, and the game loop runs on a timer — three rates that do not line up, so a
|
|
64
|
+
single chain could not carry all three. The cache is the shared state and the
|
|
65
|
+
configurator is how a service in one runtime writes to a service in another.
|
|
66
|
+
|
|
67
|
+
The phone controller is the other idea worth taking away: a board can *contain*
|
|
68
|
+
another board and hand it out as a link. Nothing was deployed to make the phone
|
|
69
|
+
work.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Game of Life
|
|
2
|
+
|
|
3
|
+
Conway's Game of Life, simulated on an infinite sparse grid, with each
|
|
4
|
+
generation sent down two branches at once: one draws it, the other plays it.
|
|
5
|
+
The same generation becomes a picture and a chord.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
It runs the cellular automaton and shows the result twice over — as cells on a
|
|
10
|
+
canvas, and as notes from a synthesiser. Watching it and listening to it are
|
|
11
|
+
the same data arriving in two forms.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
Everything is in one [browser runtime](../concepts/runtime.md). The chain is
|
|
16
|
+
three services deep, and the third one forks.
|
|
17
|
+
|
|
18
|
+
1. [Timer](../services/timer.md) ticks at 220 BPM, firing immediately on start
|
|
19
|
+
rather than waiting out the first interval. A beat is the natural unit here
|
|
20
|
+
because the output is partly music.
|
|
21
|
+
2. [Game of Life](../services/game-of-life.md) advances one generation per tick
|
|
22
|
+
and emits the live cells. It only simulates — it draws nothing, which is what
|
|
23
|
+
lets the next step send the same generation two ways.
|
|
24
|
+
3. [Tracks](../services/tracks.md) runs two named branches over that one
|
|
25
|
+
generation:
|
|
26
|
+
|
|
27
|
+
**`visual-branch`** —
|
|
28
|
+
[Game of Life Renderer](../services/game-of-life.md) turns cells into draw
|
|
29
|
+
commands at 8 px a cell, and [Canvas](../services/canvas.md) draws them.
|
|
30
|
+
|
|
31
|
+
**`audio-branch`** — [Map](../services/map.md) extracts the objects,
|
|
32
|
+
a second Map enriches them, [Sort](../services/sort.md) orders them by how
|
|
33
|
+
alive they are, [Limit](../services/limit.md) keeps the top six,
|
|
34
|
+
a third Map turns those into notes, and [Sound](../services/sound.md) plays
|
|
35
|
+
them on a sawtooth synth.
|
|
36
|
+
|
|
37
|
+
The audio branch is worth reading closely: it is a small query. Sort by
|
|
38
|
+
liveness, take six, map to pitch. Six is there because a chord of six notes is
|
|
39
|
+
about as much as the ear takes, and the loudest cells being the played ones is a
|
|
40
|
+
decision expressed as `sort` then `limit` rather than as code.
|
|
41
|
+
|
|
42
|
+
## Why it is split this way
|
|
43
|
+
|
|
44
|
+
The simulation and its renderer are separate services on purpose — see
|
|
45
|
+
[Game of Life](../services/game-of-life.md). A simulation that drew its own
|
|
46
|
+
output could not have been sent to a synthesiser without being changed. Because
|
|
47
|
+
it only emits state, the branch that plays it did not have to be anticipated.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Hacker News Reader
|
|
2
|
+
|
|
3
|
+
Hacker News as an app: the stories on one side, the discussion of the one you
|
|
4
|
+
picked on the other.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
The buttons along the top pick a list — **Top** (the front page), **New**,
|
|
9
|
+
**Best** (recent stories past 300 points, newest first), **Ask** and **Show**.
|
|
10
|
+
The search field searches every story ever posted, by relevance. A headline
|
|
11
|
+
opens the story; a story without a link of its own (an Ask HN, say) opens its
|
|
12
|
+
page on Hacker News instead.
|
|
13
|
+
|
|
14
|
+
**N comments** under a story reads its discussion in the right-hand column:
|
|
15
|
+
the post itself where it has text, then the whole thread. On a phone the
|
|
16
|
+
discussion takes the place of the list instead, and back returns to the list
|
|
17
|
+
where you left it. Every reply sits
|
|
18
|
+
under the comment it answers, indented one step further; the top-level comments
|
|
19
|
+
come in the order Hacker News ranks them, and the replies under each in the
|
|
20
|
+
order they were written. A deleted comment keeps its place when it has
|
|
21
|
+
replies, so they are not left under the wrong one. The link under the title
|
|
22
|
+
opens the thread on Hacker News.
|
|
23
|
+
|
|
24
|
+
**[–]** beside a comment folds it: its replies go, it shrinks to its first
|
|
25
|
+
line, and the next thread moves up — the quick way past a branch that is not
|
|
26
|
+
worth reading. **[+N]** says how many replies it hides and opens it again.
|
|
27
|
+
**Collapse all** folds the thread down to its top-level comments, each one line,
|
|
28
|
+
to open the ones worth reading; **Expand all** puts everything back. What is
|
|
29
|
+
folded is remembered per story, so a thread opened again is the way it was
|
|
30
|
+
left.
|
|
31
|
+
|
|
32
|
+
## How it works
|
|
33
|
+
|
|
34
|
+
One browser runtime, nothing to install. It holds three small pipelines, one
|
|
35
|
+
for each thing the facade asks, each a [sub-service](../services/browser-sub-service.md)
|
|
36
|
+
that keeps its result to itself — so opening a discussion does not reload the
|
|
37
|
+
list:
|
|
38
|
+
|
|
39
|
+
1. **Which list** — a [Map](../services/map.md) holding the five lists, each
|
|
40
|
+
with the address and parameters that fetch it, and saying which one is
|
|
41
|
+
picked. The buttons are drawn from it, so the list in force is the one
|
|
42
|
+
highlighted.
|
|
43
|
+
2. **Stories** — an [http-client](../services/http.md) asking the search API
|
|
44
|
+
[Algolia hosts for Hacker News](https://hn.algolia.com/api), and three Maps
|
|
45
|
+
that turn each hit into what a row shows: title, site, points, author, age.
|
|
46
|
+
Picking a list configures the client with that list's address and
|
|
47
|
+
parameters and runs the pipeline again.
|
|
48
|
+
3. **Discussion** — a thread asked for twice at once, with
|
|
49
|
+
[Tracks](../services/tracks.md) running two requests side by side. The
|
|
50
|
+
facade sends only the story's id; each track makes its own address from it
|
|
51
|
+
with a Map and hands it to its client as `meta.url`, so nothing is
|
|
52
|
+
reconfigured per story. Algolia sends the whole thread in one document but
|
|
53
|
+
lists the comments oldest first; Hacker News's own API sends the story's
|
|
54
|
+
comment ids in the order it ranks them. The [SQL](../services/sql.md)
|
|
55
|
+
service puts the two together.
|
|
56
|
+
|
|
57
|
+
The comments arrive as HTML. A facade's text is plain text, so the SQL
|
|
58
|
+
statement cuts the tags out — a recursive query removing one tag per step until
|
|
59
|
+
none is left — and turns paragraphs into blank lines. Entities such as `>`
|
|
60
|
+
are decoded only afterwards, so a `<` someone typed is never mistaken for a
|
|
61
|
+
tag. The same statement walks the tree of replies depth first, giving each
|
|
62
|
+
comment a sort key made of its parent's with its own place appended — so
|
|
63
|
+
ordering by it puts every reply under the comment it answers — and an indent
|
|
64
|
+
the facade draws as an empty column before the text.
|
|
65
|
+
|
|
66
|
+
Folding is the one thing the board keeps. Two tables in the browser's SQL
|
|
67
|
+
database hold it: one row per comment someone folded or opened, and one per
|
|
68
|
+
story collapsed as a whole, which a comment's own row overrides. The comments
|
|
69
|
+
query stops walking the tree at a folded comment and counts what it skipped. So
|
|
70
|
+
that folding does not fetch the thread again, the thread is put in a
|
|
71
|
+
[Hold](../services/hold.md) when it arrives: a fold enters the discussion
|
|
72
|
+
pipeline at the statement that records it, and the Hold hands the kept thread
|
|
73
|
+
to the queries after it.
|
|
74
|
+
|
|
75
|
+
Both APIs answer any origin, which is what lets the browser call them directly.
|
|
76
|
+
Nothing is signed in: the board reads Hacker News and does not post to it.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Private Health Log (Browser)
|
|
2
|
+
|
|
3
|
+
[Private Health Log](./health-log-demo-board.md) with the database moved into
|
|
4
|
+
the browser. The same measurements, the same journal, the same charts — and
|
|
5
|
+
nothing to install.
|
|
6
|
+
|
|
7
|
+
This demo records and displays values. It does not interpret them, recommend
|
|
8
|
+
targets, detect emergencies or replace professional care, a meter, a CGM, or an
|
|
9
|
+
official device application.
|
|
10
|
+
|
|
11
|
+
## What it does
|
|
12
|
+
|
|
13
|
+
The **Log** tab takes blood glucose, blood pressure, weight and a daily
|
|
14
|
+
journal; **Trends** draws them as time-series charts; **Your data** shows the
|
|
15
|
+
rows themselves and deletes the ones you select, or all of them. **Generate
|
|
16
|
+
fake data** there writes six months of fictional history to look at, and
|
|
17
|
+
**Export as .sqlite** saves the whole database as a file. Everything you enter
|
|
18
|
+
is still there the next time you open the board.
|
|
19
|
+
|
|
20
|
+
## How it works
|
|
21
|
+
|
|
22
|
+
One browser runtime holding the other board's services:
|
|
23
|
+
[SQL](../services/sql.md) for every write and the read at the end, and a
|
|
24
|
+
[sub-service](../services/browser-sub-service.md) whose Monitor shows the event
|
|
25
|
+
each new entry produced. The `sql` service exists in both runtimes with one
|
|
26
|
+
contract, and both runtimes are SQLite, so moving the board meant changing the
|
|
27
|
+
runtime it sits in — and naming the browser's Monitor by its own id — and
|
|
28
|
+
nothing else.
|
|
29
|
+
|
|
30
|
+
In the browser, SQL runs SQLite compiled to WebAssembly and keeps the database
|
|
31
|
+
in this browser's storage.
|
|
32
|
+
|
|
33
|
+
The one thing this board adds is the export, first in the pipeline: a
|
|
34
|
+
sub-service holding an SQL service in `export` mode with `format: "sqlite"`
|
|
35
|
+
and a [Download](../services/download.md) that saves what it hands on as
|
|
36
|
+
`health-log.sqlite`. It stops propagation, and nothing enters the pipeline
|
|
37
|
+
above it, so only its own button reaches it — no entry ever passes through.
|
|
38
|
+
|
|
39
|
+
## What moving it cost
|
|
40
|
+
|
|
41
|
+
Reach. On hkp-node the history belongs to a runtime you choose — your own
|
|
42
|
+
machine, or a server you can open it from on any device. Here it belongs to
|
|
43
|
+
this browser on this device: another browser, or this one with its site data
|
|
44
|
+
cleared, starts empty.
|
|
45
|
+
|
|
46
|
+
For trying the board, or for a log you only keep at one screen, that is
|
|
47
|
+
enough — and the export is how the history leaves: the file opens in any
|
|
48
|
+
SQLite tool (`sqlite3 health-log.sqlite`, DB Browser for SQLite), with the
|
|
49
|
+
tables exactly as the board wrote them. To read the same history from your
|
|
50
|
+
phone and your laptop, run [Private Health Log](./health-log-demo-board.md) on
|
|
51
|
+
hkp-node.
|
|
52
|
+
|
|
53
|
+
## Try it
|
|
54
|
+
|
|
55
|
+
Open it. The schema is created on first run, and the history is kept in the
|
|
56
|
+
browser's IndexedDB under the database name `private-health-log`.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Private Health Log
|
|
2
|
+
|
|
3
|
+
A personal record of blood glucose, blood pressure and weight, kept in the
|
|
4
|
+
board's own SQLite database and shown as both rows and time-series charts. It is
|
|
5
|
+
an example of keeping a usable copy of data on infrastructure you choose while
|
|
6
|
+
still leaving room for separate analytics and notification boards.
|
|
7
|
+
|
|
8
|
+
This demo records and displays values. It does not interpret them, recommend
|
|
9
|
+
targets, detect emergencies or replace professional care, a meter, a CGM, or an
|
|
10
|
+
official device application.
|
|
11
|
+
|
|
12
|
+
## What it does
|
|
13
|
+
|
|
14
|
+
The **Log** tab accepts three measurements plus a daily journal:
|
|
15
|
+
|
|
16
|
+
- blood glucose in mg/dL;
|
|
17
|
+
- blood pressure as systolic/diastolic in mmHg;
|
|
18
|
+
- weight in kg;
|
|
19
|
+
- free text about meals, drinks, sleep, exercise, symptoms or anything else the
|
|
20
|
+
person considers relevant that day.
|
|
21
|
+
|
|
22
|
+
There is one journal row per calendar day. Saving again on the same day updates
|
|
23
|
+
that entry. It is deliberately free text rather than a medical questionnaire:
|
|
24
|
+
the board stores what the person chose to say without interpreting it.
|
|
25
|
+
|
|
26
|
+
Submitting creates an event id and UTC timestamp in the facade action. Those
|
|
27
|
+
same values travel to SQL and through the post-entry extension point, so a
|
|
28
|
+
downstream board can receive the identity and time of the exact event that was
|
|
29
|
+
stored rather than inventing its own on arrival.
|
|
30
|
+
|
|
31
|
+
The **Trends** tab reads the complete SQL history into three charts. Blood
|
|
32
|
+
pressure contains two series; glucose and weight each select their own series.
|
|
33
|
+
Hovering a point shows its precise timestamp, value and the journal for that
|
|
34
|
+
day. The journal is joined onto the query result, so the reusable chart only
|
|
35
|
+
needs its generic `contextField` setting and has no health-specific behavior.
|
|
36
|
+
The **Your data** tab shows the underlying records and can delete selected
|
|
37
|
+
events. Selecting one blood-pressure event removes both its systolic and
|
|
38
|
+
diastolic rows. **Delete all entries** empties the log after asking:
|
|
39
|
+
every measurement and every journal entry.
|
|
40
|
+
|
|
41
|
+
## The services
|
|
42
|
+
|
|
43
|
+
One REST runtime on hkp-node contains:
|
|
44
|
+
|
|
45
|
+
1. **Record one value** — stores scalar measurements such as glucose and
|
|
46
|
+
weight.
|
|
47
|
+
2. **Record blood pressure** — parses one `120/80`-shaped event into two rows
|
|
48
|
+
sharing an event id.
|
|
49
|
+
3. **Save daily journal** — inserts or updates the free-text entry for the
|
|
50
|
+
current day.
|
|
51
|
+
4. **After a new entry** — a SubService whose **Entry event** Monitor shows the
|
|
52
|
+
event available for downstream work.
|
|
53
|
+
5. **Delete selected entries** — removes events selected in the data table, or
|
|
54
|
+
every measurement when asked to delete all.
|
|
55
|
+
6. **Delete the journal** — removes every journal entry, only when asked to
|
|
56
|
+
delete all: a selection names measurements, not days.
|
|
57
|
+
7. **Generate fake measurements** and **Generate fake journal** — write six
|
|
58
|
+
months of fictional history when asked, and nothing otherwise.
|
|
59
|
+
8. **Read personal history** — joins the daily journal onto each measurement
|
|
60
|
+
and returns the history used by both table and
|
|
61
|
+
charts.
|
|
62
|
+
|
|
63
|
+
Every mutation uses `emit: "input"` and ends at the same read query. The screen
|
|
64
|
+
therefore reflects the database after each action rather than maintaining a
|
|
65
|
+
second copy of the history in facade state.
|
|
66
|
+
|
|
67
|
+
## Analytics and notifications are another board's job
|
|
68
|
+
|
|
69
|
+
The health log records observations and does not decide what they mean. That
|
|
70
|
+
separation is intentional: a board that graphs personal history should not
|
|
71
|
+
silently become a clinical rules engine.
|
|
72
|
+
|
|
73
|
+
`After a new entry` is the composition point. Today its Monitor makes the event
|
|
74
|
+
contract visible. An HTTP Client can be placed after it and configured with an
|
|
75
|
+
`hkp-mount://<runtime>/<service>` endpoint belonging to a composed analytics
|
|
76
|
+
board. That other board can aggregate, notify, export or apply user-chosen
|
|
77
|
+
rules without changing data entry or storage here. Journal saves travel through
|
|
78
|
+
the same extension point, which makes a later learning or analysis board
|
|
79
|
+
possible without coupling that work to this log.
|
|
80
|
+
|
|
81
|
+
Deleting history starts later in the top-level pipeline, so deletions refresh
|
|
82
|
+
the display but do not masquerade as new measurement events.
|
|
83
|
+
|
|
84
|
+
## Where the data lives
|
|
85
|
+
|
|
86
|
+
The database belongs to this board on the configured hkp-node runtime. With a
|
|
87
|
+
local runtime, the history stays in that runtime's local SQLite storage. If the
|
|
88
|
+
runtime URL points at another machine, entries are sent to and stored on that
|
|
89
|
+
machine instead. The board does not claim encryption or regulatory compliance;
|
|
90
|
+
ownership still depends on where and how its runtime is operated.
|
|
91
|
+
|
|
92
|
+
Free-text journals may be more identifying and sensitive than the numeric
|
|
93
|
+
measurements. The demo never sends them to a model by itself; doing so requires
|
|
94
|
+
an explicit downstream board chosen and configured by the person operating it.
|
|
95
|
+
|
|
96
|
+
Starter rows are synthetic and are seeded once. A marker in the database keeps
|
|
97
|
+
deleted samples from returning after a restart.
|
|
98
|
+
|
|
99
|
+
## A history to look at
|
|
100
|
+
|
|
101
|
+
A handful of starter rows says little about how the charts and the table behave
|
|
102
|
+
after months of use. **Generate fake data**, on the **Your data** tab, asks
|
|
103
|
+
first and then writes 180 days of fictional measurements — two glucose readings
|
|
104
|
+
and a weight every day, a blood pressure every other — and a journal entry
|
|
105
|
+
every third day, all counted back from today.
|
|
106
|
+
|
|
107
|
+
The rows are computed in SQL from the day's number, so the same press always
|
|
108
|
+
produces the same history, and they carry event ids beginning with `fake-`.
|
|
109
|
+
Pressing again adds nothing, because those ids are already there; deleting some
|
|
110
|
+
of them and pressing again brings those back. A day that already has a journal
|
|
111
|
+
keeps its own. Like deleting, generating enters the pipeline after **After a
|
|
112
|
+
new entry**, so several hundred invented rows are not announced downstream as
|
|
113
|
+
measurements somebody took.
|
|
114
|
+
|
|
115
|
+
There is no button that removes only them. They are ordinary rows, removable
|
|
116
|
+
from the table like any other or with everything else by **Delete all
|
|
117
|
+
entries**, which is the reason to try this on a log that does not hold
|
|
118
|
+
measurements of your own. The starter rows do not come back after deleting
|
|
119
|
+
all: the marker that seeded them stays.
|
|
120
|
+
|
|
121
|
+
## A query-backed line chart
|
|
122
|
+
|
|
123
|
+
The line-chart facade widget accepts either one live point or an array that
|
|
124
|
+
replaces its complete history. `seriesField`, `valueField` and `timeField` map a
|
|
125
|
+
board's own query columns onto the chart without requiring a market-price
|
|
126
|
+
schema. `symbol` or `symbols` selects which series a particular chart draws.
|
|
127
|
+
An optional `contextField` adds per-point text to the hover card and
|
|
128
|
+
`contextLabel` names it.
|
|
129
|
+
|
|
130
|
+
This keeps the SQL result useful to the table and the charts at the same time:
|
|
131
|
+
neither needs a service devoted only to reshaping the other's data.
|
|
132
|
+
|
|
133
|
+
## Try it
|
|
134
|
+
|
|
135
|
+
Run hkp-node, keep it under the name `node` in *Manage runtime servers*, and
|
|
136
|
+
open **Private Health Log** from the demo list.
|
|
137
|
+
The initial values are fictional and exist only to make the charts immediately
|
|
138
|
+
inspectable.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Hello World
|
|
2
|
+
|
|
3
|
+
The smallest board that does something visible: a timer ticks once a second, a
|
|
4
|
+
template turns the tick count into a line of text, and a canvas draws it. Three
|
|
5
|
+
services, one runtime, no configuration — the shape of every other board on
|
|
6
|
+
this page, with nothing else in the way.
|
|
7
|
+
|
|
8
|
+
## What it does
|
|
9
|
+
|
|
10
|
+
It prints `HELLO WORLD #1`, then `HELLO WORLD #2`, and keeps counting. That is
|
|
11
|
+
all it does, and the point is how little had to be said to make it happen.
|
|
12
|
+
|
|
13
|
+
## How it works
|
|
14
|
+
|
|
15
|
+
Everything runs in the [browser runtime](../concepts/runtime.md) — the page
|
|
16
|
+
itself, in the same process as the interface. Nothing here needs a server, so
|
|
17
|
+
nothing here has one.
|
|
18
|
+
|
|
19
|
+
The order of the three services is the wiring; there are no connections to
|
|
20
|
+
draw.
|
|
21
|
+
|
|
22
|
+
1. [Timer](../services/timer.md) emits every second. Nothing feeds it — it is
|
|
23
|
+
one of the services that produce output on their own, which is what gives a
|
|
24
|
+
board a heartbeat rather than waiting to be poked.
|
|
25
|
+
2. [Map](../services/map.md) receives the tick and reshapes it into a canvas
|
|
26
|
+
drawing instruction. Its template is a single `text` element whose content is
|
|
27
|
+
the expression `"Hello World #" + params.triggerCount`, so the count comes
|
|
28
|
+
from the tick that triggered it rather than from state anybody has to keep.
|
|
29
|
+
3. [Canvas](../services/canvas.md) receives that instruction and draws it,
|
|
30
|
+
clearing between frames.
|
|
31
|
+
|
|
32
|
+
Read it as a sentence: *every second, build a line of text, draw it.* That
|
|
33
|
+
sentence is the board.
|
|
34
|
+
|
|
35
|
+
## Where to go next
|
|
36
|
+
|
|
37
|
+
[Animate](./animate-board.md) is this board with a moving picture and a GIF
|
|
38
|
+
recorder on the end. [Game of Life](./game-of-life-board.md) keeps the same
|
|
39
|
+
timer-and-canvas spine but splits the output into two branches that run from
|
|
40
|
+
one tick.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Link Debugger
|
|
2
|
+
|
|
3
|
+
Three services that turn a shared board link back into the board it encodes. A
|
|
4
|
+
tool for working on Readymade rather than an app built with it.
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
Paste a compressed `?fromLink=…` payload and read the board JSON it contains.
|
|
9
|
+
|
|
10
|
+
## How it works
|
|
11
|
+
|
|
12
|
+
One [browser runtime](../concepts/runtime.md).
|
|
13
|
+
|
|
14
|
+
1. **Compressed Link**, an [Injector](../services/injector.md) in plain-text
|
|
15
|
+
mode, is where you paste the string.
|
|
16
|
+
2. **Decompress**, an [LZ Compress](../services/lz-compress.md) in `decompress`
|
|
17
|
+
mode, expands it.
|
|
18
|
+
3. **Board JSON**, a [Monitor](../services/monitor.md), shows the result.
|
|
19
|
+
|
|
20
|
+
## Why it exists
|
|
21
|
+
|
|
22
|
+
A board travels as a link: the whole document, LZ-compressed into a URL
|
|
23
|
+
parameter. That is what every *Open in Playground* button on these pages
|
|
24
|
+
produces, and what a QR code shared from the app encodes. When one of those
|
|
25
|
+
links does not load, the question is always whether the payload is wrong or the
|
|
26
|
+
loading is — and this board answers it by showing you exactly what the link
|
|
27
|
+
says.
|
|
28
|
+
|
|
29
|
+
It is also the shortest demonstration that a board can be a developer tool. The
|
|
30
|
+
same three services in the other direction would make links instead of reading
|
|
31
|
+
them.
|