agents-can-communicate 0.8.5 → 0.9.0

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 (133) hide show
  1. package/README.md +11 -7
  2. package/bin/entrypoints/acc-antigravity-relay.mjs +2 -4
  3. package/bin/entrypoints/acc-hook.mjs +33 -19
  4. package/bin/entrypoints/hook-output.mjs +14 -5
  5. package/docs/ADAPTER_AUTHORING.md +29 -0
  6. package/docs/CAPABILITIES.md +7 -6
  7. package/docs/CLI.md +5 -0
  8. package/docs/CONFIGURATION.md +15 -10
  9. package/docs/DESIGN_DECISIONS.md +0 -2
  10. package/docs/GETTING_STARTED.md +39 -6
  11. package/docs/HOW_IT_WORKS.md +13 -8
  12. package/docs/SECURITY_MODEL.md +26 -5
  13. package/docs/TROUBLESHOOTING.md +63 -8
  14. package/docs/UPGRADING.md +33 -5
  15. package/node_modules/@agents-can-communicate/adapter-antigravity/certification.json +78 -0
  16. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/certification-provenance.json +111 -0
  17. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-desktop-2.19.1-product-evidence.json +156 -0
  18. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/delivery/antigravity-desktop-2.19.1-product.json +25 -0
  19. package/node_modules/@agents-can-communicate/adapter-antigravity/fixtures/desktop-2.19.1.json +141 -0
  20. package/node_modules/@agents-can-communicate/adapter-antigravity/package.json +4 -1
  21. package/node_modules/@agents-can-communicate/adapter-antigravity/plugin/plugin.json +1 -1
  22. package/node_modules/@agents-can-communicate/adapter-antigravity/src/adapter.mjs +13 -2
  23. package/node_modules/@agents-can-communicate/adapter-antigravity/src/agentapi.mjs +7 -5
  24. package/node_modules/@agents-can-communicate/adapter-antigravity/src/allow-rule.mjs +98 -17
  25. package/node_modules/@agents-can-communicate/adapter-antigravity/src/client-process.mjs +64 -0
  26. package/node_modules/@agents-can-communicate/adapter-antigravity/src/desktop-allow-rule.mjs +140 -0
  27. package/node_modules/@agents-can-communicate/adapter-antigravity/src/desktop-delivery.mjs +110 -0
  28. package/node_modules/@agents-can-communicate/adapter-antigravity/src/desktop-endpoint.mjs +203 -0
  29. package/node_modules/@agents-can-communicate/adapter-antigravity/src/install.mjs +61 -30
  30. package/node_modules/@agents-can-communicate/adapter-antigravity/src/native-delivery.mjs +61 -24
  31. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-endpoint.mjs +30 -20
  32. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay-start.mjs +2 -1
  33. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relay.mjs +20 -12
  34. package/node_modules/@agents-can-communicate/adapter-antigravity/src/relays.mjs +18 -4
  35. package/node_modules/@agents-can-communicate/adapter-claude-code/package.json +1 -1
  36. package/node_modules/@agents-can-communicate/adapter-claude-code/src/adapter.mjs +6 -0
  37. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-delivery.mjs +50 -37
  38. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-endpoint.mjs +44 -31
  39. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-registry.mjs +99 -14
  40. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-settings.mjs +3 -7
  41. package/node_modules/@agents-can-communicate/adapter-claude-code/src/inbox-socket-directories.mjs +6 -4
  42. package/node_modules/@agents-can-communicate/adapter-claude-code/src/install.mjs +32 -7
  43. package/node_modules/@agents-can-communicate/adapter-codex/package.json +1 -1
  44. package/node_modules/@agents-can-communicate/adapter-codex/src/app-server-client.mjs +68 -3
  45. package/node_modules/@agents-can-communicate/adapter-codex/src/daemon-layouts.mjs +13 -0
  46. package/node_modules/@agents-can-communicate/adapter-codex/src/embedded-host.mjs +42 -11
  47. package/node_modules/@agents-can-communicate/adapter-codex/src/install.mjs +18 -9
  48. package/node_modules/@agents-can-communicate/adapter-codex/src/maintenance-host.mjs +68 -27
  49. package/node_modules/@agents-can-communicate/adapter-codex/src/native-delivery.mjs +36 -18
  50. package/node_modules/@agents-can-communicate/adapter-codex/src/native-endpoint.mjs +39 -16
  51. package/node_modules/@agents-can-communicate/adapter-codex/src/ws-json-rpc.mjs +4 -2
  52. package/node_modules/@agents-can-communicate/adapter-gemini-cli/extension/gemini-extension.json +1 -1
  53. package/node_modules/@agents-can-communicate/adapter-gemini-cli/package.json +1 -1
  54. package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/adapter.mjs +2 -1
  55. package/node_modules/@agents-can-communicate/adapter-gemini-cli/src/install.mjs +15 -9
  56. package/node_modules/@agents-can-communicate/adapter-grok/package.json +1 -1
  57. package/node_modules/@agents-can-communicate/adapter-grok/src/install.mjs +25 -14
  58. package/node_modules/@agents-can-communicate/adapter-kimi/package.json +1 -1
  59. package/node_modules/@agents-can-communicate/adapter-kimi/src/adapter.mjs +2 -1
  60. package/node_modules/@agents-can-communicate/adapter-kimi/src/install.mjs +15 -10
  61. package/node_modules/@agents-can-communicate/adapter-sdk/package.json +1 -1
  62. package/node_modules/@agents-can-communicate/adapter-sdk/src/capabilities.mjs +50 -5
  63. package/node_modules/@agents-can-communicate/adapter-sdk/src/certification.mjs +11 -2
  64. package/node_modules/@agents-can-communicate/adapter-sdk/src/executables.mjs +149 -0
  65. package/node_modules/@agents-can-communicate/adapter-sdk/src/hook-shim.mjs +79 -12
  66. package/node_modules/@agents-can-communicate/adapter-sdk/src/index.mjs +9 -1
  67. package/node_modules/@agents-can-communicate/adapter-sdk/src/native-delivery.mjs +65 -10
  68. package/node_modules/@agents-can-communicate/adapter-sdk/src/private-files.mjs +35 -0
  69. package/node_modules/@agents-can-communicate/adapter-sdk/src/process-table.mjs +232 -0
  70. package/node_modules/@agents-can-communicate/adapter-sdk/src/session-binding.mjs +8 -1
  71. package/node_modules/@agents-can-communicate/adapter-sdk/src/windows-command.mjs +69 -0
  72. package/node_modules/@agents-can-communicate/adapter-sdk/src/windows-process-chain.wsf +45 -0
  73. package/node_modules/@agents-can-communicate/cli/package.json +2 -1
  74. package/node_modules/@agents-can-communicate/cli/src/config-command.mjs +2 -1
  75. package/node_modules/@agents-can-communicate/cli/src/doctor-command.mjs +60 -4
  76. package/node_modules/@agents-can-communicate/cli/src/hook-support.mjs +9 -0
  77. package/node_modules/@agents-can-communicate/cli/src/hook-workspace.mjs +12 -3
  78. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/activation.mjs +3 -2
  79. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/download.mjs +12 -3
  80. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/entry.mjs +7 -5
  81. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/generation.mjs +7 -7
  82. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/launchers.mjs +8 -5
  83. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/maintenance.mjs +1 -1
  84. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/mutex.mjs +7 -6
  85. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/portable-fs.mjs +165 -0
  86. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/schedule.mjs +1 -1
  87. package/node_modules/@agents-can-communicate/cli/src/managed-runtime/state.mjs +18 -8
  88. package/node_modules/@agents-can-communicate/cli/src/native-session-diagnostics.mjs +11 -3
  89. package/node_modules/@agents-can-communicate/cli/src/platform-paths.mjs +15 -10
  90. package/node_modules/@agents-can-communicate/cli/src/runtime-paths.mjs +3 -2
  91. package/node_modules/@agents-can-communicate/cli/src/update-command.mjs +11 -1
  92. package/node_modules/@agents-can-communicate/cli/src/workspace-discovery.mjs +4 -2
  93. package/node_modules/@agents-can-communicate/core/package.json +1 -1
  94. package/node_modules/@agents-can-communicate/core/src/delivery-bindings.mjs +7 -0
  95. package/node_modules/@agents-can-communicate/core/src/materialisation.mjs +39 -1
  96. package/node_modules/@agents-can-communicate/core/src/session-opening.mjs +11 -0
  97. package/node_modules/@agents-can-communicate/core/src/sessions.mjs +8 -2
  98. package/node_modules/@agents-can-communicate/delivery-router/package.json +1 -1
  99. package/node_modules/@agents-can-communicate/hook-runner/package.json +1 -1
  100. package/node_modules/@agents-can-communicate/hook-runner/src/client-pid.mjs +65 -6
  101. package/node_modules/@agents-can-communicate/hook-runner/src/client-version.mjs +80 -0
  102. package/node_modules/@agents-can-communicate/hook-runner/src/native-attempt.mjs +1 -1
  103. package/node_modules/@agents-can-communicate/hook-runner/src/owner-context.mjs +34 -6
  104. package/node_modules/@agents-can-communicate/hook-runner/src/process-table.mjs +3 -50
  105. package/node_modules/@agents-can-communicate/hook-runner/src/runner.mjs +154 -28
  106. package/node_modules/@agents-can-communicate/installer/package.json +3 -2
  107. package/node_modules/@agents-can-communicate/installer/src/delivery-diagnostics.mjs +2 -1
  108. package/node_modules/@agents-can-communicate/installer/src/detect.mjs +13 -3
  109. package/node_modules/@agents-can-communicate/installer/src/hook-support.mjs +5 -0
  110. package/node_modules/@agents-can-communicate/installer/src/native-activation.mjs +6 -14
  111. package/node_modules/@agents-can-communicate/installer/src/plan.mjs +14 -0
  112. package/node_modules/@agents-can-communicate/mcp-server/package.json +1 -1
  113. package/node_modules/@agents-can-communicate/protocol/package.json +1 -1
  114. package/node_modules/@agents-can-communicate/protocol/src/config.mjs +6 -2
  115. package/node_modules/@agents-can-communicate/protocol/src/resources.mjs +6 -2
  116. package/node_modules/@agents-can-communicate/storage-filesystem/package.json +1 -1
  117. package/node_modules/@agents-can-communicate/storage-filesystem/src/active-journal.mjs +5 -2
  118. package/node_modules/@agents-can-communicate/storage-filesystem/src/atomic-json.mjs +41 -23
  119. package/node_modules/@agents-can-communicate/storage-filesystem/src/doomed-directory.mjs +4 -12
  120. package/node_modules/@agents-can-communicate/storage-filesystem/src/identity.mjs +7 -3
  121. package/node_modules/@agents-can-communicate/storage-filesystem/src/index.mjs +1 -0
  122. package/node_modules/@agents-can-communicate/storage-filesystem/src/journal.mjs +24 -7
  123. package/node_modules/@agents-can-communicate/storage-filesystem/src/portable-fs.mjs +165 -0
  124. package/node_modules/@agents-can-communicate/storage-filesystem/src/publication-path.mjs +8 -0
  125. package/node_modules/@agents-can-communicate/storage-filesystem/src/reclaim.mjs +26 -17
  126. package/node_modules/@agents-can-communicate/storage-filesystem/src/recovery.mjs +7 -5
  127. package/node_modules/@agents-can-communicate/storage-filesystem/src/retention.mjs +7 -16
  128. package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-directory.mjs +138 -24
  129. package/node_modules/@agents-can-communicate/storage-filesystem/src/safe-file.mjs +3 -2
  130. package/node_modules/@agents-can-communicate/storage-filesystem/src/stage-sweep.mjs +9 -6
  131. package/node_modules/@agents-can-communicate/storage-filesystem/src/store.mjs +30 -8
  132. package/node_modules/@agents-can-communicate/storage-filesystem/src/writer-mutex.mjs +102 -32
  133. package/package.json +1 -5
