paseo-agy-acp 2.2.0 → 2.3.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.
- package/CHANGELOG.md +47 -0
- package/README.md +72 -39
- package/README.zh-CN.md +66 -34
- 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/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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `paseo-agy-acp` are recorded here.
|
|
4
4
|
|
|
5
|
+
## 2.3.0 - 2026-08-30
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Discover user and workspace `SKILL.md` files from Gemini, Agents, Codex, and
|
|
10
|
+
configured skill roots, then expose user-invocable skills through standard
|
|
11
|
+
ACP slash command hints while preserving native commands.
|
|
12
|
+
- Add a tag-triggered npm Trusted Publishing workflow. A matching `vX.Y.Z` tag
|
|
13
|
+
on `main` now validates, packs, records, and publishes the public npm tarball
|
|
14
|
+
automatically with GitHub OIDC provenance and no long-lived npm token.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Scope workspace skill discovery to each ACP session cwd, serialize concurrent
|
|
19
|
+
`session/new` setup, and prevent command hints from leaking between
|
|
20
|
+
workspaces.
|
|
21
|
+
- Hide skills marked `user-invocable: false`, preserve workspace-over-global
|
|
22
|
+
precedence, and parse common quoted and multiline frontmatter forms.
|
|
23
|
+
|
|
24
|
+
### Verification
|
|
25
|
+
|
|
26
|
+
- Complete validation: 37 test files, 216 passed, 1 skipped; architecture and
|
|
27
|
+
secret checks passed.
|
|
28
|
+
- Official-kernel smoke and a live command-update canary preserved native
|
|
29
|
+
commands, exposed the visible workspace skill, and hid the non-invocable
|
|
30
|
+
skill.
|
|
31
|
+
|
|
32
|
+
### Contributors
|
|
33
|
+
|
|
34
|
+
- Thanks to [@zwmmm](https://github.com/zwmmm) for the initial implementation
|
|
35
|
+
and review follow-up in [#9](https://github.com/tiezbro/paseo-agy-acp/pull/9).
|
|
36
|
+
|
|
37
|
+
## 2.2.1 - 2026-08-29
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- GitHub tags match npm 3-part semver from this release (`v2.2.1` =
|
|
42
|
+
`paseo-agy-acp@2.2.1`). Historical tag `v2.2.0.0` remains the 2.2.0 line.
|
|
43
|
+
- README (EN/ZH): `npx` launches this proxy only. Paseo, a locally installed
|
|
44
|
+
official kernel, and `PASEO_AGY_ACP_OFFICIAL_BIN` remain required. The npm
|
|
45
|
+
tarball now ships that copy.
|
|
46
|
+
|
|
47
|
+
### Unchanged
|
|
48
|
+
|
|
49
|
+
- Same official ACP kernel, same local Claude/GPT-OSS opt-in, same Admission
|
|
50
|
+
defaults as 2.2.0.
|
|
51
|
+
|
|
5
52
|
## 2.2.0 - 2026-08-29
|
|
6
53
|
|
|
7
54
|
### Changed
|
package/README.md
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# 🔌 paseo-agy-acp
|
|
4
4
|
|
|
5
|
-
**Paseo
|
|
5
|
+
**Paseo adapter in front of Google's official Antigravity ACP kernel**
|
|
6
6
|
|
|
7
7
|
[](./LICENSE)
|
|
8
|
-
[](./package.json)
|
|
9
|
+
[](https://www.npmjs.com/package/paseo-agy-acp)
|
|
9
10
|
[](#)
|
|
10
11
|
[](https://agentclientprotocol.com)
|
|
11
12
|
|
|
@@ -27,11 +28,16 @@ mode mapping, MCP rewrite, product identity, and an account-wide Admission
|
|
|
27
28
|
queue so the Paseo main controller can delegate many Antigravity agents without
|
|
28
29
|
a startup stampede.
|
|
29
30
|
|
|
30
|
-
**2.2
|
|
31
|
+
**2.2** still uses the same official ACP kernel. It only adds an explicit
|
|
31
32
|
**local opt-in** compatibility layer: entitled Claude 4.6 and GPT-OSS 120B can
|
|
32
33
|
complete turns on this path. If you do not opt in, the official path supports
|
|
33
34
|
Gemini-family models only by default.
|
|
34
35
|
|
|
36
|
+
**2.3.0** adds slash command hints for user-invocable skills discovered from
|
|
37
|
+
Gemini, Agents, Codex, configured, and workspace roots. Native ACP commands stay
|
|
38
|
+
intact, workspace skills remain scoped to their session cwd, and concurrent
|
|
39
|
+
session creation cannot mix command hints between workspaces.
|
|
40
|
+
|
|
35
41
|
> **Not official Paseo support. Not official Google support.**
|
|
36
42
|
> Community-maintained product. Use at your own risk.
|
|
37
43
|
|
|
@@ -46,6 +52,7 @@ Generic ACP bridge does not provide:
|
|
|
46
52
|
- session mode mapping
|
|
47
53
|
- MCP `http` to official `sse` rewrite
|
|
48
54
|
- stable product identity
|
|
55
|
+
- local and workspace skill discovery for ACP slash command hints
|
|
49
56
|
- burst-safe account-wide Admission queue for multi-agent delegation
|
|
50
57
|
- local opt-in for Claude 4.6 and GPT-OSS 120B; without it, Gemini-family only
|
|
51
58
|
|
|
@@ -67,41 +74,47 @@ This is probably not for you if:
|
|
|
67
74
|
|
|
68
75
|
## Quickstart
|
|
69
76
|
|
|
70
|
-
Prerequisites: **Node.js >= 22
|
|
71
|
-
ACP kernel
|
|
72
|
-
`oauth-personal`). Set
|
|
73
|
-
|
|
77
|
+
Prerequisites: **Paseo**, **Node.js >= 22**, and a **locally installed** official
|
|
78
|
+
Antigravity ACP kernel (this package does **not** install Google's `.par`).
|
|
79
|
+
`--login` completes official OAuth (`authenticate` / `oauth-personal`). Set
|
|
80
|
+
`PASEO_AGY_ACP_OFFICIAL_BIN` to your kernel wrapper or `.par` (required unless
|
|
81
|
+
it already sits at the maintainer-host default pin).
|
|
74
82
|
|
|
75
|
-
The npm package
|
|
76
|
-
|
|
83
|
+
The npm package `paseo-agy-acp@2.3.0` is the **proxy**. `npx` launches that
|
|
84
|
+
proxy; it does not replace Antigravity or Paseo.
|
|
77
85
|
|
|
78
86
|
```bash
|
|
79
87
|
export PASEO_AGY_ACP_OFFICIAL_BIN="/absolute/path/to/agy_acp_server.par-or-wrapper"
|
|
80
|
-
npx -y paseo-agy-acp@2.
|
|
88
|
+
npx -y paseo-agy-acp@2.3.0 --login
|
|
81
89
|
|
|
82
90
|
export AGY_ACP_STATE_DIR="$HOME/.local/state/paseo-agy-acp/default"
|
|
83
91
|
install -d -m 700 "$AGY_ACP_STATE_DIR"
|
|
84
|
-
npx -y --package=paseo-agy-acp@2.
|
|
92
|
+
npx -y --package=paseo-agy-acp@2.3.0 agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
85
93
|
export AGY_ACP_ADMISSION_ENABLED=true
|
|
94
|
+
```
|
|
86
95
|
|
|
87
|
-
npx
|
|
96
|
+
Then point Paseo's Generic ACP `command` at npx (see
|
|
97
|
+
[Paseo provider config](#paseo-provider-config)). Do **not** treat the next
|
|
98
|
+
line as a standalone chat app: it is the stdio ACP server Paseo spawns.
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
npx -y paseo-agy-acp@2.3.0
|
|
88
102
|
```
|
|
89
103
|
|
|
90
|
-
|
|
91
|
-
Claude / GPT-OSS: see [§1](#1-official-agy-acp-kernel-capabilities) and the
|
|
104
|
+
Claude / GPT-OSS: [§1](#1-official-agy-acp-kernel-capabilities) and the
|
|
92
105
|
[runbook](docs/operations/official-kernel-compat-runbook.md). Source checkout
|
|
93
|
-
(`git clone` + `npm ci` + `npm run build`)
|
|
94
|
-
[Install](#install).
|
|
106
|
+
(`git clone` + `npm ci` + `npm run build`) is under [Install](#install).
|
|
95
107
|
|
|
96
108
|
## About
|
|
97
109
|
|
|
98
110
|
This repository is a **product adapter**, not a second Antigravity. The kernel
|
|
99
|
-
does the model work; this repo
|
|
111
|
+
does the model work; this repo adds the Paseo-side behavior a Generic ACP bridge
|
|
112
|
+
does not provide on its own.
|
|
100
113
|
|
|
101
114
|
| Highlight | Why it matters |
|
|
102
115
|
|---|---|
|
|
103
116
|
| **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. |
|
|
104
|
-
| **Paseo-
|
|
117
|
+
| **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. |
|
|
105
118
|
| **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. |
|
|
106
119
|
| **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. |
|
|
107
120
|
| **Fail-closed operations** | Bad env, policy splits, and unprovable writes fail closed. Queue timeout, cancel, and kernel errors stay distinguishable. |
|
|
@@ -180,7 +193,7 @@ provider processes.
|
|
|
180
193
|
|
|
181
194
|
### Local opt-in: Claude 4.6 and GPT-OSS 120B
|
|
182
195
|
|
|
183
|
-
**2.2
|
|
196
|
+
**2.2 still uses the same official ACP kernel.** It only adds this layer.
|
|
184
197
|
If you do not opt in, the official path supports Gemini-family models only.
|
|
185
198
|
|
|
186
199
|
Opt-in is **local** and **explicit**:
|
|
@@ -198,6 +211,17 @@ Maintainer-host checks with live entitlement: `claude-sonnet-4-6`,
|
|
|
198
211
|
`claude-opus-4-6-thinking`, `gpt-oss-120b-medium` — text, sequential tools,
|
|
199
212
|
warm resume. Your account must still list those ids in raw CCPA.
|
|
200
213
|
|
|
214
|
+
Live Paseo turns on that host after local opt-in (Yolo). Same official kernel;
|
|
215
|
+
npm still does **not** ship Google's `.par`.
|
|
216
|
+
|
|
217
|
+
**Claude Opus 4.6 (Thinking)** — hello turn, 5s:
|
|
218
|
+
|
|
219
|
+

|
|
220
|
+
|
|
221
|
+
**GPT-OSS 120B (Medium)** — hello turn, 4s:
|
|
222
|
+
|
|
223
|
+

|
|
224
|
+
|
|
201
225
|
Please test Claude and GPT-OSS on your machine (one agent and several). If a
|
|
202
226
|
model is missing, a turn fails, or tools misbehave,
|
|
203
227
|
[open an Issue](https://github.com/tiezbro/paseo-agy-acp/issues). We will use
|
|
@@ -382,17 +406,19 @@ capacity cooldown. Package entrypoints stay inside `ACP Connector/`.
|
|
|
382
406
|
|
|
383
407
|
## Install
|
|
384
408
|
|
|
385
|
-
|
|
409
|
+
`npx` installs and runs **this proxy**. It does not install Paseo or Google's
|
|
410
|
+
kernel. Prefer npm over `git clone` for the adapter only.
|
|
386
411
|
|
|
387
412
|
```bash
|
|
388
|
-
|
|
413
|
+
# Official OAuth through the proxy (kernel must already be on this machine)
|
|
414
|
+
npx -y paseo-agy-acp@2.3.0 --login
|
|
389
415
|
```
|
|
390
416
|
|
|
391
417
|
Bins: `paseo-agy-acp` / `agy-acp` (ACP proxy), `agy-acp-prepare-state`,
|
|
392
418
|
`agy-acp-prepare-official-kernel-compat`. First `npx` may compile
|
|
393
419
|
`better-sqlite3` (needs a local C++ toolchain).
|
|
394
420
|
|
|
395
|
-
Source checkout:
|
|
421
|
+
Source checkout (development):
|
|
396
422
|
|
|
397
423
|
```bash
|
|
398
424
|
git clone https://github.com/tiezbro/paseo-agy-acp.git
|
|
@@ -405,13 +431,13 @@ npm test
|
|
|
405
431
|
```bash
|
|
406
432
|
# ACP initialize smoke (requires the official binary)
|
|
407
433
|
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' \
|
|
408
|
-
| npx -y paseo-agy-acp@2.
|
|
434
|
+
| npx -y paseo-agy-acp@2.3.0
|
|
409
435
|
```
|
|
410
436
|
|
|
411
437
|
Login (official kernel OAuth):
|
|
412
438
|
|
|
413
439
|
```bash
|
|
414
|
-
npx -y paseo-agy-acp@2.
|
|
440
|
+
npx -y paseo-agy-acp@2.3.0 --login
|
|
415
441
|
```
|
|
416
442
|
|
|
417
443
|
## Environment
|
|
@@ -452,7 +478,7 @@ One official kernel child per connector process. Admission coordinates
|
|
|
452
478
|
"providers": {
|
|
453
479
|
"antigravity": {
|
|
454
480
|
"type": "acp",
|
|
455
|
-
"command": ["npx", "-y", "paseo-agy-acp@2.
|
|
481
|
+
"command": ["npx", "-y", "paseo-agy-acp@2.3.0"],
|
|
456
482
|
"env": {
|
|
457
483
|
"PASEO_AGY_ACP_OFFICIAL_BIN": "/home/YOU/.local/opt/agy-acp-server-agy_acp_server_20260818_01_RC01/agy-acp-server-canary",
|
|
458
484
|
"AGY_ACP_ADMISSION_ENABLED": "true",
|
|
@@ -463,8 +489,9 @@ One official kernel child per connector process. Admission coordinates
|
|
|
463
489
|
}
|
|
464
490
|
```
|
|
465
491
|
|
|
466
|
-
|
|
467
|
-
|
|
492
|
+
`command` is how Paseo **spawns this proxy**. `PASEO_AGY_ACP_OFFICIAL_BIN` must
|
|
493
|
+
point at a kernel already installed on the machine. When `command` is `node`,
|
|
494
|
+
pass `["/path/to/paseo-agy-acp/dist/ACP Connector/main.js"]` as `args`.
|
|
468
495
|
Paseo supplies `PASEO_AGENT_ID` to the provider process.
|
|
469
496
|
|
|
470
497
|
Restart the Paseo daemon after changing the provider so idle Antigravity
|
|
@@ -477,17 +504,18 @@ Paste into any Paseo agent to install or repair the Antigravity provider:
|
|
|
477
504
|
~~~
|
|
478
505
|
Configure the Paseo daemon to add an ACP provider for Google Antigravity.
|
|
479
506
|
|
|
480
|
-
1.
|
|
481
|
-
2.
|
|
507
|
+
1. Confirm a local official Antigravity ACP kernel is installed (this package does not vendor it).
|
|
508
|
+
2. Read Paseo config ($PASEO_HOME/config.json or ~/.paseo/config.json).
|
|
509
|
+
3. Add or update providers.antigravity:
|
|
482
510
|
- type: "acp"
|
|
483
|
-
- command: ["npx", "-y", "paseo-agy-acp@2.
|
|
511
|
+
- command: ["npx", "-y", "paseo-agy-acp@2.3.0"] (spawns the proxy, not the Google kernel)
|
|
484
512
|
- env.PASEO_AGY_ACP_OFFICIAL_BIN: local official kernel wrapper (agy-acp-server-canary or agy_acp_server.par)
|
|
485
513
|
- env.AGY_ACP_ADMISSION_ENABLED: "true"
|
|
486
514
|
- env.AGY_ACP_STATE_DIR: absolute owner-only directory (mode 0700)
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
515
|
+
4. Prepare Admission state: npx -y --package=paseo-agy-acp@2.3.0 agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
516
|
+
5. Login once: npx -y paseo-agy-acp@2.3.0 --login
|
|
517
|
+
6. Restart the Paseo daemon.
|
|
518
|
+
7. Verify: create a test agent with provider "antigravity", send a simple prompt.
|
|
491
519
|
~~~
|
|
492
520
|
|
|
493
521
|
## Verification
|
|
@@ -516,7 +544,7 @@ official kernel + daemon context.
|
|
|
516
544
|
- Official RC01 active cancel was not confirmed in our harness; live 503/quota
|
|
517
545
|
was not induced against real backends.
|
|
518
546
|
- The official kernel binary must already be installed; this package does not
|
|
519
|
-
vendor it.
|
|
547
|
+
vendor it. `npx` only launches the proxy.
|
|
520
548
|
- Admission is off until `AGY_ACP_ADMISSION_ENABLED`, `AGY_ACP_STATE_DIR`, and
|
|
521
549
|
`PASEO_AGENT_ID` are all valid. Discovery/`--login` without an agent id does
|
|
522
550
|
not open the ledger.
|
|
@@ -532,6 +560,12 @@ env -u PASEO_AGENT_ID -u PASEO_HOME npm test
|
|
|
532
560
|
|
|
533
561
|
## Upgrade / Rollback
|
|
534
562
|
|
|
563
|
+
If Paseo `command` uses npx, bump or pin the npm tag (for example
|
|
564
|
+
`paseo-agy-acp@2.3.0`) and restart the daemon. That is the upgrade/rollback
|
|
565
|
+
path for packaged installs.
|
|
566
|
+
|
|
567
|
+
Source checkout:
|
|
568
|
+
|
|
535
569
|
```bash
|
|
536
570
|
# Upgrade
|
|
537
571
|
git pull && npm ci && npm run build && npm test
|
|
@@ -540,10 +574,9 @@ git pull && npm ci && npm run build && npm test
|
|
|
540
574
|
git checkout <rev> && npm ci && npm run build && npm test
|
|
541
575
|
```
|
|
542
576
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
durable fingerprint would fail-close the new policy.
|
|
577
|
+
Restart the daemon after changing `command` or the kernel path. After an
|
|
578
|
+
Admission policy change (for example 3+1 → 8/8), use a **fresh**
|
|
579
|
+
`AGY_ACP_STATE_DIR` if the durable fingerprint would fail-close the new policy.
|
|
547
580
|
|
|
548
581
|
## Authority documents (v2.0.0.0 closeout)
|
|
549
582
|
|
package/README.zh-CN.md
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
# 🔌 paseo-agy-acp
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**面向 Paseo 的适配器,跑在 Google 官方 Antigravity ACP 内核前面**
|
|
6
6
|
|
|
7
7
|
[](./LICENSE)
|
|
8
|
-
[](./package.json)
|
|
9
|
+
[](https://www.npmjs.com/package/paseo-agy-acp)
|
|
9
10
|
[](#)
|
|
10
11
|
[](https://agentclientprotocol.com)
|
|
11
12
|
|
|
@@ -25,10 +26,14 @@ Registry id `antigravity-acp`),再补上 Generic ACP 本身给不了的 Pase
|
|
|
25
26
|
daemon 上下文、session 模式映射、MCP 改写、产品身份,以及账户级 Admission
|
|
26
27
|
队列——让 Paseo 主控可以一次委派多个 Antigravity agent,而不把启动打成风暴。
|
|
27
28
|
|
|
28
|
-
**2.2
|
|
29
|
+
**2.2** 仍使用同一套官方 ACP 内核。它只增加一层明确的 **本机 opt-in**
|
|
29
30
|
兼容:有资格的 Claude 4.6 与 GPT-OSS 120B 可以在这条路径上跑完回合。
|
|
30
31
|
如果未 opt-in,官方路径默认只支持 Gemini 系模型。
|
|
31
32
|
|
|
33
|
+
**2.3.0** 新增可由用户调用的 skill slash command 提示,支持 Gemini、Agents、
|
|
34
|
+
Codex、用户配置和 workspace roots。原生 ACP 命令保持不变,workspace skills
|
|
35
|
+
按 session cwd 隔离,并发创建 session 时不会跨 workspace 混入命令提示。
|
|
36
|
+
|
|
32
37
|
> **非 Paseo 官方支持。非 Google 官方支持。** 社区维护产品,使用风险自负。
|
|
33
38
|
|
|
34
39
|
## 30 秒摘要
|
|
@@ -41,6 +46,7 @@ daemon 上下文、session 模式映射、MCP 改写、产品身份,以及账
|
|
|
41
46
|
- session 模式映射
|
|
42
47
|
- MCP `http` 到官方 `sse` 的改写
|
|
43
48
|
- 稳定产品身份
|
|
49
|
+
- 面向 ACP slash command 提示的本地与 workspace skill discovery
|
|
44
50
|
- 面向多 agent 委派的账户级 Admission 队列
|
|
45
51
|
- 本机 opt-in 后可跑 Claude 4.6 与 GPT-OSS 120B;未 opt-in 则只支持 Gemini 系
|
|
46
52
|
|
|
@@ -62,39 +68,45 @@ daemon 上下文、session 模式映射、MCP 改写、产品身份,以及账
|
|
|
62
68
|
|
|
63
69
|
## 快速开始
|
|
64
70
|
|
|
65
|
-
前提:**Node.js >= 22
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
前提:**Paseo**、**Node.js >= 22**,以及本机已安装的官方 Antigravity ACP 内核
|
|
72
|
+
(本包装 **不会** 安装 Google 的 `.par`)。`--login` 完成官方 OAuth
|
|
73
|
+
(`authenticate` / `oauth-personal`)。把 `PASEO_AGY_ACP_OFFICIAL_BIN` 指到你的
|
|
74
|
+
内核 wrapper 或 `.par`(除非已在维护者主机默认 pin 路径,否则必填)。
|
|
68
75
|
|
|
69
|
-
npm
|
|
70
|
-
|
|
76
|
+
npm 包 `paseo-agy-acp@2.3.0` 是 **代理**。`npx` 只拉起这个代理,**不能**代替
|
|
77
|
+
Antigravity 或 Paseo。
|
|
71
78
|
|
|
72
79
|
```bash
|
|
73
80
|
export PASEO_AGY_ACP_OFFICIAL_BIN="/absolute/path/to/agy_acp_server.par-or-wrapper"
|
|
74
|
-
npx -y paseo-agy-acp@2.
|
|
81
|
+
npx -y paseo-agy-acp@2.3.0 --login
|
|
75
82
|
|
|
76
83
|
export AGY_ACP_STATE_DIR="$HOME/.local/state/paseo-agy-acp/default"
|
|
77
84
|
install -d -m 700 "$AGY_ACP_STATE_DIR"
|
|
78
|
-
npx -y --package=paseo-agy-acp@2.
|
|
85
|
+
npx -y --package=paseo-agy-acp@2.3.0 agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
79
86
|
export AGY_ACP_ADMISSION_ENABLED=true
|
|
87
|
+
```
|
|
80
88
|
|
|
81
|
-
|
|
89
|
+
再把 Paseo Generic ACP 的 `command` 指到 npx(见
|
|
90
|
+
[Paseo Provider 配置](#paseo-provider-配置))。下面这一行 **不是** 独立聊天程序,
|
|
91
|
+
而是 Paseo spawn 的 stdio ACP 服务:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npx -y paseo-agy-acp@2.3.0
|
|
82
95
|
```
|
|
83
96
|
|
|
84
|
-
把 Paseo Generic ACP provider 指到 `npx`(见 [Paseo Provider 配置](#paseo-provider-配置))。
|
|
85
97
|
Claude / GPT-OSS 见 [§1](#1-官方-agy-acp-内核能力) 和
|
|
86
98
|
[runbook](docs/operations/official-kernel-compat-runbook.md)。源码 checkout
|
|
87
|
-
(`git clone` + `npm ci` + `npm run build
|
|
99
|
+
(`git clone` + `npm ci` + `npm run build`)见 [安装](#安装)。
|
|
88
100
|
|
|
89
101
|
## 关于
|
|
90
102
|
|
|
91
103
|
本仓库是 **产品适配器**,不是第二个 Antigravity。模型工作由内核完成;本仓库
|
|
92
|
-
|
|
104
|
+
补上 Generic ACP 桥本身不提供的 Paseo 侧行为。
|
|
93
105
|
|
|
94
106
|
| 亮点 | 为什么重要 |
|
|
95
107
|
|---|---|
|
|
96
108
|
| **官方 ACP 内核** | 原生 ACP / NDJSON。未 opt-in 时官方路径只支持 Gemini;本机 opt-in 后,有资格的 Claude 4.6 与 GPT-OSS 120B 可以跑完回合。 |
|
|
97
|
-
|
|
|
109
|
+
| **Paseo 侧胶水** | daemon `appendSystemPrompt`、Paseo 已在用的 mode id、以及 MCP `http` server,都会改写成官方内核认识的形态,Generic ACP agent 不用再写一层适配。仍须安装 Paseo、官方内核,并把 `command` 指到本代理。 |
|
|
98
110
|
| **突发委派更稳健** | 账户级持久 Admission 队列给 `session/prompt` 限速,Paseo 主控可以一次派出很多 Antigravity agent,不会让每个 turn 同时砸到内核上。 |
|
|
99
111
|
| **生产实测默认值** | 默认 **8 个共享席位 / 8 路同时启动 / 2 秒间隔**,来自真实 Paseo 派发(含 10 agent 突发)和隔离压测。整数 **≥ 1** 可以继续试更高并发;本仓库 **不编** 一个产品上限。 |
|
|
100
112
|
| **失败即关闭** | 非法环境变量、policy 分叉、无法证明的写入一律 fail closed。排队超时、取消、内核错误仍然能区分。 |
|
|
@@ -169,7 +181,7 @@ provider 进程提供 `PASEO_AGENT_ID`(以及 `PASEO_AGENT_CWD`)。
|
|
|
169
181
|
|
|
170
182
|
### 本机 opt-in:Claude 4.6 与 GPT-OSS 120B
|
|
171
183
|
|
|
172
|
-
**2.2
|
|
184
|
+
**2.2 仍使用同一套官方 ACP 内核。** 它只增加这一层。如果未 opt-in,
|
|
173
185
|
官方路径默认只支持 Gemini 系模型。
|
|
174
186
|
|
|
175
187
|
opt-in 是 **本机、显式** 的:
|
|
@@ -193,6 +205,17 @@ opt-in 是 **本机、显式** 的:
|
|
|
193
205
|
`claude-opus-4-6-thinking`、`gpt-oss-120b-medium` —— 文本、顺序工具、warm
|
|
194
206
|
resume。你的账号仍须在 raw CCPA 目录里拥有这些 id。
|
|
195
207
|
|
|
208
|
+
本机 opt-in 之后,同一台主机上的 Paseo 活回合(Yolo)。仍是同一套官方内核;
|
|
209
|
+
npm **不**分发 Google 的 `.par`。
|
|
210
|
+
|
|
211
|
+
**Claude Opus 4.6 (Thinking)** — hello 回合,5s:
|
|
212
|
+
|
|
213
|
+

|
|
214
|
+
|
|
215
|
+
**GPT-OSS 120B (Medium)** — hello 回合,4s:
|
|
216
|
+
|
|
217
|
+

|
|
218
|
+
|
|
196
219
|
请在自己的环境测试 Claude 与 GPT-OSS(单个 agent 和一次开多个)。模型缺失、
|
|
197
220
|
回合失败或工具异常,请 [开 Issue](https://github.com/tiezbro/paseo-agy-acp/issues)。
|
|
198
221
|
我们会按反馈做优化和修复。
|
|
@@ -358,17 +381,19 @@ paseo-agy-acp/
|
|
|
358
381
|
|
|
359
382
|
## 安装
|
|
360
383
|
|
|
361
|
-
|
|
384
|
+
`npx` 安装并运行 **本代理**。它不会安装 Paseo,也不会安装 Google 内核。适配器
|
|
385
|
+
请用 npm,不要默认 `git clone`。
|
|
362
386
|
|
|
363
387
|
```bash
|
|
364
|
-
|
|
388
|
+
# 经代理做官方 OAuth(本机必须已有官方内核)
|
|
389
|
+
npx -y paseo-agy-acp@2.3.0 --login
|
|
365
390
|
```
|
|
366
391
|
|
|
367
392
|
命令:`paseo-agy-acp` / `agy-acp`(ACP 代理)、`agy-acp-prepare-state`、
|
|
368
393
|
`agy-acp-prepare-official-kernel-compat`。第一次 `npx` 可能要编译
|
|
369
394
|
`better-sqlite3`(本机需要 C++ 工具链)。
|
|
370
395
|
|
|
371
|
-
源码 checkout
|
|
396
|
+
源码 checkout(开发用):
|
|
372
397
|
|
|
373
398
|
```bash
|
|
374
399
|
git clone https://github.com/tiezbro/paseo-agy-acp.git
|
|
@@ -381,13 +406,13 @@ npm test
|
|
|
381
406
|
```bash
|
|
382
407
|
# ACP initialize 冒烟(需要官方二进制)
|
|
383
408
|
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":1}}' \
|
|
384
|
-
| npx -y paseo-agy-acp@2.
|
|
409
|
+
| npx -y paseo-agy-acp@2.3.0
|
|
385
410
|
```
|
|
386
411
|
|
|
387
412
|
登录(官方内核 OAuth):
|
|
388
413
|
|
|
389
414
|
```bash
|
|
390
|
-
npx -y paseo-agy-acp@2.
|
|
415
|
+
npx -y paseo-agy-acp@2.3.0 --login
|
|
391
416
|
```
|
|
392
417
|
|
|
393
418
|
## 环境变量
|
|
@@ -428,7 +453,7 @@ Paseo / Generic ACP 客户端
|
|
|
428
453
|
"providers": {
|
|
429
454
|
"antigravity": {
|
|
430
455
|
"type": "acp",
|
|
431
|
-
"command": ["npx", "-y", "paseo-agy-acp@2.
|
|
456
|
+
"command": ["npx", "-y", "paseo-agy-acp@2.3.0"],
|
|
432
457
|
"env": {
|
|
433
458
|
"PASEO_AGY_ACP_OFFICIAL_BIN": "/home/YOU/.local/opt/agy-acp-server-agy_acp_server_20260818_01_RC01/agy-acp-server-canary",
|
|
434
459
|
"AGY_ACP_ADMISSION_ENABLED": "true",
|
|
@@ -439,7 +464,8 @@ Paseo / Generic ACP 客户端
|
|
|
439
464
|
}
|
|
440
465
|
```
|
|
441
466
|
|
|
442
|
-
`command`
|
|
467
|
+
`command` 是 Paseo **拉起本代理** 的方式。`PASEO_AGY_ACP_OFFICIAL_BIN` 必须指向
|
|
468
|
+
本机已安装的内核。`command` 为 `node` 时,`args` 传
|
|
443
469
|
`["/path/to/paseo-agy-acp/dist/ACP Connector/main.js"]`。
|
|
444
470
|
Paseo 会给 provider 进程提供 `PASEO_AGENT_ID`。
|
|
445
471
|
|
|
@@ -452,17 +478,18 @@ Paseo 会给 provider 进程提供 `PASEO_AGENT_ID`。
|
|
|
452
478
|
~~~
|
|
453
479
|
Configure the Paseo daemon to add an ACP provider for Google Antigravity.
|
|
454
480
|
|
|
455
|
-
1.
|
|
456
|
-
2.
|
|
481
|
+
1. Confirm a local official Antigravity ACP kernel is installed (this package does not vendor it).
|
|
482
|
+
2. Read Paseo config ($PASEO_HOME/config.json or ~/.paseo/config.json).
|
|
483
|
+
3. Add or update providers.antigravity:
|
|
457
484
|
- type: "acp"
|
|
458
|
-
- command: ["npx", "-y", "paseo-agy-acp@2.
|
|
485
|
+
- command: ["npx", "-y", "paseo-agy-acp@2.3.0"] (spawns the proxy, not the Google kernel)
|
|
459
486
|
- env.PASEO_AGY_ACP_OFFICIAL_BIN: local official kernel wrapper (agy-acp-server-canary or agy_acp_server.par)
|
|
460
487
|
- env.AGY_ACP_ADMISSION_ENABLED: "true"
|
|
461
488
|
- env.AGY_ACP_STATE_DIR: absolute owner-only directory (mode 0700)
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
489
|
+
4. Prepare Admission state: npx -y --package=paseo-agy-acp@2.3.0 agy-acp-prepare-state "$AGY_ACP_STATE_DIR"
|
|
490
|
+
5. Login once: npx -y paseo-agy-acp@2.3.0 --login
|
|
491
|
+
6. Restart the Paseo daemon.
|
|
492
|
+
7. Verify: create a test agent with provider "antigravity", send a simple prompt.
|
|
466
493
|
~~~
|
|
467
494
|
|
|
468
495
|
## 验证
|
|
@@ -489,7 +516,7 @@ server、模式 `dangerously-skip-permissions` → 官方 `yolo`、小席位下
|
|
|
489
516
|
[开 Issue](https://github.com/tiezbro/paseo-agy-acp/issues),我们据此优化和修复。
|
|
490
517
|
- 官方 RC01 的 active cancel 在我们的 harness 里未确认;真实 503/配额未对
|
|
491
518
|
线上后端做诱导验证。
|
|
492
|
-
-
|
|
519
|
+
- 官方内核二进制必须本机已安装;本包装不会随包分发它。`npx` 只拉起代理。
|
|
493
520
|
- 在 `AGY_ACP_ADMISSION_ENABLED`、`AGY_ACP_STATE_DIR`、`PASEO_AGENT_ID` 都合法
|
|
494
521
|
之前,Admission 保持关闭。没有 agent id 的 discovery / `--login` 不会打开账本。
|
|
495
522
|
- 官方 ACP 没有 plan 模式;Paseo 的 `plan` 映射到 `default`。
|
|
@@ -503,6 +530,11 @@ env -u PASEO_AGENT_ID -u PASEO_HOME npm test
|
|
|
503
530
|
|
|
504
531
|
## 升级 / 回滚
|
|
505
532
|
|
|
533
|
+
若 Paseo `command` 走 npx,改 npm 版本钉(例如 `paseo-agy-acp@2.3.0`)并重启
|
|
534
|
+
daemon。这是打包安装的升级/回滚路径。
|
|
535
|
+
|
|
536
|
+
源码 checkout:
|
|
537
|
+
|
|
506
538
|
```bash
|
|
507
539
|
# 升级
|
|
508
540
|
git pull && npm ci && npm run build && npm test
|
|
@@ -511,9 +543,9 @@ git pull && npm ci && npm run build && npm test
|
|
|
511
543
|
git checkout <rev> && npm ci && npm run build && npm test
|
|
512
544
|
```
|
|
513
545
|
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
546
|
+
改 `command` 或内核路径后重启 daemon。Admission policy 变更(例如 3+1 → 8/8)
|
|
547
|
+
时,如果持久 fingerprint 会把新 policy 失败关闭,请换一个 **全新** 的
|
|
548
|
+
`AGY_ACP_STATE_DIR`。
|
|
517
549
|
|
|
518
550
|
## 权威文档(v2.0.0.0 closeout)
|
|
519
551
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare function injectPaseoContext(params: unknown, environment?: NodeJS.ProcessEnv): Promise<unknown>;
|
|
2
2
|
export declare function extractPromptText(params: unknown): string;
|
|
3
3
|
export declare function extractSessionId(params: unknown): string | undefined;
|
|
4
|
+
export declare function extractCwd(params: unknown): string | undefined;
|
|
@@ -49,4 +49,11 @@ export function extractSessionId(params) {
|
|
|
49
49
|
? params.session_id
|
|
50
50
|
: undefined;
|
|
51
51
|
}
|
|
52
|
+
export function extractCwd(params) {
|
|
53
|
+
if (!isRecord(params))
|
|
54
|
+
return undefined;
|
|
55
|
+
return typeof params.cwd === "string" && params.cwd.trim().length > 0
|
|
56
|
+
? params.cwd.trim()
|
|
57
|
+
: undefined;
|
|
58
|
+
}
|
|
52
59
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../ACP Connector/official-kernel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC5B,MAAM,iCAAiC,CAAC;AAEzC,SAAS,gBAAgB,CAAC,MAAe,EAAE,IAAY;IACrD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IACrD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,IAAI,OAAO,MAAM,EAAE,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAe,EACf,WAAW,GAAsB,OAAO,CAAC,GAAG;IAE5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QACtD,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACjG,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QACzC,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACrC,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,SAAS,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../ACP Connector/official-kernel/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,iCAAiC,EACjC,2BAA2B,EAC5B,MAAM,iCAAiC,CAAC;AAEzC,SAAS,gBAAgB,CAAC,MAAe,EAAE,IAAY;IACrD,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;IACrD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,GAAG,IAAI,OAAO,MAAM,EAAE,CAAC;IAC9D,OAAO,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAe,EACf,WAAW,GAAsB,OAAO,CAAC,GAAG;IAE5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,OAAO;QACL,GAAG,MAAM;QACT,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QACtD,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACjG,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAe;IAC9C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;QACzC,CAAC,CAAC,MAAM,CAAC,SAAS;QAClB,CAAC,CAAC,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACrC,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAe;IACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,OAAO,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACnE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;QACnB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { TurnClaim } from "../acp/session/turn-scheduler.js";
|
|
2
2
|
import { createOfficialAdmission, issueAdmittedOfficialPromptWrite } from "./admission-fence.js";
|
|
3
|
-
import { extractPromptText, extractSessionId, injectPaseoContext } from "./context.js";
|
|
3
|
+
import { extractCwd, extractPromptText, extractSessionId, injectPaseoContext } from "./context.js";
|
|
4
4
|
import { blankTurnError, sessionUpdateShowsVisibleOutput, shouldRejectBlankTurn } from "./errors.js";
|
|
5
5
|
import { overlayProductIdentity } from "./identity.js";
|
|
6
6
|
import { isJsonRpcFailure, isJsonRpcNotification, isJsonRpcRequest, isJsonRpcSuccess, jsonRpcError } from "./json-rpc.js";
|
|
7
7
|
import { rewriteMcpServers } from "./mcp-rewrite.js";
|
|
8
8
|
import { rewriteModeFields } from "./mode-map.js";
|
|
9
9
|
import { createNdjsonParser, encodeNdjson } from "./ndjson.js";
|
|
10
|
+
import { augmentAvailableCommands } from "./skill-commands.js";
|
|
10
11
|
const INITIALIZE_METHOD = "initialize";
|
|
11
12
|
const SESSION_NEW_METHOD = "session/new";
|
|
13
|
+
const SESSION_LOAD_METHOD = "session/load";
|
|
14
|
+
const SESSION_RESUME_METHOD = "session/resume";
|
|
12
15
|
const SESSION_PROMPT_METHOD = "session/prompt";
|
|
13
16
|
const SESSION_SET_MODE_METHOD = "session/set_mode";
|
|
14
17
|
const SESSION_SET_CONFIG_METHOD = "session/set_config_option";
|
|
@@ -21,8 +24,10 @@ export class OfficialKernelProxy {
|
|
|
21
24
|
#version;
|
|
22
25
|
#pending = new Map();
|
|
23
26
|
#claims = new Map();
|
|
27
|
+
#sessionCwds = new Map();
|
|
24
28
|
#env;
|
|
25
29
|
#admission;
|
|
30
|
+
#sessionNewTail = Promise.resolve();
|
|
26
31
|
#closed = false;
|
|
27
32
|
constructor(options) {
|
|
28
33
|
this.#child = options.child;
|
|
@@ -91,6 +96,16 @@ export class OfficialKernelProxy {
|
|
|
91
96
|
let params = request.params;
|
|
92
97
|
if (request.method === SESSION_NEW_METHOD) {
|
|
93
98
|
params = rewriteMcpServers(rewriteModeFields(params));
|
|
99
|
+
await this.#forwardSessionNew(request, params);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
else if (request.method === SESSION_LOAD_METHOD ||
|
|
103
|
+
request.method === SESSION_RESUME_METHOD) {
|
|
104
|
+
const sessionId = extractSessionId(params);
|
|
105
|
+
const cwd = extractCwd(params);
|
|
106
|
+
if (sessionId && cwd) {
|
|
107
|
+
this.#sessionCwds.set(sessionId, cwd);
|
|
108
|
+
}
|
|
94
109
|
}
|
|
95
110
|
else if (request.method === SESSION_SET_MODE_METHOD || request.method === SESSION_SET_CONFIG_METHOD) {
|
|
96
111
|
params = rewriteModeFields(params);
|
|
@@ -103,6 +118,23 @@ export class OfficialKernelProxy {
|
|
|
103
118
|
this.#track(request.id, request.method, params);
|
|
104
119
|
this.#writeChild({ ...request, jsonrpc: "2.0", params });
|
|
105
120
|
}
|
|
121
|
+
// Early session updates have no request id, so keep only one unbound cwd in flight.
|
|
122
|
+
async #forwardSessionNew(request, params) {
|
|
123
|
+
const previous = this.#sessionNewTail;
|
|
124
|
+
let release;
|
|
125
|
+
this.#sessionNewTail = new Promise((resolve) => {
|
|
126
|
+
release = resolve;
|
|
127
|
+
});
|
|
128
|
+
await previous;
|
|
129
|
+
try {
|
|
130
|
+
const response = this.#track(request.id, request.method, params);
|
|
131
|
+
this.#writeChild({ ...request, jsonrpc: "2.0", params });
|
|
132
|
+
await response;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
release();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
106
138
|
async #handlePrompt(request, params) {
|
|
107
139
|
const sessionId = extractSessionId(params);
|
|
108
140
|
const promptText = extractPromptText(params) || "prompt";
|
|
@@ -152,6 +184,7 @@ export class OfficialKernelProxy {
|
|
|
152
184
|
this.#pending.set(id, {
|
|
153
185
|
method,
|
|
154
186
|
sessionId: extractSessionId(params),
|
|
187
|
+
cwd: extractCwd(params),
|
|
155
188
|
sawVisibleOutput: false,
|
|
156
189
|
resolve
|
|
157
190
|
});
|
|
@@ -168,6 +201,30 @@ export class OfficialKernelProxy {
|
|
|
168
201
|
}
|
|
169
202
|
}
|
|
170
203
|
}
|
|
204
|
+
const params = message.params;
|
|
205
|
+
if (params?.update?.sessionUpdate === "available_commands_update") {
|
|
206
|
+
let cwd = sessionId ? this.#sessionCwds.get(sessionId) : undefined;
|
|
207
|
+
if (!cwd) {
|
|
208
|
+
const pendingSessionNews = Array.from(this.#pending.values()).filter((pending) => pending.method === SESSION_NEW_METHOD && pending.cwd !== undefined);
|
|
209
|
+
if (pendingSessionNews.length === 1) {
|
|
210
|
+
cwd = pendingSessionNews[0].cwd;
|
|
211
|
+
if (sessionId) {
|
|
212
|
+
this.#sessionCwds.set(sessionId, cwd);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
const augmented = augmentAvailableCommands(params.update.availableCommands, cwd);
|
|
217
|
+
message = {
|
|
218
|
+
...message,
|
|
219
|
+
params: {
|
|
220
|
+
...params,
|
|
221
|
+
update: {
|
|
222
|
+
...params.update,
|
|
223
|
+
availableCommands: augmented
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
171
228
|
this.#writeClient(message);
|
|
172
229
|
return;
|
|
173
230
|
}
|
|
@@ -182,6 +239,15 @@ export class OfficialKernelProxy {
|
|
|
182
239
|
if (pending.method === INITIALIZE_METHOD && isJsonRpcSuccess(message)) {
|
|
183
240
|
outbound = { ...message, result: overlayProductIdentity(message.result, this.#version) };
|
|
184
241
|
}
|
|
242
|
+
else if ((pending.method === SESSION_NEW_METHOD ||
|
|
243
|
+
pending.method === SESSION_LOAD_METHOD ||
|
|
244
|
+
pending.method === SESSION_RESUME_METHOD) &&
|
|
245
|
+
isJsonRpcSuccess(message)) {
|
|
246
|
+
const sessionId = extractSessionId(message.result) ?? pending.sessionId;
|
|
247
|
+
if (sessionId && pending.cwd) {
|
|
248
|
+
this.#sessionCwds.set(sessionId, pending.cwd);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
185
251
|
else if (pending.method === SESSION_PROMPT_METHOD &&
|
|
186
252
|
isJsonRpcSuccess(message) &&
|
|
187
253
|
shouldRejectBlankTurn(message.result, pending.sawVisibleOutput)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../ACP Connector/official-kernel/proxy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../../ACP Connector/official-kernel/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AvailableCommand {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function parseFrontmatter(content: string): {
|
|
6
|
+
name?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
userInvocable?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare function resolveSkillRoots(cwd?: string): string[];
|
|
11
|
+
export declare function discoverSkillCommands(cwd?: string): AvailableCommand[];
|
|
12
|
+
export declare function augmentAvailableCommands(existingCommands: AvailableCommand[] | undefined, cwd?: string): AvailableCommand[];
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
function parseYamlScalar(raw) {
|
|
5
|
+
const trimmed = raw.trim();
|
|
6
|
+
if (trimmed.length === 0)
|
|
7
|
+
return "";
|
|
8
|
+
if (trimmed.startsWith('"') && trimmed.endsWith('"') && trimmed.length >= 2) {
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(trimmed);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return trimmed
|
|
14
|
+
.slice(1, -1)
|
|
15
|
+
.replace(/\\"/g, '"')
|
|
16
|
+
.replace(/\\\\/g, "\\")
|
|
17
|
+
.replace(/\\n/g, "\n")
|
|
18
|
+
.replace(/\\r/g, "\r")
|
|
19
|
+
.replace(/\\t/g, "\t");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
if (trimmed.startsWith("'") && trimmed.endsWith("'") && trimmed.length >= 2) {
|
|
23
|
+
return trimmed.slice(1, -1).replace(/''/g, "'");
|
|
24
|
+
}
|
|
25
|
+
const commentIdx = trimmed.search(/\s+#/);
|
|
26
|
+
const withoutComment = commentIdx !== -1 ? trimmed.slice(0, commentIdx).trim() : trimmed;
|
|
27
|
+
return withoutComment;
|
|
28
|
+
}
|
|
29
|
+
function parseYamlBoolean(raw, defaultValue = true) {
|
|
30
|
+
if (raw === undefined)
|
|
31
|
+
return defaultValue;
|
|
32
|
+
const scalar = parseYamlScalar(raw).toLowerCase();
|
|
33
|
+
if (scalar === "false" || scalar === "no" || scalar === "off" || scalar === "0") {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
if (scalar === "true" || scalar === "yes" || scalar === "on" || scalar === "1") {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return defaultValue;
|
|
40
|
+
}
|
|
41
|
+
export function parseFrontmatter(content) {
|
|
42
|
+
if (!content.startsWith("---"))
|
|
43
|
+
return {};
|
|
44
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n(?:---|\.\.\.)(?:\r?\n|$)/);
|
|
45
|
+
if (!match)
|
|
46
|
+
return {};
|
|
47
|
+
const frontmatter = match[1];
|
|
48
|
+
const lines = frontmatter.split(/\r?\n/);
|
|
49
|
+
let name;
|
|
50
|
+
let description;
|
|
51
|
+
let userInvocable;
|
|
52
|
+
for (let i = 0; i < lines.length; i++) {
|
|
53
|
+
const line = lines[i];
|
|
54
|
+
const nameMatch = line.match(/^name:\s*(.*)$/);
|
|
55
|
+
if (nameMatch) {
|
|
56
|
+
name = parseYamlScalar(nameMatch[1]);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const invocableMatch = line.match(/^(?:user-invocable|user_invocable):\s*(.*)$/);
|
|
60
|
+
if (invocableMatch) {
|
|
61
|
+
userInvocable = parseYamlBoolean(invocableMatch[1], true);
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const descMatch = line.match(/^description:\s*(.*)$/);
|
|
65
|
+
if (descMatch) {
|
|
66
|
+
const rest = descMatch[1].trim();
|
|
67
|
+
if (rest === ">" || rest === ">-" || rest === "|" || rest === "|-") {
|
|
68
|
+
const isFolded = rest.startsWith(">");
|
|
69
|
+
const blockLines = [];
|
|
70
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
71
|
+
if (/^\s+/.test(lines[j]) || lines[j].trim().length === 0) {
|
|
72
|
+
blockLines.push(lines[j].trim());
|
|
73
|
+
i = j;
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (isFolded) {
|
|
80
|
+
description = blockLines.filter((l) => l.length > 0).join(" ");
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
description = blockLines.join("\n").trim();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
description = parseYamlScalar(rest);
|
|
88
|
+
}
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return { name, description, userInvocable };
|
|
93
|
+
}
|
|
94
|
+
export function resolveSkillRoots(cwd) {
|
|
95
|
+
const roots = new Set();
|
|
96
|
+
const home = homedir();
|
|
97
|
+
const readSkillsJson = (filePath, baseDir) => {
|
|
98
|
+
if (!existsSync(filePath))
|
|
99
|
+
return;
|
|
100
|
+
try {
|
|
101
|
+
const parsed = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
102
|
+
if (Array.isArray(parsed.entries)) {
|
|
103
|
+
for (const entry of parsed.entries) {
|
|
104
|
+
if (entry && typeof entry.path === "string" && entry.path.trim().length > 0) {
|
|
105
|
+
const trimmed = entry.path.trim();
|
|
106
|
+
let resolved;
|
|
107
|
+
if (trimmed.startsWith("/")) {
|
|
108
|
+
resolved = trimmed;
|
|
109
|
+
}
|
|
110
|
+
else if (trimmed.startsWith("~/")) {
|
|
111
|
+
resolved = path.join(home, trimmed.slice(2));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
resolved = path.resolve(baseDir, trimmed);
|
|
115
|
+
}
|
|
116
|
+
if (existsSync(resolved)) {
|
|
117
|
+
roots.add(resolved);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Ignore JSON parse errors
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
// 1. Workspace declared configs in skills.json
|
|
128
|
+
if (cwd && existsSync(cwd)) {
|
|
129
|
+
readSkillsJson(path.join(cwd, ".agents/skills.json"), cwd);
|
|
130
|
+
readSkillsJson(path.join(cwd, "skills.json"), cwd);
|
|
131
|
+
readSkillsJson(path.join(cwd, ".codex/skills.json"), cwd);
|
|
132
|
+
readSkillsJson(path.join(cwd, ".gemini/config/skills.json"), cwd);
|
|
133
|
+
}
|
|
134
|
+
// 2. Workspace default skill directories
|
|
135
|
+
if (cwd && existsSync(cwd)) {
|
|
136
|
+
const wsDefaults = [
|
|
137
|
+
path.join(cwd, ".agents/skills"),
|
|
138
|
+
path.join(cwd, ".codex/skills"),
|
|
139
|
+
path.join(cwd, "skills")
|
|
140
|
+
];
|
|
141
|
+
for (const dir of wsDefaults) {
|
|
142
|
+
if (existsSync(dir))
|
|
143
|
+
roots.add(dir);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// 3. Global declared configs in skills.json
|
|
147
|
+
readSkillsJson(path.join(home, ".gemini/config/skills.json"), home);
|
|
148
|
+
readSkillsJson(path.join(home, ".agents/skills.json"), home);
|
|
149
|
+
readSkillsJson(path.join(home, ".codex/skills.json"), home);
|
|
150
|
+
// 4. Global default skill directories
|
|
151
|
+
const globalDefaults = [
|
|
152
|
+
path.join(home, ".gemini/config/skills"),
|
|
153
|
+
path.join(home, ".agents/skills"),
|
|
154
|
+
path.join(home, ".codex/skills")
|
|
155
|
+
];
|
|
156
|
+
for (const dir of globalDefaults) {
|
|
157
|
+
if (existsSync(dir))
|
|
158
|
+
roots.add(dir);
|
|
159
|
+
}
|
|
160
|
+
return Array.from(roots);
|
|
161
|
+
}
|
|
162
|
+
export function discoverSkillCommands(cwd) {
|
|
163
|
+
const roots = resolveSkillRoots(cwd);
|
|
164
|
+
const commands = new Map();
|
|
165
|
+
for (const root of roots) {
|
|
166
|
+
try {
|
|
167
|
+
const entries = readdirSync(root, { withFileTypes: true });
|
|
168
|
+
for (const entry of entries) {
|
|
169
|
+
if (entry.isDirectory() || entry.isSymbolicLink()) {
|
|
170
|
+
const skillDir = path.join(root, entry.name);
|
|
171
|
+
const skillFile = path.join(skillDir, "SKILL.md");
|
|
172
|
+
if (existsSync(skillFile)) {
|
|
173
|
+
try {
|
|
174
|
+
const content = readFileSync(skillFile, "utf-8");
|
|
175
|
+
const { name, description, userInvocable } = parseFrontmatter(content);
|
|
176
|
+
if (userInvocable === false) {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
const commandName = name && name.length > 0 ? name : entry.name;
|
|
180
|
+
if (!commands.has(commandName)) {
|
|
181
|
+
commands.set(commandName, {
|
|
182
|
+
name: commandName,
|
|
183
|
+
description: description && description.length > 0
|
|
184
|
+
? description
|
|
185
|
+
: `Skill: ${commandName}`
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// Ignore file read errors
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Ignore readdir errors
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return Array.from(commands.values());
|
|
201
|
+
}
|
|
202
|
+
export function augmentAvailableCommands(existingCommands, cwd) {
|
|
203
|
+
const result = new Map();
|
|
204
|
+
if (Array.isArray(existingCommands)) {
|
|
205
|
+
for (const cmd of existingCommands) {
|
|
206
|
+
if (cmd && typeof cmd.name === "string") {
|
|
207
|
+
result.set(cmd.name, cmd);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const skills = discoverSkillCommands(cwd);
|
|
212
|
+
for (const skill of skills) {
|
|
213
|
+
if (!result.has(skill.name)) {
|
|
214
|
+
result.set(skill.name, skill);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return Array.from(result.values());
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=skill-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-commands.js","sourceRoot":"","sources":["../../../ACP Connector/official-kernel/skill-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,SAAS,eAAe,CAAC,GAAW;IAClC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5E,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,OAAO;iBACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACZ,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;iBACtB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;iBACrB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;iBACrB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5E,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACzF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAuB,EAAE,YAAY,GAAG,IAAI;IACpE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IAC3C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAChF,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAK9C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACjF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,IAAwB,CAAC;IAC7B,IAAI,WAA+B,CAAC;IACpC,IAAI,aAAkC,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjF,IAAI,cAAc,EAAE,CAAC;YACnB,aAAa,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACtD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,UAAU,GAAa,EAAE,CAAC;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1D,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBACjC,CAAC,GAAG,CAAC,CAAC;oBACR,CAAC;yBAAM,CAAC;wBACN,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,EAAE,CAAC;oBACb,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACjE,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;YACD,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,OAAe,EAAQ,EAAE;QACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAExD,CAAC;YACF,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnC,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBAClC,IAAI,QAAgB,CAAC;wBACrB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;4BAC5B,QAAQ,GAAG,OAAO,CAAC;wBACrB,CAAC;6BAAM,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;4BACpC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC/C,CAAC;6BAAM,CAAC;4BACN,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;wBAC5C,CAAC;wBACD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACzB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,2BAA2B;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,+CAA+C;IAC/C,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1D,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,CAAC,EAAE,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,yCAAyC;IACzC,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG;YACjB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;SACzB,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,GAAG,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,4BAA4B,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7D,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,IAAI,CAAC,CAAC;IAE5D,sCAAsC;IACtC,MAAM,cAAc,GAAG;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;KACjC,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IAErD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;oBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAClD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC1B,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;4BACjD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;4BACvE,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;gCAC5B,SAAS;4BACX,CAAC;4BACD,MAAM,WAAW,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;4BAChE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gCAC/B,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE;oCACxB,IAAI,EAAE,WAAW;oCACjB,WAAW,EACT,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;wCACnC,CAAC,CAAC,WAAW;wCACb,CAAC,CAAC,UAAU,WAAW,EAAE;iCAC9B,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;wBAAC,MAAM,CAAC;4BACP,0BAA0B;wBAC5B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,gBAAgD,EAChD,GAAY;IAEZ,MAAM,MAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEnD,IAAI,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACnC,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACrC,CAAC"}
|
package/package.json
CHANGED