@abot-ai/runtime 1.7.0 → 1.8.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/dist/src/capabilities/tool-request-resources.d.ts +3 -0
- package/dist/src/cli/abot.js +2 -0
- package/dist/src/cli/host-companion-bundle.mjs +751 -333
- package/dist/src/computer-access/collection-consent.d.ts +9 -0
- package/dist/src/computer-access/collection-consent.js +47 -0
- package/dist/src/computer-access/command-output-capture.d.ts +17 -6
- package/dist/src/computer-access/command-output-capture.js +134 -68
- package/dist/src/computer-access/command-output-protection.d.ts +17 -0
- package/dist/src/computer-access/command-output-protection.js +59 -0
- package/dist/src/computer-access/companion/command-output.d.ts +1 -0
- package/dist/src/computer-access/companion/command-output.js +23 -6
- package/dist/src/computer-access/companion/install-link-macos.js +2 -1
- package/dist/src/computer-access/companion/native-notifications.js +3 -2
- package/dist/src/computer-access/companion/native-session.js +6 -2
- package/dist/src/computer-access/companion/observation-filter.js +2 -26
- package/dist/src/computer-access/companion/observation-process.d.ts +2 -0
- package/dist/src/computer-access/companion/observation-process.js +51 -25
- package/dist/src/computer-access/companion/observation-redaction.d.ts +2 -7
- package/dist/src/computer-access/companion/observation-redaction.js +2 -111
- package/dist/src/computer-access/companion/secret-protection-protocol.d.ts +6 -0
- package/dist/src/computer-access/companion/secret-protection-protocol.js +6 -0
- package/dist/src/computer-access/computer/companion-sessions.js +7 -6
- package/dist/src/computer-access/computer/unix-native-process.js +23 -11
- package/dist/src/computer-access/handlers.d.ts +2 -1
- package/dist/src/computer-access/handlers.js +79 -11
- package/dist/src/computer-access/host-observation.d.ts +3 -3
- package/dist/src/computer-access/native-observation-connection.d.ts +12 -0
- package/dist/src/computer-access/native-observation-connection.js +78 -0
- package/dist/src/computer-access/native-observation-ownership.d.ts +6 -0
- package/dist/src/computer-access/native-observation-ownership.js +55 -0
- package/dist/src/computer-access/native-observation-shutdown.d.ts +7 -0
- package/dist/src/computer-access/native-observation-shutdown.js +58 -0
- package/dist/src/computer-access/observation-source.d.ts +6 -0
- package/dist/src/computer-access/observation-source.js +10 -0
- package/dist/src/computer-access/security/desktop-result.d.ts +8 -0
- package/dist/src/computer-access/security/desktop-result.js +146 -0
- package/dist/src/computer-access/security/observed-error.d.ts +2 -0
- package/dist/src/computer-access/security/observed-error.js +10 -0
- package/dist/src/computer-access/security/secret-text.d.ts +7 -0
- package/dist/src/computer-access/security/secret-text.js +111 -0
- package/dist/src/computer-access/security/system-results.d.ts +2 -0
- package/dist/src/computer-access/security/system-results.js +53 -0
- package/dist/src/computer-access/system-result-protection.d.ts +11 -0
- package/dist/src/computer-access/system-result-protection.js +1 -0
- package/dist/src/model-gateway/observability/provider-response-capture.d.ts +60 -0
- package/dist/src/model-gateway/observability/provider-response-capture.js +68 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.d.ts +7 -0
- package/dist/src/model-gateway/observability/provider-response-prefix.js +14 -0
- package/dist/src/model-gateway/observability/provider-response-tail.d.ts +8 -0
- package/dist/src/model-gateway/observability/provider-response-tail.js +28 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.d.ts +30 -0
- package/dist/src/model-gateway/observability/provider-sse-diagnostics.js +119 -0
- package/dist/src/model-gateway/observability/provider-trace.js +30 -8
- package/dist/src/model-gateway/providers/ollama/adapter.js +8 -2
- package/dist/src/model-gateway/providers/ollama/stream-normalizer.js +70 -50
- package/dist/src/model-gateway/providers/ollama/stream-termination.d.ts +6 -0
- package/dist/src/model-gateway/providers/ollama/stream-termination.js +20 -0
- package/dist/src/model-gateway/providers/openai/adapter.js +9 -7
- package/dist/src/model-gateway/providers/openai/diagnostics.d.ts +0 -1
- package/dist/src/model-gateway/providers/openai/diagnostics.js +0 -9
- package/dist/src/model-gateway/providers/openai/function-output.d.ts +11 -0
- package/dist/src/model-gateway/providers/openai/function-output.js +37 -0
- package/dist/src/model-gateway/providers/openai/function-result.d.ts +7 -0
- package/dist/src/model-gateway/providers/openai/function-result.js +35 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.d.ts +3 -0
- package/dist/src/model-gateway/providers/openai/message-output-policy.js +16 -0
- package/dist/src/model-gateway/providers/openai/payload.d.ts +0 -2
- package/dist/src/model-gateway/providers/openai/payload.js +6 -23
- package/dist/src/model-gateway/providers/openai/response-lifetime.d.ts +2 -0
- package/dist/src/model-gateway/providers/openai/response-lifetime.js +64 -0
- package/dist/src/model-gateway/providers/openai/sse-data.d.ts +9 -0
- package/dist/src/model-gateway/providers/openai/sse-data.js +67 -0
- package/dist/src/model-gateway/providers/openai/stream-normalizer.d.ts +10 -22
- package/dist/src/model-gateway/providers/openai/stream-normalizer.js +78 -79
- package/dist/src/model-gateway/providers/openai/stream.js +13 -41
- package/dist/src/model-gateway/providers/openai/structured-message-output.d.ts +42 -0
- package/dist/src/model-gateway/providers/openai/structured-message-output.js +175 -0
- package/dist/src/model-gateway/server.js +5 -1
- package/dist/src/plugin-contract/index.d.ts +1 -0
- package/dist/src/plugin-contract/index.js +1 -0
- package/dist/src/plugin-contract/manifest.d.ts +2 -0
- package/dist/src/plugin-contract/manifest.js +1 -0
- package/dist/src/plugin-contract/platform-compatibility.d.ts +16 -0
- package/dist/src/plugin-contract/platform-compatibility.js +3 -0
- package/dist/src/plugin-sdk/computer-access.d.ts +4 -0
- package/dist/src/plugin-sdk/computer-access.js +1 -0
- package/dist/src/plugin-sdk/files-windows/process.d.ts +3 -0
- package/dist/src/plugin-sdk/files-windows/process.js +93 -0
- package/dist/src/plugin-sdk/files-windows/read-script.d.ts +1 -0
- package/dist/src/plugin-sdk/files-windows/read-script.js +43 -0
- package/dist/src/plugin-sdk/files-windows/read.d.ts +6 -0
- package/dist/src/plugin-sdk/files-windows/read.js +56 -0
- package/dist/src/plugin-sdk/files-windows/result.d.ts +4 -0
- package/dist/src/plugin-sdk/files-windows/result.js +67 -0
- package/dist/src/plugin-sdk/files.js +4 -0
- package/dist/src/plugin-sdk/index.d.ts +1 -0
- package/dist/src/plugin-sdk/index.js +1 -0
- package/dist/src/plugin-sdk/mutation-result.d.ts +7 -0
- package/dist/src/plugin-sdk/mutation-result.js +11 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/acquisition.js +20 -3
- package/dist/src/runtime/adapters/long-term-memory/file-lock/owner-record.js +3 -1
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.d.ts +3 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/path-observation.js +20 -0
- package/dist/src/runtime/adapters/long-term-memory/file-lock/snapshot.js +7 -3
- package/dist/src/runtime/adapters/passive-learning-runtime.d.ts +1 -1
- package/dist/src/runtime/adapters/passive-learning-runtime.js +3 -3
- package/dist/src/runtime/adapters/runtime-observation-connection.d.ts +5 -0
- package/dist/src/runtime/adapters/runtime-observation-connection.js +13 -0
- package/dist/src/runtime/local-host/windows-private-access.js +2 -0
- package/dist/src/runtime/passive-learning/application-catalog.js +3 -1
- package/dist/src/runtime/passive-learning/collection-source.js +7 -0
- package/dist/src/runtime/passive-learning/service.js +2 -3
- package/dist/src/runtime/passive-learning/status-projection.d.ts +2 -0
- package/dist/src/runtime/passive-learning/status-projection.js +9 -0
- package/dist/src/runtime/plugins/installation/package.d.ts +8 -0
- package/dist/src/runtime/plugins/installation/package.js +2 -0
- package/dist/src/runtime/plugins/installation/service.d.ts +7 -0
- package/dist/src/runtime/plugins/loader.js +24 -14
- package/dist/src/runtime/plugins/manifest-platform-compatibility.d.ts +2 -0
- package/dist/src/runtime/plugins/manifest-platform-compatibility.js +39 -0
- package/dist/src/runtime/plugins/manifest-validator.js +9 -1
- package/dist/src/runtime/plugins/platform-compatibility.d.ts +4 -0
- package/dist/src/runtime/plugins/platform-compatibility.js +44 -0
- package/dist/src/runtime/request/approval-wait/activation-events.js +19 -7
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.d.ts +20 -0
- package/dist/src/runtime/request/approval-wait/execution-compaction-restore.js +118 -0
- package/dist/src/runtime/request/approval-wait/super-compaction-restore.js +2 -1
- package/dist/src/runtime/request/prepared-execution.js +3 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.d.ts +6 -0
- package/dist/src/runtime/steps/execution-agent/capability-result-context.js +29 -0
- package/dist/src/runtime/steps/execution-agent/format.js +2 -3
- package/dist/src/runtime/steps/execution-agent/input.js +1 -1
- package/dist/src/runtime/steps/execution-agent/prompt.js +5 -5
- package/dist/src/runtime/steps/execution-agent/response-prompt.js +1 -0
- package/dist/src/runtime/steps/execution-agent/state-context.d.ts +2 -3
- package/dist/src/runtime/steps/execution-agent/state-context.js +26 -35
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.d.ts +1 -3
- package/dist/src/runtime/steps/execution-agent/work-plan-contract.js +0 -55
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.d.ts +3 -0
- package/dist/src/runtime/steps/execution-agent/work-plan-schema.js +61 -0
- package/dist/src/sessions/durable-session-commit.js +3 -3
- package/dist/src/sessions/prepared-session-replacement.d.ts +6 -0
- package/dist/src/sessions/prepared-session-replacement.js +46 -0
- package/dist/src/sessions/session-store.js +3 -3
- package/dist/src/shared/passive-observation-self-exclusion.d.ts +5 -0
- package/dist/src/shared/passive-observation-self-exclusion.js +37 -0
- package/dist/src/shared/windows-file-io/authority-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/authority-script.js +94 -0
- package/dist/src/shared/windows-file-io/native-script.d.ts +2 -0
- package/dist/src/shared/windows-file-io/native-script.js +120 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.d.ts +1 -0
- package/dist/src/shared/windows-file-io/read-bytes-script.js +18 -0
- package/dist/src/shared/windows-job-object.d.ts +2 -0
- package/dist/src/shared/windows-job-object.js +66 -0
- package/dist/src/web-ui/app/app-bootstrap.js +14 -1
- package/dist/src/web-ui/app/app-state.js +0 -7
- package/dist/src/web-ui/app/app.js +53 -156
- package/dist/src/web-ui/app/components/automations/node-inspector.js +3 -2
- package/dist/src/web-ui/app/components/automations/step-editor-dialog.js +3 -0
- package/dist/src/web-ui/app/components/composer-submission-notice.js +50 -0
- package/dist/src/web-ui/app/components/config-workspace/model-plugin-permissions.js +7 -1
- package/dist/src/web-ui/app/components/config-workspace/workspace-mutations.js +22 -2
- package/dist/src/web-ui/app/components/home-guidance/daily-review.js +2 -2
- package/dist/src/web-ui/app/components/home-guidance/home-guidance.js +20 -6
- package/dist/src/web-ui/app/components/model-setup/context-window-feedback.js +53 -0
- package/dist/src/web-ui/app/components/model-setup/save-flow.js +3 -1
- package/dist/src/web-ui/app/components/model-setup/save-outcome.js +1 -0
- package/dist/src/web-ui/app/components/model-setup/wizard.js +12 -0
- package/dist/src/web-ui/app/components/passive-learning/activity-controls.js +4 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-access.js +35 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-dialog.js +59 -0
- package/dist/src/web-ui/app/components/passive-learning/collection-consent-gate.js +94 -0
- package/dist/src/web-ui/app/components/passive-learning/computer-update-notice.js +6 -0
- package/dist/src/web-ui/app/components/passive-learning/failure-copy.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/home.js +7 -2
- package/dist/src/web-ui/app/components/passive-learning/macos-collection-restart-notice.js +1 -0
- package/dist/src/web-ui/app/components/passive-learning/memory.js +2 -4
- package/dist/src/web-ui/app/components/passive-learning/workspace-view.js +2 -2
- package/dist/src/web-ui/app/components/plugins/compatibility.js +13 -0
- package/dist/src/web-ui/app/components/plugins/discovery-rendering.js +9 -1
- package/dist/src/web-ui/app/components/plugins/installation-compatibility.js +7 -0
- package/dist/src/web-ui/app/components/plugins/installation.js +2 -1
- package/dist/src/web-ui/app/components/plugins/rendering.js +3 -0
- package/dist/src/web-ui/app/components/reasoning-override-prompt.js +82 -0
- package/dist/src/web-ui/app/components/runtime-config-activation.js +22 -8
- package/dist/src/web-ui/app/components/runtime-setup/optional-steps.js +7 -4
- package/dist/src/web-ui/app/components/runtime-setup/plugins.js +3 -1
- package/dist/src/web-ui/app/components/runtime-setup/rendering.js +6 -4
- package/dist/src/web-ui/app/components/runtime-setup-guide.d.ts +1 -0
- package/dist/src/web-ui/app/components/schedules/form.js +10 -8
- package/dist/src/web-ui/app/components/schedules/workspace.js +23 -4
- package/dist/src/web-ui/app/components/session-sidebar-sections.js +2 -2
- package/dist/src/web-ui/app/components/spark-chat/handoff-actions.js +9 -3
- package/dist/src/web-ui/app/components/spark-chat/placement.js +4 -7
- package/dist/src/web-ui/app/components/spark-chat/settings.js +7 -3
- package/dist/src/web-ui/app/components/system-host/macos-permissions.js +2 -0
- package/dist/src/web-ui/app/components/system-host/native-windows-access.js +50 -0
- package/dist/src/web-ui/app/components/system-host/rendering.js +3 -0
- package/dist/src/web-ui/app/components/workspace-storage-notice.js +37 -0
- package/dist/src/web-ui/app/configuration-environment-refresh.js +27 -34
- package/dist/src/web-ui/app/configuration-feature.js +9 -1
- package/dist/src/web-ui/app/controllers/app-event-bindings.js +38 -105
- package/dist/src/web-ui/app/controllers/chat-request-controller.d.ts +28 -0
- package/dist/src/web-ui/app/controllers/chat-request-controller.js +34 -66
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.d.ts +15 -40
- package/dist/src/web-ui/app/controllers/composer-attachments-controller.js +26 -69
- package/dist/src/web-ui/app/controllers/composer-draft-view.d.ts +27 -0
- package/dist/src/web-ui/app/controllers/composer-draft-view.js +48 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.d.ts +55 -0
- package/dist/src/web-ui/app/controllers/composer-drafts.js +120 -0
- package/dist/src/web-ui/app/controllers/composer-feature.d.ts +65 -0
- package/dist/src/web-ui/app/controllers/composer-feature.js +124 -0
- package/dist/src/web-ui/app/controllers/composer-queue-controller.d.ts +33 -94
- package/dist/src/web-ui/app/controllers/composer-queue-controller.js +185 -251
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.d.ts +48 -0
- package/dist/src/web-ui/app/controllers/composer-submission-lifecycle.js +97 -0
- package/dist/src/web-ui/app/controllers/composer-submit-controller.d.ts +30 -61
- package/dist/src/web-ui/app/controllers/composer-submit-controller.js +56 -138
- package/dist/src/web-ui/app/controllers/composer-surface-controller.js +6 -0
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.d.ts +22 -40
- package/dist/src/web-ui/app/controllers/composer-workspace-controller.js +49 -165
- package/dist/src/web-ui/app/controllers/conversation-navigation-intent.js +15 -0
- package/dist/src/web-ui/app/controllers/conversation-request-hydration.js +20 -17
- package/dist/src/web-ui/app/controllers/conversation-session-controller.d.ts +1 -2
- package/dist/src/web-ui/app/controllers/conversation-session-controller.js +49 -22
- package/dist/src/web-ui/app/controllers/conversation-workspace-activation.js +27 -0
- package/dist/src/web-ui/app/controllers/daily-memory-review.js +15 -16
- package/dist/src/web-ui/app/controllers/environment-transition.js +126 -0
- package/dist/src/web-ui/app/controllers/environment-workspace-preparation.js +18 -0
- package/dist/src/web-ui/app/controllers/home-composer-feature.d.ts +14 -36
- package/dist/src/web-ui/app/controllers/home-composer-feature.js +17 -114
- package/dist/src/web-ui/app/controllers/home-conversation-activation.js +6 -8
- package/dist/src/web-ui/app/controllers/passive-learning-controller.js +56 -0
- package/dist/src/web-ui/app/controllers/projects-controller.d.ts +1 -1
- package/dist/src/web-ui/app/controllers/projects-controller.js +6 -1
- package/dist/src/web-ui/app/controllers/reasoning-mode-controller.js +174 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.d.ts +7 -0
- package/dist/src/web-ui/app/controllers/runtime-selection-controller.js +20 -155
- package/dist/src/web-ui/app/controllers/session-controller.js +33 -17
- package/dist/src/web-ui/app/controllers/session-pin-updates.js +14 -0
- package/dist/src/web-ui/app/controllers/session-sidebar-controller.js +12 -14
- package/dist/src/web-ui/app/controllers/spark-chat-sync.js +2 -2
- package/dist/src/web-ui/app/controllers/steer-controller.js +9 -7
- package/dist/src/web-ui/app/controllers/tool-permission-mode-controller.js +1 -1
- package/dist/src/web-ui/app/controllers/workspace-conversation-opener.js +34 -0
- package/dist/src/web-ui/app/dashboard-feature.js +3 -2
- package/dist/src/web-ui/app/lib/reasoning-controls.js +35 -0
- package/dist/src/web-ui/app/lib/session-composer-queue-ownership.js +58 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.d.ts +12 -0
- package/dist/src/web-ui/app/lib/session-composer-queue.js +25 -6
- package/dist/src/web-ui/app/passive-learning-feature.js +16 -3
- package/dist/src/web-ui/app/schedules-feature.js +5 -3
- package/dist/src/web-ui/app/services/client-preferences.d.ts +18 -10
- package/dist/src/web-ui/app/services/client-preferences.js +25 -16
- package/dist/src/web-ui/app/services/home-guidance-preferences.js +13 -13
- package/dist/src/web-ui/app/services/reasoning-override.js +12 -0
- package/dist/src/web-ui/app/services/runtime-web-client/automations.js +10 -2
- package/dist/src/web-ui/app/services/runtime-web-client/memory.js +7 -2
- package/dist/src/web-ui/app/services/runtime-web-client/system-host.js +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.d.ts +2 -0
- package/dist/src/web-ui/app/services/runtime-web-client.js +2 -0
- package/dist/src/web-ui/app/services/server-composer-queue.js +32 -0
- package/dist/src/web-ui/app/services/session-sidebar-preferences.js +5 -5
- package/dist/src/web-ui/app/services/workspace-state-storage.js +116 -0
- package/dist/src/web-ui/app/services/workspace-state.js +27 -0
- package/dist/src/web-ui/app/spark-chat-conversation.js +34 -45
- package/dist/src/web-ui/app/spark-chat-feature.js +10 -4
- package/dist/src/web-ui/app/styles/21-composer-controls.css +16 -0
- package/dist/src/web-ui/app/styles/41-plugin-management.css +8 -0
- package/dist/src/web-ui/app/styles/42-model-plugin-permissions.css +1 -0
- package/dist/src/web-ui/app/styles/49-collection-consent.css +30 -0
- package/dist/src/web-ui/app/styles/64-workspace-storage.css +23 -0
- package/dist/src/web-ui/app/styles.css +2 -0
- package/dist/src/web-ui/client-state/contracts.d.ts +15 -0
- package/dist/src/web-ui/client-state/contracts.js +13 -0
- package/dist/src/web-ui/client-state/preference-shapes.d.ts +2 -0
- package/dist/src/web-ui/client-state/preference-shapes.js +80 -0
- package/dist/src/web-ui/client-state/preferences.d.ts +3 -0
- package/dist/src/web-ui/client-state/preferences.js +84 -0
- package/dist/src/web-ui/client-state/queue.d.ts +3 -0
- package/dist/src/web-ui/client-state/queue.js +43 -0
- package/dist/src/web-ui/client-state/routes.d.ts +7 -0
- package/dist/src/web-ui/client-state/routes.js +58 -0
- package/dist/src/web-ui/client-state/store.d.ts +14 -0
- package/dist/src/web-ui/client-state/store.js +88 -0
- package/dist/src/web-ui/local-runtime/configuration-activation-source.js +2 -0
- package/dist/src/web-ui/local-runtime/http.js +11 -2
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.d.ts +14 -0
- package/dist/src/web-ui/local-runtime/model-context-capacity-error.js +28 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.d.ts +15 -0
- package/dist/src/web-ui/local-runtime/model-setup-context-window.js +25 -0
- package/dist/src/web-ui/local-runtime/model-setup-routes.js +2 -0
- package/dist/src/web-ui/local-runtime/model-setup-service.js +5 -2
- package/dist/src/web-ui/local-runtime/model-setup-validation.d.ts +1 -0
- package/dist/src/web-ui/local-runtime/model-setup-validation.js +14 -7
- package/dist/src/web-ui/local-runtime/request-body-error.d.ts +11 -0
- package/dist/src/web-ui/local-runtime/request-body-error.js +14 -0
- package/dist/src/web-ui/local-runtime/request-control-observation.js +2 -2
- package/dist/src/web-ui/local-runtime/request-execution.js +18 -18
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.d.ts +2 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-connection-edit.js +35 -22
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.d.ts +2 -9
- package/dist/src/web-ui/local-runtime/runtime-setup-context-window.js +4 -27
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.d.ts +15 -1
- package/dist/src/web-ui/local-runtime/runtime-setup-credentials.js +30 -11
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.d.ts +20 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-files.js +104 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.d.ts +29 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-journal.js +151 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.d.ts +7 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-recovery.js +87 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.d.ts +3 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-edit-transaction.js +37 -0
- package/dist/src/web-ui/local-runtime/runtime-setup-service.js +4 -0
- package/dist/src/web-ui/local-runtime-backend.js +14 -0
- package/dist/src/web-ui/plugin-management-catalog.d.ts +3 -1
- package/dist/src/web-ui/plugin-management-catalog.js +3 -1
- package/dist/src/web-ui/plugin-management-service.d.ts +1 -0
- package/dist/src/web-ui/plugin-removal-service.d.ts +1 -0
- package/dist/src/web-ui/server-readiness.d.ts +3 -0
- package/dist/src/web-ui/server-readiness.js +36 -0
- package/dist/src/web-ui/server.d.ts +2 -0
- package/dist/src/web-ui/server.js +23 -1
- package/dist/src/web-ui/system-host-service.js +13 -2
- package/dist/src/web-ui/system-host-setup/collection-consent-route.d.ts +3 -0
- package/dist/src/web-ui/system-host-setup/collection-consent-route.js +30 -0
- package/docs/installation.md +44 -5
- package/docs/plugins.md +145 -4
- package/docs/tool-execution-result-evidence-contract.md +57 -0
- package/docs/windows-companion-store.md +5 -0
- package/package.json +4 -2
- package/plugins/capability-brief/plugin.json +4 -0
- package/plugins/code-outline/README.md +20 -0
- package/plugins/code-outline/plugin.json +1 -0
- package/plugins/code-outline/source/index.ts +16 -20
- package/plugins/code-outline/source/read-failure.ts +40 -0
- package/plugins/code-outline/src/index.cjs +614 -29
- package/plugins/document-reader/README.md +33 -0
- package/plugins/document-reader/plugin.json +1 -0
- package/plugins/document-reader/source/pdf-contract.ts +57 -0
- package/plugins/document-reader/source/pdf-parser.ts +139 -0
- package/plugins/document-reader/source/pdf-process-main.ts +56 -0
- package/plugins/document-reader/source/pdf-process.ts +207 -0
- package/plugins/document-reader/source/pdf-result.ts +79 -0
- package/plugins/document-reader/source/pdf-worker.ts +39 -303
- package/plugins/document-reader/source/pdf.ts +4 -1
- package/plugins/document-reader/source/read-failure.ts +37 -0
- package/plugins/document-reader/source/reader.ts +3 -19
- package/plugins/document-reader/src/index.cjs +995 -211
- package/plugins/exec/README.md +19 -0
- package/plugins/exec/plugin.json +4 -3
- package/plugins/exec/skills/exec_skill/SKILL.md +3 -2
- package/plugins/exec/source/filesystem-file-observer.ts +98 -0
- package/plugins/exec/source/filesystem-observer.ts +8 -79
- package/plugins/exec/source/output-files.ts +12 -6
- package/plugins/exec/source/paths.ts +3 -1
- package/plugins/exec/source/process-manager.ts +8 -24
- package/plugins/exec/source/shell-platform.ts +19 -3
- package/plugins/exec/source/shell-process.ts +55 -0
- package/plugins/exec/source/windows-job-source.ts +1 -0
- package/plugins/exec/source/windows-shell-bootstrap.ts +20 -0
- package/plugins/exec/src/index.cjs +252 -96
- package/plugins/filesystem/README.md +65 -0
- package/plugins/filesystem/plugin.json +6 -2
- package/plugins/filesystem/source/atomic-write.ts +2 -0
- package/plugins/filesystem/source/bounded-io.ts +80 -306
- package/plugins/filesystem/source/directory-sample.ts +2 -0
- package/plugins/filesystem/source/errors.ts +14 -0
- package/plugins/filesystem/source/file-observation.ts +151 -0
- package/plugins/filesystem/source/file-version.ts +41 -0
- package/plugins/filesystem/source/index.ts +6 -0
- package/plugins/filesystem/source/mutation-coordinator.ts +1 -0
- package/plugins/filesystem/source/windows/authority-script.ts +1 -0
- package/plugins/filesystem/source/windows/native-script.ts +1 -0
- package/plugins/filesystem/source/windows/operations.ts +197 -0
- package/plugins/filesystem/source/windows/process.ts +214 -0
- package/plugins/filesystem/source/windows/publication-script.ts +29 -0
- package/plugins/filesystem/source/windows/read-script.ts +63 -0
- package/plugins/filesystem/source/windows/request-availability.ts +67 -0
- package/plugins/filesystem/source/windows/source.ts +42 -0
- package/plugins/filesystem/source/windows/storage-script.ts +11 -0
- package/plugins/filesystem/source/windows/streams-script.ts +24 -0
- package/plugins/filesystem/source/windows/write-script.ts +86 -0
- package/plugins/filesystem/src/index.cjs +1208 -322
- package/plugins/json-inspector/README.md +18 -0
- package/plugins/json-inspector/plugin.json +1 -0
- package/plugins/json-inspector/source/index.ts +16 -19
- package/plugins/json-inspector/source/read-failure.ts +42 -0
- package/plugins/json-inspector/src/index.cjs +612 -27
- package/plugins/local-search/README.md +29 -0
- package/plugins/local-search/plugin.json +1 -0
- package/plugins/local-search/source/errors.ts +2 -0
- package/plugins/local-search/source/paths.ts +3 -0
- package/plugins/local-search/source/ripgrep-process.ts +31 -5
- package/plugins/local-search/source/ripgrep.ts +3 -3
- package/plugins/local-search/source/windows-authority.ts +99 -0
- package/plugins/local-search/source/windows-search-lease.ts +49 -0
- package/plugins/local-search/source/windows-search-process.ts +91 -0
- package/plugins/local-search/source/windows-search-script.ts +52 -0
- package/plugins/local-search/src/index.cjs +595 -26
- package/plugins/memory/plugin.json +4 -0
- package/plugins/memory/source/lock-directory-claim.ts +56 -0
- package/plugins/memory/source/lock-owner-file.ts +71 -0
- package/plugins/memory/source/lock-path-observation.ts +26 -0
- package/plugins/memory/source/prepared-memory-replacement.ts +40 -0
- package/plugins/memory/source/store-lock.ts +12 -7
- package/plugins/memory/source/store.ts +3 -2
- package/plugins/memory/src/index.cjs +174 -25
- package/plugins/project-orientation/README.md +23 -0
- package/plugins/project-orientation/plugin.json +1 -0
- package/plugins/project-orientation/source/index.ts +12 -9
- package/plugins/project-orientation/source/inspection-failure.ts +70 -0
- package/plugins/project-orientation/source/manifest-summary.ts +9 -2
- package/plugins/project-orientation/source/tree.ts +6 -0
- package/plugins/project-orientation/src/index.cjs +647 -31
- package/plugins/system/README.md +51 -15
- package/plugins/system/plugin.json +5 -1
- package/plugins/system/skills/system_actions/SKILL.md +1 -1
- package/plugins/system/source/command-working-directory.ts +47 -0
- package/plugins/system/source/computer/handlers.ts +13 -9
- package/plugins/system/source/computer/observation-result.ts +10 -5
- package/plugins/system/source/computer/request-computers.ts +10 -3
- package/plugins/system/source/computer/request-modules.ts +3 -6
- package/plugins/system/source/computer/runtime-platform.ts +18 -0
- package/plugins/system/source/host-dispatch.ts +18 -2
- package/plugins/system/source/index.ts +5 -3
- package/plugins/system/source/local-command-output-retention.ts +16 -0
- package/plugins/system/source/local-command-output.ts +16 -8
- package/plugins/system/source/request-system-modules.ts +12 -2
- package/plugins/system/source/request-target-snapshot.ts +2 -1
- package/plugins/system/source/security/desktop-result.ts +177 -0
- package/plugins/system/source/security/observed-error.ts +10 -0
- package/plugins/system/source/security/secret-text.ts +118 -0
- package/plugins/system/source/security/system-results.ts +62 -0
- package/plugins/system/source/security/windows-output-directory.ts +82 -0
- package/plugins/system/src/index.cjs +837 -151
- package/plugins/system-probe/plugin.json +8 -2
- package/plugins/system-probe/source/disk-path.ts +8 -0
- package/plugins/system-probe/source/index.ts +10 -5
- package/plugins/system-probe/source/machine-load.ts +33 -0
- package/plugins/system-probe/source/metrics.ts +6 -8
- package/plugins/system-probe/src/index.cjs +49 -16
- package/plugins/web/plugin.json +4 -0
|
@@ -2,6 +2,7 @@ import { createEmbeddingSetupStep } from "./embedding.js";
|
|
|
2
2
|
import { createSetupPluginStep } from "./plugins.js";
|
|
3
3
|
import { createSystemHostConnectionManager } from "../system-host/manager.js";
|
|
4
4
|
import { hostSetupIsReady } from "../system-host/rendering.js";
|
|
5
|
+
import { isNativeWindowsLocalAccess } from "../system-host/native-windows-access.js";
|
|
5
6
|
|
|
6
7
|
/** Optional setup steps retain their owning services and never apply the Runtime. */
|
|
7
8
|
export function createSetupOptionalSteps({
|
|
@@ -57,9 +58,10 @@ export function createSetupOptionalSteps({
|
|
|
57
58
|
})
|
|
58
59
|
: null;
|
|
59
60
|
const readyStep = computer ? 5 : 4;
|
|
60
|
-
function
|
|
61
|
+
function hasFreshComputerSetup() {
|
|
61
62
|
if (!computer) return false;
|
|
62
63
|
if (computer.state.busy || computer.state.statusUnavailable) return false;
|
|
64
|
+
if (isNativeWindowsLocalAccess(computer.state.snapshot)) return true;
|
|
63
65
|
return hostSetupIsReady(computer.state.snapshot);
|
|
64
66
|
}
|
|
65
67
|
function projection(step) {
|
|
@@ -71,7 +73,8 @@ export function createSetupOptionalSteps({
|
|
|
71
73
|
plugins: plugins.state.snapshot,
|
|
72
74
|
hasComputerStep: Boolean(computer),
|
|
73
75
|
readyStep,
|
|
74
|
-
computer:
|
|
76
|
+
computer: hasFreshComputerSetup() ? computer.state.snapshot : null,
|
|
77
|
+
nativeWindowsAccess: hasFreshComputerSetup() && isNativeWindowsLocalAccess(computer.state.snapshot),
|
|
75
78
|
};
|
|
76
79
|
if (step === 2)
|
|
77
80
|
return {
|
|
@@ -90,7 +93,7 @@ export function createSetupOptionalSteps({
|
|
|
90
93
|
return {
|
|
91
94
|
...common,
|
|
92
95
|
content: `<div data-onboarding-computer>${computer.markup()}</div>`,
|
|
93
|
-
canContinue:
|
|
96
|
+
canContinue: hasFreshComputerSetup(),
|
|
94
97
|
};
|
|
95
98
|
return common;
|
|
96
99
|
}
|
|
@@ -111,7 +114,7 @@ export function createSetupOptionalSteps({
|
|
|
111
114
|
}
|
|
112
115
|
function canContinueComputer(step) {
|
|
113
116
|
if (step !== 4) return false;
|
|
114
|
-
return
|
|
117
|
+
return hasFreshComputerSetup();
|
|
115
118
|
}
|
|
116
119
|
return {
|
|
117
120
|
embedding,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { renderPluginPlatformNotice } from "../plugins/compatibility.js";
|
|
1
2
|
import { escapeAttribute, escapeHtml } from "../../lib/text-format.js";
|
|
2
3
|
|
|
3
4
|
function blockReason(plugin, capability) {
|
|
@@ -33,6 +34,7 @@ function renderPluginCard(plugin, busy) {
|
|
|
33
34
|
return `<li class="runtime-plugin-card">
|
|
34
35
|
${checkbox(plugin, null, busy)}
|
|
35
36
|
<p class="runtime-plugin-summary" title="${escapeAttribute(plugin.description || "")}">${escapeHtml(plugin.description || "Installed Runtime plugin.")}</p>
|
|
37
|
+
${renderPluginPlatformNotice(plugin.compatibility)}
|
|
36
38
|
<div class="runtime-plugin-tools-heading"><span>Tools</span><span>${plugin.selectedCapabilityCount} of ${capabilities.length} selected</span></div>
|
|
37
39
|
<ul class="runtime-plugin-capabilities" aria-label="${escapeAttribute(`Tools in ${plugin.id}`)}">${capabilities.map((capability) => `<li>${checkbox(plugin, capability, busy)}</li>`).join("")}</ul>
|
|
38
40
|
</li>`;
|
|
@@ -144,7 +146,7 @@ export function createSetupPluginStep({
|
|
|
144
146
|
state.snapshot?.selection?.enabled === false ||
|
|
145
147
|
state.snapshot?.selection?.deny?.includes("*");
|
|
146
148
|
return `<div class="runtime-setup-plugins">
|
|
147
|
-
<p class="runtime-setup-feedback">All installed plugins start
|
|
149
|
+
<p class="runtime-setup-feedback">All installed plugins start selected in a new setup. Host compatibility determines which plugins can load. Turn off anything you do not need.</p>
|
|
148
150
|
${globalBlocked ? '<p class="runtime-setup-feedback">An existing global policy blocks plugins. Your saved policy is preserved.</p>' : ""}
|
|
149
151
|
${state.error ? `<p class="runtime-setup-feedback error" role="alert">${escapeHtml(state.error)}</p><button type="button" class="runtime-setup-inline-action" data-runtime-setup-action="plugins-reload">Reload selection</button>` : state.message ? `<p class="runtime-setup-feedback" role="status">${escapeHtml(state.message)}</p>` : ""}
|
|
150
152
|
${state.busy ? '<p class="runtime-setup-feedback" role="status">Saving or loading plugin selection…</p>' : ""}
|
|
@@ -28,7 +28,7 @@ function readyMarkup(state, optional) {
|
|
|
28
28
|
<div><dt>Model</dt><dd>${escapeHtml(state.modelId)}</dd></div>
|
|
29
29
|
<div><dt>Context window</dt><dd>${escapeHtml(formatContextWindowTokens(state.contextWindowTokens))}</dd></div>
|
|
30
30
|
<div><dt>Embedding</dt><dd>${escapeHtml(optional.memory?.enabled ? optional.memory.model || "Configured" : "Set up later")}</dd></div>
|
|
31
|
-
<div><dt>Plugins</dt><dd>${selectedPlugins}
|
|
31
|
+
<div><dt>Plugins</dt><dd>${selectedPlugins} selected</dd></div>
|
|
32
32
|
</dl></div>`;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -79,7 +79,7 @@ function footerMarkup(state, availability, optional) {
|
|
|
79
79
|
if (state.step === 3)
|
|
80
80
|
return `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back" ${disabled}>Back</button><button type="submit" class="runtime-setup-action" ${busy || !optional.canContinue ? "disabled" : ""}>Continue</button>`;
|
|
81
81
|
if (state.step === 4 && optional.hasComputerStep)
|
|
82
|
-
return `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back">Back</button><div class="runtime-setup-footer-actions"
|
|
82
|
+
return `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back">Back</button><div class="runtime-setup-footer-actions">${optional.nativeWindowsAccess ? "" : '<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="skip-computer">Skip for now</button>'}<button type="submit" class="runtime-setup-action" ${!optional.canContinue ? "disabled" : ""}>Continue</button></div>`;
|
|
83
83
|
const secondary =
|
|
84
84
|
state.step === 1 && canEditSetupConnection(state)
|
|
85
85
|
? `<button type="button" class="runtime-setup-secondary" data-runtime-setup-action="back" ${disabled}>Back</button>`
|
|
@@ -112,11 +112,13 @@ export function renderRuntimeSetup(state, availability, optional = {}) {
|
|
|
112
112
|
const steps = [...STEP_LABELS];
|
|
113
113
|
if (optional.hasComputerStep) {
|
|
114
114
|
steps.splice(4, 0, "Computer");
|
|
115
|
-
titles.splice(4, 0, "Set up computer access");
|
|
115
|
+
titles.splice(4, 0, optional.nativeWindowsAccess ? "Your Windows computer" : "Set up computer access");
|
|
116
116
|
descriptions.splice(
|
|
117
117
|
4,
|
|
118
118
|
0,
|
|
119
|
-
|
|
119
|
+
optional.nativeWindowsAccess
|
|
120
|
+
? ""
|
|
121
|
+
: "Optional. Use applications on your computer, or set up access later in Settings.",
|
|
120
122
|
);
|
|
121
123
|
}
|
|
122
124
|
const content =
|
|
@@ -73,6 +73,7 @@ export interface RuntimeSetupGuideDependencies {
|
|
|
73
73
|
readonly loadHostConnection?: () => Promise<Record<string, unknown>>;
|
|
74
74
|
readonly connectLocalHost?: () => Promise<Record<string, unknown>>;
|
|
75
75
|
readonly createHostPairing?: () => Promise<Record<string, unknown>>;
|
|
76
|
+
readonly requestHostStoreConnection?: () => Promise<Record<string, unknown>>;
|
|
76
77
|
readonly requestHostPermissions?: (input: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
77
78
|
readonly downloadHostSetup?: (
|
|
78
79
|
platform: "windows" | "macos" | "linux",
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { renderReasoningModeField, syncReasoningModeField, retainedReasoningMode } from "../../lib/reasoning-controls.js";
|
|
1
2
|
import { escapeHtml } from "../../lib/text-format.js";
|
|
2
3
|
import { SCHEDULE_WEEKDAYS } from "../../lib/schedule-presentation.js";
|
|
3
4
|
import { scheduleErrorMessage } from "../../lib/schedule-errors.js";
|
|
@@ -88,12 +89,7 @@ export function createScheduleForm({
|
|
|
88
89
|
<label>Task prompt<textarea name="prompt" rows="5" required dir="auto" placeholder="What should ABot do when this schedule runs?">${escapeHtml(values.prompt || "")}</textarea></label>
|
|
89
90
|
<div class="schedule-form-grid">${scheduleFields(values)}</div>
|
|
90
91
|
<div class="schedule-form-grid"><label>Model<select name="modelProfileId" required><option value="">Choose a model</option>${options(modelOptions, values.modelProfileId)}</select></label>
|
|
91
|
-
|
|
92
|
-
modes
|
|
93
|
-
.filter((mode) => mode !== "auto")
|
|
94
|
-
.map((mode) => ({ value: mode, label: mode })),
|
|
95
|
-
values.agentMode || "reasoning",
|
|
96
|
-
)}</select></label></div>
|
|
92
|
+
${renderReasoningModeField(values.agentMode || "reasoning", models.find((model) => model.id === values.modelProfileId), modes.filter((mode) => mode !== "auto"))}</div>
|
|
97
93
|
<label>Tool access<select name="toolPermissionMode">${options(
|
|
98
94
|
[
|
|
99
95
|
{ value: "full_access", label: "Full" },
|
|
@@ -116,6 +112,12 @@ export function createScheduleForm({
|
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
114
|
|
|
115
|
+
const readInput = () => {
|
|
116
|
+
const data = new FormData(form);
|
|
117
|
+
data.set("agentMode", retainedReasoningMode(form, values.agentMode || "reasoning"));
|
|
118
|
+
return scheduleFormInput(data, job?.schedule);
|
|
119
|
+
};
|
|
120
|
+
fields.namedItem("modelProfileId").addEventListener("change", () => syncReasoningModeField(form, models, modes.filter((mode) => mode !== "auto")));
|
|
119
121
|
let initialInput;
|
|
120
122
|
form.querySelector("[data-cancel]").addEventListener("click", onCancel);
|
|
121
123
|
fields.namedItem("kind").addEventListener("change", syncKind);
|
|
@@ -125,7 +127,7 @@ export function createScheduleForm({
|
|
|
125
127
|
submit.disabled = true;
|
|
126
128
|
feedback.hidden = true;
|
|
127
129
|
try {
|
|
128
|
-
const currentInput =
|
|
130
|
+
const currentInput = readInput();
|
|
129
131
|
const input = job
|
|
130
132
|
? scheduleUpdateInput(currentInput, initialInput)
|
|
131
133
|
: currentInput;
|
|
@@ -137,7 +139,7 @@ export function createScheduleForm({
|
|
|
137
139
|
}
|
|
138
140
|
});
|
|
139
141
|
syncKind();
|
|
140
|
-
if (job) initialInput =
|
|
142
|
+
if (job) initialInput = readInput();
|
|
141
143
|
const initialFields = JSON.stringify([...new FormData(form)]);
|
|
142
144
|
function trackScheduleDraft() {
|
|
143
145
|
form.dataset.dirty = String(
|
|
@@ -48,12 +48,31 @@ export function createSchedulesWorkspace({
|
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
function prepareLeave() {
|
|
51
|
-
|
|
52
|
-
if (!
|
|
53
|
-
|
|
51
|
+
const prepared = prepareEnvironmentChange();
|
|
52
|
+
if (!prepared) return false;
|
|
53
|
+
prepared();
|
|
54
54
|
return true;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
function prepareEnvironmentChange() {
|
|
58
|
+
const editor = actions.snapshot().editor;
|
|
59
|
+
if (editor && !canDiscardScheduleDraft()) return null;
|
|
60
|
+
const form = details.querySelector(".schedule-editor");
|
|
61
|
+
const fingerprint = scheduleDraftFingerprint(form);
|
|
62
|
+
const commit = () => { if (editor) actions.cancelEdit(); };
|
|
63
|
+
commit.canCommit = () => {
|
|
64
|
+
if (actions.snapshot().mutation) return false;
|
|
65
|
+
if (actions.snapshot().editor !== editor) return false;
|
|
66
|
+
if (details.querySelector(".schedule-editor") !== form) return false;
|
|
67
|
+
return scheduleDraftFingerprint(form) === fingerprint;
|
|
68
|
+
};
|
|
69
|
+
return commit;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function scheduleDraftFingerprint(form) {
|
|
73
|
+
return form ? JSON.stringify([...new FormData(form)]) : "";
|
|
74
|
+
}
|
|
75
|
+
|
|
57
76
|
function canDiscardScheduleDraft() {
|
|
58
77
|
const form = details.querySelector(".schedule-editor");
|
|
59
78
|
if (form?.dataset.dirty !== "true") return true;
|
|
@@ -156,5 +175,5 @@ export function createSchedulesWorkspace({
|
|
|
156
175
|
editorIdentity = null;
|
|
157
176
|
renderScheduleDetails({ root: details, snapshot, actions });
|
|
158
177
|
}
|
|
159
|
-
return { render, prepareLeave };
|
|
178
|
+
return { render, prepareLeave, prepareEnvironmentChange };
|
|
160
179
|
}
|
|
@@ -7,7 +7,7 @@ export function renderSessionSidebarSections({
|
|
|
7
7
|
if (showingArchived) {
|
|
8
8
|
const notice = document.createElement("p");
|
|
9
9
|
notice.className = "session-archive-notice";
|
|
10
|
-
notice.textContent = "Archived in this
|
|
10
|
+
notice.textContent = "Archived in this ABot installation and environment. Restore a conversation from its menu.";
|
|
11
11
|
root.appendChild(notice);
|
|
12
12
|
}
|
|
13
13
|
const pinned = sessions.filter((session) => isPinned(session.id));
|
|
@@ -35,7 +35,7 @@ export function renderSessionSidebarSections({
|
|
|
35
35
|
const toggle = document.createElement("button");
|
|
36
36
|
toggle.type = "button";
|
|
37
37
|
toggle.className = "session-archive-toggle";
|
|
38
|
-
toggle.title = "Conversations archived in this
|
|
38
|
+
toggle.title = "Conversations archived in this ABot installation and environment";
|
|
39
39
|
toggle.textContent = showingArchived ? "Back to conversations" : `Archived (${archivedCount})`;
|
|
40
40
|
toggle.setAttribute("aria-pressed", String(showingArchived));
|
|
41
41
|
toggle.addEventListener("click", onToggleArchived);
|
|
@@ -12,7 +12,7 @@ function sameSourceMessage(current, source) {
|
|
|
12
12
|
|
|
13
13
|
export function createSparkHandoffActions({
|
|
14
14
|
getScope, getMessages, client, captureNavigation, onOpened, onChange = () => {},
|
|
15
|
-
notify, documentRoot = document,
|
|
15
|
+
notify, documentRoot = document, canOpen = () => true,
|
|
16
16
|
}) {
|
|
17
17
|
const pending = new Set();
|
|
18
18
|
function createNode(message) {
|
|
@@ -25,7 +25,12 @@ export function createSparkHandoffActions({
|
|
|
25
25
|
button.type = "button";
|
|
26
26
|
button.className = "spark-handoff-button";
|
|
27
27
|
button.textContent = "Open a session about this";
|
|
28
|
-
|
|
28
|
+
function canStartHandoff() {
|
|
29
|
+
if (!canOpen()) return false;
|
|
30
|
+
if (!message.sparkHandoffAvailable) return false;
|
|
31
|
+
return !pending.has(identity);
|
|
32
|
+
}
|
|
33
|
+
button.disabled = !canStartHandoff();
|
|
29
34
|
row.appendChild(button);
|
|
30
35
|
if (!message.sparkHandoffAvailable) {
|
|
31
36
|
const explanation = documentRoot.createElement("p");
|
|
@@ -39,7 +44,8 @@ export function createSparkHandoffActions({
|
|
|
39
44
|
return getMessages().some((candidate) => sameSourceMessage(candidate, message));
|
|
40
45
|
}
|
|
41
46
|
async function open() {
|
|
42
|
-
if (
|
|
47
|
+
if (!canStartHandoff()) return;
|
|
48
|
+
if (!sourceIsCurrent()) return;
|
|
43
49
|
const navigate = captureNavigation();
|
|
44
50
|
pending.add(identity); button.disabled = true;
|
|
45
51
|
try {
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { createSparkPlacementMotion } from "./motion.js";
|
|
2
|
+
import { workspaceStorage } from "../../services/workspace-state.js";
|
|
2
3
|
|
|
3
4
|
const storageKey = "abot.spark.launcher.position.v1";
|
|
4
5
|
const margin = 12;
|
|
5
6
|
const dragThreshold = 5;
|
|
6
7
|
const positionGrid = 16;
|
|
7
8
|
|
|
8
|
-
function readBrowserStorage(windowRoot) {
|
|
9
|
-
try { return windowRoot.localStorage; } catch { return null; }
|
|
10
|
-
}
|
|
11
|
-
|
|
12
9
|
function readPosition(storage) {
|
|
13
10
|
try {
|
|
14
11
|
const value = JSON.parse(storage?.getItem(storageKey) ?? "null");
|
|
@@ -31,9 +28,9 @@ function hasMovedPastDragThreshold(pointer, event) {
|
|
|
31
28
|
return Math.hypot(event.clientX - pointer.x, event.clientY - pointer.y) >= dragThreshold;
|
|
32
29
|
}
|
|
33
30
|
|
|
34
|
-
/**
|
|
31
|
+
/** Installation-owned launcher placement, clamped to the current screen. */
|
|
35
32
|
export function createSparkChatPlacement({ root, launcher, panel, notice, dockAnchor, storage, windowRoot = window }) {
|
|
36
|
-
const positionStorage = storage === undefined ?
|
|
33
|
+
const positionStorage = storage === undefined ? workspaceStorage() : storage;
|
|
37
34
|
let position = readPosition(positionStorage);
|
|
38
35
|
let pointer = null;
|
|
39
36
|
let suppressClick = false;
|
|
@@ -45,7 +42,7 @@ export function createSparkChatPlacement({ root, launcher, panel, notice, dockAn
|
|
|
45
42
|
try {
|
|
46
43
|
if (position) positionStorage?.setItem(storageKey, JSON.stringify(position));
|
|
47
44
|
else positionStorage?.removeItem(storageKey);
|
|
48
|
-
} catch { /*
|
|
45
|
+
} catch { /* The shared storage owner reports persistence failures. */ }
|
|
49
46
|
}
|
|
50
47
|
|
|
51
48
|
function placePopup(node, anchor) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { canChooseReasoning, reasoningModeOptions } from "../../lib/reasoning-controls.js";
|
|
1
2
|
import { supportsFullPlus } from "../../lib/tool-permission-mode.js";
|
|
2
3
|
|
|
3
4
|
export function createSparkChatSettings({ root, onSave, onClear, onOpen, onResetPosition, onOpenModelSettings, getAgentMode, onAgentModeChange, getWebConfig, documentRoot = document }) {
|
|
@@ -29,11 +30,12 @@ export function createSparkChatSettings({ root, onSave, onClear, onOpen, onReset
|
|
|
29
30
|
const feedback = card.querySelector("[data-spark-settings-feedback]");
|
|
30
31
|
let saved = "ask";
|
|
31
32
|
let ready = false;
|
|
33
|
+
let reasoningEnabled = false;
|
|
32
34
|
let busy = false;
|
|
33
35
|
let environmentId;
|
|
34
36
|
function controls() {
|
|
35
37
|
select.disabled = busy || !ready;
|
|
36
|
-
agentModeSelect.disabled = !ready;
|
|
38
|
+
agentModeSelect.disabled = !ready || !reasoningEnabled;
|
|
37
39
|
save.disabled = busy || !ready || select.value === saved;
|
|
38
40
|
clear.disabled = busy || !ready;
|
|
39
41
|
}
|
|
@@ -52,7 +54,7 @@ export function createSparkChatSettings({ root, onSave, onClear, onOpen, onReset
|
|
|
52
54
|
finally { if (environment === environmentId) { busy = false; controls(); } }
|
|
53
55
|
}
|
|
54
56
|
select.addEventListener("change", controls);
|
|
55
|
-
agentModeSelect.addEventListener("change", () => onAgentModeChange(agentModeSelect.value));
|
|
57
|
+
agentModeSelect.addEventListener("change", () => { if (reasoningEnabled) onAgentModeChange(agentModeSelect.value); });
|
|
56
58
|
card.querySelector("form").addEventListener("submit", (event) => {
|
|
57
59
|
event.preventDefault();
|
|
58
60
|
if (save.disabled) return;
|
|
@@ -73,7 +75,9 @@ export function createSparkChatSettings({ root, onSave, onClear, onOpen, onReset
|
|
|
73
75
|
environmentId = nextEnvironmentId; busy = false; ready = false; feedback.textContent = "";
|
|
74
76
|
select.value = configuration?.toolPermissionMode || "ask";
|
|
75
77
|
}
|
|
76
|
-
|
|
78
|
+
reasoningEnabled = canChooseReasoning(configuration);
|
|
79
|
+
agentModeSelect.innerHTML = reasoningModeOptions(getAgentMode(), reasoningEnabled);
|
|
80
|
+
agentModeSelect.title = reasoningEnabled ? "Reasoning depth" : "Enable reasoning controls for this model in Models.";
|
|
77
81
|
const next = configuration?.toolPermissionMode || "ask";
|
|
78
82
|
if (!ready || select.value === saved || busy) select.value = next;
|
|
79
83
|
saved = next; ready = Boolean(configuration?.sessionId);
|
|
@@ -6,6 +6,7 @@ function hasManagedMacPermissionRuntime(version) {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
export function macCompanionPermissionPath(snapshot) {
|
|
9
|
+
if (snapshot?.collectionSource?.mode === "native") return "";
|
|
9
10
|
if (!snapshot?.paired) return "";
|
|
10
11
|
if (snapshot.identity?.os !== "macos") return "";
|
|
11
12
|
if (!hasManagedMacPermissionRuntime(snapshot.companion?.installedVersion))
|
|
@@ -20,6 +21,7 @@ export function macCompanionPermissionPath(snapshot) {
|
|
|
20
21
|
|
|
21
22
|
/** The managed companion keeps its macOS permission subject at one private path. */
|
|
22
23
|
export function renderMacPermissionGuide(snapshot) {
|
|
24
|
+
if (snapshot?.collectionSource?.mode === "native") return "";
|
|
23
25
|
if (!snapshot?.paired) return "";
|
|
24
26
|
if (snapshot.identity?.os !== "macos") return "";
|
|
25
27
|
const version = snapshot.companion?.installedVersion;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { renderConnectionCard } from "./connection-card.js";
|
|
2
|
+
|
|
3
|
+
/** The server's native Windows facts identify local access, independently of tool readiness. */
|
|
4
|
+
export function isNativeWindowsLocalAccess(snapshot) {
|
|
5
|
+
if (snapshot?.collectionSource?.mode !== "native") return false;
|
|
6
|
+
return snapshot.collectionSource.platform === "windows";
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function shouldRenderNativeWindowsAccess(input) {
|
|
10
|
+
if (!input.supported) return false;
|
|
11
|
+
return isNativeWindowsLocalAccess(input.snapshot);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function nativeWindowsAccessPresentation(input) {
|
|
15
|
+
if (input.statusUnavailable) return {
|
|
16
|
+
title: "Check Windows access", status: "Status unavailable",
|
|
17
|
+
description: "The current local access status could not be checked. Refresh to try again.",
|
|
18
|
+
};
|
|
19
|
+
if (input.busy) return {
|
|
20
|
+
title: "Checking Windows access…", status: "Checking",
|
|
21
|
+
description: "Waiting for the current local access status…",
|
|
22
|
+
};
|
|
23
|
+
if (input.snapshot?.readiness?.directAccessReady === false) return {
|
|
24
|
+
title: "Check local Windows access", status: "Check needed",
|
|
25
|
+
description: "ABot runs directly on Windows, but direct commands could not be verified. Refresh to check again. Companion pairing is not required for local tools.",
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
title: "Windows access is local", status: "Local",
|
|
29
|
+
description: "ABot runs directly on this Windows computer. Local tools do not need Companion pairing. Compatible plugins and your permission settings determine which actions are available.",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function canCompactNativeWindowsAccess(input) {
|
|
34
|
+
if (!input.compact) return false;
|
|
35
|
+
if (input.statusUnavailable || input.busy) return false;
|
|
36
|
+
if (input.error || input.message) return false;
|
|
37
|
+
return input.snapshot?.readiness?.directAccessReady !== false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function renderNativeWindowsAccess(input) {
|
|
41
|
+
const presentation = nativeWindowsAccessPresentation(input);
|
|
42
|
+
const compact = canCompactNativeWindowsAccess(input);
|
|
43
|
+
return renderConnectionCard({
|
|
44
|
+
...presentation, ready: false, compact, disabled: input.busy,
|
|
45
|
+
actions: '<button type="button" class="system-host-card-secondary" data-system-host-refresh' +
|
|
46
|
+
(input.busy ? " disabled" : "") + '>Refresh status</button>',
|
|
47
|
+
error: input.error, message: input.message,
|
|
48
|
+
attributes: "data-system-host-native-windows",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { escapeHtml } from "../../lib/text-format.js";
|
|
2
2
|
import { renderWindowsStoreSetup, windowsStorePanelIsAvailable } from "./windows-store-setup.js";
|
|
3
3
|
import { renderConnectionCard, renderComputerMetadata } from "./connection-card.js";
|
|
4
|
+
import { shouldRenderNativeWindowsAccess, renderNativeWindowsAccess } from "./native-windows-access.js";
|
|
4
5
|
import { macPermissionSummary, renderMacPermissionPreparation } from "./macos-permission-rendering.js";
|
|
5
6
|
import {
|
|
6
7
|
renderMacSetupAction,
|
|
@@ -123,6 +124,8 @@ function canRenderCompactConnection(input) {
|
|
|
123
124
|
return true;
|
|
124
125
|
}
|
|
125
126
|
export function renderSystemHostConnection(input) {
|
|
127
|
+
if (shouldRenderNativeWindowsAccess(input))
|
|
128
|
+
return renderNativeWindowsAccess(input);
|
|
126
129
|
if (input.supported && windowsStorePanelIsAvailable(input.snapshot)) {
|
|
127
130
|
return renderWindowsStoreSetup({
|
|
128
131
|
snapshot: input.snapshot, invitation: input.windowsStoreInvitation,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export async function acknowledgeWorkspaceStorage(storage, documentRoot = document) {
|
|
2
|
+
if (storage.snapshot().introductionSeen) return;
|
|
3
|
+
const dialog = documentRoot.createElement("dialog");
|
|
4
|
+
dialog.className = "workspace-storage-notice";
|
|
5
|
+
dialog.innerHTML = `<h2>Your workspace settings stay with ABot</h2>
|
|
6
|
+
<p>Settings and queued messages are now saved with this ABot installation, across browsers and app restarts.</p>
|
|
7
|
+
<p>This is a one-time fresh start. Previous browser-only pins, archives, model choices, memory review markers and queued messages are not imported.</p>
|
|
8
|
+
<p>Your conversations, memories, configuration and read status are kept. Tool permissions start in <strong>Ask</strong>; you can change them in the composer.</p>
|
|
9
|
+
<p role="alert" hidden></p><button type="button" class="primary">Continue</button>`;
|
|
10
|
+
documentRoot.body.append(dialog);
|
|
11
|
+
dialog.addEventListener("cancel", (event) => event.preventDefault());
|
|
12
|
+
dialog.showModal();
|
|
13
|
+
await new Promise((resolve) => {
|
|
14
|
+
const button = dialog.querySelector("button");
|
|
15
|
+
button.addEventListener("click", async () => {
|
|
16
|
+
button.disabled = true;
|
|
17
|
+
try { await storage.execute({ kind: "introduction" }); dialog.close(); dialog.remove(); resolve(); }
|
|
18
|
+
catch (error) {
|
|
19
|
+
const notice = dialog.querySelector('[role="alert"]');
|
|
20
|
+
notice.textContent = `${error.message} Reload to try again.`;
|
|
21
|
+
notice.hidden = false;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function showWorkspaceStorageFailure(error, documentRoot = document) {
|
|
28
|
+
let notice = documentRoot.querySelector("[data-workspace-storage-error]");
|
|
29
|
+
if (!notice) {
|
|
30
|
+
notice = documentRoot.createElement("div");
|
|
31
|
+
notice.dataset.workspaceStorageError = "";
|
|
32
|
+
notice.setAttribute("role", "alert");
|
|
33
|
+
notice.className = "workspace-storage-failure";
|
|
34
|
+
documentRoot.body.append(notice);
|
|
35
|
+
}
|
|
36
|
+
notice.textContent = `${error.message} Changes are not confirmed. Reload before sending more messages.`;
|
|
37
|
+
}
|
|
@@ -6,6 +6,7 @@ export function createAppliedEnvironmentProjection({
|
|
|
6
6
|
dom,
|
|
7
7
|
selection,
|
|
8
8
|
loadWebConfig,
|
|
9
|
+
changeEnvironment,
|
|
9
10
|
}) {
|
|
10
11
|
let generation = 0;
|
|
11
12
|
let pending = null;
|
|
@@ -23,11 +24,10 @@ export function createAppliedEnvironmentProjection({
|
|
|
23
24
|
);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
function
|
|
27
|
+
function applyProjection(config, selected) {
|
|
27
28
|
state.config = config;
|
|
28
29
|
selection.renderEnvironmentOptions();
|
|
29
30
|
dom.environmentSelect.value = selected;
|
|
30
|
-
selection.renderAgentPicker();
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
function preferredEnvironmentId(options, selected, defaultId) {
|
|
@@ -36,45 +36,36 @@ export function createAppliedEnvironmentProjection({
|
|
|
36
36
|
return options[0]?.value || "";
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
function
|
|
40
|
-
next,
|
|
41
|
-
previousConfig,
|
|
42
|
-
previousEnvironment,
|
|
43
|
-
) {
|
|
44
|
-
const ChangeEvent = dom.environmentSelect.ownerDocument.defaultView.Event;
|
|
45
|
-
dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
|
|
46
|
-
if (dom.environmentSelect.value === next) return true;
|
|
47
|
-
restoreProjection(previousConfig, previousEnvironment);
|
|
48
|
-
// Existing listeners also own composer/environment presentation after a refusal.
|
|
49
|
-
dom.environmentSelect.dispatchEvent(new ChangeEvent("change"));
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function flush() {
|
|
39
|
+
async function flush() {
|
|
54
40
|
if (!pending) return "unchanged";
|
|
55
|
-
const previousConfig = state.config;
|
|
56
41
|
const previousEnvironment = selection.selectedEnvironmentId();
|
|
57
|
-
|
|
58
|
-
|
|
42
|
+
const projected = pending;
|
|
43
|
+
const revision = generation;
|
|
59
44
|
const next = preferredEnvironmentId(
|
|
60
|
-
selection.
|
|
45
|
+
selection.configuredEnvironmentOptions(projected),
|
|
61
46
|
previousEnvironment,
|
|
62
|
-
textOf(
|
|
47
|
+
textOf(projected.defaultEnvironmentId).trim(),
|
|
63
48
|
);
|
|
64
|
-
if (!next)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
dom.environmentSelect.value = next;
|
|
69
|
-
const unchanged = next === previousEnvironment;
|
|
70
|
-
if (unchanged) {
|
|
49
|
+
if (!next) return "blocked";
|
|
50
|
+
if (next === previousEnvironment) {
|
|
51
|
+
applyProjection(projected, next);
|
|
71
52
|
pending = null;
|
|
72
53
|
selection.renderAgentPicker();
|
|
73
54
|
return "unchanged";
|
|
74
55
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
56
|
+
// Keep the old catalog and selected option until draft preparation commits.
|
|
57
|
+
const commitEnvironmentOptions = () => {
|
|
58
|
+
applyProjection(projected, next);
|
|
59
|
+
pending = null;
|
|
60
|
+
};
|
|
61
|
+
commitEnvironmentOptions.canCommit = () => {
|
|
62
|
+
if (revision !== generation) return false;
|
|
63
|
+
return pending === projected;
|
|
64
|
+
};
|
|
65
|
+
let accepted = false;
|
|
66
|
+
try { accepted = await changeEnvironment(next, { commitEnvironmentOptions }); }
|
|
67
|
+
catch { /* The old catalog remains active when draft persistence fails. */ }
|
|
68
|
+
if (!accepted) return "blocked";
|
|
78
69
|
selection.renderAgentPicker();
|
|
79
70
|
return "changed";
|
|
80
71
|
}
|
|
@@ -87,6 +78,7 @@ export function createConfigurationFeature({
|
|
|
87
78
|
state,
|
|
88
79
|
selection,
|
|
89
80
|
onConfigurationApplied,
|
|
81
|
+
changeEnvironment,
|
|
90
82
|
...options
|
|
91
83
|
}) {
|
|
92
84
|
const projection = createAppliedEnvironmentProjection({
|
|
@@ -94,6 +86,7 @@ export function createConfigurationFeature({
|
|
|
94
86
|
dom: options.dom,
|
|
95
87
|
selection,
|
|
96
88
|
loadWebConfig: () => options.runtimeClient.loadWebConfig(),
|
|
89
|
+
changeEnvironment,
|
|
97
90
|
});
|
|
98
91
|
const workspace = createWorkspaceFeature({
|
|
99
92
|
...options,
|
|
@@ -101,13 +94,13 @@ export function createConfigurationFeature({
|
|
|
101
94
|
const currentStillConfigured = await projection.prepare();
|
|
102
95
|
if (currentStillConfigured) await onConfigurationApplied();
|
|
103
96
|
},
|
|
104
|
-
onConfigurationSettled: () => projection.flush() !== "blocked",
|
|
97
|
+
onConfigurationSettled: async () => await projection.flush() !== "blocked",
|
|
105
98
|
});
|
|
106
99
|
return {
|
|
107
100
|
...workspace,
|
|
108
101
|
async reloadAppliedEnvironmentModels() {
|
|
109
102
|
await projection.prepare();
|
|
110
|
-
const result = projection.flush();
|
|
103
|
+
const result = await projection.flush();
|
|
111
104
|
if (result === "blocked") return false;
|
|
112
105
|
if (result === "changed") return true;
|
|
113
106
|
const refreshed = await workspace.load();
|
|
@@ -278,7 +278,15 @@ export function createConfigurationFeature({
|
|
|
278
278
|
"Finish or cancel model setup before leaving configuration.";
|
|
279
279
|
return null;
|
|
280
280
|
}
|
|
281
|
-
|
|
281
|
+
const prepared = prepareDiscardChanges(...args);
|
|
282
|
+
if (typeof prepared !== "function") return prepared;
|
|
283
|
+
const commit = () => prepared();
|
|
284
|
+
commit.canCommit = () => {
|
|
285
|
+
if (pluginManager.hasConfigurationDraft()) return false;
|
|
286
|
+
if (modelSetup.isOpen()) return false;
|
|
287
|
+
return prepared.canCommit?.() !== false;
|
|
288
|
+
};
|
|
289
|
+
return commit;
|
|
282
290
|
},
|
|
283
291
|
};
|
|
284
292
|
}
|