





















@@ -5,18 +5,20 @@ import fs from "node:fs/promises";
55import os from "node:os";
66import path from "node:path";
77import { clearConfigCache } from "../../dist/config/config.js";
8-import type { OpenClawConfig } from "../../dist/config/types.openclaw.js";
98import { runCrestodian } from "../../dist/crestodian/crestodian.js";
10-import type { RuntimeEnv } from "../../dist/runtime.js";
11912-function assert(condition: unknown, message: string): asserts condition {
10+function assert(condition, message) {
1311if (!condition) {
1412throw new Error(message);
1513}
1614}
171518-function createRuntime(): { runtime: RuntimeEnv; lines: string[] } {
19-const lines: string[] = [];
16+function assertOutputIncludes(output, expected, message) {
17+assert(output.includes(expected), `${message}\n\nCaptured Crestodian output:\n${output}`);
18+}
19+20+function createRuntime() {
21+const lines = [];
2022return {
2123 lines,
2224runtime: {
@@ -29,7 +31,7 @@ function createRuntime(): { runtime: RuntimeEnv; lines: string[] } {
2931};
3032}
313332-async function installFakeClaudeCli(fakeBinDir: string, promptLogPath: string): Promise<void> {
34+async function installFakeClaudeCli(fakeBinDir, promptLogPath) {
3335await fs.mkdir(fakeBinDir, { recursive: true });
3436const scriptPath = path.join(fakeBinDir, "claude");
3537await fs.writeFile(
@@ -75,20 +77,24 @@ async function main() {
7577runtime.runtime,
7678);
7779const output = runtime.lines.join("\n");
78-assert(
79-output.includes("[crestodian] planner: claude-cli/claude-opus-4-7"),
80+assertOutputIncludes(
81+output,
82+"[crestodian] planner: claude-cli/claude-opus-4-7",
8083"configless planner did not use Claude CLI fallback",
8184);
82-assert(
83-output.includes("Fake Claude planner selected a typed model update."),
85+assertOutputIncludes(
86+output,
87+"Fake Claude planner selected a typed model update.",
8488"planner reply was not surfaced",
8589);
86-assert(
87-output.includes("[crestodian] interpreted: set default model openai/gpt-5.2"),
90+assertOutputIncludes(
91+output,
92+"[crestodian] interpreted: set default model openai/gpt-5.2",
8893"planner command was not interpreted",
8994);
90-assert(
91-output.includes("[crestodian] done: config.setDefaultModel"),
95+assertOutputIncludes(
96+output,
97+"[crestodian] done: config.setDefaultModel",
9298"planned model update did not apply",
9399);
94100@@ -99,7 +105,7 @@ async function main() {
99105"planner prompt did not include docs reference context",
100106);
101107102-const config = JSON.parse(await fs.readFile(configPath, "utf8")) as OpenClawConfig;
108+const config = JSON.parse(await fs.readFile(configPath, "utf8"));
103109assert(
104110config.agents?.defaults?.model &&
105111typeof config.agents.defaults.model === "object" &&
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。