@happyvertical/smrt-svelte 0.30.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/AGENTS.md +317 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +185 -0
- package/dist/Provider.svelte +204 -0
- package/dist/Provider.svelte.d.ts +73 -0
- package/dist/Provider.svelte.d.ts.map +1 -0
- package/dist/__tests__/app-state.test.js +156 -0
- package/dist/__tests__/warm-clients.test.js +186 -0
- package/dist/browser-ai/adapters/llm/factory.d.ts +38 -0
- package/dist/browser-ai/adapters/llm/factory.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/factory.js +91 -0
- package/dist/browser-ai/adapters/llm/index.d.ts +7 -0
- package/dist/browser-ai/adapters/llm/index.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/index.js +6 -0
- package/dist/browser-ai/adapters/llm/types.d.ts +182 -0
- package/dist/browser-ai/adapters/llm/types.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/types.js +43 -0
- package/dist/browser-ai/adapters/llm/webllm.d.ts +33 -0
- package/dist/browser-ai/adapters/llm/webllm.d.ts.map +1 -0
- package/dist/browser-ai/adapters/llm/webllm.js +225 -0
- package/dist/browser-ai/adapters/stt/browser-speech.d.ts +31 -0
- package/dist/browser-ai/adapters/stt/browser-speech.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/browser-speech.js +217 -0
- package/dist/browser-ai/adapters/stt/factory.d.ts +49 -0
- package/dist/browser-ai/adapters/stt/factory.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/factory.js +110 -0
- package/dist/browser-ai/adapters/stt/index.d.ts +9 -0
- package/dist/browser-ai/adapters/stt/index.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/index.js +8 -0
- package/dist/browser-ai/adapters/stt/types.d.ts +154 -0
- package/dist/browser-ai/adapters/stt/types.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/types.js +4 -0
- package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts +46 -0
- package/dist/browser-ai/adapters/stt/whisper-cpp.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/whisper-cpp.js +348 -0
- package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts +51 -0
- package/dist/browser-ai/adapters/stt/whisper-wasm.d.ts.map +1 -0
- package/dist/browser-ai/adapters/stt/whisper-wasm.js +380 -0
- package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts +42 -0
- package/dist/browser-ai/adapters/tts/browser-synthesis.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/browser-synthesis.js +235 -0
- package/dist/browser-ai/adapters/tts/factory.d.ts +53 -0
- package/dist/browser-ai/adapters/tts/factory.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/factory.js +92 -0
- package/dist/browser-ai/adapters/tts/index.d.ts +7 -0
- package/dist/browser-ai/adapters/tts/index.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/index.js +6 -0
- package/dist/browser-ai/adapters/tts/types.d.ts +140 -0
- package/dist/browser-ai/adapters/tts/types.d.ts.map +1 -0
- package/dist/browser-ai/adapters/tts/types.js +4 -0
- package/dist/browser-ai/capabilities/detector.d.ts +38 -0
- package/dist/browser-ai/capabilities/detector.d.ts.map +1 -0
- package/dist/browser-ai/capabilities/detector.js +211 -0
- package/dist/browser-ai/core/errors.d.ts +62 -0
- package/dist/browser-ai/core/errors.d.ts.map +1 -0
- package/dist/browser-ai/core/errors.js +92 -0
- package/dist/browser-ai/core/index.d.ts +6 -0
- package/dist/browser-ai/core/index.d.ts.map +1 -0
- package/dist/browser-ai/core/index.js +5 -0
- package/dist/browser-ai/core/types.d.ts +115 -0
- package/dist/browser-ai/core/types.d.ts.map +1 -0
- package/dist/browser-ai/core/types.js +34 -0
- package/dist/browser-ai/index.d.ts +12 -0
- package/dist/browser-ai/index.d.ts.map +1 -0
- package/dist/browser-ai/index.js +16 -0
- package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte +77 -0
- package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts +16 -0
- package/dist/browser-ai/svelte/components/AILoadingOverlay.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/CapabilityGate.svelte +57 -0
- package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts +15 -0
- package/dist/browser-ai/svelte/components/CapabilityGate.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte +141 -0
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts +15 -0
- package/dist/browser-ai/svelte/components/DownloadProgress.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/STTTest.svelte +379 -0
- package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts +9 -0
- package/dist/browser-ai/svelte/components/STTTest.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/components/VoiceInput.svelte +200 -0
- package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts +16 -0
- package/dist/browser-ai/svelte/components/VoiceInput.svelte.d.ts.map +1 -0
- package/dist/browser-ai/svelte/index.d.ts +15 -0
- package/dist/browser-ai/svelte/index.d.ts.map +1 -0
- package/dist/browser-ai/svelte/index.js +28 -0
- package/dist/browser-ai/ui.d.ts +16 -0
- package/dist/browser-ai/ui.d.ts.map +1 -0
- package/dist/browser-ai/ui.js +67 -0
- package/dist/components/admin/AgentAdminPanel.svelte +111 -0
- package/dist/components/admin/AgentAdminPanel.svelte.d.ts +25 -0
- package/dist/components/admin/AgentAdminPanel.svelte.d.ts.map +1 -0
- package/dist/components/admin/AgentAdminTabs.svelte +280 -0
- package/dist/components/admin/AgentAdminTabs.svelte.d.ts +23 -0
- package/dist/components/admin/AgentAdminTabs.svelte.d.ts.map +1 -0
- package/dist/components/admin/AgentSettingsShell.svelte +257 -0
- package/dist/components/admin/AgentSettingsShell.svelte.d.ts +33 -0
- package/dist/components/admin/AgentSettingsShell.svelte.d.ts.map +1 -0
- package/dist/components/admin/index.d.ts +5 -0
- package/dist/components/admin/index.d.ts.map +1 -0
- package/dist/components/admin/index.js +6 -0
- package/dist/components/forms/AddressInput.svelte +500 -0
- package/dist/components/forms/AddressInput.svelte.d.ts +36 -0
- package/dist/components/forms/AddressInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/CheckboxInput.svelte +208 -0
- package/dist/components/forms/CheckboxInput.svelte.d.ts +20 -0
- package/dist/components/forms/CheckboxInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/DateRangeInput.svelte +628 -0
- package/dist/components/forms/DateRangeInput.svelte.d.ts +33 -0
- package/dist/components/forms/DateRangeInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/DateTimeInput.svelte +521 -0
- package/dist/components/forms/DateTimeInput.svelte.d.ts +24 -0
- package/dist/components/forms/DateTimeInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/FileUpload.svelte +358 -0
- package/dist/components/forms/FileUpload.svelte.d.ts +22 -0
- package/dist/components/forms/FileUpload.svelte.d.ts.map +1 -0
- package/dist/components/forms/Form.svelte +771 -0
- package/dist/components/forms/Form.svelte.d.ts +26 -0
- package/dist/components/forms/Form.svelte.d.ts.map +1 -0
- package/dist/components/forms/FormGroup.svelte +86 -0
- package/dist/components/forms/FormGroup.svelte.d.ts +13 -0
- package/dist/components/forms/FormGroup.svelte.d.ts.map +1 -0
- package/dist/components/forms/FormMicButton.svelte +179 -0
- package/dist/components/forms/FormMicButton.svelte.d.ts +10 -0
- package/dist/components/forms/FormMicButton.svelte.d.ts.map +1 -0
- package/dist/components/forms/Input.svelte +83 -0
- package/dist/components/forms/Input.svelte.d.ts +9 -0
- package/dist/components/forms/Input.svelte.d.ts.map +1 -0
- package/dist/components/forms/MeasurementInput.svelte +505 -0
- package/dist/components/forms/MeasurementInput.svelte.d.ts +35 -0
- package/dist/components/forms/MeasurementInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/MoneyInput.svelte +412 -0
- package/dist/components/forms/MoneyInput.svelte.d.ts +30 -0
- package/dist/components/forms/MoneyInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/NumberInput.svelte +310 -0
- package/dist/components/forms/NumberInput.svelte.d.ts +28 -0
- package/dist/components/forms/NumberInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/PhoneInput.svelte +530 -0
- package/dist/components/forms/PhoneInput.svelte.d.ts +22 -0
- package/dist/components/forms/PhoneInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/SearchInput.svelte +358 -0
- package/dist/components/forms/SearchInput.svelte.d.ts +33 -0
- package/dist/components/forms/SearchInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/Select.svelte +83 -0
- package/dist/components/forms/Select.svelte.d.ts +11 -0
- package/dist/components/forms/Select.svelte.d.ts.map +1 -0
- package/dist/components/forms/SelectInput.svelte +254 -0
- package/dist/components/forms/SelectInput.svelte.d.ts +25 -0
- package/dist/components/forms/SelectInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/TextInput.svelte +415 -0
- package/dist/components/forms/TextInput.svelte.d.ts +26 -0
- package/dist/components/forms/TextInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/Textarea.svelte +85 -0
- package/dist/components/forms/Textarea.svelte.d.ts +10 -0
- package/dist/components/forms/Textarea.svelte.d.ts.map +1 -0
- package/dist/components/forms/TextareaInput.svelte +386 -0
- package/dist/components/forms/TextareaInput.svelte.d.ts +26 -0
- package/dist/components/forms/TextareaInput.svelte.d.ts.map +1 -0
- package/dist/components/forms/Toggle.svelte +217 -0
- package/dist/components/forms/Toggle.svelte.d.ts +37 -0
- package/dist/components/forms/Toggle.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/AddressInput.behavior.test.js +122 -0
- package/dist/components/forms/__tests__/CheckboxInput.test.js +92 -0
- package/dist/components/forms/__tests__/DateRangeInput.behavior.test.js +135 -0
- package/dist/components/forms/__tests__/DateTimeInput.behavior.test.js +103 -0
- package/dist/components/forms/__tests__/FileUpload.test.js +90 -0
- package/dist/components/forms/__tests__/Form.behavior.test.js +137 -0
- package/dist/components/forms/__tests__/Form.test.js +58 -0
- package/dist/components/forms/__tests__/FormGroup.test.js +48 -0
- package/dist/components/forms/__tests__/FormMicButton.test.js +86 -0
- package/dist/components/forms/__tests__/Input.test.js +49 -0
- package/dist/components/forms/__tests__/MeasurementInput.behavior.test.js +129 -0
- package/dist/components/forms/__tests__/MoneyInput.behavior.test.js +124 -0
- package/dist/components/forms/__tests__/NumberInput.behavior.test.js +141 -0
- package/dist/components/forms/__tests__/PhoneInput.behavior.test.js +96 -0
- package/dist/components/forms/__tests__/SearchInput.test.js +79 -0
- package/dist/components/forms/__tests__/Select.test.js +37 -0
- package/dist/components/forms/__tests__/SelectInput.behavior.test.js +132 -0
- package/dist/components/forms/__tests__/TextInput.behavior.test.js +131 -0
- package/dist/components/forms/__tests__/Textarea.test.js +39 -0
- package/dist/components/forms/__tests__/TextareaInput.behavior.test.js +96 -0
- package/dist/components/forms/__tests__/Toggle.test.js +87 -0
- package/dist/components/forms/__tests__/composite-inputs-a11y.test.js +69 -0
- package/dist/components/forms/__tests__/form-group-input.fixture.svelte +16 -0
- package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts +9 -0
- package/dist/components/forms/__tests__/form-group-input.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/form-with-fields.fixture.svelte +33 -0
- package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts +12 -0
- package/dist/components/forms/__tests__/form-with-fields.fixture.svelte.d.ts.map +1 -0
- package/dist/components/forms/__tests__/rich-inputs-a11y.test.js +87 -0
- package/dist/components/forms/index.d.ts +25 -0
- package/dist/components/forms/index.d.ts.map +1 -0
- package/dist/components/forms/index.js +25 -0
- package/dist/components/forms/types.d.ts +33 -0
- package/dist/components/forms/types.d.ts.map +1 -0
- package/dist/components/forms/types.js +4 -0
- package/dist/components/module/ModulePanel.svelte +134 -0
- package/dist/components/module/ModulePanel.svelte.d.ts +22 -0
- package/dist/components/module/ModulePanel.svelte.d.ts.map +1 -0
- package/dist/components/module/index.d.ts +5 -0
- package/dist/components/module/index.d.ts.map +1 -0
- package/dist/components/module/index.js +4 -0
- package/dist/components/workspace/Breadcrumbs.svelte +141 -0
- package/dist/components/workspace/Breadcrumbs.svelte.d.ts +21 -0
- package/dist/components/workspace/Breadcrumbs.svelte.d.ts.map +1 -0
- package/dist/components/workspace/NavTree.svelte +354 -0
- package/dist/components/workspace/NavTree.svelte.d.ts +45 -0
- package/dist/components/workspace/NavTree.svelte.d.ts.map +1 -0
- package/dist/components/workspace/README.md +34 -0
- package/dist/components/workspace/RoleShell.svelte +309 -0
- package/dist/components/workspace/RoleShell.svelte.d.ts +91 -0
- package/dist/components/workspace/RoleShell.svelte.d.ts.map +1 -0
- package/dist/components/workspace/WorkspaceShell.svelte +951 -0
- package/dist/components/workspace/WorkspaceShell.svelte.d.ts +112 -0
- package/dist/components/workspace/WorkspaceShell.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/RoleShell.test.js +772 -0
- package/dist/components/workspace/__tests__/WorkspaceShell.test.js +630 -0
- package/dist/components/workspace/__tests__/breadcrumbs-helpers.test.js +141 -0
- package/dist/components/workspace/__tests__/context-forwarding-harness.svelte +45 -0
- package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts +21 -0
- package/dist/components/workspace/__tests__/context-forwarding-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/define-tools-dock.test.js +1010 -0
- package/dist/components/workspace/__tests__/harness.svelte +25 -0
- package/dist/components/workspace/__tests__/harness.svelte.d.ts +14 -0
- package/dist/components/workspace/__tests__/harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/index.test.js +37 -0
- package/dist/components/workspace/__tests__/manifest-nav-helpers.test.js +24 -0
- package/dist/components/workspace/__tests__/manifest-nav.test.js +599 -0
- package/dist/components/workspace/__tests__/nav-helpers.test.js +95 -0
- package/dist/components/workspace/__tests__/render-harness.svelte +66 -0
- package/dist/components/workspace/__tests__/render-harness.svelte.d.ts +32 -0
- package/dist/components/workspace/__tests__/render-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/render-tools-dock.test.js +243 -0
- package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte +58 -0
- package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts +16 -0
- package/dist/components/workspace/__tests__/role-shell-bind-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte +41 -0
- package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts +13 -0
- package/dist/components/workspace/__tests__/role-shell-switch-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/test-icon.svelte +17 -0
- package/dist/components/workspace/__tests__/test-icon.svelte.d.ts +19 -0
- package/dist/components/workspace/__tests__/test-icon.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte +38 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts +22 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/TypedTool.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts +65 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/register-typed-tool.js +115 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts +15 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture/typed-tool-types.js +7 -0
- package/dist/components/workspace/__tests__/typed-tool-fixture.test.js +115 -0
- package/dist/components/workspace/__tests__/use-harness-orphan.svelte +9 -0
- package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts +19 -0
- package/dist/components/workspace/__tests__/use-harness-orphan.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/use-harness.svelte +23 -0
- package/dist/components/workspace/__tests__/use-harness.svelte.d.ts +8 -0
- package/dist/components/workspace/__tests__/use-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/__tests__/use-tools-dock.test.js +33 -0
- package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte +43 -0
- package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts +11 -0
- package/dist/components/workspace/__tests__/workspace-shell-bind-harness.svelte.d.ts.map +1 -0
- package/dist/components/workspace/breadcrumbs-helpers.d.ts +44 -0
- package/dist/components/workspace/breadcrumbs-helpers.d.ts.map +1 -0
- package/dist/components/workspace/breadcrumbs-helpers.js +88 -0
- package/dist/components/workspace/index.d.ts +16 -0
- package/dist/components/workspace/index.d.ts.map +1 -0
- package/dist/components/workspace/index.js +14 -0
- package/dist/components/workspace/manifest-nav.d.ts +200 -0
- package/dist/components/workspace/manifest-nav.d.ts.map +1 -0
- package/dist/components/workspace/manifest-nav.js +408 -0
- package/dist/components/workspace/nav-helpers.d.ts +36 -0
- package/dist/components/workspace/nav-helpers.d.ts.map +1 -0
- package/dist/components/workspace/nav-helpers.js +60 -0
- package/dist/components/workspace/server/__tests__/compose-availability.test.js +383 -0
- package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts +78 -0
- package/dist/components/workspace/server/__tests__/typed-context-fixture.d.ts.map +1 -0
- package/dist/components/workspace/server/__tests__/typed-context-fixture.js +104 -0
- package/dist/components/workspace/server/compose-availability.d.ts +73 -0
- package/dist/components/workspace/server/compose-availability.d.ts.map +1 -0
- package/dist/components/workspace/server/compose-availability.js +114 -0
- package/dist/components/workspace/server/index.d.ts +13 -0
- package/dist/components/workspace/server/index.d.ts.map +1 -0
- package/dist/components/workspace/server/index.js +11 -0
- package/dist/components/workspace/server/types.d.ts +108 -0
- package/dist/components/workspace/server/types.d.ts.map +1 -0
- package/dist/components/workspace/server/types.js +11 -0
- package/dist/components/workspace/tools-dock/ToolsDock.svelte +565 -0
- package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts +14 -0
- package/dist/components/workspace/tools-dock/ToolsDock.svelte.d.ts.map +1 -0
- package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts +143 -0
- package/dist/components/workspace/tools-dock/define-tools-dock.svelte.d.ts.map +1 -0
- package/dist/components/workspace/tools-dock/define-tools-dock.svelte.js +487 -0
- package/dist/components/workspace/tools-dock/use-tools-dock.d.ts +41 -0
- package/dist/components/workspace/tools-dock/use-tools-dock.d.ts.map +1 -0
- package/dist/components/workspace/tools-dock/use-tools-dock.js +50 -0
- package/dist/components/workspace/types.d.ts +372 -0
- package/dist/components/workspace/types.d.ts.map +1 -0
- package/dist/components/workspace/types.js +6 -0
- package/dist/hooks/index.d.ts +11 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +10 -0
- package/dist/hooks/useAppState.svelte.d.ts +46 -0
- package/dist/hooks/useAppState.svelte.d.ts.map +1 -0
- package/dist/hooks/useAppState.svelte.js +59 -0
- package/dist/hooks/useAuth.svelte.d.ts +41 -0
- package/dist/hooks/useAuth.svelte.d.ts.map +1 -0
- package/dist/hooks/useAuth.svelte.js +43 -0
- package/dist/hooks/useLLM.svelte.d.ts +69 -0
- package/dist/hooks/useLLM.svelte.d.ts.map +1 -0
- package/dist/hooks/useLLM.svelte.js +85 -0
- package/dist/hooks/useSTT.svelte.d.ts +68 -0
- package/dist/hooks/useSTT.svelte.d.ts.map +1 -0
- package/dist/hooks/useSTT.svelte.js +97 -0
- package/dist/hooks/useSocket.svelte.d.ts +45 -0
- package/dist/hooks/useSocket.svelte.d.ts.map +1 -0
- package/dist/hooks/useSocket.svelte.js +54 -0
- package/dist/hooks/useTTS.svelte.d.ts +65 -0
- package/dist/hooks/useTTS.svelte.d.ts.map +1 -0
- package/dist/hooks/useTTS.svelte.js +93 -0
- package/dist/hooks/useTheme.d.ts +13 -0
- package/dist/hooks/useTheme.d.ts.map +1 -0
- package/dist/hooks/useTheme.js +16 -0
- package/dist/i18n/__tests__/server.spec.js +50 -0
- package/dist/i18n/server.d.ts +47 -0
- package/dist/i18n/server.d.ts.map +1 -0
- package/dist/i18n/server.js +58 -0
- package/dist/i18n/strings.forms.d.ts +33 -0
- package/dist/i18n/strings.forms.d.ts.map +1 -0
- package/dist/i18n/strings.forms.js +54 -0
- package/dist/i18n/strings.workspace.d.ts +34 -0
- package/dist/i18n/strings.workspace.d.ts.map +1 -0
- package/dist/i18n/strings.workspace.js +40 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/state/__tests__/warm-clients.test.js +40 -0
- package/dist/state/app-state.d.ts +308 -0
- package/dist/state/app-state.d.ts.map +1 -0
- package/dist/state/app-state.js +64 -0
- package/dist/state/app-state.svelte.d.ts +196 -0
- package/dist/state/app-state.svelte.d.ts.map +1 -0
- package/dist/state/app-state.svelte.js +774 -0
- package/dist/state/context.d.ts +23 -0
- package/dist/state/context.d.ts.map +1 -0
- package/dist/state/context.js +32 -0
- package/dist/state/form-context.d.ts +59 -0
- package/dist/state/form-context.d.ts.map +1 -0
- package/dist/state/form-context.js +31 -0
- package/dist/state/form-group-context.d.ts +13 -0
- package/dist/state/form-group-context.d.ts.map +1 -0
- package/dist/state/form-group-context.js +28 -0
- package/dist/state/index.d.ts +9 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +8 -0
- package/dist/state/warm-clients.d.ts +136 -0
- package/dist/state/warm-clients.d.ts.map +1 -0
- package/dist/state/warm-clients.js +231 -0
- package/package.json +137 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side dock availability gate composer.
|
|
3
|
+
*
|
|
4
|
+
* Consumer's `fetchAvailability` endpoint calls `composeDockAvailability`
|
|
5
|
+
* with the registered tools, a caller-supplied context, and a map of
|
|
6
|
+
* gate evaluators (typically wrapping `PermissionResolver` from
|
|
7
|
+
* smrt-users and `FeatureResolver` from smrt-features). It returns the
|
|
8
|
+
* filtered `AvailableTool[]` the dock's client-side `fetchAvailability`
|
|
9
|
+
* resolves to.
|
|
10
|
+
*
|
|
11
|
+
* Server-side by design: no Svelte / DOM imports, no client-only state.
|
|
12
|
+
* See happyvertical/smrt#1226 (Phase 4c) and #1235 for the registry
|
|
13
|
+
* audit that motivated this server-first pattern.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Compose the `availableTools` list for a tools dock by evaluating each
|
|
17
|
+
* tool's `gates` against the provided evaluators. Tools where ALL gates
|
|
18
|
+
* resolve to `true` are included (AND semantics).
|
|
19
|
+
*
|
|
20
|
+
* Tools without `gates` (or with an empty `gates` array) are
|
|
21
|
+
* unconditionally included — gating is opt-in, existing tool definitions
|
|
22
|
+
* keep working.
|
|
23
|
+
*
|
|
24
|
+
* Throws if a gate's prefix doesn't match any registered evaluator —
|
|
25
|
+
* misconfiguration should fail loudly, not silently leak tools to users
|
|
26
|
+
* who shouldn't see them.
|
|
27
|
+
*
|
|
28
|
+
* Gate evaluation is parallel within a tool and across tools (`Promise.all`
|
|
29
|
+
* fan-out), so a slow evaluator on one gate doesn't block unrelated tools.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import {
|
|
34
|
+
* composeDockAvailability,
|
|
35
|
+
* type GateEvaluationContext,
|
|
36
|
+
* } from '@happyvertical/smrt-svelte/workspace/server';
|
|
37
|
+
* import { PermissionResolver } from '@happyvertical/smrt-users';
|
|
38
|
+
* import { FeatureResolver } from '@happyvertical/smrt-features';
|
|
39
|
+
*
|
|
40
|
+
* // Caller narrows the context shape so evaluators get typed access
|
|
41
|
+
* // without casts:
|
|
42
|
+
* interface MyContext extends GateEvaluationContext {
|
|
43
|
+
* userId: string;
|
|
44
|
+
* tenantId: string;
|
|
45
|
+
* }
|
|
46
|
+
*
|
|
47
|
+
* const available = await composeDockAvailability<MyContext>({
|
|
48
|
+
* tools: [
|
|
49
|
+
* { id: 'governance', label: 'Claim Audit', gates: ['permission:content.governance.view'] },
|
|
50
|
+
* { id: 'video-gen', label: 'Video', gates: ['feature:video-tools'] },
|
|
51
|
+
* { id: 'chat', label: 'Chat' }, // no gates → always visible
|
|
52
|
+
* ],
|
|
53
|
+
* context: { userId: 'user-1', tenantId: 'tenant-1' },
|
|
54
|
+
* evaluators: {
|
|
55
|
+
* permission: async (gateId, ctx) => {
|
|
56
|
+
* const [, slug] = gateId.split(':', 2);
|
|
57
|
+
* return permissionResolver.hasPermission(ctx.userId, ctx.tenantId, slug);
|
|
58
|
+
* },
|
|
59
|
+
* feature: async (gateId, ctx) => {
|
|
60
|
+
* const [, key] = gateId.split(':', 2);
|
|
61
|
+
* return featureResolver.isEnabled(key, { tenantId: ctx.tenantId });
|
|
62
|
+
* },
|
|
63
|
+
* },
|
|
64
|
+
* });
|
|
65
|
+
* // → AvailableTool[] filtered by gates
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export async function composeDockAvailability(options) {
|
|
69
|
+
const { tools, context, evaluators } = options;
|
|
70
|
+
const evaluations = await Promise.all(tools.map(async (tool) => {
|
|
71
|
+
if (!tool.gates || tool.gates.length === 0) {
|
|
72
|
+
return tool; // no gates → visible
|
|
73
|
+
}
|
|
74
|
+
const gateResults = await Promise.all(tool.gates.map(async (gateId) => {
|
|
75
|
+
const prefix = gateId.split(':', 1)[0];
|
|
76
|
+
// Use Object.hasOwn() + a function-type guard so a gate like
|
|
77
|
+
// `constructor:foo` or `toString:foo` doesn't resolve to an
|
|
78
|
+
// inherited `Object.prototype` property and silently pass — the
|
|
79
|
+
// contract is fail-loud on unknown prefix. The function-type
|
|
80
|
+
// check is belt-and-suspenders: a consumer that accidentally
|
|
81
|
+
// wires a non-function evaluator should also throw here.
|
|
82
|
+
const evaluator = Object.hasOwn(evaluators, prefix)
|
|
83
|
+
? evaluators[prefix]
|
|
84
|
+
: undefined;
|
|
85
|
+
if (typeof evaluator !== 'function') {
|
|
86
|
+
const availablePrefixes = Object.keys(evaluators).join(', ') || '(none)';
|
|
87
|
+
throw new Error(`[composeDockAvailability] No evaluator registered for gate prefix "${prefix}" ` +
|
|
88
|
+
`(tool "${tool.id}", gate "${gateId}"). Available prefixes: ${availablePrefixes}.`);
|
|
89
|
+
}
|
|
90
|
+
return evaluator(gateId, context);
|
|
91
|
+
}));
|
|
92
|
+
// Strict equality: only literal `true` passes a gate. Any non-boolean
|
|
93
|
+
// return value (string, object, undefined, etc.) fails-closed —
|
|
94
|
+
// defensive against untyped evaluators that return wrapped objects or
|
|
95
|
+
// sentinel strings instead of plain booleans. `Boolean(...)` would
|
|
96
|
+
// pass `'false'`, `{}`, `[]`, and any truthy garbage, fail-OPEN.
|
|
97
|
+
return gateResults.every((result) => result === true) ? tool : null;
|
|
98
|
+
}));
|
|
99
|
+
return evaluations
|
|
100
|
+
.filter((t) => t !== null)
|
|
101
|
+
.map((tool) => {
|
|
102
|
+
// Preserve absence: omitting `label` / `badge` here lets
|
|
103
|
+
// `defineToolsDock.applyAvailability` fall back to the registered
|
|
104
|
+
// `ToolDef` metadata. Materializing `label: ''` would blank the rail
|
|
105
|
+
// button, and `badge: null` would explicitly clear any registered
|
|
106
|
+
// default badge.
|
|
107
|
+
const out = { id: tool.id };
|
|
108
|
+
if (tool.label !== undefined)
|
|
109
|
+
out.label = tool.label;
|
|
110
|
+
if (tool.badge !== undefined)
|
|
111
|
+
out.badge = tool.badge;
|
|
112
|
+
return out;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @happyvertical/smrt-svelte/workspace/server
|
|
3
|
+
*
|
|
4
|
+
* Server-only utilities for the workspace shell — currently the dock
|
|
5
|
+
* availability gate composer (Phase 4c per happyvertical/smrt#1226).
|
|
6
|
+
*
|
|
7
|
+
* Node-safe: no Svelte component imports, no browser-only APIs. Import
|
|
8
|
+
* this subpath from `+server.ts` endpoints, REST handlers, or anywhere
|
|
9
|
+
* else outside the client bundle.
|
|
10
|
+
*/
|
|
11
|
+
export { composeDockAvailability } from './compose-availability.js';
|
|
12
|
+
export type { AvailableTool, ComposeDockAvailabilityOptions, GatedToolSummary, GateEvaluationContext, GateEvaluator, } from './types.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/server/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EACV,aAAa,EACb,8BAA8B,EAC9B,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,GACd,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @happyvertical/smrt-svelte/workspace/server
|
|
3
|
+
*
|
|
4
|
+
* Server-only utilities for the workspace shell — currently the dock
|
|
5
|
+
* availability gate composer (Phase 4c per happyvertical/smrt#1226).
|
|
6
|
+
*
|
|
7
|
+
* Node-safe: no Svelte component imports, no browser-only APIs. Import
|
|
8
|
+
* this subpath from `+server.ts` endpoints, REST handlers, or anywhere
|
|
9
|
+
* else outside the client bundle.
|
|
10
|
+
*/
|
|
11
|
+
export { composeDockAvailability } from './compose-availability.js';
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the server-side dock availability gate composer.
|
|
3
|
+
*
|
|
4
|
+
* See `compose-availability.ts` for the runtime utility and
|
|
5
|
+
* happyvertical/smrt#1226 (Phase 4c) / #1235 for design context.
|
|
6
|
+
*
|
|
7
|
+
* This module is intentionally Node-safe — no Svelte component imports,
|
|
8
|
+
* no `window`/`document`, no browser-only APIs — so consumers can call it
|
|
9
|
+
* from server endpoints (`+server.ts`, REST handlers, etc.).
|
|
10
|
+
*/
|
|
11
|
+
import type { AvailableTool } from '../types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Context passed to each gate evaluator. Consumer-defined keys (userId,
|
|
14
|
+
* tenantId, contentId, etc.) carry the data evaluators need to resolve
|
|
15
|
+
* a gate to a boolean. The composer doesn't introspect this — it's a
|
|
16
|
+
* pass-through.
|
|
17
|
+
*/
|
|
18
|
+
export type GateEvaluationContext = Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Resolves a gate ID to a boolean (visible / not visible). May be async
|
|
21
|
+
* (DB query, network call, permission resolver). Sync evaluators that
|
|
22
|
+
* return a plain boolean are also fine.
|
|
23
|
+
*
|
|
24
|
+
* Generic over the caller's context shape so evaluators get typed access
|
|
25
|
+
* to context fields without casting. Defaults to the permissive
|
|
26
|
+
* `GateEvaluationContext` so existing call sites keep compiling.
|
|
27
|
+
*
|
|
28
|
+
* The constraint is a self-mapped `{ [K in keyof TCtx]: unknown }` rather
|
|
29
|
+
* than `Record<string, unknown>`. This accepts interface-style consumer
|
|
30
|
+
* contexts without an explicit string index signature — the same trap
|
|
31
|
+
* Copilot flagged on `TActions` in #1239. A bare `Record<string, unknown>`
|
|
32
|
+
* constraint rejects interfaces (which have no index signature) under
|
|
33
|
+
* strict TS, forcing consumers to use type aliases or add
|
|
34
|
+
* `[key: string]: unknown`.
|
|
35
|
+
*
|
|
36
|
+
* @param gateId Full gate id, including the prefix (e.g. `'permission:articles.publish'`).
|
|
37
|
+
* Evaluators typically split on `:` to extract the identifier.
|
|
38
|
+
* @param context The caller-supplied context blob (see {@link GateEvaluationContext}).
|
|
39
|
+
*/
|
|
40
|
+
export type GateEvaluator<TCtx extends {
|
|
41
|
+
[K in keyof TCtx]: unknown;
|
|
42
|
+
} = GateEvaluationContext> = (gateId: string, context: TCtx) => Promise<boolean> | boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Tool definition shape required by `composeDockAvailability`. A subset of
|
|
45
|
+
* the full {@link ToolDef} that drops Svelte-specific fields (`component`,
|
|
46
|
+
* `iconComponent`) so the composer stays server-side-safe. Consumers
|
|
47
|
+
* typically derive this from their registered `ToolDef[]` by picking the
|
|
48
|
+
* fields they want to surface in `availableTools`.
|
|
49
|
+
*/
|
|
50
|
+
export interface GatedToolSummary {
|
|
51
|
+
id: string;
|
|
52
|
+
label?: string;
|
|
53
|
+
badge?: number | string | null;
|
|
54
|
+
gates?: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Options for {@link composeDockAvailability}.
|
|
58
|
+
*
|
|
59
|
+
* Generic over the caller's context shape (`TCtx`) so evaluators get
|
|
60
|
+
* typed access to context fields without casting. Defaults to the
|
|
61
|
+
* permissive `GateEvaluationContext` so existing call sites keep
|
|
62
|
+
* compiling.
|
|
63
|
+
*
|
|
64
|
+
* The constraint is a self-mapped `{ [K in keyof TCtx]: unknown }` so
|
|
65
|
+
* interface-style contexts (no string index signature) are accepted —
|
|
66
|
+
* see the doc on {@link GateEvaluator} for the rationale.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* interface MyContext {
|
|
71
|
+
* userId: string;
|
|
72
|
+
* tenantId: string;
|
|
73
|
+
* }
|
|
74
|
+
*
|
|
75
|
+
* await composeDockAvailability<MyContext>({
|
|
76
|
+
* tools: [...],
|
|
77
|
+
* context: { userId: 'u-1', tenantId: 't-1' },
|
|
78
|
+
* evaluators: {
|
|
79
|
+
* permission: async (gateId, ctx) => {
|
|
80
|
+
* // ctx.userId and ctx.tenantId are typed `string` — no cast needed
|
|
81
|
+
* const [, slug] = gateId.split(':', 2);
|
|
82
|
+
* return resolver.hasPermission(ctx.userId, ctx.tenantId, slug);
|
|
83
|
+
* },
|
|
84
|
+
* },
|
|
85
|
+
* });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export interface ComposeDockAvailabilityOptions<TCtx extends {
|
|
89
|
+
[K in keyof TCtx]: unknown;
|
|
90
|
+
} = GateEvaluationContext> {
|
|
91
|
+
/** Registered tools (or a subset thereof — typically derived from `ToolDef[]`). */
|
|
92
|
+
tools: ReadonlyArray<GatedToolSummary>;
|
|
93
|
+
/**
|
|
94
|
+
* Caller-supplied context (userId, tenantId, contentId, etc.). Passed
|
|
95
|
+
* through unchanged to each evaluator. The composer doesn't inspect it.
|
|
96
|
+
*/
|
|
97
|
+
context: TCtx;
|
|
98
|
+
/**
|
|
99
|
+
* Map of gate-prefix → evaluator. The prefix is the part of the gate ID
|
|
100
|
+
* before the first `:`. e.g., `'permission'`, `'feature'`, `'myapp'`.
|
|
101
|
+
*
|
|
102
|
+
* Tools whose gates reference an unregistered prefix throw at composition
|
|
103
|
+
* time — misconfiguration should fail loudly, not silently leak tools.
|
|
104
|
+
*/
|
|
105
|
+
evaluators: Record<string, GateEvaluator<TCtx>>;
|
|
106
|
+
}
|
|
107
|
+
export type { AvailableTool };
|
|
108
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/workspace/server/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAW,MAAM,aAAa,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,aAAa,CACvB,IAAI,SAAS;KAAG,CAAC,IAAI,MAAM,IAAI,GAAG,OAAO;CAAE,GAAG,qBAAqB,IACjE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,8BAA8B,CAC7C,IAAI,SAAS;KAAG,CAAC,IAAI,MAAM,IAAI,GAAG,OAAO;CAAE,GAAG,qBAAqB;IAEnE,mFAAmF;IACnF,KAAK,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACvC;;;OAGG;IACH,OAAO,EAAE,IAAI,CAAC;IACd;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;CACjD;AAKD,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for the server-side dock availability gate composer.
|
|
3
|
+
*
|
|
4
|
+
* See `compose-availability.ts` for the runtime utility and
|
|
5
|
+
* happyvertical/smrt#1226 (Phase 4c) / #1235 for design context.
|
|
6
|
+
*
|
|
7
|
+
* This module is intentionally Node-safe — no Svelte component imports,
|
|
8
|
+
* no `window`/`document`, no browser-only APIs — so consumers can call it
|
|
9
|
+
* from server endpoints (`+server.ts`, REST handlers, etc.).
|
|
10
|
+
*/
|
|
11
|
+
export {};
|