@@ -117,8 +117,7 @@ handoff. ACC does not restart an exited client.
117
117
  supported platform, current probe and exact session binding. Under `actionable`,
118
118
  a `note` stays queued with `delivery_disabled`.
119
119
 
120
- For Codex, use your ordinary launch command with 0.152.1 or newer on Apple Silicon
121
- macOS. Its LocalDaemon infrastructure and trusted hooks must establish
120
+ For Codex, use your ordinary launch command with 0.152.1 or newer. Its LocalDaemon infrastructure and trusted hooks must establish
122
121
  the receiver's exact thread and workspace. Embedded sessions, an absent socket,
123
122
  ambiguous recipients or failed identity checks retain durable inbox access.
124
123
  `acc doctor` reports readiness, consent and the current workspace's live channel separately.
@@ -144,6 +143,11 @@ user a notice once, a sender sees the cause beside `no live transport`, and doct
144
143
  the session line. Open a new Codex chat while the service runs; start it with
145
144
  `codex app-server daemon start` if Codex does not.
146
145
 
146
+ The Codex app (inside ChatGPT.app) runs every chat this way: each window has its own app server
147
+ and never uses the shared one (openai/codex#41014, read on 26.928). Its chats join ACC through
148
+ the same hooks and get messages at their next turn; a chat started in a terminal is the one a
149
+ peer can reach live.
150
+
147
151
  Some launch options make Codex run a chat embedded even while the service runs: `-c`/`--config`,
148
152
  `--enable`, `--disable`, `--search`, `-p`/`--profile`, `--oss`, `--strict-config`,
149
153
  `--dangerously-bypass-hook-trust` and `--no-daemon`, and also the `CODEX_EXEC_SERVER_URL`
@@ -178,8 +182,7 @@ or a connected MCP server does not by itself establish automatic delivery. `life
178
182
  manual` can also mean the current version has no certified session-end hook; it does not
179
183
  prove that no hooks ran.
180
184
 
181
- For Claude Code, use version 2.1.282 or newer on Apple Silicon macOS, and start it with
182
- your ordinary command. Each Claude Code session opens its own inbox socket. ACC reads the
185
+ For Claude Code, use version 2.1.282 or newer, and start it with your ordinary command. Each Claude Code session opens its own inbox socket. ACC reads the
183
186
  socket path from `CLAUDE_CODE_MESSAGING_SOCKET` in the hook environment. ACC then checks that
184
187
  path against Claude Code's session registry `<config>/sessions/<pid>.json`, where
185
188
  `<config>` is `CLAUDE_CONFIG_DIR` or `~/.claude`. The pid and the socket must match for the
@@ -189,8 +192,8 @@ session again, so the next ordinary prompt retries a failed binding.
189
192
  - Claude Code 2.1.224 and later open the inbox, but ACC's captured minimum is 2.1.282. An
190
193
  older version reports `below_minimum_version` and keeps next-turn delivery.
191
194
  - On native Windows, Claude Code serves its inbox on a named pipe that requires an auth
192
- line. ACC has no capture of that inbox, so Windows keeps next-turn delivery.
193
- - Linux is uncaptured for live delivery. A Linux session keeps next-turn delivery.
195
+ line. ACC sends the key Claude Code publishes for other sessions of the same user; see
196
+ [On Windows](#on-windows).
194
197
  - A wake that reached the session can still wait for your approval. See
195
198
  [the next section](#a-claude-code-session-holds-or-drops-acc-wakes).
196
199
 
@@ -340,8 +343,15 @@ Live delivery needs four things, and `acc doctor` shows each:
340
343
  - the session attached to ACC at all (see the section above);
341
344
  - the agent started the relay. While none is running, ACC's context asks up to three times
342
345
  in that conversation. A declined prompt and an ignored ask look the same, so the line can
343
- return after a decline; after the third ask it stays quiet. Run
344
- `sh "~/.gemini/config/acc/acc-relay.sh" start` to start it directly.
346
+ return after a decline; after the third ask it stays quiet. ACC's install allows that
347
+ command, so the agent starts it without an approval prompt; `acc doctor` names the rule when
348
+ it is missing. Run `sh "~/.gemini/config/acc/acc-relay.sh" start` to start it directly.
349
+
350
+ In Antigravity 2.0, the desktop app, there is no relay: ACC delivers through the app's own
351
+ language server, and `acc doctor` names such a session `Antigravity session`. A conversation is
352
+ reachable from its first turn after the app starts. The app runs no session start for a
353
+ conversation it reopens, so after a restart nothing reaches it live until someone sends it a
354
+ prompt; the message waits in its inbox until then.
345
355
 
346
356
  `acc doctor` reports how many relays are running and, per session, whether a live transport is
347
357
  active. A relay ends with its client; nothing is left running after the TUI exits or after
@@ -365,6 +375,12 @@ first ACC command. `acc doctor` prints an `Antigravity CLI inbound:` line with w
365
375
  - **The file cannot be read.** ACC leaves an invalid `settings.json` as it is. Repair it, then
366
376
  run `acc install --adapter antigravity` again.
367
377
 
378
+ Antigravity 2.0, the desktop app, runs the agent's commands in a sandbox where ACC's wrapper
379
+ cannot run, and the model then asks to run it outside the sandbox. The app decides that from
380
+ its own grants in `~/.gemini/config/config.json`, never from Antigravity CLI's settings. ACC's
381
+ install adds its rule there once the app has run, and `acc doctor` prints its state on a line
382
+ that names the desktop app. Restart the app after an install if it was open.
383
+
368
384
  ## Grok shows no injected message
369
385
 
370
386
  Grok discards UserPromptSubmit context. On the observed 1.0.24 client, run public
@@ -381,6 +397,41 @@ session becomes offline by presence rules rather than a clean end signal. The de
381
397
  status hides offline sessions; `acc status --all` intentionally retains attribution and
382
398
  checkout history.
383
399
 
400
+ ## On Windows
401
+
402
+ - **A session attaches only on its first prompt.** ACC reads the process tree through
403
+ PowerShell, and the first start after boot can take several seconds. A hook that runs out of
404
+ time continues without ACC, and the next user prompt attaches the session.
405
+ - **A hook reports `node` is not recognized.** Grok and Antigravity CLI hooks start `node` from
406
+ `PATH`. Add Node.js to the `PATH` the client sees, then restart the client.
407
+ - **Claude Code hooks do nothing.** ACC wires Claude Code's hooks in exec form, which needs
408
+ Claude Code 2.1.139 or later. Update Claude Code and run `acc install` again.
409
+ - **`acc install` refuses Antigravity CLI because of a space.** Antigravity CLI cannot run a
410
+ quoted hook path, so ACC writes the 8.3 short name of a path with a space. A volume with 8.3
411
+ names turned off has none; turn them on (`fsutil 8dot3name set C: 0`, as an administrator)
412
+ and run `acc install` again.
413
+ - **A write through Claude Code's PowerShell tool was not guarded.** The guard reads POSIX shell
414
+ commands only. Claims are advisory by default, and a write through Claude Code's Write, Edit or
415
+ Bash tool is still checked.
416
+ - **Codex is not woken on Windows.** Codex refuses to start its app-server daemon from an
417
+ elevated terminal ("start the Windows daemon from a non-elevated terminal"). Start Codex from a
418
+ terminal that is not running as administrator, and keep `CODEX_HOME` short: the daemon's socket
419
+ path has to fit 108 bytes, or Codex runs the chat on its own embedded server, which no peer can
420
+ reach.
421
+ - **Hooks run out of time on a cloud machine.** A Windows flush waits for the whole disk to
422
+ write out its cache. On a GitHub `windows-latest` runner, whose system disk is remote, a 4 KB
423
+ flush took 10-33 ms at the median and up to 1.5 s, against 0.5 ms and at most 27 ms on its
424
+ local disk. A session start flushes 5 to 16 times, so a disk like that can run a hook out of
425
+ its five seconds; the session then attaches on a later prompt. Point `ACC_DATA_HOME` at a
426
+ directory on a local disk that only your account can read, for every client, and restart
427
+ them.
428
+ - **A Claude Code session is not woken on Windows.** The wake authenticates with the key Claude
429
+ Code publishes beside its session record (`<config>\sessions\<pid>.<hash>.key`). Run
430
+ `acc doctor`: a session without that key, or whose pipe the machine no longer lists, waits for
431
+ its next turn. ACC trusts the key only in a configuration directory inside your user profile,
432
+ whose access list keeps it to your account. A session whose `CLAUDE_CONFIG_DIR` is elsewhere
433
+ reports `native_endpoint_unavailable` and also waits for its next turn.
434
+
384
435
  ## A write was blocked
385
436
 
386
437
  Exit code `5` names the overlapping claim and owner. Ask the owner or wait for release. If
@@ -408,6 +459,10 @@ confirming no needed coordination state remains.
408
459
  ACC removes only bytes that still match its install record. Anything edited by the user is
409
460
  reported and retained. Remove those leftovers manually if desired.
410
461
 
462
+ An uninstall also skips a client that the current data home did not install, and names it:
463
+ its wiring belongs to another ACC data home. Run `acc uninstall --adapter <client>` to remove
464
+ it from this one.
465
+
411
466
  Runtime state is outside the repository by design. `ACC_DATA_HOME` can relocate it, but ACC
412
467
  refuses a path inside any workspace root. Relocate the whole data directory; a symlink for
413
468
  that directory is supported. Install rejects a symlink that moves only the internal
package/docs/UPGRADING.md CHANGED
@@ -1,4 +1,4 @@
1
- # Upgrading to 0.5.0
1
+ # Upgrading
2
2
 
3
3
  ## From 0.8.x
4
4
 
@@ -20,8 +20,9 @@ a client's own settings:
20
20
  Start a new Codex session after the update; a session already open keeps its old policy.
21
21
  - **Antigravity CLI.** The install adds `command(<wrapper>)` to `permissions.allow` in
22
22
  `~/.gemini/antigravity-cli/settings.json`, and the skill calls the wrapper without quotes, so
23
- a woken session runs its ACC commands without an approval prompt. Restart `agy`: it reads
24
- the file only at startup. `acc uninstall` removes every copy of that rule.
23
+ a woken session runs its ACC commands without an approval prompt. It also adds the command
24
+ that starts the relay, so the agent starts live delivery without one. Restart `agy`: it reads
25
+ the file only at startup. `acc uninstall` removes every copy of each rule.
25
26
 
26
27
  `acc doctor` and `acc status` describe an idle session by what a message sent to it meets
27
28
  (`idle, wake on send`, `idle until next turn`, `idle, inbox only`), and each status row carries
@@ -74,6 +75,33 @@ This release adds no store event type or field.
74
75
  This release adds no store event type or field. A sender's delivery JSON may carry
75
76
  `nativeLaunchOption` beside `nativeReasonCode`.
76
77
 
78
+ 0.9.0 adds Windows and the Antigravity desktop app, and changes what `acc uninstall` removes:
79
+
80
+ - **Windows.** ACC installs and runs natively on Windows 10 and 11, with no WSL, and keeps its
81
+ state in `%LOCALAPPDATA%\acc`. Live delivery reaches Claude Code through its inbox pipe, Codex
82
+ through `codex app-server proxy`, and Antigravity CLI through ACC's relay. Codex starts its
83
+ daemon only from a terminal that is not elevated. On Windows the Antigravity install adds no
84
+ allow rule, so Antigravity CLI asks before each ACC command. See
85
+ [Windows](GETTING_STARTED.md#windows).
86
+ - **The Antigravity desktop app.** Antigravity 2.19.1 or later gets live delivery through the
87
+ app's own language server, with no relay and no command from the agent. The install adds
88
+ ACC's grant to `~/.gemini/config/config.json` when the app has created that file. If you
89
+ open the app for the first time after the update, `acc doctor` asks you to run
90
+ `acc install --adapter antigravity` once.
91
+ - **A session's version is the running client's.** `acc doctor` and `acc status` show the
92
+ version of the client that runs the session, which can differ from the `claude` or `codex`
93
+ on `PATH`.
94
+ - **A chat in the Codex app** is reported as `client_session_embedded`. The app runs each
95
+ window on its own app server, so its chats receive messages at their next turn.
96
+ - **`acc uninstall` without `--adapter` removes only what this data home installed.** A client
97
+ that another data home wired is skipped by name. `acc uninstall --adapter <client>` still
98
+ removes it.
99
+
100
+ This release adds no store event type or field, and `STORE_VERSION` stays 6. A journalled
101
+ transaction no longer writes a completion marker: 0.9.0 retires every journal entry that the
102
+ pointer does not name, and an older ACC's markers leave with their entries. 0.8.x keeps
103
+ working on a store that 0.9.0 wrote.
104
+
77
105
  ## From 0.7.x
78
106
 
79
107
  Claude Code live delivery wakes each session through the inbox socket that Claude Code opens
@@ -105,10 +133,10 @@ recorded policy. ACC ignores `ACC_NATIVE_DELIVERY_POLICY`, `ACC_BYPASS` and
105
133
  A Claude Code session that started through the old shim keeps its Channel until it exits.
106
134
  Its next turn binds the inbox. Start new sessions with your ordinary `claude` command.
107
135
 
108
- The Claude Code live-delivery minimum is now 2.1.282 on Apple Silicon macOS. With an older
136
+ The Claude Code live-delivery minimum is now 2.1.282. With an older
109
137
  Claude Code, live delivery stays off and the recorded policy is kept. Update Claude Code and
110
138
  start a new session: the recorded policy applies to it, with nothing to install again.
111
- `acc doctor` reports the state. Native Windows keeps next-turn delivery.
139
+ `acc doctor` reports the state.
112
140
 
113
141
  This release adds no new store event type or field, so a store it writes stays readable by
114
142
  0.7.x. The Channel captures remain as history in
@@ -86,6 +86,84 @@
86
86
  "The first TUI session in a folder trusted at that launch hands every hook an empty workspacePaths even with --add-dir, so that session gets no ACC context and no relay prompt; the next launch in the now-trusted folder does."
87
87
  ],
88
88
  "result": "pass"
89
+ },
90
+ {
91
+ "client": "antigravity-desktop",
92
+ "version": "2.19.1",
93
+ "platform": "darwin-arm64",
94
+ "observedAt": "2026-10-04",
95
+ "capability": "lifecycle.sessionStart",
96
+ "fixture": "fixtures/desktop-2.19.1.json",
97
+ "provenance": "fixtures/certification-provenance.json",
98
+ "provenanceId": "desktop-session-start-2-19-1",
99
+ "idleBehavior": "fires when a conversation starts",
100
+ "busyBehavior": "fires before the first model invocation",
101
+ "authorityLevel": "advisory",
102
+ "limitations": [
103
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
104
+ "the hooks ran as direct children of the app's language server; no agy process took part"
105
+ ],
106
+ "result": "pass"
107
+ },
108
+ {
109
+ "client": "antigravity-desktop",
110
+ "version": "2.19.1",
111
+ "platform": "darwin-arm64",
112
+ "observedAt": "2026-10-04",
113
+ "capability": "context.beforeTurnInjection",
114
+ "fixture": "fixtures/desktop-2.19.1.json",
115
+ "provenance": "fixtures/certification-provenance.json",
116
+ "provenanceId": "desktop-pre-invocation-2-19-1",
117
+ "idleBehavior": "waits for the next invocation",
118
+ "busyBehavior": "not observed in the desktop app",
119
+ "authorityLevel": "context",
120
+ "limitations": [
121
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
122
+ "the hooks ran as direct children of the app's language server; no agy process took part",
123
+ "requires the injectSteps ephemeralMessage envelope, as Antigravity CLI"
124
+ ],
125
+ "result": "pass"
126
+ },
127
+ {
128
+ "client": "antigravity-desktop",
129
+ "version": "2.19.1",
130
+ "platform": "darwin-arm64",
131
+ "observedAt": "2026-10-04",
132
+ "capability": "delivery.nextTurn",
133
+ "fixture": "fixtures/desktop-2.19.1.json",
134
+ "provenance": "fixtures/certification-provenance.json",
135
+ "provenanceId": "desktop-pre-invocation-2-19-1",
136
+ "idleBehavior": "offers complete peer messages at the next invocation",
137
+ "busyBehavior": "not observed in the desktop app",
138
+ "authorityLevel": "context",
139
+ "limitations": [
140
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
141
+ "the hooks ran as direct children of the app's language server; no agy process took part",
142
+ "the agent's acc reply runs only outside the app's sandbox, which the app approves by its grants in ~/.gemini/config/config.json"
143
+ ],
144
+ "result": "pass"
145
+ },
146
+ {
147
+ "client": "antigravity-desktop",
148
+ "version": "2.19.1",
149
+ "platform": "darwin-arm64",
150
+ "observedAt": "2026-10-05T04:34:55.036Z",
151
+ "capability": "delivery.livePush",
152
+ "fixture": "fixtures/delivery/antigravity-desktop-2.19.1-product.json",
153
+ "idleBehavior": "offered",
154
+ "provenance": "fixtures/certification-provenance.json",
155
+ "provenanceId": "native-delivery-2-19-1-desktop-product",
156
+ "busyBehavior": "queued_after_turn",
157
+ "authorityLevel": "experimental",
158
+ "limitations": [
159
+ "Observed on darwin-arm64 with Antigravity 2.19.1, the desktop app (Antigravity.app), model Gemini 3.8 Flash, in one conversation of a probe project opened in the app, through a private candidate built from this branch and installed into an isolated ACC data home that the app was launched with.",
160
+ "No relay and no command for the agent to run: ACC found the app's language server as the hook's parent, read its endpoint from the server's command line at each bind and offer, and pushed through the server's own agentapi; the endpoint record carries the server's pid, start time and port, never the token.",
161
+ "An idle conversation woke with no user input. A message accepted while the model streamed a long answer was presented after that answer completed, uninterrupted. The desktop UI shows each push as a collapsed ACC peer message entry.",
162
+ "The agent's acc commands fail inside the app's sandbox and run once the model retries outside it; with the wrapper's grant already in ~/.gemini/config/config.json, that retry ran without an approval prompt.",
163
+ "With the app quit, a message stayed queued as recipient_offline. After the app restarted - a new language server, token and port - the conversation's first user turn bound it again, and the next push woke it.",
164
+ "The app runs no SessionStart for a conversation it reopens, so after a restart live delivery returns at the conversation's next turn, not before."
165
+ ],
166
+ "result": "pass"
89
167
  }
90
168
  ]
91
169
  }
