@timurproko/a1 0.1.8-dev.137 → 0.1.8-dev.139

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.
Files changed (82) hide show
  1. package/README.md +2 -4
  2. package/dist/cli/capabilities.d.ts +2 -11
  3. package/dist/cli/capabilities.js +1 -1
  4. package/dist/cli/dispatch.js +3 -6
  5. package/dist/composition/owned-ui.js +19 -1
  6. package/dist/contracts/owned-ui/model.d.ts +21 -0
  7. package/dist/contracts/owned-ui/validation.js +3 -0
  8. package/dist/features/launch/development-launch.js +11 -3
  9. package/dist/features/launch/index.d.ts +0 -1
  10. package/dist/features/launch/index.js +0 -1
  11. package/dist/features/launch/intent.d.ts +3 -2
  12. package/dist/features/launch/intent.js +1 -2
  13. package/dist/features/launch/prepare-launch.d.ts +0 -2
  14. package/dist/features/launch/prepare-launch.js +2 -9
  15. package/dist/features/launch/profile-paths.d.ts +1 -2
  16. package/dist/features/launch/profile-paths.js +2 -8
  17. package/dist/features/launch/runtime-selection.d.ts +2 -5
  18. package/dist/features/owned-ui/settings-app.js +36 -13
  19. package/dist/foundation/lifecycle/model.d.ts +1 -1
  20. package/dist/foundation/lifecycle/model.js +1 -1
  21. package/dist/foundation/release/bootstrap.d.ts +1 -3
  22. package/dist/foundation/release/bootstrap.js +1 -1
  23. package/dist/foundation/storage/control-store.js +37 -3
  24. package/dist/integrations/pi/components/shell-footer-status.d.ts +1 -1
  25. package/dist/integrations/pi/components/shell-footer-status.js +14 -5
  26. package/dist/integrations/pi/components/shell-presenters-transcript.d.ts +3 -2
  27. package/dist/integrations/pi/components/shell-presenters-transcript.js +9 -8
  28. package/dist/integrations/pi/components/submitted-prompt-adapter.d.ts +13 -0
  29. package/dist/integrations/pi/components/submitted-prompt-adapter.js +27 -0
  30. package/dist/integrations/pi/engine/adapter.js +16 -2
  31. package/dist/integrations/pi/engine/session-integration.js +5 -2
  32. package/dist/integrations/pi/owned-ui/session-shell-root.d.ts +17 -2
  33. package/dist/integrations/pi/owned-ui/session-shell-root.js +451 -42
  34. package/dist/integrations/pi/owned-ui/session-shell.js +116 -13
  35. package/dist/integrations/pi/tui-runtime/adapter.d.ts +2 -1
  36. package/dist/integrations/pi/tui-runtime/adapter.js +51 -2
  37. package/dist/integrations/pi/tui-runtime/contracts.d.ts +2 -0
  38. package/dist/native/darwin-arm64/manifest.json +1 -1
  39. package/dist/native/linux-x64/manifest.json +3 -3
  40. package/dist/native/linux-x64/process-guardian +0 -0
  41. package/dist/native/win32-x64/manifest.json +2 -2
  42. package/dist/native/win32-x64/process-guardian.exe +0 -0
  43. package/dist/product-identity.d.ts +2 -2
  44. package/dist/product-identity.js +3 -4
  45. package/dist/product-identity.json +3 -5
  46. package/dist/ui/components/index.d.ts +3 -0
  47. package/dist/ui/components/index.js +3 -0
  48. package/dist/ui/components/mouse.d.ts +10 -0
  49. package/dist/ui/components/mouse.js +23 -0
  50. package/dist/ui/components/prompt-row.d.ts +14 -0
  51. package/dist/ui/components/prompt-row.js +20 -0
  52. package/dist/ui/components/scrollbar.d.ts +26 -0
  53. package/dist/ui/components/scrollbar.js +35 -0
  54. package/dist/ui/components/spans.d.ts +6 -0
  55. package/dist/ui/components/spans.js +36 -0
  56. package/dist/ui/components/submitted-prompt.d.ts +23 -0
  57. package/dist/ui/components/submitted-prompt.js +50 -0
  58. package/dist/ui/components/text-selection.d.ts +53 -0
  59. package/dist/ui/components/text-selection.js +168 -0
  60. package/dist/ui/components/text.d.ts +14 -0
  61. package/dist/ui/components/text.js +40 -0
  62. package/dist/ui/components/transcript-viewport.d.ts +98 -0
  63. package/dist/ui/components/transcript-viewport.js +353 -0
  64. package/dist/ui/settings/declarations.d.ts +8 -1
  65. package/dist/ui/settings/declarations.js +33 -5
  66. package/dist/ui/settings/migrations.d.ts +1 -1
  67. package/dist/ui/settings/migrations.js +12 -2
  68. package/dist/ui/settings/sections.js +15 -8
  69. package/dist/ui/settings/session.d.ts +2 -0
  70. package/dist/ui/settings/session.js +7 -5
  71. package/docs/architecture/boundaries.md +2 -2
  72. package/docs/architecture/project-structure.md +1 -1
  73. package/docs/architecture/resource-and-data-policy.md +1 -1
  74. package/docs/architecture/toolchain.md +5 -5
  75. package/docs/architecture/ui-reference-provenance.md +11 -2
  76. package/docs/features/launch-profiles.md +7 -14
  77. package/docs/manual-launch-instance-acceptance.md +12 -35
  78. package/docs/manual-owned-ui-checkpoint.md +2 -3
  79. package/docs/manual-pi-boundary-candidate.md +4 -5
  80. package/package.json +1 -2
  81. package/dist/features/launch/profiles.d.ts +0 -12
  82. package/dist/features/launch/profiles.js +0 -26
