@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,15 +1,5 @@
|
|
|
1
1
|
import { getDefaultPodDataSession } from '../pod-data-session.js';
|
|
2
|
-
import { aiConfigRepository,
|
|
3
|
-
function selectPodCredentialForBackend(backend, credentials, providers) {
|
|
4
|
-
const selected = selectAIConfigCredentialForBackend(backend, credentials, providers);
|
|
5
|
-
if (!selected)
|
|
6
|
-
return null;
|
|
7
|
-
return {
|
|
8
|
-
providerId: selected.providerId,
|
|
9
|
-
apiKey: selected.apiKey,
|
|
10
|
-
baseUrl: selected.baseUrl,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
2
|
+
import { aiConfigRepository, } from '../models.js';
|
|
13
3
|
function buildBackendEnv(match, backend) {
|
|
14
4
|
if (backend === 'claude') {
|
|
15
5
|
return {
|
|
@@ -100,7 +90,4 @@ export async function loadPodBackendCredential(backend, runtime) {
|
|
|
100
90
|
await aiConfigRepository.markCredentialUsed(rows.db, rows.match);
|
|
101
91
|
return buildBackendEnv(rows.match, backend);
|
|
102
92
|
}
|
|
103
|
-
export const __podInternal = {
|
|
104
|
-
selectPodCredentialForBackend,
|
|
105
|
-
};
|
|
106
93
|
//# sourceMappingURL=pod-ai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pod-ai.js","sourceRoot":"","sources":["../../../src/lib/auto-mode/pod-ai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAuB,MAAM,wBAAwB,CAAA;AACtF,OAAO,EACL,kBAAkB,
|
|
1
|
+
{"version":3,"file":"pod-ai.js","sourceRoot":"","sources":["../../../src/lib/auto-mode/pod-ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,596 @@
|
|
|
1
|
+
import { resolvePodBaseUrl } from '@undefineds.co/drizzle-solid';
|
|
2
|
+
import { AS, ODRL, UDFS } from '@undefineds.co/models/namespaces';
|
|
3
|
+
import { ApprovalVocab, AuditVocab, GrantReadVocab, GrantVocab, InboxNotificationVocab } from '@undefineds.co/models/vocab/sidecar';
|
|
4
|
+
import { approvalResource, auditResource, claimApprovalRequest, grantResource, inboxNotificationResource, } from '../models.js';
|
|
5
|
+
import { buildApprovalDocumentUrl, RDF_TYPE, buildApprovalResourceUrl, buildAuditDocumentUrl, buildAuditResourceUrl, buildGrantResourceUrl, buildInboxResourceUrl, firstIri, firstLiteral, iri, listTurtleResources, listTurtleResourcesRecursive, literal, parseManagedTurtleBlocks, readTurtleResource, subjectIdFromResourceUrl, upsertManagedTurtleBlock, } from '../pod-native.js';
|
|
6
|
+
export const DEFAULT_APPROVAL_LIST_DAYS = 7;
|
|
7
|
+
export const MAX_GRANT_POLICY_LENGTH = 1200;
|
|
8
|
+
export const MAX_APPROVAL_CONTEXT_LENGTH = 1400;
|
|
9
|
+
export function normalizeString(value) {
|
|
10
|
+
return typeof value === 'string' && value.trim() ? value.trim() : undefined;
|
|
11
|
+
}
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
export function toIsoString(value, fallback) {
|
|
16
|
+
if (value instanceof Date) {
|
|
17
|
+
return value.toISOString();
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === 'string' && value.trim()) {
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
return fallback;
|
|
23
|
+
}
|
|
24
|
+
export function approvalIriForCreatedAt(webIdOrUri, approvalId, createdAt) {
|
|
25
|
+
return approvalResource.buildIri(webIdOrUri, {
|
|
26
|
+
id: approvalId,
|
|
27
|
+
createdAt,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function documentUrlFromResourceUri(resourceUri) {
|
|
31
|
+
return resourceUri.split('#', 1)[0] ?? resourceUri;
|
|
32
|
+
}
|
|
33
|
+
function truncatePodLiteral(value, maxLength) {
|
|
34
|
+
if (value.length <= maxLength) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
return `${value.slice(0, Math.max(0, maxLength - 15))}...[truncated]`;
|
|
38
|
+
}
|
|
39
|
+
function literalValues(predicates, predicate) {
|
|
40
|
+
return (predicates.get(predicate) ?? [])
|
|
41
|
+
.map((object) => isRecord(object) && object.type === 'literal' && typeof object.value === 'string' ? object.value : '')
|
|
42
|
+
.filter(Boolean);
|
|
43
|
+
}
|
|
44
|
+
function firstLiteralValue(predicates, predicatesToTry) {
|
|
45
|
+
for (const predicate of predicatesToTry) {
|
|
46
|
+
const [value] = literalValues(predicates, predicate);
|
|
47
|
+
if (value) {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
function iriValues(predicates, predicate) {
|
|
54
|
+
return (predicates.get(predicate) ?? [])
|
|
55
|
+
.map((object) => isRecord(object) && object.type === 'iri' && typeof object.value === 'string' ? object.value : '')
|
|
56
|
+
.filter(Boolean);
|
|
57
|
+
}
|
|
58
|
+
function iriValuesFrom(predicates, predicatesToTry) {
|
|
59
|
+
const values = predicatesToTry.flatMap((predicate) => iriValues(predicates, predicate));
|
|
60
|
+
return [...new Set(values)];
|
|
61
|
+
}
|
|
62
|
+
export function createSharedModelRemoteApprovalStore(webId, getDb) {
|
|
63
|
+
const listApprovals = async () => {
|
|
64
|
+
const rows = await modelList(getDb, approvalResource);
|
|
65
|
+
return rows.map((row) => enrichApprovalRow(webId, row));
|
|
66
|
+
};
|
|
67
|
+
return {
|
|
68
|
+
listApprovals,
|
|
69
|
+
findApproval: async (id, options = {}) => {
|
|
70
|
+
if (options.resourceUri) {
|
|
71
|
+
const row = await modelFindByIri(getDb, approvalResource, options.resourceUri);
|
|
72
|
+
return row ? enrichApprovalRow(webId, row, options.resourceUri) : null;
|
|
73
|
+
}
|
|
74
|
+
if (options.createdAt) {
|
|
75
|
+
const createdAt = new Date(toIsoString(options.createdAt, new Date().toISOString()));
|
|
76
|
+
const iri = approvalIriForCreatedAt(webId, id, createdAt);
|
|
77
|
+
const row = await modelFindByIri(getDb, approvalResource, iri);
|
|
78
|
+
return row ? enrichApprovalRow(webId, row, iri) : null;
|
|
79
|
+
}
|
|
80
|
+
const row = await modelFindById(getDb, approvalResource, id);
|
|
81
|
+
return row ? enrichApprovalRow(webId, row) : null;
|
|
82
|
+
},
|
|
83
|
+
insertApproval: async (row) => {
|
|
84
|
+
await modelInsert(getDb, approvalResource, omitInternalFields(row));
|
|
85
|
+
},
|
|
86
|
+
updateApproval: async (id, patch, options = {}) => {
|
|
87
|
+
const explicitIri = options.resourceUri
|
|
88
|
+
?? normalizeString(patch.approvalUri)
|
|
89
|
+
?? (options.createdAt ? approvalIriForCreatedAt(webId, id, new Date(toIsoString(options.createdAt, new Date().toISOString()))) : undefined);
|
|
90
|
+
if (explicitIri) {
|
|
91
|
+
await modelUpdateByIri(getDb, approvalResource, explicitIri, omitInternalFields(patch));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const updated = await modelUpdateById(getDb, approvalResource, id, omitInternalFields(patch));
|
|
95
|
+
if (!updated) {
|
|
96
|
+
throw new Error(`Remote approval not found: ${id}`);
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
claimApproval: async (input) => {
|
|
100
|
+
const db = await getDb();
|
|
101
|
+
return claimApprovalRequest(db, {
|
|
102
|
+
approval: input.approvalUri,
|
|
103
|
+
leaseOwner: input.leaseOwner,
|
|
104
|
+
leaseDurationMs: input.leaseDurationMs,
|
|
105
|
+
now: input.now,
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
listAudits: () => modelList(getDb, auditResource),
|
|
109
|
+
insertAudit: async (row) => {
|
|
110
|
+
await modelInsert(getDb, auditResource, omitInternalFields(row));
|
|
111
|
+
},
|
|
112
|
+
listGrants: () => modelList(getDb, grantResource),
|
|
113
|
+
insertGrant: async (row) => {
|
|
114
|
+
await modelInsert(getDb, grantResource, omitInternalFields(row));
|
|
115
|
+
},
|
|
116
|
+
insertInboxNotification: async (row) => {
|
|
117
|
+
await modelInsert(getDb, inboxNotificationResource, omitInternalFields(row));
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
async function modelList(getDb, resource) {
|
|
122
|
+
const db = await getDb();
|
|
123
|
+
return await db.select().from(resource).execute();
|
|
124
|
+
}
|
|
125
|
+
async function modelFindByIri(getDb, resource, iri) {
|
|
126
|
+
const db = await getDb();
|
|
127
|
+
return await db.findByIri(resource, iri);
|
|
128
|
+
}
|
|
129
|
+
async function modelFindById(getDb, resource, id) {
|
|
130
|
+
const db = await getDb();
|
|
131
|
+
return await db.findById(resource, id);
|
|
132
|
+
}
|
|
133
|
+
async function modelInsert(getDb, resource, row) {
|
|
134
|
+
const db = await getDb();
|
|
135
|
+
await db.insert(resource).values(stripUndefined(row)).execute();
|
|
136
|
+
}
|
|
137
|
+
async function modelUpdateByIri(getDb, resource, iri, patch) {
|
|
138
|
+
const db = await getDb();
|
|
139
|
+
const update = stripUndefined(patch);
|
|
140
|
+
delete update.id;
|
|
141
|
+
delete update.approvalUri;
|
|
142
|
+
await db.updateByIri(resource, iri, update);
|
|
143
|
+
}
|
|
144
|
+
async function modelUpdateById(getDb, resource, id, patch) {
|
|
145
|
+
const db = await getDb();
|
|
146
|
+
const update = stripUndefined(patch);
|
|
147
|
+
delete update.id;
|
|
148
|
+
delete update.approvalUri;
|
|
149
|
+
return await db.updateById(resource, id, update);
|
|
150
|
+
}
|
|
151
|
+
function stripUndefined(row) {
|
|
152
|
+
const next = {};
|
|
153
|
+
for (const [key, value] of Object.entries(row)) {
|
|
154
|
+
if (value !== undefined) {
|
|
155
|
+
next[key] = value;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return next;
|
|
159
|
+
}
|
|
160
|
+
function omitInternalFields(row) {
|
|
161
|
+
const next = stripUndefined(row);
|
|
162
|
+
delete next.approvalUri;
|
|
163
|
+
delete next['@id'];
|
|
164
|
+
delete next.subject;
|
|
165
|
+
delete next.uri;
|
|
166
|
+
return next;
|
|
167
|
+
}
|
|
168
|
+
function rowSubject(row) {
|
|
169
|
+
return normalizeString(row['@id'])
|
|
170
|
+
?? normalizeString(row.subject)
|
|
171
|
+
?? normalizeString(row.uri);
|
|
172
|
+
}
|
|
173
|
+
function enrichApprovalRow(webId, row, explicitIri) {
|
|
174
|
+
const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
|
|
175
|
+
return {
|
|
176
|
+
...row,
|
|
177
|
+
approvalUri: explicitIri
|
|
178
|
+
?? normalizeString(row.approvalUri)
|
|
179
|
+
?? rowSubject(row)
|
|
180
|
+
?? approvalIriForCreatedAt(webId, row.id, createdAt),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
export function createNativeRemoteApprovalStore(webId, fetcher) {
|
|
184
|
+
return {
|
|
185
|
+
listApprovals: () => listApprovalRows(webId, fetcher),
|
|
186
|
+
findApproval: (id, options) => findApprovalRow(webId, fetcher, id, options),
|
|
187
|
+
insertApproval: (row) => writeApprovalRow(webId, fetcher, row),
|
|
188
|
+
async updateApproval(id, patch, options = {}) {
|
|
189
|
+
const explicitIri = options.resourceUri
|
|
190
|
+
?? normalizeString(patch.approvalUri)
|
|
191
|
+
?? (options.createdAt ? buildApprovalResourceUrl(webId, id, new Date(toIsoString(options.createdAt, new Date().toISOString()))) : undefined);
|
|
192
|
+
const existing = explicitIri
|
|
193
|
+
? await readApprovalRowFromResource(fetcher, explicitIri)
|
|
194
|
+
: (await listApprovalRows(webId, fetcher)).find((row) => row.id === id);
|
|
195
|
+
if (!existing) {
|
|
196
|
+
throw new Error(`Remote approval not found: ${id}`);
|
|
197
|
+
}
|
|
198
|
+
await writeApprovalRow(webId, fetcher, { ...existing, ...patch });
|
|
199
|
+
},
|
|
200
|
+
claimApproval: async (input) => claimNativeApproval(webId, fetcher, input),
|
|
201
|
+
listAudits: () => listAuditRows(webId, fetcher),
|
|
202
|
+
insertAudit: (row) => writeAuditRow(webId, fetcher, row),
|
|
203
|
+
listGrants: () => listGrantRows(webId, fetcher),
|
|
204
|
+
insertGrant: (row) => writeGrantRow(webId, fetcher, row),
|
|
205
|
+
insertInboxNotification: (row) => writeInboxNotificationRow(webId, fetcher, row),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
async function claimNativeApproval(webId, fetcher, input) {
|
|
209
|
+
const now = normalizeClaimDate(input.now);
|
|
210
|
+
const leaseDurationMs = input.leaseDurationMs ?? 60_000;
|
|
211
|
+
if (!Number.isFinite(leaseDurationMs) || leaseDurationMs <= 0) {
|
|
212
|
+
throw new Error('Approval claim leaseDurationMs must be a positive finite number.');
|
|
213
|
+
}
|
|
214
|
+
const leaseExpiresAt = new Date(now.getTime() + leaseDurationMs);
|
|
215
|
+
const missingResult = {
|
|
216
|
+
status: 'not_found',
|
|
217
|
+
approval: null,
|
|
218
|
+
leaseOwner: input.leaseOwner,
|
|
219
|
+
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
220
|
+
reason: 'Approval request was not found.',
|
|
221
|
+
};
|
|
222
|
+
const existing = await readApprovalRowFromResource(fetcher, input.approvalUri);
|
|
223
|
+
if (!existing) {
|
|
224
|
+
return missingResult;
|
|
225
|
+
}
|
|
226
|
+
if (!isClaimableControlStatus(existing.status)) {
|
|
227
|
+
return {
|
|
228
|
+
status: 'not_actionable',
|
|
229
|
+
approval: existing,
|
|
230
|
+
leaseOwner: input.leaseOwner,
|
|
231
|
+
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
232
|
+
reason: `Approval request status is ${String(existing.status || 'empty')}.`,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (isPastDate(existing.expiresAt, now)) {
|
|
236
|
+
return {
|
|
237
|
+
status: 'not_actionable',
|
|
238
|
+
approval: existing,
|
|
239
|
+
leaseOwner: input.leaseOwner,
|
|
240
|
+
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
241
|
+
reason: 'Approval request is past expiresAt.',
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
if (hasActiveForeignLease(existing, input.leaseOwner, now)) {
|
|
245
|
+
return {
|
|
246
|
+
status: 'lost',
|
|
247
|
+
approval: existing,
|
|
248
|
+
leaseOwner: input.leaseOwner,
|
|
249
|
+
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
250
|
+
reason: 'Approval request is leased by another client.',
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
await writeApprovalRow(webId, fetcher, {
|
|
254
|
+
...existing,
|
|
255
|
+
status: 'handling',
|
|
256
|
+
leaseOwner: input.leaseOwner,
|
|
257
|
+
leaseExpiresAt,
|
|
258
|
+
});
|
|
259
|
+
const claimed = await readApprovalRowFromResource(fetcher, input.approvalUri);
|
|
260
|
+
if (claimed?.leaseOwner === input.leaseOwner && !isPastDate(claimed.leaseExpiresAt, now)) {
|
|
261
|
+
return {
|
|
262
|
+
status: 'claimed',
|
|
263
|
+
approval: claimed,
|
|
264
|
+
leaseOwner: input.leaseOwner,
|
|
265
|
+
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
status: 'lost',
|
|
270
|
+
approval: (claimed ?? existing),
|
|
271
|
+
leaseOwner: input.leaseOwner,
|
|
272
|
+
leaseExpiresAt: leaseExpiresAt.toISOString(),
|
|
273
|
+
reason: 'Approval request lease was not retained after update.',
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
function normalizeClaimDate(value) {
|
|
277
|
+
const date = value instanceof Date ? value : new Date(value ?? Date.now());
|
|
278
|
+
if (Number.isNaN(date.getTime())) {
|
|
279
|
+
throw new Error('Invalid approval claim timestamp.');
|
|
280
|
+
}
|
|
281
|
+
return date;
|
|
282
|
+
}
|
|
283
|
+
function isClaimableControlStatus(status) {
|
|
284
|
+
if (typeof status !== 'string' || !status.trim()) {
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
const normalized = status.trim();
|
|
288
|
+
return normalized === 'pending' || normalized === 'handling';
|
|
289
|
+
}
|
|
290
|
+
function hasActiveForeignLease(row, leaseOwner, now) {
|
|
291
|
+
if (row.leaseOwner === leaseOwner) {
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
const currentOwner = normalizeString(row.leaseOwner);
|
|
295
|
+
if (!currentOwner) {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
return !isPastDate(row.leaseExpiresAt, now);
|
|
299
|
+
}
|
|
300
|
+
function isPastDate(value, now) {
|
|
301
|
+
if (!value) {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
305
|
+
return !Number.isNaN(date.getTime()) && date.getTime() <= now.getTime();
|
|
306
|
+
}
|
|
307
|
+
async function findApprovalRow(webId, fetcher, id, options = {}) {
|
|
308
|
+
if (options.resourceUri) {
|
|
309
|
+
return readApprovalRowFromResource(fetcher, options.resourceUri);
|
|
310
|
+
}
|
|
311
|
+
if (options.createdAt) {
|
|
312
|
+
const createdAt = new Date(toIsoString(options.createdAt, new Date().toISOString()));
|
|
313
|
+
return readApprovalRowFromResource(fetcher, buildApprovalResourceUrl(webId, id, createdAt));
|
|
314
|
+
}
|
|
315
|
+
return (await listApprovalRows(webId, fetcher)).find((row) => row.id === id) ?? null;
|
|
316
|
+
}
|
|
317
|
+
async function readApprovalRowFromResource(fetcher, resourceUri) {
|
|
318
|
+
const turtle = await readTurtleResource(fetcher, documentUrlFromResourceUri(resourceUri));
|
|
319
|
+
if (!turtle) {
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, documentUrlFromResourceUri(resourceUri))) {
|
|
323
|
+
if (subject !== resourceUri) {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
const row = approvalRowFromPredicates(subject, predicates);
|
|
327
|
+
if (row) {
|
|
328
|
+
return row;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return null;
|
|
332
|
+
}
|
|
333
|
+
async function listApprovalRows(webId, fetcher) {
|
|
334
|
+
const urls = [
|
|
335
|
+
...recentApprovalDocumentUrls(webId),
|
|
336
|
+
...await listTurtleResources(fetcher, `${resolvePodBaseUrl(webId)}/.data/approvals/`).catch(() => []),
|
|
337
|
+
];
|
|
338
|
+
const rows = [];
|
|
339
|
+
for (const url of [...new Set(urls)].filter((entry) => entry.endsWith('.ttl'))) {
|
|
340
|
+
const turtle = await readTurtleResource(fetcher, url).catch(() => null);
|
|
341
|
+
if (!turtle)
|
|
342
|
+
continue;
|
|
343
|
+
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
|
|
344
|
+
const row = approvalRowFromPredicates(subject, predicates);
|
|
345
|
+
if (row)
|
|
346
|
+
rows.push(row);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
return rows;
|
|
350
|
+
}
|
|
351
|
+
function recentApprovalDocumentUrls(webId, days = DEFAULT_APPROVAL_LIST_DAYS) {
|
|
352
|
+
const urls = [];
|
|
353
|
+
const base = Date.now();
|
|
354
|
+
for (let offset = 0; offset < days; offset += 1) {
|
|
355
|
+
const date = new Date(base - offset * 24 * 60 * 60 * 1000);
|
|
356
|
+
urls.push(buildApprovalDocumentUrl(webId, date));
|
|
357
|
+
}
|
|
358
|
+
return urls;
|
|
359
|
+
}
|
|
360
|
+
async function writeApprovalRow(webId, fetcher, row) {
|
|
361
|
+
const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
|
|
362
|
+
const documentUrl = buildApprovalDocumentUrl(webId, createdAt);
|
|
363
|
+
const subjectUrl = buildApprovalResourceUrl(webId, row.id, createdAt);
|
|
364
|
+
await upsertManagedTurtleBlock(fetcher, documentUrl, {
|
|
365
|
+
subject: subjectUrl,
|
|
366
|
+
triples: [
|
|
367
|
+
{ predicate: RDF_TYPE, object: iri(UDFS.ApprovalRequest) },
|
|
368
|
+
{ predicate: ApprovalVocab.session, object: iri(row.session) },
|
|
369
|
+
{ predicate: ApprovalVocab.toolCallId, object: literal(row.toolCallId) },
|
|
370
|
+
{ predicate: ApprovalVocab.toolName, object: literal(row.toolName) },
|
|
371
|
+
{ predicate: ApprovalVocab.target, object: iri(row.target) },
|
|
372
|
+
{ predicate: ApprovalVocab.action, object: iri(row.action) },
|
|
373
|
+
{ predicate: ApprovalVocab.risk, object: literal(row.risk) },
|
|
374
|
+
{ predicate: ApprovalVocab.status, object: literal(row.status) },
|
|
375
|
+
...(row.leaseOwner ? [{ predicate: ApprovalVocab.leaseOwner, object: literal(row.leaseOwner) }] : []),
|
|
376
|
+
...(row.leaseExpiresAt ? [{ predicate: ApprovalVocab.leaseExpiresAt, object: literal(toIsoString(row.leaseExpiresAt, new Date().toISOString())) }] : []),
|
|
377
|
+
...(row.assignedTo ? [{ predicate: ApprovalVocab.assignedTo, object: iri(row.assignedTo) }] : []),
|
|
378
|
+
...(row.decisionBy ? [{ predicate: ApprovalVocab.decisionBy, object: iri(row.decisionBy) }] : []),
|
|
379
|
+
...(row.decisionRole ? [{ predicate: ApprovalVocab.decisionRole, object: literal(row.decisionRole) }] : []),
|
|
380
|
+
...(row.onBehalfOf ? [{ predicate: ApprovalVocab.onBehalfOf, object: iri(row.onBehalfOf) }] : []),
|
|
381
|
+
...(row.reason ? [{ predicate: ApprovalVocab.reason, object: literal(row.reason) }] : []),
|
|
382
|
+
...(row.context ? [{ predicate: ApprovalVocab.context, object: literal(row.context) }] : []),
|
|
383
|
+
...(row.approvalOptions ? [{ predicate: ApprovalVocab.approvalOptions, object: literal(row.approvalOptions) }] : []),
|
|
384
|
+
...(row.policyVersion ? [{ predicate: ApprovalVocab.policyVersion, object: literal(row.policyVersion) }] : []),
|
|
385
|
+
{ predicate: ApprovalVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
386
|
+
...(row.expiresAt ? [{ predicate: ApprovalVocab.expiresAt, object: literal(toIsoString(row.expiresAt, new Date().toISOString())) }] : []),
|
|
387
|
+
...(row.resolvedAt ? [{ predicate: ApprovalVocab.resolvedAt, object: literal(toIsoString(row.resolvedAt, new Date().toISOString())) }] : []),
|
|
388
|
+
],
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
async function listAuditRows(webId, fetcher) {
|
|
392
|
+
const urls = await listTurtleResourcesRecursive(fetcher, `${resolvePodBaseUrl(webId)}/.data/audits/`);
|
|
393
|
+
const rows = [];
|
|
394
|
+
for (const url of urls.filter((entry) => entry.endsWith('.ttl'))) {
|
|
395
|
+
const turtle = await readTurtleResource(fetcher, url).catch(() => null);
|
|
396
|
+
if (!turtle)
|
|
397
|
+
continue;
|
|
398
|
+
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
|
|
399
|
+
const row = auditRowFromPredicates(subject, predicates);
|
|
400
|
+
if (row)
|
|
401
|
+
rows.push(row);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return rows;
|
|
405
|
+
}
|
|
406
|
+
async function writeAuditRow(webId, fetcher, row) {
|
|
407
|
+
const createdAt = new Date(toIsoString(row.createdAt, new Date().toISOString()));
|
|
408
|
+
const documentUrl = buildAuditDocumentUrl(webId, createdAt);
|
|
409
|
+
const subjectUrl = buildAuditResourceUrl(webId, row.id, createdAt);
|
|
410
|
+
await upsertManagedTurtleBlock(fetcher, documentUrl, {
|
|
411
|
+
subject: subjectUrl,
|
|
412
|
+
triples: [
|
|
413
|
+
{ predicate: RDF_TYPE, object: iri(UDFS.AuditEntry) },
|
|
414
|
+
{ predicate: AuditVocab.action, object: literal(row.action) },
|
|
415
|
+
{ predicate: AuditVocab.actor, object: iri(row.actor) },
|
|
416
|
+
{ predicate: AuditVocab.actorRole, object: literal(row.actorRole) },
|
|
417
|
+
...(row.onBehalfOf ? [{ predicate: AuditVocab.onBehalfOf, object: iri(row.onBehalfOf) }] : []),
|
|
418
|
+
...(row.session ? [{ predicate: AuditVocab.session, object: iri(row.session) }] : []),
|
|
419
|
+
...(row.entry ? [{ predicate: AuditVocab.entry, object: iri(row.entry) }] : []),
|
|
420
|
+
...(row.toolCallId ? [{ predicate: AuditVocab.toolCallId, object: literal(row.toolCallId) }] : []),
|
|
421
|
+
...(row.toolName ? [{ predicate: AuditVocab.toolName, object: literal(row.toolName) }] : []),
|
|
422
|
+
...(row.approval ? [{ predicate: AuditVocab.approval, object: iri(row.approval) }] : []),
|
|
423
|
+
...(row.policyVersion ? [{ predicate: AuditVocab.policyVersion, object: literal(row.policyVersion) }] : []),
|
|
424
|
+
{ predicate: AuditVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
425
|
+
],
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
async function listGrantRows(webId, fetcher) {
|
|
429
|
+
const urls = [
|
|
430
|
+
...await listTurtleResources(fetcher, `${resolvePodBaseUrl(webId)}/settings/autonomy/grants/`).catch(() => []),
|
|
431
|
+
];
|
|
432
|
+
const rows = [];
|
|
433
|
+
for (const url of urls.filter((entry) => entry.endsWith('.ttl'))) {
|
|
434
|
+
const turtle = await readTurtleResource(fetcher, url).catch(() => null);
|
|
435
|
+
if (!turtle)
|
|
436
|
+
continue;
|
|
437
|
+
for (const [subject, predicates] of parseManagedTurtleBlocks(turtle, url)) {
|
|
438
|
+
const row = grantRowFromPredicates(subject, predicates);
|
|
439
|
+
if (row)
|
|
440
|
+
rows.push(row);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return rows;
|
|
444
|
+
}
|
|
445
|
+
async function writeGrantRow(webId, fetcher, row) {
|
|
446
|
+
const id = normalizeString(row.id) ?? crypto.randomUUID();
|
|
447
|
+
const subjectUrl = buildGrantResourceUrl(webId, id);
|
|
448
|
+
const documentUrl = subjectUrl;
|
|
449
|
+
const target = normalizeString(row.target);
|
|
450
|
+
const action = normalizeString(row.action);
|
|
451
|
+
const effect = normalizeString(row.effect);
|
|
452
|
+
const decisionBy = normalizeString(row.decisionBy);
|
|
453
|
+
const decisionRole = normalizeString(row.decisionRole);
|
|
454
|
+
if (!target || !action || !effect || !decisionBy || !decisionRole) {
|
|
455
|
+
throw new Error(`Invalid remote approval grant row: ${id}`);
|
|
456
|
+
}
|
|
457
|
+
await upsertManagedTurtleBlock(fetcher, documentUrl, {
|
|
458
|
+
subject: subjectUrl,
|
|
459
|
+
triples: [
|
|
460
|
+
{ predicate: RDF_TYPE, object: iri(ODRL.Policy) },
|
|
461
|
+
{ predicate: RDF_TYPE, object: iri(UDFS.AutonomyGrant) },
|
|
462
|
+
{ predicate: GrantVocab.target, object: iri(target) },
|
|
463
|
+
{ predicate: GrantVocab.action, object: iri(action) },
|
|
464
|
+
...(normalizeString(row.title) ? [{ predicate: GrantVocab.title, object: literal(truncatePodLiteral(normalizeString(row.title), 160)) }] : []),
|
|
465
|
+
...(normalizeString(row.summary) ? [{ predicate: GrantVocab.summary, object: literal(truncatePodLiteral(normalizeString(row.summary), 500)) }] : []),
|
|
466
|
+
...(normalizeString(row.body) ? [{ predicate: GrantVocab.description, object: literal(truncatePodLiteral(normalizeString(row.body), MAX_GRANT_POLICY_LENGTH)) }] : []),
|
|
467
|
+
...(normalizeString(row.schema) ? [{ predicate: GrantVocab.schema, object: iri(normalizeString(row.schema)) }] : []),
|
|
468
|
+
...(normalizeString(row.pageKind) ? [{ predicate: GrantVocab.pageKind, object: literal(normalizeString(row.pageKind)) }] : []),
|
|
469
|
+
...(normalizeString(row.wikiStatus) ? [{ predicate: GrantVocab.wikiStatus, object: literal(normalizeString(row.wikiStatus)) }] : []),
|
|
470
|
+
...(normalizeString(row.tags) ? [{ predicate: GrantVocab.tags, object: literal(truncatePodLiteral(normalizeString(row.tags), 500)) }] : []),
|
|
471
|
+
...(normalizeString(row.source) ? [{ predicate: GrantVocab.source, object: literal(normalizeString(row.source)) }] : []),
|
|
472
|
+
...(normalizeString(row.sourceHash) ? [{ predicate: GrantVocab.sourceHash, object: literal(normalizeString(row.sourceHash)) }] : []),
|
|
473
|
+
...(row.compiledAt ? [{ predicate: GrantVocab.compiledAt, object: literal(toIsoString(row.compiledAt, new Date().toISOString())) }] : []),
|
|
474
|
+
...(row.compiledFrom ?? []).map((value) => ({ predicate: GrantVocab.compiledFrom, object: iri(value) })),
|
|
475
|
+
...(row.related ?? []).map((value) => ({ predicate: GrantVocab.related, object: iri(value) })),
|
|
476
|
+
{ predicate: GrantVocab.effect, object: literal(effect) },
|
|
477
|
+
...(normalizeString(row.riskCeiling) ? [{ predicate: GrantVocab.riskCeiling, object: literal(normalizeString(row.riskCeiling)) }] : []),
|
|
478
|
+
...(normalizeString(row.policy) ? [{ predicate: GrantVocab.policy, object: literal(truncatePodLiteral(normalizeString(row.policy), MAX_GRANT_POLICY_LENGTH)) }] : []),
|
|
479
|
+
...(normalizeString(row.context) ? [{ predicate: GrantVocab.context, object: literal(truncatePodLiteral(normalizeString(row.context), MAX_APPROVAL_CONTEXT_LENGTH)) }] : []),
|
|
480
|
+
{ predicate: GrantVocab.decisionBy, object: iri(decisionBy) },
|
|
481
|
+
{ predicate: GrantVocab.decisionRole, object: literal(decisionRole) },
|
|
482
|
+
...(normalizeString(row.onBehalfOf) ? [{ predicate: GrantVocab.onBehalfOf, object: iri(normalizeString(row.onBehalfOf)) }] : []),
|
|
483
|
+
{ predicate: GrantVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
484
|
+
...(normalizeString(row.revokedAt) ? [{ predicate: GrantVocab.revokedAt, object: literal(normalizeString(row.revokedAt)) }] : []),
|
|
485
|
+
],
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
async function writeInboxNotificationRow(webId, fetcher, row) {
|
|
489
|
+
const url = buildInboxResourceUrl(webId, row.id);
|
|
490
|
+
await upsertManagedTurtleBlock(fetcher, url, {
|
|
491
|
+
subject: url,
|
|
492
|
+
triples: [
|
|
493
|
+
{ predicate: RDF_TYPE, object: iri(AS.Announce) },
|
|
494
|
+
...(row.actor ? [{ predicate: InboxNotificationVocab.actor, object: iri(row.actor) }] : []),
|
|
495
|
+
{ predicate: InboxNotificationVocab.object, object: iri(row.object) },
|
|
496
|
+
{ predicate: InboxNotificationVocab.createdAt, object: literal(toIsoString(row.createdAt, new Date().toISOString())) },
|
|
497
|
+
],
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
function approvalRowFromPredicates(url, predicates) {
|
|
501
|
+
const session = firstIri(predicates, ApprovalVocab.session);
|
|
502
|
+
const toolCallId = firstLiteral(predicates, ApprovalVocab.toolCallId);
|
|
503
|
+
const toolName = firstLiteral(predicates, ApprovalVocab.toolName);
|
|
504
|
+
const target = firstIri(predicates, ApprovalVocab.target);
|
|
505
|
+
const action = firstIri(predicates, ApprovalVocab.action);
|
|
506
|
+
const risk = firstLiteral(predicates, ApprovalVocab.risk);
|
|
507
|
+
const status = firstLiteral(predicates, ApprovalVocab.status);
|
|
508
|
+
const createdAt = firstLiteral(predicates, ApprovalVocab.createdAt);
|
|
509
|
+
if (!session || !toolCallId || !toolName || !target || !action || !risk || !status || !createdAt) {
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
return {
|
|
513
|
+
id: subjectIdFromResourceUrl(url),
|
|
514
|
+
session,
|
|
515
|
+
toolCallId,
|
|
516
|
+
toolName,
|
|
517
|
+
target,
|
|
518
|
+
action,
|
|
519
|
+
risk,
|
|
520
|
+
status,
|
|
521
|
+
leaseOwner: firstLiteral(predicates, ApprovalVocab.leaseOwner),
|
|
522
|
+
leaseExpiresAt: firstLiteral(predicates, ApprovalVocab.leaseExpiresAt),
|
|
523
|
+
assignedTo: firstIri(predicates, ApprovalVocab.assignedTo),
|
|
524
|
+
decisionBy: firstIri(predicates, ApprovalVocab.decisionBy),
|
|
525
|
+
decisionRole: firstLiteral(predicates, ApprovalVocab.decisionRole),
|
|
526
|
+
onBehalfOf: firstIri(predicates, ApprovalVocab.onBehalfOf),
|
|
527
|
+
reason: firstLiteral(predicates, ApprovalVocab.reason),
|
|
528
|
+
context: firstLiteral(predicates, ApprovalVocab.context),
|
|
529
|
+
approvalOptions: firstLiteral(predicates, ApprovalVocab.approvalOptions),
|
|
530
|
+
policyVersion: firstLiteral(predicates, ApprovalVocab.policyVersion),
|
|
531
|
+
createdAt,
|
|
532
|
+
expiresAt: firstLiteral(predicates, ApprovalVocab.expiresAt),
|
|
533
|
+
resolvedAt: firstLiteral(predicates, ApprovalVocab.resolvedAt),
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
function auditRowFromPredicates(url, predicates) {
|
|
537
|
+
const action = firstLiteral(predicates, AuditVocab.action);
|
|
538
|
+
const actor = firstIri(predicates, AuditVocab.actor);
|
|
539
|
+
const actorRole = firstLiteral(predicates, AuditVocab.actorRole);
|
|
540
|
+
const createdAt = firstLiteral(predicates, AuditVocab.createdAt);
|
|
541
|
+
if (!action || !actor || !actorRole || !createdAt) {
|
|
542
|
+
return null;
|
|
543
|
+
}
|
|
544
|
+
return {
|
|
545
|
+
id: subjectIdFromResourceUrl(url),
|
|
546
|
+
action,
|
|
547
|
+
actor,
|
|
548
|
+
actorRole,
|
|
549
|
+
onBehalfOf: firstIri(predicates, AuditVocab.onBehalfOf),
|
|
550
|
+
session: firstIri(predicates, AuditVocab.session),
|
|
551
|
+
entry: firstIri(predicates, AuditVocab.entry),
|
|
552
|
+
toolCallId: firstLiteral(predicates, AuditVocab.toolCallId),
|
|
553
|
+
toolName: firstLiteral(predicates, AuditVocab.toolName),
|
|
554
|
+
approval: firstIri(predicates, AuditVocab.approval),
|
|
555
|
+
policyVersion: firstLiteral(predicates, AuditVocab.policyVersion),
|
|
556
|
+
createdAt,
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
function grantRowFromPredicates(url, predicates) {
|
|
560
|
+
const target = firstIri(predicates, GrantVocab.target);
|
|
561
|
+
const action = firstIri(predicates, GrantVocab.action);
|
|
562
|
+
const effect = firstLiteral(predicates, GrantVocab.effect);
|
|
563
|
+
const decisionBy = firstIri(predicates, GrantVocab.decisionBy);
|
|
564
|
+
const decisionRole = firstLiteral(predicates, GrantVocab.decisionRole);
|
|
565
|
+
const createdAt = firstLiteral(predicates, GrantVocab.createdAt);
|
|
566
|
+
if (!target || !action || !effect || !decisionBy || !decisionRole || !createdAt) {
|
|
567
|
+
return null;
|
|
568
|
+
}
|
|
569
|
+
return {
|
|
570
|
+
id: subjectIdFromResourceUrl(url),
|
|
571
|
+
target,
|
|
572
|
+
action,
|
|
573
|
+
title: firstLiteral(predicates, GrantVocab.title),
|
|
574
|
+
summary: firstLiteralValue(predicates, GrantReadVocab.summary),
|
|
575
|
+
body: firstLiteralValue(predicates, GrantReadVocab.description),
|
|
576
|
+
schema: firstIri(predicates, GrantVocab.schema),
|
|
577
|
+
pageKind: firstLiteral(predicates, GrantVocab.pageKind),
|
|
578
|
+
wikiStatus: firstLiteral(predicates, GrantVocab.wikiStatus),
|
|
579
|
+
tags: firstLiteral(predicates, GrantVocab.tags),
|
|
580
|
+
source: firstLiteralValue(predicates, GrantReadVocab.source),
|
|
581
|
+
sourceHash: firstLiteral(predicates, GrantVocab.sourceHash),
|
|
582
|
+
compiledAt: firstLiteral(predicates, GrantVocab.compiledAt),
|
|
583
|
+
compiledFrom: iriValues(predicates, GrantVocab.compiledFrom),
|
|
584
|
+
related: iriValuesFrom(predicates, GrantReadVocab.related),
|
|
585
|
+
effect,
|
|
586
|
+
riskCeiling: firstLiteral(predicates, GrantVocab.riskCeiling),
|
|
587
|
+
policy: firstLiteral(predicates, GrantVocab.policy),
|
|
588
|
+
context: firstLiteral(predicates, GrantVocab.context),
|
|
589
|
+
decisionBy,
|
|
590
|
+
decisionRole,
|
|
591
|
+
onBehalfOf: firstIri(predicates, GrantVocab.onBehalfOf),
|
|
592
|
+
createdAt,
|
|
593
|
+
revokedAt: firstLiteral(predicates, GrantVocab.revokedAt),
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
//# sourceMappingURL=pod-approval-store.js.map
|