@timurproko/a1 0.1.8-dev.137 → 0.1.8-dev.151
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 +2 -4
- package/dist/cli/capabilities.d.ts +2 -11
- package/dist/cli/capabilities.js +1 -1
- package/dist/cli/dispatch.js +3 -6
- package/dist/composition/owned-ui.js +26 -5
- package/dist/composition/settings-route-host.d.ts +1 -1
- package/dist/composition/settings-route-host.js +1 -1
- package/dist/contracts/owned-ui/model.d.ts +28 -0
- package/dist/contracts/owned-ui/validation.js +14 -0
- package/dist/features/launch/development-launch.js +11 -3
- package/dist/features/launch/index.d.ts +0 -1
- package/dist/features/launch/index.js +0 -1
- package/dist/features/launch/intent.d.ts +3 -2
- package/dist/features/launch/intent.js +1 -2
- package/dist/features/launch/prepare-launch.d.ts +0 -2
- package/dist/features/launch/prepare-launch.js +2 -9
- package/dist/features/launch/profile-paths.d.ts +1 -2
- package/dist/features/launch/profile-paths.js +2 -8
- package/dist/features/launch/runtime-selection.d.ts +2 -5
- package/dist/features/owned-ui/settings-app.js +38 -14
- package/dist/foundation/lifecycle/model.d.ts +1 -1
- package/dist/foundation/lifecycle/model.js +1 -1
- package/dist/foundation/release/bootstrap.d.ts +1 -3
- package/dist/foundation/release/bootstrap.js +1 -1
- package/dist/foundation/storage/control-store.js +37 -3
- package/dist/integrations/pi/components/owned-editor-ux.d.ts +55 -0
- package/dist/integrations/pi/components/owned-editor-ux.js +778 -0
- package/dist/integrations/pi/components/shell-editor-autocomplete.js +44 -6
- package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
- package/dist/integrations/pi/components/shell-footer-status.js +14 -5
- package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +3 -2
- package/dist/integrations/pi/components/shell-presenters-transcript.js +9 -8
- package/dist/integrations/pi/components/shell-shared-facade.d.ts +41 -7
- package/dist/integrations/pi/components/shell-shared-facade.js +3 -1
- package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
- package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.d.ts +10 -2
- package/dist/integrations/pi/components/upstream/adjacent/core/keybindings.js +36 -3
- package/dist/integrations/pi/engine/adapter.js +21 -3
- package/dist/integrations/pi/engine/session-integration.d.ts +2 -1
- package/dist/integrations/pi/engine/session-integration.js +17 -3
- package/dist/integrations/pi/session-ui/prompt-chips.d.ts +23 -0
- package/dist/integrations/pi/session-ui/prompt-chips.js +242 -0
- package/dist/integrations/pi/session-ui/route-host.d.ts +5 -0
- package/dist/integrations/pi/{owned-ui → session-ui}/session-shell-root.d.ts +34 -5
- package/dist/integrations/pi/{owned-ui → session-ui}/session-shell-root.js +294 -45
- package/dist/integrations/pi/{owned-ui → session-ui}/session-shell.d.ts +1 -1
- package/dist/integrations/pi/{owned-ui → session-ui}/session-shell.js +167 -24
- package/dist/integrations/pi/session-ui/session-viewport-controller.d.ts +39 -0
- package/dist/integrations/pi/session-ui/session-viewport-controller.js +369 -0
- package/dist/integrations/pi/session-ui/system-clipboard.d.ts +11 -0
- package/dist/integrations/pi/session-ui/system-clipboard.js +101 -0
- package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -1
- package/dist/integrations/pi/tui-runtime/adapter.js +51 -2
- package/dist/integrations/pi/tui-runtime/contracts.d.ts +4 -6
- package/dist/native/darwin-arm64/manifest.json +1 -1
- package/dist/native/linux-x64/manifest.json +1 -1
- package/dist/native/win32-x64/manifest.json +3 -3
- package/dist/native/win32-x64/process-guardian.exe +0 -0
- package/dist/product-identity.d.ts +2 -2
- package/dist/product-identity.js +3 -4
- package/dist/product-identity.json +3 -5
- package/dist/ui/apps/contracts.d.ts +23 -1
- package/dist/ui/apps/host.js +9 -1
- package/dist/ui/components/index.d.ts +3 -0
- package/dist/ui/components/index.js +3 -0
- package/dist/ui/components/mouse.d.ts +10 -0
- package/dist/ui/components/mouse.js +23 -0
- package/dist/ui/components/prompt-row.d.ts +14 -0
- package/dist/ui/components/prompt-row.js +20 -0
- package/dist/ui/components/scrollbar.d.ts +26 -0
- package/dist/ui/components/scrollbar.js +35 -0
- package/dist/ui/components/spans.d.ts +21 -0
- package/dist/ui/components/spans.js +178 -0
- package/dist/ui/components/submitted-prompt.d.ts +23 -0
- package/dist/ui/components/submitted-prompt.js +50 -0
- package/dist/ui/components/text-selection.d.ts +53 -0
- package/dist/ui/components/text-selection.js +168 -0
- package/dist/ui/components/text.d.ts +14 -0
- package/dist/ui/components/text.js +40 -0
- package/dist/ui/components/transcript-viewport.d.ts +104 -0
- package/dist/ui/components/transcript-viewport.js +381 -0
- package/dist/ui/settings/declarations.d.ts +8 -1
- package/dist/ui/settings/declarations.js +33 -5
- package/dist/ui/settings/migrations.d.ts +1 -1
- package/dist/ui/settings/migrations.js +21 -2
- package/dist/ui/settings/sections.js +15 -8
- package/dist/ui/settings/session.d.ts +2 -0
- package/dist/ui/settings/session.js +7 -5
- package/docs/architecture/boundaries.md +3 -3
- package/docs/architecture/project-structure.md +2 -2
- package/docs/architecture/resource-and-data-policy.md +1 -1
- package/docs/architecture/toolchain.md +5 -5
- package/docs/architecture/ui-reference-provenance.md +11 -2
- package/docs/features/launch-profiles.md +7 -14
- package/docs/manual-launch-instance-acceptance.md +12 -35
- package/docs/manual-owned-ui-checkpoint.md +2 -3
- package/docs/manual-pi-boundary-candidate.md +4 -5
- package/package.json +4 -2
- package/dist/features/launch/profiles.d.ts +0 -12
- package/dist/features/launch/profiles.js +0 -26
- package/dist/integrations/pi/owned-ui/route-host.d.ts +0 -29
- /package/dist/integrations/pi/{owned-ui → session-ui}/index.d.ts +0 -0
- /package/dist/integrations/pi/{owned-ui → session-ui}/index.js +0 -0
- /package/dist/integrations/pi/{owned-ui → session-ui}/route-host.js +0 -0
|
@@ -81,9 +81,9 @@ These paths are A1 control and release state, not Pi profile roots. All are over
|
|
|
81
81
|
|
|
82
82
|
| Purpose | Override | Windows default | Unix default |
|
|
83
83
|
|---|---|---|---|
|
|
84
|
-
| Config | `A1_CONFIG_DIR` | `%APPDATA%\\
|
|
85
|
-
| Durable data | `A1_DATA_DIR` | `%LOCALAPPDATA%\\
|
|
86
|
-
| Runtime | `A1_RUNTIME_DIR` | `%LOCALAPPDATA%\\
|
|
84
|
+
| Config | `A1_CONFIG_DIR` | `%APPDATA%\\a1` | `$XDG_CONFIG_HOME/a1` or `~/.config/a1` |
|
|
85
|
+
| Durable data | `A1_DATA_DIR` | `%LOCALAPPDATA%\\a1` | `$XDG_DATA_HOME/a1` or `~/.local/share/a1` |
|
|
86
|
+
| Runtime | `A1_RUNTIME_DIR` | `%LOCALAPPDATA%\\a1\\runtime` | `$XDG_RUNTIME_DIR/a1` or `<data>/runtime` |
|
|
87
87
|
| Database | `A1_DATABASE_PATH` | `<data>/control.sqlite3` | `<data>/control.sqlite3` |
|
|
88
88
|
| Endpoint | `A1_ENDPOINT` | runtime-scoped `a1-*` named pipe | `<runtime>/supervisor.sock` |
|
|
89
89
|
|
|
@@ -91,8 +91,8 @@ These paths are A1 control and release state, not Pi profile roots. All are over
|
|
|
91
91
|
|
|
92
92
|
A1 does not read or migrate legacy `ADDONE_*` variables, `AddOne`/`addone` control-state directories, release manifests, database schemas, endpoint records, or protocol frames. Remove obsolete control state only after stopping old processes: `%APPDATA%\\AddOne` and `%LOCALAPPDATA%\\AddOne` on Windows, or the former `addone` directories under XDG config, data, and runtime roots on Unix. This cleanup is manual and never imports data into A1.
|
|
93
93
|
|
|
94
|
-
Do **not** remove `~/.a1/agent
|
|
94
|
+
Do **not** remove `~/.a1/agent`; it is A1's current Pi profile root. `~/.pi/agent` remains the vanilla Pi profile.
|
|
95
95
|
|
|
96
96
|
The obsolete npm package `@timurproko/addone` is deprecated with the registry message `This package is obsolete. Use @timurproko/a1 instead.` It is not a current identity, compatibility channel, or rollback source. Whole-package unpublication was rejected by npm policy; any later removal is owner-controlled registry administration and does not change the A1 runtime contract.
|
|
97
97
|
|
|
98
|
-
The launch-profile feature separately owns
|
|
98
|
+
The launch-profile feature separately owns A1's `~/.a1/agent` root and preserves ordinary Pi resolution through `~/.pi/agent`.
|
|
@@ -19,9 +19,12 @@ its own `core` facade layer; A1 is a product, so the port adapts imports and kee
|
|
|
19
19
|
| A1 module | Reference unit | Adaptation |
|
|
20
20
|
| --- | --- | --- |
|
|
21
21
|
| `ui-components/line-input.ts` — word motion and word delete | `core/panes/line-input.ts` | `wordLeft`/`wordRight` and their key bindings ported verbatim, including deciding a word delete before a plain one because a raw backspace byte is ctrl+backspace on Windows Terminal. |
|
|
22
|
-
| `ui-components/spans.ts` —
|
|
22
|
+
| `ui-components/spans.ts` — span painting | `core/presentation/spans.ts` | Uses A1 `displayWidth`; hyperlink/style replay and background-only selection painting preserve each source foreground plus bold, underline, links, and other attributes. |
|
|
23
|
+
| `ui-components/text-selection.ts` | `core/panes/text-selection.ts` and `ui/agent-view/content-selection.ts` | Keeps LMB drag, double-click word, triple-click line, grapheme-aware extraction, and prompt decoration exclusion. Multiline selection uses native terminal geometry (first-row tail, complete middle rows, last-row head); triple-click paints the full row while copied text remains semantic content. |
|
|
23
24
|
| `ui-components/scrollbar.ts` — geometry | `core/presentation/scrollbar.ts` — `scrollbarGeom` | Same formula; A1 names the fields and returns null rather than undefined. |
|
|
24
|
-
| `ui-components/scrollbar.ts` — rails | `core/presentation/scrollbar.ts` — zone and hover state | Rail identity kept; A1 holds state in an instance rather than a module global. |
|
|
25
|
+
| `ui-components/scrollbar.ts` — rails | `core/presentation/scrollbar.ts` — zone, policy, and hover/drag state | Rail identity, hover reservation, activity linger, visual weights, drag, and track paging kept; A1 holds state in an instance rather than a module global, while the session shell applies profile-local normal/fast/high wheel and selection-edge speed. |
|
|
26
|
+
| `ui-components/submitted-prompt.ts` | `core/presentation/user-bar.ts` | Keeps the compact `❯ ` prefix, continuation indentation, timestamp reservation, and right alignment. A1 fixes the declared format to local 24-hour `HH:mm` and uses the engine's source timestamp. |
|
|
27
|
+
| `ui-components/transcript-viewport.ts` | `ui/agent-view/render.ts`, `scroll.ts`, `state.ts`, and `feature.ts` | Keeps follow/detach transitions, the floating bottom control, semantic sticky prompt behavior, and the session rail's intentional one-row top inset. New-message counts follow the reference's exact completed-assistant-message boundary, exclude tool results, and reset when input or a fresh agent run resumes follow mode. `Working` stays pinned only while all content fits; on overflow it joins the scrollable document tail exactly like the reference. A1 receives owned rows, prompt anchors, and semantic lifecycle events instead of inspecting Pi children. |
|
|
25
28
|
| `ui-components/list-block.ts` — block navigation | `settings/impl.ts` — `blockJumpTarget`, `blockRowSpan`, `bottomBlockTarget` | Row type generalized from settings rows to a grouped list; targets and edge behavior identical. |
|
|
26
29
|
| `ui-components/list-block.ts` — sticky scroll | `settings/impl.ts` — `stickyHeaderGroup`, `topPaddingRows`, `visibleRowCountAt`, `clampScrollForView` | Same reservation arithmetic and two-pass reveal. |
|
|
27
30
|
| `ui-components/mouse.ts` | `core/panes/sgr-mouse.ts` | Same SGR decoding and per-call regex reset; A1 emits its own event shape. |
|
|
@@ -33,6 +36,7 @@ its own `core` facade layer; A1 is a product, so the port adapts imports and kee
|
|
|
33
36
|
| A1 module | Pinned Pi source | Adaptation |
|
|
34
37
|
| --- | --- | --- |
|
|
35
38
|
| `pi-engine-adapter/settings-integration.ts` — `SETTING_LABELS` | pinned Pi settings selector | Labels and descriptions transcribed so an owned screen reads as the vanilla route words it. Ids are mapped from the selector kebab-case to the exposed camelCase keys. |
|
|
39
|
+
| `pi-engine/session-integration.ts` and `pi-components/shell-footer-status.ts` — steering queue | pinned Pi interactive mode `onSubmit` and `updatePendingMessagesDisplay` | Steering/follow-up uses `prompt(..., { streamingBehavior })`, allowing Pi to emit the accepted user row, while remaining steering rows preserve Pi's opening spacer, dim `Steering:` labels, dequeue hint, and order before `Working`. |
|
|
36
40
|
|
|
37
41
|
## Deliberate differences
|
|
38
42
|
|
|
@@ -43,6 +47,11 @@ its own `core` facade layer; A1 is a product, so the port adapts imports and kee
|
|
|
43
47
|
tests.
|
|
44
48
|
- **Settings content.** The reference aggregates per-extension settings files; A1 has one
|
|
45
49
|
section for its own settings and one for the agent's, read through the engine settings port.
|
|
50
|
+
- **No viewport prototype or child-tree patches.** `ui/agent-view/user-prompt.ts` and the
|
|
51
|
+
private-child traversal in `ui/agent-view/render.ts` were analyzed only for behavior. The
|
|
52
|
+
destination renders source timestamps through an owned transcript adapter and derives sticky
|
|
53
|
+
anchors while assembling semantic transcript blocks; it never replaces a Pi prototype or
|
|
54
|
+
reads a Pi component's private children.
|
|
46
55
|
|
|
47
56
|
## Keeping this honest
|
|
48
57
|
|
|
@@ -6,15 +6,14 @@
|
|
|
6
6
|
|---|---|---|
|
|
7
7
|
| `a1` | A1-owned Pi-compatible UI | `~/.a1/agent` |
|
|
8
8
|
| `a1 pi` | Pi-compatible comparison surface using the ordinary Pi profile | ordinary `~/.pi/agent` |
|
|
9
|
-
| `a1 sandbox` | Pi-compatible surface using an isolated profile for experiments | `~/.a1/sandbox` |
|
|
10
9
|
|
|
11
|
-
`a1 pi`
|
|
10
|
+
`a1 pi` is a development instrument for comparing A1 against pinned Pi. Prerelease builds — what `a1 update:develop` or `a1 update:<number>` installs — expose it. A release build does not recognize the launch form. Repository development can run the comparison directly with `npm start:pi`.
|
|
12
11
|
|
|
13
12
|
There is no `a1 agent` command. The former `a1 ui` subcommand is removed. Bare `a1` is the owned agent product surface and remains the entry point when multi-agent UX is introduced.
|
|
14
13
|
|
|
15
14
|
## First launch
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
A1 creates only its selected profile root and empty `extensions`, `skills`, `prompts`, and `themes` directories. Existing content is preserved. A1 does not copy, link, merge, or delete settings, credentials, sessions, packages, trust decisions, or resources from another profile.
|
|
18
17
|
|
|
19
18
|
Pi owns files within the selected root. Common locations are:
|
|
20
19
|
|
|
@@ -33,24 +32,18 @@ Run Pi’s normal `/login` independently in each profile that needs stored authe
|
|
|
33
32
|
|
|
34
33
|
## Pi comparison profile
|
|
35
34
|
|
|
36
|
-
`a1 pi` uses the same A1-owned rendering and input pipeline as bare `a1`, but withholds A1-specific screens and removes A1’s Pi configuration-root override. The pinned Pi engine therefore uses its normal `~/.pi/agent` settings, authentication, sessions, resources, packages, and trust decisions.
|
|
37
|
-
|
|
38
|
-
## Sandbox profile
|
|
39
|
-
|
|
40
|
-
`a1 sandbox` uses the shared owned rendering pipeline with A1-specific screens withheld. It reads `~/.a1/sandbox` and applies Pi's supported one-run no-approval trust policy. Project-local executable settings and resources are ignored for that run; sandbox-owned resources still load from the selected user profile.
|
|
41
|
-
|
|
42
|
-
“Sandbox” means Pi profile and executable-resource isolation. It is **not** an operating-system security boundary. It does not restrict filesystem access, processes, network access, environment credentials, shell tools, or commands executed by Pi.
|
|
35
|
+
`a1 pi` uses the same A1-owned rendering and input pipeline as bare `a1`, but withholds A1-specific screens and removes A1’s Pi configuration-root override. The pinned Pi engine therefore uses its normal `~/.pi/agent` settings, authentication, sessions, resources, packages, and trust decisions. Running the standalone `pi` command remains the independent upstream reference.
|
|
43
36
|
|
|
44
37
|
## Terminal behavior
|
|
45
38
|
|
|
46
|
-
|
|
39
|
+
Both launch forms run the A1-owned full-viewport TUI over pinned Pi engine, component, and terminal APIs. A1 owns composition, input routing, modal focus, selection behavior, scrolling, and restoration without inserting a PTY or terminal-byte relay. Bare `a1` enables A1-owned screens; `a1 pi` uses the same pipeline with those screens withheld.
|
|
47
40
|
|
|
48
41
|
## Concurrent instance lifecycle
|
|
49
42
|
|
|
50
|
-
Every
|
|
43
|
+
Every invocation receives a unique non-detachable launch instance. There is no product-wide foreground slot: the same profile or both profiles may run concurrently in separate terminals. Profile files remain shared according to the selected profile root, while process ownership, lifecycle outcome, and cleanup remain scoped to the command that launched them.
|
|
51
44
|
|
|
52
|
-
Normal root exit, terminal closure, guardian failure, and verified update shutdown all close the instance's remaining process tree within bounded graceful and forced deadlines. Closing one instance never closes another. A control supervisor may remain idle afterward, but closed instances leave no UI, Pi, extension daemon, agent worker, tool, or descendant process.
|
|
45
|
+
Normal root exit, terminal closure, guardian failure, and verified update shutdown all close the instance's remaining process tree within bounded graceful and forced deadlines. Closing one instance never closes another. A control supervisor may remain idle afterward, but closed instances leave no UI, Pi, extension daemon, agent worker, tool, or descendant process.
|
|
53
46
|
|
|
54
47
|
## Recovery and comparison
|
|
55
48
|
|
|
56
|
-
If bare `a1` cannot start or a UI workflow diverges, run `a1 pi` from the same working directory and compare the behavior. Profile data is intentionally separate, so authentication or settings may need to be configured independently. Use `a1 version` to record the installed A1 release before reporting a difference.
|
|
49
|
+
If bare `a1` cannot start or a UI workflow diverges, run `a1 pi` from the same working directory and compare the behavior. Profile data is intentionally separate, so authentication or settings may need to be configured independently. Use `a1 version` to record the installed A1 release before reporting a difference.
|
|
@@ -4,63 +4,40 @@ Run this checklist only against a packaged candidate on a user-controlled termin
|
|
|
4
4
|
|
|
5
5
|
## Artifact identity
|
|
6
6
|
|
|
7
|
-
Record
|
|
8
|
-
|
|
9
|
-
```text
|
|
10
|
-
A1 release ID:
|
|
11
|
-
A1 package version:
|
|
12
|
-
Source commit:
|
|
13
|
-
Candidate tarball SHA-256/integrity:
|
|
14
|
-
Process guardian target: win32-x64
|
|
15
|
-
Process guardian crate version:
|
|
16
|
-
Process guardian protocol version:
|
|
17
|
-
Process guardian SHA-256:
|
|
18
|
-
Process guardian signature/attestation status:
|
|
19
|
-
Machine/Windows/terminal versions:
|
|
20
|
-
Tester or worker attestation:
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The process guardian values must match `dist/native/win32-x64/manifest.json` inside the exact installed candidate. Stop if the file is missing, mismatched, altered, or reports an unsupported capability.
|
|
7
|
+
Record the A1 release ID, package version, source commit, candidate integrity, process-guardian target/version/protocol/integrity, platform and terminal versions, and tester attestation. The guardian values must match `dist/native/win32-x64/manifest.json` inside the exact installed candidate.
|
|
24
8
|
|
|
25
9
|
## Concurrent launch matrix
|
|
26
10
|
|
|
27
|
-
Open four independent terminal tabs
|
|
11
|
+
Open four independent terminal tabs:
|
|
28
12
|
|
|
29
13
|
```text
|
|
30
14
|
Terminal 1: a1
|
|
31
15
|
Terminal 2: a1
|
|
32
16
|
Terminal 3: a1 pi
|
|
33
|
-
Terminal 4: a1
|
|
17
|
+
Terminal 4: a1 pi
|
|
34
18
|
```
|
|
35
19
|
|
|
36
|
-
Confirm all four become usable without a global foreground-lease error
|
|
20
|
+
Confirm all four become usable without a global foreground-lease error and have distinct launch-instance IDs.
|
|
37
21
|
|
|
38
22
|
## Isolated closure
|
|
39
23
|
|
|
40
|
-
1. Exit Terminal 3 normally. Confirm only its
|
|
41
|
-
2. Close
|
|
42
|
-
3. Exit Terminal 1
|
|
43
|
-
4. Force the Terminal 2 launch guardian to fail on the isolated worker. Confirm
|
|
24
|
+
1. Exit Terminal 3 normally. Confirm only its Pi comparison tree exits.
|
|
25
|
+
2. Close Terminal 4 without exiting first. Confirm its complete process tree disappears while both bare-A1 terminals remain usable.
|
|
26
|
+
3. Exit Terminal 1 after causing a fixture extension to create a child and grandchild. Confirm the complete tree disappears and Terminal 2 remains usable.
|
|
27
|
+
4. Force the Terminal 2 launch guardian to fail on the isolated worker. Confirm containment removes its root and descendants and leaves unrelated fixture processes alive.
|
|
44
28
|
|
|
45
|
-
Record root, child, and grandchild native identities before each close and the observed terminal outcome afterward. Do not substitute manual PID termination for
|
|
29
|
+
Record root, child, and grandchild native identities before each close and the observed terminal outcome afterward. Do not substitute manual PID termination for failed cleanup.
|
|
46
30
|
|
|
47
31
|
## Stale-state recovery
|
|
48
32
|
|
|
49
|
-
Using isolated control directories, install a version-4 fixture database containing one requested or active legacy foreground lease whose former PID is dead. Run `a1
|
|
33
|
+
Using isolated control directories, install a version-4 fixture database containing one requested or active legacy foreground lease whose former PID is dead. Run bare `a1` and confirm the invocation migrates the row to historical interrupted state and launches normally.
|
|
50
34
|
|
|
51
35
|
Repeat with an ownership-uncertain fixture process. Confirm a new independent launch still starts and the uncertain unrelated process is not terminated.
|
|
52
36
|
|
|
53
37
|
## Update fan-out
|
|
54
38
|
|
|
55
|
-
With at least three mixed-profile instances active, run the candidate's update-shutdown fixture. Confirm every instance receives one stop intent, each complete process tree closes, and cohort replacement occurs only after all verified terminal outcomes.
|
|
39
|
+
With at least three mixed-profile instances active, run the candidate's update-shutdown fixture. Confirm every instance receives one stop intent, each complete process tree closes, and cohort replacement occurs only after all verified terminal outcomes.
|
|
56
40
|
|
|
57
41
|
## Verdict
|
|
58
42
|
|
|
59
|
-
Record
|
|
60
|
-
|
|
61
|
-
```text
|
|
62
|
-
ACCEPTED — exact package and guardian digests above passed every scenario
|
|
63
|
-
REJECTED — include failed step, observed process identities, outcomes, and diagnostics
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Acceptance applies only to the exact package and process-guardian bytes recorded above. It does not certify macOS, Linux, composed terminals, detached agents, or an operating-system security sandbox.
|
|
43
|
+
Record either exact-artifact acceptance or rejection with the failed step, process identities, outcomes, and diagnostics. Acceptance applies only to the recorded package and process-guardian bytes.
|
|
@@ -28,10 +28,9 @@ Run each installed launch form yourself:
|
|
|
28
28
|
```powershell
|
|
29
29
|
& ".artifacts/manual-owned-ui/install/node_modules/.bin/a1.cmd"
|
|
30
30
|
& ".artifacts/manual-owned-ui/install/node_modules/.bin/a1.cmd" pi
|
|
31
|
-
& ".artifacts/manual-owned-ui/install/node_modules/.bin/a1.cmd" sandbox
|
|
32
31
|
```
|
|
33
32
|
|
|
34
|
-
|
|
33
|
+
Both commands use the same A1-owned rendering and input pipeline. Bare `a1` enables A1-owned screens. `a1 pi` withholds those screens and reads the ordinary Pi profile. Confirm that files created through `/settings`, `/login`, sessions, and resource directories remain under the selected profile root.
|
|
35
34
|
|
|
36
35
|
Physical automation is not part of this repository baseline. Future certification tooling may run only on dedicated disposable workers or VMs with exclusive test desktops, never on this workstation.
|
|
37
36
|
|
|
@@ -49,4 +48,4 @@ Use the same terminal, working directory, dimensions, environment, and equivalen
|
|
|
49
48
|
|
|
50
49
|
Report failures with bare-versus-comparison behavior, platform and terminal versions, exact command, reproducibility, and optional manually captured evidence.
|
|
51
50
|
|
|
52
|
-
For recovery, use `a1 pi`; do not use the removed `a1 ui` command.
|
|
51
|
+
For recovery, use `a1 pi`; do not use the removed `a1 ui` command. Manual acceptance can authorize an exact uncertified development preview after non-desktop gates pass. It does not certify stable presentation parity or platform support.
|
|
@@ -21,12 +21,11 @@ Use the exact generated filename if wildcard expansion is unavailable.
|
|
|
21
21
|
1. **Bare owned UI:** run `& $Candidate`. Confirm startup, typing, submission, transcript streaming, selector focus, mouse/keyboard scrolling, and ordinary shutdown.
|
|
22
22
|
2. **Extension surfaces:** in bare UI use `/reload`, then exercise configured extension notification, select, confirm, input, editor, replacement custom surface, and overlay custom surface. Confirm cancellation restores editor focus.
|
|
23
23
|
3. **Vanilla oracle:** run `& $Candidate pi`. Confirm untouched Pi uses the ordinary `~/.pi/agent` profile and does not show owned-UI or workspace surfaces.
|
|
24
|
-
4. **
|
|
25
|
-
5. **
|
|
26
|
-
6. **
|
|
27
|
-
7. **Recovery:** after any owned-UI failure, run `& $Candidate pi`; confirm the vanilla oracle remains available. Restart bare UI and confirm its normal profile remains intact.
|
|
24
|
+
4. **Resize and input:** while each mode is active, narrow and widen the terminal, enter Unicode and multiline text, use history/navigation keys, and scroll in both directions.
|
|
25
|
+
5. **Shutdown:** exit normally, then repeat and use Ctrl+C during work. Confirm the parent prompt remains usable and no child remains attached.
|
|
26
|
+
6. **Recovery:** after any owned-UI failure, run `& $Candidate pi`; confirm the vanilla oracle remains available. Restart bare UI and confirm its normal profile remains intact.
|
|
28
27
|
|
|
29
|
-
Do not remove `~/.a1/agent
|
|
28
|
+
Do not remove `~/.a1/agent` or `~/.pi/agent` during this checkpoint.
|
|
30
29
|
|
|
31
30
|
## Verdict recording
|
|
32
31
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timurproko/a1",
|
|
3
|
-
"version": "0.1.8-dev.
|
|
3
|
+
"version": "0.1.8-dev.151",
|
|
4
4
|
"description": "Standalone terminal workspace for supervised native and managed agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "npm@11.13.0",
|
|
@@ -47,7 +47,6 @@
|
|
|
47
47
|
"proof:terminal-host": "node scripts/development/run-terminal-host.mjs",
|
|
48
48
|
"start": "npm run build && node scripts/development/dev-launch.mjs",
|
|
49
49
|
"start:pi": "npm run build && node scripts/development/dev-launch.mjs pi",
|
|
50
|
-
"start:sandbox": "npm run build && node scripts/development/dev-launch.mjs sandbox",
|
|
51
50
|
"prepack": "node scripts/release/prepack-gate.mjs",
|
|
52
51
|
"prepublishOnly": "npm run test:release",
|
|
53
52
|
"prepare": "npm run build",
|
|
@@ -87,5 +86,8 @@
|
|
|
87
86
|
},
|
|
88
87
|
"publishConfig": {
|
|
89
88
|
"access": "public"
|
|
89
|
+
},
|
|
90
|
+
"optionalDependencies": {
|
|
91
|
+
"@mariozechner/clipboard": "^0.3.9"
|
|
90
92
|
}
|
|
91
93
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { LaunchProfileId } from "../../foundation/lifecycle/index.js";
|
|
2
|
-
export type { LaunchProfileId } from "../../foundation/lifecycle/index.js";
|
|
3
|
-
export type ConfigurationRootPolicy = "agent-profile" | "pi-default" | "sandbox-profile";
|
|
4
|
-
export type ProjectTrustPolicy = "pi-default" | "ignore";
|
|
5
|
-
export interface LaunchProfileContract {
|
|
6
|
-
readonly id: LaunchProfileId;
|
|
7
|
-
readonly productSurface: "agent" | "vanilla-baseline" | "isolated-profile";
|
|
8
|
-
readonly configurationRootPolicy: ConfigurationRootPolicy;
|
|
9
|
-
readonly projectTrust: ProjectTrustPolicy;
|
|
10
|
-
readonly terminalCapability: "owned-ui";
|
|
11
|
-
}
|
|
12
|
-
export declare function launchProfileContract(id: LaunchProfileId): LaunchProfileContract;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const contracts = Object.freeze({
|
|
2
|
-
"a1": Object.freeze({
|
|
3
|
-
id: "a1",
|
|
4
|
-
productSurface: "agent",
|
|
5
|
-
configurationRootPolicy: "agent-profile",
|
|
6
|
-
projectTrust: "pi-default",
|
|
7
|
-
terminalCapability: "owned-ui",
|
|
8
|
-
}),
|
|
9
|
-
pi: Object.freeze({
|
|
10
|
-
id: "pi",
|
|
11
|
-
productSurface: "vanilla-baseline",
|
|
12
|
-
configurationRootPolicy: "pi-default",
|
|
13
|
-
projectTrust: "pi-default",
|
|
14
|
-
terminalCapability: "owned-ui",
|
|
15
|
-
}),
|
|
16
|
-
sandbox: Object.freeze({
|
|
17
|
-
id: "sandbox",
|
|
18
|
-
productSurface: "isolated-profile",
|
|
19
|
-
configurationRootPolicy: "sandbox-profile",
|
|
20
|
-
projectTrust: "ignore",
|
|
21
|
-
terminalCapability: "owned-ui",
|
|
22
|
-
}),
|
|
23
|
-
});
|
|
24
|
-
export function launchProfileContract(id) {
|
|
25
|
-
return contracts[id];
|
|
26
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { PaneMouseEvent } from "../../../ui/components/index.js";
|
|
2
|
-
/**
|
|
3
|
-
* The seam between the pinned shell and A1-owned screens. The shell asks whether
|
|
4
|
-
* a route is claimed, mounts whatever surface it is handed, and forwards keys to
|
|
5
|
-
* it — it never learns what an app is, and the app layer never reaches into the
|
|
6
|
-
* shell.
|
|
7
|
-
*/
|
|
8
|
-
export interface UiRouteSurface {
|
|
9
|
-
readonly id: string;
|
|
10
|
-
/** Renders exactly `height` rows of at most `width` columns. */
|
|
11
|
-
render(width: number, height: number): readonly string[];
|
|
12
|
-
/** True when the key was consumed; false leaves it to the shell. */
|
|
13
|
-
handleInput(data: string): boolean;
|
|
14
|
-
/** Mouse report in surface-local coordinates. True when consumed. */
|
|
15
|
-
handleMouse(event: PaneMouseEvent): boolean;
|
|
16
|
-
/** True once the surface has asked to be dismissed. */
|
|
17
|
-
isClosed(): boolean;
|
|
18
|
-
close(): void;
|
|
19
|
-
/** Called by the shell when the surface should repaint. */
|
|
20
|
-
onRenderRequested(listener: () => void): void;
|
|
21
|
-
/** The surface asks to leave A1 entirely, not merely to close itself. */
|
|
22
|
-
onExitRequested(listener: () => void): void;
|
|
23
|
-
}
|
|
24
|
-
export interface UiRouteHost {
|
|
25
|
-
/** True when a declared A1-owned surface claims this route. */
|
|
26
|
-
claims(route: string): boolean;
|
|
27
|
-
/** Opens the route's surface, or null when it could not be presented. */
|
|
28
|
-
open(route: string): UiRouteSurface | null;
|
|
29
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|