@@ -212,6 +212,117 @@
212
212
  "sha256": "024c5c53915c0f09fac9b2ba118f1831eb97f26c6d4b28aacc4e4a2c5d7500ee"
213
213
  }
214
214
  ]
215
+ },
216
+ {
217
+ "client": "antigravity-desktop",
218
+ "version": "2.19.1",
219
+ "platform": "darwin-arm64",
220
+ "observedAt": "2026-10-04",
221
+ "id": "desktop-session-start-2-19-1",
222
+ "event": "SessionStart",
223
+ "fixture": "fixtures/desktop-2.19.1.json",
224
+ "claims": [
225
+ {
226
+ "capability": "lifecycle.sessionStart",
227
+ "result": "pass",
228
+ "outcome": {
229
+ "kind": "event-observed",
230
+ "idle": "fires when a conversation starts",
231
+ "busy": "fires before the first model invocation",
232
+ "authority": "advisory",
233
+ "limitations": [
234
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
235
+ "the hooks ran as direct children of the app's language server; no agy process took part"
236
+ ]
237
+ }
238
+ }
239
+ ],
240
+ "sha256": "973a6842060465228480df062170fa450db679fae7476979fc510f22e0d24bc1",
241
+ "tool": null
242
+ },
243
+ {
244
+ "client": "antigravity-desktop",
245
+ "version": "2.19.1",
246
+ "platform": "darwin-arm64",
247
+ "observedAt": "2026-10-04",
248
+ "id": "desktop-pre-invocation-2-19-1",
249
+ "event": "PreInvocation",
250
+ "fixture": "fixtures/desktop-2.19.1.json",
251
+ "claims": [
252
+ {
253
+ "capability": "context.beforeTurnInjection",
254
+ "result": "pass",
255
+ "outcome": {
256
+ "kind": "model-visible",
257
+ "idle": "waits for the next invocation",
258
+ "busy": "not observed in the desktop app",
259
+ "authority": "context",
260
+ "limitations": [
261
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
262
+ "the hooks ran as direct children of the app's language server; no agy process took part",
263
+ "requires the injectSteps ephemeralMessage envelope, as Antigravity CLI"
264
+ ]
265
+ }
266
+ },
267
+ {
268
+ "capability": "delivery.nextTurn",
269
+ "result": "pass",
270
+ "outcome": {
271
+ "kind": "model-visible",
272
+ "idle": "offers complete peer messages at the next invocation",
273
+ "busy": "not observed in the desktop app",
274
+ "authority": "context",
275
+ "limitations": [
276
+ "captured on the desktop app 2.19.1 (Antigravity.app) on darwin-arm64 with ACC 0.8.5's installed hooks, in one conversation of a probe project opened in the app",
277
+ "the hooks ran as direct children of the app's language server; no agy process took part",
278
+ "the agent's acc reply runs only outside the app's sandbox, which the app approves by its grants in ~/.gemini/config/config.json"
279
+ ]
280
+ }
281
+ }
282
+ ],
283
+ "sha256": "973a6842060465228480df062170fa450db679fae7476979fc510f22e0d24bc1",
284
+ "tool": null
285
+ },
286
+ {
287
+ "id": "native-delivery-2-19-1-desktop-product",
288
+ "client": "antigravity-desktop",
289
+ "version": "2.19.1",
290
+ "platform": "darwin-arm64",
291
+ "observedAt": "2026-10-05T04:34:55.036Z",
292
+ "fixture": "fixtures/delivery/antigravity-desktop-2.19.1-product.json",
293
+ "sha256": "1ef1b19b9069220726a72c548353f40a38e7c2585c69c5469b30cba9286d47e3",
294
+ "event": null,
295
+ "tool": null,
296
+ "claims": [
297
+ {
298
+ "capability": "delivery.livePush",
299
+ "result": "pass",
300
+ "outcome": {
301
+ "kind": "native-delivery-observed",
302
+ "idle": "offered",
303
+ "busy": "queued_after_turn",
304
+ "authority": "experimental",
305
+ "limitations": [
306
+ "Observed on darwin-arm64 with Antigravity 2.19.1, the desktop app (Antigravity.app), model Gemini 3.8 Flash, in one conversation of a probe project opened in the app, through a private candidate built from this branch and installed into an isolated ACC data home that the app was launched with.",
307
+ "No relay and no command for the agent to run: ACC found the app's language server as the hook's parent, read its endpoint from the server's command line at each bind and offer, and pushed through the server's own agentapi; the endpoint record carries the server's pid, start time and port, never the token.",
308
+ "An idle conversation woke with no user input. A message accepted while the model streamed a long answer was presented after that answer completed, uninterrupted. The desktop UI shows each push as a collapsed ACC peer message entry.",
309
+ "The agent's acc commands fail inside the app's sandbox and run once the model retries outside it; with the wrapper's grant already in ~/.gemini/config/config.json, that retry ran without an approval prompt.",
310
+ "With the app quit, a message stayed queued as recipient_offline. After the app restarted - a new language server, token and port - the conversation's first user turn bound it again, and the next push woke it.",
311
+ "The app runs no SessionStart for a conversation it reopens, so after a restart live delivery returns at the conversation's next turn, not before."
312
+ ]
313
+ }
314
+ }
315
+ ],
316
+ "productEvidence": {
317
+ "fixture": "fixtures/delivery/antigravity-desktop-2.19.1-product-evidence.json",
318
+ "sha256": "b3b0fdfd19970acd636a2ff433cd13527c9c9257efceef5c8675bca60f0888b1"
319
+ },
320
+ "historicalFixtures": [
321
+ {
322
+ "fixture": "fixtures/desktop-2.19.1.json",
323
+ "sha256": "973a6842060465228480df062170fa450db679fae7476979fc510f22e0d24bc1"
324
+ }
325
+ ]
215
326
  }
