@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,190 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <atomic>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#include <mutex>
|
|
6
|
+
|
|
7
|
+
#include <types/types.h>
|
|
8
|
+
#include <log_entry.h>
|
|
9
|
+
#include <mounts.h>
|
|
10
|
+
|
|
11
|
+
namespace hkp {
|
|
12
|
+
|
|
13
|
+
class Runtime;
|
|
14
|
+
class SubRuntime;
|
|
15
|
+
class RuntimeHost;
|
|
16
|
+
struct ProcessContext;
|
|
17
|
+
|
|
18
|
+
class Service
|
|
19
|
+
{
|
|
20
|
+
public:
|
|
21
|
+
Service(const std::string& instanceName = "");
|
|
22
|
+
Service(const std::string& instanceId, const std::string& instanceName);
|
|
23
|
+
virtual json configure(Data data);
|
|
24
|
+
virtual json getState() const;
|
|
25
|
+
|
|
26
|
+
Data startProcess(const Data& data = Undefined());
|
|
27
|
+
|
|
28
|
+
// Attach this service to a host (Runtime or SubRuntime).
|
|
29
|
+
// setParentRuntime is a convenience overload kept for backward compatibility.
|
|
30
|
+
void setParentHost(RuntimeHost& host);
|
|
31
|
+
void setParentRuntime(Runtime& runtime);
|
|
32
|
+
|
|
33
|
+
// The host this service is attached to, or null before it has one.
|
|
34
|
+
//
|
|
35
|
+
// A service that has a credential to send needs the runtime's secrets, and a
|
|
36
|
+
// service in a nested pipeline needs the ones the pipeline delegates to.
|
|
37
|
+
// Both come from here.
|
|
38
|
+
RuntimeHost* parentHost() const { return m_host; }
|
|
39
|
+
|
|
40
|
+
Data next(Data data = Undefined(), bool immediately = true);
|
|
41
|
+
void nextAsync(Data data = Undefined(), std::function<void(Data)> callback = nullptr);
|
|
42
|
+
Data nextInRun(Data data, const ProcessContext& context,
|
|
43
|
+
std::function<void(Data)> callback = nullptr);
|
|
44
|
+
bool isConnected() const;
|
|
45
|
+
|
|
46
|
+
// ── Sub-runtime support ──────────────────────────────────────────────────
|
|
47
|
+
// Create a nested pipeline from a JSON array of service configs.
|
|
48
|
+
// Services are instantiated via the parent runtime's registry and parented
|
|
49
|
+
// to the new SubRuntime so that next() / nextAsync() work inside it.
|
|
50
|
+
// See sub_runtime.h for the config schema and usage.
|
|
51
|
+
//
|
|
52
|
+
// // configure():
|
|
53
|
+
// m_pipeline = createSubRuntime((*j)["pipeline"]);
|
|
54
|
+
//
|
|
55
|
+
// // process():
|
|
56
|
+
// return m_pipeline->process(data);
|
|
57
|
+
//
|
|
58
|
+
std::shared_ptr<SubRuntime> createSubRuntime(const json& servicesConfig);
|
|
59
|
+
|
|
60
|
+
// ── Multi-emit support ───────────────────────────────────────────────────
|
|
61
|
+
// Push a partial result through the rest of the outer pipeline without
|
|
62
|
+
// ending the current process() call. Thread-safe — posts via the App's
|
|
63
|
+
// io_context, so it can also be called from a background thread.
|
|
64
|
+
// Equivalent to nextAsync() but communicates intent: this service produces
|
|
65
|
+
// more than one output for a single input. emit() also closes the process
|
|
66
|
+
// lifecycle bracket for this service (sends "call-process-finished" with the
|
|
67
|
+
// result), so a service that deferCompletion()'d has its processing indicator
|
|
68
|
+
// reflect the true end of the async work rather than the instant return.
|
|
69
|
+
void emit(Data partialResult);
|
|
70
|
+
|
|
71
|
+
// Runtime-facing: returns true (and resets) if the most recent process() call
|
|
72
|
+
// deferred its completion via deferCompletion(). The runtime uses this to
|
|
73
|
+
// withhold the synchronous "call-process-finished" for that call — emit()
|
|
74
|
+
// sends it later, when the deferred work actually finishes.
|
|
75
|
+
bool takeProcessDeferred();
|
|
76
|
+
|
|
77
|
+
inline const std::string &getId() const { return m_instanceId; }
|
|
78
|
+
inline const std::string &getName() const { return m_instanceName; }
|
|
79
|
+
virtual std::string getServiceId() const = 0;
|
|
80
|
+
|
|
81
|
+
// Called by the host (Runtime) before it tears itself down, while the host and
|
|
82
|
+
// its service list are still fully alive. A service that runs work on a
|
|
83
|
+
// background thread joins it here, so its final emit() drives the pipeline
|
|
84
|
+
// through a live host rather than half-destroyed state. Default: nothing.
|
|
85
|
+
virtual void shutdown() {}
|
|
86
|
+
|
|
87
|
+
// Inputs are a static property of a service, and are not supposed to change through lifetime.
|
|
88
|
+
// Usually services don't provide additional inputs, examples that do are websocket_server_service.h,
|
|
89
|
+
// or in general any "-T-shaped" service.
|
|
90
|
+
virtual std::vector<ExternalServiceInput> getExternalInputs() const;
|
|
91
|
+
|
|
92
|
+
virtual Data process(Data data = Undefined()) = 0;
|
|
93
|
+
|
|
94
|
+
// The service one segment of a scoped address names inside this one.
|
|
95
|
+
//
|
|
96
|
+
// Only a service holding a pipeline answers: it is what lets an address
|
|
97
|
+
// reach past the runtime's flat list into what a scope contains. A service
|
|
98
|
+
// with several pipelines searches them in declaration order. See address.h.
|
|
99
|
+
virtual std::shared_ptr<Service> findNested(const std::string& instanceId) const;
|
|
100
|
+
|
|
101
|
+
// Runs from a service inside this one to the end of the pipeline holding it,
|
|
102
|
+
// the way processAt does at the top level. Answers Undefined where this
|
|
103
|
+
// service holds no pipeline that can be entered.
|
|
104
|
+
//
|
|
105
|
+
// Only a service whose pipeline is a chain answers. An endpoint's entries
|
|
106
|
+
// and a Tracks branch are driven by the thing that owns them — a request
|
|
107
|
+
// arriving, a fan-out — so entering one from outside would run half of an
|
|
108
|
+
// arrangement whose other half never happened. Those stay readable and
|
|
109
|
+
// configurable by address without being enterable by one.
|
|
110
|
+
virtual bool processNested(const std::string& address, Data data, Data& result);
|
|
111
|
+
|
|
112
|
+
protected:
|
|
113
|
+
virtual bool supportsSubservices() const;
|
|
114
|
+
virtual bool onBypassChanged(bool bypass);
|
|
115
|
+
json& mergeBypassState(json &state) const;
|
|
116
|
+
void sendNotification(const Data& params) const;
|
|
117
|
+
|
|
118
|
+
// Record something about the run in progress. The run and this service are
|
|
119
|
+
// taken from the call the host is inside, so a service says only what
|
|
120
|
+
// happened. Dropped when nothing is collecting, or outside a call.
|
|
121
|
+
void log(LogLevel level, const std::string& event,
|
|
122
|
+
const nlohmann::json& data = nullptr) const;
|
|
123
|
+
void setBypass(bool bypass);
|
|
124
|
+
bool isBypass() const;
|
|
125
|
+
|
|
126
|
+
// Call from process() (as the return value) when the real output will be
|
|
127
|
+
// produced later via emit() on a worker thread. Returns Null() to stop the
|
|
128
|
+
// synchronous push and marks the call deferred so the runtime withholds the
|
|
129
|
+
// "call-process-finished" lifecycle event until emit() actually delivers.
|
|
130
|
+
Data deferCompletion();
|
|
131
|
+
|
|
132
|
+
// Call from the worker when a deferred call is over with nothing to pass on
|
|
133
|
+
// — it produced nothing, or it failed. emit() is how such a call ends when
|
|
134
|
+
// there is a result; this is how it ends otherwise, so that the processing
|
|
135
|
+
// bracket closes and the run the call was made in is given up. Does nothing
|
|
136
|
+
// when emit() already ended it.
|
|
137
|
+
void endDeferred();
|
|
138
|
+
|
|
139
|
+
// A path on the runtime server's own port for this service, held for as
|
|
140
|
+
// long as the handle is; empty when the server serves none. See
|
|
141
|
+
// RuntimeHost::mountEndpoint.
|
|
142
|
+
MountHandle mountEndpoint(const std::string& name, MountAdopter adopter);
|
|
143
|
+
|
|
144
|
+
json mergeStateWith(const json& update) const
|
|
145
|
+
{
|
|
146
|
+
auto state = Service::getState();
|
|
147
|
+
state.update(update);
|
|
148
|
+
return state;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
private:
|
|
152
|
+
RuntimeHost* m_host = nullptr;
|
|
153
|
+
// Set by deferCompletion(), consumed by the runtime's processFrom right after
|
|
154
|
+
// process() returns — both on the pipeline thread, so a plain bool is enough
|
|
155
|
+
// (emit(), which runs on the worker, never touches it).
|
|
156
|
+
bool m_processDeferred = false;
|
|
157
|
+
// One-shot authority captured by deferCompletion(). Further emissions are
|
|
158
|
+
// autonomous board work, not delegation of the person who began this call.
|
|
159
|
+
//
|
|
160
|
+
// Written on the pipeline thread and read and consumed on the worker, so it
|
|
161
|
+
// is only touched under its mutex. `open` is what the paths
|
|
162
|
+
// that report many times a second look at first: a service that never
|
|
163
|
+
// defers never takes the lock.
|
|
164
|
+
//
|
|
165
|
+
// A copy of a service is in no call, whatever the one it was made from is
|
|
166
|
+
// in the middle of — so copying carries none of this over.
|
|
167
|
+
struct DeferredCall
|
|
168
|
+
{
|
|
169
|
+
std::shared_ptr<const ProcessContext> context;
|
|
170
|
+
mutable std::mutex mutex;
|
|
171
|
+
std::atomic<bool> open{false};
|
|
172
|
+
|
|
173
|
+
DeferredCall() = default;
|
|
174
|
+
DeferredCall(const DeferredCall&) {}
|
|
175
|
+
DeferredCall& operator=(const DeferredCall&) { return *this; }
|
|
176
|
+
};
|
|
177
|
+
DeferredCall m_deferred;
|
|
178
|
+
|
|
179
|
+
// The run a deferred call is still open in, if one is.
|
|
180
|
+
std::shared_ptr<const ProcessContext> deferredContext() const;
|
|
181
|
+
// Ends the deferred call, answering whether one was open and in which run.
|
|
182
|
+
bool takeDeferred(std::shared_ptr<const ProcessContext>& context);
|
|
183
|
+
|
|
184
|
+
protected:
|
|
185
|
+
std::string m_instanceName;
|
|
186
|
+
std::string m_instanceId;
|
|
187
|
+
std::optional<bool> m_bypass;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <map>
|
|
4
|
+
#include <string>
|
|
5
|
+
|
|
6
|
+
#include <types/data.h>
|
|
7
|
+
|
|
8
|
+
namespace hkp {
|
|
9
|
+
|
|
10
|
+
// Named cells two pipelines can share a value through.
|
|
11
|
+
//
|
|
12
|
+
// A pipeline pass carries one value and ends; anything that has to survive
|
|
13
|
+
// until a *different* pipeline runs has nowhere to live. A store gives it a
|
|
14
|
+
// name, and whoever owns the pipelines that must share decides which store they
|
|
15
|
+
// see — which is what keeps the sharing scoped to the arrangement that needs it
|
|
16
|
+
// rather than being ambient across a runtime.
|
|
17
|
+
//
|
|
18
|
+
// Deliberately not a cache: nothing expires, nothing is computed on a miss. It
|
|
19
|
+
// is a cell, and the services that read and write it say what it means.
|
|
20
|
+
//
|
|
21
|
+
// Matches hkp-node's SlotStore and hkp-python's, so a board written against one
|
|
22
|
+
// runtime behaves the same on another.
|
|
23
|
+
class SlotStore
|
|
24
|
+
{
|
|
25
|
+
public:
|
|
26
|
+
// What is held under `name`, or Undefined where nothing has been written —
|
|
27
|
+
// which is what a default-constructed Data already is. The service reading
|
|
28
|
+
// decides what an empty cell means for it; here it is only "not set".
|
|
29
|
+
Data get(const std::string& name) const
|
|
30
|
+
{
|
|
31
|
+
const auto it = m_cells.find(name);
|
|
32
|
+
return it == m_cells.end() ? Data{} : it->second;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
void set(const std::string& name, Data value) { m_cells[name] = std::move(value); }
|
|
36
|
+
|
|
37
|
+
private:
|
|
38
|
+
std::map<std::string, Data> m_cells;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
} // namespace hkp
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <algorithm>
|
|
4
|
+
#include <cctype>
|
|
5
|
+
#include <cstdlib>
|
|
6
|
+
#include <exception>
|
|
7
|
+
#include <functional>
|
|
8
|
+
#include <string>
|
|
9
|
+
#include <vector>
|
|
10
|
+
|
|
11
|
+
#include "auth.h"
|
|
12
|
+
#include "egress.h"
|
|
13
|
+
#include "files.h"
|
|
14
|
+
|
|
15
|
+
namespace hkp
|
|
16
|
+
{
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* What a standalone hkp-rt is started with, read from its arguments and its
|
|
20
|
+
* environment.
|
|
21
|
+
*
|
|
22
|
+
* On a person's own machine none of it needs saying: it binds loopback, which
|
|
23
|
+
* keeps other machines out, and answers no page but the Readymade apps' and
|
|
24
|
+
* this machine's own (origins.h). Anywhere else — a container, a
|
|
25
|
+
* server — the bind is opened with `HOST`, and that is only allowed together
|
|
26
|
+
* with who may use it: a non-loopback bind without `AUTH0_DOMAIN`,
|
|
27
|
+
* `AUTH0_AUDIENCE` and `ALLOWED_EMAILS` is refused rather than served open.
|
|
28
|
+
*
|
|
29
|
+
* The names are hkp-node's, so one environment file describes either server.
|
|
30
|
+
*/
|
|
31
|
+
struct StandaloneConfig
|
|
32
|
+
{
|
|
33
|
+
unsigned int port = 5556;
|
|
34
|
+
/** The interface listened on. `HOST`. */
|
|
35
|
+
std::string bind = "127.0.0.1";
|
|
36
|
+
/** The address this server tells others it is reached at. `EXTERNAL_HOST`. */
|
|
37
|
+
std::string externalHost = "127.0.0.1";
|
|
38
|
+
/** Where it is reached from outside, when that is not `http://<externalHost>:<port>`
|
|
39
|
+
* — behind a proxy that terminates TLS, say. `HKP_EXTERNAL_URL`. */
|
|
40
|
+
std::string externalUrl;
|
|
41
|
+
/** Origins allowed to call it from a browser; empty means the Readymade
|
|
42
|
+
* apps and pages served from this machine (see origins.h). `ALLOWED_ORIGINS`. */
|
|
43
|
+
std::string allowedOrigins;
|
|
44
|
+
AuthConfig auth;
|
|
45
|
+
/** Where coordinator tickets are kept; empty keeps them in memory.
|
|
46
|
+
* `HKP_COORDINATOR_LINKS_FILE`. */
|
|
47
|
+
std::string linksFile;
|
|
48
|
+
/** Keys the addresses of this server's mounts. `HKP_MOUNT_SECRET`. */
|
|
49
|
+
std::string mountSecret;
|
|
50
|
+
/** Where that secret is kept when the environment gives none. */
|
|
51
|
+
std::string mountSecretFile;
|
|
52
|
+
/** A runtime config to load at start; the third argument. */
|
|
53
|
+
std::string runtimeConfigFile;
|
|
54
|
+
/** Where a board may make this server connect to; open unless it is hosted.
|
|
55
|
+
* `HKP_EGRESS`, `HKP_EGRESS_ALLOW` (see egress.h). */
|
|
56
|
+
egress::Policy egress;
|
|
57
|
+
/** The folders boards may read and write, the default first (files.h):
|
|
58
|
+
* `HKP_FILES_DIR` — `~/.hkp/cpp/files` when unset, none when empty — then
|
|
59
|
+
* `HKP_FILES_ALLOW`. */
|
|
60
|
+
std::vector<std::filesystem::path> fileFolders;
|
|
61
|
+
/** Set when the configuration must not be served; says what is missing. */
|
|
62
|
+
std::string error;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
using EnvironmentReader = std::function<const char*(const char*)>;
|
|
66
|
+
|
|
67
|
+
inline std::vector<std::string> splitList(const std::string& value)
|
|
68
|
+
{
|
|
69
|
+
std::vector<std::string> items;
|
|
70
|
+
std::string current;
|
|
71
|
+
const auto flush = [&]() {
|
|
72
|
+
const auto first = current.find_first_not_of(" \t\r\n");
|
|
73
|
+
if (first != std::string::npos)
|
|
74
|
+
{
|
|
75
|
+
const auto last = current.find_last_not_of(" \t\r\n");
|
|
76
|
+
items.push_back(current.substr(first, last - first + 1));
|
|
77
|
+
}
|
|
78
|
+
current.clear();
|
|
79
|
+
};
|
|
80
|
+
for (const char c : value)
|
|
81
|
+
{
|
|
82
|
+
if (c == ',')
|
|
83
|
+
{
|
|
84
|
+
flush();
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
{
|
|
88
|
+
current.push_back(c);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
flush();
|
|
92
|
+
return items;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Arguments are `<port> <externalHost> <runtime config>`, each optional, as
|
|
97
|
+
* they always were; the environment says the rest and is overridden by an
|
|
98
|
+
* argument where both name the same thing.
|
|
99
|
+
*/
|
|
100
|
+
inline StandaloneConfig readStandaloneConfig(
|
|
101
|
+
const std::vector<std::string>& arguments,
|
|
102
|
+
const EnvironmentReader& env = [](const char* name) { return std::getenv(name); })
|
|
103
|
+
{
|
|
104
|
+
StandaloneConfig config;
|
|
105
|
+
const auto read = [&env](const char* name) {
|
|
106
|
+
const char* value = env(name);
|
|
107
|
+
return value ? std::string(value) : std::string();
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
if (const auto port = read("PORT"); !port.empty())
|
|
111
|
+
{
|
|
112
|
+
try { config.port = static_cast<unsigned int>(std::stoul(port)); }
|
|
113
|
+
catch (const std::exception&) { config.error = "PORT is not a number: " + port; }
|
|
114
|
+
}
|
|
115
|
+
if (const auto host = read("HOST"); !host.empty())
|
|
116
|
+
{
|
|
117
|
+
config.bind = host;
|
|
118
|
+
}
|
|
119
|
+
if (const auto external = read("EXTERNAL_HOST"); !external.empty())
|
|
120
|
+
{
|
|
121
|
+
config.externalHost = external;
|
|
122
|
+
}
|
|
123
|
+
config.externalUrl = read("HKP_EXTERNAL_URL");
|
|
124
|
+
{
|
|
125
|
+
std::string mode = read("HKP_EGRESS");
|
|
126
|
+
const auto first = mode.find_first_not_of(" \t");
|
|
127
|
+
const auto last = mode.find_last_not_of(" \t");
|
|
128
|
+
mode = first == std::string::npos ? "" : mode.substr(first, last - first + 1);
|
|
129
|
+
std::transform(mode.begin(), mode.end(), mode.begin(),
|
|
130
|
+
[](unsigned char c) { return static_cast<char>(std::tolower(c)); });
|
|
131
|
+
std::string problem;
|
|
132
|
+
config.egress = egress::readPolicy(mode, read("HKP_EGRESS_ALLOW"), problem);
|
|
133
|
+
if (!problem.empty())
|
|
134
|
+
{
|
|
135
|
+
config.error = problem;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
while (!config.externalUrl.empty() && config.externalUrl.back() == '/')
|
|
139
|
+
{
|
|
140
|
+
config.externalUrl.pop_back();
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (arguments.size() > 0)
|
|
144
|
+
{
|
|
145
|
+
try { config.port = static_cast<unsigned int>(std::stoul(arguments[0])); }
|
|
146
|
+
catch (const std::exception&) { config.error = "The port is not a number: " + arguments[0]; }
|
|
147
|
+
}
|
|
148
|
+
if (arguments.size() > 1)
|
|
149
|
+
{
|
|
150
|
+
config.externalHost = arguments[1];
|
|
151
|
+
}
|
|
152
|
+
if (arguments.size() > 2)
|
|
153
|
+
{
|
|
154
|
+
config.runtimeConfigFile = arguments[2];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Unset means the default beside this server's other data; set to the empty
|
|
158
|
+
// string means keep them in memory only.
|
|
159
|
+
const char* linksFile = env("HKP_COORDINATOR_LINKS_FILE");
|
|
160
|
+
if (linksFile)
|
|
161
|
+
{
|
|
162
|
+
config.linksFile = linksFile;
|
|
163
|
+
}
|
|
164
|
+
else if (const auto home = read("HOME"); !home.empty())
|
|
165
|
+
{
|
|
166
|
+
config.linksFile = home + "/.hkp/cpp/coordinator-links.json";
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Unset means a folder beside this server's other data; set to the empty
|
|
170
|
+
// string means none, leaving HKP_FILES_ALLOW to name every folder.
|
|
171
|
+
const char* filesDir = env("HKP_FILES_DIR");
|
|
172
|
+
if (filesDir)
|
|
173
|
+
{
|
|
174
|
+
if (*filesDir && !std::filesystem::path(filesDir).is_absolute())
|
|
175
|
+
{
|
|
176
|
+
config.error = std::string("HKP_FILES_DIR: \"") + filesDir + "\" is not an absolute path";
|
|
177
|
+
}
|
|
178
|
+
else if (*filesDir)
|
|
179
|
+
{
|
|
180
|
+
config.fileFolders.emplace_back(filesDir);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else if (const auto home = read("HOME"); !home.empty())
|
|
184
|
+
{
|
|
185
|
+
config.fileFolders.emplace_back(home + "/.hkp/cpp/files");
|
|
186
|
+
}
|
|
187
|
+
{
|
|
188
|
+
std::string problem;
|
|
189
|
+
for (auto& folder : files::readFolderList(read("HKP_FILES_ALLOW"), "HKP_FILES_ALLOW", problem))
|
|
190
|
+
{
|
|
191
|
+
config.fileFolders.push_back(std::move(folder));
|
|
192
|
+
}
|
|
193
|
+
if (!problem.empty())
|
|
194
|
+
{
|
|
195
|
+
config.error = problem;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
config.mountSecret = read("HKP_MOUNT_SECRET");
|
|
200
|
+
if (const auto home = read("HOME"); !home.empty())
|
|
201
|
+
{
|
|
202
|
+
config.mountSecretFile = home + "/.hkp/cpp/mount-secret";
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const auto domain = read("AUTH0_DOMAIN");
|
|
206
|
+
const auto audiences = splitList(read("AUTH0_AUDIENCE"));
|
|
207
|
+
const auto emails = splitList(read("ALLOWED_EMAILS"));
|
|
208
|
+
const bool exposed = !isLoopbackHost(config.bind);
|
|
209
|
+
|
|
210
|
+
if (!domain.empty() && !audiences.empty())
|
|
211
|
+
{
|
|
212
|
+
TrustedIssuer issuer;
|
|
213
|
+
// Auth0 issues `iss` as the tenant's address with a trailing slash.
|
|
214
|
+
issuer.iss = (domain.rfind("https://", 0) == 0 ? domain : "https://" + domain);
|
|
215
|
+
if (issuer.iss.back() != '/')
|
|
216
|
+
{
|
|
217
|
+
issuer.iss.push_back('/');
|
|
218
|
+
}
|
|
219
|
+
issuer.audiences = audiences;
|
|
220
|
+
config.auth.mode = AuthMode::Jwt;
|
|
221
|
+
config.auth.issuers.push_back(std::move(issuer));
|
|
222
|
+
config.auth.allowedEmails = emails;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
if (exposed)
|
|
226
|
+
{
|
|
227
|
+
std::string missing;
|
|
228
|
+
const auto need = [&missing](bool present, const char* name) {
|
|
229
|
+
if (!present)
|
|
230
|
+
{
|
|
231
|
+
missing += missing.empty() ? name : std::string(", ") + name;
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
need(!domain.empty(), "AUTH0_DOMAIN");
|
|
235
|
+
need(!audiences.empty(), "AUTH0_AUDIENCE");
|
|
236
|
+
need(!emails.empty(), "ALLOWED_EMAILS");
|
|
237
|
+
if (!missing.empty() && config.error.empty())
|
|
238
|
+
{
|
|
239
|
+
config.error =
|
|
240
|
+
"Refusing to listen on " + config.bind + " without saying who may use this "
|
|
241
|
+
"server: " + missing + " not set. Set them, or leave HOST unset to listen "
|
|
242
|
+
"on 127.0.0.1 only.";
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (const auto origins = read("ALLOWED_ORIGINS"); !origins.empty())
|
|
246
|
+
{
|
|
247
|
+
config.allowedOrigins = origins;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
return config;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <vector>
|
|
4
|
+
|
|
5
|
+
#include <boost/variant.hpp>
|
|
6
|
+
#include "ringbuffer.h"
|
|
7
|
+
|
|
8
|
+
#include <nlohmann/json.hpp>
|
|
9
|
+
|
|
10
|
+
namespace hkp {
|
|
11
|
+
|
|
12
|
+
using json = nlohmann::json;
|
|
13
|
+
struct Undefined
|
|
14
|
+
{
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
struct Null
|
|
18
|
+
{
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
using BinaryData = std::vector<uint8_t>;
|
|
22
|
+
|
|
23
|
+
class ControlFlowData
|
|
24
|
+
{
|
|
25
|
+
public:
|
|
26
|
+
enum class Type
|
|
27
|
+
{
|
|
28
|
+
kEarlyReturn = 0,
|
|
29
|
+
};
|
|
30
|
+
struct Impl;
|
|
31
|
+
std::shared_ptr<Impl> impl;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
struct MixedData
|
|
35
|
+
{
|
|
36
|
+
json meta;
|
|
37
|
+
BinaryData binary;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
struct CustomData
|
|
41
|
+
{
|
|
42
|
+
CustomData(const char* t, void* d)
|
|
43
|
+
: type(t), data(d) {}
|
|
44
|
+
|
|
45
|
+
const char* type; // type of the custom data describing the data structure
|
|
46
|
+
void* data; // pointer to custom data, can be anything
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
typedef boost::variant<
|
|
50
|
+
Undefined,
|
|
51
|
+
std::shared_ptr<FloatRingBuffer>,
|
|
52
|
+
json,
|
|
53
|
+
BinaryData,
|
|
54
|
+
std::string,
|
|
55
|
+
Null,
|
|
56
|
+
ControlFlowData,
|
|
57
|
+
CustomData,
|
|
58
|
+
MixedData
|
|
59
|
+
> Data;
|
|
60
|
+
|
|
61
|
+
std::string stringify(const Data& data);
|
|
62
|
+
|
|
63
|
+
// put this in a namespace to avoid conflicts with other Data types (since variant holds multiple common types)
|
|
64
|
+
// if you want to log Data instance, make sure to use the namespace hkp before logging
|
|
65
|
+
namespace hkp
|
|
66
|
+
{
|
|
67
|
+
std::ostream& operator<<(std::ostream& os, const Data& data);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// from Data to specific types
|
|
71
|
+
std::optional<json> getJSONFromData(const Data &data);
|
|
72
|
+
std::shared_ptr<FloatRingBuffer> getRingBufferFromData(const Data &data);
|
|
73
|
+
std::optional<const BinaryData> getBinaryFromData(const Data& data);
|
|
74
|
+
std::optional<const std::string> getStringFromData(const Data& data);
|
|
75
|
+
std::optional<CustomData> getCustomDataFromData(const Data& data);
|
|
76
|
+
std::optional<MixedData> getMixedDataFromData(const Data& data);
|
|
77
|
+
|
|
78
|
+
Data getControlFlowData(const Data &data);
|
|
79
|
+
bool isUndefined(const Data& data);
|
|
80
|
+
bool isNull(const Data& data);
|
|
81
|
+
bool isControlFlowData(const Data& data);
|
|
82
|
+
bool isEarlyReturn(const Data& data);
|
|
83
|
+
bool isCustomData(const Data& data);
|
|
84
|
+
// from specific types to Data
|
|
85
|
+
Data flatBufferToData(FloatRingBuffer::BufferType& buffer, bool isBinary);
|
|
86
|
+
|
|
87
|
+
// convert between specific types
|
|
88
|
+
|
|
89
|
+
template <typename T>
|
|
90
|
+
std::optional<T> getProperty(const json& j, const std::string& key);
|
|
91
|
+
|
|
92
|
+
template <typename T>
|
|
93
|
+
std::optional<T> getPropertyUpdate(const json& j, const std::string& key, const T& old)
|
|
94
|
+
{
|
|
95
|
+
auto prop = getProperty<T>(j, key);
|
|
96
|
+
if (prop && *prop != old)
|
|
97
|
+
{
|
|
98
|
+
return std::optional<T>(*prop);
|
|
99
|
+
}
|
|
100
|
+
return std::nullopt;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
ControlFlowData makeEarlyReturn(const Data& data);
|
|
104
|
+
|
|
105
|
+
template <typename T>
|
|
106
|
+
struct TypeId;
|
|
107
|
+
|
|
108
|
+
template <> struct TypeId<Undefined> { static constexpr uint16_t value = 0; };
|
|
109
|
+
template <> struct TypeId<FloatRingBuffer> { static constexpr uint16_t value = 1; };
|
|
110
|
+
template <> struct TypeId<std::shared_ptr<FloatRingBuffer>> { static constexpr uint16_t value = 1; };
|
|
111
|
+
template <> struct TypeId<json> { static constexpr uint16_t value = 2; };
|
|
112
|
+
template <> struct TypeId<BinaryData> { static constexpr uint16_t value = 3; };
|
|
113
|
+
template <> struct TypeId<std::string> { static constexpr uint16_t value = 4; };
|
|
114
|
+
template <> struct TypeId<Null> { static constexpr uint16_t value = 5; };
|
|
115
|
+
template <> struct TypeId<ControlFlowData> { static constexpr uint16_t value = 6; };
|
|
116
|
+
template <> struct TypeId<CustomData> { static constexpr uint16_t value = 7; };
|
|
117
|
+
template <> struct TypeId<MixedData> { static constexpr uint16_t value = 8; };
|
|
118
|
+
|
|
119
|
+
template <typename T>
|
|
120
|
+
constexpr uint16_t getTypeId() {
|
|
121
|
+
if constexpr (std::is_base_of_v<TypeId<T>, TypeId<T>>)
|
|
122
|
+
{
|
|
123
|
+
return TypeId<T>::value;
|
|
124
|
+
}
|
|
125
|
+
else
|
|
126
|
+
{
|
|
127
|
+
return static_cast<uint16_t>(-1); // undefined type
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
inline uint16_t getTypeId(const Data& data)
|
|
132
|
+
{
|
|
133
|
+
if (data.type() == typeid(Undefined)) return TypeId<Undefined>::value;
|
|
134
|
+
if (data.type() == typeid(std::shared_ptr<FloatRingBuffer>)) return TypeId<FloatRingBuffer>::value;
|
|
135
|
+
if (data.type() == typeid(json)) return TypeId<json>::value;
|
|
136
|
+
if (data.type() == typeid(BinaryData)) return TypeId<BinaryData>::value;
|
|
137
|
+
if (data.type() == typeid(std::string)) return TypeId<std::string>::value;
|
|
138
|
+
if (data.type() == typeid(Null)) return TypeId<Null>::value;
|
|
139
|
+
if (data.type() == typeid(ControlFlowData)) return TypeId<ControlFlowData>::value;
|
|
140
|
+
if (data.type() == typeid(CustomData)) return TypeId<CustomData>::value;
|
|
141
|
+
if (data.type() == typeid(MixedData)) return TypeId<MixedData>::value;
|
|
142
|
+
|
|
143
|
+
return static_cast<uint16_t>(-1); // undefined type
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
inline bool isPlatformLittleEndian()
|
|
147
|
+
{
|
|
148
|
+
uint32_t num = 1;
|
|
149
|
+
return *(reinterpret_cast<uint8_t*>(&num)) == 1;
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <boost/asio/buffer.hpp>
|
|
4
|
+
#include <boost/beast.hpp>
|
|
5
|
+
|
|
6
|
+
#include <types/data.h>
|
|
7
|
+
|
|
8
|
+
namespace hkp {
|
|
9
|
+
|
|
10
|
+
// this is in sync with Message.ts MessagePurpose enum
|
|
11
|
+
enum MessagePurpose {
|
|
12
|
+
NOTIFICATION = 0,
|
|
13
|
+
RESULT = 1,
|
|
14
|
+
RESULT_AWAITING_RESPONSE = 2,
|
|
15
|
+
RESULT_WITH_REQUEST_ID = 3
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
struct MessageHeader
|
|
19
|
+
{
|
|
20
|
+
uint16_t messagePurpose;
|
|
21
|
+
uint16_t dataType;
|
|
22
|
+
std::string sender;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
class Message
|
|
26
|
+
{
|
|
27
|
+
public:
|
|
28
|
+
using BufferType = boost::beast::basic_flat_buffer<std::allocator<char>>;
|
|
29
|
+
using WebSocketStream = boost::beast::websocket::stream<boost::beast::tcp_stream>;
|
|
30
|
+
|
|
31
|
+
static Data deserialize(BufferType& buffer, MessageHeader* outHeader = nullptr);
|
|
32
|
+
static void serialize(
|
|
33
|
+
const Data& data,
|
|
34
|
+
MessagePurpose purpose,
|
|
35
|
+
const std::string& sender,
|
|
36
|
+
WebSocketStream& stream
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
// String-based variants for transports that work in std::string frames
|
|
40
|
+
// (e.g. Crow WebSocket connections) rather than a Beast stream / flat_buffer.
|
|
41
|
+
// The wire format is identical: YAS header bytes followed by the payload.
|
|
42
|
+
static std::string serializeToString(
|
|
43
|
+
const Data& data,
|
|
44
|
+
MessagePurpose purpose,
|
|
45
|
+
const std::string& sender
|
|
46
|
+
);
|
|
47
|
+
static Data deserializeFromString(
|
|
48
|
+
const std::string& bytes,
|
|
49
|
+
MessageHeader* outHeader = nullptr
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
private:
|
|
53
|
+
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
}
|