@vendoai/ui 0.4.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/LICENSE +202 -0
- package/README.md +7 -0
- package/dist/chrome/activity-ledger.d.ts +14 -0
- package/dist/chrome/activity-ledger.d.ts.map +1 -0
- package/dist/chrome/activity-ledger.js +40 -0
- package/dist/chrome/activity-ledger.js.map +1 -0
- package/dist/chrome/activity-panel.d.ts +7 -0
- package/dist/chrome/activity-panel.d.ts.map +1 -0
- package/dist/chrome/activity-panel.js +27 -0
- package/dist/chrome/activity-panel.js.map +1 -0
- package/dist/chrome/activity-semantics.d.ts +42 -0
- package/dist/chrome/activity-semantics.d.ts.map +1 -0
- package/dist/chrome/activity-semantics.js +119 -0
- package/dist/chrome/activity-semantics.js.map +1 -0
- package/dist/chrome/approval-card.d.ts +22 -0
- package/dist/chrome/approval-card.d.ts.map +1 -0
- package/dist/chrome/approval-card.js +95 -0
- package/dist/chrome/approval-card.js.map +1 -0
- package/dist/chrome/approval-sheet.d.ts +23 -0
- package/dist/chrome/approval-sheet.d.ts.map +1 -0
- package/dist/chrome/approval-sheet.js +72 -0
- package/dist/chrome/approval-sheet.js.map +1 -0
- package/dist/chrome/automations-panel.d.ts +3 -0
- package/dist/chrome/automations-panel.d.ts.map +1 -0
- package/dist/chrome/automations-panel.js +305 -0
- package/dist/chrome/automations-panel.js.map +1 -0
- package/dist/chrome/build-beat.d.ts +70 -0
- package/dist/chrome/build-beat.d.ts.map +1 -0
- package/dist/chrome/build-beat.js +101 -0
- package/dist/chrome/build-beat.js.map +1 -0
- package/dist/chrome/chrome-css.d.ts +7 -0
- package/dist/chrome/chrome-css.d.ts.map +1 -0
- package/dist/chrome/chrome-css.js +2042 -0
- package/dist/chrome/chrome-css.js.map +1 -0
- package/dist/chrome/chrome-root.d.ts +13 -0
- package/dist/chrome/chrome-root.d.ts.map +1 -0
- package/dist/chrome/chrome-root.js +39 -0
- package/dist/chrome/chrome-root.js.map +1 -0
- package/dist/chrome/clipboard.d.ts +4 -0
- package/dist/chrome/clipboard.d.ts.map +1 -0
- package/dist/chrome/clipboard.js +49 -0
- package/dist/chrome/clipboard.js.map +1 -0
- package/dist/chrome/connect-card.d.ts +19 -0
- package/dist/chrome/connect-card.d.ts.map +1 -0
- package/dist/chrome/connect-card.js +57 -0
- package/dist/chrome/connect-card.js.map +1 -0
- package/dist/chrome/connect-dock.d.ts +25 -0
- package/dist/chrome/connect-dock.d.ts.map +1 -0
- package/dist/chrome/connect-dock.js +192 -0
- package/dist/chrome/connect-dock.js.map +1 -0
- package/dist/chrome/connected-accounts-panel.d.ts +14 -0
- package/dist/chrome/connected-accounts-panel.d.ts.map +1 -0
- package/dist/chrome/connected-accounts-panel.js +157 -0
- package/dist/chrome/connected-accounts-panel.js.map +1 -0
- package/dist/chrome/dev-mode.d.ts +5 -0
- package/dist/chrome/dev-mode.d.ts.map +1 -0
- package/dist/chrome/dev-mode.js +7 -0
- package/dist/chrome/dev-mode.js.map +1 -0
- package/dist/chrome/discoverability.d.ts +33 -0
- package/dist/chrome/discoverability.d.ts.map +1 -0
- package/dist/chrome/discoverability.js +63 -0
- package/dist/chrome/discoverability.js.map +1 -0
- package/dist/chrome/embeds.d.ts +21 -0
- package/dist/chrome/embeds.d.ts.map +1 -0
- package/dist/chrome/embeds.js +181 -0
- package/dist/chrome/embeds.js.map +1 -0
- package/dist/chrome/fluid-thinking.d.ts +15 -0
- package/dist/chrome/fluid-thinking.d.ts.map +1 -0
- package/dist/chrome/fluid-thinking.js +37 -0
- package/dist/chrome/fluid-thinking.js.map +1 -0
- package/dist/chrome/humanize.d.ts +46 -0
- package/dist/chrome/humanize.d.ts.map +1 -0
- package/dist/chrome/humanize.js +104 -0
- package/dist/chrome/humanize.js.map +1 -0
- package/dist/chrome/index.d.ts +39 -0
- package/dist/chrome/index.d.ts.map +1 -0
- package/dist/chrome/index.js +38 -0
- package/dist/chrome/index.js.map +1 -0
- package/dist/chrome/markdown.d.ts +23 -0
- package/dist/chrome/markdown.d.ts.map +1 -0
- package/dist/chrome/markdown.js +149 -0
- package/dist/chrome/markdown.js.map +1 -0
- package/dist/chrome/morph-toast.d.ts +43 -0
- package/dist/chrome/morph-toast.d.ts.map +1 -0
- package/dist/chrome/morph-toast.js +89 -0
- package/dist/chrome/morph-toast.js.map +1 -0
- package/dist/chrome/no-policy-notice.d.ts +8 -0
- package/dist/chrome/no-policy-notice.d.ts.map +1 -0
- package/dist/chrome/no-policy-notice.js +18 -0
- package/dist/chrome/no-policy-notice.js.map +1 -0
- package/dist/chrome/onest-font.gen.d.ts +10 -0
- package/dist/chrome/onest-font.gen.d.ts.map +1 -0
- package/dist/chrome/onest-font.gen.js +10 -0
- package/dist/chrome/onest-font.gen.js.map +1 -0
- package/dist/chrome/overlay-registry.d.ts +66 -0
- package/dist/chrome/overlay-registry.d.ts.map +1 -0
- package/dist/chrome/overlay-registry.js +103 -0
- package/dist/chrome/overlay-registry.js.map +1 -0
- package/dist/chrome/palette-hotkey.d.ts +42 -0
- package/dist/chrome/palette-hotkey.d.ts.map +1 -0
- package/dist/chrome/palette-hotkey.js +91 -0
- package/dist/chrome/palette-hotkey.js.map +1 -0
- package/dist/chrome/policy-notice-body.d.ts +3 -0
- package/dist/chrome/policy-notice-body.d.ts.map +1 -0
- package/dist/chrome/policy-notice-body.js +6 -0
- package/dist/chrome/policy-notice-body.js.map +1 -0
- package/dist/chrome/takeover-portal.d.ts +16 -0
- package/dist/chrome/takeover-portal.d.ts.map +1 -0
- package/dist/chrome/takeover-portal.js +21 -0
- package/dist/chrome/takeover-portal.js.map +1 -0
- package/dist/chrome/thread/attachments.d.ts +24 -0
- package/dist/chrome/thread/attachments.d.ts.map +1 -0
- package/dist/chrome/thread/attachments.js +50 -0
- package/dist/chrome/thread/attachments.js.map +1 -0
- package/dist/chrome/thread/composer.d.ts +63 -0
- package/dist/chrome/thread/composer.d.ts.map +1 -0
- package/dist/chrome/thread/composer.js +259 -0
- package/dist/chrome/thread/composer.js.map +1 -0
- package/dist/chrome/thread/index.d.ts +41 -0
- package/dist/chrome/thread/index.d.ts.map +1 -0
- package/dist/chrome/thread/index.js +258 -0
- package/dist/chrome/thread/index.js.map +1 -0
- package/dist/chrome/thread/message-data.d.ts +35 -0
- package/dist/chrome/thread/message-data.d.ts.map +1 -0
- package/dist/chrome/thread/message-data.js +127 -0
- package/dist/chrome/thread/message-data.js.map +1 -0
- package/dist/chrome/thread/message-list.d.ts +30 -0
- package/dist/chrome/thread/message-list.d.ts.map +1 -0
- package/dist/chrome/thread/message-list.js +11 -0
- package/dist/chrome/thread/message-list.js.map +1 -0
- package/dist/chrome/thread/message.d.ts +18 -0
- package/dist/chrome/thread/message.d.ts.map +1 -0
- package/dist/chrome/thread/message.js +57 -0
- package/dist/chrome/thread/message.js.map +1 -0
- package/dist/chrome/thread/parts.d.ts +53 -0
- package/dist/chrome/thread/parts.d.ts.map +1 -0
- package/dist/chrome/thread/parts.js +184 -0
- package/dist/chrome/thread/parts.js.map +1 -0
- package/dist/chrome/thread/scrolling.d.ts +26 -0
- package/dist/chrome/thread/scrolling.d.ts.map +1 -0
- package/dist/chrome/thread/scrolling.js +214 -0
- package/dist/chrome/thread/scrolling.js.map +1 -0
- package/dist/chrome/truncate.d.ts +12 -0
- package/dist/chrome/truncate.d.ts.map +1 -0
- package/dist/chrome/truncate.js +18 -0
- package/dist/chrome/truncate.js.map +1 -0
- package/dist/chrome/vendo-activities.d.ts +24 -0
- package/dist/chrome/vendo-activities.d.ts.map +1 -0
- package/dist/chrome/vendo-activities.js +38 -0
- package/dist/chrome/vendo-activities.js.map +1 -0
- package/dist/chrome/vendo-overlay.d.ts +63 -0
- package/dist/chrome/vendo-overlay.d.ts.map +1 -0
- package/dist/chrome/vendo-overlay.js +256 -0
- package/dist/chrome/vendo-overlay.js.map +1 -0
- package/dist/chrome/vendo-page.d.ts +3 -0
- package/dist/chrome/vendo-page.d.ts.map +1 -0
- package/dist/chrome/vendo-page.js +162 -0
- package/dist/chrome/vendo-page.js.map +1 -0
- package/dist/chrome/vendo-palette.d.ts +29 -0
- package/dist/chrome/vendo-palette.d.ts.map +1 -0
- package/dist/chrome/vendo-palette.js +95 -0
- package/dist/chrome/vendo-palette.js.map +1 -0
- package/dist/chrome/vendo-slot.d.ts +79 -0
- package/dist/chrome/vendo-slot.d.ts.map +1 -0
- package/dist/chrome/vendo-slot.js +153 -0
- package/dist/chrome/vendo-slot.js.map +1 -0
- package/dist/chrome/vendo-toasts.d.ts +40 -0
- package/dist/chrome/vendo-toasts.d.ts.map +1 -0
- package/dist/chrome/vendo-toasts.js +135 -0
- package/dist/chrome/vendo-toasts.js.map +1 -0
- package/dist/chrome/vendo-trigger.d.ts +24 -0
- package/dist/chrome/vendo-trigger.d.ts.map +1 -0
- package/dist/chrome/vendo-trigger.js +30 -0
- package/dist/chrome/vendo-trigger.js.map +1 -0
- package/dist/chrome/waiting-queue.d.ts +8 -0
- package/dist/chrome/waiting-queue.d.ts.map +1 -0
- package/dist/chrome/waiting-queue.js +21 -0
- package/dist/chrome/waiting-queue.js.map +1 -0
- package/dist/client-impl.d.ts +4 -0
- package/dist/client-impl.d.ts.map +1 -0
- package/dist/client-impl.js +160 -0
- package/dist/client-impl.js.map +1 -0
- package/dist/client.d.ts +136 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +97 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +71 -0
- package/dist/context.js.map +1 -0
- package/dist/eject-templates/activities/index.tsx +113 -0
- package/dist/eject-templates/templates.json +29 -0
- package/dist/eject-templates/thread/attachments.tsx +69 -0
- package/dist/eject-templates/thread/composer.tsx +409 -0
- package/dist/eject-templates/thread/index.tsx +422 -0
- package/dist/eject-templates/thread/message-data.ts +151 -0
- package/dist/eject-templates/thread/message-list.tsx +123 -0
- package/dist/eject-templates/thread/message.tsx +149 -0
- package/dist/eject-templates/thread/parts.tsx +293 -0
- package/dist/eject-templates/thread/scrolling.ts +223 -0
- package/dist/embeds.d.ts +28 -0
- package/dist/embeds.d.ts.map +1 -0
- package/dist/embeds.js +2 -0
- package/dist/embeds.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +19 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/scripted-transport.d.ts +44 -0
- package/dist/hooks/scripted-transport.d.ts.map +1 -0
- package/dist/hooks/scripted-transport.js +58 -0
- package/dist/hooks/scripted-transport.js.map +1 -0
- package/dist/hooks/use-activity.d.ts +17 -0
- package/dist/hooks/use-activity.d.ts.map +1 -0
- package/dist/hooks/use-activity.js +50 -0
- package/dist/hooks/use-activity.js.map +1 -0
- package/dist/hooks/use-app.d.ts +19 -0
- package/dist/hooks/use-app.d.ts.map +1 -0
- package/dist/hooks/use-app.js +66 -0
- package/dist/hooks/use-app.js.map +1 -0
- package/dist/hooks/use-approvals.d.ts +13 -0
- package/dist/hooks/use-approvals.d.ts.map +1 -0
- package/dist/hooks/use-approvals.js +14 -0
- package/dist/hooks/use-approvals.js.map +1 -0
- package/dist/hooks/use-apps.d.ts +17 -0
- package/dist/hooks/use-apps.d.ts.map +1 -0
- package/dist/hooks/use-apps.js +30 -0
- package/dist/hooks/use-apps.js.map +1 -0
- package/dist/hooks/use-automations.d.ts +25 -0
- package/dist/hooks/use-automations.d.ts.map +1 -0
- package/dist/hooks/use-automations.js +30 -0
- package/dist/hooks/use-automations.js.map +1 -0
- package/dist/hooks/use-connections.d.ts +12 -0
- package/dist/hooks/use-connections.d.ts.map +1 -0
- package/dist/hooks/use-connections.js +15 -0
- package/dist/hooks/use-connections.js.map +1 -0
- package/dist/hooks/use-connector-catalog.d.ts +8 -0
- package/dist/hooks/use-connector-catalog.d.ts.map +1 -0
- package/dist/hooks/use-connector-catalog.js +52 -0
- package/dist/hooks/use-connector-catalog.js.map +1 -0
- package/dist/hooks/use-grants.d.ts +13 -0
- package/dist/hooks/use-grants.d.ts.map +1 -0
- package/dist/hooks/use-grants.js +14 -0
- package/dist/hooks/use-grants.js.map +1 -0
- package/dist/hooks/use-mobile-takeover.d.ts +22 -0
- package/dist/hooks/use-mobile-takeover.d.ts.map +1 -0
- package/dist/hooks/use-mobile-takeover.js +66 -0
- package/dist/hooks/use-mobile-takeover.js.map +1 -0
- package/dist/hooks/use-resource.d.ts +21 -0
- package/dist/hooks/use-resource.d.ts.map +1 -0
- package/dist/hooks/use-resource.js +79 -0
- package/dist/hooks/use-resource.js.map +1 -0
- package/dist/hooks/use-slot-app.d.ts +19 -0
- package/dist/hooks/use-slot-app.d.ts.map +1 -0
- package/dist/hooks/use-slot-app.js +18 -0
- package/dist/hooks/use-slot-app.js.map +1 -0
- package/dist/hooks/use-threads.d.ts +16 -0
- package/dist/hooks/use-threads.d.ts.map +1 -0
- package/dist/hooks/use-threads.js +15 -0
- package/dist/hooks/use-threads.js.map +1 -0
- package/dist/hooks/use-vendo-overlay.d.ts +31 -0
- package/dist/hooks/use-vendo-overlay.d.ts.map +1 -0
- package/dist/hooks/use-vendo-overlay.js +23 -0
- package/dist/hooks/use-vendo-overlay.js.map +1 -0
- package/dist/hooks/use-vendo-status.d.ts +6 -0
- package/dist/hooks/use-vendo-status.d.ts.map +1 -0
- package/dist/hooks/use-vendo-status.js +28 -0
- package/dist/hooks/use-vendo-status.js.map +1 -0
- package/dist/hooks/use-vendo-thread.d.ts +39 -0
- package/dist/hooks/use-vendo-thread.d.ts.map +1 -0
- package/dist/hooks/use-vendo-thread.js +185 -0
- package/dist/hooks/use-vendo-thread.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/kit/charts/bar.d.ts +16 -0
- package/dist/kit/charts/bar.d.ts.map +1 -0
- package/dist/kit/charts/bar.js +21 -0
- package/dist/kit/charts/bar.js.map +1 -0
- package/dist/kit/charts/donut.d.ts +16 -0
- package/dist/kit/charts/donut.d.ts.map +1 -0
- package/dist/kit/charts/donut.js +17 -0
- package/dist/kit/charts/donut.js.map +1 -0
- package/dist/kit/charts/line.d.ts +19 -0
- package/dist/kit/charts/line.d.ts.map +1 -0
- package/dist/kit/charts/line.js +21 -0
- package/dist/kit/charts/line.js.map +1 -0
- package/dist/kit/charts/progress.d.ts +12 -0
- package/dist/kit/charts/progress.d.ts.map +1 -0
- package/dist/kit/charts/progress.js +25 -0
- package/dist/kit/charts/progress.js.map +1 -0
- package/dist/kit/charts/sanitize.d.ts +24 -0
- package/dist/kit/charts/sanitize.d.ts.map +1 -0
- package/dist/kit/charts/sanitize.js +50 -0
- package/dist/kit/charts/sanitize.js.map +1 -0
- package/dist/kit/charts/sparkline.d.ts +11 -0
- package/dist/kit/charts/sparkline.d.ts.map +1 -0
- package/dist/kit/charts/sparkline.js +17 -0
- package/dist/kit/charts/sparkline.js.map +1 -0
- package/dist/kit/data/badge.d.ts +13 -0
- package/dist/kit/data/badge.d.ts.map +1 -0
- package/dist/kit/data/badge.js +12 -0
- package/dist/kit/data/badge.js.map +1 -0
- package/dist/kit/data/card-list.d.ts +23 -0
- package/dist/kit/data/card-list.d.ts.map +1 -0
- package/dist/kit/data/card-list.js +43 -0
- package/dist/kit/data/card-list.js.map +1 -0
- package/dist/kit/data/data-table.d.ts +32 -0
- package/dist/kit/data/data-table.d.ts.map +1 -0
- package/dist/kit/data/data-table.js +153 -0
- package/dist/kit/data/data-table.js.map +1 -0
- package/dist/kit/data/stat.d.ts +15 -0
- package/dist/kit/data/stat.d.ts.map +1 -0
- package/dist/kit/data/stat.js +28 -0
- package/dist/kit/data/stat.js.map +1 -0
- package/dist/kit/feedback/accordion.d.ts +15 -0
- package/dist/kit/feedback/accordion.d.ts.map +1 -0
- package/dist/kit/feedback/accordion.js +33 -0
- package/dist/kit/feedback/accordion.js.map +1 -0
- package/dist/kit/feedback/callout.d.ts +13 -0
- package/dist/kit/feedback/callout.d.ts.map +1 -0
- package/dist/kit/feedback/callout.js +24 -0
- package/dist/kit/feedback/callout.js.map +1 -0
- package/dist/kit/feedback/tabs.d.ts +14 -0
- package/dist/kit/feedback/tabs.d.ts.map +1 -0
- package/dist/kit/feedback/tabs.js +37 -0
- package/dist/kit/feedback/tabs.js.map +1 -0
- package/dist/kit/format.d.ts +60 -0
- package/dist/kit/format.d.ts.map +1 -0
- package/dist/kit/format.js +123 -0
- package/dist/kit/format.js.map +1 -0
- package/dist/kit/forms/button.d.ts +17 -0
- package/dist/kit/forms/button.d.ts.map +1 -0
- package/dist/kit/forms/button.js +33 -0
- package/dist/kit/forms/button.js.map +1 -0
- package/dist/kit/forms/checkbox.d.ts +9 -0
- package/dist/kit/forms/checkbox.d.ts.map +1 -0
- package/dist/kit/forms/checkbox.js +9 -0
- package/dist/kit/forms/checkbox.js.map +1 -0
- package/dist/kit/forms/date-picker.d.ts +13 -0
- package/dist/kit/forms/date-picker.d.ts.map +1 -0
- package/dist/kit/forms/date-picker.js +9 -0
- package/dist/kit/forms/date-picker.js.map +1 -0
- package/dist/kit/forms/disclaimer.d.ts +8 -0
- package/dist/kit/forms/disclaimer.d.ts.map +1 -0
- package/dist/kit/forms/disclaimer.js +20 -0
- package/dist/kit/forms/disclaimer.js.map +1 -0
- package/dist/kit/forms/field.d.ts +18 -0
- package/dist/kit/forms/field.d.ts.map +1 -0
- package/dist/kit/forms/field.js +19 -0
- package/dist/kit/forms/field.js.map +1 -0
- package/dist/kit/forms/form.d.ts +10 -0
- package/dist/kit/forms/form.d.ts.map +1 -0
- package/dist/kit/forms/form.js +9 -0
- package/dist/kit/forms/form.js.map +1 -0
- package/dist/kit/forms/input.d.ts +14 -0
- package/dist/kit/forms/input.d.ts.map +1 -0
- package/dist/kit/forms/input.js +9 -0
- package/dist/kit/forms/input.js.map +1 -0
- package/dist/kit/forms/select.d.ts +21 -0
- package/dist/kit/forms/select.d.ts.map +1 -0
- package/dist/kit/forms/select.js +35 -0
- package/dist/kit/forms/select.js.map +1 -0
- package/dist/kit/forms/textarea.d.ts +12 -0
- package/dist/kit/forms/textarea.d.ts.map +1 -0
- package/dist/kit/forms/textarea.js +9 -0
- package/dist/kit/forms/textarea.js.map +1 -0
- package/dist/kit/index.d.ts +42 -0
- package/dist/kit/index.d.ts.map +1 -0
- package/dist/kit/index.js +45 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/kit-prompt.d.ts +7 -0
- package/dist/kit/kit-prompt.d.ts.map +1 -0
- package/dist/kit/kit-prompt.js +7 -0
- package/dist/kit/kit-prompt.js.map +1 -0
- package/dist/kit/layout.d.ts +29 -0
- package/dist/kit/layout.d.ts.map +1 -0
- package/dist/kit/layout.js +64 -0
- package/dist/kit/layout.js.map +1 -0
- package/dist/kit/registry.d.ts +11 -0
- package/dist/kit/registry.d.ts.map +1 -0
- package/dist/kit/registry.js +34 -0
- package/dist/kit/registry.js.map +1 -0
- package/dist/kit/schema.d.ts +9 -0
- package/dist/kit/schema.d.ts.map +1 -0
- package/dist/kit/schema.js +9 -0
- package/dist/kit/schema.js.map +1 -0
- package/dist/kit/tokens.d.ts +33 -0
- package/dist/kit/tokens.d.ts.map +1 -0
- package/dist/kit/tokens.js +48 -0
- package/dist/kit/tokens.js.map +1 -0
- package/dist/kit/values.d.ts +55 -0
- package/dist/kit/values.d.ts.map +1 -0
- package/dist/kit/values.js +108 -0
- package/dist/kit/values.js.map +1 -0
- package/dist/theme.d.ts +25 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +100 -0
- package/dist/theme.js.map +1 -0
- package/dist/tree/bindings.d.ts +4 -0
- package/dist/tree/bindings.d.ts.map +1 -0
- package/dist/tree/bindings.js +20 -0
- package/dist/tree/bindings.js.map +1 -0
- package/dist/tree/branded.d.ts +124 -0
- package/dist/tree/branded.d.ts.map +1 -0
- package/dist/tree/branded.js +319 -0
- package/dist/tree/branded.js.map +1 -0
- package/dist/tree/error-boundary.d.ts +22 -0
- package/dist/tree/error-boundary.d.ts.map +1 -0
- package/dist/tree/error-boundary.js +25 -0
- package/dist/tree/error-boundary.js.map +1 -0
- package/dist/tree/fluid-reveal.d.ts +22 -0
- package/dist/tree/fluid-reveal.d.ts.map +1 -0
- package/dist/tree/fluid-reveal.js +28 -0
- package/dist/tree/fluid-reveal.js.map +1 -0
- package/dist/tree/forming-skeleton.d.ts +14 -0
- package/dist/tree/forming-skeleton.d.ts.map +1 -0
- package/dist/tree/forming-skeleton.js +36 -0
- package/dist/tree/forming-skeleton.js.map +1 -0
- package/dist/tree/frames.d.ts +52 -0
- package/dist/tree/frames.d.ts.map +1 -0
- package/dist/tree/frames.js +143 -0
- package/dist/tree/frames.js.map +1 -0
- package/dist/tree/host-mount.d.ts +24 -0
- package/dist/tree/host-mount.d.ts.map +1 -0
- package/dist/tree/host-mount.js +0 -0
- package/dist/tree/host-mount.js.map +1 -0
- package/dist/tree/index.d.ts +9 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +9 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/jail/JailedComponent.d.ts +41 -0
- package/dist/tree/jail/JailedComponent.d.ts.map +1 -0
- package/dist/tree/jail/JailedComponent.js +269 -0
- package/dist/tree/jail/JailedComponent.js.map +1 -0
- package/dist/tree/jail/runtime-bundle.gen.d.ts +3 -0
- package/dist/tree/jail/runtime-bundle.gen.d.ts.map +1 -0
- package/dist/tree/jail/runtime-bundle.gen.js +3 -0
- package/dist/tree/jail/runtime-bundle.gen.js.map +1 -0
- package/dist/tree/jail/runtime-entry.d.ts +18 -0
- package/dist/tree/jail/runtime-entry.d.ts.map +1 -0
- package/dist/tree/jail/runtime-entry.js +440 -0
- package/dist/tree/jail/runtime-entry.js.map +1 -0
- package/dist/tree/jail/viewport-css.d.ts +17 -0
- package/dist/tree/jail/viewport-css.d.ts.map +1 -0
- package/dist/tree/jail/viewport-css.js +32 -0
- package/dist/tree/jail/viewport-css.js.map +1 -0
- package/dist/tree/mcp-shim/entry.d.ts +2 -0
- package/dist/tree/mcp-shim/entry.d.ts.map +1 -0
- package/dist/tree/mcp-shim/entry.js +45 -0
- package/dist/tree/mcp-shim/entry.js.map +1 -0
- package/dist/tree/mcp-shim/http-open-card.d.ts +5 -0
- package/dist/tree/mcp-shim/http-open-card.d.ts.map +1 -0
- package/dist/tree/mcp-shim/http-open-card.js +61 -0
- package/dist/tree/mcp-shim/http-open-card.js.map +1 -0
- package/dist/tree/mcp-shim/shim-core.d.ts +58 -0
- package/dist/tree/mcp-shim/shim-core.d.ts.map +1 -0
- package/dist/tree/mcp-shim/shim-core.js +176 -0
- package/dist/tree/mcp-shim/shim-core.js.map +1 -0
- package/dist/tree/mcp-shim/theme.d.ts +8 -0
- package/dist/tree/mcp-shim/theme.d.ts.map +1 -0
- package/dist/tree/mcp-shim/theme.js +36 -0
- package/dist/tree/mcp-shim/theme.js.map +1 -0
- package/dist/tree/notice.d.ts +8 -0
- package/dist/tree/notice.d.ts.map +1 -0
- package/dist/tree/notice.js +30 -0
- package/dist/tree/notice.js.map +1 -0
- package/dist/tree/primitives.d.ts +30 -0
- package/dist/tree/primitives.d.ts.map +1 -0
- package/dist/tree/primitives.js +105 -0
- package/dist/tree/primitives.js.map +1 -0
- package/dist/tree/renderer-v2.d.ts +15 -0
- package/dist/tree/renderer-v2.d.ts.map +1 -0
- package/dist/tree/renderer-v2.js +71 -0
- package/dist/tree/renderer-v2.js.map +1 -0
- package/dist/tree/renderer.d.ts +77 -0
- package/dist/tree/renderer.d.ts.map +1 -0
- package/dist/tree/renderer.js +376 -0
- package/dist/tree/renderer.js.map +1 -0
- package/dist/voice/driver.d.ts +94 -0
- package/dist/voice/driver.d.ts.map +1 -0
- package/dist/voice/driver.js +2 -0
- package/dist/voice/driver.js.map +1 -0
- package/dist/voice/index.d.ts +7 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +5 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/realtime-driver.d.ts +57 -0
- package/dist/voice/realtime-driver.d.ts.map +1 -0
- package/dist/voice/realtime-driver.js +592 -0
- package/dist/voice/realtime-driver.js.map +1 -0
- package/dist/voice/stage.d.ts +12 -0
- package/dist/voice/stage.d.ts.map +1 -0
- package/dist/voice/stage.js +259 -0
- package/dist/voice/stage.js.map +1 -0
- package/dist/voice/use-voice-approvals.d.ts +16 -0
- package/dist/voice/use-voice-approvals.d.ts.map +1 -0
- package/dist/voice/use-voice-approvals.js +77 -0
- package/dist/voice/use-voice-approvals.js.map +1 -0
- package/dist/voice/use-voice.d.ts +26 -0
- package/dist/voice/use-voice.d.ts.map +1 -0
- package/dist/voice/use-voice.js +201 -0
- package/dist/voice/use-voice.js.map +1 -0
- package/dist/voice/voice-act.d.ts +13 -0
- package/dist/voice/voice-act.d.ts.map +1 -0
- package/dist/voice/voice-act.js +301 -0
- package/dist/voice/voice-act.js.map +1 -0
- package/dist/voice/voice-blob.d.ts +17 -0
- package/dist/voice/voice-blob.d.ts.map +1 -0
- package/dist/voice/voice-blob.js +67 -0
- package/dist/voice/voice-blob.js.map +1 -0
- package/dist/voice/voice-consent.d.ts +17 -0
- package/dist/voice/voice-consent.d.ts.map +1 -0
- package/dist/voice/voice-consent.js +45 -0
- package/dist/voice/voice-consent.js.map +1 -0
- package/dist/voice/voice-drawer.d.ts +10 -0
- package/dist/voice/voice-drawer.d.ts.map +1 -0
- package/dist/voice/voice-drawer.js +22 -0
- package/dist/voice/voice-drawer.js.map +1 -0
- package/dist/wire-types.d.ts +238 -0
- package/dist/wire-types.d.ts.map +1 -0
- package/dist/wire-types.js +2 -0
- package/dist/wire-types.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useVendoContext } from "../context.js";
|
|
4
|
+
import { useConnections } from "../hooks/use-connections.js";
|
|
5
|
+
import { useConnectorCatalog } from "../hooks/use-connector-catalog.js";
|
|
6
|
+
import { toolkitLogoUrl } from "./build-beat.js";
|
|
7
|
+
import { ChromeRoot } from "./chrome-root.js";
|
|
8
|
+
import { completeConnection } from "./connect-dock.js";
|
|
9
|
+
import { toolkitDisplayName } from "./humanize.js";
|
|
10
|
+
/** ui-lane-panels picks A + D + F — identity-forward rows, a two-step
|
|
11
|
+
* disconnect with an undo window, and a connect-ahead empty state. */
|
|
12
|
+
function connectorDisplayName(connector) {
|
|
13
|
+
return connector === "composio" ? "Composio" : toolkitDisplayName(connector);
|
|
14
|
+
}
|
|
15
|
+
const STATUS = {
|
|
16
|
+
active: { label: "Connected", tone: "ok" },
|
|
17
|
+
initiated: { label: "Connecting…", tone: "off" },
|
|
18
|
+
expired: { label: "Expired", tone: "warn" },
|
|
19
|
+
failed: { label: "Failed", tone: "danger" },
|
|
20
|
+
};
|
|
21
|
+
function connectedDate(createdAt) {
|
|
22
|
+
return new Intl.DateTimeFormat("en", { dateStyle: "medium", timeZone: "UTC" }).format(new Date(createdAt));
|
|
23
|
+
}
|
|
24
|
+
function ToolkitMark({ toolkit }) {
|
|
25
|
+
// Same failure posture as the tray and connect card: a mark that fails to
|
|
26
|
+
// load falls back to the link glyph instead of a broken-image icon.
|
|
27
|
+
const [logoFailed, setLogoFailed] = useState(false);
|
|
28
|
+
const logo = logoFailed ? undefined : toolkitLogoUrl(toolkit);
|
|
29
|
+
return (_jsx("span", { className: "fl-acct-logo", "aria-hidden": "true", children: logo ? (
|
|
30
|
+
// eslint-disable-next-line @next/next/no-img-element -- chrome surface, plain img by design
|
|
31
|
+
_jsx("img", { src: logo, alt: "", width: 17, height: 17, style: { display: "block", objectFit: "contain" }, onError: () => setLogoFailed(true) })) : (_jsx("svg", { width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M9 17H7A5 5 0 0 1 7 7h2M15 7h2a5 5 0 1 1 0 10h-2M8 12h8" }) })) }));
|
|
32
|
+
}
|
|
33
|
+
/** 04-actions §3 / 08-ui §4 — the persistent connected-accounts settings
|
|
34
|
+
* surface: every external account the signed-in user has connected through
|
|
35
|
+
* the broker, with real service identity (logo, display name, status chip)
|
|
36
|
+
* and a consequence-aware, reversible disconnect. Connecting normally happens
|
|
37
|
+
* in-flow (the connect card); the empty state additionally offers connecting
|
|
38
|
+
* ahead of time via the same broker redirect. */
|
|
39
|
+
export function ConnectedAccountsPanel({ undoMs = 10_000 } = {}) {
|
|
40
|
+
const { client } = useVendoContext();
|
|
41
|
+
const { options: connectors } = useConnectorCatalog();
|
|
42
|
+
const { connections, disconnect, refresh } = useConnections();
|
|
43
|
+
const [confirming, setConfirming] = useState({});
|
|
44
|
+
const [severing, setSevering] = useState({});
|
|
45
|
+
const [busy, setBusy] = useState({});
|
|
46
|
+
const [error, setError] = useState();
|
|
47
|
+
const timers = useRef(new Map());
|
|
48
|
+
// Pending disconnects flush on unmount (an undone-looking row must never
|
|
49
|
+
// silently survive navigation), so the latest wire args live in a ref.
|
|
50
|
+
const pendingRef = useRef(new Map());
|
|
51
|
+
const cancelled = useRef(false);
|
|
52
|
+
// The unmount flush must see the CURRENT disconnect without re-running the
|
|
53
|
+
// effect (an effect keyed on `disconnect` would flush pending severs on any
|
|
54
|
+
// identity change mid-session).
|
|
55
|
+
const disconnectRef = useRef(disconnect);
|
|
56
|
+
disconnectRef.current = disconnect;
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
// cancelled/pending state persists across effects; reset for StrictMode remounts.
|
|
59
|
+
cancelled.current = false;
|
|
60
|
+
const pending = pendingRef.current;
|
|
61
|
+
const active = timers.current;
|
|
62
|
+
return () => {
|
|
63
|
+
cancelled.current = true;
|
|
64
|
+
for (const timer of active.values()) {
|
|
65
|
+
window.clearTimeout(timer.commit);
|
|
66
|
+
window.clearInterval(timer.tick);
|
|
67
|
+
}
|
|
68
|
+
active.clear();
|
|
69
|
+
for (const [id, { connector }] of pending) {
|
|
70
|
+
void disconnectRef.current(id, connector).catch(() => undefined);
|
|
71
|
+
}
|
|
72
|
+
pending.clear();
|
|
73
|
+
};
|
|
74
|
+
}, []);
|
|
75
|
+
const clearTimers = (id) => {
|
|
76
|
+
const timer = timers.current.get(id);
|
|
77
|
+
if (timer) {
|
|
78
|
+
window.clearTimeout(timer.commit);
|
|
79
|
+
window.clearInterval(timer.tick);
|
|
80
|
+
timers.current.delete(id);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const beginSever = (connection) => {
|
|
84
|
+
const id = connection.id;
|
|
85
|
+
setConfirming(current => ({ ...current, [id]: false }));
|
|
86
|
+
setSevering(current => ({ ...current, [id]: { left: Math.max(1, Math.ceil(undoMs / 1000)) } }));
|
|
87
|
+
pendingRef.current.set(id, { connector: connection.connector });
|
|
88
|
+
const tick = window.setInterval(() => {
|
|
89
|
+
setSevering(current => {
|
|
90
|
+
const entry = current[id];
|
|
91
|
+
if (!entry)
|
|
92
|
+
return current;
|
|
93
|
+
return { ...current, [id]: { left: Math.max(0, entry.left - 1) } };
|
|
94
|
+
});
|
|
95
|
+
}, 1_000);
|
|
96
|
+
const commit = window.setTimeout(() => {
|
|
97
|
+
clearTimers(id);
|
|
98
|
+
pendingRef.current.delete(id);
|
|
99
|
+
void (async () => {
|
|
100
|
+
setError(undefined);
|
|
101
|
+
setBusy(current => ({ ...current, [id]: true }));
|
|
102
|
+
try {
|
|
103
|
+
await disconnect(id, connection.connector);
|
|
104
|
+
}
|
|
105
|
+
catch (reason) {
|
|
106
|
+
if (!cancelled.current)
|
|
107
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
if (!cancelled.current) {
|
|
111
|
+
setBusy(current => ({ ...current, [id]: false }));
|
|
112
|
+
setSevering(current => ({ ...current, [id]: undefined }));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
})();
|
|
116
|
+
}, undoMs);
|
|
117
|
+
timers.current.set(id, { commit, tick });
|
|
118
|
+
};
|
|
119
|
+
const undoSever = (id) => {
|
|
120
|
+
clearTimers(id);
|
|
121
|
+
pendingRef.current.delete(id);
|
|
122
|
+
setSevering(current => ({ ...current, [id]: undefined }));
|
|
123
|
+
};
|
|
124
|
+
// Connect-ahead runs through the host's connector catalog (context), so the
|
|
125
|
+
// chips honour host labels and pinned broker connectors — never a hardcoded
|
|
126
|
+
// toolkit list.
|
|
127
|
+
const connectAhead = async (option) => {
|
|
128
|
+
setError(undefined);
|
|
129
|
+
setBusy(current => ({ ...current, [`connect-${option.toolkit}`]: true }));
|
|
130
|
+
try {
|
|
131
|
+
await completeConnection(client, { toolkit: option.toolkit, connector: option.connector }, () => cancelled.current);
|
|
132
|
+
if (!cancelled.current)
|
|
133
|
+
await refresh();
|
|
134
|
+
}
|
|
135
|
+
catch (reason) {
|
|
136
|
+
if (!cancelled.current)
|
|
137
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
if (!cancelled.current)
|
|
141
|
+
setBusy(current => ({ ...current, [`connect-${option.toolkit}`]: false }));
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
return (_jsx(ChromeRoot, { children: _jsxs("section", { "aria-labelledby": "vendo-accounts-heading", style: { display: "flex", flexDirection: "column", gap: 12 }, children: [_jsx("h2", { id: "vendo-accounts-heading", className: "fl-auto-title", style: { margin: 0 }, children: "Connected accounts" }), error ? _jsx("div", { role: "alert", className: "fl-error", children: error }) : null, connections.length === 0 ? (_jsxs("div", { className: "fl-acct-ghost", children: [_jsx("span", { className: "fl-acct-ghost-title", children: "No connected accounts yet" }), _jsxs("p", { className: "fl-acct-ghost-copy", children: ["Normally you\u2019ll connect an account right in the conversation, the moment the agent needs it.", connectors.length > 0 ? " If you’d rather set one up ahead of time:" : ""] }), connectors.length > 0 ? (_jsx("div", { className: "fl-acct-connect-row", children: connectors.map(option => {
|
|
145
|
+
const label = option.label ?? toolkitDisplayName(option.toolkit);
|
|
146
|
+
return (_jsxs("button", { className: "fl-acct-connect-chip", type: "button", disabled: busy[`connect-${option.toolkit}`] === true, onClick: () => void connectAhead(option), children: [_jsx(ToolkitMark, { toolkit: option.toolkit }), _jsx("span", { children: busy[`connect-${option.toolkit}`] ? "Connecting…" : `Connect ${label}` })] }, option.toolkit));
|
|
147
|
+
}) })) : null] })) : null, connections.map(connection => {
|
|
148
|
+
const name = toolkitDisplayName(connection.toolkit);
|
|
149
|
+
const status = STATUS[connection.status];
|
|
150
|
+
const sever = severing[connection.id];
|
|
151
|
+
if (sever) {
|
|
152
|
+
return (_jsxs("div", { className: "fl-acct-severed", role: "status", children: [_jsx(ToolkitMark, { toolkit: connection.toolkit }), _jsxs("span", { children: [name, " disconnected \u2014 standing access severed."] }), _jsxs("span", { className: "fl-acct-undo", children: [_jsx("span", { className: "fl-acct-undo-count", children: sever.left > 0 ? `${sever.left}s` : "…" }), _jsx("button", { className: "fl-btn", type: "button", disabled: busy[connection.id] === true || sever.left <= 0, onClick: () => undoSever(connection.id), children: "Undo" })] })] }, `${connection.connector}-${connection.id}`));
|
|
153
|
+
}
|
|
154
|
+
return (_jsxs("article", { className: "fl-automation", children: [_jsxs("div", { className: "fl-auto-head", children: [_jsx(ToolkitMark, { toolkit: connection.toolkit }), _jsxs("div", { children: [_jsxs("div", { className: "fl-auto-title fl-acct-title", children: [name, _jsxs("span", { className: `fl-acct-chip fl-acct-chip--${status.tone}`, children: [_jsx("i", { "aria-hidden": "true" }), status.label] })] }), _jsxs("div", { className: "fl-auto-sub", children: [`via ${connectorDisplayName(connection.connector)}`, connection.createdAt ? ` · connected ${connectedDate(connection.createdAt)}` : ""] })] }), _jsx("button", { className: "fl-btn", type: "button", "aria-label": `Disconnect ${name}`, "aria-expanded": confirming[connection.id] === true, style: { marginLeft: "auto" }, onClick: () => setConfirming(current => ({ ...current, [connection.id]: !current[connection.id] })), children: "Disconnect\u2026" })] }), _jsx("div", { className: `fl-acct-confirm${confirming[connection.id] ? " fl-acct-confirm--open" : ""}`, children: _jsxs("div", { className: "fl-acct-confirm-inner", children: [_jsxs("span", { children: [_jsx("b", { children: `Disconnect ${name}?` }), _jsx("span", { className: "fl-acct-confirm-sub", children: `Vendo loses the ability to act in ${name} as you. Anything that posts through this account pauses until you reconnect.` })] }), _jsxs("span", { className: "fl-acct-confirm-actions", children: [_jsx("button", { className: "fl-btn fl-btn-ceremony", type: "button", onClick: () => beginSever(connection), children: "Disconnect" }), _jsx("button", { className: "fl-btn", type: "button", onClick: () => setConfirming(current => ({ ...current, [connection.id]: false })), children: "Keep" })] })] }) })] }, `${connection.connector}-${connection.id}`));
|
|
155
|
+
})] }) }));
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=connected-accounts-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connected-accounts-panel.js","sourceRoot":"","sources":["../../src/chrome/connected-accounts-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Dev-only console rails, SSR-safe. Next/webpack shims statically replace
|
|
2
|
+
* `process.env.NODE_ENV`; under bundlers without a process global the check
|
|
3
|
+
* simply stays off (rails are advisory, never load-bearing). */
|
|
4
|
+
export declare function developmentMode(): boolean;
|
|
5
|
+
//# sourceMappingURL=dev-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-mode.d.ts","sourceRoot":"","sources":["../../src/chrome/dev-mode.ts"],"names":[],"mappings":"AAAA;;iEAEiE;AACjE,wBAAgB,eAAe,IAAI,OAAO,CAEzC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Dev-only console rails, SSR-safe. Next/webpack shims statically replace
|
|
2
|
+
* `process.env.NODE_ENV`; under bundlers without a process global the check
|
|
3
|
+
* simply stays off (rails are advisory, never load-bearing). */
|
|
4
|
+
export function developmentMode() {
|
|
5
|
+
return typeof process !== "undefined" && process.env?.NODE_ENV === "development";
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=dev-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-mode.js","sourceRoot":"","sources":["../../src/chrome/dev-mode.ts"],"names":[],"mappings":"AAAA;;iEAEiE;AACjE,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,KAAK,aAAa,CAAC;AACnF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** Fire-once flags for discoverability elements (ui-usage-dx §6).
|
|
2
|
+
*
|
|
3
|
+
* Hard rule: every discoverability element renders at most once per user per
|
|
4
|
+
* deployment, ever — localStorage (origin-scoped, so per-deployment) is the
|
|
5
|
+
* source of truth, and any degraded environment (SSR, sandboxed iframe,
|
|
6
|
+
* blocked or full storage) reads as already-seen so it never nags. */
|
|
7
|
+
/** The one host-facing discoverability dial (ui-usage-dx §6): `"default"`
|
|
8
|
+
* keeps the fire-once whisper + greeting-as-tutorial; `"quiet"` disables
|
|
9
|
+
* both. Contextual affordances (slot ghosts, remix hover, triggers) are
|
|
10
|
+
* host-placed and untouched by the dial. */
|
|
11
|
+
export type VendoDiscoverability = "quiet" | "default";
|
|
12
|
+
/** The greeting-as-tutorial content (§6 first-open moment): an agent-voiced
|
|
13
|
+
* intro line plus 2–3 tappable starter prompts (chips PREFILL the composer,
|
|
14
|
+
* never send). Hosts supply it via the provider/overlay `greeting` prop —
|
|
15
|
+
* typically loaded from `.vendo/greeting.json`, which uses this exact shape. */
|
|
16
|
+
export interface VendoGreeting {
|
|
17
|
+
intro: string;
|
|
18
|
+
prompts: string[];
|
|
19
|
+
}
|
|
20
|
+
/** Fallback greeting when the host supplies none: a generic capable intro
|
|
21
|
+
* whose second prompt is always a molding prompt (the §6 requirement). */
|
|
22
|
+
export declare const defaultVendoGreeting: VendoGreeting;
|
|
23
|
+
/** Fallback suggestion chips for the VendoSlot empty-state invitation
|
|
24
|
+
* (ui-lane-entry pick S-A×S-D) when the host supplies none — generic
|
|
25
|
+
* view-authoring starts, white-label like everything else. Hosts should
|
|
26
|
+
* replace these with host-aware prompts (`.vendo/greeting.json` pipeline). */
|
|
27
|
+
export declare const defaultSlotSuggestions: string[];
|
|
28
|
+
/** True once the element has fired — or whenever storage cannot answer. */
|
|
29
|
+
export declare function hasSeen(element: string): boolean;
|
|
30
|
+
/** Record the element as fired. Best-effort: a write that fails stays silent
|
|
31
|
+
* (the matching hasSeen already reports seen in those environments). */
|
|
32
|
+
export declare function markSeen(element: string): void;
|
|
33
|
+
//# sourceMappingURL=discoverability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoverability.d.ts","sourceRoot":"","sources":["../../src/chrome/discoverability.ts"],"names":[],"mappings":"AAAA;;;;;uEAKuE;AAEvE;;;6CAG6C;AAC7C,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD;;;iFAGiF;AACjF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;2EAC2E;AAC3E,eAAO,MAAM,oBAAoB,EAAE,aAGlC,CAAC;AAEF;;;+EAG+E;AAC/E,eAAO,MAAM,sBAAsB,EAAE,MAAM,EAI1C,CAAC;AAaF,2EAA2E;AAC3E,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAgBhD;AAED;yEACyE;AACzE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAM9C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Fire-once flags for discoverability elements (ui-usage-dx §6).
|
|
2
|
+
*
|
|
3
|
+
* Hard rule: every discoverability element renders at most once per user per
|
|
4
|
+
* deployment, ever — localStorage (origin-scoped, so per-deployment) is the
|
|
5
|
+
* source of truth, and any degraded environment (SSR, sandboxed iframe,
|
|
6
|
+
* blocked or full storage) reads as already-seen so it never nags. */
|
|
7
|
+
/** Fallback greeting when the host supplies none: a generic capable intro
|
|
8
|
+
* whose second prompt is always a molding prompt (the §6 requirement). */
|
|
9
|
+
export const defaultVendoGreeting = {
|
|
10
|
+
intro: "Hi — I'm built into this app. Ask me questions, hand me tasks, or have me reshape a screen to fit how you work.",
|
|
11
|
+
prompts: ["What can you do here?", "Rebuild this page around what I use most"],
|
|
12
|
+
};
|
|
13
|
+
/** Fallback suggestion chips for the VendoSlot empty-state invitation
|
|
14
|
+
* (ui-lane-entry pick S-A×S-D) when the host supplies none — generic
|
|
15
|
+
* view-authoring starts, white-label like everything else. Hosts should
|
|
16
|
+
* replace these with host-aware prompts (`.vendo/greeting.json` pipeline). */
|
|
17
|
+
export const defaultSlotSuggestions = [
|
|
18
|
+
"Track the things I check most",
|
|
19
|
+
"Summarize what's on this page",
|
|
20
|
+
"A morning digest of what changed",
|
|
21
|
+
];
|
|
22
|
+
const PREFIX = "vendo:discoverability:";
|
|
23
|
+
function storage() {
|
|
24
|
+
try {
|
|
25
|
+
// The ACCESS itself can throw (sandboxed iframes, partitioned storage).
|
|
26
|
+
return typeof window === "undefined" ? null : window.localStorage;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** True once the element has fired — or whenever storage cannot answer. */
|
|
33
|
+
export function hasSeen(element) {
|
|
34
|
+
const store = storage();
|
|
35
|
+
if (!store)
|
|
36
|
+
return true;
|
|
37
|
+
try {
|
|
38
|
+
if (store.getItem(PREFIX + element) !== null)
|
|
39
|
+
return true;
|
|
40
|
+
// Quota-full storage commonly still READS while writes throw; reporting
|
|
41
|
+
// unseen there means markSeen can never persist and the element replays
|
|
42
|
+
// on every visit. Probe writability first — a failed probe reads as seen
|
|
43
|
+
// (degraded environments never nag).
|
|
44
|
+
const probe = `${PREFIX}probe`;
|
|
45
|
+
store.setItem(probe, "1");
|
|
46
|
+
store.removeItem(probe);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Record the element as fired. Best-effort: a write that fails stays silent
|
|
54
|
+
* (the matching hasSeen already reports seen in those environments). */
|
|
55
|
+
export function markSeen(element) {
|
|
56
|
+
try {
|
|
57
|
+
storage()?.setItem(PREFIX + element, "1");
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
/* quota/denied — nothing to do */
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=discoverability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discoverability.js","sourceRoot":"","sources":["../../src/chrome/discoverability.ts"],"names":[],"mappings":"AAAA;;;;;uEAKuE;AAiBvE;2EAC2E;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAkB;IACjD,KAAK,EAAE,iHAAiH;IACxH,OAAO,EAAE,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;CAC/E,CAAC;AAEF;;;+EAG+E;AAC/E,MAAM,CAAC,MAAM,sBAAsB,GAAa;IAC9C,+BAA+B;IAC/B,+BAA+B;IAC/B,kCAAkC;CACnC,CAAC;AAEF,MAAM,MAAM,GAAG,wBAAwB,CAAC;AAExC,SAAS,OAAO;IACd,IAAI,CAAC;QACH,wEAAwE;QACxE,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,OAAO,CAAC,OAAe;IACrC,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC1D,wEAAwE;QACxE,wEAAwE;QACxE,yEAAyE;QACzE,qCAAqC;QACrC,MAAM,KAAK,GAAG,GAAG,MAAM,OAAO,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1B,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { VendoAppEmbedProps, VendoApprovalEmbedProps, VendoToolResultProps } from "../embeds.js";
|
|
2
|
+
/**
|
|
3
|
+
* Approve/deny for a guarded call parked from a BYO agent loop
|
|
4
|
+
* (`vendo/approval-ref@1`). The wire owns the state — this embed polls
|
|
5
|
+
* `GET /approvals/:id` and resolves in place to the executed outcome,
|
|
6
|
+
* "declined", or "expired" (the frozen `VendoApprovalEmbedState` vocabulary).
|
|
7
|
+
*/
|
|
8
|
+
export declare function VendoApprovalEmbed({ refValue }: VendoApprovalEmbedProps): import("react").JSX.Element;
|
|
9
|
+
/**
|
|
10
|
+
* Inline generated app (`vendo/app-ref@1`): the build-beat bar while the
|
|
11
|
+
* build streams, then the live app. In-app interactions go over the wire
|
|
12
|
+
* (`apps.call`), never through the host's agent loop.
|
|
13
|
+
*/
|
|
14
|
+
export declare function VendoAppEmbed({ refValue }: VendoAppEmbedProps): import("react").JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* The dispatcher: give it any `vendo_*` tool output and it renders the right
|
|
17
|
+
* embed by `parseVendoToolEnvelope` — or nothing for plain data (the action
|
|
18
|
+
* executed cleanly; the agent already consumed the result).
|
|
19
|
+
*/
|
|
20
|
+
export declare function VendoToolResult({ output }: VendoToolResultProps): import("react").JSX.Element | null;
|
|
21
|
+
//# sourceMappingURL=embeds.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeds.d.ts","sourceRoot":"","sources":["../../src/chrome/embeds.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AA8GtB;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,uBAAuB,+BA6DvE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAiF7D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,sCAM/D"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { VENDO_APP_REF_KIND, VendoError, parseVendoToolEnvelope, } from "@vendoai/core";
|
|
3
|
+
import { useCallback, useEffect, useState } from "react";
|
|
4
|
+
import { useVendoContext } from "../context.js";
|
|
5
|
+
import { useResource } from "../hooks/use-resource.js";
|
|
6
|
+
import { AppFrame } from "../tree/frames.js";
|
|
7
|
+
import { ApprovalCard } from "./approval-card.js";
|
|
8
|
+
import { ChromeRoot } from "./chrome-root.js";
|
|
9
|
+
import { LONG_TEXT_CAP, truncateHead } from "./truncate.js";
|
|
10
|
+
/**
|
|
11
|
+
* Existing-agents Lane B — the three embeds a BYO chat surface renders from
|
|
12
|
+
* `vendo_*` tool outputs (frozen prop contracts in ../embeds.ts). All three
|
|
13
|
+
* live inside the host's `VendoProvider` pointed at the wire: auth rides the
|
|
14
|
+
* host session cookie, theme rides the `--vendo-*` tokens, and they take no
|
|
15
|
+
* client/config props of their own. Failure states speak the existing
|
|
16
|
+
* failed/expired vocabulary — never a silent blank.
|
|
17
|
+
*/
|
|
18
|
+
/** While the build streams the wire has nothing to serve yet, so the embed
|
|
19
|
+
* polls open(); a build that never lands resolves to the failed vocabulary
|
|
20
|
+
* instead of an eternal beat. */
|
|
21
|
+
const APP_POLL_MS = 1200;
|
|
22
|
+
const APP_BUILD_DEADLINE_MS = 5 * 60_000;
|
|
23
|
+
/** Pending approvals re-poll so a decision made anywhere (this card, the
|
|
24
|
+
* workspace queue, another tab) resolves this embed in place. */
|
|
25
|
+
const APPROVAL_POLL_MS = 2500;
|
|
26
|
+
function asError(reason) {
|
|
27
|
+
return reason instanceof Error ? reason : new Error(String(reason));
|
|
28
|
+
}
|
|
29
|
+
const tick = (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "m5 12 4 4L19 6" }) }));
|
|
30
|
+
const cross = (_jsx("svg", { width: "11", height: "11", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: "M18 6 6 18M6 6l12 12" }) }));
|
|
31
|
+
/** One resolved line in the thread's beat vocabulary: tick for done, x for
|
|
32
|
+
* failed/terminal, orb while working. */
|
|
33
|
+
function BeatLine({ state, children }) {
|
|
34
|
+
return (_jsxs("div", { className: `fl-beat fl-beat-${state}`, children: [state === "working" ? (_jsx("span", { className: "fl-beat-orb", "aria-hidden": "true" })) : (_jsx("span", { className: `fl-beat-ic ${state === "done" ? "fl-beat-tick" : "fl-beat-x"}`, children: state === "done" ? tick : cross })), _jsx("span", { className: "fl-beat-label", children: children })] }));
|
|
35
|
+
}
|
|
36
|
+
/** The resolved approval card: same `fl-approval` boundary as the consent
|
|
37
|
+
* card, collapsed to its terminal line (and the executed result, if any). */
|
|
38
|
+
function ResolvedApprovalCard({ summary, ok, line, detail }) {
|
|
39
|
+
return (_jsxs("article", { className: `fl-approval${ok ? " fl-approval-approved" : ""}`, "aria-label": `Approval — ${line}`, children: [_jsx("div", { className: "fl-approval-head", children: _jsxs("div", { className: "fl-approval-heading", children: [_jsx("div", { className: "fl-approval-eyebrow", children: "Approval" }), _jsx("div", { className: "fl-approval-title", children: summary })] }) }), _jsx(BeatLine, { state: ok ? "done" : "error", children: line }), detail] }));
|
|
40
|
+
}
|
|
41
|
+
function executedCard(summary, outcome) {
|
|
42
|
+
if (outcome.status === "ok") {
|
|
43
|
+
const preview = JSON.stringify(outcome.output);
|
|
44
|
+
const detail = preview !== undefined && preview !== "{}" && preview !== "null"
|
|
45
|
+
? (_jsx("pre", { className: "fl-approval-fields", "aria-label": "Result", style: { whiteSpace: "pre-wrap", overflowWrap: "anywhere" }, children: truncateHead(preview, Math.min(500, LONG_TEXT_CAP)) }))
|
|
46
|
+
: undefined;
|
|
47
|
+
return _jsx(ResolvedApprovalCard, { summary: summary, ok: true, line: "Approved \u2014 ran", detail: detail });
|
|
48
|
+
}
|
|
49
|
+
// The resumed call itself failed (error/blocked/…): the honest record, in
|
|
50
|
+
// the thread's existing "couldn't finish" vocabulary.
|
|
51
|
+
const reason = outcome.status === "error"
|
|
52
|
+
? outcome.error.message
|
|
53
|
+
: outcome.status === "blocked"
|
|
54
|
+
? outcome.reason
|
|
55
|
+
: outcome.status;
|
|
56
|
+
return (_jsx(ResolvedApprovalCard, { summary: summary, ok: false, line: "Approved \u2014 couldn't finish", detail: _jsx("div", { className: "fl-approval-more", children: reason }) }));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Approve/deny for a guarded call parked from a BYO agent loop
|
|
60
|
+
* (`vendo/approval-ref@1`). The wire owns the state — this embed polls
|
|
61
|
+
* `GET /approvals/:id` and resolves in place to the executed outcome,
|
|
62
|
+
* "declined", or "expired" (the frozen `VendoApprovalEmbedState` vocabulary).
|
|
63
|
+
*/
|
|
64
|
+
export function VendoApprovalEmbed({ refValue }) {
|
|
65
|
+
const { client } = useVendoContext();
|
|
66
|
+
const { approvalId, summary } = refValue;
|
|
67
|
+
const fetcher = useCallback(async () => {
|
|
68
|
+
try {
|
|
69
|
+
return await client.approvals.get(approvalId);
|
|
70
|
+
}
|
|
71
|
+
catch (reason) {
|
|
72
|
+
// An approval the wire no longer knows is no longer actionable: the
|
|
73
|
+
// TTL sweep (or a store erase) got there first. Same terminal state.
|
|
74
|
+
if (reason instanceof VendoError && reason.code === "not-found") {
|
|
75
|
+
return { state: "expired" };
|
|
76
|
+
}
|
|
77
|
+
throw reason;
|
|
78
|
+
}
|
|
79
|
+
}, [client, approvalId]);
|
|
80
|
+
// Poll until the state is terminal; useResource disarms when pollMs clears.
|
|
81
|
+
const [pollMs, setPollMs] = useState(APPROVAL_POLL_MS);
|
|
82
|
+
const { data, error, refresh } = useResource(fetcher, null, pollMs === undefined ? {} : { pollMs });
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (data !== null && data.state !== "pending")
|
|
85
|
+
setPollMs(undefined);
|
|
86
|
+
}, [data]);
|
|
87
|
+
const decide = useCallback(async (decision) => {
|
|
88
|
+
await client.approvals.decide(approvalId, decision);
|
|
89
|
+
await refresh();
|
|
90
|
+
}, [client, approvalId, refresh]);
|
|
91
|
+
let body;
|
|
92
|
+
if (data === null) {
|
|
93
|
+
body = error !== undefined
|
|
94
|
+
? (_jsxs("article", { className: "fl-approval", "aria-label": `Approval — ${summary}`, children: [_jsx("div", { className: "fl-approval-title", children: summary }), _jsx("div", { role: "alert", className: "fl-error", children: error.message })] }))
|
|
95
|
+
: _jsx(BeatLine, { state: "working", children: summary });
|
|
96
|
+
}
|
|
97
|
+
else if (data.state === "pending") {
|
|
98
|
+
body = _jsx(ApprovalCard, { approval: data.request, onDecide: decide });
|
|
99
|
+
}
|
|
100
|
+
else if (data.state === "executed") {
|
|
101
|
+
body = executedCard(summary, data.outcome);
|
|
102
|
+
}
|
|
103
|
+
else if (data.state === "declined") {
|
|
104
|
+
body = _jsx(ResolvedApprovalCard, { summary: summary, ok: false, line: "Declined \u2014 nothing ran" });
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
body = _jsx(ResolvedApprovalCard, { summary: summary, ok: false, line: "Expired \u2014 no longer waiting for approval" });
|
|
108
|
+
}
|
|
109
|
+
return (_jsx(ChromeRoot, { children: _jsx("div", { "data-vendo-embed": "approval", children: body }) }));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Inline generated app (`vendo/app-ref@1`): the build-beat bar while the
|
|
113
|
+
* build streams, then the live app. In-app interactions go over the wire
|
|
114
|
+
* (`apps.call`), never through the host's agent loop.
|
|
115
|
+
*/
|
|
116
|
+
export function VendoAppEmbed({ refValue }) {
|
|
117
|
+
const { client, components } = useVendoContext();
|
|
118
|
+
const { appId, title } = refValue;
|
|
119
|
+
const [surface, setSurface] = useState();
|
|
120
|
+
const [failed, setFailed] = useState();
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
setSurface(undefined);
|
|
123
|
+
setFailed(undefined);
|
|
124
|
+
const startedAt = Date.now();
|
|
125
|
+
let cancelled = false;
|
|
126
|
+
let timer;
|
|
127
|
+
// Self-scheduling poll (useResource's pacing rule): the next attempt is
|
|
128
|
+
// armed only after the current one settles. `vendo_create_app` returns
|
|
129
|
+
// fast and the build streams server-side, so until there is an app to
|
|
130
|
+
// serve the flagged poll answers a quiet `{kind:"pending"}` (a wire that
|
|
131
|
+
// predates the flag still 404s — the catch arm keeps the same cadence, so
|
|
132
|
+
// older servers only lose the quiet console). Keep asking until the app
|
|
133
|
+
// lands or the deadline turns the beat into the failed vocabulary.
|
|
134
|
+
const attempt = async () => {
|
|
135
|
+
try {
|
|
136
|
+
const next = await client.apps.open(appId, { pending: true });
|
|
137
|
+
if (cancelled)
|
|
138
|
+
return;
|
|
139
|
+
if (next.kind !== "pending") {
|
|
140
|
+
setSurface(next);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (Date.now() - startedAt >= APP_BUILD_DEADLINE_MS) {
|
|
144
|
+
setFailed(new Error(`app never became servable: ${appId}`));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (reason) {
|
|
149
|
+
if (cancelled)
|
|
150
|
+
return;
|
|
151
|
+
if (Date.now() - startedAt >= APP_BUILD_DEADLINE_MS) {
|
|
152
|
+
setFailed(asError(reason));
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
timer = setTimeout(() => void attempt(), APP_POLL_MS);
|
|
157
|
+
};
|
|
158
|
+
void attempt();
|
|
159
|
+
return () => {
|
|
160
|
+
cancelled = true;
|
|
161
|
+
if (timer !== undefined)
|
|
162
|
+
clearTimeout(timer);
|
|
163
|
+
};
|
|
164
|
+
}, [client, appId]);
|
|
165
|
+
const building = surface === undefined && failed === undefined;
|
|
166
|
+
return (_jsx(ChromeRoot, { children: _jsxs("div", { className: "fl-uihost fl-appcard", "data-vendo-embed": "app", children: [_jsxs("div", { className: "fl-appcard-bar", "data-state": building ? "building" : "ready", children: [_jsx("span", { className: "fl-appcard-dot", "aria-hidden": "true" }), _jsxs("span", { className: "fl-boot-labels fl-appcard-name", children: [_jsxs("span", { className: "fl-boot-building", "aria-hidden": !building, children: ["Building ", title, "\u2026"] }), _jsx("span", { className: "fl-boot-ready", "aria-hidden": building, children: title })] }), _jsx("span", { className: "fl-boot-hairline", "aria-hidden": "true" })] }), _jsx("div", { className: "fl-appcard-body", children: surface !== undefined ? (_jsx(AppFrame, { surface: surface, components: components, onAction: ({ action, payload }) => client.apps.call(appId, action, payload ?? {}) })) : failed !== undefined ? (_jsxs(BeatLine, { state: "error", children: [title, " \u2014 couldn't finish"] })) : (_jsxs("span", { className: "fl-slot-skel", role: "status", "aria-label": `Building ${title}`, children: [_jsx("span", { className: "fl-skel-line", style: { width: "54%" } }), _jsx("span", { className: "fl-skel-line", style: { width: "78%" } }), _jsx("span", { className: "fl-skel-line", style: { width: "42%" } })] })) })] }) }));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The dispatcher: give it any `vendo_*` tool output and it renders the right
|
|
170
|
+
* embed by `parseVendoToolEnvelope` — or nothing for plain data (the action
|
|
171
|
+
* executed cleanly; the agent already consumed the result).
|
|
172
|
+
*/
|
|
173
|
+
export function VendoToolResult({ output }) {
|
|
174
|
+
const envelope = parseVendoToolEnvelope(output);
|
|
175
|
+
if (envelope === null)
|
|
176
|
+
return null;
|
|
177
|
+
return envelope.kind === VENDO_APP_REF_KIND
|
|
178
|
+
? _jsx(VendoAppEmbed, { refValue: envelope })
|
|
179
|
+
: _jsx(VendoApprovalEmbed, { refValue: envelope });
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=embeds.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeds.js","sourceRoot":"","sources":["../../src/chrome/embeds.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface FluidThinkingProps {
|
|
2
|
+
/** Accessible label for the working state. */
|
|
3
|
+
label?: string;
|
|
4
|
+
/** Drop diameter in px (fluidkit Thinking `size`). */
|
|
5
|
+
size?: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The agent-liveness indicator. fluidkit is an enhancement layer: the legacy
|
|
9
|
+
* static dots paint immediately (and are all reduced-motion CSS ever animates),
|
|
10
|
+
* then fluidkit's metaball Thinking takes over once its chunk resolves. If the
|
|
11
|
+
* library is missing or fails to load, the dots simply stay — the shell never
|
|
12
|
+
* depends on it to function.
|
|
13
|
+
*/
|
|
14
|
+
export declare function FluidThinking({ label, size }: FluidThinkingProps): import("react").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=fluid-thinking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluid-thinking.d.ts","sourceRoot":"","sources":["../../src/chrome/fluid-thinking.tsx"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,KAAiB,EAAE,IAAQ,EAAE,EAAE,kBAAkB,+BAoChF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
// Module-level so the import (or its failure) is paid once per session, not
|
|
4
|
+
// once per streaming turn. `undefined` = not attempted, `null` = unavailable.
|
|
5
|
+
let cached;
|
|
6
|
+
/**
|
|
7
|
+
* The agent-liveness indicator. fluidkit is an enhancement layer: the legacy
|
|
8
|
+
* static dots paint immediately (and are all reduced-motion CSS ever animates),
|
|
9
|
+
* then fluidkit's metaball Thinking takes over once its chunk resolves. If the
|
|
10
|
+
* library is missing or fails to load, the dots simply stay — the shell never
|
|
11
|
+
* depends on it to function.
|
|
12
|
+
*/
|
|
13
|
+
export function FluidThinking({ label = "Working", size = 9 }) {
|
|
14
|
+
// Initializer form: the cached value is itself a function component, and a
|
|
15
|
+
// bare function passed to useState would be invoked as a lazy initializer.
|
|
16
|
+
const [Thinking, setThinking] = useState(() => cached ?? null);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (cached !== undefined)
|
|
19
|
+
return;
|
|
20
|
+
let alive = true;
|
|
21
|
+
import("fluidkit").then((mod) => {
|
|
22
|
+
cached = mod.Thinking;
|
|
23
|
+
if (alive)
|
|
24
|
+
setThinking(() => mod.Thinking);
|
|
25
|
+
}, () => {
|
|
26
|
+
cached = null;
|
|
27
|
+
});
|
|
28
|
+
return () => {
|
|
29
|
+
alive = false;
|
|
30
|
+
};
|
|
31
|
+
}, []);
|
|
32
|
+
if (!Thinking) {
|
|
33
|
+
return (_jsxs("div", { className: "fl-typing", "aria-label": label, children: [_jsx("span", {}), _jsx("span", {}), _jsx("span", {})] }));
|
|
34
|
+
}
|
|
35
|
+
return (_jsx("div", { className: "fl-thinking", children: _jsx(Thinking, { label: label, material: "flat", size: size }) }));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=fluid-thinking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fluid-thinking.js","sourceRoot":"","sources":["../../src/chrome/fluid-thinking.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;AAKhE,4EAA4E;AAC5E,8EAA8E;AAC9E,IAAI,MAA4C,CAAC;AASjD;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,IAAI,GAAG,CAAC,EAAsB;IAC/E,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAA2B,GAAG,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;IAEzF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CACrB,CAAC,GAAG,EAAE,EAAE;YACN,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;YACtB,IAAI,KAAK;gBAAE,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC,EACD,GAAG,EAAE;YACH,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC,CACF,CAAC;QACF,OAAO,GAAG,EAAE;YACV,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CACL,eAAK,SAAS,EAAC,WAAW,gBAAa,KAAK,aAC1C,gBAAQ,EACR,gBAAQ,EACR,gBAAQ,IACJ,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,cAAK,SAAS,EAAC,aAAa,YAC1B,KAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAC,MAAM,EAAC,IAAI,EAAE,IAAI,GAAI,GAClD,CACP,CAAC;AACJ,CAAC"}
|