dsh-agy-link 0.4.79 → 0.4.81
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 +28 -0
- package/dist/index.js +13 -0
- package/docs/SECURITY-NOTES.md +4 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.81 (2026-10-29)
|
|
4
|
+
|
|
5
|
+
### English
|
|
6
|
+
|
|
7
|
+
- **Fix(parser): bound a runaway un-newline-terminated stdout buffer.**
|
|
8
|
+
- `StreamJsonParser.feed()` only split on `\n`, so a malformed/runaway stream that produced megabytes with no newline (or one giant partial line) grew the internal buffer without bound. A partial line over `MAX_STREAM_LINE_BYTES` (8 MiB) is now dropped and surfaced as a `garbage` event, keeping memory bounded; well-formed newline-delimited events are unaffected. Adds a regression test.
|
|
9
|
+
|
|
10
|
+
### 中文
|
|
11
|
+
|
|
12
|
+
- **修复(parser):限制无换行结尾的超大 stdout 缓冲。**
|
|
13
|
+
- `StreamJsonParser.feed()` 只按 `\n` 切分,若输出异常/失控产生数 MB 且不含换行(或一整条超长未完成的行),内部缓冲会无界增长。现在超过 `MAX_STREAM_LINE_BYTES`(8 MiB)的未完成行会被丢弃并以 `garbage` 事件上报,内存保持有界;正常的按行 NDJSON 事件不受影响。补充回归测试。
|
|
14
|
+
|
|
15
|
+
**Full Changelog**: https://github.com/amlyczz/dsh-agy-link/compare/v0.4.80...v0.4.81
|
|
16
|
+
|
|
17
|
+
## 0.4.80 (2026-10-29)
|
|
18
|
+
|
|
19
|
+
### English
|
|
20
|
+
|
|
21
|
+
- **Security(doctor): redact OIDC/JWT id_tokens and more provider secret shapes in `/agy doctor`.**
|
|
22
|
+
- `redactLine()` already stripped `ya29.*`, `1//0…` refresh tokens, `AIza…` keys, `Bearer` headers, `4/` codes and proxy credentials, but a Google `id_token` (a JWT `header.payload.signature`), `sk-…` provider keys, and `GOCSPX-…` OAuth client secrets passed through verbatim when agy echoed them into the log ring buffer. All three are now redacted; ordinary text is preserved. Adds regression tests.
|
|
23
|
+
|
|
24
|
+
### 中文
|
|
25
|
+
|
|
26
|
+
- **安全(doctor):`/agy doctor` 额外脱敏 OIDC/JWT id_token 及更多密钥形态。**
|
|
27
|
+
- `redactLine()` 原本已脱敏 `ya29.*`、`1//0…` refresh token、`AIza…` key、`Bearer` 头、`4/` 授权码与代理凭证,但 Google `id_token`(JWT `header.payload.signature`)、`sk-…` 提供方密钥、`GOCSPX-…` OAuth client secret 在 agy 回显进日志环时仍会原样落入报告。现三类均已脱敏,普通文本保持不变。补充回归测试。
|
|
28
|
+
|
|
29
|
+
**Full Changelog**: https://github.com/amlyczz/dsh-agy-link/compare/v0.4.79...v0.4.80
|
|
30
|
+
|
|
3
31
|
## 0.4.79 (2026-10-29)
|
|
4
32
|
|
|
5
33
|
### English
|
package/dist/index.js
CHANGED
|
@@ -2728,6 +2728,16 @@ var StreamJsonParser = class {
|
|
|
2728
2728
|
const ev = this.takeLine(line);
|
|
2729
2729
|
if (ev) out.push(ev);
|
|
2730
2730
|
}
|
|
2731
|
+
if (this.buffer.length > 8388608) {
|
|
2732
|
+
const dropped = this.buffer.length;
|
|
2733
|
+
this.buffer = "";
|
|
2734
|
+
this.stats.garbage++;
|
|
2735
|
+
this.stats.consecutiveGarbage++;
|
|
2736
|
+
out.push({
|
|
2737
|
+
kind: "garbage",
|
|
2738
|
+
line: "<dropped over-long line: " + dropped + " bytes>"
|
|
2739
|
+
});
|
|
2740
|
+
}
|
|
2731
2741
|
return out;
|
|
2732
2742
|
}
|
|
2733
2743
|
/** Flush a trailing line without a newline (agy killed mid-write). */
|
|
@@ -32399,6 +32409,9 @@ function redactLine(line) {
|
|
|
32399
32409
|
out = out.replace(/Bearer\s+\S+/gi, "Bearer <redacted>");
|
|
32400
32410
|
out = out.replace(/\b1\/\/0[A-Za-z0-9._-]{10,}/g, "<oauth-refresh-token-redacted>");
|
|
32401
32411
|
out = out.replace(/\bAIza[0-9A-Za-z_-]{30,}\b/g, "<api-key-redacted>");
|
|
32412
|
+
out = out.replace(/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\b/g, "<jwt-redacted>");
|
|
32413
|
+
out = out.replace(/\bsk-[A-Za-z0-9_-]{16,}\b/g, "<api-key-redacted>");
|
|
32414
|
+
out = out.replace(/\bGOCSPX-[A-Za-z0-9_-]{10,}\b/g, "<api-key-redacted>");
|
|
32402
32415
|
out = out.replace(/\b(?:https?|socks[45]):\/\/[^\s/]*:[^\s/@]*@[^\s]+/gi, "<proxy-url-redacted>");
|
|
32403
32416
|
return out;
|
|
32404
32417
|
}
|
package/docs/SECURITY-NOTES.md
CHANGED
|
@@ -42,8 +42,10 @@ choice, not a fallback applied by this plugin.
|
|
|
42
42
|
## Report hygiene
|
|
43
43
|
|
|
44
44
|
`/agy doctor` writes its report with redaction: Google auth URLs,
|
|
45
|
-
`4/...` authorization codes, `ya29.*` tokens,
|
|
46
|
-
|
|
45
|
+
`4/...` authorization codes, `ya29.*` access tokens, `1//0…` refresh tokens,
|
|
46
|
+
OIDC/JWT `id_token`s, `AIza…`/`sk-…`/`GOCSPX-…` API keys, credentialed proxy
|
|
47
|
+
URLs, and `Bearer` headers are stripped before the file hits disk. Still read it
|
|
48
|
+
before attaching.
|
|
47
49
|
|
|
48
50
|
## HTTP surfaces and request-body caps
|
|
49
51
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-agy-link",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.81",
|
|
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",
|