paseo-agy-acp 2.2.1 β 2.3.1
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/CHANGELOG.md +50 -0
- package/README.md +189 -517
- package/README.zh-CN.md +153 -472
- package/dist/ACP Connector/official-kernel/context.d.ts +1 -0
- package/dist/ACP Connector/official-kernel/context.js +7 -0
- package/dist/ACP Connector/official-kernel/context.js.map +1 -1
- package/dist/ACP Connector/official-kernel/login.d.ts +2 -1
- package/dist/ACP Connector/official-kernel/login.js +73 -3
- package/dist/ACP Connector/official-kernel/login.js.map +1 -1
- package/dist/ACP Connector/official-kernel/proxy.js +67 -1
- package/dist/ACP Connector/official-kernel/proxy.js.map +1 -1
- package/dist/ACP Connector/official-kernel/skill-commands.d.ts +12 -0
- package/dist/ACP Connector/official-kernel/skill-commands.js +219 -0
- package/dist/ACP Connector/official-kernel/skill-commands.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,473 +1,158 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# paseo-agy-acp
|
|
4
4
|
|
|
5
|
-
**Paseo adapter
|
|
5
|
+
**Reliable Paseo adapter for Google's official Antigravity ACP kernel**
|
|
6
6
|
|
|
7
7
|
[](./LICENSE)
|
|
8
|
-
[](./package.json)
|
|
9
9
|
[](https://www.npmjs.com/package/paseo-agy-acp)
|
|
10
|
-
[](
|
|
10
|
+
[](./package.json)
|
|
11
11
|
[](https://agentclientprotocol.com)
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<div align="center">
|
|
16
|
-
|
|
17
|
-
[πΊπΈ English](./README.md) | [π¨π³ δΈζ](./README.zh-CN.md)
|
|
13
|
+
[English](./README.md) | [δΈζ](./README.zh-CN.md) | [Changelog](./CHANGELOG.md)
|
|
18
14
|
|
|
19
15
|
</div>
|
|
20
16
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
`paseo-agy-acp` is the Paseo-facing ACP product for Google Antigravity. From
|
|
24
|
-
**2.1.0.0** it runs Google's official Antigravity ACP kernel (`agy_acp_server` /
|
|
25
|
-
Registry id `antigravity-acp`) as a thin NDJSON proxy, then adds the Paseo
|
|
26
|
-
behavior that Generic ACP does not provide on its own: daemon context, session
|
|
27
|
-
mode mapping, MCP rewrite, product identity, and an account-wide Admission
|
|
28
|
-
queue so the Paseo main controller can delegate many Antigravity agents without
|
|
29
|
-
a startup stampede.
|
|
30
|
-
|
|
31
|
-
**2.2** still uses the same official ACP kernel. It only adds an explicit
|
|
32
|
-
**local opt-in** compatibility layer: entitled Claude 4.6 and GPT-OSS 120B can
|
|
33
|
-
complete turns on this path. If you do not opt in, the official path supports
|
|
34
|
-
Gemini-family models only by default.
|
|
35
|
-
|
|
36
|
-
**2.2.1** is the same product as 2.2.0: GitHub tags now match npm (`v2.2.1` =
|
|
37
|
-
`paseo-agy-acp@2.2.1`). This README states that `npx` launches this proxy only.
|
|
38
|
-
The older GitHub tag `v2.2.0.0` remains the 2.2.0 line.
|
|
39
|
-
|
|
40
|
-
> **Not official Paseo support. Not official Google support.**
|
|
41
|
-
> Community-maintained product. Use at your own risk.
|
|
42
|
-
|
|
43
|
-
## 30-second summary
|
|
44
|
-
|
|
45
|
-
If you use Paseo with Google Antigravity, `paseo-agy-acp` gives Paseo a
|
|
46
|
-
product-ready path to Google's official Antigravity ACP kernel. It keeps the
|
|
47
|
-
model work inside the official kernel and adds the Paseo-side behavior that a
|
|
48
|
-
Generic ACP bridge does not provide:
|
|
49
|
-
|
|
50
|
-
- daemon context injection
|
|
51
|
-
- session mode mapping
|
|
52
|
-
- MCP `http` to official `sse` rewrite
|
|
53
|
-
- stable product identity
|
|
54
|
-
- burst-safe account-wide Admission queue for multi-agent delegation
|
|
55
|
-
- local opt-in for Claude 4.6 and GPT-OSS 120B; without it, Gemini-family only
|
|
56
|
-
|
|
57
|
-
## Who this is for
|
|
58
|
-
|
|
59
|
-
Use this if:
|
|
60
|
-
|
|
61
|
-
- you run Paseo
|
|
62
|
-
- you have Google Antigravity installed and authenticated locally
|
|
63
|
-
- you want Antigravity available through Generic ACP
|
|
64
|
-
- you delegate multiple agents and want startup bursts paced instead of stampeded
|
|
65
|
-
- you want Claude 4.6 or GPT-OSS 120B through Paseo on the official ACP kernel (local opt-in)
|
|
66
|
-
|
|
67
|
-
This is probably not for you if:
|
|
68
|
-
|
|
69
|
-
- you do not use Paseo
|
|
70
|
-
- you want a standalone Antigravity replacement
|
|
71
|
-
- you expect this package to redistribute Google's proprietary kernel
|
|
72
|
-
|
|
73
|
-
## Quickstart
|
|
74
|
-
|
|
75
|
-
Prerequisites: **Paseo**, **Node.js >= 22**, and a **locally installed** official
|
|
76
|
-
Antigravity ACP kernel (this package does **not** install Google's `.par`).
|
|
77
|
-
`--login` completes official OAuth (`authenticate` / `oauth-personal`). Set
|
|
78
|
-
`PASEO_AGY_ACP_OFFICIAL_BIN` to your kernel wrapper or `.par` (required unless
|
|
79
|
-
it already sits at the maintainer-host default pin).
|
|
80
|
-
|
|
81
|
-
The npm package `paseo-agy-acp@2.2.1` is the **proxy**. `npx` launches that
|
|
82
|
-
proxy; it does not replace Antigravity or Paseo.
|
|
83
|
-
|
|
84
|
-
```bash
|
|
85
|
-
export PASEO_AGY_ACP_OFFICIAL_BIN="/absolute/path/to/agy_acp_server.par-or-wrapper"
|
|
86
|
-
npx -y paseo-agy-acp@2.2.1 --login
|
|
87
|
-
|
|
88
|
-
export AGY_ACP_STATE_DIR="$HOME/.local/state/paseo-agy-acp/default"
|
|
89
|
-
install -d -m 700 "$AGY_ACP_STATE_DIR"
|
|
90
|
-
npx -y --package=paseo-agy-acp@2.2.1 agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
91
|
-
export AGY_ACP_ADMISSION_ENABLED=true
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Then point Paseo's Generic ACP `command` at npx (see
|
|
95
|
-
[Paseo provider config](#paseo-provider-config)). Do **not** treat the next
|
|
96
|
-
line as a standalone chat app: it is the stdio ACP server Paseo spawns.
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
npx -y paseo-agy-acp@2.2.1
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Claude / GPT-OSS: [Β§1](#1-official-agy-acp-kernel-capabilities) and the
|
|
103
|
-
[runbook](docs/operations/official-kernel-compat-runbook.md). Source checkout
|
|
104
|
-
(`git clone` + `npm ci` + `npm run build`) is under [Install](#install).
|
|
105
|
-
|
|
106
|
-
## About
|
|
107
|
-
|
|
108
|
-
This repository is a **product adapter**, not a second Antigravity. The kernel
|
|
109
|
-
does the model work; this repo adds the Paseo-side behavior a Generic ACP bridge
|
|
110
|
-
does not provide on its own.
|
|
111
|
-
|
|
112
|
-
| Highlight | Why it matters |
|
|
113
|
-
|---|---|
|
|
114
|
-
| **Official ACP kernel** | Native ACP over NDJSON. Without opt-in the official path supports Gemini only. Local opt-in adds entitled Claude 4.6 and GPT-OSS 120B. |
|
|
115
|
-
| **Paseo-side glue** | Daemon `appendSystemPrompt`, mode ids Paseo already sends, and MCP `http` servers are rewritten so Generic ACP agents can talk to Antigravity without extra adapter code. You still install Paseo, the official kernel, and point `command` at this proxy. |
|
|
116
|
-
| **Burst-safe delegation** | An account-wide durable Admission queue paces `session/prompt` so Paseo's main controller can dispatch many Antigravity agents without every turn hitting the kernel at once. |
|
|
117
|
-
| **Production-tested defaults** | Default **8 shared seats / 8 concurrent starts / 2s interval**, from live Paseo dispatch (including a 10-agent burst) plus isolated stress. Integers **β₯ 1** can probe higher; this repo does **not** invent a product ceiling. |
|
|
118
|
-
| **Fail-closed operations** | Bad env, policy splits, and unprovable writes fail closed. Queue timeout, cancel, and kernel errors stay distinguishable. |
|
|
119
|
-
| **Empty-turn guard** | An official `end_turn` with no visible assistant/tool output becomes a JSON-RPC error, so Paseo does not record a silent success. |
|
|
120
|
-
| **Clean license split** | This repo stays **Apache-2.0**. The official kernel is proprietary: we **spawn** the binary you already installed; npm does **not** ship the ~1.5GiB `.par`. |
|
|
121
|
-
|
|
122
|
-
```text
|
|
123
|
-
Paseo Generic ACP (NDJSON)
|
|
124
|
-
β paseo-agy-acp product proxy
|
|
125
|
-
identity Β· daemon context Β· mode map Β· MCP rewrite Β· Admission fence
|
|
126
|
-
β official agy_acp_server (NDJSON)
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
| Layer | License | What we do |
|
|
130
|
-
|---|---|---|
|
|
131
|
-
| **This repository** (proxy, Admission, Paseo context) | **Apache-2.0** | Keep Apache-2.0. We are **not** relicensing. |
|
|
132
|
-
| **Official ACP kernel** (`agy_acp_server.par` / `antigravity-acp`) | **Proprietary** | Spawn the kernel on the local machine. Do not redistribute it. |
|
|
133
|
-
| **ACP protocol / `@agentclientprotocol/sdk`** | Separate Apache-2.0 ecosystem | Not required at runtime for the official NDJSON proxy. |
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## 1. Official `agy-acp` kernel capabilities
|
|
138
|
-
|
|
139
|
-
The product **does not reimplement** Antigravity. It starts Google's native ACP
|
|
140
|
-
server and forwards Agent Client Protocol NDJSON. The table below is the
|
|
141
|
-
**official kernel** surface, as seen through that protocol.
|
|
142
|
-
|
|
143
|
-
| Area | What the official kernel provides |
|
|
144
|
-
|---|---|
|
|
145
|
-
| Protocol | Native **ACP v1 over NDJSON** |
|
|
146
|
-
| Auth | `authenticate` with `methodId=oauth-personal` (OAuth inside the kernel) |
|
|
147
|
-
| Session lifecycle | `initialize`, `session/new`, `session/prompt`, `session/cancel`, `session/set_mode`, `session/set_config_option` |
|
|
148
|
-
| Streaming | `session/update`: assistant text, thoughts, tool calls / tool updates |
|
|
149
|
-
| Live session modes | `default`, `auto_edit`, `yolo` (official has **no** plan mode) |
|
|
150
|
-
| Tools | File edits, shell/terminal, and other Antigravity tools as Google implements them |
|
|
151
|
-
| MCP | Official MCP client; servers are declared on `session/new` |
|
|
152
|
-
| Models | Without opt-in: Gemini-family only. With local opt-in: entitled Claude 4.6 and GPT-OSS 120B ([Β§2](#2-paseo-adaptations)). |
|
|
153
|
-
| Turn completion | Official `end_turn` / stop reasons |
|
|
17
|
+
<!-- readme:positioning -->
|
|
18
|
+
## What this product is
|
|
154
19
|
|
|
155
|
-
|
|
20
|
+
`paseo-agy-acp` is the product adapter between Paseo and Google's official
|
|
21
|
+
Antigravity ACP kernel. Authentication, models, tools, MCP, and inference stay
|
|
22
|
+
inside the official kernel. This adapter adds the context, compatibility,
|
|
23
|
+
concurrency control, skill discovery, and failure semantics required for
|
|
24
|
+
reliable Paseo multi-agent operation.
|
|
156
25
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
Schema, tool-call ids, GPT generation config), so they are not a default
|
|
161
|
-
working set.
|
|
26
|
+
It is not a second Antigravity implementation and does not redistribute
|
|
27
|
+
Google's proprietary kernel. The npm package contains only this Apache-2.0
|
|
28
|
+
proxy; you install and authenticate the official kernel separately.
|
|
162
29
|
|
|
163
|
-
|
|
164
|
-
|
|
30
|
+
> Community maintained. Not official Paseo support and not official Google
|
|
31
|
+
> support.
|
|
165
32
|
|
|
166
|
-
|
|
167
|
-
|
|
33
|
+
<!-- readme:value -->
|
|
34
|
+
## Why paseo-agy-acp
|
|
168
35
|
|
|
169
|
-
|
|
36
|
+
ACP provides the protocol. A production Paseo provider still needs product
|
|
37
|
+
behavior around that protocol:
|
|
170
38
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
These are the **Paseo-side** layers on top of the official kernel β the reason
|
|
174
|
-
this repository exists.
|
|
175
|
-
|
|
176
|
-
| # | Adaptation | What it does |
|
|
39
|
+
| Need | Direct generic ACP connection | `paseo-agy-acp` |
|
|
177
40
|
|---|---|---|
|
|
178
|
-
|
|
|
179
|
-
|
|
|
180
|
-
|
|
|
181
|
-
|
|
|
182
|
-
|
|
|
183
|
-
|
|
|
184
|
-
|
|
|
185
|
-
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
Paseo
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
## 3. Why the Admission queue exists
|
|
220
|
-
|
|
221
|
-
### Background
|
|
222
|
-
|
|
223
|
-
Paseo is a **main controller**. It routinely **delegates many Antigravity
|
|
224
|
-
agents at once**. Under that burst, neighboring high concurrency used to
|
|
225
|
-
strand turns: empty assistant bubbles, hangs, or ACP **Internal Error
|
|
226
|
-
`-32603`**. The historical **3+1** fence (3 shared active seats, 1 concurrent
|
|
227
|
-
start, 2s start interval) was a bleed-stop for that failure mode β not a
|
|
228
|
-
measured official ACP maximum.
|
|
229
|
-
|
|
230
|
-
On the official kernel we production-tested **8 shared seats / 8 concurrent
|
|
231
|
-
starts / 2s interval**, including a 10-agent Antigravity dispatch that did not
|
|
232
|
-
reproduce the old hang. Isolated stress on `127.0.0.1:6768` (6 concurrent yolo
|
|
233
|
-
agents) also did not reproduce it. Official ACP is still **not** proven
|
|
234
|
-
unlimited. **8 is a tested default, not a published product ceiling.**
|
|
235
|
-
|
|
236
|
-
### Principle
|
|
41
|
+
| Official execution chain | Can start an ACP server | Keeps OAuth, models, tools, MCP, and inference in Google's official kernel |
|
|
42
|
+
| Paseo context | No product-specific guarantee | Injects Paseo daemon and workspace/agent context into official prompts |
|
|
43
|
+
| Modes and MCP | Client and kernel shapes may differ | Maps Paseo modes and rewrites MCP `http` declarations to the official `sse` shape |
|
|
44
|
+
| Multi-agent bursts | Prompts can reach the kernel together | Uses one durable, account-wide Admission queue across connector processes |
|
|
45
|
+
| Slash command discovery | Official command updates omit local skills | Adds user-invocable Gemini, Agents, Codex, configured, and workspace skills |
|
|
46
|
+
| Empty turns | An output-free `end_turn` can look successful | Returns an explicit JSON-RPC error instead of recording silent success |
|
|
47
|
+
| Additional entitled models | Official ACP defaults to the Gemini-family path | Offers an explicit local compatibility runbook for entitled Claude 4.6 and GPT-OSS 120B |
|
|
48
|
+
| Product identity | Follows the underlying server | Exposes stable `agy-acp` / `paseo-agy-acp` identity to Paseo |
|
|
49
|
+
|
|
50
|
+
### Multi-agent stability
|
|
51
|
+
|
|
52
|
+
Paseo controllers can delegate several Antigravity agents at once. Admission
|
|
53
|
+
lets the controller dispatch that burst while excess turns wait instead of all
|
|
54
|
+
writing to `agy_acp_server` together. Seats are shared by every connector using
|
|
55
|
+
the same state directory and are released on turn completion, failure, or
|
|
56
|
+
cancel.
|
|
57
|
+
|
|
58
|
+
The tested default is **8 active turns / 8 concurrent starts / 2 seconds
|
|
59
|
+
minimum start spacing**. These are adjustable operating defaults, not a claimed
|
|
60
|
+
Google product limit. Invalid enabled configuration fails closed.
|
|
61
|
+
|
|
62
|
+
### Skill discovery
|
|
63
|
+
|
|
64
|
+
The adapter merges native ACP commands with `SKILL.md` metadata from configured
|
|
65
|
+
and default Gemini, Agents, Codex, and workspace roots. Native commands win on
|
|
66
|
+
name collisions, workspace skills take precedence over global skills, and
|
|
67
|
+
`user-invocable: false` entries stay out of slash command hints. Discovery is
|
|
68
|
+
scoped by session cwd so concurrent workspaces cannot leak command metadata to
|
|
69
|
+
each other.
|
|
70
|
+
|
|
71
|
+
### Model boundary
|
|
72
|
+
|
|
73
|
+
The unmodified official ACP path uses Gemini-family models as its default
|
|
74
|
+
working set. Accounts entitled to Claude 4.6 or GPT-OSS 120B can opt into the
|
|
75
|
+
local compatibility lifecycle documented in the
|
|
76
|
+
[official-kernel compatibility runbook](docs/operations/official-kernel-compat-runbook.md).
|
|
77
|
+
The same official kernel and Google backend remain responsible for inference;
|
|
78
|
+
this repository does not vendor or replace them.
|
|
79
|
+
|
|
80
|
+
<!-- readme:architecture -->
|
|
81
|
+
## Architecture and ownership
|
|
237
82
|
|
|
238
83
|
```text
|
|
239
|
-
Paseo
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
shared active seats (default 8)
|
|
246
|
-
paced concurrent starts (default 8, β₯ 2s apart)
|
|
247
|
-
|
|
|
248
|
-
official session/prompt write
|
|
249
|
-
|
|
|
250
|
-
seat released on turn end / failure / cancel
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
Extra turns **wait in the queue** instead of all hitting `agy_acp_server` at
|
|
254
|
-
once. The queue is oldest-eligible with agent fairness, durable across
|
|
255
|
-
connector processes, and fail-closed on bad env (non-integers, values `< 1`,
|
|
256
|
-
start interval `< 2000ms`). Independent Paseo agents that share one state
|
|
257
|
-
directory share one account pool β they cannot multiply concurrency by
|
|
258
|
-
accident.
|
|
259
|
-
|
|
260
|
-
### Advantage
|
|
261
|
-
|
|
262
|
-
The point is **not** to permanently cap Paseo at 3 agents. The point is to
|
|
263
|
-
keep **Paseo β Antigravity delegation steadier**:
|
|
264
|
-
|
|
265
|
-
- The main controller can still dispatch a burst.
|
|
266
|
-
- Surplus work queues instead of stampeding the official kernel.
|
|
267
|
-
- Seats are account-wide across connector processes and restarts.
|
|
268
|
-
- Queue timeout, cancel, and kernel errors remain distinguishable from a crash.
|
|
269
|
-
- Operators can raise seat/start integers (**β₯ 1**) to probe higher
|
|
270
|
-
concurrency and report what they find.
|
|
271
|
-
|
|
272
|
-
That is why Admission stays in the product after the official-kernel switch.
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Admission Controller v2
|
|
277
|
-
|
|
278
|
-
Admission is the operational implementation of the queue above: durable seats,
|
|
279
|
-
paced starts, recovery, and typed terminals. It is **opt-in** via env
|
|
280
|
-
(`AGY_ACP_ADMISSION_ENABLED=true` plus an absolute `AGY_ACP_STATE_DIR` and a
|
|
281
|
-
valid `PASEO_AGENT_ID`). Recommended for any Paseo host that delegates more
|
|
282
|
-
than one Antigravity agent.
|
|
283
|
-
|
|
284
|
-
### Enabling Admission
|
|
285
|
-
|
|
286
|
-
Create one owner-only state directory per Antigravity account and run the
|
|
287
|
-
packaged preflight:
|
|
288
|
-
|
|
289
|
-
```bash
|
|
290
|
-
export AGY_ACP_STATE_DIR="$HOME/.local/state/paseo-agy-acp/account-name"
|
|
291
|
-
install -d -m 700 "$AGY_ACP_STATE_DIR"
|
|
292
|
-
agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
293
|
-
export AGY_ACP_ADMISSION_ENABLED=true
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
The preflight creates a missing directory with mode `0700` and verifies type,
|
|
297
|
-
owner, and exact mode. It **rejects** an existing permissive directory instead
|
|
298
|
-
of silently chmod-ing it. After you confirm path and ownership, run
|
|
299
|
-
`chmod 700 -- "$AGY_ACP_STATE_DIR"` and rerun the preflight. Admission key and
|
|
300
|
-
SQLite files are created with mode `0600`.
|
|
301
|
-
|
|
302
|
-
Official-kernel queue files are written under
|
|
303
|
-
`$AGY_ACP_STATE_DIR/official-kernel` so they cannot share a ledger with a
|
|
304
|
-
historical install.
|
|
305
|
-
|
|
306
|
-
### Default and conservative policy
|
|
307
|
-
|
|
308
|
-
| Rule | Default | Override |
|
|
309
|
-
|---|---:|---|
|
|
310
|
-
| Shared active seats | **8** (tested) | `AGY_ACP_ADMISSION_MAX_ACTIVE_TURNS` β integer **β₯ 1** |
|
|
311
|
-
| Concurrent starts | **8** (tested) | `AGY_ACP_ADMISSION_MAX_CONCURRENT_STARTS` β integer **β₯ 1** |
|
|
312
|
-
| Minimum start interval | **2000 ms** | `AGY_ACP_ADMISSION_MIN_START_INTERVAL_MS` β integer **β₯ 2000** |
|
|
313
|
-
| Queue timeout | 30 minutes | `AGY_ACP_ADMISSION_QUEUE_TIMEOUT_MS` β integer `1`β`1800000` |
|
|
314
|
-
| Capacity cooldown | 30 seconds | `AGY_ACP_ADMISSION_CAPACITY_COOLDOWN_MS` β integer **β₯ 30000** |
|
|
315
|
-
|
|
316
|
-
Every local connector using the same state directory shares those account
|
|
317
|
-
seats across sessions and models. Requests are selected oldest-eligible with
|
|
318
|
-
agent fairness. A trusted provider-capacity failure pauses only the affected
|
|
319
|
-
provider/model. Queue timeout cancels the request and deletes its encrypted
|
|
320
|
-
prompt in the same transaction.
|
|
321
|
-
|
|
322
|
-
Overrides are fail-closed: non-integers, values `< 1`, and start intervals
|
|
323
|
-
below 2000 ms refuse to start. This repo does **not** publish a product
|
|
324
|
-
maximum; raise the integers to probe, and please report results.
|
|
325
|
-
|
|
326
|
-
Optional tighter fence (historical 3+1), **not** the recommended default:
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
AGY_ACP_ADMISSION_MAX_ACTIVE_TURNS=3
|
|
330
|
-
AGY_ACP_ADMISSION_MAX_CONCURRENT_STARTS=1
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
Soft drain can reduce seats without killing in-flight work or dropping the
|
|
334
|
-
queue.
|
|
335
|
-
|
|
336
|
-
### Durability, dispatch, and recovery
|
|
337
|
-
|
|
338
|
-
The local implementation uses `shared-admission-queue` **schema v3**. Durable
|
|
339
|
-
policy (`policy_state` / `policy_fingerprint`), queued owner instances, leases
|
|
340
|
-
with suspect metadata for the runtime reaper, and `schema_migrations` live in
|
|
341
|
-
one SQLite ledger. Unexpected delivery-authority tables still fail closed.
|
|
342
|
-
|
|
343
|
-
Each enabled runtime opener claims or verifies that durable policy before
|
|
344
|
-
startup recovery. A second connector on the same directory with a **different**
|
|
345
|
-
policy fails closed rather than splitting policy per process.
|
|
346
|
-
|
|
347
|
-
Idle sessions consume no seat and keep no resident turn process. An admitted
|
|
348
|
-
turn uses a fenced one-shot `session/prompt` write; unprovable writes become
|
|
349
|
-
`dispatch_ambiguous` or `recovery_required` instead of a silent replay.
|
|
350
|
-
Heartbeat, owner identity, and the runtime reaper release capacity only when
|
|
351
|
-
an owner is proven dead. Closing a session cancels queued work; an already
|
|
352
|
-
running turn follows the connector cancel path (`session/cancel`).
|
|
353
|
-
|
|
354
|
-
Admission does **not** add a second live-output path, outbox, ACK protocol,
|
|
355
|
-
terminal replay, or manual requeue API. Official session history remains an
|
|
356
|
-
ACP Connector / kernel responsibility.
|
|
357
|
-
|
|
358
|
-
### Design authority and implementation boundary
|
|
359
|
-
|
|
360
|
-
Current authority is the confirmed Scheme plus accepted Stage 2 artifacts
|
|
361
|
-
(see [Authority documents](#authority-documents-v2000-closeout) below). The
|
|
362
|
-
legacy admission design file is historical input only.
|
|
363
|
-
|
|
364
|
-
The repository has exactly two source areas:
|
|
365
|
-
|
|
366
|
-
```text
|
|
367
|
-
paseo-agy-acp/
|
|
368
|
-
|-- ACP Connector/ ACP NDJSON proxy, official kernel spawn, Paseo context
|
|
369
|
-
`-- Admission Controller/ durable seats, queue, policy, paced starts, recovery
|
|
84
|
+
Paseo / Generic ACP client
|
|
85
|
+
-> paseo-agy-acp product adapter
|
|
86
|
+
identity | daemon context | mode map | MCP rewrite
|
|
87
|
+
skill hints | blank-turn guard | optional Admission fence
|
|
88
|
+
-> official agy_acp_server (ACP v1 over NDJSON)
|
|
89
|
+
OAuth | models | tools | MCP | inference
|
|
370
90
|
```
|
|
371
91
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
92
|
+
| Layer | Responsibility | License boundary |
|
|
93
|
+
|---|---|---|
|
|
94
|
+
| Paseo | Agent lifecycle, workspace, delegation, provider configuration | Paseo project |
|
|
95
|
+
| `paseo-agy-acp` | Paseo-specific ACP adaptation and Admission | Apache-2.0; published on npm |
|
|
96
|
+
| Official `agy_acp_server` | Authentication, model catalog, tools, MCP, and inference | Google proprietary software; local install only |
|
|
376
97
|
|
|
377
|
-
|
|
98
|
+
The adapter runs one official kernel child per connector process. Admission is
|
|
99
|
+
optional but recommended whenever one Antigravity account serves concurrent
|
|
100
|
+
Paseo agents.
|
|
378
101
|
|
|
102
|
+
<!-- readme:requirements -->
|
|
379
103
|
## Requirements
|
|
380
104
|
|
|
381
|
-
- **
|
|
382
|
-
- **
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
Override with `PASEO_AGY_ACP_OFFICIAL_BIN`. If the path is the `.par` itself,
|
|
388
|
-
the process `cd`s into that directory and execs with `--uid=` (required on
|
|
389
|
-
hosts without a usable group, e.g. `nogroup`).
|
|
105
|
+
- **Paseo** with Generic ACP provider support
|
|
106
|
+
- **Node.js 22 or newer**
|
|
107
|
+
- A locally installed official Antigravity ACP kernel wrapper or `.par`
|
|
108
|
+
- An Antigravity account able to complete official `oauth-personal`
|
|
109
|
+
- Linux filesystem ownership and mode support when Admission is enabled
|
|
390
110
|
|
|
391
|
-
|
|
392
|
-
|
|
111
|
+
Set `PASEO_AGY_ACP_OFFICIAL_BIN` unless the kernel already exists at the
|
|
112
|
+
maintainer-host default pin. If this variable points directly at a `.par`, the
|
|
113
|
+
adapter starts it from its own directory and supplies the required uid.
|
|
393
114
|
|
|
394
|
-
|
|
115
|
+
<!-- readme:quickstart -->
|
|
116
|
+
## Quickstart
|
|
395
117
|
|
|
396
|
-
|
|
397
|
-
kernel. Prefer npm over `git clone` for the adapter only.
|
|
118
|
+
### 1. Point to the official kernel and authenticate
|
|
398
119
|
|
|
399
120
|
```bash
|
|
400
|
-
|
|
401
|
-
npx -y paseo-agy-acp@2.
|
|
121
|
+
export PASEO_AGY_ACP_OFFICIAL_BIN="/absolute/path/to/agy-acp-server-wrapper-or.par"
|
|
122
|
+
npx -y paseo-agy-acp@2.3.1 --login
|
|
402
123
|
```
|
|
403
124
|
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
`better-sqlite3` (needs a local C++ toolchain).
|
|
125
|
+
OAuth is completed by the official kernel. Its tokens remain in the kernel's
|
|
126
|
+
own state and are not printed by this adapter.
|
|
407
127
|
|
|
408
|
-
|
|
128
|
+
### 2. Prepare Admission state
|
|
409
129
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
cd paseo-agy-acp
|
|
413
|
-
npm ci
|
|
414
|
-
npm run build
|
|
415
|
-
npm test
|
|
416
|
-
```
|
|
130
|
+
Admission is optional for a single agent and recommended for multi-agent
|
|
131
|
+
delegation.
|
|
417
132
|
|
|
418
133
|
```bash
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
Login (official kernel OAuth):
|
|
425
|
-
|
|
426
|
-
```bash
|
|
427
|
-
npx -y paseo-agy-acp@2.2.1 --login
|
|
134
|
+
export AGY_ACP_STATE_DIR="$HOME/.local/state/paseo-agy-acp/account-name"
|
|
135
|
+
install -d -m 700 "$AGY_ACP_STATE_DIR"
|
|
136
|
+
npx -y --package=paseo-agy-acp@2.3.1 \
|
|
137
|
+
agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
428
138
|
```
|
|
429
139
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
| Variable | Purpose |
|
|
433
|
-
|---|---|
|
|
434
|
-
| `PASEO_AGY_ACP_OFFICIAL_BIN` | Official kernel wrapper or `.par` path |
|
|
435
|
-
| `PASEO_AGENT_ID` | Enables daemon context + Admission agent binding |
|
|
436
|
-
| `PASEO_HOME` | Optional Paseo home; falls back to `~/.paseo` |
|
|
437
|
-
| `AGY_ACP_ADMISSION_ENABLED` | `true` / `1` to fence prompts through Admission |
|
|
438
|
-
| `AGY_ACP_STATE_DIR` | Admission state directory (official runtime uses `official-kernel/` under it) |
|
|
439
|
-
| `AGY_ACP_ADMISSION_MAX_ACTIVE_TURNS` | Shared active seats. Integer **β₯ 1**. Default **8** (tested). |
|
|
440
|
-
| `AGY_ACP_ADMISSION_MAX_CONCURRENT_STARTS` | Concurrent starts. Integer **β₯ 1**. Default **8** (tested). |
|
|
441
|
-
| `AGY_ACP_ADMISSION_MIN_START_INTERVAL_MS` | Minimum start spacing. Default **2000**; values below 2000 fail closed. |
|
|
442
|
-
| `AGY_ACP_ADMISSION_QUEUE_TIMEOUT_MS` | Queue wait budget. Default 30 minutes; max 1800000. |
|
|
443
|
-
| `AGY_ACP_ADMISSION_CAPACITY_COOLDOWN_MS` | Provider/model cooldown after a trusted capacity failure. Default 30000; minimum 30000. |
|
|
444
|
-
|
|
445
|
-
`PASEO_AGY_ACP_KERNEL=legacy` and `--legacy-kernel` fail closed.
|
|
446
|
-
|
|
447
|
-
## Architecture
|
|
448
|
-
|
|
449
|
-
```text
|
|
450
|
-
Paseo / Generic ACP client
|
|
451
|
-
ββ paseo-agy-acp (agy-acp)
|
|
452
|
-
ββ product proxy: identity, daemon context, mode map, MCP rewrite
|
|
453
|
-
ββ Admission fence on session/prompt (optional, recommended)
|
|
454
|
-
ββ official agy_acp_server (NDJSON)
|
|
455
|
-
ββ Antigravity account, tools, MCP, models
|
|
456
|
-
```
|
|
140
|
+
Use one owner-only state directory per Antigravity account. The preflight
|
|
141
|
+
creates or validates the directory and refuses an existing permissive path.
|
|
457
142
|
|
|
458
|
-
|
|
459
|
-
**account-wide** seats across those processes through the durable ledger.
|
|
143
|
+
### 3. Configure the Paseo provider
|
|
460
144
|
|
|
461
|
-
|
|
145
|
+
Add or update the provider in `$PASEO_HOME/config.json` or
|
|
146
|
+
`~/.paseo/config.json`:
|
|
462
147
|
|
|
463
148
|
```json
|
|
464
149
|
{
|
|
465
150
|
"providers": {
|
|
466
151
|
"antigravity": {
|
|
467
152
|
"type": "acp",
|
|
468
|
-
"command": ["npx", "-y", "paseo-agy-acp@2.
|
|
153
|
+
"command": ["npx", "-y", "paseo-agy-acp@2.3.1"],
|
|
469
154
|
"env": {
|
|
470
|
-
"PASEO_AGY_ACP_OFFICIAL_BIN": "/
|
|
155
|
+
"PASEO_AGY_ACP_OFFICIAL_BIN": "/absolute/path/to/agy-acp-server-wrapper-or.par",
|
|
471
156
|
"AGY_ACP_ADMISSION_ENABLED": "true",
|
|
472
157
|
"AGY_ACP_STATE_DIR": "/home/YOU/.local/state/paseo-agy-acp/account-name"
|
|
473
158
|
}
|
|
@@ -476,116 +161,103 @@ One official kernel child per connector process. Admission coordinates
|
|
|
476
161
|
}
|
|
477
162
|
```
|
|
478
163
|
|
|
479
|
-
`
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
Paseo supplies `PASEO_AGENT_ID` to the provider process.
|
|
164
|
+
Paseo supplies `PASEO_AGENT_ID` and `PASEO_AGENT_CWD` to the provider process.
|
|
165
|
+
Omit the two Admission variables only when you intentionally want unfenced
|
|
166
|
+
single-agent operation.
|
|
483
167
|
|
|
484
|
-
|
|
485
|
-
agents pick up the new binary.
|
|
168
|
+
### 4. Restart and verify
|
|
486
169
|
|
|
487
|
-
|
|
170
|
+
Restart the Paseo daemon, create an agent with provider `antigravity`, select a
|
|
171
|
+
supported mode, and send a simple prompt. `npx` starts a stdio ACP server for
|
|
172
|
+
Paseo; it is not a standalone chat application.
|
|
488
173
|
|
|
489
|
-
|
|
174
|
+
<!-- readme:configuration -->
|
|
175
|
+
## Configuration
|
|
490
176
|
|
|
491
|
-
|
|
492
|
-
Configure the Paseo daemon to add an ACP provider for Google Antigravity.
|
|
177
|
+
### Essential environment
|
|
493
178
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
- env.AGY_ACP_ADMISSION_ENABLED: "true"
|
|
501
|
-
- env.AGY_ACP_STATE_DIR: absolute owner-only directory (mode 0700)
|
|
502
|
-
4. Prepare Admission state: npx -y --package=paseo-agy-acp@2.2.1 agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
503
|
-
5. Login once: npx -y paseo-agy-acp@2.2.1 --login
|
|
504
|
-
6. Restart the Paseo daemon.
|
|
505
|
-
7. Verify: create a test agent with provider "antigravity", send a simple prompt.
|
|
506
|
-
~~~
|
|
179
|
+
| Variable | Purpose |
|
|
180
|
+
|---|---|
|
|
181
|
+
| `PASEO_AGY_ACP_OFFICIAL_BIN` | Absolute official kernel wrapper or `.par` path |
|
|
182
|
+
| `PASEO_HOME` | Optional Paseo home; defaults to `~/.paseo` |
|
|
183
|
+
| `AGY_ACP_ADMISSION_ENABLED` | `true` / `1` enables the prompt fence |
|
|
184
|
+
| `AGY_ACP_STATE_DIR` | Absolute owner-only state directory shared by one account |
|
|
507
185
|
|
|
508
|
-
|
|
186
|
+
Advanced seat, start-rate, queue-timeout, cooldown, permission, recovery, and
|
|
187
|
+
policy-change procedures are in [Admission operations](docs/operations/admission.md).
|
|
509
188
|
|
|
510
|
-
|
|
511
|
-
# Smoke test (needs the official binary)
|
|
512
|
-
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' \
|
|
513
|
-
| node 'dist/ACP Connector/main.js'
|
|
514
|
-
|
|
515
|
-
# Full suite
|
|
516
|
-
npm test
|
|
517
|
-
```
|
|
189
|
+
### Mode mapping
|
|
518
190
|
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
`
|
|
524
|
-
official kernel
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
-
|
|
542
|
-
|
|
191
|
+
| Paseo or legacy id | Official live mode |
|
|
192
|
+
|---|---|
|
|
193
|
+
| `default` | `default` |
|
|
194
|
+
| `accept-edits` | `auto_edit` |
|
|
195
|
+
| `dangerously-skip-permissions` | `yolo` |
|
|
196
|
+
| `plan` | `default` (the official kernel has no plan mode) |
|
|
197
|
+
|
|
198
|
+
`PASEO_AGY_ACP_KERNEL=legacy` and `--legacy-kernel` fail closed. The official
|
|
199
|
+
kernel is the only execution path.
|
|
200
|
+
|
|
201
|
+
### Skill roots
|
|
202
|
+
|
|
203
|
+
Discovery reads configured roots from workspace `.agents/skills.json` or
|
|
204
|
+
`skills.json`, and from global `~/.gemini/config/skills.json`. Default roots
|
|
205
|
+
cover workspace Agents/Codex directories and global Gemini/Agents/Codex
|
|
206
|
+
directories. Each skill directory must contain `SKILL.md` frontmatter with a
|
|
207
|
+
usable name and description.
|
|
208
|
+
|
|
209
|
+
<!-- readme:operations -->
|
|
210
|
+
## Operations and troubleshooting
|
|
211
|
+
|
|
212
|
+
- The official kernel must already be installed. `npx` installs only the proxy.
|
|
213
|
+
- The first npm run may compile `better-sqlite3` and require a local C++
|
|
214
|
+
toolchain.
|
|
215
|
+
- Restart Paseo after changing provider command, environment, or kernel path.
|
|
216
|
+
- Enabled Admission with missing identity, unsafe state permissions, or invalid
|
|
217
|
+
policy refuses to start instead of silently running unfenced.
|
|
218
|
+
- Tool quality, image generation, backend quota, and provider error text remain
|
|
219
|
+
owned by the official kernel and Google backend.
|
|
220
|
+
- For reproducible upgrades or rollback, pin a three-part npm version in the
|
|
221
|
+
provider command and restart Paseo.
|
|
222
|
+
|
|
223
|
+
Current operational references:
|
|
224
|
+
|
|
225
|
+
- [Admission operations](docs/operations/admission.md)
|
|
226
|
+
- [Claude / GPT-OSS local compatibility](docs/operations/official-kernel-compat-runbook.md)
|
|
227
|
+
- [npm Trusted Publishing](docs/operations/npm-publishing.md)
|
|
228
|
+
- [Changelog](CHANGELOG.md)
|
|
229
|
+
- [GitHub Releases](https://github.com/tiezbro/paseo-agy-acp/releases)
|
|
230
|
+
- [Issue tracker](https://github.com/tiezbro/paseo-agy-acp/issues)
|
|
231
|
+
|
|
232
|
+
Detailed implementation and research records remain under `docs/design/`,
|
|
233
|
+
`docs/evidence/`, and `docs/research/`; they are not release history or setup
|
|
234
|
+
instructions.
|
|
235
|
+
|
|
236
|
+
<!-- readme:development -->
|
|
237
|
+
## Development
|
|
543
238
|
|
|
544
239
|
```bash
|
|
545
|
-
|
|
240
|
+
git clone https://github.com/tiezbro/paseo-agy-acp.git
|
|
241
|
+
cd paseo-agy-acp
|
|
242
|
+
npm ci
|
|
243
|
+
npm run validate
|
|
546
244
|
```
|
|
547
245
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
If Paseo `command` uses npx, bump or pin the npm tag (for example
|
|
551
|
-
`paseo-agy-acp@2.2.1`) and restart the daemon. That is the upgrade/rollback
|
|
552
|
-
path for packaged installs.
|
|
553
|
-
|
|
554
|
-
Source checkout:
|
|
246
|
+
An official-kernel smoke additionally requires
|
|
247
|
+
`PASEO_AGY_ACP_OFFICIAL_BIN`:
|
|
555
248
|
|
|
556
249
|
```bash
|
|
557
|
-
|
|
558
|
-
git pull && npm ci && npm run build && npm test
|
|
559
|
-
|
|
560
|
-
# Rollback
|
|
561
|
-
git checkout <rev> && npm ci && npm run build && npm test
|
|
250
|
+
node scripts/official-kernel-smoke.mjs
|
|
562
251
|
```
|
|
563
252
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
`AGY_ACP_STATE_DIR` if the durable fingerprint would fail-close the new policy.
|
|
567
|
-
|
|
568
|
-
## Authority documents (v2.0.0.0 closeout)
|
|
569
|
-
|
|
570
|
-
- [confirmed Scheme](/home/tiezbro/projects/MAACS/docs/maacs-paseo-agy-acp-confirmed-scheme.md)
|
|
571
|
-
- [Stage 2 handoff](docs/design/v2.0.0.0-stage2-handoff.md)
|
|
572
|
-
- [503 feasibility](docs/design/v2.0.0.0-stage2-503-feasibility.md)
|
|
573
|
-
- [ACP source map](docs/design/v2.0.0.0-stage2-acp-source-map.md)
|
|
574
|
-
- [Admission source map](docs/design/v2.0.0.0-stage2-admission-source-map.md)
|
|
575
|
-
- [Architecture](docs/design/v2.0.0.0-stage2-architecture.md)
|
|
576
|
-
- [Domain model](docs/design/v2.0.0.0-stage2-domain-model.md)
|
|
577
|
-
- [Test contracts](docs/design/v2.0.0.0-stage2-test-contracts.md)
|
|
578
|
-
- [Specification](docs/design/v2.0.0.0-stage2-spec.md)
|
|
579
|
-
|
|
580
|
-
β [Local technical notes](./docs/PASEO_LOCAL_CHANGES.md)
|
|
581
|
-
|
|
582
|
-
## Disclaimer
|
|
583
|
-
|
|
584
|
-
The official kernel is governed by
|
|
585
|
-
[Google Antigravity Terms](https://antigravity.google/terms). This product
|
|
586
|
-
spawns that kernel; it does not reimplement or redistribute it.
|
|
253
|
+
<!-- readme:license -->
|
|
254
|
+
## License and disclaimer
|
|
587
255
|
|
|
588
|
-
|
|
589
|
-
|
|
256
|
+
The adapter source is [Apache-2.0](LICENSE). The official Antigravity kernel is
|
|
257
|
+
not included and remains governed by
|
|
258
|
+
[Google Antigravity Terms](https://antigravity.google/terms). This community
|
|
259
|
+
project spawns a kernel you installed locally; it does not reimplement,
|
|
260
|
+
relicense, or redistribute that software.
|
|
590
261
|
|
|
591
|
-
|
|
262
|
+
Third-party use may carry account or service risk. Prefer authorized accounts
|
|
263
|
+
and official credentials. The software is provided as-is, without warranty.
|