gsd-pi 2.76.0-dev.97807402 → 2.76.0-dev.97f5583d9
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/resources/extensions/gsd/auto/phases.js +28 -1
- package/dist/resources/extensions/gsd/auto/session.js +12 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +16 -3
- package/dist/resources/extensions/gsd/auto-post-unit.js +24 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +14 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +21 -5
- package/dist/resources/extensions/gsd/auto.js +42 -10
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +11 -1
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +22 -1
- package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +3 -1
- package/dist/resources/extensions/gsd/safety/safety-harness.js +1 -1
- package/dist/resources/extensions/gsd/uok/plan-v2.js +20 -3
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/package.json +1 -1
- package/packages/mcp-server/dist/server.d.ts +7 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +23 -3
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/src/mcp-server.test.ts +30 -0
- package/packages/mcp-server/src/server.ts +43 -9
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +25 -4
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +8 -3
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +23 -4
- package/packages/pi-ai/src/providers/anthropic.ts +9 -3
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/src/resources/extensions/gsd/auto/loop-deps.ts +13 -0
- package/src/resources/extensions/gsd/auto/phases.ts +52 -1
- package/src/resources/extensions/gsd/auto/session.ts +22 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +16 -3
- package/src/resources/extensions/gsd/auto-post-unit.ts +28 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +28 -1
- package/src/resources/extensions/gsd/auto-worktree.ts +28 -11
- package/src/resources/extensions/gsd/auto.ts +46 -10
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +11 -1
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +22 -1
- package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +3 -1
- package/src/resources/extensions/gsd/safety/safety-harness.ts +3 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +23 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +26 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +2 -1
- /package/dist/web/standalone/.next/static/{pI48IF3dgfs0CBrYi2bh_ → lLdDRDspgYzfz0bJAmUSz}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{pI48IF3dgfs0CBrYi2bh_ → lLdDRDspgYzfz0bJAmUSz}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression tests for MiniMax error 2013 "function name or parameters is empty" (#4538).
|
|
3
|
+
*
|
|
4
|
+
* Root cause: the `fine-grained-tool-streaming-2025-05-14` beta header is sent to
|
|
5
|
+
* MiniMax. MiniMax's Anthropic-compatible API implements this beta by streaming the
|
|
6
|
+
* tool name as a delta (empty string in `content_block_start`). The empty name gets
|
|
7
|
+
* stored in conversation history and sent back on the next request, causing MiniMax
|
|
8
|
+
* to return error 2013.
|
|
9
|
+
*
|
|
10
|
+
* Fix: exclude MiniMax (and minimax-cn) from the fine-grained-tool-streaming beta,
|
|
11
|
+
* same as alibaba-coding-plan. Also guard against storing empty tool names.
|
|
12
|
+
*/
|
|
13
|
+
import test, { describe } from "node:test";
|
|
14
|
+
import assert from "node:assert/strict";
|
|
15
|
+
import { readFileSync } from "node:fs";
|
|
16
|
+
import { dirname, join } from "node:path";
|
|
17
|
+
import { fileURLToPath } from "node:url";
|
|
18
|
+
import { convertMessages } from "./anthropic-shared.js";
|
|
19
|
+
import type { AssistantMessage } from "../types.js";
|
|
20
|
+
|
|
21
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
const source = readFileSync(join(__dirname, "anthropic.ts"), "utf-8");
|
|
23
|
+
|
|
24
|
+
describe("MiniMax fine-grained-tool-streaming exclusion (#4538)", () => {
|
|
25
|
+
test("minimax is excluded from fine-grained-tool-streaming-2025-05-14 beta", () => {
|
|
26
|
+
// The skipBetaHeaders flag must include minimax so it never receives the
|
|
27
|
+
// fine-grained-tool-streaming beta that causes empty tool names.
|
|
28
|
+
assert.match(
|
|
29
|
+
source,
|
|
30
|
+
/skipBetaHeaders.*minimax/s,
|
|
31
|
+
"minimax must be included in skipBetaHeaders to suppress fine-grained-tool-streaming",
|
|
32
|
+
);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test("minimax-cn is excluded from fine-grained-tool-streaming-2025-05-14 beta", () => {
|
|
36
|
+
assert.match(
|
|
37
|
+
source,
|
|
38
|
+
/skipBetaHeaders.*minimax-cn/s,
|
|
39
|
+
"minimax-cn must be included in skipBetaHeaders to suppress fine-grained-tool-streaming",
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
describe("empty tool name guard in convertMessages (#4538)", () => {
|
|
45
|
+
// When fine-grained-tool-streaming causes a tool name to arrive as empty in
|
|
46
|
+
// content_block_start, we must not store '' in conversation history.
|
|
47
|
+
// convertMessages must skip tool_use blocks with empty/missing names.
|
|
48
|
+
const minimaxModel = {
|
|
49
|
+
id: "MiniMax-M2",
|
|
50
|
+
api: "anthropic-messages" as const,
|
|
51
|
+
provider: "minimax" as const,
|
|
52
|
+
baseUrl: "https://api.minimax.io/anthropic",
|
|
53
|
+
reasoning: true,
|
|
54
|
+
input: ["text"] as ["text"],
|
|
55
|
+
name: "MiniMax-M2",
|
|
56
|
+
cost: { input: 0.3, output: 1.2, cacheRead: 0, cacheWrite: 0 },
|
|
57
|
+
contextWindow: 196608,
|
|
58
|
+
maxTokens: 128000,
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
test("tool_use blocks with empty name are dropped from converted messages", () => {
|
|
62
|
+
const assistantMsg: AssistantMessage = {
|
|
63
|
+
role: "assistant",
|
|
64
|
+
content: [
|
|
65
|
+
{
|
|
66
|
+
type: "toolCall",
|
|
67
|
+
id: "toolu_01",
|
|
68
|
+
name: "", // empty — the bug: fine-grained streaming left name as ""
|
|
69
|
+
arguments: { path: "/foo" },
|
|
70
|
+
},
|
|
71
|
+
],
|
|
72
|
+
api: "anthropic-messages",
|
|
73
|
+
provider: "minimax",
|
|
74
|
+
model: "MiniMax-M2",
|
|
75
|
+
usage: { input: 1, output: 1, cacheRead: 0, cacheWrite: 0, totalTokens: 2, cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 } },
|
|
76
|
+
stopReason: "toolUse",
|
|
77
|
+
timestamp: Date.now(),
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
const messages = [assistantMsg];
|
|
81
|
+
const result = convertMessages(messages, minimaxModel, false, undefined);
|
|
82
|
+
|
|
83
|
+
// The assistant block with the empty-name toolCall must not appear in the output.
|
|
84
|
+
// If it does appear, its tool_use name must not be empty.
|
|
85
|
+
for (const param of result) {
|
|
86
|
+
if (param.role === "assistant" && Array.isArray(param.content)) {
|
|
87
|
+
for (const block of param.content) {
|
|
88
|
+
if ((block as any).type === "tool_use") {
|
|
89
|
+
assert.ok(
|
|
90
|
+
(block as any).name && (block as any).name.length > 0,
|
|
91
|
+
`tool_use block must never have an empty name; got: "${(block as any).name}"`,
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
});
|