@kenkaiiii/ggcoder 4.13.0 → 4.13.1
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/dist/app-sidecar.js +158 -35
- package/dist/app-sidecar.js.map +1 -1
- package/dist/core/mcp/client.d.ts.map +1 -1
- package/dist/core/mcp/client.js +11 -2
- package/dist/core/mcp/client.js.map +1 -1
- package/dist/core/mcp/defaults.d.ts.map +1 -1
- package/dist/core/mcp/defaults.js +5 -0
- package/dist/core/mcp/defaults.js.map +1 -1
- package/dist/core/mcp/resolve-stdio.d.ts +27 -0
- package/dist/core/mcp/resolve-stdio.d.ts.map +1 -0
- package/dist/core/mcp/resolve-stdio.js +149 -0
- package/dist/core/mcp/resolve-stdio.js.map +1 -0
- package/dist/core/mcp/resolve-stdio.test.d.ts +2 -0
- package/dist/core/mcp/resolve-stdio.test.d.ts.map +1 -0
- package/dist/core/mcp/resolve-stdio.test.js +63 -0
- package/dist/core/mcp/resolve-stdio.test.js.map +1 -0
- package/dist/core/radio.d.ts +7 -2
- package/dist/core/radio.d.ts.map +1 -1
- package/dist/core/radio.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +10 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/code-skeleton.d.ts +29 -0
- package/dist/tools/code-skeleton.d.ts.map +1 -0
- package/dist/tools/code-skeleton.js +115 -0
- package/dist/tools/code-skeleton.js.map +1 -0
- package/dist/tools/code-skeleton.test.d.ts +2 -0
- package/dist/tools/code-skeleton.test.d.ts.map +1 -0
- package/dist/tools/code-skeleton.test.js +115 -0
- package/dist/tools/code-skeleton.test.js.map +1 -0
- package/dist/tools/compress-integration.test.d.ts +2 -0
- package/dist/tools/compress-integration.test.d.ts.map +1 -0
- package/dist/tools/compress-integration.test.js +59 -0
- package/dist/tools/compress-integration.test.js.map +1 -0
- package/dist/tools/compress.d.ts +57 -0
- package/dist/tools/compress.d.ts.map +1 -0
- package/dist/tools/compress.js +181 -0
- package/dist/tools/compress.js.map +1 -0
- package/dist/tools/compress.test.d.ts +2 -0
- package/dist/tools/compress.test.d.ts.map +1 -0
- package/dist/tools/compress.test.js +60 -0
- package/dist/tools/compress.test.js.map +1 -0
- package/dist/tools/task-output.d.ts.map +1 -1
- package/dist/tools/task-output.js +13 -3
- package/dist/tools/task-output.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { compressOutput } from "./compress.js";
|
|
3
|
+
describe("compressOutput", () => {
|
|
4
|
+
it("leaves small output untouched", () => {
|
|
5
|
+
const small = "line one\nline two\nline three";
|
|
6
|
+
const r = compressOutput(small);
|
|
7
|
+
expect(r.strategy).toBe("none");
|
|
8
|
+
expect(r.content).toBe(small);
|
|
9
|
+
});
|
|
10
|
+
it("keeps a FATAL line buried in the middle of a huge log", () => {
|
|
11
|
+
const lines = [];
|
|
12
|
+
for (let i = 0; i < 5000; i++) {
|
|
13
|
+
if (i === 2600)
|
|
14
|
+
lines.push("ERROR FATAL: heap allocation failed at chunk 8821");
|
|
15
|
+
else
|
|
16
|
+
lines.push(`INFO compiled module ${i} ok`);
|
|
17
|
+
}
|
|
18
|
+
const r = compressOutput(lines.join("\n"));
|
|
19
|
+
expect(r.strategy).toBe("log");
|
|
20
|
+
expect(r.content).toContain("FATAL: heap allocation failed at chunk 8821");
|
|
21
|
+
expect(r.compressedTokens).toBeLessThan(r.originalTokens * 0.2);
|
|
22
|
+
});
|
|
23
|
+
it("collapses repeated runs into a count", () => {
|
|
24
|
+
const lines = ["start"];
|
|
25
|
+
for (let i = 0; i < 200; i++)
|
|
26
|
+
lines.push("WARN retry: Connection refused: postgres:5432");
|
|
27
|
+
lines.push("ERROR giving up after 200 attempts");
|
|
28
|
+
const r = compressOutput(lines.join("\n"));
|
|
29
|
+
expect(r.content).toContain("Connection refused: postgres:5432");
|
|
30
|
+
expect(r.content).toContain("giving up after 200 attempts");
|
|
31
|
+
expect(r.content).toMatch(/×\d+/);
|
|
32
|
+
});
|
|
33
|
+
it("summarises a long JSON array but keeps shape and early matches", () => {
|
|
34
|
+
const matches = [];
|
|
35
|
+
for (let i = 0; i < 412; i++) {
|
|
36
|
+
matches.push({ path: i === 3 ? "src/core/auth.ts" : `src/gen/file-${i}.ts`, line: i });
|
|
37
|
+
}
|
|
38
|
+
const r = compressOutput(JSON.stringify({ total: 412, matches }, null, 2));
|
|
39
|
+
expect(r.strategy).toBe("json");
|
|
40
|
+
expect(r.content).toContain('"total": 412');
|
|
41
|
+
expect(r.content).toContain("src/core/auth.ts");
|
|
42
|
+
expect(r.content).toMatch(/more of 412 items omitted/);
|
|
43
|
+
expect(r.compressedTokens).toBeLessThan(r.originalTokens * 0.5);
|
|
44
|
+
});
|
|
45
|
+
it("preserves the failing assertion among thousands of passes", () => {
|
|
46
|
+
const lines = [];
|
|
47
|
+
for (let i = 0; i < 2000; i++) {
|
|
48
|
+
if (i === 1450) {
|
|
49
|
+
lines.push("✗ user-auth › rejects expired token");
|
|
50
|
+
lines.push(" AssertionError: Expected 401 but received 200");
|
|
51
|
+
}
|
|
52
|
+
else
|
|
53
|
+
lines.push(`✓ case ${i}`);
|
|
54
|
+
}
|
|
55
|
+
const r = compressOutput(lines.join("\n"));
|
|
56
|
+
expect(r.content).toContain("rejects expired token");
|
|
57
|
+
expect(r.content).toContain("Expected 401 but received 200");
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=compress.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compress.test.js","sourceRoot":"","sources":["../../src/tools/compress.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-output.d.ts","sourceRoot":"","sources":["../../src/tools/task-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"task-output.d.ts","sourceRoot":"","sources":["../../src/tools/task-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,QAAA,MAAM,gBAAgB;;;iBAMpB,CAAC;AAEH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,cAAc,GAC7B,SAAS,CAAC,OAAO,gBAAgB,CAAC,CAgCpC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { truncateTail } from "./truncate.js";
|
|
3
|
+
import { compressToolOutput } from "./compress.js";
|
|
4
|
+
import { writeOverflow } from "./overflow.js";
|
|
3
5
|
const TaskOutputParams = z.object({
|
|
4
6
|
id: z.string().describe("The background process ID"),
|
|
5
7
|
from_start: z
|
|
@@ -19,9 +21,17 @@ export function createTaskOutputTool(processManager) {
|
|
|
19
21
|
let output = result.output;
|
|
20
22
|
if (output) {
|
|
21
23
|
const truncated = truncateTail(output);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
if (truncated.truncated) {
|
|
25
|
+
// Over-limit: compress (keeps errors + head/tail) rather than a blind
|
|
26
|
+
// tail slice; overflow file preserves the full original.
|
|
27
|
+
const overflowPath = await writeOverflow(output, "task-output").catch(() => null);
|
|
28
|
+
const overflowNotice = overflowPath ? ` Full output: ${overflowPath}` : "";
|
|
29
|
+
const c = compressToolOutput(output);
|
|
30
|
+
output = `[${c.notice}${overflowNotice}]\n${c.content}`;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
output = truncated.content;
|
|
34
|
+
}
|
|
25
35
|
}
|
|
26
36
|
else {
|
|
27
37
|
output = "(no new output)";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-output.js","sourceRoot":"","sources":["../../src/tools/task-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"task-output.js","sourceRoot":"","sources":["../../src/tools/task-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACpD,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,kEAAkE,CAAC;CAChF,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAClC,cAA8B;IAE9B,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,wFAAwF;YACxF,iDAAiD;QACnD,UAAU,EAAE,gBAAgB;QAC5B,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE;YAC9B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAE/D,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,MAAM,CAAC,QAAQ,GAAG,CAAC;YAEjF,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACvC,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;oBACxB,sEAAsE;oBACtE,yDAAyD;oBACzD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBAClF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,iBAAiB,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3E,MAAM,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBACrC,MAAM,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,cAAc,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;gBAC7B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,iBAAiB,CAAC;YAC7B,CAAC;YAED,OAAO,WAAW,EAAE,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenkaiiii/ggcoder",
|
|
3
|
-
"version": "4.13.
|
|
3
|
+
"version": "4.13.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI coding agent with OAuth authentication for Anthropic, OpenAI, and Gemini",
|
|
6
6
|
"license": "MIT",
|
|
@@ -92,6 +92,7 @@
|
|
|
92
92
|
"dependencies": {
|
|
93
93
|
"@jridgewell/trace-mapping": "^0.3.25",
|
|
94
94
|
"@kenkaiiii/agent-home-sdk": "^0.3.8",
|
|
95
|
+
"@kenkaiiii/kencode-search": "^0.1.17",
|
|
95
96
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
96
97
|
"ansi-regex": "^6.2.2",
|
|
97
98
|
"chalk": "^5.6.2",
|
|
@@ -112,10 +113,10 @@
|
|
|
112
113
|
"typescript-language-server": "^5.3.0",
|
|
113
114
|
"wrap-ansi": "^10.0.0",
|
|
114
115
|
"zod": "^4.4.3",
|
|
115
|
-
"@kenkaiiii/gg-
|
|
116
|
-
"@kenkaiiii/gg-core": "4.13.
|
|
117
|
-
"@kenkaiiii/gg-
|
|
118
|
-
"@kenkaiiii/gg-
|
|
116
|
+
"@kenkaiiii/gg-agent": "4.13.1",
|
|
117
|
+
"@kenkaiiii/gg-core": "4.13.1",
|
|
118
|
+
"@kenkaiiii/gg-ai": "4.13.1",
|
|
119
|
+
"@kenkaiiii/gg-pixel": "4.3.101"
|
|
119
120
|
},
|
|
120
121
|
"optionalDependencies": {
|
|
121
122
|
"@huggingface/transformers": "^3.6.0",
|