@undefineds.co/linx 0.3.26 → 0.3.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -3
- package/dist/index.js +3 -832
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-stream-bridge-contract.js +2 -0
- package/dist/lib/agent-stream-bridge-contract.js.map +1 -0
- package/dist/lib/auto-mode/auth.js +100 -2
- package/dist/lib/auto-mode/auth.js.map +1 -1
- package/dist/lib/auto-mode/backend-kind.js +13 -0
- package/dist/lib/auto-mode/backend-kind.js.map +1 -0
- package/dist/lib/auto-mode/display.js +1 -1
- package/dist/lib/auto-mode/display.js.map +1 -1
- package/dist/lib/auto-mode/format.js +1 -1
- package/dist/lib/auto-mode/format.js.map +1 -1
- package/dist/lib/auto-mode/hooks/{index.js → registry.js} +1 -1
- package/dist/lib/auto-mode/hooks/registry.js.map +1 -0
- package/dist/lib/auto-mode/pod-ai.js +1 -14
- package/dist/lib/auto-mode/pod-ai.js.map +1 -1
- package/dist/lib/auto-mode/pod-approval-store.js +596 -0
- package/dist/lib/auto-mode/pod-approval-store.js.map +1 -0
- package/dist/lib/auto-mode/pod-approval.js +4 -607
- package/dist/lib/auto-mode/pod-approval.js.map +1 -1
- package/dist/lib/auto-mode/pod-persistence-builders.js +266 -0
- package/dist/lib/auto-mode/pod-persistence-builders.js.map +1 -0
- package/dist/lib/auto-mode/pod-persistence.js +1 -281
- package/dist/lib/auto-mode/pod-persistence.js.map +1 -1
- package/dist/lib/auto-mode/runner.js +41 -378
- package/dist/lib/auto-mode/runner.js.map +1 -1
- package/dist/lib/auto-mode/runtime.js +25 -0
- package/dist/lib/auto-mode/runtime.js.map +1 -0
- package/dist/lib/auto-mode/secretary-reaction-window.js +12 -0
- package/dist/lib/auto-mode/secretary-reaction-window.js.map +1 -0
- package/dist/lib/auto-mode/secretary-runtime-config.js +66 -0
- package/dist/lib/auto-mode/secretary-runtime-config.js.map +1 -0
- package/dist/lib/auto-mode/secretary.js +2 -64
- package/dist/lib/auto-mode/secretary.js.map +1 -1
- package/dist/lib/auto-mode/session-log.js +25 -0
- package/dist/lib/auto-mode/session-log.js.map +1 -0
- package/dist/lib/auto-mode/shell-command.js +172 -0
- package/dist/lib/auto-mode/shell-command.js.map +1 -0
- package/dist/lib/auto-mode-command.js +2 -1
- package/dist/lib/auto-mode-command.js.map +1 -1
- package/dist/lib/backend-command-router-contract.js +2 -0
- package/dist/lib/backend-command-router-contract.js.map +1 -0
- package/dist/lib/{pi-adapter/backend-credentials.js → backend-credentials.js} +8 -8
- package/dist/lib/backend-credentials.js.map +1 -0
- package/dist/lib/linx-ai-connect-command.js +201 -0
- package/dist/lib/linx-ai-connect-command.js.map +1 -0
- package/dist/lib/linx-assistant-message-rendering.js +33 -0
- package/dist/lib/linx-assistant-message-rendering.js.map +1 -0
- package/dist/lib/linx-auto-command-routing.js +53 -0
- package/dist/lib/linx-auto-command-routing.js.map +1 -0
- package/dist/lib/linx-auto-editor-indicator-host.js +15 -0
- package/dist/lib/linx-auto-editor-indicator-host.js.map +1 -0
- package/dist/lib/linx-auto-editor-indicator.js +56 -0
- package/dist/lib/linx-auto-editor-indicator.js.map +1 -0
- package/dist/lib/linx-auto-mode-cli-admission.js +16 -0
- package/dist/lib/linx-auto-mode-cli-admission.js.map +1 -0
- package/dist/lib/linx-backend-command-router.js +64 -0
- package/dist/lib/linx-backend-command-router.js.map +1 -0
- package/dist/lib/linx-backend-event-source.js +32 -0
- package/dist/lib/linx-backend-event-source.js.map +1 -0
- package/dist/lib/linx-chat-completion-projection.js +276 -0
- package/dist/lib/linx-chat-completion-projection.js.map +1 -0
- package/dist/lib/linx-cloud-errors.js +1 -0
- package/dist/lib/linx-cloud-errors.js.map +1 -1
- package/dist/lib/linx-cloud-models.js +75 -0
- package/dist/lib/linx-cloud-models.js.map +1 -0
- package/dist/lib/linx-cloud-runtime-auth.js +146 -0
- package/dist/lib/linx-cloud-runtime-auth.js.map +1 -0
- package/dist/lib/linx-cloud-runtime-coordinator.js +102 -0
- package/dist/lib/linx-cloud-runtime-coordinator.js.map +1 -0
- package/dist/lib/linx-codex-plugin-command.js +56 -0
- package/dist/lib/linx-codex-plugin-command.js.map +1 -0
- package/dist/lib/linx-command-autocomplete.js +123 -0
- package/dist/lib/linx-command-autocomplete.js.map +1 -0
- package/dist/lib/linx-completion-backend.js +2 -0
- package/dist/lib/linx-completion-backend.js.map +1 -0
- package/dist/lib/linx-config-command.js +12 -0
- package/dist/lib/linx-config-command.js.map +1 -0
- package/dist/lib/linx-editor-component-router.js +83 -0
- package/dist/lib/linx-editor-component-router.js.map +1 -0
- package/dist/lib/linx-extension-ui-context-router.js +43 -0
- package/dist/lib/linx-extension-ui-context-router.js.map +1 -0
- package/dist/lib/linx-external-open-host.js +8 -0
- package/dist/lib/linx-external-open-host.js.map +1 -0
- package/dist/lib/linx-external-url.js +16 -0
- package/dist/lib/linx-external-url.js.map +1 -0
- package/dist/lib/linx-footer-patch.js +52 -0
- package/dist/lib/linx-footer-patch.js.map +1 -0
- package/dist/lib/linx-input-command-routing.js +65 -0
- package/dist/lib/linx-input-command-routing.js.map +1 -0
- package/dist/lib/linx-interactive-auth-state-host.js +50 -0
- package/dist/lib/linx-interactive-auth-state-host.js.map +1 -0
- package/dist/lib/linx-interactive-autocomplete-host.js +32 -0
- package/dist/lib/linx-interactive-autocomplete-host.js.map +1 -0
- package/dist/lib/linx-interactive-bootstrap.js +66 -0
- package/dist/lib/linx-interactive-bootstrap.js.map +1 -0
- package/dist/lib/linx-interactive-branding.js +24 -0
- package/dist/lib/linx-interactive-branding.js.map +1 -0
- package/dist/lib/linx-interactive-chat-text-host.js +16 -0
- package/dist/lib/linx-interactive-chat-text-host.js.map +1 -0
- package/dist/lib/linx-interactive-command-routing-host.js +31 -0
- package/dist/lib/linx-interactive-command-routing-host.js.map +1 -0
- package/dist/lib/linx-interactive-command-routing.js +75 -0
- package/dist/lib/linx-interactive-command-routing.js.map +1 -0
- package/dist/lib/linx-interactive-command-surface.js +16 -0
- package/dist/lib/linx-interactive-command-surface.js.map +1 -0
- package/dist/lib/linx-interactive-editor-text-host.js +16 -0
- package/dist/lib/linx-interactive-editor-text-host.js.map +1 -0
- package/dist/lib/linx-interactive-error-display.js +8 -0
- package/dist/lib/linx-interactive-error-display.js.map +1 -0
- package/dist/lib/linx-interactive-event-router.js +91 -0
- package/dist/lib/linx-interactive-event-router.js.map +1 -0
- package/dist/lib/linx-interactive-extension-input-host.js +7 -0
- package/dist/lib/linx-interactive-extension-input-host.js.map +1 -0
- package/dist/lib/linx-interactive-extension-selector-host.js +12 -0
- package/dist/lib/linx-interactive-extension-selector-host.js.map +1 -0
- package/dist/lib/linx-interactive-header-host.js +14 -0
- package/dist/lib/linx-interactive-header-host.js.map +1 -0
- package/dist/lib/linx-interactive-lifecycle-host.js +4 -0
- package/dist/lib/linx-interactive-lifecycle-host.js.map +1 -0
- package/dist/lib/linx-interactive-login-ui-router.js +81 -0
- package/dist/lib/linx-interactive-login-ui-router.js.map +1 -0
- package/dist/lib/linx-interactive-model-registry-host.js +14 -0
- package/dist/lib/linx-interactive-model-registry-host.js.map +1 -0
- package/dist/lib/linx-interactive-post-init.js +60 -0
- package/dist/lib/linx-interactive-post-init.js.map +1 -0
- package/dist/lib/linx-interactive-provider-count-host.js +4 -0
- package/dist/lib/linx-interactive-provider-count-host.js.map +1 -0
- package/dist/lib/linx-interactive-run-router.js +43 -0
- package/dist/lib/linx-interactive-run-router.js.map +1 -0
- package/dist/lib/linx-interactive-runtime-host.js +113 -0
- package/dist/lib/linx-interactive-runtime-host.js.map +1 -0
- package/dist/lib/linx-interactive-selector-host.js +12 -0
- package/dist/lib/linx-interactive-selector-host.js.map +1 -0
- package/dist/lib/linx-interactive-shell-state.js +215 -0
- package/dist/lib/linx-interactive-shell-state.js.map +1 -0
- package/dist/lib/linx-interactive-status-display.js +9 -0
- package/dist/lib/linx-interactive-status-display.js.map +1 -0
- package/dist/lib/linx-interactive-stop-router.js +85 -0
- package/dist/lib/linx-interactive-stop-router.js.map +1 -0
- package/dist/lib/linx-interactive-streaming-message-host.js +11 -0
- package/dist/lib/linx-interactive-streaming-message-host.js.map +1 -0
- package/dist/lib/linx-interactive-submit-router.js +63 -0
- package/dist/lib/linx-interactive-submit-router.js.map +1 -0
- package/dist/lib/linx-interactive-update-router.js +78 -0
- package/dist/lib/linx-interactive-update-router.js.map +1 -0
- package/dist/lib/linx-interactive-update-state-host.js +43 -0
- package/dist/lib/linx-interactive-update-state-host.js.map +1 -0
- package/dist/lib/linx-interactive-warning-display.js +4 -0
- package/dist/lib/linx-interactive-warning-display.js.map +1 -0
- package/dist/lib/linx-interrupt-control-host.js +22 -0
- package/dist/lib/linx-interrupt-control-host.js.map +1 -0
- package/dist/lib/linx-interrupt-control.js +116 -0
- package/dist/lib/linx-interrupt-control.js.map +1 -0
- package/dist/lib/linx-login-flow.js +566 -0
- package/dist/lib/linx-login-flow.js.map +1 -0
- package/dist/lib/linx-models-command.js +71 -0
- package/dist/lib/linx-models-command.js.map +1 -0
- package/dist/lib/linx-package-command.js +117 -0
- package/dist/lib/linx-package-command.js.map +1 -0
- package/dist/lib/linx-peer-command-routing.js +20 -0
- package/dist/lib/linx-peer-command-routing.js.map +1 -0
- package/dist/lib/linx-pi-cli-command.js +121 -0
- package/dist/lib/linx-pi-cli-command.js.map +1 -0
- package/dist/lib/linx-pi-completion-events.js +101 -0
- package/dist/lib/linx-pi-completion-events.js.map +1 -0
- package/dist/lib/linx-pi-normalized-event-stream.js +41 -0
- package/dist/lib/linx-pi-normalized-event-stream.js.map +1 -0
- package/dist/lib/linx-pi-resume-cli-admission.js +21 -0
- package/dist/lib/linx-pi-resume-cli-admission.js.map +1 -0
- package/dist/lib/linx-pi-runtime-execution.js +67 -0
- package/dist/lib/linx-pi-runtime-execution.js.map +1 -0
- package/dist/lib/linx-pi-startup-control.js +49 -0
- package/dist/lib/linx-pi-startup-control.js.map +1 -0
- package/dist/lib/linx-pi-startup-plan.js +103 -0
- package/dist/lib/linx-pi-startup-plan.js.map +1 -0
- package/dist/lib/linx-pi-stream-errors.js +10 -0
- package/dist/lib/linx-pi-stream-errors.js.map +1 -0
- package/dist/lib/linx-pod-backed-extension-ui.js +29 -0
- package/dist/lib/linx-pod-backed-extension-ui.js.map +1 -0
- package/dist/lib/linx-pod-data-session-factory.js +19 -0
- package/dist/lib/linx-pod-data-session-factory.js.map +1 -0
- package/dist/lib/linx-pod-mirror-runtime-host.js +50 -0
- package/dist/lib/linx-pod-mirror-runtime-host.js.map +1 -0
- package/dist/lib/linx-pod-mirror-sync-cli-admission.js +18 -0
- package/dist/lib/linx-pod-mirror-sync-cli-admission.js.map +1 -0
- package/dist/lib/linx-pod-mirror-sync-command.js +30 -0
- package/dist/lib/linx-pod-mirror-sync-command.js.map +1 -0
- package/dist/lib/{pi-adapter/sync-recovery.js → linx-pod-mirror-sync-recovery.js} +13 -13
- package/dist/lib/linx-pod-mirror-sync-recovery.js.map +1 -0
- package/dist/lib/{pi-adapter/pod-mirror.js → linx-pod-mirror.js} +63 -40
- package/dist/lib/linx-pod-mirror.js.map +1 -0
- package/dist/lib/linx-restored-auto-startup.js +21 -0
- package/dist/lib/linx-restored-auto-startup.js.map +1 -0
- package/dist/lib/linx-resume-output.js +209 -0
- package/dist/lib/linx-resume-output.js.map +1 -0
- package/dist/lib/linx-retired-command.js +22 -0
- package/dist/lib/linx-retired-command.js.map +1 -0
- package/dist/lib/linx-rewind-command.js +209 -0
- package/dist/lib/linx-rewind-command.js.map +1 -0
- package/dist/lib/linx-runtime-adapter-contract.js +2 -0
- package/dist/lib/linx-runtime-adapter-contract.js.map +1 -0
- package/dist/lib/linx-runtime-adapter-defaults.js +17 -0
- package/dist/lib/linx-runtime-adapter-defaults.js.map +1 -0
- package/dist/lib/linx-runtime-adapter-dependencies.js +2 -0
- package/dist/lib/linx-runtime-adapter-dependencies.js.map +1 -0
- package/dist/lib/linx-runtime-agent-session.js +130 -0
- package/dist/lib/linx-runtime-agent-session.js.map +1 -0
- package/dist/lib/linx-runtime-auth.js +5 -0
- package/dist/lib/linx-runtime-auth.js.map +1 -0
- package/dist/lib/linx-runtime-backend-composition.js +73 -0
- package/dist/lib/linx-runtime-backend-composition.js.map +1 -0
- package/dist/lib/linx-runtime-coding-tools.js +58 -0
- package/dist/lib/linx-runtime-coding-tools.js.map +1 -0
- package/dist/lib/linx-runtime-completion-backend.js +27 -0
- package/dist/lib/linx-runtime-completion-backend.js.map +1 -0
- package/dist/lib/linx-runtime-oauth-provider.js +57 -0
- package/dist/lib/linx-runtime-oauth-provider.js.map +1 -0
- package/dist/lib/linx-runtime-provider-registration.js +33 -0
- package/dist/lib/linx-runtime-provider-registration.js.map +1 -0
- package/dist/lib/linx-runtime-resources.js +167 -0
- package/dist/lib/linx-runtime-resources.js.map +1 -0
- package/dist/lib/linx-runtime-system-prompt.js +27 -0
- package/dist/lib/linx-runtime-system-prompt.js.map +1 -0
- package/dist/lib/linx-runtime-thinking.js +21 -0
- package/dist/lib/linx-runtime-thinking.js.map +1 -0
- package/dist/lib/linx-selector-choice.js +38 -0
- package/dist/lib/linx-selector-choice.js.map +1 -0
- package/dist/lib/linx-self-update.js +113 -0
- package/dist/lib/linx-self-update.js.map +1 -0
- package/dist/lib/linx-session-command-routing-host.js +24 -0
- package/dist/lib/linx-session-command-routing-host.js.map +1 -0
- package/dist/lib/linx-session-command-routing.js +68 -0
- package/dist/lib/linx-session-command-routing.js.map +1 -0
- package/dist/lib/linx-session-cwd-router.js +15 -0
- package/dist/lib/linx-session-cwd-router.js.map +1 -0
- package/dist/lib/linx-session-history.js +388 -0
- package/dist/lib/linx-session-history.js.map +1 -0
- package/dist/lib/{pi-adapter/session.js → linx-session-manager.js} +94 -46
- package/dist/lib/linx-session-manager.js.map +1 -0
- package/dist/lib/linx-session-metadata.js +55 -0
- package/dist/lib/linx-session-metadata.js.map +1 -0
- package/dist/lib/linx-session-selector-ui.js +32 -0
- package/dist/lib/linx-session-selector-ui.js.map +1 -0
- package/dist/lib/linx-session-thinking-capability-router.js +55 -0
- package/dist/lib/linx-session-thinking-capability-router.js.map +1 -0
- package/dist/lib/linx-session-work-control.js +187 -0
- package/dist/lib/linx-session-work-control.js.map +1 -0
- package/dist/lib/linx-shell-command-executor.js +41 -0
- package/dist/lib/linx-shell-command-executor.js.map +1 -0
- package/dist/lib/linx-shell-command-router.js +151 -0
- package/dist/lib/linx-shell-command-router.js.map +1 -0
- package/dist/lib/{pi-adapter/control-state.js → linx-startup-control-state.js} +6 -6
- package/dist/lib/linx-startup-control-state.js.map +1 -0
- package/dist/lib/linx-startup-login-policy.js +48 -0
- package/dist/lib/linx-startup-login-policy.js.map +1 -0
- package/dist/lib/linx-status-line-command.js +382 -0
- package/dist/lib/linx-status-line-command.js.map +1 -0
- package/dist/lib/{status-line-command.js → linx-status-line-config-command.js} +2 -12
- package/dist/lib/linx-status-line-config-command.js.map +1 -0
- package/dist/lib/linx-status-line.js +12 -4
- package/dist/lib/linx-status-line.js.map +1 -1
- package/dist/lib/linx-stream-abort.js +12 -0
- package/dist/lib/linx-stream-abort.js.map +1 -0
- package/dist/lib/linx-stream-error-formatting.js +54 -0
- package/dist/lib/linx-stream-error-formatting.js.map +1 -0
- package/dist/lib/linx-submitted-user-message-recording.js +16 -0
- package/dist/lib/linx-submitted-user-message-recording.js.map +1 -0
- package/dist/lib/linx-symphony-interactive-command.js +493 -0
- package/dist/lib/linx-symphony-interactive-command.js.map +1 -0
- package/dist/lib/linx-terminal-title-router.js +49 -0
- package/dist/lib/linx-terminal-title-router.js.map +1 -0
- package/dist/lib/{pi-adapter/theme.js → linx-theme.js} +2 -2
- package/dist/lib/linx-theme.js.map +1 -0
- package/dist/lib/linx-top-level-command-admission.js +27 -0
- package/dist/lib/linx-top-level-command-admission.js.map +1 -0
- package/dist/lib/linx-update-notification.js +209 -0
- package/dist/lib/linx-update-notification.js.map +1 -0
- package/dist/lib/linx-welcome-header.js +148 -0
- package/dist/lib/linx-welcome-header.js.map +1 -0
- package/dist/lib/linx-workspace-command.js +45 -0
- package/dist/lib/linx-workspace-command.js.map +1 -0
- package/dist/lib/native-backend-command-router.js +25 -0
- package/dist/lib/native-backend-command-router.js.map +1 -0
- package/dist/lib/native-backend-proxy.js +2 -0
- package/dist/lib/native-backend-proxy.js.map +1 -0
- package/dist/lib/native-backend-stream-backend.js +15 -0
- package/dist/lib/native-backend-stream-backend.js.map +1 -0
- package/dist/lib/oidc-auth.js +2 -4
- package/dist/lib/oidc-auth.js.map +1 -1
- package/dist/lib/pi-adapter/runtime.js +32 -841
- package/dist/lib/pi-adapter/runtime.js.map +1 -1
- package/dist/lib/pi-adapter/stream.js +17 -516
- package/dist/lib/pi-adapter/stream.js.map +1 -1
- package/dist/lib/{pi-adapter/pod-approval.js → pod-backed-extension-ui-context.js} +2 -2
- package/dist/lib/pod-backed-extension-ui-context.js.map +1 -0
- package/dist/lib/pod-chat-store-runtime.js +38 -0
- package/dist/lib/pod-chat-store-runtime.js.map +1 -0
- package/dist/lib/pod-chat-store.js +15 -65
- package/dist/lib/pod-chat-store.js.map +1 -1
- package/dist/lib/{pi-adapter/pod-mirror-mapping.js → pod-mirror-mapping.js} +8 -18
- package/dist/lib/pod-mirror-mapping.js.map +1 -0
- package/dist/lib/{pi-adapter/pod-native.js → pod-native.js} +1 -1
- package/dist/lib/pod-native.js.map +1 -0
- package/dist/lib/pod-status-output.js.map +1 -0
- package/dist/lib/{pi-adapter/auto-input-controller.js → secretary-auto-input-controller.js} +62 -77
- package/dist/lib/secretary-auto-input-controller.js.map +1 -0
- package/dist/lib/{pi-adapter/session-control.js → session-control.js} +80 -29
- package/dist/lib/session-control.js.map +1 -0
- package/dist/lib/shell-lifecycle.js +199 -0
- package/dist/lib/shell-lifecycle.js.map +1 -0
- package/dist/lib/solid-local-store.js +3 -3
- package/dist/lib/solid-local-store.js.map +1 -1
- package/dist/lib/symphony/pod-projection.js +1 -31
- package/dist/lib/symphony/pod-projection.js.map +1 -1
- package/dist/lib/{symphony-command.js → symphony/run.js} +11 -16
- package/dist/lib/symphony/run.js.map +1 -0
- package/dist/lib/symphony/runtime.js +30 -0
- package/dist/lib/symphony/runtime.js.map +1 -0
- package/dist/lib/symphony/status.js +242 -0
- package/dist/lib/symphony/status.js.map +1 -0
- package/dist/linx-cli-app.js +70 -0
- package/dist/linx-cli-app.js.map +1 -0
- package/dist/linx-cli-runtime-adapter-factory.js +12 -0
- package/dist/linx-cli-runtime-adapter-factory.js.map +1 -0
- package/dist/plugins/linx-symphony-codex/.codex-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/dist/lib/auto-mode/hooks/index.js.map +0 -1
- package/dist/lib/auto-mode/index.js +0 -10
- package/dist/lib/auto-mode/index.js.map +0 -1
- package/dist/lib/codex-plugin/index.js +0 -5
- package/dist/lib/codex-plugin/index.js.map +0 -1
- package/dist/lib/pi-adapter/auth.js +0 -68
- package/dist/lib/pi-adapter/auth.js.map +0 -1
- package/dist/lib/pi-adapter/auto-input-controller.js.map +0 -1
- package/dist/lib/pi-adapter/backend-command.js +0 -2
- package/dist/lib/pi-adapter/backend-command.js.map +0 -1
- package/dist/lib/pi-adapter/backend-credentials.js.map +0 -1
- package/dist/lib/pi-adapter/branding.js +0 -1188
- package/dist/lib/pi-adapter/branding.js.map +0 -1
- package/dist/lib/pi-adapter/control-state.js.map +0 -1
- package/dist/lib/pi-adapter/index.js +0 -4
- package/dist/lib/pi-adapter/index.js.map +0 -1
- package/dist/lib/pi-adapter/interactive.js +0 -3191
- package/dist/lib/pi-adapter/interactive.js.map +0 -1
- package/dist/lib/pi-adapter/pod-approval.js.map +0 -1
- package/dist/lib/pi-adapter/pod-mirror-mapping.js.map +0 -1
- package/dist/lib/pi-adapter/pod-mirror.js.map +0 -1
- package/dist/lib/pi-adapter/pod-native.js.map +0 -1
- package/dist/lib/pi-adapter/pod-status-output.js.map +0 -1
- package/dist/lib/pi-adapter/pod-tools.js +0 -140
- package/dist/lib/pi-adapter/pod-tools.js.map +0 -1
- package/dist/lib/pi-adapter/session-control.js.map +0 -1
- package/dist/lib/pi-adapter/session.js.map +0 -1
- package/dist/lib/pi-adapter/sync-recovery.js.map +0 -1
- package/dist/lib/pi-adapter/theme.js.map +0 -1
- package/dist/lib/pi-adapter/web-fetch.js +0 -170
- package/dist/lib/pi-adapter/web-fetch.js.map +0 -1
- package/dist/lib/status-line-command.js.map +0 -1
- package/dist/lib/symphony-command.js.map +0 -1
- /package/dist/lib/{pi-adapter/pod-status-output.js → pod-status-output.js} +0 -0
|
@@ -1,52 +1,24 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
3
|
-
import { buildAcpPermissionResponse, buildAutoModeUserInputResponse,
|
|
4
|
-
import { adoptAutoModeSessionId,
|
|
5
|
-
import { detectAutoModeAuthFailure,
|
|
3
|
+
import { buildAcpPermissionResponse, buildAutoModeUserInputResponse, normalizeAcpInteractionRequest, normalizeAcpRequest, normalizeAcpSessionNotification, parseAutoModeJsonLine, autoModeApprovalDecisionLabel, autoModeUserInputAnswersSummary, shouldMaterializeAutoModeGrant, } from '../../../vendor/agent-runtime/dist/auto-mode.js';
|
|
4
|
+
import { adoptAutoModeSessionId, createAutoModeSession, finishAutoModeSession, hasPendingAutoModeSync, loadAutoModeEvents, loadAutoModeSession, listAutoModeSessionsWithPendingSync, listAutoModeSessions, writeAutoModeSyncCheckpoint, writeAutoModeSession, } from './archive.js';
|
|
5
|
+
import { detectAutoModeAuthFailure, promptLinxCloudAuth, runBackendLinxLogin, runBackendLinxLogout } from './auth.js';
|
|
6
6
|
import { createAutoModeDisplay } from './display.js';
|
|
7
7
|
import { formatAutoModeSessionSummary } from './format.js';
|
|
8
|
-
import { describeAutoControl, getAutoModeHook, linxNativeBackend, listAutoModeHooks } from './hooks/
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import { parseSolidClientCredentials, persistSolidClientCredentialsLogin } from '../solid-client-credentials-login.js';
|
|
17
|
-
import { connectAiProviderCredential } from '../ai-command.js';
|
|
18
|
-
import { saveAccountSession } from '../account-session.js';
|
|
19
|
-
import { clearCredentials, loadCredentials, saveCredentials } from '../credentials-store.js';
|
|
20
|
-
import { resolveAccountBaseUrl } from '../account-api.js';
|
|
21
|
-
import { createRemoteCompletionResult } from '../chat-api.js';
|
|
8
|
+
import { describeAutoControl, getAutoModeHook, linxNativeBackend, listAutoModeHooks } from './hooks/registry.js';
|
|
9
|
+
import { isRemoteApprovalAbortError } from './pod-approval.js';
|
|
10
|
+
import { podCredentialMissingMessage } from './pod-ai.js';
|
|
11
|
+
import { resolveSecretaryReactionWindowMs } from './secretary-reaction-window.js';
|
|
12
|
+
import { isAcpAutoModeWorkerBackend, isAutoModeWorkerBackend, resolveApprovalStrategy, defaultAutoModeApprovalStrategy } from './backend-kind.js';
|
|
13
|
+
import { appendAutoModeSessionEvent as appendEntry, appendAndDisplaySessionNote, appendSessionNote } from './session-log.js';
|
|
14
|
+
import { handleAutoModeShellCommand } from './shell-command.js';
|
|
15
|
+
import { autoModeRuntime } from './runtime.js';
|
|
22
16
|
import { resolveRuntimeTarget } from '../runtime-target.js';
|
|
23
17
|
import { runThreadReconcilerCycle } from '../../../vendor/agent-runtime/dist/index.js';
|
|
24
18
|
import { createLinxSyncCheckpoint } from '../../../vendor/agent-runtime/dist/sync.js';
|
|
25
19
|
const AUTO_MODE_SECRETARY_COUNTDOWN_BAR_WIDTH = 10;
|
|
26
20
|
const AUTO_MODE_SECRETARY_COUNTDOWN_TICK_MS = 250;
|
|
27
21
|
const POD_PERSISTENCE_TIMEOUT_MS = 5_000;
|
|
28
|
-
export const autoModeRuntime = {
|
|
29
|
-
promptText,
|
|
30
|
-
preflightAutoModeAuth,
|
|
31
|
-
loadPodBackendCredential,
|
|
32
|
-
connectAiProviderCredential,
|
|
33
|
-
createRemoteAutoModeApproval,
|
|
34
|
-
resolveExistingRemoteAutoModeGrant,
|
|
35
|
-
waitForRemoteAutoModeApproval,
|
|
36
|
-
resolveRemoteAutoModeApproval,
|
|
37
|
-
materializeRemoteAutoModeGrant,
|
|
38
|
-
persistAutoModeConversationToPod,
|
|
39
|
-
resolveAutoModeSecretaryRecommendation,
|
|
40
|
-
createPodDataSession,
|
|
41
|
-
clearDefaultPodDataSession,
|
|
42
|
-
loadCredentials,
|
|
43
|
-
saveCredentials,
|
|
44
|
-
clearCredentials,
|
|
45
|
-
saveAccountSession,
|
|
46
|
-
resolveAccountBaseUrl,
|
|
47
|
-
persistSolidClientCredentialsLogin,
|
|
48
|
-
createRemoteCompletionResult,
|
|
49
|
-
};
|
|
50
22
|
function createLineSplitter(stream, onLine) {
|
|
51
23
|
let buffer = '';
|
|
52
24
|
return {
|
|
@@ -123,55 +95,6 @@ function withAbortSignal(promise, signal) {
|
|
|
123
95
|
.finally(() => signal.removeEventListener('abort', onAbort));
|
|
124
96
|
});
|
|
125
97
|
}
|
|
126
|
-
function appendEntry(record, stream, line, events) {
|
|
127
|
-
const entry = {
|
|
128
|
-
timestamp: new Date().toISOString(),
|
|
129
|
-
stream,
|
|
130
|
-
line,
|
|
131
|
-
events,
|
|
132
|
-
};
|
|
133
|
-
appendAutoModeEvent(record, entry);
|
|
134
|
-
}
|
|
135
|
-
function appendSessionNote(record, message, raw) {
|
|
136
|
-
appendEntry(record, 'system', JSON.stringify({
|
|
137
|
-
type: 'session.note',
|
|
138
|
-
message,
|
|
139
|
-
}), [{
|
|
140
|
-
type: 'session.note',
|
|
141
|
-
message,
|
|
142
|
-
raw,
|
|
143
|
-
}]);
|
|
144
|
-
}
|
|
145
|
-
function writeFailedPodSyncCheckpoint(record, message) {
|
|
146
|
-
const now = new Date().toISOString();
|
|
147
|
-
const result = {
|
|
148
|
-
source: 'auto-mode-archive',
|
|
149
|
-
target: 'pod',
|
|
150
|
-
direction: 'local-to-core',
|
|
151
|
-
plane: 'projection',
|
|
152
|
-
authority: 'core',
|
|
153
|
-
attempted: 0,
|
|
154
|
-
applied: 0,
|
|
155
|
-
skipped: 0,
|
|
156
|
-
failed: 1,
|
|
157
|
-
failures: [{
|
|
158
|
-
operationId: 'auto-mode.persist-to-pod',
|
|
159
|
-
message,
|
|
160
|
-
failedAt: now,
|
|
161
|
-
}],
|
|
162
|
-
startedAt: now,
|
|
163
|
-
completedAt: now,
|
|
164
|
-
status: 'failed',
|
|
165
|
-
};
|
|
166
|
-
writeAutoModeSyncCheckpoint(record, createLinxSyncCheckpoint('auto-mode-archive:pod:projection', result, {
|
|
167
|
-
sessionId: record.id,
|
|
168
|
-
backend: record.backend,
|
|
169
|
-
}));
|
|
170
|
-
}
|
|
171
|
-
function appendAndDisplaySessionNote(record, display, message, tone = 'note', raw) {
|
|
172
|
-
appendSessionNote(record, message, raw);
|
|
173
|
-
display.showActivity(message, tone);
|
|
174
|
-
}
|
|
175
98
|
async function promptApproval(display, message, allowSessionOption = true, signal, recommendation) {
|
|
176
99
|
while (true) {
|
|
177
100
|
display.setPhase('approval', message);
|
|
@@ -211,17 +134,6 @@ function approvalPromptLines(message, recommendation) {
|
|
|
211
134
|
}
|
|
212
135
|
return lines;
|
|
213
136
|
}
|
|
214
|
-
function resolveSecretaryReactionWindowMs(recommendation) {
|
|
215
|
-
if (!recommendation?.canAutoDecide) {
|
|
216
|
-
return 0;
|
|
217
|
-
}
|
|
218
|
-
const reactionWindowMs = recommendation.reactionWindowMs ?? 0;
|
|
219
|
-
if (recommendation.source === 'fallback') {
|
|
220
|
-
return Math.max(0, Math.min(MAX_AUTO_MODE_SECRETARY_REACTION_WINDOW_MS, reactionWindowMs));
|
|
221
|
-
}
|
|
222
|
-
return Math.max(MIN_AUTO_MODE_SECRETARY_REACTION_WINDOW_MS, Math.min(MAX_AUTO_MODE_SECRETARY_REACTION_WINDOW_MS, reactionWindowMs > 0 ? reactionWindowMs : MIN_AUTO_MODE_SECRETARY_REACTION_WINDOW_MS));
|
|
223
|
-
}
|
|
224
|
-
export const __testResolveSecretaryReactionWindowMs = resolveSecretaryReactionWindowMs;
|
|
225
137
|
function approvalPromptOptions(allowSessionOption, recommendedDecision) {
|
|
226
138
|
const option = (decision, label, description, shortcuts) => ({
|
|
227
139
|
label: recommendedDecision === decision ? `${label} (recommended)` : label,
|
|
@@ -312,87 +224,6 @@ export function formatAutoModeSecretaryCountdownDetail(remainingMs, durationMs)
|
|
|
312
224
|
const bar = `${'#'.repeat(filled)}${'-'.repeat(AUTO_MODE_SECRETARY_COUNTDOWN_BAR_WIDTH - filled)}`;
|
|
313
225
|
return `auto [${bar}] ${formatReactionWindow(clampedRemainingMs)}`;
|
|
314
226
|
}
|
|
315
|
-
async function promptLinxCloudAuth(display, lines, reason = 'manual') {
|
|
316
|
-
while (true) {
|
|
317
|
-
display.setPhase('question', reason === 'expired' ? 'LinX Cloud login expired' : 'LinX Cloud login required');
|
|
318
|
-
const answer = (await display.chooseOption(reason === 'expired' ? 'LinX Cloud login expired' : 'LinX Cloud login required', lines, [
|
|
319
|
-
{ label: 'Authorize in browser', value: 'browser', description: 'refresh the LinX Cloud Solid session', shortcuts: ['b', '1'] },
|
|
320
|
-
{ label: 'Enter Solid client credentials', value: 'client-credentials', description: 'use LinX Cloud client credentials', shortcuts: ['k', '2'] },
|
|
321
|
-
{ label: 'Exit', value: 'exit', description: 'leave this session', shortcuts: ['x', '3'] },
|
|
322
|
-
])).trim().toLowerCase();
|
|
323
|
-
if (answer === 'browser' || answer === 'b' || answer === '1') {
|
|
324
|
-
await runBackendLinxLogin(display);
|
|
325
|
-
return 'retry';
|
|
326
|
-
}
|
|
327
|
-
if (answer === 'client-credentials' || answer === 'k' || answer === '2') {
|
|
328
|
-
const saved = await promptBackendSolidClientCredentials(display);
|
|
329
|
-
if (saved) {
|
|
330
|
-
return 'retry';
|
|
331
|
-
}
|
|
332
|
-
continue;
|
|
333
|
-
}
|
|
334
|
-
if (answer === 'exit' || answer === 'x' || answer === '3' || answer === 'cancel') {
|
|
335
|
-
display.setPhase('running', 'Authentication cancelled');
|
|
336
|
-
return 'cancel';
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
async function runBackendLinxLogin(display) {
|
|
341
|
-
display.showActivity('Opening LinX Cloud login in your browser...');
|
|
342
|
-
await runLinxLoginCommand({}, {
|
|
343
|
-
promptText: autoModeRuntime.promptText,
|
|
344
|
-
write(chunk) {
|
|
345
|
-
for (const line of chunk.split(/\r?\n/u)) {
|
|
346
|
-
const trimmed = line.trim();
|
|
347
|
-
if (trimmed) {
|
|
348
|
-
display.showActivity(trimmed);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
},
|
|
352
|
-
});
|
|
353
|
-
autoModeRuntime.clearDefaultPodDataSession();
|
|
354
|
-
display.showActivity('LinX Cloud login refreshed.', 'success');
|
|
355
|
-
}
|
|
356
|
-
function runBackendLinxLogout(display) {
|
|
357
|
-
runLinxLogoutCommand({
|
|
358
|
-
write(chunk) {
|
|
359
|
-
for (const line of chunk.split(/\r?\n/u)) {
|
|
360
|
-
const trimmed = line.trim();
|
|
361
|
-
if (trimmed) {
|
|
362
|
-
display.showActivity(trimmed);
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
},
|
|
366
|
-
});
|
|
367
|
-
autoModeRuntime.clearDefaultPodDataSession();
|
|
368
|
-
display.showActivity('Use /login or choose browser authorization to sign in again.', 'note');
|
|
369
|
-
}
|
|
370
|
-
async function promptBackendSolidClientCredentials(display) {
|
|
371
|
-
display.setPhase('question', 'Solid client credentials required');
|
|
372
|
-
const credentialsText = await display.promptSecret({
|
|
373
|
-
header: 'Solid client credentials',
|
|
374
|
-
question: 'Paste Solid client credentials in client_id:client_secret format.',
|
|
375
|
-
note: 'Input is hidden and saved locally as LinX Cloud client credentials.',
|
|
376
|
-
});
|
|
377
|
-
const parsed = parseSolidClientCredentials(credentialsText);
|
|
378
|
-
if (!parsed) {
|
|
379
|
-
display.showActivity('Solid client credentials entry cancelled or invalid. Expected client_id:client_secret.', 'error');
|
|
380
|
-
return false;
|
|
381
|
-
}
|
|
382
|
-
autoModeRuntime.clearDefaultPodDataSession();
|
|
383
|
-
try {
|
|
384
|
-
await autoModeRuntime.persistSolidClientCredentialsLogin(credentialsText, autoModeRuntime);
|
|
385
|
-
autoModeRuntime.clearDefaultPodDataSession();
|
|
386
|
-
display.showActivity('Solid client credentials saved. Retrying backend startup.', 'success');
|
|
387
|
-
return true;
|
|
388
|
-
}
|
|
389
|
-
catch (error) {
|
|
390
|
-
autoModeRuntime.clearDefaultPodDataSession();
|
|
391
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
392
|
-
display.showActivity(`Solid client credentials rejected: ${message}`, 'error');
|
|
393
|
-
return false;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
227
|
function isRecoverableLinxCloudAuthError(message) {
|
|
397
228
|
const normalized = message.toLowerCase();
|
|
398
229
|
return normalized.includes('linx login')
|
|
@@ -501,12 +332,6 @@ function createAcpInteractionThreadEvent(record, interaction) {
|
|
|
501
332
|
function requestedCredentialSource(options) {
|
|
502
333
|
return options.credentialSource === 'local' ? 'local' : 'cloud';
|
|
503
334
|
}
|
|
504
|
-
function defaultApprovalStrategy() {
|
|
505
|
-
return 'hybrid';
|
|
506
|
-
}
|
|
507
|
-
function resolveApprovalStrategy(options) {
|
|
508
|
-
return options.approvalStrategy ?? defaultApprovalStrategy();
|
|
509
|
-
}
|
|
510
335
|
function requestedRuntime(options) {
|
|
511
336
|
return options.runtime ?? 'local';
|
|
512
337
|
}
|
|
@@ -519,11 +344,31 @@ function requestedAutoModeMode(options) {
|
|
|
519
344
|
}
|
|
520
345
|
return requestedAutoEnabled(options) ? 'auto' : 'off';
|
|
521
346
|
}
|
|
522
|
-
function
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
347
|
+
function writeFailedPodSyncCheckpoint(record, message) {
|
|
348
|
+
const now = new Date().toISOString();
|
|
349
|
+
const result = {
|
|
350
|
+
source: 'auto-mode-archive',
|
|
351
|
+
target: 'pod',
|
|
352
|
+
direction: 'local-to-core',
|
|
353
|
+
plane: 'projection',
|
|
354
|
+
authority: 'core',
|
|
355
|
+
attempted: 0,
|
|
356
|
+
applied: 0,
|
|
357
|
+
skipped: 0,
|
|
358
|
+
failed: 1,
|
|
359
|
+
failures: [{
|
|
360
|
+
operationId: 'auto-mode.persist-to-pod',
|
|
361
|
+
message,
|
|
362
|
+
failedAt: now,
|
|
363
|
+
}],
|
|
364
|
+
startedAt: now,
|
|
365
|
+
completedAt: now,
|
|
366
|
+
status: 'failed',
|
|
367
|
+
};
|
|
368
|
+
writeAutoModeSyncCheckpoint(record, createLinxSyncCheckpoint('auto-mode-archive:pod:projection', result, {
|
|
369
|
+
sessionId: record.id,
|
|
370
|
+
backend: record.backend,
|
|
371
|
+
}));
|
|
527
372
|
}
|
|
528
373
|
function normalizeBackendCommandEnv(backend, env) {
|
|
529
374
|
if (!env) {
|
|
@@ -554,7 +399,7 @@ function syncRecordFromOptions(record, options, plan) {
|
|
|
554
399
|
passthroughArgs: [...options.passthroughArgs],
|
|
555
400
|
credentialSource: requestedCredentialSource(options),
|
|
556
401
|
resolvedCredentialSource: options.resolvedCredentialSource,
|
|
557
|
-
approvalSource: record.approvalSource ??
|
|
402
|
+
approvalSource: record.approvalSource ?? defaultAutoModeApprovalStrategy(),
|
|
558
403
|
command: plan.command,
|
|
559
404
|
args: [...plan.args],
|
|
560
405
|
transport: options.transport ?? (options.backend === 'linx' ? 'native' : 'acp'),
|
|
@@ -1496,192 +1341,6 @@ function buildConversationSession(options) {
|
|
|
1496
1341
|
const hook = getAutoModeHook(options.backend);
|
|
1497
1342
|
return new AcpSession(options, hook);
|
|
1498
1343
|
}
|
|
1499
|
-
async function handleAutoModeShellCommand(args) {
|
|
1500
|
-
const { input, session, display, queueState, backend, record } = args;
|
|
1501
|
-
if (input === '/exit' || input === '/quit') {
|
|
1502
|
-
return 'exit';
|
|
1503
|
-
}
|
|
1504
|
-
if (input === '/help' || input === '/hotkeys' || input === '/keymap') {
|
|
1505
|
-
display.showHelp();
|
|
1506
|
-
return 'handled';
|
|
1507
|
-
}
|
|
1508
|
-
if (input === '/login') {
|
|
1509
|
-
try {
|
|
1510
|
-
await runBackendLinxLogin(display);
|
|
1511
|
-
appendSessionNote(record, 'LinX Cloud login refreshed from auto-mode');
|
|
1512
|
-
}
|
|
1513
|
-
catch (error) {
|
|
1514
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
1515
|
-
appendAndDisplaySessionNote(record, display, `LinX Cloud login failed | ${message}`, 'error', { error: message });
|
|
1516
|
-
}
|
|
1517
|
-
return 'handled';
|
|
1518
|
-
}
|
|
1519
|
-
if (input === '/logout') {
|
|
1520
|
-
runBackendLinxLogout(display);
|
|
1521
|
-
appendSessionNote(record, 'LinX Cloud logout requested from auto-mode');
|
|
1522
|
-
return 'handled';
|
|
1523
|
-
}
|
|
1524
|
-
if (input === '/session') {
|
|
1525
|
-
appendAndDisplaySessionNote(record, display, [
|
|
1526
|
-
`session=${record.backendSessionId ?? record.id}`,
|
|
1527
|
-
`backend=${record.backend}`,
|
|
1528
|
-
`runtime=${record.runtime}`,
|
|
1529
|
-
'credentials=pod',
|
|
1530
|
-
`model=${record.model ?? 'default'}`,
|
|
1531
|
-
`cwd=${record.cwd}`,
|
|
1532
|
-
].join(' | '));
|
|
1533
|
-
return 'handled';
|
|
1534
|
-
}
|
|
1535
|
-
const autoModeRoute = resolveAutoModeCommandRoute(input);
|
|
1536
|
-
if (autoModeRoute) {
|
|
1537
|
-
return handleAutoModeCommandRoute({
|
|
1538
|
-
route: autoModeRoute,
|
|
1539
|
-
session,
|
|
1540
|
-
display,
|
|
1541
|
-
record,
|
|
1542
|
-
});
|
|
1543
|
-
}
|
|
1544
|
-
if (input === '/queue') {
|
|
1545
|
-
appendAndDisplaySessionNote(record, display, `queue | steer=${queueState.steeringCount} | follow-up=${queueState.followUpCount}`);
|
|
1546
|
-
return 'handled';
|
|
1547
|
-
}
|
|
1548
|
-
if (input.startsWith('/follow-up ')) {
|
|
1549
|
-
return 'pass';
|
|
1550
|
-
}
|
|
1551
|
-
if (input === '/sessions') {
|
|
1552
|
-
const summaries = listAutoModeSessions().slice(0, 5).map(formatAutoModeSessionSummary);
|
|
1553
|
-
if (summaries.length === 0) {
|
|
1554
|
-
appendAndDisplaySessionNote(record, display, 'No archived auto-mode sessions found');
|
|
1555
|
-
return 'handled';
|
|
1556
|
-
}
|
|
1557
|
-
for (const summary of summaries) {
|
|
1558
|
-
appendAndDisplaySessionNote(record, display, summary);
|
|
1559
|
-
}
|
|
1560
|
-
return 'handled';
|
|
1561
|
-
}
|
|
1562
|
-
if (input === '/new') {
|
|
1563
|
-
appendAndDisplaySessionNote(record, display, 'Use `linx --backend <backend>` to start a fresh auto-mode session');
|
|
1564
|
-
return 'handled';
|
|
1565
|
-
}
|
|
1566
|
-
if (input === '/debug' || input === '/debug on') {
|
|
1567
|
-
display.setDebugMode(true);
|
|
1568
|
-
appendSessionNote(record, 'Debug protocol view enabled', { debug: true });
|
|
1569
|
-
return 'handled';
|
|
1570
|
-
}
|
|
1571
|
-
if (input === '/debug off') {
|
|
1572
|
-
display.setDebugMode(false);
|
|
1573
|
-
appendSessionNote(record, 'Debug protocol view disabled', { debug: false });
|
|
1574
|
-
return 'handled';
|
|
1575
|
-
}
|
|
1576
|
-
if (input.startsWith('/model ')) {
|
|
1577
|
-
const model = input.slice('/model '.length).trim();
|
|
1578
|
-
if (!model) {
|
|
1579
|
-
appendAndDisplaySessionNote(record, display, 'Usage: /model <modelId>', 'error');
|
|
1580
|
-
return 'handled';
|
|
1581
|
-
}
|
|
1582
|
-
try {
|
|
1583
|
-
await session.setModel(model);
|
|
1584
|
-
appendAndDisplaySessionNote(record, display, `Model set to ${model}`, 'success', { backend, model });
|
|
1585
|
-
}
|
|
1586
|
-
catch (error) {
|
|
1587
|
-
const reason = error instanceof Error ? error.message : String(error);
|
|
1588
|
-
appendAndDisplaySessionNote(record, display, `Model switch failed | ${reason}`, 'error', { backend, model, reason });
|
|
1589
|
-
}
|
|
1590
|
-
return 'handled';
|
|
1591
|
-
}
|
|
1592
|
-
return 'pass';
|
|
1593
|
-
}
|
|
1594
|
-
function handleAutoModeCommandRoute(args) {
|
|
1595
|
-
const { route, session, display, record } = args;
|
|
1596
|
-
if (route.kind === 'control-command') {
|
|
1597
|
-
return handleAutoModeControlCommand({ route, session, display, record });
|
|
1598
|
-
}
|
|
1599
|
-
return handleAutoModePeerCommand({ route, session, display, record });
|
|
1600
|
-
}
|
|
1601
|
-
function handleAutoModeControlCommand(args) {
|
|
1602
|
-
const { route, session, display, record } = args;
|
|
1603
|
-
const auto = route.auto;
|
|
1604
|
-
if (!auto || auto.action === 'status') {
|
|
1605
|
-
const enabled = record.autoEnabled === true;
|
|
1606
|
-
appendAndDisplaySessionNote(record, display, `Auto is ${enabled ? 'on' : 'off'}. Use /auto on or /auto off.`);
|
|
1607
|
-
return 'handled';
|
|
1608
|
-
}
|
|
1609
|
-
if (!isAutoModeWorkerBackend(record.backend)) {
|
|
1610
|
-
throw new Error(`Auto control commands cannot run backend ${record.backend}`);
|
|
1611
|
-
}
|
|
1612
|
-
applyAutoModeAutoEnabled(session, record, auto.enabled);
|
|
1613
|
-
appendAndDisplaySessionNote(record, display, `Auto ${auto.enabled ? 'on' : 'off'}: ${auto.enabled ? 'Secretary drives the session and asks when blocked' : 'user drives the session directly'}.`, 'success', { autoEnabled: auto.enabled });
|
|
1614
|
-
if (auto.initialInput) {
|
|
1615
|
-
const projectedRoute = resolveAutoModeCommandRoute(auto.initialInput);
|
|
1616
|
-
if (projectedRoute) {
|
|
1617
|
-
return handleAutoModeCommandRoute({
|
|
1618
|
-
route: projectedRoute,
|
|
1619
|
-
session,
|
|
1620
|
-
display,
|
|
1621
|
-
record,
|
|
1622
|
-
});
|
|
1623
|
-
}
|
|
1624
|
-
return { kind: 'send', text: auto.initialInput };
|
|
1625
|
-
}
|
|
1626
|
-
return 'handled';
|
|
1627
|
-
}
|
|
1628
|
-
function handleAutoModePeerCommand(args) {
|
|
1629
|
-
const { route, session, display, record } = args;
|
|
1630
|
-
const goalMirror = route.secretaryBehavior?.goalMode;
|
|
1631
|
-
if (goalMirror !== undefined) {
|
|
1632
|
-
applyAutoModeGoalMode(session, record, goalMirror);
|
|
1633
|
-
appendAndDisplaySessionNote(record, display, `Goal command routed to current chat peer; local supervision mirror is ${goalMirror ? 'active' : 'paused'}.`, 'success', { goalMode: goalMirror, peerCommand: route.text });
|
|
1634
|
-
}
|
|
1635
|
-
else {
|
|
1636
|
-
appendAndDisplaySessionNote(record, display, 'Goal command routed to current chat peer.', 'note', { peerCommand: route.text });
|
|
1637
|
-
}
|
|
1638
|
-
return { kind: 'send', text: route.text };
|
|
1639
|
-
}
|
|
1640
|
-
function applyAutoModeAutoEnabled(session, record, enabled) {
|
|
1641
|
-
session.applyResolvedOptions({
|
|
1642
|
-
backend: record.backend,
|
|
1643
|
-
autoEnabled: enabled,
|
|
1644
|
-
mode: enabled ? 'auto' : 'off',
|
|
1645
|
-
cwd: record.cwd,
|
|
1646
|
-
plain: false,
|
|
1647
|
-
model: record.model,
|
|
1648
|
-
prompt: record.prompt,
|
|
1649
|
-
passthroughArgs: record.passthroughArgs,
|
|
1650
|
-
goalMode: record.goalMode,
|
|
1651
|
-
runtime: record.runtime,
|
|
1652
|
-
transport: record.transport,
|
|
1653
|
-
credentialSource: record.credentialSource,
|
|
1654
|
-
resolvedCredentialSource: record.resolvedCredentialSource,
|
|
1655
|
-
approvalStrategy: resolveApprovalStrategy({ approvalStrategy: record.approvalSource }),
|
|
1656
|
-
});
|
|
1657
|
-
record.autoEnabled = enabled;
|
|
1658
|
-
record.mode = enabled ? 'auto' : 'off';
|
|
1659
|
-
}
|
|
1660
|
-
function applyAutoModeGoalMode(session, record, enabled) {
|
|
1661
|
-
if (!isAutoModeWorkerBackend(record.backend)) {
|
|
1662
|
-
throw new Error(`Goal peer commands cannot run backend ${record.backend}`);
|
|
1663
|
-
}
|
|
1664
|
-
session.applyResolvedOptions({
|
|
1665
|
-
backend: record.backend,
|
|
1666
|
-
autoEnabled: record.autoEnabled === true,
|
|
1667
|
-
mode: record.mode,
|
|
1668
|
-
cwd: record.cwd,
|
|
1669
|
-
plain: false,
|
|
1670
|
-
model: record.model,
|
|
1671
|
-
prompt: record.prompt,
|
|
1672
|
-
passthroughArgs: record.passthroughArgs,
|
|
1673
|
-
goalMode: enabled,
|
|
1674
|
-
runtime: record.runtime,
|
|
1675
|
-
transport: record.transport,
|
|
1676
|
-
credentialSource: record.credentialSource,
|
|
1677
|
-
resolvedCredentialSource: record.resolvedCredentialSource,
|
|
1678
|
-
approvalStrategy: resolveApprovalStrategy({ approvalStrategy: record.approvalSource }),
|
|
1679
|
-
});
|
|
1680
|
-
record.goalMode = enabled || undefined;
|
|
1681
|
-
}
|
|
1682
|
-
export const __testHandleAutoModeShellCommand = handleAutoModeShellCommand;
|
|
1683
|
-
export const __testPromptLinxCloudAuth = promptLinxCloudAuth;
|
|
1684
|
-
export const __testParseSolidClientCredentials = parseSolidClientCredentials;
|
|
1685
1344
|
export async function runAutoMode(options) {
|
|
1686
1345
|
const previousPlainEnv = process.env.LINX_BACKEND_PLAIN;
|
|
1687
1346
|
if (options.plain) {
|
|
@@ -1945,6 +1604,10 @@ export async function runAutoMode(options) {
|
|
|
1945
1604
|
},
|
|
1946
1605
|
backend: resolvedRun.options.backend,
|
|
1947
1606
|
record: activeSession.record,
|
|
1607
|
+
auth: {
|
|
1608
|
+
login: runBackendLinxLogin,
|
|
1609
|
+
logout: runBackendLinxLogout,
|
|
1610
|
+
},
|
|
1948
1611
|
});
|
|
1949
1612
|
if (shellCommand === 'handled') {
|
|
1950
1613
|
activeSession.display.setPhase(activeTurn ? 'running' : 'ready', activeTurn ? `Running ${resolvedRun.options.backend}` : 'Waiting for input');
|