diff --git a/src/agents/system-prompt.e2e.test.ts b/src/agents/system-prompt.e2e.test.ts index 2fcd4220224..e2180a49561 100644 --- a/src/agents/system-prompt.e2e.test.ts +++ b/src/agents/system-prompt.e2e.test.ts @@ -48,6 +48,9 @@ describe("buildAgentSystemPrompt", () => { expect(prompt).not.toContain("## Silent Replies"); expect(prompt).not.toContain("## Heartbeats"); expect(prompt).toContain("## Safety"); + expect(prompt).toContain( + "For long waits, avoid rapid poll loops: use exec with enough yieldMs or process(action=poll, timeout=).", + ); expect(prompt).toContain("You have no independent goals"); expect(prompt).toContain("Prioritize safety and human oversight"); expect(prompt).toContain("if instructions conflict"); diff --git a/src/commands/status.update.test.ts b/src/commands/status.update.test.ts index 8f3f4e3aff4..8c29a37839f 100644 --- a/src/commands/status.update.test.ts +++ b/src/commands/status.update.test.ts @@ -1,7 +1,11 @@ import { describe, expect, it } from "vitest"; import type { UpdateCheckResult } from "../infra/update-check.js"; import { VERSION } from "../version.js"; -import { formatUpdateOneLiner, resolveUpdateAvailability } from "./status.update.js"; +import { + formatUpdateAvailableHint, + formatUpdateOneLiner, + resolveUpdateAvailability, +} from "./status.update.js"; function buildUpdate(partial: Partial): UpdateCheckResult { return { @@ -106,3 +110,38 @@ describe("formatUpdateOneLiner", () => { expect(formatUpdateOneLiner(update)).toBe("Update: npm · npm latest unknown · deps missing"); }); }); + +describe("formatUpdateAvailableHint", () => { + it("returns null when no update is available", () => { + const update = buildUpdate({ + installKind: "package", + packageManager: "pnpm", + registry: { latestVersion: VERSION }, + }); + + expect(formatUpdateAvailableHint(update)).toBeNull(); + }); + + it("renders git and registry update details", () => { + const latestVersion = nextMajorVersion(VERSION); + const update = buildUpdate({ + installKind: "git", + git: { + root: "/tmp/repo", + sha: null, + tag: null, + branch: "main", + upstream: "origin/main", + dirty: false, + ahead: 0, + behind: 2, + fetchOk: true, + }, + registry: { latestVersion }, + }); + + expect(formatUpdateAvailableHint(update)).toBe( + `Update available (git behind 2 · npm ${latestVersion}). Run: openclaw update`, + ); + }); +});