dsh-agy-link 0.4.59 → 0.4.66
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 +221 -2
- package/README.md +80 -2
- package/assets/icon.svg +54 -0
- package/dist/assets/icon.svg +54 -0
- package/dist/client.js +391 -151
- package/dist/index.js +744 -147
- package/docs/KNOWN-GAPS.md +52 -10
- package/docs/assets/context-metering.png +0 -0
- package/docs/assets/dashboard.png +0 -0
- package/docs/assets/token-usage.png +0 -0
- package/icon.svg +54 -0
- package/locale/en.json +6 -0
- package/locale/es.json +6 -0
- package/locale/pt-BR.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +8 -2
package/docs/KNOWN-GAPS.md
CHANGED
|
@@ -8,17 +8,59 @@ Deliberate v1 boundaries and upstream-behavior notes.
|
|
|
8
8
|
slot over (issue #45)** — agy on Windows resolves its Google credential from
|
|
9
9
|
ONE process-global Credential Manager slot `gemini:antigravity`
|
|
10
10
|
(go-keyring); `HOME`/`USERPROFILE`/`GEMINI_CLI_HOME` move files only. Rather
|
|
11
|
-
than pretending the pool is isolated, the plugin
|
|
12
|
-
|
|
11
|
+
than pretending the pool is isolated, the plugin owns the slot: the primary
|
|
12
|
+
credential is kept in a durable, identity-verified store
|
|
13
13
|
(`agy-accounts/.primary-credential.json`), and every run acquires the slot
|
|
14
|
-
through `acquireCredentialSlot
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
through `acquireCredentialSlot`.
|
|
15
|
+
- **Same-identity runs are parallel (v0.4.60).** The installed identity is
|
|
16
|
+
reference-counted: the first run on an account performs the handoff and
|
|
17
|
+
keeps the mutex, later runs on the same grant join as fast leases (each
|
|
18
|
+
verifies the slot still carries that grant), and runs already QUEUED for
|
|
19
|
+
the slot join too — they poll every 100ms and take a lease as soon as their
|
|
20
|
+
own grant is installed, so a backlog drains in parallel. The LAST holder
|
|
21
|
+
persists a rotated access token and restores the primary. Only identity
|
|
22
|
+
SWITCHES serialize — a switcher registers its claim BEFORE queueing, and
|
|
23
|
+
new same-identity joins are refused while a different identity waits.
|
|
24
|
+
- `SlotUnavailableError` aborts a run instead of letting it silently spend
|
|
25
|
+
the wrong account when the primary cannot be verified.
|
|
26
|
+
- Remaining boundary: the mutex is **per process**, so two DSH hosts (web +
|
|
27
|
+
headless) running agy at the same moment can still interleave slot writes;
|
|
28
|
+
avoid driving two hosts at once.
|
|
29
|
+
|
|
30
|
+
## Credential injection: what agy actually supports (verified 2026-10-17)
|
|
31
|
+
|
|
32
|
+
The clean fix for the Windows boundary above would be per-process credential
|
|
33
|
+
injection (each account's HOME carries its own credential, no global slot, no
|
|
34
|
+
mutex, identical on macOS/Linux/Windows). It is NOT available in the current
|
|
35
|
+
agy build — measured, not assumed:
|
|
36
|
+
|
|
37
|
+
- **The per-HOME token file is a BACKUP, not the source.** A fresh isolated
|
|
38
|
+
HOME containing a deliberately bogus
|
|
39
|
+
`.gemini/antigravity-cli/antigravity-oauth-token` still authenticated from the
|
|
40
|
+
machine keyring and completed a prompt (exit 0, `OK`), and the bogus file was
|
|
41
|
+
left untouched. With the keyring present, writing per-account token files
|
|
42
|
+
does not isolate identities. (`fileTokenStorage` exists but is only a
|
|
43
|
+
fallback when keyring save/load times out or is unavailable.)
|
|
44
|
+
- **No credential CLI flag**: `agy --help` exposes no `--api-key` /
|
|
45
|
+
`--credential*` / `--token*` option.
|
|
46
|
+
- **Documented env routes are different auth products**: `AGY_ADC_AUTH`
|
|
47
|
+
(Application Default Credentials / Agent Platform), and
|
|
48
|
+
`GEMINI_API_KEY` + `"modelProvider": "gemini"` in `settings.json` (the Gemini
|
|
49
|
+
API, not Antigravity subscription quota).
|
|
50
|
+
- `AGY_ACCOUNT` selects among *plugin/manager* accounts, not CLI sign-ins.
|
|
51
|
+
|
|
52
|
+
Therefore a true fix must come from agy itself, either of:
|
|
53
|
+
|
|
54
|
+
1. **Namespace the keyring entry by HOME** — derive the go-keyring
|
|
55
|
+
service/user from the resolved home (e.g. `gemini:antigravity:<hash>`), so
|
|
56
|
+
an isolated HOME really is an isolated credential space. Needs a migration
|
|
57
|
+
path for the existing single entry.
|
|
58
|
+
2. **Accept a per-process credential** — a `--credential-file` flag (or a
|
|
59
|
+
documented env var) that points at the account's token document, bypassing
|
|
60
|
+
the keyring entirely.
|
|
61
|
+
|
|
62
|
+
Either one retires `credential-slot.ts` and the dispatch queue; until then the
|
|
63
|
+
reference-counted slot is the strongest isolation the plugin can provide.
|
|
22
64
|
|
|
23
65
|
## Not forwarded to agy
|
|
24
66
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/icon.svg
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<!-- Core Orb Gradient -->
|
|
4
|
+
<linearGradient id="agy-orb-gradient" x1="12" y1="11" x2="25" y2="25" gradientUnits="userSpaceOnUse">
|
|
5
|
+
<stop offset="0%" stop-color="#38BDF8"/>
|
|
6
|
+
<stop offset="45%" stop-color="#6366F1"/>
|
|
7
|
+
<stop offset="85%" stop-color="#9333EA"/>
|
|
8
|
+
<stop offset="100%" stop-color="#C026D3"/>
|
|
9
|
+
</linearGradient>
|
|
10
|
+
|
|
11
|
+
<!-- Front Orbit Ring Gradient (Glowing Vibrant Gradient) -->
|
|
12
|
+
<linearGradient id="agy-ring-front" x1="6" y1="24" x2="31" y2="12" gradientUnits="userSpaceOnUse">
|
|
13
|
+
<stop offset="0%" stop-color="#00D2FF"/>
|
|
14
|
+
<stop offset="40%" stop-color="#38BDF8"/>
|
|
15
|
+
<stop offset="70%" stop-color="#818CF8"/>
|
|
16
|
+
<stop offset="100%" stop-color="#F43F5E"/>
|
|
17
|
+
</linearGradient>
|
|
18
|
+
|
|
19
|
+
<!-- Back Orbit Ring Gradient (Subtle Occluded Depth) -->
|
|
20
|
+
<linearGradient id="agy-ring-back" x1="7" y1="12" x2="29" y2="24" gradientUnits="userSpaceOnUse">
|
|
21
|
+
<stop offset="0%" stop-color="#38BDF8" stop-opacity="0.35"/>
|
|
22
|
+
<stop offset="100%" stop-color="#A855F7" stop-opacity="0.35"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
|
|
25
|
+
<!-- Specular Highlight Curve -->
|
|
26
|
+
<linearGradient id="agy-highlight-grad" x1="14" y1="12" x2="19" y2="18" gradientUnits="userSpaceOnUse">
|
|
27
|
+
<stop offset="0%" stop-color="#FFFFFF" stop-opacity="0.6"/>
|
|
28
|
+
<stop offset="100%" stop-color="#FFFFFF" stop-opacity="0.05"/>
|
|
29
|
+
</linearGradient>
|
|
30
|
+
</defs>
|
|
31
|
+
|
|
32
|
+
<!-- Back Segment of Orbit Ring (passes behind central sphere) -->
|
|
33
|
+
<path d="M 6.8 14.2 C 8.2 9.6 17.8 7.2 26.2 10.8 C 28.0 11.6 29.3 12.6 30.2 13.8"
|
|
34
|
+
stroke="url(#agy-ring-back)" stroke-width="2.4" stroke-linecap="round"/>
|
|
35
|
+
|
|
36
|
+
<!-- Central Antigravity Sphere -->
|
|
37
|
+
<circle cx="18" cy="18" r="7.5" fill="url(#agy-orb-gradient)"/>
|
|
38
|
+
|
|
39
|
+
<!-- Elegant Crescent Specular Highlight (adds glass/liquid depth) -->
|
|
40
|
+
<path d="M 13.2 15.2 A 5.5 5.5 0 0 1 21.0 13.0 A 6.2 6.2 0 0 0 14.0 18.0 Z"
|
|
41
|
+
fill="url(#agy-highlight-grad)"/>
|
|
42
|
+
|
|
43
|
+
<!-- Front Segment of Orbit Ring (sweeps in front with vibrant glow) -->
|
|
44
|
+
<path d="M 30.2 13.8 C 31.4 18.2 21.8 26.2 12.8 24.2 C 9.4 23.4 7.4 21.8 6.6 19.6"
|
|
45
|
+
stroke="url(#agy-ring-front)" stroke-width="2.6" stroke-linecap="round"/>
|
|
46
|
+
|
|
47
|
+
<!-- Left Satellite Node (DSH Cyan Anchor) -->
|
|
48
|
+
<circle cx="8.2" cy="18.2" r="2.2" fill="#00D2FF"/>
|
|
49
|
+
<circle cx="8.2" cy="18.2" r="1.0" fill="#FFFFFF"/>
|
|
50
|
+
|
|
51
|
+
<!-- Right Satellite Node (Antigravity Magenta Particle) -->
|
|
52
|
+
<circle cx="28.4" cy="20.4" r="1.8" fill="#F43F5E"/>
|
|
53
|
+
<circle cx="28.4" cy="20.4" r="0.8" fill="#FFFFFF"/>
|
|
54
|
+
</svg>
|
package/locale/en.json
ADDED
package/locale/es.json
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"title": "Antigravity Link",
|
|
4
|
+
"description": "Conecta las suscripciones Gemini / Claude / GPT-OSS de Google Antigravity (agy CLI) en DSH: pool multiejecución, panel de cuotas en vivo, razonamiento, actividad de herramientas y OAuth de Google en la GUI."
|
|
5
|
+
}
|
|
6
|
+
}
|
package/locale/zh.json
ADDED
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-agy-link",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.66",
|
|
4
4
|
"description": "Google Antigravity (agy CLI) models for DeepSeek Harness — stream Gemini/Claude/GPT-OSS subscriptions into DSH with thinking, tool activity, token usage and in-GUI Google OAuth login.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"icon": "./assets/icon.svg",
|
|
7
8
|
"keywords": [
|
|
8
9
|
"dsh-plugin",
|
|
9
10
|
"dsh",
|
|
@@ -21,7 +22,10 @@
|
|
|
21
22
|
},
|
|
22
23
|
"./client": "./dist/client.js",
|
|
23
24
|
"./cordis.patch.yml": "./cordis.patch.yml",
|
|
24
|
-
"./package.json": "./package.json"
|
|
25
|
+
"./package.json": "./package.json",
|
|
26
|
+
"./locale/*.json": "./locale/*.json",
|
|
27
|
+
"./icon": "./assets/icon.svg",
|
|
28
|
+
"./icon.svg": "./icon.svg"
|
|
25
29
|
},
|
|
26
30
|
"dependencies": {
|
|
27
31
|
"qrcode": "^1.5.4"
|
|
@@ -81,6 +85,8 @@
|
|
|
81
85
|
"files": [
|
|
82
86
|
"dist",
|
|
83
87
|
"assets",
|
|
88
|
+
"locale",
|
|
89
|
+
"icon.svg",
|
|
84
90
|
"cordis.patch.yml",
|
|
85
91
|
"README.md",
|
|
86
92
|
"LICENSE",
|