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.
@@ -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`
@@ -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 an in-flight request on Account A receives 429 / quota exceeded, the adapter records cooldown on Account A for that family and immediately transparently retries on Account B in the same streaming span. The user experiences zero interruption.
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 10 minutes (tiered up to 60 minutes on consecutive 429s).
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.44",
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",