dsh-agy-link 0.4.13 → 0.4.15
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 +25 -0
- package/README.md +12 -4
- package/dist/client.js +10 -2
- package/dist/index.js +343 -146
- package/docs/assets/dashboard.png +0 -0
- package/docs/assets/model-picker.png +0 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.15 (2026-08-24)
|
|
4
|
+
|
|
5
|
+
- **Quota Polling Risk-Exposure Minimization (root-cause follow-up).**
|
|
6
|
+
- **Poll Interval 5min → 15min (configurable)**: New `quotaPollIntervalMs` config (env `DSH_AGY_QUOTA_POLL_INTERVAL_MS`, clamped to >= 60s) cuts background `v1internal` polling volume by 3x — the poller was the last remaining high-frequency network surface after the CLI-level hardening.
|
|
7
|
+
- **Restricted-Account Poll Gating**: Automatic polling now skips disabled, auth-quarantined (`invalid_grant`) and 429-cooldown accounts (`shouldPollAccount`), so the poller never keeps probing Google endpoints for accounts already known to be limited. Manual UI force-refresh still refreshes everything.
|
|
8
|
+
- **Userinfo Endpoint Called Only When Email Unknown**: The primary account previously hit the OAuth userinfo endpoint on every poll cycle just to detect account switching; that detection now rides the local log scan (`detectEmailFromAgyLogs`, zero network), eliminating one network call per cycle.
|
|
9
|
+
|
|
10
|
+
## 0.4.14 (2026-08-24)
|
|
11
|
+
|
|
12
|
+
- **Hardened 429 Rate Limit Cooldown & Circuit Breaker (Anti-Risk Control).**
|
|
13
|
+
- **Accurate Reset Duration Parsing**: Added `parseResetDurationMs` to accurately extract server reset countdowns from strings like `"Resets in 21m25s"`, `"Resets in 2h26m6s"`, `"Resets in 45s"`, or verbose duration phrases.
|
|
14
|
+
- **Safety Cooldown Buffer**: Account failures on 429 now automatically apply the parsed reset duration + a 10s safety buffer (or a 15-minute minimum backoff), preventing accounts from re-triggering rate limiters at the exact millisecond of reset.
|
|
15
|
+
- **Non-Retryable 429 Classification**: Identified 429 / quota exhaustion errors from stderr / stdout and classified them as non-retryable `Err.AGY_ERROR` instead of `Err.PROCESS_EXIT`, stopping DSH from executing automatic rapid retries on exhausted accounts.
|
|
16
|
+
- **Organic Spacing Jitter, In-Flight Debounce & Burst Protection.**
|
|
17
|
+
- **Human-like Timing Jitter**: Added randomized timing jitter (`+100ms ~ 400ms`) on top of the 500ms single-account throttle to produce natural non-periodic traffic distributions that evade automated queue detection.
|
|
18
|
+
- **In-Flight Session Debounce**: Rejects identical prompt submissions within a 3-second window while an existing request is active (`Err.BUSY`), preventing frontend repeat loops and double-clicks from hammering the backend.
|
|
19
|
+
- **Sliding-Window Rate Limiter**: Added configurable `rateLimitPerMinute` protection across all sessions to prevent runaway `/goal` autonomous loops from draining daily quotas.
|
|
20
|
+
- **Account Health Quarantine & Self-Healing.**
|
|
21
|
+
- **Invalid Grant Quarantine**: Automatically detects `invalid_grant` / revoked OAuth tokens during refresh and flags the account as `auth_required`, immediately taking it out of pool selection and alerting the user in UI.
|
|
22
|
+
- **Visual Health Dashboard**: Added red alert badges (`需重新登录`) and health indicators on account cards.
|
|
23
|
+
- **Automatic Fallback Model**: Supports `autoFallbackModel` to smoothly route requests to available lower-tier models when high-tier models are exhausted.
|
|
24
|
+
- **System Hygiene & Telemetry Minimization.**
|
|
25
|
+
- **Telemetry Opt-out**: Injected telemetry suppression flags (`DO_NOT_TRACK`, `DISABLE_TELEMETRY`) into child process environments to reduce unnecessary background event tracking to Google `cclog`.
|
|
26
|
+
- **Automated Old Log Purge**: Added `sweepOldLogs` on plugin boot to automatically sweep CLI log files older than 7 days across system and isolated account directories.
|
|
27
|
+
|
|
3
28
|
## 0.4.13 (2026-08-21)
|
|
4
29
|
|
|
5
30
|
- **Fixed Multimodal Image Attachment Staging & Direct Disk Fallback.**
|
package/README.md
CHANGED
|
@@ -21,10 +21,14 @@
|
|
|
21
21
|
|
|
22
22
|
# 中文
|
|
23
23
|
|
|
24
|
-
> 全网统一昵称:**小斯syzs** · B站 [@小斯syzs](https://space.bilibili.com/390211071) · 抖音 · 小红书 · 快手(全网同名)
|
|
25
|
-
|
|
26
24
|
把 **Google Antigravity 模型接入 DeepSeek Harness(DSH)** —— 支持**多账号智能池化轮换**、**官方双 Bucket 配额监控(5小时滚动 + 7天周额度)**、**浏览器免粘贴一键登录**与**浅色/深色主题高对比度自适应**,由官方未修改的 `agy` CLI 驱动,完整支持流式输出、思考折叠(thinking)、原生工具卡片与精确 token 用量。
|
|
27
25
|
|
|
26
|
+
<p align="center">
|
|
27
|
+
<img src="./docs/assets/dashboard.png" alt="Antigravity 管理控制台 - 多账号池化与配额监控" width="460" />
|
|
28
|
+
|
|
29
|
+
<img src="./docs/assets/model-picker.png" alt="DSH 模型选择器中的 Antigravity 模型列表" width="220" />
|
|
30
|
+
</p>
|
|
31
|
+
|
|
28
32
|
---
|
|
29
33
|
|
|
30
34
|
> 🚨 **【国内用户核心前置:必须开启系统代理 / TUN 模式!】**
|
|
@@ -161,10 +165,14 @@ MIT License.
|
|
|
161
165
|
|
|
162
166
|
# English
|
|
163
167
|
|
|
164
|
-
> Known online as **小斯syzs** — Bilibili [@小斯syzs](https://space.bilibili.com/390211071) · Douyin · Xiaohongshu · Kuaishou (same handle across all platforms).
|
|
165
|
-
|
|
166
168
|
Bring **Google Antigravity models into DeepSeek Harness (DSH)** — featuring **Multi-Account Pooling & Automatic Rotation**, **Official Dual-Bucket Quota Tracking (5h Rolling + 7d Weekly)**, **Zero-Paste In-GUI OAuth Login**, and **Theme-Adaptive High-Contrast UI**, powered by the official unmodified `agy` CLI.
|
|
167
169
|
|
|
170
|
+
<p align="center">
|
|
171
|
+
<img src="./docs/assets/dashboard.png" alt="Antigravity Management Console - Multi-Account Pool & Quota Monitor" width="460" />
|
|
172
|
+
|
|
173
|
+
<img src="./docs/assets/model-picker.png" alt="Antigravity Model Lineup in DSH Model Picker" width="220" />
|
|
174
|
+
</p>
|
|
175
|
+
|
|
168
176
|
---
|
|
169
177
|
|
|
170
178
|
> 🚨 **【Important: System Proxy / VPN / TUN Mode Required in Restricted Regions】**
|
package/dist/client.js
CHANGED
|
@@ -1057,7 +1057,8 @@ body.dark,
|
|
|
1057
1057
|
const renderedAccountCards = accounts.map((acc) => {
|
|
1058
1058
|
const isPrimary = acc.id === pool?.primaryAccountId;
|
|
1059
1059
|
const hasCooldown = Object.entries(acc.cooldowns).some(([, cd]) => cd && cd.cooldownUntil > Date.now());
|
|
1060
|
-
const
|
|
1060
|
+
const isAuthRequired = acc.authRequired;
|
|
1061
|
+
const dotColor = !acc.enabled ? "#64748b" : isAuthRequired ? "#ef4444" : hasCooldown ? "#f59e0b" : "#10b981";
|
|
1061
1062
|
const isEditingProxy = editingProxyId === acc.id;
|
|
1062
1063
|
const isExpanded = expandedModels[acc.id] ?? false;
|
|
1063
1064
|
const cardStyle = isPrimary ? { ...S.cardPrimary } : { ...S.card };
|
|
@@ -1102,7 +1103,14 @@ body.dark,
|
|
|
1102
1103
|
fontWeight: 700,
|
|
1103
1104
|
fontSize: "13.5px",
|
|
1104
1105
|
color: "var(--agy-text-primary)"
|
|
1105
|
-
} }, acc.alias),
|
|
1106
|
+
} }, acc.alias), isAuthRequired ? h("span", { style: {
|
|
1107
|
+
...S.badgeTag,
|
|
1108
|
+
background: "var(--agy-badge-email-bg)",
|
|
1109
|
+
color: "#ef4444",
|
|
1110
|
+
borderColor: "#fca5a5",
|
|
1111
|
+
gap: "4px",
|
|
1112
|
+
fontWeight: 700
|
|
1113
|
+
} }, uiIcon("alert", 11, "#ef4444"), "需重新登录") : null, acc.email ? h("span", { style: {
|
|
1106
1114
|
...S.badgeTag,
|
|
1107
1115
|
background: "var(--agy-badge-email-bg)",
|
|
1108
1116
|
color: "var(--agy-badge-email-text)",
|