@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,297 @@
|
|
|
1
|
+
# Coordinator
|
|
2
|
+
|
|
3
|
+
The instance that owns a board — the only one that can see across all of its runtimes, and therefore the one that answers questions no single runtime can.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## The question it answers
|
|
8
|
+
|
|
9
|
+
A runtime knows its own services and nothing else. That is enough for almost
|
|
10
|
+
everything a board does, because a service's work is local: take the input, do
|
|
11
|
+
the thing, hand the result on.
|
|
12
|
+
|
|
13
|
+
Some questions are not local:
|
|
14
|
+
|
|
15
|
+
- *What address did that service on the other runtime publish?* — a mount is
|
|
16
|
+
assigned when its runtime loads, so nobody can write it into a board.
|
|
17
|
+
- *This board is about to be exported to a phone that will not have these
|
|
18
|
+
runtimes — what concrete addresses should its references become?*
|
|
19
|
+
- *What state does a service on another runtime currently report?*
|
|
20
|
+
|
|
21
|
+
Each of those needs a view of the **whole board**, and no runtime has one. The
|
|
22
|
+
role that does is the **coordinator**.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Why it is easy to miss that there always is one
|
|
27
|
+
|
|
28
|
+
In the playground and in Readymade, one browser tab plays every role at once:
|
|
29
|
+
it renders the UI, it hosts the browser runtime, it provisions the remote
|
|
30
|
+
runtimes over REST, and it holds the board's engine state. Asking "who
|
|
31
|
+
coordinates this board?" in that setting sounds like a trick question — the
|
|
32
|
+
answer is "the same thing that does everything else".
|
|
33
|
+
|
|
34
|
+
That is precisely why the role has to be named. **Coordinating a board and
|
|
35
|
+
hosting a runtime are separate jobs**, and they come apart as soon as a board is
|
|
36
|
+
deployed:
|
|
37
|
+
|
|
38
|
+
| Board runs as | Coordinator | Hosts browser runtimes | Provisions remote runtimes |
|
|
39
|
+
|---|---|---|---|
|
|
40
|
+
| Playground / Readymade | the browser | the browser | the browser, over REST |
|
|
41
|
+
| Cloud board | hkp-node | a connected browser | hkp-node, over connections their runtime servers opened to it |
|
|
42
|
+
|
|
43
|
+
Both rows are the **same board**. What changes is who owns it. A board moves
|
|
44
|
+
from the first row to the second by being **deployed**, and from that moment the
|
|
45
|
+
browser is a viewer of something it no longer owns.
|
|
46
|
+
|
|
47
|
+
Making the role explicit is what lets the same service code work in both: a
|
|
48
|
+
service asks *the coordinator*, not *the browser*, and does not know or care
|
|
49
|
+
which one answered.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## The interface
|
|
54
|
+
|
|
55
|
+
Deliberately small — four methods, in `hkp-frontend/src/core/coordinator.ts`:
|
|
56
|
+
|
|
57
|
+
| Method | Answers |
|
|
58
|
+
|---|---|
|
|
59
|
+
| `getServiceState(runtimeId, serviceUuid)` | what a service last reported, from anywhere on the board |
|
|
60
|
+
| `resolveMountUrl(value)` | a `__hkpMount` value as an address — resolving a `hkp-mount://` reference, passing an address through |
|
|
61
|
+
| `resolveMount(value)` | the same, split into host / port / path / secure for a client that dials by parts |
|
|
62
|
+
| `resolveMountsInBoard(board)` | every reference in a board document replaced by the address it currently resolves to (used when exporting) |
|
|
63
|
+
|
|
64
|
+
`createBoardCoordinator(readState)` builds one. Its only argument is *where
|
|
65
|
+
board state comes from* — which is the whole reason the same implementation
|
|
66
|
+
serves two very different situations.
|
|
67
|
+
|
|
68
|
+
**Undefined is a normal answer.** A board restores its runtimes concurrently, so
|
|
69
|
+
a service asking early gets nothing back; callers retry rather than treating it
|
|
70
|
+
as failure.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## The implementations
|
|
75
|
+
|
|
76
|
+
### 1. The browser owns the board
|
|
77
|
+
|
|
78
|
+
`BoardProvider` creates one per provider lifetime and reads through a ref, so
|
|
79
|
+
everything holding it sees current state (`hkp-frontend/src/BoardContext.tsx`,
|
|
80
|
+
`localCoordinatorRef`). This is the playground, Readymade, and any board opened
|
|
81
|
+
from a file.
|
|
82
|
+
|
|
83
|
+
### 2. The browser is attached to someone else's board
|
|
84
|
+
|
|
85
|
+
`hkp-frontend/src/views/cloud/index.tsx` calls the *same* factory, but reads
|
|
86
|
+
from the coordinator's pushed snapshot instead of local state:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
const boardCoordinator = createBoardCoordinator(() =>
|
|
90
|
+
bridgeAccess.snapshot.asCoordinatorState(),
|
|
91
|
+
);
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
and passes it into `BoardProvider` as the `coordinator` prop. `BoardProvider`
|
|
95
|
+
prefers a coordinator it is given over the one it would make
|
|
96
|
+
(`coordinatorProp ?? localCoordinatorRef.current`), and the prop's doc comment is
|
|
97
|
+
the rule in one line: *omit it when this provider owns the board*.
|
|
98
|
+
|
|
99
|
+
So a facade widget or a service panel resolving a mount runs identical code in
|
|
100
|
+
both cases. What differs is whether the state behind it is this browser's or a
|
|
101
|
+
copy of hkp-node's.
|
|
102
|
+
|
|
103
|
+
### 3. hkp-node coordinates a deployed board
|
|
104
|
+
|
|
105
|
+
Server-side, and **not** the same type despite the shared name:
|
|
106
|
+
|
|
107
|
+
| | frontend | hkp-node |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| Name | `BoardCoordinator` (interface) | `BoardCoordinator` (class) |
|
|
110
|
+
| File | `hkp-frontend/src/core/coordinator.ts` | `hkp-node/src/coordinator/coordinator.ts` |
|
|
111
|
+
| Holds | a way to read board state | `userId → boardName → BoardSession` |
|
|
112
|
+
| Does | answers cross-runtime questions | owns boards: provisions, persists, serves, tears down |
|
|
113
|
+
|
|
114
|
+
The node class is the *role*, played by a server; the frontend interface is the
|
|
115
|
+
*capability*, handed to services and UI. A `BoardSession`
|
|
116
|
+
(`hkp-node/src/coordinator/session.ts`) is one board being coordinated, and it
|
|
117
|
+
is where the equivalent cross-runtime work happens —
|
|
118
|
+
`recordMountAddress()` and `publishMountAddresses()` do there what
|
|
119
|
+
`resolveMountUrl` does here.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## How a service reaches it
|
|
124
|
+
|
|
125
|
+
A runtime host may hand the coordinator to the services it hosts, as
|
|
126
|
+
`AppInstance.coordinator` (`hkp-frontend/src/types.ts`). `BrowserRuntimeApp`
|
|
127
|
+
exposes it as a **read-through getter**, not a captured value, because the host
|
|
128
|
+
assigns it after services are built:
|
|
129
|
+
|
|
130
|
+
```ts
|
|
131
|
+
get coordinator() {
|
|
132
|
+
return scope.coordinator ?? undefined;
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
A host that cannot see the board leaves it unset, and callers treat that exactly
|
|
137
|
+
like a lookup that has not resolved yet. `PeerConnection.resolveActivePeerHost()`
|
|
138
|
+
is the reference consumer: it resolves at *connect* time, not at load time, and
|
|
139
|
+
retries.
|
|
140
|
+
|
|
141
|
+
**A service on a remote runtime cannot do this at all** — it sees its own
|
|
142
|
+
runtime and nothing else, and the coordinator may be on another machine. So the
|
|
143
|
+
coordinator pushes instead: `hkp-frontend/src/core/mountPublication.ts`
|
|
144
|
+
(`pendingMountConfigures()`) computes what each remote consumer still needs and
|
|
145
|
+
configures it with the plain address. hkp-node's session does the same for the
|
|
146
|
+
boards it owns.
|
|
147
|
+
|
|
148
|
+
For that it has to know the address, and a remote owner that claims its mount
|
|
149
|
+
after load — unbypassed from a facade, say — says so only in a notification
|
|
150
|
+
and in the state it answers the configure with. Both are taken into the board's
|
|
151
|
+
state for that service (`withReportedMount()`, fed by the REST scope's report
|
|
152
|
+
targets), the address and nothing else; hkp-node's session does the same with
|
|
153
|
+
the notifications it receives.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Ownership, which is what the role really is
|
|
158
|
+
|
|
159
|
+
**A board has exactly one owner, and the owner provisions its runtimes.** Most
|
|
160
|
+
bugs in this area are one side acting as though it owned something it did not.
|
|
161
|
+
|
|
162
|
+
Runtime lifecycle is declared by whoever creates the runtime, in the create
|
|
163
|
+
payload — never inferred from who is connected:
|
|
164
|
+
|
|
165
|
+
| `garbageCollected` | Meaning | Who sends it |
|
|
166
|
+
|---|---|---|
|
|
167
|
+
| `true` | reap when the last client socket closes | a browser — its runtimes should not outlive the tab |
|
|
168
|
+
| absent / `false` | persist until an explicit `DELETE` | a coordinator, a config file, a script |
|
|
169
|
+
|
|
170
|
+
Deploying is an introduction followed by a registration
|
|
171
|
+
(`hkp-frontend/src/core/deploy.ts`), and the browser gives nothing up for it.
|
|
172
|
+
Both sides use the board's own runtime ids and still hold different runtimes:
|
|
173
|
+
a runtime server keeps what a coordinator builds for a board in that board's
|
|
174
|
+
own space, apart from what its clients create. The browser's runtimes stay its
|
|
175
|
+
own and go when it leaves. Pinned by `core/tests/deploy.test.ts` and
|
|
176
|
+
`core/tests/board-unmount.test.tsx`; the spaces are described in
|
|
177
|
+
`concepts/cloud-boards.md`.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## What a coordinating hkp-node holds
|
|
182
|
+
|
|
183
|
+
Per board, in `BoardSession`:
|
|
184
|
+
|
|
185
|
+
| Field | What it is |
|
|
186
|
+
|---|---|
|
|
187
|
+
| `participants` | the runtime servers connected for this board, one connection per remote runtime — they connected in; the coordinator dials nothing (→ `concepts/remotes.md`) |
|
|
188
|
+
| `built`, `live` | the runtimes this session has built, and those whose runtime server is connected right now |
|
|
189
|
+
| `runtimeErrors` | why each runtime is not as the board wants it — what `error` names |
|
|
190
|
+
| `mountAddresses` | what each service published, keyed `runtimeId/serviceUuid` |
|
|
191
|
+
| `serviceStates`, `registries` | the board as the coordinator knows it — what an attached browser renders |
|
|
192
|
+
| `bridges` | every browser currently attached, each with what it is to the board (owner or member), who attached with it, the runtime ids it hosts, and its own `seq` — ordering, so a browser can tell it missed an update |
|
|
193
|
+
| `access` | what the board's facade lets a member do and see, read from the facade once per session |
|
|
194
|
+
|
|
195
|
+
Who a board is shared with is not among them: the member list belongs to the
|
|
196
|
+
board and outlives every session, so `BoardCoordinator` keeps it and a session
|
|
197
|
+
is told who it is admitting.
|
|
198
|
+
|
|
199
|
+
**It persists the board, not the run.** `hkp-node/src/coordinator/fileBoardStore.ts`
|
|
200
|
+
writes `userId`, `boardName`, `createdAt`, `config`, whether the board was
|
|
201
|
+
stopped, the hashes of its tickets and its member list — and nothing else: built runtimes, live
|
|
202
|
+
state, registries, mount addresses and status each describe one run against
|
|
203
|
+
processes that may not exist on load. A restored board that was running
|
|
204
|
+
therefore comes back **waiting** — in `error`, naming each runtime — and builds
|
|
205
|
+
them as their runtime servers reconnect with the tickets they kept. No user is
|
|
206
|
+
needed for that, which is what a ticket is for.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## The bridge
|
|
211
|
+
|
|
212
|
+
One WebSocket per attached browser, at `/coordinator/bridge`. Who may have one
|
|
213
|
+
is decided in `hkp-node/src/coordinator/bridge.ts` — the board's owner, or
|
|
214
|
+
somebody on its member list — and the socket is then handed to
|
|
215
|
+
`BoardSession.registerBrowserSocket()` with that role.
|
|
216
|
+
Message shapes live in `hkp-node/src/coordinator/bridgeProtocol.ts`; the browser
|
|
217
|
+
half is `hkp-frontend/src/views/cloud/useCoordinatorBridge.ts` and
|
|
218
|
+
`coordinatorSnapshot.ts`.
|
|
219
|
+
|
|
220
|
+
| Direction | Message | Meaning |
|
|
221
|
+
|---|---|---|
|
|
222
|
+
| → browser | `snapshot` | the whole board at a `seq`: config, each runtime's registry, each service's state — and what the browser is to it (`role`, `you`). For a member, a projection of all that |
|
|
223
|
+
| → browser | `serviceState` | one service's state changed |
|
|
224
|
+
| → browser | `notification` | a service's output — *not* state; a Monitor's message never appears in `getState()` |
|
|
225
|
+
| → browser | `processRuntime` | run this data through a **browser** runtime the coordinator cannot host |
|
|
226
|
+
| → coordinator | `resync` | I reconnected or saw a gap — tell me the board again |
|
|
227
|
+
| → coordinator | `configureService` | configure a service on a runtime you own |
|
|
228
|
+
| → coordinator | `processService` | have a service do its job with a payload, from that service onward — a facade's `process` action. Answered with `response`: accepted, or why not |
|
|
229
|
+
| → coordinator | `result-from-browser` | what that browser runtime produced, so the chain can continue |
|
|
230
|
+
| → coordinator | `log` | an entry from a browser runtime, which has no other route into the board's log |
|
|
231
|
+
|
|
232
|
+
Two consequences worth holding on to:
|
|
233
|
+
|
|
234
|
+
- **A cloud board with a browser runtime cannot run headless.** The coordinator
|
|
235
|
+
routes results into it over a bridge, so that link of the chain stalls with no
|
|
236
|
+
viewer attached (`routeResult()` / `nextRuntime()`).
|
|
237
|
+
- **A run begun over the bridge is the browser's.** Its caller is whoever
|
|
238
|
+
attached with that bridge, established when it was admitted and carried
|
|
239
|
+
across every runtime the run reaches. Nothing in a message can change it.
|
|
240
|
+
- **A member is not sent the board.** Their bridge gets the facade and what it
|
|
241
|
+
reads, may ask for what the facade asks for, and hosts no runtime. The rules
|
|
242
|
+
are in **Cloud boards** (`concepts/cloud-boards.md#sharing-a-board-members`).
|
|
243
|
+
- **Attaching is a read.** `views/cloud/bridgeRuntimeApi.ts` builds scopes that
|
|
244
|
+
open no socket, because the bridge already carries every runtime's state and a
|
|
245
|
+
cloud runtime may live where the browser has no route at all. Structural edits
|
|
246
|
+
are refused: adding a service means owning the board.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Coordinators are also runtime hosts
|
|
251
|
+
|
|
252
|
+
Coordinating and hosting are separate roles played by the *same process*: the
|
|
253
|
+
coordinator API is under `/coordinator`, the runtime API at the server root. So
|
|
254
|
+
a board can put runtimes on the host of a coordinator it already knows, which is
|
|
255
|
+
why coordinators show up among the available engines —
|
|
256
|
+
`coordinatorRuntimeEngine()` and `withCoordinatorEngines()` in
|
|
257
|
+
`hkp-frontend/src/common.tsx`, pinned by `src/tests/coordinator-runtime-engines.test.ts`.
|
|
258
|
+
|
|
259
|
+
Users configure coordinators as `{ name, url }` pairs kept in `localStorage`
|
|
260
|
+
under `hkp-coordinators` (`restoreCoordinators()` / `storeCoordinators()`).
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Rough index into the source
|
|
265
|
+
|
|
266
|
+
| Concern | Where |
|
|
267
|
+
|---|---|
|
|
268
|
+
| Interface + browser implementation | `hkp-frontend/src/core/coordinator.ts` |
|
|
269
|
+
| Owned-vs-given decision | `hkp-frontend/src/BoardContext.tsx`, `hkp-frontend/src/core/boardContextTypes.ts` (`coordinator?` prop) |
|
|
270
|
+
| Handing it to services | `hkp-frontend/src/types.ts` (`AppInstance.coordinator`), `runtime/browser/BrowserRuntimeApp.ts` |
|
|
271
|
+
| Pushing addresses to remote runtimes | `hkp-frontend/src/core/mountPublication.ts` |
|
|
272
|
+
| Deploying | `hkp-frontend/src/core/deploy.ts`, `components/Toolbar/DeployMenu.tsx` |
|
|
273
|
+
| Attached mode | `hkp-frontend/src/views/cloud/` — `index.tsx`, `useCoordinatorBridge.ts`, `coordinatorSnapshot.ts`, `bridgeRuntimeApi.ts` |
|
|
274
|
+
| Server-side role | `hkp-node/src/coordinator/coordinator.ts` (`BoardCoordinator`) |
|
|
275
|
+
| One board being coordinated | `hkp-node/src/coordinator/session.ts` (`BoardSession`) |
|
|
276
|
+
| HTTP API | `hkp-node/src/coordinator/router.ts` |
|
|
277
|
+
| Bridge socket | `hkp-node/src/coordinator/bridge.ts`, `bridgeProtocol.ts`, mounted in `hkp-node/src/index.ts` |
|
|
278
|
+
| Members and what a facade grants them | `hkp-node/src/coordinator/members.ts`, `facadeAccess.ts` |
|
|
279
|
+
| Persistence | `hkp-node/src/coordinator/boardStore.ts`, `fileBoardStore.ts` |
|
|
280
|
+
| Tickets and the runtime servers connected with them | `hkp-node/src/coordinator/participants.ts`, `join.ts`, `participantProtocol.ts` |
|
|
281
|
+
| Tests that pin the rules | `hkp-frontend/src/core/tests/coordinator-ownership.test.tsx`, `board-unmount.test.tsx`; `hkp-node/tests/coordinator-*.test.ts`, `bridge-snapshot.test.ts`, `bridge-process.test.ts`, `board-members.test.ts` |
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Known gaps
|
|
286
|
+
|
|
287
|
+
- **Two processes, one data directory** both restore every board and both believe
|
|
288
|
+
they own them. There is no lock — keep a data directory to one coordinator.
|
|
289
|
+
- **An absent coordinator is indistinguishable from an unresolved lookup.** Both
|
|
290
|
+
are "nothing yet", so a host that forgot to pass one looks like a slow board.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
See also: **Mounts** (`concepts/mounts.md`) for the questions that need a
|
|
295
|
+
coordinator most, **Cloud boards** (`concepts/cloud-boards.md`) for what
|
|
296
|
+
happens when the role moves to a server, and **Remotes**
|
|
297
|
+
(`concepts/remotes.md`) for how a board's runtime servers connect to it.
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# Logging
|
|
2
|
+
|
|
3
|
+
What a board recorded about itself — one entry at a time, stitched across every
|
|
4
|
+
runtime it spans, kept where it survives with nobody watching.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## The problem
|
|
9
|
+
|
|
10
|
+
A board in the playground is watched. Its services notify, its panels update,
|
|
11
|
+
and if something goes wrong the person who built it is looking at it.
|
|
12
|
+
|
|
13
|
+
A deployed board is not. It receives a webhook at three in the morning, runs
|
|
14
|
+
eleven services across two runtimes and a nested pipeline, and produces nothing
|
|
15
|
+
— and the question the next morning is *where did that stop*. Nothing that
|
|
16
|
+
exists for a watcher can answer it:
|
|
17
|
+
|
|
18
|
+
- **Notifications are for whoever is attached.** They are dropped when nobody
|
|
19
|
+
is, which is the case a log is for.
|
|
20
|
+
- **A runtime's own console answers for its own slice.** A board spans several
|
|
21
|
+
runtimes, possibly on several machines; four separate stdout streams in
|
|
22
|
+
timestamp order are not a trace.
|
|
23
|
+
- **The payload cannot say which invocation it belongs to.** The same data flows
|
|
24
|
+
through the same services for entirely unrelated reasons, so attribution needs
|
|
25
|
+
an identity that the data does not carry.
|
|
26
|
+
|
|
27
|
+
Logging is the answer to all three: **runtimes record, the coordinator keeps**,
|
|
28
|
+
and every entry names the run it belongs to.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## A run
|
|
33
|
+
|
|
34
|
+
A **run** is one invocation of a board — one user action, one timer tick, one
|
|
35
|
+
arriving message — followed across every service and runtime it reaches.
|
|
36
|
+
|
|
37
|
+
The ordered service list says what runs; the run says *which invocation it is
|
|
38
|
+
running as*. It travels as a `ProcessContext`:
|
|
39
|
+
|
|
40
|
+
| Field | What it is |
|
|
41
|
+
|---|---|
|
|
42
|
+
| `runId` | This invocation. Minted where the invocation begins. |
|
|
43
|
+
| `parentRunId` | The run this one was invoked *from*, for a nested pipeline. Absent when the trigger came from outside, which is what makes a trace a tree rather than a list. |
|
|
44
|
+
| `requestId` | A **reply address**, not an identity: built from a message's sender, alive only while a response is awaited, consumed on resolution. |
|
|
45
|
+
| `actor` | What is acting: a verified person with an authority deadline, the board, a public mount, or a local/auth-disabled client. |
|
|
46
|
+
|
|
47
|
+
`runId` is deliberately not folded into `requestId`. They have different
|
|
48
|
+
lifetimes — one run makes any number of awaited calls.
|
|
49
|
+
|
|
50
|
+
### Where a run begins
|
|
51
|
+
|
|
52
|
+
At the **origin**, not at the first runtime that happens to need one. Every
|
|
53
|
+
entry point into a board mints it: the ▶ control, a facade action, a board's
|
|
54
|
+
play, a service calling another runtime by name — in the browser through
|
|
55
|
+
`startedRun()` (`hkp-frontend/src/runtime/processContext.ts`), on the other
|
|
56
|
+
runtimes through `newRun()` and its equivalents. A context that is already set
|
|
57
|
+
is a call being *continued*, and is passed through untouched.
|
|
58
|
+
|
|
59
|
+
Minting late is what produces a trace that starts with the trigger already lost.
|
|
60
|
+
|
|
61
|
+
### How it crosses a runtime boundary
|
|
62
|
+
|
|
63
|
+
A peer that drives a runtime names the run its call belongs to, so a board
|
|
64
|
+
spanning several runtimes reads as one trace rather than one per runtime:
|
|
65
|
+
|
|
66
|
+
- over the WebSocket, as `context` beside `params`,
|
|
67
|
+
- over REST, as `__context` in the body,
|
|
68
|
+
- read back by `contextFromWire()` (node), `context_from_wire()` (python),
|
|
69
|
+
`ProcessContext::fromJson` (C++).
|
|
70
|
+
|
|
71
|
+
A caller that names no run is not continuing one, so a run is *begun* rather
|
|
72
|
+
than left unidentified. Work attributed to a run of its own is recoverable;
|
|
73
|
+
work attributed to nothing is not.
|
|
74
|
+
|
|
75
|
+
What a runtime does by itself — a timer ticking, a source handing on a buffer —
|
|
76
|
+
begins a run per emission for the same reason. hkp-rt does so only while the
|
|
77
|
+
board keeps a log: an identity per emission is paid on the path audio takes,
|
|
78
|
+
and the log is the only thing that reads it. Without one, its autonomous work
|
|
79
|
+
shares a single standing board run per runtime.
|
|
80
|
+
|
|
81
|
+
### Nesting, and leaving the call
|
|
82
|
+
|
|
83
|
+
A nested pipeline gets a run of its own with `parentRunId` set to the run around
|
|
84
|
+
it (`childRun`), so work done *inside* a sub-pipeline stays distinguishable from
|
|
85
|
+
work done around it.
|
|
86
|
+
|
|
87
|
+
A service that finishes after its `process` returns — an HTTP response arriving,
|
|
88
|
+
a socket pushing — has left its call by the time it has something to pass on. It
|
|
89
|
+
captures the context while still inside `process` (`host.currentContext()`) and
|
|
90
|
+
hands it back to `processFrom`, which is what keeps the two halves recognisable
|
|
91
|
+
as one run. A service that forgets to capture starts a new run instead: its
|
|
92
|
+
trace splits in two rather than being misattributed to whichever run happened to
|
|
93
|
+
be in flight. **Fragmentation is visible in a trace; misattribution reads as
|
|
94
|
+
fact.**
|
|
95
|
+
|
|
96
|
+
In hkp-node the current run is held in an `AsyncLocalStorage`, not a field: a
|
|
97
|
+
timer tick and an arriving message interleave freely across awaits, and a plain
|
|
98
|
+
field would let the second overwrite the first's context mid-await.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## The entry
|
|
103
|
+
|
|
104
|
+
One thing worth recording about a run. The same shape on every runtime, because
|
|
105
|
+
a board's log is assembled from all of them:
|
|
106
|
+
|
|
107
|
+
| Field | What it holds |
|
|
108
|
+
|---|---|
|
|
109
|
+
| `runId`, `parentRunId` | which run, and which run invoked it |
|
|
110
|
+
| `ts` | ISO 8601 UTC to milliseconds, `Z`-suffixed, stamped by the runtime that produced it — the store orders and filters by comparing it as text, so a runtime with its own dialect would sort against the others rather than among them |
|
|
111
|
+
| `runtimeId`, `serviceUuid` | where it happened |
|
|
112
|
+
| `level` | `debug` \| `info` \| `warn` \| `error` |
|
|
113
|
+
| `event` | what happened, as a short stable name a reader can group by |
|
|
114
|
+
| `data` | optional payload — see below |
|
|
115
|
+
| `durationMs` | how long the call took, on `service.processed` |
|
|
116
|
+
|
|
117
|
+
**A service says only what happened.** It calls `host.log(level, event, data)`;
|
|
118
|
+
the run and the service are filled in from the call in progress. It cannot
|
|
119
|
+
mislabel an entry, because it never writes those fields.
|
|
120
|
+
|
|
121
|
+
The exception is `host.forwardLog(entry)`, which passes an entry a nested
|
|
122
|
+
pipeline produced outward unchanged — re-deriving its run and service from the
|
|
123
|
+
outer call would relabel work done *inside* a sub-pipeline as the work of the
|
|
124
|
+
service hosting it, which is the nesting the entry exists to record. A nested
|
|
125
|
+
runtime is built from a service's own configuration, which says nothing about
|
|
126
|
+
logging, so it asks the runtime around it (`host.logSettings()`) and records the
|
|
127
|
+
same.
|
|
128
|
+
|
|
129
|
+
### What `debug` buys
|
|
130
|
+
|
|
131
|
+
The runtime itself records the flow: `service.process` before a call,
|
|
132
|
+
`service.processed` with `durationMs` after it, `pipeline.stopped` where a
|
|
133
|
+
service returned null. All at `debug`.
|
|
134
|
+
|
|
135
|
+
That is the difference between a log that answers *what did this board report*
|
|
136
|
+
and one that answers *where did it stop*. A read defaults to `info` for the same
|
|
137
|
+
reason: a caller who did not ask for `debug` is asking what happened, not what
|
|
138
|
+
ran.
|
|
139
|
+
|
|
140
|
+
### `data` is a separate decision
|
|
141
|
+
|
|
142
|
+
`logging` says whether anything is recorded. `logData` says whether an entry may
|
|
143
|
+
carry the payload it is about. They are not the same question — what a board
|
|
144
|
+
records about its own flow and what it is willing to write down of the data
|
|
145
|
+
passing through it are different decisions — and the switch in the UI touches
|
|
146
|
+
only the first. A verbosity control that quietly did both would be an exposure
|
|
147
|
+
control.
|
|
148
|
+
|
|
149
|
+
Reading applies the same rule: `data` is withheld unless explicitly asked for,
|
|
150
|
+
because filtering it after it had crossed the wire would defeat the point of
|
|
151
|
+
withholding it.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Where entries go
|
|
156
|
+
|
|
157
|
+
A runtime does not know what a board is; it hands entries to whoever registered
|
|
158
|
+
for them.
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
service.log ─▶ runtime ─▶ log targets ─┬─▶ output socket ──▶ coordinator ─▶ log store
|
|
162
|
+
└─▶ (browser: bridge) ┘
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
- **A remote runtime** (node, python, hkp-rt) sends `{ type: "log", entry }` on
|
|
166
|
+
the same result socket a notification takes — the connection the board's
|
|
167
|
+
coordinator already holds, authenticated with a credential minted to outlive
|
|
168
|
+
the user's session. The coordinator **writes it before broadcasting it**: a
|
|
169
|
+
browser may or may not be attached, and the log exists for the case where none
|
|
170
|
+
is.
|
|
171
|
+
- **A browser runtime** has no socket of its own to the coordinator, so its
|
|
172
|
+
entries travel over the bridge as `log` messages
|
|
173
|
+
(`views/cloud/useCoordinatorBridge.ts`). Those are stored and *not* fanned out
|
|
174
|
+
again: the browser that sent them already has them, and a second browser
|
|
175
|
+
watching the same board is not hosting the runtime that produced them.
|
|
176
|
+
- **Off means off.** No entry is built when `logging` is false, when the level
|
|
177
|
+
is below the runtime's floor, or when nothing is registered to receive one —
|
|
178
|
+
so nothing is spent deciding what an entry would have said.
|
|
179
|
+
|
|
180
|
+
### The store
|
|
181
|
+
|
|
182
|
+
One JSONL file per board, under `HKP_COORDINATOR_LOG_DIR` (default: beside the
|
|
183
|
+
boards), in the same per-user directories as the board store with `0o700` on the
|
|
184
|
+
directory and `0o600` on the file — entries carry board data, so they inherit
|
|
185
|
+
that posture.
|
|
186
|
+
|
|
187
|
+
One file per board, holding entries from every runtime it spans, is the whole
|
|
188
|
+
reason the log is kept by the coordinator: a runtime could only ever answer for
|
|
189
|
+
its own slice.
|
|
190
|
+
|
|
191
|
+
JSONL rather than a JSON array, for three reasons at once: it appends without
|
|
192
|
+
rewriting, a crash mid-write costs the last line rather than the file, and it
|
|
193
|
+
reads back a line at a time, so serving a query never loads a long-running
|
|
194
|
+
board's whole history into memory. A torn line is skipped and the rest is still
|
|
195
|
+
readable.
|
|
196
|
+
|
|
197
|
+
Bounded by **size**, not age: what fills a disk is bytes, and a board ticking
|
|
198
|
+
once a second and one that runs twice a day would need wildly different day
|
|
199
|
+
counts to mean the same thing. Past 32 MB the live file rolls aside (`.1`, `.2`,
|
|
200
|
+
…) and the oldest of four is dropped. A read spans the live file and the rolled
|
|
201
|
+
ones behind it — right after a roll the live file is empty and everything being
|
|
202
|
+
asked for is in `.1` — and reads each one **backwards from its end**, because
|
|
203
|
+
the newest entries are what a log is asked for.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Reading it, and switching it on
|
|
208
|
+
|
|
209
|
+
| | |
|
|
210
|
+
|---|---|
|
|
211
|
+
| Read | `GET /coordinator/users/:username/boards/:boardName/runs?runId=&level=&since=&limit=&withData=` |
|
|
212
|
+
| Switch | `POST /coordinator/users/:username/boards/:boardName/logging` `{ enabled, level }` |
|
|
213
|
+
|
|
214
|
+
Both sit behind the same `auth` + `requireSelf` as every other board route — a
|
|
215
|
+
valid token whose `sub` matches the username — and deliberately **not** behind a
|
|
216
|
+
runtime session token: that is a machine credential minted to outlive a user's
|
|
217
|
+
session, and reading a board's history is not something it should be able to do.
|
|
218
|
+
|
|
219
|
+
The switch is its own route rather than part of re-registering the board,
|
|
220
|
+
because it is a setting a board revisits *while it runs*; registering again
|
|
221
|
+
would rebuild every runtime to change one boolean. It is applied to the runtimes
|
|
222
|
+
already running (`PATCH /runtimes/:id/state`) **and** written into the stored
|
|
223
|
+
config, so it neither restarts anything nor quietly reverts on the next start.
|
|
224
|
+
Runtimes that did not take it are reported, not assumed — partly applied is
|
|
225
|
+
worth saying out loud.
|
|
226
|
+
|
|
227
|
+
The setting lives in the board where it can be read back: `state.logging` and
|
|
228
|
+
`state.logLevel` on each runtime. The Cloud Boards view reads it from there
|
|
229
|
+
rather than keeping it locally, so the toggle shows what the coordinator will
|
|
230
|
+
actually do — after a reload, and for a board somebody else switched on.
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## What each runtime actually does
|
|
235
|
+
|
|
236
|
+
| Runtime | Records | Sends entries | Takes the live switch |
|
|
237
|
+
|---|---|---|---|
|
|
238
|
+
| hkp-node | entries + the `debug` flow | result socket | yes (`PATCH /runtimes/:id/state`) |
|
|
239
|
+
| hkp-python | entries + the `debug` flow | result socket | yes (`PATCH /runtimes/:id/state`) |
|
|
240
|
+
| hkp-rt (C++) | entries + the `debug` flow | result socket | no — set at provision time |
|
|
241
|
+
| Browser | entries only | the coordinator bridge | at provision time |
|
|
242
|
+
|
|
243
|
+
For hkp-rt the level and the on/off come from the runtime's `state` in the board
|
|
244
|
+
config, which is why the live switch reports it as *unreachable* and why the
|
|
245
|
+
setting still takes effect the next time that board is started.
|
|
246
|
+
|
|
247
|
+
Note that the switch is a server-to-server call: neither hkp-node nor hkp-python
|
|
248
|
+
lists `PATCH` among its CORS methods, so a browser attached straight to a runtime
|
|
249
|
+
cannot make it — the coordinator is the caller this route exists for.
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Known gaps
|
|
254
|
+
|
|
255
|
+
- **There is no log viewer for history.** What arrives while the owner has a
|
|
256
|
+
deployed board open is shown — each service's panel lists its recent runs
|
|
257
|
+
(*Runs*: when, who, what it did, how long; `runtime/ui/ServiceRuns.tsx`), fed
|
|
258
|
+
by the entries the coordinator sends the owner as it writes them, each with
|
|
259
|
+
its caller named the way the board's list names them. Nothing yet reads
|
|
260
|
+
`/runs` for what happened before the view opened; that is read over HTTP
|
|
261
|
+
directly.
|
|
262
|
+
- **A playground board records nothing.** Log targets are registered by the
|
|
263
|
+
bridge, so a board that no coordinator holds has nowhere to put an entry.
|
|
264
|
+
Logging is presently a property of a deployed board.
|
|
265
|
+
- **The live switch does not reach hkp-rt**, which takes its logging settings
|
|
266
|
+
when the runtime is provisioned (above).
|
|
267
|
+
- **No sampling and no rate limit.** `debug` on a busy board rolls its files
|
|
268
|
+
quickly; the bound is on bytes kept, not on entries produced.
|
|
269
|
+
- **Nothing correlates a run with an outside request id** — a webhook's own
|
|
270
|
+
identifier is data, not context.
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Where it lives in the code
|
|
275
|
+
|
|
276
|
+
| Concern | Where |
|
|
277
|
+
|---|---|
|
|
278
|
+
| Entry + context types | `hkp-frontend/src/types.ts`, `hkp-node/src/types.ts`, `hkp-python/src/hkp/types.py`, `hkp-rt/lib/include/log_entry.h`, `hkp-rt/lib/src/process_context.h` |
|
|
279
|
+
| Minting a run | `hkp-frontend/src/runtime/processContext.ts`, `hkp-node/src/runtime.ts` (`newRun`, `childRun`, `contextFromWire`) |
|
|
280
|
+
| Recording | `hkp-node/src/runtime.ts` (`log`, `logProcessed`), `hkp-python/src/hkp/runtime.py`, `hkp-rt/lib/src/runtime.cpp` |
|
|
281
|
+
| Nested forwarding | `hkp-node/src/services/sub-service.ts`, `services/nested-pipeline.ts` |
|
|
282
|
+
| Egress | `hkp-node/src/server.ts` (`sendJsonLog`), `hkp-python/src/hkp/server.py` (`_send_log`), `hkp-rt/lib/src/runtime.cpp` |
|
|
283
|
+
| Browser leg | `hkp-frontend/src/runtime/browser/BrowserRuntimeScope.ts`, `views/cloud/useCoordinatorBridge.ts` |
|
|
284
|
+
| Store | `hkp-node/src/coordinator/logStore.ts` |
|
|
285
|
+
| Routes | `hkp-node/src/coordinator/router.ts` (`…/runs`, `…/logging`), `coordinator/session.ts` (`setLogging`) |
|
|
286
|
+
| UI | `hkp-frontend/src/views/cloud/index.tsx`, `coordinatorClient.ts` |
|
|
287
|
+
| Tests | `hkp-node/tests/board-log.test.ts`, `hkp-rt/tests/runtime_log.test.cpp`, `hkp-python/tests/test_board_log.py`, `test_board_log_socket.py` |
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
See also: **Cloud boards** (`concepts/cloud-boards.md`) for the boards this is
|
|
292
|
+
for, and **Coordinator** (`concepts/coordinator.md`) for why the instance that
|
|
293
|
+
owns a board is the one that keeps its log.
|