216
327
  ]
217
328
  }
@@ -0,0 +1,156 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "source": "real-client-capture",
4
+ "client": "antigravity-desktop",
5
+ "phase": "product",
6
+ "clientVersion": "2.19.1",
7
+ "platform": "darwin-arm64",
8
+ "packageSha256": "c03096251a9efd251ecd42c6bf489e8783a9515c83d85242645a3a31fcdc0c42",
9
+ "startedAt": "2026-10-05T04:28:11.000Z",
10
+ "finishedAt": "2026-10-05T04:34:55.036Z",
11
+ "scenarioCount": 6,
12
+ "passedCount": 6,
13
+ "failedCount": 0,
14
+ "cleanup": {
15
+ "attempted": true,
16
+ "outcome": "passed",
17
+ "ownedProcesses": "stopped",
18
+ "temporaryState": "removed"
19
+ },
20
+ "scenarios": [
21
+ {
22
+ "caseId": "D01",
23
+ "outcome": "passed",
24
+ "startedAt": "2026-10-05T04:31:33.000Z",
25
+ "finishedAt": "2026-10-05T04:34:04.170Z",
26
+ "messageId": "message_xZi2izsqCNWh-2NcIIoMXg",
27
+ "observations": [
28
+ {
29
+ "kind": "delivery",
30
+ "at": "2026-10-05T04:34:04.170Z",
31
+ "outcome": "offered"
32
+ },
33
+ {
34
+ "kind": "desktop-push",
35
+ "at": "2026-10-05T04:31:35Z",
36
+ "outcome": "pushed"
37
+ },
38
+ {
39
+ "kind": "model-turn",
40
+ "at": "2026-10-05T04:31:35Z",
41
+ "outcome": "started-without-user-input"
42
+ }
43
+ ]
44
+ },
45
+ {
46
+ "caseId": "D02",
47
+ "outcome": "passed",
48
+ "startedAt": "2026-10-05T04:28:11.000Z",
49
+ "finishedAt": "2026-10-05T04:28:59.690Z",
50
+ "messageId": "message__M-kSLcUzAkViQCcVZxWNA",
51
+ "observations": [
52
+ {
53
+ "kind": "delivery",
54
+ "at": "2026-10-05T04:28:59.690Z",
55
+ "outcome": "offered"
56
+ },
57
+ {
58
+ "kind": "desktop-push",
59
+ "at": "2026-10-05T04:28:31Z",
60
+ "outcome": "pushed"
61
+ },
62
+ {
63
+ "kind": "presentation",
64
+ "outcome": "after-running-turn",
65
+ "at": "2026-10-05T04:28:31.000Z"
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "caseId": "D03",
71
+ "outcome": "passed",
72
+ "startedAt": "2026-10-05T04:31:33.000Z",
73
+ "finishedAt": "2026-10-05T04:34:04.261Z",
74
+ "messageId": "message_xZi2izsqCNWh-2NcIIoMXg",
75
+ "observations": [
76
+ {
77
+ "kind": "answer",
78
+ "outcome": "recorded",
79
+ "at": "2026-10-05T04:31:51.000Z"
80
+ },
81
+ {
82
+ "kind": "receipt",
83
+ "outcome": "acknowledged",
84
+ "at": "2026-10-05T04:31:51.000Z"
85
+ },
86
+ {
87
+ "kind": "approval",
88
+ "outcome": "not-asked",
89
+ "at": "2026-10-05T04:31:45.000Z"
90
+ }
91
+ ]
92
+ },
93
+ {
94
+ "caseId": "D04",
95
+ "outcome": "passed",
96
+ "startedAt": "2026-10-05T04:34:04.000Z",
97
+ "finishedAt": "2026-10-05T04:34:41.447Z",
98
+ "messageId": "message_lhvipieTjJa-Kx3o4CgL1Q",
99
+ "observations": [
100
+ {
101
+ "kind": "desktop-push",
102
+ "at": "2026-10-05T04:34:06Z",
103
+ "outcome": "pushed-once"
104
+ },
105
+ {
106
+ "kind": "logical-message",
107
+ "outcome": "same-message-id",
108
+ "at": "2026-10-05T04:34:04.000Z"
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ "caseId": "D05",
114
+ "outcome": "passed",
115
+ "startedAt": "2026-10-05T04:34:52.000Z",
116
+ "finishedAt": "2026-10-05T04:34:55.036Z",
117
+ "messageId": "message_mGC0UQYG2G23bsjsXuBI9w",
118
+ "observations": [
119
+ {
120
+ "kind": "delivery",
121
+ "at": "2026-10-05T04:34:55.036Z",
122
+ "outcome": "queued"
123
+ },
124
+ {
125
+ "kind": "client",
126
+ "outcome": "exited",
127
+ "at": "2026-10-05T04:34:54.000Z"
128
+ }
129
+ ]
130
+ },
131
+ {
132
+ "caseId": "D06",
133
+ "outcome": "passed",
134
+ "startedAt": "2026-10-05T04:29:19.000Z",
135
+ "finishedAt": "2026-10-05T04:31:16.352Z",
136
+ "messageId": "message_BY540lIYRss5JXqCTgB_0Q",
137
+ "observations": [
138
+ {
139
+ "kind": "delivery",
140
+ "at": "2026-10-05T04:31:16.352Z",
141
+ "outcome": "offered"
142
+ },
143
+ {
144
+ "kind": "desktop-push",
145
+ "at": "2026-10-05T04:30:03Z",
146
+ "outcome": "pushed"
147
+ },
148
+ {
149
+ "kind": "client",
150
+ "outcome": "restarted",
151
+ "at": "2026-10-05T04:29:19.000Z"
152
+ }
153
+ ]
154
+ }
155
+ ]
156
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "client": "antigravity-desktop",
3
+ "version": "2.19.1",
4
+ "platform": "darwin-arm64",
5
+ "observedAt": "2026-10-05T04:34:55.036Z",
6
+ "capability": "native_delivery",
7
+ "result": "pass",
8
+ "fixture": "antigravity-desktop-2.19.1-product",
9
+ "launchMode": "ordinary-command-with-installed-hooks",
10
+ "protocolContract": "antigravity-desktop-agentapi-v1",
11
+ "idle": "offered",
12
+ "busy": "queued_after_turn",
13
+ "reply": "routed",
14
+ "duplicate": "same_message_id",
15
+ "fallback": "queued",
16
+ "limitations": [
17
+ "Observed on darwin-arm64 with Antigravity 2.19.1, the desktop app (Antigravity.app), model Gemini 3.8 Flash, in one conversation of a probe project opened in the app, through a private candidate built from this branch and installed into an isolated ACC data home that the app was launched with.",
18
+ "No relay and no command for the agent to run: ACC found the app's language server as the hook's parent, read its endpoint from the server's command line at each bind and offer, and pushed through the server's own agentapi; the endpoint record carries the server's pid, start time and port, never the token.",
19
+ "An idle conversation woke with no user input. A message accepted while the model streamed a long answer was presented after that answer completed, uninterrupted. The desktop UI shows each push as a collapsed ACC peer message entry.",
20
+ "The agent's acc commands fail inside the app's sandbox and run once the model retries outside it; with the wrapper's grant already in ~/.gemini/config/config.json, that retry ran without an approval prompt.",
21
+ "With the app quit, a message stayed queued as recipient_offline. After the app restarted - a new language server, token and port - the conversation's first user turn bound it again, and the next push woke it.",
22
+ "The app runs no SessionStart for a conversation it reopens, so after a restart live delivery returns at the conversation's next turn, not before."
23
+ ],
24
+ "packageSha256": "c03096251a9efd251ecd42c6bf489e8783a9515c83d85242645a3a31fcdc0c42"
25
+ }