@timurproko/a1 0.2.6-dev.736 → 0.2.7-dev.1221
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 +41 -3
- package/bin/automatic-update.js +7 -0
- package/bin/cli.js +4 -0
- package/bin/guardian.js +5 -0
- package/bin/tab-launch-context.d.ts +27 -0
- package/bin/tab-launch-context.js +94 -0
- package/bin/ui.js +107 -59
- package/dist/app/session-shell/clipboard-diagnostics.js +1 -1
- package/dist/app/session-shell/dialog-coordinator.d.ts +42 -0
- package/dist/app/session-shell/dialog-coordinator.js +133 -0
- package/dist/app/session-shell/dock-chrome.d.ts +34 -0
- package/dist/app/session-shell/dock-chrome.js +109 -0
- package/dist/app/session-shell/exit-notice.d.ts +1 -1
- package/dist/app/session-shell/exit-notice.js +1 -1
- package/dist/app/session-shell/extension-surface.d.ts +30 -0
- package/dist/app/session-shell/extension-surface.js +105 -0
- package/dist/app/session-shell/helper-pool.d.ts +3 -5
- package/dist/app/session-shell/helper-pool.js +3 -5
- package/dist/app/session-shell/input-surface-switch.d.ts +36 -0
- package/dist/app/session-shell/input-surface-switch.js +85 -0
- package/dist/app/session-shell/login-interaction.d.ts +27 -0
- package/dist/app/session-shell/login-interaction.js +91 -0
- package/dist/app/session-shell/prompt-submission.d.ts +48 -0
- package/dist/app/session-shell/prompt-submission.js +276 -0
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +38 -0
- package/dist/app/session-shell/resident-tab-coordinator.js +77 -0
- package/dist/app/session-shell/response-copy-helper.js +21 -6
- package/dist/app/session-shell/response-copy-protocol.d.ts +1 -1
- package/dist/app/session-shell/response-copy-transport.d.ts +16 -6
- package/dist/app/session-shell/response-copy-transport.js +69 -17
- package/dist/app/session-shell/session-concern.d.ts +22 -0
- package/dist/app/session-shell/session-concern.js +29 -0
- package/dist/app/session-shell/session-lifecycle.d.ts +29 -0
- package/dist/app/session-shell/session-lifecycle.js +49 -0
- package/dist/app/session-shell/session-shell-root.d.ts +42 -6
- package/dist/app/session-shell/session-shell-root.js +196 -908
- package/dist/app/session-shell/session-shell.d.ts +3 -8
- package/dist/app/session-shell/session-shell.js +324 -835
- package/dist/app/session-shell/session-viewport-controller.d.ts +2 -2
- package/dist/app/session-shell/session-viewport-controller.js +29 -15
- package/dist/app/session-shell/settings-bindings.d.ts +17 -0
- package/dist/app/session-shell/settings-bindings.js +91 -0
- package/dist/app/session-shell/shell-editor-factory.d.ts +27 -0
- package/dist/app/session-shell/shell-editor-factory.js +102 -0
- package/dist/app/session-shell/shell-host.d.ts +6 -0
- package/dist/app/session-shell/shell-host.js +34 -7
- package/dist/app/session-shell/shell-layout.d.ts +64 -0
- package/dist/app/session-shell/shell-layout.js +18 -0
- package/dist/app/session-shell/suggestion-surface.d.ts +25 -0
- package/dist/app/session-shell/suggestion-surface.js +63 -0
- package/dist/app/session-shell/transcript-document.d.ts +78 -0
- package/dist/app/session-shell/transcript-document.js +365 -0
- package/dist/app/session-shell/viewport-layout.d.ts +31 -0
- package/dist/app/session-shell/viewport-layout.js +160 -0
- package/dist/app/session-shell/workflow-output.d.ts +33 -0
- package/dist/app/session-shell/workflow-output.js +174 -0
- package/dist/app/session-shell/workflow-router.d.ts +25 -0
- package/dist/app/session-shell/workflow-router.js +39 -0
- package/dist/cli/dispatch.d.ts +11 -1
- package/dist/cli/dispatch.js +79 -5
- package/dist/cli/tabs-request.d.ts +7 -0
- package/dist/cli/tabs-request.js +1 -0
- package/dist/cli/tabs.d.ts +14 -0
- package/dist/cli/tabs.js +151 -0
- package/dist/cli/version-stats.js +38 -3
- package/dist/composition/owned-settings.d.ts +12 -0
- package/dist/composition/owned-settings.js +36 -0
- package/dist/composition/owned-ui.d.ts +27 -28
- package/dist/composition/owned-ui.js +205 -153
- package/dist/composition/resident-tab-bridge.d.ts +25 -0
- package/dist/composition/resident-tab-bridge.js +180 -0
- package/dist/composition/session-backend.d.ts +19 -0
- package/dist/composition/session-backend.js +1 -0
- package/dist/composition/session-runtime-registry.d.ts +20 -0
- package/dist/composition/session-runtime-registry.js +85 -0
- package/dist/composition/settings-route-host.d.ts +16 -1
- package/dist/composition/settings-route-host.js +29 -10
- package/dist/composition/settings-search-input.d.ts +9 -0
- package/dist/composition/settings-search-input.js +58 -0
- package/dist/composition/startup-route.d.ts +32 -0
- package/dist/composition/startup-route.js +72 -0
- package/dist/composition/utility-tab.d.ts +28 -0
- package/dist/composition/utility-tab.js +242 -0
- package/dist/contracts/owned-ui/index.d.ts +1 -1
- package/dist/contracts/owned-ui/model.d.ts +3 -0
- package/dist/contracts/owned-ui/session-backend.d.ts +3 -0
- package/dist/contracts/owned-ui/session-workflows.d.ts +11 -4
- package/dist/contracts/presentation/index.d.ts +11 -0
- package/dist/contracts/presentation/index.js +12 -0
- package/dist/features/launch/development-launch.js +6 -0
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +3 -1
- package/dist/features/launch/intent.js +7 -4
- package/dist/features/launch/profile-paths.js +4 -0
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +22 -0
- package/dist/features/owned-ui/plus-menu-dialog.js +76 -0
- package/dist/features/owned-ui/project-trust-dialog.d.ts +1 -1
- package/dist/features/owned-ui/project-trust-dialog.js +6 -8
- package/dist/features/owned-ui/project-trust-prompt.d.ts +1 -0
- package/dist/features/owned-ui/project-trust-prompt.js +7 -3
- package/dist/features/owned-ui/reference-screen-app.d.ts +2 -0
- package/dist/features/owned-ui/reference-screen-app.js +12 -2
- package/dist/features/owned-ui/resources/release-notes.json +4 -0
- package/dist/features/owned-ui/settings-app.d.ts +12 -2
- package/dist/features/owned-ui/settings-app.js +119 -84
- package/dist/features/owned-ui/settings-search-input.d.ts +29 -0
- package/dist/features/owned-ui/settings-search-input.js +1 -0
- package/dist/features/prompt-history/index.d.ts +1 -1
- package/dist/features/prompt-history/paths.d.ts +2 -1
- package/dist/features/prompt-history/paths.js +10 -2
- package/dist/features/prompt-history/service.d.ts +5 -0
- package/dist/features/prompt-history/service.js +1 -1
- package/dist/features/resident-tab/auto-name.d.ts +11 -0
- package/dist/features/resident-tab/auto-name.js +44 -0
- package/dist/features/resident-tab/index.d.ts +5 -0
- package/dist/features/resident-tab/index.js +7 -0
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +8 -0
- package/dist/features/resident-tab/shortcut-bindings-file.js +40 -0
- package/dist/features/resident-tab/shortcut-declarations.d.ts +13 -0
- package/dist/features/resident-tab/shortcut-declarations.js +26 -0
- package/dist/features/resident-tab/shortcut-projection.d.ts +29 -0
- package/dist/features/resident-tab/shortcut-projection.js +64 -0
- package/dist/features/resident-tab/status-deriver.d.ts +10 -0
- package/dist/features/resident-tab/status-deriver.js +12 -0
- package/dist/foundation/launch-context/index.d.ts +12 -0
- package/dist/foundation/launch-context/index.js +26 -0
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +14 -0
- package/dist/foundation/launch-guardian/exit-watcher.js +94 -0
- package/dist/foundation/launch-guardian/main.d.ts +7 -1
- package/dist/foundation/launch-guardian/main.js +60 -7
- package/dist/foundation/lifecycle/session-repository-context.js +16 -2
- package/dist/foundation/process-containment/{native-guardian-containment.d.ts → addon-containment.d.ts} +7 -5
- package/dist/foundation/process-containment/addon-containment.js +139 -0
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +11 -0
- package/dist/foundation/process-containment/addon-process-inspector.js +36 -0
- package/dist/foundation/process-containment/addon.d.ts +42 -0
- package/dist/foundation/process-containment/addon.js +57 -0
- package/dist/foundation/process-containment/artifact.d.ts +1 -1
- package/dist/foundation/process-containment/artifact.js +6 -5
- package/dist/foundation/process-containment/contracts.d.ts +2 -0
- package/dist/foundation/process-containment/index.d.ts +4 -4
- package/dist/foundation/process-containment/index.js +3 -3
- package/dist/foundation/process-containment/native-process-inspector.d.ts +2 -1
- package/dist/foundation/process-containment/native-process-inspector.js +10 -10
- package/dist/foundation/release/automatic-update.d.ts +37 -0
- package/dist/foundation/release/automatic-update.js +265 -0
- package/dist/foundation/release/bootstrap.d.ts +7 -9
- package/dist/foundation/release/bootstrap.js +107 -24
- package/dist/foundation/release/cohort-state.d.ts +1 -1
- package/dist/foundation/release/cohort-state.js +6 -3
- package/dist/foundation/release/dependency-certification.js +54 -19
- package/dist/foundation/release/early-accent.d.ts +12 -0
- package/dist/foundation/release/early-accent.js +59 -0
- package/dist/foundation/release/index.d.ts +2 -2
- package/dist/foundation/release/index.js +2 -2
- package/dist/foundation/release/latest-release.d.ts +24 -2
- package/dist/foundation/release/latest-release.js +51 -1
- package/dist/foundation/release/progress-palette.generated.d.ts +137 -3
- package/dist/foundation/release/progress-palette.generated.js +137 -3
- package/dist/foundation/release/release-gc.d.ts +3 -0
- package/dist/foundation/release/release-gc.js +59 -8
- package/dist/foundation/release/release-store.d.ts +12 -0
- package/dist/foundation/release/release-store.js +124 -2
- package/dist/foundation/release/update-execution-lease.d.ts +48 -0
- package/dist/foundation/release/update-execution-lease.js +161 -0
- package/dist/foundation/release/update.d.ts +12 -7
- package/dist/foundation/release/update.js +281 -196
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +18 -0
- package/dist/foundation/resident-tabs/bounded-host-command.js +39 -0
- package/dist/foundation/resident-tabs/bridge-client.d.ts +70 -0
- package/dist/foundation/resident-tabs/bridge-client.js +321 -0
- package/dist/foundation/resident-tabs/doctor.d.ts +28 -0
- package/dist/foundation/resident-tabs/doctor.js +166 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +27 -0
- package/dist/foundation/resident-tabs/draft-checkpoint.js +145 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +36 -0
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +151 -0
- package/dist/foundation/resident-tabs/fault-injection.d.ts +8 -0
- package/dist/foundation/resident-tabs/fault-injection.js +26 -0
- package/dist/foundation/resident-tabs/fixture-control.d.ts +7 -0
- package/dist/foundation/resident-tabs/fixture-control.js +35 -0
- package/dist/foundation/resident-tabs/host-entry.d.ts +1 -0
- package/dist/foundation/resident-tabs/host-entry.js +17 -0
- package/dist/foundation/resident-tabs/index.d.ts +12 -0
- package/dist/foundation/resident-tabs/index.js +6 -0
- package/dist/foundation/resident-tabs/maintenance.d.ts +39 -0
- package/dist/foundation/resident-tabs/maintenance.js +75 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +34 -0
- package/dist/foundation/resident-tabs/progress-observation-schema.js +1 -0
- package/dist/foundation/resident-tabs/progress-observation.d.ts +4 -0
- package/dist/foundation/resident-tabs/progress-observation.js +150 -0
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +63 -0
- package/dist/foundation/resident-tabs/prompt-journal.js +213 -0
- package/dist/foundation/resident-tabs/protocol.d.ts +12 -0
- package/dist/foundation/resident-tabs/protocol.js +195 -0
- package/dist/foundation/resident-tabs/recovery.d.ts +26 -0
- package/dist/foundation/resident-tabs/recovery.js +205 -0
- package/dist/foundation/resident-tabs/release-holds.d.ts +28 -0
- package/dist/foundation/resident-tabs/release-holds.js +75 -0
- package/dist/foundation/resident-tabs/routes.d.ts +5 -0
- package/dist/foundation/resident-tabs/routes.js +5 -0
- package/dist/foundation/resident-tabs/routing.d.ts +11 -0
- package/dist/foundation/resident-tabs/routing.js +10 -0
- package/dist/foundation/resident-tabs/session-sync.d.ts +14 -0
- package/dist/foundation/resident-tabs/session-sync.js +37 -0
- package/dist/foundation/resident-tabs/settings.d.ts +12 -0
- package/dist/foundation/resident-tabs/settings.js +58 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +14 -0
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +78 -0
- package/dist/foundation/resident-tabs/zip-archive.d.ts +9 -0
- package/dist/foundation/resident-tabs/zip-archive.js +56 -0
- package/dist/foundation/session-writer-lock/index.d.ts +30 -0
- package/dist/foundation/session-writer-lock/index.js +203 -0
- package/dist/foundation/startup/startup-descriptor.js +2 -2
- package/dist/foundation/terminal-cleanup/index.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/index.js +1 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/terminal-reset.js +6 -0
- package/dist/integrations/pi/components/editor-interaction.d.ts +2 -0
- package/dist/integrations/pi/components/modal-frame.d.ts +17 -1
- package/dist/integrations/pi/components/modal-frame.js +48 -9
- package/dist/integrations/pi/components/models-dialog.js +4 -52
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +6 -1
- package/dist/integrations/pi/components/owned-editor-ux.js +90 -6
- package/dist/integrations/pi/components/resources/builtin-themes.d.ts +4 -4
- package/dist/integrations/pi/components/resources/builtin-themes.js +4 -4
- package/dist/integrations/pi/components/share-operation-dialog.d.ts +2 -0
- package/dist/integrations/pi/components/share-operation-dialog.js +2 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +58 -36
- package/dist/integrations/pi/components/shell-extension-ui.js +79 -60
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +21 -5
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +5 -2
- package/dist/integrations/pi/components/shell-presenters-info.js +18 -4
- package/dist/integrations/pi/components/shell-presenters-transcript.js +4 -1
- package/dist/integrations/pi/components/shell-selectors-dialogs.js +5 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +12 -1
- package/dist/integrations/pi/components/skills-dialog.js +2 -2
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +17 -4
- package/dist/integrations/pi/components/upstream/assets/earendil-image.json +2 -2
- package/dist/integrations/pi/components/upstream/components/countdown-timer.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/earendil-announcement.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-input.js +1 -1
- package/dist/integrations/pi/components/upstream/components/extension-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/components/mermaid.js +1 -1
- package/dist/integrations/pi/components/upstream/components/owned-editor.d.ts +8 -6
- package/dist/integrations/pi/components/upstream/components/owned-editor.js +16 -9
- package/dist/integrations/pi/components/upstream/components/pi-logo.js +1 -1
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.d.ts +4 -4
- package/dist/integrations/pi/components/upstream/components/scoped-models-selector.js +2 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +2 -1
- package/dist/integrations/pi/components/upstream/components/session-footer.js +31 -25
- package/dist/integrations/pi/components/upstream/components/session-selector-search.js +1 -1
- package/dist/integrations/pi/components/upstream/components/session-selector.js +8 -7
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/skill-invocation-message.js +1 -1
- package/dist/integrations/pi/components/upstream/components/status-indicator.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/components/status-indicator.js +3 -3
- package/dist/integrations/pi/components/upstream/components/themed-text.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/components/themed-text.js +1 -1
- package/dist/integrations/pi/components/upstream/components/thinking-selector.d.ts +8 -7
- package/dist/integrations/pi/components/upstream/components/thinking-selector.js +10 -9
- package/dist/integrations/pi/components/upstream/components/tool-execution.d.ts +2 -6
- package/dist/integrations/pi/components/upstream/components/tool-execution.js +103 -101
- package/dist/integrations/pi/components/upstream/components/tree-selector.d.ts +9 -9
- package/dist/integrations/pi/components/upstream/components/tree-selector.js +13 -21
- package/dist/integrations/pi/components/upstream/components/trust-selector.js +1 -1
- package/dist/integrations/pi/components/upstream/external-editor.js +1 -1
- package/dist/integrations/pi/components/upstream/history/editor-core.d.ts +2 -2
- package/dist/integrations/pi/components/upstream/history/editor-core.js +7 -5
- package/dist/integrations/pi/components/upstream/history/kill-ring.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/kill-ring.js +1 -1
- package/dist/integrations/pi/components/upstream/history/printable-key.js +1 -1
- package/dist/integrations/pi/components/upstream/history/text-helpers.js +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/history/undo-stack.js +1 -1
- package/dist/integrations/pi/components/upstream/history/word-navigation.js +1 -1
- package/dist/integrations/pi/components/upstream/model-search.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/program-status-reporter.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme-controller.d.ts +1 -1
- package/dist/integrations/pi/components/upstream/theme/theme.d.ts +5 -0
- package/dist/integrations/pi/components/upstream/theme/theme.js +29 -2
- package/dist/integrations/pi/engine/adapter.d.ts +5 -77
- package/dist/integrations/pi/engine/adapter.js +95 -394
- package/dist/integrations/pi/engine/command-dispatch.d.ts +13 -0
- package/dist/integrations/pi/engine/command-dispatch.js +57 -0
- package/dist/integrations/pi/engine/host.js +2 -2
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +23 -0
- package/dist/integrations/pi/engine/offline-settings-port.js +53 -0
- package/dist/integrations/pi/engine/pi-settings-metadata.json +14 -2
- package/dist/integrations/pi/engine/ports.d.ts +56 -0
- package/dist/integrations/pi/engine/ports.js +93 -0
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +1 -0
- package/dist/integrations/pi/engine/prompt-suggestions.js +40 -0
- package/dist/integrations/pi/engine/resources/changelog.json +4 -4
- package/dist/integrations/pi/engine/runtime-integration.js +102 -29
- package/dist/integrations/pi/engine/session-runtime.d.ts +0 -6
- package/dist/integrations/pi/engine/session-runtime.js +13 -5
- package/dist/integrations/pi/engine/session-selection.d.ts +3 -0
- package/dist/integrations/pi/engine/session-selection.js +45 -9
- package/dist/integrations/pi/engine/settings-bridge.d.ts +5 -0
- package/dist/integrations/pi/engine/settings-bridge.js +15 -0
- package/dist/integrations/pi/engine/settings-port.js +11 -15
- package/dist/integrations/pi/engine/view-state.d.ts +42 -0
- package/dist/integrations/pi/engine/view-state.js +126 -0
- package/dist/integrations/pi/engine/workflow-contexts.js +10 -1
- package/dist/integrations/pi/engine/workflow-runner.js +73 -4
- package/dist/integrations/pi/engine/workflow-support.d.ts +12 -0
- package/dist/integrations/pi/engine/workflow-support.js +36 -0
- package/dist/integrations/pi/engine/workflows.d.ts +3 -1
- package/dist/integrations/pi/engine/workflows.js +1 -0
- package/dist/integrations/pi/startup-public.js +257 -310
- package/dist/integrations/pi/startup-public.manifest.json +564 -440
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +6 -0
- package/dist/integrations/pi/tui-runtime/adapter.js +32 -1
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +5 -0
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.d.ts +12 -1
- package/dist/integrations/pi/tui-runtime/damage-aware-terminal.js +31 -2
- package/dist/native/darwin-arm64/manifest.json +10 -7
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +10500 -0
- package/dist/native/darwin-arm64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +23 -0
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10737 -0
- package/dist/native/darwin-x64/terminal-host.manifest.json +46 -0
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +10 -7
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +11226 -0
- package/dist/native/linux-x64/terminal-host.manifest.json +46 -0
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +10 -7
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +10757 -0
- package/dist/native/win32-x64/terminal-host.manifest.json +46 -0
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/dist/product-identity.d.ts +3 -3
- package/dist/product-identity.js +4 -4
- package/dist/product-identity.json +16 -2
- package/dist/runtime-payload-inventory.json +6330 -6677
- package/dist/ui/apps/host.d.ts +2 -0
- package/dist/ui/apps/host.js +7 -1
- package/dist/ui/components/dialog-panel.js +35 -30
- package/dist/ui/components/index.d.ts +2 -2
- package/dist/ui/components/index.js +1 -1
- package/dist/ui/components/line-input.d.ts +4 -1
- package/dist/ui/components/line-input.js +3 -1
- package/dist/ui/components/prompt-input.d.ts +11 -8
- package/dist/ui/components/prompt-input.js +15 -13
- package/dist/ui/components/selection-copy.d.ts +2 -0
- package/dist/ui/components/selection-copy.js +13 -0
- package/dist/ui/components/spans.js +2 -2
- package/dist/ui/components/submitted-prompt.d.ts +9 -6
- package/dist/ui/components/submitted-prompt.js +20 -12
- package/dist/ui/components/surface.js +4 -2
- package/dist/ui/components/text.d.ts +3 -6
- package/dist/ui/components/text.js +6 -8
- package/dist/ui/components/transcript-viewport.d.ts +9 -2
- package/dist/ui/components/transcript-viewport.js +176 -55
- package/dist/ui/components/value-menu.d.ts +6 -3
- package/dist/ui/components/value-menu.js +6 -5
- package/dist/ui/settings/declarations.d.ts +90 -16
- package/dist/ui/settings/declarations.js +67 -14
- package/dist/ui/settings/early-accent.d.ts +81 -0
- package/dist/ui/settings/early-accent.js +50 -0
- package/dist/ui/settings/index.d.ts +4 -2
- package/dist/ui/settings/index.js +2 -1
- package/dist/ui/settings/manager.d.ts +16 -3
- package/dist/ui/settings/manager.js +122 -33
- package/dist/ui/settings/migrations.d.ts +6 -0
- package/dist/ui/settings/migrations.js +73 -0
- package/dist/ui/settings/profile-document.d.ts +26 -0
- package/dist/ui/settings/profile-document.js +164 -0
- package/dist/ui/settings/progress-palette.generated.d.ts +139 -0
- package/dist/ui/settings/progress-palette.generated.js +139 -0
- package/dist/ui/settings/sections.d.ts +4 -0
- package/dist/ui/settings/sections.js +9 -3
- package/docs/architecture/boundaries.md +25 -10
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +37 -0
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +36 -0
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +35 -0
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +36 -0
- package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +70 -0
- package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +32 -0
- package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +115 -0
- package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +48 -0
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +125 -0
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +56 -0
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +174 -0
- package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +18 -0
- package/docs/architecture/internal-naming.md +3 -1
- package/docs/architecture/process-guardian-provenance.md +18 -10
- package/docs/architecture/project-structure.md +8 -0
- package/docs/architecture/resident-tabs-requirements.md +18 -0
- package/docs/architecture/resident-tabs.md +648 -0
- package/docs/architecture/response-copy-delivery.md +1 -1
- package/docs/architecture/terminal-host-proof-gate.md +3 -1
- package/docs/architecture/terminal-host-provenance.md +16 -4
- package/docs/architecture/terminal-host-spike-evidence.md +1 -1
- package/docs/architecture/tool-image-presentation.md +2 -1
- package/docs/architecture/toolchain.md +11 -9
- package/docs/ci-release-runbook.md +14 -7
- package/docs/features/launch-profiles.md +11 -8
- package/docs/features/prompt-history.md +41 -20
- package/docs/manual-resident-tabs-acceptance.md +51 -0
- package/docs/openspec-archive-automation.md +49 -22
- package/docs/releases/0.2.6.md +44 -0
- package/docs/validation.md +49 -9
- package/package.json +19 -6
- package/dist/foundation/process-containment/darwin-process-inspector.d.ts +0 -5
- package/dist/foundation/process-containment/darwin-process-inspector.js +0 -7
- package/dist/foundation/process-containment/native-guardian-containment.js +0 -152
- package/dist/foundation/process-containment/windows-process-inspector.d.ts +0 -19
- package/dist/foundation/process-containment/windows-process-inspector.js +0 -56
- package/dist/native/darwin-arm64/process-guardian +0 -0
- package/dist/native/linux-x64/process-guardian +0 -0
- package/dist/native/win32-x64/process-guardian.exe +0 -0
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type OwnedUiCommand, type OwnedUiCommandResult, type OwnedUiDiagnostics } from "../../../contracts/owned-ui/index.js";
|
|
2
2
|
import type { PiEmittedEvent } from "./event-delivery.js";
|
|
3
|
+
import type { PiEngineRuntime } from "./session-runtime.js";
|
|
4
|
+
import type { EngineViewState } from "./view-state.js";
|
|
3
5
|
export type AdapterCommandResult = OwnedUiCommandResult;
|
|
4
6
|
export interface PiCommandDispatchPorts {
|
|
5
7
|
sessionId(): string;
|
|
@@ -36,3 +38,14 @@ export declare class PiCommandDispatch {
|
|
|
36
38
|
reset(): void;
|
|
37
39
|
execute(command: OwnedUiCommand): Promise<AdapterCommandResult>;
|
|
38
40
|
}
|
|
41
|
+
/** What carrying out a command reaches: the running engine, the view state it updates, and disposal. */
|
|
42
|
+
export interface EngineCommandContext {
|
|
43
|
+
readonly engine: Pick<PiEngineRuntime, "runtime" | "session" | "generation" | "sessionCommands">;
|
|
44
|
+
readonly state: Pick<EngineViewState, "activeModel" | "thinkingLevel" | "setTerminal" | "terminal">;
|
|
45
|
+
/** False while delivery is overloaded or admission is stopped; a late model change then stays unpublished. */
|
|
46
|
+
admissionOpen(): boolean;
|
|
47
|
+
emit(value: PiEmittedEvent): void;
|
|
48
|
+
dispose(): Promise<void>;
|
|
49
|
+
}
|
|
50
|
+
/** Carries out one admitted command against the running engine; throws when no session runs or the command fails. */
|
|
51
|
+
export declare function performEngineCommand(command: OwnedUiCommand, context: EngineCommandContext): Promise<void>;
|
|
@@ -123,3 +123,60 @@ export class PiCommandDispatch {
|
|
|
123
123
|
return { outcome, diagnostic };
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
|
+
// Invariant: prompt input and session controls run through the engine's own session commands, which own queuing and images.
|
|
127
|
+
async function runSessionCommand(request, context) {
|
|
128
|
+
const result = await context.engine.sessionCommands?.execute(request);
|
|
129
|
+
if (!result || result.outcome === "rejected" || result.outcome === "failed") {
|
|
130
|
+
throw new Error(request.type === "retry" ? "no previous prompt is available to retry" : `Pi session command failed: ${request.type}`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function runPromptCommand(command, context) {
|
|
134
|
+
return runSessionCommand({
|
|
135
|
+
type: command.type,
|
|
136
|
+
text: command.text,
|
|
137
|
+
...(command.images === undefined ? {} : { images: [...command.images] }),
|
|
138
|
+
}, context);
|
|
139
|
+
}
|
|
140
|
+
const ownedUiStateCommand = () => {
|
|
141
|
+
throw new Error("owned UI state commands belong to the owned UI layer, not the Pi engine adapter");
|
|
142
|
+
};
|
|
143
|
+
// Invariant: one handler per command type; the table is exhaustive, so a new command type cannot be silently ignored.
|
|
144
|
+
const ENGINE_COMMANDS = {
|
|
145
|
+
"prompt": (command, context) => runPromptCommand(command, context),
|
|
146
|
+
"steer": (command, context) => runPromptCommand(command, context),
|
|
147
|
+
"follow-up": (command, context) => runPromptCommand(command, context),
|
|
148
|
+
"abort": (_command, context) => runSessionCommand({ type: "abort" }, context),
|
|
149
|
+
"retry": (_command, context) => runSessionCommand({ type: "retry" }, context),
|
|
150
|
+
"compact": (_command, context) => runSessionCommand({ type: "compact" }, context),
|
|
151
|
+
"set-model": async (command, context, { runtime, session, generation }) => {
|
|
152
|
+
const model = runtime.services.modelRuntime.getModel(command.model.providerId, command.model.modelId);
|
|
153
|
+
if (!model)
|
|
154
|
+
throw new Error(`model is unavailable: ${command.model.providerId}/${command.model.modelId}`);
|
|
155
|
+
await session.setModel(model);
|
|
156
|
+
if (generation === context.engine.generation && context.admissionOpen())
|
|
157
|
+
context.state.activeModel = { ...command.model };
|
|
158
|
+
},
|
|
159
|
+
"set-thinking-level": (command, context, { session }) => {
|
|
160
|
+
session.setThinkingLevel(command.thinkingLevel);
|
|
161
|
+
context.state.thinkingLevel = command.thinkingLevel;
|
|
162
|
+
},
|
|
163
|
+
"new-session": async (_command, _context, { runtime }) => { await runtime.newSession(); },
|
|
164
|
+
"resume-session": async (command, _context, { runtime }) => { await runtime.switchSession(command.sessionPath); },
|
|
165
|
+
"resize-surface": (command, context) => {
|
|
166
|
+
context.state.setTerminal(command.surface);
|
|
167
|
+
context.emit({ type: "terminal-surface", surface: context.state.terminal });
|
|
168
|
+
},
|
|
169
|
+
"shutdown": (_command, context) => context.dispose(),
|
|
170
|
+
"set-setting": ownedUiStateCommand,
|
|
171
|
+
"apply-customization": ownedUiStateCommand,
|
|
172
|
+
"remove-customization": ownedUiStateCommand,
|
|
173
|
+
};
|
|
174
|
+
/** Carries out one admitted command against the running engine; throws when no session runs or the command fails. */
|
|
175
|
+
export async function performEngineCommand(command, context) {
|
|
176
|
+
const { runtime, session, generation } = context.engine;
|
|
177
|
+
if (!runtime || !session)
|
|
178
|
+
throw new Error("engine session is unavailable");
|
|
179
|
+
// Invariant: the table maps each type to the handler for exactly that command, so the command fits its own handler.
|
|
180
|
+
const handler = ENGINE_COMMANDS[command.type];
|
|
181
|
+
await handler(command, context, { runtime, session, generation });
|
|
182
|
+
}
|
|
@@ -86,7 +86,7 @@ class ProcessPiEngineHost {
|
|
|
86
86
|
return;
|
|
87
87
|
this.#disposed = true;
|
|
88
88
|
this.#abort.abort();
|
|
89
|
-
const live = [...this.#sessions.values()].filter(session => !session.disposed);
|
|
89
|
+
const live = [...this.#sessions.values()].filter(session => !session.identity.disposed);
|
|
90
90
|
this.#sessions.clear();
|
|
91
91
|
await Promise.all(live.map(session => session.dispose()));
|
|
92
92
|
}
|
|
@@ -107,7 +107,7 @@ class ProcessPiEngineHost {
|
|
|
107
107
|
}
|
|
108
108
|
#forgetDisposedSessions() {
|
|
109
109
|
for (const [sessionId, session] of this.#sessions)
|
|
110
|
-
if (session.disposed)
|
|
110
|
+
if (session.identity.disposed)
|
|
111
111
|
this.#sessions.delete(sessionId);
|
|
112
112
|
}
|
|
113
113
|
// Rationale: the profile's timeout is installed once, by whichever session loads it first; a written
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { resolvePiProjectTrustPreflight } from "./project-trust-preflight.js";
|
|
2
|
+
import { PiSettingsBridge, type PiSettingKey } from "./settings-bridge.js";
|
|
3
|
+
import { ModelRuntime, SettingsManager } from "../startup-public.js";
|
|
4
|
+
export interface OfflinePiSettingsPortOptions {
|
|
5
|
+
readonly cwd: string;
|
|
6
|
+
readonly agentDir: string;
|
|
7
|
+
readonly resolveTrust?: typeof resolvePiProjectTrustPreflight;
|
|
8
|
+
readonly createSettingsManager?: (cwd: string, agentDir: string, projectTrusted: boolean) => SettingsManager;
|
|
9
|
+
readonly createModelRuntime?: (options: Parameters<typeof ModelRuntime.create>[0]) => Promise<Pick<ModelRuntime, "getAvailableSnapshot">>;
|
|
10
|
+
}
|
|
11
|
+
export interface OfflinePiSettingsPort {
|
|
12
|
+
readonly port: PiSettingsBridge;
|
|
13
|
+
readonly manager: SettingsManager;
|
|
14
|
+
/** Resolves after the local auth/model catalog has populated the per-model choices. */
|
|
15
|
+
readonly modelsReady: Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pi settings for the resident Settings utility tab. It reads the same persisted manager as an
|
|
19
|
+
* Agent, but every bound live effect is persistence-only because each Agent process owns its effect.
|
|
20
|
+
*/
|
|
21
|
+
export declare function createOfflinePiSettingsPort(options: OfflinePiSettingsPortOptions): Promise<OfflinePiSettingsPort>;
|
|
22
|
+
/** Keys the slim Settings port intentionally binds and exposes in bare mode. */
|
|
23
|
+
export declare function offlinePiSettingKeys(): readonly PiSettingKey[];
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { resolvePiProjectTrustPreflight } from "./project-trust-preflight.js";
|
|
3
|
+
import { PI_SETTING_EFFECTS, PiSettingsBridge, supportedThinkingLevels, } from "./settings-bridge.js";
|
|
4
|
+
import { ModelRuntime, SettingsManager } from "../startup-public.js";
|
|
5
|
+
const PERSIST_ONLY_OWNERS = ["shell", "startup", "agent", "terminal"];
|
|
6
|
+
/**
|
|
7
|
+
* Pi settings for the resident Settings utility tab. It reads the same persisted manager as an
|
|
8
|
+
* Agent, but every bound live effect is persistence-only because each Agent process owns its effect.
|
|
9
|
+
*/
|
|
10
|
+
export async function createOfflinePiSettingsPort(options) {
|
|
11
|
+
let modelRuntime = null;
|
|
12
|
+
const createModelRuntime = options.createModelRuntime ?? (input => ModelRuntime.create(input));
|
|
13
|
+
const modelsReady = createModelRuntime({
|
|
14
|
+
authPath: join(options.agentDir, "auth.json"),
|
|
15
|
+
modelsPath: join(options.agentDir, "models.json"),
|
|
16
|
+
allowModelNetwork: false,
|
|
17
|
+
}).then(runtime => { modelRuntime = runtime; }, () => undefined);
|
|
18
|
+
const trust = await (options.resolveTrust ?? resolvePiProjectTrustPreflight)({
|
|
19
|
+
cwd: options.cwd,
|
|
20
|
+
agentDir: options.agentDir,
|
|
21
|
+
});
|
|
22
|
+
const manager = (options.createSettingsManager
|
|
23
|
+
?? ((cwd, agentDir, projectTrusted) => SettingsManager.create(cwd, agentDir, { projectTrusted })))(options.cwd, options.agentDir, trust.trusted);
|
|
24
|
+
const port = new PiSettingsBridge(manager, {
|
|
25
|
+
productMode: "bare",
|
|
26
|
+
models: () => modelChoices(modelRuntime?.getAvailableSnapshot() ?? [], manager.getAllModelThinkingLevels?.() ?? {}),
|
|
27
|
+
});
|
|
28
|
+
for (const owner of PERSIST_ONLY_OWNERS)
|
|
29
|
+
port.bindOwner(owner, persistOnlyHandlers(owner));
|
|
30
|
+
return { port, manager, modelsReady };
|
|
31
|
+
}
|
|
32
|
+
function persistOnlyHandlers(owner) {
|
|
33
|
+
return Object.fromEntries(Object.entries(PI_SETTING_EFFECTS)
|
|
34
|
+
.filter(([, definition]) => definition.owner === owner && definition.hiddenInBare !== true)
|
|
35
|
+
.map(([key]) => [key, { apply() { } }]));
|
|
36
|
+
}
|
|
37
|
+
function modelChoices(models, overrides) {
|
|
38
|
+
return models.map(model => {
|
|
39
|
+
const key = `${model.provider}/${model.id}`;
|
|
40
|
+
return {
|
|
41
|
+
key,
|
|
42
|
+
label: `${model.id} [${model.provider}]`,
|
|
43
|
+
description: overrides[key] === undefined ? "global default" : `override: ${overrides[key]}`,
|
|
44
|
+
levels: supportedThinkingLevels(model),
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Keys the slim Settings port intentionally binds and exposes in bare mode. */
|
|
49
|
+
export function offlinePiSettingKeys() {
|
|
50
|
+
return Object.entries(PI_SETTING_EFFECTS)
|
|
51
|
+
.filter(([, definition]) => PERSIST_ONLY_OWNERS.includes(definition.owner) && definition.hiddenInBare !== true)
|
|
52
|
+
.map(([key]) => key);
|
|
53
|
+
}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"steeringMode",
|
|
16
16
|
"followUpMode",
|
|
17
17
|
"transport",
|
|
18
|
+
"sessionShareDestination",
|
|
18
19
|
"httpIdleTimeoutMs",
|
|
19
20
|
"cacheWarmingMode",
|
|
20
21
|
"hideThinkingBlock",
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
"steeringMode",
|
|
52
53
|
"followUpMode",
|
|
53
54
|
"transport",
|
|
55
|
+
"sessionShareDestination",
|
|
54
56
|
"httpIdleTimeoutMs",
|
|
55
57
|
"cacheWarmingMode",
|
|
56
58
|
"hideThinkingBlock",
|
|
@@ -129,7 +131,7 @@
|
|
|
129
131
|
},
|
|
130
132
|
"showHardwareCursor": {
|
|
131
133
|
"label": "Show hardware cursor",
|
|
132
|
-
"description": "
|
|
134
|
+
"description": "Use the terminal cursor instead of Pi's drawn cursor",
|
|
133
135
|
"opensDialog": false,
|
|
134
136
|
"values": [
|
|
135
137
|
"true",
|
|
@@ -297,6 +299,16 @@
|
|
|
297
299
|
"never"
|
|
298
300
|
]
|
|
299
301
|
},
|
|
302
|
+
"sessionShareDestination": {
|
|
303
|
+
"label": "Session share destination",
|
|
304
|
+
"description": "Where to upload sessions with /share (auto prefers Radius when authenticated, otherwise GitHub Gist)",
|
|
305
|
+
"opensDialog": false,
|
|
306
|
+
"values": [
|
|
307
|
+
"auto",
|
|
308
|
+
"gist",
|
|
309
|
+
"radius"
|
|
310
|
+
]
|
|
311
|
+
},
|
|
300
312
|
"doubleEscapeAction": {
|
|
301
313
|
"label": "Double-escape action",
|
|
302
314
|
"description": "Action when pressing Escape twice with empty editor",
|
|
@@ -388,7 +400,7 @@
|
|
|
388
400
|
"label": "Anthropic extra usage",
|
|
389
401
|
"description": "Warn when Anthropic subscription auth may use paid extra usage",
|
|
390
402
|
"key": "anthropicExtraUsage",
|
|
391
|
-
"fallback":
|
|
403
|
+
"fallback": false
|
|
392
404
|
}
|
|
393
405
|
]
|
|
394
406
|
},
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { AgentSession } from "../startup-public.js";
|
|
2
|
+
import type { OwnedUiExtensionPort, OwnedUiImageAttachment, OwnedUiReleaseUpdate, OwnedUiSessionCatalogPort, OwnedUiSessionIdentityPort, OwnedUiSessionPort, OwnedUiSessionSettingsPort, OwnedUiWorkflowPort } from "../../../contracts/owned-ui/index.js";
|
|
3
|
+
import type { PiPinnedSettingsCallback, PiPinnedSettingsSnapshot, PiSessionSelectorContext, PiTreeSelectorContext, PiWorkflowInteractionHost, PiWorkflowRequest, PiWorkflowResult } from "./workflows.js";
|
|
4
|
+
import type { PiExtensionUiBinding } from "./extension-ui-binding.js";
|
|
5
|
+
import type { PiResourceCatalog } from "./resource-catalog.js";
|
|
6
|
+
import type { PiEngineRuntime } from "./session-runtime.js";
|
|
7
|
+
import type { PiEngineSettings } from "./settings-port.js";
|
|
8
|
+
import type { PiWorkflowContexts } from "./workflow-contexts.js";
|
|
9
|
+
import type { PiWorkflowRunner } from "./workflow-runner.js";
|
|
10
|
+
/**
|
|
11
|
+
* The Pi objects pinned selectors and transcript renderers are built from. They are not part of the
|
|
12
|
+
* session backend contract; only the session presenters owner reads them.
|
|
13
|
+
*/
|
|
14
|
+
export interface PiSessionPresentationSource {
|
|
15
|
+
pinnedModelSelectorContext(): ReturnType<PiWorkflowContexts["pinnedModelSelectorContext"]>;
|
|
16
|
+
pinnedSessionSelectorContext(): PiSessionSelectorContext;
|
|
17
|
+
pinnedTreeSelectorContext(): PiTreeSelectorContext;
|
|
18
|
+
pinnedMessageRenderer(customType: string): unknown;
|
|
19
|
+
pinnedToolRenderers(toolName: string): unknown;
|
|
20
|
+
pinnedShortcutDescriptions(bindings: Parameters<AgentSession["extensionRunner"]["getShortcuts"]>[0]): readonly {
|
|
21
|
+
readonly key: string;
|
|
22
|
+
readonly description: string;
|
|
23
|
+
}[];
|
|
24
|
+
pinnedSettingsModels(): Pick<PiPinnedSettingsSnapshot, "currentModel" | "availableDefaultModels">;
|
|
25
|
+
applyPinnedSettingValue(callback: PiPinnedSettingsCallback, value: unknown): Promise<PiWorkflowResult>;
|
|
26
|
+
}
|
|
27
|
+
export interface PiEngineAdapterPorts {
|
|
28
|
+
readonly identity: OwnedUiSessionIdentityPort;
|
|
29
|
+
readonly session: OwnedUiSessionPort;
|
|
30
|
+
readonly workflows: OwnedUiWorkflowPort;
|
|
31
|
+
readonly settings: OwnedUiSessionSettingsPort;
|
|
32
|
+
readonly catalog: OwnedUiSessionCatalogPort;
|
|
33
|
+
readonly extensions: OwnedUiExtensionPort;
|
|
34
|
+
readonly presentation: PiSessionPresentationSource;
|
|
35
|
+
}
|
|
36
|
+
/** The adapter's collaborators and its own session operations, which every port member reaches at call time. */
|
|
37
|
+
export interface EnginePortParts {
|
|
38
|
+
readonly sessionId: string;
|
|
39
|
+
readonly agentDir: string;
|
|
40
|
+
readonly engine: Pick<PiEngineRuntime, "cwd" | "generation" | "bindingGeneration" | "currentSessionResumeMetadata" | "currentSessionFile" | "session">;
|
|
41
|
+
readonly contexts: PiWorkflowContexts;
|
|
42
|
+
readonly workflows: PiWorkflowRunner;
|
|
43
|
+
readonly settings: PiEngineSettings;
|
|
44
|
+
readonly resources: PiResourceCatalog;
|
|
45
|
+
readonly extensions: PiExtensionUiBinding;
|
|
46
|
+
readonly session: OwnedUiSessionPort;
|
|
47
|
+
disposed(): boolean;
|
|
48
|
+
executeWorkflow(request: PiWorkflowRequest): Promise<PiWorkflowResult>;
|
|
49
|
+
clearQueuedWorkflows(): readonly string[];
|
|
50
|
+
setWorkflowInteractionHost(interaction: PiWorkflowInteractionHost): void;
|
|
51
|
+
announceReleaseUpdate(release: OwnedUiReleaseUpdate): void;
|
|
52
|
+
resolveTranscriptImage(assetId: string): OwnedUiImageAttachment | null;
|
|
53
|
+
/** The running session's extension runner; throws when no session runs. */
|
|
54
|
+
extensionRunner(): AgentSession["extensionRunner"] | undefined;
|
|
55
|
+
}
|
|
56
|
+
export declare function createEnginePorts(parts: EnginePortParts): PiEngineAdapterPorts;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// Invariant: every port member delegates at call time, so ports built once follow session replacement.
|
|
2
|
+
export function createEnginePorts(parts) {
|
|
3
|
+
const { engine, contexts, workflows, settings, resources, extensions } = parts;
|
|
4
|
+
return {
|
|
5
|
+
identity: {
|
|
6
|
+
sessionId: parts.sessionId,
|
|
7
|
+
agentDir: parts.agentDir,
|
|
8
|
+
get cwd() { return engine.cwd; },
|
|
9
|
+
get sessionGeneration() { return engine.generation; },
|
|
10
|
+
get sessionBindingGeneration() { return engine.bindingGeneration; },
|
|
11
|
+
get disposed() { return parts.disposed(); },
|
|
12
|
+
currentSessionResumeMetadata: () => engine.currentSessionResumeMetadata(),
|
|
13
|
+
currentSessionFile: () => engine.currentSessionFile(),
|
|
14
|
+
currentHistorySessionId: () => {
|
|
15
|
+
const id = engine.session?.sessionManager?.getSessionId?.();
|
|
16
|
+
return typeof id === "string" && id.length > 0 && id.length <= 256 && !id.includes("\0") ? id : null;
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
session: parts.session,
|
|
20
|
+
workflows: {
|
|
21
|
+
executeWorkflow: request => parts.executeWorkflow(request),
|
|
22
|
+
executeBashWorkflow: (command, excludeFromContext) => workflows.executeBashWorkflow(command, excludeFromContext),
|
|
23
|
+
cycleModelWorkflow: direction => workflows.cycleModelWorkflow(direction),
|
|
24
|
+
workflowAutocompleteCommands: () => resources.workflowAutocompleteCommands(),
|
|
25
|
+
clearQueuedWorkflows: () => parts.clearQueuedWorkflows(),
|
|
26
|
+
reloadBlockedResult: () => workflows.reloadBlockedResult(),
|
|
27
|
+
copyWorkflowText: text => workflows.copyWorkflowText(text),
|
|
28
|
+
setWorkflowInteractionHost: interaction => { parts.setWorkflowInteractionHost(interaction); },
|
|
29
|
+
},
|
|
30
|
+
settings: {
|
|
31
|
+
get productMode() { return settings.productMode; },
|
|
32
|
+
snapshot: () => {
|
|
33
|
+
// Invariant: the selector-only model values travel on the presentation source, not in the neutral snapshot.
|
|
34
|
+
const { currentModel: _currentModel, availableDefaultModels: _availableDefaultModels, ...snapshot } = settings.pinnedSettingsSnapshot();
|
|
35
|
+
return snapshot;
|
|
36
|
+
},
|
|
37
|
+
bindOwner: (owner, handlers) => settings.bindSettingsOwner(owner, handlers),
|
|
38
|
+
setDefaultThinkingLevel: level => { settings.setDefaultThinkingLevel(level); },
|
|
39
|
+
configuredTheme: () => settings.configuredTheme(),
|
|
40
|
+
},
|
|
41
|
+
catalog: {
|
|
42
|
+
modelsContext: () => contexts.modelsContext(),
|
|
43
|
+
setSessionModelScope: scopeIds => { contexts.setSessionModelScope(scopeIds); },
|
|
44
|
+
persistModelScope: scopeIds => { contexts.persistModelScope(scopeIds); },
|
|
45
|
+
refreshModels: signal => contexts.refreshModels(signal),
|
|
46
|
+
pinnedScopedModelsContext: () => contexts.pinnedScopedModelsContext(),
|
|
47
|
+
updateScopedModels: enabledModelIds => { contexts.updateScopedModels(enabledModelIds); },
|
|
48
|
+
persistScopedModels: enabledModelIds => { contexts.persistScopedModels(enabledModelIds); },
|
|
49
|
+
refreshScopedModels: signal => contexts.refreshScopedModels(signal),
|
|
50
|
+
pinnedProjectTrustContext: () => contexts.pinnedProjectTrustContext(),
|
|
51
|
+
persistProjectTrust: updates => { contexts.persistProjectTrust(updates); },
|
|
52
|
+
pinnedLoginOptions: authType => contexts.loginOptions(authType),
|
|
53
|
+
pinnedLoginMethodOptions: providerReference => contexts.pinnedLoginMethodOptions(providerReference),
|
|
54
|
+
pinnedAmbientAuthentication: selection => contexts.pinnedAmbientAuthentication(selection),
|
|
55
|
+
pinnedLogoutOptions: () => contexts.logoutOptions(),
|
|
56
|
+
pinnedForkOptions: () => contexts.pinnedForkOptions(),
|
|
57
|
+
},
|
|
58
|
+
extensions: {
|
|
59
|
+
nonVisualResources: () => resources.nonVisualResources(),
|
|
60
|
+
extensionResources: () => resources.extensionResources(),
|
|
61
|
+
resolveTranscriptImage: assetId => parts.resolveTranscriptImage(assetId),
|
|
62
|
+
visualExtensionSupport: () => extensions.support(),
|
|
63
|
+
bindExtensionUi: (ui, shutdown) => extensions.bind(ui, shutdown),
|
|
64
|
+
unbindExtensionUi: () => extensions.unbind(),
|
|
65
|
+
bindClipboardWriter: writer => workflows.bindClipboardWriter(writer),
|
|
66
|
+
announceReleaseUpdate: release => { parts.announceReleaseUpdate(release); },
|
|
67
|
+
},
|
|
68
|
+
presentation: {
|
|
69
|
+
pinnedModelSelectorContext: () => contexts.pinnedModelSelectorContext(),
|
|
70
|
+
pinnedSessionSelectorContext: () => contexts.pinnedSessionSelectorContext(),
|
|
71
|
+
pinnedTreeSelectorContext: () => contexts.pinnedTreeSelectorContext(),
|
|
72
|
+
pinnedMessageRenderer: customType => parts.extensionRunner()?.getMessageRenderer?.(customType),
|
|
73
|
+
pinnedToolRenderers: toolName => {
|
|
74
|
+
const runner = parts.extensionRunner();
|
|
75
|
+
if (runner === undefined)
|
|
76
|
+
return undefined;
|
|
77
|
+
if (typeof runner.resolveToolRenderers === "function") {
|
|
78
|
+
return runner.resolveToolRenderers(toolName, () => runner.getToolDefinition?.(toolName));
|
|
79
|
+
}
|
|
80
|
+
return runner.getToolDefinition?.(toolName);
|
|
81
|
+
},
|
|
82
|
+
pinnedShortcutDescriptions: bindings => {
|
|
83
|
+
const shortcuts = parts.extensionRunner()?.getShortcuts?.(bindings);
|
|
84
|
+
return shortcuts === undefined ? [] : [...shortcuts].map(([key, shortcut]) => ({ key, description: shortcut.description ?? shortcut.extensionPath }));
|
|
85
|
+
},
|
|
86
|
+
pinnedSettingsModels: () => {
|
|
87
|
+
const { currentModel, availableDefaultModels } = settings.pinnedSettingsSnapshot();
|
|
88
|
+
return { ...(currentModel === undefined ? {} : { currentModel }), availableDefaultModels };
|
|
89
|
+
},
|
|
90
|
+
applyPinnedSettingValue: (callback, value) => settings.applyPinnedSettingValue(callback, value),
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
@@ -26,5 +26,6 @@ export declare class PiPromptSuggestions implements OwnedUiPromptSuggestionGener
|
|
|
26
26
|
#private;
|
|
27
27
|
constructor(ports: PiPromptSuggestionPorts);
|
|
28
28
|
reasoningPolicy(): OwnedUiPromptSuggestionReasoning;
|
|
29
|
+
completeInstruction(instruction: string, maxTokens: number, signal: AbortSignal): Promise<string | null>;
|
|
29
30
|
generate(request: OwnedUiPromptSuggestionRequest): Promise<OwnedUiPromptSuggestionResult>;
|
|
30
31
|
}
|
|
@@ -20,6 +20,46 @@ export class PiPromptSuggestions {
|
|
|
20
20
|
// Performance: the run's own level keeps the provider's thinking parameters, and the cached prefix, identical.
|
|
21
21
|
return readSuggestionReasoning(session.thinkingLevel);
|
|
22
22
|
}
|
|
23
|
+
async completeInstruction(instruction, maxTokens, signal) {
|
|
24
|
+
const session = this.#ports.session();
|
|
25
|
+
const runtime = this.#ports.runtime();
|
|
26
|
+
if (this.#ports.unavailable() || session === undefined || runtime === undefined || signal.aborted
|
|
27
|
+
|| session.model === undefined || typeof runtime.services.modelRuntime.completeSimple !== "function")
|
|
28
|
+
return null;
|
|
29
|
+
const agent = session.agent;
|
|
30
|
+
try {
|
|
31
|
+
const transformed = typeof agent.transformContext === "function"
|
|
32
|
+
? await agent.transformContext(agent.state.messages, signal)
|
|
33
|
+
: agent.state.messages;
|
|
34
|
+
const messages = typeof agent.convertToLlm === "function"
|
|
35
|
+
? await agent.convertToLlm(transformed)
|
|
36
|
+
: transformed.filter(message => message.role === "user" || message.role === "assistant" || message.role === "toolResult");
|
|
37
|
+
const response = await runtime.services.modelRuntime.completeSimple(session.model, {
|
|
38
|
+
systemPrompt: agent.state.systemPrompt,
|
|
39
|
+
messages: [...messages, { role: "user", content: instruction, timestamp: Date.now() }],
|
|
40
|
+
tools: [],
|
|
41
|
+
}, {
|
|
42
|
+
signal,
|
|
43
|
+
maxTokens,
|
|
44
|
+
...(agent.sessionId === undefined ? {} : { sessionId: agent.sessionId }),
|
|
45
|
+
...(agent.transport === undefined ? {} : { transport: agent.transport }),
|
|
46
|
+
...(agent.onPayload === undefined ? {} : { onPayload: agent.onPayload }),
|
|
47
|
+
});
|
|
48
|
+
if (signal.aborted || !isRecord(response) || response.stopReason === "aborted"
|
|
49
|
+
|| response.stopReason === "error" || response.stopReason === "length"
|
|
50
|
+
|| stringValue(response.errorMessage) !== undefined)
|
|
51
|
+
return null;
|
|
52
|
+
const content = Array.isArray(response.content) ? response.content : [];
|
|
53
|
+
if (content.some(block => isRecord(block) && block.type === "toolCall"))
|
|
54
|
+
return null;
|
|
55
|
+
const text = content.filter(block => isRecord(block) && block.type === "text")
|
|
56
|
+
.map(block => stringValue(block.text) ?? "").join("\n").trim();
|
|
57
|
+
return text || null;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
23
63
|
async generate(request) {
|
|
24
64
|
assertOwnedUiPromptSuggestionRequest(request);
|
|
25
65
|
const identity = request.identity;
|