dsh-agy-link 0.4.67 → 0.4.70
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 +124 -0
- package/dist/client.js +217 -43
- package/dist/index.js +820 -117
- package/docs/KNOWN-GAPS.md +40 -5
- package/package.json +2 -1
package/docs/KNOWN-GAPS.md
CHANGED
|
@@ -21,6 +21,19 @@ Deliberate v1 boundaries and upstream-behavior notes.
|
|
|
21
21
|
persists a rotated access token and restores the primary. Only identity
|
|
22
22
|
SWITCHES serialize — a switcher registers its claim BEFORE queueing, and
|
|
23
23
|
new same-identity joins are refused while a different identity waits.
|
|
24
|
+
- **The slot is held only until agy has READ it (v0.4.68).** Measured on agy
|
|
25
|
+
1.4.3 with a live 14-minute run: print mode resolves its credential once at
|
|
26
|
+
startup (`printmode.go:403 "not authenticated, trying silent auth"` →
|
|
27
|
+
`:405 "silent auth succeeded"` at +3.2s) and performs zero further
|
|
28
|
+
token/auth work for the rest of the run. The adapter therefore arms
|
|
29
|
+
`armSlotHandoff` before the spawn and releases the lease on the child's
|
|
30
|
+
FIRST output line (45s ceiling for a slow startup) instead of holding the
|
|
31
|
+
machine-wide slot for the whole run. Different accounts now overlap: the
|
|
32
|
+
2026-10-22 design parked two sessions for 15 minutes behind another
|
|
33
|
+
project's 14-minute run; the exclusive window is now a few seconds.
|
|
34
|
+
Residual exposure (unchanged in kind, now diagnosable): a mid-run 401 that
|
|
35
|
+
forces a re-auth would read whatever identity is installed at that moment —
|
|
36
|
+
the hand-off logs when it fires so that case is visible instead of silent.
|
|
24
37
|
- `SlotUnavailableError` aborts a run instead of letting it silently spend
|
|
25
38
|
the wrong account when the primary cannot be verified.
|
|
26
39
|
- Remaining boundary: the mutex is **per process**, so two DSH hosts (web +
|
|
@@ -34,15 +47,37 @@ injection (each account's HOME carries its own credential, no global slot, no
|
|
|
34
47
|
mutex, identical on macOS/Linux/Windows). It is NOT available in the current
|
|
35
48
|
agy build — measured, not assumed:
|
|
36
49
|
|
|
37
|
-
- **The per-HOME token file is a
|
|
38
|
-
|
|
50
|
+
- **The per-HOME token file is a FALLBACK, not the source (re-measured
|
|
51
|
+
2026-10-23).** With an entry in the keyring the file is ignored: a fresh
|
|
52
|
+
isolated HOME containing a deliberately bogus
|
|
39
53
|
`.gemini/antigravity-cli/antigravity-oauth-token` still authenticated from the
|
|
40
54
|
machine keyring and completed a prompt (exit 0, `OK`), and the bogus file was
|
|
41
|
-
left untouched.
|
|
42
|
-
|
|
43
|
-
|
|
55
|
+
left untouched.
|
|
56
|
+
- **But with the keyring entry ABSENT, agy DOES read the per-HOME file.**
|
|
57
|
+
Probe: delete `gemini:antigravity`, isolate a HOME whose token file holds
|
|
58
|
+
`ya29.BOGUS_FROM_HOME_FILE`, run a prompt → `Eligibility check failed:
|
|
59
|
+
UNAUTHENTICATED (code 401)`. The bogus file was the only credential in play,
|
|
60
|
+
so the load path really did come from the file.
|
|
61
|
+
- That is *not* enough for a lock-free design, because the keyring is
|
|
62
|
+
keyring-first on the SAVE side too (`Failed to save token to keyring,
|
|
63
|
+
falling back to file` — the file is only written when the keyring write
|
|
64
|
+
fails). Any successful run therefore repopulates the single global entry,
|
|
65
|
+
and the next spawn on a different account would inherit it. (Inferred from
|
|
66
|
+
the binary's strings; not yet reproduced with a live token save.)
|
|
67
|
+
- Net: per-account credential isolation is read-path only. The machine-wide
|
|
68
|
+
entry still needs an owner, so identity SWITCHES stay serialized — but only
|
|
69
|
+
until the child has read the credential (see above), not for the whole run.
|
|
44
70
|
- **No credential CLI flag**: `agy --help` exposes no `--api-key` /
|
|
45
71
|
`--credential*` / `--token*` option.
|
|
72
|
+
- **`JETSKI_OAUTH_TOKEN` exists in the binary but is IGNORED (re-measured
|
|
73
|
+
2026-10-22).** `agy.exe` contains the string pair
|
|
74
|
+
`JETSKI_OAUTH_TOKEN` + `Using OAuth token from environment variable`, so it
|
|
75
|
+
looked like the per-process injection route. Probing it directly: a brand-new
|
|
76
|
+
isolated HOME with `JETSKI_OAUTH_TOKEN=bogus-token-should-fail` still
|
|
77
|
+
completed a prompt (`exit 0`, `PROBE_OK`) — the variable is not consulted on
|
|
78
|
+
this build (1.4.3), and with no per-HOME token file either, the credential
|
|
79
|
+
could only have come from the machine keyring. The string belongs to another
|
|
80
|
+
auth product in the same binary.
|
|
46
81
|
- **Documented env routes are different auth products**: `AGY_ADC_AUTH`
|
|
47
82
|
(Application Default Credentials / Agent Platform), and
|
|
48
83
|
`GEMINI_API_KEY` + `"modelProvider": "gemini"` in `settings.json` (the Gemini
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-agy-link",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.70",
|
|
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",
|
|
@@ -97,6 +97,7 @@
|
|
|
97
97
|
"build": "tsdown",
|
|
98
98
|
"check": "tsc --noEmit",
|
|
99
99
|
"test": "node --experimental-transform-types --test --test-concurrency=1 \"test/**/*.test.ts\"",
|
|
100
|
+
"test:fast": "node scripts/fast-test.mjs",
|
|
100
101
|
"prepare": "npm run build",
|
|
101
102
|
"prepack": "npm run build"
|
|
102
103
|
},
|