dsh-agy-link 0.4.44 → 0.4.46
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 +92 -0
- package/README.md +1 -0
- package/dist/client.js +465 -132
- package/dist/index.js +1321 -327
- package/docs/KNOWN-GAPS.md +16 -0
- package/docs/README.en.md +1 -0
- package/docs/README.es.md +1 -0
- package/docs/README.pt-BR.md +1 -0
- package/docs/adr-012-account-pool.md +6 -2
- package/package.json +1 -1
package/docs/KNOWN-GAPS.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
Deliberate v1 boundaries and upstream-behavior notes.
|
|
4
4
|
|
|
5
|
+
## Platform limits
|
|
6
|
+
|
|
7
|
+
- **Windows: pool accounts cannot isolate credentials (issue #45)** — agy on
|
|
8
|
+
Windows stores its login in the system-wide Credential Manager slot
|
|
9
|
+
`gemini:antigravity` (go-keyring). `HOME`/`USERPROFILE`/`GEMINI_CLI_HOME`
|
|
10
|
+
isolation moves files only, so every isolated pool account still
|
|
11
|
+
authenticates — and bills — as the system login: round-robin rotates
|
|
12
|
+
workspaces, not credentials. The plugin surfaces
|
|
13
|
+
`credentialIsolationLimited` in `/plugins/agy-link/status` (rendered as a
|
|
14
|
+
warning banner in the settings panel) and logs once per isolated account
|
|
15
|
+
when it is selected. A real fix needs agy to namespace its keyring per
|
|
16
|
+
HOME or to fall back to the per-HOME token file when the keyring slot is
|
|
17
|
+
empty; swapping the shared slot via `CredWrite` around each spawn is not
|
|
18
|
+
implemented because concurrent runs (`maxConcurrent > 1`) would overwrite
|
|
19
|
+
each other's credential mid-run.
|
|
20
|
+
|
|
5
21
|
## Not forwarded to agy
|
|
6
22
|
|
|
7
23
|
- **Images as true multimodal blocks** - agy print mode (`-p`) has no image
|
package/docs/README.en.md
CHANGED
|
@@ -52,6 +52,7 @@ In DSH, click the `AGY (n)` badge and choose **Add Account** to complete Google
|
|
|
52
52
|
| `defaultModel` | `DSH_AGY_DEFAULT_MODEL` | agy default | Default model slug |
|
|
53
53
|
| `defaultEffort` | `DSH_AGY_DEFAULT_EFFORT` | model default | `low`, `medium`, or `high` |
|
|
54
54
|
| `timeoutMs` | `DSH_AGY_TIMEOUT_MS` | `600000` | Activity watchdog timeout in ms |
|
|
55
|
+
| `longToolIdleMinutes` | `DSH_AGY_LONG_TOOL_IDLE_MINUTES` | `240` | Idle budget (minutes) while an agy tool step is still open; `0` = keep `timeoutMs` so a wedged tool fails fast |
|
|
55
56
|
| `workspaceRoot` | `DSH_AGY_WORKSPACE_ROOT` | session cwd | Workspace root |
|
|
56
57
|
|
|
57
58
|
## `/agy` commands
|
package/docs/README.es.md
CHANGED
|
@@ -52,6 +52,7 @@ En DSH, haga clic en la insignia `AGY (n)` y seleccione **Add Account** para com
|
|
|
52
52
|
| `defaultModel` | `DSH_AGY_DEFAULT_MODEL` | predeterminado de agy | Slug del modelo predeterminado |
|
|
53
53
|
| `defaultEffort` | `DSH_AGY_DEFAULT_EFFORT` | predeterminado del modelo | `low`, `medium` o `high` |
|
|
54
54
|
| `timeoutMs` | `DSH_AGY_TIMEOUT_MS` | `600000` | Timeout del watchdog en ms |
|
|
55
|
+
| `longToolIdleMinutes` | `DSH_AGY_LONG_TOOL_IDLE_MINUTES` | `240` | Presupuesto de inactividad (minutos) mientras un paso de herramienta sigue abierto; `0` = mantener `timeoutMs` |
|
|
55
56
|
| `workspaceRoot` | `DSH_AGY_WORKSPACE_ROOT` | cwd de la sesión | Raíz del workspace |
|
|
56
57
|
|
|
57
58
|
## Comandos `/agy`
|
package/docs/README.pt-BR.md
CHANGED
|
@@ -52,6 +52,7 @@ No DSH, clique no selo `AGY (n)` e selecione **Add Account** para concluir o log
|
|
|
52
52
|
| `defaultModel` | `DSH_AGY_DEFAULT_MODEL` | padrão do agy | Slug do modelo padrão |
|
|
53
53
|
| `defaultEffort` | `DSH_AGY_DEFAULT_EFFORT` | padrão do modelo | `low`, `medium` ou `high` |
|
|
54
54
|
| `timeoutMs` | `DSH_AGY_TIMEOUT_MS` | `600000` | Timeout do watchdog, em ms |
|
|
55
|
+
| `longToolIdleMinutes` | `DSH_AGY_LONG_TOOL_IDLE_MINUTES` | `240` | Orçamento de inatividade (minutos) enquanto um passo de ferramenta está aberto; `0` = manter `timeoutMs` |
|
|
55
56
|
| `workspaceRoot` | `DSH_AGY_WORKSPACE_ROOT` | cwd da sessão | Raiz do workspace |
|
|
56
57
|
|
|
57
58
|
## Comandos `/agy`
|
|
@@ -37,12 +37,16 @@ Spawning agy for Account $X$ simply injects `HOME=/path/to/~/.dsh/agy-accounts/a
|
|
|
37
37
|
### 2. Sticky Sequential Drain Strategy (按模型家族顺次耗尽)
|
|
38
38
|
- **Family-Scoped Cooldown**: Quota is tracked per model family (`google`, `anthropic`, `openai`). If Account A hits 429 on Claude 4.6, only Account A's `anthropic` family is marked in cooldown. Account A can still serve Gemini 3.7 Flash requests.
|
|
39
39
|
- **Sticky Affinity**: Requests stick to the first healthy account (e.g., Account A) to maximize conversation continuity and token caching.
|
|
40
|
-
- **Transparent Fallback**: When
|
|
40
|
+
- **Transparent Fallback**: When a request on Account A is refused for an account-scoped reason (429 / quota, region eligibility, transport-flavoured auth, soft capacity), the adapter records the cooldown or rotates the sticky pointer, and the SAME step continues on Account B — either through DSH's automatic retry (the first-span case) or by discarding the dead recording and re-assembling on the next account (the post-tool case). The user experiences no interruption and never resends.
|
|
41
|
+
- Account failover is bounded by the pool: DSH's retry budget is `min(enabled accounts - 1, 2)` retries, and the post-tool failover allows at most `enabled accounts - 1` re-spawns per session inside a 2-minute window. A deterministic (request-level) failure is never failed over, so a broken request cannot loop through the pool re-running its tools.
|
|
42
|
+
- A genuine sign-out (`AUTH`) is retryable only when the pool has another account that may still be signed in; the failed account is flagged `authRequired` and leaves rotation.
|
|
41
43
|
|
|
42
44
|
### 3. Cooldown & Reset Handling
|
|
43
45
|
- If the error contains a server reset time (or `Retry-After`), cooldown is set to `Date.now() + resetMs`.
|
|
44
|
-
- Default cooldown window is
|
|
46
|
+
- Default cooldown window is 15 minutes (`defaultCooldownMs`, tiered up to 60 minutes on consecutive 429s).
|
|
45
47
|
- Cooldown expires automatically; when Account A recovers, it resumes primary position.
|
|
48
|
+
- Soft capacity refusals ("model overloaded" / high traffic) NEVER set a cooldown: nothing was spent. They rotate the pointer and are retryable anyway, so an idle account can still serve the turn.
|
|
49
|
+
- "All accounts unavailable" reports the real state (N in cooldown, N signed out) with the earliest availability, which includes quota-window resets and not just cooldowns; a reset that is ≤ 20s away is waited out instead of failing the turn.
|
|
46
50
|
|
|
47
51
|
### 4. Optional Per-Account Proxy (防关联支持)
|
|
48
52
|
Each account can optionally specify a dedicated proxy URL (`socks5://...` or `http://...`). When set, `ALL_PROXY` / `HTTPS_PROXY` / `HTTP_PROXY` are scoped exclusively to that account's child process. If unconfigured, it inherits the global host environment proxy.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-agy-link",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.46",
|
|
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",
|