dsh-agy-link 0.4.12 → 0.4.14

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 CHANGED
@@ -1,5 +1,30 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.4.14 (2026-08-24)
4
+
5
+ - **Hardened 429 Rate Limit Cooldown & Circuit Breaker (Anti-Risk Control).**
6
+ - **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.
7
+ - **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.
8
+ - **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.
9
+ - **Organic Spacing Jitter, In-Flight Debounce & Burst Protection.**
10
+ - **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.
11
+ - **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.
12
+ - **Sliding-Window Rate Limiter**: Added configurable `rateLimitPerMinute` protection across all sessions to prevent runaway `/goal` autonomous loops from draining daily quotas.
13
+ - **Account Health Quarantine & Self-Healing.**
14
+ - **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.
15
+ - **Visual Health Dashboard**: Added red alert badges (`需重新登录`) and health indicators on account cards.
16
+ - **Automatic Fallback Model**: Supports `autoFallbackModel` to smoothly route requests to available lower-tier models when high-tier models are exhausted.
17
+ - **System Hygiene & Telemetry Minimization.**
18
+ - **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`.
19
+ - **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.
20
+
21
+ ## 0.4.13 (2026-08-21)
22
+
23
+ - **Fixed Multimodal Image Attachment Staging & Direct Disk Fallback.**
24
+ - **Dynamic Attachment Service Lookup**: Fixed Cordis proxy boundary issue where `(ctx as any).attachments` evaluated to `undefined` when not statically declared in `inject`; now resolves via `ctx.get('attachments')`.
25
+ - **Local Storage Direct Disk Fallback**: Added direct fallback to read from DSH's local content-addressed storage (`~/.dsh/attachments/v1/objects/<prefix>/<id>`), guaranteeing 100% reliable image byte extraction even if service bindings are uninitialized.
26
+ - **Explicit Vision Tool Directives**: Enhanced prompt staging lines to explicitly reference the `view_file` tool and absolute file path (`[image attached: "..." staged at ... Inspect it using the view_file tool with AbsolutePath: "..."]`), ensuring `agy` proactively inspects attached images even when the user sends an image without accompanying text.
27
+
3
28
  ## 0.4.12 (2026-08-21)
4
29
 
5
30
  - **Adaptive Tool Dispatch for Both Standard / Native Mode and Code Mode.**
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
+ &nbsp;&nbsp;
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
+ &nbsp;&nbsp;
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 dotColor = !acc.enabled ? "#64748b" : hasCooldown ? "#f59e0b" : "#10b981";
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), acc.email ? h("span", { style: {
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)",