@m8i-51/shoal 0.1.12 → 0.1.13
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.
|
@@ -259,7 +259,7 @@ describe("computeWeightedSummary", () => {
|
|
|
259
259
|
|
|
260
260
|
// updateCoverage が 31件目を追加してトリムすることを確認
|
|
261
261
|
vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
262
|
-
vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify({ entries })
|
|
262
|
+
vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify({ entries }));
|
|
263
263
|
|
|
264
264
|
// computeWeightedSummary は entries をそのまま使うだけなので、
|
|
265
265
|
// 35件あってもエラーにならないことを確認
|
|
@@ -47,12 +47,14 @@ function makeAgentLog(overrides: Partial<AgentLog> = {}): AgentLog {
|
|
|
47
47
|
return {
|
|
48
48
|
agentId: "a1",
|
|
49
49
|
agentName: "Alice",
|
|
50
|
-
agentType: "
|
|
50
|
+
agentType: "explorer",
|
|
51
51
|
role: "tester",
|
|
52
52
|
status: "completed",
|
|
53
53
|
iterations: 3,
|
|
54
|
+
actions: [],
|
|
54
55
|
issuesPosted: [],
|
|
55
56
|
regressionChecks: [],
|
|
57
|
+
error: null,
|
|
56
58
|
startedAt: "2026-04-27T00:01:00.000Z",
|
|
57
59
|
completedAt: "2026-04-27T00:03:00.000Z",
|
|
58
60
|
...overrides,
|
|
@@ -172,7 +174,7 @@ describe("generateReport", () => {
|
|
|
172
174
|
|
|
173
175
|
it("regression checks がある場合 Progress セクションが表示される", () => {
|
|
174
176
|
const checks: RegressionCheck[] = [
|
|
175
|
-
{ issueNumber: 42, issueTitle: "Login button broken", status: "fixed" },
|
|
177
|
+
{ issueNumber: 42, issueTitle: "Login button broken", status: "fixed", note: "", regressionUrl: null },
|
|
176
178
|
];
|
|
177
179
|
const agent = makeAgentLog({ agentType: "regression", regressionChecks: checks });
|
|
178
180
|
generateReport(makeRunLog({ agents: [agent] }), [], emptyTriage, makeProductSpec(), [], new Map());
|
|
@@ -185,7 +187,7 @@ describe("generateReport", () => {
|
|
|
185
187
|
|
|
186
188
|
it("regression が再発した場合 regressed バッジが表示される", () => {
|
|
187
189
|
const checks: RegressionCheck[] = [
|
|
188
|
-
{ issueNumber: 7, issueTitle: "Crash on submit", status: "regressed" },
|
|
190
|
+
{ issueNumber: 7, issueTitle: "Crash on submit", status: "regressed", note: "", regressionUrl: null },
|
|
189
191
|
];
|
|
190
192
|
const agent = makeAgentLog({ agentType: "regression", regressionChecks: checks });
|
|
191
193
|
generateReport(makeRunLog({ agents: [agent] }), [], emptyTriage, makeProductSpec(), [], new Map());
|
package/framework/llm-client.ts
CHANGED
|
@@ -157,11 +157,11 @@ function fromOpenAIResponse(response: OpenAI.ChatCompletion): Message {
|
|
|
157
157
|
const content: ContentBlock[] = [];
|
|
158
158
|
|
|
159
159
|
if (choice.message.content) {
|
|
160
|
-
content.push({ type: "text", text: choice.message.content });
|
|
160
|
+
content.push({ type: "text", text: choice.message.content } as ContentBlock);
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
if (choice.message.tool_calls) {
|
|
164
|
-
for (const tc of choice.message.tool_calls) {
|
|
164
|
+
for (const tc of choice.message.tool_calls.filter((t) => t.type === "function")) {
|
|
165
165
|
let input: Record<string, unknown> = {};
|
|
166
166
|
try {
|
|
167
167
|
input = JSON.parse(tc.function.arguments);
|
|
@@ -172,7 +172,7 @@ function fromOpenAIResponse(response: OpenAI.ChatCompletion): Message {
|
|
|
172
172
|
id: tc.id,
|
|
173
173
|
name: tc.function.name,
|
|
174
174
|
input,
|
|
175
|
-
});
|
|
175
|
+
} as ContentBlock);
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
|
|
@@ -392,7 +392,7 @@ function fromCodexResponse(response: Record<string, unknown>): Message {
|
|
|
392
392
|
if (i.type === "message") {
|
|
393
393
|
for (const block of (i.content as unknown[]) ?? []) {
|
|
394
394
|
const b = block as Record<string, unknown>;
|
|
395
|
-
if (b.type === "output_text") content.push({ type: "text", text: b.text as string });
|
|
395
|
+
if (b.type === "output_text") content.push({ type: "text", text: b.text as string } as ContentBlock);
|
|
396
396
|
}
|
|
397
397
|
} else if (i.type === "function_call") {
|
|
398
398
|
hasToolUse = true;
|
|
@@ -403,7 +403,7 @@ function fromCodexResponse(response: Record<string, unknown>): Message {
|
|
|
403
403
|
id: (i.call_id ?? i.id) as string,
|
|
404
404
|
name: i.name as string,
|
|
405
405
|
input,
|
|
406
|
-
});
|
|
406
|
+
} as ContentBlock);
|
|
407
407
|
}
|
|
408
408
|
}
|
|
409
409
|
|
package/package.json
CHANGED