@@ -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` — `overlaySpan` | `core/presentation/spans.ts` | Uses A1 `displayWidth`; hyperlink and style replay kept verbatim. |
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` and `a1 sandbox` are development instruments: one compares A1 against pinned Pi, the other tries resources against an isolated profile. Prerelease builds — what `a1 update:develop` or `a1 update:<number>` installs — expose them. A release build does not, and does not recognize the words: what it exposes is bare `a1` plus the maintenance and package commands. Working in this repository is unaffected, because `npm start:pi` and `npm run start:sandbox` prepare the profile and launch directly rather than through the command line.
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
- For A1-owned profiles, A1 creates only the 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.
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. This is the comparison and recovery profile when diagnosing the product surface; running the standalone `pi` command remains the independent upstream reference.
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
- Every profile runs 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` and `a1 sandbox` use the same pipeline with those screens withheld. Structured tabs and A1-specific visual customization are not enabled.
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 `a1`, `a1 pi`, and `a1 sandbox` invocation receives a unique non-detachable launch instance. There is no product-wide foreground slot: the same profile or any mixture of 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.
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. Ordinary recovery never asks users to kill a PID or delete the control database.
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. `a1 sandbox` is for isolated profile experiments, not recovery from the owned UI and not a security boundary.
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 before testing:
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 and launch:
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 sandbox
17
+ Terminal 4: a1 pi
34
18
  ```
35
19
 
36
- Confirm all four become usable without a global foreground-lease error. Record each launch-instance ID from supervisor metadata and verify all four IDs are distinct.
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 vanilla Pi tree exits; Terminals 1, 2, and 4 remain usable.
41
- 2. Close the Terminal 4 tab/window without exiting Pi first. Confirm its sandbox Pi, extension daemons, agent workers, tools, and descendants disappear within the bounded deadline while both bare-A1 terminals remain usable.
42
- 3. Exit Terminal 1 normally after causing a fixture extension to create a child and grandchild. Confirm the complete tree disappears and Terminal 2 remains usable.
43
- 4. Force the Terminal 2 launch guardian to fail on the isolated worker. Confirm Job Object kill-on-close removes its root and descendants and leaves unrelated fixture processes alive.
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 a failed cleanup.
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 sandbox` once. Confirm that the same invocation migrates the row to historical interrupted state and launches normally without restarting the supervisor, deleting state, or discovering a PID.
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. A delayed or uncertain instance must prevent unsafe replacement without causing another instance to be reported idle prematurely.
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 one of:
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
- All three 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. `a1 sandbox` also withholds them and reads the isolated sandbox profile. Confirm that files created through `/settings`, `/login`, sessions, and resource directories remain under the selected profile root.
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. `a1 sandbox` remains profile isolation rather than a security boundary. Manual acceptance can authorize an exact uncertified development preview after non-desktop gates pass. It does not certify stable presentation parity or platform support.
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. **Isolated profile:** run `& $Candidate sandbox`. Confirm Pi uses `~/.a1/sandbox` and starts with project approval disabled for that run.
25
- 5. **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.
26
- 6. **Shutdown:** exit normally, then repeat and use Ctrl+C during work. Confirm the parent prompt remains usable and no child remains attached.
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`, `~/.pi/agent`, or `~/.a1/sandbox` during this checkpoint.
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.137",
3
+ "version": "0.1.8-dev.139",
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",
@@ -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
- }