@timurproko/a1 0.2.7-dev.1245 → 0.2.7-dev.1252
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 +11 -36
- package/bin/cli.js +2 -17
- package/bin/ui.js +7 -48
- package/dist/app/session-shell/exit-notice.d.ts +2 -2
- package/dist/app/session-shell/exit-notice.js +10 -10
- package/dist/app/session-shell/prompt-submission.d.ts +2 -4
- package/dist/app/session-shell/prompt-submission.js +3 -23
- package/dist/app/session-shell/response-copy-transport.js +1 -2
- package/dist/app/session-shell/session-lifecycle.d.ts +1 -2
- package/dist/app/session-shell/session-lifecycle.js +2 -4
- package/dist/app/session-shell/session-shell-root.d.ts +0 -31
- package/dist/app/session-shell/session-shell-root.js +3 -4
- package/dist/app/session-shell/session-shell.js +6 -47
- package/dist/app/session-shell/session-viewport-controller.js +3 -6
- package/dist/app/session-shell/shell-host.js +2 -18
- package/dist/app/session-shell/transcript-document.d.ts +1 -2
- package/dist/app/session-shell/transcript-document.js +3 -28
- package/dist/app/session-shell/workflow-output.js +1 -1
- package/dist/app/session-shell/workflow-router.d.ts +1 -3
- package/dist/app/session-shell/workflow-router.js +1 -4
- package/dist/cli/dispatch.d.ts +1 -11
- package/dist/cli/dispatch.js +5 -92
- package/dist/cli/session-context.js +5 -7
- package/dist/cli/uninstall.d.ts +1 -5
- package/dist/cli/uninstall.js +6 -35
- package/dist/cli/version-stats.js +4 -7
- package/dist/composition/owned-settings.d.ts +0 -1
- package/dist/composition/owned-settings.js +0 -1
- package/dist/composition/owned-ui.d.ts +2 -24
- package/dist/composition/owned-ui.js +11 -87
- package/dist/composition/release-update-observation.d.ts +4 -4
- package/dist/composition/release-update-observation.js +17 -47
- package/dist/composition/session-backend.d.ts +0 -1
- package/dist/composition/session-runtime-registry.d.ts +3 -3
- package/dist/composition/settings-route-host.d.ts +0 -7
- package/dist/composition/settings-route-host.js +4 -10
- package/dist/composition/startup-route.d.ts +0 -1
- package/dist/composition/startup-route.js +0 -1
- package/dist/contracts/owned-ui/index.d.ts +1 -1
- package/dist/contracts/owned-ui/model.d.ts +0 -3
- package/dist/contracts/owned-ui/session-workflows.d.ts +1 -4
- package/dist/features/launch/development-launch.js +0 -1
- package/dist/features/launch/index.d.ts +1 -1
- package/dist/features/launch/intent.d.ts +1 -3
- package/dist/features/launch/intent.js +2 -4
- package/dist/features/launch/session-context.d.ts +2 -2
- package/dist/features/owned-ui/reference-screen-app.d.ts +0 -2
- package/dist/features/owned-ui/reference-screen-app.js +2 -9
- package/dist/features/owned-ui/settings-app.d.ts +0 -6
- package/dist/features/owned-ui/settings-app.js +5 -36
- package/dist/foundation/launch-context/index.d.ts +0 -12
- package/dist/foundation/launch-context/index.js +0 -26
- package/dist/foundation/lifecycle/claim-gate.d.ts +8 -0
- package/dist/foundation/lifecycle/claim-gate.js +37 -0
- package/dist/foundation/lifecycle/index.d.ts +5 -9
- package/dist/foundation/lifecycle/index.js +3 -4
- package/dist/foundation/lifecycle/model.d.ts +2 -59
- package/dist/foundation/lifecycle/model.js +0 -35
- package/dist/foundation/lifecycle/paths.d.ts +0 -24
- package/dist/foundation/lifecycle/paths.js +0 -40
- package/dist/foundation/lifecycle/process-liveness.d.ts +8 -0
- package/dist/foundation/lifecycle/process-liveness.js +18 -0
- package/dist/foundation/lifecycle/session-claim-lock.d.ts +1 -1
- package/dist/foundation/lifecycle/session-claim-lock.js +2 -2
- package/dist/foundation/lifecycle/session-repository-context.d.ts +6 -6
- package/dist/foundation/lifecycle/session-repository-context.js +2 -3
- package/dist/foundation/release/automatic-update.d.ts +1 -3
- package/dist/foundation/release/automatic-update.js +9 -30
- package/dist/foundation/release/bootstrap.d.ts +2 -25
- package/dist/foundation/release/bootstrap.js +33 -344
- package/dist/foundation/release/cohort-state.d.ts +21 -46
- package/dist/foundation/release/cohort-state.js +30 -62
- package/dist/foundation/release/dependency-certification.d.ts +1 -1
- package/dist/foundation/release/index.d.ts +10 -17
- package/dist/foundation/release/index.js +7 -11
- package/dist/foundation/release/latest-release.d.ts +1 -2
- package/dist/foundation/release/latest-release.js +1 -2
- package/dist/foundation/release/process-liveness.d.ts +2 -0
- package/dist/foundation/release/process-liveness.js +12 -0
- package/dist/foundation/release/release-gc.d.ts +12 -9
- package/dist/foundation/release/release-gc.js +34 -98
- package/dist/foundation/release/release-store.d.ts +2 -2
- package/dist/foundation/release/release-store.js +2 -2
- package/dist/foundation/release/restart-certification.js +1 -1
- package/dist/foundation/release/update-activation.d.ts +2 -9
- package/dist/foundation/release/update-activation.js +28 -43
- package/dist/foundation/release/update-execution-lease.js +1 -1
- package/dist/foundation/release/update-launch.d.ts +0 -2
- package/dist/foundation/release/update-launch.js +0 -7
- package/dist/foundation/release/update-recovery.js +1 -1
- package/dist/foundation/release/update-transaction.d.ts +1 -1
- package/dist/foundation/release/update-transaction.js +5 -2
- package/dist/foundation/release/update.d.ts +2 -10
- package/dist/foundation/release/update.js +23 -200
- package/dist/foundation/session-writer-lock/index.d.ts +14 -6
- package/dist/foundation/session-writer-lock/index.js +48 -103
- package/dist/foundation/startup/startup-runtime.d.ts +1 -1
- package/dist/foundation/terminal-cleanup/exit-notice.d.ts +6 -0
- package/dist/foundation/terminal-cleanup/exit-notice.js +36 -0
- package/dist/foundation/terminal-cleanup/index.d.ts +2 -1
- package/dist/foundation/terminal-cleanup/index.js +2 -1
- package/dist/foundation/terminal-cleanup/terminal-reset.d.ts +0 -5
- package/dist/foundation/terminal-cleanup/terminal-reset.js +0 -5
- package/dist/integrations/pi/components/index.d.ts +1 -1
- package/dist/integrations/pi/components/index.js +1 -1
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +1 -4
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +2 -2
- package/dist/integrations/pi/components/shell-hotkey-sections.js +1 -1
- package/dist/integrations/pi/components/shell-presenters-info.d.ts +2 -5
- package/dist/integrations/pi/components/shell-presenters-info.js +4 -18
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +1 -1
- package/dist/integrations/pi/components/shell-presenters-transcript.js +1 -1
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +0 -2
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +2 -5
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +2 -16
- package/dist/integrations/pi/components/upstream/components/session-footer.d.ts +1 -2
- package/dist/integrations/pi/components/upstream/components/session-footer.js +6 -8
- package/dist/integrations/pi/engine/adapter.d.ts +0 -1
- package/dist/integrations/pi/engine/adapter.js +1 -16
- package/dist/integrations/pi/engine/compaction-progress.js +13 -5
- package/dist/integrations/pi/engine/diagnostics-state.d.ts +0 -1
- package/dist/integrations/pi/engine/diagnostics-state.js +0 -14
- package/dist/integrations/pi/engine/prompt-suggestions.d.ts +0 -1
- package/dist/integrations/pi/engine/prompt-suggestions.js +0 -40
- package/dist/integrations/pi/engine/session-runtime.js +0 -2
- package/dist/integrations/pi/engine/workflow-runner.js +1 -1
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -2
- package/dist/integrations/pi/tui-runtime/adapter.js +2 -2
- package/dist/product-identity.d.ts +4 -6
- package/dist/product-identity.js +6 -11
- package/dist/product-identity.json +1 -40
- package/dist/runtime-payload-inventory.json +0 -3
- package/dist/ui/components/index.d.ts +2 -2
- package/dist/ui/components/index.js +1 -1
- package/dist/ui/components/submitted-prompt.d.ts +3 -13
- package/dist/ui/components/submitted-prompt.js +8 -41
- package/dist/ui/components/transcript-viewport.d.ts +1 -3
- package/dist/ui/components/transcript-viewport.js +1 -4
- package/dist/ui/settings/declarations.d.ts +3 -97
- package/dist/ui/settings/declarations.js +3 -78
- package/dist/ui/settings/migrations.js +18 -2
- package/docs/architecture/boundaries.md +22 -39
- package/docs/architecture/code-documentation.md +2 -2
- package/docs/architecture/internal-naming.md +9 -17
- package/docs/architecture/project-structure.md +30 -29
- package/docs/architecture/resource-and-data-policy.md +16 -31
- package/docs/architecture/toolchain.md +14 -19
- package/docs/architecture/ui-reference-provenance.md +2 -2
- package/docs/ci-release-runbook.md +6 -4
- package/docs/features/launch-profiles.md +11 -17
- package/docs/features/prompt-history.md +10 -11
- package/docs/local-worktree-cleanup.md +32 -1
- package/docs/manual-owned-ui-checkpoint.md +0 -1
- package/docs/openspec-archive-automation.md +11 -3
- package/docs/validation.md +5 -9
- package/docs/worktree-link-recovery.md +6 -6
- package/package.json +7 -19
- package/bin/guardian.js +0 -42
- package/bin/supervisor.js +0 -7
- package/bin/tab-launch-context.d.ts +0 -27
- package/bin/tab-launch-context.js +0 -94
- package/dist/app/session-shell/resident-tab-coordinator.d.ts +0 -38
- package/dist/app/session-shell/resident-tab-coordinator.js +0 -77
- package/dist/cli/tabs-request.d.ts +0 -7
- package/dist/cli/tabs-request.js +0 -1
- package/dist/cli/tabs.d.ts +0 -14
- package/dist/cli/tabs.js +0 -151
- package/dist/composition/resident-tab-bridge.d.ts +0 -41
- package/dist/composition/resident-tab-bridge.js +0 -209
- package/dist/composition/utility-tab.d.ts +0 -28
- package/dist/composition/utility-tab.js +0 -244
- package/dist/features/owned-ui/plus-menu-dialog.d.ts +0 -28
- package/dist/features/owned-ui/plus-menu-dialog.js +0 -89
- package/dist/features/resident-tab/auto-name.d.ts +0 -11
- package/dist/features/resident-tab/auto-name.js +0 -44
- package/dist/features/resident-tab/index.d.ts +0 -5
- package/dist/features/resident-tab/index.js +0 -7
- package/dist/features/resident-tab/shortcut-bindings-file.d.ts +0 -8
- package/dist/features/resident-tab/shortcut-bindings-file.js +0 -40
- package/dist/features/resident-tab/shortcut-declarations.d.ts +0 -13
- package/dist/features/resident-tab/shortcut-declarations.js +0 -26
- package/dist/features/resident-tab/shortcut-projection.d.ts +0 -29
- package/dist/features/resident-tab/shortcut-projection.js +0 -64
- package/dist/features/resident-tab/status-deriver.d.ts +0 -10
- package/dist/features/resident-tab/status-deriver.js +0 -12
- package/dist/foundation/launch-guardian/exit-watcher.d.ts +0 -14
- package/dist/foundation/launch-guardian/exit-watcher.js +0 -103
- package/dist/foundation/launch-guardian/index.d.ts +0 -2
- package/dist/foundation/launch-guardian/index.js +0 -1
- package/dist/foundation/launch-guardian/main.d.ts +0 -39
- package/dist/foundation/launch-guardian/main.js +0 -232
- package/dist/foundation/lifecycle/commands.d.ts +0 -40
- package/dist/foundation/lifecycle/commands.js +0 -1
- package/dist/foundation/lifecycle/launch-instance.d.ts +0 -46
- package/dist/foundation/lifecycle/launch-instance.js +0 -134
- package/dist/foundation/lifecycle/native-claim-gate.d.ts +0 -5
- package/dist/foundation/lifecycle/native-claim-gate.js +0 -41
- package/dist/foundation/lifecycle/supervisor-startup.d.ts +0 -30
- package/dist/foundation/lifecycle/supervisor-startup.js +0 -106
- package/dist/foundation/process-containment/addon-containment.d.ts +0 -20
- package/dist/foundation/process-containment/addon-containment.js +0 -139
- package/dist/foundation/process-containment/addon-process-inspector.d.ts +0 -11
- package/dist/foundation/process-containment/addon-process-inspector.js +0 -36
- package/dist/foundation/process-containment/addon.d.ts +0 -47
- package/dist/foundation/process-containment/addon.js +0 -57
- package/dist/foundation/process-containment/artifact.d.ts +0 -1
- package/dist/foundation/process-containment/artifact.js +0 -35
- package/dist/foundation/process-containment/contracts.d.ts +0 -33
- package/dist/foundation/process-containment/contracts.js +0 -35
- package/dist/foundation/process-containment/index.d.ts +0 -9
- package/dist/foundation/process-containment/index.js +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.d.ts +0 -7
- package/dist/foundation/process-containment/linux-process-inspector.js +0 -27
- package/dist/foundation/process-containment/native-process-inspector.d.ts +0 -4
- package/dist/foundation/process-containment/native-process-inspector.js +0 -21
- package/dist/foundation/protocol/client.d.ts +0 -18
- package/dist/foundation/protocol/client.js +0 -130
- package/dist/foundation/protocol/index.d.ts +0 -3
- package/dist/foundation/protocol/index.js +0 -2
- package/dist/foundation/protocol/messages.d.ts +0 -90
- package/dist/foundation/protocol/messages.js +0 -100
- package/dist/foundation/release/cohort-selection.d.ts +0 -33
- package/dist/foundation/release/cohort-selection.js +0 -67
- package/dist/foundation/release/endpoint-lock.d.ts +0 -2
- package/dist/foundation/release/endpoint-lock.js +0 -37
- package/dist/foundation/release/endpoint-recovery.d.ts +0 -10
- package/dist/foundation/release/endpoint-recovery.js +0 -45
- package/dist/foundation/release/endpoints.d.ts +0 -32
- package/dist/foundation/release/endpoints.js +0 -152
- package/dist/foundation/release/prepared-update-activation.d.ts +0 -3
- package/dist/foundation/release/prepared-update-activation.js +0 -27
- package/dist/foundation/release/process-cleanup.d.ts +0 -14
- package/dist/foundation/release/process-cleanup.js +0 -76
- package/dist/foundation/release/supervisor-identity.d.ts +0 -15
- package/dist/foundation/release/supervisor-identity.js +0 -63
- package/dist/foundation/resident-tabs/boot-identity.d.ts +0 -6
- package/dist/foundation/resident-tabs/boot-identity.js +0 -16
- package/dist/foundation/resident-tabs/bounded-host-command.d.ts +0 -20
- package/dist/foundation/resident-tabs/bounded-host-command.js +0 -62
- package/dist/foundation/resident-tabs/bridge-client.d.ts +0 -73
- package/dist/foundation/resident-tabs/bridge-client.js +0 -327
- package/dist/foundation/resident-tabs/continuity.d.ts +0 -12
- package/dist/foundation/resident-tabs/continuity.js +0 -63
- package/dist/foundation/resident-tabs/doctor.d.ts +0 -28
- package/dist/foundation/resident-tabs/doctor.js +0 -166
- package/dist/foundation/resident-tabs/draft-checkpoint.d.ts +0 -27
- package/dist/foundation/resident-tabs/draft-checkpoint.js +0 -145
- package/dist/foundation/resident-tabs/ensure-terminal-host.d.ts +0 -36
- package/dist/foundation/resident-tabs/ensure-terminal-host.js +0 -151
- package/dist/foundation/resident-tabs/fault-injection.d.ts +0 -8
- package/dist/foundation/resident-tabs/fault-injection.js +0 -26
- package/dist/foundation/resident-tabs/fixture-control.d.ts +0 -7
- package/dist/foundation/resident-tabs/fixture-control.js +0 -35
- package/dist/foundation/resident-tabs/host-entry.d.ts +0 -1
- package/dist/foundation/resident-tabs/host-entry.js +0 -17
- package/dist/foundation/resident-tabs/index.d.ts +0 -15
- package/dist/foundation/resident-tabs/index.js +0 -10
- package/dist/foundation/resident-tabs/maintenance.d.ts +0 -39
- package/dist/foundation/resident-tabs/maintenance.js +0 -75
- package/dist/foundation/resident-tabs/progress-observation-schema.d.ts +0 -34
- package/dist/foundation/resident-tabs/progress-observation-schema.js +0 -1
- package/dist/foundation/resident-tabs/progress-observation.d.ts +0 -4
- package/dist/foundation/resident-tabs/progress-observation.js +0 -150
- package/dist/foundation/resident-tabs/prompt-journal.d.ts +0 -63
- package/dist/foundation/resident-tabs/prompt-journal.js +0 -213
- package/dist/foundation/resident-tabs/protocol.d.ts +0 -12
- package/dist/foundation/resident-tabs/protocol.js +0 -195
- package/dist/foundation/resident-tabs/recovery.d.ts +0 -26
- package/dist/foundation/resident-tabs/recovery.js +0 -205
- package/dist/foundation/resident-tabs/release-holds.d.ts +0 -28
- package/dist/foundation/resident-tabs/release-holds.js +0 -78
- package/dist/foundation/resident-tabs/routes.d.ts +0 -5
- package/dist/foundation/resident-tabs/routes.js +0 -5
- package/dist/foundation/resident-tabs/routing.d.ts +0 -11
- package/dist/foundation/resident-tabs/routing.js +0 -10
- package/dist/foundation/resident-tabs/runtime-control.d.ts +0 -38
- package/dist/foundation/resident-tabs/runtime-control.js +0 -74
- package/dist/foundation/resident-tabs/session-sync.d.ts +0 -14
- package/dist/foundation/resident-tabs/session-sync.js +0 -37
- package/dist/foundation/resident-tabs/settings.d.ts +0 -16
- package/dist/foundation/resident-tabs/settings.js +0 -60
- package/dist/foundation/resident-tabs/terminal-host-artifact.d.ts +0 -14
- package/dist/foundation/resident-tabs/terminal-host-artifact.js +0 -78
- package/dist/foundation/resident-tabs/zip-archive.d.ts +0 -9
- package/dist/foundation/resident-tabs/zip-archive.js +0 -56
- package/dist/foundation/storage/control-store.d.ts +0 -20
- package/dist/foundation/storage/control-store.js +0 -331
- package/dist/foundation/storage/index.d.ts +0 -1
- package/dist/foundation/storage/index.js +0 -1
- package/dist/foundation/supervision/index.d.ts +0 -3
- package/dist/foundation/supervision/index.js +0 -3
- package/dist/foundation/supervision/main.d.ts +0 -1
- package/dist/foundation/supervision/main.js +0 -86
- package/dist/foundation/supervision/paths.d.ts +0 -1
- package/dist/foundation/supervision/paths.js +0 -1
- package/dist/foundation/supervision/server.d.ts +0 -46
- package/dist/foundation/supervision/server.js +0 -606
- package/dist/integrations/pi/engine/offline-settings-port.d.ts +0 -23
- package/dist/integrations/pi/engine/offline-settings-port.js +0 -54
- package/dist/native/darwin-arm64/manifest.json +0 -23
- package/dist/native/darwin-arm64/process-guardian.node +0 -0
- package/dist/native/darwin-arm64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10500
- package/dist/native/darwin-arm64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-arm64/terminal-host.node +0 -0
- package/dist/native/darwin-x64/manifest.json +0 -23
- package/dist/native/darwin-x64/process-guardian.node +0 -0
- package/dist/native/darwin-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10737
- package/dist/native/darwin-x64/terminal-host.manifest.json +0 -46
- package/dist/native/darwin-x64/terminal-host.node +0 -0
- package/dist/native/linux-x64/manifest.json +0 -23
- package/dist/native/linux-x64/process-guardian.node +0 -0
- package/dist/native/linux-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -11226
- package/dist/native/linux-x64/terminal-host.manifest.json +0 -46
- package/dist/native/linux-x64/terminal-host.node +0 -0
- package/dist/native/win32-x64/manifest.json +0 -23
- package/dist/native/win32-x64/process-guardian.node +0 -0
- package/dist/native/win32-x64/terminal-host-THIRD-PARTY-NOTICES.txt +0 -10757
- package/dist/native/win32-x64/terminal-host.manifest.json +0 -46
- package/dist/native/win32-x64/terminal-host.node +0 -0
- package/docs/architecture/evidence/resident-tabs/linux-x64.md +0 -37
- package/docs/architecture/evidence/resident-tabs/macos-arm64.md +0 -36
- package/docs/architecture/evidence/resident-tabs/macos-x64.md +0 -35
- package/docs/architecture/evidence/resident-tabs/windows-x64.md +0 -36
- package/docs/architecture/evidence/terminal-host-spike/manual-one-pane-terminal-host.md +0 -70
- package/docs/architecture/evidence/terminal-host-spike/manual-two-by-two-basic-terminal-host.md +0 -32
- package/docs/architecture/evidence/terminal-host-spike/milestone-baseline.json +0 -115
- package/docs/architecture/evidence/terminal-host-spike/owned-ui-foundation-prerequisite.json +0 -48
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-provenance.json +0 -125
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-1.json +0 -56
- package/docs/architecture/evidence/terminal-host-spike/terminal-host-task-5-3.json +0 -174
- package/docs/architecture/evidence/terminal-host-spike/terminal-spike-acceptance-record.json +0 -18
- package/docs/architecture/native-fixture-isolation.md +0 -23
- package/docs/architecture/process-guardian-provenance.md +0 -36
- package/docs/architecture/resident-tabs-requirements.md +0 -18
- package/docs/architecture/resident-tabs.md +0 -668
- package/docs/architecture/terminal-host-proof-gate.md +0 -34
- package/docs/architecture/terminal-host-provenance.md +0 -81
- package/docs/architecture/terminal-host-spike-evidence.md +0 -39
- package/docs/launch-recovery.md +0 -23
- package/docs/manual-launch-instance-acceptance.md +0 -43
- package/docs/manual-resident-tabs-acceptance.md +0 -51
package/README.md
CHANGED
|
@@ -53,19 +53,19 @@ The installer needs Node.js 22.19 or later. When npm's global folder is not writ
|
|
|
53
53
|
|
|
54
54
|
## Launch
|
|
55
55
|
|
|
56
|
-
Launch A1 (profile: `~/.a1/agent`):
|
|
56
|
+
Launch A1, one agent in this terminal (profile: `~/.a1/agent`):
|
|
57
57
|
|
|
58
58
|
```text
|
|
59
59
|
a1
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
Resume a saved session:
|
|
63
63
|
|
|
64
64
|
```text
|
|
65
|
-
a1
|
|
65
|
+
a1 --session <id>
|
|
66
66
|
```
|
|
67
67
|
|
|
68
|
-
When a
|
|
68
|
+
When a session exits, A1 prints the `a1 --session <id>` command that resumes it; a custom session store is included in the printed command. Closing the terminal ends the agent, as it does for Pi.
|
|
69
69
|
|
|
70
70
|
Show all commands:
|
|
71
71
|
|
|
@@ -73,7 +73,7 @@ Show all commands:
|
|
|
73
73
|
a1 help
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
Show the current and latest versions:
|
|
76
|
+
Show the current version and the latest Develop and Release versions, from either installed channel:
|
|
77
77
|
|
|
78
78
|
```text
|
|
79
79
|
a1 version
|
|
@@ -87,30 +87,6 @@ a1 pi
|
|
|
87
87
|
|
|
88
88
|
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme/separator-dark.svg"><img src="docs/assets/readme/separator.svg" alt="" width="280"></picture></p>
|
|
89
89
|
|
|
90
|
-
## Tabs
|
|
91
|
-
|
|
92
|
-
Tabs keep running after their terminal closes. List them, or stop one; its session stays resumable:
|
|
93
|
-
|
|
94
|
-
```text
|
|
95
|
-
a1 tabs
|
|
96
|
-
a1 tabs stop <id>
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Stop every tab and the resident host when you are finished with them (not required to run `a1 solo`):
|
|
100
|
-
|
|
101
|
-
```text
|
|
102
|
-
a1 tabs host stop
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
Show host health, or write a redacted diagnostic bundle:
|
|
106
|
-
|
|
107
|
-
```text
|
|
108
|
-
a1 tabs host status
|
|
109
|
-
a1 tabs doctor
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme/separator-dark.svg"><img src="docs/assets/readme/separator.svg" alt="" width="280"></picture></p>
|
|
113
|
-
|
|
114
90
|
## Update
|
|
115
91
|
|
|
116
92
|
Update on the channel you already use (release stays on release, develop stays on develop):
|
|
@@ -157,17 +133,16 @@ npm x -y -- @timurproko/a1-install
|
|
|
157
133
|
|
|
158
134
|
The **Update** setting controls release discovery:
|
|
159
135
|
|
|
160
|
-
- **Auto** (default) checks the running release's stable or development channel at startup and every 15 minutes while open. It silently installs a verified update, then shows `Update installed, restart to update` above the editor; existing sessions keep running
|
|
161
|
-
- **Notify** checks at startup (at most daily), keeps the `Update Available` notice, and leaves installation manual.
|
|
136
|
+
- **Auto** (default) checks the running release's stable or development channel at startup and every 15 minutes while open. It silently installs a verified update, then shows `Update installed, restart to update` above the editor; existing sessions keep running on their release, and the next `a1` starts the new one.
|
|
162
137
|
- **No** performs no update check; updates remain available through the commands above.
|
|
163
138
|
|
|
164
|
-
`A1_SKIP_VERSION_CHECK=1` disables
|
|
139
|
+
`A1_SKIP_VERSION_CHECK=1` disables Auto discovery. Manual stable, development, and exact-version update commands remain available in every mode.
|
|
165
140
|
|
|
166
141
|
<p align="center"><picture><source media="(prefers-color-scheme: dark)" srcset="docs/assets/readme/separator-dark.svg"><img src="docs/assets/readme/separator.svg" alt="" width="280"></picture></p>
|
|
167
142
|
|
|
168
143
|
## Uninstall
|
|
169
144
|
|
|
170
|
-
Remove A1 from this machine. It
|
|
145
|
+
Remove A1 from this machine. It asks before deleting your sessions and settings in `~/.a1`:
|
|
171
146
|
|
|
172
147
|
```text
|
|
173
148
|
a1 uninstall
|
|
@@ -217,7 +192,7 @@ a1 update npm:pi-mcp-adapter
|
|
|
217
192
|
|
|
218
193
|
## Develop
|
|
219
194
|
|
|
220
|
-
A source build needs Node.js, npm,
|
|
195
|
+
A source build needs Node.js, npm, and git. The product is pure TypeScript; there is no native toolchain to install.
|
|
221
196
|
|
|
222
197
|
Install exact locked dependencies:
|
|
223
198
|
|
|
@@ -225,7 +200,7 @@ Install exact locked dependencies:
|
|
|
225
200
|
npm ci
|
|
226
201
|
```
|
|
227
202
|
|
|
228
|
-
Compile TypeScript
|
|
203
|
+
Compile TypeScript into `dist`:
|
|
229
204
|
|
|
230
205
|
```text
|
|
231
206
|
npm run build
|
|
@@ -255,7 +230,7 @@ Complete non-physical suite:
|
|
|
255
230
|
npm run test:full
|
|
256
231
|
```
|
|
257
232
|
|
|
258
|
-
Report Node, npm, git,
|
|
233
|
+
Report Node, npm, git, GitHub CLI, and dependency readiness; after fixing anything it lists, rerun the same build command:
|
|
259
234
|
|
|
260
235
|
```text
|
|
261
236
|
npm run doctor
|
package/bin/cli.js
CHANGED
|
@@ -55,23 +55,8 @@ process.exitCode = await dispatchCli(process.argv.slice(2), {
|
|
|
55
55
|
return await runPackageCommand(request, { createPort: createPiPackagesPort });
|
|
56
56
|
},
|
|
57
57
|
sessionContext: async request => {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
import("../dist/foundation/process-containment/native-process-inspector.js"),
|
|
61
|
-
import("../dist/foundation/launch-context/index.js"),
|
|
62
|
-
]);
|
|
63
|
-
const launch = readLaunchContext(process.env);
|
|
64
|
-
let inspector;
|
|
65
|
-
return await runSessionContextCommand(request, {
|
|
66
|
-
inspectProcess: async pid => {
|
|
67
|
-
inspector ??= createNativeProcessInspector(process.env, process.platform, launch.releaseRoot);
|
|
68
|
-
return (await inspector).observe(pid);
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
tabs: async request => {
|
|
73
|
-
const { runTabsCommand } = await import("../dist/cli/tabs.js");
|
|
74
|
-
return await runTabsCommand(request, { packageRoot: fileURLToPath(packageRoot) });
|
|
58
|
+
const { runSessionContextCommand } = await import("../dist/cli/session-context.js");
|
|
59
|
+
return await runSessionContextCommand(request);
|
|
75
60
|
},
|
|
76
61
|
uninstall: async request => {
|
|
77
62
|
const [{ runUninstall }, { createInterface }] = await Promise.all([
|
package/bin/ui.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
// Security: this helper has no A1, Pi, tool, or extension dependency and erases credentials before those modules load.
|
|
4
|
-
const { assignFreshSessionRuntimeId, consumeTabLaunchContext, formatResidentFallbackNotice, waitForStandbyPromotion } = await import("./tab-launch-context.js");
|
|
5
|
-
const { uiArguments, tabCredentials, tabDataDir, tabIncarnation, tabStandby } = consumeTabLaunchContext(process.argv.slice(2), process.env);
|
|
6
|
-
|
|
7
3
|
// Invariant: one terminal module identity per process, decided before any A1 or Pi module loads.
|
|
8
4
|
const { installPinnedPiTuiResolver } = await import("./module-resolver.js");
|
|
9
5
|
installPinnedPiTuiResolver(new URL("..", import.meta.url).pathname.replace(/^\/(.:)/, "$1").replace(/\/$/, ""));
|
|
10
|
-
const utilityRoute = tabCredentials === undefined
|
|
11
|
-
? null
|
|
12
|
-
: (await import("../dist/foundation/resident-tabs/routes.js")).residentUtilityRoute(tabCredentials.tabId);
|
|
13
6
|
const startup = await import("../dist/foundation/startup/startup-runtime.js");
|
|
14
7
|
startup.enableEnvironmentCompileCache(process.env);
|
|
15
|
-
const {
|
|
8
|
+
const { readLaunchContext } = await import("../dist/foundation/launch-context/index.js");
|
|
16
9
|
const launchContext = readLaunchContext(process.env, "profile");
|
|
17
10
|
const profile = launchContext.launchProfile;
|
|
18
11
|
if (profile === undefined) throw new Error("A1 launch profile is missing");
|
|
@@ -21,17 +14,16 @@ if (profile === "a1") {
|
|
|
21
14
|
import("node:crypto"),
|
|
22
15
|
import("../dist/product-identity.js"),
|
|
23
16
|
]);
|
|
24
|
-
|
|
17
|
+
// Invariant: every UI process is its own session runtime, never one inherited from a parent shell.
|
|
18
|
+
process.env[PRODUCT_IDENTITY.environment.sessionRuntimeId] = randomUUID();
|
|
25
19
|
}
|
|
26
20
|
const { installFatalExit } = await import("../dist/foundation/terminal-cleanup/fatal-exit.js");
|
|
27
21
|
const { resolveProductPaths } = await import("../dist/foundation/lifecycle/paths.js");
|
|
28
|
-
const {
|
|
22
|
+
const { join } = await import("node:path");
|
|
29
23
|
/** @type {{ dispose(): void | Promise<unknown> } | undefined} */
|
|
30
24
|
let runningApplication;
|
|
31
25
|
const fatal = profile === "a1" ? installFatalExit({
|
|
32
|
-
directory:
|
|
33
|
-
? join(resolveProductPaths().runtimeDir, "crashes")
|
|
34
|
-
: join(dirname(tabDataDir), "diagnostics"),
|
|
26
|
+
directory: join(resolveProductPaths().runtimeDir, "crashes"),
|
|
35
27
|
...(launchContext.releaseId === undefined ? {} : { releaseId: launchContext.releaseId }),
|
|
36
28
|
dispose: () => runningApplication?.dispose(),
|
|
37
29
|
}) : undefined;
|
|
@@ -49,21 +41,7 @@ const assertPiTuiIdentity = () => identity.assertSinglePiTuiModuleAtLaunch(
|
|
|
49
41
|
(/** @type {string} */ message) => process.stderr.write(message),
|
|
50
42
|
);
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
if (profile !== "a1" || tabCredentials === undefined) throw new Error("utility tabs require the normal A1 tab profile");
|
|
54
|
-
await startup.markStartupPhase(process.env, "ui-entry");
|
|
55
|
-
assertPiTuiIdentity();
|
|
56
|
-
const utility = await import("../dist/composition/utility-tab.js");
|
|
57
|
-
await startup.markStartupPhase(process.env, "ui-modules-loaded");
|
|
58
|
-
const bridge = new (await import("../dist/foundation/resident-tabs/bridge-client.js")).TabBridgeClient({ credentials: tabCredentials });
|
|
59
|
-
completeRun(utility.runUtilityTab({
|
|
60
|
-
route: utilityRoute,
|
|
61
|
-
bridge,
|
|
62
|
-
cwd: process.cwd(),
|
|
63
|
-
profileId: profile,
|
|
64
|
-
onApplication: application => { runningApplication = application; },
|
|
65
|
-
}), utility.terminateOwnedUiProcess);
|
|
66
|
-
} else {
|
|
44
|
+
{
|
|
67
45
|
const descriptor = await import("../dist/foundation/startup/startup-descriptor.js");
|
|
68
46
|
// Performance: begin the exact Agent launch graph together while the trace write is pending.
|
|
69
47
|
// Direct owned-module entries avoid evaluating unrelated barrel exports before first paint.
|
|
@@ -78,40 +56,21 @@ if (utilityRoute !== null) {
|
|
|
78
56
|
{ composeOwnedUi },
|
|
79
57
|
] = await modules;
|
|
80
58
|
|
|
81
|
-
if (tabStandby) await waitForStandbyPromotion(process.stdin, tabDataDir === undefined ? undefined : join(tabDataDir, "standby-promote"));
|
|
82
59
|
assertPiTuiIdentity();
|
|
83
60
|
await startup.markStartupPhase(process.env, "ui-modules-loaded");
|
|
84
61
|
|
|
85
|
-
const sessionSelection = parseSessionSelection(
|
|
62
|
+
const sessionSelection = parseSessionSelection(process.argv.slice(2));
|
|
86
63
|
completeRun(Promise.resolve().then(async () => {
|
|
87
|
-
const tab = tabCredentials === undefined ? undefined : {
|
|
88
|
-
bridge: new (await import("../dist/foundation/resident-tabs/bridge-client.js")).TabBridgeClient({ credentials: tabCredentials }),
|
|
89
|
-
dataDir: /** @type {string} */ (tabDataDir),
|
|
90
|
-
incarnation: /** @type {number} */ (tabIncarnation),
|
|
91
|
-
};
|
|
92
64
|
if (sessionSelection && profile !== "a1") throw new Error("session selection requires the normal A1 profile");
|
|
93
65
|
return runSelectedInteractiveRuntime(profile, {
|
|
94
66
|
ownedUi: async (profileId, ownedSurfaces) => {
|
|
95
|
-
const processInspector = ownedSurfaces
|
|
96
|
-
? await import("../dist/foundation/process-containment/native-process-inspector.js")
|
|
97
|
-
.then(module => module.createNativeProcessInspector(process.env, process.platform, launchContext.releaseRoot))
|
|
98
|
-
.catch(() => null)
|
|
99
|
-
: null;
|
|
100
67
|
const { application, settings } = await composeOwnedUi({
|
|
101
68
|
cwd: process.cwd(),
|
|
102
69
|
profileId,
|
|
103
70
|
ownedSurfaces,
|
|
104
|
-
notificationVersion: launchContext.updateVersion,
|
|
105
|
-
...(hidesTabSettings(launchContext) ? { hideTabSettings: true } : {}),
|
|
106
|
-
soloResumeHint: profile === "a1" && launchContext.launchMode === "solo",
|
|
107
|
-
...(processInspector === null ? {} : { inspectProcess: pid => processInspector.observe(pid) }),
|
|
108
71
|
projectTrustPrompt: createConsoleProjectTrustPrompt({ presentation: profile === "a1" ? "bare" : "comparison" }),
|
|
109
72
|
sessionForkPrompt: createConsoleSessionForkPrompt(),
|
|
110
73
|
...(sessionSelection === undefined ? {} : { sessionSelection }),
|
|
111
|
-
...(tab === undefined ? {} : { tab }),
|
|
112
|
-
...(launchContext.residentFallback === undefined ? {} : {
|
|
113
|
-
residentFallbackNotice: formatResidentFallbackNotice(launchContext.residentFallback),
|
|
114
|
-
}),
|
|
115
74
|
});
|
|
116
75
|
runningApplication = application;
|
|
117
76
|
return await runOwnedUi({ application, ...(settings === null ? {} : { settings }) });
|
|
@@ -13,6 +13,6 @@ export interface ExitNoticeSource {
|
|
|
13
13
|
export interface ArmedExitNotice {
|
|
14
14
|
clear(): void;
|
|
15
15
|
}
|
|
16
|
-
export declare function uncleanExitNoticeLines(resume: SessionResumeCommandMetadata | null
|
|
16
|
+
export declare function uncleanExitNoticeLines(resume: SessionResumeCommandMetadata | null): string[];
|
|
17
17
|
/** Arms the notice and keeps its resume command following the bound session until cleared. */
|
|
18
|
-
export declare function armExitNotice(source: ExitNoticeSource, path: string
|
|
18
|
+
export declare function armExitNotice(source: ExitNoticeSource, path: string): ArmedExitNotice;
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The runtime's half of the unclean-exit protocol with the
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* The runtime's half of the unclean-exit protocol with the launcher. While the notice is armed,
|
|
3
|
+
* the launcher treats the runtime's end as unclean: it restores the terminal and prints these
|
|
4
|
+
* lines, so a killed session still leaves its resume command behind. A clean shutdown clears the
|
|
5
|
+
* notice after the terminal is restored.
|
|
6
6
|
*/
|
|
7
7
|
import { renameSync, rmSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
9
9
|
import { formatSessionResumeCommand } from "./session-lifecycle.js";
|
|
10
|
-
export function uncleanExitNoticeLines(resume
|
|
10
|
+
export function uncleanExitNoticeLines(resume) {
|
|
11
11
|
return [
|
|
12
12
|
`${PRODUCT_IDENTITY.displayName} was stopped unexpectedly.`,
|
|
13
|
-
...(resume === null ? [] : [`To resume this session: ${formatSessionResumeCommand(resume
|
|
13
|
+
...(resume === null ? [] : [`To resume this session: ${formatSessionResumeCommand(resume)}`]),
|
|
14
14
|
];
|
|
15
15
|
}
|
|
16
16
|
/** Arms the notice and keeps its resume command following the bound session until cleared. */
|
|
17
|
-
export function armExitNotice(source, path
|
|
17
|
+
export function armExitNotice(source, path) {
|
|
18
18
|
let current = null;
|
|
19
19
|
let cleared = false;
|
|
20
20
|
let generation = source.identity.sessionGeneration;
|
|
21
21
|
const write = () => {
|
|
22
22
|
if (cleared)
|
|
23
23
|
return;
|
|
24
|
-
// Protocol: plain text only; the
|
|
25
|
-
const text = `${uncleanExitNoticeLines(source.identity.currentSessionResumeMetadata()
|
|
24
|
+
// Protocol: plain text only; the launcher strips control characters, so styling would be lost.
|
|
25
|
+
const text = `${uncleanExitNoticeLines(source.identity.currentSessionResumeMetadata()).join("\n")}\n`;
|
|
26
26
|
if (text === current)
|
|
27
27
|
return;
|
|
28
28
|
try {
|
|
29
|
-
// Invariant: the
|
|
29
|
+
// Invariant: the launcher may read at any instant, so it sees the previous or the next notice, never half of one.
|
|
30
30
|
const temporary = `${path}.${process.pid}.tmp`;
|
|
31
31
|
writeFileSync(temporary, text, { mode: 0o600 });
|
|
32
32
|
renameSync(temporary, path);
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { OwnedUiCommand, OwnedUiCommandResult, OwnedUiSessionBackend, OwnedUiSessionViewModel, PromptHistoryImageSidecarPort } from "../../contracts/owned-ui/index.js";
|
|
2
2
|
import type { PromptHistoryController } from "./prompt-history-controller.js";
|
|
3
|
-
import type { ResidentTabCoordinator } from "./resident-tab-coordinator.js";
|
|
4
3
|
import type { SessionConcern } from "./session-concern.js";
|
|
5
4
|
import type { OwnedUiSessionShellRoot } from "./session-shell-root.js";
|
|
6
5
|
import type { OwnedUiPresenterTerminal } from "./shell-host.js";
|
|
@@ -8,7 +7,6 @@ export interface PromptSubmissionPorts {
|
|
|
8
7
|
readonly backend: Pick<OwnedUiSessionBackend, "session" | "identity" | "workflows">;
|
|
9
8
|
readonly root: Pick<OwnedUiSessionShellRoot, "editor" | "hasPendingPastes" | "waitForPromptPastes" | "setExtensionWidget" | "prepareHistoryText" | "imageChipAttachmentsFromEditor" | "preparePromptSubmission" | "omitUnsentPromptImages" | "resumeViewportFollowing" | "beginImageSubmissionStatus" | "appendWorkflowResult">;
|
|
10
9
|
readonly terminal: Pick<OwnedUiPresenterTerminal, "requestRender">;
|
|
11
|
-
readonly residentTab: ResidentTabCoordinator;
|
|
12
10
|
readonly cwd: string;
|
|
13
11
|
promptHistory(): PromptHistoryController | null;
|
|
14
12
|
imageSidecar(): PromptHistoryImageSidecarPort | undefined;
|
|
@@ -23,8 +21,8 @@ export interface PromptSubmissionPorts {
|
|
|
23
21
|
}
|
|
24
22
|
/**
|
|
25
23
|
* Turns editor input into engine commands: prompts, steering, follow-ups, and bash, each recorded
|
|
26
|
-
* in history first. It holds a submission whose image pastes are still preparing
|
|
27
|
-
*
|
|
24
|
+
* in history first. It holds a submission whose image pastes are still preparing and recovers the
|
|
25
|
+
* draft when a submission is rejected.
|
|
28
26
|
*/
|
|
29
27
|
export declare class PromptSubmission implements SessionConcern {
|
|
30
28
|
#private;
|
|
@@ -3,8 +3,8 @@ import { renderPiShellStatusText } from "../../integrations/pi/components/shell-
|
|
|
3
3
|
const rejected = (diagnostic) => ({ outcome: "rejected", diagnostic });
|
|
4
4
|
/**
|
|
5
5
|
* Turns editor input into engine commands: prompts, steering, follow-ups, and bash, each recorded
|
|
6
|
-
* in history first. It holds a submission whose image pastes are still preparing
|
|
7
|
-
*
|
|
6
|
+
* in history first. It holds a submission whose image pastes are still preparing and recovers the
|
|
7
|
+
* draft when a submission is rejected.
|
|
8
8
|
*/
|
|
9
9
|
export class PromptSubmission {
|
|
10
10
|
#ports;
|
|
@@ -199,29 +199,9 @@ export class PromptSubmission {
|
|
|
199
199
|
text: input,
|
|
200
200
|
...(prepared.images.length === 0 ? {} : { images: prepared.images }),
|
|
201
201
|
};
|
|
202
|
-
let submission;
|
|
203
|
-
try {
|
|
204
|
-
submission = await this.#ports.residentTab.admit({
|
|
205
|
-
sessionId: command.sessionId,
|
|
206
|
-
sessionFile: this.#ports.currentSessionFile(),
|
|
207
|
-
kind: type,
|
|
208
|
-
text: input,
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
catch {
|
|
212
|
-
if (root.editor.getText().length === 0)
|
|
213
|
-
root.editor.setText(displayInput);
|
|
214
|
-
const message = "Prompt was not sent because its recovery journal could not be synchronized.";
|
|
215
|
-
this.reportError(undefined, message);
|
|
216
|
-
return rejected(message);
|
|
217
|
-
}
|
|
218
202
|
const finishSending = prepared.images.length === 0 ? () => { } : root.beginImageSubmissionStatus();
|
|
219
203
|
try {
|
|
220
|
-
|
|
221
|
-
if (submission !== undefined && result.outcome !== "rejected") {
|
|
222
|
-
await this.#ports.residentTab.dispatched(submission.id, command.correlationId);
|
|
223
|
-
}
|
|
224
|
-
return result;
|
|
204
|
+
return await this.execute(command, displayInput);
|
|
225
205
|
}
|
|
226
206
|
finally {
|
|
227
207
|
finishSending();
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { execFile, fork } from "node:child_process";
|
|
2
2
|
import { HelperPool } from "./helper-pool.js";
|
|
3
|
-
import { PRODUCT_IDENTITY } from "../../product-identity.js";
|
|
4
3
|
import { COPY_CHUNK_UNITS, COPY_CLEANUP_MS, MAX_COPY_BYTES, MAX_COPY_CONTROL_BYTES } from "./response-copy-protocol.js";
|
|
5
4
|
const PLATFORM_WRITE_TIMEOUT_MS = 1_500;
|
|
6
5
|
/** Never substitute a remote host's native clipboard for the terminal user's clipboard. */
|
|
7
6
|
export function responseCopyDestination(env) {
|
|
8
|
-
return env
|
|
7
|
+
return env.SSH_CONNECTION || env.SSH_CLIENT || env.SSH_TTY || env.TMUX || env.STY || env.WSL_DISTRO_NAME
|
|
9
8
|
? "terminal" : "native";
|
|
10
9
|
}
|
|
11
10
|
function platformClipboardCommands() {
|
|
@@ -3,14 +3,13 @@ export interface SessionResumeCommandMetadata {
|
|
|
3
3
|
readonly sessionDir: string;
|
|
4
4
|
readonly usesDefaultSessionDir: boolean;
|
|
5
5
|
}
|
|
6
|
-
export declare function formatSessionResumeCommand(metadata: SessionResumeCommandMetadata
|
|
6
|
+
export declare function formatSessionResumeCommand(metadata: SessionResumeCommandMetadata): string;
|
|
7
7
|
export declare function quoteCommandArgument(value: string): string;
|
|
8
8
|
export interface ExitTextInput {
|
|
9
9
|
readonly terminalMode: "regular" | "fullscreen";
|
|
10
10
|
readonly customViewport: boolean;
|
|
11
11
|
readonly exitMode: "transcript" | "resume-hint";
|
|
12
12
|
readonly resume: SessionResumeCommandMetadata | null;
|
|
13
|
-
readonly soloResumeHint?: boolean;
|
|
14
13
|
/** The styled transcript, rendered only when the pinned profile asks for it. */
|
|
15
14
|
readonly transcript: () => string;
|
|
16
15
|
}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { PRODUCT_TEXT } from "../../product-identity.js";
|
|
2
|
-
export function formatSessionResumeCommand(metadata
|
|
2
|
+
export function formatSessionResumeCommand(metadata) {
|
|
3
3
|
const args = [PRODUCT_TEXT.commandName];
|
|
4
|
-
if (solo)
|
|
5
|
-
args.push("solo");
|
|
6
4
|
if (!metadata.usesDefaultSessionDir)
|
|
7
5
|
args.push("--session-dir", quoteCommandArgument(metadata.sessionDir));
|
|
8
6
|
args.push("--session", metadata.sessionId);
|
|
@@ -20,7 +18,7 @@ export function quoteCommandArgument(value) {
|
|
|
20
18
|
export function composeExitText(input) {
|
|
21
19
|
if (input.terminalMode !== "fullscreen")
|
|
22
20
|
return "";
|
|
23
|
-
const resumeHint = input.resume === null ? "" : `${dim("To resume this session:")} ${formatSessionResumeCommand(input.resume
|
|
21
|
+
const resumeHint = input.resume === null ? "" : `${dim("To resume this session:")} ${formatSessionResumeCommand(input.resume)}`;
|
|
24
22
|
// Invariant: bare A1 leaves only the hint behind; the pinned comparison profile still
|
|
25
23
|
// honors fullscreenExitOutput, including the styled transcript.
|
|
26
24
|
if (input.customViewport || input.exitMode === "resume-hint")
|
|
@@ -43,38 +43,10 @@ export interface OwnedUiShellEngineOptions {
|
|
|
43
43
|
};
|
|
44
44
|
/** Bare A1 selects the owned bounded viewport; comparison profiles stay pinned. */
|
|
45
45
|
readonly sessionLayout?: "pinned" | "custom-viewport";
|
|
46
|
-
/** Resident tab quit routes detach the outer client without stopping this engine session. */
|
|
47
|
-
readonly residentTab?: {
|
|
48
|
-
requestDetach(): Promise<boolean>;
|
|
49
|
-
closeOwnedRoute?(route: string): void;
|
|
50
|
-
reportStatus?(status: "working" | "idle"): void;
|
|
51
|
-
admit?(input: {
|
|
52
|
-
readonly sessionId: string;
|
|
53
|
-
readonly sessionFile: string | null;
|
|
54
|
-
readonly kind: "prompt" | "steer" | "follow-up";
|
|
55
|
-
readonly text: string;
|
|
56
|
-
}): Promise<{
|
|
57
|
-
readonly id: string;
|
|
58
|
-
}>;
|
|
59
|
-
dispatched?(): void;
|
|
60
|
-
correlated?(submissionId: string, entryId: string): Promise<void>;
|
|
61
|
-
checkpoint?(text: string): void;
|
|
62
|
-
gracefulStop?(sessionFile: string | null): Promise<void>;
|
|
63
|
-
readonly recovered?: {
|
|
64
|
-
readonly prompts: readonly {
|
|
65
|
-
readonly id: string;
|
|
66
|
-
readonly text: string;
|
|
67
|
-
}[];
|
|
68
|
-
readonly draft: string | null;
|
|
69
|
-
};
|
|
70
|
-
readonly unavailableNotice?: string;
|
|
71
|
-
};
|
|
72
46
|
}
|
|
73
47
|
/** Terminal, startup, viewport, and presentation-cadence seams; production leaves most at their defaults. */
|
|
74
48
|
export interface OwnedUiShellPresentationOptions {
|
|
75
49
|
readonly terminal?: OwnedUiTerminalPort;
|
|
76
|
-
/** Explicit direct solo launch, not a resident fallback or comparison launch. */
|
|
77
|
-
readonly soloResumeHint?: boolean;
|
|
78
50
|
readonly startup?: OwnedUiStartupOptions;
|
|
79
51
|
/** Live profile-local settings, supplied only to the bare-A1 composition. */
|
|
80
52
|
readonly viewportSettings?: OwnedUiViewportSettingsPort;
|
|
@@ -200,7 +172,6 @@ export declare class OwnedUiSessionShellRoot implements PiTuiComponentPort {
|
|
|
200
172
|
readonly requestHyperlinkCleanup?: (rows?: readonly number[]) => void;
|
|
201
173
|
readonly enableDockInputReuse?: boolean;
|
|
202
174
|
readonly persistentHistory?: boolean;
|
|
203
|
-
readonly hideUtilityTabCommands?: boolean;
|
|
204
175
|
readonly historyEditor?: import("../../integrations/pi/components/index.js").HistoryEditorConstructor;
|
|
205
176
|
readonly onSubmit: (text: string) => void;
|
|
206
177
|
readonly onPasteRejected?: (error: unknown) => void;
|
|
@@ -226,8 +197,6 @@ export declare class OwnedUiSessionShellRoot implements PiTuiComponentPort {
|
|
|
226
197
|
readonly keybindings?: PiKeybindingsHost;
|
|
227
198
|
readonly promptImageLimit?: () => number;
|
|
228
199
|
readonly skillsPresentation?: () => "collapse" | "expand";
|
|
229
|
-
/** Resident tab chips already show the session name. */
|
|
230
|
-
readonly footerSessionName?: boolean;
|
|
231
200
|
}, startup?: PiShellHeaderOptions, agentDir?: string, extensionRenderers?: OwnedUiTranscriptRendererPort, sessionLayout?: "pinned" | "custom-viewport", imageAssets?: PiShellImageAssetResolver);
|
|
232
201
|
setEditorPaddingX(padding: number): void;
|
|
233
202
|
setAutocompleteMaxVisible(maxVisible: number): void;
|
|
@@ -81,7 +81,7 @@ export class OwnedUiSessionShellRoot {
|
|
|
81
81
|
frame: progressStatusFrame,
|
|
82
82
|
}, handlers);
|
|
83
83
|
this.#status.setProgressPresentation(this.#customViewport ? "custom-viewport" : "pinned");
|
|
84
|
-
this.#footer = createPiShellFooter(this.#extensions.withStatuses(view), cwd, this.#customViewport ? "a1" : "pi", () => this.#footerLevel
|
|
84
|
+
this.#footer = createPiShellFooter(this.#extensions.withStatuses(view), cwd, this.#customViewport ? "a1" : "pi", () => this.#footerLevel);
|
|
85
85
|
this.editor = createShellEditor({
|
|
86
86
|
handlers,
|
|
87
87
|
customViewport: this.#customViewport,
|
|
@@ -149,7 +149,6 @@ export class OwnedUiSessionShellRoot {
|
|
|
149
149
|
resourceRows: width => this.#customViewport ? [] : this.resources.render(width),
|
|
150
150
|
hasExtensionHeader: () => this.#extensions.header !== null,
|
|
151
151
|
thinkingVisible: () => this.#thinkingVisible,
|
|
152
|
-
timeFormat: () => this.#viewportController.config.timeFormat,
|
|
153
152
|
},
|
|
154
153
|
});
|
|
155
154
|
}
|
|
@@ -174,8 +173,8 @@ export class OwnedUiSessionShellRoot {
|
|
|
174
173
|
}
|
|
175
174
|
#createSubmittedPromptComposer() {
|
|
176
175
|
return {
|
|
177
|
-
layout:
|
|
178
|
-
compose: (rows, width,
|
|
176
|
+
layout: width => submittedPromptLayout(width),
|
|
177
|
+
compose: (rows, width, style) => composeSubmittedPromptRows(rows, width, { ...style, prefix: text => promptArrow(text, piTheme()) }).map(row => nativeHyperlinkStyle(row, nativeTranscriptLinkColor)),
|
|
179
178
|
};
|
|
180
179
|
}
|
|
181
180
|
setEditorPaddingX(padding) {
|