@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,307 @@
|
|
|
1
|
+
# Board assistant
|
|
2
|
+
|
|
3
|
+
Build and change a board through a conversation beside the runtime canvas.
|
|
4
|
+
Open it with the sparkle button beside zoom, at the top right of the playground
|
|
5
|
+
toolbar:
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
Close it with the same button or the panel's close button. The conversation
|
|
10
|
+
stays available while the panel is hidden; it is not saved in the board file.
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
Open **Settings → Board Assist**, in either the website or the native Readymade
|
|
15
|
+
app. Choose **Anthropic**, **OpenAI compatible**, **OpenCode server** or
|
|
16
|
+
**OpenCode Go**; only the chosen provider's
|
|
17
|
+
settings are shown. As in Appearance, changes take effect as you make them — a
|
|
18
|
+
choice at once, a text field when you leave it — and an invalid value is
|
|
19
|
+
explained under its field instead of being saved. Each saved token can be
|
|
20
|
+
removed with the × beside its section. The assistant panel also has a **Provider** selector. Switching providers
|
|
21
|
+
or API servers clears the conversation so a previous provider's history is not
|
|
22
|
+
sent to a different server. The board is kept; the conversation's revert
|
|
23
|
+
checkpoint goes with it.
|
|
24
|
+
|
|
25
|
+
For Anthropic, enter an API token. For OpenAI-compatible servers, enter an **API
|
|
26
|
+
base URL** including `/v1`, and an optional API token. An unauthenticated local
|
|
27
|
+
llama.cpp server does not need a token. For example:
|
|
28
|
+
|
|
29
|
+
- Provider: **OpenAI compatible**
|
|
30
|
+
- API base URL: `http://127.0.0.1:8081/v1`
|
|
31
|
+
- API token: empty unless the server was launched with authentication
|
|
32
|
+
- Server context size: **8192** when using `llama-server -c 8192`
|
|
33
|
+
|
|
34
|
+
Then select **OpenAI compatible** in the panel. It queries `/v1/models`
|
|
35
|
+
and lists the returned model IDs, such as `Bonsai-27B-Q1_0.gguf`. **Refresh models**
|
|
36
|
+
repeats that query. Requests use `/v1/chat/completions` with JSON output mode;
|
|
37
|
+
the model and its chat template must support following instructions and producing
|
|
38
|
+
JSON. Responses are streamed so slow generation can show progress without
|
|
39
|
+
waiting for the entire response. A server that ignores streaming is accepted
|
|
40
|
+
with a normal JSON response. Hosted endpoints work with the same fields. Browser clients need the server
|
|
41
|
+
to allow their origin through CORS. An address using plain `http://` to anything
|
|
42
|
+
but this machine is accepted with a warning, in Settings and in the panel: the
|
|
43
|
+
token, prompts and board cross the network unencrypted. The MCP server URL is
|
|
44
|
+
warned about the same way.
|
|
45
|
+
|
|
46
|
+
For llama.cpp, **Thinking mode** can be **Server default**, **Off**, or **On**.
|
|
47
|
+
The assistant panel's **Effort** selector offers **Server default**, **Thinking off**,
|
|
48
|
+
and **Thinking on** for OpenAI-compatible servers. It shares the saved thinking
|
|
49
|
+
setting with Settings, so it can be changed directly before the next request.
|
|
50
|
+
Off sends `chat_template_kwargs: { enable_thinking: false }`; On sends true.
|
|
51
|
+
Leave Server default for endpoints without llama.cpp's template options. This
|
|
52
|
+
controls thinking in the template and is separate from the context-size setting.
|
|
53
|
+
Thinking can use the output budget before the final board appears.
|
|
54
|
+
|
|
55
|
+
**OpenCode Go** uses the models of an OpenCode Go subscription through the same
|
|
56
|
+
OpenAI-compatible API, with Board Assist itself as the client — no OpenCode
|
|
57
|
+
server is involved. Enter the subscription's **API key** (from
|
|
58
|
+
`opencode.ai/auth`); the **API base URL** starts as Go's own,
|
|
59
|
+
`https://opencode.ai/zen/go/v1`. The model list shows only the models Go serves
|
|
60
|
+
through chat completions, and each turn is sized by the selected model's
|
|
61
|
+
context window, so there is no context setting. Each conversation is named to Go
|
|
62
|
+
by a session id in the `X-Opencode-Session` header, which Go asks of every
|
|
63
|
+
client; a new conversation gets a new one.
|
|
64
|
+
|
|
65
|
+
Go lists its models to any page, but does not yet answer the browser's CORS
|
|
66
|
+
check for generating, so a page reaches it through a relay: a small server that
|
|
67
|
+
adds CORS headers for the pages using it, forwards `models` and
|
|
68
|
+
`chat/completions` to `https://opencode.ai/zen/go/v1`, and passes on the
|
|
69
|
+
`Authorization` and `X-Opencode-Session` headers. Its address goes in the API
|
|
70
|
+
base URL, with the gateway's path, such as
|
|
71
|
+
`https://example.com/opencode.php/go/v1`. The key travels through the relay to
|
|
72
|
+
Go. A relay meant for only some people can ask for a key of its own: the
|
|
73
|
+
**Relay key**, sent as `X-Relay-Key` when it is set, and never to Go directly.
|
|
74
|
+
|
|
75
|
+
A connection failure during generation can mean a timeout or disconnect, even
|
|
76
|
+
when the server is still working. It does not establish a CORS problem. The
|
|
77
|
+
panel distinguishes initial connection errors from interrupted response streams;
|
|
78
|
+
**Stop** cancels the request and an incomplete stream is never offered as a board.
|
|
79
|
+
|
|
80
|
+
The compatible provider retrieves relevant repository pages before generating,
|
|
81
|
+
using a conservative budget for the configured context size. It preserves the
|
|
82
|
+
full current board and rejects a request that cannot fit rather than truncating
|
|
83
|
+
its configuration. Older conversation may be omitted to fit the latest board.
|
|
84
|
+
Larger boards may require increasing both the server's context size and this
|
|
85
|
+
setting. This does not change the server's context limit itself.
|
|
86
|
+
|
|
87
|
+
Anthropic uses its official browser-capable TypeScript SDK and Models API,
|
|
88
|
+
following all model-list pages. Effort offers the levels the selected Anthropic
|
|
89
|
+
model reports it supports; **Model default** omits effort. Compatible servers use
|
|
90
|
+
their model default, since the standard model-list API does not report supported
|
|
91
|
+
effort levels. The provider, model, effort and server settings are saved on this
|
|
92
|
+
device. **API settings** replaces **Send** if the active provider lacks its required
|
|
93
|
+
settings; local servers can send with no API token.
|
|
94
|
+
|
|
95
|
+
Where tokens are kept depends on the host. The desktop and phone apps keep them
|
|
96
|
+
with their other secrets (`targets.md`, "Where secrets live"), as
|
|
97
|
+
`readymade.assist.anthropic`, `readymade.assist.openai-compatible`,
|
|
98
|
+
`readymade.assist.opencode`, `readymade.assist.opencode-go` and
|
|
99
|
+
`readymade.assist.opencode-go-relay`, so they
|
|
100
|
+
are listed, and can be removed, in **Settings → Secrets** like any other
|
|
101
|
+
credential. Each is allowed only to its provider's host — `api.anthropic.com`,
|
|
102
|
+
or the host of the API base URL, which it follows when the URL changes — so a
|
|
103
|
+
board that names one as `{{secret.readymade.assist.anthropic}}` can use it for
|
|
104
|
+
its own calls to that provider and nowhere else. A token an older build kept in
|
|
105
|
+
local storage moves there on the first launch. The website has no secret store
|
|
106
|
+
and keeps tokens in the browser's local storage. Either way they stay outside
|
|
107
|
+
board files and share links. The other settings stay in local storage on every
|
|
108
|
+
host. Requests go directly to the selected provider or API server; hosted API
|
|
109
|
+
usage is billed to that account.
|
|
110
|
+
|
|
111
|
+
## On a phone
|
|
112
|
+
|
|
113
|
+
On iOS and Android, Board Assist is a page of its own, opened with the sparkle
|
|
114
|
+
button in a board's top bar. Leaving it with Back keeps the conversation, as
|
|
115
|
+
hiding the desktop panel does. The provider's settings are a section of
|
|
116
|
+
**Settings**, after Appearance, and the page leads there when no provider is set
|
|
117
|
+
up; the model, effort and **Include asset contents** are in a sheet opened from
|
|
118
|
+
the model line at the top.
|
|
119
|
+
|
|
120
|
+
A phone has no selection. What it has instead is what the person opened last:
|
|
121
|
+
tapping a service, inspecting its flow, adding a service to a runtime, running a
|
|
122
|
+
runtime with parameters or making a block of services makes that runtime, and
|
|
123
|
+
those services, what **Context** narrows to. The choice above the conversation
|
|
124
|
+
names it ("Browser · Timer"), beside **Whole board**. The open nested pipeline
|
|
125
|
+
is likewise the one last drilled into in a service's sheet: the sub-services
|
|
126
|
+
passed through on the way, and the one shown if it holds a pipeline of its own,
|
|
127
|
+
sent as the levels the desktop's breadcrumb would show.
|
|
128
|
+
|
|
129
|
+
**Review changes** opens the proposal as a page: what it does in a sentence per
|
|
130
|
+
change — runtimes and services added, removed, changed or reordered, the facade,
|
|
131
|
+
blocks or assets changed — and then the board document's lines that differ,
|
|
132
|
+
with the unchanged ones folded. It is read-only; ask for another proposal to
|
|
133
|
+
change it. **Apply changes** applies it exactly as **Apply board** does, with
|
|
134
|
+
the same checks, connection confirmation and revert
|
|
135
|
+
(`hkp-frontend/src/views/assist/`, `hkp-frontend/src/assist/proposalDiff.ts`).
|
|
136
|
+
Both layouts share one model of the conversation
|
|
137
|
+
(`hkp-frontend/src/assist/useBoardAssist.ts`).
|
|
138
|
+
|
|
139
|
+
## Building and editing
|
|
140
|
+
|
|
141
|
+
Describe what the board should do. For example:
|
|
142
|
+
|
|
143
|
+
> Create a board that runs every minute, captures an image using the browser
|
|
144
|
+
> Camera service, detects faces, and sends a notification to ntfy topic xxx
|
|
145
|
+
> when there are faces.
|
|
146
|
+
|
|
147
|
+
The assistant can search and read the documentation in `docs/content/` and the
|
|
148
|
+
JSON examples in `boards/`. Both are packaged into builds, so the documentation
|
|
149
|
+
matches that build and requires no documentation server. It reads the relevant
|
|
150
|
+
service contracts, configuration and data shapes before proposing a board.
|
|
151
|
+
|
|
152
|
+
The repository also contains an optional read-only MCP knowledge server in
|
|
153
|
+
`readymade-mcp/`. It indexes the same documentation plus example boards and
|
|
154
|
+
allowlisted runtime source from a pinned checkout. Its tools can search, read
|
|
155
|
+
contracts, find compatible services and examples, inspect bounded source
|
|
156
|
+
excerpts, and statically validate a board. Each result carries build and commit
|
|
157
|
+
provenance.
|
|
158
|
+
|
|
159
|
+
To use it with Board Assist, run the server and set **Settings → Board Assist →
|
|
160
|
+
Knowledge server → MCP server URL**, for example
|
|
161
|
+
`http://127.0.0.1:8787/mcp`. The URL is device-local configuration and is not
|
|
162
|
+
written into boards. A hosted playground needs the server behind a TLS reverse
|
|
163
|
+
proxy; `readymade-mcp/README.md` walks through deploying it. Both providers can consume the server's search and
|
|
164
|
+
document-reading tools. Anthropic also receives the allowlisted contract,
|
|
165
|
+
compatibility, example, source-inspection and board-validation operations as
|
|
166
|
+
model-controlled tools. OpenAI-compatible providers retain bounded
|
|
167
|
+
pre-retrieval until their tool-calling support can be detected reliably.
|
|
168
|
+
|
|
169
|
+
The MCP connection has bounded connect and tool-call timeouts. What happens when
|
|
170
|
+
a call fails depends on what the failure says about the server:
|
|
171
|
+
|
|
172
|
+
- **The server refused this call** — a tool result marked as an error, or a
|
|
173
|
+
JSON-RPC error: invalid arguments, an unknown path or service. The server is
|
|
174
|
+
reachable, so only that call is answered from the bundled documentation (or
|
|
175
|
+
its error goes back to the model), and the rest of the turn keeps using MCP.
|
|
176
|
+
- **The server cannot serve the turn** — a network or CORS failure, an HTTP
|
|
177
|
+
error, a timeout, a closed connection, missing required tools, or replies in
|
|
178
|
+
a shape Board Assist does not understand. The rest of the turn uses the
|
|
179
|
+
bundled documentation and the panel shows a fallback notice. It is not retried
|
|
180
|
+
within the turn: seconds later it is unlikely to have recovered.
|
|
181
|
+
|
|
182
|
+
The next turn tries the server again, which costs nothing when it refuses
|
|
183
|
+
connections. A server that failed **slowly** — a timeout, or any failure that
|
|
184
|
+
took two seconds or more — is skipped by later turns for a minute instead, so a
|
|
185
|
+
hanging server does not delay every request before the offline path is used.
|
|
186
|
+
Cancellation still stops the request. Leaving the MCP URL empty keeps the fully
|
|
187
|
+
offline path and does not load the MCP client.
|
|
188
|
+
|
|
189
|
+
The MCP server receives knowledge search terms, requested document paths and
|
|
190
|
+
arguments to richer operations. Those arguments can include the current or
|
|
191
|
+
proposed board when the model calls `validate_board`. Provider API tokens are
|
|
192
|
+
not sent to MCP. Treat a configured MCP endpoint as a trusted recipient of this
|
|
193
|
+
context even though retrieved content is still treated as untrusted model data.
|
|
194
|
+
|
|
195
|
+
The local server accepts browser origins on loopback by default. When Board
|
|
196
|
+
Assist is served from a named host, explicitly allow that hostname when starting
|
|
197
|
+
the server, for example `--allowed-origin readymadeit.com`. A non-loopback MCP
|
|
198
|
+
deployment additionally needs strict Host and Origin allowlists and
|
|
199
|
+
authentication before it should be exposed publicly.
|
|
200
|
+
|
|
201
|
+
Every request is built from the board as it is at that moment, with the
|
|
202
|
+
available runtime engines and service catalog, the selected services and the
|
|
203
|
+
open nested pipeline. **Context** decides how much of the board goes with it and
|
|
204
|
+
what the assistant may change:
|
|
205
|
+
|
|
206
|
+
- **Only runtime …** — when a runtime is selected. The assistant receives that
|
|
207
|
+
runtime and its services in full, and the rest of the board only as an
|
|
208
|
+
outline: runtimes in order with their services' ids and names, no state, and
|
|
209
|
+
which services the facade uses. It proposes that runtime alone, which is
|
|
210
|
+
merged into the current board; nothing outside it can change, whatever the
|
|
211
|
+
model writes. A request that needs other runtimes, the facade, assets or
|
|
212
|
+
blocks is answered by asking to switch to the whole board. Blocks, assets and
|
|
213
|
+
imported units the runtime refers to are included as context. A runtime
|
|
214
|
+
contributed by an imported unit cannot be edited through the board, so
|
|
215
|
+
selecting one uses the whole board.
|
|
216
|
+
- **Whole board** — the complete board and imported unit documents; the
|
|
217
|
+
proposal is a complete board.
|
|
218
|
+
|
|
219
|
+
Select a service before asking to change "this service". Ambiguous requests can
|
|
220
|
+
receive a clarification instead of a change. Imported unit documents cannot be
|
|
221
|
+
edited through their containing board here.
|
|
222
|
+
|
|
223
|
+
**Include asset contents** is off by default: assets are sent as their id and
|
|
224
|
+
media type only, and a proposal that keeps an asset gets its contents back from
|
|
225
|
+
the current board. Turn it on to let the assistant read or rewrite an asset's
|
|
226
|
+
text — a page, a script. The choice is saved on this device.
|
|
227
|
+
|
|
228
|
+
Your prompts, the board context above, conversation history and the
|
|
229
|
+
documentation retrieved by the assistant are sent to the selected provider or
|
|
230
|
+
API server; the line under the prompt says what the next request carries and
|
|
231
|
+
where it goes. Service state can include credentials entered directly; use
|
|
232
|
+
secret references where possible — a `{{secret.…}}` reference is sent, never
|
|
233
|
+
its value. Credentials from **Board Assist** settings are used for
|
|
234
|
+
authentication and are not added to the model's conversation.
|
|
235
|
+
|
|
236
|
+
## Review, apply and revert
|
|
237
|
+
|
|
238
|
+
The assistant explains its proposal and offers **Show changes** beside
|
|
239
|
+
**Apply board**. Preview opens a Monaco JSON diff: the current board
|
|
240
|
+
on the left and the proposal on the right, with removed lines in red and added
|
|
241
|
+
lines in green. Narrow windows use an inline diff. The current board is read
|
|
242
|
+
afresh when opening the preview; viewing it does not apply the proposal. The current side is read-only; the
|
|
243
|
+
proposed side can be edited. **Apply edited board** validates and applies your
|
|
244
|
+
JSON, including manual changes, and supports the same revert action. Invalid
|
|
245
|
+
JSON or a board-load error keeps the editor open with your draft intact.
|
|
246
|
+
**Cancel** discards the draft. Applying from the diff checks for configuration
|
|
247
|
+
changes since the diff was opened, so the current side you reviewed is the
|
|
248
|
+
configuration being replaced. A proposal does not change the running board. It first passes
|
|
249
|
+
structural validation and the normal board linker checks its blocks and
|
|
250
|
+
references without loading runtimes. A failed preflight leaves the proposal and
|
|
251
|
+
diff available, but disables direct application; edit it in the diff to repair
|
|
252
|
+
and revalidate it. Service-specific behavior still needs testing with the actual
|
|
253
|
+
devices and runtime servers.
|
|
254
|
+
|
|
255
|
+
**Apply board** loads the proposed configuration through BoardContext. This
|
|
256
|
+
rebuilds the runtimes and can start services, connect to remote servers, or request
|
|
257
|
+
camera and microphone permissions. Timer ticks and JSON object key ordering do not count as edits for this check.
|
|
258
|
+
If the board configuration changed after the request,
|
|
259
|
+
applying is refused: ask for a new proposal using the current board.
|
|
260
|
+
|
|
261
|
+
A proposal that would make the board contact an address it does not use yet is
|
|
262
|
+
not applied until you say so — from the message or from the diff. The
|
|
263
|
+
assistant read board content, documentation and knowledge-server results
|
|
264
|
+
nobody on your side wrote, so an address in its output is not trusted just
|
|
265
|
+
because you asked for a change. Board Assist lists the new origins: runtime
|
|
266
|
+
servers, which run part of the board and receive your Readymade sign-in, and
|
|
267
|
+
any other address in service state, assets or the facade, which services may
|
|
268
|
+
connect and send board data to. An origin counts as known when it appears
|
|
269
|
+
anywhere in the current board or its imported units. Vault secrets are asked
|
|
270
|
+
about separately, per server, when a runtime first needs them.
|
|
271
|
+
|
|
272
|
+
Runtimes that **name** their server never need this confirmation, because a
|
|
273
|
+
name resolves only to a server you keep (`"remote": "node"`, `"remote":
|
|
274
|
+
"embedded"`; see [Remotes](./remotes.md)). Board Assist leans on that:
|
|
275
|
+
|
|
276
|
+
- The assistant is shown your runtime servers by name only — their addresses
|
|
277
|
+
are not sent to the provider — and is told to use `remote`, never `url`.
|
|
278
|
+
- When a proposal still gives a runtime the address of a server you keep, that
|
|
279
|
+
address is replaced by the server's name, the same name the runtime picker
|
|
280
|
+
would write, and the message says so. A runtime keeping the `url` it already
|
|
281
|
+
has is left alone; ask for the change if you want it named.
|
|
282
|
+
- A name you keep nothing under is asked about when the board loads: you say
|
|
283
|
+
which server it means. The address comes from you, not from the model.
|
|
284
|
+
|
|
285
|
+
Addresses in service state are not covered by names and are still confirmed.
|
|
286
|
+
|
|
287
|
+
Service panels and facade panels have independent render boundaries, so one
|
|
288
|
+
broken panel reports its error in place instead of taking down the playground.
|
|
289
|
+
Board Assist watches those boundaries while applying. A load or render failure
|
|
290
|
+
automatically reloads the checkpoint from before the attempt and keeps the
|
|
291
|
+
proposal available for inspection or editing. This is transactional failure
|
|
292
|
+
containment, not a security sandbox: services may begin initialization during
|
|
293
|
+
the attempted load, so external effects that already occurred cannot be undone.
|
|
294
|
+
|
|
295
|
+
**Revert** replaces **Apply board** in the proposal after a successful
|
|
296
|
+
application. It restores the complete configuration from immediately
|
|
297
|
+
before the last assistant application, including its assets, blocks and facade.
|
|
298
|
+
If automatic restoration itself fails, the manual revert remains available.
|
|
299
|
+
Revert replaces the current configuration. When the board has changed since the
|
|
300
|
+
proposal was applied, it asks first, because those later edits would be
|
|
301
|
+
discarded. It does not undo notifications, HTTP requests or other effects
|
|
302
|
+
services have already produced. There is one previous configuration, kept for
|
|
303
|
+
the conversation.
|
|
304
|
+
|
|
305
|
+
**Stop** cancels the current API request. **New conversation** clears the chat
|
|
306
|
+
and its revert checkpoint without changing the board. Conversation and revert history are not persisted
|
|
307
|
+
across leaving the playground or reloading the app.
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Board
|
|
2
|
+
|
|
3
|
+
The top-level unit: a named, self-contained description of an app — its runtimes, the services inside them, and optionally the facade that presents it.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What a board is
|
|
8
|
+
|
|
9
|
+
Everything lives on a board. It is the unit a person thinks in ("my doorbell
|
|
10
|
+
board", "the booking board"), the unit that gets saved, shared, forked and
|
|
11
|
+
deployed, and the unit a coordinator owns.
|
|
12
|
+
|
|
13
|
+
Structurally it is one JSON document, `BoardDescriptor` in
|
|
14
|
+
`hkp-frontend/src/types.ts`:
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
type BoardDescriptor = {
|
|
18
|
+
runtimes: Array<RuntimeDescriptor>;
|
|
19
|
+
services: { [runtimeId: string]: Array<ServiceDescriptor> };
|
|
20
|
+
registry?: ServiceRegistryMap;
|
|
21
|
+
boardName?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
facade?: FacadeDescriptor;
|
|
24
|
+
};
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
That is the whole model. There is no wire list, no graph, no separate flow
|
|
28
|
+
definition: **order is the wiring**. Runtimes run in array order, and the
|
|
29
|
+
services inside each runtime run in the order they are listed.
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"boardName": "My Board",
|
|
34
|
+
"runtimes": [
|
|
35
|
+
{ "id": "ui", "name": "Browser", "type": "browser", "state": {} },
|
|
36
|
+
{ "id": "node", "name": "Node", "type": "rest", "remote": "node", "state": {} }
|
|
37
|
+
],
|
|
38
|
+
"services": {
|
|
39
|
+
"ui": [ { "uuid": "tick", "serviceId": "hookup.to/service/timer", "serviceName": "Timer", "state": {} } ],
|
|
40
|
+
"node": [ { "uuid": "log", "serviceId": "monitor", "serviceName": "Monitor" } ]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Ids, and why they matter
|
|
48
|
+
|
|
49
|
+
`runtimes[].id` and each service's `uuid` are not decoration. They are how
|
|
50
|
+
everything in and around a board refers to a part of it: which runtime a
|
|
51
|
+
service list belongs to, which service a facade widget drives, which service a
|
|
52
|
+
mount reference names.
|
|
53
|
+
|
|
54
|
+
- **A board loaded from JSON keeps the ids the file carries.** That is what
|
|
55
|
+
makes them stable across reloads — a runtime server can recognise the runtime
|
|
56
|
+
it already has and attach rather than rebuild.
|
|
57
|
+
- **Ids are unique per user, not globally.** hkp-node namespaces runtimes by the
|
|
58
|
+
authenticated `sub`, so boards can ship readable ids like `node` or
|
|
59
|
+
`chat-node` without two people colliding on one server. A deployed board's
|
|
60
|
+
runtimes are further kept per board, so two of one person's boards may share
|
|
61
|
+
an id too (`concepts/cloud-boards.md`).
|
|
62
|
+
- **Copying a board must rename all of them.** Otherwise the copy provisions
|
|
63
|
+
over the original's runtimes — an editor whose changes land somewhere else.
|
|
64
|
+
`hkp-frontend/src/core/forkBoard.ts` does the renaming, driven by *field name*
|
|
65
|
+
rather than by value, because an id like `node` is an ordinary string that can
|
|
66
|
+
appear anywhere in a document. `KNOWN_REFERENCE_FIELDS` is where a new
|
|
67
|
+
id-carrying field gets registered.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Order is the default, not the only shape
|
|
72
|
+
|
|
73
|
+
Everything above describes a line: runtimes in array order, services in list
|
|
74
|
+
order, each result becoming the next input. That is the shape a board should
|
|
75
|
+
have, and almost every board can have it.
|
|
76
|
+
|
|
77
|
+
It is not a cage, though. A board can also **jump**: a service can name another
|
|
78
|
+
service by id and reconfigure it, or hand it data to process; a service can call
|
|
79
|
+
a whole runtime by name. Those are real capabilities with real uses — a feedback
|
|
80
|
+
loop, a state machine, a control panel that reconfigures something elsewhere —
|
|
81
|
+
and `concepts/runtime.md` lists the mechanisms.
|
|
82
|
+
|
|
83
|
+
**Treat them the way you treat `goto`.** They are not forbidden, they are
|
|
84
|
+
expensive:
|
|
85
|
+
|
|
86
|
+
- A jump makes two parts of the board know about each other. Neither can be
|
|
87
|
+
moved, renamed or reused without the other, and reading either one no longer
|
|
88
|
+
tells you what happens.
|
|
89
|
+
- A named id is a reference generic machinery has to know about. Every one of
|
|
90
|
+
them is a field in `KNOWN_REFERENCE_FIELDS` (`core/forkBoard.ts`) —
|
|
91
|
+
`targetServiceUuid`, `targetRuntime`, `serviceUuid` — because a fork has to
|
|
92
|
+
rewrite them or the copy reaches into the original. A service that invents its
|
|
93
|
+
own way to name another one is simply not carried across.
|
|
94
|
+
- The flow stops being visible. The list no longer says what runs, and nothing
|
|
95
|
+
else does either.
|
|
96
|
+
|
|
97
|
+
**The alternative is nesting, and it is almost always available.** A pipeline
|
|
98
|
+
inside a service is a step of the outer pipeline: the host knows its nested
|
|
99
|
+
pipeline, and the nested pipeline knows nothing about its host. That ignorance is
|
|
100
|
+
the point — it is what makes the group movable, reusable and readable on its own.
|
|
101
|
+
|
|
102
|
+
The clearest example is the `join` service (hkp-node): it runs a nested pipeline
|
|
103
|
+
as a **detour** and merges the result *beside* the input rather than replacing it.
|
|
104
|
+
Two services that would otherwise have to know each other's ids — one producing
|
|
105
|
+
a value, one filing it against the record it belongs to — become one grouped step
|
|
106
|
+
that takes a value in and hands a bigger value out. Same for `sub-service` (a
|
|
107
|
+
pipeline as a step), `switch` (pipelines as branches), `looper` (a pipeline
|
|
108
|
+
repeated) and `board-service` (a whole saved board as a step).
|
|
109
|
+
|
|
110
|
+
The question to ask when reaching for a jump is: *what value am I actually trying
|
|
111
|
+
to get from over there?* Usually there is a grouping that produces that value
|
|
112
|
+
where it is needed, and then nothing has to reach anywhere.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## What a board deliberately does not contain
|
|
117
|
+
|
|
118
|
+
| Not in the board | Where it lives instead | Why |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| Secret values | the host's secret store, referenced as `{{secret.alias}}` | a board is meant to be shared, downloaded, handed to a model — there is nothing to redact because it never held the value (`core/secrets.ts`) |
|
|
121
|
+
| Mount addresses | published by the owning service at load, referenced as `hkp-mount://…` | the address is assigned when the board loads, so no file can know it (see `concepts/mounts.md`) |
|
|
122
|
+
| Where a runtime server listens | the remotes each client keeps, referenced by name as `"remote": "node"` | an address is only true from where it is dialled; the name opens on each person's own server (see `concepts/remotes.md`) |
|
|
123
|
+
| Host-specific URLs | substituted from `HKP_RUNTIME_HOST`, `HKP_RUNTIME_URL`, `HKP_WEBAPP_URL` at load | the same board opens on a laptop and a phone (`hkp-frontend/src/templateVars.ts`) |
|
|
124
|
+
| Live service output | nowhere — it is a notification, not state | a Monitor's messages are its output; `getState()` reports configuration |
|
|
125
|
+
|
|
126
|
+
The rule behind all five: **a board records intent, not the circumstances of one
|
|
127
|
+
run.** Anything only true of one machine on one day is resolved on load, not
|
|
128
|
+
written down.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Loading a board
|
|
133
|
+
|
|
134
|
+
A board is **linked** first: if it lists `units`, those documents are resolved
|
|
135
|
+
and projected into it, and what runs is the projection. A board that lists none
|
|
136
|
+
is its own projection, so nothing else here has a special case for it. See
|
|
137
|
+
**Units and compositions** (`concepts/units.md`).
|
|
138
|
+
|
|
139
|
+
Then `restoreBoard()` in `hkp-frontend/src/core/boardPersistence.ts`:
|
|
140
|
+
|
|
141
|
+
1. If any runtime needs authentication, wait for the user session to settle —
|
|
142
|
+
remote runtimes authenticate every call with the user's id token, and
|
|
143
|
+
provisioning without one gets a 401.
|
|
144
|
+
2. Restore **every runtime concurrently** (`Promise.all`), each through the
|
|
145
|
+
`RuntimeApi` for its type.
|
|
146
|
+
3. Services are restored with their secret references intact. Nothing is
|
|
147
|
+
substituted into service state: a resolved value in state is a value that
|
|
148
|
+
comes back out of `getState()` and into the next saved board.
|
|
149
|
+
|
|
150
|
+
That concurrency is worth remembering, because it is the reason so much in HKP
|
|
151
|
+
is *lazy*: when one runtime comes up, the runtimes it points at may not exist
|
|
152
|
+
yet. "Not resolved yet" is a normal state, not an error.
|
|
153
|
+
|
|
154
|
+
## Saving a board
|
|
155
|
+
|
|
156
|
+
`serializeBoard()` in the same file asks **each service for its live state**
|
|
157
|
+
(`getServiceConfig`) rather than writing down what the board was loaded with.
|
|
158
|
+
A service reports what it was configured with, so a board round-trips — and this
|
|
159
|
+
is also why anything the machinery pushes into a service's state ends up in the
|
|
160
|
+
saved file.
|
|
161
|
+
|
|
162
|
+
A board assembled from units is written back as the documents it was assembled
|
|
163
|
+
from, never as the one board it is running as; `serializeBoard` is the flat
|
|
164
|
+
output that deploying, sharing and exporting want.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## What you can do with a board
|
|
169
|
+
|
|
170
|
+
| Action | What happens | Where |
|
|
171
|
+
|---|---|---|
|
|
172
|
+
| **Save / load** | one JSON document per board, kept by the host — files on desktop, `localStorage` on the web | `backend.saveBoard` / `loadBoard` (`meander/frontend/src/backend/types.ts`) |
|
|
173
|
+
| **Import / edit source** | paste a board JSON in *Edit Board Source*; hosts that support it keep the unparsed text too | `loadBoardSource` / `saveBoardSource` |
|
|
174
|
+
| **Share as a link** | the board is compressed into a URL that opens it in the playground | `views/playground/BoardLink.tsx` |
|
|
175
|
+
| **Share as a QR / partner board** | a *subset* of the board travels — the runtimes the receiver can reach — with mount references and template variables baked into concrete values first | `ui-components/runtime-ui/RuntimeHeader.tsx`, `facade/FacadeRenderer.tsx` |
|
|
176
|
+
| **Fork** | a copy with every id regenerated, so it is a board of its own | `core/forkBoard.ts` |
|
|
177
|
+
| **Deploy** | hand it to a coordinator that provisions its runtimes and keeps them running | `core/deploy.ts`, see `concepts/cloud-boards.md` |
|
|
178
|
+
| **History** | hosts may snapshot the board on every structural change | `onBoardInfrastructureChange` → `pushBoardSnapshot` |
|
|
179
|
+
|
|
180
|
+
Note what the export cases have in common: **references are resolved on the way
|
|
181
|
+
out.** A reference is meaningful only inside the board that also holds the thing
|
|
182
|
+
it names, so a board leaving for another device gets concrete values instead.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## The facade
|
|
187
|
+
|
|
188
|
+
A board can carry a `facade`: a JSON description of a polished, app-like surface
|
|
189
|
+
of controls and displays laid over the services. Developers build the internals;
|
|
190
|
+
the facade makes the result usable by someone who neither knows nor cares what a
|
|
191
|
+
service is.
|
|
192
|
+
|
|
193
|
+
Widgets reference services by `serviceUuid` — another id-carrying field, which
|
|
194
|
+
is why forking rewrites it. Types live in `hkp-frontend/src/facade/types.ts`;
|
|
195
|
+
the full widget catalogue is in `CLAUDE.md` and the `/new-board` skill.
|
|
196
|
+
|
|
197
|
+
Beside its panels a facade declares two things about what is on screen and when.
|
|
198
|
+
**Tabs** group the panels into faces shown one at a time, because a board's
|
|
199
|
+
controls rarely all belong to the same person or the same moment — a feed is
|
|
200
|
+
subscribed to once and read every day. They are a view over the panels the
|
|
201
|
+
facade already has: a tab names panel ids, a panel no tab names stays on screen
|
|
202
|
+
above the bar, and `defaultTab` — which is not remembered between visits — is
|
|
203
|
+
what everybody gets. A panel can also be another's **detail** (`detailOf`) — a
|
|
204
|
+
story's discussion beside the list of stories. Where they fit side by side they
|
|
205
|
+
are; on a phone the detail opens in place of its master, from a `show-panel`
|
|
206
|
+
action, with a way back to the list as it was left. **Notices** are what a board says without being looked at: a
|
|
207
|
+
toast raised from what a service reports, instead of a row kept free for a
|
|
208
|
+
problem that is usually not there.
|
|
209
|
+
|
|
210
|
+
A facade can say **who it is being shown to**: `{ "$user": "name" }` or
|
|
211
|
+
`{ "$user": "email" }`, usable wherever a `{ "$state": … }` reference is — in a
|
|
212
|
+
payload, or as a `text` widget's `value`. On a deployed board `name` is what
|
|
213
|
+
that board's member list calls the person; elsewhere it is the account's own.
|
|
214
|
+
It is for *showing* somebody who they are acting as. A service that has to
|
|
215
|
+
know who is calling asks the run, which the server states — see
|
|
216
|
+
[SQL: who is calling](../services/sql.md#who-is-calling). Nothing a facade puts
|
|
217
|
+
in a payload proves it.
|
|
218
|
+
|
|
219
|
+
And it can keep a part of itself **for the board's owner**: a widget, a
|
|
220
|
+
container, a panel, a tab or a notice carrying `"visibleTo": "owner"`. On a
|
|
221
|
+
deployed, shared board the coordinator leaves it out of the facade a member is
|
|
222
|
+
sent, so a member is not shown it, cannot act through it, and is not sent what
|
|
223
|
+
it reads; anywhere else whoever has the board open is its owner and sees it
|
|
224
|
+
all ([Cloud boards](./cloud-boards.md#sharing-a-board-members)).
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Who owns a board
|
|
229
|
+
|
|
230
|
+
Exactly one instance, always — and which one changes what the browser may do:
|
|
231
|
+
|
|
232
|
+
| Board runs as | Owner | Browser's role |
|
|
233
|
+
|---|---|---|
|
|
234
|
+
| Playground / Readymade | this browser | owns it: provisions runtimes, holds engine state |
|
|
235
|
+
| Deployed | a coordinator | viewer: reads, configures, cannot edit structure |
|
|
236
|
+
| Deployed, shared with you | a coordinator, for its owner | member: sees the facade and what it reads, does what the facade does, and is shown nothing else of the board |
|
|
237
|
+
|
|
238
|
+
The role that owns the board is the **coordinator**
|
|
239
|
+
(`concepts/coordinator.md`), and moving between the two rows is
|
|
240
|
+
**deploying** (`concepts/cloud-boards.md`).
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Rough index into the source
|
|
245
|
+
|
|
246
|
+
| Concern | Where |
|
|
247
|
+
|---|---|
|
|
248
|
+
| The type | `hkp-frontend/src/types.ts` (`BoardDescriptor`, `isBoardDescriptor`) |
|
|
249
|
+
| The live board (engine state, actions) | `hkp-frontend/src/BoardContext.tsx` |
|
|
250
|
+
| Load / save | `hkp-frontend/src/core/boardPersistence.ts` (`restoreBoard`, `serializeBoard`) |
|
|
251
|
+
| Copying a board | `hkp-frontend/src/core/forkBoard.ts` |
|
|
252
|
+
| Deploying | `hkp-frontend/src/core/deploy.ts` |
|
|
253
|
+
| Secret references | `hkp-frontend/src/core/secrets.ts` |
|
|
254
|
+
| Host template variables | `hkp-frontend/src/templateVars.ts` |
|
|
255
|
+
| Facade | `hkp-frontend/src/facade/` |
|
|
256
|
+
| Host storage | `meander/frontend/src/backend/types.ts` (`BackendAdapter`) |
|
|
257
|
+
| Example boards | `boards/*.json` |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
See also: **Runtime** (`concepts/runtime.md`), **Service**
|
|
262
|
+
(`concepts/service.md`), **Mounts** (`concepts/mounts.md`), **Coordinator**
|
|
263
|
+
(`concepts/coordinator.md`), **Cloud boards** (`concepts/cloud-boards.md`),
|
|
264
|
+
**Units and compositions** (`concepts/units.md`), **Logging**
|
|
265
|
+
(`concepts/logging.md`).
|