@undefineds.co/linx 0.3.26 → 0.3.27
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 +96 -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 +163 -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 +176 -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 +179 -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,20 +1,16 @@
|
|
|
1
1
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
2
2
|
import { parsePodResourceRef, resolvePodBaseUrl } from '@undefineds.co/drizzle-solid';
|
|
3
3
|
import { getDefaultPodDataSession } from '../pod-data-session.js';
|
|
4
|
-
import { agentResource, approvalResource,
|
|
5
|
-
import {
|
|
6
|
-
import { ApprovalVocab, AuditVocab, GrantReadVocab, GrantVocab, InboxNotificationVocab } from '@undefineds.co/models/vocab/sidecar';
|
|
7
|
-
import { autoModeApprovalActionUri, autoModeApprovalDecisionForStoredApproval, autoModeApprovalRequestMessage, autoModeApprovalRisk, autoModeApprovalToolName, buildAutoModeApprovalDecisionReason, encodeAutoModeApprovalOptions, parseAutoModeApprovalDecisionReason, parseAutoModeApprovalOptions, shouldMaterializeAutoModeGrant, } from '../../../vendor/agent-runtime/dist/auto-mode.js';
|
|
4
|
+
import { agentResource, approvalResource, chatResource, claimApprovalRequest, claimInputRequest, drizzle, inboxNotificationResource, inputRequestResource, solidResources, threadRepository, } from '../models.js';
|
|
5
|
+
import { autoModeApprovalActionUri, autoModeApprovalDecisionForStoredApproval, autoModeApprovalRequestMessage, autoModeApprovalRisk, autoModeApprovalToolName, buildAutoModeApprovalDecisionReason, encodeAutoModeApprovalOptions, parseAutoModeApprovalOptions, shouldMaterializeAutoModeGrant, } from '../../../vendor/agent-runtime/dist/auto-mode.js';
|
|
8
6
|
import { resolveAutoModeGrantCoverage } from './secretary.js';
|
|
9
|
-
import {
|
|
7
|
+
import { buildGrantResourceUrl } from '../pod-native.js';
|
|
8
|
+
import { MAX_APPROVAL_CONTEXT_LENGTH, MAX_GRANT_POLICY_LENGTH, approvalIriForCreatedAt, createNativeRemoteApprovalStore, createSharedModelRemoteApprovalStore, normalizeString, toIsoString, } from './pod-approval-store.js';
|
|
10
9
|
const AUTO_MODE_CHAT_ID_PREFIX = 'linx-auto-mode';
|
|
11
10
|
const AUTO_MODE_AGENT_ID = '__secretary__';
|
|
12
11
|
const REMOTE_APPROVAL_POLICY_VERSION = 'linx-auto-mode-remote-approval/v1';
|
|
13
12
|
const DEFAULT_REMOTE_APPROVAL_POLL_MS = 1000;
|
|
14
13
|
const DEFAULT_WARN_ONLY_TIMEOUT_MS = 5000;
|
|
15
|
-
const DEFAULT_APPROVAL_LIST_DAYS = 7;
|
|
16
|
-
const MAX_GRANT_POLICY_LENGTH = 1200;
|
|
17
|
-
const MAX_APPROVAL_CONTEXT_LENGTH = 1400;
|
|
18
14
|
const MIN_GRANT_COVERAGE_CONFIDENCE = 0.75;
|
|
19
15
|
const MAX_GRANT_COVERAGE_CANDIDATES = 5;
|
|
20
16
|
const remoteApprovalClientCache = new WeakMap();
|
|
@@ -24,21 +20,9 @@ function createAbortError() {
|
|
|
24
20
|
error.name = 'AbortError';
|
|
25
21
|
return error;
|
|
26
22
|
}
|
|
27
|
-
function normalizeString(value) {
|
|
28
|
-
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
29
|
-
}
|
|
30
23
|
function isRecord(value) {
|
|
31
24
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
32
25
|
}
|
|
33
|
-
function toIsoString(value, fallback) {
|
|
34
|
-
if (value instanceof Date) {
|
|
35
|
-
return value.toISOString();
|
|
36
|
-
}
|
|
37
|
-
if (typeof value === 'string' && value.trim()) {
|
|
38
|
-
return value;
|
|
39
|
-
}
|
|
40
|
-
return fallback;
|
|
41
|
-
}
|
|
42
26
|
function buildAutoModeChatId(record) {
|
|
43
27
|
return `${AUTO_MODE_CHAT_ID_PREFIX}-${record.backend}`;
|
|
44
28
|
}
|
|
@@ -48,15 +32,6 @@ function buildAutoModeChatUri(webId, record) {
|
|
|
48
32
|
function autoModeThreadUri(webId, record) {
|
|
49
33
|
return threadRepository.iriForChat(webId, buildAutoModeChatId(record), record.id);
|
|
50
34
|
}
|
|
51
|
-
function approvalIriForCreatedAt(webIdOrUri, approvalId, createdAt) {
|
|
52
|
-
return approvalResource.buildIri(webIdOrUri, {
|
|
53
|
-
id: approvalId,
|
|
54
|
-
createdAt,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
function documentUrlFromResourceUri(resourceUri) {
|
|
58
|
-
return resourceUri.split('#', 1)[0] ?? resourceUri;
|
|
59
|
-
}
|
|
60
35
|
function grantIri(webIdOrUri, grantId) {
|
|
61
36
|
return buildGrantResourceUrl(webIdOrUri, grantId);
|
|
62
37
|
}
|
|
@@ -214,29 +189,6 @@ function grantContextFromApproval(row) {
|
|
|
214
189
|
approvalContext: row.context,
|
|
215
190
|
}, MAX_APPROVAL_CONTEXT_LENGTH);
|
|
216
191
|
}
|
|
217
|
-
function literalValues(predicates, predicate) {
|
|
218
|
-
return (predicates.get(predicate) ?? [])
|
|
219
|
-
.map((object) => isRecord(object) && object.type === 'literal' && typeof object.value === 'string' ? object.value : '')
|
|
220
|
-
.filter(Boolean);
|
|
221
|
-
}
|
|
222
|
-
function firstLiteralValue(predicates, predicatesToTry) {
|
|
223
|
-
for (const predicate of predicatesToTry) {
|
|
224
|
-
const [value] = literalValues(predicates, predicate);
|
|
225
|
-
if (value) {
|
|
226
|
-
return value;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return undefined;
|
|
230
|
-
}
|
|
231
|
-
function iriValues(predicates, predicate) {
|
|
232
|
-
return (predicates.get(predicate) ?? [])
|
|
233
|
-
.map((object) => isRecord(object) && object.type === 'iri' && typeof object.value === 'string' ? object.value : '')
|
|
234
|
-
.filter(Boolean);
|
|
235
|
-
}
|
|
236
|
-
function iriValuesFrom(predicates, predicatesToTry) {
|
|
237
|
-
const values = predicatesToTry.flatMap((predicate) => iriValues(predicates, predicate));
|
|
238
|
-
return [...new Set(values)];
|
|
239
|
-
}
|
|
240
192
|
function grantSourceHash(row) {
|
|
241
193
|
return `approval:${row.id}:${row.toolCallId}:${row.risk}`;
|
|
242
194
|
}
|
|
@@ -406,65 +358,6 @@ function createOrmRemoteApprovalStore(podSession) {
|
|
|
406
358
|
};
|
|
407
359
|
return createSharedModelRemoteApprovalStore(podSession.webId, getDb);
|
|
408
360
|
}
|
|
409
|
-
function createSharedModelRemoteApprovalStore(webId, getDb) {
|
|
410
|
-
const listApprovals = async () => {
|
|
411
|
-
const rows = await modelList(getDb, approvalResource);
|
|
412
|
-
return rows.map((row) => enrichApprovalRow(webId, row));
|
|
413
|
-
};
|
|
414
|
-
return {
|
|
415
|
-
listApprovals,
|
|
416
|
-
findApproval: async (id, options = {}) => {
|
|
417
|
-
if (options.resourceUri) {
|
|
418
|
-
const row = await modelFindByIri(getDb, approvalResource, options.resourceUri);
|
|
419
|
-
return row ? enrichApprovalRow(webId, row, options.resourceUri) : null;
|
|
420
|
-
}
|
|
421
|
-
if (options.createdAt) {
|
|
422
|
-
const createdAt = new Date(toIsoString(options.createdAt, new Date().toISOString()));
|
|
423
|
-
const iri = approvalIriForCreatedAt(webId, id, createdAt);
|
|
424
|
-
const row = await modelFindByIri(getDb, approvalResource, iri);
|
|
425
|
-
return row ? enrichApprovalRow(webId, row, iri) : null;
|
|
426
|
-
}
|
|
427
|
-
const row = await modelFindById(getDb, approvalResource, id);
|
|
428
|
-
return row ? enrichApprovalRow(webId, row) : null;
|
|
429
|
-
},
|
|
430
|
-
insertApproval: async (row) => {
|
|
431
|
-
await modelInsert(getDb, approvalResource, omitInternalFields(row));
|
|
432
|
-
},
|
|
433
|
-
updateApproval: async (id, patch, options = {}) => {
|
|
434
|
-
const explicitIri = options.resourceUri
|
|
435
|
-
?? normalizeString(patch.approvalUri)
|
|
436
|
-
?? (options.createdAt ? approvalIriForCreatedAt(webId, id, new Date(toIsoString(options.createdAt, new Date().toISOString()))) : undefined);
|
|
437
|
-
if (explicitIri) {
|
|
438
|
-
await modelUpdateByIri(getDb, approvalResource, explicitIri, omitInternalFields(patch));
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
const updated = await modelUpdateById(getDb, approvalResource, id, omitInternalFields(patch));
|
|
442
|
-
if (!updated) {
|
|
443
|
-
throw new Error(`Remote approval not found: ${id}`);
|
|
444
|
-
}
|
|
445
|
-
},
|
|
446
|
-
claimApproval: async (input) => {
|
|
447
|
-
const db = await getDb();
|
|
448
|
-
return claimApprovalRequest(db, {
|
|
449
|
-
approval: input.approvalUri,
|
|
450
|
-
leaseOwner: input.leaseOwner,
|
|
451
|
-
leaseDurationMs: input.leaseDurationMs,
|
|
452
|
-
now: input.now,
|
|
453
|
-
});
|
|
454
|
-
},
|
|
455
|
-
listAudits: () => modelList(getDb, auditResource),
|
|
456
|
-
insertAudit: async (row) => {
|
|
457
|
-
await modelInsert(getDb, auditResource, omitInternalFields(row));
|
|
458
|
-
},
|
|
459
|
-
listGrants: () => modelList(getDb, grantResource),
|
|
460
|
-
insertGrant: async (row) => {
|
|
461
|
-
await modelInsert(getDb, grantResource, omitInternalFields(row));
|
|
462
|
-
},
|
|
463
|
-
insertInboxNotification: async (row) => {
|
|
464
|
-
await modelInsert(getDb, inboxNotificationResource, omitInternalFields(row));
|
|
465
|
-
},
|
|
466
|
-
};
|
|
467
|
-
}
|
|
468
361
|
export function createInboxNotificationControlResourceClaimHandler(input) {
|
|
469
362
|
return async (request) => claimInboxNotificationControlResource({
|
|
470
363
|
controlResourceUri: request.controlResource,
|
|
@@ -563,481 +456,6 @@ function mapModelsControlClaimStatus(status) {
|
|
|
563
456
|
}
|
|
564
457
|
return 'display_only';
|
|
565
458
|
}
|
|
566
|
-
async function modelList(getDb, resource) {
|
|
567
|
-
const db = await getDb();
|
|
568
|
-
return await db.select().from(resource).execute();
|
|
569
|
-
}
|
|
570
|
-
async function modelFindByIri(getDb, resource, iri) {
|
|
571
|
-
const db = await getDb();
|
|
572
|
-
return await db.findByIri(resource, iri);
|
|
573
|
-
}
|
|
574
|
-
async function modelFindById(getDb, resource, id) {
|
|
575
|
-
const db = await getDb();
|
|
576
|
-
return await db.findById(resource, id);
|
|
577
|
-
}
|
|
578
|
-
async function modelInsert(getDb, resource, row) {
|
|
579
|
-
const db = await getDb();
|
|
580
|
-
await db.insert(resource).values(stripUndefined(row)).execute();
|
|
581
|
-
}
|
|
582
|
-
async function modelUpdateByIri(getDb, resource, iri, patch) {
|
|
583
|
-
const db = await getDb();
|
|
584
|
-
const update = stripUndefined(patch);
|
|
585
|
-
delete update.id;
|
|
586
|
-
delete update.approvalUri;
|
|
587
|
-
await db.updateByIri(resource, iri, update);
|
|
588
|
-
}
|
|
589
|
-
async function modelUpdateById(getDb, resource, id, patch) {
|
|
590
|
-
const db = await getDb();
|
|
591
|
-
const update = stripUndefined(patch);
|
|
592
|
-
delete update.id;
|
|
593
|
-
delete update.approvalUri;
|
|
594
|
-
return await db.updateById(resource, id, update);
|
|
595
|
-
}
|
|
596
|
-
function stripUndefined(row) {
|
|
597
|
-
const next = {};
|
|
598
|
-
for (const [key, value] of Object.entries(row)) {
|
|
599
|
-
if (value !== undefined) {
|
|
600
|
-
next[key] = value;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
return next;
|
|
604
|
-
}
|
|
605
|
-
function omitInternalFields(row) {
|
|
606
|
-
const next = stripUndefined(row);
|
|
607
|
-
delete next.approvalUri;
|
|
608
|
-
delete next['@id'];
|
|
609
|
-
delete next.subject;
|
|
610
|
-
delete next.uri;
|
|
611
|
-
return next;
|
|
612
|
-
}
|
|
613
|
-
function rowSubject(row) {
|
|
614
|
-
return normalizeString(row['@id'])
|
|
615
|
-
?? normalizeString(row.subject)
|
|
616
|
-
?? normalizeString(row.uri);
|
|
617
|
-
}
|
|
618
|
-
function enrichApprovalRow(webId, row, explicitIri) {
|
|
619
|
-
const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
|
|
620
|
-
return {
|
|
621
|
-
...row,
|
|
622
|
-
approvalUri: explicitIri
|
|
623
|
-
?? normalizeString(row.approvalUri)
|
|
624
|
-
?? rowSubject(row)
|
|
625
|
-
?? approvalIriForCreatedAt(webId, row.id, createdAt),
|
|
626
|
-
};
|
|
627
|
-
}
|
|
628
|
-
function createNativeRemoteApprovalStore(webId, fetcher) {
|
|
629
|
-
return {
|
|
630
|
-
listApprovals: () => listApprovalRows(webId, fetcher),
|
|
631
|
-
findApproval: (id, options) => findApprovalRow(webId, fetcher, id, options),
|
|
632
|
-
insertApproval: (row) => writeApprovalRow(webId, fetcher, row),
|
|
633
|
-
async updateApproval(id, patch, options = {}) {
|
|
634
|
-
const explicitIri = options.resourceUri
|
|
635
|
-
?? normalizeString(patch.approvalUri)
|
|
636
|
-
?? (options.createdAt ? buildApprovalResourceUrl(webId, id, new Date(toIsoString(options.createdAt, new Date().toISOString()))) : undefined);
|
|
637
|
-
const existing = explicitIri
|
|
638
|
-
? await readApprovalRowFromResource(fetcher, explicitIri)
|
|
639
|
-
: (await listApprovalRows(webId, fetcher)).find((row) => row.id === id);
|
|
640
|
-
if (!existing) {
|
|
641
|
-
throw new Error(`Remote approval not found: ${id}`);
|
|
642
|
-
}
|
|
643
|
-
await writeApprovalRow(webId, fetcher, { ...existing, ...patch });
|
|
644
|
-
},
|
|
645
|
-
claimApproval: async (input) => claimNativeApproval(webId, fetcher, input),
|
|
646
|
-
listAudits: () => listAuditRows(webId, fetcher),
|
|
647
|
-
insertAudit: (row) => writeAuditRow(webId, fetcher, row),
|
|
648
|
-
listGrants: () => listGrantRows(webId, fetcher),
|
|
649
|
-
insertGrant: (row) => writeGrantRow(webId, fetcher, row),
|
|
650
|
-
insertInboxNotification: (row) => writeInboxNotificationRow(webId, fetcher, row),
|
|
651
|
-
};
|
|
652
|
-
}
|
|
653
|
-
async function claimNativeApproval(webId, fetcher, input) {
|
|
654
|
-
const now = normalizeClaimDate(input.now);
|
|
655
|
-
const leaseDurationMs = input.leaseDurationMs ?? 60_000;
|
|
656
|
-
if (!Number.isFinite(leaseDurationMs) || leaseDurationMs <= 0) {
|
|
657
|
-
throw new Error('Approval claim leaseDurationMs must be a positive finite number.');
|
|
658
|
-
}
|
|
659
|
-
const leaseExpiresAt = new Date(now.getTime() + leaseDurationMs);
|
|
660
|
-
const missingResult = {
|
|
661
|
-
status: 'not_found',
|
|
662
|
-
approval: null,
|
|
663
|
-
leaseOwner: input.leaseOwner,
|
|
664
|
-
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
665
|
-
reason: 'Approval request was not found.',
|
|
666
|
-
};
|
|
667
|
-
const existing = await readApprovalRowFromResource(fetcher, input.approvalUri);
|
|
668
|
-
if (!existing) {
|
|
669
|
-
return missingResult;
|
|
670
|
-
}
|
|
671
|
-
if (!isClaimableControlStatus(existing.status)) {
|
|
672
|
-
return {
|
|
673
|
-
status: 'not_actionable',
|
|
674
|
-
approval: existing,
|
|
675
|
-
leaseOwner: input.leaseOwner,
|
|
676
|
-
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
677
|
-
reason: `Approval request status is ${String(existing.status || 'empty')}.`,
|
|
678
|
-
};
|
|
679
|
-
}
|
|
680
|
-
if (isPastDate(existing.expiresAt, now)) {
|
|
681
|
-
return {
|
|
682
|
-
status: 'not_actionable',
|
|
683
|
-
approval: existing,
|
|
684
|
-
leaseOwner: input.leaseOwner,
|
|
685
|
-
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
686
|
-
reason: 'Approval request is past expiresAt.',
|
|
687
|
-
};
|
|
688
|
-
}
|
|
689
|
-
if (hasActiveForeignLease(existing, input.leaseOwner, now)) {
|
|
690
|
-
return {
|
|
691
|
-
status: 'lost',
|
|
692
|
-
approval: existing,
|
|
693
|
-
leaseOwner: input.leaseOwner,
|
|
694
|
-
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
695
|
-
reason: 'Approval request is leased by another client.',
|
|
696
|
-
};
|
|
697
|
-
}
|
|
698
|
-
await writeApprovalRow(webId, fetcher, {
|
|
699
|
-
...existing,
|
|
700
|
-
status: 'handling',
|
|
701
|
-
leaseOwner: input.leaseOwner,
|
|
702
|
-
leaseExpiresAt,
|
|
703
|
-
});
|
|
704
|
-
const claimed = await readApprovalRowFromResource(fetcher, input.approvalUri);
|
|
705
|
-
if (claimed?.leaseOwner === input.leaseOwner && !isPastDate(claimed.leaseExpiresAt, now)) {
|
|
706
|
-
return {
|
|
707
|
-
status: 'claimed',
|
|
708
|
-
approval: claimed,
|
|
709
|
-
leaseOwner: input.leaseOwner,
|
|
710
|
-
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
711
|
-
};
|
|
712
|
-
}
|
|
713
|
-
return {
|
|
714
|
-
status: 'lost',
|
|
715
|
-
approval: (claimed ?? existing),
|
|
716
|
-
leaseOwner: input.leaseOwner,
|
|
717
|
-
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
718
|
-
reason: 'Approval request lease was not retained after update.',
|
|
719
|
-
};
|
|
720
|
-
}
|
|
721
|
-
function normalizeClaimDate(value) {
|
|
722
|
-
const date = value instanceof Date ? value : new Date(value ?? Date.now());
|
|
723
|
-
if (Number.isNaN(date.getTime())) {
|
|
724
|
-
throw new Error('Invalid approval claim timestamp.');
|
|
725
|
-
}
|
|
726
|
-
return date;
|
|
727
|
-
}
|
|
728
|
-
function isClaimableControlStatus(status) {
|
|
729
|
-
if (typeof status !== 'string' || !status.trim()) {
|
|
730
|
-
return true;
|
|
731
|
-
}
|
|
732
|
-
const normalized = status.trim();
|
|
733
|
-
return normalized === 'pending' || normalized === 'handling';
|
|
734
|
-
}
|
|
735
|
-
function hasActiveForeignLease(row, leaseOwner, now) {
|
|
736
|
-
if (row.leaseOwner === leaseOwner) {
|
|
737
|
-
return false;
|
|
738
|
-
}
|
|
739
|
-
const currentOwner = normalizeString(row.leaseOwner);
|
|
740
|
-
if (!currentOwner) {
|
|
741
|
-
return false;
|
|
742
|
-
}
|
|
743
|
-
return !isPastDate(row.leaseExpiresAt, now);
|
|
744
|
-
}
|
|
745
|
-
function isPastDate(value, now) {
|
|
746
|
-
if (!value) {
|
|
747
|
-
return false;
|
|
748
|
-
}
|
|
749
|
-
const date = value instanceof Date ? value : new Date(value);
|
|
750
|
-
return !Number.isNaN(date.getTime()) && date.getTime() <= now.getTime();
|
|
751
|
-
}
|
|
752
|
-
async function findApprovalRow(webId, fetcher, id, options = {}) {
|
|
753
|
-
if (options.resourceUri) {
|
|
754
|
-
return readApprovalRowFromResource(fetcher, options.resourceUri);
|
|
755
|
-
}
|
|
756
|
-
if (options.createdAt) {
|
|
757
|
-
const createdAt = new Date(toIsoString(options.createdAt, new Date().toISOString()));
|
|
758
|
-
return readApprovalRowFromResource(fetcher, buildApprovalResourceUrl(webId, id, createdAt));
|
|
759
|
-
}
|
|
760
|
-
return (await listApprovalRows(webId, fetcher)).find((row) => row.id === id) ?? null;
|
|
761
|
-
}
|
|
762
|
-
async function readApprovalRowFromResource(fetcher, resourceUri) {
|
|
763
|
-
const turtle = await readTurtleResource(fetcher, documentUrlFromResourceUri(resourceUri));
|
|
764
|
-
if (!turtle) {
|
|
765
|
-
return null;
|
|
766
|
-
}
|
|
767
|
-
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, documentUrlFromResourceUri(resourceUri))) {
|
|
768
|
-
if (subject !== resourceUri) {
|
|
769
|
-
continue;
|
|
770
|
-
}
|
|
771
|
-
const row = approvalRowFromPredicates(subject, predicates);
|
|
772
|
-
if (row) {
|
|
773
|
-
return row;
|
|
774
|
-
}
|
|
775
|
-
}
|
|
776
|
-
return null;
|
|
777
|
-
}
|
|
778
|
-
async function listApprovalRows(webId, fetcher) {
|
|
779
|
-
const urls = [
|
|
780
|
-
...recentApprovalDocumentUrls(webId),
|
|
781
|
-
...await listTurtleResources(fetcher, `${resolvePodBaseUrl(webId)}/.data/approvals/`).catch(() => []),
|
|
782
|
-
];
|
|
783
|
-
const rows = [];
|
|
784
|
-
for (const url of [...new Set(urls)].filter((entry) => entry.endsWith('.ttl'))) {
|
|
785
|
-
const turtle = await readTurtleResource(fetcher, url).catch(() => null);
|
|
786
|
-
if (!turtle)
|
|
787
|
-
continue;
|
|
788
|
-
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
|
|
789
|
-
const row = approvalRowFromPredicates(subject, predicates);
|
|
790
|
-
if (row)
|
|
791
|
-
rows.push(row);
|
|
792
|
-
}
|
|
793
|
-
}
|
|
794
|
-
return rows;
|
|
795
|
-
}
|
|
796
|
-
function recentApprovalDocumentUrls(webId, days = DEFAULT_APPROVAL_LIST_DAYS) {
|
|
797
|
-
const urls = [];
|
|
798
|
-
const base = Date.now();
|
|
799
|
-
for (let offset = 0; offset < days; offset += 1) {
|
|
800
|
-
const date = new Date(base - offset * 24 * 60 * 60 * 1000);
|
|
801
|
-
urls.push(buildApprovalDocumentUrl(webId, date));
|
|
802
|
-
}
|
|
803
|
-
return urls;
|
|
804
|
-
}
|
|
805
|
-
async function writeApprovalRow(webId, fetcher, row) {
|
|
806
|
-
const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
|
|
807
|
-
const documentUrl = buildApprovalDocumentUrl(webId, createdAt);
|
|
808
|
-
const subjectUrl = buildApprovalResourceUrl(webId, row.id, createdAt);
|
|
809
|
-
await upsertManagedTurtleBlock(fetcher, documentUrl, {
|
|
810
|
-
subject: subjectUrl,
|
|
811
|
-
triples: [
|
|
812
|
-
{ predicate: RDF_TYPE, object: iri(UDFS.ApprovalRequest) },
|
|
813
|
-
{ predicate: ApprovalVocab.session, object: iri(row.session) },
|
|
814
|
-
{ predicate: ApprovalVocab.toolCallId, object: literal(row.toolCallId) },
|
|
815
|
-
{ predicate: ApprovalVocab.toolName, object: literal(row.toolName) },
|
|
816
|
-
{ predicate: ApprovalVocab.target, object: iri(row.target) },
|
|
817
|
-
{ predicate: ApprovalVocab.action, object: iri(row.action) },
|
|
818
|
-
{ predicate: ApprovalVocab.risk, object: literal(row.risk) },
|
|
819
|
-
{ predicate: ApprovalVocab.status, object: literal(row.status) },
|
|
820
|
-
...(row.leaseOwner ? [{ predicate: ApprovalVocab.leaseOwner, object: literal(row.leaseOwner) }] : []),
|
|
821
|
-
...(row.leaseExpiresAt ? [{ predicate: ApprovalVocab.leaseExpiresAt, object: literal(toIsoString(row.leaseExpiresAt, new Date().toISOString())) }] : []),
|
|
822
|
-
...(row.assignedTo ? [{ predicate: ApprovalVocab.assignedTo, object: iri(row.assignedTo) }] : []),
|
|
823
|
-
...(row.decisionBy ? [{ predicate: ApprovalVocab.decisionBy, object: iri(row.decisionBy) }] : []),
|
|
824
|
-
...(row.decisionRole ? [{ predicate: ApprovalVocab.decisionRole, object: literal(row.decisionRole) }] : []),
|
|
825
|
-
...(row.onBehalfOf ? [{ predicate: ApprovalVocab.onBehalfOf, object: iri(row.onBehalfOf) }] : []),
|
|
826
|
-
...(row.reason ? [{ predicate: ApprovalVocab.reason, object: literal(row.reason) }] : []),
|
|
827
|
-
...(row.context ? [{ predicate: ApprovalVocab.context, object: literal(row.context) }] : []),
|
|
828
|
-
...(row.approvalOptions ? [{ predicate: ApprovalVocab.approvalOptions, object: literal(row.approvalOptions) }] : []),
|
|
829
|
-
...(row.policyVersion ? [{ predicate: ApprovalVocab.policyVersion, object: literal(row.policyVersion) }] : []),
|
|
830
|
-
{ predicate: ApprovalVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
831
|
-
...(row.expiresAt ? [{ predicate: ApprovalVocab.expiresAt, object: literal(toIsoString(row.expiresAt, new Date().toISOString())) }] : []),
|
|
832
|
-
...(row.resolvedAt ? [{ predicate: ApprovalVocab.resolvedAt, object: literal(toIsoString(row.resolvedAt, new Date().toISOString())) }] : []),
|
|
833
|
-
],
|
|
834
|
-
});
|
|
835
|
-
}
|
|
836
|
-
async function listAuditRows(webId, fetcher) {
|
|
837
|
-
const urls = await listTurtleResourcesRecursive(fetcher, `${resolvePodBaseUrl(webId)}/.data/audits/`);
|
|
838
|
-
const rows = [];
|
|
839
|
-
for (const url of urls.filter((entry) => entry.endsWith('.ttl'))) {
|
|
840
|
-
const turtle = await readTurtleResource(fetcher, url).catch(() => null);
|
|
841
|
-
if (!turtle)
|
|
842
|
-
continue;
|
|
843
|
-
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
|
|
844
|
-
const row = auditRowFromPredicates(subject, predicates);
|
|
845
|
-
if (row)
|
|
846
|
-
rows.push(row);
|
|
847
|
-
}
|
|
848
|
-
}
|
|
849
|
-
return rows;
|
|
850
|
-
}
|
|
851
|
-
async function writeAuditRow(webId, fetcher, row) {
|
|
852
|
-
const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
|
|
853
|
-
const documentUrl = buildAuditDocumentUrl(webId, createdAt);
|
|
854
|
-
const subjectUrl = buildAuditResourceUrl(webId, row.id, createdAt);
|
|
855
|
-
await upsertManagedTurtleBlock(fetcher, documentUrl, {
|
|
856
|
-
subject: subjectUrl,
|
|
857
|
-
triples: [
|
|
858
|
-
{ predicate: RDF_TYPE, object: iri(UDFS.AuditEntry) },
|
|
859
|
-
{ predicate: AuditVocab.action, object: literal(row.action) },
|
|
860
|
-
{ predicate: AuditVocab.actor, object: iri(row.actor) },
|
|
861
|
-
{ predicate: AuditVocab.actorRole, object: literal(row.actorRole) },
|
|
862
|
-
...(row.onBehalfOf ? [{ predicate: AuditVocab.onBehalfOf, object: iri(row.onBehalfOf) }] : []),
|
|
863
|
-
...(row.session ? [{ predicate: AuditVocab.session, object: iri(row.session) }] : []),
|
|
864
|
-
...(row.entry ? [{ predicate: AuditVocab.entry, object: iri(row.entry) }] : []),
|
|
865
|
-
...(row.toolCallId ? [{ predicate: AuditVocab.toolCallId, object: literal(row.toolCallId) }] : []),
|
|
866
|
-
...(row.toolName ? [{ predicate: AuditVocab.toolName, object: literal(row.toolName) }] : []),
|
|
867
|
-
...(row.approval ? [{ predicate: AuditVocab.approval, object: iri(row.approval) }] : []),
|
|
868
|
-
...(row.policyVersion ? [{ predicate: AuditVocab.policyVersion, object: literal(row.policyVersion) }] : []),
|
|
869
|
-
{ predicate: AuditVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
870
|
-
],
|
|
871
|
-
});
|
|
872
|
-
}
|
|
873
|
-
async function listGrantRows(webId, fetcher) {
|
|
874
|
-
const urls = [
|
|
875
|
-
...await listTurtleResources(fetcher, `${resolvePodBaseUrl(webId)}/settings/autonomy/grants/`).catch(() => []),
|
|
876
|
-
];
|
|
877
|
-
const rows = [];
|
|
878
|
-
for (const url of urls.filter((entry) => entry.endsWith('.ttl'))) {
|
|
879
|
-
const turtle = await readTurtleResource(fetcher, url).catch(() => null);
|
|
880
|
-
if (!turtle)
|
|
881
|
-
continue;
|
|
882
|
-
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
|
|
883
|
-
const row = grantRowFromPredicates(subject, predicates);
|
|
884
|
-
if (row)
|
|
885
|
-
rows.push(row);
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
return rows;
|
|
889
|
-
}
|
|
890
|
-
async function writeGrantRow(webId, fetcher, row) {
|
|
891
|
-
const id = normalizeString(row.id) ?? crypto.randomUUID();
|
|
892
|
-
const subjectUrl = buildGrantResourceUrl(webId, id);
|
|
893
|
-
const documentUrl = subjectUrl;
|
|
894
|
-
const target = normalizeString(row.target);
|
|
895
|
-
const action = normalizeString(row.action);
|
|
896
|
-
const effect = normalizeString(row.effect);
|
|
897
|
-
const decisionBy = normalizeString(row.decisionBy);
|
|
898
|
-
const decisionRole = normalizeString(row.decisionRole);
|
|
899
|
-
if (!target || !action || !effect || !decisionBy || !decisionRole) {
|
|
900
|
-
throw new Error(`Invalid remote approval grant row: ${id}`);
|
|
901
|
-
}
|
|
902
|
-
await upsertManagedTurtleBlock(fetcher, documentUrl, {
|
|
903
|
-
subject: subjectUrl,
|
|
904
|
-
triples: [
|
|
905
|
-
{ predicate: RDF_TYPE, object: iri(ODRL.Policy) },
|
|
906
|
-
{ predicate: RDF_TYPE, object: iri(UDFS.AutonomyGrant) },
|
|
907
|
-
{ predicate: GrantVocab.target, object: iri(target) },
|
|
908
|
-
{ predicate: GrantVocab.action, object: iri(action) },
|
|
909
|
-
...(normalizeString(row.title) ? [{ predicate: GrantVocab.title, object: literal(truncatePodLiteral(normalizeString(row.title), 160)) }] : []),
|
|
910
|
-
...(normalizeString(row.summary) ? [{ predicate: GrantVocab.summary, object: literal(truncatePodLiteral(normalizeString(row.summary), 500)) }] : []),
|
|
911
|
-
...(normalizeString(row.body) ? [{ predicate: GrantVocab.description, object: literal(truncatePodLiteral(normalizeString(row.body), MAX_GRANT_POLICY_LENGTH)) }] : []),
|
|
912
|
-
...(normalizeString(row.schema) ? [{ predicate: GrantVocab.schema, object: iri(normalizeString(row.schema)) }] : []),
|
|
913
|
-
...(normalizeString(row.pageKind) ? [{ predicate: GrantVocab.pageKind, object: literal(normalizeString(row.pageKind)) }] : []),
|
|
914
|
-
...(normalizeString(row.wikiStatus) ? [{ predicate: GrantVocab.wikiStatus, object: literal(normalizeString(row.wikiStatus)) }] : []),
|
|
915
|
-
...(normalizeString(row.tags) ? [{ predicate: GrantVocab.tags, object: literal(truncatePodLiteral(normalizeString(row.tags), 500)) }] : []),
|
|
916
|
-
...(normalizeString(row.source) ? [{ predicate: GrantVocab.source, object: literal(normalizeString(row.source)) }] : []),
|
|
917
|
-
...(normalizeString(row.sourceHash) ? [{ predicate: GrantVocab.sourceHash, object: literal(normalizeString(row.sourceHash)) }] : []),
|
|
918
|
-
...(row.compiledAt ? [{ predicate: GrantVocab.compiledAt, object: literal(toIsoString(row.compiledAt, new Date().toISOString())) }] : []),
|
|
919
|
-
...(row.compiledFrom ?? []).map((value) => ({ predicate: GrantVocab.compiledFrom, object: iri(value) })),
|
|
920
|
-
...(row.related ?? []).map((value) => ({ predicate: GrantVocab.related, object: iri(value) })),
|
|
921
|
-
{ predicate: GrantVocab.effect, object: literal(effect) },
|
|
922
|
-
...(normalizeString(row.riskCeiling) ? [{ predicate: GrantVocab.riskCeiling, object: literal(normalizeString(row.riskCeiling)) }] : []),
|
|
923
|
-
...(normalizeString(row.policy) ? [{ predicate: GrantVocab.policy, object: literal(truncatePodLiteral(normalizeString(row.policy), MAX_GRANT_POLICY_LENGTH)) }] : []),
|
|
924
|
-
...(normalizeString(row.context) ? [{ predicate: GrantVocab.context, object: literal(truncatePodLiteral(normalizeString(row.context), MAX_APPROVAL_CONTEXT_LENGTH)) }] : []),
|
|
925
|
-
{ predicate: GrantVocab.decisionBy, object: iri(decisionBy) },
|
|
926
|
-
{ predicate: GrantVocab.decisionRole, object: literal(decisionRole) },
|
|
927
|
-
...(normalizeString(row.onBehalfOf) ? [{ predicate: GrantVocab.onBehalfOf, object: iri(normalizeString(row.onBehalfOf)) }] : []),
|
|
928
|
-
{ predicate: GrantVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
929
|
-
...(normalizeString(row.revokedAt) ? [{ predicate: GrantVocab.revokedAt, object: literal(normalizeString(row.revokedAt)) }] : []),
|
|
930
|
-
],
|
|
931
|
-
});
|
|
932
|
-
}
|
|
933
|
-
async function writeInboxNotificationRow(webId, fetcher, row) {
|
|
934
|
-
const url = buildInboxResourceUrl(webId, row.id);
|
|
935
|
-
await upsertManagedTurtleBlock(fetcher, url, {
|
|
936
|
-
subject: url,
|
|
937
|
-
triples: [
|
|
938
|
-
{ predicate: RDF_TYPE, object: iri(AS.Announce) },
|
|
939
|
-
...(row.actor ? [{ predicate: InboxNotificationVocab.actor, object: iri(row.actor) }] : []),
|
|
940
|
-
{ predicate: InboxNotificationVocab.object, object: iri(row.object) },
|
|
941
|
-
{ predicate: InboxNotificationVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
942
|
-
],
|
|
943
|
-
});
|
|
944
|
-
}
|
|
945
|
-
function approvalRowFromPredicates(url, predicates) {
|
|
946
|
-
const session = firstIri(predicates, ApprovalVocab.session);
|
|
947
|
-
const toolCallId = firstLiteral(predicates, ApprovalVocab.toolCallId);
|
|
948
|
-
const toolName = firstLiteral(predicates, ApprovalVocab.toolName);
|
|
949
|
-
const target = firstIri(predicates, ApprovalVocab.target);
|
|
950
|
-
const action = firstIri(predicates, ApprovalVocab.action);
|
|
951
|
-
const risk = firstLiteral(predicates, ApprovalVocab.risk);
|
|
952
|
-
const status = firstLiteral(predicates, ApprovalVocab.status);
|
|
953
|
-
const createdAt = firstLiteral(predicates, ApprovalVocab.createdAt);
|
|
954
|
-
if (!session || !toolCallId || !toolName || !target || !action || !risk || !status || !createdAt) {
|
|
955
|
-
return null;
|
|
956
|
-
}
|
|
957
|
-
return {
|
|
958
|
-
id: subjectIdFromResourceUrl(url),
|
|
959
|
-
session,
|
|
960
|
-
toolCallId,
|
|
961
|
-
toolName,
|
|
962
|
-
target,
|
|
963
|
-
action,
|
|
964
|
-
risk,
|
|
965
|
-
status,
|
|
966
|
-
leaseOwner: firstLiteral(predicates, ApprovalVocab.leaseOwner),
|
|
967
|
-
leaseExpiresAt: firstLiteral(predicates, ApprovalVocab.leaseExpiresAt),
|
|
968
|
-
assignedTo: firstIri(predicates, ApprovalVocab.assignedTo),
|
|
969
|
-
decisionBy: firstIri(predicates, ApprovalVocab.decisionBy),
|
|
970
|
-
decisionRole: firstLiteral(predicates, ApprovalVocab.decisionRole),
|
|
971
|
-
onBehalfOf: firstIri(predicates, ApprovalVocab.onBehalfOf),
|
|
972
|
-
reason: firstLiteral(predicates, ApprovalVocab.reason),
|
|
973
|
-
context: firstLiteral(predicates, ApprovalVocab.context),
|
|
974
|
-
approvalOptions: firstLiteral(predicates, ApprovalVocab.approvalOptions),
|
|
975
|
-
policyVersion: firstLiteral(predicates, ApprovalVocab.policyVersion),
|
|
976
|
-
createdAt,
|
|
977
|
-
expiresAt: firstLiteral(predicates, ApprovalVocab.expiresAt),
|
|
978
|
-
resolvedAt: firstLiteral(predicates, ApprovalVocab.resolvedAt),
|
|
979
|
-
};
|
|
980
|
-
}
|
|
981
|
-
function auditRowFromPredicates(url, predicates) {
|
|
982
|
-
const action = firstLiteral(predicates, AuditVocab.action);
|
|
983
|
-
const actor = firstIri(predicates, AuditVocab.actor);
|
|
984
|
-
const actorRole = firstLiteral(predicates, AuditVocab.actorRole);
|
|
985
|
-
const createdAt = firstLiteral(predicates, AuditVocab.createdAt);
|
|
986
|
-
if (!action || !actor || !actorRole || !createdAt) {
|
|
987
|
-
return null;
|
|
988
|
-
}
|
|
989
|
-
return {
|
|
990
|
-
id: subjectIdFromResourceUrl(url),
|
|
991
|
-
action,
|
|
992
|
-
actor,
|
|
993
|
-
actorRole,
|
|
994
|
-
onBehalfOf: firstIri(predicates, AuditVocab.onBehalfOf),
|
|
995
|
-
session: firstIri(predicates, AuditVocab.session),
|
|
996
|
-
entry: firstIri(predicates, AuditVocab.entry),
|
|
997
|
-
toolCallId: firstLiteral(predicates, AuditVocab.toolCallId),
|
|
998
|
-
toolName: firstLiteral(predicates, AuditVocab.toolName),
|
|
999
|
-
approval: firstIri(predicates, AuditVocab.approval),
|
|
1000
|
-
policyVersion: firstLiteral(predicates, AuditVocab.policyVersion),
|
|
1001
|
-
createdAt,
|
|
1002
|
-
};
|
|
1003
|
-
}
|
|
1004
|
-
function grantRowFromPredicates(url, predicates) {
|
|
1005
|
-
const target = firstIri(predicates, GrantVocab.target);
|
|
1006
|
-
const action = firstIri(predicates, GrantVocab.action);
|
|
1007
|
-
const effect = firstLiteral(predicates, GrantVocab.effect);
|
|
1008
|
-
const decisionBy = firstIri(predicates, GrantVocab.decisionBy);
|
|
1009
|
-
const decisionRole = firstLiteral(predicates, GrantVocab.decisionRole);
|
|
1010
|
-
const createdAt = firstLiteral(predicates, GrantVocab.createdAt);
|
|
1011
|
-
if (!target || !action || !effect || !decisionBy || !decisionRole || !createdAt) {
|
|
1012
|
-
return null;
|
|
1013
|
-
}
|
|
1014
|
-
return {
|
|
1015
|
-
id: subjectIdFromResourceUrl(url),
|
|
1016
|
-
target,
|
|
1017
|
-
action,
|
|
1018
|
-
title: firstLiteral(predicates, GrantVocab.title),
|
|
1019
|
-
summary: firstLiteralValue(predicates, GrantReadVocab.summary),
|
|
1020
|
-
body: firstLiteralValue(predicates, GrantReadVocab.description),
|
|
1021
|
-
schema: firstIri(predicates, GrantVocab.schema),
|
|
1022
|
-
pageKind: firstLiteral(predicates, GrantVocab.pageKind),
|
|
1023
|
-
wikiStatus: firstLiteral(predicates, GrantVocab.wikiStatus),
|
|
1024
|
-
tags: firstLiteral(predicates, GrantVocab.tags),
|
|
1025
|
-
source: firstLiteralValue(predicates, GrantReadVocab.source),
|
|
1026
|
-
sourceHash: firstLiteral(predicates, GrantVocab.sourceHash),
|
|
1027
|
-
compiledAt: firstLiteral(predicates, GrantVocab.compiledAt),
|
|
1028
|
-
compiledFrom: iriValues(predicates, GrantVocab.compiledFrom),
|
|
1029
|
-
related: iriValuesFrom(predicates, GrantReadVocab.related),
|
|
1030
|
-
effect,
|
|
1031
|
-
riskCeiling: firstLiteral(predicates, GrantVocab.riskCeiling),
|
|
1032
|
-
policy: firstLiteral(predicates, GrantVocab.policy),
|
|
1033
|
-
context: firstLiteral(predicates, GrantVocab.context),
|
|
1034
|
-
decisionBy,
|
|
1035
|
-
decisionRole,
|
|
1036
|
-
onBehalfOf: firstIri(predicates, GrantVocab.onBehalfOf),
|
|
1037
|
-
createdAt,
|
|
1038
|
-
revokedAt: firstLiteral(predicates, GrantVocab.revokedAt),
|
|
1039
|
-
};
|
|
1040
|
-
}
|
|
1041
459
|
function isActiveAllowGrant(grant) {
|
|
1042
460
|
return grant.effect === 'allow' && !grant.revokedAt && !!(normalizeString(grant.body) || normalizeString(grant.policy));
|
|
1043
461
|
}
|
|
@@ -1482,25 +900,4 @@ async function readRemoteApprovalRow(store, options) {
|
|
|
1482
900
|
const approvals = await store.listApprovals();
|
|
1483
901
|
return approvals.find((entry) => entry.id === options.approvalId) ?? null;
|
|
1484
902
|
}
|
|
1485
|
-
export const __podApprovalInternal = {
|
|
1486
|
-
createAbortError,
|
|
1487
|
-
createDefaultRuntime,
|
|
1488
|
-
buildActionUri,
|
|
1489
|
-
buildRisk,
|
|
1490
|
-
buildToolName,
|
|
1491
|
-
claimInboxNotificationControlResource,
|
|
1492
|
-
createInboxNotificationControlResourceClaimHandler,
|
|
1493
|
-
createSharedModelRemoteApprovalStore,
|
|
1494
|
-
createNativeRemoteApprovalStore,
|
|
1495
|
-
classifyInboxNotificationControlResource,
|
|
1496
|
-
extractToolCallId,
|
|
1497
|
-
decisionFromApprovalRow,
|
|
1498
|
-
encodeDecisionReason: buildAutoModeApprovalDecisionReason,
|
|
1499
|
-
formatSummaryHeadline,
|
|
1500
|
-
grantSourceHash,
|
|
1501
|
-
readRemoteApprovalRow,
|
|
1502
|
-
isRemoteApprovalAbortError,
|
|
1503
|
-
normalizeApprovalSummary,
|
|
1504
|
-
parseDecisionReason: parseAutoModeApprovalDecisionReason,
|
|
1505
|
-
};
|
|
1506
903
|
//# sourceMappingURL=pod-approval.js.map
|